From dd8140ab46c4b8070eae6006d898cad975925dab Mon Sep 17 00:00:00 2001 From: Anton Gladky Date: Mon, 15 Aug 2016 21:35:48 +0200 Subject: [PATCH] Imported Upstream version 2.1+repack1 --- .gitattributes | 22 + .gitignore | 12 + .gitmodules | 13 + .travis.yml | 56 + CHANGELOG.md | 111 + CMakeLists.txt | 190 + COPYING.txt | 675 + README.md | 149 + appveyor.yml | 37 + cmake/FindSpaceWare.cmake | 28 + cmake/GetGitCommitHash.cmake | 35 + cmake/MacOSXBundleInfo.plist.in | 47 + cmake/Toolchain-mingw32.cmake | 13 + cmake/Toolchain-mingw64.cmake | 13 + cmake/c_flag_overrides.cmake | 6 + cmake/cxx_flag_overrides.cmake | 6 + exposed/CDemo.c | 274 + exposed/CMakeLists.txt | 8 + exposed/DOC.txt | 467 + exposed/VbDemo.vb | 1252 + extlib/libdxfrw/CMakeLists.txt | 75 + extlib/libdxfrw/drw_base.h | 480 + extlib/libdxfrw/drw_classes.cpp | 115 + extlib/libdxfrw/drw_classes.h | 58 + extlib/libdxfrw/drw_entities.cpp | 3064 +++ extlib/libdxfrw/drw_entities.h | 1572 ++ extlib/libdxfrw/drw_header.cpp | 2476 ++ extlib/libdxfrw/drw_header.h | 107 + extlib/libdxfrw/drw_interface.h | 191 + extlib/libdxfrw/drw_objects.cpp | 1235 + extlib/libdxfrw/drw_objects.h | 772 + extlib/libdxfrw/intern/drw_cptable932.h | 7812 ++++++ extlib/libdxfrw/intern/drw_cptable936.h | 21943 ++++++++++++++++ extlib/libdxfrw/intern/drw_cptable949.h | 17199 ++++++++++++ extlib/libdxfrw/intern/drw_cptable950.h | 13654 ++++++++++ extlib/libdxfrw/intern/drw_cptables.h | 1330 + extlib/libdxfrw/intern/drw_dbg.cpp | 164 + extlib/libdxfrw/intern/drw_dbg.h | 61 + extlib/libdxfrw/intern/drw_textcodec.cpp | 535 + extlib/libdxfrw/intern/drw_textcodec.h | 91 + extlib/libdxfrw/intern/dwgbuffer.cpp | 923 + extlib/libdxfrw/intern/dwgbuffer.h | 155 + extlib/libdxfrw/intern/dwgreader.cpp | 1294 + extlib/libdxfrw/intern/dwgreader.h | 203 + extlib/libdxfrw/intern/dwgreader15.cpp | 198 + extlib/libdxfrw/intern/dwgreader15.h | 47 + extlib/libdxfrw/intern/dwgreader18.cpp | 594 + extlib/libdxfrw/intern/dwgreader18.h | 99 + extlib/libdxfrw/intern/dwgreader21.cpp | 487 + extlib/libdxfrw/intern/dwgreader21.h | 65 + extlib/libdxfrw/intern/dwgreader24.cpp | 43 + extlib/libdxfrw/intern/dwgreader24.h | 56 + extlib/libdxfrw/intern/dwgreader27.cpp | 43 + extlib/libdxfrw/intern/dwgreader27.h | 55 + extlib/libdxfrw/intern/dwgutil.cpp | 694 + extlib/libdxfrw/intern/dwgutil.h | 91 + extlib/libdxfrw/intern/dxfreader.cpp | 263 + extlib/libdxfrw/intern/dxfreader.h | 99 + extlib/libdxfrw/intern/dxfwriter.cpp | 269 + extlib/libdxfrw/intern/dxfwriter.h | 64 + extlib/libdxfrw/intern/rscodec.cpp | 401 + extlib/libdxfrw/intern/rscodec.h | 69 + extlib/libdxfrw/libdwgr.cpp | 314 + extlib/libdxfrw/libdwgr.h | 51 + extlib/libdxfrw/libdxfrw.cpp | 2785 ++ extlib/libdxfrw/libdxfrw.h | 148 + extlib/si/si.h | 373 + extlib/si/siSync.h | 206 + extlib/si/siSyncPriv.h | 127 + extlib/si/siapp.h | 121 + extlib/si/siapp.lib | Bin 0 -> 63646 bytes extlib/si/spwdata.h | 63 + extlib/si/spwerror.h | 64 + extlib/si/spwmacro.h | 48 + include/slvs.h | 404 + src/CMakeLists.txt | 405 + src/bsp.cpp | 682 + src/clipboard.cpp | 444 + src/cocoa/AppIcon.iconset/icon_128x128.png | Bin 0 -> 891 bytes src/cocoa/AppIcon.iconset/icon_128x128@2x.png | Bin 0 -> 1303 bytes src/cocoa/AppIcon.iconset/icon_16x16.png | Bin 0 -> 586 bytes src/cocoa/AppIcon.iconset/icon_16x16@2x.png | Bin 0 -> 626 bytes src/cocoa/AppIcon.iconset/icon_256x256.png | Bin 0 -> 1303 bytes src/cocoa/AppIcon.iconset/icon_256x256@2x.png | Bin 0 -> 2506 bytes src/cocoa/AppIcon.iconset/icon_32x32.png | Bin 0 -> 626 bytes src/cocoa/AppIcon.iconset/icon_32x32@2x.png | Bin 0 -> 746 bytes src/cocoa/AppIcon.iconset/icon_512x512.png | Bin 0 -> 2506 bytes src/cocoa/AppIcon.iconset/icon_512x512@2x.png | Bin 0 -> 6490 bytes src/cocoa/MainMenu.xib | 65 + src/cocoa/SaveFormatAccessory.xib | 50 + src/cocoa/cocoamain.mm | 1366 + src/config.h.in | 13 + src/confscreen.cpp | 463 + src/constraint.cpp | 740 + src/constrainteq.cpp | 794 + src/describescreen.cpp | 377 + src/draw.cpp | 872 + src/drawconstraint.cpp | 1250 + src/drawentity.cpp | 724 + src/dsc.h | 528 + src/entity.cpp | 793 + src/export.cpp | 1550 ++ src/exportstep.cpp | 373 + src/exportvector.cpp | 1360 + src/expr.cpp | 808 + src/expr.h | 169 + src/file.cpp | 869 + src/fonts/private/0-check-false.png | Bin 0 -> 218 bytes src/fonts/private/1-check-true.png | Bin 0 -> 243 bytes src/fonts/private/2-radio-false.png | Bin 0 -> 228 bytes src/fonts/private/3-radio-true.png | Bin 0 -> 231 bytes src/fonts/private/4-stipple-dot.png | Bin 0 -> 936 bytes src/fonts/private/5-stipple-dash-long.png | Bin 0 -> 932 bytes src/fonts/private/6-stipple-dash.png | Bin 0 -> 932 bytes src/fonts/private/7-stipple-zigzag.png | Bin 0 -> 950 bytes src/fonts/unicode.lff.gz | Bin 0 -> 475974 bytes src/generate.cpp | 541 + src/glhelper.cpp | 921 + src/graphicswin.cpp | 1089 + src/group.cpp | 906 + src/groupmesh.cpp | 615 + src/gtk/gtkmain.cpp | 1613 ++ src/icons/angle.png | Bin 0 -> 27359 bytes src/icons/arc.png | Bin 0 -> 27478 bytes src/icons/assemble.png | Bin 0 -> 27011 bytes src/icons/bezier.png | Bin 0 -> 27089 bytes src/icons/circle.png | Bin 0 -> 27376 bytes src/icons/constraint.png | Bin 0 -> 26545 bytes src/icons/construction.png | Bin 0 -> 27069 bytes src/icons/edges.png | Bin 0 -> 27374 bytes src/icons/equal.png | Bin 0 -> 27427 bytes src/icons/extrude.png | Bin 0 -> 27030 bytes src/icons/faces.png | Bin 0 -> 609 bytes src/icons/hidden-lines.png | Bin 0 -> 544 bytes src/icons/horiz.png | Bin 0 -> 26274 bytes src/icons/in3d.png | Bin 0 -> 26608 bytes src/icons/lathe.png | Bin 0 -> 171 bytes src/icons/length.png | Bin 0 -> 26577 bytes src/icons/line.png | Bin 0 -> 26295 bytes src/icons/mesh.png | Bin 0 -> 28445 bytes src/icons/normal.png | Bin 0 -> 26211 bytes src/icons/ontoworkplane.png | Bin 0 -> 26007 bytes src/icons/other-supp.png | Bin 0 -> 27260 bytes src/icons/outlines.png | Bin 0 -> 930 bytes src/icons/parallel.png | Bin 0 -> 26455 bytes src/icons/perpendicular.png | Bin 0 -> 26400 bytes src/icons/point.png | Bin 0 -> 25742 bytes src/icons/pointonx.png | Bin 0 -> 26848 bytes src/icons/rectangle.png | Bin 0 -> 26335 bytes src/icons/ref.png | Bin 0 -> 25761 bytes src/icons/same-orientation.png | Bin 0 -> 26407 bytes src/icons/shaded.png | Bin 0 -> 317 bytes src/icons/sketch-in-3d.png | Bin 0 -> 26669 bytes src/icons/sketch-in-plane.png | Bin 0 -> 26671 bytes src/icons/step-rotate.png | Bin 0 -> 27352 bytes src/icons/step-translate.png | Bin 0 -> 26253 bytes src/icons/symmetric.png | Bin 0 -> 26180 bytes src/icons/tangent-arc.png | Bin 0 -> 27250 bytes src/icons/text.png | Bin 0 -> 26716 bytes src/icons/trim.png | Bin 0 -> 26748 bytes src/icons/vert.png | Bin 0 -> 26517 bytes src/icons/workplane.png | Bin 0 -> 395 bytes src/importdxf.cpp | 932 + src/lib.cpp | 263 + src/mesh.cpp | 1073 + src/modify.cpp | 670 + src/mouse.cpp | 1498 ++ src/polygon.cpp | 865 + src/polygon.h | 337 + src/request.cpp | 205 + src/sketch.h | 916 + src/solvespace.cpp | 882 + src/solvespace.h | 966 + src/srf/boolean.cpp | 956 + src/srf/curve.cpp | 848 + src/srf/merge.cpp | 127 + src/srf/ratpoly.cpp | 615 + src/srf/raycast.cpp | 611 + src/srf/surface.cpp | 880 + src/srf/surface.h | 423 + src/srf/surfinter.cpp | 525 + src/srf/triangulate.cpp | 505 + src/style.cpp | 956 + src/system.cpp | 540 + src/textscreens.cpp | 806 + src/textwin.cpp | 1050 + src/toolbar.cpp | 248 + src/ttf.cpp | 301 + src/ttf.h | 40 + src/ui.h | 745 + src/undoredo.cpp | 170 + src/unix/gloffscreen.cpp | 86 + src/unix/gloffscreen.h | 36 + src/unix/solvespace-16x16.png | Bin 0 -> 336 bytes src/unix/solvespace-16x16.xpm | 27 + src/unix/solvespace-24x24.png | Bin 0 -> 338 bytes src/unix/solvespace-24x24.xpm | 35 + src/unix/solvespace-32x32.png | Bin 0 -> 348 bytes src/unix/solvespace-32x32.xpm | 43 + src/unix/solvespace-48x48.png | Bin 0 -> 352 bytes src/unix/solvespace-48x48.xpm | 59 + src/unix/solvespace.desktop | 9 + src/unix/unixutil.cpp | 112 + src/util.cpp | 1053 + src/view.cpp | 116 + src/win32/icon.ico | Bin 0 -> 29926 bytes src/win32/manifest.xml | 22 + src/win32/resource.rc | 6 + src/win32/w32main.cpp | 1484 ++ src/win32/w32util.cpp | 134 + tools/CMakeLists.txt | 23 + tools/lff2c.cpp | 410 + tools/png2c.cpp | 122 + tools/unifont2c.cpp | 261 + wishlist.txt | 19 + 215 files changed, 130654 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 .travis.yml create mode 100644 CHANGELOG.md create mode 100644 CMakeLists.txt create mode 100644 COPYING.txt create mode 100644 README.md create mode 100644 appveyor.yml create mode 100644 cmake/FindSpaceWare.cmake create mode 100644 cmake/GetGitCommitHash.cmake create mode 100644 cmake/MacOSXBundleInfo.plist.in create mode 100644 cmake/Toolchain-mingw32.cmake create mode 100644 cmake/Toolchain-mingw64.cmake create mode 100644 cmake/c_flag_overrides.cmake create mode 100644 cmake/cxx_flag_overrides.cmake create mode 100644 exposed/CDemo.c create mode 100644 exposed/CMakeLists.txt create mode 100644 exposed/DOC.txt create mode 100644 exposed/VbDemo.vb create mode 100644 extlib/libdxfrw/CMakeLists.txt create mode 100644 extlib/libdxfrw/drw_base.h create mode 100644 extlib/libdxfrw/drw_classes.cpp create mode 100644 extlib/libdxfrw/drw_classes.h create mode 100644 extlib/libdxfrw/drw_entities.cpp create mode 100644 extlib/libdxfrw/drw_entities.h create mode 100644 extlib/libdxfrw/drw_header.cpp create mode 100644 extlib/libdxfrw/drw_header.h create mode 100644 extlib/libdxfrw/drw_interface.h create mode 100644 extlib/libdxfrw/drw_objects.cpp create mode 100644 extlib/libdxfrw/drw_objects.h create mode 100644 extlib/libdxfrw/intern/drw_cptable932.h create mode 100644 extlib/libdxfrw/intern/drw_cptable936.h create mode 100644 extlib/libdxfrw/intern/drw_cptable949.h create mode 100644 extlib/libdxfrw/intern/drw_cptable950.h create mode 100644 extlib/libdxfrw/intern/drw_cptables.h create mode 100644 extlib/libdxfrw/intern/drw_dbg.cpp create mode 100644 extlib/libdxfrw/intern/drw_dbg.h create mode 100644 extlib/libdxfrw/intern/drw_textcodec.cpp create mode 100644 extlib/libdxfrw/intern/drw_textcodec.h create mode 100644 extlib/libdxfrw/intern/dwgbuffer.cpp create mode 100644 extlib/libdxfrw/intern/dwgbuffer.h create mode 100644 extlib/libdxfrw/intern/dwgreader.cpp create mode 100644 extlib/libdxfrw/intern/dwgreader.h create mode 100644 extlib/libdxfrw/intern/dwgreader15.cpp create mode 100644 extlib/libdxfrw/intern/dwgreader15.h create mode 100644 extlib/libdxfrw/intern/dwgreader18.cpp create mode 100644 extlib/libdxfrw/intern/dwgreader18.h create mode 100644 extlib/libdxfrw/intern/dwgreader21.cpp create mode 100644 extlib/libdxfrw/intern/dwgreader21.h create mode 100644 extlib/libdxfrw/intern/dwgreader24.cpp create mode 100644 extlib/libdxfrw/intern/dwgreader24.h create mode 100644 extlib/libdxfrw/intern/dwgreader27.cpp create mode 100644 extlib/libdxfrw/intern/dwgreader27.h create mode 100644 extlib/libdxfrw/intern/dwgutil.cpp create mode 100644 extlib/libdxfrw/intern/dwgutil.h create mode 100644 extlib/libdxfrw/intern/dxfreader.cpp create mode 100644 extlib/libdxfrw/intern/dxfreader.h create mode 100644 extlib/libdxfrw/intern/dxfwriter.cpp create mode 100644 extlib/libdxfrw/intern/dxfwriter.h create mode 100644 extlib/libdxfrw/intern/rscodec.cpp create mode 100644 extlib/libdxfrw/intern/rscodec.h create mode 100644 extlib/libdxfrw/libdwgr.cpp create mode 100644 extlib/libdxfrw/libdwgr.h create mode 100644 extlib/libdxfrw/libdxfrw.cpp create mode 100644 extlib/libdxfrw/libdxfrw.h create mode 100644 extlib/si/si.h create mode 100644 extlib/si/siSync.h create mode 100644 extlib/si/siSyncPriv.h create mode 100644 extlib/si/siapp.h create mode 100644 extlib/si/siapp.lib create mode 100644 extlib/si/spwdata.h create mode 100644 extlib/si/spwerror.h create mode 100644 extlib/si/spwmacro.h create mode 100644 include/slvs.h create mode 100644 src/CMakeLists.txt create mode 100644 src/bsp.cpp create mode 100644 src/clipboard.cpp create mode 100644 src/cocoa/AppIcon.iconset/icon_128x128.png create mode 100644 src/cocoa/AppIcon.iconset/icon_128x128@2x.png create mode 100644 src/cocoa/AppIcon.iconset/icon_16x16.png create mode 100644 src/cocoa/AppIcon.iconset/icon_16x16@2x.png create mode 100644 src/cocoa/AppIcon.iconset/icon_256x256.png create mode 100644 src/cocoa/AppIcon.iconset/icon_256x256@2x.png create mode 100644 src/cocoa/AppIcon.iconset/icon_32x32.png create mode 100644 src/cocoa/AppIcon.iconset/icon_32x32@2x.png create mode 100644 src/cocoa/AppIcon.iconset/icon_512x512.png create mode 100644 src/cocoa/AppIcon.iconset/icon_512x512@2x.png create mode 100644 src/cocoa/MainMenu.xib create mode 100644 src/cocoa/SaveFormatAccessory.xib create mode 100644 src/cocoa/cocoamain.mm create mode 100644 src/config.h.in create mode 100644 src/confscreen.cpp create mode 100644 src/constraint.cpp create mode 100644 src/constrainteq.cpp create mode 100644 src/describescreen.cpp create mode 100644 src/draw.cpp create mode 100644 src/drawconstraint.cpp create mode 100644 src/drawentity.cpp create mode 100644 src/dsc.h create mode 100644 src/entity.cpp create mode 100644 src/export.cpp create mode 100644 src/exportstep.cpp create mode 100644 src/exportvector.cpp create mode 100644 src/expr.cpp create mode 100644 src/expr.h create mode 100644 src/file.cpp create mode 100644 src/fonts/private/0-check-false.png create mode 100644 src/fonts/private/1-check-true.png create mode 100644 src/fonts/private/2-radio-false.png create mode 100644 src/fonts/private/3-radio-true.png create mode 100644 src/fonts/private/4-stipple-dot.png create mode 100644 src/fonts/private/5-stipple-dash-long.png create mode 100644 src/fonts/private/6-stipple-dash.png create mode 100644 src/fonts/private/7-stipple-zigzag.png create mode 100644 src/fonts/unicode.lff.gz create mode 100644 src/generate.cpp create mode 100644 src/glhelper.cpp create mode 100644 src/graphicswin.cpp create mode 100644 src/group.cpp create mode 100644 src/groupmesh.cpp create mode 100644 src/gtk/gtkmain.cpp create mode 100644 src/icons/angle.png create mode 100644 src/icons/arc.png create mode 100644 src/icons/assemble.png create mode 100644 src/icons/bezier.png create mode 100644 src/icons/circle.png create mode 100644 src/icons/constraint.png create mode 100644 src/icons/construction.png create mode 100644 src/icons/edges.png create mode 100644 src/icons/equal.png create mode 100644 src/icons/extrude.png create mode 100644 src/icons/faces.png create mode 100644 src/icons/hidden-lines.png create mode 100644 src/icons/horiz.png create mode 100644 src/icons/in3d.png create mode 100644 src/icons/lathe.png create mode 100644 src/icons/length.png create mode 100644 src/icons/line.png create mode 100644 src/icons/mesh.png create mode 100644 src/icons/normal.png create mode 100644 src/icons/ontoworkplane.png create mode 100644 src/icons/other-supp.png create mode 100644 src/icons/outlines.png create mode 100644 src/icons/parallel.png create mode 100644 src/icons/perpendicular.png create mode 100644 src/icons/point.png create mode 100644 src/icons/pointonx.png create mode 100644 src/icons/rectangle.png create mode 100644 src/icons/ref.png create mode 100644 src/icons/same-orientation.png create mode 100644 src/icons/shaded.png create mode 100644 src/icons/sketch-in-3d.png create mode 100644 src/icons/sketch-in-plane.png create mode 100644 src/icons/step-rotate.png create mode 100644 src/icons/step-translate.png create mode 100644 src/icons/symmetric.png create mode 100644 src/icons/tangent-arc.png create mode 100644 src/icons/text.png create mode 100644 src/icons/trim.png create mode 100644 src/icons/vert.png create mode 100644 src/icons/workplane.png create mode 100644 src/importdxf.cpp create mode 100644 src/lib.cpp create mode 100644 src/mesh.cpp create mode 100644 src/modify.cpp create mode 100644 src/mouse.cpp create mode 100644 src/polygon.cpp create mode 100644 src/polygon.h create mode 100644 src/request.cpp create mode 100644 src/sketch.h create mode 100644 src/solvespace.cpp create mode 100644 src/solvespace.h create mode 100644 src/srf/boolean.cpp create mode 100644 src/srf/curve.cpp create mode 100644 src/srf/merge.cpp create mode 100644 src/srf/ratpoly.cpp create mode 100644 src/srf/raycast.cpp create mode 100644 src/srf/surface.cpp create mode 100644 src/srf/surface.h create mode 100644 src/srf/surfinter.cpp create mode 100644 src/srf/triangulate.cpp create mode 100644 src/style.cpp create mode 100644 src/system.cpp create mode 100644 src/textscreens.cpp create mode 100644 src/textwin.cpp create mode 100644 src/toolbar.cpp create mode 100644 src/ttf.cpp create mode 100644 src/ttf.h create mode 100644 src/ui.h create mode 100644 src/undoredo.cpp create mode 100644 src/unix/gloffscreen.cpp create mode 100644 src/unix/gloffscreen.h create mode 100644 src/unix/solvespace-16x16.png create mode 100644 src/unix/solvespace-16x16.xpm create mode 100644 src/unix/solvespace-24x24.png create mode 100644 src/unix/solvespace-24x24.xpm create mode 100644 src/unix/solvespace-32x32.png create mode 100644 src/unix/solvespace-32x32.xpm create mode 100644 src/unix/solvespace-48x48.png create mode 100644 src/unix/solvespace-48x48.xpm create mode 100644 src/unix/solvespace.desktop create mode 100644 src/unix/unixutil.cpp create mode 100644 src/util.cpp create mode 100644 src/view.cpp create mode 100644 src/win32/icon.ico create mode 100644 src/win32/manifest.xml create mode 100644 src/win32/resource.rc create mode 100644 src/win32/w32main.cpp create mode 100644 src/win32/w32util.cpp create mode 100644 tools/CMakeLists.txt create mode 100644 tools/lff2c.cpp create mode 100644 tools/png2c.cpp create mode 100644 tools/unifont2c.cpp create mode 100644 wishlist.txt diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..7c97503 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,22 @@ +# .gitattributes for SolveSpace + +# Set default behaviour, in case users don't have core.autocrlf set. +* text=auto + +# Explicitly declare text files we want to always be normalized and converted +# to native line endings on checkout. +*.cpp text +*.h text +*.txt text + +# Declare files that will always have CRLF line endings on checkout. +*.sln text eol=crlf + +# Denote all files that are truly binary and should not be modified. +*.gz binary +*.ico binary +*.jpg binary +*.lib binary +*.png binary + +# end .gitattributes diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..28be69f --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +/CMakeCache.txt +/build*/ +*.trace # OpenGL apitrace files +/debian/tmp/ +/debian/*.log +/debian/*.substvars +/debian/*.debhelper +/debian/files +/debian/solvespace/ +/debian/libslvs1/ +/debian/libslvs1-dev/ +/obj-*/ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..dabc567 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,13 @@ +[submodule "extlib/zlib"] + path = extlib/zlib + url = https://github.com/madler/zlib + ignore = dirty +[submodule "extlib/libpng"] + path = extlib/libpng + url = https://github.com/glennrp/libpng +[submodule "extlib/libfreetype"] + path = extlib/libfreetype + url = http://git.sv.nongnu.org/r/freetype/freetype2.git +[submodule "extlib/libdxfrw"] + path = extlib/libdxfrw + url = https://github.com/solvespace/libdxfrw.git diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..5e831b1 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,56 @@ +language: c +os: + - linux + - osx +sudo: required +dist: trusty +install: + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./.travis/install-debian.sh; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ./.travis/install-macos.sh; fi +script: + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./.travis/build-debian.sh; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ./.travis/build-macos.sh; fi +deploy: + # Releases to solvespace/solvespace + - provider: releases + api_key: + secure: dDlkIawHcODlW9B/20/cQCtzeoocvs0hKuNngRKXKqzXLWTRq33oq/B7+39tAixWbmv6exTpijiKrRNFiSCW5Z4iwHLwaRD4XJznxw63e/Hus/dxg2Tvqx7XFpkCz8mT1Z+gZQE5YxAngeZPpI/sZbZtF1UO3yH5eLeeokZ15p26ZskQUPoYuzrTgTzYL3XfpG3F+20rNBawH1ycsCTVD/08/n31d2m3CrKAsbW7er92ek6w4fzKr7NW8WeXjrPJETVpw5fQg1Od3pRGW8dPQaJcvKQEogMp8Mm0ETYd0qigg89/giBz7QwOgmAWQ4dH+DfZH4Ojl//127QztBolMvyDMQBykWrtJoGcij05sT6K2IJr2FHeUBO12MAEdjiVvhQj3DtTzjPiZAHHDBSLWxLKWWhlhHE4pq7g1MQhqXkaAHI2BLNzwLmaowbMT0bECf9yfz6xx18h6XPQFX44oOktraobVALFlyHqeKa8zdcUt22LF6uAL1m5dxL0tny3eXCIPE4UH/RZgua/cHV9G3cUvKQa/QnFSLRhvWVSbGB+7YsHouBJcsUOOW1gmd5442XuC7mpppccRldh+GSxUk6TBJRAx7TeQ0ybDUaoco9MUqp2twv3KreR2+8Q12PDaAhfQVNEGdF3wTm1sShImjCN4VN3eSLlBEbve1QRQXM= + skip_cleanup: true + file_glob: true + file: + - ../*.deb + on: + repo: solvespace/solvespace + tags: true + condition: "$TRAVIS_OS_NAME == linux" + - provider: releases + api_key: + secure: dDlkIawHcODlW9B/20/cQCtzeoocvs0hKuNngRKXKqzXLWTRq33oq/B7+39tAixWbmv6exTpijiKrRNFiSCW5Z4iwHLwaRD4XJznxw63e/Hus/dxg2Tvqx7XFpkCz8mT1Z+gZQE5YxAngeZPpI/sZbZtF1UO3yH5eLeeokZ15p26ZskQUPoYuzrTgTzYL3XfpG3F+20rNBawH1ycsCTVD/08/n31d2m3CrKAsbW7er92ek6w4fzKr7NW8WeXjrPJETVpw5fQg1Od3pRGW8dPQaJcvKQEogMp8Mm0ETYd0qigg89/giBz7QwOgmAWQ4dH+DfZH4Ojl//127QztBolMvyDMQBykWrtJoGcij05sT6K2IJr2FHeUBO12MAEdjiVvhQj3DtTzjPiZAHHDBSLWxLKWWhlhHE4pq7g1MQhqXkaAHI2BLNzwLmaowbMT0bECf9yfz6xx18h6XPQFX44oOktraobVALFlyHqeKa8zdcUt22LF6uAL1m5dxL0tny3eXCIPE4UH/RZgua/cHV9G3cUvKQa/QnFSLRhvWVSbGB+7YsHouBJcsUOOW1gmd5442XuC7mpppccRldh+GSxUk6TBJRAx7TeQ0ybDUaoco9MUqp2twv3KreR2+8Q12PDaAhfQVNEGdF3wTm1sShImjCN4VN3eSLlBEbve1QRQXM= + skip_cleanup: true + file: build/solvespace.dmg + on: + repo: solvespace/solvespace + tags: true + condition: "$TRAVIS_OS_NAME == osx" + # Releases to whitequark/solvespace (to be removed) + - provider: releases + api_key: + secure: DA3tW0My37vbi2t3dZ061281Xm8KSIkeLdFZsQISrut0g1kkbWuBTPxAfvE3B6OE8p47wAclE/wxA1+obMTVkY0oYpd5u+JelYNHxU/oL8Ww0xdUANwKNJ1JD2EZP8nSz7JSvxuGILC6AFPoTjawsG97SXwiTyp7z0PA6nvzraE= + skip_cleanup: true + file_glob: true + file: + - ../*.deb + on: + repo: whitequark/solvespace + tags: true + condition: "$TRAVIS_OS_NAME == linux" + - provider: releases + api_key: + secure: DA3tW0My37vbi2t3dZ061281Xm8KSIkeLdFZsQISrut0g1kkbWuBTPxAfvE3B6OE8p47wAclE/wxA1+obMTVkY0oYpd5u+JelYNHxU/oL8Ww0xdUANwKNJ1JD2EZP8nSz7JSvxuGILC6AFPoTjawsG97SXwiTyp7z0PA6nvzraE= + skip_cleanup: true + file: build/solvespace.dmg + on: + repo: whitequark/solvespace + tags: true + condition: "$TRAVIS_OS_NAME == osx" + diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..63dee5b --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,111 @@ +Changelog +========= + +2.2 +--- + +Other new features: + * OS X: support 3Dconnexion devices (SpaceMouse, SpaceNavigator, etc). + +Bug fixes: + * Do not remove autosaves after successfully opening a file, preventing + data loss in case of two abnormal terminations in a row. + * Do not crash when changing autosave interval. + * Unbreak the "Show degrees of freedom" command. + * Three.js: correctly respond to controls when browser zoom is used. + * OS X: do not completely hide main window when defocused. + * GTK: unbreak 3Dconnexion support. + * When pasting transformed entities, multiply constraint values by scale. + * Fix TTF font metrics (restore the behavior from version 2.0). + * Forcibly show the current group once we start a drawing operation. + * DXF export: always declare layers before using them. + * Do not truncate operations on selections to first 32 selected entities. + +2.1 +--- + +New sketch features: + * Lathe groups create circle and face entities. + * New toolbar button for creating lathe groups. + * Chord tolerance is separated into two: display chord tolerance (specified + in percents, relative to model bounding box), and export chord tolerance + (specified in millimeters as absolute value). + * Bezier spline points can be added and removed after the spline is created. + * When an unconstrained extrusion is switched between "union" and + "difference", its normal is flipped. + * Groups can be added in the middle of the stack. Note that this results + in files incompatible with version 2.0. + * Active group can be removed. + * Removing an imported group does not cause all subsequent groups to also + be removed. + * When a new group with a solid is created, the color is taken from + a previous group with a solid, if any. + * Entities in a newly active group do not become visible. + * When entities are selected, "Zoom to fit" zooms to fit only these + entities and not the entire sketch. + * Zero-length edges are reported with a "zero-length error", not + "points not all coplanar". + +New constraint features: + * Height of the font used for drawing constraint labels can be changed. + * New constraint, length difference, placed with J. + (Patch by Peter Ruevski) + * Horizontal/vertical constraints are automatically added if a line segment + is close enough to being horizontal/vertical. This can be disabled by + holding Ctrl. + * Reference dimensions and angles can be placed with Shift+D and Shift+N. + * Copying and pasting entities duplicates any constraints that only involve + entities in the clipboard, as well as selected comments. + * Diameter constraints can be shown as radius. + * The "pi" identifier can be used in expressions. + * Constraint labels can be snapped to grid. + * Integer angles are displayed without trailing zeroes. + * Angle constraints have proper reference lines and arrowheads. + * Extension lines are drawn for point-line distance constraints. + +New solver features: + * Sketches with redundant and unsolvable constraints are distinguished. + * New group setting, "allow redundant constraints". Note that it makes + the solver less stable. + +New rendering and styling features: + * New line style parameter: stippling, based on ISO 128. + * Outlines of solids can be drawn in a particular style (by default, thick + lines) controlled by the "Show outline of solid model" button. + * Occluded edges can be drawn in a particular style (by default, stippled + with short dashes) controlled by the "Show hidden lines" button. + * Solids can be made transparent. + +New export/import features: + * The old "import" command (for .slvs files) is renamed to "link". + * If a linked .slvs file is not found, first the relative path recorded + in the .slvs file is checked and then the absolute path; this is + an inversion of the previously used order. If it is still not found, + a dialog appears offering to locate it. + * DXF and DWG files can be imported, with point-coincident, horizontal and + vertical constraints automatically inferred from geometry, and distance + and angle constraints created when a dimension placed against geometry + exists. + * Triangle mesh can be exported for viewing in the browser through WebGL. + * Export dialogs remember the last file format used, and preselect it. + * Exported DXF files have exact circles, arcs and splines instead of + a piecewise linear approximation (unless hidden line removal was needed). + * Exported DXF files preserve color and line thickness. + * In exported DXF files, constraints are represented as DXF dimensions, + instead of piecewise linear geometry. + * When exporting 2d views, overlapping lines are removed. + +Other new features: + * Native Linux (GTK 2 and GTK 3) and Mac OS X ports. + * Automatically save and then restore sketches if SolveSpace crashes. + (Patch by Marc Britten) + * Unicode is supported everywhere (filenames, group names, TTF text, + comments), although RTL scripts and scripts making heavy use of ligatures + are not rendered correctly. + * The vector font is grid-fitted when rendered on screen to make it easier + to read regardless of its size. + +2.0 +--- + +Initial public release. diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..90a3eb8 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,190 @@ +# cmake configuration + +cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) +cmake_policy(VERSION 3.1.0) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} + "${CMAKE_SOURCE_DIR}/cmake/") +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED YES) + +include(CheckIncludeFile) + +# for /MT on MSVC +set(CMAKE_USER_MAKE_RULES_OVERRIDE + "${CMAKE_SOURCE_DIR}/cmake/c_flag_overrides.cmake") +set(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX + "${CMAKE_SOURCE_DIR}/cmake/cxx_flag_overrides.cmake") + +# project + +include(GetGitCommitHash) + +project(solvespace) +set(solvespace_VERSION_MAJOR 2) +set(solvespace_VERSION_MINOR 1) +string(SUBSTRING "${GIT_COMMIT_HASH}" 0 8 solvespace_GIT_HASH) + +if(NOT WIN32 AND NOT APPLE) + set(GUI gtk2 CACHE STRING "GUI toolkit to use (one of: gtk2 gtk3)") +endif() + +# compiler + +if(WIN32) + add_definitions( + -D_CRT_SECURE_NO_DEPRECATE + -D_CRT_SECURE_NO_WARNINGS + -D_SCL_SECURE_NO_WARNINGS + -D_WIN32_WINNT=0x500 + -D_WIN32_IE=_WIN32_WINNT + -DISOLATION_AWARE_ENABLED + -DWIN32 + -DWIN32_LEAN_AND_MEAN + -DUNICODE + -DNOMINMAX + -D_UNICODE) +endif() + +if(MSVC) + # Many versions of MSVC do not have the (C99) inline keyword, instead + # they have their own __inline; this breaks `static inline` functions. + # We do not want to care and so we fix this with a definition. + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Dinline=__inline") +endif() + +if(CMAKE_CXX_COMPILER_ID STREQUAL GNU OR CMAKE_CXX_COMPILER_ID STREQUAL Clang) + set(WARNING_FLAGS "-Wall -Wextra -Wno-unused-parameter") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 ${WARNING_FLAGS}") +endif() + +if(MINGW) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static-libgcc") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++") +endif() + +if(APPLE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed ${CMAKE_EXE_LINKER_FLAGS}") +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") + set(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed ${CMAKE_EXE_LINKER_FLAGS}") +endif() + +if(SANITIZE) + if(NOT (CMAKE_C_COMPILER_ID STREQUAL Clang AND CMAKE_CXX_COMPILER_ID STREQUAL Clang)) + message(ERROR "Sanitizers are only available in Clang/Clang++") + endif() + set(SANITIZE_FLAGS "-O1 -fno-omit-frame-pointer -fno-optimize-sibling-calls") + set(SANITIZE_FLAGS "${SANITIZE_FLAGS} -fsanitize=address,undefined,integer") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SANITIZE_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZE_FLAGS}") +endif() + +# dependencies + +find_package(OpenGL REQUIRED) + +message(STATUS "Using in-tree libdxfrw") +add_subdirectory(extlib/libdxfrw) + +if(WIN32) + # Configure Freetype first. If done later, it will notice that + # zlib is available, try to use it and promptly break on MSVC + # in a very obscure way. Given that the only use of zlib, bzip2 + # and png support is in support for extremely obsolete Unix fonts, + # we don't care. + find_package(Freetype) + + if(NOT FREETYPE_FOUND) + message(STATUS "Using in-tree libfreetype") + + add_subdirectory(extlib/libfreetype EXCLUDE_FROM_ALL) + + set(FREETYPE_LIBRARY + freetype) + set(FREETYPE_INCLUDE_DIRS + "${CMAKE_SOURCE_DIR}/extlib/libfreetype/include") + find_package(Freetype REQUIRED) + endif() + + find_package(ZLIB) + + if(NOT ZLIB_FOUND) + message(STATUS "Using in-tree zlib") + add_subdirectory(extlib/zlib EXCLUDE_FROM_ALL) + + message(STATUS "Using in-tree libpng") + set(ZLIB_LIBRARY + zlibstatic) + set(ZLIB_INCLUDE_DIR + "${CMAKE_SOURCE_DIR}/extlib/zlib" + "${CMAKE_BINARY_DIR}/extlib/zlib") + find_package(ZLIB REQUIRED) + endif() + + find_package(PNG) + + if(NOT PNG_FOUND) + message(STATUS "Using in-tree libpng") + + set(SKIP_INSTALL_ALL + ON) + add_subdirectory(extlib/libpng EXCLUDE_FROM_ALL) + + set(PNG_LIBRARY + png16_static) + set(PNG_PNG_INCLUDE_DIR + "${CMAKE_SOURCE_DIR}/extlib/libpng" + "${CMAKE_BINARY_DIR}/extlib/libpng") + find_package(PNG REQUIRED) + endif() + + if(NOT MINGW) + message(STATUS "Using prebuilt SpaceWare") + set(SPACEWARE_FOUND TRUE) + set(SPACEWARE_INCLUDE_DIR + "${CMAKE_SOURCE_DIR}/extlib/si") + set(SPACEWARE_LIBRARIES + "${CMAKE_SOURCE_DIR}/extlib/si/siapp.lib") + endif() +elseif(APPLE) + set(CMAKE_FIND_FRAMEWORK LAST) + + find_package(PNG REQUIRED) + find_package(Freetype REQUIRED) + find_library(APPKIT_LIBRARY AppKit REQUIRED) +else() # Linux and compatible systems + find_package(SpaceWare) + + # Use freedesktop's pkg-config to locate everything. + find_package(PkgConfig REQUIRED) + pkg_check_modules(ZLIB REQUIRED zlib) + pkg_check_modules(PNG REQUIRED libpng) + pkg_check_modules(FONTCONFIG REQUIRED fontconfig) + pkg_check_modules(JSONC REQUIRED json-c) + pkg_check_modules(GLEW REQUIRED glew) + pkg_check_modules(FREETYPE REQUIRED freetype2) + + set(HAVE_GTK TRUE) + if(GUI STREQUAL "gtk3") + set(HAVE_GTK3 TRUE) + pkg_check_modules(GTKMM REQUIRED gtkmm-3.0 pangomm-1.4 x11) + elseif(GUI STREQUAL "gtk2") + set(HAVE_GTK2 TRUE) + pkg_check_modules(GTKMM REQUIRED gtkmm-2.4 pangomm-1.4 x11) + else() + message(FATAL_ERROR "GUI unrecognized: ${GUI}") + endif() +endif() + +# components + +add_subdirectory(tools) +add_subdirectory(src) +add_subdirectory(exposed) diff --git a/COPYING.txt b/COPYING.txt new file mode 100644 index 0000000..a737dcf --- /dev/null +++ b/COPYING.txt @@ -0,0 +1,675 @@ + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..a1a49ec --- /dev/null +++ b/README.md @@ -0,0 +1,149 @@ +SolveSpace +========== + +This repository contains the source code of [SolveSpace][], a parametric +2d/3d CAD. + +[solvespace]: http://solvespace.com + +Installation +------------ + +### Mac OS X (>=10.6 64-bit), Debian (>=jessie) and Ubuntu (>=trusty) + +Binary packages for Mac OS X and Debian derivatives are available +via [GitHub releases][rel]. + +[rel]: https://github.com/solvespace/solvespace/releases + +### Other systems + +See below. + +Building on Linux +----------------- + +### Building for Linux + +You will need CMake, libpng, zlib, json-c, fontconfig, freetype, gtkmm 2.4, +pangomm 1.4, OpenGL and OpenGL GLU. +On a Debian derivative (e.g. Ubuntu) these can be installed with: + + apt-get install libpng12-dev libjson-c-dev libfreetype6-dev \ + libfontconfig1-dev libgtkmm-2.4-dev libpangomm-1.4-dev \ + libgl-dev libglu-dev libglew-dev cmake + +Before building, check out the necessary submodules: + + git submodule update --init extlib/libdxfrw + +After that, build SolveSpace as following: + + mkdir build + cd build + cmake .. + make + sudo make install + +A fully functional port to GTK3 is available, but not recommended +for use due to bugs in this toolkit. + +### Building for Windows + +You will need CMake, a Windows cross-compiler, and Wine with binfmt support. +On a Debian derivative (e.g. Ubuntu) these can be installed with: + + apt-get install cmake mingw-w64 wine-binfmt + +Before building, check out the necessary submodules: + + git submodule update --init + +After that, build 32-bit SolveSpace as following: + + mkdir build + cd build + cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw32.cmake .. + make solvespace + +Or, build 64-bit SolveSpace as following: + + mkdir build + cd build + cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw64.cmake .. + make solvespace + +The application is built as `build/src/solvespace.exe`. + +Space Navigator support will not be available. + +Building on Mac OS X +-------------------- + +You will need XCode tools, CMake, libpng and Freetype. Assuming you use +[homebrew][], these can be installed with: + + brew install cmake libpng freetype + +XCode has to be installed via AppStore; it requires a free Apple ID. + +Before building, check out the necessary submodules: + + git submodule update --init extlib/libdxfrw + +After that, build SolveSpace as following: + + mkdir build + cd build + cmake .. + make + +The app bundle is built in `build/src/solvespace.app`. + +[homebrew]: http://brew.sh/ + +Building on Windows +------------------- + +You will need [cmake][cmakewin] and Visual C++. + +### GUI build + +Check out the git submodules. Create a directory `build` in +the source tree and point cmake-gui to the source tree and that directory. +Press "Configure" and "Generate", then open `build\solvespace.sln` with +Visual C++ and build it. + +### Command-line build + +First, ensure that git and cl (the Visual C++ compiler driver) are in your +`%PATH%`; the latter is usually done by invoking `vcvarsall.bat` from your +Visual Studio install. Then, run the following in cmd or PowerShell: + + git submodule update --init + mkdir build + cd build + cmake .. -G "NMake Makefiles" + nmake + +### MSVC build + +It is also possible to build SolveSpace using [MinGW][mingw], though +Space Navigator support will be disabled. + +First, ensure that git and gcc are in your `$PATH`. Then, run the following +in bash: + + git submodule update --init + mkdir build + cd build + cmake .. + make + +[cmakewin]: http://www.cmake.org/download/#latest +[mingw]: http://www.mingw.org/ + +License +------- + +SolveSpace is distributed under the terms of the [GPL3 license](COPYING.txt). diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..8078a56 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,37 @@ +version: 2.1.{build} +clone_depth: 1 +before_build: + - git submodule update --init + - mkdir build + - cd build + - set tag=x%APPVEYOR_REPO_TAG_NAME% + - if %tag:~,2% == xv (set BUILD_TYPE=RelWithDebInfo) else (set BUILD_TYPE=Debug) + - cmake -G"Visual Studio 12" -T v120_xp -DCMAKE_BUILD_TYPE=%BUILD_TYPE% .. +build_script: + - msbuild "src\solvespace.vcxproj" /verbosity:minimal /property:Configuration=%BUILD_TYPE% /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" +artifacts: + - path: build\src\Debug\solvespace.exe + name: solvespace.exe + - path: build\src\Debug\solvespace.pdb + name: solvespace.pdb + - path: build\src\RelWithDebInfo\solvespace.exe + name: solvespace.exe + - path: build\src\RelWithDebInfo\solvespace.pdb + name: solvespace.pdb +deploy: + # Releases to solvespace/solvespace + - provider: GitHub + auth_token: + secure: P9/pf2nM+jlWKe7pCjMp41HycBNP/+5AsmE/TETrDUoBOa/9WFHelqdVFrbRn9IC + description: "" + artifact: solvespace.exe + on: + appveyor_repo_tag: true + # Releases to whitequark/solvespace (to be removed) + - provider: GitHub + auth_token: + secure: Flqxu1cz6PyxVT1wzTP4bSrQOY8wFrO7pJxYxvjEkLqIUU4dsDQrs2rac/A9deet + description: "" + artifact: solvespace.exe + on: + appveyor_repo_tag: true diff --git a/cmake/FindSpaceWare.cmake b/cmake/FindSpaceWare.cmake new file mode 100644 index 0000000..135384a --- /dev/null +++ b/cmake/FindSpaceWare.cmake @@ -0,0 +1,28 @@ +# Find the libspnav library and header. +# +# Sets the usual variables expected for find_package scripts: +# +# SPACEWARE_INCLUDE_DIR - header location +# SPACEWARE_LIBRARIES - library to link against +# SPACEWARE_FOUND - true if pugixml was found. + +if(UNIX) + + find_path(SPACEWARE_INCLUDE_DIR + spnav.h) + + find_library(SPACEWARE_LIBRARY + NAMES spnav libspnav) + + # Support the REQUIRED and QUIET arguments, and set SPACEWARE_FOUND if found. + include(FindPackageHandleStandardArgs) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(SPACEWARE DEFAULT_MSG + SPACEWARE_LIBRARY SPACEWARE_INCLUDE_DIR) + + if(SPACEWARE_FOUND) + set(SPACEWARE_LIBRARIES ${SPACEWARE_LIBRARY}) + endif() + + mark_as_advanced(SPACEWARE_LIBRARY SPACEWARE_INCLUDE_DIR) + +endif() diff --git a/cmake/GetGitCommitHash.cmake b/cmake/GetGitCommitHash.cmake new file mode 100644 index 0000000..f67a844 --- /dev/null +++ b/cmake/GetGitCommitHash.cmake @@ -0,0 +1,35 @@ +function(get_git_commit_hash) + get_filename_component(GIT_DESCRIBE_CMAKE_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) + get_filename_component(GIT_ROOT ${GIT_DESCRIBE_CMAKE_DIR} PATH) + set(GIT_DIR "${GIT_ROOT}/.git") + + # Add a CMake configure dependency to the currently checked out revision. + set(GIT_DEPENDS ${GIT_DIR}/HEAD) + file(READ ${GIT_DIR}/HEAD HEAD_REF) + if(HEAD_REF MATCHES "ref: (.+)\n") + set(HEAD_REF ${CMAKE_MATCH_1}) + if(EXISTS "${GIT_DIR}/${HEAD_REF}") + list(APPEND GIT_DEPENDS ${GIT_DIR}/${HEAD_REF}) + file(READ ${GIT_DIR}/${HEAD_REF} HEAD_REF) + elseif(EXISTS "${GIT_DIR}/packed-refs") + list(APPEND GIT_DEPENDS ${GIT_DIR}/packed-refs) + file(READ "${GIT_DIR}/packed-refs" PACKED_REFS) + if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}") + set(HEAD_REF ${CMAKE_MATCH_1}) + else() + set(HEAD_REF "") + endif() + else() + set(HEAD_REF "") + endif() + endif() + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${GIT_DEPENDS}) + + string(STRIP ${HEAD_REF} HEAD_REF) + if(HEAD_REF STREQUAL "") + message(WARNING "Cannot determine git HEAD") + else() + set(GIT_COMMIT_HASH ${HEAD_REF} PARENT_SCOPE) + endif() +endfunction() +get_git_commit_hash() diff --git a/cmake/MacOSXBundleInfo.plist.in b/cmake/MacOSXBundleInfo.plist.in new file mode 100644 index 0000000..c215c44 --- /dev/null +++ b/cmake/MacOSXBundleInfo.plist.in @@ -0,0 +1,47 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + solvespace + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + SolveSpace + CFBundlePackageType + APPL + CFBundleVersion + ${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR} + CFBundleShortVersionString + ${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR} + NSHumanReadableCopyright + © 2008-2015 Jonathan Westhues and other authors + NSPrincipalClass + NSApplication + NSMainNibFile + MainMenu + CFBundleIconFile + AppIcon + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + slvs + + CFBundleTypeIconFile + AppIcon.icns + CFBundleTypeName + SolveSpace sketch + CFBundleTypeOSTypes + + slvs + + CFBundleTypeRole + Editor + + + + diff --git a/cmake/Toolchain-mingw32.cmake b/cmake/Toolchain-mingw32.cmake new file mode 100644 index 0000000..a3591c8 --- /dev/null +++ b/cmake/Toolchain-mingw32.cmake @@ -0,0 +1,13 @@ +SET(CMAKE_SYSTEM_NAME Windows) + +SET(TRIPLE i686-w64-mingw32) + +SET(CMAKE_C_COMPILER ${TRIPLE}-gcc) +SET(CMAKE_CXX_COMPILER ${TRIPLE}-g++) +SET(CMAKE_RC_COMPILER ${TRIPLE}-windres) + +SET(CMAKE_FIND_ROOT_PATH /usr/${TRIPLE}) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/cmake/Toolchain-mingw64.cmake b/cmake/Toolchain-mingw64.cmake new file mode 100644 index 0000000..6841214 --- /dev/null +++ b/cmake/Toolchain-mingw64.cmake @@ -0,0 +1,13 @@ +SET(CMAKE_SYSTEM_NAME Windows) + +SET(TRIPLE x86_64-w64-mingw32) + +SET(CMAKE_C_COMPILER ${TRIPLE}-gcc) +SET(CMAKE_CXX_COMPILER ${TRIPLE}-g++) +SET(CMAKE_RC_COMPILER ${TRIPLE}-windres) + +SET(CMAKE_FIND_ROOT_PATH /usr/${TRIPLE}) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/cmake/c_flag_overrides.cmake b/cmake/c_flag_overrides.cmake new file mode 100644 index 0000000..b21f00e --- /dev/null +++ b/cmake/c_flag_overrides.cmake @@ -0,0 +1,6 @@ +if(MSVC) + set(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") + set(CMAKE_C_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG") + set(CMAKE_C_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG") + set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") +endif() \ No newline at end of file diff --git a/cmake/cxx_flag_overrides.cmake b/cmake/cxx_flag_overrides.cmake new file mode 100644 index 0000000..67e0043 --- /dev/null +++ b/cmake/cxx_flag_overrides.cmake @@ -0,0 +1,6 @@ +if(MSVC) + set(CMAKE_CXX_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") + set(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG") + set(CMAKE_CXX_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") +endif() diff --git a/exposed/CDemo.c b/exposed/CDemo.c new file mode 100644 index 0000000..574f100 --- /dev/null +++ b/exposed/CDemo.c @@ -0,0 +1,274 @@ +/*----------------------------------------------------------------------------- + * Some sample code for slvs.dll. We draw some geometric entities, provide + * initial guesses for their positions, and then constrain them. The solver + * calculates their new positions, in order to satisfy the constraints. + * + * Copyright 2008-2013 Jonathan Westhues. + *---------------------------------------------------------------------------*/ +#ifdef HAVE_CONFIG_H +# include +#endif +#ifdef WIN32 +# include +#endif +#include +#include +#include +#ifdef HAVE_STDINT_H +# include +#endif + +#include + +static Slvs_System sys; + +static void *CheckMalloc(size_t n) +{ + void *r = malloc(n); + if(!r) { + printf("out of memory!\n"); + exit(-1); + } + return r; +} + +/*----------------------------------------------------------------------------- + * An example of a constraint in 3d. We create a single group, with some + * entities and constraints. + *---------------------------------------------------------------------------*/ +void Example3d(void) +{ + /* This will contain a single group, which will arbitrarily number 1. */ + Slvs_hGroup g = 1; + + /* A point, initially at (x y z) = (10 10 10) */ + sys.param[sys.params++] = Slvs_MakeParam(1, g, 10.0); + sys.param[sys.params++] = Slvs_MakeParam(2, g, 10.0); + sys.param[sys.params++] = Slvs_MakeParam(3, g, 10.0); + sys.entity[sys.entities++] = Slvs_MakePoint3d(101, g, 1, 2, 3); + /* and a second point at (20 20 20) */ + sys.param[sys.params++] = Slvs_MakeParam(4, g, 20.0); + sys.param[sys.params++] = Slvs_MakeParam(5, g, 20.0); + sys.param[sys.params++] = Slvs_MakeParam(6, g, 20.0); + sys.entity[sys.entities++] = Slvs_MakePoint3d(102, g, 4, 5, 6); + /* and a line segment connecting them. */ + sys.entity[sys.entities++] = Slvs_MakeLineSegment(200, g, + SLVS_FREE_IN_3D, 101, 102); + + /* The distance between the points should be 30.0 units. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 1, g, + SLVS_C_PT_PT_DISTANCE, + SLVS_FREE_IN_3D, + 30.0, + 101, 102, 0, 0); + + /* Let's tell the solver to keep the second point as close to constant + * as possible, instead moving the first point. */ + sys.dragged[0] = 4; + sys.dragged[1] = 5; + sys.dragged[2] = 6; + + /* Now that we have written our system, we solve. */ + Slvs_Solve(&sys, g); + + if(sys.result == SLVS_RESULT_OKAY) { + printf("okay; now at (%.3f %.3f %.3f)\n" + " (%.3f %.3f %.3f)\n", + sys.param[0].val, sys.param[1].val, sys.param[2].val, + sys.param[3].val, sys.param[4].val, sys.param[5].val); + printf("%d DOF\n", sys.dof); + } else { + printf("solve failed"); + } +} + +/*----------------------------------------------------------------------------- + * An example of a constraint in 2d. In our first group, we create a workplane + * along the reference frame's xy plane. In a second group, we create some + * entities in that group and dimension them. + *---------------------------------------------------------------------------*/ +void Example2d(void) +{ + Slvs_hGroup g; + double qw, qx, qy, qz; + + g = 1; + /* First, we create our workplane. Its origin corresponds to the origin + * of our base frame (x y z) = (0 0 0) */ + sys.param[sys.params++] = Slvs_MakeParam(1, g, 0.0); + sys.param[sys.params++] = Slvs_MakeParam(2, g, 0.0); + sys.param[sys.params++] = Slvs_MakeParam(3, g, 0.0); + sys.entity[sys.entities++] = Slvs_MakePoint3d(101, g, 1, 2, 3); + /* and it is parallel to the xy plane, so it has basis vectors (1 0 0) + * and (0 1 0). */ + Slvs_MakeQuaternion(1, 0, 0, + 0, 1, 0, &qw, &qx, &qy, &qz); + sys.param[sys.params++] = Slvs_MakeParam(4, g, qw); + sys.param[sys.params++] = Slvs_MakeParam(5, g, qx); + sys.param[sys.params++] = Slvs_MakeParam(6, g, qy); + sys.param[sys.params++] = Slvs_MakeParam(7, g, qz); + sys.entity[sys.entities++] = Slvs_MakeNormal3d(102, g, 4, 5, 6, 7); + + sys.entity[sys.entities++] = Slvs_MakeWorkplane(200, g, 101, 102); + + /* Now create a second group. We'll solve group 2, while leaving group 1 + * constant; so the workplane that we've created will be locked down, + * and the solver can't move it. */ + g = 2; + /* These points are represented by their coordinates (u v) within the + * workplane, so they need only two parameters each. */ + sys.param[sys.params++] = Slvs_MakeParam(11, g, 10.0); + sys.param[sys.params++] = Slvs_MakeParam(12, g, 20.0); + sys.entity[sys.entities++] = Slvs_MakePoint2d(301, g, 200, 11, 12); + + sys.param[sys.params++] = Slvs_MakeParam(13, g, 20.0); + sys.param[sys.params++] = Slvs_MakeParam(14, g, 10.0); + sys.entity[sys.entities++] = Slvs_MakePoint2d(302, g, 200, 13, 14); + + /* And we create a line segment with those endpoints. */ + sys.entity[sys.entities++] = Slvs_MakeLineSegment(400, g, + 200, 301, 302); + + /* Now three more points. */ + sys.param[sys.params++] = Slvs_MakeParam(15, g, 100.0); + sys.param[sys.params++] = Slvs_MakeParam(16, g, 120.0); + sys.entity[sys.entities++] = Slvs_MakePoint2d(303, g, 200, 15, 16); + + sys.param[sys.params++] = Slvs_MakeParam(17, g, 120.0); + sys.param[sys.params++] = Slvs_MakeParam(18, g, 110.0); + sys.entity[sys.entities++] = Slvs_MakePoint2d(304, g, 200, 17, 18); + + sys.param[sys.params++] = Slvs_MakeParam(19, g, 115.0); + sys.param[sys.params++] = Slvs_MakeParam(20, g, 115.0); + sys.entity[sys.entities++] = Slvs_MakePoint2d(305, g, 200, 19, 20); + + /* And arc, centered at point 303, starting at point 304, ending at + * point 305. */ + sys.entity[sys.entities++] = Slvs_MakeArcOfCircle(401, g, 200, 102, + 303, 304, 305); + + /* Now one more point, and a distance */ + sys.param[sys.params++] = Slvs_MakeParam(21, g, 200.0); + sys.param[sys.params++] = Slvs_MakeParam(22, g, 200.0); + sys.entity[sys.entities++] = Slvs_MakePoint2d(306, g, 200, 21, 22); + + sys.param[sys.params++] = Slvs_MakeParam(23, g, 30.0); + sys.entity[sys.entities++] = Slvs_MakeDistance(307, g, 200, 23); + + /* And a complete circle, centered at point 306 with radius equal to + * distance 307. The normal is 102, the same as our workplane. */ + sys.entity[sys.entities++] = Slvs_MakeCircle(402, g, 200, + 306, 102, 307); + + + /* The length of our line segment is 30.0 units. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 1, g, + SLVS_C_PT_PT_DISTANCE, + 200, + 30.0, + 301, 302, 0, 0); + + /* And the distance from our line segment to the origin is 10.0 units. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 2, g, + SLVS_C_PT_LINE_DISTANCE, + 200, + 10.0, + 101, 0, 400, 0); + /* And the line segment is vertical. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 3, g, + SLVS_C_VERTICAL, + 200, + 0.0, + 0, 0, 400, 0); + /* And the distance from one endpoint to the origin is 15.0 units. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 4, g, + SLVS_C_PT_PT_DISTANCE, + 200, + 15.0, + 301, 101, 0, 0); +#if 0 + /* And same for the other endpoint; so if you add this constraint then + * the sketch is overconstrained and will signal an error. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 5, g, + SLVS_C_PT_PT_DISTANCE, + 200, + 18.0, + 302, 101, 0, 0); +#endif /* 0 */ + + /* The arc and the circle have equal radius. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 6, g, + SLVS_C_EQUAL_RADIUS, + 200, + 0.0, + 0, 0, 401, 402); + /* The arc has radius 17.0 units. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 7, g, + SLVS_C_DIAMETER, + 200, + 17.0*2, + 0, 0, 401, 0); + + /* If the solver fails, then ask it to report which constraints caused + * the problem. */ + sys.calculateFaileds = 1; + + /* And solve. */ + Slvs_Solve(&sys, g); + + if(sys.result == SLVS_RESULT_OKAY) { + printf("solved okay\n"); + printf("line from (%.3f %.3f) to (%.3f %.3f)\n", + sys.param[7].val, sys.param[8].val, + sys.param[9].val, sys.param[10].val); + + printf("arc center (%.3f %.3f) start (%.3f %.3f) finish (%.3f %.3f)\n", + sys.param[11].val, sys.param[12].val, + sys.param[13].val, sys.param[14].val, + sys.param[15].val, sys.param[16].val); + + printf("circle center (%.3f %.3f) radius %.3f\n", + sys.param[17].val, sys.param[18].val, + sys.param[19].val); + printf("%d DOF\n", sys.dof); + } else { + int i; + printf("solve failed: problematic constraints are:"); + for(i = 0; i < sys.faileds; i++) { + printf(" %d", sys.failed[i]); + } + printf("\n"); + if(sys.result == SLVS_RESULT_INCONSISTENT) { + printf("system inconsistent\n"); + } else { + printf("system nonconvergent\n"); + } + } +} + +int main(void) +{ + sys.param = CheckMalloc(50*sizeof(sys.param[0])); + sys.entity = CheckMalloc(50*sizeof(sys.entity[0])); + sys.constraint = CheckMalloc(50*sizeof(sys.constraint[0])); + + sys.failed = CheckMalloc(50*sizeof(sys.failed[0])); + sys.faileds = 50; + + /*Example3d();*/ + for(;;) { + Example2d(); + sys.params = sys.constraints = sys.entities = 0; + break; + } + return 0; +} + diff --git a/exposed/CMakeLists.txt b/exposed/CMakeLists.txt new file mode 100644 index 0000000..bdc3fc3 --- /dev/null +++ b/exposed/CMakeLists.txt @@ -0,0 +1,8 @@ +include_directories( + ${CMAKE_SOURCE_DIR}/include) + +add_executable(CDemo + CDemo.c) + +target_link_libraries(CDemo + slvs) diff --git a/exposed/DOC.txt b/exposed/DOC.txt new file mode 100644 index 0000000..743349b --- /dev/null +++ b/exposed/DOC.txt @@ -0,0 +1,467 @@ + +INTRODUCTION +============ + +A sketch in SolveSpace consists of three basic elements: parameters, +entities, and constraints. + +A parameter (Slvs_Param) is a single real number, represented internally +by a double-precision floating point variable. The parameters are unknown +variables that the solver modifies in order to satisfy the constraints. + +An entity (Slvs_Entity) is a geometric thing, like a point or a line +segment or a circle. Entities are defined in terms of parameters, +and in terms of other entities. For example, a point in three-space +is represented by three parameters, corresponding to its x, y, and z +coordinates in our base coordinate frame. A line segment is represented +by two point entities, corresponding to its endpoints. + +A constraint (Slvs_Constraint) is a geometric property of an entity, +or a relationship among multiple entities. For example, a point-point +distance constraint will set the distance between two point entities. + +Parameters, entities, and constraints are typically referenced by their +handles (Slvs_hParam, Slvs_hEntity, Slvs_hConstraint). These handles are +32-bit integer values starting from 1. The zero handle is reserved. Each +object has a unique handle within its type (but it's acceptable, for +example to have a constraint with an Slvs_hConstraint of 7, and also to +have an entity with an Slvs_hEntity of 7). The use of handles instead +of pointers helps to avoid memory corruption. + +Entities and constraints are assigned into groups. A group is a set of +entities and constraints that is solved simultaneously. In a parametric +CAD system, a single group would typically correspond to a single sketch. +Constraints within a group may refer to entities outside that group, +but only the entities within that group will be modified by the solver. + +Consider point A in group 1, and point B in group 2. We have a constraint +in group 2 that makes the points coincident. When we solve group 2, the +solver is allowed to move point B to place it on top of point A. It is +not allowed to move point A to put it on top of point B, because point +A is outside the group being solved. + +This corresponds to the typical structure of a parametric CAD system. In a +later sketch, we may constrain our entities against existing geometry from +earlier sketches. The constraints will move the entities in our current +sketch, but will not change the geometry from the earlier sketches. + +To use the solver, we first define a set of parameters, entities, and +constraints. We provide an initial guess for each parameter; this is +necessary to achieve convergence, and also determines which solution +gets chosen when (finitely many) multiple solutions exist. Typically, +these initial guesses are provided by the initial configuration in which +the user drew the entities before constraining them. + +We then run the solver for a given group. The entities within that group +are modified in an attempt to satisfy the constraints. + +After running the solver, there are three possible outcomes: + + * All constraints were satisfied to within our numerical + tolerance (i.e., success). The result is equal to SLVS_RESULT_OKAY, + and the parameters in param[] have been updated. + + * The solver can prove that two constraints are inconsistent (for + example, if a line with nonzero length is constrained both + horizontal and vertical). In that case, a list of inconsistent + constraints is generated in failed[]. + + * The solver cannot prove that two constraints are inconsistent, but + it cannot find a solution. In that case, the list of unsatisfied + constraints is generated in failed[]. + + +TYPES OF ENTITIES +================= + +SLVS_E_POINT_IN_3D + + A point in 3d. Defined by three parameters: + + param[0] the point's x coordinate + param[1] y + param[1] z + + +SLVS_E_POINT_IN_2D + + A point within a workplane. Defined by the workplane + + wrkpl + + and by two parameters + + param[0] the point's u coordinate + param[1] v + + within the coordinate system of the workplane. For example, if the + workplane is the zx plane, then u = z and v = x. If the workplane is + parallel to the zx plane, but translated so that the workplane's + origin is (3, 4, 5), then u = z - 5 and v = x - 3. + + +SLVS_E_NORMAL_IN_3D + + A normal. In SolveSpace, "normals" represent a 3x3 rotation matrix + from our base coordinate system to a new frame. Defined by the + unit quaternion + + param[0] w + param[1] x + param[2] y + param[3] z + + where the quaternion is given by w + x*i + y*j + z*k. + + It is useful to think of this quaternion as representing a plane + through the origin. This plane has three associated vectors: basis + vectors U, V that lie within the plane, and normal N that is + perpendicular to it. This means that + + [ U V N ]' + + defines a 3x3 rotation matrix. So U, V, and N all have unit length, + and are orthogonal so that + + U cross V = N + V cross N = U + N cross U = V + + Convenience functions (Slvs_Quaternion*) are provided to convert + between this representation as vectors U, V, N and the unit + quaternion. + + A unit quaternion has only 3 degrees of freedom, but is specified in + terms of 4 parameters. An extra constraint is therefore generated + implicitly, that + + w^2 + x^2 + y^2 + z^2 = 1 + + +SLVS_E_NORMAL_IN_2D + + A normal within a workplane. This is identical to the workplane's + normal, so it is simply defined by + + wrkpl + + This entity type is used, for example, to define a circle that lies + within a workplane. The circle's normal is the same as the workplane's + normal, so we can use an SLVS_E_NORMAL_IN_2D to copy the workplane's + normal. + + +SLVS_E_DISTANCE + + A distance. This entity is used to define the radius of a circle, by + a single parameter + + param[0] r + + +SLVS_E_WORKPLANE + + An oriented plane, somewhere in 3d. This entity therefore has 6 + degrees of freedom: three translational, and three rotational. It is + specified in terms of its origin + + point[0] origin + + and a normal + + normal + + The normal describes three vectors U, V, N, as discussed in the + documentation for SLVS_E_NORMAL_IN_3D. The plane is therefore given + by the equation + + p = origin + s*U + t*V + + for any scalar s and t. + + +SLVS_E_LINE_SEGMENT + + A line segment between two endpoints + + point[0] + point[1] + + +SLVS_E_CUBIC + + A nonrational cubic Bezier segment + + point[0] starting point P0 + point[1] control point P1 + point[2] control point P2 + point[3] ending point P3 + + The curve then has equation + + p(t) = P0*(1 - t)^3 + 3*P1*(1 - t)^2*t + 3*P2*(1 - t)*t^2 + P3*t^3 + + as t goes from 0 to 1. + + +SLVS_E_CIRCLE + + A complete circle. The circle lies within a plane with normal + + normal + + The circle is centered at + + point[0] + + The circle's radius is + + distance + + +SLVS_E_ARC_OF_CIRCLE + + An arc of a circle. An arc must always lie within a workplane; it + cannot be free in 3d. So it is specified with a workplane + + wrkpl + + It is then defined by three points + + point[0] center of the circle + point[1] beginning of the arc + point[2] end of the arc + + and its normal + + normal identical to the normal of the workplane + + The arc runs counter-clockwise from its beginning to its end (with + the workplane's normal pointing towards the viewer). If the beginning + and end of the arc are coincident, then the arc is considered to + represent a full circle. + + This representation has an extra degree of freedom. An extra + constraint is therefore generated implicitly, so that + + distance(center, beginning) = distance(center, end) + + +TYPES OF CONSTRAINTS +==================== + +Many constraints can apply either in 3d, or in a workplane. This is +determined by the wrkpl member of the constraint. If that member is set +to SLVS_FREE_IN_3D, then the constraint applies in 3d. If that member +is set equal to a workplane, the the constraint applies projected into +that workplane. (For example, a constraint on the distance between two +points actually applies to the projected distance). + +Constraints that may be used in 3d or projected into a workplane are +marked with a single star (*). Constraints that must always be used with +a workplane are marked with a double star (**). Constraints that ignore +the wrkpl member are marked with no star. + +SLVS_C_PT_PT_DISTANCE* + + The distance between points ptA and ptB is equal to valA. This is an + unsigned distance, so valA must always be positive. + +SLVS_C_PROJ_PT_DISTANCE + + The distance between points ptA and ptB, as projected along the line + or normal entityA, is equal to valA. This is a signed distance. + +SLVS_C_POINTS_COINCIDENT* + + Points ptA and ptB are coincident (i.e., exactly on top of each + other). + +SLVS_C_PT_PLANE_DISTANCE + + The distance from point ptA to workplane entityA is equal to + valA. This is a signed distance; positive versus negative valA + correspond to a point that is above vs. below the plane. + +SLVS_C_PT_LINE_DISTANCE* + + The distance from point ptA to line segment entityA is equal to valA. + + If the constraint is projected, then valA is a signed distance; + positive versus negative valA correspond to a point that is above + vs. below the line. + + If the constraint applies in 3d, then valA must always be positive. + +SLVS_C_PT_IN_PLANE + + The point ptA lies in plane entityA. + +SLVS_C_PT_ON_LINE* + + The point ptA lies on the line entityA. + + Note that this constraint removes one degree of freedom when projected + in to the plane, but two degrees of freedom in 3d. + +SLVS_C_EQUAL_LENGTH_LINES* + + The lines entityA and entityB have equal length. + +SLVS_C_LENGTH_RATIO* + + The length of line entityA divided by the length of line entityB is + equal to valA. + +SLVS_C_LENGTH_DIFFERENCE* + + The lengths of line entityA and line entityB differ by valA. + +SLVS_C_EQ_LEN_PT_LINE_D* + + The length of the line entityA is equal to the distance from point + ptA to line entityB. + +SLVS_C_EQ_PT_LN_DISTANCES* + + The distance from the line entityA to the point ptA is equal to the + distance from the line entityB to the point ptB. + +SLVS_C_EQUAL_ANGLE* + + The angle between lines entityA and entityB is equal to the angle + between lines entityC and entityD. + + If other is true, then the angles are supplementary (i.e., theta1 = + 180 - theta2) instead of equal. + +SLVS_C_EQUAL_LINE_ARC_LEN* + + The length of the line entityA is equal to the length of the circular + arc entityB. + +SLVS_C_SYMMETRIC* + + The points ptA and ptB are symmetric about the plane entityA. This + means that they are on opposite sides of the plane and at equal + distances from the plane, and that the line connecting ptA and ptB + is normal to the plane. + +SLVS_C_SYMMETRIC_HORIZ +SLVS_C_SYMMETRIC_VERT** + + The points ptA and ptB are symmetric about the horizontal or vertical + axis of the specified workplane. + +SLVS_C_SYMMETRIC_LINE** + + The points ptA and ptB are symmetric about the line entityA. + +SLVS_C_AT_MIDPOINT* + + The point ptA lies at the midpoint of the line entityA. + +SLVS_C_HORIZONTAL +SLVS_C_VERTICAL** + + The line connecting points ptA and ptB is horizontal or vertical. Or, + the line segment entityA is horizontal or vertical. If points are + specified then the line segment should be left zero, and if a line + is specified then the points should be left zero. + +SLVS_C_DIAMETER + + The diameter of circle or arc entityA is equal to valA. + +SLVS_C_PT_ON_CIRCLE + + The point ptA lies on the right cylinder obtained by extruding circle + or arc entityA normal to its plane. + +SLVS_C_SAME_ORIENTATION + + The normals entityA and entityB describe identical rotations. This + constraint therefore restricts three degrees of freedom. + +SLVS_C_ANGLE* + + The angle between lines entityA and entityB is equal to valA, where + valA is specified in degrees. This constraint equation is written + in the form + + (A dot B)/(|A||B|) = cos(valA) + + where A and B are vectors in the directions of lines A and B. This + equation does not specify the angle unambiguously; for example, + note that valA = +/- 90 degrees will produce the same equation. + + If other is true, then the constraint is instead that + + (A dot B)/(|A||B|) = -cos(valA) + +SLVS_C_PERPENDICULAR* + + Identical to SLVS_C_ANGLE with valA = 90 degrees. + +SLVS_C_PARALLEL* + + Lines entityA and entityB are parallel. + + Note that this constraint removes one degree of freedom when projected + in to the plane, but two degrees of freedom in 3d. + +SLVS_C_ARC_LINE_TANGENT** + + The arc entityA is tangent to the line entityB. If other is false, + then the arc is tangent at its beginning (point[1]). If other is true, + then the arc is tangent at its end (point[2]). + +SLVS_C_CUBIC_LINE_TANGENT* + + The cubic entityA is tangent to the line entityB. The variable + other indicates: + + if false: the cubic is tangent at its beginning + if true: the cubic is tangent at its end + + The beginning of the cubic is point[0], and the end is point[3]. + +SLVS_C_CURVE_CURVE_TANGENT** + + The two entities entityA and entityB are tangent. These entities can + each be either an arc or a cubic, in any combination. The flags + other and other2 indicate which endpoint of the curve is tangent, + for entityA and entityB respectively: + + if false: the entity is tangent at its beginning + if true: the entity is tangent at its end + + For cubics, point[0] is the beginning, and point[3] is the end. For + arcs, point[1] is the beginning, and point[2] is the end. + +SLVS_C_EQUAL_RADIUS + + The circles or arcs entityA and entityB have equal radius. + +SLVS_C_WHERE_DRAGGED* + + The point ptA is locked at its initial numerical guess, and cannot + be moved. This constrains two degrees of freedom in a workplane, + and three in free space. It's therefore possible for this constraint + to overconstrain the sketch, for example if it's applied to a point + with one remaining degree of freedom. + + +USING THE SOLVER +================ + +The solver is provided as a DLL, and will be usable with most +Windows-based developement tools. Examples are provided: + + in C/C++ - CDemo.c + + in VB.NET - VbDemo.vb + + +Copyright 2009-2013 Jonathan Westhues. + diff --git a/exposed/VbDemo.vb b/exposed/VbDemo.vb new file mode 100644 index 0000000..6781fc4 --- /dev/null +++ b/exposed/VbDemo.vb @@ -0,0 +1,1252 @@ +'----------------------------------------------------------------------------- +' Some sample code for slvs.dll. We draw some geometric entities, provide +' initial guesses for their positions, and then constrain them. The solver +' calculates their new positions, in order to satisfy the constraints. +' +' The library is distributed as a DLL, but the functions are designed to +' be usable from .net languages through a P/Invoke. This file contains an +' example of that process, and a wrapper class around those P/Invoke'd +' functions that you may wish to use a starting point in your own +' application. +' +' Copyright 2008-2013 Jonathan Westhues. +'----------------------------------------------------------------------------- + +Imports System.Runtime.InteropServices + +Module VbDemo + + ' Call our example functions, which set up some kind of sketch, solve + ' it, and then print the result. + Sub Main() + Console.WriteLine("EXAMPLE IN 3d (by objects):") + Example3dWithObjects() + Console.WriteLine("") + + Console.WriteLine("EXAMPLE IN 2d (by objects):") + Example2dWithObjects() + Console.WriteLine("") + + Console.WriteLine("EXAMPLE IN 3d (by handles):") + Example3dWithHandles() + Console.WriteLine("") + + Console.WriteLine("EXAMPLE IN 2d (by handles):") + Example2dWithHandles() + Console.WriteLine("") + End Sub + + + ''''''''''''''''''''''''''''''' + ' This is the simplest way to use the library. A set of wrapper + ' classes allow us to represent entities (e.g., lines and points) + ' as .net objects. So we create an Slvs object, which will contain + ' the entire sketch, with all the entities and constraints. + ' + ' We then create entity objects (for example, points and lines) + ' associated with that sketch, indicating the initial positions of + ' those entities and any hierarchical relationships among them (e.g., + ' defining a line entity in terms of endpoint entities). We also add + ' constraints associated with those entities. + ' + ' Finally, we solve, and print the new positions of the entities. If the + ' solution succeeded, then the entities will satisfy the constraints. If + ' not, then the solver will suggest problematic constraints that, if + ' removed, would render the sketch solvable. + + Sub Example3dWithObjects() + Dim g As UInteger + Dim slv As New Slvs + + ' This will contain a single group, which will arbitrarily number 1. + g = 1 + + Dim p1, p2 As Slvs.Point3d + ' A point, initially at (x y z) = (10 10 10) + p1 = slv.NewPoint3d(g, 10.0, 10.0, 10.0) + ' and a second point at (20 20 20) + p2 = slv.NewPoint3d(g, 20.0, 20.0, 20.0) + + Dim ln As Slvs.LineSegment + ' and a line segment connecting them. + ln = slv.NewLineSegment(g, slv.FreeIn3d(), p1, p2) + + ' The distance between the points should be 30.0 units. + slv.AddConstraint(1, g, Slvs.SLVS_C_PT_PT_DISTANCE, _ + slv.FreeIn3d(), 30.0, p1, p2, Nothing, Nothing) + + ' Let's tell the solver to keep the second point as close to constant + ' as possible, instead moving the first point. + slv.Solve(g, p2, True) + + If (slv.GetResult() = Slvs.SLVS_RESULT_OKAY) Then + ' We call the GetX(), GetY(), and GetZ() functions to see + ' where the solver moved our points to. + Console.WriteLine(String.Format( _ + "okay; now at ({0:F3}, {1:F3}, {2:F3})", _ + p1.GetX(), p1.GetY(), p1.GetZ())) + Console.WriteLine(String.Format( _ + " ({0:F3}, {1:F3}, {2:F3})", _ + p2.GetX(), p2.GetY(), p2.GetZ())) + Console.WriteLine(slv.GetDof().ToString() + " DOF") + Else + Console.WriteLine("solve failed") + End If + End Sub + + Sub Example2dWithObjects() + Dim g As UInteger + Dim slv As New Slvs + + g = 1 + + ' First, we create our workplane. Its origin corresponds to the origin + ' of our base frame (x y z) = (0 0 0) + Dim origin As Slvs.Point3d + origin = slv.NewPoint3d(g, 0.0, 0.0, 0.0) + ' and it is parallel to the xy plane, so it has basis vectors (1 0 0) + ' and (0 1 0). + Dim normal As Slvs.Normal3d + normal = slv.NewNormal3d(g, 1.0, 0.0, 0.0, _ + 0.0, 1.0, 0.0) + + Dim wrkpl As Slvs.Workplane + wrkpl = slv.NewWorkplane(g, origin, normal) + + ' Now create a second group. We'll solve group 2, while leaving group 1 + ' constant; so the workplane that we've created will be locked down, + ' and the solver can't move it. + g = 2 + ' These points are represented by their coordinates (u v) within the + ' workplane, so they need only two parameters each. + Dim pl1, pl2 As Slvs.Point2d + pl1 = slv.NewPoint2d(g, wrkpl, 10.0, 20.0) + pl2 = slv.NewPoint2d(g, wrkpl, 20.0, 10.0) + + ' And we create a line segment with those endpoints. + Dim ln As Slvs.LineSegment + ln = slv.NewLineSegment(g, wrkpl, pl1, pl2) + + ' Now three more points. + Dim pc, ps, pf As Slvs.Point2d + pc = slv.NewPoint2d(g, wrkpl, 100.0, 120.0) + ps = slv.NewPoint2d(g, wrkpl, 120.0, 110.0) + pf = slv.NewPoint2d(g, wrkpl, 115.0, 115.0) + + ' And arc, centered at point pc, starting at point ps, ending at + ' point pf. + Dim arc As Slvs.ArcOfCircle + arc = slv.NewArcOfCircle(g, wrkpl, normal, pc, ps, pf) + + ' Now one more point, and a distance + Dim pcc As Slvs.Point2d + pcc = slv.NewPoint2d(g, wrkpl, 200.0, 200.0) + Dim r As Slvs.Distance + r = slv.NewDistance(g, wrkpl, 30.0) + + ' And a complete circle, centered at point pcc with radius equal to + ' distance r. The normal is the same as for our workplane. + Dim circle As Slvs.Circle + circle = slv.NewCircle(g, wrkpl, pcc, normal, r) + + ' The length of our line segment is 30.0 units. + slv.AddConstraint(1, g, Slvs.SLVS_C_PT_PT_DISTANCE, _ + wrkpl, 30.0, pl1, pl2, Nothing, Nothing) + + ' And the distance from our line segment to the origin is 10.0 units. + slv.AddConstraint(2, g, Slvs.SLVS_C_PT_LINE_DISTANCE, _ + wrkpl, 10.0, origin, Nothing, ln, Nothing) + + ' And the line segment is vertical. + slv.AddConstraint(3, g, Slvs.SLVS_C_VERTICAL, _ + wrkpl, 0.0, Nothing, Nothing, ln, Nothing) + + ' And the distance from one endpoint to the origin is 15.0 units. + slv.AddConstraint(4, g, Slvs.SLVS_C_PT_PT_DISTANCE, _ + wrkpl, 15.0, pl1, origin, Nothing, Nothing) + + ' And same for the other endpoint; so if you add this constraint then + ' the sketch is overconstrained and will signal an error. + 'slv.AddConstraint(5, g, Slvs.SLVS_C_PT_PT_DISTANCE, _ + ' wrkpl, 18.0, pl2, origin, Nothing, Nothing) + + ' The arc and the circle have equal radius. + slv.AddConstraint(6, g, Slvs.SLVS_C_EQUAL_RADIUS, _ + wrkpl, 0.0, Nothing, Nothing, arc, circle) + + ' The arc has radius 17.0 units. + slv.AddConstraint(7, g, Slvs.SLVS_C_DIAMETER, _ + wrkpl, 2 * 17.0, Nothing, Nothing, arc, Nothing) + + ' If the solver fails, then ask it to report which constraints caused + ' the problem. + slv.Solve(g, True) + + If (slv.GetResult() = Slvs.SLVS_RESULT_OKAY) Then + Console.WriteLine("solved okay") + ' We call the GetU(), GetV(), and GetDistance() functions to + ' see where the solver moved our points and distances to. + Console.WriteLine(String.Format( _ + "line from ({0:F3} {1:F3}) to ({2:F3} {3:F3})", _ + pl1.GetU(), pl1.GetV(), _ + pl2.GetU(), pl2.GetV())) + Console.WriteLine(String.Format( _ + "arc center ({0:F3} {1:F3}) start ({2:F3} {3:F3}) " + _ + "finish ({4:F3} {5:F3})", _ + pc.GetU(), pc.GetV(), _ + ps.GetU(), ps.GetV(), _ + pf.GetU(), pf.GetV())) + Console.WriteLine(String.Format( _ + "circle center ({0:F3} {1:F3}) radius {2:F3}", _ + pcc.GetU(), pcc.GetV(), _ + r.GetDistance())) + + Console.WriteLine(slv.GetDof().ToString() + " DOF") + Else + Console.Write("solve failed; problematic constraints are:") + Dim t As UInteger + For Each t In slv.GetFaileds() + Console.Write(" " + t.ToString()) + Next + Console.WriteLine("") + If (slv.GetResult() = Slvs.SLVS_RESULT_INCONSISTENT) Then + Console.WriteLine("system inconsistent") + Else + Console.WriteLine("system nonconvergent") + End If + End If + + End Sub + + + ''''''''''''''''''''''''''''''' + ' This is a lower-level way to use the library. Internally, the library + ' represents parameters, entities, and constraints by integer handles. + ' Here, those handles are assigned manually, and not by the wrapper + ' classes. + + Sub Example3dWithHandles() + Dim g As UInteger + Dim slv As New Slvs + + ' This will contain a single group, which will arbitrarily number 1. + g = 1 + + ' A point, initially at (x y z) = (10 10 10) + slv.AddParam(1, g, 10.0) + slv.AddParam(2, g, 10.0) + slv.AddParam(3, g, 10.0) + slv.AddPoint3d(101, g, 1, 2, 3) + + ' and a second point at (20 20 20) + slv.AddParam(4, g, 20.0) + slv.AddParam(5, g, 20.0) + slv.AddParam(6, g, 20.0) + slv.AddPoint3d(102, g, 4, 5, 6) + + ' and a line segment connecting them. + slv.AddLineSegment(200, g, Slvs.SLVS_FREE_IN_3D, 101, 102) + + ' The distance between the points should be 30.0 units. + slv.AddConstraint(1, g, Slvs.SLVS_C_PT_PT_DISTANCE, _ + Slvs.SLVS_FREE_IN_3D, 30.0, 101, 102, 0, 0) + + ' Let's tell the solver to keep the second point as close to constant + ' as possible, instead moving the first point. That's parameters + ' 4, 5, and 6. + slv.Solve(g, 4, 5, 6, 0, True) + + If (slv.GetResult() = Slvs.SLVS_RESULT_OKAY) Then + ' Note that we are referring to the parameters by their handles, + ' and not by their index in the list. This is a difference from + ' the C example. + Console.WriteLine(String.Format( _ + "okay; now at ({0:F3}, {1:F3}, {2:F3})", _ + slv.GetParamByHandle(1), slv.GetParamByHandle(2), _ + slv.GetParamByHandle(3))) + Console.WriteLine(String.Format( _ + " ({0:F3}, {1:F3}, {2:F3})", _ + slv.GetParamByHandle(4), slv.GetParamByHandle(5), _ + slv.GetParamByHandle(6))) + Console.WriteLine(slv.GetDof().ToString() + " DOF") + Else + Console.WriteLine("solve failed") + End If + End Sub + + + Sub Example2dWithHandles() + Dim g As UInteger + Dim qw, qx, qy, qz As Double + + Dim slv As New Slvs + + g = 1 + + ' First, we create our workplane. Its origin corresponds to the origin + ' of our base frame (x y z) = (0 0 0) + slv.AddParam(1, g, 0.0) + slv.AddParam(2, g, 0.0) + slv.AddParam(3, g, 0.0) + slv.AddPoint3d(101, g, 1, 2, 3) + ' and it is parallel to the xy plane, so it has basis vectors (1 0 0) + ' and (0 1 0). + slv.MakeQuaternion(1, 0, 0, _ + 0, 1, 0, qw, qx, qy, qz) + slv.AddParam(4, g, qw) + slv.AddParam(5, g, qx) + slv.AddParam(6, g, qy) + slv.AddParam(7, g, qz) + slv.AddNormal3d(102, g, 4, 5, 6, 7) + + slv.AddWorkplane(200, g, 101, 102) + + ' Now create a second group. We'll solve group 2, while leaving group 1 + ' constant; so the workplane that we've created will be locked down, + ' and the solver can't move it. + g = 2 + ' These points are represented by their coordinates (u v) within the + ' workplane, so they need only two parameters each. + slv.AddParam(11, g, 10.0) + slv.AddParam(12, g, 20.0) + slv.AddPoint2d(301, g, 200, 11, 12) + + slv.AddParam(13, g, 20.0) + slv.AddParam(14, g, 10.0) + slv.AddPoint2d(302, g, 200, 13, 14) + + ' And we create a line segment with those endpoints. + slv.AddLineSegment(400, g, 200, 301, 302) + + ' Now three more points. + slv.AddParam(15, g, 100.0) + slv.AddParam(16, g, 120.0) + slv.AddPoint2d(303, g, 200, 15, 16) + + slv.AddParam(17, g, 120.0) + slv.AddParam(18, g, 110.0) + slv.AddPoint2d(304, g, 200, 17, 18) + + slv.AddParam(19, g, 115.0) + slv.AddParam(20, g, 115.0) + slv.AddPoint2d(305, g, 200, 19, 20) + + ' And arc, centered at point 303, starting at point 304, ending at + ' point 305. + slv.AddArcOfCircle(401, g, 200, 102, 303, 304, 305) + + ' Now one more point, and a distance + slv.AddParam(21, g, 200.0) + slv.AddParam(22, g, 200.0) + slv.AddPoint2d(306, g, 200, 21, 22) + + slv.AddParam(23, g, 30.0) + slv.AddDistance(307, g, 200, 23) + + ' And a complete circle, centered at point 306 with radius equal to + ' distance 307. The normal is 102, the same as our workplane. + slv.AddCircle(402, g, 200, 306, 102, 307) + + ' The length of our line segment is 30.0 units. + slv.AddConstraint(1, g, Slvs.SLVS_C_PT_PT_DISTANCE, _ + 200, 30.0, 301, 302, 0, 0) + + ' And the distance from our line segment to the origin is 10.0 units. + slv.AddConstraint(2, g, Slvs.SLVS_C_PT_LINE_DISTANCE, _ + 200, 10.0, 101, 0, 400, 0) + + ' And the line segment is vertical. + slv.AddConstraint(3, g, Slvs.SLVS_C_VERTICAL, _ + 200, 0.0, 0, 0, 400, 0) + + ' And the distance from one endpoint to the origin is 15.0 units. + slv.AddConstraint(4, g, Slvs.SLVS_C_PT_PT_DISTANCE, _ + 200, 15.0, 301, 101, 0, 0) + + ' And same for the other endpoint; so if you add this constraint then + ' the sketch is overconstrained and will signal an error. + 'slv.AddConstraint(5, g, Slvs.SLVS_C_PT_PT_DISTANCE, _ + ' 200, 18.0, 302, 101, 0, 0) + + ' The arc and the circle have equal radius. + slv.AddConstraint(6, g, Slvs.SLVS_C_EQUAL_RADIUS, _ + 200, 0.0, 0, 0, 401, 402) + + ' The arc has radius 17.0 units. + slv.AddConstraint(7, g, Slvs.SLVS_C_DIAMETER, _ + 200, 2 * 17.0, 0, 0, 401, 0) + + ' If the solver fails, then ask it to report which constraints caused + ' the problem. + slv.Solve(g, 0, 0, 0, 0, True) + + If (slv.GetResult() = Slvs.SLVS_RESULT_OKAY) Then + Console.WriteLine("solved okay") + ' Note that we are referring to the parameters by their handles, + ' and not by their index in the list. This is a difference from + ' the C example. + Console.WriteLine(String.Format( _ + "line from ({0:F3} {1:F3}) to ({2:F3} {3:F3})", _ + slv.GetParamByHandle(11), slv.GetParamByHandle(12), _ + slv.GetParamByHandle(13), slv.GetParamByHandle(14))) + Console.WriteLine(String.Format( _ + "arc center ({0:F3} {1:F3}) start ({2:F3} {3:F3}) " + _ + "finish ({4:F3} {5:F3})", _ + slv.GetParamByHandle(15), slv.GetParamByHandle(16), _ + slv.GetParamByHandle(17), slv.GetParamByHandle(18), _ + slv.GetParamByHandle(19), slv.GetParamByHandle(20))) + Console.WriteLine(String.Format( _ + "circle center ({0:F3} {1:F3}) radius {2:F3}", _ + slv.GetParamByHandle(21), slv.GetParamByHandle(22), _ + slv.GetParamByHandle(23))) + + Console.WriteLine(slv.GetDof().ToString() + " DOF") + Else + Console.Write("solve failed; problematic constraints are:") + Dim t As UInteger + For Each t In slv.GetFaileds() + Console.Write(" " + t.ToString()) + Next + Console.WriteLine("") + If (slv.GetResult() = Slvs.SLVS_RESULT_INCONSISTENT) Then + Console.WriteLine("system inconsistent") + Else + Console.WriteLine("system nonconvergent") + End If + End If + + End Sub + + + ''''''''''''''''''''''''''''''' + ' The interface to the library, and the wrapper functions around + ' that interface, follow. + + ' These are the core functions imported from the DLL + _ + Public Sub Slvs_Solve(ByVal sys As IntPtr, ByVal hg As UInteger) + End Sub + + _ + Public Sub Slvs_MakeQuaternion( + ByVal ux As Double, ByVal uy As Double, ByVal uz As Double, + ByVal vx As Double, ByVal vy As Double, ByVal vz As Double, + ByRef qw As Double, ByRef qx As Double, ByRef qy As Double, + ByRef qz As Double) + End Sub + + ' And this is a thin wrapper around those functions, which provides + ' convenience functions similar to those provided in slvs.h for the C API. + Public Class Slvs + + Public Structure Slvs_Param + Public h As UInteger + Public group As UInteger + Public val As Double + End Structure + + Public Const SLVS_FREE_IN_3D As Integer = 0 + + Public Const SLVS_E_POINT_IN_3D As Integer = 50000 + Public Const SLVS_E_POINT_IN_2D As Integer = 50001 + Public Const SLVS_E_NORMAL_IN_3D As Integer = 60000 + Public Const SLVS_E_NORMAL_IN_2D As Integer = 60001 + Public Const SLVS_E_DISTANCE As Integer = 70000 + Public Const SLVS_E_WORKPLANE As Integer = 80000 + Public Const SLVS_E_LINE_SEGMENT As Integer = 80001 + Public Const SLVS_E_CUBIC As Integer = 80002 + Public Const SLVS_E_CIRCLE As Integer = 80003 + Public Const SLVS_E_ARC_OF_CIRCLE As Integer = 80004 + + Public Structure Slvs_Entity + Public h As UInteger + Public group As UInteger + + Public type As Integer + + Public wrkpl As UInteger + Public point0 As UInteger + Public point1 As UInteger + Public point2 As UInteger + Public point3 As UInteger + Public normal As UInteger + Public distance As UInteger + + Public param0 As UInteger + Public param1 As UInteger + Public param2 As UInteger + Public param3 As UInteger + End Structure + + Public Const SLVS_C_POINTS_COINCIDENT As Integer = 100000 + Public Const SLVS_C_PT_PT_DISTANCE As Integer = 100001 + Public Const SLVS_C_PT_PLANE_DISTANCE As Integer = 100002 + Public Const SLVS_C_PT_LINE_DISTANCE As Integer = 100003 + Public Const SLVS_C_PT_FACE_DISTANCE As Integer = 100004 + Public Const SLVS_C_PT_IN_PLANE As Integer = 100005 + Public Const SLVS_C_PT_ON_LINE As Integer = 100006 + Public Const SLVS_C_PT_ON_FACE As Integer = 100007 + Public Const SLVS_C_EQUAL_LENGTH_LINES As Integer = 100008 + Public Const SLVS_C_LENGTH_RATIO As Integer = 100009 + Public Const SLVS_C_EQ_LEN_PT_LINE_D As Integer = 100010 + Public Const SLVS_C_EQ_PT_LN_DISTANCES As Integer = 100011 + Public Const SLVS_C_EQUAL_ANGLE As Integer = 100012 + Public Const SLVS_C_EQUAL_LINE_ARC_LEN As Integer = 100013 + Public Const SLVS_C_SYMMETRIC As Integer = 100014 + Public Const SLVS_C_SYMMETRIC_HORIZ As Integer = 100015 + Public Const SLVS_C_SYMMETRIC_VERT As Integer = 100016 + Public Const SLVS_C_SYMMETRIC_LINE As Integer = 100017 + Public Const SLVS_C_AT_MIDPOINT As Integer = 100018 + Public Const SLVS_C_HORIZONTAL As Integer = 100019 + Public Const SLVS_C_VERTICAL As Integer = 100020 + Public Const SLVS_C_DIAMETER As Integer = 100021 + Public Const SLVS_C_PT_ON_CIRCLE As Integer = 100022 + Public Const SLVS_C_SAME_ORIENTATION As Integer = 100023 + Public Const SLVS_C_ANGLE As Integer = 100024 + Public Const SLVS_C_PARALLEL As Integer = 100025 + Public Const SLVS_C_PERPENDICULAR As Integer = 100026 + Public Const SLVS_C_ARC_LINE_TANGENT As Integer = 100027 + Public Const SLVS_C_CUBIC_LINE_TANGENT As Integer = 100028 + Public Const SLVS_C_EQUAL_RADIUS As Integer = 100029 + Public Const SLVS_C_PROJ_PT_DISTANCE As Integer = 100030 + Public Const SLVS_C_WHERE_DRAGGED As Integer = 100031 + Public Const SLVS_C_CURVE_CURVE_TANGENT As Integer = 100032 + Public Const SLVS_C_LENGTH_DIFFERENCE As Integer = 100033 + + Public Structure Slvs_Constraint + Public h As UInteger + Public group As UInteger + + Public type As Integer + + Public wrkpl As UInteger + + Public valA As Double + Public ptA As UInteger + Public ptB As UInteger + Public entityA As UInteger + Public entityB As UInteger + Public entityC As UInteger + Public entityD As UInteger + + Public other As Integer + Public other2 As Integer + End Structure + + Public Const SLVS_RESULT_OKAY As Integer = 0 + Public Const SLVS_RESULT_INCONSISTENT As Integer = 1 + Public Const SLVS_RESULT_DIDNT_CONVERGE As Integer = 2 + Public Const SLVS_RESULT_TOO_MANY_UNKNOWNS As Integer = 3 + + Public Structure Slvs_System + Public param As IntPtr + Public params As Integer + Public entity As IntPtr + Public entities As Integer + Public constraint As IntPtr + Public constraints As Integer + + Public dragged0 As UInteger + Public dragged1 As UInteger + Public dragged2 As UInteger + Public dragged3 As UInteger + + Public calculatedFaileds As Integer + + Public failed As IntPtr + Public faileds As Integer + + Public dof As Integer + + Public result As Integer + End Structure + + Dim Params As New List(Of Slvs_Param) + Dim Entities As New List(Of Slvs_Entity) + Dim Constraints As New List(Of Slvs_Constraint) + + Dim Faileds As New List(Of UInteger) + + Dim Result As Integer + Dim Dof As Integer + + ' Return the value of a parameter, by its handle. This function + ' may be used, for example, to obtain the new values of the + ' parameters after a call to Solve(). + Public Function GetParamByHandle(ByVal h As UInteger) As Double + Dim t As Slvs_Param + For Each t In Params + If (t.h = h) Then + Return t.val + End If + Next + Throw New Exception("Invalid parameter handle.") + End Function + + ' Return the value of a parameter, by its index in the list (where + ' that index is determined by the order in which the parameters + ' were inserted with AddParam(), not by its handle). + Public Function GetParamByIndex(ByVal i As Integer) As Double + Return Params(i).val + End Function + + ' Get the result after a call to Solve(). This may be + ' SLVS_RESULT_OKAY - it worked + ' SLVS_RESULT_INCONSISTENT - failed, inconsistent + ' SLVS_RESULT_DIDNT_CONVERGE - consistent, but still failed + ' SLVS_RESULT_TOO_MANY_UNKNOWNS - too many parameters in one group + Public Function GetResult() As Integer + Return Result + End Function + + ' After a call to Solve(), this returns the number of unconstrained + ' degrees of freedom for the sketch. + Public Function GetDof() As Integer + Return Dof + End Function + + ' After a failing call to Solve(), this returns the list of + ' constraints, identified by ther handle, that would fix the + ' system if they were deleted. This list will be populated only + ' if calculateFaileds is True in the Solve() call. + Public Function GetFaileds() As List(Of UInteger) + Return Faileds + End Function + + ' Clear our lists of entities, constraints, and parameters. + Public Sub ResetAll() + Params.Clear() + Entities.Clear() + Constraints.Clear() + End Sub + + + ''''''''''''''''''''''''''''''' + ' These functions are broadly similar to the Slvs_Make... + ' functions in slvs.h. See the file DOC.txt accompanying the + ' library for details. + + Public Sub AddParam(ByVal h As UInteger, ByVal group As UInteger, + ByVal val As Double) + Dim p As Slvs_Param + p.h = h + p.group = group + p.val = val + Params.Add(p) + End Sub + + Public Sub AddPoint2d(ByVal h As UInteger, ByVal group As UInteger, + ByVal wrkpl As UInteger, + ByVal u As UInteger, ByVal v As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_POINT_IN_2D + e.wrkpl = wrkpl + e.param0 = u + e.param1 = v + Entities.Add(e) + End Sub + + Public Sub AddPoint3d(ByVal h As UInteger, ByVal group As UInteger, + ByVal x As UInteger, ByVal y As UInteger, ByVal z As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_POINT_IN_3D + e.wrkpl = SLVS_FREE_IN_3D + e.param0 = x + e.param1 = y + e.param2 = z + Entities.Add(e) + End Sub + + Public Sub AddNormal3d(ByVal h As UInteger, ByVal group As UInteger, + ByVal qw As UInteger, ByVal qx As UInteger, + ByVal qy As UInteger, ByVal qz As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_NORMAL_IN_3D + e.wrkpl = SLVS_FREE_IN_3D + e.param0 = qw + e.param1 = qx + e.param2 = qy + e.param3 = qz + Entities.Add(e) + End Sub + + Public Sub AddNormal2d(ByVal h As UInteger, ByVal group As UInteger, + ByVal wrkpl As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_NORMAL_IN_2D + e.wrkpl = wrkpl + Entities.Add(e) + End Sub + + Public Sub AddDistance(ByVal h As UInteger, ByVal group As UInteger, + ByVal wrkpl As UInteger, ByVal d As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_DISTANCE + e.wrkpl = wrkpl + e.param0 = d + Entities.Add(e) + End Sub + + Public Sub AddLineSegment(ByVal h As UInteger, ByVal group As UInteger, + ByVal wrkpl As UInteger, + ByVal ptA As UInteger, ByVal ptB As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_LINE_SEGMENT + e.wrkpl = wrkpl + e.point0 = ptA + e.point1 = ptB + Entities.Add(e) + End Sub + + Public Sub AddCubic(ByVal h As UInteger, ByVal group As UInteger, + ByVal wrkpl As UInteger, + ByVal pt0 As UInteger, ByVal pt1 As UInteger, + ByVal pt2 As UInteger, ByVal pt3 As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_CUBIC + e.wrkpl = wrkpl + e.point0 = pt0 + e.point1 = pt1 + e.point2 = pt2 + e.point3 = pt3 + Entities.Add(e) + End Sub + + Public Sub AddArcOfCircle(ByVal h As UInteger, ByVal group As UInteger, + ByVal wrkpl As UInteger, + ByVal normal As UInteger, + ByVal center As UInteger, + ByVal pstart As UInteger, + ByVal pend As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_ARC_OF_CIRCLE + e.wrkpl = wrkpl + e.normal = normal + e.point0 = center + e.point1 = pstart + e.point2 = pend + Entities.Add(e) + End Sub + + Public Sub AddCircle(ByVal h As UInteger, ByVal group As UInteger, + ByVal wrkpl As UInteger, + ByVal center As UInteger, ByVal normal As UInteger, + ByVal radius As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_CIRCLE + e.wrkpl = wrkpl + e.point0 = center + e.normal = normal + e.distance = radius + Entities.Add(e) + End Sub + + Public Sub AddWorkplane(ByVal h As UInteger, ByVal group As UInteger, + ByVal origin As UInteger, + ByVal normal As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_WORKPLANE + e.wrkpl = SLVS_FREE_IN_3D + e.point0 = origin + e.normal = normal + Entities.Add(e) + End Sub + + Public Sub AddConstraint(ByVal h As UInteger, + ByVal group As UInteger, + ByVal type As Integer, + ByVal wrkpl As UInteger, + ByVal valA As Double, + ByVal ptA As UInteger, + ByVal ptB As UInteger, + ByVal entityA As UInteger, + ByVal entityB As UInteger) + Dim c As Slvs_Constraint + c.h = h + c.group = group + c.type = type + c.wrkpl = wrkpl + c.valA = valA + c.ptA = ptA + c.ptB = ptB + c.entityA = entityA + c.entityB = entityB + Constraints.Add(c) + End Sub + + ' Solve the system. The geometry of the system must already have + ' been specified through the Add...() calls. The result of the + ' solution process may be obtained by calling GetResult(), + ' GetFaileds(), GetDof(), and GetParamByXXX(). + ' + ' The parameters draggedx (indicated by their handles) will be held + ' as close as possible to their original positions, even if this + ' results in large moves for other parameters. This feature may be + ' useful if, for example, the user is dragging the point whose + ' location is defined by those parameters. Unused draggedx + ' parameters may be specified as zero. + Public Sub Solve(ByVal group As UInteger, + ByVal dragged0 As UInteger, ByVal dragged1 As UInteger, + ByVal dragged2 As UInteger, ByVal dragged3 As UInteger, + ByVal calculateFaileds As Boolean) + Dim i As Integer + + Dim pp, p(Params.Count()) As Slvs_Param + i = 0 + For Each pp In Params + p(i) = pp + i += 1 + Next + + Dim ee, e(Entities.Count()) As Slvs_Entity + i = 0 + For Each ee In Entities + e(i) = ee + i += 1 + Next + + Dim cc, c(Constraints.Count()) As Slvs_Constraint + i = 0 + For Each cc In Constraints + c(i) = cc + i += 1 + Next + Dim f(Constraints.Count()) As UInteger + + Dim sys As Slvs_System + + Dim pgc, egc, cgc As GCHandle + pgc = GCHandle.Alloc(p, GCHandleType.Pinned) + sys.param = pgc.AddrOfPinnedObject() + sys.params = Params.Count() + egc = GCHandle.Alloc(e, GCHandleType.Pinned) + sys.entity = egc.AddrOfPinnedObject() + sys.entities = Entities.Count() + cgc = GCHandle.Alloc(c, GCHandleType.Pinned) + sys.constraint = cgc.AddrOfPinnedObject() + sys.constraints = Constraints.Count() + + sys.dragged0 = dragged0 + sys.dragged1 = dragged1 + sys.dragged2 = dragged2 + sys.dragged3 = dragged3 + + Dim fgc As GCHandle + fgc = GCHandle.Alloc(f, GCHandleType.Pinned) + If calculateFaileds Then + sys.calculatedFaileds = 1 + Else + sys.calculatedFaileds = 0 + End If + sys.faileds = Constraints.Count() + sys.failed = fgc.AddrOfPinnedObject() + + Dim sysgc As GCHandle + sysgc = GCHandle.Alloc(sys, GCHandleType.Pinned) + + Slvs_Solve(sysgc.AddrOfPinnedObject(), group) + + sys = sysgc.Target + + For i = 0 To Params.Count() - 1 + Params(i) = p(i) + Next + + Faileds.Clear() + For i = 0 To sys.faileds - 1 + Faileds.Add(f(i)) + Next + + sysgc.Free() + fgc.Free() + pgc.Free() + egc.Free() + cgc.Free() + + Result = sys.result + Dof = sys.dof + End Sub + ' A simpler version of the function, if the parameters being dragged + ' correspond to a single point. + Public Sub Solve(ByVal group As UInteger, ByVal dragged As Point, + ByVal calculatedFaileds As Boolean) + If TypeOf dragged Is Point2d Then + Dim p As Point2d + p = dragged + Solve(group, p.up.H, p.vp.H, 0, 0, calculatedFaileds) + ElseIf TypeOf dragged Is Point3d Then + Dim p As Point3d + p = dragged + Solve(group, p.xp.H, p.yp.H, p.zp.H, 0, calculatedFaileds) + Else + Throw New Exception("Can't get dragged params for point.") + End If + End Sub + ' or if it's a single distance (e.g., the radius of a circle) + Public Sub Solve(ByVal group As UInteger, ByVal dragged As Distance, + ByVal calculatedFaileds As Boolean) + Solve(group, dragged.dp.H, 0, 0, 0, calculatedFaileds) + End Sub + ' or if it's nothing. + Public Sub Solve(ByVal group As UInteger, + ByVal calculateFaileds As Boolean) + Solve(group, 0, 0, 0, 0, calculateFaileds) + End Sub + + ' Return the quaternion in (qw, qx, qy, qz) that represents a + ' rotation from the base frame to a coordinate system with the + ' specified basis vectors u and v. For example, u = (0, 1, 0) + ' and v = (0, 0, 1) specifies the yz plane, such that a point with + ' (u, v) = (7, 12) has (x, y, z) = (0, 7, 12). + Public Sub MakeQuaternion( + ByVal ux As Double, ByVal uy As Double, ByVal uz As Double, + ByVal vx As Double, ByVal vy As Double, ByVal vz As Double, + ByRef qw As Double, ByRef qx As Double, ByRef qy As Double, + ByRef qz As Double) + Slvs_MakeQuaternion(ux, uy, uz, _ + vx, vy, vz, _ + qw, qx, qy, qz) + End Sub + + Public Function FreeIn3d() + Return New Workplane(Me) + End Function + + + ''''''''''''''''''''''''''''''' + ' Functions to create the object-oriented wrappers defined below. + + Public Function NewParam(ByVal group As UInteger, ByVal val As Double) + Return New Param(Me, group, val) + End Function + Public Function NewPoint2d(ByVal group As UInteger, + ByVal wrkpl As Workplane, + ByVal u As Double, ByVal v As Double) + Return New Point2d(Me, group, wrkpl, u, v) + End Function + Public Function NewPoint2d(ByVal group As UInteger, + ByVal wrkpl As Workplane, + ByVal u As Param, ByVal v As Param) + Return New Point2d(Me, group, wrkpl, u, v) + End Function + Public Function NewPoint3d(ByVal group As UInteger, + ByVal x As Double, + ByVal y As Double, + ByVal z As Double) + Return New Point3d(Me, group, x, y, z) + End Function + Public Function NewPoint3d(ByVal group As UInteger, + ByVal x As Param, + ByVal y As Param, + ByVal z As Param) + Return New Point3d(Me, group, x, y, z) + End Function + Public Function NewNormal3d(ByVal group As UInteger, + ByVal ux As Double, ByVal uy As Double, ByVal uz As Double, + ByVal vx As Double, ByVal vy As Double, ByVal vz As Double) + Return New Normal3d(Me, group, ux, uy, uz, vx, vy, vz) + End Function + Public Function NewNormal3d(ByVal group As UInteger, + ByVal qw As Param, ByVal qx As Param, + ByVal qy As Param, ByVal qz As Param) + Return New Normal3d(Me, group, qw, qx, qy, qz) + End Function + Public Function NewNormal2d(ByVal group As UInteger, + ByVal wrkpl As Workplane) + Return New Normal2d(Me, group, wrkpl) + End Function + Public Function NewDistance(ByVal group As UInteger, + ByVal wrkpl As Workplane, ByVal d As Double) + Return New Distance(Me, group, wrkpl, d) + End Function + Public Function NewDistance(ByVal group As UInteger, + ByVal wrkpl As Workplane, ByVal d As Param) + Return New Distance(Me, group, wrkpl, d) + End Function + Public Function NewLineSegment(ByVal group As UInteger, + ByVal wrkpl As Workplane, + ByVal ptA As Point, ByVal ptB As Point) + Return New LineSegment(Me, group, wrkpl, ptA, ptB) + End Function + Public Function NewArcOfCircle(ByVal group As UInteger, + ByVal wrkpl As Workplane, + ByVal normal As Normal, + ByVal center As Point, + ByVal pstart As Point, + ByVal pend As Point) + Return New ArcOfCircle(Me, group, wrkpl, normal, _ + center, pstart, pend) + End Function + Public Function NewCircle(ByVal group As UInteger, + ByVal wrkpl As Workplane, + ByVal center As Point, + ByVal normal As Normal, + ByVal radius As Distance) + Return New Circle(Me, group, wrkpl, center, normal, radius) + End Function + Public Function NewWorkplane(ByVal group As UInteger, + ByVal origin As Point, + ByVal normal As Normal) + Return New Workplane(Me, group, origin, normal) + End Function + + Public Sub AddConstraint(ByVal H As UInteger, ByVal group As UInteger, + ByVal type As Integer, + ByVal wrkpl As Workplane, + ByVal valA As Double, + ByVal ptA As Point, ByVal ptB As Point, + ByVal entityA As Entity, + ByVal entityB As Entity) + AddConstraint(H, group, type, _ + If(IsNothing(wrkpl), 0, wrkpl.H), _ + valA, _ + If(IsNothing(ptA), 0, ptA.H), _ + If(IsNothing(ptB), 0, ptB.H), _ + If(IsNothing(entityA), 0, entityA.H), _ + If(IsNothing(entityB), 0, entityB.H)) + End Sub + + + ''''''''''''''''''''''''''''''' + ' The object-oriented wrapper classes themselves, to allow the + ' representation of entities and constraints as .net objects, not + ' integer handles. These don't do any work themselves, beyond + ' allocating and storing a unique integer handle. + ' + ' These functions will assign parameters and entities with + ' consecutive handles starting from 1. If they are intermixed + ' with parameters and entities with user-specified handles, then + ' those handles must be chosen not to conflict, e.g. starting + ' from 100 000 or another large number. + + Public Class Param + Public Slv As Slvs + Public H As UInteger + + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal val As Double) + Slv = s + H = Slv.Params.Count() + 1 + Slv.AddParam(H, group, val) + End Sub + End Class + + Public MustInherit Class Entity + Public Slv As Slvs + Public H As UInteger + + Public Sub New(ByVal s As Slvs) + Slv = s + H = Slv.Entities.Count() + 1 + End Sub + End Class + + Public MustInherit Class Point + Inherits Entity + Public Sub New(ByVal s As Slvs) + MyBase.New(s) + End Sub + End Class + + Public MustInherit Class Normal + Inherits Entity + Public Sub New(ByVal s As Slvs) + MyBase.New(s) + End Sub + End Class + + Public Class Point2d + Inherits Point + Public up, vp As Param + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal wrkpl As Workplane, + ByVal u As Double, ByVal v As Double) + MyBase.New(s) + up = New Param(Slv, group, u) + vp = New Param(Slv, group, v) + Slv.AddPoint2d(H, group, wrkpl.H, up.H, vp.H) + End Sub + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal wrkpl As Workplane, + ByVal u As Param, ByVal v As Param) + MyBase.New(s) + Slv.AddPoint2d(H, group, wrkpl.H, u.H, v.H) + up = u + vp = v + End Sub + Function GetU() + Return Slv.GetParamByHandle(up.H) + End Function + Function GetV() + Return Slv.GetParamByHandle(vp.H) + End Function + End Class + + Public Class Point3d + Inherits Point + Public xp, yp, zp As Param + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal x As Double, ByVal y As Double, + ByVal z As Double) + MyBase.New(s) + xp = New Param(Slv, group, x) + yp = New Param(Slv, group, y) + zp = New Param(Slv, group, z) + Slv.AddPoint3d(H, group, xp.H, yp.H, zp.H) + End Sub + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal x As Param, ByVal y As Param, ByVal z As Param) + MyBase.New(s) + Slv.AddPoint3d(H, group, x.H, y.H, z.H) + xp = x + yp = y + zp = z + End Sub + Function GetX() + Return Slv.GetParamByHandle(xp.H) + End Function + Function GetY() + Return Slv.GetParamByHandle(yp.H) + End Function + Function GetZ() + Return Slv.GetParamByHandle(zp.H) + End Function + End Class + + Public Class Normal3d + Inherits Normal + Dim qwp, qxp, qyp, qzp As Param + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal ux As Double, ByVal uy As Double, ByVal uz As Double, + ByVal vx As Double, ByVal vy As Double, ByVal vz As Double) + MyBase.New(s) + Dim qw, qx, qy, qz As Double + Slv.MakeQuaternion(ux, uy, uz, vx, vy, vz, qw, qx, qy, qz) + qwp = New Param(Slv, group, qw) + qxp = New Param(Slv, group, qx) + qyp = New Param(Slv, group, qy) + qzp = New Param(Slv, group, qz) + Slv.AddNormal3d(H, group, qwp.H, qxp.H, qyp.H, qzp.H) + End Sub + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal qw As Param, ByVal qx As Param, + ByVal qy As Param, ByVal qz As Param) + MyBase.New(s) + Slv.AddNormal3d(H, group, qw.H, qx.H, qy.H, qz.H) + qwp = qw + qxp = qx + qyp = qy + qzp = qz + End Sub + End Class + + Public Class Normal2d + Inherits Normal + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal wrkpl As Workplane) + MyBase.New(s) + Slv.AddNormal2d(H, group, wrkpl.H) + End Sub + End Class + + Public Class Distance + Inherits Entity + Public dp As Param + + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal wrkpl As Workplane, ByVal d As Double) + MyBase.New(s) + dp = New Param(Slv, group, d) + Slv.AddDistance(H, group, wrkpl.H, dp.H) + End Sub + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal wrkpl As Workplane, ByVal d As Param) + MyBase.New(s) + Slv.AddDistance(H, group, wrkpl.H, d.H) + dp = d + End Sub + Function GetDistance() As Double + Return Slv.GetParamByHandle(dp.H) + End Function + End Class + + Public Class LineSegment + Inherits Entity + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal wrkpl As Workplane, + ByVal ptA As Point, ByVal ptB As Point) + MyBase.New(s) + Slv.AddLineSegment(H, group, wrkpl.H, ptA.H, ptB.H) + End Sub + End Class + + Public Class Cubic + Inherits Entity + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal wrkpl As Workplane, + ByVal pt0 As Point, ByVal pt1 As Point, + ByVal pt2 As Point, ByVal pt3 As Point) + MyBase.New(s) + Slv.AddCubic(H, group, wrkpl.H, pt0.H, pt1.H, pt2.H, pt3.H) + End Sub + End Class + + Public Class ArcOfCircle + Inherits Entity + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal wrkpl As Workplane, ByVal normal As Normal, + ByVal center As Point, ByVal pstart As Point, + ByVal pend As Point) + MyBase.New(s) + Slv.AddArcOfCircle(H, group, wrkpl.H, normal.H, _ + center.H, pstart.H, pend.H) + End Sub + End Class + + Public Class Circle + Inherits Entity + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal wrkpl As Workplane, ByVal center As Point, + ByVal normal As Normal, ByVal radius As Distance) + MyBase.New(s) + Slv.AddCircle(H, group, wrkpl.H, center.H, normal.H, radius.H) + End Sub + End Class + + Public Class Workplane + Inherits Entity + Public Sub New(ByVal s As Slvs) + MyBase.New(s) + H = SLVS_FREE_IN_3D + End Sub + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal origin As Point, ByVal normal As Normal) + MyBase.New(s) + Slv.AddWorkplane(H, group, origin.H, normal.H) + End Sub + End Class + + End Class + +End Module + diff --git a/extlib/libdxfrw/CMakeLists.txt b/extlib/libdxfrw/CMakeLists.txt new file mode 100644 index 0000000..564e91a --- /dev/null +++ b/extlib/libdxfrw/CMakeLists.txt @@ -0,0 +1,75 @@ +if(MSVC) + # Disable some overly strict MSVC warnings. + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd4244 -wd4800 -wd4805") +endif() + +set(intern_HEADERS + intern/drw_cptable932.h + intern/drw_cptable936.h + intern/drw_cptable949.h + intern/drw_cptable950.h + intern/drw_cptables.h + intern/drw_dbg.h + intern/drw_textcodec.h + intern/dwgbuffer.h + intern/dwgreader15.h + intern/dwgreader18.h + intern/dwgreader21.h + intern/dwgreader24.h + intern/dwgreader27.h + intern/dwgreader.h + intern/dwgutil.h + intern/dxfreader.h + intern/dxfwriter.h + intern/rscodec.h) + +set(intern_SOURCES + intern/drw_dbg.cpp + intern/drw_textcodec.cpp + intern/dwgbuffer.cpp + intern/dwgreader15.cpp + intern/dwgreader18.cpp + intern/dwgreader21.cpp + intern/dwgreader24.cpp + intern/dwgreader27.cpp + intern/dwgreader.cpp + intern/dwgutil.cpp + intern/dxfreader.cpp + intern/dxfwriter.cpp + intern/rscodec.cpp) + +set(libdxfrw_HEADERS + drw_base.h + drw_interface.h + drw_header.h + drw_classes.h + drw_entities.h + drw_objects.h + libdxfrw.h) + +set(libdxfrw_SOURCES + drw_header.cpp + drw_classes.cpp + drw_entities.cpp + drw_objects.cpp + libdxfrw.cpp) + +set(libdwgr_HEADERS + libdwgr.h) + +set(libdwgr_SOURCES + libdwgr.cpp) + +add_library(dxfrw STATIC + ${intern_HEADERS} + ${intern_SOURCES} + ${libdxfrw_HEADERS} + ${libdxfrw_SOURCES} + ${libdwgr_HEADERS} + ${libdwgr_SOURCES}) + +target_include_directories(dxfrw PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/intern/) + +target_include_directories(dxfrw PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/) diff --git a/extlib/libdxfrw/drw_base.h b/extlib/libdxfrw/drw_base.h new file mode 100644 index 0000000..648f3e6 --- /dev/null +++ b/extlib/libdxfrw/drw_base.h @@ -0,0 +1,480 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DRW_BASE_H +#define DRW_BASE_H + +#define DRW_VERSION "0.6.3" + +#include +#include +#include + +#ifdef DRW_ASSERTS +# define drw_assert(a) assert(a) +#else +# define drw_assert(a) +#endif + +#define UTF8STRING std::string +#define DRW_UNUSED(x) (void)x + +#if defined(WIN64) || defined(_WIN64) || defined(__WIN64__) +# define DRW_WIN +#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) +# define DRW_WIN +#elif defined(__MWERKS__) && defined(__INTEL__) +# define DRW_WIN +#else +# define DRW_POSIX +#endif + +#ifndef M_PI + #define M_PI 3.141592653589793238462643 +#endif +#ifndef M_PI_2 + #define M_PI_2 1.57079632679489661923 +#endif +#define M_PIx2 6.283185307179586 // 2*PI +#define ARAD 57.29577951308232 + +typedef signed char dint8; /* 8 bit signed */ +typedef signed short dint16; /* 16 bit signed */ +typedef signed int dint32; /* 32 bit signed */ +typedef long long int dint64; /* 64 bit signed */ + +typedef unsigned char duint8; /* 8 bit unsigned */ +typedef unsigned short duint16; /* 16 bit unsigned */ +typedef unsigned int duint32; /* 32 bit unsigned */ +typedef unsigned long long int duint64; /* 64 bit unsigned */ + +typedef float dfloat32; /* 32 bit floating point */ +typedef double ddouble64; /* 64 bit floating point */ +typedef long double ddouble80; /* 80 bit floating point */ + + +namespace DRW { + +//! Version numbers for the DXF Format. +enum Version { + UNKNOWNV, /*!< UNKNOWN VERSION. */ + AC1006, /*!< R10. */ + AC1009, /*!< R11 & R12. */ + AC1012, /*!< R13. */ + AC1014, /*!< R14. */ + AC1015, /*!< ACAD 2000. */ + AC1018, /*!< ACAD 2004. */ + AC1021, /*!< ACAD 2007. */ + AC1024, /*!< ACAD 2010. */ + AC1027 /*!< ACAD 2013. */ +}; + +enum error { +BAD_NONE, /*!< No error. */ +BAD_UNKNOWN, /*!< UNKNOWN. */ +BAD_OPEN, /*!< error opening file. */ +BAD_VERSION, /*!< unsupported version. */ +BAD_READ_METADATA, /*!< error reading matadata. */ +BAD_READ_FILE_HEADER, /*!< error in file header read process. */ +BAD_READ_HEADER, /*!< error in header vars read process. */ +BAD_READ_HANDLES, /*!< error in object map read process. */ +BAD_READ_CLASSES, /*!< error in classes read process. */ +BAD_READ_TABLES, /*!< error in tables read process. */ +BAD_READ_BLOCKS, /*!< error in block read process. */ +BAD_READ_ENTITIES, /*!< error in entities read process. */ +BAD_READ_OBJECTS /*!< error in objects read process. */ +}; + +enum DBG_LEVEL { + NONE, + DEBUG +}; + +//! Special codes for colors +enum ColorCodes { + ColorByLayer = 256, + ColorByBlock = 0 +}; + +//! Spaces +enum Space { + ModelSpace = 0, + PaperSpace = 1 +}; + +//! Special kinds of handles +enum HandleCodes { + NoHandle = 0 +}; + +//! Shadow mode +enum ShadowMode { + CastAndReceieveShadows = 0, + CastShadows = 1, + ReceiveShadows = 2, + IgnoreShadows = 3 +}; + +//! Special kinds of materials +enum MaterialCodes { + MaterialByLayer = 0 +}; + +//! Special kinds of plot styles +enum PlotStyleCodes { + DefaultPlotStyle = 0 +}; + +//! Special kinds of transparencies +enum TransparencyCodes { + Opaque = 0, + Transparent = -1 +}; + +} // namespace DRW + +//! Class to handle 3D coordinate point +/*! +* Class to handle 3D coordinate point +* @author Rallaz +*/ +class DRW_Coord { +public: + DRW_Coord() { x = 0; y = 0; z = 0; } + DRW_Coord(double ix, double iy, double iz) { + x = ix; y = iy; z = iz; + } + + DRW_Coord operator = (const DRW_Coord& data) { + x = data.x; y = data.y; z = data.z; + return *this; + } +/*!< convert to unitary vector */ + void unitize(){ + double dist; + dist = sqrt(x*x + y*y + z*z); + if (dist > 0.0) { + x= x/dist; + y= y/dist; + z= z/dist; + } + } + +public: + double x; + double y; + double z; +}; + + +//! Class to handle vertex +/*! +* Class to handle vertex for lwpolyline entity +* @author Rallaz +*/ +class DRW_Vertex2D { +public: + DRW_Vertex2D() { +// eType = DRW::LWPOLYLINE; + stawidth = endwidth = bulge = 0; + } + DRW_Vertex2D(double sx, double sy, double b) { + stawidth = endwidth = 0; + x = sx; + y =sy; + bulge = b; + } + +public: + double x; /*!< x coordinate, code 10 */ + double y; /*!< y coordinate, code 20 */ + double stawidth; /*!< Start width, code 40 */ + double endwidth; /*!< End width, code 41 */ + double bulge; /*!< bulge, code 42 */ +}; + + +//! Class to handle header vars +/*! +* Class to handle header vars +* @author Rallaz +*/ +class DRW_Variant { +public: + enum TYPE { + STRING, + INTEGER, + DOUBLE, + COORD, + INVALID + }; +//TODO: add INT64 support + DRW_Variant() { + type = INVALID; + } + + DRW_Variant(int c, dint32 i) { + code = c; addInt(i); + } + DRW_Variant(int c, duint32 i) { + code = c; addInt(static_cast(i));//RLZ: verify if worrk with big numbers + } + DRW_Variant(int c, double d) { + code = c; addDouble(d); + } + DRW_Variant(int c, UTF8STRING s) { + code = c; addString(s); + } + DRW_Variant(int c, DRW_Coord crd) { + code = c; addCoord(crd); + } + DRW_Variant(const DRW_Variant& d) { + code = d.code; + type = d.type; + content = d.content; + if (d.type == COORD) { + vdata = d.vdata; + content.v = &vdata; + } + if (d.type == STRING) { + sdata = d.sdata; + content.s = &sdata; + } + } + + ~DRW_Variant() { + } + + void addString(UTF8STRING s) {setType(STRING); sdata = s; content.s = &sdata;} + void addInt(int i) {setType(INTEGER); content.i = i;} + void addDouble(double d) {setType(DOUBLE); content.d = d;} + void addCoord() {setType(COORD); vdata.x=0.0; vdata.y=0.0; vdata.z=0.0; content.v = &vdata;} + void addCoord(DRW_Coord v) {setType(COORD); vdata = v; content.v = &vdata;} + void setType(enum TYPE t) { type = t;} + void setCoordX(double d) { if (type == COORD) vdata.x = d;} + void setCoordY(double d) { if (type == COORD) vdata.y = d;} + void setCoordZ(double d) { if (type == COORD) vdata.z = d;} + +private: + typedef union { + UTF8STRING *s; + dint32 i; + double d; + DRW_Coord *v; + } DRW_VarContent; + +public: + DRW_VarContent content; + enum TYPE type; + int code; /*!< dxf code of this value*/ + +private: + std::string sdata; + DRW_Coord vdata; +}; + +//! Class to handle dwg handles +/*! +* Class to handle dwg handles +* @author Rallaz +*/ +class dwgHandle{ +public: + dwgHandle(){ + code=0; + size=0; + ref=0; + } + ~dwgHandle(){} + duint8 code; + duint8 size; + duint32 ref; +}; + +//! Class to convert between line width and integer +/*! +* Class to convert between line width and integer +* verifing valid values, if value is not valid +* returns widthDefault. +* @author Rallaz +*/ +class DRW_LW_Conv{ +public: + enum lineWidth { + width00 = 0, /*!< 0.00mm (dxf 0)*/ + width01 = 1, /*!< 0.05mm (dxf 5)*/ + width02 = 2, /*!< 0.09mm (dxf 9)*/ + width03 = 3, /*!< 0.13mm (dxf 13)*/ + width04 = 4, /*!< 0.15mm (dxf 15)*/ + width05 = 5, /*!< 0.18mm (dxf 18)*/ + width06 = 6, /*!< 0.20mm (dxf 20)*/ + width07 = 7, /*!< 0.25mm (dxf 25)*/ + width08 = 8, /*!< 0.30mm (dxf 30)*/ + width09 = 9, /*!< 0.35mm (dxf 35)*/ + width10 = 10, /*!< 0.40mm (dxf 40)*/ + width11 = 11, /*!< 0.50mm (dxf 50)*/ + width12 = 12, /*!< 0.53mm (dxf 53)*/ + width13 = 13, /*!< 0.60mm (dxf 60)*/ + width14 = 14, /*!< 0.70mm (dxf 70)*/ + width15 = 15, /*!< 0.80mm (dxf 80)*/ + width16 = 16, /*!< 0.90mm (dxf 90)*/ + width17 = 17, /*!< 1.00mm (dxf 100)*/ + width18 = 18, /*!< 1.06mm (dxf 106)*/ + width19 = 19, /*!< 1.20mm (dxf 120)*/ + width20 = 20, /*!< 1.40mm (dxf 140)*/ + width21 = 21, /*!< 1.58mm (dxf 158)*/ + width22 = 22, /*!< 2.00mm (dxf 200)*/ + width23 = 23, /*!< 2.11mm (dxf 211)*/ + widthByLayer = 29, /*!< by layer (dxf -1) */ + widthByBlock = 30, /*!< by block (dxf -2) */ + widthDefault = 31 /*!< by default (dxf -3) */ + }; + + static int lineWidth2dxfInt(enum lineWidth lw){ + switch (lw){ + case widthByLayer: + return -1; + case widthByBlock: + return -2; + case widthDefault: + return -3; + case width00: + return 0; + case width01: + return 5; + case width02: + return 9; + case width03: + return 13; + case width04: + return 15; + case width05: + return 18; + case width06: + return 20; + case width07: + return 25; + case width08: + return 30; + case width09: + return 35; + case width10: + return 40; + case width11: + return 50; + case width12: + return 53; + case width13: + return 60; + case width14: + return 70; + case width15: + return 80; + case width16: + return 90; + case width17: + return 100; + case width18: + return 106; + case width19: + return 120; + case width20: + return 140; + case width21: + return 158; + case width22: + return 200; + case width23: + return 211; + default: + break; + } + return -3; + } + + static int lineWidth2dwgInt(enum lineWidth lw){ + return static_cast (lw); + } + + static enum lineWidth dxfInt2lineWidth(int i){ + if (i<0) { + if (i==-1) + return widthByLayer; + else if (i==-2) + return widthByBlock; + else if (i==-3) + return widthDefault; + } else if (i<3) { + return width00; + } else if (i<7) { + return width01; + } else if (i<11) { + return width02; + } else if (i<14) { + return width03; + } else if (i<16) { + return width04; + } else if (i<19) { + return width05; + } else if (i<22) { + return width06; + } else if (i<27) { + return width07; + } else if (i<32) { + return width08; + } else if (i<37) { + return width09; + } else if (i<45) { + return width10; + } else if (i<52) { + return width11; + } else if (i<57) { + return width12; + } else if (i<65) { + return width13; + } else if (i<75) { + return width14; + } else if (i<85) { + return width15; + } else if (i<95) { + return width16; + } else if (i<103) { + return width17; + } else if (i<112) { + return width18; + } else if (i<130) { + return width19; + } else if (i<149) { + return width20; + } else if (i<180) { + return width21; + } else if (i<205) { + return width22; + } else { + return width23; + } + //default by default + return widthDefault; + } + + static enum lineWidth dwgInt2lineWidth(int i){ + if ( (i>-1 && i<24) || (i>28 && i<32) ) { + return static_cast (i); + } + //default by default + return widthDefault; + } +}; + +#endif + +// EOF diff --git a/extlib/libdxfrw/drw_classes.cpp b/extlib/libdxfrw/drw_classes.cpp new file mode 100644 index 0000000..02eb01d --- /dev/null +++ b/extlib/libdxfrw/drw_classes.cpp @@ -0,0 +1,115 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include "drw_classes.h" +#include "intern/dxfreader.h" +#include "intern/dxfwriter.h" +#include "intern/dwgbuffer.h" +#include "intern/drw_dbg.h" + +void DRW_Class::parseCode(int code, dxfReader *reader){ + switch (code) { + case 1: + recName = reader->getUtf8String(); + break; + case 2: + className = reader->getUtf8String(); + break; + case 3: + appName = reader->getUtf8String(); + break; + case 90: + proxyFlag = reader->getInt32(); + break; + case 91: + instanceCount = reader->getInt32(); + break; + case 280: + wasaProxyFlag = reader->getInt32(); + break; + case 281: + entityFlag = reader->getInt32(); + break; + default: + break; + } +} + +bool DRW_Class::parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer *strBuf){ + DRW_DBG("\n***************************** parsing Class *********************************************\n"); + + classNum = buf->getBitShort(); + DRW_DBG("Class number: "); DRW_DBG(classNum); + proxyFlag = buf->getBitShort(); //in dwg specs says "version" + + appName = strBuf->getVariableText(version, false); + className = strBuf->getVariableText(version, false); + recName = strBuf->getVariableText(version, false); + + DRW_DBG("\napp name: "); DRW_DBG(appName.c_str()); + DRW_DBG("\nclass name: "); DRW_DBG(className.c_str()); + DRW_DBG("\ndxf rec name: "); DRW_DBG(recName.c_str()); + wasaProxyFlag = buf->getBit(); //in dwg says wasazombie + entityFlag = buf->getBitShort(); + entityFlag = entityFlag == 0x1F2 ? 1: 0; + + DRW_DBG("\nProxy capabilities flag: "); DRW_DBG(proxyFlag); + DRW_DBG(", proxy flag (280): "); DRW_DBG(wasaProxyFlag); + DRW_DBG(", entity flag: "); DRW_DBGH(entityFlag); + + if (version > DRW::AC1015) {//2004+ + instanceCount = buf->getBitLong(); + DRW_DBG("\nInstance Count: "); DRW_DBG(instanceCount); + duint32 dwgVersion = buf->getBitLong(); + DRW_DBG("\nDWG version: "); DRW_DBG(dwgVersion); + DRW_DBG("\nmaintenance version: "); DRW_DBG(buf->getBitLong()); + DRW_DBG("\nunknown 1: "); DRW_DBG(buf->getBitLong()); + DRW_DBG("\nunknown 2: "); DRW_DBG(buf->getBitLong()); + } + DRW_DBG("\n"); + toDwgType(); + return buf->isGood(); +} + +void DRW_Class::write(dxfWriter *writer, DRW::Version ver){ + if (ver > DRW::AC1009) { + writer->writeString(0, "CLASS"); + writer->writeString(1, recName); + writer->writeString(2, className); + writer->writeString(3, appName); + writer->writeInt32(90, proxyFlag); + if (ver > DRW::AC1015) { //2004+ + writer->writeInt32(91, instanceCount); + } + writer->writeInt16(280, wasaProxyFlag); + writer->writeInt16(281, entityFlag); + } +} + +void DRW_Class::toDwgType(){ + if (recName == "LWPOLYLINE") + dwgType = 77; + else if (recName == "HATCH") + dwgType = 78; + else if (recName == "GROUP") + dwgType = 72; +/* else if (recName == "GROUP") + dwgType = 72;*/ + else if (recName == "LAYOUT") + dwgType = 82; + else if (recName == "IMAGE") + dwgType = 101; + else if (recName == "IMAGEDEF") + dwgType = 102; + else + dwgType =0; +} diff --git a/extlib/libdxfrw/drw_classes.h b/extlib/libdxfrw/drw_classes.h new file mode 100644 index 0000000..84ea32d --- /dev/null +++ b/extlib/libdxfrw/drw_classes.h @@ -0,0 +1,58 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DRW_CLASSES_H +#define DRW_CLASSES_H + + +#include "drw_base.h" +//#include "libdwgr.h" + +class dxfReader; +class dxfWriter; +class dwgBuffer; + +//! Class to handle classes entries +/*! +* Class to handle classes table entries +* TODO: verify the dxf read/write part +* @author Rallaz +*/ +class DRW_Class { +public: + DRW_Class() { + } + ~DRW_Class() { + } + + void parseCode(int code, dxfReader *reader); + void write(dxfWriter *writer, DRW::Version ver); + bool parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer *strBuf); + +private: + void toDwgType(); +public: + UTF8STRING recName; /*!< record name, code 1 */ + UTF8STRING className; /*!< C++ class name, code 2 */ + UTF8STRING appName; /*!< app name, code 3 */ + int proxyFlag; /*!< Proxy capabilities flag, code 90 */ + int instanceCount; /*!< number of instances for a custom class, code 91*/ + int wasaProxyFlag; /*!< proxy flag (app loaded on save), code 280 */ + int entityFlag; /*!< entity flag, code 281 (0 object, 1 entity)*/ +public: //only for read dwg + duint16 classNum; + int dwgType; +}; + +#endif + +// EOF diff --git a/extlib/libdxfrw/drw_entities.cpp b/extlib/libdxfrw/drw_entities.cpp new file mode 100644 index 0000000..0265f56 --- /dev/null +++ b/extlib/libdxfrw/drw_entities.cpp @@ -0,0 +1,3064 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include "drw_entities.h" +#include "intern/dxfreader.h" +#include "intern/dwgbuffer.h" +#include "intern/drw_dbg.h" + + +//! Calculate arbitary axis +/*! +* Calculate arbitary axis for apply extrusions +* @author Rallaz +*/ +void DRW_Entity::calculateAxis(DRW_Coord extPoint){ + //Follow the arbitrary DXF definitions for extrusion axes. + if (fabs(extPoint.x) < 0.015625 && fabs(extPoint.y) < 0.015625) { + //If we get here, implement Ax = Wy x N where Wy is [0,1,0] per the DXF spec. + //The cross product works out to Wy.y*N.z-Wy.z*N.y, Wy.z*N.x-Wy.x*N.z, Wy.x*N.y-Wy.y*N.x + //Factoring in the fixed values for Wy gives N.z,0,-N.x + extAxisX.x = extPoint.z; + extAxisX.y = 0; + extAxisX.z = -extPoint.x; + } else { + //Otherwise, implement Ax = Wz x N where Wz is [0,0,1] per the DXF spec. + //The cross product works out to Wz.y*N.z-Wz.z*N.y, Wz.z*N.x-Wz.x*N.z, Wz.x*N.y-Wz.y*N.x + //Factoring in the fixed values for Wz gives -N.y,N.x,0. + extAxisX.x = -extPoint.y; + extAxisX.y = extPoint.x; + extAxisX.z = 0; + } + + extAxisX.unitize(); + + //Ay = N x Ax + extAxisY.x = (extPoint.y * extAxisX.z) - (extAxisX.y * extPoint.z); + extAxisY.y = (extPoint.z * extAxisX.x) - (extAxisX.z * extPoint.x); + extAxisY.z = (extPoint.x * extAxisX.y) - (extAxisX.x * extPoint.y); + + extAxisY.unitize(); +} + +//! Extrude a point using arbitary axis +/*! +* apply extrusion in a point using arbitary axis (previous calculated) +* @author Rallaz +*/ +void DRW_Entity::extrudePoint(DRW_Coord extPoint, DRW_Coord *point){ + double px, py, pz; + px = (extAxisX.x*point->x)+(extAxisY.x*point->y)+(extPoint.x*point->z); + py = (extAxisX.y*point->x)+(extAxisY.y*point->y)+(extPoint.y*point->z); + pz = (extAxisX.z*point->x)+(extAxisY.z*point->y)+(extPoint.z*point->z); + + point->x = px; + point->y = py; + point->z = pz; +} + +bool DRW_Entity::parseCode(int code, dxfReader *reader){ + switch (code) { + case 5: + handle = reader->getHandleString(); + break; + case 330: + parentHandle = reader->getHandleString(); + break; + case 8: + layer = reader->getUtf8String(); + break; + case 6: + lineType = reader->getUtf8String(); + break; + case 62: + color = reader->getInt32(); + break; + case 370: + lWeight = DRW_LW_Conv::dxfInt2lineWidth(reader->getInt32()); + break; + case 48: + ltypeScale = reader->getDouble(); + break; + case 60: + visible = reader->getBool(); + break; + case 420: + color24 = reader->getInt32(); + break; + case 430: + colorName = reader->getString(); + break; + case 67: + space = static_cast(reader->getInt32()); + break; + case 102: + parseDxfGroups(code, reader); + break; + case 1000: + case 1001: + case 1002: + case 1003: + case 1004: + case 1005: + extData.push_back(new DRW_Variant(code, reader->getString())); + break; + case 1010: + case 1011: + case 1012: + case 1013: + curr = new DRW_Variant(); + curr->addCoord(); + curr->setCoordX(reader->getDouble()); + curr->code = code; + extData.push_back(curr); + break; + case 1020: + case 1021: + case 1022: + case 1023: + if (curr) + curr->setCoordY(reader->getDouble()); + break; + case 1030: + case 1031: + case 1032: + case 1033: + if (curr) + curr->setCoordZ(reader->getDouble()); + curr=NULL; + break; + case 1040: + case 1041: + case 1042: + extData.push_back(new DRW_Variant(code, reader->getDouble() )); + break; + case 1070: + case 1071: + extData.push_back(new DRW_Variant(code, reader->getInt32() )); + break; + default: + break; + } + return true; +} + +//parses dxf 102 groups to read entity +bool DRW_Entity::parseDxfGroups(int code, dxfReader *reader){ + std::list ls; + DRW_Variant curr; + int nc; + std::string appName= reader->getString(); + if (!appName.empty() && appName.at(0)== '{'){ + curr.addString(appName.substr(1, (int) appName.size()-1)); + curr.code = code; + ls.push_back(curr); + while (code !=102 && appName.at(0)== '}'){ + reader->readRec(&nc); + curr.code = code; + if (code == 330 || code == 360) + curr.addInt(reader->getHandleString()); + else { + switch (reader->type) { + case dxfReader::STRING: + curr.addString(reader->getString()); + break; + case dxfReader::INT32: + case dxfReader::INT64: + curr.addInt(reader->getInt32()); + break; + case dxfReader::DOUBLE: + curr.addDouble(reader->getDouble()); + break; + case dxfReader::BOOL: + curr.addInt(reader->getInt32()); + break; + default: + break; + } + } + ls.push_back(curr); + } + } + + appData.push_back(ls); + return true; +} + +bool DRW_Entity::parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer* strBuf, duint32 bs){ + objSize=0; + DRW_DBG("\n***************************** parsing entity *********************************************\n"); + oType = buf->getObjType(version); + DRW_DBG("Object type: "); DRW_DBG(oType); DRW_DBG(", "); DRW_DBGH(oType); + + if (version > DRW::AC1014 && version < DRW::AC1024) {//2000 & 2004 + objSize = buf->getRawLong32(); //RL 32bits object size in bits + DRW_DBG(" Object size: "); DRW_DBG(objSize); DRW_DBG("\n"); + } + if (version > DRW::AC1021) {//2010+ + duint32 ms = buf->size(); + objSize = ms*8 - bs; + DRW_DBG(" Object size: "); DRW_DBG(objSize); DRW_DBG("\n"); + } + + if (strBuf != NULL && version > DRW::AC1018) {//2007+ + strBuf->moveBitPos(objSize-1); + DRW_DBG(" strBuf strbit pos 2007: "); DRW_DBG(strBuf->getPosition()); DRW_DBG(" strBuf bpos 2007: "); DRW_DBG(strBuf->getBitPos()); DRW_DBG("\n"); + if (strBuf->getBit() == 1){ + DRW_DBG("DRW_TableEntry::parseDwg string bit is 1\n"); + strBuf->moveBitPos(-17); + duint16 strDataSize = strBuf->getRawShort16(); + DRW_DBG("\nDRW_TableEntry::parseDwg string strDataSize: "); DRW_DBGH(strDataSize); DRW_DBG("\n"); + if ( (strDataSize& 0x8000) == 0x8000){ + DRW_DBG("\nDRW_TableEntry::parseDwg string 0x8000 bit is set"); + strBuf->moveBitPos(-33);//RLZ pending to verify + duint16 hiSize = strBuf->getRawShort16(); + strDataSize = ((strDataSize&0x7fff) | (hiSize<<15)); + } + strBuf->moveBitPos( -strDataSize -16); //-14 + DRW_DBG("strBuf start strDataSize pos 2007: "); DRW_DBG(strBuf->getPosition()); DRW_DBG(" strBuf bpos 2007: "); DRW_DBG(strBuf->getBitPos()); DRW_DBG("\n"); + } else + DRW_DBG("\nDRW_TableEntry::parseDwg string bit is 0"); + DRW_DBG("strBuf start pos 2007: "); DRW_DBG(strBuf->getPosition()); DRW_DBG(" strBuf bpos 2007: "); DRW_DBG(strBuf->getBitPos()); DRW_DBG("\n"); + } + + dwgHandle ho = buf->getHandle(); + handle = ho.ref; + DRW_DBG("Entity Handle: "); DRW_DBGHL(ho.code, ho.size, ho.ref); + dint16 extDataSize = buf->getBitShort(); //BS + DRW_DBG(" ext data size: "); DRW_DBG(extDataSize); + while (extDataSize>0 && buf->isGood()) { + /* RLZ: TODO */ + dwgHandle ah = buf->getHandle(); + DRW_DBG("App Handle: "); DRW_DBGHL(ah.code, ah.size, ah.ref); + duint8 *tmpExtData = new duint8[extDataSize]; + buf->getBytes(tmpExtData, extDataSize); + dwgBuffer tmpExtDataBuf(tmpExtData, extDataSize, buf->decoder); + + duint8 dxfCode = tmpExtDataBuf.getRawChar8(); + DRW_DBG(" dxfCode: "); DRW_DBG(dxfCode); + switch (dxfCode){ + case 0:{ + duint8 strLength = tmpExtDataBuf.getRawChar8(); + DRW_DBG(" strLength: "); DRW_DBG(strLength); + duint16 cp = tmpExtDataBuf.getBERawShort16(); + DRW_DBG(" str codepage: "); DRW_DBG(cp); + for (int i=0;i< strLength+1;i++) {//string length + null terminating char + duint8 dxfChar = tmpExtDataBuf.getRawChar8(); + DRW_DBG(" dxfChar: "); DRW_DBG(dxfChar); + } + break; + } + default: + /* RLZ: TODO */ + break; + } + delete[]tmpExtData; + extDataSize = buf->getBitShort(); //BS + DRW_DBG(" ext data size: "); DRW_DBG(extDataSize); + } //end parsing extData (EED) + duint8 graphFlag = buf->getBit(); //B + DRW_DBG(" graphFlag: "); DRW_DBG(graphFlag); DRW_DBG("\n"); + if (graphFlag) { + duint32 graphDataSize = buf->getRawLong32(); //RL 32bits + DRW_DBG("graphData in bytes: "); DRW_DBG(graphDataSize); DRW_DBG("\n"); +// RLZ: TODO + //skip graphData bytes + duint8 *tmpGraphData = new duint8[graphDataSize]; + buf->getBytes(tmpGraphData, graphDataSize); + dwgBuffer tmpGraphDataBuf(tmpGraphData, graphDataSize, buf->decoder); + DRW_DBG("graph data remaining bytes: "); DRW_DBG(tmpGraphDataBuf.numRemainingBytes()); DRW_DBG("\n"); + delete[]tmpGraphData; + } + if (version < DRW::AC1015) {//14- + objSize = buf->getRawLong32(); //RL 32bits object size in bits + DRW_DBG(" Object size in bits: "); DRW_DBG(objSize); DRW_DBG("\n"); + } + + duint8 entmode = buf->get2Bits(); //BB + if (entmode == 0) + ownerHandle= true; +// entmode = 2; + else if(entmode ==2) + entmode = 0; + space = (DRW::Space)entmode; //RLZ verify cast values + DRW_DBG("entmode: "); DRW_DBG(entmode); + numReactors = buf->getBitShort(); //BS + DRW_DBG(", numReactors: "); DRW_DBG(numReactors); + + if (version < DRW::AC1015) {//14- + if(buf->getBit()) {//is bylayer line type + lineType = "BYLAYER"; + ltFlags = 0; + } else { + lineType = ""; + ltFlags = 3; + } + DRW_DBG(" lineType: "); DRW_DBG(lineType.c_str()); + DRW_DBG(" ltFlags: "); DRW_DBG(ltFlags); + } + if (version > DRW::AC1015) {//2004+ + xDictFlag = buf->getBit(); + DRW_DBG(" xDictFlag: "); DRW_DBG(xDictFlag); DRW_DBG("\n"); + } + + if (version > DRW::AC1024 || version < DRW::AC1018) { + haveNextLinks = buf->getBit(); //aka nolinks //B + DRW_DBG(", haveNextLinks (0 yes, 1 prev next): "); DRW_DBG(haveNextLinks); DRW_DBG("\n"); + } else { + haveNextLinks = 1; //aka nolinks //B + DRW_DBG(", haveNextLinks (forced): "); DRW_DBG(haveNextLinks); DRW_DBG("\n"); + } +//ENC color + color = buf->getEnColor(version); //BS or CMC //ok for R14 or negate + ltypeScale = buf->getBitDouble(); //BD + DRW_DBG(" entity color: "); DRW_DBG(color); + DRW_DBG(" ltScale: "); DRW_DBG(ltypeScale); DRW_DBG("\n"); + if (version > DRW::AC1014) {//2000+ + UTF8STRING plotStyleName; + for (duint8 i = 0; i<2;++i) { //two flags in one + plotFlags = buf->get2Bits(); //BB + if (plotFlags == 1) + plotStyleName = "byblock"; + else if (plotFlags == 2) + plotStyleName = "continuous"; + else if (plotFlags == 0) + plotStyleName = "bylayer"; + else //handle at end + plotStyleName = ""; + if (i == 0) { + ltFlags = plotFlags; + lineType = plotStyleName; //RLZ: howto solve? if needed plotStyleName; + DRW_DBG("ltFlags: "); DRW_DBG(ltFlags); + DRW_DBG(" lineType: "); DRW_DBG(lineType.c_str()); + } else { + DRW_DBG(", plotFlags: "); DRW_DBG(plotFlags); + } + } + } + if (version > DRW::AC1018) {//2007+ + materialFlag = buf->get2Bits(); //BB + DRW_DBG("materialFlag: "); DRW_DBG(materialFlag); + shadowFlag = buf->getRawChar8(); //RC + DRW_DBG("shadowFlag: "); DRW_DBG(shadowFlag); DRW_DBG("\n"); + } + if (version > DRW::AC1021) {//2010+ + duint8 visualFlags = buf->get2Bits(); //full & face visual style + DRW_DBG("shadowFlag 2: "); DRW_DBG(visualFlags); DRW_DBG("\n"); + duint8 unk = buf->getBit(); //edge visual style + DRW_DBG("unknown bit: "); DRW_DBG(unk); DRW_DBG("\n"); + } + dint16 invisibleFlag = buf->getBitShort(); //BS + DRW_DBG(" invisibleFlag: "); DRW_DBG(invisibleFlag); + if (version > DRW::AC1014) {//2000+ + lWeight = DRW_LW_Conv::dwgInt2lineWidth( buf->getRawChar8() ); //RC + DRW_DBG(" lwFlag (lWeight): "); DRW_DBG(lWeight); DRW_DBG("\n"); + } + //Only in blocks ???????? +// if (version > DRW::AC1018) {//2007+ +// duint8 unk = buf->getBit(); +// DRW_DBG("unknown bit: "); DRW_DBG(unk); DRW_DBG("\n"); +// } + return buf->isGood(); +} + +bool DRW_Entity::parseDwgEntHandle(DRW::Version version, dwgBuffer *buf){ + if (version > DRW::AC1018) {//2007+ skip string area + buf->setPosition(objSize >> 3); + buf->setBitPos(objSize & 7); + } + + if(ownerHandle){//entity are in block or in a polyline + dwgHandle ownerH = buf->getOffsetHandle(handle); + DRW_DBG("owner (parent) Handle: "); DRW_DBGHL(ownerH.code, ownerH.size, ownerH.ref); DRW_DBG("\n"); + DRW_DBG(" Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + parentHandle = ownerH.ref; + DRW_DBG("Block (parent) Handle: "); DRW_DBGHL(ownerH.code, ownerH.size, parentHandle); DRW_DBG("\n"); + } else + DRW_DBG("NO Block (parent) Handle\n"); + + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + for (int i=0; i< numReactors;++i) { + dwgHandle reactorsH = buf->getHandle(); + DRW_DBG(" reactorsH control Handle: "); DRW_DBGHL(reactorsH.code, reactorsH.size, reactorsH.ref); DRW_DBG("\n"); + } + if (xDictFlag !=1){//linetype in 2004 seems not have XDicObjH or NULL handle + dwgHandle XDicObjH = buf->getHandle(); + DRW_DBG(" XDicObj control Handle: "); DRW_DBGHL(XDicObjH.code, XDicObjH.size, XDicObjH.ref); DRW_DBG("\n"); + } + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + if (version < DRW::AC1015) {//R14- + //layer handle + layerH = buf->getOffsetHandle(handle); + DRW_DBG(" layer Handle: "); DRW_DBGHL(layerH.code, layerH.size, layerH.ref); DRW_DBG("\n"); + DRW_DBG(" Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + //lineType handle + if(ltFlags == 3){ + lTypeH = buf->getOffsetHandle(handle); + DRW_DBG("linetype Handle: "); DRW_DBGHL(lTypeH.code, lTypeH.size, lTypeH.ref); DRW_DBG("\n"); + DRW_DBG(" Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + } + if (version < DRW::AC1018) {//2000+ + if (haveNextLinks == 0) { + dwgHandle nextLinkH = buf->getOffsetHandle(handle); + DRW_DBG(" prev nextLinkers Handle: "); DRW_DBGHL(nextLinkH.code, nextLinkH.size, nextLinkH.ref); DRW_DBG("\n"); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + prevEntLink = nextLinkH.ref; + nextLinkH = buf->getOffsetHandle(handle); + DRW_DBG(" next nextLinkers Handle: "); DRW_DBGHL(nextLinkH.code, nextLinkH.size, nextLinkH.ref); DRW_DBG("\n"); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + nextEntLink = nextLinkH.ref; + } else { + nextEntLink = handle+1; + prevEntLink = handle-1; + } + } + if (version > DRW::AC1015) {//2004+ + //Parses Bookcolor handle + } + if (version > DRW::AC1014) {//2000+ + //layer handle + layerH = buf->getOffsetHandle(handle); + DRW_DBG(" layer Handle: "); DRW_DBGHL(layerH.code, layerH.size, layerH.ref); DRW_DBG("\n"); + DRW_DBG(" Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + //lineType handle + if(ltFlags == 3){ + lTypeH = buf->getOffsetHandle(handle); + DRW_DBG("linetype Handle: "); DRW_DBGHL(lTypeH.code, lTypeH.size, lTypeH.ref); DRW_DBG("\n"); + DRW_DBG(" Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + } + if (version > DRW::AC1014) {//2000+ + if (version > DRW::AC1018) {//2007+ + if (materialFlag == 3) { + dwgHandle materialH = buf->getOffsetHandle(handle); + DRW_DBG(" material Handle: "); DRW_DBGHL(materialH.code, materialH.size, materialH.ref); DRW_DBG("\n"); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + if (shadowFlag == 3) { + dwgHandle shadowH = buf->getOffsetHandle(handle); + DRW_DBG(" shadow Handle: "); DRW_DBGHL(shadowH.code, shadowH.size, shadowH.ref); DRW_DBG("\n"); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + } + if (plotFlags == 3) { + dwgHandle plotStyleH = buf->getOffsetHandle(handle); + DRW_DBG(" plot style Handle: "); DRW_DBGHL(plotStyleH.code, plotStyleH.size, plotStyleH.ref); DRW_DBG("\n"); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + } + DRW_DBG("\n DRW_Entity::parseDwgEntHandle Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + return buf->isGood(); +} + +void DRW_Point::parseCode(int code, dxfReader *reader){ + switch (code) { + case 10: + basePoint.x = reader->getDouble(); + break; + case 20: + basePoint.y = reader->getDouble(); + break; + case 30: + basePoint.z = reader->getDouble(); + break; + case 39: + thickness = reader->getDouble(); + break; + case 210: + haveExtrusion = true; + extPoint.x = reader->getDouble(); + break; + case 220: + extPoint.y = reader->getDouble(); + break; + case 230: + extPoint.z = reader->getDouble(); + break; + default: + DRW_Entity::parseCode(code, reader); + break; + } +} + +bool DRW_Point::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing point *********************************************\n"); + + basePoint.x = buf->getBitDouble(); + basePoint.y = buf->getBitDouble(); + basePoint.z = buf->getBitDouble(); + DRW_DBG("point: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + thickness = buf->getThickness(version > DRW::AC1014);//BD + DRW_DBG("\nthickness: "); DRW_DBG(thickness); + extPoint = buf->getExtrusion(version > DRW::AC1014); + DRW_DBG(", Extrusion: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z); + + double x_axis = buf->getBitDouble();//BD + DRW_DBG("\n x_axis: ");DRW_DBG(x_axis);DRW_DBG("\n"); + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + // RS crc; //RS */ + + return buf->isGood(); +} + +void DRW_Line::parseCode(int code, dxfReader *reader){ + switch (code) { + case 11: + secPoint.x = reader->getDouble(); + break; + case 21: + secPoint.y = reader->getDouble(); + break; + case 31: + secPoint.z = reader->getDouble(); + break; + default: + DRW_Point::parseCode(code, reader); + break; + } +} + +bool DRW_Line::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing line *********************************************\n"); + + if (version < DRW::AC1015) {//14- + basePoint.x = buf->getBitDouble(); + basePoint.y = buf->getBitDouble(); + basePoint.z = buf->getBitDouble(); + secPoint.x = buf->getBitDouble(); + secPoint.y = buf->getBitDouble(); + secPoint.z = buf->getBitDouble(); + } + if (version > DRW::AC1014) {//2000+ + bool zIsZero = buf->getBit(); //B + basePoint.x = buf->getRawDouble();//RD + secPoint.x = buf->getDefaultDouble(basePoint.x);//DD + basePoint.y = buf->getRawDouble();//RD + secPoint.y = buf->getDefaultDouble(basePoint.y);//DD + if (!zIsZero) { + basePoint.z = buf->getRawDouble();//RD + secPoint.z = buf->getDefaultDouble(basePoint.z);//DD + } + } + DRW_DBG("start point: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + DRW_DBG("\nend point: "); DRW_DBGPT(secPoint.x, secPoint.y, secPoint.z); + thickness = buf->getThickness(version > DRW::AC1014);//BD + DRW_DBG("\nthickness: "); DRW_DBG(thickness); + extPoint = buf->getExtrusion(version > DRW::AC1014); + DRW_DBG(", Extrusion: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z);DRW_DBG("\n"); + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; +// RS crc; //RS */ + return buf->isGood(); +} + +bool DRW_Ray::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing ray/xline *********************************************\n"); + basePoint.x = buf->getBitDouble(); + basePoint.y = buf->getBitDouble(); + basePoint.z = buf->getBitDouble(); + secPoint.x = buf->getBitDouble(); + secPoint.y = buf->getBitDouble(); + secPoint.z = buf->getBitDouble(); + DRW_DBG("start point: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + DRW_DBG("\nvector: "); DRW_DBGPT(secPoint.x, secPoint.y, secPoint.z); + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Circle::applyExtrusion(){ + if (haveExtrusion) { + //NOTE: Commenting these out causes the the arcs being tested to be located + //on the other side of the y axis (all x dimensions are negated). + calculateAxis(extPoint); + extrudePoint(extPoint, &basePoint); + } +} + +void DRW_Circle::parseCode(int code, dxfReader *reader){ + switch (code) { + case 40: + radious = reader->getDouble(); + break; + default: + DRW_Point::parseCode(code, reader); + break; + } +} + +bool DRW_Circle::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing circle *********************************************\n"); + + basePoint.x = buf->getBitDouble(); + basePoint.y = buf->getBitDouble(); + basePoint.z = buf->getBitDouble(); + DRW_DBG("center: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + radious = buf->getBitDouble(); + DRW_DBG("\nradius: "); DRW_DBG(radious); + + thickness = buf->getThickness(version > DRW::AC1014); + DRW_DBG(" thickness: "); DRW_DBG(thickness); + extPoint = buf->getExtrusion(version > DRW::AC1014); + DRW_DBG("\nextrusion: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z); DRW_DBG("\n"); + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Arc::applyExtrusion(){ + DRW_Circle::applyExtrusion(); + + if(haveExtrusion){ + // If the extrusion vector has a z value less than 0, the angles for the arc + // have to be mirrored since DXF files use the right hand rule. + // Note that the following code only handles the special case where there is a 2D + // drawing with the z axis heading into the paper (or rather screen). An arbitrary + // extrusion axis (with x and y values greater than 1/64) may still have issues. + if (fabs(extPoint.x) < 0.015625 && fabs(extPoint.y) < 0.015625 && extPoint.z < 0.0) { + staangle=M_PI-staangle; + endangle=M_PI-endangle; + + double temp = staangle; + staangle=endangle; + endangle=temp; + } + } +} + +void DRW_Arc::parseCode(int code, dxfReader *reader){ + switch (code) { + case 50: + staangle = reader->getDouble()/ ARAD; + break; + case 51: + endangle = reader->getDouble()/ ARAD; + break; + default: + DRW_Circle::parseCode(code, reader); + break; + } +} + +bool DRW_Arc::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing circle arc *********************************************\n"); + + basePoint.x = buf->getBitDouble(); + basePoint.y = buf->getBitDouble(); + basePoint.z = buf->getBitDouble(); + DRW_DBG("center point: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + + radious = buf->getBitDouble(); + DRW_DBG("\nradius: "); DRW_DBG(radious); + thickness = buf->getThickness(version > DRW::AC1014); + DRW_DBG(" thickness: "); DRW_DBG(thickness); + extPoint = buf->getExtrusion(version > DRW::AC1014); + DRW_DBG("\nextrusion: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z); + staangle = buf->getBitDouble(); + DRW_DBG("\nstart angle: "); DRW_DBG(staangle); + endangle = buf->getBitDouble(); + DRW_DBG(" end angle: "); DRW_DBG(endangle); DRW_DBG("\n"); + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + return buf->isGood(); +} + +void DRW_Ellipse::parseCode(int code, dxfReader *reader){ + switch (code) { + case 40: + ratio = reader->getDouble(); + break; + case 41: + staparam = reader->getDouble(); + break; + case 42: + endparam = reader->getDouble(); + break; + default: + DRW_Line::parseCode(code, reader); + break; + } +} + +void DRW_Ellipse::applyExtrusion(){ + if (haveExtrusion) { + calculateAxis(extPoint); + extrudePoint(extPoint, &secPoint); + double intialparam = staparam; + if (extPoint.z < 0.){ + staparam = M_PIx2 - endparam; + endparam = M_PIx2 - intialparam; + } + } +} + +//if ratio > 1 minor axis are greather than major axis, correct it +void DRW_Ellipse::correctAxis(){ + bool complete = false; + if (staparam == endparam) { + staparam = 0.0; + endparam = M_PIx2; //2*M_PI; + complete = true; + } + if (ratio > 1){ + if ( fabs(endparam - staparam - M_PIx2) < 1.0e-10) + complete = true; + double incX = secPoint.x; + secPoint.x = -(secPoint.y * ratio); + secPoint.y = incX*ratio; + ratio = 1/ratio; + if (!complete){ + if (staparam < M_PI_2) + staparam += M_PI *2; + if (endparam < M_PI_2) + endparam += M_PI *2; + endparam -= M_PI_2; + staparam -= M_PI_2; + } + } +} + +bool DRW_Ellipse::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing ellipse *********************************************\n"); + + basePoint =buf->get3BitDouble(); + DRW_DBG("center: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + secPoint =buf->get3BitDouble(); + DRW_DBG(", axis: "); DRW_DBGPT(secPoint.x, secPoint.y, secPoint.z); DRW_DBG("\n"); + extPoint =buf->get3BitDouble(); + DRW_DBG("Extrusion: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z); + ratio = buf->getBitDouble();//BD + DRW_DBG("\nratio: "); DRW_DBG(ratio); + staparam = buf->getBitDouble();//BD + DRW_DBG(" start param: "); DRW_DBG(staparam); + endparam = buf->getBitDouble();//BD + DRW_DBG(" end param: "); DRW_DBG(endparam); DRW_DBG("\n"); + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; +// RS crc; //RS */ + return buf->isGood(); +} + +//parts are the number of vertex to split polyline, default 128 +void DRW_Ellipse::toPolyline(DRW_Polyline *pol, int parts){ + double radMajor, radMinor, cosRot, sinRot, incAngle, curAngle; + double cosCurr, sinCurr; + radMajor = sqrt(secPoint.x*secPoint.x + secPoint.y*secPoint.y); + radMinor = radMajor*ratio; + //calculate sin & cos of included angle + incAngle = atan2(secPoint.y, secPoint.x); + cosRot = cos(incAngle); + sinRot = sin(incAngle); + incAngle = M_PIx2 / parts; + curAngle = staparam; + int i = static_cast(curAngle / incAngle); + do { + if (curAngle > endparam) { + curAngle = endparam; + i = parts+2; + } + cosCurr = cos(curAngle); + sinCurr = sin(curAngle); + double x = basePoint.x + (cosCurr*cosRot*radMajor) - (sinCurr*sinRot*radMinor); + double y = basePoint.y + (cosCurr*sinRot*radMajor) + (sinCurr*cosRot*radMinor); + pol->addVertex( DRW_Vertex(x, y, 0.0, 0.0)); + curAngle = (++i)*incAngle; + } while (iflags = 1; + } + pol->layer = this->layer; + pol->lineType = this->lineType; + pol->color = this->color; + pol->lWeight = this->lWeight; + pol->extPoint = this->extPoint; +} + +void DRW_Trace::applyExtrusion(){ + if (haveExtrusion) { + calculateAxis(extPoint); + extrudePoint(extPoint, &basePoint); + extrudePoint(extPoint, &secPoint); + extrudePoint(extPoint, &thirdPoint); + extrudePoint(extPoint, &fourPoint); + } +} + +void DRW_Trace::parseCode(int code, dxfReader *reader){ + switch (code) { + case 12: + thirdPoint.x = reader->getDouble(); + break; + case 22: + thirdPoint.y = reader->getDouble(); + break; + case 32: + thirdPoint.z = reader->getDouble(); + break; + case 13: + fourPoint.x = reader->getDouble(); + break; + case 23: + fourPoint.y = reader->getDouble(); + break; + case 33: + fourPoint.z = reader->getDouble(); + break; + default: + DRW_Line::parseCode(code, reader); + break; + } +} + +bool DRW_Trace::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing Trace *********************************************\n"); + + thickness = buf->getThickness(version>DRW::AC1014); + basePoint.z = buf->getBitDouble(); + basePoint.x = buf->getRawDouble(); + basePoint.y = buf->getRawDouble(); + secPoint.x = buf->getRawDouble(); + secPoint.y = buf->getRawDouble(); + secPoint.z = basePoint.z; + thirdPoint.x = buf->getRawDouble(); + thirdPoint.y = buf->getRawDouble(); + thirdPoint.z = basePoint.z; + fourPoint.x = buf->getRawDouble(); + fourPoint.y = buf->getRawDouble(); + fourPoint.z = basePoint.z; + extPoint = buf->getExtrusion(version>DRW::AC1014); + + DRW_DBG(" - base "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + DRW_DBG("\n - sec "); DRW_DBGPT(secPoint.x, secPoint.y, secPoint.z); + DRW_DBG("\n - third "); DRW_DBGPT(thirdPoint.x, thirdPoint.y, thirdPoint.z); + DRW_DBG("\n - fourth "); DRW_DBGPT(fourPoint.x, fourPoint.y, fourPoint.z); + DRW_DBG("\n - extrusion: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z); + DRW_DBG("\n - thickness: "); DRW_DBG(thickness); DRW_DBG("\n"); + + /* Common Entity Handle Data */ + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + + /* CRC X --- */ + return buf->isGood(); +} + + +void DRW_Solid::parseCode(int code, dxfReader *reader){ + DRW_Trace::parseCode(code, reader); +} + +bool DRW_Solid::parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs){ + DRW_DBG("\n***************************** parsing Solid *********************************************\n"); + return DRW_Trace::parseDwg(v, buf, bs); +} + +void DRW_3Dface::parseCode(int code, dxfReader *reader){ + switch (code) { + case 70: + invisibleflag = reader->getInt32(); + break; + default: + DRW_Trace::parseCode(code, reader); + break; + } +} + +bool DRW_3Dface::parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(v, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing 3Dface *********************************************\n"); + + if ( v < DRW::AC1015 ) {// R13 & R14 + basePoint.x = buf->getBitDouble(); + basePoint.y = buf->getBitDouble(); + basePoint.z = buf->getBitDouble(); + secPoint.x = buf->getBitDouble(); + secPoint.y = buf->getBitDouble(); + secPoint.z = buf->getBitDouble(); + thirdPoint.x = buf->getBitDouble(); + thirdPoint.y = buf->getBitDouble(); + thirdPoint.z = buf->getBitDouble(); + fourPoint.x = buf->getBitDouble(); + fourPoint.y = buf->getBitDouble(); + fourPoint.z = buf->getBitDouble(); + invisibleflag = buf->getBitShort(); + } else { // 2000+ + bool has_no_flag = buf->getBit(); + bool z_is_zero = buf->getBit(); + basePoint.x = buf->getRawDouble(); + basePoint.y = buf->getRawDouble(); + basePoint.z = z_is_zero ? 0.0 : buf->getRawDouble(); + secPoint.x = buf->getDefaultDouble(basePoint.x); + secPoint.y = buf->getDefaultDouble(basePoint.y); + secPoint.z = buf->getDefaultDouble(basePoint.z); + thirdPoint.x = buf->getDefaultDouble(secPoint.x); + thirdPoint.y = buf->getDefaultDouble(secPoint.y); + thirdPoint.z = buf->getDefaultDouble(secPoint.z); + fourPoint.x = buf->getDefaultDouble(thirdPoint.x); + fourPoint.y = buf->getDefaultDouble(thirdPoint.y); + fourPoint.z = buf->getDefaultDouble(thirdPoint.z); + invisibleflag = has_no_flag ? (int)NoEdge : buf->getBitShort(); + } + drw_assert(invisibleflag>=NoEdge); + drw_assert(invisibleflag<=AllEdges); + + DRW_DBG(" - base "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); DRW_DBG("\n"); + DRW_DBG(" - sec "); DRW_DBGPT(secPoint.x, secPoint.y, secPoint.z); DRW_DBG("\n"); + DRW_DBG(" - third "); DRW_DBGPT(thirdPoint.x, thirdPoint.y, thirdPoint.z); DRW_DBG("\n"); + DRW_DBG(" - fourth "); DRW_DBGPT(fourPoint.x, fourPoint.y, fourPoint.z); DRW_DBG("\n"); + DRW_DBG(" - Invisibility mask: "); DRW_DBG(invisibleflag); DRW_DBG("\n"); + + /* Common Entity Handle Data */ + ret = DRW_Entity::parseDwgEntHandle(v, buf); + if (!ret) + return ret; + return buf->isGood(); +} + +void DRW_Block::parseCode(int code, dxfReader *reader){ + switch (code) { + case 2: + name = reader->getUtf8String(); + break; + case 70: + flags = reader->getInt32(); + break; + default: + DRW_Point::parseCode(code, reader); + break; + } +} + +bool DRW_Block::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + if (!isEnd){ + DRW_DBG("\n***************************** parsing block *********************************************\n"); + name = sBuf->getVariableText(version, false); + DRW_DBG("Block name: "); DRW_DBG(name.c_str()); DRW_DBG("\n"); + } else { + DRW_DBG("\n***************************** parsing end block *********************************************\n"); + } + if (version > DRW::AC1018) {//2007+ + duint8 unk = buf->getBit(); + DRW_DBG("unknown bit: "); DRW_DBG(unk); DRW_DBG("\n"); + } +// X handleAssoc; //X + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Insert::parseCode(int code, dxfReader *reader){ + switch (code) { + case 2: + name = reader->getUtf8String(); + break; + case 41: + xscale = reader->getDouble(); + break; + case 42: + yscale = reader->getDouble(); + break; + case 43: + zscale = reader->getDouble(); + break; + case 50: + angle = reader->getDouble(); + angle = angle/ARAD; //convert to radian + break; + case 70: + colcount = reader->getInt32(); + break; + case 71: + rowcount = reader->getInt32(); + break; + case 44: + colspace = reader->getDouble(); + break; + case 45: + rowspace = reader->getDouble(); + break; + default: + DRW_Point::parseCode(code, reader); + break; + } +} + +bool DRW_Insert::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dint32 objCount = 0; + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n************************** parsing insert/minsert *****************************************\n"); + basePoint.x = buf->getBitDouble(); + basePoint.y = buf->getBitDouble(); + basePoint.z = buf->getBitDouble(); + DRW_DBG("insertion point: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); DRW_DBG("\n"); + if (version < DRW::AC1015) {//14- + xscale = buf->getBitDouble(); + yscale = buf->getBitDouble(); + zscale = buf->getBitDouble(); + } else { + duint8 dataFlags = buf->get2Bits(); + if (dataFlags == 3){ + //none default value 1,1,1 + } else if (dataFlags == 1){ //x default value 1, y & z can be x value + yscale = buf->getDefaultDouble(xscale); + zscale = buf->getDefaultDouble(xscale); + } else if (dataFlags == 2){ + xscale = buf->getRawDouble(); + yscale = zscale = xscale; + } else { //dataFlags == 0 + xscale = buf->getRawDouble(); + yscale = buf->getDefaultDouble(xscale); + zscale = buf->getDefaultDouble(xscale); + } + } + angle = buf->getBitDouble(); + DRW_DBG("scale : "); DRW_DBGPT(xscale, yscale, zscale); DRW_DBG(", angle: "); DRW_DBG(angle); + extPoint = buf->getExtrusion(false); //3BD R14 style + DRW_DBG("\nextrusion: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z); + + bool hasAttrib = buf->getBit(); + DRW_DBG(" has Attrib: "); DRW_DBG(hasAttrib); + + if (hasAttrib && version > DRW::AC1015) {//2004+ + objCount = buf->getBitLong(); + DRW_UNUSED(objCount); + DRW_DBG(" objCount: "); DRW_DBG(objCount); DRW_DBG("\n"); + } + if (oType == 8) {//entity are minsert + colcount = buf->getBitShort(); + rowcount = buf->getBitShort(); + colspace = buf->getBitDouble(); + rowspace = buf->getBitDouble(); + } + DRW_DBG(" Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + ret = DRW_Entity::parseDwgEntHandle(version, buf); + blockRecH = buf->getHandle(); /* H 2 BLOCK HEADER (hard pointer) */ + DRW_DBG("BLOCK HEADER Handle: "); DRW_DBGHL(blockRecH.code, blockRecH.size, blockRecH.ref); DRW_DBG("\n"); + DRW_DBG(" Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + /*attribs follows*/ + if (hasAttrib) { + if (version < DRW::AC1018) {//2000- + dwgHandle attH = buf->getHandle(); /* H 2 BLOCK HEADER (hard pointer) */ + DRW_DBG("first attrib Handle: "); DRW_DBGHL(attH.code, attH.size, attH.ref); DRW_DBG("\n"); + attH = buf->getHandle(); /* H 2 BLOCK HEADER (hard pointer) */ + DRW_DBG("second attrib Handle: "); DRW_DBGHL(attH.code, attH.size, attH.ref); DRW_DBG("\n"); + } else { + for (duint8 i=0; i< objCount; ++i){ + dwgHandle attH = buf->getHandle(); /* H 2 BLOCK HEADER (hard pointer) */ + DRW_DBG("attrib Handle #"); DRW_DBG(i); DRW_DBG(": "); DRW_DBGHL(attH.code, attH.size, attH.ref); DRW_DBG("\n"); + } + } + seqendH = buf->getHandle(); /* H 2 BLOCK HEADER (hard pointer) */ + DRW_DBG("seqendH Handle: "); DRW_DBGHL(seqendH.code, seqendH.size, seqendH.ref); DRW_DBG("\n"); + } + DRW_DBG(" Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + if (!ret) + return ret; +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_LWPolyline::applyExtrusion(){ + if (haveExtrusion) { + calculateAxis(extPoint); + for (unsigned int i=0; ix, vert->y, elevation); + extrudePoint(extPoint, &v); + vert->x = v.x; + vert->y = v.y; + } + } +} + +void DRW_LWPolyline::parseCode(int code, dxfReader *reader){ + switch (code) { + case 10: { + vertex = new DRW_Vertex2D(); + vertlist.push_back(vertex); + vertex->x = reader->getDouble(); + break; } + case 20: + if(vertex != NULL) + vertex->y = reader->getDouble(); + break; + case 40: + if(vertex != NULL) + vertex->stawidth = reader->getDouble(); + break; + case 41: + if(vertex != NULL) + vertex->endwidth = reader->getDouble(); + break; + case 42: + if(vertex != NULL) + vertex->bulge = reader->getDouble(); + break; + case 38: + elevation = reader->getDouble(); + break; + case 39: + thickness = reader->getDouble(); + break; + case 43: + width = reader->getDouble(); + break; + case 70: + flags = reader->getInt32(); + break; + case 90: + vertexnum = reader->getInt32(); + vertlist.reserve(vertexnum); + break; + case 210: + haveExtrusion = true; + extPoint.x = reader->getDouble(); + break; + case 220: + extPoint.y = reader->getDouble(); + break; + case 230: + extPoint.z = reader->getDouble(); + break; + default: + DRW_Entity::parseCode(code, reader); + break; + } +} + +bool DRW_LWPolyline::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing LWPolyline *******************************************\n"); + + flags = buf->getBitShort(); + DRW_DBG("flags value: "); DRW_DBG(flags); + if (flags & 4) + width = buf->getBitDouble(); + if (flags & 8) + elevation = buf->getBitDouble(); + if (flags & 2) + thickness = buf->getBitDouble(); + if (flags & 1) + extPoint = buf->getExtrusion(false); + vertexnum = buf->getBitLong(); + vertlist.reserve(vertexnum); + unsigned int bulgesnum = 0; + if (flags & 16) + bulgesnum = buf->getBitLong(); + int vertexIdCount = 0; + if (version > DRW::AC1021) {//2010+ + if (flags & 1024) + vertexIdCount = buf->getBitLong(); + } + + unsigned int widthsnum = 0; + if (flags & 32) + widthsnum = buf->getBitLong(); + DRW_DBG("\nvertex num: "); DRW_DBG(vertexnum); DRW_DBG(" bulges num: "); DRW_DBG(bulgesnum); + DRW_DBG(" vertexIdCount: "); DRW_DBG(vertexIdCount); DRW_DBG(" widths num: "); DRW_DBG(widthsnum); + //clear all bit except 128 = plinegen and set 1 to open/close //RLZ:verify plinegen & open + //dxf: plinegen 128 & open 1 + flags = (flags & 512)? (flags | 1):(flags | 0); + flags &= 129; + DRW_DBG("end flags value: "); DRW_DBG(flags); + + if (vertexnum > 0) { //verify if is lwpol without vertex (empty) + // add vertexs + vertex = new DRW_Vertex2D(); + vertex->x = buf->getRawDouble(); + vertex->y = buf->getRawDouble(); + vertlist.push_back(vertex); + DRW_Vertex2D* pv = vertex; + for (int i = 1; i< vertexnum; i++){ + vertex = new DRW_Vertex2D(); + if (version < DRW::AC1015) {//14- + vertex->x = buf->getRawDouble(); + vertex->y = buf->getRawDouble(); + } else { +// DRW_Vertex2D *pv = vertlist.back(); + vertex->x = buf->getDefaultDouble(pv->x); + vertex->y = buf->getDefaultDouble(pv->y); + } + pv = vertex; + vertlist.push_back(vertex); + } + //add bulges + for (unsigned int i = 0; i < bulgesnum; i++){ + double bulge = buf->getBitDouble(); + if (vertlist.size()> i) + vertlist.at(i)->bulge = bulge; + } + //add vertexId + if (version > DRW::AC1021) {//2010+ + for (int i = 0; i < vertexIdCount; i++){ + dint32 vertexId = buf->getBitLong(); + //TODO implement vertexId, do not exist in dxf + DRW_UNUSED(vertexId); +// if (vertlist.size()< i) +// vertlist.at(i)->vertexId = vertexId; + } + } + //add widths + for (unsigned int i = 0; i < widthsnum; i++){ + double staW = buf->getBitDouble(); + double endW = buf->getBitDouble(); + if (vertlist.size()< i) { + vertlist.at(i)->stawidth = staW; + vertlist.at(i)->endwidth = endW; + } + } + } + if (DRW_DBGGL == DRW_dbg::DEBUG){ + DRW_DBG("\nVertex list: "); + for (std::vector::iterator it = vertlist.begin() ; it != vertlist.end(); ++it){ + DRW_Vertex2D* pv = *it; + DRW_DBG("\n x: "); DRW_DBG(pv->x); DRW_DBG(" y: "); DRW_DBG(pv->y); DRW_DBG(" bulge: "); DRW_DBG(pv->bulge); + DRW_DBG(" stawidth: "); DRW_DBG(pv->stawidth); DRW_DBG(" endwidth: "); DRW_DBG(pv->endwidth); + } + } + + DRW_DBG("\n"); + /* Common Entity Handle Data */ + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + /* CRC X --- */ + return buf->isGood(); +} + + +void DRW_Text::parseCode(int code, dxfReader *reader){ + switch (code) { + case 40: + height = reader->getDouble(); + break; + case 41: + widthscale = reader->getDouble(); + break; + case 50: + angle = reader->getDouble(); + break; + case 51: + oblique = reader->getDouble(); + break; + case 71: + textgen = reader->getInt32(); + break; + case 72: + alignH = (HAlign)reader->getInt32(); + break; + case 73: + alignV = (VAlign)reader->getInt32(); + break; + case 1: + text = reader->getUtf8String(); + break; + case 7: + style = reader->getUtf8String(); + break; + default: + DRW_Line::parseCode(code, reader); + break; + } +} + +bool DRW_Text::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing text *********************************************\n"); + + // DataFlags RC Used to determine presence of subsquent data, set to 0xFF for R14- + duint8 data_flags = 0x00; + if (version > DRW::AC1014) {//2000+ + data_flags = buf->getRawChar8(); /* DataFlags RC Used to determine presence of subsquent data */ + DRW_DBG("data_flags: "); DRW_DBG(data_flags); DRW_DBG("\n"); + if ( !(data_flags & 0x01) ) { /* Elevation RD --- present if !(DataFlags & 0x01) */ + basePoint.z = buf->getRawDouble(); + } + } else {//14- + basePoint.z = buf->getBitDouble(); /* Elevation BD --- */ + } + basePoint.x = buf->getRawDouble(); /* Insertion pt 2RD 10 */ + basePoint.y = buf->getRawDouble(); + DRW_DBG("Insert point: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); DRW_DBG("\n"); + if (version > DRW::AC1014) {//2000+ + if ( !(data_flags & 0x02) ) { /* Alignment pt 2DD 11 present if !(DataFlags & 0x02), use 10 & 20 values for 2 default values.*/ + secPoint.x = buf->getDefaultDouble(basePoint.x); + secPoint.y = buf->getDefaultDouble(basePoint.y); + } else { + secPoint = basePoint; + } + } else {//14- + secPoint.x = buf->getRawDouble(); /* Alignment pt 2RD 11 */ + secPoint.y = buf->getRawDouble(); + } + secPoint.z = basePoint.z; + DRW_DBG("Alignment: "); DRW_DBGPT(secPoint.x, secPoint.y, basePoint.z); DRW_DBG("\n"); + extPoint = buf->getExtrusion(version > DRW::AC1014); + DRW_DBG("Extrusion: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z); DRW_DBG("\n"); + thickness = buf->getThickness(version > DRW::AC1014); /* Thickness BD 39 */ + + if (version > DRW::AC1014) {//2000+ + if ( !(data_flags & 0x04) ) { /* Oblique ang RD 51 present if !(DataFlags & 0x04) */ + oblique = buf->getRawDouble(); + } + if ( !(data_flags & 0x08) ) { /* Rotation ang RD 50 present if !(DataFlags & 0x08) */ + angle = buf->getRawDouble(); + } + height = buf->getRawDouble(); /* Height RD 40 */ + if ( !(data_flags & 0x10) ) { /* Width factor RD 41 present if !(DataFlags & 0x10) */ + widthscale = buf->getRawDouble(); + } + } else {//14- + oblique = buf->getBitDouble(); /* Oblique ang BD 51 */ + angle = buf->getBitDouble(); /* Rotation ang BD 50 */ + height = buf->getBitDouble(); /* Height BD 40 */ + widthscale = buf->getBitDouble(); /* Width factor BD 41 */ + } + DRW_DBG("thickness: "); DRW_DBG(thickness); DRW_DBG(", Oblique ang: "); DRW_DBG(oblique); DRW_DBG(", Width: "); + DRW_DBG(widthscale); DRW_DBG(", Rotation: "); DRW_DBG(angle); DRW_DBG(", height: "); DRW_DBG(height); DRW_DBG("\n"); + text = sBuf->getVariableText(version, false); /* Text value TV 1 */ + DRW_DBG("text string: "); DRW_DBG(text.c_str());DRW_DBG("\n"); + //textgen, alignH, alignV always present in R14-, data_flags set in initialisation + if ( !(data_flags & 0x20) ) { /* Generation BS 71 present if !(DataFlags & 0x20) */ + textgen = buf->getBitShort(); + DRW_DBG("textgen: "); DRW_DBG(textgen); + } + if ( !(data_flags & 0x40) ) { /* Horiz align. BS 72 present if !(DataFlags & 0x40) */ + alignH = (HAlign)buf->getBitShort(); + DRW_DBG(", alignH: "); DRW_DBG(alignH); + } + if ( !(data_flags & 0x80) ) { /* Vert align. BS 73 present if !(DataFlags & 0x80) */ + alignV = (VAlign)buf->getBitShort(); + DRW_DBG(", alignV: "); DRW_DBG(alignV); + } + DRW_DBG("\n"); + + /* Common Entity Handle Data */ + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + + styleH = buf->getHandle(); /* H 7 STYLE (hard pointer) */ + DRW_DBG("text style Handle: "); DRW_DBGHL(styleH.code, styleH.size, styleH.ref); DRW_DBG("\n"); + + /* CRC X --- */ + return buf->isGood(); +} + +void DRW_MText::parseCode(int code, dxfReader *reader){ + switch (code) { + case 1: + text += reader->getString(); + text = reader->toUtf8String(text); + break; + case 11: + haveXAxis = true; + DRW_Text::parseCode(code, reader); + break; + case 3: + text += reader->getString(); + break; + case 44: + interlin = reader->getDouble(); + break; + case 71: { + // Attachment point + Attach a = (Attach)reader->getInt32(); + + switch(a) { + case TopLeft: + alignV = VTop; + alignH = HLeft; + break; + case TopCenter: + alignV = VTop; + alignH = HCenter; + break; + case TopRight: + alignV = VTop; + alignH = HRight; + break; + case MiddleLeft: + alignV = VMiddle; + alignH = HLeft; + break; + case MiddleCenter: + alignV = VMiddle; + alignH = HCenter; + break; + case MiddleRight: + alignV = VMiddle; + alignH = HRight; + break; + case BottomLeft: + alignV = VBottom; + alignH = HLeft; + break; + case BottomCenter: + alignV = VBottom; + alignH = HCenter; + break; + case BottomRight: + alignV = VBottom; + alignH = HRight; + break; + } + } break; + case 72: + // To prevent redirection to DRW_Text::parseCode. + // This code meaning is different for MTEXT. + // Actually: Drawing direction + break; + case 73: + // To prevent redirection to DRW_Text::parseCode. + // This code meaning is different for MTEXT. + // Actually: Mtext line spacing style + break; + default: + DRW_Text::parseCode(code, reader); + break; + } +} + +bool DRW_MText::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing mtext *********************************************\n"); + + basePoint = buf->get3BitDouble(); /* Insertion pt 3BD 10 - First picked point. */ + DRW_DBG("Insertion: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); DRW_DBG("\n"); + extPoint = buf->get3BitDouble(); /* Extrusion 3BD 210 Undocumented; */ + secPoint = buf->get3BitDouble(); /* X-axis dir 3BD 11 */ + updateAngle(); + widthscale = buf->getBitDouble(); /* Rect width BD 41 */ + if (version > DRW::AC1018) {//2007+ + /* Rect height BD 46 Reference rectangle height. */ + /** @todo */buf->getBitDouble(); + } + height = buf->getBitDouble();/* Text height BD 40 Undocumented */ + textgen = buf->getBitShort(); /* Attachment BS 71 Similar to justification; */ + /* Drawing dir BS 72 Left to right, etc.; see DXF doc */ + dint16 draw_dir = buf->getBitShort(); + DRW_UNUSED(draw_dir); + /* Extents ht BD Undocumented and not present in DXF or entget */ + double ext_ht = buf->getBitDouble(); + DRW_UNUSED(ext_ht); + /* Extents wid BD Undocumented and not present in DXF or entget The extents + rectangle, when rotated the same as the text, fits the actual text image on + the screen (altough we've seen it include an extra row of text in height). */ + double ext_wid = buf->getBitDouble(); + DRW_UNUSED(ext_wid); + /* Text TV 1 All text in one long string (without '\n's 3 for line wrapping). + ACAD seems to add braces ({ }) and backslash-P's to indicate paragraphs + based on the "\r\n"'s found in the imported file. But, all the text is in + this one long string -- not broken into 1- and 3-groups as in DXF and + entget. ACAD's entget breaks this string into 250-char pieces (not 255 as + doc'd) – even if it's mid-word. The 1-group always gets the tag end; + therefore, the 3's are always 250 chars long. */ + text = sBuf->getVariableText(version, false); /* Text value TV 1 */ + if (version > DRW::AC1014) {//2000+ + buf->getBitShort();/* Linespacing Style BS 73 */ + buf->getBitDouble();/* Linespacing Factor BD 44 */ + buf->getBit();/* Unknown bit B */ + } + if (version > DRW::AC1015) {//2004+ + /* Background flags BL 0 = no background, 1 = background fill, 2 =background + fill with drawing fill color. */ + dint32 bk_flags = buf->getBitLong(); /** @todo add to DRW_MText */ + if ( bk_flags == 1 ) { + /* Background scale factor BL Present if background flags = 1, default = 1.5*/ + buf->getBitLong(); + /* Background color CMC Present if background flags = 1 */ + buf->getCmColor(version); //RLZ: warning CMC or ENC + /** @todo buf->getCMC */ + /* Background transparency BL Present if background flags = 1 */ + buf->getBitLong(); + } + } + + /* Common Entity Handle Data */ + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + + styleH = buf->getHandle(); /* H 7 STYLE (hard pointer) */ + DRW_DBG("text style Handle: "); DRW_DBG(styleH.code); DRW_DBG("."); + DRW_DBG(styleH.size); DRW_DBG("."); DRW_DBG(styleH.ref); DRW_DBG("\n"); + + /* CRC X --- */ + return buf->isGood(); +} + +void DRW_MText::updateAngle(){ + if (haveXAxis) { + angle = atan2(secPoint.y, secPoint.x)*180/M_PI; + } +} + +void DRW_Polyline::parseCode(int code, dxfReader *reader){ + switch (code) { + case 70: + flags = reader->getInt32(); + break; + case 40: + defstawidth = reader->getDouble(); + break; + case 41: + defendwidth = reader->getDouble(); + break; + case 71: + vertexcount = reader->getInt32(); + break; + case 72: + facecount = reader->getInt32(); + break; + case 73: + smoothM = reader->getInt32(); + break; + case 74: + smoothN = reader->getInt32(); + break; + case 75: + curvetype = reader->getInt32(); + break; + default: + DRW_Point::parseCode(code, reader); + break; + } +} + +//0x0F polyline 2D bit 4(8) & 5(16) NOT set +//0x10 polyline 3D bit 4(8) set +//0x1D PFACE bit 5(16) set +bool DRW_Polyline::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing polyline *********************************************\n"); + + dint32 ooCount = 0; + if (oType == 0x0F) { //pline 2D + flags = buf->getBitShort(); + DRW_DBG("flags value: "); DRW_DBG(flags); + curvetype = buf->getBitShort(); + defstawidth = buf->getBitDouble(); + defendwidth = buf->getBitDouble(); + thickness = buf->getThickness(version > DRW::AC1014); + basePoint = DRW_Coord(0,0,buf->getBitDouble()); + extPoint = buf->getExtrusion(version > DRW::AC1014); + } else if (oType == 0x10) { //pline 3D + duint8 tmpFlag = buf->getRawChar8(); + DRW_DBG("flags 1 value: "); DRW_DBG(tmpFlag); + if (tmpFlag & 1) + curvetype = 5; + else if (tmpFlag & 2) + curvetype = 6; + if (tmpFlag & 3) { + curvetype = 8; + flags |= 4; + } + tmpFlag = buf->getRawChar8(); + if (tmpFlag & 1) + flags |= 1; + flags |= 8; //indicate 3DPOL + DRW_DBG("flags 2 value: "); DRW_DBG(tmpFlag); + } else if (oType == 0x1D) { //PFACE + flags = 64; + vertexcount = buf->getBitShort(); + DRW_DBG("vertex count: "); DRW_DBG(vertexcount); + facecount = buf->getBitShort(); + DRW_DBG("face count: "); DRW_DBG(facecount); + DRW_DBG("flags value: "); DRW_DBG(flags); + } + if (version > DRW::AC1015){ //2004+ + ooCount = buf->getBitLong(); + } + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + + if (version < DRW::AC1018){ //2000- + dwgHandle objectH = buf->getOffsetHandle(handle); + firstEH = objectH.ref; + DRW_DBG(" first Vertex Handle: "); DRW_DBGHL(objectH.code, objectH.size, objectH.ref); DRW_DBG("\n"); + objectH = buf->getOffsetHandle(handle); + lastEH = objectH.ref; + DRW_DBG(" last Vertex Handle: "); DRW_DBGHL(objectH.code, objectH.size, objectH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } else { + for (dint32 i = 0; i < ooCount; ++i){ + dwgHandle objectH = buf->getOffsetHandle(handle); + hadlesList.push_back (objectH.ref); + DRW_DBG(" Vertex Handle: "); DRW_DBGHL(objectH.code, objectH.size, objectH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + } + seqEndH = buf->getOffsetHandle(handle); + DRW_DBG(" SEQEND Handle: "); DRW_DBGHL(seqEndH.code, seqEndH.size, seqEndH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Vertex::parseCode(int code, dxfReader *reader){ + switch (code) { + case 70: + flags = reader->getInt32(); + break; + case 40: + stawidth = reader->getDouble(); + break; + case 41: + endwidth = reader->getDouble(); + break; + case 42: + bulge = reader->getDouble(); + break; + case 50: + tgdir = reader->getDouble(); + break; + case 71: + vindex1 = reader->getInt32(); + break; + case 72: + vindex2 = reader->getInt32(); + break; + case 73: + vindex3 = reader->getInt32(); + break; + case 74: + vindex4 = reader->getInt32(); + break; + case 91: + identifier = reader->getInt32(); + break; + default: + DRW_Point::parseCode(code, reader); + break; + } +} + +//0x0A vertex 2D +//0x0B vertex 3D +//0x0C MESH +//0x0D PFACE +//0x0E PFACE FACE +bool DRW_Vertex::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs, double el){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing pline Vertex *********************************************\n"); + + if (oType == 0x0A) { //pline 2D, needed example + flags = buf->getRawChar8(); //RLZ: EC unknown type + DRW_DBG("flags value: "); DRW_DBG(flags); + basePoint = buf->get3BitDouble(); + basePoint.z = el; + DRW_DBG("basePoint: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + stawidth = buf->getBitDouble(); + if (stawidth < 0) + endwidth = stawidth = fabs(stawidth); + else + endwidth = buf->getBitDouble(); + bulge = buf->getBitDouble(); + if (version > DRW::AC1021) //2010+ + DRW_DBG("Vertex ID: "); DRW_DBG(buf->getBitLong()); + tgdir = buf->getBitDouble(); + } else if (oType == 0x0B || oType == 0x0C || oType == 0x0D) { //PFACE + flags = buf->getRawChar8(); //RLZ: EC unknown type + DRW_DBG("flags value: "); DRW_DBG(flags); + basePoint = buf->get3BitDouble(); + DRW_DBG("basePoint: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + } else if (oType == 0x0E) { //PFACE FACE + vindex1 = buf->getBitShort(); + vindex2 = buf->getBitShort(); + vindex3 = buf->getBitShort(); + vindex4 = buf->getBitShort(); + } + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Hatch::parseCode(int code, dxfReader *reader){ + switch (code) { + case 2: + name = reader->getUtf8String(); + break; + case 70: + solid = reader->getInt32(); + break; + case 71: + associative = reader->getInt32(); + break; + case 72: /*edge type*/ + if (ispol){ //if is polyline is a as_bulge flag + break; + } else if (reader->getInt32() == 1){ //line + addLine(); + } else if (reader->getInt32() == 2){ //arc + addArc(); + } else if (reader->getInt32() == 3){ //elliptic arc + addEllipse(); + } else if (reader->getInt32() == 4){ //spline + addSpline(); + } + break; + case 10: + if (pt) pt->basePoint.x = reader->getDouble(); + else if (pline) { + plvert = pline->addVertex(); + plvert->x = reader->getDouble(); + } + break; + case 20: + if (pt) pt->basePoint.y = reader->getDouble(); + else if (plvert) plvert ->y = reader->getDouble(); + break; + case 11: + if (line) line->secPoint.x = reader->getDouble(); + else if (ellipse) ellipse->secPoint.x = reader->getDouble(); + break; + case 21: + if (line) line->secPoint.y = reader->getDouble(); + else if (ellipse) ellipse->secPoint.y = reader->getDouble(); + break; + case 40: + if (arc) arc->radious = reader->getDouble(); + else if (ellipse) ellipse->ratio = reader->getDouble(); + break; + case 41: + scale = reader->getDouble(); + break; + case 42: + if (plvert) plvert ->bulge = reader->getDouble(); + break; + case 50: + if (arc) arc->staangle = reader->getDouble()/ARAD; + else if (ellipse) ellipse->staparam = reader->getDouble()/ARAD; + break; + case 51: + if (arc) arc->endangle = reader->getDouble()/ARAD; + else if (ellipse) ellipse->endparam = reader->getDouble()/ARAD; + break; + case 52: + angle = reader->getDouble(); + break; + case 73: + if (arc) arc->isccw = reader->getInt32(); + else if (pline) pline->flags = reader->getInt32(); + break; + case 75: + hstyle = reader->getInt32(); + break; + case 76: + hpattern = reader->getInt32(); + break; + case 77: + doubleflag = reader->getInt32(); + break; + case 78: + deflines = reader->getInt32(); + break; + case 91: + loopsnum = reader->getInt32(); + looplist.reserve(loopsnum); + break; + case 92: + loop = new DRW_HatchLoop(reader->getInt32()); + looplist.push_back(loop); + if (reader->getInt32() & 2) { + ispol = true; + clearEntities(); + pline = new DRW_LWPolyline; + loop->objlist.push_back(pline); + } else ispol = false; + break; + case 93: + if (pline) pline->vertexnum = reader->getInt32(); + else loop->numedges = reader->getInt32();//aqui reserve + break; + case 98: //seed points ?? + clearEntities(); + break; + default: + DRW_Point::parseCode(code, reader); + break; + } +} + +bool DRW_Hatch::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + duint32 totalBoundItems = 0; + bool havePixelSize = false; + + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing hatch *********************************************\n"); + + //Gradient data, RLZ: is ok or if grad > 0 continue read ? + if (version > DRW::AC1015) { //2004+ + dint32 isGradient = buf->getBitLong(); + DRW_DBG("is Gradient: "); DRW_DBG(isGradient); + dint32 res = buf->getBitLong(); + DRW_DBG(" reserved: "); DRW_DBG(res); + double gradAngle = buf->getBitDouble(); + DRW_DBG(" Gradient angle: "); DRW_DBG(gradAngle); + double gradShift = buf->getBitDouble(); + DRW_DBG(" Gradient shift: "); DRW_DBG(gradShift); + dint32 singleCol = buf->getBitLong(); + DRW_DBG("\nsingle color Grad: "); DRW_DBG(singleCol); + double gradTint = buf->getBitDouble(); + DRW_DBG(" Gradient tint: "); DRW_DBG(gradTint); + dint32 numCol = buf->getBitLong(); + DRW_DBG(" num colors: "); DRW_DBG(numCol); + for (dint32 i = 0 ; i < numCol; ++i){ + double unkDouble = buf->getBitDouble(); + DRW_DBG("\nunkDouble: "); DRW_DBG(unkDouble); + duint16 unkShort = buf->getBitShort(); + DRW_DBG(" unkShort: "); DRW_DBG(unkShort); + dint32 rgbCol = buf->getBitLong(); + DRW_DBG(" rgb color: "); DRW_DBG(rgbCol); + duint8 ignCol = buf->getRawChar8(); + DRW_DBG(" ignored color: "); DRW_DBG(ignCol); + } + UTF8STRING gradName = sBuf->getVariableText(version, false); + DRW_DBG("\ngradient name: "); DRW_DBG(gradName.c_str()); DRW_DBG("\n"); + } + basePoint.z = buf->getBitDouble(); + extPoint = buf->get3BitDouble(); + DRW_DBG("base point: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + DRW_DBG("\nextrusion: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z); + name = sBuf->getVariableText(version, false); + DRW_DBG("\nhatch pattern name: "); DRW_DBG(name.c_str()); DRW_DBG("\n"); + solid = buf->getBit(); + associative = buf->getBit(); + loopsnum = buf->getBitLong(); + + //read loops + for (dint32 i = 0 ; i < loopsnum; ++i){ + loop = new DRW_HatchLoop(buf->getBitLong()); + havePixelSize |= loop->type & 4; + if (!(loop->type & 2)){ //Not polyline + dint32 numPathSeg = buf->getBitLong(); + for (dint32 j = 0; jgetRawChar8(); + if (typePath == 1){ //line + addLine(); + line->basePoint = buf->get2RawDouble(); + line->secPoint = buf->get2RawDouble(); + } else if (typePath == 2){ //circle arc + addArc(); + arc->basePoint = buf->get2RawDouble(); + arc->radious = buf->getBitDouble(); + arc->staangle = buf->getBitDouble(); + arc->endangle = buf->getBitDouble(); + arc->isccw = buf->getBit(); + } else if (typePath == 3){ //ellipse arc + addEllipse(); + ellipse->basePoint = buf->get2RawDouble(); + ellipse->secPoint = buf->get2RawDouble(); + ellipse->ratio = buf->getBitDouble(); + ellipse->staparam = buf->getBitDouble(); + ellipse->endparam = buf->getBitDouble(); + ellipse->isccw = buf->getBit(); + } else if (typePath == 4){ //spline + addSpline(); + spline->degree = buf->getBitLong(); + bool isRational = buf->getBit(); + spline->flags |= (isRational << 2); //rational + spline->flags |= (buf->getBit() << 1); //periodic + spline->nknots = buf->getBitLong(); + spline->knotslist.reserve(spline->nknots); + for (dint32 j = 0; j < spline->nknots;++j){ + spline->knotslist.push_back (buf->getBitDouble()); + } + spline->ncontrol = buf->getBitLong(); + spline->controllist.reserve(spline->ncontrol); + for (dint32 j = 0; j < spline->ncontrol;++j){ + DRW_Coord* crd = new DRW_Coord(buf->get3BitDouble()); + if(isRational) + crd->z = buf->getBitDouble(); //RLZ: investigate how store weight + spline->controllist.push_back(crd); + } + if (version > DRW::AC1021) { //2010+ + spline->nfit = buf->getBitLong(); + spline->fitlist.reserve(spline->nfit); + for (dint32 j = 0; j < spline->nfit;++j){ + DRW_Coord* crd = new DRW_Coord(buf->get3BitDouble()); + spline->fitlist.push_back (crd); + } + spline->tgStart = buf->get2RawDouble(); + spline->tgEnd = buf->get2RawDouble(); + } + } + } + } else { //end not pline, start polyline + pline = new DRW_LWPolyline; + bool asBulge = buf->getBit(); + pline->flags = buf->getBit();//closed bit + dint32 numVert = buf->getBitLong(); + for (dint32 j = 0; jgetRawDouble(); + v.y = buf->getRawDouble(); + if (asBulge) + v.bulge = buf->getBitDouble(); + pline->addVertex(v); + } + loop->objlist.push_back(pline); + }//end polyline + loop->update(); + looplist.push_back(loop); + totalBoundItems += buf->getBitLong(); + DRW_DBG(" totalBoundItems: "); DRW_DBG(totalBoundItems); + } //end read loops + + hstyle = buf->getBitShort(); + hpattern = buf->getBitShort(); + DRW_DBG("\nhatch style: "); DRW_DBG(hstyle); DRW_DBG(" pattern type"); DRW_DBG(hpattern); + if (!solid){ + angle = buf->getBitDouble(); + scale = buf->getBitDouble(); + doubleflag = buf->getBit(); + deflines = buf->getBitShort(); + for (dint32 i = 0 ; i < deflines; ++i){ + DRW_Coord ptL, offL; + double angleL = buf->getBitDouble(); + ptL.x = buf->getBitDouble(); + ptL.y = buf->getBitDouble(); + offL.x = buf->getBitDouble(); + offL.y = buf->getBitDouble(); + duint16 numDashL = buf->getBitShort(); + DRW_DBG("\ndef line: "); DRW_DBG(angleL); DRW_DBG(","); DRW_DBG(ptL.x); DRW_DBG(","); DRW_DBG(ptL.y); + DRW_DBG(","); DRW_DBG(offL.x); DRW_DBG(","); DRW_DBG(offL.y); DRW_DBG(","); DRW_DBG(angleL); + for (duint16 i = 0 ; i < numDashL; ++i){ + double lenghtL = buf->getBitDouble(); + DRW_DBG(","); DRW_DBG(lenghtL); + } + }//end deflines + } //end not solid + + if (havePixelSize){ + ddouble64 pixsize = buf->getBitDouble(); + DRW_DBG("\npixel size: "); DRW_DBG(pixsize); + } + dint32 numSeedPoints = buf->getBitLong(); + DRW_DBG("\nnum Seed Points "); DRW_DBG(numSeedPoints); + //read Seed Points + DRW_Coord seedPt; + for (dint32 i = 0 ; i < numSeedPoints; ++i){ + seedPt.x = buf->getRawDouble(); + seedPt.y = buf->getRawDouble(); + DRW_DBG("\n "); DRW_DBG(seedPt.x); DRW_DBG(","); DRW_DBG(seedPt.y); + } + + DRW_DBG("\n"); + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + for (duint32 i = 0 ; i < totalBoundItems; ++i){ + dwgHandle biH = buf->getHandle(); + DRW_DBG("Boundary Items Handle: "); DRW_DBGHL(biH.code, biH.size, biH.ref); + } + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Spline::parseCode(int code, dxfReader *reader){ + switch (code) { + case 210: + normalVec.x = reader->getDouble(); + break; + case 220: + normalVec.y = reader->getDouble(); + break; + case 230: + normalVec.z = reader->getDouble(); + break; + case 12: + tgStart.x = reader->getDouble(); + break; + case 22: + tgStart.y = reader->getDouble(); + break; + case 32: + tgStart.z = reader->getDouble(); + break; + case 13: + tgEnd.x = reader->getDouble(); + break; + case 23: + tgEnd.y = reader->getDouble(); + break; + case 33: + tgEnd.z = reader->getDouble(); + break; + case 70: + flags = reader->getInt32(); + break; + case 71: + degree = reader->getInt32(); + break; + case 72: + nknots = reader->getInt32(); + break; + case 73: + ncontrol = reader->getInt32(); + break; + case 74: + nfit = reader->getInt32(); + break; + case 42: + tolknot = reader->getDouble(); + break; + case 43: + tolcontrol = reader->getDouble(); + break; + case 44: + tolfit = reader->getDouble(); + break; + case 10: { + controlpoint = new DRW_Coord(); + controllist.push_back(controlpoint); + controlpoint->x = reader->getDouble(); + break; } + case 20: + if(controlpoint != NULL) + controlpoint->y = reader->getDouble(); + break; + case 30: + if(controlpoint != NULL) + controlpoint->z = reader->getDouble(); + break; + case 11: { + fitpoint = new DRW_Coord(); + fitlist.push_back(fitpoint); + fitpoint->x = reader->getDouble(); + break; } + case 21: + if(fitpoint != NULL) + fitpoint->y = reader->getDouble(); + break; + case 31: + if(fitpoint != NULL) + fitpoint->z = reader->getDouble(); + break; + case 40: + knotslist.push_back(reader->getDouble()); + break; + case 41: + weightlist.push_back(reader->getDouble()); + break; + default: + DRW_Entity::parseCode(code, reader); + break; + } +} + +bool DRW_Spline::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing spline *********************************************\n"); + duint8 weight = 0; // RLZ ??? flags, weight, code 70, bit 4 (16) + + dint32 scenario = buf->getBitLong(); + DRW_DBG("scenario: "); DRW_DBG(scenario); + if (version > DRW::AC1024) { + dint32 splFlag1 = buf->getBitLong(); + if (splFlag1 & 1) + scenario = 2; + dint32 knotParam = buf->getBitLong(); + DRW_DBG("2013 splFlag1: "); DRW_DBG(splFlag1); DRW_DBG(" 2013 knotParam: "); + DRW_DBG(knotParam); +// DRW_DBG("unk bit: "); DRW_DBG(buf->getBit()); + } + degree = buf->getBitLong(); //RLZ: code 71, verify with dxf + DRW_DBG(" degree: "); DRW_DBG(degree); DRW_DBG("\n"); + if (scenario == 2) { + flags = 8;//scenario 2 = not rational & planar + tolfit = buf->getBitDouble();//BD + DRW_DBG("flags: "); DRW_DBG(flags); DRW_DBG(" tolfit: "); DRW_DBG(tolfit); + tgStart =buf->get3BitDouble(); + DRW_DBG(" Start Tangent: "); DRW_DBGPT(tgStart.x, tgStart.y, tgStart.z); + tgEnd =buf->get3BitDouble(); + DRW_DBG("\nEnd Tangent: "); DRW_DBGPT(tgEnd.x, tgEnd.y, tgEnd.z); + nfit = buf->getBitLong(); + DRW_DBG("\nnumber of fit points: "); DRW_DBG(nfit); + } else if (scenario == 1) { + flags = 8;//scenario 1 = rational & planar + flags |= buf->getBit() << 2; //flags, rational, code 70, bit 2 (4) + flags |= buf->getBit(); //flags, closed, code 70, bit 0 (1) + flags |= buf->getBit() << 1; //flags, periodic, code 70, bit 1 (2) + tolknot = buf->getBitDouble(); + tolcontrol = buf->getBitDouble(); + DRW_DBG("flags: "); DRW_DBG(flags); DRW_DBG(" knot tolerance: "); DRW_DBG(tolknot); + DRW_DBG(" control point tolerance: "); DRW_DBG(tolcontrol); + nknots = buf->getBitLong(); + ncontrol = buf->getBitLong(); + weight = buf->getBit(); // RLZ ??? flags, weight, code 70, bit 4 (16) + DRW_DBG("\nnum of knots: "); DRW_DBG(nknots); DRW_DBG(" num of control pt: "); + DRW_DBG(ncontrol); DRW_DBG(" weight bit: "); DRW_DBG(weight); + } else { + DRW_DBG("\ndwg Ellipse, unknouwn scenario\n"); + return false; //RLZ: from doc only 1 or 2 are ok ? + } + + knotslist.reserve(nknots); + for (dint32 i= 0; igetBitDouble()); + } + controllist.reserve(ncontrol); + for (dint32 i= 0; iget3BitDouble()); + controllist.push_back(crd); + if (weight){ + DRW_DBG("\n w: "); DRW_DBG(buf->getBitDouble()); //RLZ Warning: D (BD or RD) + } + } + fitlist.reserve(nfit); + for (dint32 i= 0; iget3BitDouble()); + fitlist.push_back (crd); + } + if (DRW_DBGGL == DRW_dbg::DEBUG){ + DRW_DBG("\nknots list: "); + for (std::vector::iterator it = knotslist.begin() ; it != knotslist.end(); ++it){ + DRW_DBG("\n"); DRW_DBG(*it); + } + DRW_DBG("\ncontrol point list: "); + for (std::vector::iterator it = controllist.begin() ; it != controllist.end(); ++it){ + DRW_DBG("\n"); DRW_DBGPT((*it)->x,(*it)->y,(*it)->z); + } + DRW_DBG("\nfit point list: "); + for (std::vector::iterator it = fitlist.begin() ; it != fitlist.end(); ++it){ + DRW_DBG("\n"); DRW_DBGPT((*it)->x,(*it)->y,(*it)->z); + } + } + + /* Common Entity Handle Data */ + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Image::parseCode(int code, dxfReader *reader){ + switch (code) { + case 12: + vVector.x = reader->getDouble(); + break; + case 22: + vVector.y = reader->getDouble(); + break; + case 32: + vVector.z = reader->getDouble(); + break; + case 13: + sizeu = reader->getDouble(); + break; + case 23: + sizev = reader->getDouble(); + break; + case 340: + ref = reader->getHandleString(); + break; + case 280: + clip = reader->getInt32(); + break; + case 281: + brightness = reader->getInt32(); + break; + case 282: + contrast = reader->getInt32(); + break; + case 283: + fade = reader->getInt32(); + break; + default: + DRW_Line::parseCode(code, reader); + break; + } +} + +bool DRW_Image::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing image *********************************************\n"); + + dint32 classVersion = buf->getBitLong(); + DRW_DBG("class Version: "); DRW_DBG(classVersion); + basePoint = buf->get3BitDouble(); + DRW_DBG("\nbase point: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + secPoint = buf->get3BitDouble(); + DRW_DBG("\nU vector: "); DRW_DBGPT(secPoint.x, secPoint.y, secPoint.z); + vVector = buf->get3BitDouble(); + DRW_DBG("\nV vector: "); DRW_DBGPT(vVector.x, vVector.y, vVector.z); + sizeu = buf->getRawDouble(); + sizev = buf->getRawDouble(); + DRW_DBG("\nsize U: "); DRW_DBG(sizeu); DRW_DBG("\nsize V: "); DRW_DBG(sizev); + duint16 displayProps = buf->getBitShort(); + (void)displayProps; + clip = buf->getBit(); + brightness = buf->getRawChar8(); + contrast = buf->getRawChar8(); + fade = buf->getRawChar8(); + if (version > DRW::AC1021){ //2010+ + bool clipMode = buf->getBit(); + (void)clipMode; + } + duint16 clipType = buf->getBitShort(); + if (clipType == 1){ + buf->get2RawDouble(); + buf->get2RawDouble(); + } else { //clipType == 2 + dint32 numVerts = buf->getBitLong(); + for (int i= 0; i< numVerts;++i) + buf->get2RawDouble(); + } + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + dwgHandle biH = buf->getHandle(); + DRW_DBG("ImageDef Handle: "); DRW_DBGHL(biH.code, biH.size, biH.ref); + ref = biH.ref; + biH = buf->getHandle(); + DRW_DBG("ImageDefReactor Handle: "); DRW_DBGHL(biH.code, biH.size, biH.ref); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Dimension::parseCode(int code, dxfReader *reader){ + switch (code) { + case 1: + text = reader->getUtf8String(); + break; + case 2: + name = reader->getString(); + break; + case 3: + style = reader->getUtf8String(); + break; + case 70: + type = reader->getInt32(); + break; + case 71: + align = reader->getInt32(); + break; + case 72: + linesty = reader->getInt32(); + break; + case 10: + defPoint.x = reader->getDouble(); + break; + case 20: + defPoint.y = reader->getDouble(); + break; + case 30: + defPoint.z = reader->getDouble(); + break; + case 11: + textPoint.x = reader->getDouble(); + break; + case 21: + textPoint.y = reader->getDouble(); + break; + case 31: + textPoint.z = reader->getDouble(); + break; + case 12: + clonePoint.x = reader->getDouble(); + break; + case 22: + clonePoint.y = reader->getDouble(); + break; + case 32: + clonePoint.z = reader->getDouble(); + break; + case 13: + def1.x = reader->getDouble(); + break; + case 23: + def1.y = reader->getDouble(); + break; + case 33: + def1.z = reader->getDouble(); + break; + case 14: + def2.x = reader->getDouble(); + break; + case 24: + def2.y = reader->getDouble(); + break; + case 34: + def2.z = reader->getDouble(); + break; + case 15: + circlePoint.x = reader->getDouble(); + break; + case 25: + circlePoint.y = reader->getDouble(); + break; + case 35: + circlePoint.z = reader->getDouble(); + break; + case 16: + arcPoint.x = reader->getDouble(); + break; + case 26: + arcPoint.y = reader->getDouble(); + break; + case 36: + arcPoint.z = reader->getDouble(); + break; + case 41: + linefactor = reader->getDouble(); + break; + case 42: + actual = reader->getDouble(); + hasActual = (actual != 0.0); + break; + case 53: + rot = reader->getDouble(); + break; + case 50: + angle = reader->getDouble(); + break; + case 52: + oblique = reader->getDouble(); + break; + case 40: + length = reader->getDouble(); + break; + case 51: + hdir = reader->getDouble(); + break; + default: + DRW_Entity::parseCode(code, reader); + break; + } +} + +bool DRW_Dimension::parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer *sBuf){ + DRW_DBG("\n***************************** parsing dimension *********************************************"); + if (version > DRW::AC1021) { //2010+ + duint8 dimVersion = buf->getRawChar8(); + DRW_DBG("\ndimVersion: "); DRW_DBG(dimVersion); + } + extPoint = buf->getExtrusion(version > DRW::AC1014); + DRW_DBG("\nextPoint: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z); + if (version > DRW::AC1014) { //2000+ + DRW_DBG("\nFive unknown bits: "); DRW_DBG(buf->getBit()); DRW_DBG(buf->getBit()); + DRW_DBG(buf->getBit()); DRW_DBG(buf->getBit()); DRW_DBG(buf->getBit()); + } + textPoint.x = buf->getRawDouble(); + textPoint.y = buf->getRawDouble(); + textPoint.z = buf->getBitDouble(); + DRW_DBG("\ntextPoint: "); DRW_DBGPT(textPoint.x, textPoint.y, textPoint.z); + type = buf->getRawChar8(); + DRW_DBG("\ntype (70) read: "); DRW_DBG(type); + type = (type & 1) ? type & 0x7F : type | 0x80; //set bit 7 + type = (type & 2) ? type | 0x20 : type & 0xDF; //set bit 5 + DRW_DBG(" type (70) set: "); DRW_DBG(type); + //clear last 3 bits to set integer dim type + type &= 0xF8; + text = sBuf->getVariableText(version, false); + DRW_DBG("\nforced dim text: "); DRW_DBG(text.c_str()); + rot = buf->getBitDouble(); + hdir = buf->getBitDouble(); + DRW_Coord inspoint = buf->get3BitDouble(); + DRW_DBG("\ninspoint: "); DRW_DBGPT(inspoint.x, inspoint.y, inspoint.z); + double insRot_code54 = buf->getBitDouble(); //RLZ: unknown, investigate + DRW_DBG(" insRot_code54: "); DRW_DBG(insRot_code54); + if (version > DRW::AC1014) { //2000+ + align = buf->getBitShort(); + linesty = buf->getBitShort(); + linefactor = buf->getBitDouble(); + double actMeas = buf->getBitDouble(); + DRW_DBG("\n actMeas_code42: "); DRW_DBG(actMeas); + if (version > DRW::AC1018) { //2007+ + bool unk = buf->getBit(); + bool flip1 = buf->getBit(); + bool flip2 = buf->getBit(); + DRW_DBG("\n2007, unk, flip1, flip2: "); DRW_DBG(unk); DRW_DBG(flip1); DRW_DBG(flip2); + } + } + clonePoint.x = buf->getRawDouble(); + clonePoint.y = buf->getRawDouble(); + DRW_DBG("\nclonePoint: "); DRW_DBGPT(clonePoint.x, clonePoint.y, clonePoint.z); + + return buf->isGood(); +} + +bool DRW_DimAligned::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + ret = DRW_Dimension::parseDwg(version, buf, sBuf); + if (!ret) + return ret; + if (oType == 0x15) + DRW_DBG("\n***************************** parsing dim linear *********************************************\n"); + else + DRW_DBG("\n***************************** parsing dim aligned *********************************************\n"); + DRW_Coord pt = buf->get3BitDouble(); + setPt3(pt); //def1 + DRW_DBG("def1: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt4(pt); + DRW_DBG("\ndef2: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setDefPoint(pt); + DRW_DBG("\ndefPoint: "); DRW_DBGPT(pt.x, pt.y, pt.z); + setOb52(buf->getBitDouble()); + if (oType == 0x15) + setAn50(buf->getBitDouble() * ARAD); + else + type |= 1; + DRW_DBG("\n type (70) final: "); DRW_DBG(type); DRW_DBG("\n"); + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + if (!ret) + return ret; + dimStyleH = buf->getHandle(); + DRW_DBG("dim style Handle: "); DRW_DBGHL(dimStyleH.code, dimStyleH.size, dimStyleH.ref); DRW_DBG("\n"); + blockH = buf->getHandle(); /* H 7 STYLE (hard pointer) */ + DRW_DBG("anon block Handle: "); DRW_DBGHL(blockH.code, blockH.size, blockH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + // RS crc; //RS */ + return buf->isGood(); + } + + bool DRW_DimRadial::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + ret = DRW_Dimension::parseDwg(version, buf, sBuf); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing dim radial *********************************************\n"); + DRW_Coord pt = buf->get3BitDouble(); + setDefPoint(pt); //code 10 + DRW_DBG("defPoint: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt5(pt); //center pt code 15 + DRW_DBG("\ncenter point: "); DRW_DBGPT(pt.x, pt.y, pt.z); + setRa40(buf->getBitDouble()); //leader length code 40 + DRW_DBG("\nleader length: "); DRW_DBG(getRa40()); + type |= 4; + DRW_DBG("\n type (70) final: "); DRW_DBG(type); DRW_DBG("\n"); + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + if (!ret) + return ret; + dimStyleH = buf->getHandle(); + DRW_DBG("dim style Handle: "); DRW_DBGHL(dimStyleH.code, dimStyleH.size, dimStyleH.ref); DRW_DBG("\n"); + blockH = buf->getHandle(); /* H 7 STYLE (hard pointer) */ + DRW_DBG("anon block Handle: "); DRW_DBGHL(blockH.code, blockH.size, blockH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + // RS crc; //RS */ + return buf->isGood(); + } + + bool DRW_DimDiametric::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + ret = DRW_Dimension::parseDwg(version, buf, sBuf); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing dim diametric *********************************************\n"); + DRW_Coord pt = buf->get3BitDouble(); + setPt5(pt); //center pt code 15 + DRW_DBG("center point: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setDefPoint(pt); //code 10 + DRW_DBG("\ndefPoint: "); DRW_DBGPT(pt.x, pt.y, pt.z); + setRa40(buf->getBitDouble()); //leader length code 40 + DRW_DBG("\nleader length: "); DRW_DBG(getRa40()); + type |= 3; + DRW_DBG("\n type (70) final: "); DRW_DBG(type); DRW_DBG("\n"); + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + if (!ret) + return ret; + dimStyleH = buf->getHandle(); + DRW_DBG("dim style Handle: "); DRW_DBGHL(dimStyleH.code, dimStyleH.size, dimStyleH.ref); DRW_DBG("\n"); + blockH = buf->getHandle(); /* H 7 STYLE (hard pointer) */ + DRW_DBG("anon block Handle: "); DRW_DBGHL(blockH.code, blockH.size, blockH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + // RS crc; //RS */ + return buf->isGood(); + } + +bool DRW_DimAngular::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + ret = DRW_Dimension::parseDwg(version, buf, sBuf); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing dim angular *********************************************\n"); + DRW_Coord pt; + pt.x = buf->getRawDouble(); + pt.y = buf->getRawDouble(); + setPt6(pt); //code 16 + DRW_DBG("arc Point: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt3(pt); //def1 code 13 + DRW_DBG("\ndef1: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt4(pt); //def2 code 14 + DRW_DBG("\ndef2: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt5(pt); //center pt code 15 + DRW_DBG("\ncenter point: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setDefPoint(pt); //code 10 + DRW_DBG("\ndefPoint: "); DRW_DBGPT(pt.x, pt.y, pt.z); + type |= 0x02; + DRW_DBG("\n type (70) final: "); DRW_DBG(type); DRW_DBG("\n"); + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + if (!ret) + return ret; + dimStyleH = buf->getHandle(); + DRW_DBG("dim style Handle: "); DRW_DBGHL(dimStyleH.code, dimStyleH.size, dimStyleH.ref); DRW_DBG("\n"); + blockH = buf->getHandle(); /* H 7 STYLE (hard pointer) */ + DRW_DBG("anon block Handle: "); DRW_DBGHL(blockH.code, blockH.size, blockH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + // RS crc; //RS */ + return buf->isGood(); +} + +bool DRW_DimAngular3p::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + ret = DRW_Dimension::parseDwg(version, buf, sBuf); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing dim angular3p *********************************************\n"); + DRW_Coord pt = buf->get3BitDouble(); + setDefPoint(pt); //code 10 + DRW_DBG("defPoint: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt3(pt); //def1 code 13 + DRW_DBG("\ndef1: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt4(pt); //def2 code 14 + DRW_DBG("\ndef2: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt5(pt); //center pt code 15 + DRW_DBG("\ncenter point: "); DRW_DBGPT(pt.x, pt.y, pt.z); + type |= 0x05; + DRW_DBG("\n type (70) final: "); DRW_DBG(type); DRW_DBG("\n"); + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + if (!ret) + return ret; + dimStyleH = buf->getHandle(); + DRW_DBG("dim style Handle: "); DRW_DBGHL(dimStyleH.code, dimStyleH.size, dimStyleH.ref); DRW_DBG("\n"); + blockH = buf->getHandle(); /* H 7 STYLE (hard pointer) */ + DRW_DBG("anon block Handle: "); DRW_DBGHL(blockH.code, blockH.size, blockH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + // RS crc; //RS */ + return buf->isGood(); +} + +bool DRW_DimOrdinate::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + ret = DRW_Dimension::parseDwg(version, buf, sBuf); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing dim ordinate *********************************************\n"); + DRW_Coord pt = buf->get3BitDouble(); + setDefPoint(pt); + DRW_DBG("defPoint: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt3(pt); //def1 + DRW_DBG("\ndef1: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt4(pt); + DRW_DBG("\ndef2: "); DRW_DBGPT(pt.x, pt.y, pt.z); + duint8 type2 = buf->getRawChar8();//RLZ: correct this + DRW_DBG("type2 (70) read: "); DRW_DBG(type2); + type = (type2 & 1) ? type | 0x80 : type & 0xBF; //set bit 6 + DRW_DBG(" type (70) set: "); DRW_DBG(type); + type |= 6; + DRW_DBG("\n type (70) final: "); DRW_DBG(type); + + ret = DRW_Entity::parseDwgEntHandle(version, buf); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + if (!ret) + return ret; + dimStyleH = buf->getHandle(); + DRW_DBG("dim style Handle: "); DRW_DBGHL(dimStyleH.code, dimStyleH.size, dimStyleH.ref); DRW_DBG("\n"); + blockH = buf->getHandle(); /* H 7 STYLE (hard pointer) */ + DRW_DBG("anon block Handle: "); DRW_DBGHL(blockH.code, blockH.size, blockH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + // RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Leader::parseCode(int code, dxfReader *reader){ + switch (code) { + case 3: + style = reader->getUtf8String(); + break; + case 71: + arrow = reader->getInt32(); + break; + case 72: + leadertype = reader->getInt32(); + break; + case 73: + flag = reader->getInt32(); + break; + case 74: + hookline = reader->getInt32(); + break; + case 75: + hookflag = reader->getInt32(); + break; + case 76: + vertnum = reader->getInt32(); + break; + case 77: + coloruse = reader->getInt32(); + break; + case 40: + textheight = reader->getDouble(); + break; + case 41: + textwidth = reader->getDouble(); + break; + case 10: { + vertexpoint = new DRW_Coord(); + vertexlist.push_back(vertexpoint); + vertexpoint->x = reader->getDouble(); + break; } + case 20: + if(vertexpoint != NULL) + vertexpoint->y = reader->getDouble(); + break; + case 30: + if(vertexpoint != NULL) + vertexpoint->z = reader->getDouble(); + break; + case 340: + annotHandle = reader->getHandleString(); + break; + case 210: + extrusionPoint.x = reader->getDouble(); + break; + case 220: + extrusionPoint.y = reader->getDouble(); + break; + case 230: + extrusionPoint.z = reader->getDouble(); + break; + case 211: + horizdir.x = reader->getDouble(); + break; + case 221: + horizdir.y = reader->getDouble(); + break; + case 231: + horizdir.z = reader->getDouble(); + break; + case 212: + offsetblock.x = reader->getDouble(); + break; + case 222: + offsetblock.y = reader->getDouble(); + break; + case 232: + offsetblock.z = reader->getDouble(); + break; + case 213: + offsettext.x = reader->getDouble(); + break; + case 223: + offsettext.y = reader->getDouble(); + break; + case 233: + offsettext.z = reader->getDouble(); + break; + default: + DRW_Entity::parseCode(code, reader); + break; + } +} + +bool DRW_Leader::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing leader *********************************************\n"); + DRW_DBG("unknown bit "); DRW_DBG(buf->getBit()); + DRW_DBG(" annot type "); DRW_DBG(buf->getBitShort()); + DRW_DBG(" Path type "); DRW_DBG(buf->getBitShort()); + dint32 nPt = buf->getBitLong(); + DRW_DBG(" Num pts "); DRW_DBG(nPt); + + // add vertexs + for (int i = 0; i< nPt; i++){ + DRW_Coord* vertex = new DRW_Coord(buf->get3BitDouble()); + vertexlist.push_back(vertex); + DRW_DBG("\nvertex "); DRW_DBGPT(vertex->x, vertex->y, vertex->z); + } + DRW_Coord Endptproj = buf->get3BitDouble(); + DRW_DBG("\nEndptproj "); DRW_DBGPT(Endptproj.x, Endptproj.y, Endptproj.z); + extrusionPoint = buf->getExtrusion(version > DRW::AC1014); + DRW_DBG("\nextrusionPoint "); DRW_DBGPT(extrusionPoint.x, extrusionPoint.y, extrusionPoint.z); + if (version > DRW::AC1014) { //2000+ + DRW_DBG("\nFive unknown bits: "); DRW_DBG(buf->getBit()); DRW_DBG(buf->getBit()); + DRW_DBG(buf->getBit()); DRW_DBG(buf->getBit()); DRW_DBG(buf->getBit()); + } + horizdir = buf->get3BitDouble(); + DRW_DBG("\nhorizdir "); DRW_DBGPT(horizdir.x, horizdir.y, horizdir.z); + offsetblock = buf->get3BitDouble(); + DRW_DBG("\noffsetblock "); DRW_DBGPT(offsetblock.x, offsetblock.y, offsetblock.z); + if (version > DRW::AC1012) { //R14+ + DRW_Coord unk = buf->get3BitDouble(); + DRW_DBG("\nunknown "); DRW_DBGPT(unk.x, unk.y, unk.z); + } + if (version < DRW::AC1015) { //R14 - + DRW_DBG("\ndimgap "); DRW_DBG(buf->getBitDouble()); + } + if (version < DRW::AC1024) { //2010- + textheight = buf->getBitDouble(); + textwidth = buf->getBitDouble(); + DRW_DBG("\ntextheight "); DRW_DBG(textheight); DRW_DBG(" textwidth "); DRW_DBG(textwidth); + } + hookline = buf->getBit(); + arrow = buf->getBit(); + DRW_DBG(" hookline "); DRW_DBG(hookline); DRW_DBG(" arrow flag "); DRW_DBG(arrow); + + if (version < DRW::AC1015) { //R14 - + DRW_DBG("\nArrow head type "); DRW_DBG(buf->getBitShort()); + DRW_DBG("dimasz "); DRW_DBG(buf->getBitDouble()); + DRW_DBG("\nunk bit "); DRW_DBG(buf->getBit()); + DRW_DBG(" unk bit "); DRW_DBG(buf->getBit()); + DRW_DBG(" unk short "); DRW_DBG(buf->getBitShort()); + DRW_DBG(" byBlock color "); DRW_DBG(buf->getBitShort()); + DRW_DBG(" unk bit "); DRW_DBG(buf->getBit()); + DRW_DBG(" unk bit "); DRW_DBG(buf->getBit()); + } else { //R2000+ + DRW_DBG("\nunk short "); DRW_DBG(buf->getBitShort()); + DRW_DBG(" unk bit "); DRW_DBG(buf->getBit()); + DRW_DBG(" unk bit "); DRW_DBG(buf->getBit()); + } + DRW_DBG("\n"); + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + AnnotH = buf->getHandle(); + annotHandle = AnnotH.ref; + DRW_DBG("annot block Handle: "); DRW_DBGHL(AnnotH.code, AnnotH.size, dimStyleH.ref); DRW_DBG("\n"); + dimStyleH = buf->getHandle(); /* H 7 STYLE (hard pointer) */ + DRW_DBG("dim style Handle: "); DRW_DBGHL(dimStyleH.code, dimStyleH.size, dimStyleH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Viewport::parseCode(int code, dxfReader *reader){ + switch (code) { + case 40: + pswidth = reader->getDouble(); + break; + case 41: + psheight = reader->getDouble(); + break; + case 68: + vpstatus = reader->getInt32(); + break; + case 69: + vpID = reader->getInt32(); + break; + case 12: { + centerPX = reader->getDouble(); + break; } + case 22: + centerPY = reader->getDouble(); + break; + default: + DRW_Point::parseCode(code, reader); + break; + } +} +//ex 22 dec 34 +bool DRW_Viewport::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing viewport *****************************************\n"); + basePoint.x = buf->getBitDouble(); + basePoint.y = buf->getBitDouble(); + basePoint.z = buf->getBitDouble(); + DRW_DBG("center "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + pswidth = buf->getBitDouble(); + psheight = buf->getBitDouble(); + DRW_DBG("\nWidth: "); DRW_DBG(pswidth); DRW_DBG(", Height: "); DRW_DBG(psheight); DRW_DBG("\n"); + //RLZ TODO: complete in dxf + if (version > DRW::AC1014) {//2000+ + viewTarget.x = buf->getBitDouble(); + viewTarget.y = buf->getBitDouble(); + viewTarget.z = buf->getBitDouble(); + DRW_DBG("view Target "); DRW_DBGPT(viewTarget.x, viewTarget.y, viewTarget.z); + viewDir.x = buf->getBitDouble(); + viewDir.y = buf->getBitDouble(); + viewDir.z = buf->getBitDouble(); + DRW_DBG("\nview direction "); DRW_DBGPT(viewDir.x, viewDir.y, viewDir.z); + twistAngle = buf->getBitDouble(); + DRW_DBG("\nView twist Angle: "); DRW_DBG(twistAngle); + viewHeight = buf->getBitDouble(); + DRW_DBG("\nview Height: "); DRW_DBG(viewHeight); + viewLength = buf->getBitDouble(); + DRW_DBG(" Lens Length: "); DRW_DBG(viewLength); + frontClip = buf->getBitDouble(); + DRW_DBG("\nfront Clip Z: "); DRW_DBG(frontClip); + backClip = buf->getBitDouble(); + DRW_DBG(" back Clip Z: "); DRW_DBG(backClip); + snapAngle = buf->getBitDouble(); + DRW_DBG("\n snap Angle: "); DRW_DBG(snapAngle); + centerPX = buf->getRawDouble(); + centerPY = buf->getRawDouble(); + DRW_DBG("\nview center X: "); DRW_DBG(centerPX); DRW_DBG(", Y: "); DRW_DBG(centerPX); + snapPX = buf->getRawDouble(); + snapPY = buf->getRawDouble(); + DRW_DBG("\nSnap base point X: "); DRW_DBG(snapPX); DRW_DBG(", Y: "); DRW_DBG(snapPY); + snapSpPX = buf->getRawDouble(); + snapSpPY = buf->getRawDouble(); + DRW_DBG("\nSnap spacing X: "); DRW_DBG(snapSpPX); DRW_DBG(", Y: "); DRW_DBG(snapSpPY); + //RLZ: need to complete + DRW_DBG("\nGrid spacing X: "); DRW_DBG(buf->getRawDouble()); DRW_DBG(", Y: "); DRW_DBG(buf->getRawDouble());DRW_DBG("\n"); + DRW_DBG("Circle zoom?: "); DRW_DBG(buf->getBitShort()); DRW_DBG("\n"); + } + if (version > DRW::AC1018) {//2007+ + DRW_DBG("Grid major?: "); DRW_DBG(buf->getBitShort()); DRW_DBG("\n"); + } + if (version > DRW::AC1014) {//2000+ + frozenLyCount = buf->getBitLong(); + DRW_DBG("Frozen Layer count?: "); DRW_DBG(frozenLyCount); DRW_DBG("\n"); + DRW_DBG("Status Flags?: "); DRW_DBG(buf->getBitLong()); DRW_DBG("\n"); + //RLZ: Warning needed separate string bufer + DRW_DBG("Style sheet?: "); DRW_DBG(sBuf->getVariableText(version, false)); DRW_DBG("\n"); + DRW_DBG("Render mode?: "); DRW_DBG(buf->getRawChar8()); DRW_DBG("\n"); + DRW_DBG("UCS OMore...: "); DRW_DBG(buf->getBit()); DRW_DBG("\n"); + DRW_DBG("UCS VMore...: "); DRW_DBG(buf->getBit()); DRW_DBG("\n"); + DRW_DBG("UCS OMore...: "); DRW_DBGPT(buf->getBitDouble(), buf->getBitDouble(), buf->getBitDouble()); DRW_DBG("\n"); + DRW_DBG("ucs XAMore...: "); DRW_DBGPT(buf->getBitDouble(), buf->getBitDouble(), buf->getBitDouble()); DRW_DBG("\n"); + DRW_DBG("UCS YMore....: "); DRW_DBGPT(buf->getBitDouble(), buf->getBitDouble(), buf->getBitDouble()); DRW_DBG("\n"); + DRW_DBG("UCS EMore...: "); DRW_DBG(buf->getBitDouble()); DRW_DBG("\n"); + DRW_DBG("UCS OVMore...: "); DRW_DBG(buf->getBitShort()); DRW_DBG("\n"); + } + if (version > DRW::AC1015) {//2004+ + DRW_DBG("ShadePlot Mode...: "); DRW_DBG(buf->getBitShort()); DRW_DBG("\n"); + } + if (version > DRW::AC1018) {//2007+ + DRW_DBG("Use def Ligth...: "); DRW_DBG(buf->getBit()); DRW_DBG("\n"); + DRW_DBG("Def ligth tipe?: "); DRW_DBG(buf->getRawChar8()); DRW_DBG("\n"); + DRW_DBG("Brightness: "); DRW_DBG(buf->getBitDouble()); DRW_DBG("\n"); + DRW_DBG("Contrast: "); DRW_DBG(buf->getBitDouble()); DRW_DBG("\n"); +// DRW_DBG("Ambient Cmc or Enc: "); DRW_DBG(buf->getCmColor(version)); DRW_DBG("\n"); + DRW_DBG("Ambient (Cmc or Enc?), Enc: "); DRW_DBG(buf->getEnColor(version)); DRW_DBG("\n"); + } + ret = DRW_Entity::parseDwgEntHandle(version, buf); + + dwgHandle someHdl; + if (version < DRW::AC1015) {//R13 & R14 only + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + someHdl = buf->getHandle(); + DRW_DBG("ViewPort ent header: "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + } + if (version > DRW::AC1014) {//2000+ + for (duint8 i=0; i < frozenLyCount; ++i){ + someHdl = buf->getHandle(); + DRW_DBG("Frozen layer handle "); DRW_DBG(i); DRW_DBG(": "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + } + someHdl = buf->getHandle(); + DRW_DBG("Clip bpundary handle: "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + if (version == DRW::AC1015) {//2000 only + someHdl = buf->getHandle(); + DRW_DBG("ViewPort ent header: "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + } + someHdl = buf->getHandle(); + DRW_DBG("Named ucs handle: "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + someHdl = buf->getHandle(); + DRW_DBG("base ucs handle: "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + } + if (version > DRW::AC1018) {//2007+ + someHdl = buf->getHandle(); + DRW_DBG("background handle: "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + someHdl = buf->getHandle(); + DRW_DBG("visual style handle: "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + someHdl = buf->getHandle(); + DRW_DBG("shadeplot ID handle: "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + someHdl = buf->getHandle(); + DRW_DBG("SUN handle: "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + } + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + if (!ret) + return ret; + return buf->isGood(); +} diff --git a/extlib/libdxfrw/drw_entities.h b/extlib/libdxfrw/drw_entities.h new file mode 100644 index 0000000..be0ab82 --- /dev/null +++ b/extlib/libdxfrw/drw_entities.h @@ -0,0 +1,1572 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DRW_ENTITIES_H +#define DRW_ENTITIES_H + + +#include +#include +#include +#include "drw_base.h" + +class dxfReader; +class dwgBuffer; +class DRW_Polyline; + +namespace DRW { + + //! Entity's type. + enum ETYPE { + E3DFACE, +// E3DSOLID, //encripted propietry data +// ACAD_PROXY_ENTITY, + ARC, +// ATTDEF, +// ATTRIB, + BLOCK,// and ENDBLK +// BODY, //encripted propietry data + CIRCLE, + DIMENSION, + DIMALIGNED, + DIMLINEAR, + DIMRADIAL, + DIMDIAMETRIC, + DIMANGULAR, + DIMANGULAR3P, + DIMORDINATE, + ELLIPSE, + HATCH, +// HELIX, + IMAGE, + INSERT, + LEADER, +// LIGHT, + LINE, + LWPOLYLINE, +// MESH, +// MLINE, +// MLEADERSTYLE, +// MLEADER, + MTEXT, +// OLEFRAME, +// OLE2FRAME, + POINT, + POLYLINE, + RAY, +// REGION, //encripted propietry data +// SECTION, +// SEQEND,//not needed?? used in polyline and insert/attrib and dwg +// SHAPE, + SOLID, + SPLINE, +// SUN, +// SURFACE, //encripted propietry data can be four types +// TABLE, + TEXT, +// TOLERANCE, + TRACE, + UNDERLAY, + VERTEX, + VIEWPORT, +// WIPEOUT, //WIPEOUTVARIABLE + XLINE, + UNKNOWN + }; + +} +//only in DWG: MINSERT, 5 types of vertex, 4 types of polylines: 2d, 3d, pface & mesh +//shape, dictionary, MLEADER, MLEADERSTYLE + +#define SETENTFRIENDS friend class dxfRW; \ + friend class dwgReader; + +//! Base class for entities +/*! +* Base class for entities +* @author Rallaz +*/ +class DRW_Entity { + SETENTFRIENDS +public: + //initializes default values + DRW_Entity() { + eType = DRW::UNKNOWN; + handle = parentHandle = DRW::NoHandle; //no handle (0) + lineType = "BYLAYER"; + color = DRW::ColorByLayer; // default BYLAYER (256) + ltypeScale = 1.0; + visible = true; + layer = "0"; + lWeight = DRW_LW_Conv::widthByLayer; // default BYLAYER (dxf -1, dwg 29) + space = DRW::ModelSpace; // default ModelSpace (0) + haveExtrusion = false; + color24 = -1; //default -1 not set + numProxyGraph = 0; + shadow = DRW::CastAndReceieveShadows; + material = DRW::MaterialByLayer; + plotStyle = DRW::DefaultPlotStyle; + transparency = DRW::Opaque; + nextEntLink = prevEntLink = 0; + numReactors = xDictFlag = 0; + curr = NULL; + ownerHandle= false; + } + + DRW_Entity(const DRW_Entity& e) { + eType = e.eType; + handle = e.handle; + parentHandle = e.parentHandle; //no handle (0) + lineType = e.lineType; + color = e.color; // default BYLAYER (256) + ltypeScale = e.ltypeScale; + visible = e.visible; + layer = e.layer; + lWeight = e.lWeight; + space = e.space; + haveExtrusion = e.haveExtrusion; + color24 = e.color24; //default -1 not set + numProxyGraph = e.numProxyGraph; + shadow = e.shadow; + material = e.material; + plotStyle = e.plotStyle; + transparency = e.transparency; + nextEntLink = e.nextEntLink; + prevEntLink = e.prevEntLink; + numReactors = e.numReactors; + xDictFlag = e.xDictFlag; + curr = NULL; + ownerHandle= false; +// curr = e.curr; + for (std::vector::const_iterator it=e.extData.begin(); it!=e.extData.end(); ++it){ + extData.push_back(new DRW_Variant(*(*it))); + } + } + + virtual ~DRW_Entity() { + for (std::vector::iterator it=extData.begin(); it!=extData.end(); ++it) + delete *it; + + extData.clear(); + } + + void reset(){ + for (std::vector::iterator it=extData.begin(); it!=extData.end(); ++it) + delete *it; + extData.clear(); + } + + virtual void applyExtrusion() = 0; + + void setWidthMm(double millimeters) { + if(millimeters < 0.0) { + lWeight = DRW_LW_Conv::widthByLayer; + return; + } + if(millimeters > 2.11) millimeters = 2.11; + lWeight = DRW_LW_Conv::dxfInt2lineWidth(int(floor(millimeters * 100.0))); + } + +protected: + //parses dxf pair to read entity + bool parseCode(int code, dxfReader *reader); + //calculates extrusion axis (normal vector) + void calculateAxis(DRW_Coord extPoint); + //apply extrusion to @extPoint and return data in @point + void extrudePoint(DRW_Coord extPoint, DRW_Coord *point); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0)=0; + //parses dwg common start part to read entity + bool parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer* strBuf, duint32 bs=0); + //parses dwg common handles part to read entity + bool parseDwgEntHandle(DRW::Version version, dwgBuffer *buf); + + //parses dxf 102 groups to read entity + bool parseDxfGroups(int code, dxfReader *reader); + +public: + enum DRW::ETYPE eType; /*!< enum: entity type, code 0 */ + duint32 handle; /*!< entity identifier, code 5 */ + std::list > appData; /*!< list of application data, code 102 */ + duint32 parentHandle; /*!< Soft-pointer ID/handle to owner BLOCK_RECORD object, code 330 */ + DRW::Space space; /*!< space indicator, code 67*/ + UTF8STRING layer; /*!< layer name, code 8 */ + UTF8STRING lineType; /*!< line type, code 6 */ + duint32 material; /*!< hard pointer id to material object, code 347 */ + int color; /*!< entity color, code 62 */ + enum DRW_LW_Conv::lineWidth lWeight; /*!< entity lineweight, code 370 */ + double ltypeScale; /*!< linetype scale, code 48 */ + bool visible; /*!< entity visibility, code 60 */ + int numProxyGraph; /*!< Number of bytes in proxy graphics, code 92 */ + std::string proxyGraphics; /*!< proxy graphics bytes, code 310 */ + int color24; /*!< 24-bit color, code 420 */ + std::string colorName; /*!< color name, code 430 */ + int transparency; /*!< transparency, code 440 */ + int plotStyle; /*!< hard pointer id to plot style object, code 390 */ + DRW::ShadowMode shadow; /*!< shadow mode, code 284 */ + bool haveExtrusion; /*!< set to true if the entity have extrusion*/ + std::vector extData; /*!< FIFO list of extended data, codes 1000 to 1071*/ + +protected: //only for read dwg + duint8 haveNextLinks; //aka nolinks //B + duint8 plotFlags; //presence of plot style //BB + duint8 ltFlags; //presence of linetype handle //BB + duint8 materialFlag; //presence of material handle //BB + duint8 shadowFlag; //presence of shadow handle ?? (in dwg may be plotflag)//RC + dwgHandle lTypeH; + dwgHandle layerH; + duint32 nextEntLink; + duint32 prevEntLink; + bool ownerHandle; + + duint8 xDictFlag; + dint32 numReactors; // + duint32 objSize; //RL 32bits object data size in bits + dint16 oType; + +private: + DRW_Coord extAxisX; + DRW_Coord extAxisY; + DRW_Variant* curr; +}; + + +//! Class to handle point entity +/*! +* Class to handle point entity +* @author Rallaz +*/ +class DRW_Point : public DRW_Entity { + SETENTFRIENDS +public: + DRW_Point() { + eType = DRW::POINT; + basePoint.z = extPoint.x = extPoint.y = 0; + extPoint.z = 1; + thickness = 0; + } + + virtual void applyExtrusion(){} + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + DRW_Coord basePoint; /*!< base point, code 10, 20 & 30 */ + double thickness; /*!< thickness, code 39 */ + DRW_Coord extPoint; /*!< Dir extrusion normal vector, code 210, 220 & 230 */ + // TNick: we're not handling code 50 - Angle of the X axis for + // the UCS in effect when the point was drawn +}; + +//! Class to handle line entity +/*! +* Class to handle line entity +* @author Rallaz +*/ +class DRW_Line : public DRW_Point { + SETENTFRIENDS +public: + DRW_Line() { + eType = DRW::LINE; + secPoint.z = 0; + } + + virtual void applyExtrusion(){} + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + DRW_Coord secPoint; /*!< second point, code 11, 21 & 31 */ +}; + +//! Class to handle ray entity +/*! +* Class to handle ray entity +* @author Rallaz +*/ +class DRW_Ray : public DRW_Line { + SETENTFRIENDS +public: + DRW_Ray() { + eType = DRW::RAY; + } +protected: + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); +}; + +//! Class to handle xline entity +/*! +* Class to handle xline entity +* @author Rallaz +*/ +class DRW_Xline : public DRW_Ray { +public: + DRW_Xline() { + eType = DRW::XLINE; + } +}; + +//! Class to handle circle entity +/*! +* Class to handle circle entity +* @author Rallaz +*/ +class DRW_Circle : public DRW_Point { + SETENTFRIENDS +public: + DRW_Circle() { + eType = DRW::CIRCLE; + } + + virtual void applyExtrusion(); + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + double radious; /*!< radius, code 40 */ +}; + +//! Class to handle arc entity +/*! +* Class to handle arc entity +* @author Rallaz +*/ +class DRW_Arc : public DRW_Circle { + SETENTFRIENDS +public: + DRW_Arc() { + eType = DRW::ARC; + isccw = 1; + } + + virtual void applyExtrusion(); + + //! center point in OCS + const DRW_Coord & center() { return basePoint; } + //! the radius of the circle + double radius() { return radious; } + //! start angle in radians + double startAngle() { return staangle; } + //! end angle in radians + double endAngle() { return endangle; } + //! thickness + double thick() { return thickness; } + //! extrusion + const DRW_Coord & extrusion() { return extPoint; } + +protected: + //! interpret code in dxf reading process or dispatch to inherited class + void parseCode(int code, dxfReader *reader); + //! interpret dwg data (was already determined to be part of this object) + virtual bool parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs=0); + +public: + double staangle; /*!< start angle, code 50 in radians*/ + double endangle; /*!< end angle, code 51 in radians */ + int isccw; /*!< is counter clockwise arc?, only used in hatch, code 73 */ +}; + +//! Class to handle ellipse entity +/*! +* Class to handle ellipse and elliptic arc entity +* Note: start/end parameter are in radians for ellipse entity but +* for hatch boundary are in degrees +* @author Rallaz +*/ +class DRW_Ellipse : public DRW_Line { + SETENTFRIENDS +public: + DRW_Ellipse() { + eType = DRW::ELLIPSE; + isccw = 1; + } + + void toPolyline(DRW_Polyline *pol, int parts = 128); + virtual void applyExtrusion(); + +protected: + //! interpret code in dxf reading process or dispatch to inherited class + void parseCode(int code, dxfReader *reader); + //! interpret dwg data (was already determined to be part of this object) + virtual bool parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs=0); + +private: + void correctAxis(); + +public: + double ratio; /*!< ratio, code 40 */ + double staparam; /*!< start parameter, code 41, 0.0 for full ellipse*/ + double endparam; /*!< end parameter, code 42, 2*PI for full ellipse */ + int isccw; /*!< is counter clockwise arc?, only used in hatch, code 73 */ +}; + +//! Class to handle trace entity +/*! +* Class to handle trace entity +* @author Rallaz +*/ +class DRW_Trace : public DRW_Line { + SETENTFRIENDS +public: + DRW_Trace() { + eType = DRW::TRACE; + thirdPoint.z = 0; + fourPoint.z = 0; + } + + virtual void applyExtrusion(); + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs=0); + +public: + DRW_Coord thirdPoint; /*!< third point, code 12, 22 & 32 */ + DRW_Coord fourPoint; /*!< four point, code 13, 23 & 33 */ +}; + +//! Class to handle solid entity +/*! +* Class to handle solid entity +* @author Rallaz +*/ +class DRW_Solid : public DRW_Trace { + SETENTFRIENDS +public: + DRW_Solid() { + eType = DRW::SOLID; + } + +protected: + //! interpret code in dxf reading process or dispatch to inherited class + void parseCode(int code, dxfReader *reader); + //! interpret dwg data (was already determined to be part of this object) + virtual bool parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs=0); + +public: + //! first corner (2D) + const DRW_Coord & firstCorner() { return basePoint; } + //! second corner (2D) + const DRW_Coord & secondCorner() { return secPoint; } + //! third corner (2D) + const DRW_Coord & thirdCorner() { return thirdPoint; } + //! fourth corner (2D) + const DRW_Coord & fourthCorner() { return thirdPoint; } + //! thickness + double thick() { return thickness; } + //! elevation + double elevation() { return basePoint.z; } + //! extrusion + const DRW_Coord & extrusion() { return extPoint; } + +}; + +//! Class to handle 3dface entity +/*! +* Class to handle 3dface entity +* @author Rallaz +*/ +class DRW_3Dface : public DRW_Trace { + SETENTFRIENDS +public: + enum InvisibleEdgeFlags { + NoEdge = 0x00, + FirstEdge = 0x01, + SecodEdge = 0x02, + ThirdEdge = 0x04, + FourthEdge = 0x08, + AllEdges = 0x0F + }; + + DRW_3Dface() { + eType = DRW::E3DFACE; + invisibleflag = 0; + } + + virtual void applyExtrusion(){} + + //! first corner in WCS + const DRW_Coord & firstCorner() { return basePoint; } + //! second corner in WCS + const DRW_Coord & secondCorner() { return secPoint; } + //! third corner in WCS + const DRW_Coord & thirdCorner() { return thirdPoint; } + //! fourth corner in WCS + const DRW_Coord & fourthCorner() { return fourPoint; } + //! edge visibility flags + InvisibleEdgeFlags edgeFlags() { return (InvisibleEdgeFlags)invisibleflag; } + +protected: + //! interpret code in dxf reading process or dispatch to inherited class + void parseCode(int code, dxfReader *reader); + //! interpret dwg data (was already determined to be part of this object) + virtual bool parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs=0); + +public: + int invisibleflag; /*!< invisible edge flag, code 70 */ + +}; + +//! Class to handle block entries +/*! +* Class to handle block entries +* @author Rallaz +*/ +class DRW_Block : public DRW_Point { + SETENTFRIENDS +public: + DRW_Block() { + eType = DRW::BLOCK; + layer = "0"; + flags = 0; + name = "*U0"; + isEnd = false; + } + + virtual void applyExtrusion(){} + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs=0); + +public: + UTF8STRING name; /*!< block name, code 2 */ + int flags; /*!< block type, code 70 */ +private: + bool isEnd; //for dwg parsing +}; + + +//! Class to handle insert entries +/*! +* Class to handle insert entries +* @author Rallaz +*/ +class DRW_Insert : public DRW_Point { + SETENTFRIENDS +public: + DRW_Insert() { + eType = DRW::INSERT; + xscale = 1; + yscale = 1; + zscale = 1; + angle = 0; + colcount = 1; + rowcount = 1; + colspace = 0; + rowspace = 0; + } + + virtual void applyExtrusion(){DRW_Point::applyExtrusion();} + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs=0); + +public: + UTF8STRING name; /*!< block name, code 2 */ + double xscale; /*!< x scale factor, code 41 */ + double yscale; /*!< y scale factor, code 42 */ + double zscale; /*!< z scale factor, code 43 */ + double angle; /*!< rotation angle in radians, code 50 */ + int colcount; /*!< column count, code 70 */ + int rowcount; /*!< row count, code 71 */ + double colspace; /*!< column space, code 44 */ + double rowspace; /*!< row space, code 45 */ +public: //only for read dwg + dwgHandle blockRecH; + dwgHandle seqendH; //RLZ: on implement attrib remove this handle from obj list (see pline/vertex code) +}; + +//! Class to handle lwpolyline entity +/*! +* Class to handle lwpolyline entity +* @author Rallaz +*/ +class DRW_LWPolyline : public DRW_Entity { + SETENTFRIENDS +public: + DRW_LWPolyline() { + eType = DRW::LWPOLYLINE; + elevation = thickness = width = 0.0; + flags = 0; + extPoint.x = extPoint.y = 0; + extPoint.z = 1; + vertex = NULL; + } + + DRW_LWPolyline(const DRW_LWPolyline& p):DRW_Entity(p){ + this->eType = DRW::LWPOLYLINE; + this->elevation = p.elevation; + this->thickness = p.thickness; + this->width = p.width; + this->flags = p.flags; + this->extPoint = p.extPoint; + this->vertex = NULL; + for (unsigned i=0; ivertlist.push_back( new DRW_Vertex2D( *(p.vertlist.at(i)) ) ); + + this->vertex = NULL; + } + + ~DRW_LWPolyline() { + for(DRW_Vertex2D *item : vertlist) delete item; + } + virtual void applyExtrusion(); + void addVertex (DRW_Vertex2D v) { + DRW_Vertex2D *vert = new DRW_Vertex2D(); + vert->x = v.x; + vert->y = v.y; + vert->stawidth = v.stawidth; + vert->endwidth = v.endwidth; + vert->bulge = v.bulge; + vertlist.push_back(vert); + } + DRW_Vertex2D *addVertex () { + DRW_Vertex2D *vert = new DRW_Vertex2D(); + vert->stawidth = 0; + vert->endwidth = 0; + vert->bulge = 0; + vertlist.push_back(vert); + return vert; + } + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs=0); + +public: + int vertexnum; /*!< number of vertex, code 90 */ + int flags; /*!< polyline flag, code 70, default 0 */ + double width; /*!< constant width, code 43 */ + double elevation; /*!< elevation, code 38 */ + double thickness; /*!< thickness, code 39 */ + DRW_Coord extPoint; /*!< Dir extrusion normal vector, code 210, 220 & 230 */ + DRW_Vertex2D *vertex; /*!< current vertex to add data */ + std::vector vertlist; /*!< vertex list */ +}; + +//! Class to handle insert entries +/*! +* Class to handle insert entries +* @author Rallaz +*/ +class DRW_Text : public DRW_Line { + SETENTFRIENDS +public: + //! Vertical alignments. + enum VAlign { + VBaseLine = 0, /*!< Top = 0 */ + VBottom, /*!< Bottom = 1 */ + VMiddle, /*!< Middle = 2 */ + VTop /*!< Top = 3 */ + }; + + //! Horizontal alignments. + enum HAlign { + HLeft = 0, /*!< Left = 0 */ + HCenter, /*!< Centered = 1 */ + HRight, /*!< Right = 2 */ + HAligned, /*!< Aligned = 3 (if VAlign==0) */ + HMiddle, /*!< middle = 4 (if VAlign==0) */ + HFit /*!< fit into point = 5 (if VAlign==0) */ + }; + + DRW_Text() { + eType = DRW::TEXT; + angle = 0; + widthscale = 1; + oblique = 0; + style = "STANDARD"; + textgen = 0; + alignH = HLeft; + alignV = VBaseLine; + } + + virtual void applyExtrusion(){} //RLZ TODO + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + double height; /*!< height text, code 40 */ + UTF8STRING text; /*!< text string, code 1 */ + double angle; /*!< rotation angle in degrees (360), code 50 */ + double widthscale; /*!< width factor, code 41 */ + double oblique; /*!< oblique angle, code 51 */ + UTF8STRING style; /*!< style name, code 7 */ + int textgen; /*!< text generation, code 71 */ + enum HAlign alignH; /*!< horizontal align, code 72 */ + enum VAlign alignV; /*!< vertical align, code 73 */ + dwgHandle styleH; /*!< handle for text style */ +}; + +//! Class to handle insert entries +/*! +* Class to handle insert entries +* @author Rallaz +*/ +class DRW_MText : public DRW_Text { + SETENTFRIENDS +public: + //! Attachments. + enum Attach { + TopLeft = 1, + TopCenter, + TopRight, + MiddleLeft, + MiddleCenter, + MiddleRight, + BottomLeft, + BottomCenter, + BottomRight + }; + + DRW_MText() { + eType = DRW::MTEXT; + interlin = 1; + alignV = (VAlign)TopLeft; + textgen = 1; + haveXAxis = false; //if true needed to recalculate angle + } + +protected: + void parseCode(int code, dxfReader *reader); + void updateAngle(); //recalculate angle if 'haveXAxis' is true + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + double interlin; /*!< width factor, code 44 */ +private: + bool haveXAxis; +}; + +//! Class to handle vertex +/*! +* Class to handle vertex for polyline entity +* @author Rallaz +*/ +class DRW_Vertex : public DRW_Point { + SETENTFRIENDS +public: + DRW_Vertex() { + eType = DRW::VERTEX; + stawidth = endwidth = bulge = 0; + vindex1 = vindex2 = vindex3 = vindex4 = 0; + flags = identifier = 0; + } + DRW_Vertex(double sx, double sy, double sz, double b) { + stawidth = endwidth = 0; + vindex1 = vindex2 = vindex3 = vindex4 = 0; + flags = identifier = 0; + basePoint.x = sx; + basePoint.y =sy; + basePoint.z =sz; + bulge = b; + } + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0, double el=0); + virtual bool parseDwg(DRW::Version version, dwgBuffer* buf, duint32 bs=0){ + DRW_UNUSED(version); DRW_UNUSED(buf); DRW_UNUSED(bs); return true;} + +public: + double stawidth; /*!< Start width, code 40 */ + double endwidth; /*!< End width, code 41 */ + double bulge; /*!< bulge, code 42 */ + + int flags; /*!< vertex flag, code 70, default 0 */ + double tgdir; /*!< curve fit tangent direction, code 50 */ + int vindex1; /*!< polyface mesh vertex index, code 71, default 0 */ + int vindex2; /*!< polyface mesh vertex index, code 72, default 0 */ + int vindex3; /*!< polyface mesh vertex index, code 73, default 0 */ + int vindex4; /*!< polyface mesh vertex index, code 74, default 0 */ + int identifier; /*!< vertex identifier, code 91, default 0 */ +}; + +//! Class to handle polyline entity +/*! +* Class to handle polyline entity +* @author Rallaz +*/ +class DRW_Polyline : public DRW_Point { + SETENTFRIENDS +public: + DRW_Polyline() { + eType = DRW::POLYLINE; + defstawidth = defendwidth = 0.0; + basePoint.x = basePoint.y = 0.0; + flags = vertexcount = facecount = 0; + smoothM = smoothN = curvetype = 0; + } + + DRW_Polyline(const DRW_Polyline& p) : DRW_Point(p) { + flags = p.flags ; + defstawidth = p.defstawidth; + defendwidth = p.defendwidth; + vertexcount = p.vertexcount; + facecount = p.facecount ; + smoothM = p.smoothM ; + smoothN = p.smoothN ; + curvetype = p.curvetype ; + for (unsigned i=0; ivertlist.push_back( new DRW_Vertex( *(p.vertlist.at(i)) ) ); + } + + ~DRW_Polyline() { + for(DRW_Vertex *item : vertlist) delete item; + } + void addVertex (DRW_Vertex v) { + DRW_Vertex *vert = new DRW_Vertex(); + vert->basePoint.x = v.basePoint.x; + vert->basePoint.y = v.basePoint.y; + vert->basePoint.z = v.basePoint.z; + vert->stawidth = v.stawidth; + vert->endwidth = v.endwidth; + vert->bulge = v.bulge; + vertlist.push_back(vert); + } + void appendVertex (DRW_Vertex *v) { + vertlist.push_back(v); + } + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + int flags; /*!< polyline flag, code 70, default 0 */ + double defstawidth; /*!< Start width, code 40, default 0 */ + double defendwidth; /*!< End width, code 41, default 0 */ + int vertexcount; /*!< polygon mesh M vertex or polyface vertex num, code 71, default 0 */ + int facecount; /*!< polygon mesh N vertex or polyface face num, code 72, default 0 */ + int smoothM; /*!< smooth surface M density, code 73, default 0 */ + int smoothN; /*!< smooth surface M density, code 74, default 0 */ + int curvetype; /*!< curves & smooth surface type, code 75, default 0 */ + + std::vector vertlist; /*!< vertex list */ + +private: + std::listhadlesList; //list of handles, only in 2004+ + duint32 firstEH; //handle of first entity, only in pre-2004 + duint32 lastEH; //handle of last entity, only in pre-2004 + dwgHandle seqEndH; //handle of SEQEND entity +}; + + +//! Class to handle spline entity +/*! +* Class to handle spline entity +* @author Rallaz +*/ +class DRW_Spline : public DRW_Entity { + SETENTFRIENDS +public: + DRW_Spline() { + eType = DRW::SPLINE; + flags = nknots = ncontrol = nfit = 0; + tolknot = tolcontrol = tolfit = 0.0000001; + + } + + DRW_Spline(const DRW_Spline& p):DRW_Entity(p){ + eType = DRW::SPLINE; + normalVec = p.normalVec ; + tgStart = p.tgStart ; + tgEnd = p.tgEnd ; + flags = p.flags ; + degree = p.degree ; + nknots = p.nknots ; + ncontrol = p.ncontrol ; + nfit = p.nfit ; + tolknot = p.tolknot ; + tolcontrol = p.tolcontrol; + tolfit = p.tolfit ; + + for(double v : p.knotslist) knotslist.push_back(v); + for(double v : p.weightlist) weightlist.push_back(v); + for(DRW_Coord *v : p.controllist) controllist.push_back(new DRW_Coord(*v)); + for(DRW_Coord *v : p.fitlist) fitlist.push_back(new DRW_Coord(*v)); + } + + ~DRW_Spline() { + for(DRW_Coord *item : controllist) delete item; + for(DRW_Coord *item : fitlist) delete item; + } + virtual void applyExtrusion(){} + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: +// double ex; /*!< normal vector x coordinate, code 210 */ +// double ey; /*!< normal vector y coordinate, code 220 */ +// double ez; /*!< normal vector z coordinate, code 230 */ + DRW_Coord normalVec; /*!< normal vector, code 210, 220, 230 */ + DRW_Coord tgStart; /*!< start tangent, code 12, 22, 32 */ +// double tgsx; /*!< start tangent x coordinate, code 12 */ +// double tgsy; /*!< start tangent y coordinate, code 22 */ +// double tgsz; /*!< start tangent z coordinate, code 32 */ + DRW_Coord tgEnd; /*!< end tangent, code 13, 23, 33 */ +// double tgex; /*!< end tangent x coordinate, code 13 */ +// double tgey; /*!< end tangent y coordinate, code 23 */ +// double tgez; /*!< end tangent z coordinate, code 33 */ + int flags; /*!< spline flag, code 70 */ + int degree; /*!< degree of the spline, code 71 */ + dint32 nknots; /*!< number of knots, code 72, default 0 */ + dint32 ncontrol; /*!< number of control points, code 73, default 0 */ + dint32 nfit; /*!< number of fit points, code 74, default 0 */ + double tolknot; /*!< knot tolerance, code 42, default 0.0000001 */ + double tolcontrol; /*!< control point tolerance, code 43, default 0.0000001 */ + double tolfit; /*!< fit point tolerance, code 44, default 0.0000001 */ + + std::vector knotslist; /*!< knots list, code 40 */ + std::vector weightlist; /*!< weight list, code 41 */ + std::vector controllist; /*!< control points list, code 10, 20 & 30 */ + std::vector fitlist; /*!< fit points list, code 11, 21 & 31 */ + +private: + DRW_Coord *controlpoint; /*!< current control point to add data */ + DRW_Coord *fitpoint; /*!< current fit point to add data */ +}; + +//! Class to handle hatch loop +/*! +* Class to handle hatch loop +* @author Rallaz +*/ +class DRW_HatchLoop { +public: + DRW_HatchLoop(int t) { + type = t; + numedges = 0; + } + + ~DRW_HatchLoop() { + // for(DRW_LWPolyline *item : pollist) delete item; + for(DRW_Entity *item : objlist) delete item; + } + + void update() { + numedges = objlist.size(); + } + +public: + int type; /*!< boundary path type, code 92, polyline=2, default=0 */ + int numedges; /*!< number of edges (if not a polyline), code 93 */ +//TODO: store lwpolylines as entities +// std::vector pollist; /*!< polyline list */ + std::vector objlist; /*!< entities list */ +}; + +//! Class to handle hatch entity +/*! +* Class to handle hatch entity +* @author Rallaz +*/ +//TODO: handle lwpolylines, splines and ellipses +class DRW_Hatch : public DRW_Point { + SETENTFRIENDS +public: + DRW_Hatch() { + eType = DRW::HATCH; + angle = scale = 0.0; + basePoint.x = basePoint.y = basePoint.z = 0.0; + loopsnum = hstyle = associative = 0; + solid = hpattern = 1; + deflines = doubleflag = 0; + loop = NULL; + clearEntities(); + } + + ~DRW_Hatch() { + for(DRW_HatchLoop *item : looplist) delete item; + } + + void appendLoop (DRW_HatchLoop *v) { + looplist.push_back(v); + } + + virtual void applyExtrusion(){} + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + UTF8STRING name; /*!< hatch pattern name, code 2 */ + int solid; /*!< solid fill flag, code 70, solid=1, pattern=0 */ + int associative; /*!< associativity, code 71, associatve=1, non-assoc.=0 */ + int hstyle; /*!< hatch style, code 75 */ + int hpattern; /*!< hatch pattern type, code 76 */ + int doubleflag; /*!< hatch pattern double flag, code 77, double=1, single=0 */ + int loopsnum; /*!< namber of boundary paths (loops), code 91 */ + double angle; /*!< hatch pattern angle, code 52 */ + double scale; /*!< hatch pattern scale, code 41 */ + int deflines; /*!< number of pattern definition lines, code 78 */ + + std::vector looplist; /*!< polyline list */ + +private: + void clearEntities(){ + pt = line = NULL; + pline = NULL; + arc = NULL; + ellipse = NULL; + spline = NULL; + plvert = NULL; + } + + void addLine() { + clearEntities(); + if (loop) { + pt = line = new DRW_Line; + loop->objlist.push_back(line); + } + } + + void addArc() { + clearEntities(); + if (loop) { + pt = arc = new DRW_Arc; + loop->objlist.push_back(arc); + } + } + + void addEllipse() { + clearEntities(); + if (loop) { + pt = ellipse = new DRW_Ellipse; + loop->objlist.push_back(ellipse); + } + } + + void addSpline() { + clearEntities(); + if (loop) { + pt = NULL; + spline = new DRW_Spline; + loop->objlist.push_back(spline); + } + } + + DRW_HatchLoop *loop; /*!< current loop to add data */ + DRW_Line *line; + DRW_Arc *arc; + DRW_Ellipse *ellipse; + DRW_Spline *spline; + DRW_LWPolyline *pline; + DRW_Point *pt; + DRW_Vertex2D *plvert; + bool ispol; +}; + +//! Class to handle image entity +/*! +* Class to handle image entity +* @author Rallaz +*/ +class DRW_Image : public DRW_Line { + SETENTFRIENDS +public: + DRW_Image() { + eType = DRW::IMAGE; + fade = clip = 0; + brightness = contrast = 50; + } + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + duint32 ref; /*!< Hard reference to imagedef object, code 340 */ + DRW_Coord vVector; /*!< V-vector of single pixel, x coordinate, code 12, 22 & 32 */ +// double vx; /*!< V-vector of single pixel, x coordinate, code 12 */ +// double vy; /*!< V-vector of single pixel, y coordinate, code 22 */ +// double vz; /*!< V-vector of single pixel, z coordinate, code 32 */ + double sizeu; /*!< image size in pixels, U value, code 13 */ + double sizev; /*!< image size in pixels, V value, code 23 */ + double dz; /*!< z coordinate, code 33 */ + int clip; /*!< Clipping state, code 280, 0=off 1=on */ + int brightness; /*!< Brightness value, code 281, (0-100) default 50 */ + int contrast; /*!< Brightness value, code 282, (0-100) default 50 */ + int fade; /*!< Brightness value, code 283, (0-100) default 0 */ + +}; + + +//! Base class for dimension entity +/*! +* Base class for dimension entity +* @author Rallaz +*/ +class DRW_Dimension : public DRW_Entity { + SETENTFRIENDS +public: + DRW_Dimension() { + eType = DRW::DIMENSION; + type = 0; + linesty = 1; + linefactor = extPoint.z = 1.0; + angle = oblique = rot = 0.0; + align = 5; + style = "STANDARD"; + defPoint.z = extPoint.x = extPoint.y = 0; + textPoint.z = rot = 0; + clonePoint.x = clonePoint.y = clonePoint.z = 0; + length = 0.0; + hasActual = false; + actual = 0.0; + } + + DRW_Dimension(const DRW_Dimension& d): DRW_Entity(d) { + eType = DRW::DIMENSION; + type =d.type; + name = d.name; + defPoint = d.defPoint; + textPoint = d.textPoint; + text = d.text; + style = d.style; + align = d.align; + linesty = d.linesty; + linefactor = d.linefactor; + rot = d.rot; + extPoint = d.extPoint; + clonePoint = d.clonePoint; + def1 = d.def1; + def2 = d.def2; + angle = d.angle; + oblique = d.oblique; + arcPoint = d.arcPoint; + circlePoint = d.circlePoint; + length = d.length; + hasActual = d.hasActual; + actual = d.actual; + //RLZ needed a def value for this: hdir = ??? + } + virtual ~DRW_Dimension() {} + + virtual void applyExtrusion(){} + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer *sBuf); + virtual bool parseDwg(DRW::Version version, dwgBuffer* buf, duint32 bs=0){ + DRW_UNUSED(version); DRW_UNUSED(buf); DRW_UNUSED(bs); return true;} + +public: + DRW_Coord getDefPoint() const {return defPoint;} /*!< Definition point, code 10, 20 & 30 */ + void setDefPoint(const DRW_Coord p) {defPoint =p;} + DRW_Coord getTextPoint() const {return textPoint;} /*!< Middle point of text, code 11, 21 & 31 */ + void setTextPoint(const DRW_Coord p) {textPoint =p;} + std::string getStyle() const {return style;} /*!< Dimension style, code 3 */ + void setStyle(const std::string s) {style = s;} + int getAlign() const { return align;} /*!< attachment point, code 71 */ + void setAlign(const int a) { align = a;} + int getTextLineStyle() const { return linesty;} /*!< Dimension text line spacing style, code 72, default 1 */ + void setTextLineStyle(const int l) { linesty = l;} + std::string getText() const {return text;} /*!< Dimension text explicitly entered by the user, code 1 */ + void setText(const std::string t) {text = t;} + double getTextLineFactor() const { return linefactor;} /*!< Dimension text line spacing factor, code 41, default 1? */ + void setTextLineFactor(const double l) { linefactor = l;} + double getDir() const { return rot;} /*!< rotation angle of the dimension text, code 53 (optional) default 0 */ + void setDir(const double d) { rot = d;} + + DRW_Coord getExtrusion(){return extPoint;} /*!< extrusion, code 210, 220 & 230 */ + void setExtrusion(const DRW_Coord p) {extPoint =p;} + std::string getName(){return name;} /*!< Name of the block that contains the entities, code 2 */ + void setName(const std::string s) {name = s;} +// int getType(){ return type;} /*!< Dimension type, code 70 */ + bool hasActualMeasurement() const { return hasActual; } + void setActualMeasurement(double value) { hasActual = true; actual = value; } + double getActualMeasurement() const { return actual; } + +protected: + DRW_Coord getPt2() const {return clonePoint;} + void setPt2(const DRW_Coord p) {clonePoint= p;} + DRW_Coord getPt3() const {return def1;} + void setPt3(const DRW_Coord p) {def1= p;} + DRW_Coord getPt4() const {return def2;} + void setPt4(const DRW_Coord p) {def2= p;} + DRW_Coord getPt5() const {return circlePoint;} + void setPt5(const DRW_Coord p) {circlePoint= p;} + DRW_Coord getPt6() const {return arcPoint;} + void setPt6(const DRW_Coord p) {arcPoint= p;} + double getAn50() const {return angle;} /*!< Angle of rotated, horizontal, or vertical dimensions, code 50 */ + void setAn50(const double d) {angle = d;} + double getOb52() const {return oblique;} /*!< oblique angle, code 52 */ + void setOb52(const double d) {oblique = d;} + double getRa40() const {return length;} /*!< Leader length, code 40 */ + void setRa40(const double d) {length = d;} +public: + int type; /*!< Dimension type, code 70 */ +private: + std::string name; /*!< Name of the block that contains the entities, code 2 */ + DRW_Coord defPoint; /*!< definition point, code 10, 20 & 30 (WCS) */ + DRW_Coord textPoint; /*!< Middle point of text, code 11, 21 & 31 (OCS) */ + UTF8STRING text; /*!< Dimension text explicitly entered by the user, code 1 */ + UTF8STRING style; /*!< Dimension style, code 3 */ + int align; /*!< attachment point, code 71 */ + int linesty; /*!< Dimension text line spacing style, code 72, default 1 */ + double linefactor; /*!< Dimension text line spacing factor, code 41, default 1? (value range 0.25 to 4.00*/ + double rot; /*!< rotation angle of the dimension text, code 53 */ + DRW_Coord extPoint; /*!< extrusion normal vector, code 210, 220 & 230 */ + + double hdir; /*!< horizontal direction for the dimension, code 51, default ? */ + DRW_Coord clonePoint; /*!< Insertion point for clones (Baseline & Continue), code 12, 22 & 32 (OCS) */ + DRW_Coord def1; /*!< Definition point 1for linear & angular, code 13, 23 & 33 (WCS) */ + DRW_Coord def2; /*!< Definition point 2, code 14, 24 & 34 (WCS) */ + double angle; /*!< Angle of rotated, horizontal, or vertical dimensions, code 50 */ + double oblique; /*!< oblique angle, code 52 */ + + DRW_Coord circlePoint; /*!< Definition point for diameter, radius & angular dims code 15, 25 & 35 (WCS) */ + DRW_Coord arcPoint; /*!< Point defining dimension arc, x coordinate, code 16, 26 & 36 (OCS) */ + double length; /*!< Leader length, code 40 */ + bool hasActual; /*!< Actual measurement has been read, code 42 */ + double actual; /*!< Actual measurement (optional; read-only value), code 42 */ + +protected: + dwgHandle dimStyleH; + dwgHandle blockH; +}; + + +//! Class to handle aligned dimension entity +/*! +* Class to handle aligned dimension entity +* @author Rallaz +*/ +class DRW_DimAligned : public DRW_Dimension { + SETENTFRIENDS +public: + DRW_DimAligned(){ + eType = DRW::DIMALIGNED; + type = 1; + } + DRW_DimAligned(const DRW_Dimension& d): DRW_Dimension(d) { + eType = DRW::DIMALIGNED; + } + + DRW_Coord getClonepoint() const {return getPt2();} /*!< Insertion for clones (Baseline & Continue), 12, 22 & 32 */ + void setClonePoint(DRW_Coord c){setPt2(c);} + + DRW_Coord getDimPoint() const {return getDefPoint();} /*!< dim line location point, code 10, 20 & 30 */ + void setDimPoint(const DRW_Coord p){setDefPoint(p);} + DRW_Coord getDef1Point() const {return getPt3();} /*!< Definition point 1, code 13, 23 & 33 */ + void setDef1Point(const DRW_Coord p) {setPt3(p);} + DRW_Coord getDef2Point() const {return getPt4();} /*!< Definition point 2, code 14, 24 & 34 */ + void setDef2Point(const DRW_Coord p) {setPt4(p);} + +protected: + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); +}; + +//! Class to handle linear or rotated dimension entity +/*! +* Class to handle linear or rotated dimension entity +* @author Rallaz +*/ +class DRW_DimLinear : public DRW_DimAligned { +public: + DRW_DimLinear() { + eType = DRW::DIMLINEAR; + type = 0; + } + DRW_DimLinear(const DRW_Dimension& d): DRW_DimAligned(d) { + eType = DRW::DIMLINEAR; + } + + double getAngle() const {return getAn50();} /*!< Angle of rotated, horizontal, or vertical dimensions, code 50 */ + void setAngle(const double d) {setAn50(d);} + double getOblique() const {return getOb52();} /*!< oblique angle, code 52 */ + void setOblique(const double d) {setOb52(d);} +}; + +//! Class to handle radial dimension entity +/*! +* Class to handle aligned, linear or rotated dimension entity +* @author Rallaz +*/ +class DRW_DimRadial : public DRW_Dimension { + SETENTFRIENDS +public: + DRW_DimRadial() { + eType = DRW::DIMRADIAL; + type = 4; + } + DRW_DimRadial(const DRW_Dimension& d): DRW_Dimension(d) { + eType = DRW::DIMRADIAL; + } + + DRW_Coord getCenterPoint() const {return getDefPoint();} /*!< center point, code 10, 20 & 30 */ + void setCenterPoint(const DRW_Coord p){setDefPoint(p);} + DRW_Coord getDiameterPoint() const {return getPt5();} /*!< Definition point for radius, code 15, 25 & 35 */ + void setDiameterPoint(const DRW_Coord p){setPt5(p);} + double getLeaderLength() const {return getRa40();} /*!< Leader length, code 40 */ + void setLeaderLength(const double d) {setRa40(d);} + +protected: + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); +}; + +//! Class to handle radial dimension entity +/*! +* Class to handle aligned, linear or rotated dimension entity +* @author Rallaz +*/ +class DRW_DimDiametric : public DRW_Dimension { + SETENTFRIENDS +public: + DRW_DimDiametric() { + eType = DRW::DIMDIAMETRIC; + type = 3; + } + DRW_DimDiametric(const DRW_Dimension& d): DRW_Dimension(d) { + eType = DRW::DIMDIAMETRIC; + } + + DRW_Coord getDiameter1Point() const {return getPt5();} /*!< First definition point for diameter, code 15, 25 & 35 */ + void setDiameter1Point(const DRW_Coord p){setPt5(p);} + DRW_Coord getDiameter2Point() const {return getDefPoint();} /*!< Oposite point for diameter, code 10, 20 & 30 */ + void setDiameter2Point(const DRW_Coord p){setDefPoint(p);} + double getLeaderLength() const {return getRa40();} /*!< Leader length, code 40 */ + void setLeaderLength(const double d) {setRa40(d);} + +protected: + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); +}; + +//! Class to handle angular dimension entity +/*! +* Class to handle angular dimension entity +* @author Rallaz +*/ +class DRW_DimAngular : public DRW_Dimension { + SETENTFRIENDS +public: + DRW_DimAngular() { + eType = DRW::DIMANGULAR; + type = 2; + } + DRW_DimAngular(const DRW_Dimension& d): DRW_Dimension(d) { + eType = DRW::DIMANGULAR; + } + + DRW_Coord getFirstLine1() const {return getPt3();} /*!< Definition point line 1-1, code 13, 23 & 33 */ + void setFirstLine1(const DRW_Coord p) {setPt3(p);} + DRW_Coord getFirstLine2() const {return getPt4();} /*!< Definition point line 1-2, code 14, 24 & 34 */ + void setFirstLine2(const DRW_Coord p) {setPt4(p);} + DRW_Coord getSecondLine1() const {return getPt5();} /*!< Definition point line 2-1, code 15, 25 & 35 */ + void setSecondLine1(const DRW_Coord p) {setPt5(p);} + DRW_Coord getSecondLine2() const {return getDefPoint();} /*!< Definition point line 2-2, code 10, 20 & 30 */ + void setSecondLine2(const DRW_Coord p){setDefPoint(p);} + DRW_Coord getDimPoint() const {return getPt6();} /*!< Dimension definition point, code 16, 26 & 36 */ + void setDimPoint(const DRW_Coord p) {setPt6(p);} + +protected: + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); +}; + + +//! Class to handle angular 3p dimension entity +/*! +* Class to handle angular 3p dimension entity +* @author Rallaz +*/ +class DRW_DimAngular3p : public DRW_Dimension { + SETENTFRIENDS +public: + DRW_DimAngular3p() { + eType = DRW::DIMANGULAR3P; + type = 5; + } + DRW_DimAngular3p(const DRW_Dimension& d): DRW_Dimension(d) { + eType = DRW::DIMANGULAR3P; + } + + DRW_Coord getFirstLine() const {return getPt3();} /*!< Definition point line 1, code 13, 23 & 33 */ + void setFirstLine(const DRW_Coord p) {setPt3(p);} + DRW_Coord getSecondLine() const {return getPt4();} /*!< Definition point line 2, code 14, 24 & 34 */ + void setSecondLine(const DRW_Coord p) {setPt4(p);} + DRW_Coord getVertexPoint() const {return getPt5();} /*!< Vertex point, code 15, 25 & 35 */ + void SetVertexPoint(const DRW_Coord p) {setPt5(p);} + DRW_Coord getDimPoint() const {return getDefPoint();} /*!< Dimension definition point, code 10, 20 & 30 */ + void setDimPoint(const DRW_Coord p) {setDefPoint(p);} + +protected: + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); +}; + +//! Class to handle ordinate dimension entity +/*! +* Class to handle ordinate dimension entity +* @author Rallaz +*/ +class DRW_DimOrdinate : public DRW_Dimension { + SETENTFRIENDS +public: + DRW_DimOrdinate() { + eType = DRW::DIMORDINATE; + type = 6; + } + DRW_DimOrdinate(const DRW_Dimension& d): DRW_Dimension(d) { + eType = DRW::DIMORDINATE; + } + + DRW_Coord getOriginPoint() const {return getDefPoint();} /*!< Origin definition point, code 10, 20 & 30 */ + void setOriginPoint(const DRW_Coord p) {setDefPoint(p);} + DRW_Coord getFirstLine() const {return getPt3();} /*!< Feature location point, code 13, 23 & 33 */ + void setFirstLine(const DRW_Coord p) {setPt3(p);} + DRW_Coord getSecondLine() const {return getPt4();} /*!< Leader end point, code 14, 24 & 34 */ + void setSecondLine(const DRW_Coord p) {setPt4(p);} + +protected: + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); +}; + + +//! Class to handle leader entity +/*! +* Class to handle leader entity +* @author Rallaz +*/ +class DRW_Leader : public DRW_Entity { + SETENTFRIENDS +public: + DRW_Leader() { + eType = DRW::LEADER; + flag = 3; + hookflag = vertnum = leadertype = 0; + extrusionPoint.x = extrusionPoint.y = 0.0; + arrow = 1; + extrusionPoint.z = 1.0; + } + ~DRW_Leader() { + for(DRW_Coord *item : vertexlist) delete item; + } + + virtual void applyExtrusion(){} + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + UTF8STRING style; /*!< Dimension style name, code 3 */ + int arrow; /*!< Arrowhead flag, code 71, 0=Disabled; 1=Enabled */ + int leadertype; /*!< Leader path type, code 72, 0=Straight line segments; 1=Spline */ + int flag; /*!< Leader creation flag, code 73, default 3 */ + int hookline; /*!< Hook line direction flag, code 74, default 1 */ + int hookflag; /*!< Hook line flag, code 75 */ + double textheight; /*!< Text annotation height, code 40 */ + double textwidth; /*!< Text annotation width, code 41 */ + int vertnum; /*!< Number of vertices, code 76 */ + int coloruse; /*!< Color to use if leader's DIMCLRD = BYBLOCK, code 77 */ + duint32 annotHandle; /*!< Hard reference to associated annotation, code 340 */ + DRW_Coord extrusionPoint; /*!< Normal vector, code 210, 220 & 230 */ + DRW_Coord horizdir; /*!< "Horizontal" direction for leader, code 211, 221 & 231 */ + DRW_Coord offsetblock; /*!< Offset of last leader vertex from block, code 212, 222 & 232 */ + DRW_Coord offsettext; /*!< Offset of last leader vertex from annotation, code 213, 223 & 233 */ + + std::vector vertexlist; /*!< vertex points list, code 10, 20 & 30 */ + +private: + DRW_Coord *vertexpoint; /*!< current control point to add data */ + dwgHandle dimStyleH; + dwgHandle AnnotH; +}; + +//! Class to handle viewport entity +/*! +* Class to handle viewport entity +* @author Rallaz +*/ +class DRW_Viewport : public DRW_Point { + SETENTFRIENDS +public: + DRW_Viewport() { + eType = DRW::VIEWPORT; + vpstatus = 0; + pswidth = 205; + psheight = 156; + centerPX = 128.5; + centerPY = 97.5; + } + + virtual void applyExtrusion(){} + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + double pswidth; /*!< Width in paper space units, code 40 */ + double psheight; /*!< Height in paper space units, code 41 */ + int vpstatus; /*!< Viewport status, code 68 */ + int vpID; /*!< Viewport ID, code 69 */ + double centerPX; /*!< view center point X, code 12 */ + double centerPY; /*!< view center point Y, code 22 */ + double snapPX; /*!< Snap base point X, code 13 */ + double snapPY; /*!< Snap base point Y, code 23 */ + double snapSpPX; /*!< Snap spacing X, code 14 */ + double snapSpPY; /*!< Snap spacing Y, code 24 */ + //TODO: complete in dxf + DRW_Coord viewDir; /*!< View direction vector, code 16, 26 & 36 */ + DRW_Coord viewTarget; /*!< View target point, code 17, 27, 37 */ + double viewLength; /*!< Perspective lens length, code 42 */ + double frontClip; /*!< Front clip plane Z value, code 43 */ + double backClip; /*!< Back clip plane Z value, code 44 */ + double viewHeight; /*!< View height in model space units, code 45 */ + double snapAngle; /*!< Snap angle, code 50 */ + double twistAngle; /*!< view twist angle, code 51 */ + +private: + duint32 frozenLyCount; +};//RLZ: missing 15,25, 72, 331, 90, 340, 1, 281, 71, 74, 110, 120, 130, 111, 121,131, 112,122, 132, 345,346, and more... + +//used //DRW_Coord basePoint; /*!< base point, code 10, 20 & 30 */ + +//double thickness; /*!< thickness, code 39 */ +//DRW_Coord extPoint; /*!< Dir extrusion normal vector, code 210, 220 & 230 */ +//enum DRW::ETYPE eType; /*!< enum: entity type, code 0 */ +//duint32 handle; /*!< entity identifier, code 5 */ +//std::list > appData; /*!< list of application data, code 102 */ +//duint32 parentHandle; /*!< Soft-pointer ID/handle to owner BLOCK_RECORD object, code 330 */ +//DRW::Space space; /*!< space indicator, code 67*/ +//UTF8STRING layer; /*!< layer name, code 8 */ +//UTF8STRING lineType; /*!< line type, code 6 */ +//duint32 material; /*!< hard pointer id to material object, code 347 */ +//int color; /*!< entity color, code 62 */ +//enum DRW_LW_Conv::lineWidth lWeight; /*!< entity lineweight, code 370 */ +//double ltypeScale; /*!< linetype scale, code 48 */ +//bool visible; /*!< entity visibility, code 60 */ +//int numProxyGraph; /*!< Number of bytes in proxy graphics, code 92 */ +//std::string proxyGraphics; /*!< proxy graphics bytes, code 310 */ +//int color24; /*!< 24-bit color, code 420 */ +//std::string colorName; /*!< color name, code 430 */ +//int transparency; /*!< transparency, code 440 */ +//int plotStyle; /*!< hard pointer id to plot style object, code 390 */ +//DRW::ShadowMode shadow; /*!< shadow mode, code 284 */ +//bool haveExtrusion; /*!< set to true if the entity have extrusion*/ + +#endif + +// EOF diff --git a/extlib/libdxfrw/drw_header.cpp b/extlib/libdxfrw/drw_header.cpp new file mode 100644 index 0000000..47e0643 --- /dev/null +++ b/extlib/libdxfrw/drw_header.cpp @@ -0,0 +1,2476 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include "drw_header.h" +#include "intern/dxfreader.h" +#include "intern/dxfwriter.h" +#include "intern/drw_dbg.h" +#include "intern/dwgbuffer.h" + +DRW_Header::DRW_Header() { + linetypeCtrl = layerCtrl = styleCtrl = dimstyleCtrl = appidCtrl = 0; + blockCtrl = viewCtrl = ucsCtrl = vportCtrl = vpEntHeaderCtrl = 0; + version = DRW::AC1021; +} + +void DRW_Header::addComment(std::string c){ + if (!comments.empty()) + comments += '\n'; + comments += c; +} + +void DRW_Header::parseCode(int code, dxfReader *reader){ + switch (code) { + case 9: + curr = new DRW_Variant(); + name = reader->getString(); + if (version < DRW::AC1015 && name == "$DIMUNIT") + name="$DIMLUNIT"; + vars[name]=curr; + break; + case 1: + curr->addString(reader->getUtf8String()); + if (name =="$ACADVER") { + reader->setVersion(curr->content.s, true); + version = reader->getVersion(); + } + curr->code = code; + break; + case 2: + curr->addString(reader->getUtf8String()); + curr->code = code; + break; + case 3: + curr->addString(reader->getUtf8String()); + if (name =="$DWGCODEPAGE") { + reader->setCodePage(curr->content.s); + curr->addString(reader->getCodePage()); + } + curr->code = code; + break; + case 6: + curr->addString(reader->getUtf8String()); + curr->code = code; + break; + case 7: + curr->addString(reader->getUtf8String()); + curr->code = code; + break; + case 8: + curr->addString(reader->getUtf8String()); + curr->code = code; + break; + case 10: + curr->addCoord(); + curr->setCoordX(reader->getDouble()); + curr->code = code; + break; + case 20: + curr->setCoordY(reader->getDouble()); + break; + case 30: + curr->setCoordZ(reader->getDouble()); + curr->code = code; + break; + case 40: + curr->addDouble(reader->getDouble()); + curr->code = code; + break; + case 50: + curr->addDouble(reader->getDouble()); + curr->code = code; + break; + case 62: + curr->addInt(reader->getInt32()); + curr->code = code; + break; + case 70: + curr->addInt(reader->getInt32()); + curr->code = code; + break; + case 280: + curr->addInt(reader->getInt32()); + curr->code = code; + break; + case 290: + curr->addInt(reader->getInt32()); + curr->code = code; + break; + case 370: + curr->addInt(reader->getInt32()); + curr->code = code; + break; + case 380: + curr->addInt(reader->getInt32()); + curr->code = code; + break; + case 390: + curr->addString(reader->getUtf8String()); + curr->code = code; + break; + default: + break; + } +} + +void DRW_Header::write(dxfWriter *writer, DRW::Version ver){ +/*RLZ: TODO complete all vars to AC1024*/ + double varDouble; + int varInt; + std::string varStr; + DRW_Coord varCoord; + writer->writeString(2, "HEADER"); + writer->writeString(9, "$ACADVER"); + switch (ver) { + case DRW::AC1006: //unsupported version acad 10 + case DRW::AC1009: //acad 11 & 12 + varStr = "AC1009"; + break; + case DRW::AC1012: //unsupported version acad 13 + case DRW::AC1014: //acad 14 + varStr = "AC1014"; + break; + case DRW::AC1015: //acad 2000 + varStr = "AC1015"; + break; + case DRW::AC1018: //acad 2004 + varStr = "AC1018"; + break; +/* case DRW::AC1021: //acad 2007 + varStr = "AC1021"; + break;*/ + case DRW::AC1024: //acad 2010 + varStr = "AC1024"; + break; + case DRW::AC1027: //acad 2013 + varStr = "AC1027"; + break; + default: //acad 2007 default version + varStr = "AC1021"; + break; + } + writer->writeString(1, varStr); + writer->setVersion(&varStr, true); + + getStr("$ACADVER", &varStr); + getStr("$ACADMAINTVER", &varStr); + + if (!getStr("$DWGCODEPAGE", &varStr)) { + varStr = "ANSI_1252"; + } + writer->writeString(9, "$DWGCODEPAGE"); + writer->setCodePage(&varStr); + writer->writeString(3, writer->getCodePage() ); + writer->writeString(9, "$INSBASE"); + if (getCoord("$INSBASE", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$EXTMIN"); + if (getCoord("$EXTMIN", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 1.0000000000000000E+020); + writer->writeDouble(20, 1.0000000000000000E+020); + writer->writeDouble(30, 1.0000000000000000E+020); + } + writer->writeString(9, "$EXTMAX"); + if (getCoord("$EXTMAX", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, -1.0000000000000000E+020); + writer->writeDouble(20, -1.0000000000000000E+020); + writer->writeDouble(30, -1.0000000000000000E+020); + } + writer->writeString(9, "$LIMMIN"); + if (getCoord("$LIMMIN", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + } + writer->writeString(9, "$LIMMAX"); + if (getCoord("$LIMMAX", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + } else { + writer->writeDouble(10, 420.0); + writer->writeDouble(20, 297.0); + } + writer->writeString(9, "$ORTHOMODE"); + if (getInt("$ORTHOMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$REGENMODE"); + if (getInt("$REGENMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$FILLMODE"); + if (getInt("$FILLMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$QTEXTMODE"); + if (getInt("$QTEXTMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$MIRRTEXT"); + if (getInt("$MIRRTEXT", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + if (ver == DRW::AC1009){ + writer->writeString(9, "$DRAGMODE"); + if (getInt("$DRAGMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 2); + } + writer->writeString(9, "$LTSCALE"); + if (getDouble("$LTSCALE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.0); + if (ver == DRW::AC1009){ + writer->writeString(9, "$OSMODE"); + if (getInt("$OSMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + } + writer->writeString(9, "$ATTMODE"); + if (getInt("$ATTMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$TEXTSIZE"); + if (getDouble("$TEXTSIZE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 2.5); + writer->writeString(9, "$TRACEWID"); + if (getDouble("$TRACEWID", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 15.68); + writer->writeString(9, "$TEXTSTYLE"); + if (getStr("$TEXTSTYLE", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(7, varStr); + else + writer->writeUtf8String(7, varStr); + else + writer->writeString(7, "STANDARD"); + writer->writeString(9, "$CLAYER"); + if (getStr("$CLAYER", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(8, varStr); + else + writer->writeUtf8String(8, varStr); + else + writer->writeString(8, "0"); + writer->writeString(9, "$CELTYPE"); + if (getStr("$CELTYPE", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(6, varStr); + else + writer->writeUtf8String(6, varStr); + else + writer->writeString(6, "BYLAYER"); + writer->writeString(9, "$CECOLOR"); + if (getInt("$CECOLOR", &varInt)) + writer->writeInt16(62, varInt); + else + writer->writeInt16(62, 256); + if (ver > DRW::AC1009){ + writer->writeString(9, "$CELTSCALE"); + if (getDouble("$CELTSCALE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.0); + writer->writeString(9, "$DISPSILH"); + if (getInt("$DISPSILH", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + } + + writer->writeString(9, "$DIMSCALE"); + if (getDouble("$DIMSCALE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.0); + writer->writeString(9, "$DIMASZ"); + if (getDouble("$DIMASZ", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 2.5); + writer->writeString(9, "$DIMEXO"); + if (getDouble("$DIMEXO", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.625); + writer->writeString(9, "$DIMDLI"); + if (getDouble("$DIMDLI", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 3.75); + writer->writeString(9, "$DIMRND"); + if (getDouble("$DIMRND", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$DIMDLE"); + if (getDouble("$DIMDLE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$DIMEXE"); + if (getDouble("$DIMEXE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.25); + writer->writeString(9, "$DIMTP"); + if (getDouble("$DIMTP", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$DIMTM"); + if (getDouble("$DIMTM", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$DIMTXT"); + if (getDouble("$DIMTXT", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 2.5); + writer->writeString(9, "$DIMCEN"); + if (getDouble("$DIMCEN", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 2.5); + writer->writeString(9, "$DIMTSZ"); + if (getDouble("$DIMTSZ", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$DIMTOL"); + if (getInt("$DIMTOL", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMLIM"); + if (getInt("$DIMLIM", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMTIH"); + if (getInt("$DIMTIH", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMTOH"); + if (getInt("$DIMTOH", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMSE1"); + if (getInt("$DIMSE1", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMSE2"); + if (getInt("$DIMSE2", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMTAD"); + if (getInt("$DIMTAD", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$DIMZIN"); + if (getInt("$DIMZIN", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 8); + writer->writeString(9, "$DIMBLK"); + if (getStr("$DIMBLK", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(1, varStr); + else + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, ""); + writer->writeString(9, "$DIMASO"); + if (getInt("$DIMASO", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$DIMSHO"); + if (getInt("$DIMSHO", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$DIMPOST"); + if (getStr("$DIMPOST", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(1, varStr); + else + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, ""); + writer->writeString(9, "$DIMAPOST"); + if (getStr("$DIMAPOST", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(1, varStr); + else + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, ""); + writer->writeString(9, "$DIMALT"); + if (getInt("$DIMALT", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMALTD"); + if (getInt("$DIMALTD", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 3); + writer->writeString(9, "$DIMALTF"); + if (getDouble("$DIMALTF", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.03937); + writer->writeString(9, "$DIMLFAC"); + if (getDouble("$DIMLFAC", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.0); + writer->writeString(9, "$DIMTOFL"); + if (getInt("$DIMTOFL", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$DIMTVP"); + if (getDouble("$DIMTVP", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$DIMTIX"); + if (getInt("$DIMTIX", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMSOXD"); + if (getInt("$DIMSOXD", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMSAH"); + if (getInt("$DIMSAH", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMBLK1"); + if (getStr("$DIMBLK1", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(1, varStr); + else + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, ""); + writer->writeString(9, "$DIMBLK2"); + if (getStr("$DIMBLK2", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(1, varStr); + else + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, ""); + writer->writeString(9, "$DIMSTYLE"); + if (getStr("$DIMSTYLE", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(2, varStr); + else + writer->writeUtf8String(2, varStr); + else + writer->writeString(2, "STANDARD"); + writer->writeString(9, "$DIMCLRD"); + if (getInt("$DIMCLRD", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMCLRE"); + if (getInt("$DIMCLRE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMCLRT"); + if (getInt("$DIMCLRT", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMTFAC"); + if (getDouble("$DIMTFAC", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.0); + writer->writeString(9, "$DIMGAP"); + if (getDouble("$DIMGAP", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.625); + //post r12 dim vars + if (ver > DRW::AC1009) { + writer->writeString(9, "$DIMJUST"); + if (getInt("$DIMJUST", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMSD1"); + if (getInt("$DIMSD1", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMSD2"); + if (getInt("$DIMSD2", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMTOLJ"); + if (getInt("$DIMTOLJ", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMTZIN"); + if (getInt("$DIMTZIN", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 8); + writer->writeString(9, "$DIMALTZ"); + if (getInt("$DIMALTZ", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMALTTZ"); + if (getInt("$DIMALTTZ", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMUPT"); + if (getInt("$DIMUPT", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMDEC"); + if (getInt("$DIMDEC", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 2); + writer->writeString(9, "$DIMTDEC"); + if (getInt("$DIMTDEC", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 2); + writer->writeString(9, "$DIMALTU"); + if (getInt("$DIMALTU", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 2); + writer->writeString(9, "$DIMALTTD"); + if (getInt("$DIMALTTD", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 3); + writer->writeString(9, "$DIMTXSTY"); + if (getStr("$DIMTXSTY", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(7, varStr); + else + writer->writeUtf8String(7, varStr); + else + writer->writeString(7, "STANDARD"); + writer->writeString(9, "$DIMAUNIT"); + if (getInt("$DIMAUNIT", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMADEC"); + if (getInt("$DIMADEC", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMALTRND"); + if (getDouble("$DIMALTRND", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$DIMAZIN"); + if (getInt("$DIMAZIN", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMDSEP"); + if (getInt("$DIMDSEP", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 44); + writer->writeString(9, "$DIMATFIT"); + if (getInt("$DIMATFIT", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 3); + writer->writeString(9, "$DIMFRAC"); + if (getInt("$DIMFRAC", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMLDRBLK"); + if (getStr("$DIMLDRBLK", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(1, varStr); + else + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, "STANDARD"); + //verify if exist "$DIMLUNIT" or obsolete "$DIMUNIT" (pre v2000) + if ( !getInt("$DIMLUNIT", &varInt) ){ + if (!getInt("$DIMUNIT", &varInt)) + varInt = 2; + } + //verify valid values from 1 to 6 + if (varInt<1 || varInt>6) + varInt = 2; + if (ver > DRW::AC1014) { + writer->writeString(9, "$DIMLUNIT"); + writer->writeInt16(70, varInt); + } else { + writer->writeString(9, "$DIMUNIT"); + writer->writeInt16(70, varInt); + } + writer->writeString(9, "$DIMLWD"); + if (getInt("$DIMLWD", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, -2); + writer->writeString(9, "$DIMLWE"); + if (getInt("$DIMLWE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, -2); + writer->writeString(9, "$DIMTMOVE"); + if (getInt("$DIMTMOVE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + + if (ver > DRW::AC1018) {// and post v2004 dim vars + writer->writeString(9, "$DIMFXL"); + if (getDouble("$DIMFXL", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.0); + writer->writeString(9, "$DIMFXLON"); + if (getInt("$DIMFXLON", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMJOGANG"); + if (getDouble("$DIMJOGANG", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.7854); + writer->writeString(9, "$DIMTFILL"); + if (getInt("$DIMTFILL", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMTFILLCLR"); + if (getInt("$DIMTFILLCLR", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMARCSYM"); + if (getInt("$DIMARCSYM", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMLTYPE"); + if (getStr("$DIMLTYPE", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(6, varStr); + else + writer->writeUtf8String(6, varStr); + else + writer->writeString(6, ""); + writer->writeString(9, "$DIMLTEX1"); + if (getStr("$DIMLTEX1", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(6, varStr); + else + writer->writeUtf8String(6, varStr); + else + writer->writeString(6, ""); + writer->writeString(9, "$DIMLTEX2"); + if (getStr("$DIMLTEX2", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(6, varStr); + else + writer->writeUtf8String(6, varStr); + else + writer->writeString(6, ""); + if (ver > DRW::AC1021) {// and post v2007 dim vars + writer->writeString(9, "$DIMTXTDIRECTION"); + if (getInt("$DIMTXTDIRECTION", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + } + }// end post v2004 dim vars + }//end post r12 dim vars + + writer->writeString(9, "$LUNITS"); + if (getInt("$LUNITS", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 2); + writer->writeString(9, "$LUPREC"); + if (getInt("$LUPREC", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 4); + writer->writeString(9, "$SKETCHINC"); + if (getDouble("$SKETCHINC", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.0); + writer->writeString(9, "$FILLETRAD"); + if (getDouble("$FILLETRAD", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$AUNITS"); + if (getInt("$AUNITS", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$AUPREC"); + if (getInt("$AUPREC", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 2); + writer->writeString(9, "$MENU"); + if (getStr("$MENU", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(1, varStr); + else + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, "."); + writer->writeString(9, "$ELEVATION"); + if (getDouble("$ELEVATION", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$PELEVATION"); + if (getDouble("$PELEVATION", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$THICKNESS"); + if (getDouble("$THICKNESS", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$LIMCHECK"); + if (getInt("$LIMCHECK", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + if (ver < DRW::AC1015) { + writer->writeString(9, "$BLIPMODE"); + if (getInt("$BLIPMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + } + writer->writeString(9, "$CHAMFERA"); + if (getDouble("$CHAMFERA", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$CHAMFERB"); + if (getDouble("$CHAMFERB", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + if (ver > DRW::AC1009) { + writer->writeString(9, "$CHAMFERC"); + if (getDouble("$CHAMFERC", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$CHAMFERD"); + if (getDouble("$CHAMFERD", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + } + writer->writeString(9, "$SKPOLY"); + if (getInt("$SKPOLY", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 0); + //rlz: todo, times + writer->writeString(9, "$USRTIMER"); + if (getInt("$USRTIMER", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 1); + writer->writeString(9, "$ANGBASE"); + if (getDouble("$ANGBASE", &varDouble)) + writer->writeDouble(50, varDouble); + else + writer->writeDouble(50, 0.0); + writer->writeString(9, "$ANGDIR"); + if (getInt("$ANGDIR", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 0); + writer->writeString(9, "$PDMODE"); + if (getInt("$PDMODE", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 34); + writer->writeString(9, "$PDSIZE"); + if (getDouble("$PDSIZE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$PLINEWID"); + if (getDouble("$PLINEWID", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + if (ver < DRW::AC1012) { + writer->writeString(9, "$COORDS"); + if (getInt("$COORDS", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 2); + } + writer->writeString(9, "$SPLFRAME"); + if (getInt("$SPLFRAME", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 0); + writer->writeString(9, "$SPLINETYPE"); + if (getInt("$SPLINETYPE", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 2); + writer->writeString(9, "$SPLINESEGS"); + if (getInt("$SPLINESEGS", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 8); + if (ver < DRW::AC1012) { + writer->writeString(9, "$ATTDIA"); + if (getInt("$ATTDIA", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 1); + writer->writeString(9, "$ATTREQ"); + if (getInt("$ATTREQ", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 1); + writer->writeString(9, "$HANDLING"); + if (getInt("$HANDLING", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 1); + } + writer->writeString(9, "$HANDSEED"); + //RLZ dxfHex(5, 0xFFFF); + writer->writeString(5, "20000"); + writer->writeString(9, "$SURFTAB1"); + if (getInt("$SURFTAB1", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 6); + writer->writeString(9, "$SURFTAB2"); + if (getInt("$SURFTAB2", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 6); + writer->writeString(9, "$SURFTYPE"); + if (getInt("$SURFTYPE", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 6); + writer->writeString(9, "$SURFU"); + if (getInt("$SURFU", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 6); + writer->writeString(9, "$SURFV"); + if (getInt("$SURFV", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 6); + if (ver > DRW::AC1009) { + writer->writeString(9, "$UCSBASE"); + if (getStr("$UCSBASE", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(2, varStr); + else + writer->writeUtf8String(2, varStr); + else + writer->writeString(2, ""); +} + writer->writeString(9, "$UCSNAME"); + if (getStr("$UCSNAME", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(2, varStr); + else + writer->writeUtf8String(2, varStr); + else + writer->writeString(2, ""); + writer->writeString(9, "$UCSORG"); + if (getCoord("$UCSORG", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$UCSXDIR"); + if (getCoord("$UCSXDIR", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 1.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$UCSYDIR"); + if (getCoord("$UCSYDIR", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 1.0); + writer->writeDouble(30, 0.0); + } + if (ver > DRW::AC1009) { //begin post r12 UCS vars + writer->writeString(9, "$UCSORTHOREF"); + if (getStr("$UCSORTHOREF", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(2, varStr); + else + writer->writeUtf8String(2, varStr); + else + writer->writeString(2, ""); + writer->writeString(9, "$UCSORTHOVIEW"); + if (getInt("$UCSORTHOVIEW", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$UCSORGTOP"); + if (getCoord("$UCSORGTOP", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$UCSORGBOTTOM"); + if (getCoord("$UCSORGBOTTOM", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$UCSORGLEFT"); + if (getCoord("$UCSORGLEFT", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$UCSORGRIGHT"); + if (getCoord("$UCSORGRIGHT", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$UCSORGFRONT"); + if (getCoord("$UCSORGFRONT", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$UCSORGBACK"); + if (getCoord("$UCSORGBACK", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$PUCSBASE"); + if (getStr("$PUCSBASE", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(2, varStr); + else + writer->writeUtf8String(2, varStr); + else + writer->writeString(2, ""); + } //end post r12 UCS vars + writer->writeString(9, "$PUCSNAME"); + if (getStr("$PUCSNAME", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(2, varStr); + else + writer->writeUtf8String(2, varStr); + else + writer->writeString(2, ""); + writer->writeString(9, "$PUCSORG"); + if (getCoord("$PUCSORG", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$PUCSXDIR"); + if (getCoord("$PUCSXDIR", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 1.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$PUCSYDIR"); + if (getCoord("$PUCSYDIR", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 1.0); + writer->writeDouble(30, 0.0); + } + if (ver > DRW::AC1009) { //begin post r12 PUCS vars + writer->writeString(9, "$PUCSORTHOREF"); + if (getStr("$PUCSORTHOREF", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(2, varStr); + else + writer->writeUtf8String(2, varStr); + else + writer->writeString(2, ""); + writer->writeString(9, "$PUCSORTHOVIEW"); + if (getInt("$PUCSORTHOVIEW", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$PUCSORGTOP"); + if (getCoord("$PUCSORGTOP", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$PUCSORGBOTTOM"); + if (getCoord("$PUCSORGBOTTOM", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$PUCSORGLEFT"); + if (getCoord("$PUCSORGLEFT", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$PUCSORGRIGHT"); + if (getCoord("$PUCSORGRIGHT", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$PUCSORGFRONT"); + if (getCoord("$PUCSORGFRONT", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$PUCSORGBACK"); + if (getCoord("$PUCSORGBACK", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + } //end post r12 PUCS vars + + writer->writeString(9, "$USERI1"); + if (getInt("$USERI1", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$USERI2"); + if (getInt("$USERI2", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$USERI3"); + if (getInt("$USERI3", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$USERI4"); + if (getInt("$USERI4", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$USERI5"); + if (getInt("$USERI5", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$USERR1"); + if (getDouble("$USERR1", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$USERR2"); + if (getDouble("$USERR2", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$USERR3"); + if (getDouble("$USERR3", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$USERR4"); + if (getDouble("$USERR4", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$USERR5"); + if (getDouble("$USERR5", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$WORLDVIEW"); + if (getInt("$WORLDVIEW", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$SHADEDGE"); + if (getInt("$SHADEDGE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 3); + writer->writeString(9, "$SHADEDIF"); + if (getInt("$SHADEDIF", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 70); + writer->writeString(9, "$TILEMODE"); + if (getInt("$TILEMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$MAXACTVP"); + if (getInt("$MAXACTVP", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 64); + if (ver > DRW::AC1009) { //begin post r12 PUCS vars + writer->writeString(9, "$PINSBASE"); + if (getCoord("$PINSBASE", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + } + writer->writeString(9, "$PLIMCHECK"); + if (getInt("$PLIMCHECK", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$PEXTMIN"); + if (getCoord("$PEXTMIN", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$PEXTMAX"); + if (getCoord("$PEXTMAX", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + +/* RLZ: moved to active VPORT, but can write in header if present*/ + if (getInt("$GRIDMODE", &varInt)) { + writer->writeString(9, "$GRIDMODE"); + writer->writeInt16(70, varInt); + } + if (getInt("$SNAPSTYLE", &varInt)) { + writer->writeString(9, "$SNAPSTYLE"); + writer->writeInt16(70, varInt); + } + if (getCoord("$GRIDUNIT", &varCoord)) { + writer->writeString(9, "$GRIDUNIT"); + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + } + if (getCoord("$VIEWCTR", &varCoord)) { + writer->writeString(9, "$VIEWCTR"); + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + } +/* RLZ: moved to active VPORT, but can write in header if present*/ + + writer->writeString(9, "$PLIMMIN"); + if (getCoord("$PLIMMIN", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + } + writer->writeString(9, "$PLIMMAX"); + if (getCoord("$PLIMMAX", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + } else { + writer->writeDouble(10, 297.0); + writer->writeDouble(20, 210.0); + } + writer->writeString(9, "$UNITMODE"); + if (getInt("$UNITMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$VISRETAIN"); + if (getInt("$VISRETAIN", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$PLINEGEN"); + if (getInt("$PLINEGEN", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$PSLTSCALE"); + if (getInt("$PSLTSCALE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + if (ver > DRW::AC1009){//start port r12 vars + writer->writeString(9, "$TREEDEPTH"); + if (getInt("$TREEDEPTH", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 3020); + writer->writeString(9, "$CMLSTYLE"); + if (getStr("$CMLSTYLE", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(2, varStr); + else + writer->writeUtf8String(2, varStr); + else + writer->writeString(2, "Standard"); + writer->writeString(9, "$CMLJUST"); + if (getInt("$CMLJUST", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$CMLSCALE"); + if (getDouble("$CMLSCALE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 20.0); + writer->writeString(9, "$PROXYGRAPHICS"); + if (getInt("$PROXYGRAPHICS", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$MEASUREMENT"); + if (getInt("$MEASUREMENT", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$CELWEIGHT"); + if (getInt("$CELWEIGHT", &varInt)) + writer->writeInt16(370, varInt); + else + writer->writeInt16(370, -1); + writer->writeString(9, "$ENDCAPS"); + if (getInt("$ENDCAPS", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 0); + writer->writeString(9, "$JOINSTYLE"); + if (getInt("$JOINSTYLE", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 0); + writer->writeString(9, "$LWDISPLAY"); //RLZ bool flag, verify in bin version + if (getInt("$LWDISPLAY", &varInt)) + writer->writeInt16(290, varInt); + else + writer->writeInt16(290, 0); + if (ver > DRW::AC1014) { + writer->writeString(9, "$INSUNITS"); + if (getInt("$INSUNITS", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + } + writer->writeString(9, "$HYPERLINKBASE"); + if (getStr("$HYPERLINKBASE", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(1, varStr); + else + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, ""); + writer->writeString(9, "$STYLESHEET"); + if (getStr("$STYLESHEET", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(1, varStr); + else + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, ""); + writer->writeString(9, "$XEDIT"); //RLZ bool flag, verify in bin version + if (getInt("$XEDIT", &varInt)) + writer->writeInt16(290, varInt); + else + writer->writeInt16(290, 1); + writer->writeString(9, "$CEPSNTYPE"); + if (getInt("$CEPSNTYPE", &varInt)) + writer->writeInt16(380, varInt); + else + writer->writeInt16(380, 0); + writer->writeString(9, "$PSTYLEMODE"); //RLZ bool flag, verify in bin version + if (getInt("$PSTYLEMODE", &varInt)) + writer->writeInt16(290, varInt); + else + writer->writeInt16(290, 1); +//RLZ: here $FINGERPRINTGUID and $VERSIONGUID, do not add? + writer->writeString(9, "$EXTNAMES"); //RLZ bool flag, verify in bin version + if (getInt("$EXTNAMES", &varInt)) + writer->writeInt16(290, varInt); + else + writer->writeInt16(290, 1); + writer->writeString(9, "$PSVPSCALE"); + if (getDouble("$PSVPSCALE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$OLESTARTUP"); //RLZ bool flag, verify in bin version + if (getInt("$OLESTARTUP", &varInt)) + writer->writeInt16(290, varInt); + else + writer->writeInt16(290, 0); + } + if (ver > DRW::AC1015) {// and post v2004 vars + writer->writeString(9, "$SORTENTS"); + if (getInt("$SORTENTS", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 127); + writer->writeString(9, "$INDEXCTL"); + if (getInt("$INDEXCTL", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 0); + writer->writeString(9, "$HIDETEXT"); + if (getInt("$HIDETEXT", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 1); + writer->writeString(9, "$XCLIPFRAME"); //RLZ bool flag, verify in bin version + if (ver > DRW::AC1021) { + if (getInt("$XCLIPFRAME", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 0); + } else { + if (getInt("$XCLIPFRAME", &varInt)) + writer->writeInt16(290, varInt); + else + writer->writeInt16(290, 0); + } + writer->writeString(9, "$HALOGAP"); + if (getInt("$HALOGAP", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 0); + writer->writeString(9, "$OBSCOLOR"); + if (getInt("$OBSCOLOR", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 257); + writer->writeString(9, "$OBSLTYPE"); + if (getInt("$OBSLTYPE", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 0); + writer->writeString(9, "$INTERSECTIONDISPLAY"); + if (getInt("$INTERSECTIONDISPLAY", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 0); + writer->writeString(9, "$INTERSECTIONCOLOR"); + if (getInt("$INTERSECTIONCOLOR", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 257); + writer->writeString(9, "$DIMASSOC"); + if (getInt("$DIMASSOC", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 1); + writer->writeString(9, "$PROJECTNAME"); + if (getStr("$PROJECTNAME", &varStr)) + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, ""); + } + if (ver > DRW::AC1018) {// and post v2007 vars + writer->writeString(9, "$CAMERADISPLAY"); //RLZ bool flag, verify in bin version + if (getInt("$CAMERADISPLAY", &varInt)) + writer->writeInt16(290, varInt); + else + writer->writeInt16(290, 0); + writer->writeString(9, "$LENSLENGTH"); + if (getDouble("$LENSLENGTH", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 50.0); + writer->writeString(9, "$CAMERAHEIGHT"); + if (getDouble("$CAMERAHEIGTH", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$STEPSPERSEC"); + if (getDouble("$STEPSPERSEC", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 2.0); + writer->writeString(9, "$STEPSIZE"); + if (getDouble("$STEPSIZE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 50.0); + writer->writeString(9, "$3DDWFPREC"); + if (getDouble("$3DDWFPREC", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 2.0); + writer->writeString(9, "$PSOLWIDTH"); + if (getDouble("$PSOLWIDTH", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 5.0); + writer->writeString(9, "$PSOLHEIGHT"); + if (getDouble("$PSOLHEIGHT", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 80.0); + writer->writeString(9, "$LOFTANG1"); + if (getDouble("$LOFTANG1", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, M_PI_2); + writer->writeString(9, "$LOFTANG2"); + if (getDouble("$LOFTANG2", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, M_PI_2); + writer->writeString(9, "$LOFTMAG1"); + if (getDouble("$LOFTMAG1", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$LOFTMAG2"); + if (getDouble("$LOFTMAG2", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$LOFTPARAM"); + if (getInt("$LOFTPARAM", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 7); + writer->writeString(9, "$LOFTNORMALS"); + if (getInt("$LOFTNORMALS", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 1); + writer->writeString(9, "$LATITUDE"); + if (getDouble("$LATITUDE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.0); + writer->writeString(9, "$LONGITUDE"); + if (getDouble("$LONGITUDE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.0); + writer->writeString(9, "$NORTHDIRECTION"); + if (getDouble("$LONGITUDE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$TIMEZONE"); + if (getInt("$TIMEZONE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, -8000); + writer->writeString(9, "$LIGHTGLYPHDISPLAY"); + if (getInt("$LIGHTGLYPHDISPLAY", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 1); + writer->writeString(9, "$TILEMODELIGHTSYNCH"); + if (getInt("$TILEMODELIGHTSYNCH", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 1); + //$CMATERIAL is a handle + writer->writeString(9, "$SOLIDHIST"); + if (getInt("$SOLIDHIST", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 1); + writer->writeString(9, "$SHOWHIST"); + if (getInt("$SHOWHIST", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 1); + writer->writeString(9, "$DWFFRAME"); + if (getInt("$DWFFRAME", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 2); + writer->writeString(9, "$DGNFRAME"); + if (getInt("$DGNFRAME", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 0); + writer->writeString(9, "$REALWORLDSCALE"); //RLZ bool flag, verify in bin version + if (getInt("$REALWORLDSCALE", &varInt)) + writer->writeInt16(290, varInt); + else + writer->writeInt16(290, 1); + writer->writeString(9, "$INTERFERECOLOR"); + if (getInt("$INTERFERECOLOR", &varInt)) + writer->writeInt16(62, varInt); + else + writer->writeInt16(62, 1); + //$INTERFEREOBJVS is a handle + //$INTERFEREVPVS is a handle + writer->writeString(9, "$CSHADOW"); + if (getInt("$CSHADOW", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 0); + writer->writeString(9, "$SHADOWPLANELOCATION"); + if (getDouble("$SHADOWPLANELOCATION", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + } + +#ifdef DRW_DBG + std::map::const_iterator it; + for ( it=vars.begin() ; it != vars.end(); ++it ){ + DRW_DBG((*it).first); DRW_DBG("\n"); + } +#endif +} + +void DRW_Header::addDouble(std::string key, double value, int code){ + curr = new DRW_Variant(); + curr->addDouble( value ); + curr->code = code; + vars[key] =curr; +} + +void DRW_Header::addInt(std::string key, int value, int code){ + curr = new DRW_Variant(); + curr->addInt( value ); + curr->code = code; + vars[key] =curr; +} + +void DRW_Header::addStr(std::string key, std::string value, int code){ + curr = new DRW_Variant(); + curr->addString( value ); + curr->code = code; + vars[key] =curr; +} + +void DRW_Header::addCoord(std::string key, DRW_Coord value, int code){ + curr = new DRW_Variant(); + curr->addCoord( value ); + curr->code = code; + vars[key] =curr; +} + +bool DRW_Header::getDouble(std::string key, double *varDouble){ + bool result = false; + std::map::iterator it; + it=vars.find( key); + if (it != vars.end()) { + DRW_Variant *var = (*it).second; + if (var->type == DRW_Variant::DOUBLE) { + *varDouble = var->content.d; + result = true; + } + delete var; + vars.erase (it); + } + return result; +} + +bool DRW_Header::getInt(std::string key, int *varInt){ + bool result = false; + std::map::iterator it; + it=vars.find( key); + if (it != vars.end()) { + DRW_Variant *var = (*it).second; + if (var->type == DRW_Variant::INTEGER) { + *varInt = var->content.i; + result = true; + } + delete var; + vars.erase (it); + } + return result; +} + +bool DRW_Header::getStr(std::string key, std::string *varStr){ + bool result = false; + std::map::iterator it; + it=vars.find( key); + if (it != vars.end()) { + DRW_Variant *var = (*it).second; + if (var->type == DRW_Variant::STRING) { + *varStr = *var->content.s; + result = true; + } + delete var; + vars.erase (it); + } + return result; +} + +bool DRW_Header::getCoord(std::string key, DRW_Coord *varCoord){ + bool result = false; + std::map::iterator it; + it=vars.find( key); + if (it != vars.end()) { + DRW_Variant *var = (*it).second; + if (var->type == DRW_Variant::COORD) { + *varCoord = *var->content.v; + result = true; + } + delete var; + vars.erase (it); + } + return result; +} + +bool DRW_Header::parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer *hBbuf, duint8 mv){ + bool result = true; + duint32 size = buf->getRawLong32(); + duint32 bitSize = 0; + duint32 endBitPos = 160; //start bit: 16 sentinel + 4 size + DRW_DBG("\nbyte size of data: "); DRW_DBG(size); + if (version > DRW::AC1021 && mv > 3) { //2010+ + duint32 hSize = buf->getRawLong32(); + endBitPos += 32; //start bit: + 4 hight size + DRW_DBG("\n2010+ & MV> 3, higth 32b: "); DRW_DBG(hSize); + } +//RLZ TODO add $ACADVER var & $DWGCODEPAGE & $MEASUREMENT +//RLZ TODO EN 2000 falta $CELWEIGHT, $ENDCAPS, $EXTNAMES $JOINSTYLE $LWDISPLAY $PSTYLEMODE $TDUCREATE $TDUUPDATE $XEDIT + + //bit size of data needed to locate start of string stream in 2007+ + //and mark the start of handle stream + //header is one object reads data and continue read strings ??? + if (version > DRW::AC1018) {//2007+ + bitSize = buf->getRawLong32(); + DRW_DBG("\nsize in bits: "); DRW_DBG(bitSize); + endBitPos += bitSize; + hBbuf->setPosition(endBitPos >>3); + hBbuf->setBitPos(endBitPos&7); + } + + if (version > DRW::AC1024) {//2013+ + duint64 requiredVersions = buf->getBitLongLong(); + DRW_DBG("\nREQUIREDVERSIONS var: "); DRW_DBG(requiredVersions); + } + DRW_DBG("\nUnknown1: "); DRW_DBG(buf->getBitDouble()); + DRW_DBG("\nUnknown2: "); DRW_DBG(buf->getBitDouble()); + DRW_DBG("\nUnknown3: "); DRW_DBG(buf->getBitDouble()); + DRW_DBG("\nUnknown4: "); DRW_DBG(buf->getBitDouble()); + if (version < DRW::AC1021) {//2007- + DRW_DBG("\nUnknown text1: "); DRW_DBG(buf->getCP8Text()); + DRW_DBG("\nUnknown text2: "); DRW_DBG(buf->getCP8Text()); + DRW_DBG("\nUnknown text3: "); DRW_DBG(buf->getCP8Text()); + DRW_DBG("\nUnknown text4: "); DRW_DBG(buf->getCP8Text()); + } + DRW_DBG("\nUnknown long1 (24L): "); DRW_DBG(buf->getBitLong()); + DRW_DBG("\nUnknown long2 (0L): "); DRW_DBG(buf->getBitLong()); + if (version < DRW::AC1015) {//pre 2000 + DRW_DBG("\nUnknown short (0): "); DRW_DBG(buf->getBitShort()); + } + if (version < DRW::AC1018) {//pre 2004 + dwgHandle hcv = hBbuf->getHandle(); + DRW_DBG("\nhandle of current view: "); DRW_DBGHL(hcv.code, hcv.size, hcv.ref); + } + vars["DIMASO"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSHO"]=new DRW_Variant(70, buf->getBit()); + if (version < DRW::AC1015) {//pre 2000 + vars["DIMSAV"]=new DRW_Variant(70, buf->getBit()); + } + vars["PLINEGEN"]=new DRW_Variant(70, buf->getBit()); + vars["ORTHOMODE"]=new DRW_Variant(70, buf->getBit()); + vars["REGENMODE"]=new DRW_Variant(70, buf->getBit()); + vars["FILLMODE"]=new DRW_Variant(70, buf->getBit()); + vars["QTEXTMODE"]=new DRW_Variant(70, buf->getBit()); + vars["PSLTSCALE"]=new DRW_Variant(70, buf->getBit()); + vars["LIMCHECK"]=new DRW_Variant(70, buf->getBit()); + if (version < DRW::AC1015) {//pre 2000 + vars["BLIPMODE"]=new DRW_Variant(70, buf->getBit()); + } + if (version > DRW::AC1015) {//2004+ + DRW_DBG("\nUndocumented: "); DRW_DBG(buf->getBit()); + } + vars["USRTIMER"]=new DRW_Variant(70, buf->getBit()); + vars["SKPOLY"]=new DRW_Variant(70, buf->getBit()); + vars["ANGDIR"]=new DRW_Variant(70, buf->getBit()); + vars["SPLFRAME"]=new DRW_Variant(70, buf->getBit()); + if (version < DRW::AC1015) {//pre 2000 + vars["ATTREQ"]=new DRW_Variant(70, buf->getBit()); + vars["ATTDIA"]=new DRW_Variant(70, buf->getBit()); + } + vars["MIRRTEXT"]=new DRW_Variant(70, buf->getBit()); + vars["WORLDVIEW"]=new DRW_Variant(70, buf->getBit()); + if (version < DRW::AC1015) {//pre 2000 + vars["WIREFRAME"]=new DRW_Variant(70, buf->getBit()); + } + vars["TILEMODE"]=new DRW_Variant(70, buf->getBit()); + vars["PLIMCHECK"]=new DRW_Variant(70, buf->getBit()); + vars["VISRETAIN"]=new DRW_Variant(70, buf->getBit()); + if (version < DRW::AC1015) {//pre 2000 + vars["DELOBJ"]=new DRW_Variant(70, buf->getBit()); + } + vars["DISPSILH"]=new DRW_Variant(70, buf->getBit()); + vars["PELLIPSE"]=new DRW_Variant(70, buf->getBit()); + vars["PROXIGRAPHICS"]=new DRW_Variant(70, buf->getBitShort());//RLZ short or bit?? + if (version < DRW::AC1015) {//pre 2000 + vars["DRAGMODE"]=new DRW_Variant(70, buf->getBitShort());//RLZ short or bit?? + } + vars["TREEDEPTH"]=new DRW_Variant(70, buf->getBitShort());//RLZ short or bit?? + vars["LUNITS"]=new DRW_Variant(70, buf->getBitShort()); + vars["LUPREC"]=new DRW_Variant(70, buf->getBitShort()); + vars["AUNITS"]=new DRW_Variant(70, buf->getBitShort()); + vars["AUPREC"]=new DRW_Variant(70, buf->getBitShort()); + if (version < DRW::AC1015) {//pre 2000 + vars["OSMODE"]=new DRW_Variant(70, buf->getBitShort()); + } + vars["ATTMODE"]=new DRW_Variant(70, buf->getBitShort()); + if (version < DRW::AC1015) {//pre 2000 + vars["COORDS"]=new DRW_Variant(70, buf->getBitShort()); + } + vars["PDMODE"]=new DRW_Variant(70, buf->getBitShort()); + if (version < DRW::AC1015) {//pre 2000 + vars["PICKSTYLE"]=new DRW_Variant(70, buf->getBitShort()); + } + if (version > DRW::AC1015) {//2004+ + DRW_DBG("\nUnknown long 1: "); DRW_DBG(buf->getBitLong()); + DRW_DBG("\nUnknown long 2: "); DRW_DBG(buf->getBitLong()); + DRW_DBG("\nUnknown long 3: "); DRW_DBG(buf->getBitLong()); + } + vars["USERI1"]=new DRW_Variant(70, buf->getBitShort()); + vars["USERI2"]=new DRW_Variant(70, buf->getBitShort()); + vars["USERI3"]=new DRW_Variant(70, buf->getBitShort()); + vars["USERI4"]=new DRW_Variant(70, buf->getBitShort()); + vars["USERI5"]=new DRW_Variant(70, buf->getBitShort()); + vars["SPLINESEGS"]=new DRW_Variant(70, buf->getBitShort()); + vars["SURFU"]=new DRW_Variant(70, buf->getBitShort()); + vars["SURFV"]=new DRW_Variant(70, buf->getBitShort()); + vars["SURFTYPE"]=new DRW_Variant(70, buf->getBitShort()); + vars["SURFTAB1"]=new DRW_Variant(70, buf->getBitShort()); + vars["SURFTAB2"]=new DRW_Variant(70, buf->getBitShort()); + vars["SPLINETYPE"]=new DRW_Variant(70, buf->getBitShort()); + vars["SHADEDGE"]=new DRW_Variant(70, buf->getBitShort()); + vars["SHADEDIF"]=new DRW_Variant(70, buf->getBitShort()); + vars["UNITMODE"]=new DRW_Variant(70, buf->getBitShort()); + vars["MAXACTVP"]=new DRW_Variant(70, buf->getBitShort()); + vars["ISOLINES"]=new DRW_Variant(70, buf->getBitShort());////////////////// + vars["CMLJUST"]=new DRW_Variant(70, buf->getBitShort()); + vars["TEXTQLTY"]=new DRW_Variant(70, buf->getBitShort());///////////////////// + vars["LTSCALE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["TEXTSIZE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["TRACEWID"]=new DRW_Variant(40, buf->getBitDouble()); + vars["SKETCHINC"]=new DRW_Variant(40, buf->getBitDouble()); + vars["FILLETRAD"]=new DRW_Variant(40, buf->getBitDouble()); + vars["THICKNESS"]=new DRW_Variant(40, buf->getBitDouble()); + vars["ANGBASE"]=new DRW_Variant(50, buf->getBitDouble()); + vars["PDSIZE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["PLINEWID"]=new DRW_Variant(40, buf->getBitDouble()); + vars["USERR1"]=new DRW_Variant(40, buf->getBitDouble()); + vars["USERR2"]=new DRW_Variant(40, buf->getBitDouble()); + vars["USERR3"]=new DRW_Variant(40, buf->getBitDouble()); + vars["USERR4"]=new DRW_Variant(40, buf->getBitDouble()); + vars["USERR5"]=new DRW_Variant(40, buf->getBitDouble()); + vars["CHAMFERA"]=new DRW_Variant(40, buf->getBitDouble()); + vars["CHAMFERB"]=new DRW_Variant(40, buf->getBitDouble()); + vars["CHAMFERC"]=new DRW_Variant(40, buf->getBitDouble()); + vars["CHAMFERD"]=new DRW_Variant(40, buf->getBitDouble()); + vars["FACETRES"]=new DRW_Variant(40, buf->getBitDouble());///////////////////////// + vars["CMLSCALE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["CELTSCALE"]=new DRW_Variant(40, buf->getBitDouble()); + if (version < DRW::AC1021) {//2004- + vars["MENU"]=new DRW_Variant(1, buf->getCP8Text()); + } + ddouble64 msec, day; + day = buf->getBitLong(); + msec = buf->getBitLong(); + while (msec > 0) + msec /=10; + vars["TDCREATE"]=new DRW_Variant(40, day+msec);//RLZ: TODO convert to day.msec +// vars["TDCREATE"]=new DRW_Variant(40, buf->getBitLong());//RLZ: TODO convert to day.msec +// vars["TDCREATE"]=new DRW_Variant(40, buf->getBitLong()); + day = buf->getBitLong(); + msec = buf->getBitLong(); + while (msec > 0) + msec /=10; + vars["TDUPDATE"]=new DRW_Variant(40, day+msec);//RLZ: TODO convert to day.msec +// vars["TDUPDATE"]=new DRW_Variant(40, buf->getBitLong());//RLZ: TODO convert to day.msec +// vars["TDUPDATE"]=new DRW_Variant(40, buf->getBitLong()); + if (version > DRW::AC1015) {//2004+ + DRW_DBG("\nUnknown long 4: "); DRW_DBG(buf->getBitLong()); + DRW_DBG("\nUnknown long 5: "); DRW_DBG(buf->getBitLong()); + DRW_DBG("\nUnknown long 6: "); DRW_DBG(buf->getBitLong()); + } + day = buf->getBitLong(); + msec = buf->getBitLong(); + while (msec > 0) + msec /=10; + vars["TDINDWG"]=new DRW_Variant(40, day+msec);//RLZ: TODO convert to day.msec +// vars["TDINDWG"]=new DRW_Variant(40, buf->getBitLong());//RLZ: TODO convert to day.msec +// vars["TDINDWG"]=new DRW_Variant(40, buf->getBitLong());//RLZ: TODO convert to day.msec + day = buf->getBitLong(); + msec = buf->getBitLong(); + while (msec > 0) + msec /=10; + vars["TDUSRTIMER"]=new DRW_Variant(40, day+msec);//RLZ: TODO convert to day.msec +// vars["TDUSRTIMER"]=new DRW_Variant(40, buf->getBitLong());//RLZ: TODO convert to day.msec +// vars["TDUSRTIMER"]=new DRW_Variant(40, buf->getBitLong());//RLZ: TODO convert to day.msec + vars["CECOLOR"]=new DRW_Variant(62, buf->getCmColor(version));//RLZ: TODO read CMC or EMC color + dwgHandle HANDSEED = buf->getHandle();//allways present in data stream + DRW_DBG("\nHANDSEED: "); DRW_DBGHL(HANDSEED.code, HANDSEED.size, HANDSEED.ref); + dwgHandle CLAYER = hBbuf->getHandle(); + DRW_DBG("\nCLAYER: "); DRW_DBGHL(CLAYER.code, CLAYER.size, CLAYER.ref); + dwgHandle TEXTSTYLE = hBbuf->getHandle(); + DRW_DBG("\nTEXTSTYLE: "); DRW_DBGHL(TEXTSTYLE.code, TEXTSTYLE.size, TEXTSTYLE.ref); + dwgHandle CELTYPE = hBbuf->getHandle(); + DRW_DBG("\nCELTYPE: "); DRW_DBGHL(CELTYPE.code, CELTYPE.size, CELTYPE.ref); + if (version > DRW::AC1018) {//2007+ + dwgHandle CMATERIAL = hBbuf->getHandle(); + DRW_DBG("\nCMATERIAL: "); DRW_DBGHL(CMATERIAL.code, CMATERIAL.size, CMATERIAL.ref); + } + dwgHandle DIMSTYLE = hBbuf->getHandle(); + DRW_DBG("\nDIMSTYLE: "); DRW_DBGHL(DIMSTYLE.code, DIMSTYLE.size, DIMSTYLE.ref); + dwgHandle CMLSTYLE = hBbuf->getHandle(); + DRW_DBG("\nCMLSTYLE: "); DRW_DBGHL(CMLSTYLE.code, CMLSTYLE.size, CMLSTYLE.ref); + if (version > DRW::AC1014) {//2000+ + vars["PSVPSCALE"]=new DRW_Variant(40, buf->getBitDouble()); + } + vars["PINSBASE"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PEXTMIN"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PEXTMAX"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PLIMMIN"]=new DRW_Variant(10, buf->get2RawDouble()); + vars["PLIMMAX"]=new DRW_Variant(10, buf->get2RawDouble()); + vars["PELEVATION"]=new DRW_Variant(40, buf->getBitDouble()); + vars["PUCSORG"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PUCSXDIR"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PUCSYDIR"]=new DRW_Variant(10, buf->get3BitDouble()); + dwgHandle PUCSNAME = hBbuf->getHandle(); + DRW_DBG("\nPUCSNAME: "); DRW_DBGHL(PUCSNAME.code, PUCSNAME.size, PUCSNAME.ref); + if (version > DRW::AC1014) {//2000+ + dwgHandle PUCSORTHOREF = hBbuf->getHandle(); + DRW_DBG("\nPUCSORTHOREF: "); DRW_DBGHL(PUCSORTHOREF.code, PUCSORTHOREF.size, PUCSORTHOREF.ref); + vars["PUCSORTHOVIEW"]=new DRW_Variant(70, buf->getBitShort()); + dwgHandle PUCSBASE = hBbuf->getHandle(); + DRW_DBG("\nPUCSBASE: "); DRW_DBGHL(PUCSBASE.code, PUCSBASE.size, PUCSBASE.ref); + vars["PUCSORGTOP"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PUCSORGBOTTOM"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PUCSORGLEFT"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PUCSORGRIGHT"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PUCSORGFRONT"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PUCSORGBACK"]=new DRW_Variant(10, buf->get3BitDouble()); + } + vars["INSBASE"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["EXTMIN"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["EXTMAX"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["LIMMIN"]=new DRW_Variant(10, buf->get2RawDouble()); + vars["LIMMAX"]=new DRW_Variant(10, buf->get2RawDouble()); + vars["ELEVATION"]=new DRW_Variant(40, buf->getBitDouble()); + vars["UCSORG"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["UCSXDIR"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["UCSYDIR"]=new DRW_Variant(10, buf->get3BitDouble()); + dwgHandle UCSNAME = hBbuf->getHandle(); + DRW_DBG("\nUCSNAME: "); DRW_DBGHL(UCSNAME.code, UCSNAME.size, UCSNAME.ref); + if (version > DRW::AC1014) {//2000+ + dwgHandle UCSORTHOREF = hBbuf->getHandle(); + DRW_DBG("\nUCSORTHOREF: "); DRW_DBGHL(UCSORTHOREF.code, UCSORTHOREF.size, UCSORTHOREF.ref); + vars["UCSORTHOVIEW"]=new DRW_Variant(70, buf->getBitShort()); + dwgHandle UCSBASE = hBbuf->getHandle(); + DRW_DBG("\nUCSBASE: "); DRW_DBGHL(UCSBASE.code, UCSBASE.size, UCSBASE.ref); + vars["UCSORGTOP"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["UCSORGBOTTOM"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["UCSORGLEFT"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["UCSORGRIGHT"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["UCSORGFRONT"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["UCSORGBACK"]=new DRW_Variant(10, buf->get3BitDouble()); + if (version < DRW::AC1021) {//2004- + vars["DIMPOST"]=new DRW_Variant(1, buf->getCP8Text()); + vars["DIMAPOST"]=new DRW_Variant(1, buf->getCP8Text()); + } + } + if (version < DRW::AC1015) {//r14- + vars["DIMTOL"]=new DRW_Variant(70, buf->getBit()); + vars["DIMLIM"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTIH"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTOH"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSE1"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSE2"]=new DRW_Variant(70, buf->getBit()); + vars["DIMALT"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTOFL"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSAH"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTIX"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSOXD"]=new DRW_Variant(70, buf->getBit()); + vars["DIMALTD"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DIMZIN"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DIMSD1"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSD2"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTOLJ"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DIMJUST"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DIMFIT"]=new DRW_Variant(70, buf->getRawChar8());/////////// + vars["DIMUPT"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTZIN"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DIMALTZ"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DIMALTTZ"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DIMTAD"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DIMUNIT"]=new DRW_Variant(70, buf->getBitShort());/////////// + vars["DIMAUNIT"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMDEC"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMTDEC"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMALTU"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMALTTD"]=new DRW_Variant(70, buf->getBitShort()); + dwgHandle DIMTXSTY = hBbuf->getHandle(); + DRW_DBG("\nDIMTXSTY: "); DRW_DBGHL(DIMTXSTY.code, DIMTXSTY.size, DIMTXSTY.ref); + } + vars["DIMSCALE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMASZ"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMEXO"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMDLI"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMEXE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMRND"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMDLE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMTP"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMTM"]=new DRW_Variant(40, buf->getBitDouble()); + if (version > DRW::AC1018) {//2007+ + vars["DIMFXL"]=new DRW_Variant(40, buf->getBitDouble());////////////////// + vars["DIMJOGANG"]=new DRW_Variant(40, buf->getBitDouble());/////////////// + vars["DIMTFILL"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMTFILLCLR"]=new DRW_Variant(62, buf->getCmColor(version)); + } + if (version > DRW::AC1014) {//2000+ + vars["DIMTOL"]=new DRW_Variant(70, buf->getBit()); + vars["DIMLIM"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTIH"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTOH"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSE1"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSE2"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTAD"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMZIN"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMAZIN"]=new DRW_Variant(70, buf->getBitShort()); + } + if (version > DRW::AC1018) {//2007+ + vars["DIMARCSYM"]=new DRW_Variant(70, buf->getBitShort()); + } + vars["DIMTXT"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMCEN"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMTSZ"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMALTF"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMLFAC"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMTVP"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMTFAC"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMGAP"]=new DRW_Variant(40, buf->getBitDouble()); + if (version < DRW::AC1015) {//r14- + vars["DIMPOST"]=new DRW_Variant(1, buf->getCP8Text()); + vars["DIMAPOST"]=new DRW_Variant(1, buf->getCP8Text()); + vars["DIMBLK"]=new DRW_Variant(1, buf->getCP8Text()); + vars["DIMBLK1"]=new DRW_Variant(1, buf->getCP8Text()); + vars["DIMBLK2"]=new DRW_Variant(1, buf->getCP8Text()); + } + if (version > DRW::AC1014) {//2000+ + vars["DIMALTRND"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMALT"]=new DRW_Variant(70, buf->getBit()); + vars["DIMALTD"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMTOFL"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSAH"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTIX"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSOXD"]=new DRW_Variant(70, buf->getBit()); + } + vars["DIMCLRD"]=new DRW_Variant(70, buf->getCmColor(version));//RLZ: TODO read CMC or EMC color + vars["DIMCLRE"]=new DRW_Variant(70, buf->getCmColor(version));//RLZ: TODO read CMC or EMC color + vars["DIMCLRT"]=new DRW_Variant(70, buf->getCmColor(version));//RLZ: TODO read CMC or EMC color + if (version > DRW::AC1014) {//2000+ + vars["DIAMDEC"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMDEC"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMTDEC"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMALTU"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMALTTD"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMAUNIT"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMFAC"]=new DRW_Variant(70, buf->getBitShort());///////////////// DIMFAC O DIMFRAC + vars["DIMLUNIT"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMDSEP"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMTMOVE"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMJUST"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMSD1"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSD2"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTOLJ"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMTZIN"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMALTZ"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMALTTZ"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMUPT"]=new DRW_Variant(70, buf->getBit()); + vars["DIMATFIT"]=new DRW_Variant(70, buf->getBitShort()); + } + if (version > DRW::AC1018) {//2007+ + vars["DIMFXLON"]=new DRW_Variant(70, buf->getBit());//////////////// + } + if (version > DRW::AC1021) {//2010+ + vars["DIMTXTDIRECTION"]=new DRW_Variant(70, buf->getBit());//////////////// + vars["DIMALTMZF"]=new DRW_Variant(40, buf->getBitDouble());//////////////// + vars["DIMMZF"]=new DRW_Variant(40, buf->getBitDouble());//////////////// + } + if (version > DRW::AC1014) {//2000+ + dwgHandle DIMTXSTY = hBbuf->getHandle(); + DRW_DBG("\nDIMTXSTY: "); DRW_DBGHL(DIMTXSTY.code, DIMTXSTY.size, DIMTXSTY.ref); + dwgHandle DIMLDRBLK = hBbuf->getHandle(); + DRW_DBG("\nDIMLDRBLK: "); DRW_DBGHL(DIMLDRBLK.code, DIMLDRBLK.size, DIMLDRBLK.ref); + dwgHandle DIMBLK = hBbuf->getHandle(); + DRW_DBG("\nDIMBLK: "); DRW_DBGHL(DIMBLK.code, DIMBLK.size, DIMBLK.ref); + dwgHandle DIMBLK1 = hBbuf->getHandle(); + DRW_DBG("\nDIMBLK1: "); DRW_DBGHL(DIMBLK1.code, DIMBLK1.size, DIMBLK1.ref); + dwgHandle DIMBLK2 = hBbuf->getHandle(); + DRW_DBG("\nDIMBLK2: "); DRW_DBGHL(DIMBLK2.code, DIMBLK2.size, DIMBLK2.ref); + } + if (version > DRW::AC1018) {//2007+ + dwgHandle DIMLTYPE = hBbuf->getHandle(); + DRW_DBG("\nDIMLTYPE: "); DRW_DBGHL(DIMLTYPE.code, DIMLTYPE.size, DIMLTYPE.ref); + dwgHandle DIMLTEX1 = hBbuf->getHandle(); + DRW_DBG("\nDIMLTEX1: "); DRW_DBGHL(DIMLTEX1.code, DIMLTEX1.size, DIMLTEX1.ref); + dwgHandle DIMLTEX2 = hBbuf->getHandle(); + DRW_DBG("\nDIMLTEX2: "); DRW_DBGHL(DIMLTEX2.code, DIMLTEX2.size, DIMLTEX2.ref); + } + if (version > DRW::AC1014) {//2000+ + vars["DIMLWD"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMLWE"]=new DRW_Variant(70, buf->getBitShort()); + } + dwgHandle CONTROL = hBbuf->getHandle(); + DRW_DBG("\nBLOCK CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + blockCtrl = CONTROL.ref; + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nLAYER CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + layerCtrl = CONTROL.ref; + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nSTYLE CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + styleCtrl = CONTROL.ref; + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nLINETYPE CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + linetypeCtrl = CONTROL.ref; + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nVIEW CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + viewCtrl = CONTROL.ref; + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nUCS CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + ucsCtrl = CONTROL.ref; + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nVPORT CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + vportCtrl = CONTROL.ref; + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nAPPID CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + appidCtrl = CONTROL.ref; + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDIMSTYLE CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + dimstyleCtrl = CONTROL.ref; + if (version < DRW::AC1018) {//r2000- + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nVIEWPORT ENTITY HEADER CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + vpEntHeaderCtrl = CONTROL.ref; //RLZ: only in R13-R15 ???? + } + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDICT ACAD_GROUP: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDICT ACAD_MLINESTYLE: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDICT NAMED OBJS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + + if (version > DRW::AC1014) {//2000+ + vars["TSTACKALIGN"]=new DRW_Variant(70, buf->getBitShort()); + vars["TSTACKSIZE"]=new DRW_Variant(70, buf->getBitShort()); + if (version < DRW::AC1021) {//2004- + vars["HYPERLINKBASE"]=new DRW_Variant(1, buf->getCP8Text()); + vars["STYLESHEET"]=new DRW_Variant(1, buf->getCP8Text()); + } + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDICT LAYOUTS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDICT PLOTSETTINGS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDICT PLOTSTYLES: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + } + if (version > DRW::AC1015) {//2004+ + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDICT MATERIALS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDICT COLORS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + } + if (version > DRW::AC1018) {//2007+ + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDICT VISUALSTYLE: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + } + if (version > DRW::AC1024) {//2013+ + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nUNKNOWN HANDLE: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + } + if (version > DRW::AC1014) {//2000+ + DRW_DBG("\nFlags: "); DRW_DBGH(buf->getBitLong());//RLZ TODO change to 8 vars + vars["INSUNITS"]=new DRW_Variant(70, buf->getBitShort()); + duint16 cepsntype = buf->getBitShort(); + vars["CEPSNTYPE"]=new DRW_Variant(70, cepsntype); + if (cepsntype == 3){ + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nCPSNID HANDLE: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + } + if (version < DRW::AC1021) {//2004- + vars["FINGERPRINTGUID"]=new DRW_Variant(1, buf->getCP8Text()); + vars["VERSIONGUID"]=new DRW_Variant(1, buf->getCP8Text()); + } + } + if (version > DRW::AC1015) {//2004+ + vars["SORTENTS"]=new DRW_Variant(70, buf->getRawChar8()); + vars["INDEXCTL"]=new DRW_Variant(70, buf->getRawChar8()); + vars["HIDETEXT"]=new DRW_Variant(70, buf->getRawChar8()); + vars["XCLIPFRAME"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DIMASSOC"]=new DRW_Variant(70, buf->getRawChar8()); + vars["HALOGAP"]=new DRW_Variant(70, buf->getRawChar8()); + vars["OBSCUREDCOLOR"]=new DRW_Variant(70, buf->getBitShort()); + vars["INTERSECTIONCOLOR"]=new DRW_Variant(70, buf->getBitShort()); + vars["OBSCUREDLTYPE"]=new DRW_Variant(70, buf->getRawChar8()); + vars["INTERSECTIONDISPLAY"]=new DRW_Variant(70, buf->getRawChar8()); + if (version < DRW::AC1021) {//2004- + vars["PROJECTNAME"]=new DRW_Variant(1, buf->getCP8Text()); + } + } + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nBLOCK PAPER_SPACE: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nBLOCK MODEL_SPACE: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nLTYPE BYLAYER: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nLTYPE BYBLOCK: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nLTYPE CONTINUOUS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + if (version > DRW::AC1018) {//2007+ + vars["CAMERADISPLAY"]=new DRW_Variant(70, buf->getBit()); + DRW_DBG("\nUnknown 2007+ long1: "); DRW_DBG(buf->getBitLong()); + DRW_DBG("\nUnknown 2007+ long2: "); DRW_DBG(buf->getBitLong()); + DRW_DBG("\nUnknown 2007+ double2: "); DRW_DBG(buf->getBitDouble()); + vars["STEPSPERSEC"]=new DRW_Variant(40, buf->getBitDouble()); + vars["STEPSIZE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["3DDWFPREC"]=new DRW_Variant(40, buf->getBitDouble()); + vars["LENSLENGTH"]=new DRW_Variant(40, buf->getBitDouble()); + vars["CAMERAHEIGHT"]=new DRW_Variant(40, buf->getBitDouble()); + vars["SOLIDHIST"]=new DRW_Variant(70, buf->getRawChar8()); + vars["SHOWHIST"]=new DRW_Variant(70, buf->getRawChar8()); + vars["PSOLWIDTH"]=new DRW_Variant(40, buf->getBitDouble()); + vars["PSOLHEIGHT"]=new DRW_Variant(40, buf->getBitDouble()); + vars["LOFTANG1"]=new DRW_Variant(40, buf->getBitDouble()); + vars["LOFTANG2"]=new DRW_Variant(40, buf->getBitDouble()); + vars["LOFTMAG1"]=new DRW_Variant(40, buf->getBitDouble()); + vars["LOFTMAG2"]=new DRW_Variant(40, buf->getBitDouble()); + vars["LOFTPARAM"]=new DRW_Variant(70, buf->getBitShort()); + vars["LOFTNORMALS"]=new DRW_Variant(40, buf->getRawChar8()); + vars["LATITUDE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["LONGITUDE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["NORTHDIRECTION"]=new DRW_Variant(40, buf->getBitDouble()); + vars["TIMEZONE"]=new DRW_Variant(70, buf->getBitLong()); + vars["LIGHTGLYPHDISPLAY"]=new DRW_Variant(70, buf->getRawChar8()); + vars["TILEMODELIGHTSYNCH"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DWFFRAME"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DGNFRAME"]=new DRW_Variant(70, buf->getRawChar8()); + DRW_DBG("\nUnknown 2007+ BIT: "); DRW_DBG(buf->getBit()); + vars["INTERFERECOLOR"]=new DRW_Variant(70, buf->getCmColor(version)); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nINTERFEREOBJVS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nINTERFEREVPVS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDRAGVS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + vars["CSHADOW"]=new DRW_Variant(70, buf->getRawChar8()); + DRW_DBG("\nUnknown 2007+ double2: "); DRW_DBG(buf->getBitDouble()); + } + if (version > DRW::AC1012) {//R14+ + DRW_DBG("\nUnknown R14+ short1: "); DRW_DBG(buf->getBitShort()); + DRW_DBG("\nUnknown R14+ short2: "); DRW_DBG(buf->getBitShort()); + DRW_DBG("\nUnknown R14+ short3: "); DRW_DBG(buf->getBitShort()); + DRW_DBG("\nUnknown R14+ short4: "); DRW_DBG(buf->getBitShort()); + } + + DRW_DBG("\nbuf position: "); DRW_DBG(buf->getPosition()); + DRW_DBG(" buf bit position: "); DRW_DBG(buf->getBitPos()); + + + /**** RLZ: disabled, pending to read all data ***/ + //Start reading string stream for 2007 and further + if (version > DRW::AC1018) {//2007+ + duint32 strStartPos = endBitPos -1; + buf->setPosition(strStartPos >>3); + buf->setBitPos(strStartPos&7); + if (buf->getBit() == 1){ + strStartPos -= 16; + buf->setPosition(strStartPos >>3); + buf->setBitPos(strStartPos&7); + duint32 strDataSize = buf->getRawShort16(); + if (strDataSize & 0x8000) { + strStartPos -= 16;//decrement 16 bits + strDataSize &= 0x7FFF; //strip 0x8000; + buf->setPosition(strStartPos >> 3); + buf->setBitPos(strStartPos & 7); + duint32 hiSize = buf->getRawShort16(); + strDataSize |= (hiSize << 15); + } + strStartPos -= strDataSize; + buf->setPosition(strStartPos >> 3); + buf->setBitPos(strStartPos & 7); + + DRW_DBG("\nstring buf position: "); DRW_DBG(buf->getPosition()); + DRW_DBG("\nstring buf bit position: "); DRW_DBG(buf->getBitPos()); + } + DRW_DBG("\nUnknown text1: "); DRW_DBG(buf->getUCSText(false)); + DRW_DBG("\nUnknown text2: "); DRW_DBG(buf->getUCSText(false)); + DRW_DBG("\nUnknown text3: "); DRW_DBG(buf->getUCSText(false)); + DRW_DBG("\nUnknown text4: "); DRW_DBG(buf->getUCSText(false)); + vars["MENU"]=new DRW_Variant(1, buf->getUCSText(false)); + vars["DIMPOST"]=new DRW_Variant(1, buf->getUCSText(false)); + vars["DIMAPOST"]=new DRW_Variant(1, buf->getUCSText(false)); + if (version > DRW::AC1021) {//2010+ + vars["DIMALTMZS"]=new DRW_Variant(70, buf->getUCSText(false));//RLZ: pending to verify////////////// + vars["DIMMZS"]=new DRW_Variant(70, buf->getUCSText(false));//RLZ: pending to verify////////////// + } + vars["HYPERLINKBASE"]=new DRW_Variant(1, buf->getUCSText(false)); + vars["STYLESHEET"]=new DRW_Variant(1, buf->getUCSText(false)); + vars["FINGERPRINTGUID"]=new DRW_Variant(1, buf->getUCSText(false)); + DRW_DBG("\nstring buf position: "); DRW_DBG(buf->getPosition()); + DRW_DBG(" string buf bit position: "); DRW_DBG(buf->getBitPos()); + vars["VERSIONGUID"]=new DRW_Variant(1, buf->getUCSText(false)); + DRW_DBG("\nstring buf position: "); DRW_DBG(buf->getPosition()); + DRW_DBG(" string buf bit position: "); DRW_DBG(buf->getBitPos()); + vars["PROJECTNAME"]=new DRW_Variant(1, buf->getUCSText(false)); + } +/*** ****/ + DRW_DBG("\nstring buf position: "); DRW_DBG(buf->getPosition()); + DRW_DBG(" string buf bit position: "); DRW_DBG(buf->getBitPos()); + + if (DRW_DBGGL == DRW_dbg::DEBUG){ + for (std::map::iterator it=vars.begin(); it!=vars.end(); ++it){ + DRW_DBG("\n"); DRW_DBG(it->first); DRW_DBG(": "); + switch (it->second->type){ + case DRW_Variant::INTEGER: + DRW_DBG(it->second->content.i); + break; + case DRW_Variant::DOUBLE: + DRW_DBG(it->second->content.d); + break; + case DRW_Variant::STRING: + DRW_DBG(it->second->content.s->c_str()); + break; + case DRW_Variant::COORD: + DRW_DBG("x= "); DRW_DBG(it->second->content.v->x); + DRW_DBG(", y= "); DRW_DBG(it->second->content.v->y); + DRW_DBG(", z= "); DRW_DBG(it->second->content.v->z); + break; + default: + break; + } + DRW_DBG(" code: ");DRW_DBG(it->second->code); + } + } + + buf->setPosition(size+16+4); //readed size +16 start sentinel + 4 size + if (version > DRW::AC1021 && mv > 3) { //2010+ + buf->getRawLong32();//advance 4 bytes (hisize) + } + DRW_DBG("\nseting position to: "); DRW_DBG(buf->getPosition()); + DRW_DBG("\nHeader CRC: "); DRW_DBGH(buf->getRawShort16()); + DRW_DBG("\nbuf position: "); DRW_DBG(buf->getPosition()); + DRW_DBG("\ndwg header end sentinel= "); + for (int i=0; i<16;i++) { + DRW_DBGH(buf->getRawChar8()); DRW_DBG(" "); + } + + //temporary code to show header end sentinel + duint64 sz= buf->size()-1; + if (version < DRW::AC1018) {//pre 2004 + sz= buf->size()-16; + buf->setPosition(sz); + DRW_DBG("\nseting position to: "); DRW_DBG(buf->getPosition()); + DRW_DBG("\ndwg header end sentinel= "); + for (int i=0; i<16;i++) { + DRW_DBGH(buf->getRawChar8()); DRW_DBG(" "); + } + } else if (version == DRW::AC1018) {//2004 +// sz= buf->size()-132; +// buf->setPosition(sz); + buf->moveBitPos(-128); + DRW_DBG("\nseting position to: "); DRW_DBG(buf->getPosition()); + DRW_DBG("\ndwg header end sentinel= "); + for (int i=0; i<16;i++) { + DRW_DBGH(buf->getRawChar8()); DRW_DBG(" "); + } + } else if (version == DRW::AC1021) {//2007 + sz= buf->size()-16; + buf->setPosition(sz); + DRW_DBG("\nseting position to: "); DRW_DBG(buf->getPosition()); + DRW_DBG("\ndwg header end sentinel= "); + for (int i=0; i<16;i++) { + DRW_DBGH(buf->getRawChar8()); DRW_DBG(" "); + } + } else if (version == DRW::AC1024) {//2010 +// sz= buf->size()-93; +// buf->setPosition(sz); + buf->moveBitPos(-128); + DRW_DBG("\nseting position to: "); DRW_DBG(buf->getPosition()); + DRW_DBG("\ndwg header end sentinel= "); + for (int i=0; i<16;i++) { + DRW_DBGH(buf->getRawChar8()); DRW_DBG(" "); + } + } else if (version == DRW::AC1027) {//2013 +// sz= buf->size()-76; +// buf->setPosition(sz); + buf->moveBitPos(-128); + DRW_DBG("\nseting position to: "); DRW_DBG(buf->getPosition()); + DRW_DBG("\ndwg header end sentinel= "); + for (int i=0; i<16;i++) { + DRW_DBGH(buf->getRawChar8()); DRW_DBG(" "); + } + } + + return result; +} diff --git a/extlib/libdxfrw/drw_header.h b/extlib/libdxfrw/drw_header.h new file mode 100644 index 0000000..a8fdc8e --- /dev/null +++ b/extlib/libdxfrw/drw_header.h @@ -0,0 +1,107 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DRW_HEADER_H +#define DRW_HEADER_H + + +#include +#include "drw_base.h" + +class dxfReader; +class dxfWriter; +class dwgBuffer; + +#define SETHDRFRIENDS friend class dxfRW; \ + friend class dwgReader; + +//! Class to handle header entries +/*! +* Class to handle header vars, to read iterate over "std::map vars" +* to write add a DRW_Variant* into "std::map vars" (do not delete it, are cleared in dtor) +* or use add* helper functions. +* @author Rallaz +*/ +class DRW_Header { + SETHDRFRIENDS +public: + DRW_Header(); + ~DRW_Header() { + clearVars(); + } + + DRW_Header(const DRW_Header& h){ + this->version = h.version; + this->comments = h.comments; + for (std::map::const_iterator it=h.vars.begin(); it!=h.vars.end(); ++it){ + this->vars[it->first] = new DRW_Variant( *(it->second) ); + } + this->curr = NULL; + } + DRW_Header& operator=(const DRW_Header &h) { + if(this != &h) { + clearVars(); + this->version = h.version; + this->comments = h.comments; + for (std::map::const_iterator it=h.vars.begin(); it!=h.vars.end(); ++it){ + this->vars[it->first] = new DRW_Variant( *(it->second) ); + } + } + return *this; + } + + void addDouble(std::string key, double value, int code); + void addInt(std::string key, int value, int code); + void addStr(std::string key, std::string value, int code); + void addCoord(std::string key, DRW_Coord value, int code); + std::string getComments() const {return comments;} + void write(dxfWriter *writer, DRW::Version ver); + void addComment(std::string c); + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer *hBbuf, duint8 mv=0); +private: + bool getDouble(std::string key, double *varDouble); + bool getInt(std::string key, int *varInt); + bool getStr(std::string key, std::string *varStr); + bool getCoord(std::string key, DRW_Coord *varStr); + void clearVars(){ + for (std::map::iterator it=vars.begin(); it!=vars.end(); ++it) + delete it->second; + + vars.clear(); + } + +public: + std::map vars; +private: + std::string comments; + std::string name; + DRW_Variant* curr; + int version; //to use on read + + duint32 linetypeCtrl; + duint32 layerCtrl; + duint32 styleCtrl; + duint32 dimstyleCtrl; + duint32 appidCtrl; + duint32 blockCtrl; + duint32 viewCtrl; + duint32 ucsCtrl; + duint32 vportCtrl; + duint32 vpEntHeaderCtrl; +}; + +#endif + +// EOF diff --git a/extlib/libdxfrw/drw_interface.h b/extlib/libdxfrw/drw_interface.h new file mode 100644 index 0000000..1b1577e --- /dev/null +++ b/extlib/libdxfrw/drw_interface.h @@ -0,0 +1,191 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DRW_INTERFACE_H +#define DRW_INTERFACE_H + +#include + +#include "drw_entities.h" +#include "drw_objects.h" +#include "drw_header.h" + +/** + * Abstract class (interface) for comunicate dxfReader with the application. + * Inherit your class which takes care of the entities in the + * processed DXF file from this interface. + * + * @author Rallaz + */ +class DRW_Interface { +public: + DRW_Interface() { + } + virtual ~DRW_Interface() { + } + + /** Called when header is parsed. */ + virtual void addHeader(const DRW_Header *) { } + + /** Called for every line Type. */ + virtual void addLType(const DRW_LType &) { } + /** Called for every layer. */ + virtual void addLayer(const DRW_Layer &) { } + /** Called for every dim style. */ + virtual void addDimStyle(const DRW_Dimstyle &) { } + /** Called for every VPORT table. */ + virtual void addVport(const DRW_Vport &) { } + /** Called for every text style. */ + virtual void addTextStyle(const DRW_Textstyle &) { } + /** Called for every AppId entry. */ + virtual void addAppId(const DRW_AppId &) { } + + /** + * Called for every block. Note: all entities added after this + * command go into this block until endBlock() is called. + * + * @see endBlock() + */ + virtual void addBlock(const DRW_Block &) { } + + /** Called to end the current block */ + virtual void endBlock() { } + + /** Called for every point */ + virtual void addPoint(const DRW_Point &) { } + + /** Called for every line */ + virtual void addLine(const DRW_Line &) { } + + /** Called for every ray */ + virtual void addRay(const DRW_Ray &) { } + + /** Called for every xline */ + virtual void addXline(const DRW_Xline &) { } + + /** Called for every arc */ + virtual void addArc(const DRW_Arc &) { } + + /** Called for every circle */ + virtual void addCircle(const DRW_Circle &) { } + + /** Called for every ellipse */ + virtual void addEllipse(const DRW_Ellipse &) { } + + /** Called for every lwpolyline */ + virtual void addLWPolyline(const DRW_LWPolyline &) { } + + /** Called for every polyline start */ + virtual void addPolyline(const DRW_Polyline &) { } + + /** Called for every spline */ + virtual void addSpline(const DRW_Spline *) { } + + /** Called for every spline knot value */ + virtual void addKnot(const DRW_Entity &) { } + + /** Called for every insert. */ + virtual void addInsert(const DRW_Insert &) { } + + /** Called for every trace start */ + virtual void addTrace(const DRW_Trace &) { } + + /** Called for every 3dface start */ + virtual void add3dFace(const DRW_3Dface &) { } + + /** Called for every solid start */ + virtual void addSolid(const DRW_Solid &) { } + + + /** Called for every Multi Text entity. */ + virtual void addMText(const DRW_MText &) { } + + /** Called for every Text entity. */ + virtual void addText(const DRW_Text &) { } + + /** + * Called for every aligned dimension entity. + */ + virtual void addDimAlign(const DRW_DimAligned *) { } + /** + * Called for every linear or rotated dimension entity. + */ + virtual void addDimLinear(const DRW_DimLinear *) { } + + /** + * Called for every radial dimension entity. + */ + virtual void addDimRadial(const DRW_DimRadial *) { } + + /** + * Called for every diametric dimension entity. + */ + virtual void addDimDiametric(const DRW_DimDiametric *) { } + + /** + * Called for every angular dimension (2 lines version) entity. + */ + virtual void addDimAngular(const DRW_DimAngular *) { } + + /** + * Called for every angular dimension (3 points version) entity. + */ + virtual void addDimAngular3P(const DRW_DimAngular3p *) { } + + /** + * Called for every ordinate dimension entity. + */ + virtual void addDimOrdinate(const DRW_DimOrdinate *) { } + + /** + * Called for every leader start. + */ + virtual void addLeader(const DRW_Leader *) { } + + /** + * Called for every hatch entity. + */ + virtual void addHatch(const DRW_Hatch *) { } + + /** + * Called for every viewport entity. + */ + virtual void addViewport(const DRW_Viewport &) { } + + /** + * Called for every image entity. + */ + virtual void addImage(const DRW_Image *) { } + + /** + * Called for every image definition. + */ + virtual void linkImage(const DRW_ImageDef *) { } + + /** + * Called for every comment in the DXF file (code 999). + */ + virtual void addComment(const char *) { } + + virtual void writeHeader(DRW_Header &) { } + virtual void writeBlocks() { } + virtual void writeBlockRecords() { } + virtual void writeEntities() { } + virtual void writeLTypes() { } + virtual void writeLayers() { } + virtual void writeTextstyles() { } + virtual void writeVports() { } + virtual void writeDimstyles() { } + virtual void writeAppId() { } +}; + +#endif diff --git a/extlib/libdxfrw/drw_objects.cpp b/extlib/libdxfrw/drw_objects.cpp new file mode 100644 index 0000000..e7a3e7b --- /dev/null +++ b/extlib/libdxfrw/drw_objects.cpp @@ -0,0 +1,1235 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include "drw_objects.h" +#include "intern/dxfreader.h" +#include "intern/dxfwriter.h" +#include "intern/dwgbuffer.h" +#include "intern/drw_dbg.h" +#include "intern/dwgutil.h" + +//! Base class for tables entries +/*! +* Base class for tables entries +* @author Rallaz +*/ +void DRW_TableEntry::parseCode(int code, dxfReader *reader){ + switch (code) { + case 5: + handle = reader->getHandleString(); + break; + case 330: + parentHandle = reader->getHandleString(); + break; + case 2: + name = reader->getUtf8String(); + break; + case 70: + flags = reader->getInt32(); + break; + case 1000: + case 1001: + case 1002: + case 1003: + case 1004: + case 1005: + extData.push_back(new DRW_Variant(code, reader->getString())); + break; + case 1010: + case 1011: + case 1012: + case 1013: + curr = new DRW_Variant(); + curr->addCoord(); + curr->setCoordX(reader->getDouble()); + curr->code = code; + extData.push_back(curr); + break; + case 1020: + case 1021: + case 1022: + case 1023: + if (curr) + curr->setCoordY(reader->getDouble()); + break; + case 1030: + case 1031: + case 1032: + case 1033: + if (curr) + curr->setCoordZ(reader->getDouble()); + curr=NULL; + break; + case 1040: + case 1041: + case 1042: + extData.push_back(new DRW_Variant(code, reader->getDouble())); + break; + case 1070: + case 1071: + extData.push_back(new DRW_Variant(code, reader->getInt32() )); + break; + default: + break; + } +} + +bool DRW_TableEntry::parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer *strBuf, duint32 bs){ +DRW_DBG("\n***************************** parsing table entry *********************************************\n"); + objSize=0; + oType = buf->getObjType(version); + DRW_DBG("Object type: "); DRW_DBG(oType); DRW_DBG(", "); DRW_DBGH(oType); + if (version > DRW::AC1014 && version < DRW::AC1024) {//2000 to 2007 + objSize = buf->getRawLong32(); //RL 32bits object size in bits + DRW_DBG(" Object size: "); DRW_DBG(objSize); DRW_DBG("\n"); + } + if (version > DRW::AC1021) {//2010+ + duint32 ms = buf->size(); + objSize = ms*8 - bs; + DRW_DBG(" Object size: "); DRW_DBG(objSize); DRW_DBG("\n"); + } + if (strBuf != NULL && version > DRW::AC1018) {//2007+ + strBuf->moveBitPos(objSize-1); + DRW_DBG(" strBuf strbit pos 2007: "); DRW_DBG(strBuf->getPosition()); DRW_DBG(" strBuf bpos 2007: "); DRW_DBG(strBuf->getBitPos()); DRW_DBG("\n"); + if (strBuf->getBit() == 1){ + DRW_DBG("DRW_TableEntry::parseDwg string bit is 1\n"); + strBuf->moveBitPos(-17); + duint16 strDataSize = strBuf->getRawShort16(); + DRW_DBG("\nDRW_TableEntry::parseDwg string strDataSize: "); DRW_DBGH(strDataSize); DRW_DBG("\n"); + if ( (strDataSize& 0x8000) == 0x8000){ + DRW_DBG("\nDRW_TableEntry::parseDwg string 0x8000 bit is set"); + strBuf->moveBitPos(-33);//RLZ pending to verify + duint16 hiSize = strBuf->getRawShort16(); + strDataSize = ((strDataSize&0x7fff) | (hiSize<<15)); + } + strBuf->moveBitPos( -strDataSize -16); //-14 + DRW_DBG("strBuf start strDataSize pos 2007: "); DRW_DBG(strBuf->getPosition()); DRW_DBG(" strBuf bpos 2007: "); DRW_DBG(strBuf->getBitPos()); DRW_DBG("\n"); + } else + DRW_DBG("\nDRW_TableEntry::parseDwg string bit is 0"); + DRW_DBG("strBuf start pos 2007: "); DRW_DBG(strBuf->getPosition()); DRW_DBG(" strBuf bpos 2007: "); DRW_DBG(strBuf->getBitPos()); DRW_DBG("\n"); + } + + dwgHandle ho = buf->getHandle(); + handle = ho.ref; + DRW_DBG("TableEntry Handle: "); DRW_DBGHL(ho.code, ho.size, ho.ref); + dint16 extDataSize = buf->getBitShort(); //BS + DRW_DBG(" ext data size: "); DRW_DBG(extDataSize); + while (extDataSize>0 && buf->isGood()) { + /* RLZ: TODO */ + dwgHandle ah = buf->getHandle(); + DRW_DBG("App Handle: "); DRW_DBGHL(ah.code, ah.size, ah.ref); + duint8 *tmpExtData = new duint8[extDataSize]; + buf->getBytes(tmpExtData, extDataSize); + dwgBuffer tmpExtDataBuf(tmpExtData, extDataSize, buf->decoder); + int pos = tmpExtDataBuf.getPosition(); + int bpos = tmpExtDataBuf.getBitPos(); + DRW_DBG("ext data pos: "); DRW_DBG(pos); DRW_DBG("."); DRW_DBG(bpos); DRW_DBG("\n"); + duint8 dxfCode = tmpExtDataBuf.getRawChar8(); + DRW_DBG(" dxfCode: "); DRW_DBG(dxfCode); + switch (dxfCode){ + case 0:{ + duint8 strLength = tmpExtDataBuf.getRawChar8(); + DRW_DBG(" strLength: "); DRW_DBG(strLength); + duint16 cp = tmpExtDataBuf.getBERawShort16(); + DRW_DBG(" str codepage: "); DRW_DBG(cp); + for (int i=0;i< strLength+1;i++) {//string length + null terminating char + duint8 dxfChar = tmpExtDataBuf.getRawChar8(); + DRW_DBG(" dxfChar: "); DRW_DBG(dxfChar); + } + break; + } + default: + /* RLZ: TODO */ + break; + } + DRW_DBG("ext data pos: "); DRW_DBG(tmpExtDataBuf.getPosition()); DRW_DBG("."); DRW_DBG(tmpExtDataBuf.getBitPos()); DRW_DBG("\n"); + delete[]tmpExtData; + extDataSize = buf->getBitShort(); //BS + DRW_DBG(" ext data size: "); DRW_DBG(extDataSize); + } //end parsing extData (EED) + if (version < DRW::AC1015) {//14- + objSize = buf->getRawLong32(); //RL 32bits size in bits + } + DRW_DBG(" objSize in bits: "); DRW_DBG(objSize); + + numReactors = buf->getBitLong(); //BL + DRW_DBG(", numReactors: "); DRW_DBG(numReactors); DRW_DBG("\n"); + if (version > DRW::AC1015) {//2004+ + xDictFlag = buf->getBit(); + DRW_DBG("xDictFlag: "); DRW_DBG(xDictFlag); + } + if (version > DRW::AC1024) {//2013+ + duint8 bd = buf->getBit(); + DRW_DBG(" Have binary data: "); DRW_DBG(bd); DRW_DBG("\n"); + } + return buf->isGood(); +} + +//! Class to handle dimstyle entries +/*! +* Class to handle ldim style symbol table entries +* @author Rallaz +*/ +void DRW_Dimstyle::parseCode(int code, dxfReader *reader){ + switch (code) { + case 105: + handle = reader->getHandleString(); + break; + case 3: + dimpost = reader->getUtf8String(); + break; + case 4: + dimapost = reader->getUtf8String(); + break; + case 5: + dimblk = reader->getUtf8String(); + break; + case 6: + dimblk1 = reader->getUtf8String(); + break; + case 7: + dimblk2 = reader->getUtf8String(); + break; + case 40: + dimscale = reader->getDouble(); + break; + case 41: + dimasz = reader->getDouble(); + break; + case 42: + dimexo = reader->getDouble(); + break; + case 43: + dimdli = reader->getDouble(); + break; + case 44: + dimexe = reader->getDouble(); + break; + case 45: + dimrnd = reader->getDouble(); + break; + case 46: + dimdle = reader->getDouble(); + break; + case 47: + dimtp = reader->getDouble(); + break; + case 48: + dimtm = reader->getDouble(); + break; + case 49: + dimfxl = reader->getDouble(); + break; + case 140: + dimtxt = reader->getDouble(); + break; + case 141: + dimcen = reader->getDouble(); + break; + case 142: + dimtsz = reader->getDouble(); + break; + case 143: + dimaltf = reader->getDouble(); + break; + case 144: + dimlfac = reader->getDouble(); + break; + case 145: + dimtvp = reader->getDouble(); + break; + case 146: + dimtfac = reader->getDouble(); + break; + case 147: + dimgap = reader->getDouble(); + break; + case 148: + dimaltrnd = reader->getDouble(); + break; + case 71: + dimtol = reader->getInt32(); + break; + case 72: + dimlim = reader->getInt32(); + break; + case 73: + dimtih = reader->getInt32(); + break; + case 74: + dimtoh = reader->getInt32(); + break; + case 75: + dimse1 = reader->getInt32(); + break; + case 76: + dimse2 = reader->getInt32(); + break; + case 77: + dimtad = reader->getInt32(); + break; + case 78: + dimzin = reader->getInt32(); + break; + case 79: + dimazin = reader->getInt32(); + break; + case 170: + dimalt = reader->getInt32(); + break; + case 171: + dimaltd = reader->getInt32(); + break; + case 172: + dimtofl = reader->getInt32(); + break; + case 173: + dimsah = reader->getInt32(); + break; + case 174: + dimtix = reader->getInt32(); + break; + case 175: + dimsoxd = reader->getInt32(); + break; + case 176: + dimclrd = reader->getInt32(); + break; + case 177: + dimclre = reader->getInt32(); + break; + case 178: + dimclrt = reader->getInt32(); + break; + case 179: + dimadec = reader->getInt32(); + break; + case 270: + dimunit = reader->getInt32(); + break; + case 271: + dimdec = reader->getInt32(); + break; + case 272: + dimtdec = reader->getInt32(); + break; + case 273: + dimaltu = reader->getInt32(); + break; + case 274: + dimalttd = reader->getInt32(); + break; + case 275: + dimaunit = reader->getInt32(); + break; + case 276: + dimfrac = reader->getInt32(); + break; + case 277: + dimlunit = reader->getInt32(); + break; + case 278: + dimdsep = reader->getInt32(); + break; + case 279: + dimtmove = reader->getInt32(); + break; + case 280: + dimjust = reader->getInt32(); + break; + case 281: + dimsd1 = reader->getInt32(); + break; + case 282: + dimsd2 = reader->getInt32(); + break; + case 283: + dimtolj = reader->getInt32(); + break; + case 284: + dimtzin = reader->getInt32(); + break; + case 285: + dimaltz = reader->getInt32(); + break; + case 286: + dimaltttz = reader->getInt32(); + break; + case 287: + dimfit = reader->getInt32(); + break; + case 288: + dimupt = reader->getInt32(); + break; + case 289: + dimatfit = reader->getInt32(); + break; + case 290: + dimfxlon = reader->getInt32(); + break; + case 340: + dimtxsty = reader->getUtf8String(); + break; + case 341: + dimldrblk = reader->getUtf8String(); + break; + case 342: + dimblk = reader->getUtf8String(); + break; + case 343: + dimblk1 = reader->getUtf8String(); + break; + case 344: + dimblk2 = reader->getUtf8String(); + break; + default: + DRW_TableEntry::parseCode(code, reader); + break; + } +} + +bool DRW_Dimstyle::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_TableEntry::parseDwg(version, buf, sBuf, bs); + DRW_DBG("\n***************************** parsing dimension style **************************************\n"); + if (!ret) + return ret; + name = sBuf->getVariableText(version, false); + DRW_DBG("dimension style name: "); DRW_DBG(name.c_str()); DRW_DBG("\n"); + +// handleObj = shpControlH.ref; + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + // RS crc; //RS */ + return buf->isGood(); +} + + +//! Class to handle line type entries +/*! +* Class to handle line type symbol table entries +* @author Rallaz +*/ +void DRW_LType::parseCode(int code, dxfReader *reader){ + switch (code) { + case 3: + desc = reader->getUtf8String(); + break; + case 73: + size = reader->getInt32(); + path.reserve(size); + break; + case 40: + length = reader->getDouble(); + break; + case 49: + path.push_back(reader->getDouble()); + pathIdx++; + break; +/* case 74: + haveShape = reader->getInt32(); + break;*/ + default: + DRW_TableEntry::parseCode(code, reader); + break; + } +} + +//! Update line type +/*! +* Update the size and length of line type acording to the path +* @author Rallaz +*/ +/*TODO: control max length permited */ +void DRW_LType::update(){ + double d =0; + size = path.size(); + for (int i = 0; i< size; i++){ + d += fabs(path.at(i)); + } + length = d; +} + +bool DRW_LType::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_TableEntry::parseDwg(version, buf, sBuf, bs); + DRW_DBG("\n***************************** parsing line type *********************************************\n"); + if (!ret) + return ret; + name = sBuf->getVariableText(version, false); + DRW_DBG("linetype name: "); DRW_DBG(name.c_str()); DRW_DBG("\n"); + flags = buf->getBit()<< 6; + DRW_DBG("flags: "); DRW_DBG(flags); + if (version > DRW::AC1018) {//2007+ + } else {//2004- //RLZ: verify in 2004, 2010 &2013 + dint16 xrefindex = buf->getBitShort(); + DRW_DBG(" xrefindex: "); DRW_DBG(xrefindex); + } + duint8 xdep = buf->getBit(); + DRW_DBG(" xdep: "); DRW_DBG(xdep); + flags |= xdep<< 4; + DRW_DBG(" flags: "); DRW_DBG(flags); + desc = sBuf->getVariableText(version, false); + DRW_DBG(" desc: "); DRW_DBG(desc.c_str()); + length = buf->getBitDouble(); + DRW_DBG(" pattern length: "); DRW_DBG(length); + char align = buf->getRawChar8(); + DRW_DBG(" align: "); DRW_DBG(std::string(&align, 1)); + size = buf->getRawChar8(); + DRW_DBG(" num dashes, size: "); DRW_DBG(size); + DRW_DBG("\n dashes:\n"); + bool haveStrArea = false; + for (int i=0; i< size; i++){ + path.push_back(buf->getBitDouble()); + /*int bs1 =*/ buf->getBitShort(); + /*double d1= */buf->getRawDouble(); + /*double d2=*/ buf->getRawDouble(); + /*double d3= */buf->getBitDouble(); + /*double d4= */buf->getBitDouble(); + int bs2 = buf->getBitShort(); + if((bs2 & 2) !=0) haveStrArea = true; + } + for (unsigned i=0; inumRemainingBytes()); DRW_DBG("\n"); + if (version < DRW::AC1021) { //2004- + duint8 strarea[256]; + buf->getBytes(strarea, 256); + DRW_DBG("string area 256 bytes:\n"); DRW_DBG(reinterpret_cast(strarea)); DRW_DBG("\n"); + } else { //2007+ + //first verify flag + if (haveStrArea) { + duint8 strarea[512]; + buf->getBytes(strarea, 512); + DRW_DBG("string area 512 bytes:\n"); DRW_DBG(reinterpret_cast(strarea)); DRW_DBG("\n"); + } else + DRW_DBG("string area 512 bytes not present\n"); + } + + if (version > DRW::AC1021) {//2007+ skip string area + DRW_DBG(" ltype end of object data pos 2010: "); DRW_DBG(buf->getPosition()); DRW_DBG(" strBuf bpos 2007: "); DRW_DBG(buf->getBitPos()); DRW_DBG("\n"); + } + if (version > DRW::AC1018) {//2007+ skip string area + buf->setPosition(objSize >> 3); + buf->setBitPos(objSize & 7); + } + + if (version > DRW::AC1021) {//2007+ skip string area + DRW_DBG(" ltype start of handles data pos 2010: "); DRW_DBG(buf->getPosition()); DRW_DBG(" strBuf bpos 2007: "); DRW_DBG(buf->getBitPos()); DRW_DBG("\n"); + } + + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + dwgHandle ltControlH = buf->getHandle(); + DRW_DBG("linetype control Handle: "); DRW_DBGHL(ltControlH.code, ltControlH.size, ltControlH.ref); + parentHandle = ltControlH.ref; + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + for (int i=0; i< numReactors;++i) { + dwgHandle reactorsH = buf->getHandle(); + DRW_DBG(" reactorsH control Handle: "); DRW_DBGHL(reactorsH.code, reactorsH.size, reactorsH.ref); DRW_DBG("\n"); + } + if (xDictFlag !=1){//linetype in 2004 seems not have XDicObjH or NULL handle + dwgHandle XDicObjH = buf->getHandle(); + DRW_DBG(" XDicObj control Handle: "); DRW_DBGHL(XDicObjH.code, XDicObjH.size, XDicObjH.ref); DRW_DBG("\n"); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + if(size>0){ + dwgHandle XRefH = buf->getHandle(); + DRW_DBG(" XRefH control Handle: "); DRW_DBGHL(XRefH.code, XRefH.size, XRefH.ref); DRW_DBG("\n"); + dwgHandle shpHandle = buf->getHandle(); + DRW_DBG(" shapeFile Handle: "); DRW_DBGHL(shpHandle.code, shpHandle.size, shpHandle.ref); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + dwgHandle shpHandle = buf->getHandle(); + DRW_DBG(" shapeFile +1 Handle ??: "); DRW_DBGHL(shpHandle.code, shpHandle.size, shpHandle.ref); DRW_DBG("\n"); + + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); +// RS crc; //RS */ + return buf->isGood(); +} + +//! Class to handle layer entries +/*! +* Class to handle layer symbol table entries +* @author Rallaz +*/ +void DRW_Layer::parseCode(int code, dxfReader *reader){ + switch (code) { + case 6: + lineType = reader->getUtf8String(); + break; + case 62: + color = reader->getInt32(); + break; + case 290: + plotF = reader->getBool(); + break; + case 370: + lWeight = DRW_LW_Conv::dxfInt2lineWidth(reader->getInt32()); + break; + case 390: + handlePlotS = reader->getString(); + break; + case 347: + handleMaterialS = reader->getString(); + break; + case 420: + color24 = reader->getInt32(); + break; + default: + DRW_TableEntry::parseCode(code, reader); + break; + } +} + +bool DRW_Layer::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_TableEntry::parseDwg(version, buf, sBuf, bs); + DRW_DBG("\n***************************** parsing layer *********************************************\n"); + if (!ret) + return ret; + name = sBuf->getVariableText(version, false); + DRW_DBG("layer name: "); DRW_DBG(name.c_str()); + + flags |= buf->getBit()<< 6;//layer have entity + if (version < DRW::AC1021) {//2004- + DRW_DBG(", xrefindex = "); DRW_DBG(buf->getBitShort()); DRW_DBG("\n"); + //dint16 xrefindex = buf->getBitShort(); + } + flags |= buf->getBit() << 4;//is refx dependent + if (version < DRW::AC1015) {//14- + flags |= buf->getBit(); //layer frozen + /*flags |=*/ buf->getBit(); //unused, negate the color + flags |= buf->getBit() << 1;//frozen in new + flags |= buf->getBit()<< 3;//locked + } + if (version > DRW::AC1014) {//2000+ + dint16 f = buf->getSBitShort();//bit2 are layer on + DRW_DBG(", flags 2000+: "); DRW_DBG(f); DRW_DBG("\n"); + flags |= f & 0x0001; //layer frozen + flags |= ( f>> 1) & 0x0002;//frozen in new + flags |= ( f>> 1) & 0x0004;//locked + plotF = ( f>> 4) & 0x0001; + lWeight = DRW_LW_Conv::dwgInt2lineWidth( (f & 0x03E0) >> 5 ); + } + color = buf->getCmColor(version); //BS or CMC //ok for R14 or negate + DRW_DBG(", entity color: "); DRW_DBG(color); DRW_DBG("\n"); + + if (version > DRW::AC1018) {//2007+ skip string area + buf->setPosition(objSize >> 3); + buf->setBitPos(objSize & 7); + } + dwgHandle layerControlH = buf->getHandle(); + DRW_DBG("layer control Handle: "); DRW_DBGHL(layerControlH.code, layerControlH.size, layerControlH.ref); + parentHandle = layerControlH.ref; + + if (xDictFlag !=1){//linetype in 2004 seems not have XDicObjH or NULL handle + dwgHandle XDicObjH = buf->getHandle(); + DRW_DBG(" XDicObj control Handle: "); DRW_DBGHL(XDicObjH.code, XDicObjH.size, XDicObjH.ref); DRW_DBG("\n"); + } + dwgHandle XRefH = buf->getHandle(); + DRW_DBG(" XRefH control Handle: "); DRW_DBGHL(XRefH.code, XRefH.size, XRefH.ref); DRW_DBG("\n"); + if (version > DRW::AC1014) {//2000+ + dwgHandle plotStyH = buf->getHandle(); + DRW_DBG(" PLot style control Handle: "); DRW_DBGHL(plotStyH.code, plotStyH.size, plotStyH.ref); DRW_DBG("\n"); + handlePlotS = DRW::toHexStr(plotStyH.ref);// std::string(plotStyH.ref);//RLZ: verify conversion + } + if (version > DRW::AC1018) {//2007+ + dwgHandle materialH = buf->getHandle(); + DRW_DBG(" Material control Handle: "); DRW_DBGHL(materialH.code, materialH.size, materialH.ref); DRW_DBG("\n"); + handleMaterialS = DRW::toHexStr(materialH.ref);//RLZ: verify conversion + } + //lineType handle + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + lTypeH = buf->getHandle(); + DRW_DBG("line type Handle: "); DRW_DBGHL(lTypeH.code, lTypeH.size, lTypeH.ref); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); +// RS crc; //RS */ + return buf->isGood(); +} + +bool DRW_Block_Record::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_TableEntry::parseDwg(version, buf, sBuf, bs); + DRW_DBG("\n***************************** parsing block record ******************************************\n"); + if (!ret) + return ret; + duint32 insertCount = 0;//only 2000+ + duint32 objectCount = 0; //only 2004+ + + name = sBuf->getVariableText(version, false); + DRW_DBG("block record name: "); DRW_DBG(name.c_str()); DRW_DBG("\n"); + + flags |= buf->getBit()<< 6;//referenced external reference, block code 70, bit 7 (64) + if (version > DRW::AC1018) {//2007+ + } else {//2004- //RLZ: verify in 2004, 2010 &2013 + dint16 xrefindex = buf->getBitShort(); + DRW_DBG(" xrefindex: "); DRW_DBG(xrefindex); DRW_DBG("\n"); + } + flags |= buf->getBit() << 4;//is refx dependent, block code 70, bit 5 (16) + flags |= buf->getBit(); //if is anonimous block (*U) block code 70, bit 1 (1) + flags |= buf->getBit() << 1; //if block contains attdefs, block code 70, bit 2 (2) + bool blockIsXref = buf->getBit(); //if is a Xref, block code 70, bit 3 (4) + bool xrefOverlaid = buf->getBit(); //if is a overlaid Xref, block code 70, bit 4 (8) + flags |= blockIsXref << 2; //if is a Xref, block code 70, bit 3 (4) + flags |= xrefOverlaid << 3; //if is a overlaid Xref, block code 70, bit 4 (8) + if (version > DRW::AC1014) {//2000+ + flags |= buf->getBit() << 5; //if is a loaded Xref, block code 70, bit 6 (32) + } + DRW_DBG("flags: "); DRW_DBG(flags); DRW_DBG(", "); + if (version > DRW::AC1015) {//2004+ fails in 2007 + objectCount = buf->getBitLong(); //Number of objects owned by this block + entMap.reserve(objectCount); + } + basePoint.x = buf->getBitDouble(); + basePoint.y = buf->getBitDouble(); + basePoint.z = buf->getBitDouble(); + DRW_DBG("insertion point: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); DRW_DBG("\n"); + UTF8STRING path = sBuf->getVariableText(version, false); + DRW_DBG("XRef path name: "); DRW_DBG(path.c_str()); DRW_DBG("\n"); + + if (version > DRW::AC1014) {//2000+ + insertCount = 0; + while (duint8 i = buf->getRawChar8() != 0) + insertCount +=i; + UTF8STRING bkdesc = sBuf->getVariableText(version, false); + DRW_DBG("Block description: "); DRW_DBG(bkdesc.c_str()); DRW_DBG("\n"); + + duint32 prevData = buf->getBitLong(); + for (unsigned int j= 0; j < prevData; ++j) + buf->getRawChar8(); + } + if (version > DRW::AC1018) {//2007+ + duint16 insUnits = buf->getBitShort(); + bool canExplode = buf->getBit(); //if block can be exploded + duint8 bkScaling = buf->getRawChar8(); + + DRW_UNUSED(insUnits); + DRW_UNUSED(canExplode); + DRW_UNUSED(bkScaling); + } + + if (version > DRW::AC1018) {//2007+ skip string area + buf->setPosition(objSize >> 3); + buf->setBitPos(objSize & 7); + } + + dwgHandle blockControlH = buf->getHandle(); + DRW_DBG("block control Handle: "); DRW_DBGHL(blockControlH.code, blockControlH.size, blockControlH.ref); DRW_DBG("\n"); + parentHandle = blockControlH.ref; + + for (int i=0; igetHandle(); + DRW_DBG(" reactor Handle #"); DRW_DBG(i); DRW_DBG(": "); DRW_DBGHL(reactorH.code, reactorH.size, reactorH.ref); DRW_DBG("\n"); + } + if (xDictFlag !=1) {//R14+ //seems present in 2000 + dwgHandle XDicObjH = buf->getHandle(); + DRW_DBG(" XDicObj control Handle: "); DRW_DBGHL(XDicObjH.code, XDicObjH.size, XDicObjH.ref); DRW_DBG("\n"); + } + if (version != DRW::AC1021) {//2007+ XDicObjH or NullH not present + } + dwgHandle NullH = buf->getHandle(); + DRW_DBG(" NullH control Handle: "); DRW_DBGHL(NullH.code, NullH.size, NullH.ref); DRW_DBG("\n"); + dwgHandle blockH = buf->getOffsetHandle(handle); + DRW_DBG(" blockH Handle: "); DRW_DBGHL(blockH.code, blockH.size, blockH.ref); DRW_DBG("\n"); + block = blockH.ref; + + if (version > DRW::AC1015) {//2004+ + for (unsigned int i=0; i< objectCount; i++){ + dwgHandle entityH = buf->getHandle(); + DRW_DBG(" entityH Handle #"); DRW_DBG(i); DRW_DBG(": "); DRW_DBGHL(entityH.code, entityH.size, entityH.ref); DRW_DBG("\n"); + entMap.push_back(entityH.ref); + } + } else {//2000- + if(!blockIsXref && !xrefOverlaid){ + dwgHandle firstH = buf->getHandle(); + DRW_DBG(" firstH entity Handle: "); DRW_DBGHL(firstH.code, firstH.size, firstH.ref); DRW_DBG("\n"); + firstEH = firstH.ref; + dwgHandle lastH = buf->getHandle(); + DRW_DBG(" lastH entity Handle: "); DRW_DBGHL(lastH.code, lastH.size, lastH.ref); DRW_DBG("\n"); + lastEH = lastH.ref; + } + } + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + dwgHandle endBlockH = buf->getOffsetHandle(handle); + DRW_DBG(" endBlockH Handle: "); DRW_DBGHL(endBlockH.code, endBlockH.size, endBlockH.ref); DRW_DBG("\n"); + endBlock = endBlockH.ref; + + if (version > DRW::AC1014) {//2000+ + for (unsigned int i=0; i< insertCount; i++){ + dwgHandle insertsH = buf->getHandle(); + DRW_DBG(" insertsH Handle #"); DRW_DBG(i); DRW_DBG(": "); DRW_DBGHL(insertsH.code, insertsH.size, insertsH.ref); DRW_DBG("\n"); + } + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + dwgHandle layoutH = buf->getHandle(); + DRW_DBG(" layoutH Handle: "); DRW_DBGHL(layoutH.code, layoutH.size, layoutH.ref); DRW_DBG("\n"); + } + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n\n"); +// RS crc; //RS */ + return buf->isGood(); +} + +//! Class to handle text style entries +/*! +* Class to handle text style symbol table entries +* @author Rallaz +*/ +void DRW_Textstyle::parseCode(int code, dxfReader *reader){ + switch (code) { + case 3: + font = reader->getUtf8String(); + break; + case 4: + bigFont = reader->getUtf8String(); + break; + case 40: + height = reader->getDouble(); + break; + case 41: + width = reader->getDouble(); + break; + case 50: + oblique = reader->getDouble(); + break; + case 42: + lastHeight = reader->getDouble(); + break; + case 71: + genFlag = reader->getInt32(); + break; + case 1071: + fontFamily = reader->getInt32(); + break; + default: + DRW_TableEntry::parseCode(code, reader); + break; + } +} + +bool DRW_Textstyle::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_TableEntry::parseDwg(version, buf, sBuf, bs); + DRW_DBG("\n***************************** parsing text style *********************************************\n"); + if (!ret) + return ret; + name = sBuf->getVariableText(version, false); + DRW_DBG("text style name: "); DRW_DBG(name.c_str()); DRW_DBG("\n"); + flags |= buf->getBit()<< 6;//style are referenced for a entity, style code 70, bit 7 (64) + /*dint16 xrefindex =*/ buf->getBitShort(); + flags |= buf->getBit() << 4; //is refx dependent, style code 70, bit 5 (16) + flags |= buf->getBit() << 2; //vertical text, stile code 70, bit 3 (4) + flags |= buf->getBit(); //if is a shape file instead of text, style code 70, bit 1 (1) + height = buf->getBitDouble(); + width = buf->getBitDouble(); + oblique = buf->getBitDouble(); + genFlag = buf->getRawChar8(); + lastHeight = buf->getBitDouble(); + font = sBuf->getVariableText(version, false); + bigFont = sBuf->getVariableText(version, false); + if (version > DRW::AC1018) {//2007+ skip string area + buf->setPosition(objSize >> 3); + buf->setBitPos(objSize & 7); + } + dwgHandle shpControlH = buf->getHandle(); + DRW_DBG(" parentControlH Handle: "); DRW_DBGHL(shpControlH.code, shpControlH.size, shpControlH.ref); DRW_DBG("\n"); + parentHandle = shpControlH.ref; + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + if (xDictFlag !=1){//linetype in 2004 seems not have XDicObjH or NULL handle + dwgHandle XDicObjH = buf->getHandle(); + DRW_DBG(" XDicObj control Handle: "); DRW_DBGHL(XDicObjH.code, XDicObjH.size, XDicObjH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } +/*RLZ: fails verify this part*/ dwgHandle XRefH = buf->getHandle(); + DRW_DBG(" XRefH control Handle: "); DRW_DBGHL(XRefH.code, XRefH.size, XRefH.ref); DRW_DBG("\n"); + + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n\n"); + // RS crc; //RS */ + return buf->isGood(); +} + +//! Class to handle vport entries +/*! +* Class to handle vport symbol table entries +* @author Rallaz +*/ +void DRW_Vport::parseCode(int code, dxfReader *reader){ + switch (code) { + case 10: + lowerLeft.x = reader->getDouble(); + break; + case 20: + lowerLeft.y = reader->getDouble(); + break; + case 11: + UpperRight.x = reader->getDouble(); + break; + case 21: + UpperRight.y = reader->getDouble(); + break; + case 12: + center.x = reader->getDouble(); + break; + case 22: + center.y = reader->getDouble(); + break; + case 13: + snapBase.x = reader->getDouble(); + break; + case 23: + snapBase.y = reader->getDouble(); + break; + case 14: + snapSpacing.x = reader->getDouble(); + break; + case 24: + snapSpacing.y = reader->getDouble(); + break; + case 15: + gridSpacing.x = reader->getDouble(); + break; + case 25: + gridSpacing.y = reader->getDouble(); + break; + case 16: + viewDir.x = reader->getDouble(); + break; + case 26: + viewDir.y = reader->getDouble(); + break; + case 36: + viewDir.z = reader->getDouble(); + break; + case 17: + viewTarget.x = reader->getDouble(); + break; + case 27: + viewTarget.y = reader->getDouble(); + break; + case 37: + viewTarget.z = reader->getDouble(); + break; + case 40: + height = reader->getDouble(); + break; + case 41: + ratio = reader->getDouble(); + break; + case 42: + lensHeight = reader->getDouble(); + break; + case 43: + frontClip = reader->getDouble(); + break; + case 44: + backClip = reader->getDouble(); + break; + case 50: + snapAngle = reader->getDouble(); + break; + case 51: + twistAngle = reader->getDouble(); + break; + case 71: + viewMode = reader->getInt32(); + break; + case 72: + circleZoom = reader->getInt32(); + break; + case 73: + fastZoom = reader->getInt32(); + break; + case 74: + ucsIcon = reader->getInt32(); + break; + case 75: + snap = reader->getInt32(); + break; + case 76: + grid = reader->getInt32(); + break; + case 77: + snapStyle = reader->getInt32(); + break; + case 78: + snapIsopair = reader->getInt32(); + break; + default: + DRW_TableEntry::parseCode(code, reader); + break; + } +} + +bool DRW_Vport::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_TableEntry::parseDwg(version, buf, sBuf, bs); + DRW_DBG("\n***************************** parsing VPort ************************************************\n"); + if (!ret) + return ret; + name = sBuf->getVariableText(version, false); + DRW_DBG("vport name: "); DRW_DBG(name.c_str()); DRW_DBG("\n"); + flags |= buf->getBit()<< 6;// code 70, bit 7 (64) + if (version < DRW::AC1021) { //2004- + /*dint16 xrefindex =*/ buf->getBitShort(); + } + flags |= buf->getBit() << 4; //is refx dependent, style code 70, bit 5 (16) + height = buf->getBitDouble(); + ratio = buf->getBitDouble(); + DRW_DBG("flags: "); DRW_DBG(flags); DRW_DBG(" height: "); DRW_DBG(height); + DRW_DBG(" ratio: "); DRW_DBG(ratio); + center = buf->get2RawDouble(); + DRW_DBG("\nview center: "); DRW_DBGPT(center.x, center.y, center.z); + viewTarget.x = buf->getBitDouble(); + viewTarget.y = buf->getBitDouble(); + viewTarget.z = buf->getBitDouble(); + DRW_DBG("\nview target: "); DRW_DBGPT(viewTarget.x, viewTarget.y, viewTarget.z); + viewDir.x = buf->getBitDouble(); + viewDir.y = buf->getBitDouble(); + viewDir.z = buf->getBitDouble(); + DRW_DBG("\nview dir: "); DRW_DBGPT(viewDir.x, viewDir.y, viewDir.z); + twistAngle = buf->getBitDouble(); + lensHeight = buf->getBitDouble(); + frontClip = buf->getBitDouble(); + backClip = buf->getBitDouble(); + DRW_DBG("\ntwistAngle: "); DRW_DBG(twistAngle); DRW_DBG(" lensHeight: "); DRW_DBG(lensHeight); + DRW_DBG(" frontClip: "); DRW_DBG(frontClip); DRW_DBG(" backClip: "); DRW_DBG(backClip); + viewMode = buf->getBit(); //view mode, code 71, bit 0 (1) + viewMode |= buf->getBit() << 1; //view mode, code 71, bit 1 (2) + viewMode |= buf->getBit() << 2; //view mode, code 71, bit 2 (4) + viewMode |= buf->getBit() << 4; //view mode, code 71, bit 4 (16) + if (version > DRW::AC1014) { //2000+ + //duint8 renderMode = buf->getRawChar8(); + DRW_DBG("\n renderMode: "); DRW_DBG(buf->getRawChar8()); + if (version > DRW::AC1018) { //2007+ + DRW_DBG("\n use default lights: "); DRW_DBG(buf->getBit()); + DRW_DBG(" default lighting type: "); DRW_DBG(buf->getRawChar8()); + DRW_DBG(" brightness: "); DRW_DBG(buf->getBitDouble()); + DRW_DBG("\n contrast: "); DRW_DBG(buf->getBitDouble()); DRW_DBG("\n"); + DRW_DBG(" ambient color CMC: "); DRW_DBG(buf->getCmColor(version)); + } + } + lowerLeft = buf->get2RawDouble(); + DRW_DBG("\nlowerLeft: "); DRW_DBGPT(lowerLeft.x, lowerLeft.y, lowerLeft.z); + UpperRight = buf->get2RawDouble(); + DRW_DBG("\nUpperRight: "); DRW_DBGPT(UpperRight.x, UpperRight.y, UpperRight.z); + viewMode |= buf->getBit() << 3; //UCSFOLLOW, view mode, code 71, bit 3 (8) + circleZoom = buf->getBitShort(); + fastZoom = buf->getBit(); + DRW_DBG("\nviewMode: "); DRW_DBG(viewMode); DRW_DBG(" circleZoom: "); + DRW_DBG(circleZoom); DRW_DBG(" fastZoom: "); DRW_DBG(fastZoom); + ucsIcon = buf->getBit(); //ucs Icon, code 74, bit 0 (1) + ucsIcon |= buf->getBit() << 1; //ucs Icon, code 74, bit 1 (2) + grid = buf->getBit(); + DRW_DBG("\nucsIcon: "); DRW_DBG(ucsIcon); DRW_DBG(" grid: "); DRW_DBG(grid); + gridSpacing = buf->get2RawDouble(); + DRW_DBG("\ngrid Spacing: "); DRW_DBGPT(gridSpacing.x, gridSpacing.y, gridSpacing.z); + snap = buf->getBit(); + snapStyle = buf->getBit(); + DRW_DBG("\nsnap on/off: "); DRW_DBG(snap); DRW_DBG(" snap Style: "); DRW_DBG(snapStyle); + snapIsopair = buf->getBitShort(); + snapAngle = buf->getBitDouble(); + DRW_DBG("\nsnap Isopair: "); DRW_DBG(snapIsopair); DRW_DBG(" snap Angle: "); DRW_DBG(snapAngle); + snapBase = buf->get2RawDouble(); + DRW_DBG("\nsnap Base: "); DRW_DBGPT(snapBase.x, snapBase.y, snapBase.z); + snapSpacing = buf->get2RawDouble(); + DRW_DBG("\nsnap Spacing: "); DRW_DBGPT(snapSpacing.x, snapSpacing.y, snapSpacing.z); + if (version > DRW::AC1014) { //2000+ + DRW_DBG("\n Unknown: "); DRW_DBG(buf->getBit()); + DRW_DBG(" UCS per Viewport: "); DRW_DBG(buf->getBit()); + DRW_DBG("\nUCS origin: "); DRW_DBGPT(buf->getBitDouble(), buf->getBitDouble(), buf->getBitDouble()); + DRW_DBG("\nUCS X Axis: "); DRW_DBGPT(buf->getBitDouble(), buf->getBitDouble(), buf->getBitDouble()); + DRW_DBG("\nUCS Y Axis: "); DRW_DBGPT(buf->getBitDouble(), buf->getBitDouble(), buf->getBitDouble()); + DRW_DBG("\nUCS elevation: "); DRW_DBG(buf->getBitDouble()); + DRW_DBG(" UCS Orthographic type: "); DRW_DBG(buf->getBitShort()); + if (version > DRW::AC1018) { //2007+ + gridBehavior = buf->getBitShort(); + DRW_DBG(" gridBehavior (flags): "); DRW_DBG(gridBehavior); + DRW_DBG(" Grid major: "); DRW_DBG(buf->getBitShort()); + } + } + + //common handles + if (version > DRW::AC1018) {//2007+ skip string area + buf->setPosition(objSize >> 3); + buf->setBitPos(objSize & 7); + } + dwgHandle vpControlH = buf->getHandle(); + DRW_DBG("\n parentControlH Handle: "); DRW_DBGHL(vpControlH.code, vpControlH.size, vpControlH.ref); DRW_DBG("\n"); + parentHandle = vpControlH.ref; + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + if (xDictFlag !=1){ + dwgHandle XDicObjH = buf->getHandle(); + DRW_DBG(" XDicObj control Handle: "); DRW_DBGHL(XDicObjH.code, XDicObjH.size, XDicObjH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } +/*RLZ: fails verify this part*/ dwgHandle XRefH = buf->getHandle(); + DRW_DBG(" XRefH control Handle: "); DRW_DBGHL(XRefH.code, XRefH.size, XRefH.ref); + + if (version > DRW::AC1014) { //2000+ + DRW_DBG("\nRemaining bytes: "); DRW_DBG(buf->numRemainingBytes()); + if (version > DRW::AC1018) { //2007+ + dwgHandle bkgrdH = buf->getHandle(); + DRW_DBG(" background Handle: "); DRW_DBGHL(bkgrdH.code, bkgrdH.size, bkgrdH.ref); + DRW_DBG("\nRemaining bytes: "); DRW_DBG(buf->numRemainingBytes()); + dwgHandle visualStH = buf->getHandle(); + DRW_DBG(" visual style Handle: "); DRW_DBGHL(visualStH.code, visualStH.size, visualStH.ref); + DRW_DBG("\nRemaining bytes: "); DRW_DBG(buf->numRemainingBytes()); + dwgHandle sunH = buf->getHandle(); + DRW_DBG(" sun Handle: "); DRW_DBGHL(sunH.code, sunH.size, sunH.ref); + DRW_DBG("\nRemaining bytes: "); DRW_DBG(buf->numRemainingBytes()); + } + dwgHandle namedUCSH = buf->getHandle(); + DRW_DBG(" named UCS Handle: "); DRW_DBGHL(namedUCSH.code, namedUCSH.size, namedUCSH.ref); + DRW_DBG("\nRemaining bytes: "); DRW_DBG(buf->numRemainingBytes()); + dwgHandle baseUCSH = buf->getHandle(); + DRW_DBG(" base UCS Handle: "); DRW_DBGHL(baseUCSH.code, baseUCSH.size, baseUCSH.ref); + } + + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + // RS crc; //RS */ + return buf->isGood(); +} + +void DRW_ImageDef::parseCode(int code, dxfReader *reader){ + switch (code) { + case 1: + name = reader->getUtf8String(); + break; + case 5: + handle = reader->getHandleString(); + break; + case 10: + u = reader->getDouble(); + break; + case 20: + v = reader->getDouble(); + break; + case 11: + up = reader->getDouble(); + break; + case 12: + vp = reader->getDouble(); + break; + case 21: + vp = reader->getDouble(); + break; + case 280: + loaded = reader->getInt32(); + break; + case 281: + resolution = reader->getInt32(); + break; + default: + break; + } +} + +bool DRW_ImageDef::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_TableEntry::parseDwg(version, buf, sBuf, bs); + DRW_DBG("\n***************************** parsing Image Def *********************************************\n"); + if (!ret) + return ret; + dint32 imgVersion = buf->getBitLong(); + DRW_DBG("class Version: "); DRW_DBG(imgVersion); + DRW_Coord size = buf->get2RawDouble(); + (void)size; + name = sBuf->getVariableText(version, false); + DRW_DBG("appId name: "); DRW_DBG(name.c_str()); DRW_DBG("\n"); + loaded = buf->getBit(); + resolution = buf->getRawChar8(); + up = buf->getRawDouble(); + vp = buf->getRawDouble(); + + dwgHandle parentH = buf->getHandle(); + DRW_DBG(" parentH Handle: "); DRW_DBGHL(parentH.code, parentH.size, parentH.ref); DRW_DBG("\n"); + parentHandle = parentH.ref; + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + //RLZ: Reactors handles + if (xDictFlag !=1){ + dwgHandle XDicObjH = buf->getHandle(); + DRW_DBG(" XDicObj control Handle: "); DRW_DBGHL(XDicObjH.code, XDicObjH.size, XDicObjH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } +/*RLZ: fails verify this part*/ dwgHandle XRefH = buf->getHandle(); + DRW_DBG(" XRefH control Handle: "); DRW_DBGHL(XRefH.code, XRefH.size, XRefH.ref); DRW_DBG("\n"); + + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n\n"); + // RS crc; //RS */ + return buf->isGood(); +} + +bool DRW_AppId::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_TableEntry::parseDwg(version, buf, sBuf, bs); + DRW_DBG("\n***************************** parsing app Id *********************************************\n"); + if (!ret) + return ret; + name = sBuf->getVariableText(version, false); + DRW_DBG("appId name: "); DRW_DBG(name.c_str()); DRW_DBG("\n"); + flags |= buf->getBit()<< 6;// code 70, bit 7 (64) + /*dint16 xrefindex =*/ buf->getBitShort(); + flags |= buf->getBit() << 4; //is refx dependent, style code 70, bit 5 (16) + duint8 unknown = buf->getRawChar8(); // unknown code 71 + DRW_DBG("unknown code 71: "); DRW_DBG(unknown); DRW_DBG("\n"); + if (version > DRW::AC1018) {//2007+ skip string area + buf->setPosition(objSize >> 3); + buf->setBitPos(objSize & 7); + } + dwgHandle appIdControlH = buf->getHandle(); + DRW_DBG(" parentControlH Handle: "); DRW_DBGHL(appIdControlH.code, appIdControlH.size, appIdControlH.ref); DRW_DBG("\n"); + parentHandle = appIdControlH.ref; + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + if (xDictFlag !=1){//linetype in 2004 seems not have XDicObjH or NULL handle + dwgHandle XDicObjH = buf->getHandle(); + DRW_DBG(" XDicObj control Handle: "); DRW_DBGHL(XDicObjH.code, XDicObjH.size, XDicObjH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } +/*RLZ: fails verify this part*/ dwgHandle XRefH = buf->getHandle(); + DRW_DBG(" XRefH control Handle: "); DRW_DBGHL(XRefH.code, XRefH.size, XRefH.ref); DRW_DBG("\n"); + + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n\n"); + // RS crc; //RS */ + return buf->isGood(); +} diff --git a/extlib/libdxfrw/drw_objects.h b/extlib/libdxfrw/drw_objects.h new file mode 100644 index 0000000..07cba08 --- /dev/null +++ b/extlib/libdxfrw/drw_objects.h @@ -0,0 +1,772 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DRW_OBJECTS_H +#define DRW_OBJECTS_H + + +#include +#include +#include +#include "drw_base.h" + +class dxfReader; +class dxfWriter; +class dwgBuffer; + +namespace DRW { + +//! Table entries type. + enum TTYPE { + UNKNOWNT, + LTYPE, + LAYER, + STYLE, + DIMSTYLE, + VPORT, + BLOCK_RECORD, + APPID, + IMAGEDEF + }; + +//pending VIEW, UCS, APPID, VP_ENT_HDR, GROUP, MLINESTYLE, LONG_TRANSACTION, XRECORD, +//ACDBPLACEHOLDER, VBA_PROJECT, ACAD_TABLE, CELLSTYLEMAP, DBCOLOR, DICTIONARYVAR, +//DICTIONARYWDFLT, FIELD, IDBUFFER, IMAGEDEF, IMAGEDEFREACTOR, LAYER_INDEX, LAYOUT +//MATERIAL, PLACEHOLDER, PLOTSETTINGS, RASTERVARIABLES, SCALE, SORTENTSTABLE, +//SPATIAL_INDEX, SPATIAL_FILTER, TABLEGEOMETRY, TABLESTYLES,VISUALSTYLE, +} + +#define SETOBJFRIENDS friend class dxfRW; \ + friend class dwgReader; + +//! Base class for tables entries +/*! +* Base class for tables entries +* @author Rallaz +*/ +class DRW_TableEntry { +public: + //initializes default values + DRW_TableEntry() { + tType = DRW::UNKNOWNT; + flags = 0; + numReactors = xDictFlag = 0; + parentHandle = 0; + curr = NULL; + } + + virtual~DRW_TableEntry() { + for (std::vector::iterator it=extData.begin(); it!=extData.end(); ++it) + delete *it; + + extData.clear(); + } + + DRW_TableEntry(const DRW_TableEntry& e) { + tType = e.tType; + handle = e.handle; + parentHandle = e.parentHandle; + name = e.name; + flags = e.flags; + numReactors = e.numReactors; + xDictFlag = e.xDictFlag; + curr = e.curr; + for (std::vector::const_iterator it=e.extData.begin(); it!=e.extData.end(); ++it){ + extData.push_back(new DRW_Variant(*(*it))); + } + } + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0) = 0; + bool parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer* strBuf, duint32 bs=0); + void reset(){ + flags =0; + for (std::vector::iterator it=extData.begin(); it!=extData.end(); ++it) + delete *it; + extData.clear(); + } + +public: + enum DRW::TTYPE tType; /*!< enum: entity type, code 0 */ + duint32 handle; /*!< entity identifier, code 5 */ + int parentHandle; /*!< Soft-pointer ID/handle to owner object, code 330 */ + UTF8STRING name; /*!< entry name, code 2 */ + int flags; /*!< Flags relevant to entry, code 70 */ + std::vector extData; /*!< FIFO list of extended data, codes 1000 to 1071*/ + +private: + DRW_Variant* curr; + + //***** dwg parse ********/ +protected: + dint16 oType; + duint8 xDictFlag; + dint32 numReactors; // + duint32 objSize; //RL 32bits object data size in bits +}; + + +//! Class to handle dimstyle entries +/*! +* Class to handle dim style symbol table entries +* @author Rallaz +*/ +class DRW_Dimstyle : public DRW_TableEntry { + SETOBJFRIENDS +public: + DRW_Dimstyle() { reset();} + + void reset(){ + tType = DRW::DIMSTYLE; + dimasz = dimtxt = dimcen = 2.5; + dimexe = 1.25; + dimexo = dimgap = 0.625; + dimtxsty = ""; + dimscale = dimlfac = dimtfac = dimfxl = 1.0; + dimdli = 3.75; + dimrnd = dimdle = dimtp = dimtm = dimtsz = dimtvp = 0.0; + dimaltf = 1.0 / 25.4; + dimtol = dimlim = dimse1 = dimse2 = 0; + dimtad = 1; + dimzin = 8; + dimtoh = dimtolj = 0; + dimalt = dimsah = dimtix = dimsoxd = dimfxlon = 0; + dimtofl = 1; + dimunit = dimaltu = dimlunit = 2; + dimaltd = dimalttd = 3; + dimclrd = dimclre = dimclrt = dimjust = dimupt = 0; + dimtzin = 8; + dimazin = dimaltz = dimaltttz = dimfrac = 0; + dimtih = dimadec = dimaunit = dimsd1 = dimsd2 = dimtmove = 0; + dimaltrnd = 0.0; + dimdec = dimtdec = 2; + dimfit = dimatfit = 3; + dimdsep = ','; + dimlwd = dimlwe = -2; + DRW_TableEntry::reset(); + } + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + //V12 + UTF8STRING dimpost; /*!< code 3 */ + UTF8STRING dimapost; /*!< code 4 */ +/* handle are code 105 */ + UTF8STRING dimblk; /*!< code 5, code 342 V2000+ */ + UTF8STRING dimblk1; /*!< code 6, code 343 V2000+ */ + UTF8STRING dimblk2; /*!< code 7, code 344 V2000+ */ + double dimscale; /*!< code 40 */ + double dimasz; /*!< code 41 */ + double dimexo; /*!< code 42 */ + double dimdli; /*!< code 43 */ + double dimexe; /*!< code 44 */ + double dimrnd; /*!< code 45 */ + double dimdle; /*!< code 46 */ + double dimtp; /*!< code 47 */ + double dimtm; /*!< code 48 */ + double dimfxl; /*!< code 49 V2007+ */ + double dimtxt; /*!< code 140 */ + double dimcen; /*!< code 141 */ + double dimtsz; /*!< code 142 */ + double dimaltf; /*!< code 143 */ + double dimlfac; /*!< code 144 */ + double dimtvp; /*!< code 145 */ + double dimtfac; /*!< code 146 */ + double dimgap; /*!< code 147 */ + double dimaltrnd; /*!< code 148 V2000+ */ + int dimtol; /*!< code 71 */ + int dimlim; /*!< code 72 */ + int dimtih; /*!< code 73 */ + int dimtoh; /*!< code 74 */ + int dimse1; /*!< code 75 */ + int dimse2; /*!< code 76 */ + int dimtad; /*!< code 77 */ + int dimzin; /*!< code 78 */ + int dimazin; /*!< code 79 V2000+ */ + int dimalt; /*!< code 170 */ + int dimaltd; /*!< code 171 */ + int dimtofl; /*!< code 172 */ + int dimsah; /*!< code 173 */ + int dimtix; /*!< code 174 */ + int dimsoxd; /*!< code 175 */ + int dimclrd; /*!< code 176 */ + int dimclre; /*!< code 177 */ + int dimclrt; /*!< code 178 */ + int dimadec; /*!< code 179 V2000+ */ + int dimunit; /*!< code 270 R13+ (obsolete 2000+, use dimlunit & dimfrac) */ + int dimdec; /*!< code 271 R13+ */ + int dimtdec; /*!< code 272 R13+ */ + int dimaltu; /*!< code 273 R13+ */ + int dimalttd; /*!< code 274 R13+ */ + int dimaunit; /*!< code 275 R13+ */ + int dimfrac; /*!< code 276 V2000+ */ + int dimlunit; /*!< code 277 V2000+ */ + int dimdsep; /*!< code 278 V2000+ */ + int dimtmove; /*!< code 279 V2000+ */ + int dimjust; /*!< code 280 R13+ */ + int dimsd1; /*!< code 281 R13+ */ + int dimsd2; /*!< code 282 R13+ */ + int dimtolj; /*!< code 283 R13+ */ + int dimtzin; /*!< code 284 R13+ */ + int dimaltz; /*!< code 285 R13+ */ + int dimaltttz; /*!< code 286 R13+ */ + int dimfit; /*!< code 287 R13+ (obsolete 2000+, use dimatfit & dimtmove)*/ + int dimupt; /*!< code 288 R13+ */ + int dimatfit; /*!< code 289 V2000+ */ + int dimfxlon; /*!< code 290 V2007+ */ + UTF8STRING dimtxsty; /*!< code 340 R13+ */ + UTF8STRING dimldrblk; /*!< code 341 V2000+ */ + int dimlwd; /*!< code 371 V2000+ */ + int dimlwe; /*!< code 372 V2000+ */ +}; + + +//! Class to handle line type entries +/*! +* Class to handle line type symbol table entries +* @author Rallaz +*/ +/*TODO: handle complex lineType*/ +class DRW_LType : public DRW_TableEntry { + SETOBJFRIENDS +public: + DRW_LType() { reset();} + + void reset(){ + tType = DRW::LTYPE; + desc = ""; + size = 0; + length = 0.0; + pathIdx = 0; + DRW_TableEntry::reset(); + } + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + void update(); + +public: + UTF8STRING desc; /*!< descriptive string, code 3 */ +// int align; /*!< align code, always 65 ('A') code 72 */ + int size; /*!< element number, code 73 */ + double length; /*!< total length of pattern, code 40 */ +// int haveShape; /*!< complex linetype type, code 74 */ + std::vector path; /*!< trace, point or space length sequence, code 49 */ +private: + int pathIdx; +}; + + +//! Class to handle layer entries +/*! +* Class to handle layer symbol table entries +* @author Rallaz +*/ +class DRW_Layer : public DRW_TableEntry { + SETOBJFRIENDS +public: + DRW_Layer() { reset();} + + void reset() { + tType = DRW::LAYER; + lineType = "CONTINUOUS"; + color = 7; // default BYLAYER (256) + plotF = true; // default TRUE (plot yes) + lWeight = DRW_LW_Conv::widthDefault; // default BYDEFAULT (dxf -3, dwg 31) + color24 = -1; //default -1 not set + DRW_TableEntry::reset(); + } + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + UTF8STRING lineType; /*!< line type, code 6 */ + int color; /*!< layer color, code 62 */ + int color24; /*!< 24-bit color, code 420 */ + bool plotF; /*!< Plot flag, code 290 */ + enum DRW_LW_Conv::lineWidth lWeight; /*!< layer lineweight, code 370 */ + std::string handlePlotS; /*!< Hard-pointer ID/handle of plotstyle, code 390 */ + std::string handleMaterialS; /*!< Hard-pointer ID/handle of materialstyle, code 347 */ +/*only used for read dwg*/ + dwgHandle lTypeH; +}; + +//! Class to handle block record entries +/*! +* Class to handle block record table entries +* @author Rallaz +*/ +class DRW_Block_Record : public DRW_TableEntry { + SETOBJFRIENDS +public: + DRW_Block_Record() { reset();} + void reset() { + tType = DRW::BLOCK_RECORD; + flags = 0; + firstEH = lastEH = DRW::NoHandle; + DRW_TableEntry::reset(); + } + +protected: +// void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: +//Note: int DRW_TableEntry::flags; contains code 70 of block + int insUnits; /*!< block insertion units, code 70 of block_record*/ + DRW_Coord basePoint; /*!< block insertion base point dwg only */ +protected: + //dwg parser +private: + duint32 block; //handle for block entity + duint32 endBlock;//handle for end block entity + duint32 firstEH; //handle of first entity, only in pre-2004 + duint32 lastEH; //handle of last entity, only in pre-2004 + std::vectorentMap; +}; + +//! Class to handle text style entries +/*! +* Class to handle text style symbol table entries +* @author Rallaz +*/ +class DRW_Textstyle : public DRW_TableEntry { + SETOBJFRIENDS +public: + DRW_Textstyle() { reset();} + + void reset(){ + tType = DRW::STYLE; + height = oblique = 0.0; + width = lastHeight = 1.0; + font="txt"; + genFlag = 0; //2= X mirror, 4= Y mirror + fontFamily = 0; + DRW_TableEntry::reset(); + } + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + double height; /*!< Fixed text height (0 not set), code 40 */ + double width; /*!< Width factor, code 41 */ + double oblique; /*!< Oblique angle, code 50 */ + int genFlag; /*!< Text generation flags, code 71 */ + double lastHeight; /*!< Last height used, code 42 */ + UTF8STRING font; /*!< primary font file name, code 3 */ + UTF8STRING bigFont; /*!< bigfont file name or blank if none, code 4 */ + int fontFamily; /*!< ttf font family, italic and bold flags, code 1071 */ +}; + +//! Class to handle vport entries +/*! +* Class to handle vport symbol table entries +* @author Rallaz +*/ +class DRW_Vport : public DRW_TableEntry { + SETOBJFRIENDS +public: + DRW_Vport() { reset();} + + void reset(){ + tType = DRW::VPORT; + UpperRight.x = UpperRight.y = 1.0; + snapSpacing.x = snapSpacing.y = 10.0; + gridSpacing = snapSpacing; + center.x = 0.651828; + center.y = -0.16; + viewDir.z = 1; + height = 5.13732; + ratio = 2.4426877; + lensHeight = 50; + frontClip = backClip = snapAngle = twistAngle = 0.0; + viewMode = snap = grid = snapStyle = snapIsopair = 0; + fastZoom = 1; + circleZoom = 100; + ucsIcon = 3; + gridBehavior = 7; + DRW_TableEntry::reset(); + } + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + DRW_Coord lowerLeft; /*!< Lower left corner, code 10 & 20 */ + DRW_Coord UpperRight; /*!< Upper right corner, code 11 & 21 */ + DRW_Coord center; /*!< center point in WCS, code 12 & 22 */ + DRW_Coord snapBase; /*!< snap base point in DCS, code 13 & 23 */ + DRW_Coord snapSpacing; /*!< snap Spacing, code 14 & 24 */ + DRW_Coord gridSpacing; /*!< grid Spacing, code 15 & 25 */ + DRW_Coord viewDir; /*!< view direction from target point, code 16, 26 & 36 */ + DRW_Coord viewTarget; /*!< view target point, code 17, 27 & 37 */ + double height; /*!< view height, code 40 */ + double ratio; /*!< viewport aspect ratio, code 41 */ + double lensHeight; /*!< lens height, code 42 */ + double frontClip; /*!< front clipping plane, code 43 */ + double backClip; /*!< back clipping plane, code 44 */ + double snapAngle; /*!< snap rotation angle, code 50 */ + double twistAngle; /*!< view twist angle, code 51 */ + int viewMode; /*!< view mode, code 71 */ + int circleZoom; /*!< circle zoom percent, code 72 */ + int fastZoom; /*!< fast zoom setting, code 73 */ + int ucsIcon; /*!< UCSICON setting, code 74 */ + int snap; /*!< snap on/off, code 75 */ + int grid; /*!< grid on/off, code 76 */ + int snapStyle; /*!< snap style, code 77 */ + int snapIsopair; /*!< snap isopair, code 78 */ + int gridBehavior; /*!< grid behavior, code 60, undocummented */ + /** code 60, bit coded possible value are + * bit 1 (1) show out of limits + * bit 2 (2) adaptive grid + * bit 3 (4) allow subdivision + * bit 4 (8) follow dinamic SCP + **/ +}; + + +//! Class to handle imagedef entries +/*! +* Class to handle image definitions object entries +* @author Rallaz +*/ +class DRW_ImageDef : public DRW_TableEntry {// + SETOBJFRIENDS +public: + DRW_ImageDef() { + reset(); + } + + void reset(){ + tType = DRW::IMAGEDEF; + imgVersion = 0; + DRW_TableEntry::reset(); + } + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: +// std::string handle; /*!< entity identifier, code 5 */ + UTF8STRING name; /*!< File name of image, code 1 */ + int imgVersion; /*!< class version, code 90, 0=R14 version */ + double u; /*!< image size in pixels U value, code 10 */ + double v; /*!< image size in pixels V value, code 20 */ + double up; /*!< default size of one pixel U value, code 11 */ + double vp; /*!< default size of one pixel V value, code 12 really is 21*/ + int loaded; /*!< image is loaded flag, code 280, 0=unloaded, 1=loaded */ + int resolution; /*!< resolution units, code 281, 0=no, 2=centimeters, 5=inch */ + + std::map reactors; +}; + +//! Class to handle AppId entries +/*! +* Class to handle AppId symbol table entries +* @author Rallaz +*/ +class DRW_AppId : public DRW_TableEntry { + SETOBJFRIENDS +public: + DRW_AppId() { reset();} + + void reset(){ + tType = DRW::APPID; + flags = 0; + name = ""; + } + +protected: + void parseCode(int code, dxfReader *reader){DRW_TableEntry::parseCode(code, reader);} + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); +}; + +namespace DRW { + +// Extended color palette: +// The first entry is only for direct indexing starting with [1] +// Color 1 is red (1,0,0) +const unsigned char dxfColors[][3] = { + { 0, 0, 0}, // unused + {255, 0, 0}, // 1 red + {255,255, 0}, // 2 yellow + { 0,255, 0}, // 3 green + { 0,255,255}, // 4 cyan + { 0, 0,255}, // 5 blue + {255, 0,255}, // 6 magenta + { 0, 0, 0}, // 7 black or white + {128,128,128}, // 8 50% gray + {192,192,192}, // 9 75% gray + {255, 0, 0}, // 10 + {255,127,127}, + {204, 0, 0}, + {204,102,102}, + {153, 0, 0}, + {153, 76, 76}, // 15 + {127, 0, 0}, + {127, 63, 63}, + { 76, 0, 0}, + { 76, 38, 38}, + {255, 63, 0}, // 20 + {255,159,127}, + {204, 51, 0}, + {204,127,102}, + {153, 38, 0}, + {153, 95, 76}, // 25 + {127, 31, 0}, + {127, 79, 63}, + { 76, 19, 0}, + { 76, 47, 38}, + {255,127, 0}, // 30 + {255,191,127}, + {204,102, 0}, + {204,153,102}, + {153, 76, 0}, + {153,114, 76}, // 35 + {127, 63, 0}, + {127, 95, 63}, + { 76, 38, 0}, + { 76, 57, 38}, + {255,191, 0}, // 40 + {255,223,127}, + {204,153, 0}, + {204,178,102}, + {153,114, 0}, + {153,133, 76}, // 45 + {127, 95, 0}, + {127,111, 63}, + { 76, 57, 0}, + { 76, 66, 38}, + {255,255, 0}, // 50 + {255,255,127}, + {204,204, 0}, + {204,204,102}, + {153,153, 0}, + {153,153, 76}, // 55 + {127,127, 0}, + {127,127, 63}, + { 76, 76, 0}, + { 76, 76, 38}, + {191,255, 0}, // 60 + {223,255,127}, + {153,204, 0}, + {178,204,102}, + {114,153, 0}, + {133,153, 76}, // 65 + { 95,127, 0}, + {111,127, 63}, + { 57, 76, 0}, + { 66, 76, 38}, + {127,255, 0}, // 70 + {191,255,127}, + {102,204, 0}, + {153,204,102}, + { 76,153, 0}, + {114,153, 76}, // 75 + { 63,127, 0}, + { 95,127, 63}, + { 38, 76, 0}, + { 57, 76, 38}, + { 63,255, 0}, // 80 + {159,255,127}, + { 51,204, 0}, + {127,204,102}, + { 38,153, 0}, + { 95,153, 76}, // 85 + { 31,127, 0}, + { 79,127, 63}, + { 19, 76, 0}, + { 47, 76, 38}, + { 0,255, 0}, // 90 + {127,255,127}, + { 0,204, 0}, + {102,204,102}, + { 0,153, 0}, + { 76,153, 76}, // 95 + { 0,127, 0}, + { 63,127, 63}, + { 0, 76, 0}, + { 38, 76, 38}, + { 0,255, 63}, // 100 + {127,255,159}, + { 0,204, 51}, + {102,204,127}, + { 0,153, 38}, + { 76,153, 95}, // 105 + { 0,127, 31}, + { 63,127, 79}, + { 0, 76, 19}, + { 38, 76, 47}, + { 0,255,127}, // 110 + {127,255,191}, + { 0,204,102}, + {102,204,153}, + { 0,153, 76}, + { 76,153,114}, // 115 + { 0,127, 63}, + { 63,127, 95}, + { 0, 76, 38}, + { 38, 76, 57}, + { 0,255,191}, // 120 + {127,255,223}, + { 0,204,153}, + {102,204,178}, + { 0,153,114}, + { 76,153,133}, // 125 + { 0,127, 95}, + { 63,127,111}, + { 0, 76, 57}, + { 38, 76, 66}, + { 0,255,255}, // 130 + {127,255,255}, + { 0,204,204}, + {102,204,204}, + { 0,153,153}, + { 76,153,153}, // 135 + { 0,127,127}, + { 63,127,127}, + { 0, 76, 76}, + { 38, 76, 76}, + { 0,191,255}, // 140 + {127,223,255}, + { 0,153,204}, + {102,178,204}, + { 0,114,153}, + { 76,133,153}, // 145 + { 0, 95,127}, + { 63,111,127}, + { 0, 57, 76}, + { 38, 66, 76}, + { 0,127,255}, // 150 + {127,191,255}, + { 0,102,204}, + {102,153,204}, + { 0, 76,153}, + { 76,114,153}, // 155 + { 0, 63,127}, + { 63, 95,127}, + { 0, 38, 76}, + { 38, 57, 76}, + { 0, 66,255}, // 160 + {127,159,255}, + { 0, 51,204}, + {102,127,204}, + { 0, 38,153}, + { 76, 95,153}, // 165 + { 0, 31,127}, + { 63, 79,127}, + { 0, 19, 76}, + { 38, 47, 76}, + { 0, 0,255}, // 170 + {127,127,255}, + { 0, 0,204}, + {102,102,204}, + { 0, 0,153}, + { 76, 76,153}, // 175 + { 0, 0,127}, + { 63, 63,127}, + { 0, 0, 76}, + { 38, 38, 76}, + { 63, 0,255}, // 180 + {159,127,255}, + { 50, 0,204}, + {127,102,204}, + { 38, 0,153}, + { 95, 76,153}, // 185 + { 31, 0,127}, + { 79, 63,127}, + { 19, 0, 76}, + { 47, 38, 76}, + {127, 0,255}, // 190 + {191,127,255}, + {102, 0,204}, + {153,102,204}, + { 76, 0,153}, + {114, 76,153}, // 195 + { 63, 0,127}, + { 95, 63,127}, + { 38, 0, 76}, + { 57, 38, 76}, + {191, 0,255}, // 200 + {223,127,255}, + {153, 0,204}, + {178,102,204}, + {114, 0,153}, + {133, 76,153}, // 205 + { 95, 0,127}, + {111, 63,127}, + { 57, 0, 76}, + { 66, 38, 76}, + {255, 0,255}, // 210 + {255,127,255}, + {204, 0,204}, + {204,102,204}, + {153, 0,153}, + {153, 76,153}, // 215 + {127, 0,127}, + {127, 63,127}, + { 76, 0, 76}, + { 76, 38, 76}, + {255, 0,191}, // 220 + {255,127,223}, + {204, 0,153}, + {204,102,178}, + {153, 0,114}, + {153, 76,133}, // 225 + {127, 0, 95}, + {127, 63, 11}, + { 76, 0, 57}, + { 76, 38, 66}, + {255, 0,127}, // 230 + {255,127,191}, + {204, 0,102}, + {204,102,153}, + {153, 0, 76}, + {153, 76,114}, // 235 + {127, 0, 63}, + {127, 63, 95}, + { 76, 0, 38}, + { 76, 38, 57}, + {255, 0, 63}, // 240 + {255,127,159}, + {204, 0, 51}, + {204,102,127}, + {153, 0, 38}, + {153, 76, 95}, // 245 + {127, 0, 31}, + {127, 63, 79}, + { 76, 0, 19}, + { 76, 38, 47}, + { 51, 51, 51}, // 250 + { 91, 91, 91}, + {132,132,132}, + {173,173,173}, + {214,214,214}, + {255,255,255} // 255 +}; + +} + +#endif + +// EOF diff --git a/extlib/libdxfrw/intern/drw_cptable932.h b/extlib/libdxfrw/intern/drw_cptable932.h new file mode 100644 index 0000000..0d9be10 --- /dev/null +++ b/extlib/libdxfrw/intern/drw_cptable932.h @@ -0,0 +1,7812 @@ +#ifndef DRW_CPTABLE932_H +#define DRW_CPTABLE932_H + +//Japanese + +//first entry in this table are 0xA1 +#define CPOFFSET932 0xFEC0 +//#define CP1LENGHT932 63 +#define CPLENGHT932 7724 +#define NOTFOUND932 0x30FB + +//Table 932 one byte are +//from 0xA1 -> 0xFF61 +//to 0xDF .> 0xFF9F +static const int DRW_Table932[1] = { +}; + +//Table 932 lead byte +//pairs of start/end in DRW_DoubleTable932 +static const int DRW_LeadTable932[] = { + 0, //1 #DBCS LEAD BYTE 0x81 + 147, //2 #DBCS LEAD BYTE 0x82 + 292, //3 #DBCS LEAD BYTE 0x83 + 426, //4 #DBCS LEAD BYTE 0x84 + 524, //5 #DBCS LEAD BYTE 0x85, empty + 524, //6 #DBCS LEAD BYTE 0x86, empty + 524, //7 #DBCS LEAD BYTE 0x87 + 607, //8 #DBCS LEAD BYTE 0x88 + 701, //9 #DBCS LEAD BYTE 0x89 + 889, //10 #DBCS LEAD BYTE 0x8A + 1077, //11 #DBCS LEAD BYTE 0x8B + 1265, //12 #DBCS LEAD BYTE 0x8C + 1453, //13 #DBCS LEAD BYTE 0x8D + 1641, //14 #DBCS LEAD BYTE 0x8E + 1829, //15 #DBCS LEAD BYTE 0x8F + 2017, //16 #DBCS LEAD BYTE 0x90 + 2205, //17 #DBCS LEAD BYTE 0x91 + 2393, //18 #DBCS LEAD BYTE 0x92 + 2581, //19 #DBCS LEAD BYTE 0x93 + 2769, //20 #DBCS LEAD BYTE 0x94 + 2957, //21 #DBCS LEAD BYTE 0x95 + 3145, //22 #DBCS LEAD BYTE 0x96 + 3333, //23 #DBCS LEAD BYTE 0x97 + 3521, //24 #DBCS LEAD BYTE 0x98 + 3666, //25 #DBCS LEAD BYTE 0x99 + 3854, //26 #DBCS LEAD BYTE 0x9A + 4042, //27 #DBCS LEAD BYTE 0x9B + 4230, //28 #DBCS LEAD BYTE 0x9C + 4418, //29 #DBCS LEAD BYTE 0x9D + 4606, //30 #DBCS LEAD BYTE 0x9E + 4794, //31 #DBCS LEAD BYTE 0x9F +//0xA0 to 0xDF are empty + 4982, //32 #DBCS LEAD BYTE 0xE0 + 5170, //33 #DBCS LEAD BYTE 0xE1 + 5358, //34 #DBCS LEAD BYTE 0xE2 + 5546, //35 #DBCS LEAD BYTE 0xE3 + 5734, //36 #DBCS LEAD BYTE 0xE4 + 5922, //37 #DBCS LEAD BYTE 0xE5 + 6110, //38 #DBCS LEAD BYTE 0xE6 + 6298, //39 #DBCS LEAD BYTE 0xE7 + 6486, //40 #DBCS LEAD BYTE 0xE8 + 6674, //41 #DBCS LEAD BYTE 0xE9 + 6862, //42 #DBCS LEAD BYTE 0xEA + 6962, //43 #DBCS LEAD BYTE 0xEB, empty + 6962, //44 #DBCS LEAD BYTE 0xEC, empty + 6962, //45 #DBCS LEAD BYTE 0xED + 7150, //46 #DBCS LEAD BYTE 0xEE + 7336, //47 #DBCS LEAD BYTE 0xEF, empty + 7336, //48 #DBCS LEAD BYTE 0xF0, empty + 7336, //49 #DBCS LEAD BYTE 0xF1, empty + 7336, //50 #DBCS LEAD BYTE 0xF2, empty + 7336, //51 #DBCS LEAD BYTE 0xF3, empty + 7336, //52 #DBCS LEAD BYTE 0xF4, empty + 7336, //53 #DBCS LEAD BYTE 0xF5, empty + 7336, //54 #DBCS LEAD BYTE 0xF6, empty + 7336, //55 #DBCS LEAD BYTE 0xF7, empty + 7336, //56 #DBCS LEAD BYTE 0xF8, empty + 7336, //57 #DBCS LEAD BYTE 0xF9, empty + 7336, //58 #DBCS LEAD BYTE 0xFA + 7524, //59 #DBCS LEAD BYTE 0xFB + 7712, //60 #DBCS LEAD BYTE 0xFC + 7724 //61 #END OF TABLE 0xFD +}; + +//Table 932 tail byte +static const int DRW_DoubleTable932[][2] = { + {0x8140, 0x3000}, //1 #IDEOGRAPHIC SPACE + {0x8141, 0x3001}, //2 #IDEOGRAPHIC COMMA + {0x8142, 0x3002}, //3 #IDEOGRAPHIC FULL STOP + {0x8143, 0xFF0C}, //4 #FULLWIDTH COMMA + {0x8144, 0xFF0E}, //5 #FULLWIDTH FULL STOP + {0x8145, 0x30FB}, //6 #KATAKANA MIDDLE DOT + {0x8146, 0xFF1A}, //7 #FULLWIDTH COLON + {0x8147, 0xFF1B}, //8 #FULLWIDTH SEMICOLON + {0x8148, 0xFF1F}, //9 #FULLWIDTH QUESTION MARK + {0x8149, 0xFF01}, //10 #FULLWIDTH EXCLAMATION MARK + {0x814A, 0x309B}, //11 #KATAKANA-HIRAGANA VOICED SOUND MARK + {0x814B, 0x309C}, //12 #KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + {0x814C, 0x00B4}, //13 #ACUTE ACCENT + {0x814D, 0xFF40}, //14 #FULLWIDTH GRAVE ACCENT + {0x814E, 0x00A8}, //15 #DIAERESIS + {0x814F, 0xFF3E}, //16 #FULLWIDTH CIRCUMFLEX ACCENT + {0x8150, 0xFFE3}, //17 #FULLWIDTH MACRON + {0x8151, 0xFF3F}, //18 #FULLWIDTH LOW LINE + {0x8152, 0x30FD}, //19 #KATAKANA ITERATION MARK + {0x8153, 0x30FE}, //20 #KATAKANA VOICED ITERATION MARK + {0x8154, 0x309D}, //21 #HIRAGANA ITERATION MARK + {0x8155, 0x309E}, //22 #HIRAGANA VOICED ITERATION MARK + {0x8156, 0x3003}, //23 #DITTO MARK + {0x8157, 0x4EDD}, //24 #CJK UNIFIED IDEOGRAPH + {0x8158, 0x3005}, //25 #IDEOGRAPHIC ITERATION MARK + {0x8159, 0x3006}, //26 #IDEOGRAPHIC CLOSING MARK + {0x815A, 0x3007}, //27 #IDEOGRAPHIC NUMBER ZERO + {0x815B, 0x30FC}, //28 #KATAKANA-HIRAGANA PROLONGED SOUND MARK + {0x815C, 0x2015}, //29 #HORIZONTAL BAR + {0x815D, 0x2010}, //30 #HYPHEN + {0x815E, 0xFF0F}, //31 #FULLWIDTH SOLIDUS + {0x815F, 0xFF3C}, //32 #FULLWIDTH REVERSE SOLIDUS + {0x8160, 0xFF5E}, //33 #FULLWIDTH TILDE + {0x8161, 0x2225}, //34 #PARALLEL TO + {0x8162, 0xFF5C}, //35 #FULLWIDTH VERTICAL LINE + {0x8163, 0x2026}, //36 #HORIZONTAL ELLIPSIS + {0x8164, 0x2025}, //37 #TWO DOT LEADER + {0x8165, 0x2018}, //38 #LEFT SINGLE QUOTATION MARK + {0x8166, 0x2019}, //39 #RIGHT SINGLE QUOTATION MARK + {0x8167, 0x201C}, //40 #LEFT DOUBLE QUOTATION MARK + {0x8168, 0x201D}, //41 #RIGHT DOUBLE QUOTATION MARK + {0x8169, 0xFF08}, //42 #FULLWIDTH LEFT PARENTHESIS + {0x816A, 0xFF09}, //43 #FULLWIDTH RIGHT PARENTHESIS + {0x816B, 0x3014}, //44 #LEFT TORTOISE SHELL BRACKET + {0x816C, 0x3015}, //45 #RIGHT TORTOISE SHELL BRACKET + {0x816D, 0xFF3B}, //46 #FULLWIDTH LEFT SQUARE BRACKET + {0x816E, 0xFF3D}, //47 #FULLWIDTH RIGHT SQUARE BRACKET + {0x816F, 0xFF5B}, //48 #FULLWIDTH LEFT CURLY BRACKET + {0x8170, 0xFF5D}, //49 #FULLWIDTH RIGHT CURLY BRACKET + {0x8171, 0x3008}, //50 #LEFT ANGLE BRACKET + {0x8172, 0x3009}, //51 #RIGHT ANGLE BRACKET + {0x8173, 0x300A}, //52 #LEFT DOUBLE ANGLE BRACKET + {0x8174, 0x300B}, //53 #RIGHT DOUBLE ANGLE BRACKET + {0x8175, 0x300C}, //54 #LEFT CORNER BRACKET + {0x8176, 0x300D}, //55 #RIGHT CORNER BRACKET + {0x8177, 0x300E}, //56 #LEFT WHITE CORNER BRACKET + {0x8178, 0x300F}, //57 #RIGHT WHITE CORNER BRACKET + {0x8179, 0x3010}, //58 #LEFT BLACK LENTICULAR BRACKET + {0x817A, 0x3011}, //59 #RIGHT BLACK LENTICULAR BRACKET + {0x817B, 0xFF0B}, //60 #FULLWIDTH PLUS SIGN + {0x817C, 0xFF0D}, //61 #FULLWIDTH HYPHEN-MINUS + {0x817D, 0x00B1}, //62 #PLUS-MINUS SIGN + {0x817E, 0x00D7}, //63 #MULTIPLICATION SIGN + {0x8180, 0x00F7}, //64 #DIVISION SIGN + {0x8181, 0xFF1D}, //65 #FULLWIDTH EQUALS SIGN + {0x8182, 0x2260}, //66 #NOT EQUAL TO + {0x8183, 0xFF1C}, //67 #FULLWIDTH LESS-THAN SIGN + {0x8184, 0xFF1E}, //68 #FULLWIDTH GREATER-THAN SIGN + {0x8185, 0x2266}, //69 #LESS-THAN OVER EQUAL TO + {0x8186, 0x2267}, //70 #GREATER-THAN OVER EQUAL TO + {0x8187, 0x221E}, //71 #INFINITY + {0x8188, 0x2234}, //72 #THEREFORE + {0x8189, 0x2642}, //73 #MALE SIGN + {0x818A, 0x2640}, //74 #FEMALE SIGN + {0x818B, 0x00B0}, //75 #DEGREE SIGN + {0x818C, 0x2032}, //76 #PRIME + {0x818D, 0x2033}, //77 #DOUBLE PRIME + {0x818E, 0x2103}, //78 #DEGREE CELSIUS + {0x818F, 0xFFE5}, //79 #FULLWIDTH YEN SIGN + {0x8190, 0xFF04}, //80 #FULLWIDTH DOLLAR SIGN + {0x8191, 0xFFE0}, //81 #FULLWIDTH CENT SIGN + {0x8192, 0xFFE1}, //82 #FULLWIDTH POUND SIGN + {0x8193, 0xFF05}, //83 #FULLWIDTH PERCENT SIGN + {0x8194, 0xFF03}, //84 #FULLWIDTH NUMBER SIGN + {0x8195, 0xFF06}, //85 #FULLWIDTH AMPERSAND + {0x8196, 0xFF0A}, //86 #FULLWIDTH ASTERISK + {0x8197, 0xFF20}, //87 #FULLWIDTH COMMERCIAL AT + {0x8198, 0x00A7}, //88 #SECTION SIGN + {0x8199, 0x2606}, //89 #WHITE STAR + {0x819A, 0x2605}, //90 #BLACK STAR + {0x819B, 0x25CB}, //91 #WHITE CIRCLE + {0x819C, 0x25CF}, //92 #BLACK CIRCLE + {0x819D, 0x25CE}, //93 #BULLSEYE + {0x819E, 0x25C7}, //94 #WHITE DIAMOND + {0x819F, 0x25C6}, //95 #BLACK DIAMOND + {0x81A0, 0x25A1}, //96 #WHITE SQUARE + {0x81A1, 0x25A0}, //97 #BLACK SQUARE + {0x81A2, 0x25B3}, //98 #WHITE UP-POINTING TRIANGLE + {0x81A3, 0x25B2}, //99 #BLACK UP-POINTING TRIANGLE + {0x81A4, 0x25BD}, //100 #WHITE DOWN-POINTING TRIANGLE + {0x81A5, 0x25BC}, //101 #BLACK DOWN-POINTING TRIANGLE + {0x81A6, 0x203B}, //102 #REFERENCE MARK + {0x81A7, 0x3012}, //103 #POSTAL MARK + {0x81A8, 0x2192}, //104 #RIGHTWARDS ARROW + {0x81A9, 0x2190}, //105 #LEFTWARDS ARROW + {0x81AA, 0x2191}, //106 #UPWARDS ARROW + {0x81AB, 0x2193}, //107 #DOWNWARDS ARROW + {0x81AC, 0x3013}, //108 #GETA MARK + {0x81B8, 0x2208}, //109 #ELEMENT OF + {0x81B9, 0x220B}, //110 #CONTAINS AS MEMBER + {0x81BA, 0x2286}, //111 #SUBSET OF OR EQUAL TO + {0x81BB, 0x2287}, //112 #SUPERSET OF OR EQUAL TO + {0x81BC, 0x2282}, //113 #SUBSET OF + {0x81BD, 0x2283}, //114 #SUPERSET OF + {0x81BE, 0x222A}, //115 #UNION + {0x81BF, 0x2229}, //116 #INTERSECTION + {0x81C8, 0x2227}, //117 #LOGICAL AND + {0x81C9, 0x2228}, //118 #LOGICAL OR + {0x81CA, 0xFFE2}, //119 #FULLWIDTH NOT SIGN + {0x81CB, 0x21D2}, //120 #RIGHTWARDS DOUBLE ARROW + {0x81CC, 0x21D4}, //121 #LEFT RIGHT DOUBLE ARROW + {0x81CD, 0x2200}, //122 #FOR ALL + {0x81CE, 0x2203}, //123 #THERE EXISTS + {0x81DA, 0x2220}, //124 #ANGLE + {0x81DB, 0x22A5}, //125 #UP TACK + {0x81DC, 0x2312}, //126 #ARC + {0x81DD, 0x2202}, //127 #PARTIAL DIFFERENTIAL + {0x81DE, 0x2207}, //128 #NABLA + {0x81DF, 0x2261}, //129 #IDENTICAL TO + {0x81E0, 0x2252}, //130 #APPROXIMATELY EQUAL TO OR THE IMAGE OF + {0x81E1, 0x226A}, //131 #MUCH LESS-THAN + {0x81E2, 0x226B}, //132 #MUCH GREATER-THAN + {0x81E3, 0x221A}, //133 #SQUARE ROOT + {0x81E4, 0x223D}, //134 #REVERSED TILDE + {0x81E5, 0x221D}, //135 #PROPORTIONAL TO + {0x81E6, 0x2235}, //136 #BECAUSE + {0x81E7, 0x222B}, //137 #INTEGRAL + {0x81E8, 0x222C}, //138 #DOUBLE INTEGRAL + {0x81F0, 0x212B}, //139 #ANGSTROM SIGN + {0x81F1, 0x2030}, //140 #PER MILLE SIGN + {0x81F2, 0x266F}, //141 #MUSIC SHARP SIGN + {0x81F3, 0x266D}, //142 #MUSIC FLAT SIGN + {0x81F4, 0x266A}, //143 #EIGHTH NOTE + {0x81F5, 0x2020}, //144 #DAGGER + {0x81F6, 0x2021}, //145 #DOUBLE DAGGER + {0x81F7, 0x00B6}, //146 #PILCROW SIGN + {0x81FC, 0x25EF}, //147 #LARGE CIRCLE + {0x824F, 0xFF10}, //148 #FULLWIDTH DIGIT ZERO + {0x8250, 0xFF11}, //149 #FULLWIDTH DIGIT ONE + {0x8251, 0xFF12}, //150 #FULLWIDTH DIGIT TWO + {0x8252, 0xFF13}, //151 #FULLWIDTH DIGIT THREE + {0x8253, 0xFF14}, //152 #FULLWIDTH DIGIT FOUR + {0x8254, 0xFF15}, //153 #FULLWIDTH DIGIT FIVE + {0x8255, 0xFF16}, //154 #FULLWIDTH DIGIT SIX + {0x8256, 0xFF17}, //155 #FULLWIDTH DIGIT SEVEN + {0x8257, 0xFF18}, //156 #FULLWIDTH DIGIT EIGHT + {0x8258, 0xFF19}, //157 #FULLWIDTH DIGIT NINE + {0x8260, 0xFF21}, //158 #FULLWIDTH LATIN CAPITAL LETTER A + {0x8261, 0xFF22}, //159 #FULLWIDTH LATIN CAPITAL LETTER B + {0x8262, 0xFF23}, //160 #FULLWIDTH LATIN CAPITAL LETTER C + {0x8263, 0xFF24}, //161 #FULLWIDTH LATIN CAPITAL LETTER D + {0x8264, 0xFF25}, //162 #FULLWIDTH LATIN CAPITAL LETTER E + {0x8265, 0xFF26}, //163 #FULLWIDTH LATIN CAPITAL LETTER F + {0x8266, 0xFF27}, //164 #FULLWIDTH LATIN CAPITAL LETTER G + {0x8267, 0xFF28}, //165 #FULLWIDTH LATIN CAPITAL LETTER H + {0x8268, 0xFF29}, //166 #FULLWIDTH LATIN CAPITAL LETTER I + {0x8269, 0xFF2A}, //167 #FULLWIDTH LATIN CAPITAL LETTER J + {0x826A, 0xFF2B}, //168 #FULLWIDTH LATIN CAPITAL LETTER K + {0x826B, 0xFF2C}, //169 #FULLWIDTH LATIN CAPITAL LETTER L + {0x826C, 0xFF2D}, //170 #FULLWIDTH LATIN CAPITAL LETTER M + {0x826D, 0xFF2E}, //171 #FULLWIDTH LATIN CAPITAL LETTER N + {0x826E, 0xFF2F}, //172 #FULLWIDTH LATIN CAPITAL LETTER O + {0x826F, 0xFF30}, //173 #FULLWIDTH LATIN CAPITAL LETTER P + {0x8270, 0xFF31}, //174 #FULLWIDTH LATIN CAPITAL LETTER Q + {0x8271, 0xFF32}, //175 #FULLWIDTH LATIN CAPITAL LETTER R + {0x8272, 0xFF33}, //176 #FULLWIDTH LATIN CAPITAL LETTER S + {0x8273, 0xFF34}, //177 #FULLWIDTH LATIN CAPITAL LETTER T + {0x8274, 0xFF35}, //178 #FULLWIDTH LATIN CAPITAL LETTER U + {0x8275, 0xFF36}, //179 #FULLWIDTH LATIN CAPITAL LETTER V + {0x8276, 0xFF37}, //180 #FULLWIDTH LATIN CAPITAL LETTER W + {0x8277, 0xFF38}, //181 #FULLWIDTH LATIN CAPITAL LETTER X + {0x8278, 0xFF39}, //182 #FULLWIDTH LATIN CAPITAL LETTER Y + {0x8279, 0xFF3A}, //183 #FULLWIDTH LATIN CAPITAL LETTER Z + {0x8281, 0xFF41}, //184 #FULLWIDTH LATIN SMALL LETTER A + {0x8282, 0xFF42}, //185 #FULLWIDTH LATIN SMALL LETTER B + {0x8283, 0xFF43}, //186 #FULLWIDTH LATIN SMALL LETTER C + {0x8284, 0xFF44}, //187 #FULLWIDTH LATIN SMALL LETTER D + {0x8285, 0xFF45}, //188 #FULLWIDTH LATIN SMALL LETTER E + {0x8286, 0xFF46}, //189 #FULLWIDTH LATIN SMALL LETTER F + {0x8287, 0xFF47}, //190 #FULLWIDTH LATIN SMALL LETTER G + {0x8288, 0xFF48}, //191 #FULLWIDTH LATIN SMALL LETTER H + {0x8289, 0xFF49}, //192 #FULLWIDTH LATIN SMALL LETTER I + {0x828A, 0xFF4A}, //193 #FULLWIDTH LATIN SMALL LETTER J + {0x828B, 0xFF4B}, //194 #FULLWIDTH LATIN SMALL LETTER K + {0x828C, 0xFF4C}, //195 #FULLWIDTH LATIN SMALL LETTER L + {0x828D, 0xFF4D}, //196 #FULLWIDTH LATIN SMALL LETTER M + {0x828E, 0xFF4E}, //197 #FULLWIDTH LATIN SMALL LETTER N + {0x828F, 0xFF4F}, //198 #FULLWIDTH LATIN SMALL LETTER O + {0x8290, 0xFF50}, //199 #FULLWIDTH LATIN SMALL LETTER P + {0x8291, 0xFF51}, //200 #FULLWIDTH LATIN SMALL LETTER Q + {0x8292, 0xFF52}, //201 #FULLWIDTH LATIN SMALL LETTER R + {0x8293, 0xFF53}, //202 #FULLWIDTH LATIN SMALL LETTER S + {0x8294, 0xFF54}, //203 #FULLWIDTH LATIN SMALL LETTER T + {0x8295, 0xFF55}, //204 #FULLWIDTH LATIN SMALL LETTER U + {0x8296, 0xFF56}, //205 #FULLWIDTH LATIN SMALL LETTER V + {0x8297, 0xFF57}, //206 #FULLWIDTH LATIN SMALL LETTER W + {0x8298, 0xFF58}, //207 #FULLWIDTH LATIN SMALL LETTER X + {0x8299, 0xFF59}, //208 #FULLWIDTH LATIN SMALL LETTER Y + {0x829A, 0xFF5A}, //209 #FULLWIDTH LATIN SMALL LETTER Z + {0x829F, 0x3041}, //210 #HIRAGANA LETTER SMALL A + {0x82A0, 0x3042}, //211 #HIRAGANA LETTER A + {0x82A1, 0x3043}, //212 #HIRAGANA LETTER SMALL I + {0x82A2, 0x3044}, //213 #HIRAGANA LETTER I + {0x82A3, 0x3045}, //214 #HIRAGANA LETTER SMALL U + {0x82A4, 0x3046}, //215 #HIRAGANA LETTER U + {0x82A5, 0x3047}, //216 #HIRAGANA LETTER SMALL E + {0x82A6, 0x3048}, //217 #HIRAGANA LETTER E + {0x82A7, 0x3049}, //218 #HIRAGANA LETTER SMALL O + {0x82A8, 0x304A}, //219 #HIRAGANA LETTER O + {0x82A9, 0x304B}, //220 #HIRAGANA LETTER KA + {0x82AA, 0x304C}, //221 #HIRAGANA LETTER GA + {0x82AB, 0x304D}, //222 #HIRAGANA LETTER KI + {0x82AC, 0x304E}, //223 #HIRAGANA LETTER GI + {0x82AD, 0x304F}, //224 #HIRAGANA LETTER KU + {0x82AE, 0x3050}, //225 #HIRAGANA LETTER GU + {0x82AF, 0x3051}, //226 #HIRAGANA LETTER KE + {0x82B0, 0x3052}, //227 #HIRAGANA LETTER GE + {0x82B1, 0x3053}, //228 #HIRAGANA LETTER KO + {0x82B2, 0x3054}, //229 #HIRAGANA LETTER GO + {0x82B3, 0x3055}, //230 #HIRAGANA LETTER SA + {0x82B4, 0x3056}, //231 #HIRAGANA LETTER ZA + {0x82B5, 0x3057}, //232 #HIRAGANA LETTER SI + {0x82B6, 0x3058}, //233 #HIRAGANA LETTER ZI + {0x82B7, 0x3059}, //234 #HIRAGANA LETTER SU + {0x82B8, 0x305A}, //235 #HIRAGANA LETTER ZU + {0x82B9, 0x305B}, //236 #HIRAGANA LETTER SE + {0x82BA, 0x305C}, //237 #HIRAGANA LETTER ZE + {0x82BB, 0x305D}, //238 #HIRAGANA LETTER SO + {0x82BC, 0x305E}, //239 #HIRAGANA LETTER ZO + {0x82BD, 0x305F}, //240 #HIRAGANA LETTER TA + {0x82BE, 0x3060}, //241 #HIRAGANA LETTER DA + {0x82BF, 0x3061}, //242 #HIRAGANA LETTER TI + {0x82C0, 0x3062}, //243 #HIRAGANA LETTER DI + {0x82C1, 0x3063}, //244 #HIRAGANA LETTER SMALL TU + {0x82C2, 0x3064}, //245 #HIRAGANA LETTER TU + {0x82C3, 0x3065}, //246 #HIRAGANA LETTER DU + {0x82C4, 0x3066}, //247 #HIRAGANA LETTER TE + {0x82C5, 0x3067}, //248 #HIRAGANA LETTER DE + {0x82C6, 0x3068}, //249 #HIRAGANA LETTER TO + {0x82C7, 0x3069}, //250 #HIRAGANA LETTER DO + {0x82C8, 0x306A}, //251 #HIRAGANA LETTER NA + {0x82C9, 0x306B}, //252 #HIRAGANA LETTER NI + {0x82CA, 0x306C}, //253 #HIRAGANA LETTER NU + {0x82CB, 0x306D}, //254 #HIRAGANA LETTER NE + {0x82CC, 0x306E}, //255 #HIRAGANA LETTER NO + {0x82CD, 0x306F}, //256 #HIRAGANA LETTER HA + {0x82CE, 0x3070}, //257 #HIRAGANA LETTER BA + {0x82CF, 0x3071}, //258 #HIRAGANA LETTER PA + {0x82D0, 0x3072}, //259 #HIRAGANA LETTER HI + {0x82D1, 0x3073}, //260 #HIRAGANA LETTER BI + {0x82D2, 0x3074}, //261 #HIRAGANA LETTER PI + {0x82D3, 0x3075}, //262 #HIRAGANA LETTER HU + {0x82D4, 0x3076}, //263 #HIRAGANA LETTER BU + {0x82D5, 0x3077}, //264 #HIRAGANA LETTER PU + {0x82D6, 0x3078}, //265 #HIRAGANA LETTER HE + {0x82D7, 0x3079}, //266 #HIRAGANA LETTER BE + {0x82D8, 0x307A}, //267 #HIRAGANA LETTER PE + {0x82D9, 0x307B}, //268 #HIRAGANA LETTER HO + {0x82DA, 0x307C}, //269 #HIRAGANA LETTER BO + {0x82DB, 0x307D}, //270 #HIRAGANA LETTER PO + {0x82DC, 0x307E}, //271 #HIRAGANA LETTER MA + {0x82DD, 0x307F}, //272 #HIRAGANA LETTER MI + {0x82DE, 0x3080}, //273 #HIRAGANA LETTER MU + {0x82DF, 0x3081}, //274 #HIRAGANA LETTER ME + {0x82E0, 0x3082}, //275 #HIRAGANA LETTER MO + {0x82E1, 0x3083}, //276 #HIRAGANA LETTER SMALL YA + {0x82E2, 0x3084}, //277 #HIRAGANA LETTER YA + {0x82E3, 0x3085}, //278 #HIRAGANA LETTER SMALL YU + {0x82E4, 0x3086}, //279 #HIRAGANA LETTER YU + {0x82E5, 0x3087}, //280 #HIRAGANA LETTER SMALL YO + {0x82E6, 0x3088}, //281 #HIRAGANA LETTER YO + {0x82E7, 0x3089}, //282 #HIRAGANA LETTER RA + {0x82E8, 0x308A}, //283 #HIRAGANA LETTER RI + {0x82E9, 0x308B}, //284 #HIRAGANA LETTER RU + {0x82EA, 0x308C}, //285 #HIRAGANA LETTER RE + {0x82EB, 0x308D}, //286 #HIRAGANA LETTER RO + {0x82EC, 0x308E}, //287 #HIRAGANA LETTER SMALL WA + {0x82ED, 0x308F}, //288 #HIRAGANA LETTER WA + {0x82EE, 0x3090}, //289 #HIRAGANA LETTER WI + {0x82EF, 0x3091}, //290 #HIRAGANA LETTER WE + {0x82F0, 0x3092}, //291 #HIRAGANA LETTER WO + {0x82F1, 0x3093}, //292 #HIRAGANA LETTER N + {0x8340, 0x30A1}, //293 #KATAKANA LETTER SMALL A + {0x8341, 0x30A2}, //294 #KATAKANA LETTER A + {0x8342, 0x30A3}, //295 #KATAKANA LETTER SMALL I + {0x8343, 0x30A4}, //296 #KATAKANA LETTER I + {0x8344, 0x30A5}, //297 #KATAKANA LETTER SMALL U + {0x8345, 0x30A6}, //298 #KATAKANA LETTER U + {0x8346, 0x30A7}, //299 #KATAKANA LETTER SMALL E + {0x8347, 0x30A8}, //300 #KATAKANA LETTER E + {0x8348, 0x30A9}, //301 #KATAKANA LETTER SMALL O + {0x8349, 0x30AA}, //302 #KATAKANA LETTER O + {0x834A, 0x30AB}, //303 #KATAKANA LETTER KA + {0x834B, 0x30AC}, //304 #KATAKANA LETTER GA + {0x834C, 0x30AD}, //305 #KATAKANA LETTER KI + {0x834D, 0x30AE}, //306 #KATAKANA LETTER GI + {0x834E, 0x30AF}, //307 #KATAKANA LETTER KU + {0x834F, 0x30B0}, //308 #KATAKANA LETTER GU + {0x8350, 0x30B1}, //309 #KATAKANA LETTER KE + {0x8351, 0x30B2}, //310 #KATAKANA LETTER GE + {0x8352, 0x30B3}, //311 #KATAKANA LETTER KO + {0x8353, 0x30B4}, //312 #KATAKANA LETTER GO + {0x8354, 0x30B5}, //313 #KATAKANA LETTER SA + {0x8355, 0x30B6}, //314 #KATAKANA LETTER ZA + {0x8356, 0x30B7}, //315 #KATAKANA LETTER SI + {0x8357, 0x30B8}, //316 #KATAKANA LETTER ZI + {0x8358, 0x30B9}, //317 #KATAKANA LETTER SU + {0x8359, 0x30BA}, //318 #KATAKANA LETTER ZU + {0x835A, 0x30BB}, //319 #KATAKANA LETTER SE + {0x835B, 0x30BC}, //320 #KATAKANA LETTER ZE + {0x835C, 0x30BD}, //321 #KATAKANA LETTER SO + {0x835D, 0x30BE}, //322 #KATAKANA LETTER ZO + {0x835E, 0x30BF}, //323 #KATAKANA LETTER TA + {0x835F, 0x30C0}, //324 #KATAKANA LETTER DA + {0x8360, 0x30C1}, //325 #KATAKANA LETTER TI + {0x8361, 0x30C2}, //326 #KATAKANA LETTER DI + {0x8362, 0x30C3}, //327 #KATAKANA LETTER SMALL TU + {0x8363, 0x30C4}, //328 #KATAKANA LETTER TU + {0x8364, 0x30C5}, //329 #KATAKANA LETTER DU + {0x8365, 0x30C6}, //330 #KATAKANA LETTER TE + {0x8366, 0x30C7}, //331 #KATAKANA LETTER DE + {0x8367, 0x30C8}, //332 #KATAKANA LETTER TO + {0x8368, 0x30C9}, //333 #KATAKANA LETTER DO + {0x8369, 0x30CA}, //334 #KATAKANA LETTER NA + {0x836A, 0x30CB}, //335 #KATAKANA LETTER NI + {0x836B, 0x30CC}, //336 #KATAKANA LETTER NU + {0x836C, 0x30CD}, //337 #KATAKANA LETTER NE + {0x836D, 0x30CE}, //338 #KATAKANA LETTER NO + {0x836E, 0x30CF}, //339 #KATAKANA LETTER HA + {0x836F, 0x30D0}, //340 #KATAKANA LETTER BA + {0x8370, 0x30D1}, //341 #KATAKANA LETTER PA + {0x8371, 0x30D2}, //342 #KATAKANA LETTER HI + {0x8372, 0x30D3}, //343 #KATAKANA LETTER BI + {0x8373, 0x30D4}, //344 #KATAKANA LETTER PI + {0x8374, 0x30D5}, //345 #KATAKANA LETTER HU + {0x8375, 0x30D6}, //346 #KATAKANA LETTER BU + {0x8376, 0x30D7}, //347 #KATAKANA LETTER PU + {0x8377, 0x30D8}, //348 #KATAKANA LETTER HE + {0x8378, 0x30D9}, //349 #KATAKANA LETTER BE + {0x8379, 0x30DA}, //350 #KATAKANA LETTER PE + {0x837A, 0x30DB}, //351 #KATAKANA LETTER HO + {0x837B, 0x30DC}, //352 #KATAKANA LETTER BO + {0x837C, 0x30DD}, //353 #KATAKANA LETTER PO + {0x837D, 0x30DE}, //354 #KATAKANA LETTER MA + {0x837E, 0x30DF}, //355 #KATAKANA LETTER MI + {0x8380, 0x30E0}, //356 #KATAKANA LETTER MU + {0x8381, 0x30E1}, //357 #KATAKANA LETTER ME + {0x8382, 0x30E2}, //358 #KATAKANA LETTER MO + {0x8383, 0x30E3}, //359 #KATAKANA LETTER SMALL YA + {0x8384, 0x30E4}, //360 #KATAKANA LETTER YA + {0x8385, 0x30E5}, //361 #KATAKANA LETTER SMALL YU + {0x8386, 0x30E6}, //362 #KATAKANA LETTER YU + {0x8387, 0x30E7}, //363 #KATAKANA LETTER SMALL YO + {0x8388, 0x30E8}, //364 #KATAKANA LETTER YO + {0x8389, 0x30E9}, //365 #KATAKANA LETTER RA + {0x838A, 0x30EA}, //366 #KATAKANA LETTER RI + {0x838B, 0x30EB}, //367 #KATAKANA LETTER RU + {0x838C, 0x30EC}, //368 #KATAKANA LETTER RE + {0x838D, 0x30ED}, //369 #KATAKANA LETTER RO + {0x838E, 0x30EE}, //370 #KATAKANA LETTER SMALL WA + {0x838F, 0x30EF}, //371 #KATAKANA LETTER WA + {0x8390, 0x30F0}, //372 #KATAKANA LETTER WI + {0x8391, 0x30F1}, //373 #KATAKANA LETTER WE + {0x8392, 0x30F2}, //374 #KATAKANA LETTER WO + {0x8393, 0x30F3}, //375 #KATAKANA LETTER N + {0x8394, 0x30F4}, //376 #KATAKANA LETTER VU + {0x8395, 0x30F5}, //377 #KATAKANA LETTER SMALL KA + {0x8396, 0x30F6}, //378 #KATAKANA LETTER SMALL KE + {0x839F, 0x0391}, //379 #GREEK CAPITAL LETTER ALPHA + {0x83A0, 0x0392}, //380 #GREEK CAPITAL LETTER BETA + {0x83A1, 0x0393}, //381 #GREEK CAPITAL LETTER GAMMA + {0x83A2, 0x0394}, //382 #GREEK CAPITAL LETTER DELTA + {0x83A3, 0x0395}, //383 #GREEK CAPITAL LETTER EPSILON + {0x83A4, 0x0396}, //384 #GREEK CAPITAL LETTER ZETA + {0x83A5, 0x0397}, //385 #GREEK CAPITAL LETTER ETA + {0x83A6, 0x0398}, //386 #GREEK CAPITAL LETTER THETA + {0x83A7, 0x0399}, //387 #GREEK CAPITAL LETTER IOTA + {0x83A8, 0x039A}, //388 #GREEK CAPITAL LETTER KAPPA + {0x83A9, 0x039B}, //389 #GREEK CAPITAL LETTER LAMDA + {0x83AA, 0x039C}, //390 #GREEK CAPITAL LETTER MU + {0x83AB, 0x039D}, //391 #GREEK CAPITAL LETTER NU + {0x83AC, 0x039E}, //392 #GREEK CAPITAL LETTER XI + {0x83AD, 0x039F}, //393 #GREEK CAPITAL LETTER OMICRON + {0x83AE, 0x03A0}, //394 #GREEK CAPITAL LETTER PI + {0x83AF, 0x03A1}, //395 #GREEK CAPITAL LETTER RHO + {0x83B0, 0x03A3}, //396 #GREEK CAPITAL LETTER SIGMA + {0x83B1, 0x03A4}, //397 #GREEK CAPITAL LETTER TAU + {0x83B2, 0x03A5}, //398 #GREEK CAPITAL LETTER UPSILON + {0x83B3, 0x03A6}, //399 #GREEK CAPITAL LETTER PHI + {0x83B4, 0x03A7}, //400 #GREEK CAPITAL LETTER CHI + {0x83B5, 0x03A8}, //401 #GREEK CAPITAL LETTER PSI + {0x83B6, 0x03A9}, //402 #GREEK CAPITAL LETTER OMEGA + {0x83BF, 0x03B1}, //403 #GREEK SMALL LETTER ALPHA + {0x83C0, 0x03B2}, //404 #GREEK SMALL LETTER BETA + {0x83C1, 0x03B3}, //405 #GREEK SMALL LETTER GAMMA + {0x83C2, 0x03B4}, //406 #GREEK SMALL LETTER DELTA + {0x83C3, 0x03B5}, //407 #GREEK SMALL LETTER EPSILON + {0x83C4, 0x03B6}, //408 #GREEK SMALL LETTER ZETA + {0x83C5, 0x03B7}, //409 #GREEK SMALL LETTER ETA + {0x83C6, 0x03B8}, //410 #GREEK SMALL LETTER THETA + {0x83C7, 0x03B9}, //411 #GREEK SMALL LETTER IOTA + {0x83C8, 0x03BA}, //412 #GREEK SMALL LETTER KAPPA + {0x83C9, 0x03BB}, //413 #GREEK SMALL LETTER LAMDA + {0x83CA, 0x03BC}, //414 #GREEK SMALL LETTER MU + {0x83CB, 0x03BD}, //415 #GREEK SMALL LETTER NU + {0x83CC, 0x03BE}, //416 #GREEK SMALL LETTER XI + {0x83CD, 0x03BF}, //417 #GREEK SMALL LETTER OMICRON + {0x83CE, 0x03C0}, //418 #GREEK SMALL LETTER PI + {0x83CF, 0x03C1}, //419 #GREEK SMALL LETTER RHO + {0x83D0, 0x03C3}, //420 #GREEK SMALL LETTER SIGMA + {0x83D1, 0x03C4}, //421 #GREEK SMALL LETTER TAU + {0x83D2, 0x03C5}, //422 #GREEK SMALL LETTER UPSILON + {0x83D3, 0x03C6}, //423 #GREEK SMALL LETTER PHI + {0x83D4, 0x03C7}, //424 #GREEK SMALL LETTER CHI + {0x83D5, 0x03C8}, //425 #GREEK SMALL LETTER PSI + {0x83D6, 0x03C9}, //426 #GREEK SMALL LETTER OMEGA + {0x8440, 0x0410}, //427 #CYRILLIC CAPITAL LETTER A + {0x8441, 0x0411}, //428 #CYRILLIC CAPITAL LETTER BE + {0x8442, 0x0412}, //429 #CYRILLIC CAPITAL LETTER VE + {0x8443, 0x0413}, //430 #CYRILLIC CAPITAL LETTER GHE + {0x8444, 0x0414}, //431 #CYRILLIC CAPITAL LETTER DE + {0x8445, 0x0415}, //432 #CYRILLIC CAPITAL LETTER IE + {0x8446, 0x0401}, //433 #CYRILLIC CAPITAL LETTER IO + {0x8447, 0x0416}, //434 #CYRILLIC CAPITAL LETTER ZHE + {0x8448, 0x0417}, //435 #CYRILLIC CAPITAL LETTER ZE + {0x8449, 0x0418}, //436 #CYRILLIC CAPITAL LETTER I + {0x844A, 0x0419}, //437 #CYRILLIC CAPITAL LETTER SHORT I + {0x844B, 0x041A}, //438 #CYRILLIC CAPITAL LETTER KA + {0x844C, 0x041B}, //439 #CYRILLIC CAPITAL LETTER EL + {0x844D, 0x041C}, //440 #CYRILLIC CAPITAL LETTER EM + {0x844E, 0x041D}, //441 #CYRILLIC CAPITAL LETTER EN + {0x844F, 0x041E}, //442 #CYRILLIC CAPITAL LETTER O + {0x8450, 0x041F}, //443 #CYRILLIC CAPITAL LETTER PE + {0x8451, 0x0420}, //444 #CYRILLIC CAPITAL LETTER ER + {0x8452, 0x0421}, //445 #CYRILLIC CAPITAL LETTER ES + {0x8453, 0x0422}, //446 #CYRILLIC CAPITAL LETTER TE + {0x8454, 0x0423}, //447 #CYRILLIC CAPITAL LETTER U + {0x8455, 0x0424}, //448 #CYRILLIC CAPITAL LETTER EF + {0x8456, 0x0425}, //449 #CYRILLIC CAPITAL LETTER HA + {0x8457, 0x0426}, //450 #CYRILLIC CAPITAL LETTER TSE + {0x8458, 0x0427}, //451 #CYRILLIC CAPITAL LETTER CHE + {0x8459, 0x0428}, //452 #CYRILLIC CAPITAL LETTER SHA + {0x845A, 0x0429}, //453 #CYRILLIC CAPITAL LETTER SHCHA + {0x845B, 0x042A}, //454 #CYRILLIC CAPITAL LETTER HARD SIGN + {0x845C, 0x042B}, //455 #CYRILLIC CAPITAL LETTER YERU + {0x845D, 0x042C}, //456 #CYRILLIC CAPITAL LETTER SOFT SIGN + {0x845E, 0x042D}, //457 #CYRILLIC CAPITAL LETTER E + {0x845F, 0x042E}, //458 #CYRILLIC CAPITAL LETTER YU + {0x8460, 0x042F}, //459 #CYRILLIC CAPITAL LETTER YA + {0x8470, 0x0430}, //460 #CYRILLIC SMALL LETTER A + {0x8471, 0x0431}, //461 #CYRILLIC SMALL LETTER BE + {0x8472, 0x0432}, //462 #CYRILLIC SMALL LETTER VE + {0x8473, 0x0433}, //463 #CYRILLIC SMALL LETTER GHE + {0x8474, 0x0434}, //464 #CYRILLIC SMALL LETTER DE + {0x8475, 0x0435}, //465 #CYRILLIC SMALL LETTER IE + {0x8476, 0x0451}, //466 #CYRILLIC SMALL LETTER IO + {0x8477, 0x0436}, //467 #CYRILLIC SMALL LETTER ZHE + {0x8478, 0x0437}, //468 #CYRILLIC SMALL LETTER ZE + {0x8479, 0x0438}, //469 #CYRILLIC SMALL LETTER I + {0x847A, 0x0439}, //470 #CYRILLIC SMALL LETTER SHORT I + {0x847B, 0x043A}, //471 #CYRILLIC SMALL LETTER KA + {0x847C, 0x043B}, //472 #CYRILLIC SMALL LETTER EL + {0x847D, 0x043C}, //473 #CYRILLIC SMALL LETTER EM + {0x847E, 0x043D}, //474 #CYRILLIC SMALL LETTER EN + {0x8480, 0x043E}, //475 #CYRILLIC SMALL LETTER O + {0x8481, 0x043F}, //476 #CYRILLIC SMALL LETTER PE + {0x8482, 0x0440}, //477 #CYRILLIC SMALL LETTER ER + {0x8483, 0x0441}, //478 #CYRILLIC SMALL LETTER ES + {0x8484, 0x0442}, //479 #CYRILLIC SMALL LETTER TE + {0x8485, 0x0443}, //480 #CYRILLIC SMALL LETTER U + {0x8486, 0x0444}, //481 #CYRILLIC SMALL LETTER EF + {0x8487, 0x0445}, //482 #CYRILLIC SMALL LETTER HA + {0x8488, 0x0446}, //483 #CYRILLIC SMALL LETTER TSE + {0x8489, 0x0447}, //484 #CYRILLIC SMALL LETTER CHE + {0x848A, 0x0448}, //485 #CYRILLIC SMALL LETTER SHA + {0x848B, 0x0449}, //486 #CYRILLIC SMALL LETTER SHCHA + {0x848C, 0x044A}, //487 #CYRILLIC SMALL LETTER HARD SIGN + {0x848D, 0x044B}, //488 #CYRILLIC SMALL LETTER YERU + {0x848E, 0x044C}, //489 #CYRILLIC SMALL LETTER SOFT SIGN + {0x848F, 0x044D}, //490 #CYRILLIC SMALL LETTER E + {0x8490, 0x044E}, //491 #CYRILLIC SMALL LETTER YU + {0x8491, 0x044F}, //492 #CYRILLIC SMALL LETTER YA + {0x849F, 0x2500}, //493 #BOX DRAWINGS LIGHT HORIZONTAL + {0x84A0, 0x2502}, //494 #BOX DRAWINGS LIGHT VERTICAL + {0x84A1, 0x250C}, //495 #BOX DRAWINGS LIGHT DOWN AND RIGHT + {0x84A2, 0x2510}, //496 #BOX DRAWINGS LIGHT DOWN AND LEFT + {0x84A3, 0x2518}, //497 #BOX DRAWINGS LIGHT UP AND LEFT + {0x84A4, 0x2514}, //498 #BOX DRAWINGS LIGHT UP AND RIGHT + {0x84A5, 0x251C}, //499 #BOX DRAWINGS LIGHT VERTICAL AND RIGHT + {0x84A6, 0x252C}, //500 #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + {0x84A7, 0x2524}, //501 #BOX DRAWINGS LIGHT VERTICAL AND LEFT + {0x84A8, 0x2534}, //502 #BOX DRAWINGS LIGHT UP AND HORIZONTAL + {0x84A9, 0x253C}, //503 #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + {0x84AA, 0x2501}, //504 #BOX DRAWINGS HEAVY HORIZONTAL + {0x84AB, 0x2503}, //505 #BOX DRAWINGS HEAVY VERTICAL + {0x84AC, 0x250F}, //506 #BOX DRAWINGS HEAVY DOWN AND RIGHT + {0x84AD, 0x2513}, //507 #BOX DRAWINGS HEAVY DOWN AND LEFT + {0x84AE, 0x251B}, //508 #BOX DRAWINGS HEAVY UP AND LEFT + {0x84AF, 0x2517}, //509 #BOX DRAWINGS HEAVY UP AND RIGHT + {0x84B0, 0x2523}, //510 #BOX DRAWINGS HEAVY VERTICAL AND RIGHT + {0x84B1, 0x2533}, //511 #BOX DRAWINGS HEAVY DOWN AND HORIZONTAL + {0x84B2, 0x252B}, //512 #BOX DRAWINGS HEAVY VERTICAL AND LEFT + {0x84B3, 0x253B}, //513 #BOX DRAWINGS HEAVY UP AND HORIZONTAL + {0x84B4, 0x254B}, //514 #BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL + {0x84B5, 0x2520}, //515 #BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT + {0x84B6, 0x252F}, //516 #BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY + {0x84B7, 0x2528}, //517 #BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT + {0x84B8, 0x2537}, //518 #BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY + {0x84B9, 0x253F}, //519 #BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY + {0x84BA, 0x251D}, //520 #BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY + {0x84BB, 0x2530}, //521 #BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT + {0x84BC, 0x2525}, //522 #BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY + {0x84BD, 0x2538}, //523 #BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT + {0x84BE, 0x2542}, //524 #BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT + {0x8740, 0x2460}, //525 #CIRCLED DIGIT ONE + {0x8741, 0x2461}, //526 #CIRCLED DIGIT TWO + {0x8742, 0x2462}, //527 #CIRCLED DIGIT THREE + {0x8743, 0x2463}, //528 #CIRCLED DIGIT FOUR + {0x8744, 0x2464}, //529 #CIRCLED DIGIT FIVE + {0x8745, 0x2465}, //530 #CIRCLED DIGIT SIX + {0x8746, 0x2466}, //531 #CIRCLED DIGIT SEVEN + {0x8747, 0x2467}, //532 #CIRCLED DIGIT EIGHT + {0x8748, 0x2468}, //533 #CIRCLED DIGIT NINE + {0x8749, 0x2469}, //534 #CIRCLED NUMBER TEN + {0x874A, 0x246A}, //535 #CIRCLED NUMBER ELEVEN + {0x874B, 0x246B}, //536 #CIRCLED NUMBER TWELVE + {0x874C, 0x246C}, //537 #CIRCLED NUMBER THIRTEEN + {0x874D, 0x246D}, //538 #CIRCLED NUMBER FOURTEEN + {0x874E, 0x246E}, //539 #CIRCLED NUMBER FIFTEEN + {0x874F, 0x246F}, //540 #CIRCLED NUMBER SIXTEEN + {0x8750, 0x2470}, //541 #CIRCLED NUMBER SEVENTEEN + {0x8751, 0x2471}, //542 #CIRCLED NUMBER EIGHTEEN + {0x8752, 0x2472}, //543 #CIRCLED NUMBER NINETEEN + {0x8753, 0x2473}, //544 #CIRCLED NUMBER TWENTY + {0x8754, 0x2160}, //545 #ROMAN NUMERAL ONE + {0x8755, 0x2161}, //546 #ROMAN NUMERAL TWO + {0x8756, 0x2162}, //547 #ROMAN NUMERAL THREE + {0x8757, 0x2163}, //548 #ROMAN NUMERAL FOUR + {0x8758, 0x2164}, //549 #ROMAN NUMERAL FIVE + {0x8759, 0x2165}, //550 #ROMAN NUMERAL SIX + {0x875A, 0x2166}, //551 #ROMAN NUMERAL SEVEN + {0x875B, 0x2167}, //552 #ROMAN NUMERAL EIGHT + {0x875C, 0x2168}, //553 #ROMAN NUMERAL NINE + {0x875D, 0x2169}, //554 #ROMAN NUMERAL TEN + {0x875F, 0x3349}, //555 #SQUARE MIRI + {0x8760, 0x3314}, //556 #SQUARE KIRO + {0x8761, 0x3322}, //557 #SQUARE SENTI + {0x8762, 0x334D}, //558 #SQUARE MEETORU + {0x8763, 0x3318}, //559 #SQUARE GURAMU + {0x8764, 0x3327}, //560 #SQUARE TON + {0x8765, 0x3303}, //561 #SQUARE AARU + {0x8766, 0x3336}, //562 #SQUARE HEKUTAARU + {0x8767, 0x3351}, //563 #SQUARE RITTORU + {0x8768, 0x3357}, //564 #SQUARE WATTO + {0x8769, 0x330D}, //565 #SQUARE KARORII + {0x876A, 0x3326}, //566 #SQUARE DORU + {0x876B, 0x3323}, //567 #SQUARE SENTO + {0x876C, 0x332B}, //568 #SQUARE PAASENTO + {0x876D, 0x334A}, //569 #SQUARE MIRIBAARU + {0x876E, 0x333B}, //570 #SQUARE PEEZI + {0x876F, 0x339C}, //571 #SQUARE MM + {0x8770, 0x339D}, //572 #SQUARE CM + {0x8771, 0x339E}, //573 #SQUARE KM + {0x8772, 0x338E}, //574 #SQUARE MG + {0x8773, 0x338F}, //575 #SQUARE KG + {0x8774, 0x33C4}, //576 #SQUARE CC + {0x8775, 0x33A1}, //577 #SQUARE M SQUARED + {0x877E, 0x337B}, //578 #SQUARE ERA NAME HEISEI + {0x8780, 0x301D}, //579 #REVERSED DOUBLE PRIME QUOTATION MARK + {0x8781, 0x301F}, //580 #LOW DOUBLE PRIME QUOTATION MARK + {0x8782, 0x2116}, //581 #NUMERO SIGN + {0x8783, 0x33CD}, //582 #SQUARE KK + {0x8784, 0x2121}, //583 #TELEPHONE SIGN + {0x8785, 0x32A4}, //584 #CIRCLED IDEOGRAPH HIGH + {0x8786, 0x32A5}, //585 #CIRCLED IDEOGRAPH CENTRE + {0x8787, 0x32A6}, //586 #CIRCLED IDEOGRAPH LOW + {0x8788, 0x32A7}, //587 #CIRCLED IDEOGRAPH LEFT + {0x8789, 0x32A8}, //588 #CIRCLED IDEOGRAPH RIGHT + {0x878A, 0x3231}, //589 #PARENTHESIZED IDEOGRAPH STOCK + {0x878B, 0x3232}, //590 #PARENTHESIZED IDEOGRAPH HAVE + {0x878C, 0x3239}, //591 #PARENTHESIZED IDEOGRAPH REPRESENT + {0x878D, 0x337E}, //592 #SQUARE ERA NAME MEIZI + {0x878E, 0x337D}, //593 #SQUARE ERA NAME TAISYOU + {0x878F, 0x337C}, //594 #SQUARE ERA NAME SYOUWA + {0x8790, 0x2252}, //595 #APPROXIMATELY EQUAL TO OR THE IMAGE OF + {0x8791, 0x2261}, //596 #IDENTICAL TO + {0x8792, 0x222B}, //597 #INTEGRAL + {0x8793, 0x222E}, //598 #CONTOUR INTEGRAL + {0x8794, 0x2211}, //599 #N-ARY SUMMATION + {0x8795, 0x221A}, //600 #SQUARE ROOT + {0x8796, 0x22A5}, //601 #UP TACK + {0x8797, 0x2220}, //602 #ANGLE + {0x8798, 0x221F}, //603 #RIGHT ANGLE + {0x8799, 0x22BF}, //604 #RIGHT TRIANGLE + {0x879A, 0x2235}, //605 #BECAUSE + {0x879B, 0x2229}, //606 #INTERSECTION + {0x879C, 0x222A}, //607 #UNION + {0x889F, 0x4E9C}, //608 #CJK UNIFIED IDEOGRAPH + {0x88A0, 0x5516}, //609 #CJK UNIFIED IDEOGRAPH + {0x88A1, 0x5A03}, //610 #CJK UNIFIED IDEOGRAPH + {0x88A2, 0x963F}, //611 #CJK UNIFIED IDEOGRAPH + {0x88A3, 0x54C0}, //612 #CJK UNIFIED IDEOGRAPH + {0x88A4, 0x611B}, //613 #CJK UNIFIED IDEOGRAPH + {0x88A5, 0x6328}, //614 #CJK UNIFIED IDEOGRAPH + {0x88A6, 0x59F6}, //615 #CJK UNIFIED IDEOGRAPH + {0x88A7, 0x9022}, //616 #CJK UNIFIED IDEOGRAPH + {0x88A8, 0x8475}, //617 #CJK UNIFIED IDEOGRAPH + {0x88A9, 0x831C}, //618 #CJK UNIFIED IDEOGRAPH + {0x88AA, 0x7A50}, //619 #CJK UNIFIED IDEOGRAPH + {0x88AB, 0x60AA}, //620 #CJK UNIFIED IDEOGRAPH + {0x88AC, 0x63E1}, //621 #CJK UNIFIED IDEOGRAPH + {0x88AD, 0x6E25}, //622 #CJK UNIFIED IDEOGRAPH + {0x88AE, 0x65ED}, //623 #CJK UNIFIED IDEOGRAPH + {0x88AF, 0x8466}, //624 #CJK UNIFIED IDEOGRAPH + {0x88B0, 0x82A6}, //625 #CJK UNIFIED IDEOGRAPH + {0x88B1, 0x9BF5}, //626 #CJK UNIFIED IDEOGRAPH + {0x88B2, 0x6893}, //627 #CJK UNIFIED IDEOGRAPH + {0x88B3, 0x5727}, //628 #CJK UNIFIED IDEOGRAPH + {0x88B4, 0x65A1}, //629 #CJK UNIFIED IDEOGRAPH + {0x88B5, 0x6271}, //630 #CJK UNIFIED IDEOGRAPH + {0x88B6, 0x5B9B}, //631 #CJK UNIFIED IDEOGRAPH + {0x88B7, 0x59D0}, //632 #CJK UNIFIED IDEOGRAPH + {0x88B8, 0x867B}, //633 #CJK UNIFIED IDEOGRAPH + {0x88B9, 0x98F4}, //634 #CJK UNIFIED IDEOGRAPH + {0x88BA, 0x7D62}, //635 #CJK UNIFIED IDEOGRAPH + {0x88BB, 0x7DBE}, //636 #CJK UNIFIED IDEOGRAPH + {0x88BC, 0x9B8E}, //637 #CJK UNIFIED IDEOGRAPH + {0x88BD, 0x6216}, //638 #CJK UNIFIED IDEOGRAPH + {0x88BE, 0x7C9F}, //639 #CJK UNIFIED IDEOGRAPH + {0x88BF, 0x88B7}, //640 #CJK UNIFIED IDEOGRAPH + {0x88C0, 0x5B89}, //641 #CJK UNIFIED IDEOGRAPH + {0x88C1, 0x5EB5}, //642 #CJK UNIFIED IDEOGRAPH + {0x88C2, 0x6309}, //643 #CJK UNIFIED IDEOGRAPH + {0x88C3, 0x6697}, //644 #CJK UNIFIED IDEOGRAPH + {0x88C4, 0x6848}, //645 #CJK UNIFIED IDEOGRAPH + {0x88C5, 0x95C7}, //646 #CJK UNIFIED IDEOGRAPH + {0x88C6, 0x978D}, //647 #CJK UNIFIED IDEOGRAPH + {0x88C7, 0x674F}, //648 #CJK UNIFIED IDEOGRAPH + {0x88C8, 0x4EE5}, //649 #CJK UNIFIED IDEOGRAPH + {0x88C9, 0x4F0A}, //650 #CJK UNIFIED IDEOGRAPH + {0x88CA, 0x4F4D}, //651 #CJK UNIFIED IDEOGRAPH + {0x88CB, 0x4F9D}, //652 #CJK UNIFIED IDEOGRAPH + {0x88CC, 0x5049}, //653 #CJK UNIFIED IDEOGRAPH + {0x88CD, 0x56F2}, //654 #CJK UNIFIED IDEOGRAPH + {0x88CE, 0x5937}, //655 #CJK UNIFIED IDEOGRAPH + {0x88CF, 0x59D4}, //656 #CJK UNIFIED IDEOGRAPH + {0x88D0, 0x5A01}, //657 #CJK UNIFIED IDEOGRAPH + {0x88D1, 0x5C09}, //658 #CJK UNIFIED IDEOGRAPH + {0x88D2, 0x60DF}, //659 #CJK UNIFIED IDEOGRAPH + {0x88D3, 0x610F}, //660 #CJK UNIFIED IDEOGRAPH + {0x88D4, 0x6170}, //661 #CJK UNIFIED IDEOGRAPH + {0x88D5, 0x6613}, //662 #CJK UNIFIED IDEOGRAPH + {0x88D6, 0x6905}, //663 #CJK UNIFIED IDEOGRAPH + {0x88D7, 0x70BA}, //664 #CJK UNIFIED IDEOGRAPH + {0x88D8, 0x754F}, //665 #CJK UNIFIED IDEOGRAPH + {0x88D9, 0x7570}, //666 #CJK UNIFIED IDEOGRAPH + {0x88DA, 0x79FB}, //667 #CJK UNIFIED IDEOGRAPH + {0x88DB, 0x7DAD}, //668 #CJK UNIFIED IDEOGRAPH + {0x88DC, 0x7DEF}, //669 #CJK UNIFIED IDEOGRAPH + {0x88DD, 0x80C3}, //670 #CJK UNIFIED IDEOGRAPH + {0x88DE, 0x840E}, //671 #CJK UNIFIED IDEOGRAPH + {0x88DF, 0x8863}, //672 #CJK UNIFIED IDEOGRAPH + {0x88E0, 0x8B02}, //673 #CJK UNIFIED IDEOGRAPH + {0x88E1, 0x9055}, //674 #CJK UNIFIED IDEOGRAPH + {0x88E2, 0x907A}, //675 #CJK UNIFIED IDEOGRAPH + {0x88E3, 0x533B}, //676 #CJK UNIFIED IDEOGRAPH + {0x88E4, 0x4E95}, //677 #CJK UNIFIED IDEOGRAPH + {0x88E5, 0x4EA5}, //678 #CJK UNIFIED IDEOGRAPH + {0x88E6, 0x57DF}, //679 #CJK UNIFIED IDEOGRAPH + {0x88E7, 0x80B2}, //680 #CJK UNIFIED IDEOGRAPH + {0x88E8, 0x90C1}, //681 #CJK UNIFIED IDEOGRAPH + {0x88E9, 0x78EF}, //682 #CJK UNIFIED IDEOGRAPH + {0x88EA, 0x4E00}, //683 #CJK UNIFIED IDEOGRAPH + {0x88EB, 0x58F1}, //684 #CJK UNIFIED IDEOGRAPH + {0x88EC, 0x6EA2}, //685 #CJK UNIFIED IDEOGRAPH + {0x88ED, 0x9038}, //686 #CJK UNIFIED IDEOGRAPH + {0x88EE, 0x7A32}, //687 #CJK UNIFIED IDEOGRAPH + {0x88EF, 0x8328}, //688 #CJK UNIFIED IDEOGRAPH + {0x88F0, 0x828B}, //689 #CJK UNIFIED IDEOGRAPH + {0x88F1, 0x9C2F}, //690 #CJK UNIFIED IDEOGRAPH + {0x88F2, 0x5141}, //691 #CJK UNIFIED IDEOGRAPH + {0x88F3, 0x5370}, //692 #CJK UNIFIED IDEOGRAPH + {0x88F4, 0x54BD}, //693 #CJK UNIFIED IDEOGRAPH + {0x88F5, 0x54E1}, //694 #CJK UNIFIED IDEOGRAPH + {0x88F6, 0x56E0}, //695 #CJK UNIFIED IDEOGRAPH + {0x88F7, 0x59FB}, //696 #CJK UNIFIED IDEOGRAPH + {0x88F8, 0x5F15}, //697 #CJK UNIFIED IDEOGRAPH + {0x88F9, 0x98F2}, //698 #CJK UNIFIED IDEOGRAPH + {0x88FA, 0x6DEB}, //699 #CJK UNIFIED IDEOGRAPH + {0x88FB, 0x80E4}, //700 #CJK UNIFIED IDEOGRAPH + {0x88FC, 0x852D}, //701 #CJK UNIFIED IDEOGRAPH + {0x8940, 0x9662}, //702 #CJK UNIFIED IDEOGRAPH + {0x8941, 0x9670}, //703 #CJK UNIFIED IDEOGRAPH + {0x8942, 0x96A0}, //704 #CJK UNIFIED IDEOGRAPH + {0x8943, 0x97FB}, //705 #CJK UNIFIED IDEOGRAPH + {0x8944, 0x540B}, //706 #CJK UNIFIED IDEOGRAPH + {0x8945, 0x53F3}, //707 #CJK UNIFIED IDEOGRAPH + {0x8946, 0x5B87}, //708 #CJK UNIFIED IDEOGRAPH + {0x8947, 0x70CF}, //709 #CJK UNIFIED IDEOGRAPH + {0x8948, 0x7FBD}, //710 #CJK UNIFIED IDEOGRAPH + {0x8949, 0x8FC2}, //711 #CJK UNIFIED IDEOGRAPH + {0x894A, 0x96E8}, //712 #CJK UNIFIED IDEOGRAPH + {0x894B, 0x536F}, //713 #CJK UNIFIED IDEOGRAPH + {0x894C, 0x9D5C}, //714 #CJK UNIFIED IDEOGRAPH + {0x894D, 0x7ABA}, //715 #CJK UNIFIED IDEOGRAPH + {0x894E, 0x4E11}, //716 #CJK UNIFIED IDEOGRAPH + {0x894F, 0x7893}, //717 #CJK UNIFIED IDEOGRAPH + {0x8950, 0x81FC}, //718 #CJK UNIFIED IDEOGRAPH + {0x8951, 0x6E26}, //719 #CJK UNIFIED IDEOGRAPH + {0x8952, 0x5618}, //720 #CJK UNIFIED IDEOGRAPH + {0x8953, 0x5504}, //721 #CJK UNIFIED IDEOGRAPH + {0x8954, 0x6B1D}, //722 #CJK UNIFIED IDEOGRAPH + {0x8955, 0x851A}, //723 #CJK UNIFIED IDEOGRAPH + {0x8956, 0x9C3B}, //724 #CJK UNIFIED IDEOGRAPH + {0x8957, 0x59E5}, //725 #CJK UNIFIED IDEOGRAPH + {0x8958, 0x53A9}, //726 #CJK UNIFIED IDEOGRAPH + {0x8959, 0x6D66}, //727 #CJK UNIFIED IDEOGRAPH + {0x895A, 0x74DC}, //728 #CJK UNIFIED IDEOGRAPH + {0x895B, 0x958F}, //729 #CJK UNIFIED IDEOGRAPH + {0x895C, 0x5642}, //730 #CJK UNIFIED IDEOGRAPH + {0x895D, 0x4E91}, //731 #CJK UNIFIED IDEOGRAPH + {0x895E, 0x904B}, //732 #CJK UNIFIED IDEOGRAPH + {0x895F, 0x96F2}, //733 #CJK UNIFIED IDEOGRAPH + {0x8960, 0x834F}, //734 #CJK UNIFIED IDEOGRAPH + {0x8961, 0x990C}, //735 #CJK UNIFIED IDEOGRAPH + {0x8962, 0x53E1}, //736 #CJK UNIFIED IDEOGRAPH + {0x8963, 0x55B6}, //737 #CJK UNIFIED IDEOGRAPH + {0x8964, 0x5B30}, //738 #CJK UNIFIED IDEOGRAPH + {0x8965, 0x5F71}, //739 #CJK UNIFIED IDEOGRAPH + {0x8966, 0x6620}, //740 #CJK UNIFIED IDEOGRAPH + {0x8967, 0x66F3}, //741 #CJK UNIFIED IDEOGRAPH + {0x8968, 0x6804}, //742 #CJK UNIFIED IDEOGRAPH + {0x8969, 0x6C38}, //743 #CJK UNIFIED IDEOGRAPH + {0x896A, 0x6CF3}, //744 #CJK UNIFIED IDEOGRAPH + {0x896B, 0x6D29}, //745 #CJK UNIFIED IDEOGRAPH + {0x896C, 0x745B}, //746 #CJK UNIFIED IDEOGRAPH + {0x896D, 0x76C8}, //747 #CJK UNIFIED IDEOGRAPH + {0x896E, 0x7A4E}, //748 #CJK UNIFIED IDEOGRAPH + {0x896F, 0x9834}, //749 #CJK UNIFIED IDEOGRAPH + {0x8970, 0x82F1}, //750 #CJK UNIFIED IDEOGRAPH + {0x8971, 0x885B}, //751 #CJK UNIFIED IDEOGRAPH + {0x8972, 0x8A60}, //752 #CJK UNIFIED IDEOGRAPH + {0x8973, 0x92ED}, //753 #CJK UNIFIED IDEOGRAPH + {0x8974, 0x6DB2}, //754 #CJK UNIFIED IDEOGRAPH + {0x8975, 0x75AB}, //755 #CJK UNIFIED IDEOGRAPH + {0x8976, 0x76CA}, //756 #CJK UNIFIED IDEOGRAPH + {0x8977, 0x99C5}, //757 #CJK UNIFIED IDEOGRAPH + {0x8978, 0x60A6}, //758 #CJK UNIFIED IDEOGRAPH + {0x8979, 0x8B01}, //759 #CJK UNIFIED IDEOGRAPH + {0x897A, 0x8D8A}, //760 #CJK UNIFIED IDEOGRAPH + {0x897B, 0x95B2}, //761 #CJK UNIFIED IDEOGRAPH + {0x897C, 0x698E}, //762 #CJK UNIFIED IDEOGRAPH + {0x897D, 0x53AD}, //763 #CJK UNIFIED IDEOGRAPH + {0x897E, 0x5186}, //764 #CJK UNIFIED IDEOGRAPH + {0x8980, 0x5712}, //765 #CJK UNIFIED IDEOGRAPH + {0x8981, 0x5830}, //766 #CJK UNIFIED IDEOGRAPH + {0x8982, 0x5944}, //767 #CJK UNIFIED IDEOGRAPH + {0x8983, 0x5BB4}, //768 #CJK UNIFIED IDEOGRAPH + {0x8984, 0x5EF6}, //769 #CJK UNIFIED IDEOGRAPH + {0x8985, 0x6028}, //770 #CJK UNIFIED IDEOGRAPH + {0x8986, 0x63A9}, //771 #CJK UNIFIED IDEOGRAPH + {0x8987, 0x63F4}, //772 #CJK UNIFIED IDEOGRAPH + {0x8988, 0x6CBF}, //773 #CJK UNIFIED IDEOGRAPH + {0x8989, 0x6F14}, //774 #CJK UNIFIED IDEOGRAPH + {0x898A, 0x708E}, //775 #CJK UNIFIED IDEOGRAPH + {0x898B, 0x7114}, //776 #CJK UNIFIED IDEOGRAPH + {0x898C, 0x7159}, //777 #CJK UNIFIED IDEOGRAPH + {0x898D, 0x71D5}, //778 #CJK UNIFIED IDEOGRAPH + {0x898E, 0x733F}, //779 #CJK UNIFIED IDEOGRAPH + {0x898F, 0x7E01}, //780 #CJK UNIFIED IDEOGRAPH + {0x8990, 0x8276}, //781 #CJK UNIFIED IDEOGRAPH + {0x8991, 0x82D1}, //782 #CJK UNIFIED IDEOGRAPH + {0x8992, 0x8597}, //783 #CJK UNIFIED IDEOGRAPH + {0x8993, 0x9060}, //784 #CJK UNIFIED IDEOGRAPH + {0x8994, 0x925B}, //785 #CJK UNIFIED IDEOGRAPH + {0x8995, 0x9D1B}, //786 #CJK UNIFIED IDEOGRAPH + {0x8996, 0x5869}, //787 #CJK UNIFIED IDEOGRAPH + {0x8997, 0x65BC}, //788 #CJK UNIFIED IDEOGRAPH + {0x8998, 0x6C5A}, //789 #CJK UNIFIED IDEOGRAPH + {0x8999, 0x7525}, //790 #CJK UNIFIED IDEOGRAPH + {0x899A, 0x51F9}, //791 #CJK UNIFIED IDEOGRAPH + {0x899B, 0x592E}, //792 #CJK UNIFIED IDEOGRAPH + {0x899C, 0x5965}, //793 #CJK UNIFIED IDEOGRAPH + {0x899D, 0x5F80}, //794 #CJK UNIFIED IDEOGRAPH + {0x899E, 0x5FDC}, //795 #CJK UNIFIED IDEOGRAPH + {0x899F, 0x62BC}, //796 #CJK UNIFIED IDEOGRAPH + {0x89A0, 0x65FA}, //797 #CJK UNIFIED IDEOGRAPH + {0x89A1, 0x6A2A}, //798 #CJK UNIFIED IDEOGRAPH + {0x89A2, 0x6B27}, //799 #CJK UNIFIED IDEOGRAPH + {0x89A3, 0x6BB4}, //800 #CJK UNIFIED IDEOGRAPH + {0x89A4, 0x738B}, //801 #CJK UNIFIED IDEOGRAPH + {0x89A5, 0x7FC1}, //802 #CJK UNIFIED IDEOGRAPH + {0x89A6, 0x8956}, //803 #CJK UNIFIED IDEOGRAPH + {0x89A7, 0x9D2C}, //804 #CJK UNIFIED IDEOGRAPH + {0x89A8, 0x9D0E}, //805 #CJK UNIFIED IDEOGRAPH + {0x89A9, 0x9EC4}, //806 #CJK UNIFIED IDEOGRAPH + {0x89AA, 0x5CA1}, //807 #CJK UNIFIED IDEOGRAPH + {0x89AB, 0x6C96}, //808 #CJK UNIFIED IDEOGRAPH + {0x89AC, 0x837B}, //809 #CJK UNIFIED IDEOGRAPH + {0x89AD, 0x5104}, //810 #CJK UNIFIED IDEOGRAPH + {0x89AE, 0x5C4B}, //811 #CJK UNIFIED IDEOGRAPH + {0x89AF, 0x61B6}, //812 #CJK UNIFIED IDEOGRAPH + {0x89B0, 0x81C6}, //813 #CJK UNIFIED IDEOGRAPH + {0x89B1, 0x6876}, //814 #CJK UNIFIED IDEOGRAPH + {0x89B2, 0x7261}, //815 #CJK UNIFIED IDEOGRAPH + {0x89B3, 0x4E59}, //816 #CJK UNIFIED IDEOGRAPH + {0x89B4, 0x4FFA}, //817 #CJK UNIFIED IDEOGRAPH + {0x89B5, 0x5378}, //818 #CJK UNIFIED IDEOGRAPH + {0x89B6, 0x6069}, //819 #CJK UNIFIED IDEOGRAPH + {0x89B7, 0x6E29}, //820 #CJK UNIFIED IDEOGRAPH + {0x89B8, 0x7A4F}, //821 #CJK UNIFIED IDEOGRAPH + {0x89B9, 0x97F3}, //822 #CJK UNIFIED IDEOGRAPH + {0x89BA, 0x4E0B}, //823 #CJK UNIFIED IDEOGRAPH + {0x89BB, 0x5316}, //824 #CJK UNIFIED IDEOGRAPH + {0x89BC, 0x4EEE}, //825 #CJK UNIFIED IDEOGRAPH + {0x89BD, 0x4F55}, //826 #CJK UNIFIED IDEOGRAPH + {0x89BE, 0x4F3D}, //827 #CJK UNIFIED IDEOGRAPH + {0x89BF, 0x4FA1}, //828 #CJK UNIFIED IDEOGRAPH + {0x89C0, 0x4F73}, //829 #CJK UNIFIED IDEOGRAPH + {0x89C1, 0x52A0}, //830 #CJK UNIFIED IDEOGRAPH + {0x89C2, 0x53EF}, //831 #CJK UNIFIED IDEOGRAPH + {0x89C3, 0x5609}, //832 #CJK UNIFIED IDEOGRAPH + {0x89C4, 0x590F}, //833 #CJK UNIFIED IDEOGRAPH + {0x89C5, 0x5AC1}, //834 #CJK UNIFIED IDEOGRAPH + {0x89C6, 0x5BB6}, //835 #CJK UNIFIED IDEOGRAPH + {0x89C7, 0x5BE1}, //836 #CJK UNIFIED IDEOGRAPH + {0x89C8, 0x79D1}, //837 #CJK UNIFIED IDEOGRAPH + {0x89C9, 0x6687}, //838 #CJK UNIFIED IDEOGRAPH + {0x89CA, 0x679C}, //839 #CJK UNIFIED IDEOGRAPH + {0x89CB, 0x67B6}, //840 #CJK UNIFIED IDEOGRAPH + {0x89CC, 0x6B4C}, //841 #CJK UNIFIED IDEOGRAPH + {0x89CD, 0x6CB3}, //842 #CJK UNIFIED IDEOGRAPH + {0x89CE, 0x706B}, //843 #CJK UNIFIED IDEOGRAPH + {0x89CF, 0x73C2}, //844 #CJK UNIFIED IDEOGRAPH + {0x89D0, 0x798D}, //845 #CJK UNIFIED IDEOGRAPH + {0x89D1, 0x79BE}, //846 #CJK UNIFIED IDEOGRAPH + {0x89D2, 0x7A3C}, //847 #CJK UNIFIED IDEOGRAPH + {0x89D3, 0x7B87}, //848 #CJK UNIFIED IDEOGRAPH + {0x89D4, 0x82B1}, //849 #CJK UNIFIED IDEOGRAPH + {0x89D5, 0x82DB}, //850 #CJK UNIFIED IDEOGRAPH + {0x89D6, 0x8304}, //851 #CJK UNIFIED IDEOGRAPH + {0x89D7, 0x8377}, //852 #CJK UNIFIED IDEOGRAPH + {0x89D8, 0x83EF}, //853 #CJK UNIFIED IDEOGRAPH + {0x89D9, 0x83D3}, //854 #CJK UNIFIED IDEOGRAPH + {0x89DA, 0x8766}, //855 #CJK UNIFIED IDEOGRAPH + {0x89DB, 0x8AB2}, //856 #CJK UNIFIED IDEOGRAPH + {0x89DC, 0x5629}, //857 #CJK UNIFIED IDEOGRAPH + {0x89DD, 0x8CA8}, //858 #CJK UNIFIED IDEOGRAPH + {0x89DE, 0x8FE6}, //859 #CJK UNIFIED IDEOGRAPH + {0x89DF, 0x904E}, //860 #CJK UNIFIED IDEOGRAPH + {0x89E0, 0x971E}, //861 #CJK UNIFIED IDEOGRAPH + {0x89E1, 0x868A}, //862 #CJK UNIFIED IDEOGRAPH + {0x89E2, 0x4FC4}, //863 #CJK UNIFIED IDEOGRAPH + {0x89E3, 0x5CE8}, //864 #CJK UNIFIED IDEOGRAPH + {0x89E4, 0x6211}, //865 #CJK UNIFIED IDEOGRAPH + {0x89E5, 0x7259}, //866 #CJK UNIFIED IDEOGRAPH + {0x89E6, 0x753B}, //867 #CJK UNIFIED IDEOGRAPH + {0x89E7, 0x81E5}, //868 #CJK UNIFIED IDEOGRAPH + {0x89E8, 0x82BD}, //869 #CJK UNIFIED IDEOGRAPH + {0x89E9, 0x86FE}, //870 #CJK UNIFIED IDEOGRAPH + {0x89EA, 0x8CC0}, //871 #CJK UNIFIED IDEOGRAPH + {0x89EB, 0x96C5}, //872 #CJK UNIFIED IDEOGRAPH + {0x89EC, 0x9913}, //873 #CJK UNIFIED IDEOGRAPH + {0x89ED, 0x99D5}, //874 #CJK UNIFIED IDEOGRAPH + {0x89EE, 0x4ECB}, //875 #CJK UNIFIED IDEOGRAPH + {0x89EF, 0x4F1A}, //876 #CJK UNIFIED IDEOGRAPH + {0x89F0, 0x89E3}, //877 #CJK UNIFIED IDEOGRAPH + {0x89F1, 0x56DE}, //878 #CJK UNIFIED IDEOGRAPH + {0x89F2, 0x584A}, //879 #CJK UNIFIED IDEOGRAPH + {0x89F3, 0x58CA}, //880 #CJK UNIFIED IDEOGRAPH + {0x89F4, 0x5EFB}, //881 #CJK UNIFIED IDEOGRAPH + {0x89F5, 0x5FEB}, //882 #CJK UNIFIED IDEOGRAPH + {0x89F6, 0x602A}, //883 #CJK UNIFIED IDEOGRAPH + {0x89F7, 0x6094}, //884 #CJK UNIFIED IDEOGRAPH + {0x89F8, 0x6062}, //885 #CJK UNIFIED IDEOGRAPH + {0x89F9, 0x61D0}, //886 #CJK UNIFIED IDEOGRAPH + {0x89FA, 0x6212}, //887 #CJK UNIFIED IDEOGRAPH + {0x89FB, 0x62D0}, //888 #CJK UNIFIED IDEOGRAPH + {0x89FC, 0x6539}, //889 #CJK UNIFIED IDEOGRAPH + {0x8A40, 0x9B41}, //890 #CJK UNIFIED IDEOGRAPH + {0x8A41, 0x6666}, //891 #CJK UNIFIED IDEOGRAPH + {0x8A42, 0x68B0}, //892 #CJK UNIFIED IDEOGRAPH + {0x8A43, 0x6D77}, //893 #CJK UNIFIED IDEOGRAPH + {0x8A44, 0x7070}, //894 #CJK UNIFIED IDEOGRAPH + {0x8A45, 0x754C}, //895 #CJK UNIFIED IDEOGRAPH + {0x8A46, 0x7686}, //896 #CJK UNIFIED IDEOGRAPH + {0x8A47, 0x7D75}, //897 #CJK UNIFIED IDEOGRAPH + {0x8A48, 0x82A5}, //898 #CJK UNIFIED IDEOGRAPH + {0x8A49, 0x87F9}, //899 #CJK UNIFIED IDEOGRAPH + {0x8A4A, 0x958B}, //900 #CJK UNIFIED IDEOGRAPH + {0x8A4B, 0x968E}, //901 #CJK UNIFIED IDEOGRAPH + {0x8A4C, 0x8C9D}, //902 #CJK UNIFIED IDEOGRAPH + {0x8A4D, 0x51F1}, //903 #CJK UNIFIED IDEOGRAPH + {0x8A4E, 0x52BE}, //904 #CJK UNIFIED IDEOGRAPH + {0x8A4F, 0x5916}, //905 #CJK UNIFIED IDEOGRAPH + {0x8A50, 0x54B3}, //906 #CJK UNIFIED IDEOGRAPH + {0x8A51, 0x5BB3}, //907 #CJK UNIFIED IDEOGRAPH + {0x8A52, 0x5D16}, //908 #CJK UNIFIED IDEOGRAPH + {0x8A53, 0x6168}, //909 #CJK UNIFIED IDEOGRAPH + {0x8A54, 0x6982}, //910 #CJK UNIFIED IDEOGRAPH + {0x8A55, 0x6DAF}, //911 #CJK UNIFIED IDEOGRAPH + {0x8A56, 0x788D}, //912 #CJK UNIFIED IDEOGRAPH + {0x8A57, 0x84CB}, //913 #CJK UNIFIED IDEOGRAPH + {0x8A58, 0x8857}, //914 #CJK UNIFIED IDEOGRAPH + {0x8A59, 0x8A72}, //915 #CJK UNIFIED IDEOGRAPH + {0x8A5A, 0x93A7}, //916 #CJK UNIFIED IDEOGRAPH + {0x8A5B, 0x9AB8}, //917 #CJK UNIFIED IDEOGRAPH + {0x8A5C, 0x6D6C}, //918 #CJK UNIFIED IDEOGRAPH + {0x8A5D, 0x99A8}, //919 #CJK UNIFIED IDEOGRAPH + {0x8A5E, 0x86D9}, //920 #CJK UNIFIED IDEOGRAPH + {0x8A5F, 0x57A3}, //921 #CJK UNIFIED IDEOGRAPH + {0x8A60, 0x67FF}, //922 #CJK UNIFIED IDEOGRAPH + {0x8A61, 0x86CE}, //923 #CJK UNIFIED IDEOGRAPH + {0x8A62, 0x920E}, //924 #CJK UNIFIED IDEOGRAPH + {0x8A63, 0x5283}, //925 #CJK UNIFIED IDEOGRAPH + {0x8A64, 0x5687}, //926 #CJK UNIFIED IDEOGRAPH + {0x8A65, 0x5404}, //927 #CJK UNIFIED IDEOGRAPH + {0x8A66, 0x5ED3}, //928 #CJK UNIFIED IDEOGRAPH + {0x8A67, 0x62E1}, //929 #CJK UNIFIED IDEOGRAPH + {0x8A68, 0x64B9}, //930 #CJK UNIFIED IDEOGRAPH + {0x8A69, 0x683C}, //931 #CJK UNIFIED IDEOGRAPH + {0x8A6A, 0x6838}, //932 #CJK UNIFIED IDEOGRAPH + {0x8A6B, 0x6BBB}, //933 #CJK UNIFIED IDEOGRAPH + {0x8A6C, 0x7372}, //934 #CJK UNIFIED IDEOGRAPH + {0x8A6D, 0x78BA}, //935 #CJK UNIFIED IDEOGRAPH + {0x8A6E, 0x7A6B}, //936 #CJK UNIFIED IDEOGRAPH + {0x8A6F, 0x899A}, //937 #CJK UNIFIED IDEOGRAPH + {0x8A70, 0x89D2}, //938 #CJK UNIFIED IDEOGRAPH + {0x8A71, 0x8D6B}, //939 #CJK UNIFIED IDEOGRAPH + {0x8A72, 0x8F03}, //940 #CJK UNIFIED IDEOGRAPH + {0x8A73, 0x90ED}, //941 #CJK UNIFIED IDEOGRAPH + {0x8A74, 0x95A3}, //942 #CJK UNIFIED IDEOGRAPH + {0x8A75, 0x9694}, //943 #CJK UNIFIED IDEOGRAPH + {0x8A76, 0x9769}, //944 #CJK UNIFIED IDEOGRAPH + {0x8A77, 0x5B66}, //945 #CJK UNIFIED IDEOGRAPH + {0x8A78, 0x5CB3}, //946 #CJK UNIFIED IDEOGRAPH + {0x8A79, 0x697D}, //947 #CJK UNIFIED IDEOGRAPH + {0x8A7A, 0x984D}, //948 #CJK UNIFIED IDEOGRAPH + {0x8A7B, 0x984E}, //949 #CJK UNIFIED IDEOGRAPH + {0x8A7C, 0x639B}, //950 #CJK UNIFIED IDEOGRAPH + {0x8A7D, 0x7B20}, //951 #CJK UNIFIED IDEOGRAPH + {0x8A7E, 0x6A2B}, //952 #CJK UNIFIED IDEOGRAPH + {0x8A80, 0x6A7F}, //953 #CJK UNIFIED IDEOGRAPH + {0x8A81, 0x68B6}, //954 #CJK UNIFIED IDEOGRAPH + {0x8A82, 0x9C0D}, //955 #CJK UNIFIED IDEOGRAPH + {0x8A83, 0x6F5F}, //956 #CJK UNIFIED IDEOGRAPH + {0x8A84, 0x5272}, //957 #CJK UNIFIED IDEOGRAPH + {0x8A85, 0x559D}, //958 #CJK UNIFIED IDEOGRAPH + {0x8A86, 0x6070}, //959 #CJK UNIFIED IDEOGRAPH + {0x8A87, 0x62EC}, //960 #CJK UNIFIED IDEOGRAPH + {0x8A88, 0x6D3B}, //961 #CJK UNIFIED IDEOGRAPH + {0x8A89, 0x6E07}, //962 #CJK UNIFIED IDEOGRAPH + {0x8A8A, 0x6ED1}, //963 #CJK UNIFIED IDEOGRAPH + {0x8A8B, 0x845B}, //964 #CJK UNIFIED IDEOGRAPH + {0x8A8C, 0x8910}, //965 #CJK UNIFIED IDEOGRAPH + {0x8A8D, 0x8F44}, //966 #CJK UNIFIED IDEOGRAPH + {0x8A8E, 0x4E14}, //967 #CJK UNIFIED IDEOGRAPH + {0x8A8F, 0x9C39}, //968 #CJK UNIFIED IDEOGRAPH + {0x8A90, 0x53F6}, //969 #CJK UNIFIED IDEOGRAPH + {0x8A91, 0x691B}, //970 #CJK UNIFIED IDEOGRAPH + {0x8A92, 0x6A3A}, //971 #CJK UNIFIED IDEOGRAPH + {0x8A93, 0x9784}, //972 #CJK UNIFIED IDEOGRAPH + {0x8A94, 0x682A}, //973 #CJK UNIFIED IDEOGRAPH + {0x8A95, 0x515C}, //974 #CJK UNIFIED IDEOGRAPH + {0x8A96, 0x7AC3}, //975 #CJK UNIFIED IDEOGRAPH + {0x8A97, 0x84B2}, //976 #CJK UNIFIED IDEOGRAPH + {0x8A98, 0x91DC}, //977 #CJK UNIFIED IDEOGRAPH + {0x8A99, 0x938C}, //978 #CJK UNIFIED IDEOGRAPH + {0x8A9A, 0x565B}, //979 #CJK UNIFIED IDEOGRAPH + {0x8A9B, 0x9D28}, //980 #CJK UNIFIED IDEOGRAPH + {0x8A9C, 0x6822}, //981 #CJK UNIFIED IDEOGRAPH + {0x8A9D, 0x8305}, //982 #CJK UNIFIED IDEOGRAPH + {0x8A9E, 0x8431}, //983 #CJK UNIFIED IDEOGRAPH + {0x8A9F, 0x7CA5}, //984 #CJK UNIFIED IDEOGRAPH + {0x8AA0, 0x5208}, //985 #CJK UNIFIED IDEOGRAPH + {0x8AA1, 0x82C5}, //986 #CJK UNIFIED IDEOGRAPH + {0x8AA2, 0x74E6}, //987 #CJK UNIFIED IDEOGRAPH + {0x8AA3, 0x4E7E}, //988 #CJK UNIFIED IDEOGRAPH + {0x8AA4, 0x4F83}, //989 #CJK UNIFIED IDEOGRAPH + {0x8AA5, 0x51A0}, //990 #CJK UNIFIED IDEOGRAPH + {0x8AA6, 0x5BD2}, //991 #CJK UNIFIED IDEOGRAPH + {0x8AA7, 0x520A}, //992 #CJK UNIFIED IDEOGRAPH + {0x8AA8, 0x52D8}, //993 #CJK UNIFIED IDEOGRAPH + {0x8AA9, 0x52E7}, //994 #CJK UNIFIED IDEOGRAPH + {0x8AAA, 0x5DFB}, //995 #CJK UNIFIED IDEOGRAPH + {0x8AAB, 0x559A}, //996 #CJK UNIFIED IDEOGRAPH + {0x8AAC, 0x582A}, //997 #CJK UNIFIED IDEOGRAPH + {0x8AAD, 0x59E6}, //998 #CJK UNIFIED IDEOGRAPH + {0x8AAE, 0x5B8C}, //999 #CJK UNIFIED IDEOGRAPH + {0x8AAF, 0x5B98}, //1000 #CJK UNIFIED IDEOGRAPH + {0x8AB0, 0x5BDB}, //1001 #CJK UNIFIED IDEOGRAPH + {0x8AB1, 0x5E72}, //1002 #CJK UNIFIED IDEOGRAPH + {0x8AB2, 0x5E79}, //1003 #CJK UNIFIED IDEOGRAPH + {0x8AB3, 0x60A3}, //1004 #CJK UNIFIED IDEOGRAPH + {0x8AB4, 0x611F}, //1005 #CJK UNIFIED IDEOGRAPH + {0x8AB5, 0x6163}, //1006 #CJK UNIFIED IDEOGRAPH + {0x8AB6, 0x61BE}, //1007 #CJK UNIFIED IDEOGRAPH + {0x8AB7, 0x63DB}, //1008 #CJK UNIFIED IDEOGRAPH + {0x8AB8, 0x6562}, //1009 #CJK UNIFIED IDEOGRAPH + {0x8AB9, 0x67D1}, //1010 #CJK UNIFIED IDEOGRAPH + {0x8ABA, 0x6853}, //1011 #CJK UNIFIED IDEOGRAPH + {0x8ABB, 0x68FA}, //1012 #CJK UNIFIED IDEOGRAPH + {0x8ABC, 0x6B3E}, //1013 #CJK UNIFIED IDEOGRAPH + {0x8ABD, 0x6B53}, //1014 #CJK UNIFIED IDEOGRAPH + {0x8ABE, 0x6C57}, //1015 #CJK UNIFIED IDEOGRAPH + {0x8ABF, 0x6F22}, //1016 #CJK UNIFIED IDEOGRAPH + {0x8AC0, 0x6F97}, //1017 #CJK UNIFIED IDEOGRAPH + {0x8AC1, 0x6F45}, //1018 #CJK UNIFIED IDEOGRAPH + {0x8AC2, 0x74B0}, //1019 #CJK UNIFIED IDEOGRAPH + {0x8AC3, 0x7518}, //1020 #CJK UNIFIED IDEOGRAPH + {0x8AC4, 0x76E3}, //1021 #CJK UNIFIED IDEOGRAPH + {0x8AC5, 0x770B}, //1022 #CJK UNIFIED IDEOGRAPH + {0x8AC6, 0x7AFF}, //1023 #CJK UNIFIED IDEOGRAPH + {0x8AC7, 0x7BA1}, //1024 #CJK UNIFIED IDEOGRAPH + {0x8AC8, 0x7C21}, //1025 #CJK UNIFIED IDEOGRAPH + {0x8AC9, 0x7DE9}, //1026 #CJK UNIFIED IDEOGRAPH + {0x8ACA, 0x7F36}, //1027 #CJK UNIFIED IDEOGRAPH + {0x8ACB, 0x7FF0}, //1028 #CJK UNIFIED IDEOGRAPH + {0x8ACC, 0x809D}, //1029 #CJK UNIFIED IDEOGRAPH + {0x8ACD, 0x8266}, //1030 #CJK UNIFIED IDEOGRAPH + {0x8ACE, 0x839E}, //1031 #CJK UNIFIED IDEOGRAPH + {0x8ACF, 0x89B3}, //1032 #CJK UNIFIED IDEOGRAPH + {0x8AD0, 0x8ACC}, //1033 #CJK UNIFIED IDEOGRAPH + {0x8AD1, 0x8CAB}, //1034 #CJK UNIFIED IDEOGRAPH + {0x8AD2, 0x9084}, //1035 #CJK UNIFIED IDEOGRAPH + {0x8AD3, 0x9451}, //1036 #CJK UNIFIED IDEOGRAPH + {0x8AD4, 0x9593}, //1037 #CJK UNIFIED IDEOGRAPH + {0x8AD5, 0x9591}, //1038 #CJK UNIFIED IDEOGRAPH + {0x8AD6, 0x95A2}, //1039 #CJK UNIFIED IDEOGRAPH + {0x8AD7, 0x9665}, //1040 #CJK UNIFIED IDEOGRAPH + {0x8AD8, 0x97D3}, //1041 #CJK UNIFIED IDEOGRAPH + {0x8AD9, 0x9928}, //1042 #CJK UNIFIED IDEOGRAPH + {0x8ADA, 0x8218}, //1043 #CJK UNIFIED IDEOGRAPH + {0x8ADB, 0x4E38}, //1044 #CJK UNIFIED IDEOGRAPH + {0x8ADC, 0x542B}, //1045 #CJK UNIFIED IDEOGRAPH + {0x8ADD, 0x5CB8}, //1046 #CJK UNIFIED IDEOGRAPH + {0x8ADE, 0x5DCC}, //1047 #CJK UNIFIED IDEOGRAPH + {0x8ADF, 0x73A9}, //1048 #CJK UNIFIED IDEOGRAPH + {0x8AE0, 0x764C}, //1049 #CJK UNIFIED IDEOGRAPH + {0x8AE1, 0x773C}, //1050 #CJK UNIFIED IDEOGRAPH + {0x8AE2, 0x5CA9}, //1051 #CJK UNIFIED IDEOGRAPH + {0x8AE3, 0x7FEB}, //1052 #CJK UNIFIED IDEOGRAPH + {0x8AE4, 0x8D0B}, //1053 #CJK UNIFIED IDEOGRAPH + {0x8AE5, 0x96C1}, //1054 #CJK UNIFIED IDEOGRAPH + {0x8AE6, 0x9811}, //1055 #CJK UNIFIED IDEOGRAPH + {0x8AE7, 0x9854}, //1056 #CJK UNIFIED IDEOGRAPH + {0x8AE8, 0x9858}, //1057 #CJK UNIFIED IDEOGRAPH + {0x8AE9, 0x4F01}, //1058 #CJK UNIFIED IDEOGRAPH + {0x8AEA, 0x4F0E}, //1059 #CJK UNIFIED IDEOGRAPH + {0x8AEB, 0x5371}, //1060 #CJK UNIFIED IDEOGRAPH + {0x8AEC, 0x559C}, //1061 #CJK UNIFIED IDEOGRAPH + {0x8AED, 0x5668}, //1062 #CJK UNIFIED IDEOGRAPH + {0x8AEE, 0x57FA}, //1063 #CJK UNIFIED IDEOGRAPH + {0x8AEF, 0x5947}, //1064 #CJK UNIFIED IDEOGRAPH + {0x8AF0, 0x5B09}, //1065 #CJK UNIFIED IDEOGRAPH + {0x8AF1, 0x5BC4}, //1066 #CJK UNIFIED IDEOGRAPH + {0x8AF2, 0x5C90}, //1067 #CJK UNIFIED IDEOGRAPH + {0x8AF3, 0x5E0C}, //1068 #CJK UNIFIED IDEOGRAPH + {0x8AF4, 0x5E7E}, //1069 #CJK UNIFIED IDEOGRAPH + {0x8AF5, 0x5FCC}, //1070 #CJK UNIFIED IDEOGRAPH + {0x8AF6, 0x63EE}, //1071 #CJK UNIFIED IDEOGRAPH + {0x8AF7, 0x673A}, //1072 #CJK UNIFIED IDEOGRAPH + {0x8AF8, 0x65D7}, //1073 #CJK UNIFIED IDEOGRAPH + {0x8AF9, 0x65E2}, //1074 #CJK UNIFIED IDEOGRAPH + {0x8AFA, 0x671F}, //1075 #CJK UNIFIED IDEOGRAPH + {0x8AFB, 0x68CB}, //1076 #CJK UNIFIED IDEOGRAPH + {0x8AFC, 0x68C4}, //1077 #CJK UNIFIED IDEOGRAPH + {0x8B40, 0x6A5F}, //1078 #CJK UNIFIED IDEOGRAPH + {0x8B41, 0x5E30}, //1079 #CJK UNIFIED IDEOGRAPH + {0x8B42, 0x6BC5}, //1080 #CJK UNIFIED IDEOGRAPH + {0x8B43, 0x6C17}, //1081 #CJK UNIFIED IDEOGRAPH + {0x8B44, 0x6C7D}, //1082 #CJK UNIFIED IDEOGRAPH + {0x8B45, 0x757F}, //1083 #CJK UNIFIED IDEOGRAPH + {0x8B46, 0x7948}, //1084 #CJK UNIFIED IDEOGRAPH + {0x8B47, 0x5B63}, //1085 #CJK UNIFIED IDEOGRAPH + {0x8B48, 0x7A00}, //1086 #CJK UNIFIED IDEOGRAPH + {0x8B49, 0x7D00}, //1087 #CJK UNIFIED IDEOGRAPH + {0x8B4A, 0x5FBD}, //1088 #CJK UNIFIED IDEOGRAPH + {0x8B4B, 0x898F}, //1089 #CJK UNIFIED IDEOGRAPH + {0x8B4C, 0x8A18}, //1090 #CJK UNIFIED IDEOGRAPH + {0x8B4D, 0x8CB4}, //1091 #CJK UNIFIED IDEOGRAPH + {0x8B4E, 0x8D77}, //1092 #CJK UNIFIED IDEOGRAPH + {0x8B4F, 0x8ECC}, //1093 #CJK UNIFIED IDEOGRAPH + {0x8B50, 0x8F1D}, //1094 #CJK UNIFIED IDEOGRAPH + {0x8B51, 0x98E2}, //1095 #CJK UNIFIED IDEOGRAPH + {0x8B52, 0x9A0E}, //1096 #CJK UNIFIED IDEOGRAPH + {0x8B53, 0x9B3C}, //1097 #CJK UNIFIED IDEOGRAPH + {0x8B54, 0x4E80}, //1098 #CJK UNIFIED IDEOGRAPH + {0x8B55, 0x507D}, //1099 #CJK UNIFIED IDEOGRAPH + {0x8B56, 0x5100}, //1100 #CJK UNIFIED IDEOGRAPH + {0x8B57, 0x5993}, //1101 #CJK UNIFIED IDEOGRAPH + {0x8B58, 0x5B9C}, //1102 #CJK UNIFIED IDEOGRAPH + {0x8B59, 0x622F}, //1103 #CJK UNIFIED IDEOGRAPH + {0x8B5A, 0x6280}, //1104 #CJK UNIFIED IDEOGRAPH + {0x8B5B, 0x64EC}, //1105 #CJK UNIFIED IDEOGRAPH + {0x8B5C, 0x6B3A}, //1106 #CJK UNIFIED IDEOGRAPH + {0x8B5D, 0x72A0}, //1107 #CJK UNIFIED IDEOGRAPH + {0x8B5E, 0x7591}, //1108 #CJK UNIFIED IDEOGRAPH + {0x8B5F, 0x7947}, //1109 #CJK UNIFIED IDEOGRAPH + {0x8B60, 0x7FA9}, //1110 #CJK UNIFIED IDEOGRAPH + {0x8B61, 0x87FB}, //1111 #CJK UNIFIED IDEOGRAPH + {0x8B62, 0x8ABC}, //1112 #CJK UNIFIED IDEOGRAPH + {0x8B63, 0x8B70}, //1113 #CJK UNIFIED IDEOGRAPH + {0x8B64, 0x63AC}, //1114 #CJK UNIFIED IDEOGRAPH + {0x8B65, 0x83CA}, //1115 #CJK UNIFIED IDEOGRAPH + {0x8B66, 0x97A0}, //1116 #CJK UNIFIED IDEOGRAPH + {0x8B67, 0x5409}, //1117 #CJK UNIFIED IDEOGRAPH + {0x8B68, 0x5403}, //1118 #CJK UNIFIED IDEOGRAPH + {0x8B69, 0x55AB}, //1119 #CJK UNIFIED IDEOGRAPH + {0x8B6A, 0x6854}, //1120 #CJK UNIFIED IDEOGRAPH + {0x8B6B, 0x6A58}, //1121 #CJK UNIFIED IDEOGRAPH + {0x8B6C, 0x8A70}, //1122 #CJK UNIFIED IDEOGRAPH + {0x8B6D, 0x7827}, //1123 #CJK UNIFIED IDEOGRAPH + {0x8B6E, 0x6775}, //1124 #CJK UNIFIED IDEOGRAPH + {0x8B6F, 0x9ECD}, //1125 #CJK UNIFIED IDEOGRAPH + {0x8B70, 0x5374}, //1126 #CJK UNIFIED IDEOGRAPH + {0x8B71, 0x5BA2}, //1127 #CJK UNIFIED IDEOGRAPH + {0x8B72, 0x811A}, //1128 #CJK UNIFIED IDEOGRAPH + {0x8B73, 0x8650}, //1129 #CJK UNIFIED IDEOGRAPH + {0x8B74, 0x9006}, //1130 #CJK UNIFIED IDEOGRAPH + {0x8B75, 0x4E18}, //1131 #CJK UNIFIED IDEOGRAPH + {0x8B76, 0x4E45}, //1132 #CJK UNIFIED IDEOGRAPH + {0x8B77, 0x4EC7}, //1133 #CJK UNIFIED IDEOGRAPH + {0x8B78, 0x4F11}, //1134 #CJK UNIFIED IDEOGRAPH + {0x8B79, 0x53CA}, //1135 #CJK UNIFIED IDEOGRAPH + {0x8B7A, 0x5438}, //1136 #CJK UNIFIED IDEOGRAPH + {0x8B7B, 0x5BAE}, //1137 #CJK UNIFIED IDEOGRAPH + {0x8B7C, 0x5F13}, //1138 #CJK UNIFIED IDEOGRAPH + {0x8B7D, 0x6025}, //1139 #CJK UNIFIED IDEOGRAPH + {0x8B7E, 0x6551}, //1140 #CJK UNIFIED IDEOGRAPH + {0x8B80, 0x673D}, //1141 #CJK UNIFIED IDEOGRAPH + {0x8B81, 0x6C42}, //1142 #CJK UNIFIED IDEOGRAPH + {0x8B82, 0x6C72}, //1143 #CJK UNIFIED IDEOGRAPH + {0x8B83, 0x6CE3}, //1144 #CJK UNIFIED IDEOGRAPH + {0x8B84, 0x7078}, //1145 #CJK UNIFIED IDEOGRAPH + {0x8B85, 0x7403}, //1146 #CJK UNIFIED IDEOGRAPH + {0x8B86, 0x7A76}, //1147 #CJK UNIFIED IDEOGRAPH + {0x8B87, 0x7AAE}, //1148 #CJK UNIFIED IDEOGRAPH + {0x8B88, 0x7B08}, //1149 #CJK UNIFIED IDEOGRAPH + {0x8B89, 0x7D1A}, //1150 #CJK UNIFIED IDEOGRAPH + {0x8B8A, 0x7CFE}, //1151 #CJK UNIFIED IDEOGRAPH + {0x8B8B, 0x7D66}, //1152 #CJK UNIFIED IDEOGRAPH + {0x8B8C, 0x65E7}, //1153 #CJK UNIFIED IDEOGRAPH + {0x8B8D, 0x725B}, //1154 #CJK UNIFIED IDEOGRAPH + {0x8B8E, 0x53BB}, //1155 #CJK UNIFIED IDEOGRAPH + {0x8B8F, 0x5C45}, //1156 #CJK UNIFIED IDEOGRAPH + {0x8B90, 0x5DE8}, //1157 #CJK UNIFIED IDEOGRAPH + {0x8B91, 0x62D2}, //1158 #CJK UNIFIED IDEOGRAPH + {0x8B92, 0x62E0}, //1159 #CJK UNIFIED IDEOGRAPH + {0x8B93, 0x6319}, //1160 #CJK UNIFIED IDEOGRAPH + {0x8B94, 0x6E20}, //1161 #CJK UNIFIED IDEOGRAPH + {0x8B95, 0x865A}, //1162 #CJK UNIFIED IDEOGRAPH + {0x8B96, 0x8A31}, //1163 #CJK UNIFIED IDEOGRAPH + {0x8B97, 0x8DDD}, //1164 #CJK UNIFIED IDEOGRAPH + {0x8B98, 0x92F8}, //1165 #CJK UNIFIED IDEOGRAPH + {0x8B99, 0x6F01}, //1166 #CJK UNIFIED IDEOGRAPH + {0x8B9A, 0x79A6}, //1167 #CJK UNIFIED IDEOGRAPH + {0x8B9B, 0x9B5A}, //1168 #CJK UNIFIED IDEOGRAPH + {0x8B9C, 0x4EA8}, //1169 #CJK UNIFIED IDEOGRAPH + {0x8B9D, 0x4EAB}, //1170 #CJK UNIFIED IDEOGRAPH + {0x8B9E, 0x4EAC}, //1171 #CJK UNIFIED IDEOGRAPH + {0x8B9F, 0x4F9B}, //1172 #CJK UNIFIED IDEOGRAPH + {0x8BA0, 0x4FA0}, //1173 #CJK UNIFIED IDEOGRAPH + {0x8BA1, 0x50D1}, //1174 #CJK UNIFIED IDEOGRAPH + {0x8BA2, 0x5147}, //1175 #CJK UNIFIED IDEOGRAPH + {0x8BA3, 0x7AF6}, //1176 #CJK UNIFIED IDEOGRAPH + {0x8BA4, 0x5171}, //1177 #CJK UNIFIED IDEOGRAPH + {0x8BA5, 0x51F6}, //1178 #CJK UNIFIED IDEOGRAPH + {0x8BA6, 0x5354}, //1179 #CJK UNIFIED IDEOGRAPH + {0x8BA7, 0x5321}, //1180 #CJK UNIFIED IDEOGRAPH + {0x8BA8, 0x537F}, //1181 #CJK UNIFIED IDEOGRAPH + {0x8BA9, 0x53EB}, //1182 #CJK UNIFIED IDEOGRAPH + {0x8BAA, 0x55AC}, //1183 #CJK UNIFIED IDEOGRAPH + {0x8BAB, 0x5883}, //1184 #CJK UNIFIED IDEOGRAPH + {0x8BAC, 0x5CE1}, //1185 #CJK UNIFIED IDEOGRAPH + {0x8BAD, 0x5F37}, //1186 #CJK UNIFIED IDEOGRAPH + {0x8BAE, 0x5F4A}, //1187 #CJK UNIFIED IDEOGRAPH + {0x8BAF, 0x602F}, //1188 #CJK UNIFIED IDEOGRAPH + {0x8BB0, 0x6050}, //1189 #CJK UNIFIED IDEOGRAPH + {0x8BB1, 0x606D}, //1190 #CJK UNIFIED IDEOGRAPH + {0x8BB2, 0x631F}, //1191 #CJK UNIFIED IDEOGRAPH + {0x8BB3, 0x6559}, //1192 #CJK UNIFIED IDEOGRAPH + {0x8BB4, 0x6A4B}, //1193 #CJK UNIFIED IDEOGRAPH + {0x8BB5, 0x6CC1}, //1194 #CJK UNIFIED IDEOGRAPH + {0x8BB6, 0x72C2}, //1195 #CJK UNIFIED IDEOGRAPH + {0x8BB7, 0x72ED}, //1196 #CJK UNIFIED IDEOGRAPH + {0x8BB8, 0x77EF}, //1197 #CJK UNIFIED IDEOGRAPH + {0x8BB9, 0x80F8}, //1198 #CJK UNIFIED IDEOGRAPH + {0x8BBA, 0x8105}, //1199 #CJK UNIFIED IDEOGRAPH + {0x8BBB, 0x8208}, //1200 #CJK UNIFIED IDEOGRAPH + {0x8BBC, 0x854E}, //1201 #CJK UNIFIED IDEOGRAPH + {0x8BBD, 0x90F7}, //1202 #CJK UNIFIED IDEOGRAPH + {0x8BBE, 0x93E1}, //1203 #CJK UNIFIED IDEOGRAPH + {0x8BBF, 0x97FF}, //1204 #CJK UNIFIED IDEOGRAPH + {0x8BC0, 0x9957}, //1205 #CJK UNIFIED IDEOGRAPH + {0x8BC1, 0x9A5A}, //1206 #CJK UNIFIED IDEOGRAPH + {0x8BC2, 0x4EF0}, //1207 #CJK UNIFIED IDEOGRAPH + {0x8BC3, 0x51DD}, //1208 #CJK UNIFIED IDEOGRAPH + {0x8BC4, 0x5C2D}, //1209 #CJK UNIFIED IDEOGRAPH + {0x8BC5, 0x6681}, //1210 #CJK UNIFIED IDEOGRAPH + {0x8BC6, 0x696D}, //1211 #CJK UNIFIED IDEOGRAPH + {0x8BC7, 0x5C40}, //1212 #CJK UNIFIED IDEOGRAPH + {0x8BC8, 0x66F2}, //1213 #CJK UNIFIED IDEOGRAPH + {0x8BC9, 0x6975}, //1214 #CJK UNIFIED IDEOGRAPH + {0x8BCA, 0x7389}, //1215 #CJK UNIFIED IDEOGRAPH + {0x8BCB, 0x6850}, //1216 #CJK UNIFIED IDEOGRAPH + {0x8BCC, 0x7C81}, //1217 #CJK UNIFIED IDEOGRAPH + {0x8BCD, 0x50C5}, //1218 #CJK UNIFIED IDEOGRAPH + {0x8BCE, 0x52E4}, //1219 #CJK UNIFIED IDEOGRAPH + {0x8BCF, 0x5747}, //1220 #CJK UNIFIED IDEOGRAPH + {0x8BD0, 0x5DFE}, //1221 #CJK UNIFIED IDEOGRAPH + {0x8BD1, 0x9326}, //1222 #CJK UNIFIED IDEOGRAPH + {0x8BD2, 0x65A4}, //1223 #CJK UNIFIED IDEOGRAPH + {0x8BD3, 0x6B23}, //1224 #CJK UNIFIED IDEOGRAPH + {0x8BD4, 0x6B3D}, //1225 #CJK UNIFIED IDEOGRAPH + {0x8BD5, 0x7434}, //1226 #CJK UNIFIED IDEOGRAPH + {0x8BD6, 0x7981}, //1227 #CJK UNIFIED IDEOGRAPH + {0x8BD7, 0x79BD}, //1228 #CJK UNIFIED IDEOGRAPH + {0x8BD8, 0x7B4B}, //1229 #CJK UNIFIED IDEOGRAPH + {0x8BD9, 0x7DCA}, //1230 #CJK UNIFIED IDEOGRAPH + {0x8BDA, 0x82B9}, //1231 #CJK UNIFIED IDEOGRAPH + {0x8BDB, 0x83CC}, //1232 #CJK UNIFIED IDEOGRAPH + {0x8BDC, 0x887F}, //1233 #CJK UNIFIED IDEOGRAPH + {0x8BDD, 0x895F}, //1234 #CJK UNIFIED IDEOGRAPH + {0x8BDE, 0x8B39}, //1235 #CJK UNIFIED IDEOGRAPH + {0x8BDF, 0x8FD1}, //1236 #CJK UNIFIED IDEOGRAPH + {0x8BE0, 0x91D1}, //1237 #CJK UNIFIED IDEOGRAPH + {0x8BE1, 0x541F}, //1238 #CJK UNIFIED IDEOGRAPH + {0x8BE2, 0x9280}, //1239 #CJK UNIFIED IDEOGRAPH + {0x8BE3, 0x4E5D}, //1240 #CJK UNIFIED IDEOGRAPH + {0x8BE4, 0x5036}, //1241 #CJK UNIFIED IDEOGRAPH + {0x8BE5, 0x53E5}, //1242 #CJK UNIFIED IDEOGRAPH + {0x8BE6, 0x533A}, //1243 #CJK UNIFIED IDEOGRAPH + {0x8BE7, 0x72D7}, //1244 #CJK UNIFIED IDEOGRAPH + {0x8BE8, 0x7396}, //1245 #CJK UNIFIED IDEOGRAPH + {0x8BE9, 0x77E9}, //1246 #CJK UNIFIED IDEOGRAPH + {0x8BEA, 0x82E6}, //1247 #CJK UNIFIED IDEOGRAPH + {0x8BEB, 0x8EAF}, //1248 #CJK UNIFIED IDEOGRAPH + {0x8BEC, 0x99C6}, //1249 #CJK UNIFIED IDEOGRAPH + {0x8BED, 0x99C8}, //1250 #CJK UNIFIED IDEOGRAPH + {0x8BEE, 0x99D2}, //1251 #CJK UNIFIED IDEOGRAPH + {0x8BEF, 0x5177}, //1252 #CJK UNIFIED IDEOGRAPH + {0x8BF0, 0x611A}, //1253 #CJK UNIFIED IDEOGRAPH + {0x8BF1, 0x865E}, //1254 #CJK UNIFIED IDEOGRAPH + {0x8BF2, 0x55B0}, //1255 #CJK UNIFIED IDEOGRAPH + {0x8BF3, 0x7A7A}, //1256 #CJK UNIFIED IDEOGRAPH + {0x8BF4, 0x5076}, //1257 #CJK UNIFIED IDEOGRAPH + {0x8BF5, 0x5BD3}, //1258 #CJK UNIFIED IDEOGRAPH + {0x8BF6, 0x9047}, //1259 #CJK UNIFIED IDEOGRAPH + {0x8BF7, 0x9685}, //1260 #CJK UNIFIED IDEOGRAPH + {0x8BF8, 0x4E32}, //1261 #CJK UNIFIED IDEOGRAPH + {0x8BF9, 0x6ADB}, //1262 #CJK UNIFIED IDEOGRAPH + {0x8BFA, 0x91E7}, //1263 #CJK UNIFIED IDEOGRAPH + {0x8BFB, 0x5C51}, //1264 #CJK UNIFIED IDEOGRAPH + {0x8BFC, 0x5C48}, //1265 #CJK UNIFIED IDEOGRAPH + {0x8C40, 0x6398}, //1266 #CJK UNIFIED IDEOGRAPH + {0x8C41, 0x7A9F}, //1267 #CJK UNIFIED IDEOGRAPH + {0x8C42, 0x6C93}, //1268 #CJK UNIFIED IDEOGRAPH + {0x8C43, 0x9774}, //1269 #CJK UNIFIED IDEOGRAPH + {0x8C44, 0x8F61}, //1270 #CJK UNIFIED IDEOGRAPH + {0x8C45, 0x7AAA}, //1271 #CJK UNIFIED IDEOGRAPH + {0x8C46, 0x718A}, //1272 #CJK UNIFIED IDEOGRAPH + {0x8C47, 0x9688}, //1273 #CJK UNIFIED IDEOGRAPH + {0x8C48, 0x7C82}, //1274 #CJK UNIFIED IDEOGRAPH + {0x8C49, 0x6817}, //1275 #CJK UNIFIED IDEOGRAPH + {0x8C4A, 0x7E70}, //1276 #CJK UNIFIED IDEOGRAPH + {0x8C4B, 0x6851}, //1277 #CJK UNIFIED IDEOGRAPH + {0x8C4C, 0x936C}, //1278 #CJK UNIFIED IDEOGRAPH + {0x8C4D, 0x52F2}, //1279 #CJK UNIFIED IDEOGRAPH + {0x8C4E, 0x541B}, //1280 #CJK UNIFIED IDEOGRAPH + {0x8C4F, 0x85AB}, //1281 #CJK UNIFIED IDEOGRAPH + {0x8C50, 0x8A13}, //1282 #CJK UNIFIED IDEOGRAPH + {0x8C51, 0x7FA4}, //1283 #CJK UNIFIED IDEOGRAPH + {0x8C52, 0x8ECD}, //1284 #CJK UNIFIED IDEOGRAPH + {0x8C53, 0x90E1}, //1285 #CJK UNIFIED IDEOGRAPH + {0x8C54, 0x5366}, //1286 #CJK UNIFIED IDEOGRAPH + {0x8C55, 0x8888}, //1287 #CJK UNIFIED IDEOGRAPH + {0x8C56, 0x7941}, //1288 #CJK UNIFIED IDEOGRAPH + {0x8C57, 0x4FC2}, //1289 #CJK UNIFIED IDEOGRAPH + {0x8C58, 0x50BE}, //1290 #CJK UNIFIED IDEOGRAPH + {0x8C59, 0x5211}, //1291 #CJK UNIFIED IDEOGRAPH + {0x8C5A, 0x5144}, //1292 #CJK UNIFIED IDEOGRAPH + {0x8C5B, 0x5553}, //1293 #CJK UNIFIED IDEOGRAPH + {0x8C5C, 0x572D}, //1294 #CJK UNIFIED IDEOGRAPH + {0x8C5D, 0x73EA}, //1295 #CJK UNIFIED IDEOGRAPH + {0x8C5E, 0x578B}, //1296 #CJK UNIFIED IDEOGRAPH + {0x8C5F, 0x5951}, //1297 #CJK UNIFIED IDEOGRAPH + {0x8C60, 0x5F62}, //1298 #CJK UNIFIED IDEOGRAPH + {0x8C61, 0x5F84}, //1299 #CJK UNIFIED IDEOGRAPH + {0x8C62, 0x6075}, //1300 #CJK UNIFIED IDEOGRAPH + {0x8C63, 0x6176}, //1301 #CJK UNIFIED IDEOGRAPH + {0x8C64, 0x6167}, //1302 #CJK UNIFIED IDEOGRAPH + {0x8C65, 0x61A9}, //1303 #CJK UNIFIED IDEOGRAPH + {0x8C66, 0x63B2}, //1304 #CJK UNIFIED IDEOGRAPH + {0x8C67, 0x643A}, //1305 #CJK UNIFIED IDEOGRAPH + {0x8C68, 0x656C}, //1306 #CJK UNIFIED IDEOGRAPH + {0x8C69, 0x666F}, //1307 #CJK UNIFIED IDEOGRAPH + {0x8C6A, 0x6842}, //1308 #CJK UNIFIED IDEOGRAPH + {0x8C6B, 0x6E13}, //1309 #CJK UNIFIED IDEOGRAPH + {0x8C6C, 0x7566}, //1310 #CJK UNIFIED IDEOGRAPH + {0x8C6D, 0x7A3D}, //1311 #CJK UNIFIED IDEOGRAPH + {0x8C6E, 0x7CFB}, //1312 #CJK UNIFIED IDEOGRAPH + {0x8C6F, 0x7D4C}, //1313 #CJK UNIFIED IDEOGRAPH + {0x8C70, 0x7D99}, //1314 #CJK UNIFIED IDEOGRAPH + {0x8C71, 0x7E4B}, //1315 #CJK UNIFIED IDEOGRAPH + {0x8C72, 0x7F6B}, //1316 #CJK UNIFIED IDEOGRAPH + {0x8C73, 0x830E}, //1317 #CJK UNIFIED IDEOGRAPH + {0x8C74, 0x834A}, //1318 #CJK UNIFIED IDEOGRAPH + {0x8C75, 0x86CD}, //1319 #CJK UNIFIED IDEOGRAPH + {0x8C76, 0x8A08}, //1320 #CJK UNIFIED IDEOGRAPH + {0x8C77, 0x8A63}, //1321 #CJK UNIFIED IDEOGRAPH + {0x8C78, 0x8B66}, //1322 #CJK UNIFIED IDEOGRAPH + {0x8C79, 0x8EFD}, //1323 #CJK UNIFIED IDEOGRAPH + {0x8C7A, 0x981A}, //1324 #CJK UNIFIED IDEOGRAPH + {0x8C7B, 0x9D8F}, //1325 #CJK UNIFIED IDEOGRAPH + {0x8C7C, 0x82B8}, //1326 #CJK UNIFIED IDEOGRAPH + {0x8C7D, 0x8FCE}, //1327 #CJK UNIFIED IDEOGRAPH + {0x8C7E, 0x9BE8}, //1328 #CJK UNIFIED IDEOGRAPH + {0x8C80, 0x5287}, //1329 #CJK UNIFIED IDEOGRAPH + {0x8C81, 0x621F}, //1330 #CJK UNIFIED IDEOGRAPH + {0x8C82, 0x6483}, //1331 #CJK UNIFIED IDEOGRAPH + {0x8C83, 0x6FC0}, //1332 #CJK UNIFIED IDEOGRAPH + {0x8C84, 0x9699}, //1333 #CJK UNIFIED IDEOGRAPH + {0x8C85, 0x6841}, //1334 #CJK UNIFIED IDEOGRAPH + {0x8C86, 0x5091}, //1335 #CJK UNIFIED IDEOGRAPH + {0x8C87, 0x6B20}, //1336 #CJK UNIFIED IDEOGRAPH + {0x8C88, 0x6C7A}, //1337 #CJK UNIFIED IDEOGRAPH + {0x8C89, 0x6F54}, //1338 #CJK UNIFIED IDEOGRAPH + {0x8C8A, 0x7A74}, //1339 #CJK UNIFIED IDEOGRAPH + {0x8C8B, 0x7D50}, //1340 #CJK UNIFIED IDEOGRAPH + {0x8C8C, 0x8840}, //1341 #CJK UNIFIED IDEOGRAPH + {0x8C8D, 0x8A23}, //1342 #CJK UNIFIED IDEOGRAPH + {0x8C8E, 0x6708}, //1343 #CJK UNIFIED IDEOGRAPH + {0x8C8F, 0x4EF6}, //1344 #CJK UNIFIED IDEOGRAPH + {0x8C90, 0x5039}, //1345 #CJK UNIFIED IDEOGRAPH + {0x8C91, 0x5026}, //1346 #CJK UNIFIED IDEOGRAPH + {0x8C92, 0x5065}, //1347 #CJK UNIFIED IDEOGRAPH + {0x8C93, 0x517C}, //1348 #CJK UNIFIED IDEOGRAPH + {0x8C94, 0x5238}, //1349 #CJK UNIFIED IDEOGRAPH + {0x8C95, 0x5263}, //1350 #CJK UNIFIED IDEOGRAPH + {0x8C96, 0x55A7}, //1351 #CJK UNIFIED IDEOGRAPH + {0x8C97, 0x570F}, //1352 #CJK UNIFIED IDEOGRAPH + {0x8C98, 0x5805}, //1353 #CJK UNIFIED IDEOGRAPH + {0x8C99, 0x5ACC}, //1354 #CJK UNIFIED IDEOGRAPH + {0x8C9A, 0x5EFA}, //1355 #CJK UNIFIED IDEOGRAPH + {0x8C9B, 0x61B2}, //1356 #CJK UNIFIED IDEOGRAPH + {0x8C9C, 0x61F8}, //1357 #CJK UNIFIED IDEOGRAPH + {0x8C9D, 0x62F3}, //1358 #CJK UNIFIED IDEOGRAPH + {0x8C9E, 0x6372}, //1359 #CJK UNIFIED IDEOGRAPH + {0x8C9F, 0x691C}, //1360 #CJK UNIFIED IDEOGRAPH + {0x8CA0, 0x6A29}, //1361 #CJK UNIFIED IDEOGRAPH + {0x8CA1, 0x727D}, //1362 #CJK UNIFIED IDEOGRAPH + {0x8CA2, 0x72AC}, //1363 #CJK UNIFIED IDEOGRAPH + {0x8CA3, 0x732E}, //1364 #CJK UNIFIED IDEOGRAPH + {0x8CA4, 0x7814}, //1365 #CJK UNIFIED IDEOGRAPH + {0x8CA5, 0x786F}, //1366 #CJK UNIFIED IDEOGRAPH + {0x8CA6, 0x7D79}, //1367 #CJK UNIFIED IDEOGRAPH + {0x8CA7, 0x770C}, //1368 #CJK UNIFIED IDEOGRAPH + {0x8CA8, 0x80A9}, //1369 #CJK UNIFIED IDEOGRAPH + {0x8CA9, 0x898B}, //1370 #CJK UNIFIED IDEOGRAPH + {0x8CAA, 0x8B19}, //1371 #CJK UNIFIED IDEOGRAPH + {0x8CAB, 0x8CE2}, //1372 #CJK UNIFIED IDEOGRAPH + {0x8CAC, 0x8ED2}, //1373 #CJK UNIFIED IDEOGRAPH + {0x8CAD, 0x9063}, //1374 #CJK UNIFIED IDEOGRAPH + {0x8CAE, 0x9375}, //1375 #CJK UNIFIED IDEOGRAPH + {0x8CAF, 0x967A}, //1376 #CJK UNIFIED IDEOGRAPH + {0x8CB0, 0x9855}, //1377 #CJK UNIFIED IDEOGRAPH + {0x8CB1, 0x9A13}, //1378 #CJK UNIFIED IDEOGRAPH + {0x8CB2, 0x9E78}, //1379 #CJK UNIFIED IDEOGRAPH + {0x8CB3, 0x5143}, //1380 #CJK UNIFIED IDEOGRAPH + {0x8CB4, 0x539F}, //1381 #CJK UNIFIED IDEOGRAPH + {0x8CB5, 0x53B3}, //1382 #CJK UNIFIED IDEOGRAPH + {0x8CB6, 0x5E7B}, //1383 #CJK UNIFIED IDEOGRAPH + {0x8CB7, 0x5F26}, //1384 #CJK UNIFIED IDEOGRAPH + {0x8CB8, 0x6E1B}, //1385 #CJK UNIFIED IDEOGRAPH + {0x8CB9, 0x6E90}, //1386 #CJK UNIFIED IDEOGRAPH + {0x8CBA, 0x7384}, //1387 #CJK UNIFIED IDEOGRAPH + {0x8CBB, 0x73FE}, //1388 #CJK UNIFIED IDEOGRAPH + {0x8CBC, 0x7D43}, //1389 #CJK UNIFIED IDEOGRAPH + {0x8CBD, 0x8237}, //1390 #CJK UNIFIED IDEOGRAPH + {0x8CBE, 0x8A00}, //1391 #CJK UNIFIED IDEOGRAPH + {0x8CBF, 0x8AFA}, //1392 #CJK UNIFIED IDEOGRAPH + {0x8CC0, 0x9650}, //1393 #CJK UNIFIED IDEOGRAPH + {0x8CC1, 0x4E4E}, //1394 #CJK UNIFIED IDEOGRAPH + {0x8CC2, 0x500B}, //1395 #CJK UNIFIED IDEOGRAPH + {0x8CC3, 0x53E4}, //1396 #CJK UNIFIED IDEOGRAPH + {0x8CC4, 0x547C}, //1397 #CJK UNIFIED IDEOGRAPH + {0x8CC5, 0x56FA}, //1398 #CJK UNIFIED IDEOGRAPH + {0x8CC6, 0x59D1}, //1399 #CJK UNIFIED IDEOGRAPH + {0x8CC7, 0x5B64}, //1400 #CJK UNIFIED IDEOGRAPH + {0x8CC8, 0x5DF1}, //1401 #CJK UNIFIED IDEOGRAPH + {0x8CC9, 0x5EAB}, //1402 #CJK UNIFIED IDEOGRAPH + {0x8CCA, 0x5F27}, //1403 #CJK UNIFIED IDEOGRAPH + {0x8CCB, 0x6238}, //1404 #CJK UNIFIED IDEOGRAPH + {0x8CCC, 0x6545}, //1405 #CJK UNIFIED IDEOGRAPH + {0x8CCD, 0x67AF}, //1406 #CJK UNIFIED IDEOGRAPH + {0x8CCE, 0x6E56}, //1407 #CJK UNIFIED IDEOGRAPH + {0x8CCF, 0x72D0}, //1408 #CJK UNIFIED IDEOGRAPH + {0x8CD0, 0x7CCA}, //1409 #CJK UNIFIED IDEOGRAPH + {0x8CD1, 0x88B4}, //1410 #CJK UNIFIED IDEOGRAPH + {0x8CD2, 0x80A1}, //1411 #CJK UNIFIED IDEOGRAPH + {0x8CD3, 0x80E1}, //1412 #CJK UNIFIED IDEOGRAPH + {0x8CD4, 0x83F0}, //1413 #CJK UNIFIED IDEOGRAPH + {0x8CD5, 0x864E}, //1414 #CJK UNIFIED IDEOGRAPH + {0x8CD6, 0x8A87}, //1415 #CJK UNIFIED IDEOGRAPH + {0x8CD7, 0x8DE8}, //1416 #CJK UNIFIED IDEOGRAPH + {0x8CD8, 0x9237}, //1417 #CJK UNIFIED IDEOGRAPH + {0x8CD9, 0x96C7}, //1418 #CJK UNIFIED IDEOGRAPH + {0x8CDA, 0x9867}, //1419 #CJK UNIFIED IDEOGRAPH + {0x8CDB, 0x9F13}, //1420 #CJK UNIFIED IDEOGRAPH + {0x8CDC, 0x4E94}, //1421 #CJK UNIFIED IDEOGRAPH + {0x8CDD, 0x4E92}, //1422 #CJK UNIFIED IDEOGRAPH + {0x8CDE, 0x4F0D}, //1423 #CJK UNIFIED IDEOGRAPH + {0x8CDF, 0x5348}, //1424 #CJK UNIFIED IDEOGRAPH + {0x8CE0, 0x5449}, //1425 #CJK UNIFIED IDEOGRAPH + {0x8CE1, 0x543E}, //1426 #CJK UNIFIED IDEOGRAPH + {0x8CE2, 0x5A2F}, //1427 #CJK UNIFIED IDEOGRAPH + {0x8CE3, 0x5F8C}, //1428 #CJK UNIFIED IDEOGRAPH + {0x8CE4, 0x5FA1}, //1429 #CJK UNIFIED IDEOGRAPH + {0x8CE5, 0x609F}, //1430 #CJK UNIFIED IDEOGRAPH + {0x8CE6, 0x68A7}, //1431 #CJK UNIFIED IDEOGRAPH + {0x8CE7, 0x6A8E}, //1432 #CJK UNIFIED IDEOGRAPH + {0x8CE8, 0x745A}, //1433 #CJK UNIFIED IDEOGRAPH + {0x8CE9, 0x7881}, //1434 #CJK UNIFIED IDEOGRAPH + {0x8CEA, 0x8A9E}, //1435 #CJK UNIFIED IDEOGRAPH + {0x8CEB, 0x8AA4}, //1436 #CJK UNIFIED IDEOGRAPH + {0x8CEC, 0x8B77}, //1437 #CJK UNIFIED IDEOGRAPH + {0x8CED, 0x9190}, //1438 #CJK UNIFIED IDEOGRAPH + {0x8CEE, 0x4E5E}, //1439 #CJK UNIFIED IDEOGRAPH + {0x8CEF, 0x9BC9}, //1440 #CJK UNIFIED IDEOGRAPH + {0x8CF0, 0x4EA4}, //1441 #CJK UNIFIED IDEOGRAPH + {0x8CF1, 0x4F7C}, //1442 #CJK UNIFIED IDEOGRAPH + {0x8CF2, 0x4FAF}, //1443 #CJK UNIFIED IDEOGRAPH + {0x8CF3, 0x5019}, //1444 #CJK UNIFIED IDEOGRAPH + {0x8CF4, 0x5016}, //1445 #CJK UNIFIED IDEOGRAPH + {0x8CF5, 0x5149}, //1446 #CJK UNIFIED IDEOGRAPH + {0x8CF6, 0x516C}, //1447 #CJK UNIFIED IDEOGRAPH + {0x8CF7, 0x529F}, //1448 #CJK UNIFIED IDEOGRAPH + {0x8CF8, 0x52B9}, //1449 #CJK UNIFIED IDEOGRAPH + {0x8CF9, 0x52FE}, //1450 #CJK UNIFIED IDEOGRAPH + {0x8CFA, 0x539A}, //1451 #CJK UNIFIED IDEOGRAPH + {0x8CFB, 0x53E3}, //1452 #CJK UNIFIED IDEOGRAPH + {0x8CFC, 0x5411}, //1453 #CJK UNIFIED IDEOGRAPH + {0x8D40, 0x540E}, //1454 #CJK UNIFIED IDEOGRAPH + {0x8D41, 0x5589}, //1455 #CJK UNIFIED IDEOGRAPH + {0x8D42, 0x5751}, //1456 #CJK UNIFIED IDEOGRAPH + {0x8D43, 0x57A2}, //1457 #CJK UNIFIED IDEOGRAPH + {0x8D44, 0x597D}, //1458 #CJK UNIFIED IDEOGRAPH + {0x8D45, 0x5B54}, //1459 #CJK UNIFIED IDEOGRAPH + {0x8D46, 0x5B5D}, //1460 #CJK UNIFIED IDEOGRAPH + {0x8D47, 0x5B8F}, //1461 #CJK UNIFIED IDEOGRAPH + {0x8D48, 0x5DE5}, //1462 #CJK UNIFIED IDEOGRAPH + {0x8D49, 0x5DE7}, //1463 #CJK UNIFIED IDEOGRAPH + {0x8D4A, 0x5DF7}, //1464 #CJK UNIFIED IDEOGRAPH + {0x8D4B, 0x5E78}, //1465 #CJK UNIFIED IDEOGRAPH + {0x8D4C, 0x5E83}, //1466 #CJK UNIFIED IDEOGRAPH + {0x8D4D, 0x5E9A}, //1467 #CJK UNIFIED IDEOGRAPH + {0x8D4E, 0x5EB7}, //1468 #CJK UNIFIED IDEOGRAPH + {0x8D4F, 0x5F18}, //1469 #CJK UNIFIED IDEOGRAPH + {0x8D50, 0x6052}, //1470 #CJK UNIFIED IDEOGRAPH + {0x8D51, 0x614C}, //1471 #CJK UNIFIED IDEOGRAPH + {0x8D52, 0x6297}, //1472 #CJK UNIFIED IDEOGRAPH + {0x8D53, 0x62D8}, //1473 #CJK UNIFIED IDEOGRAPH + {0x8D54, 0x63A7}, //1474 #CJK UNIFIED IDEOGRAPH + {0x8D55, 0x653B}, //1475 #CJK UNIFIED IDEOGRAPH + {0x8D56, 0x6602}, //1476 #CJK UNIFIED IDEOGRAPH + {0x8D57, 0x6643}, //1477 #CJK UNIFIED IDEOGRAPH + {0x8D58, 0x66F4}, //1478 #CJK UNIFIED IDEOGRAPH + {0x8D59, 0x676D}, //1479 #CJK UNIFIED IDEOGRAPH + {0x8D5A, 0x6821}, //1480 #CJK UNIFIED IDEOGRAPH + {0x8D5B, 0x6897}, //1481 #CJK UNIFIED IDEOGRAPH + {0x8D5C, 0x69CB}, //1482 #CJK UNIFIED IDEOGRAPH + {0x8D5D, 0x6C5F}, //1483 #CJK UNIFIED IDEOGRAPH + {0x8D5E, 0x6D2A}, //1484 #CJK UNIFIED IDEOGRAPH + {0x8D5F, 0x6D69}, //1485 #CJK UNIFIED IDEOGRAPH + {0x8D60, 0x6E2F}, //1486 #CJK UNIFIED IDEOGRAPH + {0x8D61, 0x6E9D}, //1487 #CJK UNIFIED IDEOGRAPH + {0x8D62, 0x7532}, //1488 #CJK UNIFIED IDEOGRAPH + {0x8D63, 0x7687}, //1489 #CJK UNIFIED IDEOGRAPH + {0x8D64, 0x786C}, //1490 #CJK UNIFIED IDEOGRAPH + {0x8D65, 0x7A3F}, //1491 #CJK UNIFIED IDEOGRAPH + {0x8D66, 0x7CE0}, //1492 #CJK UNIFIED IDEOGRAPH + {0x8D67, 0x7D05}, //1493 #CJK UNIFIED IDEOGRAPH + {0x8D68, 0x7D18}, //1494 #CJK UNIFIED IDEOGRAPH + {0x8D69, 0x7D5E}, //1495 #CJK UNIFIED IDEOGRAPH + {0x8D6A, 0x7DB1}, //1496 #CJK UNIFIED IDEOGRAPH + {0x8D6B, 0x8015}, //1497 #CJK UNIFIED IDEOGRAPH + {0x8D6C, 0x8003}, //1498 #CJK UNIFIED IDEOGRAPH + {0x8D6D, 0x80AF}, //1499 #CJK UNIFIED IDEOGRAPH + {0x8D6E, 0x80B1}, //1500 #CJK UNIFIED IDEOGRAPH + {0x8D6F, 0x8154}, //1501 #CJK UNIFIED IDEOGRAPH + {0x8D70, 0x818F}, //1502 #CJK UNIFIED IDEOGRAPH + {0x8D71, 0x822A}, //1503 #CJK UNIFIED IDEOGRAPH + {0x8D72, 0x8352}, //1504 #CJK UNIFIED IDEOGRAPH + {0x8D73, 0x884C}, //1505 #CJK UNIFIED IDEOGRAPH + {0x8D74, 0x8861}, //1506 #CJK UNIFIED IDEOGRAPH + {0x8D75, 0x8B1B}, //1507 #CJK UNIFIED IDEOGRAPH + {0x8D76, 0x8CA2}, //1508 #CJK UNIFIED IDEOGRAPH + {0x8D77, 0x8CFC}, //1509 #CJK UNIFIED IDEOGRAPH + {0x8D78, 0x90CA}, //1510 #CJK UNIFIED IDEOGRAPH + {0x8D79, 0x9175}, //1511 #CJK UNIFIED IDEOGRAPH + {0x8D7A, 0x9271}, //1512 #CJK UNIFIED IDEOGRAPH + {0x8D7B, 0x783F}, //1513 #CJK UNIFIED IDEOGRAPH + {0x8D7C, 0x92FC}, //1514 #CJK UNIFIED IDEOGRAPH + {0x8D7D, 0x95A4}, //1515 #CJK UNIFIED IDEOGRAPH + {0x8D7E, 0x964D}, //1516 #CJK UNIFIED IDEOGRAPH + {0x8D80, 0x9805}, //1517 #CJK UNIFIED IDEOGRAPH + {0x8D81, 0x9999}, //1518 #CJK UNIFIED IDEOGRAPH + {0x8D82, 0x9AD8}, //1519 #CJK UNIFIED IDEOGRAPH + {0x8D83, 0x9D3B}, //1520 #CJK UNIFIED IDEOGRAPH + {0x8D84, 0x525B}, //1521 #CJK UNIFIED IDEOGRAPH + {0x8D85, 0x52AB}, //1522 #CJK UNIFIED IDEOGRAPH + {0x8D86, 0x53F7}, //1523 #CJK UNIFIED IDEOGRAPH + {0x8D87, 0x5408}, //1524 #CJK UNIFIED IDEOGRAPH + {0x8D88, 0x58D5}, //1525 #CJK UNIFIED IDEOGRAPH + {0x8D89, 0x62F7}, //1526 #CJK UNIFIED IDEOGRAPH + {0x8D8A, 0x6FE0}, //1527 #CJK UNIFIED IDEOGRAPH + {0x8D8B, 0x8C6A}, //1528 #CJK UNIFIED IDEOGRAPH + {0x8D8C, 0x8F5F}, //1529 #CJK UNIFIED IDEOGRAPH + {0x8D8D, 0x9EB9}, //1530 #CJK UNIFIED IDEOGRAPH + {0x8D8E, 0x514B}, //1531 #CJK UNIFIED IDEOGRAPH + {0x8D8F, 0x523B}, //1532 #CJK UNIFIED IDEOGRAPH + {0x8D90, 0x544A}, //1533 #CJK UNIFIED IDEOGRAPH + {0x8D91, 0x56FD}, //1534 #CJK UNIFIED IDEOGRAPH + {0x8D92, 0x7A40}, //1535 #CJK UNIFIED IDEOGRAPH + {0x8D93, 0x9177}, //1536 #CJK UNIFIED IDEOGRAPH + {0x8D94, 0x9D60}, //1537 #CJK UNIFIED IDEOGRAPH + {0x8D95, 0x9ED2}, //1538 #CJK UNIFIED IDEOGRAPH + {0x8D96, 0x7344}, //1539 #CJK UNIFIED IDEOGRAPH + {0x8D97, 0x6F09}, //1540 #CJK UNIFIED IDEOGRAPH + {0x8D98, 0x8170}, //1541 #CJK UNIFIED IDEOGRAPH + {0x8D99, 0x7511}, //1542 #CJK UNIFIED IDEOGRAPH + {0x8D9A, 0x5FFD}, //1543 #CJK UNIFIED IDEOGRAPH + {0x8D9B, 0x60DA}, //1544 #CJK UNIFIED IDEOGRAPH + {0x8D9C, 0x9AA8}, //1545 #CJK UNIFIED IDEOGRAPH + {0x8D9D, 0x72DB}, //1546 #CJK UNIFIED IDEOGRAPH + {0x8D9E, 0x8FBC}, //1547 #CJK UNIFIED IDEOGRAPH + {0x8D9F, 0x6B64}, //1548 #CJK UNIFIED IDEOGRAPH + {0x8DA0, 0x9803}, //1549 #CJK UNIFIED IDEOGRAPH + {0x8DA1, 0x4ECA}, //1550 #CJK UNIFIED IDEOGRAPH + {0x8DA2, 0x56F0}, //1551 #CJK UNIFIED IDEOGRAPH + {0x8DA3, 0x5764}, //1552 #CJK UNIFIED IDEOGRAPH + {0x8DA4, 0x58BE}, //1553 #CJK UNIFIED IDEOGRAPH + {0x8DA5, 0x5A5A}, //1554 #CJK UNIFIED IDEOGRAPH + {0x8DA6, 0x6068}, //1555 #CJK UNIFIED IDEOGRAPH + {0x8DA7, 0x61C7}, //1556 #CJK UNIFIED IDEOGRAPH + {0x8DA8, 0x660F}, //1557 #CJK UNIFIED IDEOGRAPH + {0x8DA9, 0x6606}, //1558 #CJK UNIFIED IDEOGRAPH + {0x8DAA, 0x6839}, //1559 #CJK UNIFIED IDEOGRAPH + {0x8DAB, 0x68B1}, //1560 #CJK UNIFIED IDEOGRAPH + {0x8DAC, 0x6DF7}, //1561 #CJK UNIFIED IDEOGRAPH + {0x8DAD, 0x75D5}, //1562 #CJK UNIFIED IDEOGRAPH + {0x8DAE, 0x7D3A}, //1563 #CJK UNIFIED IDEOGRAPH + {0x8DAF, 0x826E}, //1564 #CJK UNIFIED IDEOGRAPH + {0x8DB0, 0x9B42}, //1565 #CJK UNIFIED IDEOGRAPH + {0x8DB1, 0x4E9B}, //1566 #CJK UNIFIED IDEOGRAPH + {0x8DB2, 0x4F50}, //1567 #CJK UNIFIED IDEOGRAPH + {0x8DB3, 0x53C9}, //1568 #CJK UNIFIED IDEOGRAPH + {0x8DB4, 0x5506}, //1569 #CJK UNIFIED IDEOGRAPH + {0x8DB5, 0x5D6F}, //1570 #CJK UNIFIED IDEOGRAPH + {0x8DB6, 0x5DE6}, //1571 #CJK UNIFIED IDEOGRAPH + {0x8DB7, 0x5DEE}, //1572 #CJK UNIFIED IDEOGRAPH + {0x8DB8, 0x67FB}, //1573 #CJK UNIFIED IDEOGRAPH + {0x8DB9, 0x6C99}, //1574 #CJK UNIFIED IDEOGRAPH + {0x8DBA, 0x7473}, //1575 #CJK UNIFIED IDEOGRAPH + {0x8DBB, 0x7802}, //1576 #CJK UNIFIED IDEOGRAPH + {0x8DBC, 0x8A50}, //1577 #CJK UNIFIED IDEOGRAPH + {0x8DBD, 0x9396}, //1578 #CJK UNIFIED IDEOGRAPH + {0x8DBE, 0x88DF}, //1579 #CJK UNIFIED IDEOGRAPH + {0x8DBF, 0x5750}, //1580 #CJK UNIFIED IDEOGRAPH + {0x8DC0, 0x5EA7}, //1581 #CJK UNIFIED IDEOGRAPH + {0x8DC1, 0x632B}, //1582 #CJK UNIFIED IDEOGRAPH + {0x8DC2, 0x50B5}, //1583 #CJK UNIFIED IDEOGRAPH + {0x8DC3, 0x50AC}, //1584 #CJK UNIFIED IDEOGRAPH + {0x8DC4, 0x518D}, //1585 #CJK UNIFIED IDEOGRAPH + {0x8DC5, 0x6700}, //1586 #CJK UNIFIED IDEOGRAPH + {0x8DC6, 0x54C9}, //1587 #CJK UNIFIED IDEOGRAPH + {0x8DC7, 0x585E}, //1588 #CJK UNIFIED IDEOGRAPH + {0x8DC8, 0x59BB}, //1589 #CJK UNIFIED IDEOGRAPH + {0x8DC9, 0x5BB0}, //1590 #CJK UNIFIED IDEOGRAPH + {0x8DCA, 0x5F69}, //1591 #CJK UNIFIED IDEOGRAPH + {0x8DCB, 0x624D}, //1592 #CJK UNIFIED IDEOGRAPH + {0x8DCC, 0x63A1}, //1593 #CJK UNIFIED IDEOGRAPH + {0x8DCD, 0x683D}, //1594 #CJK UNIFIED IDEOGRAPH + {0x8DCE, 0x6B73}, //1595 #CJK UNIFIED IDEOGRAPH + {0x8DCF, 0x6E08}, //1596 #CJK UNIFIED IDEOGRAPH + {0x8DD0, 0x707D}, //1597 #CJK UNIFIED IDEOGRAPH + {0x8DD1, 0x91C7}, //1598 #CJK UNIFIED IDEOGRAPH + {0x8DD2, 0x7280}, //1599 #CJK UNIFIED IDEOGRAPH + {0x8DD3, 0x7815}, //1600 #CJK UNIFIED IDEOGRAPH + {0x8DD4, 0x7826}, //1601 #CJK UNIFIED IDEOGRAPH + {0x8DD5, 0x796D}, //1602 #CJK UNIFIED IDEOGRAPH + {0x8DD6, 0x658E}, //1603 #CJK UNIFIED IDEOGRAPH + {0x8DD7, 0x7D30}, //1604 #CJK UNIFIED IDEOGRAPH + {0x8DD8, 0x83DC}, //1605 #CJK UNIFIED IDEOGRAPH + {0x8DD9, 0x88C1}, //1606 #CJK UNIFIED IDEOGRAPH + {0x8DDA, 0x8F09}, //1607 #CJK UNIFIED IDEOGRAPH + {0x8DDB, 0x969B}, //1608 #CJK UNIFIED IDEOGRAPH + {0x8DDC, 0x5264}, //1609 #CJK UNIFIED IDEOGRAPH + {0x8DDD, 0x5728}, //1610 #CJK UNIFIED IDEOGRAPH + {0x8DDE, 0x6750}, //1611 #CJK UNIFIED IDEOGRAPH + {0x8DDF, 0x7F6A}, //1612 #CJK UNIFIED IDEOGRAPH + {0x8DE0, 0x8CA1}, //1613 #CJK UNIFIED IDEOGRAPH + {0x8DE1, 0x51B4}, //1614 #CJK UNIFIED IDEOGRAPH + {0x8DE2, 0x5742}, //1615 #CJK UNIFIED IDEOGRAPH + {0x8DE3, 0x962A}, //1616 #CJK UNIFIED IDEOGRAPH + {0x8DE4, 0x583A}, //1617 #CJK UNIFIED IDEOGRAPH + {0x8DE5, 0x698A}, //1618 #CJK UNIFIED IDEOGRAPH + {0x8DE6, 0x80B4}, //1619 #CJK UNIFIED IDEOGRAPH + {0x8DE7, 0x54B2}, //1620 #CJK UNIFIED IDEOGRAPH + {0x8DE8, 0x5D0E}, //1621 #CJK UNIFIED IDEOGRAPH + {0x8DE9, 0x57FC}, //1622 #CJK UNIFIED IDEOGRAPH + {0x8DEA, 0x7895}, //1623 #CJK UNIFIED IDEOGRAPH + {0x8DEB, 0x9DFA}, //1624 #CJK UNIFIED IDEOGRAPH + {0x8DEC, 0x4F5C}, //1625 #CJK UNIFIED IDEOGRAPH + {0x8DED, 0x524A}, //1626 #CJK UNIFIED IDEOGRAPH + {0x8DEE, 0x548B}, //1627 #CJK UNIFIED IDEOGRAPH + {0x8DEF, 0x643E}, //1628 #CJK UNIFIED IDEOGRAPH + {0x8DF0, 0x6628}, //1629 #CJK UNIFIED IDEOGRAPH + {0x8DF1, 0x6714}, //1630 #CJK UNIFIED IDEOGRAPH + {0x8DF2, 0x67F5}, //1631 #CJK UNIFIED IDEOGRAPH + {0x8DF3, 0x7A84}, //1632 #CJK UNIFIED IDEOGRAPH + {0x8DF4, 0x7B56}, //1633 #CJK UNIFIED IDEOGRAPH + {0x8DF5, 0x7D22}, //1634 #CJK UNIFIED IDEOGRAPH + {0x8DF6, 0x932F}, //1635 #CJK UNIFIED IDEOGRAPH + {0x8DF7, 0x685C}, //1636 #CJK UNIFIED IDEOGRAPH + {0x8DF8, 0x9BAD}, //1637 #CJK UNIFIED IDEOGRAPH + {0x8DF9, 0x7B39}, //1638 #CJK UNIFIED IDEOGRAPH + {0x8DFA, 0x5319}, //1639 #CJK UNIFIED IDEOGRAPH + {0x8DFB, 0x518A}, //1640 #CJK UNIFIED IDEOGRAPH + {0x8DFC, 0x5237}, //1641 #CJK UNIFIED IDEOGRAPH + {0x8E40, 0x5BDF}, //1642 #CJK UNIFIED IDEOGRAPH + {0x8E41, 0x62F6}, //1643 #CJK UNIFIED IDEOGRAPH + {0x8E42, 0x64AE}, //1644 #CJK UNIFIED IDEOGRAPH + {0x8E43, 0x64E6}, //1645 #CJK UNIFIED IDEOGRAPH + {0x8E44, 0x672D}, //1646 #CJK UNIFIED IDEOGRAPH + {0x8E45, 0x6BBA}, //1647 #CJK UNIFIED IDEOGRAPH + {0x8E46, 0x85A9}, //1648 #CJK UNIFIED IDEOGRAPH + {0x8E47, 0x96D1}, //1649 #CJK UNIFIED IDEOGRAPH + {0x8E48, 0x7690}, //1650 #CJK UNIFIED IDEOGRAPH + {0x8E49, 0x9BD6}, //1651 #CJK UNIFIED IDEOGRAPH + {0x8E4A, 0x634C}, //1652 #CJK UNIFIED IDEOGRAPH + {0x8E4B, 0x9306}, //1653 #CJK UNIFIED IDEOGRAPH + {0x8E4C, 0x9BAB}, //1654 #CJK UNIFIED IDEOGRAPH + {0x8E4D, 0x76BF}, //1655 #CJK UNIFIED IDEOGRAPH + {0x8E4E, 0x6652}, //1656 #CJK UNIFIED IDEOGRAPH + {0x8E4F, 0x4E09}, //1657 #CJK UNIFIED IDEOGRAPH + {0x8E50, 0x5098}, //1658 #CJK UNIFIED IDEOGRAPH + {0x8E51, 0x53C2}, //1659 #CJK UNIFIED IDEOGRAPH + {0x8E52, 0x5C71}, //1660 #CJK UNIFIED IDEOGRAPH + {0x8E53, 0x60E8}, //1661 #CJK UNIFIED IDEOGRAPH + {0x8E54, 0x6492}, //1662 #CJK UNIFIED IDEOGRAPH + {0x8E55, 0x6563}, //1663 #CJK UNIFIED IDEOGRAPH + {0x8E56, 0x685F}, //1664 #CJK UNIFIED IDEOGRAPH + {0x8E57, 0x71E6}, //1665 #CJK UNIFIED IDEOGRAPH + {0x8E58, 0x73CA}, //1666 #CJK UNIFIED IDEOGRAPH + {0x8E59, 0x7523}, //1667 #CJK UNIFIED IDEOGRAPH + {0x8E5A, 0x7B97}, //1668 #CJK UNIFIED IDEOGRAPH + {0x8E5B, 0x7E82}, //1669 #CJK UNIFIED IDEOGRAPH + {0x8E5C, 0x8695}, //1670 #CJK UNIFIED IDEOGRAPH + {0x8E5D, 0x8B83}, //1671 #CJK UNIFIED IDEOGRAPH + {0x8E5E, 0x8CDB}, //1672 #CJK UNIFIED IDEOGRAPH + {0x8E5F, 0x9178}, //1673 #CJK UNIFIED IDEOGRAPH + {0x8E60, 0x9910}, //1674 #CJK UNIFIED IDEOGRAPH + {0x8E61, 0x65AC}, //1675 #CJK UNIFIED IDEOGRAPH + {0x8E62, 0x66AB}, //1676 #CJK UNIFIED IDEOGRAPH + {0x8E63, 0x6B8B}, //1677 #CJK UNIFIED IDEOGRAPH + {0x8E64, 0x4ED5}, //1678 #CJK UNIFIED IDEOGRAPH + {0x8E65, 0x4ED4}, //1679 #CJK UNIFIED IDEOGRAPH + {0x8E66, 0x4F3A}, //1680 #CJK UNIFIED IDEOGRAPH + {0x8E67, 0x4F7F}, //1681 #CJK UNIFIED IDEOGRAPH + {0x8E68, 0x523A}, //1682 #CJK UNIFIED IDEOGRAPH + {0x8E69, 0x53F8}, //1683 #CJK UNIFIED IDEOGRAPH + {0x8E6A, 0x53F2}, //1684 #CJK UNIFIED IDEOGRAPH + {0x8E6B, 0x55E3}, //1685 #CJK UNIFIED IDEOGRAPH + {0x8E6C, 0x56DB}, //1686 #CJK UNIFIED IDEOGRAPH + {0x8E6D, 0x58EB}, //1687 #CJK UNIFIED IDEOGRAPH + {0x8E6E, 0x59CB}, //1688 #CJK UNIFIED IDEOGRAPH + {0x8E6F, 0x59C9}, //1689 #CJK UNIFIED IDEOGRAPH + {0x8E70, 0x59FF}, //1690 #CJK UNIFIED IDEOGRAPH + {0x8E71, 0x5B50}, //1691 #CJK UNIFIED IDEOGRAPH + {0x8E72, 0x5C4D}, //1692 #CJK UNIFIED IDEOGRAPH + {0x8E73, 0x5E02}, //1693 #CJK UNIFIED IDEOGRAPH + {0x8E74, 0x5E2B}, //1694 #CJK UNIFIED IDEOGRAPH + {0x8E75, 0x5FD7}, //1695 #CJK UNIFIED IDEOGRAPH + {0x8E76, 0x601D}, //1696 #CJK UNIFIED IDEOGRAPH + {0x8E77, 0x6307}, //1697 #CJK UNIFIED IDEOGRAPH + {0x8E78, 0x652F}, //1698 #CJK UNIFIED IDEOGRAPH + {0x8E79, 0x5B5C}, //1699 #CJK UNIFIED IDEOGRAPH + {0x8E7A, 0x65AF}, //1700 #CJK UNIFIED IDEOGRAPH + {0x8E7B, 0x65BD}, //1701 #CJK UNIFIED IDEOGRAPH + {0x8E7C, 0x65E8}, //1702 #CJK UNIFIED IDEOGRAPH + {0x8E7D, 0x679D}, //1703 #CJK UNIFIED IDEOGRAPH + {0x8E7E, 0x6B62}, //1704 #CJK UNIFIED IDEOGRAPH + {0x8E80, 0x6B7B}, //1705 #CJK UNIFIED IDEOGRAPH + {0x8E81, 0x6C0F}, //1706 #CJK UNIFIED IDEOGRAPH + {0x8E82, 0x7345}, //1707 #CJK UNIFIED IDEOGRAPH + {0x8E83, 0x7949}, //1708 #CJK UNIFIED IDEOGRAPH + {0x8E84, 0x79C1}, //1709 #CJK UNIFIED IDEOGRAPH + {0x8E85, 0x7CF8}, //1710 #CJK UNIFIED IDEOGRAPH + {0x8E86, 0x7D19}, //1711 #CJK UNIFIED IDEOGRAPH + {0x8E87, 0x7D2B}, //1712 #CJK UNIFIED IDEOGRAPH + {0x8E88, 0x80A2}, //1713 #CJK UNIFIED IDEOGRAPH + {0x8E89, 0x8102}, //1714 #CJK UNIFIED IDEOGRAPH + {0x8E8A, 0x81F3}, //1715 #CJK UNIFIED IDEOGRAPH + {0x8E8B, 0x8996}, //1716 #CJK UNIFIED IDEOGRAPH + {0x8E8C, 0x8A5E}, //1717 #CJK UNIFIED IDEOGRAPH + {0x8E8D, 0x8A69}, //1718 #CJK UNIFIED IDEOGRAPH + {0x8E8E, 0x8A66}, //1719 #CJK UNIFIED IDEOGRAPH + {0x8E8F, 0x8A8C}, //1720 #CJK UNIFIED IDEOGRAPH + {0x8E90, 0x8AEE}, //1721 #CJK UNIFIED IDEOGRAPH + {0x8E91, 0x8CC7}, //1722 #CJK UNIFIED IDEOGRAPH + {0x8E92, 0x8CDC}, //1723 #CJK UNIFIED IDEOGRAPH + {0x8E93, 0x96CC}, //1724 #CJK UNIFIED IDEOGRAPH + {0x8E94, 0x98FC}, //1725 #CJK UNIFIED IDEOGRAPH + {0x8E95, 0x6B6F}, //1726 #CJK UNIFIED IDEOGRAPH + {0x8E96, 0x4E8B}, //1727 #CJK UNIFIED IDEOGRAPH + {0x8E97, 0x4F3C}, //1728 #CJK UNIFIED IDEOGRAPH + {0x8E98, 0x4F8D}, //1729 #CJK UNIFIED IDEOGRAPH + {0x8E99, 0x5150}, //1730 #CJK UNIFIED IDEOGRAPH + {0x8E9A, 0x5B57}, //1731 #CJK UNIFIED IDEOGRAPH + {0x8E9B, 0x5BFA}, //1732 #CJK UNIFIED IDEOGRAPH + {0x8E9C, 0x6148}, //1733 #CJK UNIFIED IDEOGRAPH + {0x8E9D, 0x6301}, //1734 #CJK UNIFIED IDEOGRAPH + {0x8E9E, 0x6642}, //1735 #CJK UNIFIED IDEOGRAPH + {0x8E9F, 0x6B21}, //1736 #CJK UNIFIED IDEOGRAPH + {0x8EA0, 0x6ECB}, //1737 #CJK UNIFIED IDEOGRAPH + {0x8EA1, 0x6CBB}, //1738 #CJK UNIFIED IDEOGRAPH + {0x8EA2, 0x723E}, //1739 #CJK UNIFIED IDEOGRAPH + {0x8EA3, 0x74BD}, //1740 #CJK UNIFIED IDEOGRAPH + {0x8EA4, 0x75D4}, //1741 #CJK UNIFIED IDEOGRAPH + {0x8EA5, 0x78C1}, //1742 #CJK UNIFIED IDEOGRAPH + {0x8EA6, 0x793A}, //1743 #CJK UNIFIED IDEOGRAPH + {0x8EA7, 0x800C}, //1744 #CJK UNIFIED IDEOGRAPH + {0x8EA8, 0x8033}, //1745 #CJK UNIFIED IDEOGRAPH + {0x8EA9, 0x81EA}, //1746 #CJK UNIFIED IDEOGRAPH + {0x8EAA, 0x8494}, //1747 #CJK UNIFIED IDEOGRAPH + {0x8EAB, 0x8F9E}, //1748 #CJK UNIFIED IDEOGRAPH + {0x8EAC, 0x6C50}, //1749 #CJK UNIFIED IDEOGRAPH + {0x8EAD, 0x9E7F}, //1750 #CJK UNIFIED IDEOGRAPH + {0x8EAE, 0x5F0F}, //1751 #CJK UNIFIED IDEOGRAPH + {0x8EAF, 0x8B58}, //1752 #CJK UNIFIED IDEOGRAPH + {0x8EB0, 0x9D2B}, //1753 #CJK UNIFIED IDEOGRAPH + {0x8EB1, 0x7AFA}, //1754 #CJK UNIFIED IDEOGRAPH + {0x8EB2, 0x8EF8}, //1755 #CJK UNIFIED IDEOGRAPH + {0x8EB3, 0x5B8D}, //1756 #CJK UNIFIED IDEOGRAPH + {0x8EB4, 0x96EB}, //1757 #CJK UNIFIED IDEOGRAPH + {0x8EB5, 0x4E03}, //1758 #CJK UNIFIED IDEOGRAPH + {0x8EB6, 0x53F1}, //1759 #CJK UNIFIED IDEOGRAPH + {0x8EB7, 0x57F7}, //1760 #CJK UNIFIED IDEOGRAPH + {0x8EB8, 0x5931}, //1761 #CJK UNIFIED IDEOGRAPH + {0x8EB9, 0x5AC9}, //1762 #CJK UNIFIED IDEOGRAPH + {0x8EBA, 0x5BA4}, //1763 #CJK UNIFIED IDEOGRAPH + {0x8EBB, 0x6089}, //1764 #CJK UNIFIED IDEOGRAPH + {0x8EBC, 0x6E7F}, //1765 #CJK UNIFIED IDEOGRAPH + {0x8EBD, 0x6F06}, //1766 #CJK UNIFIED IDEOGRAPH + {0x8EBE, 0x75BE}, //1767 #CJK UNIFIED IDEOGRAPH + {0x8EBF, 0x8CEA}, //1768 #CJK UNIFIED IDEOGRAPH + {0x8EC0, 0x5B9F}, //1769 #CJK UNIFIED IDEOGRAPH + {0x8EC1, 0x8500}, //1770 #CJK UNIFIED IDEOGRAPH + {0x8EC2, 0x7BE0}, //1771 #CJK UNIFIED IDEOGRAPH + {0x8EC3, 0x5072}, //1772 #CJK UNIFIED IDEOGRAPH + {0x8EC4, 0x67F4}, //1773 #CJK UNIFIED IDEOGRAPH + {0x8EC5, 0x829D}, //1774 #CJK UNIFIED IDEOGRAPH + {0x8EC6, 0x5C61}, //1775 #CJK UNIFIED IDEOGRAPH + {0x8EC7, 0x854A}, //1776 #CJK UNIFIED IDEOGRAPH + {0x8EC8, 0x7E1E}, //1777 #CJK UNIFIED IDEOGRAPH + {0x8EC9, 0x820E}, //1778 #CJK UNIFIED IDEOGRAPH + {0x8ECA, 0x5199}, //1779 #CJK UNIFIED IDEOGRAPH + {0x8ECB, 0x5C04}, //1780 #CJK UNIFIED IDEOGRAPH + {0x8ECC, 0x6368}, //1781 #CJK UNIFIED IDEOGRAPH + {0x8ECD, 0x8D66}, //1782 #CJK UNIFIED IDEOGRAPH + {0x8ECE, 0x659C}, //1783 #CJK UNIFIED IDEOGRAPH + {0x8ECF, 0x716E}, //1784 #CJK UNIFIED IDEOGRAPH + {0x8ED0, 0x793E}, //1785 #CJK UNIFIED IDEOGRAPH + {0x8ED1, 0x7D17}, //1786 #CJK UNIFIED IDEOGRAPH + {0x8ED2, 0x8005}, //1787 #CJK UNIFIED IDEOGRAPH + {0x8ED3, 0x8B1D}, //1788 #CJK UNIFIED IDEOGRAPH + {0x8ED4, 0x8ECA}, //1789 #CJK UNIFIED IDEOGRAPH + {0x8ED5, 0x906E}, //1790 #CJK UNIFIED IDEOGRAPH + {0x8ED6, 0x86C7}, //1791 #CJK UNIFIED IDEOGRAPH + {0x8ED7, 0x90AA}, //1792 #CJK UNIFIED IDEOGRAPH + {0x8ED8, 0x501F}, //1793 #CJK UNIFIED IDEOGRAPH + {0x8ED9, 0x52FA}, //1794 #CJK UNIFIED IDEOGRAPH + {0x8EDA, 0x5C3A}, //1795 #CJK UNIFIED IDEOGRAPH + {0x8EDB, 0x6753}, //1796 #CJK UNIFIED IDEOGRAPH + {0x8EDC, 0x707C}, //1797 #CJK UNIFIED IDEOGRAPH + {0x8EDD, 0x7235}, //1798 #CJK UNIFIED IDEOGRAPH + {0x8EDE, 0x914C}, //1799 #CJK UNIFIED IDEOGRAPH + {0x8EDF, 0x91C8}, //1800 #CJK UNIFIED IDEOGRAPH + {0x8EE0, 0x932B}, //1801 #CJK UNIFIED IDEOGRAPH + {0x8EE1, 0x82E5}, //1802 #CJK UNIFIED IDEOGRAPH + {0x8EE2, 0x5BC2}, //1803 #CJK UNIFIED IDEOGRAPH + {0x8EE3, 0x5F31}, //1804 #CJK UNIFIED IDEOGRAPH + {0x8EE4, 0x60F9}, //1805 #CJK UNIFIED IDEOGRAPH + {0x8EE5, 0x4E3B}, //1806 #CJK UNIFIED IDEOGRAPH + {0x8EE6, 0x53D6}, //1807 #CJK UNIFIED IDEOGRAPH + {0x8EE7, 0x5B88}, //1808 #CJK UNIFIED IDEOGRAPH + {0x8EE8, 0x624B}, //1809 #CJK UNIFIED IDEOGRAPH + {0x8EE9, 0x6731}, //1810 #CJK UNIFIED IDEOGRAPH + {0x8EEA, 0x6B8A}, //1811 #CJK UNIFIED IDEOGRAPH + {0x8EEB, 0x72E9}, //1812 #CJK UNIFIED IDEOGRAPH + {0x8EEC, 0x73E0}, //1813 #CJK UNIFIED IDEOGRAPH + {0x8EED, 0x7A2E}, //1814 #CJK UNIFIED IDEOGRAPH + {0x8EEE, 0x816B}, //1815 #CJK UNIFIED IDEOGRAPH + {0x8EEF, 0x8DA3}, //1816 #CJK UNIFIED IDEOGRAPH + {0x8EF0, 0x9152}, //1817 #CJK UNIFIED IDEOGRAPH + {0x8EF1, 0x9996}, //1818 #CJK UNIFIED IDEOGRAPH + {0x8EF2, 0x5112}, //1819 #CJK UNIFIED IDEOGRAPH + {0x8EF3, 0x53D7}, //1820 #CJK UNIFIED IDEOGRAPH + {0x8EF4, 0x546A}, //1821 #CJK UNIFIED IDEOGRAPH + {0x8EF5, 0x5BFF}, //1822 #CJK UNIFIED IDEOGRAPH + {0x8EF6, 0x6388}, //1823 #CJK UNIFIED IDEOGRAPH + {0x8EF7, 0x6A39}, //1824 #CJK UNIFIED IDEOGRAPH + {0x8EF8, 0x7DAC}, //1825 #CJK UNIFIED IDEOGRAPH + {0x8EF9, 0x9700}, //1826 #CJK UNIFIED IDEOGRAPH + {0x8EFA, 0x56DA}, //1827 #CJK UNIFIED IDEOGRAPH + {0x8EFB, 0x53CE}, //1828 #CJK UNIFIED IDEOGRAPH + {0x8EFC, 0x5468}, //1829 #CJK UNIFIED IDEOGRAPH + {0x8F40, 0x5B97}, //1830 #CJK UNIFIED IDEOGRAPH + {0x8F41, 0x5C31}, //1831 #CJK UNIFIED IDEOGRAPH + {0x8F42, 0x5DDE}, //1832 #CJK UNIFIED IDEOGRAPH + {0x8F43, 0x4FEE}, //1833 #CJK UNIFIED IDEOGRAPH + {0x8F44, 0x6101}, //1834 #CJK UNIFIED IDEOGRAPH + {0x8F45, 0x62FE}, //1835 #CJK UNIFIED IDEOGRAPH + {0x8F46, 0x6D32}, //1836 #CJK UNIFIED IDEOGRAPH + {0x8F47, 0x79C0}, //1837 #CJK UNIFIED IDEOGRAPH + {0x8F48, 0x79CB}, //1838 #CJK UNIFIED IDEOGRAPH + {0x8F49, 0x7D42}, //1839 #CJK UNIFIED IDEOGRAPH + {0x8F4A, 0x7E4D}, //1840 #CJK UNIFIED IDEOGRAPH + {0x8F4B, 0x7FD2}, //1841 #CJK UNIFIED IDEOGRAPH + {0x8F4C, 0x81ED}, //1842 #CJK UNIFIED IDEOGRAPH + {0x8F4D, 0x821F}, //1843 #CJK UNIFIED IDEOGRAPH + {0x8F4E, 0x8490}, //1844 #CJK UNIFIED IDEOGRAPH + {0x8F4F, 0x8846}, //1845 #CJK UNIFIED IDEOGRAPH + {0x8F50, 0x8972}, //1846 #CJK UNIFIED IDEOGRAPH + {0x8F51, 0x8B90}, //1847 #CJK UNIFIED IDEOGRAPH + {0x8F52, 0x8E74}, //1848 #CJK UNIFIED IDEOGRAPH + {0x8F53, 0x8F2F}, //1849 #CJK UNIFIED IDEOGRAPH + {0x8F54, 0x9031}, //1850 #CJK UNIFIED IDEOGRAPH + {0x8F55, 0x914B}, //1851 #CJK UNIFIED IDEOGRAPH + {0x8F56, 0x916C}, //1852 #CJK UNIFIED IDEOGRAPH + {0x8F57, 0x96C6}, //1853 #CJK UNIFIED IDEOGRAPH + {0x8F58, 0x919C}, //1854 #CJK UNIFIED IDEOGRAPH + {0x8F59, 0x4EC0}, //1855 #CJK UNIFIED IDEOGRAPH + {0x8F5A, 0x4F4F}, //1856 #CJK UNIFIED IDEOGRAPH + {0x8F5B, 0x5145}, //1857 #CJK UNIFIED IDEOGRAPH + {0x8F5C, 0x5341}, //1858 #CJK UNIFIED IDEOGRAPH + {0x8F5D, 0x5F93}, //1859 #CJK UNIFIED IDEOGRAPH + {0x8F5E, 0x620E}, //1860 #CJK UNIFIED IDEOGRAPH + {0x8F5F, 0x67D4}, //1861 #CJK UNIFIED IDEOGRAPH + {0x8F60, 0x6C41}, //1862 #CJK UNIFIED IDEOGRAPH + {0x8F61, 0x6E0B}, //1863 #CJK UNIFIED IDEOGRAPH + {0x8F62, 0x7363}, //1864 #CJK UNIFIED IDEOGRAPH + {0x8F63, 0x7E26}, //1865 #CJK UNIFIED IDEOGRAPH + {0x8F64, 0x91CD}, //1866 #CJK UNIFIED IDEOGRAPH + {0x8F65, 0x9283}, //1867 #CJK UNIFIED IDEOGRAPH + {0x8F66, 0x53D4}, //1868 #CJK UNIFIED IDEOGRAPH + {0x8F67, 0x5919}, //1869 #CJK UNIFIED IDEOGRAPH + {0x8F68, 0x5BBF}, //1870 #CJK UNIFIED IDEOGRAPH + {0x8F69, 0x6DD1}, //1871 #CJK UNIFIED IDEOGRAPH + {0x8F6A, 0x795D}, //1872 #CJK UNIFIED IDEOGRAPH + {0x8F6B, 0x7E2E}, //1873 #CJK UNIFIED IDEOGRAPH + {0x8F6C, 0x7C9B}, //1874 #CJK UNIFIED IDEOGRAPH + {0x8F6D, 0x587E}, //1875 #CJK UNIFIED IDEOGRAPH + {0x8F6E, 0x719F}, //1876 #CJK UNIFIED IDEOGRAPH + {0x8F6F, 0x51FA}, //1877 #CJK UNIFIED IDEOGRAPH + {0x8F70, 0x8853}, //1878 #CJK UNIFIED IDEOGRAPH + {0x8F71, 0x8FF0}, //1879 #CJK UNIFIED IDEOGRAPH + {0x8F72, 0x4FCA}, //1880 #CJK UNIFIED IDEOGRAPH + {0x8F73, 0x5CFB}, //1881 #CJK UNIFIED IDEOGRAPH + {0x8F74, 0x6625}, //1882 #CJK UNIFIED IDEOGRAPH + {0x8F75, 0x77AC}, //1883 #CJK UNIFIED IDEOGRAPH + {0x8F76, 0x7AE3}, //1884 #CJK UNIFIED IDEOGRAPH + {0x8F77, 0x821C}, //1885 #CJK UNIFIED IDEOGRAPH + {0x8F78, 0x99FF}, //1886 #CJK UNIFIED IDEOGRAPH + {0x8F79, 0x51C6}, //1887 #CJK UNIFIED IDEOGRAPH + {0x8F7A, 0x5FAA}, //1888 #CJK UNIFIED IDEOGRAPH + {0x8F7B, 0x65EC}, //1889 #CJK UNIFIED IDEOGRAPH + {0x8F7C, 0x696F}, //1890 #CJK UNIFIED IDEOGRAPH + {0x8F7D, 0x6B89}, //1891 #CJK UNIFIED IDEOGRAPH + {0x8F7E, 0x6DF3}, //1892 #CJK UNIFIED IDEOGRAPH + {0x8F80, 0x6E96}, //1893 #CJK UNIFIED IDEOGRAPH + {0x8F81, 0x6F64}, //1894 #CJK UNIFIED IDEOGRAPH + {0x8F82, 0x76FE}, //1895 #CJK UNIFIED IDEOGRAPH + {0x8F83, 0x7D14}, //1896 #CJK UNIFIED IDEOGRAPH + {0x8F84, 0x5DE1}, //1897 #CJK UNIFIED IDEOGRAPH + {0x8F85, 0x9075}, //1898 #CJK UNIFIED IDEOGRAPH + {0x8F86, 0x9187}, //1899 #CJK UNIFIED IDEOGRAPH + {0x8F87, 0x9806}, //1900 #CJK UNIFIED IDEOGRAPH + {0x8F88, 0x51E6}, //1901 #CJK UNIFIED IDEOGRAPH + {0x8F89, 0x521D}, //1902 #CJK UNIFIED IDEOGRAPH + {0x8F8A, 0x6240}, //1903 #CJK UNIFIED IDEOGRAPH + {0x8F8B, 0x6691}, //1904 #CJK UNIFIED IDEOGRAPH + {0x8F8C, 0x66D9}, //1905 #CJK UNIFIED IDEOGRAPH + {0x8F8D, 0x6E1A}, //1906 #CJK UNIFIED IDEOGRAPH + {0x8F8E, 0x5EB6}, //1907 #CJK UNIFIED IDEOGRAPH + {0x8F8F, 0x7DD2}, //1908 #CJK UNIFIED IDEOGRAPH + {0x8F90, 0x7F72}, //1909 #CJK UNIFIED IDEOGRAPH + {0x8F91, 0x66F8}, //1910 #CJK UNIFIED IDEOGRAPH + {0x8F92, 0x85AF}, //1911 #CJK UNIFIED IDEOGRAPH + {0x8F93, 0x85F7}, //1912 #CJK UNIFIED IDEOGRAPH + {0x8F94, 0x8AF8}, //1913 #CJK UNIFIED IDEOGRAPH + {0x8F95, 0x52A9}, //1914 #CJK UNIFIED IDEOGRAPH + {0x8F96, 0x53D9}, //1915 #CJK UNIFIED IDEOGRAPH + {0x8F97, 0x5973}, //1916 #CJK UNIFIED IDEOGRAPH + {0x8F98, 0x5E8F}, //1917 #CJK UNIFIED IDEOGRAPH + {0x8F99, 0x5F90}, //1918 #CJK UNIFIED IDEOGRAPH + {0x8F9A, 0x6055}, //1919 #CJK UNIFIED IDEOGRAPH + {0x8F9B, 0x92E4}, //1920 #CJK UNIFIED IDEOGRAPH + {0x8F9C, 0x9664}, //1921 #CJK UNIFIED IDEOGRAPH + {0x8F9D, 0x50B7}, //1922 #CJK UNIFIED IDEOGRAPH + {0x8F9E, 0x511F}, //1923 #CJK UNIFIED IDEOGRAPH + {0x8F9F, 0x52DD}, //1924 #CJK UNIFIED IDEOGRAPH + {0x8FA0, 0x5320}, //1925 #CJK UNIFIED IDEOGRAPH + {0x8FA1, 0x5347}, //1926 #CJK UNIFIED IDEOGRAPH + {0x8FA2, 0x53EC}, //1927 #CJK UNIFIED IDEOGRAPH + {0x8FA3, 0x54E8}, //1928 #CJK UNIFIED IDEOGRAPH + {0x8FA4, 0x5546}, //1929 #CJK UNIFIED IDEOGRAPH + {0x8FA5, 0x5531}, //1930 #CJK UNIFIED IDEOGRAPH + {0x8FA6, 0x5617}, //1931 #CJK UNIFIED IDEOGRAPH + {0x8FA7, 0x5968}, //1932 #CJK UNIFIED IDEOGRAPH + {0x8FA8, 0x59BE}, //1933 #CJK UNIFIED IDEOGRAPH + {0x8FA9, 0x5A3C}, //1934 #CJK UNIFIED IDEOGRAPH + {0x8FAA, 0x5BB5}, //1935 #CJK UNIFIED IDEOGRAPH + {0x8FAB, 0x5C06}, //1936 #CJK UNIFIED IDEOGRAPH + {0x8FAC, 0x5C0F}, //1937 #CJK UNIFIED IDEOGRAPH + {0x8FAD, 0x5C11}, //1938 #CJK UNIFIED IDEOGRAPH + {0x8FAE, 0x5C1A}, //1939 #CJK UNIFIED IDEOGRAPH + {0x8FAF, 0x5E84}, //1940 #CJK UNIFIED IDEOGRAPH + {0x8FB0, 0x5E8A}, //1941 #CJK UNIFIED IDEOGRAPH + {0x8FB1, 0x5EE0}, //1942 #CJK UNIFIED IDEOGRAPH + {0x8FB2, 0x5F70}, //1943 #CJK UNIFIED IDEOGRAPH + {0x8FB3, 0x627F}, //1944 #CJK UNIFIED IDEOGRAPH + {0x8FB4, 0x6284}, //1945 #CJK UNIFIED IDEOGRAPH + {0x8FB5, 0x62DB}, //1946 #CJK UNIFIED IDEOGRAPH + {0x8FB6, 0x638C}, //1947 #CJK UNIFIED IDEOGRAPH + {0x8FB7, 0x6377}, //1948 #CJK UNIFIED IDEOGRAPH + {0x8FB8, 0x6607}, //1949 #CJK UNIFIED IDEOGRAPH + {0x8FB9, 0x660C}, //1950 #CJK UNIFIED IDEOGRAPH + {0x8FBA, 0x662D}, //1951 #CJK UNIFIED IDEOGRAPH + {0x8FBB, 0x6676}, //1952 #CJK UNIFIED IDEOGRAPH + {0x8FBC, 0x677E}, //1953 #CJK UNIFIED IDEOGRAPH + {0x8FBD, 0x68A2}, //1954 #CJK UNIFIED IDEOGRAPH + {0x8FBE, 0x6A1F}, //1955 #CJK UNIFIED IDEOGRAPH + {0x8FBF, 0x6A35}, //1956 #CJK UNIFIED IDEOGRAPH + {0x8FC0, 0x6CBC}, //1957 #CJK UNIFIED IDEOGRAPH + {0x8FC1, 0x6D88}, //1958 #CJK UNIFIED IDEOGRAPH + {0x8FC2, 0x6E09}, //1959 #CJK UNIFIED IDEOGRAPH + {0x8FC3, 0x6E58}, //1960 #CJK UNIFIED IDEOGRAPH + {0x8FC4, 0x713C}, //1961 #CJK UNIFIED IDEOGRAPH + {0x8FC5, 0x7126}, //1962 #CJK UNIFIED IDEOGRAPH + {0x8FC6, 0x7167}, //1963 #CJK UNIFIED IDEOGRAPH + {0x8FC7, 0x75C7}, //1964 #CJK UNIFIED IDEOGRAPH + {0x8FC8, 0x7701}, //1965 #CJK UNIFIED IDEOGRAPH + {0x8FC9, 0x785D}, //1966 #CJK UNIFIED IDEOGRAPH + {0x8FCA, 0x7901}, //1967 #CJK UNIFIED IDEOGRAPH + {0x8FCB, 0x7965}, //1968 #CJK UNIFIED IDEOGRAPH + {0x8FCC, 0x79F0}, //1969 #CJK UNIFIED IDEOGRAPH + {0x8FCD, 0x7AE0}, //1970 #CJK UNIFIED IDEOGRAPH + {0x8FCE, 0x7B11}, //1971 #CJK UNIFIED IDEOGRAPH + {0x8FCF, 0x7CA7}, //1972 #CJK UNIFIED IDEOGRAPH + {0x8FD0, 0x7D39}, //1973 #CJK UNIFIED IDEOGRAPH + {0x8FD1, 0x8096}, //1974 #CJK UNIFIED IDEOGRAPH + {0x8FD2, 0x83D6}, //1975 #CJK UNIFIED IDEOGRAPH + {0x8FD3, 0x848B}, //1976 #CJK UNIFIED IDEOGRAPH + {0x8FD4, 0x8549}, //1977 #CJK UNIFIED IDEOGRAPH + {0x8FD5, 0x885D}, //1978 #CJK UNIFIED IDEOGRAPH + {0x8FD6, 0x88F3}, //1979 #CJK UNIFIED IDEOGRAPH + {0x8FD7, 0x8A1F}, //1980 #CJK UNIFIED IDEOGRAPH + {0x8FD8, 0x8A3C}, //1981 #CJK UNIFIED IDEOGRAPH + {0x8FD9, 0x8A54}, //1982 #CJK UNIFIED IDEOGRAPH + {0x8FDA, 0x8A73}, //1983 #CJK UNIFIED IDEOGRAPH + {0x8FDB, 0x8C61}, //1984 #CJK UNIFIED IDEOGRAPH + {0x8FDC, 0x8CDE}, //1985 #CJK UNIFIED IDEOGRAPH + {0x8FDD, 0x91A4}, //1986 #CJK UNIFIED IDEOGRAPH + {0x8FDE, 0x9266}, //1987 #CJK UNIFIED IDEOGRAPH + {0x8FDF, 0x937E}, //1988 #CJK UNIFIED IDEOGRAPH + {0x8FE0, 0x9418}, //1989 #CJK UNIFIED IDEOGRAPH + {0x8FE1, 0x969C}, //1990 #CJK UNIFIED IDEOGRAPH + {0x8FE2, 0x9798}, //1991 #CJK UNIFIED IDEOGRAPH + {0x8FE3, 0x4E0A}, //1992 #CJK UNIFIED IDEOGRAPH + {0x8FE4, 0x4E08}, //1993 #CJK UNIFIED IDEOGRAPH + {0x8FE5, 0x4E1E}, //1994 #CJK UNIFIED IDEOGRAPH + {0x8FE6, 0x4E57}, //1995 #CJK UNIFIED IDEOGRAPH + {0x8FE7, 0x5197}, //1996 #CJK UNIFIED IDEOGRAPH + {0x8FE8, 0x5270}, //1997 #CJK UNIFIED IDEOGRAPH + {0x8FE9, 0x57CE}, //1998 #CJK UNIFIED IDEOGRAPH + {0x8FEA, 0x5834}, //1999 #CJK UNIFIED IDEOGRAPH + {0x8FEB, 0x58CC}, //2000 #CJK UNIFIED IDEOGRAPH + {0x8FEC, 0x5B22}, //2001 #CJK UNIFIED IDEOGRAPH + {0x8FED, 0x5E38}, //2002 #CJK UNIFIED IDEOGRAPH + {0x8FEE, 0x60C5}, //2003 #CJK UNIFIED IDEOGRAPH + {0x8FEF, 0x64FE}, //2004 #CJK UNIFIED IDEOGRAPH + {0x8FF0, 0x6761}, //2005 #CJK UNIFIED IDEOGRAPH + {0x8FF1, 0x6756}, //2006 #CJK UNIFIED IDEOGRAPH + {0x8FF2, 0x6D44}, //2007 #CJK UNIFIED IDEOGRAPH + {0x8FF3, 0x72B6}, //2008 #CJK UNIFIED IDEOGRAPH + {0x8FF4, 0x7573}, //2009 #CJK UNIFIED IDEOGRAPH + {0x8FF5, 0x7A63}, //2010 #CJK UNIFIED IDEOGRAPH + {0x8FF6, 0x84B8}, //2011 #CJK UNIFIED IDEOGRAPH + {0x8FF7, 0x8B72}, //2012 #CJK UNIFIED IDEOGRAPH + {0x8FF8, 0x91B8}, //2013 #CJK UNIFIED IDEOGRAPH + {0x8FF9, 0x9320}, //2014 #CJK UNIFIED IDEOGRAPH + {0x8FFA, 0x5631}, //2015 #CJK UNIFIED IDEOGRAPH + {0x8FFB, 0x57F4}, //2016 #CJK UNIFIED IDEOGRAPH + {0x8FFC, 0x98FE}, //2017 #CJK UNIFIED IDEOGRAPH + {0x9040, 0x62ED}, //2018 #CJK UNIFIED IDEOGRAPH + {0x9041, 0x690D}, //2019 #CJK UNIFIED IDEOGRAPH + {0x9042, 0x6B96}, //2020 #CJK UNIFIED IDEOGRAPH + {0x9043, 0x71ED}, //2021 #CJK UNIFIED IDEOGRAPH + {0x9044, 0x7E54}, //2022 #CJK UNIFIED IDEOGRAPH + {0x9045, 0x8077}, //2023 #CJK UNIFIED IDEOGRAPH + {0x9046, 0x8272}, //2024 #CJK UNIFIED IDEOGRAPH + {0x9047, 0x89E6}, //2025 #CJK UNIFIED IDEOGRAPH + {0x9048, 0x98DF}, //2026 #CJK UNIFIED IDEOGRAPH + {0x9049, 0x8755}, //2027 #CJK UNIFIED IDEOGRAPH + {0x904A, 0x8FB1}, //2028 #CJK UNIFIED IDEOGRAPH + {0x904B, 0x5C3B}, //2029 #CJK UNIFIED IDEOGRAPH + {0x904C, 0x4F38}, //2030 #CJK UNIFIED IDEOGRAPH + {0x904D, 0x4FE1}, //2031 #CJK UNIFIED IDEOGRAPH + {0x904E, 0x4FB5}, //2032 #CJK UNIFIED IDEOGRAPH + {0x904F, 0x5507}, //2033 #CJK UNIFIED IDEOGRAPH + {0x9050, 0x5A20}, //2034 #CJK UNIFIED IDEOGRAPH + {0x9051, 0x5BDD}, //2035 #CJK UNIFIED IDEOGRAPH + {0x9052, 0x5BE9}, //2036 #CJK UNIFIED IDEOGRAPH + {0x9053, 0x5FC3}, //2037 #CJK UNIFIED IDEOGRAPH + {0x9054, 0x614E}, //2038 #CJK UNIFIED IDEOGRAPH + {0x9055, 0x632F}, //2039 #CJK UNIFIED IDEOGRAPH + {0x9056, 0x65B0}, //2040 #CJK UNIFIED IDEOGRAPH + {0x9057, 0x664B}, //2041 #CJK UNIFIED IDEOGRAPH + {0x9058, 0x68EE}, //2042 #CJK UNIFIED IDEOGRAPH + {0x9059, 0x699B}, //2043 #CJK UNIFIED IDEOGRAPH + {0x905A, 0x6D78}, //2044 #CJK UNIFIED IDEOGRAPH + {0x905B, 0x6DF1}, //2045 #CJK UNIFIED IDEOGRAPH + {0x905C, 0x7533}, //2046 #CJK UNIFIED IDEOGRAPH + {0x905D, 0x75B9}, //2047 #CJK UNIFIED IDEOGRAPH + {0x905E, 0x771F}, //2048 #CJK UNIFIED IDEOGRAPH + {0x905F, 0x795E}, //2049 #CJK UNIFIED IDEOGRAPH + {0x9060, 0x79E6}, //2050 #CJK UNIFIED IDEOGRAPH + {0x9061, 0x7D33}, //2051 #CJK UNIFIED IDEOGRAPH + {0x9062, 0x81E3}, //2052 #CJK UNIFIED IDEOGRAPH + {0x9063, 0x82AF}, //2053 #CJK UNIFIED IDEOGRAPH + {0x9064, 0x85AA}, //2054 #CJK UNIFIED IDEOGRAPH + {0x9065, 0x89AA}, //2055 #CJK UNIFIED IDEOGRAPH + {0x9066, 0x8A3A}, //2056 #CJK UNIFIED IDEOGRAPH + {0x9067, 0x8EAB}, //2057 #CJK UNIFIED IDEOGRAPH + {0x9068, 0x8F9B}, //2058 #CJK UNIFIED IDEOGRAPH + {0x9069, 0x9032}, //2059 #CJK UNIFIED IDEOGRAPH + {0x906A, 0x91DD}, //2060 #CJK UNIFIED IDEOGRAPH + {0x906B, 0x9707}, //2061 #CJK UNIFIED IDEOGRAPH + {0x906C, 0x4EBA}, //2062 #CJK UNIFIED IDEOGRAPH + {0x906D, 0x4EC1}, //2063 #CJK UNIFIED IDEOGRAPH + {0x906E, 0x5203}, //2064 #CJK UNIFIED IDEOGRAPH + {0x906F, 0x5875}, //2065 #CJK UNIFIED IDEOGRAPH + {0x9070, 0x58EC}, //2066 #CJK UNIFIED IDEOGRAPH + {0x9071, 0x5C0B}, //2067 #CJK UNIFIED IDEOGRAPH + {0x9072, 0x751A}, //2068 #CJK UNIFIED IDEOGRAPH + {0x9073, 0x5C3D}, //2069 #CJK UNIFIED IDEOGRAPH + {0x9074, 0x814E}, //2070 #CJK UNIFIED IDEOGRAPH + {0x9075, 0x8A0A}, //2071 #CJK UNIFIED IDEOGRAPH + {0x9076, 0x8FC5}, //2072 #CJK UNIFIED IDEOGRAPH + {0x9077, 0x9663}, //2073 #CJK UNIFIED IDEOGRAPH + {0x9078, 0x976D}, //2074 #CJK UNIFIED IDEOGRAPH + {0x9079, 0x7B25}, //2075 #CJK UNIFIED IDEOGRAPH + {0x907A, 0x8ACF}, //2076 #CJK UNIFIED IDEOGRAPH + {0x907B, 0x9808}, //2077 #CJK UNIFIED IDEOGRAPH + {0x907C, 0x9162}, //2078 #CJK UNIFIED IDEOGRAPH + {0x907D, 0x56F3}, //2079 #CJK UNIFIED IDEOGRAPH + {0x907E, 0x53A8}, //2080 #CJK UNIFIED IDEOGRAPH + {0x9080, 0x9017}, //2081 #CJK UNIFIED IDEOGRAPH + {0x9081, 0x5439}, //2082 #CJK UNIFIED IDEOGRAPH + {0x9082, 0x5782}, //2083 #CJK UNIFIED IDEOGRAPH + {0x9083, 0x5E25}, //2084 #CJK UNIFIED IDEOGRAPH + {0x9084, 0x63A8}, //2085 #CJK UNIFIED IDEOGRAPH + {0x9085, 0x6C34}, //2086 #CJK UNIFIED IDEOGRAPH + {0x9086, 0x708A}, //2087 #CJK UNIFIED IDEOGRAPH + {0x9087, 0x7761}, //2088 #CJK UNIFIED IDEOGRAPH + {0x9088, 0x7C8B}, //2089 #CJK UNIFIED IDEOGRAPH + {0x9089, 0x7FE0}, //2090 #CJK UNIFIED IDEOGRAPH + {0x908A, 0x8870}, //2091 #CJK UNIFIED IDEOGRAPH + {0x908B, 0x9042}, //2092 #CJK UNIFIED IDEOGRAPH + {0x908C, 0x9154}, //2093 #CJK UNIFIED IDEOGRAPH + {0x908D, 0x9310}, //2094 #CJK UNIFIED IDEOGRAPH + {0x908E, 0x9318}, //2095 #CJK UNIFIED IDEOGRAPH + {0x908F, 0x968F}, //2096 #CJK UNIFIED IDEOGRAPH + {0x9090, 0x745E}, //2097 #CJK UNIFIED IDEOGRAPH + {0x9091, 0x9AC4}, //2098 #CJK UNIFIED IDEOGRAPH + {0x9092, 0x5D07}, //2099 #CJK UNIFIED IDEOGRAPH + {0x9093, 0x5D69}, //2100 #CJK UNIFIED IDEOGRAPH + {0x9094, 0x6570}, //2101 #CJK UNIFIED IDEOGRAPH + {0x9095, 0x67A2}, //2102 #CJK UNIFIED IDEOGRAPH + {0x9096, 0x8DA8}, //2103 #CJK UNIFIED IDEOGRAPH + {0x9097, 0x96DB}, //2104 #CJK UNIFIED IDEOGRAPH + {0x9098, 0x636E}, //2105 #CJK UNIFIED IDEOGRAPH + {0x9099, 0x6749}, //2106 #CJK UNIFIED IDEOGRAPH + {0x909A, 0x6919}, //2107 #CJK UNIFIED IDEOGRAPH + {0x909B, 0x83C5}, //2108 #CJK UNIFIED IDEOGRAPH + {0x909C, 0x9817}, //2109 #CJK UNIFIED IDEOGRAPH + {0x909D, 0x96C0}, //2110 #CJK UNIFIED IDEOGRAPH + {0x909E, 0x88FE}, //2111 #CJK UNIFIED IDEOGRAPH + {0x909F, 0x6F84}, //2112 #CJK UNIFIED IDEOGRAPH + {0x90A0, 0x647A}, //2113 #CJK UNIFIED IDEOGRAPH + {0x90A1, 0x5BF8}, //2114 #CJK UNIFIED IDEOGRAPH + {0x90A2, 0x4E16}, //2115 #CJK UNIFIED IDEOGRAPH + {0x90A3, 0x702C}, //2116 #CJK UNIFIED IDEOGRAPH + {0x90A4, 0x755D}, //2117 #CJK UNIFIED IDEOGRAPH + {0x90A5, 0x662F}, //2118 #CJK UNIFIED IDEOGRAPH + {0x90A6, 0x51C4}, //2119 #CJK UNIFIED IDEOGRAPH + {0x90A7, 0x5236}, //2120 #CJK UNIFIED IDEOGRAPH + {0x90A8, 0x52E2}, //2121 #CJK UNIFIED IDEOGRAPH + {0x90A9, 0x59D3}, //2122 #CJK UNIFIED IDEOGRAPH + {0x90AA, 0x5F81}, //2123 #CJK UNIFIED IDEOGRAPH + {0x90AB, 0x6027}, //2124 #CJK UNIFIED IDEOGRAPH + {0x90AC, 0x6210}, //2125 #CJK UNIFIED IDEOGRAPH + {0x90AD, 0x653F}, //2126 #CJK UNIFIED IDEOGRAPH + {0x90AE, 0x6574}, //2127 #CJK UNIFIED IDEOGRAPH + {0x90AF, 0x661F}, //2128 #CJK UNIFIED IDEOGRAPH + {0x90B0, 0x6674}, //2129 #CJK UNIFIED IDEOGRAPH + {0x90B1, 0x68F2}, //2130 #CJK UNIFIED IDEOGRAPH + {0x90B2, 0x6816}, //2131 #CJK UNIFIED IDEOGRAPH + {0x90B3, 0x6B63}, //2132 #CJK UNIFIED IDEOGRAPH + {0x90B4, 0x6E05}, //2133 #CJK UNIFIED IDEOGRAPH + {0x90B5, 0x7272}, //2134 #CJK UNIFIED IDEOGRAPH + {0x90B6, 0x751F}, //2135 #CJK UNIFIED IDEOGRAPH + {0x90B7, 0x76DB}, //2136 #CJK UNIFIED IDEOGRAPH + {0x90B8, 0x7CBE}, //2137 #CJK UNIFIED IDEOGRAPH + {0x90B9, 0x8056}, //2138 #CJK UNIFIED IDEOGRAPH + {0x90BA, 0x58F0}, //2139 #CJK UNIFIED IDEOGRAPH + {0x90BB, 0x88FD}, //2140 #CJK UNIFIED IDEOGRAPH + {0x90BC, 0x897F}, //2141 #CJK UNIFIED IDEOGRAPH + {0x90BD, 0x8AA0}, //2142 #CJK UNIFIED IDEOGRAPH + {0x90BE, 0x8A93}, //2143 #CJK UNIFIED IDEOGRAPH + {0x90BF, 0x8ACB}, //2144 #CJK UNIFIED IDEOGRAPH + {0x90C0, 0x901D}, //2145 #CJK UNIFIED IDEOGRAPH + {0x90C1, 0x9192}, //2146 #CJK UNIFIED IDEOGRAPH + {0x90C2, 0x9752}, //2147 #CJK UNIFIED IDEOGRAPH + {0x90C3, 0x9759}, //2148 #CJK UNIFIED IDEOGRAPH + {0x90C4, 0x6589}, //2149 #CJK UNIFIED IDEOGRAPH + {0x90C5, 0x7A0E}, //2150 #CJK UNIFIED IDEOGRAPH + {0x90C6, 0x8106}, //2151 #CJK UNIFIED IDEOGRAPH + {0x90C7, 0x96BB}, //2152 #CJK UNIFIED IDEOGRAPH + {0x90C8, 0x5E2D}, //2153 #CJK UNIFIED IDEOGRAPH + {0x90C9, 0x60DC}, //2154 #CJK UNIFIED IDEOGRAPH + {0x90CA, 0x621A}, //2155 #CJK UNIFIED IDEOGRAPH + {0x90CB, 0x65A5}, //2156 #CJK UNIFIED IDEOGRAPH + {0x90CC, 0x6614}, //2157 #CJK UNIFIED IDEOGRAPH + {0x90CD, 0x6790}, //2158 #CJK UNIFIED IDEOGRAPH + {0x90CE, 0x77F3}, //2159 #CJK UNIFIED IDEOGRAPH + {0x90CF, 0x7A4D}, //2160 #CJK UNIFIED IDEOGRAPH + {0x90D0, 0x7C4D}, //2161 #CJK UNIFIED IDEOGRAPH + {0x90D1, 0x7E3E}, //2162 #CJK UNIFIED IDEOGRAPH + {0x90D2, 0x810A}, //2163 #CJK UNIFIED IDEOGRAPH + {0x90D3, 0x8CAC}, //2164 #CJK UNIFIED IDEOGRAPH + {0x90D4, 0x8D64}, //2165 #CJK UNIFIED IDEOGRAPH + {0x90D5, 0x8DE1}, //2166 #CJK UNIFIED IDEOGRAPH + {0x90D6, 0x8E5F}, //2167 #CJK UNIFIED IDEOGRAPH + {0x90D7, 0x78A9}, //2168 #CJK UNIFIED IDEOGRAPH + {0x90D8, 0x5207}, //2169 #CJK UNIFIED IDEOGRAPH + {0x90D9, 0x62D9}, //2170 #CJK UNIFIED IDEOGRAPH + {0x90DA, 0x63A5}, //2171 #CJK UNIFIED IDEOGRAPH + {0x90DB, 0x6442}, //2172 #CJK UNIFIED IDEOGRAPH + {0x90DC, 0x6298}, //2173 #CJK UNIFIED IDEOGRAPH + {0x90DD, 0x8A2D}, //2174 #CJK UNIFIED IDEOGRAPH + {0x90DE, 0x7A83}, //2175 #CJK UNIFIED IDEOGRAPH + {0x90DF, 0x7BC0}, //2176 #CJK UNIFIED IDEOGRAPH + {0x90E0, 0x8AAC}, //2177 #CJK UNIFIED IDEOGRAPH + {0x90E1, 0x96EA}, //2178 #CJK UNIFIED IDEOGRAPH + {0x90E2, 0x7D76}, //2179 #CJK UNIFIED IDEOGRAPH + {0x90E3, 0x820C}, //2180 #CJK UNIFIED IDEOGRAPH + {0x90E4, 0x8749}, //2181 #CJK UNIFIED IDEOGRAPH + {0x90E5, 0x4ED9}, //2182 #CJK UNIFIED IDEOGRAPH + {0x90E6, 0x5148}, //2183 #CJK UNIFIED IDEOGRAPH + {0x90E7, 0x5343}, //2184 #CJK UNIFIED IDEOGRAPH + {0x90E8, 0x5360}, //2185 #CJK UNIFIED IDEOGRAPH + {0x90E9, 0x5BA3}, //2186 #CJK UNIFIED IDEOGRAPH + {0x90EA, 0x5C02}, //2187 #CJK UNIFIED IDEOGRAPH + {0x90EB, 0x5C16}, //2188 #CJK UNIFIED IDEOGRAPH + {0x90EC, 0x5DDD}, //2189 #CJK UNIFIED IDEOGRAPH + {0x90ED, 0x6226}, //2190 #CJK UNIFIED IDEOGRAPH + {0x90EE, 0x6247}, //2191 #CJK UNIFIED IDEOGRAPH + {0x90EF, 0x64B0}, //2192 #CJK UNIFIED IDEOGRAPH + {0x90F0, 0x6813}, //2193 #CJK UNIFIED IDEOGRAPH + {0x90F1, 0x6834}, //2194 #CJK UNIFIED IDEOGRAPH + {0x90F2, 0x6CC9}, //2195 #CJK UNIFIED IDEOGRAPH + {0x90F3, 0x6D45}, //2196 #CJK UNIFIED IDEOGRAPH + {0x90F4, 0x6D17}, //2197 #CJK UNIFIED IDEOGRAPH + {0x90F5, 0x67D3}, //2198 #CJK UNIFIED IDEOGRAPH + {0x90F6, 0x6F5C}, //2199 #CJK UNIFIED IDEOGRAPH + {0x90F7, 0x714E}, //2200 #CJK UNIFIED IDEOGRAPH + {0x90F8, 0x717D}, //2201 #CJK UNIFIED IDEOGRAPH + {0x90F9, 0x65CB}, //2202 #CJK UNIFIED IDEOGRAPH + {0x90FA, 0x7A7F}, //2203 #CJK UNIFIED IDEOGRAPH + {0x90FB, 0x7BAD}, //2204 #CJK UNIFIED IDEOGRAPH + {0x90FC, 0x7DDA}, //2205 #CJK UNIFIED IDEOGRAPH + {0x9140, 0x7E4A}, //2206 #CJK UNIFIED IDEOGRAPH + {0x9141, 0x7FA8}, //2207 #CJK UNIFIED IDEOGRAPH + {0x9142, 0x817A}, //2208 #CJK UNIFIED IDEOGRAPH + {0x9143, 0x821B}, //2209 #CJK UNIFIED IDEOGRAPH + {0x9144, 0x8239}, //2210 #CJK UNIFIED IDEOGRAPH + {0x9145, 0x85A6}, //2211 #CJK UNIFIED IDEOGRAPH + {0x9146, 0x8A6E}, //2212 #CJK UNIFIED IDEOGRAPH + {0x9147, 0x8CCE}, //2213 #CJK UNIFIED IDEOGRAPH + {0x9148, 0x8DF5}, //2214 #CJK UNIFIED IDEOGRAPH + {0x9149, 0x9078}, //2215 #CJK UNIFIED IDEOGRAPH + {0x914A, 0x9077}, //2216 #CJK UNIFIED IDEOGRAPH + {0x914B, 0x92AD}, //2217 #CJK UNIFIED IDEOGRAPH + {0x914C, 0x9291}, //2218 #CJK UNIFIED IDEOGRAPH + {0x914D, 0x9583}, //2219 #CJK UNIFIED IDEOGRAPH + {0x914E, 0x9BAE}, //2220 #CJK UNIFIED IDEOGRAPH + {0x914F, 0x524D}, //2221 #CJK UNIFIED IDEOGRAPH + {0x9150, 0x5584}, //2222 #CJK UNIFIED IDEOGRAPH + {0x9151, 0x6F38}, //2223 #CJK UNIFIED IDEOGRAPH + {0x9152, 0x7136}, //2224 #CJK UNIFIED IDEOGRAPH + {0x9153, 0x5168}, //2225 #CJK UNIFIED IDEOGRAPH + {0x9154, 0x7985}, //2226 #CJK UNIFIED IDEOGRAPH + {0x9155, 0x7E55}, //2227 #CJK UNIFIED IDEOGRAPH + {0x9156, 0x81B3}, //2228 #CJK UNIFIED IDEOGRAPH + {0x9157, 0x7CCE}, //2229 #CJK UNIFIED IDEOGRAPH + {0x9158, 0x564C}, //2230 #CJK UNIFIED IDEOGRAPH + {0x9159, 0x5851}, //2231 #CJK UNIFIED IDEOGRAPH + {0x915A, 0x5CA8}, //2232 #CJK UNIFIED IDEOGRAPH + {0x915B, 0x63AA}, //2233 #CJK UNIFIED IDEOGRAPH + {0x915C, 0x66FE}, //2234 #CJK UNIFIED IDEOGRAPH + {0x915D, 0x66FD}, //2235 #CJK UNIFIED IDEOGRAPH + {0x915E, 0x695A}, //2236 #CJK UNIFIED IDEOGRAPH + {0x915F, 0x72D9}, //2237 #CJK UNIFIED IDEOGRAPH + {0x9160, 0x758F}, //2238 #CJK UNIFIED IDEOGRAPH + {0x9161, 0x758E}, //2239 #CJK UNIFIED IDEOGRAPH + {0x9162, 0x790E}, //2240 #CJK UNIFIED IDEOGRAPH + {0x9163, 0x7956}, //2241 #CJK UNIFIED IDEOGRAPH + {0x9164, 0x79DF}, //2242 #CJK UNIFIED IDEOGRAPH + {0x9165, 0x7C97}, //2243 #CJK UNIFIED IDEOGRAPH + {0x9166, 0x7D20}, //2244 #CJK UNIFIED IDEOGRAPH + {0x9167, 0x7D44}, //2245 #CJK UNIFIED IDEOGRAPH + {0x9168, 0x8607}, //2246 #CJK UNIFIED IDEOGRAPH + {0x9169, 0x8A34}, //2247 #CJK UNIFIED IDEOGRAPH + {0x916A, 0x963B}, //2248 #CJK UNIFIED IDEOGRAPH + {0x916B, 0x9061}, //2249 #CJK UNIFIED IDEOGRAPH + {0x916C, 0x9F20}, //2250 #CJK UNIFIED IDEOGRAPH + {0x916D, 0x50E7}, //2251 #CJK UNIFIED IDEOGRAPH + {0x916E, 0x5275}, //2252 #CJK UNIFIED IDEOGRAPH + {0x916F, 0x53CC}, //2253 #CJK UNIFIED IDEOGRAPH + {0x9170, 0x53E2}, //2254 #CJK UNIFIED IDEOGRAPH + {0x9171, 0x5009}, //2255 #CJK UNIFIED IDEOGRAPH + {0x9172, 0x55AA}, //2256 #CJK UNIFIED IDEOGRAPH + {0x9173, 0x58EE}, //2257 #CJK UNIFIED IDEOGRAPH + {0x9174, 0x594F}, //2258 #CJK UNIFIED IDEOGRAPH + {0x9175, 0x723D}, //2259 #CJK UNIFIED IDEOGRAPH + {0x9176, 0x5B8B}, //2260 #CJK UNIFIED IDEOGRAPH + {0x9177, 0x5C64}, //2261 #CJK UNIFIED IDEOGRAPH + {0x9178, 0x531D}, //2262 #CJK UNIFIED IDEOGRAPH + {0x9179, 0x60E3}, //2263 #CJK UNIFIED IDEOGRAPH + {0x917A, 0x60F3}, //2264 #CJK UNIFIED IDEOGRAPH + {0x917B, 0x635C}, //2265 #CJK UNIFIED IDEOGRAPH + {0x917C, 0x6383}, //2266 #CJK UNIFIED IDEOGRAPH + {0x917D, 0x633F}, //2267 #CJK UNIFIED IDEOGRAPH + {0x917E, 0x63BB}, //2268 #CJK UNIFIED IDEOGRAPH + {0x9180, 0x64CD}, //2269 #CJK UNIFIED IDEOGRAPH + {0x9181, 0x65E9}, //2270 #CJK UNIFIED IDEOGRAPH + {0x9182, 0x66F9}, //2271 #CJK UNIFIED IDEOGRAPH + {0x9183, 0x5DE3}, //2272 #CJK UNIFIED IDEOGRAPH + {0x9184, 0x69CD}, //2273 #CJK UNIFIED IDEOGRAPH + {0x9185, 0x69FD}, //2274 #CJK UNIFIED IDEOGRAPH + {0x9186, 0x6F15}, //2275 #CJK UNIFIED IDEOGRAPH + {0x9187, 0x71E5}, //2276 #CJK UNIFIED IDEOGRAPH + {0x9188, 0x4E89}, //2277 #CJK UNIFIED IDEOGRAPH + {0x9189, 0x75E9}, //2278 #CJK UNIFIED IDEOGRAPH + {0x918A, 0x76F8}, //2279 #CJK UNIFIED IDEOGRAPH + {0x918B, 0x7A93}, //2280 #CJK UNIFIED IDEOGRAPH + {0x918C, 0x7CDF}, //2281 #CJK UNIFIED IDEOGRAPH + {0x918D, 0x7DCF}, //2282 #CJK UNIFIED IDEOGRAPH + {0x918E, 0x7D9C}, //2283 #CJK UNIFIED IDEOGRAPH + {0x918F, 0x8061}, //2284 #CJK UNIFIED IDEOGRAPH + {0x9190, 0x8349}, //2285 #CJK UNIFIED IDEOGRAPH + {0x9191, 0x8358}, //2286 #CJK UNIFIED IDEOGRAPH + {0x9192, 0x846C}, //2287 #CJK UNIFIED IDEOGRAPH + {0x9193, 0x84BC}, //2288 #CJK UNIFIED IDEOGRAPH + {0x9194, 0x85FB}, //2289 #CJK UNIFIED IDEOGRAPH + {0x9195, 0x88C5}, //2290 #CJK UNIFIED IDEOGRAPH + {0x9196, 0x8D70}, //2291 #CJK UNIFIED IDEOGRAPH + {0x9197, 0x9001}, //2292 #CJK UNIFIED IDEOGRAPH + {0x9198, 0x906D}, //2293 #CJK UNIFIED IDEOGRAPH + {0x9199, 0x9397}, //2294 #CJK UNIFIED IDEOGRAPH + {0x919A, 0x971C}, //2295 #CJK UNIFIED IDEOGRAPH + {0x919B, 0x9A12}, //2296 #CJK UNIFIED IDEOGRAPH + {0x919C, 0x50CF}, //2297 #CJK UNIFIED IDEOGRAPH + {0x919D, 0x5897}, //2298 #CJK UNIFIED IDEOGRAPH + {0x919E, 0x618E}, //2299 #CJK UNIFIED IDEOGRAPH + {0x919F, 0x81D3}, //2300 #CJK UNIFIED IDEOGRAPH + {0x91A0, 0x8535}, //2301 #CJK UNIFIED IDEOGRAPH + {0x91A1, 0x8D08}, //2302 #CJK UNIFIED IDEOGRAPH + {0x91A2, 0x9020}, //2303 #CJK UNIFIED IDEOGRAPH + {0x91A3, 0x4FC3}, //2304 #CJK UNIFIED IDEOGRAPH + {0x91A4, 0x5074}, //2305 #CJK UNIFIED IDEOGRAPH + {0x91A5, 0x5247}, //2306 #CJK UNIFIED IDEOGRAPH + {0x91A6, 0x5373}, //2307 #CJK UNIFIED IDEOGRAPH + {0x91A7, 0x606F}, //2308 #CJK UNIFIED IDEOGRAPH + {0x91A8, 0x6349}, //2309 #CJK UNIFIED IDEOGRAPH + {0x91A9, 0x675F}, //2310 #CJK UNIFIED IDEOGRAPH + {0x91AA, 0x6E2C}, //2311 #CJK UNIFIED IDEOGRAPH + {0x91AB, 0x8DB3}, //2312 #CJK UNIFIED IDEOGRAPH + {0x91AC, 0x901F}, //2313 #CJK UNIFIED IDEOGRAPH + {0x91AD, 0x4FD7}, //2314 #CJK UNIFIED IDEOGRAPH + {0x91AE, 0x5C5E}, //2315 #CJK UNIFIED IDEOGRAPH + {0x91AF, 0x8CCA}, //2316 #CJK UNIFIED IDEOGRAPH + {0x91B0, 0x65CF}, //2317 #CJK UNIFIED IDEOGRAPH + {0x91B1, 0x7D9A}, //2318 #CJK UNIFIED IDEOGRAPH + {0x91B2, 0x5352}, //2319 #CJK UNIFIED IDEOGRAPH + {0x91B3, 0x8896}, //2320 #CJK UNIFIED IDEOGRAPH + {0x91B4, 0x5176}, //2321 #CJK UNIFIED IDEOGRAPH + {0x91B5, 0x63C3}, //2322 #CJK UNIFIED IDEOGRAPH + {0x91B6, 0x5B58}, //2323 #CJK UNIFIED IDEOGRAPH + {0x91B7, 0x5B6B}, //2324 #CJK UNIFIED IDEOGRAPH + {0x91B8, 0x5C0A}, //2325 #CJK UNIFIED IDEOGRAPH + {0x91B9, 0x640D}, //2326 #CJK UNIFIED IDEOGRAPH + {0x91BA, 0x6751}, //2327 #CJK UNIFIED IDEOGRAPH + {0x91BB, 0x905C}, //2328 #CJK UNIFIED IDEOGRAPH + {0x91BC, 0x4ED6}, //2329 #CJK UNIFIED IDEOGRAPH + {0x91BD, 0x591A}, //2330 #CJK UNIFIED IDEOGRAPH + {0x91BE, 0x592A}, //2331 #CJK UNIFIED IDEOGRAPH + {0x91BF, 0x6C70}, //2332 #CJK UNIFIED IDEOGRAPH + {0x91C0, 0x8A51}, //2333 #CJK UNIFIED IDEOGRAPH + {0x91C1, 0x553E}, //2334 #CJK UNIFIED IDEOGRAPH + {0x91C2, 0x5815}, //2335 #CJK UNIFIED IDEOGRAPH + {0x91C3, 0x59A5}, //2336 #CJK UNIFIED IDEOGRAPH + {0x91C4, 0x60F0}, //2337 #CJK UNIFIED IDEOGRAPH + {0x91C5, 0x6253}, //2338 #CJK UNIFIED IDEOGRAPH + {0x91C6, 0x67C1}, //2339 #CJK UNIFIED IDEOGRAPH + {0x91C7, 0x8235}, //2340 #CJK UNIFIED IDEOGRAPH + {0x91C8, 0x6955}, //2341 #CJK UNIFIED IDEOGRAPH + {0x91C9, 0x9640}, //2342 #CJK UNIFIED IDEOGRAPH + {0x91CA, 0x99C4}, //2343 #CJK UNIFIED IDEOGRAPH + {0x91CB, 0x9A28}, //2344 #CJK UNIFIED IDEOGRAPH + {0x91CC, 0x4F53}, //2345 #CJK UNIFIED IDEOGRAPH + {0x91CD, 0x5806}, //2346 #CJK UNIFIED IDEOGRAPH + {0x91CE, 0x5BFE}, //2347 #CJK UNIFIED IDEOGRAPH + {0x91CF, 0x8010}, //2348 #CJK UNIFIED IDEOGRAPH + {0x91D0, 0x5CB1}, //2349 #CJK UNIFIED IDEOGRAPH + {0x91D1, 0x5E2F}, //2350 #CJK UNIFIED IDEOGRAPH + {0x91D2, 0x5F85}, //2351 #CJK UNIFIED IDEOGRAPH + {0x91D3, 0x6020}, //2352 #CJK UNIFIED IDEOGRAPH + {0x91D4, 0x614B}, //2353 #CJK UNIFIED IDEOGRAPH + {0x91D5, 0x6234}, //2354 #CJK UNIFIED IDEOGRAPH + {0x91D6, 0x66FF}, //2355 #CJK UNIFIED IDEOGRAPH + {0x91D7, 0x6CF0}, //2356 #CJK UNIFIED IDEOGRAPH + {0x91D8, 0x6EDE}, //2357 #CJK UNIFIED IDEOGRAPH + {0x91D9, 0x80CE}, //2358 #CJK UNIFIED IDEOGRAPH + {0x91DA, 0x817F}, //2359 #CJK UNIFIED IDEOGRAPH + {0x91DB, 0x82D4}, //2360 #CJK UNIFIED IDEOGRAPH + {0x91DC, 0x888B}, //2361 #CJK UNIFIED IDEOGRAPH + {0x91DD, 0x8CB8}, //2362 #CJK UNIFIED IDEOGRAPH + {0x91DE, 0x9000}, //2363 #CJK UNIFIED IDEOGRAPH + {0x91DF, 0x902E}, //2364 #CJK UNIFIED IDEOGRAPH + {0x91E0, 0x968A}, //2365 #CJK UNIFIED IDEOGRAPH + {0x91E1, 0x9EDB}, //2366 #CJK UNIFIED IDEOGRAPH + {0x91E2, 0x9BDB}, //2367 #CJK UNIFIED IDEOGRAPH + {0x91E3, 0x4EE3}, //2368 #CJK UNIFIED IDEOGRAPH + {0x91E4, 0x53F0}, //2369 #CJK UNIFIED IDEOGRAPH + {0x91E5, 0x5927}, //2370 #CJK UNIFIED IDEOGRAPH + {0x91E6, 0x7B2C}, //2371 #CJK UNIFIED IDEOGRAPH + {0x91E7, 0x918D}, //2372 #CJK UNIFIED IDEOGRAPH + {0x91E8, 0x984C}, //2373 #CJK UNIFIED IDEOGRAPH + {0x91E9, 0x9DF9}, //2374 #CJK UNIFIED IDEOGRAPH + {0x91EA, 0x6EDD}, //2375 #CJK UNIFIED IDEOGRAPH + {0x91EB, 0x7027}, //2376 #CJK UNIFIED IDEOGRAPH + {0x91EC, 0x5353}, //2377 #CJK UNIFIED IDEOGRAPH + {0x91ED, 0x5544}, //2378 #CJK UNIFIED IDEOGRAPH + {0x91EE, 0x5B85}, //2379 #CJK UNIFIED IDEOGRAPH + {0x91EF, 0x6258}, //2380 #CJK UNIFIED IDEOGRAPH + {0x91F0, 0x629E}, //2381 #CJK UNIFIED IDEOGRAPH + {0x91F1, 0x62D3}, //2382 #CJK UNIFIED IDEOGRAPH + {0x91F2, 0x6CA2}, //2383 #CJK UNIFIED IDEOGRAPH + {0x91F3, 0x6FEF}, //2384 #CJK UNIFIED IDEOGRAPH + {0x91F4, 0x7422}, //2385 #CJK UNIFIED IDEOGRAPH + {0x91F5, 0x8A17}, //2386 #CJK UNIFIED IDEOGRAPH + {0x91F6, 0x9438}, //2387 #CJK UNIFIED IDEOGRAPH + {0x91F7, 0x6FC1}, //2388 #CJK UNIFIED IDEOGRAPH + {0x91F8, 0x8AFE}, //2389 #CJK UNIFIED IDEOGRAPH + {0x91F9, 0x8338}, //2390 #CJK UNIFIED IDEOGRAPH + {0x91FA, 0x51E7}, //2391 #CJK UNIFIED IDEOGRAPH + {0x91FB, 0x86F8}, //2392 #CJK UNIFIED IDEOGRAPH + {0x91FC, 0x53EA}, //2393 #CJK UNIFIED IDEOGRAPH + {0x9240, 0x53E9}, //2394 #CJK UNIFIED IDEOGRAPH + {0x9241, 0x4F46}, //2395 #CJK UNIFIED IDEOGRAPH + {0x9242, 0x9054}, //2396 #CJK UNIFIED IDEOGRAPH + {0x9243, 0x8FB0}, //2397 #CJK UNIFIED IDEOGRAPH + {0x9244, 0x596A}, //2398 #CJK UNIFIED IDEOGRAPH + {0x9245, 0x8131}, //2399 #CJK UNIFIED IDEOGRAPH + {0x9246, 0x5DFD}, //2400 #CJK UNIFIED IDEOGRAPH + {0x9247, 0x7AEA}, //2401 #CJK UNIFIED IDEOGRAPH + {0x9248, 0x8FBF}, //2402 #CJK UNIFIED IDEOGRAPH + {0x9249, 0x68DA}, //2403 #CJK UNIFIED IDEOGRAPH + {0x924A, 0x8C37}, //2404 #CJK UNIFIED IDEOGRAPH + {0x924B, 0x72F8}, //2405 #CJK UNIFIED IDEOGRAPH + {0x924C, 0x9C48}, //2406 #CJK UNIFIED IDEOGRAPH + {0x924D, 0x6A3D}, //2407 #CJK UNIFIED IDEOGRAPH + {0x924E, 0x8AB0}, //2408 #CJK UNIFIED IDEOGRAPH + {0x924F, 0x4E39}, //2409 #CJK UNIFIED IDEOGRAPH + {0x9250, 0x5358}, //2410 #CJK UNIFIED IDEOGRAPH + {0x9251, 0x5606}, //2411 #CJK UNIFIED IDEOGRAPH + {0x9252, 0x5766}, //2412 #CJK UNIFIED IDEOGRAPH + {0x9253, 0x62C5}, //2413 #CJK UNIFIED IDEOGRAPH + {0x9254, 0x63A2}, //2414 #CJK UNIFIED IDEOGRAPH + {0x9255, 0x65E6}, //2415 #CJK UNIFIED IDEOGRAPH + {0x9256, 0x6B4E}, //2416 #CJK UNIFIED IDEOGRAPH + {0x9257, 0x6DE1}, //2417 #CJK UNIFIED IDEOGRAPH + {0x9258, 0x6E5B}, //2418 #CJK UNIFIED IDEOGRAPH + {0x9259, 0x70AD}, //2419 #CJK UNIFIED IDEOGRAPH + {0x925A, 0x77ED}, //2420 #CJK UNIFIED IDEOGRAPH + {0x925B, 0x7AEF}, //2421 #CJK UNIFIED IDEOGRAPH + {0x925C, 0x7BAA}, //2422 #CJK UNIFIED IDEOGRAPH + {0x925D, 0x7DBB}, //2423 #CJK UNIFIED IDEOGRAPH + {0x925E, 0x803D}, //2424 #CJK UNIFIED IDEOGRAPH + {0x925F, 0x80C6}, //2425 #CJK UNIFIED IDEOGRAPH + {0x9260, 0x86CB}, //2426 #CJK UNIFIED IDEOGRAPH + {0x9261, 0x8A95}, //2427 #CJK UNIFIED IDEOGRAPH + {0x9262, 0x935B}, //2428 #CJK UNIFIED IDEOGRAPH + {0x9263, 0x56E3}, //2429 #CJK UNIFIED IDEOGRAPH + {0x9264, 0x58C7}, //2430 #CJK UNIFIED IDEOGRAPH + {0x9265, 0x5F3E}, //2431 #CJK UNIFIED IDEOGRAPH + {0x9266, 0x65AD}, //2432 #CJK UNIFIED IDEOGRAPH + {0x9267, 0x6696}, //2433 #CJK UNIFIED IDEOGRAPH + {0x9268, 0x6A80}, //2434 #CJK UNIFIED IDEOGRAPH + {0x9269, 0x6BB5}, //2435 #CJK UNIFIED IDEOGRAPH + {0x926A, 0x7537}, //2436 #CJK UNIFIED IDEOGRAPH + {0x926B, 0x8AC7}, //2437 #CJK UNIFIED IDEOGRAPH + {0x926C, 0x5024}, //2438 #CJK UNIFIED IDEOGRAPH + {0x926D, 0x77E5}, //2439 #CJK UNIFIED IDEOGRAPH + {0x926E, 0x5730}, //2440 #CJK UNIFIED IDEOGRAPH + {0x926F, 0x5F1B}, //2441 #CJK UNIFIED IDEOGRAPH + {0x9270, 0x6065}, //2442 #CJK UNIFIED IDEOGRAPH + {0x9271, 0x667A}, //2443 #CJK UNIFIED IDEOGRAPH + {0x9272, 0x6C60}, //2444 #CJK UNIFIED IDEOGRAPH + {0x9273, 0x75F4}, //2445 #CJK UNIFIED IDEOGRAPH + {0x9274, 0x7A1A}, //2446 #CJK UNIFIED IDEOGRAPH + {0x9275, 0x7F6E}, //2447 #CJK UNIFIED IDEOGRAPH + {0x9276, 0x81F4}, //2448 #CJK UNIFIED IDEOGRAPH + {0x9277, 0x8718}, //2449 #CJK UNIFIED IDEOGRAPH + {0x9278, 0x9045}, //2450 #CJK UNIFIED IDEOGRAPH + {0x9279, 0x99B3}, //2451 #CJK UNIFIED IDEOGRAPH + {0x927A, 0x7BC9}, //2452 #CJK UNIFIED IDEOGRAPH + {0x927B, 0x755C}, //2453 #CJK UNIFIED IDEOGRAPH + {0x927C, 0x7AF9}, //2454 #CJK UNIFIED IDEOGRAPH + {0x927D, 0x7B51}, //2455 #CJK UNIFIED IDEOGRAPH + {0x927E, 0x84C4}, //2456 #CJK UNIFIED IDEOGRAPH + {0x9280, 0x9010}, //2457 #CJK UNIFIED IDEOGRAPH + {0x9281, 0x79E9}, //2458 #CJK UNIFIED IDEOGRAPH + {0x9282, 0x7A92}, //2459 #CJK UNIFIED IDEOGRAPH + {0x9283, 0x8336}, //2460 #CJK UNIFIED IDEOGRAPH + {0x9284, 0x5AE1}, //2461 #CJK UNIFIED IDEOGRAPH + {0x9285, 0x7740}, //2462 #CJK UNIFIED IDEOGRAPH + {0x9286, 0x4E2D}, //2463 #CJK UNIFIED IDEOGRAPH + {0x9287, 0x4EF2}, //2464 #CJK UNIFIED IDEOGRAPH + {0x9288, 0x5B99}, //2465 #CJK UNIFIED IDEOGRAPH + {0x9289, 0x5FE0}, //2466 #CJK UNIFIED IDEOGRAPH + {0x928A, 0x62BD}, //2467 #CJK UNIFIED IDEOGRAPH + {0x928B, 0x663C}, //2468 #CJK UNIFIED IDEOGRAPH + {0x928C, 0x67F1}, //2469 #CJK UNIFIED IDEOGRAPH + {0x928D, 0x6CE8}, //2470 #CJK UNIFIED IDEOGRAPH + {0x928E, 0x866B}, //2471 #CJK UNIFIED IDEOGRAPH + {0x928F, 0x8877}, //2472 #CJK UNIFIED IDEOGRAPH + {0x9290, 0x8A3B}, //2473 #CJK UNIFIED IDEOGRAPH + {0x9291, 0x914E}, //2474 #CJK UNIFIED IDEOGRAPH + {0x9292, 0x92F3}, //2475 #CJK UNIFIED IDEOGRAPH + {0x9293, 0x99D0}, //2476 #CJK UNIFIED IDEOGRAPH + {0x9294, 0x6A17}, //2477 #CJK UNIFIED IDEOGRAPH + {0x9295, 0x7026}, //2478 #CJK UNIFIED IDEOGRAPH + {0x9296, 0x732A}, //2479 #CJK UNIFIED IDEOGRAPH + {0x9297, 0x82E7}, //2480 #CJK UNIFIED IDEOGRAPH + {0x9298, 0x8457}, //2481 #CJK UNIFIED IDEOGRAPH + {0x9299, 0x8CAF}, //2482 #CJK UNIFIED IDEOGRAPH + {0x929A, 0x4E01}, //2483 #CJK UNIFIED IDEOGRAPH + {0x929B, 0x5146}, //2484 #CJK UNIFIED IDEOGRAPH + {0x929C, 0x51CB}, //2485 #CJK UNIFIED IDEOGRAPH + {0x929D, 0x558B}, //2486 #CJK UNIFIED IDEOGRAPH + {0x929E, 0x5BF5}, //2487 #CJK UNIFIED IDEOGRAPH + {0x929F, 0x5E16}, //2488 #CJK UNIFIED IDEOGRAPH + {0x92A0, 0x5E33}, //2489 #CJK UNIFIED IDEOGRAPH + {0x92A1, 0x5E81}, //2490 #CJK UNIFIED IDEOGRAPH + {0x92A2, 0x5F14}, //2491 #CJK UNIFIED IDEOGRAPH + {0x92A3, 0x5F35}, //2492 #CJK UNIFIED IDEOGRAPH + {0x92A4, 0x5F6B}, //2493 #CJK UNIFIED IDEOGRAPH + {0x92A5, 0x5FB4}, //2494 #CJK UNIFIED IDEOGRAPH + {0x92A6, 0x61F2}, //2495 #CJK UNIFIED IDEOGRAPH + {0x92A7, 0x6311}, //2496 #CJK UNIFIED IDEOGRAPH + {0x92A8, 0x66A2}, //2497 #CJK UNIFIED IDEOGRAPH + {0x92A9, 0x671D}, //2498 #CJK UNIFIED IDEOGRAPH + {0x92AA, 0x6F6E}, //2499 #CJK UNIFIED IDEOGRAPH + {0x92AB, 0x7252}, //2500 #CJK UNIFIED IDEOGRAPH + {0x92AC, 0x753A}, //2501 #CJK UNIFIED IDEOGRAPH + {0x92AD, 0x773A}, //2502 #CJK UNIFIED IDEOGRAPH + {0x92AE, 0x8074}, //2503 #CJK UNIFIED IDEOGRAPH + {0x92AF, 0x8139}, //2504 #CJK UNIFIED IDEOGRAPH + {0x92B0, 0x8178}, //2505 #CJK UNIFIED IDEOGRAPH + {0x92B1, 0x8776}, //2506 #CJK UNIFIED IDEOGRAPH + {0x92B2, 0x8ABF}, //2507 #CJK UNIFIED IDEOGRAPH + {0x92B3, 0x8ADC}, //2508 #CJK UNIFIED IDEOGRAPH + {0x92B4, 0x8D85}, //2509 #CJK UNIFIED IDEOGRAPH + {0x92B5, 0x8DF3}, //2510 #CJK UNIFIED IDEOGRAPH + {0x92B6, 0x929A}, //2511 #CJK UNIFIED IDEOGRAPH + {0x92B7, 0x9577}, //2512 #CJK UNIFIED IDEOGRAPH + {0x92B8, 0x9802}, //2513 #CJK UNIFIED IDEOGRAPH + {0x92B9, 0x9CE5}, //2514 #CJK UNIFIED IDEOGRAPH + {0x92BA, 0x52C5}, //2515 #CJK UNIFIED IDEOGRAPH + {0x92BB, 0x6357}, //2516 #CJK UNIFIED IDEOGRAPH + {0x92BC, 0x76F4}, //2517 #CJK UNIFIED IDEOGRAPH + {0x92BD, 0x6715}, //2518 #CJK UNIFIED IDEOGRAPH + {0x92BE, 0x6C88}, //2519 #CJK UNIFIED IDEOGRAPH + {0x92BF, 0x73CD}, //2520 #CJK UNIFIED IDEOGRAPH + {0x92C0, 0x8CC3}, //2521 #CJK UNIFIED IDEOGRAPH + {0x92C1, 0x93AE}, //2522 #CJK UNIFIED IDEOGRAPH + {0x92C2, 0x9673}, //2523 #CJK UNIFIED IDEOGRAPH + {0x92C3, 0x6D25}, //2524 #CJK UNIFIED IDEOGRAPH + {0x92C4, 0x589C}, //2525 #CJK UNIFIED IDEOGRAPH + {0x92C5, 0x690E}, //2526 #CJK UNIFIED IDEOGRAPH + {0x92C6, 0x69CC}, //2527 #CJK UNIFIED IDEOGRAPH + {0x92C7, 0x8FFD}, //2528 #CJK UNIFIED IDEOGRAPH + {0x92C8, 0x939A}, //2529 #CJK UNIFIED IDEOGRAPH + {0x92C9, 0x75DB}, //2530 #CJK UNIFIED IDEOGRAPH + {0x92CA, 0x901A}, //2531 #CJK UNIFIED IDEOGRAPH + {0x92CB, 0x585A}, //2532 #CJK UNIFIED IDEOGRAPH + {0x92CC, 0x6802}, //2533 #CJK UNIFIED IDEOGRAPH + {0x92CD, 0x63B4}, //2534 #CJK UNIFIED IDEOGRAPH + {0x92CE, 0x69FB}, //2535 #CJK UNIFIED IDEOGRAPH + {0x92CF, 0x4F43}, //2536 #CJK UNIFIED IDEOGRAPH + {0x92D0, 0x6F2C}, //2537 #CJK UNIFIED IDEOGRAPH + {0x92D1, 0x67D8}, //2538 #CJK UNIFIED IDEOGRAPH + {0x92D2, 0x8FBB}, //2539 #CJK UNIFIED IDEOGRAPH + {0x92D3, 0x8526}, //2540 #CJK UNIFIED IDEOGRAPH + {0x92D4, 0x7DB4}, //2541 #CJK UNIFIED IDEOGRAPH + {0x92D5, 0x9354}, //2542 #CJK UNIFIED IDEOGRAPH + {0x92D6, 0x693F}, //2543 #CJK UNIFIED IDEOGRAPH + {0x92D7, 0x6F70}, //2544 #CJK UNIFIED IDEOGRAPH + {0x92D8, 0x576A}, //2545 #CJK UNIFIED IDEOGRAPH + {0x92D9, 0x58F7}, //2546 #CJK UNIFIED IDEOGRAPH + {0x92DA, 0x5B2C}, //2547 #CJK UNIFIED IDEOGRAPH + {0x92DB, 0x7D2C}, //2548 #CJK UNIFIED IDEOGRAPH + {0x92DC, 0x722A}, //2549 #CJK UNIFIED IDEOGRAPH + {0x92DD, 0x540A}, //2550 #CJK UNIFIED IDEOGRAPH + {0x92DE, 0x91E3}, //2551 #CJK UNIFIED IDEOGRAPH + {0x92DF, 0x9DB4}, //2552 #CJK UNIFIED IDEOGRAPH + {0x92E0, 0x4EAD}, //2553 #CJK UNIFIED IDEOGRAPH + {0x92E1, 0x4F4E}, //2554 #CJK UNIFIED IDEOGRAPH + {0x92E2, 0x505C}, //2555 #CJK UNIFIED IDEOGRAPH + {0x92E3, 0x5075}, //2556 #CJK UNIFIED IDEOGRAPH + {0x92E4, 0x5243}, //2557 #CJK UNIFIED IDEOGRAPH + {0x92E5, 0x8C9E}, //2558 #CJK UNIFIED IDEOGRAPH + {0x92E6, 0x5448}, //2559 #CJK UNIFIED IDEOGRAPH + {0x92E7, 0x5824}, //2560 #CJK UNIFIED IDEOGRAPH + {0x92E8, 0x5B9A}, //2561 #CJK UNIFIED IDEOGRAPH + {0x92E9, 0x5E1D}, //2562 #CJK UNIFIED IDEOGRAPH + {0x92EA, 0x5E95}, //2563 #CJK UNIFIED IDEOGRAPH + {0x92EB, 0x5EAD}, //2564 #CJK UNIFIED IDEOGRAPH + {0x92EC, 0x5EF7}, //2565 #CJK UNIFIED IDEOGRAPH + {0x92ED, 0x5F1F}, //2566 #CJK UNIFIED IDEOGRAPH + {0x92EE, 0x608C}, //2567 #CJK UNIFIED IDEOGRAPH + {0x92EF, 0x62B5}, //2568 #CJK UNIFIED IDEOGRAPH + {0x92F0, 0x633A}, //2569 #CJK UNIFIED IDEOGRAPH + {0x92F1, 0x63D0}, //2570 #CJK UNIFIED IDEOGRAPH + {0x92F2, 0x68AF}, //2571 #CJK UNIFIED IDEOGRAPH + {0x92F3, 0x6C40}, //2572 #CJK UNIFIED IDEOGRAPH + {0x92F4, 0x7887}, //2573 #CJK UNIFIED IDEOGRAPH + {0x92F5, 0x798E}, //2574 #CJK UNIFIED IDEOGRAPH + {0x92F6, 0x7A0B}, //2575 #CJK UNIFIED IDEOGRAPH + {0x92F7, 0x7DE0}, //2576 #CJK UNIFIED IDEOGRAPH + {0x92F8, 0x8247}, //2577 #CJK UNIFIED IDEOGRAPH + {0x92F9, 0x8A02}, //2578 #CJK UNIFIED IDEOGRAPH + {0x92FA, 0x8AE6}, //2579 #CJK UNIFIED IDEOGRAPH + {0x92FB, 0x8E44}, //2580 #CJK UNIFIED IDEOGRAPH + {0x92FC, 0x9013}, //2581 #CJK UNIFIED IDEOGRAPH + {0x9340, 0x90B8}, //2582 #CJK UNIFIED IDEOGRAPH + {0x9341, 0x912D}, //2583 #CJK UNIFIED IDEOGRAPH + {0x9342, 0x91D8}, //2584 #CJK UNIFIED IDEOGRAPH + {0x9343, 0x9F0E}, //2585 #CJK UNIFIED IDEOGRAPH + {0x9344, 0x6CE5}, //2586 #CJK UNIFIED IDEOGRAPH + {0x9345, 0x6458}, //2587 #CJK UNIFIED IDEOGRAPH + {0x9346, 0x64E2}, //2588 #CJK UNIFIED IDEOGRAPH + {0x9347, 0x6575}, //2589 #CJK UNIFIED IDEOGRAPH + {0x9348, 0x6EF4}, //2590 #CJK UNIFIED IDEOGRAPH + {0x9349, 0x7684}, //2591 #CJK UNIFIED IDEOGRAPH + {0x934A, 0x7B1B}, //2592 #CJK UNIFIED IDEOGRAPH + {0x934B, 0x9069}, //2593 #CJK UNIFIED IDEOGRAPH + {0x934C, 0x93D1}, //2594 #CJK UNIFIED IDEOGRAPH + {0x934D, 0x6EBA}, //2595 #CJK UNIFIED IDEOGRAPH + {0x934E, 0x54F2}, //2596 #CJK UNIFIED IDEOGRAPH + {0x934F, 0x5FB9}, //2597 #CJK UNIFIED IDEOGRAPH + {0x9350, 0x64A4}, //2598 #CJK UNIFIED IDEOGRAPH + {0x9351, 0x8F4D}, //2599 #CJK UNIFIED IDEOGRAPH + {0x9352, 0x8FED}, //2600 #CJK UNIFIED IDEOGRAPH + {0x9353, 0x9244}, //2601 #CJK UNIFIED IDEOGRAPH + {0x9354, 0x5178}, //2602 #CJK UNIFIED IDEOGRAPH + {0x9355, 0x586B}, //2603 #CJK UNIFIED IDEOGRAPH + {0x9356, 0x5929}, //2604 #CJK UNIFIED IDEOGRAPH + {0x9357, 0x5C55}, //2605 #CJK UNIFIED IDEOGRAPH + {0x9358, 0x5E97}, //2606 #CJK UNIFIED IDEOGRAPH + {0x9359, 0x6DFB}, //2607 #CJK UNIFIED IDEOGRAPH + {0x935A, 0x7E8F}, //2608 #CJK UNIFIED IDEOGRAPH + {0x935B, 0x751C}, //2609 #CJK UNIFIED IDEOGRAPH + {0x935C, 0x8CBC}, //2610 #CJK UNIFIED IDEOGRAPH + {0x935D, 0x8EE2}, //2611 #CJK UNIFIED IDEOGRAPH + {0x935E, 0x985B}, //2612 #CJK UNIFIED IDEOGRAPH + {0x935F, 0x70B9}, //2613 #CJK UNIFIED IDEOGRAPH + {0x9360, 0x4F1D}, //2614 #CJK UNIFIED IDEOGRAPH + {0x9361, 0x6BBF}, //2615 #CJK UNIFIED IDEOGRAPH + {0x9362, 0x6FB1}, //2616 #CJK UNIFIED IDEOGRAPH + {0x9363, 0x7530}, //2617 #CJK UNIFIED IDEOGRAPH + {0x9364, 0x96FB}, //2618 #CJK UNIFIED IDEOGRAPH + {0x9365, 0x514E}, //2619 #CJK UNIFIED IDEOGRAPH + {0x9366, 0x5410}, //2620 #CJK UNIFIED IDEOGRAPH + {0x9367, 0x5835}, //2621 #CJK UNIFIED IDEOGRAPH + {0x9368, 0x5857}, //2622 #CJK UNIFIED IDEOGRAPH + {0x9369, 0x59AC}, //2623 #CJK UNIFIED IDEOGRAPH + {0x936A, 0x5C60}, //2624 #CJK UNIFIED IDEOGRAPH + {0x936B, 0x5F92}, //2625 #CJK UNIFIED IDEOGRAPH + {0x936C, 0x6597}, //2626 #CJK UNIFIED IDEOGRAPH + {0x936D, 0x675C}, //2627 #CJK UNIFIED IDEOGRAPH + {0x936E, 0x6E21}, //2628 #CJK UNIFIED IDEOGRAPH + {0x936F, 0x767B}, //2629 #CJK UNIFIED IDEOGRAPH + {0x9370, 0x83DF}, //2630 #CJK UNIFIED IDEOGRAPH + {0x9371, 0x8CED}, //2631 #CJK UNIFIED IDEOGRAPH + {0x9372, 0x9014}, //2632 #CJK UNIFIED IDEOGRAPH + {0x9373, 0x90FD}, //2633 #CJK UNIFIED IDEOGRAPH + {0x9374, 0x934D}, //2634 #CJK UNIFIED IDEOGRAPH + {0x9375, 0x7825}, //2635 #CJK UNIFIED IDEOGRAPH + {0x9376, 0x783A}, //2636 #CJK UNIFIED IDEOGRAPH + {0x9377, 0x52AA}, //2637 #CJK UNIFIED IDEOGRAPH + {0x9378, 0x5EA6}, //2638 #CJK UNIFIED IDEOGRAPH + {0x9379, 0x571F}, //2639 #CJK UNIFIED IDEOGRAPH + {0x937A, 0x5974}, //2640 #CJK UNIFIED IDEOGRAPH + {0x937B, 0x6012}, //2641 #CJK UNIFIED IDEOGRAPH + {0x937C, 0x5012}, //2642 #CJK UNIFIED IDEOGRAPH + {0x937D, 0x515A}, //2643 #CJK UNIFIED IDEOGRAPH + {0x937E, 0x51AC}, //2644 #CJK UNIFIED IDEOGRAPH + {0x9380, 0x51CD}, //2645 #CJK UNIFIED IDEOGRAPH + {0x9381, 0x5200}, //2646 #CJK UNIFIED IDEOGRAPH + {0x9382, 0x5510}, //2647 #CJK UNIFIED IDEOGRAPH + {0x9383, 0x5854}, //2648 #CJK UNIFIED IDEOGRAPH + {0x9384, 0x5858}, //2649 #CJK UNIFIED IDEOGRAPH + {0x9385, 0x5957}, //2650 #CJK UNIFIED IDEOGRAPH + {0x9386, 0x5B95}, //2651 #CJK UNIFIED IDEOGRAPH + {0x9387, 0x5CF6}, //2652 #CJK UNIFIED IDEOGRAPH + {0x9388, 0x5D8B}, //2653 #CJK UNIFIED IDEOGRAPH + {0x9389, 0x60BC}, //2654 #CJK UNIFIED IDEOGRAPH + {0x938A, 0x6295}, //2655 #CJK UNIFIED IDEOGRAPH + {0x938B, 0x642D}, //2656 #CJK UNIFIED IDEOGRAPH + {0x938C, 0x6771}, //2657 #CJK UNIFIED IDEOGRAPH + {0x938D, 0x6843}, //2658 #CJK UNIFIED IDEOGRAPH + {0x938E, 0x68BC}, //2659 #CJK UNIFIED IDEOGRAPH + {0x938F, 0x68DF}, //2660 #CJK UNIFIED IDEOGRAPH + {0x9390, 0x76D7}, //2661 #CJK UNIFIED IDEOGRAPH + {0x9391, 0x6DD8}, //2662 #CJK UNIFIED IDEOGRAPH + {0x9392, 0x6E6F}, //2663 #CJK UNIFIED IDEOGRAPH + {0x9393, 0x6D9B}, //2664 #CJK UNIFIED IDEOGRAPH + {0x9394, 0x706F}, //2665 #CJK UNIFIED IDEOGRAPH + {0x9395, 0x71C8}, //2666 #CJK UNIFIED IDEOGRAPH + {0x9396, 0x5F53}, //2667 #CJK UNIFIED IDEOGRAPH + {0x9397, 0x75D8}, //2668 #CJK UNIFIED IDEOGRAPH + {0x9398, 0x7977}, //2669 #CJK UNIFIED IDEOGRAPH + {0x9399, 0x7B49}, //2670 #CJK UNIFIED IDEOGRAPH + {0x939A, 0x7B54}, //2671 #CJK UNIFIED IDEOGRAPH + {0x939B, 0x7B52}, //2672 #CJK UNIFIED IDEOGRAPH + {0x939C, 0x7CD6}, //2673 #CJK UNIFIED IDEOGRAPH + {0x939D, 0x7D71}, //2674 #CJK UNIFIED IDEOGRAPH + {0x939E, 0x5230}, //2675 #CJK UNIFIED IDEOGRAPH + {0x939F, 0x8463}, //2676 #CJK UNIFIED IDEOGRAPH + {0x93A0, 0x8569}, //2677 #CJK UNIFIED IDEOGRAPH + {0x93A1, 0x85E4}, //2678 #CJK UNIFIED IDEOGRAPH + {0x93A2, 0x8A0E}, //2679 #CJK UNIFIED IDEOGRAPH + {0x93A3, 0x8B04}, //2680 #CJK UNIFIED IDEOGRAPH + {0x93A4, 0x8C46}, //2681 #CJK UNIFIED IDEOGRAPH + {0x93A5, 0x8E0F}, //2682 #CJK UNIFIED IDEOGRAPH + {0x93A6, 0x9003}, //2683 #CJK UNIFIED IDEOGRAPH + {0x93A7, 0x900F}, //2684 #CJK UNIFIED IDEOGRAPH + {0x93A8, 0x9419}, //2685 #CJK UNIFIED IDEOGRAPH + {0x93A9, 0x9676}, //2686 #CJK UNIFIED IDEOGRAPH + {0x93AA, 0x982D}, //2687 #CJK UNIFIED IDEOGRAPH + {0x93AB, 0x9A30}, //2688 #CJK UNIFIED IDEOGRAPH + {0x93AC, 0x95D8}, //2689 #CJK UNIFIED IDEOGRAPH + {0x93AD, 0x50CD}, //2690 #CJK UNIFIED IDEOGRAPH + {0x93AE, 0x52D5}, //2691 #CJK UNIFIED IDEOGRAPH + {0x93AF, 0x540C}, //2692 #CJK UNIFIED IDEOGRAPH + {0x93B0, 0x5802}, //2693 #CJK UNIFIED IDEOGRAPH + {0x93B1, 0x5C0E}, //2694 #CJK UNIFIED IDEOGRAPH + {0x93B2, 0x61A7}, //2695 #CJK UNIFIED IDEOGRAPH + {0x93B3, 0x649E}, //2696 #CJK UNIFIED IDEOGRAPH + {0x93B4, 0x6D1E}, //2697 #CJK UNIFIED IDEOGRAPH + {0x93B5, 0x77B3}, //2698 #CJK UNIFIED IDEOGRAPH + {0x93B6, 0x7AE5}, //2699 #CJK UNIFIED IDEOGRAPH + {0x93B7, 0x80F4}, //2700 #CJK UNIFIED IDEOGRAPH + {0x93B8, 0x8404}, //2701 #CJK UNIFIED IDEOGRAPH + {0x93B9, 0x9053}, //2702 #CJK UNIFIED IDEOGRAPH + {0x93BA, 0x9285}, //2703 #CJK UNIFIED IDEOGRAPH + {0x93BB, 0x5CE0}, //2704 #CJK UNIFIED IDEOGRAPH + {0x93BC, 0x9D07}, //2705 #CJK UNIFIED IDEOGRAPH + {0x93BD, 0x533F}, //2706 #CJK UNIFIED IDEOGRAPH + {0x93BE, 0x5F97}, //2707 #CJK UNIFIED IDEOGRAPH + {0x93BF, 0x5FB3}, //2708 #CJK UNIFIED IDEOGRAPH + {0x93C0, 0x6D9C}, //2709 #CJK UNIFIED IDEOGRAPH + {0x93C1, 0x7279}, //2710 #CJK UNIFIED IDEOGRAPH + {0x93C2, 0x7763}, //2711 #CJK UNIFIED IDEOGRAPH + {0x93C3, 0x79BF}, //2712 #CJK UNIFIED IDEOGRAPH + {0x93C4, 0x7BE4}, //2713 #CJK UNIFIED IDEOGRAPH + {0x93C5, 0x6BD2}, //2714 #CJK UNIFIED IDEOGRAPH + {0x93C6, 0x72EC}, //2715 #CJK UNIFIED IDEOGRAPH + {0x93C7, 0x8AAD}, //2716 #CJK UNIFIED IDEOGRAPH + {0x93C8, 0x6803}, //2717 #CJK UNIFIED IDEOGRAPH + {0x93C9, 0x6A61}, //2718 #CJK UNIFIED IDEOGRAPH + {0x93CA, 0x51F8}, //2719 #CJK UNIFIED IDEOGRAPH + {0x93CB, 0x7A81}, //2720 #CJK UNIFIED IDEOGRAPH + {0x93CC, 0x6934}, //2721 #CJK UNIFIED IDEOGRAPH + {0x93CD, 0x5C4A}, //2722 #CJK UNIFIED IDEOGRAPH + {0x93CE, 0x9CF6}, //2723 #CJK UNIFIED IDEOGRAPH + {0x93CF, 0x82EB}, //2724 #CJK UNIFIED IDEOGRAPH + {0x93D0, 0x5BC5}, //2725 #CJK UNIFIED IDEOGRAPH + {0x93D1, 0x9149}, //2726 #CJK UNIFIED IDEOGRAPH + {0x93D2, 0x701E}, //2727 #CJK UNIFIED IDEOGRAPH + {0x93D3, 0x5678}, //2728 #CJK UNIFIED IDEOGRAPH + {0x93D4, 0x5C6F}, //2729 #CJK UNIFIED IDEOGRAPH + {0x93D5, 0x60C7}, //2730 #CJK UNIFIED IDEOGRAPH + {0x93D6, 0x6566}, //2731 #CJK UNIFIED IDEOGRAPH + {0x93D7, 0x6C8C}, //2732 #CJK UNIFIED IDEOGRAPH + {0x93D8, 0x8C5A}, //2733 #CJK UNIFIED IDEOGRAPH + {0x93D9, 0x9041}, //2734 #CJK UNIFIED IDEOGRAPH + {0x93DA, 0x9813}, //2735 #CJK UNIFIED IDEOGRAPH + {0x93DB, 0x5451}, //2736 #CJK UNIFIED IDEOGRAPH + {0x93DC, 0x66C7}, //2737 #CJK UNIFIED IDEOGRAPH + {0x93DD, 0x920D}, //2738 #CJK UNIFIED IDEOGRAPH + {0x93DE, 0x5948}, //2739 #CJK UNIFIED IDEOGRAPH + {0x93DF, 0x90A3}, //2740 #CJK UNIFIED IDEOGRAPH + {0x93E0, 0x5185}, //2741 #CJK UNIFIED IDEOGRAPH + {0x93E1, 0x4E4D}, //2742 #CJK UNIFIED IDEOGRAPH + {0x93E2, 0x51EA}, //2743 #CJK UNIFIED IDEOGRAPH + {0x93E3, 0x8599}, //2744 #CJK UNIFIED IDEOGRAPH + {0x93E4, 0x8B0E}, //2745 #CJK UNIFIED IDEOGRAPH + {0x93E5, 0x7058}, //2746 #CJK UNIFIED IDEOGRAPH + {0x93E6, 0x637A}, //2747 #CJK UNIFIED IDEOGRAPH + {0x93E7, 0x934B}, //2748 #CJK UNIFIED IDEOGRAPH + {0x93E8, 0x6962}, //2749 #CJK UNIFIED IDEOGRAPH + {0x93E9, 0x99B4}, //2750 #CJK UNIFIED IDEOGRAPH + {0x93EA, 0x7E04}, //2751 #CJK UNIFIED IDEOGRAPH + {0x93EB, 0x7577}, //2752 #CJK UNIFIED IDEOGRAPH + {0x93EC, 0x5357}, //2753 #CJK UNIFIED IDEOGRAPH + {0x93ED, 0x6960}, //2754 #CJK UNIFIED IDEOGRAPH + {0x93EE, 0x8EDF}, //2755 #CJK UNIFIED IDEOGRAPH + {0x93EF, 0x96E3}, //2756 #CJK UNIFIED IDEOGRAPH + {0x93F0, 0x6C5D}, //2757 #CJK UNIFIED IDEOGRAPH + {0x93F1, 0x4E8C}, //2758 #CJK UNIFIED IDEOGRAPH + {0x93F2, 0x5C3C}, //2759 #CJK UNIFIED IDEOGRAPH + {0x93F3, 0x5F10}, //2760 #CJK UNIFIED IDEOGRAPH + {0x93F4, 0x8FE9}, //2761 #CJK UNIFIED IDEOGRAPH + {0x93F5, 0x5302}, //2762 #CJK UNIFIED IDEOGRAPH + {0x93F6, 0x8CD1}, //2763 #CJK UNIFIED IDEOGRAPH + {0x93F7, 0x8089}, //2764 #CJK UNIFIED IDEOGRAPH + {0x93F8, 0x8679}, //2765 #CJK UNIFIED IDEOGRAPH + {0x93F9, 0x5EFF}, //2766 #CJK UNIFIED IDEOGRAPH + {0x93FA, 0x65E5}, //2767 #CJK UNIFIED IDEOGRAPH + {0x93FB, 0x4E73}, //2768 #CJK UNIFIED IDEOGRAPH + {0x93FC, 0x5165}, //2769 #CJK UNIFIED IDEOGRAPH + {0x9440, 0x5982}, //2770 #CJK UNIFIED IDEOGRAPH + {0x9441, 0x5C3F}, //2771 #CJK UNIFIED IDEOGRAPH + {0x9442, 0x97EE}, //2772 #CJK UNIFIED IDEOGRAPH + {0x9443, 0x4EFB}, //2773 #CJK UNIFIED IDEOGRAPH + {0x9444, 0x598A}, //2774 #CJK UNIFIED IDEOGRAPH + {0x9445, 0x5FCD}, //2775 #CJK UNIFIED IDEOGRAPH + {0x9446, 0x8A8D}, //2776 #CJK UNIFIED IDEOGRAPH + {0x9447, 0x6FE1}, //2777 #CJK UNIFIED IDEOGRAPH + {0x9448, 0x79B0}, //2778 #CJK UNIFIED IDEOGRAPH + {0x9449, 0x7962}, //2779 #CJK UNIFIED IDEOGRAPH + {0x944A, 0x5BE7}, //2780 #CJK UNIFIED IDEOGRAPH + {0x944B, 0x8471}, //2781 #CJK UNIFIED IDEOGRAPH + {0x944C, 0x732B}, //2782 #CJK UNIFIED IDEOGRAPH + {0x944D, 0x71B1}, //2783 #CJK UNIFIED IDEOGRAPH + {0x944E, 0x5E74}, //2784 #CJK UNIFIED IDEOGRAPH + {0x944F, 0x5FF5}, //2785 #CJK UNIFIED IDEOGRAPH + {0x9450, 0x637B}, //2786 #CJK UNIFIED IDEOGRAPH + {0x9451, 0x649A}, //2787 #CJK UNIFIED IDEOGRAPH + {0x9452, 0x71C3}, //2788 #CJK UNIFIED IDEOGRAPH + {0x9453, 0x7C98}, //2789 #CJK UNIFIED IDEOGRAPH + {0x9454, 0x4E43}, //2790 #CJK UNIFIED IDEOGRAPH + {0x9455, 0x5EFC}, //2791 #CJK UNIFIED IDEOGRAPH + {0x9456, 0x4E4B}, //2792 #CJK UNIFIED IDEOGRAPH + {0x9457, 0x57DC}, //2793 #CJK UNIFIED IDEOGRAPH + {0x9458, 0x56A2}, //2794 #CJK UNIFIED IDEOGRAPH + {0x9459, 0x60A9}, //2795 #CJK UNIFIED IDEOGRAPH + {0x945A, 0x6FC3}, //2796 #CJK UNIFIED IDEOGRAPH + {0x945B, 0x7D0D}, //2797 #CJK UNIFIED IDEOGRAPH + {0x945C, 0x80FD}, //2798 #CJK UNIFIED IDEOGRAPH + {0x945D, 0x8133}, //2799 #CJK UNIFIED IDEOGRAPH + {0x945E, 0x81BF}, //2800 #CJK UNIFIED IDEOGRAPH + {0x945F, 0x8FB2}, //2801 #CJK UNIFIED IDEOGRAPH + {0x9460, 0x8997}, //2802 #CJK UNIFIED IDEOGRAPH + {0x9461, 0x86A4}, //2803 #CJK UNIFIED IDEOGRAPH + {0x9462, 0x5DF4}, //2804 #CJK UNIFIED IDEOGRAPH + {0x9463, 0x628A}, //2805 #CJK UNIFIED IDEOGRAPH + {0x9464, 0x64AD}, //2806 #CJK UNIFIED IDEOGRAPH + {0x9465, 0x8987}, //2807 #CJK UNIFIED IDEOGRAPH + {0x9466, 0x6777}, //2808 #CJK UNIFIED IDEOGRAPH + {0x9467, 0x6CE2}, //2809 #CJK UNIFIED IDEOGRAPH + {0x9468, 0x6D3E}, //2810 #CJK UNIFIED IDEOGRAPH + {0x9469, 0x7436}, //2811 #CJK UNIFIED IDEOGRAPH + {0x946A, 0x7834}, //2812 #CJK UNIFIED IDEOGRAPH + {0x946B, 0x5A46}, //2813 #CJK UNIFIED IDEOGRAPH + {0x946C, 0x7F75}, //2814 #CJK UNIFIED IDEOGRAPH + {0x946D, 0x82AD}, //2815 #CJK UNIFIED IDEOGRAPH + {0x946E, 0x99AC}, //2816 #CJK UNIFIED IDEOGRAPH + {0x946F, 0x4FF3}, //2817 #CJK UNIFIED IDEOGRAPH + {0x9470, 0x5EC3}, //2818 #CJK UNIFIED IDEOGRAPH + {0x9471, 0x62DD}, //2819 #CJK UNIFIED IDEOGRAPH + {0x9472, 0x6392}, //2820 #CJK UNIFIED IDEOGRAPH + {0x9473, 0x6557}, //2821 #CJK UNIFIED IDEOGRAPH + {0x9474, 0x676F}, //2822 #CJK UNIFIED IDEOGRAPH + {0x9475, 0x76C3}, //2823 #CJK UNIFIED IDEOGRAPH + {0x9476, 0x724C}, //2824 #CJK UNIFIED IDEOGRAPH + {0x9477, 0x80CC}, //2825 #CJK UNIFIED IDEOGRAPH + {0x9478, 0x80BA}, //2826 #CJK UNIFIED IDEOGRAPH + {0x9479, 0x8F29}, //2827 #CJK UNIFIED IDEOGRAPH + {0x947A, 0x914D}, //2828 #CJK UNIFIED IDEOGRAPH + {0x947B, 0x500D}, //2829 #CJK UNIFIED IDEOGRAPH + {0x947C, 0x57F9}, //2830 #CJK UNIFIED IDEOGRAPH + {0x947D, 0x5A92}, //2831 #CJK UNIFIED IDEOGRAPH + {0x947E, 0x6885}, //2832 #CJK UNIFIED IDEOGRAPH + {0x9480, 0x6973}, //2833 #CJK UNIFIED IDEOGRAPH + {0x9481, 0x7164}, //2834 #CJK UNIFIED IDEOGRAPH + {0x9482, 0x72FD}, //2835 #CJK UNIFIED IDEOGRAPH + {0x9483, 0x8CB7}, //2836 #CJK UNIFIED IDEOGRAPH + {0x9484, 0x58F2}, //2837 #CJK UNIFIED IDEOGRAPH + {0x9485, 0x8CE0}, //2838 #CJK UNIFIED IDEOGRAPH + {0x9486, 0x966A}, //2839 #CJK UNIFIED IDEOGRAPH + {0x9487, 0x9019}, //2840 #CJK UNIFIED IDEOGRAPH + {0x9488, 0x877F}, //2841 #CJK UNIFIED IDEOGRAPH + {0x9489, 0x79E4}, //2842 #CJK UNIFIED IDEOGRAPH + {0x948A, 0x77E7}, //2843 #CJK UNIFIED IDEOGRAPH + {0x948B, 0x8429}, //2844 #CJK UNIFIED IDEOGRAPH + {0x948C, 0x4F2F}, //2845 #CJK UNIFIED IDEOGRAPH + {0x948D, 0x5265}, //2846 #CJK UNIFIED IDEOGRAPH + {0x948E, 0x535A}, //2847 #CJK UNIFIED IDEOGRAPH + {0x948F, 0x62CD}, //2848 #CJK UNIFIED IDEOGRAPH + {0x9490, 0x67CF}, //2849 #CJK UNIFIED IDEOGRAPH + {0x9491, 0x6CCA}, //2850 #CJK UNIFIED IDEOGRAPH + {0x9492, 0x767D}, //2851 #CJK UNIFIED IDEOGRAPH + {0x9493, 0x7B94}, //2852 #CJK UNIFIED IDEOGRAPH + {0x9494, 0x7C95}, //2853 #CJK UNIFIED IDEOGRAPH + {0x9495, 0x8236}, //2854 #CJK UNIFIED IDEOGRAPH + {0x9496, 0x8584}, //2855 #CJK UNIFIED IDEOGRAPH + {0x9497, 0x8FEB}, //2856 #CJK UNIFIED IDEOGRAPH + {0x9498, 0x66DD}, //2857 #CJK UNIFIED IDEOGRAPH + {0x9499, 0x6F20}, //2858 #CJK UNIFIED IDEOGRAPH + {0x949A, 0x7206}, //2859 #CJK UNIFIED IDEOGRAPH + {0x949B, 0x7E1B}, //2860 #CJK UNIFIED IDEOGRAPH + {0x949C, 0x83AB}, //2861 #CJK UNIFIED IDEOGRAPH + {0x949D, 0x99C1}, //2862 #CJK UNIFIED IDEOGRAPH + {0x949E, 0x9EA6}, //2863 #CJK UNIFIED IDEOGRAPH + {0x949F, 0x51FD}, //2864 #CJK UNIFIED IDEOGRAPH + {0x94A0, 0x7BB1}, //2865 #CJK UNIFIED IDEOGRAPH + {0x94A1, 0x7872}, //2866 #CJK UNIFIED IDEOGRAPH + {0x94A2, 0x7BB8}, //2867 #CJK UNIFIED IDEOGRAPH + {0x94A3, 0x8087}, //2868 #CJK UNIFIED IDEOGRAPH + {0x94A4, 0x7B48}, //2869 #CJK UNIFIED IDEOGRAPH + {0x94A5, 0x6AE8}, //2870 #CJK UNIFIED IDEOGRAPH + {0x94A6, 0x5E61}, //2871 #CJK UNIFIED IDEOGRAPH + {0x94A7, 0x808C}, //2872 #CJK UNIFIED IDEOGRAPH + {0x94A8, 0x7551}, //2873 #CJK UNIFIED IDEOGRAPH + {0x94A9, 0x7560}, //2874 #CJK UNIFIED IDEOGRAPH + {0x94AA, 0x516B}, //2875 #CJK UNIFIED IDEOGRAPH + {0x94AB, 0x9262}, //2876 #CJK UNIFIED IDEOGRAPH + {0x94AC, 0x6E8C}, //2877 #CJK UNIFIED IDEOGRAPH + {0x94AD, 0x767A}, //2878 #CJK UNIFIED IDEOGRAPH + {0x94AE, 0x9197}, //2879 #CJK UNIFIED IDEOGRAPH + {0x94AF, 0x9AEA}, //2880 #CJK UNIFIED IDEOGRAPH + {0x94B0, 0x4F10}, //2881 #CJK UNIFIED IDEOGRAPH + {0x94B1, 0x7F70}, //2882 #CJK UNIFIED IDEOGRAPH + {0x94B2, 0x629C}, //2883 #CJK UNIFIED IDEOGRAPH + {0x94B3, 0x7B4F}, //2884 #CJK UNIFIED IDEOGRAPH + {0x94B4, 0x95A5}, //2885 #CJK UNIFIED IDEOGRAPH + {0x94B5, 0x9CE9}, //2886 #CJK UNIFIED IDEOGRAPH + {0x94B6, 0x567A}, //2887 #CJK UNIFIED IDEOGRAPH + {0x94B7, 0x5859}, //2888 #CJK UNIFIED IDEOGRAPH + {0x94B8, 0x86E4}, //2889 #CJK UNIFIED IDEOGRAPH + {0x94B9, 0x96BC}, //2890 #CJK UNIFIED IDEOGRAPH + {0x94BA, 0x4F34}, //2891 #CJK UNIFIED IDEOGRAPH + {0x94BB, 0x5224}, //2892 #CJK UNIFIED IDEOGRAPH + {0x94BC, 0x534A}, //2893 #CJK UNIFIED IDEOGRAPH + {0x94BD, 0x53CD}, //2894 #CJK UNIFIED IDEOGRAPH + {0x94BE, 0x53DB}, //2895 #CJK UNIFIED IDEOGRAPH + {0x94BF, 0x5E06}, //2896 #CJK UNIFIED IDEOGRAPH + {0x94C0, 0x642C}, //2897 #CJK UNIFIED IDEOGRAPH + {0x94C1, 0x6591}, //2898 #CJK UNIFIED IDEOGRAPH + {0x94C2, 0x677F}, //2899 #CJK UNIFIED IDEOGRAPH + {0x94C3, 0x6C3E}, //2900 #CJK UNIFIED IDEOGRAPH + {0x94C4, 0x6C4E}, //2901 #CJK UNIFIED IDEOGRAPH + {0x94C5, 0x7248}, //2902 #CJK UNIFIED IDEOGRAPH + {0x94C6, 0x72AF}, //2903 #CJK UNIFIED IDEOGRAPH + {0x94C7, 0x73ED}, //2904 #CJK UNIFIED IDEOGRAPH + {0x94C8, 0x7554}, //2905 #CJK UNIFIED IDEOGRAPH + {0x94C9, 0x7E41}, //2906 #CJK UNIFIED IDEOGRAPH + {0x94CA, 0x822C}, //2907 #CJK UNIFIED IDEOGRAPH + {0x94CB, 0x85E9}, //2908 #CJK UNIFIED IDEOGRAPH + {0x94CC, 0x8CA9}, //2909 #CJK UNIFIED IDEOGRAPH + {0x94CD, 0x7BC4}, //2910 #CJK UNIFIED IDEOGRAPH + {0x94CE, 0x91C6}, //2911 #CJK UNIFIED IDEOGRAPH + {0x94CF, 0x7169}, //2912 #CJK UNIFIED IDEOGRAPH + {0x94D0, 0x9812}, //2913 #CJK UNIFIED IDEOGRAPH + {0x94D1, 0x98EF}, //2914 #CJK UNIFIED IDEOGRAPH + {0x94D2, 0x633D}, //2915 #CJK UNIFIED IDEOGRAPH + {0x94D3, 0x6669}, //2916 #CJK UNIFIED IDEOGRAPH + {0x94D4, 0x756A}, //2917 #CJK UNIFIED IDEOGRAPH + {0x94D5, 0x76E4}, //2918 #CJK UNIFIED IDEOGRAPH + {0x94D6, 0x78D0}, //2919 #CJK UNIFIED IDEOGRAPH + {0x94D7, 0x8543}, //2920 #CJK UNIFIED IDEOGRAPH + {0x94D8, 0x86EE}, //2921 #CJK UNIFIED IDEOGRAPH + {0x94D9, 0x532A}, //2922 #CJK UNIFIED IDEOGRAPH + {0x94DA, 0x5351}, //2923 #CJK UNIFIED IDEOGRAPH + {0x94DB, 0x5426}, //2924 #CJK UNIFIED IDEOGRAPH + {0x94DC, 0x5983}, //2925 #CJK UNIFIED IDEOGRAPH + {0x94DD, 0x5E87}, //2926 #CJK UNIFIED IDEOGRAPH + {0x94DE, 0x5F7C}, //2927 #CJK UNIFIED IDEOGRAPH + {0x94DF, 0x60B2}, //2928 #CJK UNIFIED IDEOGRAPH + {0x94E0, 0x6249}, //2929 #CJK UNIFIED IDEOGRAPH + {0x94E1, 0x6279}, //2930 #CJK UNIFIED IDEOGRAPH + {0x94E2, 0x62AB}, //2931 #CJK UNIFIED IDEOGRAPH + {0x94E3, 0x6590}, //2932 #CJK UNIFIED IDEOGRAPH + {0x94E4, 0x6BD4}, //2933 #CJK UNIFIED IDEOGRAPH + {0x94E5, 0x6CCC}, //2934 #CJK UNIFIED IDEOGRAPH + {0x94E6, 0x75B2}, //2935 #CJK UNIFIED IDEOGRAPH + {0x94E7, 0x76AE}, //2936 #CJK UNIFIED IDEOGRAPH + {0x94E8, 0x7891}, //2937 #CJK UNIFIED IDEOGRAPH + {0x94E9, 0x79D8}, //2938 #CJK UNIFIED IDEOGRAPH + {0x94EA, 0x7DCB}, //2939 #CJK UNIFIED IDEOGRAPH + {0x94EB, 0x7F77}, //2940 #CJK UNIFIED IDEOGRAPH + {0x94EC, 0x80A5}, //2941 #CJK UNIFIED IDEOGRAPH + {0x94ED, 0x88AB}, //2942 #CJK UNIFIED IDEOGRAPH + {0x94EE, 0x8AB9}, //2943 #CJK UNIFIED IDEOGRAPH + {0x94EF, 0x8CBB}, //2944 #CJK UNIFIED IDEOGRAPH + {0x94F0, 0x907F}, //2945 #CJK UNIFIED IDEOGRAPH + {0x94F1, 0x975E}, //2946 #CJK UNIFIED IDEOGRAPH + {0x94F2, 0x98DB}, //2947 #CJK UNIFIED IDEOGRAPH + {0x94F3, 0x6A0B}, //2948 #CJK UNIFIED IDEOGRAPH + {0x94F4, 0x7C38}, //2949 #CJK UNIFIED IDEOGRAPH + {0x94F5, 0x5099}, //2950 #CJK UNIFIED IDEOGRAPH + {0x94F6, 0x5C3E}, //2951 #CJK UNIFIED IDEOGRAPH + {0x94F7, 0x5FAE}, //2952 #CJK UNIFIED IDEOGRAPH + {0x94F8, 0x6787}, //2953 #CJK UNIFIED IDEOGRAPH + {0x94F9, 0x6BD8}, //2954 #CJK UNIFIED IDEOGRAPH + {0x94FA, 0x7435}, //2955 #CJK UNIFIED IDEOGRAPH + {0x94FB, 0x7709}, //2956 #CJK UNIFIED IDEOGRAPH + {0x94FC, 0x7F8E}, //2957 #CJK UNIFIED IDEOGRAPH + {0x9540, 0x9F3B}, //2958 #CJK UNIFIED IDEOGRAPH + {0x9541, 0x67CA}, //2959 #CJK UNIFIED IDEOGRAPH + {0x9542, 0x7A17}, //2960 #CJK UNIFIED IDEOGRAPH + {0x9543, 0x5339}, //2961 #CJK UNIFIED IDEOGRAPH + {0x9544, 0x758B}, //2962 #CJK UNIFIED IDEOGRAPH + {0x9545, 0x9AED}, //2963 #CJK UNIFIED IDEOGRAPH + {0x9546, 0x5F66}, //2964 #CJK UNIFIED IDEOGRAPH + {0x9547, 0x819D}, //2965 #CJK UNIFIED IDEOGRAPH + {0x9548, 0x83F1}, //2966 #CJK UNIFIED IDEOGRAPH + {0x9549, 0x8098}, //2967 #CJK UNIFIED IDEOGRAPH + {0x954A, 0x5F3C}, //2968 #CJK UNIFIED IDEOGRAPH + {0x954B, 0x5FC5}, //2969 #CJK UNIFIED IDEOGRAPH + {0x954C, 0x7562}, //2970 #CJK UNIFIED IDEOGRAPH + {0x954D, 0x7B46}, //2971 #CJK UNIFIED IDEOGRAPH + {0x954E, 0x903C}, //2972 #CJK UNIFIED IDEOGRAPH + {0x954F, 0x6867}, //2973 #CJK UNIFIED IDEOGRAPH + {0x9550, 0x59EB}, //2974 #CJK UNIFIED IDEOGRAPH + {0x9551, 0x5A9B}, //2975 #CJK UNIFIED IDEOGRAPH + {0x9552, 0x7D10}, //2976 #CJK UNIFIED IDEOGRAPH + {0x9553, 0x767E}, //2977 #CJK UNIFIED IDEOGRAPH + {0x9554, 0x8B2C}, //2978 #CJK UNIFIED IDEOGRAPH + {0x9555, 0x4FF5}, //2979 #CJK UNIFIED IDEOGRAPH + {0x9556, 0x5F6A}, //2980 #CJK UNIFIED IDEOGRAPH + {0x9557, 0x6A19}, //2981 #CJK UNIFIED IDEOGRAPH + {0x9558, 0x6C37}, //2982 #CJK UNIFIED IDEOGRAPH + {0x9559, 0x6F02}, //2983 #CJK UNIFIED IDEOGRAPH + {0x955A, 0x74E2}, //2984 #CJK UNIFIED IDEOGRAPH + {0x955B, 0x7968}, //2985 #CJK UNIFIED IDEOGRAPH + {0x955C, 0x8868}, //2986 #CJK UNIFIED IDEOGRAPH + {0x955D, 0x8A55}, //2987 #CJK UNIFIED IDEOGRAPH + {0x955E, 0x8C79}, //2988 #CJK UNIFIED IDEOGRAPH + {0x955F, 0x5EDF}, //2989 #CJK UNIFIED IDEOGRAPH + {0x9560, 0x63CF}, //2990 #CJK UNIFIED IDEOGRAPH + {0x9561, 0x75C5}, //2991 #CJK UNIFIED IDEOGRAPH + {0x9562, 0x79D2}, //2992 #CJK UNIFIED IDEOGRAPH + {0x9563, 0x82D7}, //2993 #CJK UNIFIED IDEOGRAPH + {0x9564, 0x9328}, //2994 #CJK UNIFIED IDEOGRAPH + {0x9565, 0x92F2}, //2995 #CJK UNIFIED IDEOGRAPH + {0x9566, 0x849C}, //2996 #CJK UNIFIED IDEOGRAPH + {0x9567, 0x86ED}, //2997 #CJK UNIFIED IDEOGRAPH + {0x9568, 0x9C2D}, //2998 #CJK UNIFIED IDEOGRAPH + {0x9569, 0x54C1}, //2999 #CJK UNIFIED IDEOGRAPH + {0x956A, 0x5F6C}, //3000 #CJK UNIFIED IDEOGRAPH + {0x956B, 0x658C}, //3001 #CJK UNIFIED IDEOGRAPH + {0x956C, 0x6D5C}, //3002 #CJK UNIFIED IDEOGRAPH + {0x956D, 0x7015}, //3003 #CJK UNIFIED IDEOGRAPH + {0x956E, 0x8CA7}, //3004 #CJK UNIFIED IDEOGRAPH + {0x956F, 0x8CD3}, //3005 #CJK UNIFIED IDEOGRAPH + {0x9570, 0x983B}, //3006 #CJK UNIFIED IDEOGRAPH + {0x9571, 0x654F}, //3007 #CJK UNIFIED IDEOGRAPH + {0x9572, 0x74F6}, //3008 #CJK UNIFIED IDEOGRAPH + {0x9573, 0x4E0D}, //3009 #CJK UNIFIED IDEOGRAPH + {0x9574, 0x4ED8}, //3010 #CJK UNIFIED IDEOGRAPH + {0x9575, 0x57E0}, //3011 #CJK UNIFIED IDEOGRAPH + {0x9576, 0x592B}, //3012 #CJK UNIFIED IDEOGRAPH + {0x9577, 0x5A66}, //3013 #CJK UNIFIED IDEOGRAPH + {0x9578, 0x5BCC}, //3014 #CJK UNIFIED IDEOGRAPH + {0x9579, 0x51A8}, //3015 #CJK UNIFIED IDEOGRAPH + {0x957A, 0x5E03}, //3016 #CJK UNIFIED IDEOGRAPH + {0x957B, 0x5E9C}, //3017 #CJK UNIFIED IDEOGRAPH + {0x957C, 0x6016}, //3018 #CJK UNIFIED IDEOGRAPH + {0x957D, 0x6276}, //3019 #CJK UNIFIED IDEOGRAPH + {0x957E, 0x6577}, //3020 #CJK UNIFIED IDEOGRAPH + {0x9580, 0x65A7}, //3021 #CJK UNIFIED IDEOGRAPH + {0x9581, 0x666E}, //3022 #CJK UNIFIED IDEOGRAPH + {0x9582, 0x6D6E}, //3023 #CJK UNIFIED IDEOGRAPH + {0x9583, 0x7236}, //3024 #CJK UNIFIED IDEOGRAPH + {0x9584, 0x7B26}, //3025 #CJK UNIFIED IDEOGRAPH + {0x9585, 0x8150}, //3026 #CJK UNIFIED IDEOGRAPH + {0x9586, 0x819A}, //3027 #CJK UNIFIED IDEOGRAPH + {0x9587, 0x8299}, //3028 #CJK UNIFIED IDEOGRAPH + {0x9588, 0x8B5C}, //3029 #CJK UNIFIED IDEOGRAPH + {0x9589, 0x8CA0}, //3030 #CJK UNIFIED IDEOGRAPH + {0x958A, 0x8CE6}, //3031 #CJK UNIFIED IDEOGRAPH + {0x958B, 0x8D74}, //3032 #CJK UNIFIED IDEOGRAPH + {0x958C, 0x961C}, //3033 #CJK UNIFIED IDEOGRAPH + {0x958D, 0x9644}, //3034 #CJK UNIFIED IDEOGRAPH + {0x958E, 0x4FAE}, //3035 #CJK UNIFIED IDEOGRAPH + {0x958F, 0x64AB}, //3036 #CJK UNIFIED IDEOGRAPH + {0x9590, 0x6B66}, //3037 #CJK UNIFIED IDEOGRAPH + {0x9591, 0x821E}, //3038 #CJK UNIFIED IDEOGRAPH + {0x9592, 0x8461}, //3039 #CJK UNIFIED IDEOGRAPH + {0x9593, 0x856A}, //3040 #CJK UNIFIED IDEOGRAPH + {0x9594, 0x90E8}, //3041 #CJK UNIFIED IDEOGRAPH + {0x9595, 0x5C01}, //3042 #CJK UNIFIED IDEOGRAPH + {0x9596, 0x6953}, //3043 #CJK UNIFIED IDEOGRAPH + {0x9597, 0x98A8}, //3044 #CJK UNIFIED IDEOGRAPH + {0x9598, 0x847A}, //3045 #CJK UNIFIED IDEOGRAPH + {0x9599, 0x8557}, //3046 #CJK UNIFIED IDEOGRAPH + {0x959A, 0x4F0F}, //3047 #CJK UNIFIED IDEOGRAPH + {0x959B, 0x526F}, //3048 #CJK UNIFIED IDEOGRAPH + {0x959C, 0x5FA9}, //3049 #CJK UNIFIED IDEOGRAPH + {0x959D, 0x5E45}, //3050 #CJK UNIFIED IDEOGRAPH + {0x959E, 0x670D}, //3051 #CJK UNIFIED IDEOGRAPH + {0x959F, 0x798F}, //3052 #CJK UNIFIED IDEOGRAPH + {0x95A0, 0x8179}, //3053 #CJK UNIFIED IDEOGRAPH + {0x95A1, 0x8907}, //3054 #CJK UNIFIED IDEOGRAPH + {0x95A2, 0x8986}, //3055 #CJK UNIFIED IDEOGRAPH + {0x95A3, 0x6DF5}, //3056 #CJK UNIFIED IDEOGRAPH + {0x95A4, 0x5F17}, //3057 #CJK UNIFIED IDEOGRAPH + {0x95A5, 0x6255}, //3058 #CJK UNIFIED IDEOGRAPH + {0x95A6, 0x6CB8}, //3059 #CJK UNIFIED IDEOGRAPH + {0x95A7, 0x4ECF}, //3060 #CJK UNIFIED IDEOGRAPH + {0x95A8, 0x7269}, //3061 #CJK UNIFIED IDEOGRAPH + {0x95A9, 0x9B92}, //3062 #CJK UNIFIED IDEOGRAPH + {0x95AA, 0x5206}, //3063 #CJK UNIFIED IDEOGRAPH + {0x95AB, 0x543B}, //3064 #CJK UNIFIED IDEOGRAPH + {0x95AC, 0x5674}, //3065 #CJK UNIFIED IDEOGRAPH + {0x95AD, 0x58B3}, //3066 #CJK UNIFIED IDEOGRAPH + {0x95AE, 0x61A4}, //3067 #CJK UNIFIED IDEOGRAPH + {0x95AF, 0x626E}, //3068 #CJK UNIFIED IDEOGRAPH + {0x95B0, 0x711A}, //3069 #CJK UNIFIED IDEOGRAPH + {0x95B1, 0x596E}, //3070 #CJK UNIFIED IDEOGRAPH + {0x95B2, 0x7C89}, //3071 #CJK UNIFIED IDEOGRAPH + {0x95B3, 0x7CDE}, //3072 #CJK UNIFIED IDEOGRAPH + {0x95B4, 0x7D1B}, //3073 #CJK UNIFIED IDEOGRAPH + {0x95B5, 0x96F0}, //3074 #CJK UNIFIED IDEOGRAPH + {0x95B6, 0x6587}, //3075 #CJK UNIFIED IDEOGRAPH + {0x95B7, 0x805E}, //3076 #CJK UNIFIED IDEOGRAPH + {0x95B8, 0x4E19}, //3077 #CJK UNIFIED IDEOGRAPH + {0x95B9, 0x4F75}, //3078 #CJK UNIFIED IDEOGRAPH + {0x95BA, 0x5175}, //3079 #CJK UNIFIED IDEOGRAPH + {0x95BB, 0x5840}, //3080 #CJK UNIFIED IDEOGRAPH + {0x95BC, 0x5E63}, //3081 #CJK UNIFIED IDEOGRAPH + {0x95BD, 0x5E73}, //3082 #CJK UNIFIED IDEOGRAPH + {0x95BE, 0x5F0A}, //3083 #CJK UNIFIED IDEOGRAPH + {0x95BF, 0x67C4}, //3084 #CJK UNIFIED IDEOGRAPH + {0x95C0, 0x4E26}, //3085 #CJK UNIFIED IDEOGRAPH + {0x95C1, 0x853D}, //3086 #CJK UNIFIED IDEOGRAPH + {0x95C2, 0x9589}, //3087 #CJK UNIFIED IDEOGRAPH + {0x95C3, 0x965B}, //3088 #CJK UNIFIED IDEOGRAPH + {0x95C4, 0x7C73}, //3089 #CJK UNIFIED IDEOGRAPH + {0x95C5, 0x9801}, //3090 #CJK UNIFIED IDEOGRAPH + {0x95C6, 0x50FB}, //3091 #CJK UNIFIED IDEOGRAPH + {0x95C7, 0x58C1}, //3092 #CJK UNIFIED IDEOGRAPH + {0x95C8, 0x7656}, //3093 #CJK UNIFIED IDEOGRAPH + {0x95C9, 0x78A7}, //3094 #CJK UNIFIED IDEOGRAPH + {0x95CA, 0x5225}, //3095 #CJK UNIFIED IDEOGRAPH + {0x95CB, 0x77A5}, //3096 #CJK UNIFIED IDEOGRAPH + {0x95CC, 0x8511}, //3097 #CJK UNIFIED IDEOGRAPH + {0x95CD, 0x7B86}, //3098 #CJK UNIFIED IDEOGRAPH + {0x95CE, 0x504F}, //3099 #CJK UNIFIED IDEOGRAPH + {0x95CF, 0x5909}, //3100 #CJK UNIFIED IDEOGRAPH + {0x95D0, 0x7247}, //3101 #CJK UNIFIED IDEOGRAPH + {0x95D1, 0x7BC7}, //3102 #CJK UNIFIED IDEOGRAPH + {0x95D2, 0x7DE8}, //3103 #CJK UNIFIED IDEOGRAPH + {0x95D3, 0x8FBA}, //3104 #CJK UNIFIED IDEOGRAPH + {0x95D4, 0x8FD4}, //3105 #CJK UNIFIED IDEOGRAPH + {0x95D5, 0x904D}, //3106 #CJK UNIFIED IDEOGRAPH + {0x95D6, 0x4FBF}, //3107 #CJK UNIFIED IDEOGRAPH + {0x95D7, 0x52C9}, //3108 #CJK UNIFIED IDEOGRAPH + {0x95D8, 0x5A29}, //3109 #CJK UNIFIED IDEOGRAPH + {0x95D9, 0x5F01}, //3110 #CJK UNIFIED IDEOGRAPH + {0x95DA, 0x97AD}, //3111 #CJK UNIFIED IDEOGRAPH + {0x95DB, 0x4FDD}, //3112 #CJK UNIFIED IDEOGRAPH + {0x95DC, 0x8217}, //3113 #CJK UNIFIED IDEOGRAPH + {0x95DD, 0x92EA}, //3114 #CJK UNIFIED IDEOGRAPH + {0x95DE, 0x5703}, //3115 #CJK UNIFIED IDEOGRAPH + {0x95DF, 0x6355}, //3116 #CJK UNIFIED IDEOGRAPH + {0x95E0, 0x6B69}, //3117 #CJK UNIFIED IDEOGRAPH + {0x95E1, 0x752B}, //3118 #CJK UNIFIED IDEOGRAPH + {0x95E2, 0x88DC}, //3119 #CJK UNIFIED IDEOGRAPH + {0x95E3, 0x8F14}, //3120 #CJK UNIFIED IDEOGRAPH + {0x95E4, 0x7A42}, //3121 #CJK UNIFIED IDEOGRAPH + {0x95E5, 0x52DF}, //3122 #CJK UNIFIED IDEOGRAPH + {0x95E6, 0x5893}, //3123 #CJK UNIFIED IDEOGRAPH + {0x95E7, 0x6155}, //3124 #CJK UNIFIED IDEOGRAPH + {0x95E8, 0x620A}, //3125 #CJK UNIFIED IDEOGRAPH + {0x95E9, 0x66AE}, //3126 #CJK UNIFIED IDEOGRAPH + {0x95EA, 0x6BCD}, //3127 #CJK UNIFIED IDEOGRAPH + {0x95EB, 0x7C3F}, //3128 #CJK UNIFIED IDEOGRAPH + {0x95EC, 0x83E9}, //3129 #CJK UNIFIED IDEOGRAPH + {0x95ED, 0x5023}, //3130 #CJK UNIFIED IDEOGRAPH + {0x95EE, 0x4FF8}, //3131 #CJK UNIFIED IDEOGRAPH + {0x95EF, 0x5305}, //3132 #CJK UNIFIED IDEOGRAPH + {0x95F0, 0x5446}, //3133 #CJK UNIFIED IDEOGRAPH + {0x95F1, 0x5831}, //3134 #CJK UNIFIED IDEOGRAPH + {0x95F2, 0x5949}, //3135 #CJK UNIFIED IDEOGRAPH + {0x95F3, 0x5B9D}, //3136 #CJK UNIFIED IDEOGRAPH + {0x95F4, 0x5CF0}, //3137 #CJK UNIFIED IDEOGRAPH + {0x95F5, 0x5CEF}, //3138 #CJK UNIFIED IDEOGRAPH + {0x95F6, 0x5D29}, //3139 #CJK UNIFIED IDEOGRAPH + {0x95F7, 0x5E96}, //3140 #CJK UNIFIED IDEOGRAPH + {0x95F8, 0x62B1}, //3141 #CJK UNIFIED IDEOGRAPH + {0x95F9, 0x6367}, //3142 #CJK UNIFIED IDEOGRAPH + {0x95FA, 0x653E}, //3143 #CJK UNIFIED IDEOGRAPH + {0x95FB, 0x65B9}, //3144 #CJK UNIFIED IDEOGRAPH + {0x95FC, 0x670B}, //3145 #CJK UNIFIED IDEOGRAPH + {0x9640, 0x6CD5}, //3146 #CJK UNIFIED IDEOGRAPH + {0x9641, 0x6CE1}, //3147 #CJK UNIFIED IDEOGRAPH + {0x9642, 0x70F9}, //3148 #CJK UNIFIED IDEOGRAPH + {0x9643, 0x7832}, //3149 #CJK UNIFIED IDEOGRAPH + {0x9644, 0x7E2B}, //3150 #CJK UNIFIED IDEOGRAPH + {0x9645, 0x80DE}, //3151 #CJK UNIFIED IDEOGRAPH + {0x9646, 0x82B3}, //3152 #CJK UNIFIED IDEOGRAPH + {0x9647, 0x840C}, //3153 #CJK UNIFIED IDEOGRAPH + {0x9648, 0x84EC}, //3154 #CJK UNIFIED IDEOGRAPH + {0x9649, 0x8702}, //3155 #CJK UNIFIED IDEOGRAPH + {0x964A, 0x8912}, //3156 #CJK UNIFIED IDEOGRAPH + {0x964B, 0x8A2A}, //3157 #CJK UNIFIED IDEOGRAPH + {0x964C, 0x8C4A}, //3158 #CJK UNIFIED IDEOGRAPH + {0x964D, 0x90A6}, //3159 #CJK UNIFIED IDEOGRAPH + {0x964E, 0x92D2}, //3160 #CJK UNIFIED IDEOGRAPH + {0x964F, 0x98FD}, //3161 #CJK UNIFIED IDEOGRAPH + {0x9650, 0x9CF3}, //3162 #CJK UNIFIED IDEOGRAPH + {0x9651, 0x9D6C}, //3163 #CJK UNIFIED IDEOGRAPH + {0x9652, 0x4E4F}, //3164 #CJK UNIFIED IDEOGRAPH + {0x9653, 0x4EA1}, //3165 #CJK UNIFIED IDEOGRAPH + {0x9654, 0x508D}, //3166 #CJK UNIFIED IDEOGRAPH + {0x9655, 0x5256}, //3167 #CJK UNIFIED IDEOGRAPH + {0x9656, 0x574A}, //3168 #CJK UNIFIED IDEOGRAPH + {0x9657, 0x59A8}, //3169 #CJK UNIFIED IDEOGRAPH + {0x9658, 0x5E3D}, //3170 #CJK UNIFIED IDEOGRAPH + {0x9659, 0x5FD8}, //3171 #CJK UNIFIED IDEOGRAPH + {0x965A, 0x5FD9}, //3172 #CJK UNIFIED IDEOGRAPH + {0x965B, 0x623F}, //3173 #CJK UNIFIED IDEOGRAPH + {0x965C, 0x66B4}, //3174 #CJK UNIFIED IDEOGRAPH + {0x965D, 0x671B}, //3175 #CJK UNIFIED IDEOGRAPH + {0x965E, 0x67D0}, //3176 #CJK UNIFIED IDEOGRAPH + {0x965F, 0x68D2}, //3177 #CJK UNIFIED IDEOGRAPH + {0x9660, 0x5192}, //3178 #CJK UNIFIED IDEOGRAPH + {0x9661, 0x7D21}, //3179 #CJK UNIFIED IDEOGRAPH + {0x9662, 0x80AA}, //3180 #CJK UNIFIED IDEOGRAPH + {0x9663, 0x81A8}, //3181 #CJK UNIFIED IDEOGRAPH + {0x9664, 0x8B00}, //3182 #CJK UNIFIED IDEOGRAPH + {0x9665, 0x8C8C}, //3183 #CJK UNIFIED IDEOGRAPH + {0x9666, 0x8CBF}, //3184 #CJK UNIFIED IDEOGRAPH + {0x9667, 0x927E}, //3185 #CJK UNIFIED IDEOGRAPH + {0x9668, 0x9632}, //3186 #CJK UNIFIED IDEOGRAPH + {0x9669, 0x5420}, //3187 #CJK UNIFIED IDEOGRAPH + {0x966A, 0x982C}, //3188 #CJK UNIFIED IDEOGRAPH + {0x966B, 0x5317}, //3189 #CJK UNIFIED IDEOGRAPH + {0x966C, 0x50D5}, //3190 #CJK UNIFIED IDEOGRAPH + {0x966D, 0x535C}, //3191 #CJK UNIFIED IDEOGRAPH + {0x966E, 0x58A8}, //3192 #CJK UNIFIED IDEOGRAPH + {0x966F, 0x64B2}, //3193 #CJK UNIFIED IDEOGRAPH + {0x9670, 0x6734}, //3194 #CJK UNIFIED IDEOGRAPH + {0x9671, 0x7267}, //3195 #CJK UNIFIED IDEOGRAPH + {0x9672, 0x7766}, //3196 #CJK UNIFIED IDEOGRAPH + {0x9673, 0x7A46}, //3197 #CJK UNIFIED IDEOGRAPH + {0x9674, 0x91E6}, //3198 #CJK UNIFIED IDEOGRAPH + {0x9675, 0x52C3}, //3199 #CJK UNIFIED IDEOGRAPH + {0x9676, 0x6CA1}, //3200 #CJK UNIFIED IDEOGRAPH + {0x9677, 0x6B86}, //3201 #CJK UNIFIED IDEOGRAPH + {0x9678, 0x5800}, //3202 #CJK UNIFIED IDEOGRAPH + {0x9679, 0x5E4C}, //3203 #CJK UNIFIED IDEOGRAPH + {0x967A, 0x5954}, //3204 #CJK UNIFIED IDEOGRAPH + {0x967B, 0x672C}, //3205 #CJK UNIFIED IDEOGRAPH + {0x967C, 0x7FFB}, //3206 #CJK UNIFIED IDEOGRAPH + {0x967D, 0x51E1}, //3207 #CJK UNIFIED IDEOGRAPH + {0x967E, 0x76C6}, //3208 #CJK UNIFIED IDEOGRAPH + {0x9680, 0x6469}, //3209 #CJK UNIFIED IDEOGRAPH + {0x9681, 0x78E8}, //3210 #CJK UNIFIED IDEOGRAPH + {0x9682, 0x9B54}, //3211 #CJK UNIFIED IDEOGRAPH + {0x9683, 0x9EBB}, //3212 #CJK UNIFIED IDEOGRAPH + {0x9684, 0x57CB}, //3213 #CJK UNIFIED IDEOGRAPH + {0x9685, 0x59B9}, //3214 #CJK UNIFIED IDEOGRAPH + {0x9686, 0x6627}, //3215 #CJK UNIFIED IDEOGRAPH + {0x9687, 0x679A}, //3216 #CJK UNIFIED IDEOGRAPH + {0x9688, 0x6BCE}, //3217 #CJK UNIFIED IDEOGRAPH + {0x9689, 0x54E9}, //3218 #CJK UNIFIED IDEOGRAPH + {0x968A, 0x69D9}, //3219 #CJK UNIFIED IDEOGRAPH + {0x968B, 0x5E55}, //3220 #CJK UNIFIED IDEOGRAPH + {0x968C, 0x819C}, //3221 #CJK UNIFIED IDEOGRAPH + {0x968D, 0x6795}, //3222 #CJK UNIFIED IDEOGRAPH + {0x968E, 0x9BAA}, //3223 #CJK UNIFIED IDEOGRAPH + {0x968F, 0x67FE}, //3224 #CJK UNIFIED IDEOGRAPH + {0x9690, 0x9C52}, //3225 #CJK UNIFIED IDEOGRAPH + {0x9691, 0x685D}, //3226 #CJK UNIFIED IDEOGRAPH + {0x9692, 0x4EA6}, //3227 #CJK UNIFIED IDEOGRAPH + {0x9693, 0x4FE3}, //3228 #CJK UNIFIED IDEOGRAPH + {0x9694, 0x53C8}, //3229 #CJK UNIFIED IDEOGRAPH + {0x9695, 0x62B9}, //3230 #CJK UNIFIED IDEOGRAPH + {0x9696, 0x672B}, //3231 #CJK UNIFIED IDEOGRAPH + {0x9697, 0x6CAB}, //3232 #CJK UNIFIED IDEOGRAPH + {0x9698, 0x8FC4}, //3233 #CJK UNIFIED IDEOGRAPH + {0x9699, 0x4FAD}, //3234 #CJK UNIFIED IDEOGRAPH + {0x969A, 0x7E6D}, //3235 #CJK UNIFIED IDEOGRAPH + {0x969B, 0x9EBF}, //3236 #CJK UNIFIED IDEOGRAPH + {0x969C, 0x4E07}, //3237 #CJK UNIFIED IDEOGRAPH + {0x969D, 0x6162}, //3238 #CJK UNIFIED IDEOGRAPH + {0x969E, 0x6E80}, //3239 #CJK UNIFIED IDEOGRAPH + {0x969F, 0x6F2B}, //3240 #CJK UNIFIED IDEOGRAPH + {0x96A0, 0x8513}, //3241 #CJK UNIFIED IDEOGRAPH + {0x96A1, 0x5473}, //3242 #CJK UNIFIED IDEOGRAPH + {0x96A2, 0x672A}, //3243 #CJK UNIFIED IDEOGRAPH + {0x96A3, 0x9B45}, //3244 #CJK UNIFIED IDEOGRAPH + {0x96A4, 0x5DF3}, //3245 #CJK UNIFIED IDEOGRAPH + {0x96A5, 0x7B95}, //3246 #CJK UNIFIED IDEOGRAPH + {0x96A6, 0x5CAC}, //3247 #CJK UNIFIED IDEOGRAPH + {0x96A7, 0x5BC6}, //3248 #CJK UNIFIED IDEOGRAPH + {0x96A8, 0x871C}, //3249 #CJK UNIFIED IDEOGRAPH + {0x96A9, 0x6E4A}, //3250 #CJK UNIFIED IDEOGRAPH + {0x96AA, 0x84D1}, //3251 #CJK UNIFIED IDEOGRAPH + {0x96AB, 0x7A14}, //3252 #CJK UNIFIED IDEOGRAPH + {0x96AC, 0x8108}, //3253 #CJK UNIFIED IDEOGRAPH + {0x96AD, 0x5999}, //3254 #CJK UNIFIED IDEOGRAPH + {0x96AE, 0x7C8D}, //3255 #CJK UNIFIED IDEOGRAPH + {0x96AF, 0x6C11}, //3256 #CJK UNIFIED IDEOGRAPH + {0x96B0, 0x7720}, //3257 #CJK UNIFIED IDEOGRAPH + {0x96B1, 0x52D9}, //3258 #CJK UNIFIED IDEOGRAPH + {0x96B2, 0x5922}, //3259 #CJK UNIFIED IDEOGRAPH + {0x96B3, 0x7121}, //3260 #CJK UNIFIED IDEOGRAPH + {0x96B4, 0x725F}, //3261 #CJK UNIFIED IDEOGRAPH + {0x96B5, 0x77DB}, //3262 #CJK UNIFIED IDEOGRAPH + {0x96B6, 0x9727}, //3263 #CJK UNIFIED IDEOGRAPH + {0x96B7, 0x9D61}, //3264 #CJK UNIFIED IDEOGRAPH + {0x96B8, 0x690B}, //3265 #CJK UNIFIED IDEOGRAPH + {0x96B9, 0x5A7F}, //3266 #CJK UNIFIED IDEOGRAPH + {0x96BA, 0x5A18}, //3267 #CJK UNIFIED IDEOGRAPH + {0x96BB, 0x51A5}, //3268 #CJK UNIFIED IDEOGRAPH + {0x96BC, 0x540D}, //3269 #CJK UNIFIED IDEOGRAPH + {0x96BD, 0x547D}, //3270 #CJK UNIFIED IDEOGRAPH + {0x96BE, 0x660E}, //3271 #CJK UNIFIED IDEOGRAPH + {0x96BF, 0x76DF}, //3272 #CJK UNIFIED IDEOGRAPH + {0x96C0, 0x8FF7}, //3273 #CJK UNIFIED IDEOGRAPH + {0x96C1, 0x9298}, //3274 #CJK UNIFIED IDEOGRAPH + {0x96C2, 0x9CF4}, //3275 #CJK UNIFIED IDEOGRAPH + {0x96C3, 0x59EA}, //3276 #CJK UNIFIED IDEOGRAPH + {0x96C4, 0x725D}, //3277 #CJK UNIFIED IDEOGRAPH + {0x96C5, 0x6EC5}, //3278 #CJK UNIFIED IDEOGRAPH + {0x96C6, 0x514D}, //3279 #CJK UNIFIED IDEOGRAPH + {0x96C7, 0x68C9}, //3280 #CJK UNIFIED IDEOGRAPH + {0x96C8, 0x7DBF}, //3281 #CJK UNIFIED IDEOGRAPH + {0x96C9, 0x7DEC}, //3282 #CJK UNIFIED IDEOGRAPH + {0x96CA, 0x9762}, //3283 #CJK UNIFIED IDEOGRAPH + {0x96CB, 0x9EBA}, //3284 #CJK UNIFIED IDEOGRAPH + {0x96CC, 0x6478}, //3285 #CJK UNIFIED IDEOGRAPH + {0x96CD, 0x6A21}, //3286 #CJK UNIFIED IDEOGRAPH + {0x96CE, 0x8302}, //3287 #CJK UNIFIED IDEOGRAPH + {0x96CF, 0x5984}, //3288 #CJK UNIFIED IDEOGRAPH + {0x96D0, 0x5B5F}, //3289 #CJK UNIFIED IDEOGRAPH + {0x96D1, 0x6BDB}, //3290 #CJK UNIFIED IDEOGRAPH + {0x96D2, 0x731B}, //3291 #CJK UNIFIED IDEOGRAPH + {0x96D3, 0x76F2}, //3292 #CJK UNIFIED IDEOGRAPH + {0x96D4, 0x7DB2}, //3293 #CJK UNIFIED IDEOGRAPH + {0x96D5, 0x8017}, //3294 #CJK UNIFIED IDEOGRAPH + {0x96D6, 0x8499}, //3295 #CJK UNIFIED IDEOGRAPH + {0x96D7, 0x5132}, //3296 #CJK UNIFIED IDEOGRAPH + {0x96D8, 0x6728}, //3297 #CJK UNIFIED IDEOGRAPH + {0x96D9, 0x9ED9}, //3298 #CJK UNIFIED IDEOGRAPH + {0x96DA, 0x76EE}, //3299 #CJK UNIFIED IDEOGRAPH + {0x96DB, 0x6762}, //3300 #CJK UNIFIED IDEOGRAPH + {0x96DC, 0x52FF}, //3301 #CJK UNIFIED IDEOGRAPH + {0x96DD, 0x9905}, //3302 #CJK UNIFIED IDEOGRAPH + {0x96DE, 0x5C24}, //3303 #CJK UNIFIED IDEOGRAPH + {0x96DF, 0x623B}, //3304 #CJK UNIFIED IDEOGRAPH + {0x96E0, 0x7C7E}, //3305 #CJK UNIFIED IDEOGRAPH + {0x96E1, 0x8CB0}, //3306 #CJK UNIFIED IDEOGRAPH + {0x96E2, 0x554F}, //3307 #CJK UNIFIED IDEOGRAPH + {0x96E3, 0x60B6}, //3308 #CJK UNIFIED IDEOGRAPH + {0x96E4, 0x7D0B}, //3309 #CJK UNIFIED IDEOGRAPH + {0x96E5, 0x9580}, //3310 #CJK UNIFIED IDEOGRAPH + {0x96E6, 0x5301}, //3311 #CJK UNIFIED IDEOGRAPH + {0x96E7, 0x4E5F}, //3312 #CJK UNIFIED IDEOGRAPH + {0x96E8, 0x51B6}, //3313 #CJK UNIFIED IDEOGRAPH + {0x96E9, 0x591C}, //3314 #CJK UNIFIED IDEOGRAPH + {0x96EA, 0x723A}, //3315 #CJK UNIFIED IDEOGRAPH + {0x96EB, 0x8036}, //3316 #CJK UNIFIED IDEOGRAPH + {0x96EC, 0x91CE}, //3317 #CJK UNIFIED IDEOGRAPH + {0x96ED, 0x5F25}, //3318 #CJK UNIFIED IDEOGRAPH + {0x96EE, 0x77E2}, //3319 #CJK UNIFIED IDEOGRAPH + {0x96EF, 0x5384}, //3320 #CJK UNIFIED IDEOGRAPH + {0x96F0, 0x5F79}, //3321 #CJK UNIFIED IDEOGRAPH + {0x96F1, 0x7D04}, //3322 #CJK UNIFIED IDEOGRAPH + {0x96F2, 0x85AC}, //3323 #CJK UNIFIED IDEOGRAPH + {0x96F3, 0x8A33}, //3324 #CJK UNIFIED IDEOGRAPH + {0x96F4, 0x8E8D}, //3325 #CJK UNIFIED IDEOGRAPH + {0x96F5, 0x9756}, //3326 #CJK UNIFIED IDEOGRAPH + {0x96F6, 0x67F3}, //3327 #CJK UNIFIED IDEOGRAPH + {0x96F7, 0x85AE}, //3328 #CJK UNIFIED IDEOGRAPH + {0x96F8, 0x9453}, //3329 #CJK UNIFIED IDEOGRAPH + {0x96F9, 0x6109}, //3330 #CJK UNIFIED IDEOGRAPH + {0x96FA, 0x6108}, //3331 #CJK UNIFIED IDEOGRAPH + {0x96FB, 0x6CB9}, //3332 #CJK UNIFIED IDEOGRAPH + {0x96FC, 0x7652}, //3333 #CJK UNIFIED IDEOGRAPH + {0x9740, 0x8AED}, //3334 #CJK UNIFIED IDEOGRAPH + {0x9741, 0x8F38}, //3335 #CJK UNIFIED IDEOGRAPH + {0x9742, 0x552F}, //3336 #CJK UNIFIED IDEOGRAPH + {0x9743, 0x4F51}, //3337 #CJK UNIFIED IDEOGRAPH + {0x9744, 0x512A}, //3338 #CJK UNIFIED IDEOGRAPH + {0x9745, 0x52C7}, //3339 #CJK UNIFIED IDEOGRAPH + {0x9746, 0x53CB}, //3340 #CJK UNIFIED IDEOGRAPH + {0x9747, 0x5BA5}, //3341 #CJK UNIFIED IDEOGRAPH + {0x9748, 0x5E7D}, //3342 #CJK UNIFIED IDEOGRAPH + {0x9749, 0x60A0}, //3343 #CJK UNIFIED IDEOGRAPH + {0x974A, 0x6182}, //3344 #CJK UNIFIED IDEOGRAPH + {0x974B, 0x63D6}, //3345 #CJK UNIFIED IDEOGRAPH + {0x974C, 0x6709}, //3346 #CJK UNIFIED IDEOGRAPH + {0x974D, 0x67DA}, //3347 #CJK UNIFIED IDEOGRAPH + {0x974E, 0x6E67}, //3348 #CJK UNIFIED IDEOGRAPH + {0x974F, 0x6D8C}, //3349 #CJK UNIFIED IDEOGRAPH + {0x9750, 0x7336}, //3350 #CJK UNIFIED IDEOGRAPH + {0x9751, 0x7337}, //3351 #CJK UNIFIED IDEOGRAPH + {0x9752, 0x7531}, //3352 #CJK UNIFIED IDEOGRAPH + {0x9753, 0x7950}, //3353 #CJK UNIFIED IDEOGRAPH + {0x9754, 0x88D5}, //3354 #CJK UNIFIED IDEOGRAPH + {0x9755, 0x8A98}, //3355 #CJK UNIFIED IDEOGRAPH + {0x9756, 0x904A}, //3356 #CJK UNIFIED IDEOGRAPH + {0x9757, 0x9091}, //3357 #CJK UNIFIED IDEOGRAPH + {0x9758, 0x90F5}, //3358 #CJK UNIFIED IDEOGRAPH + {0x9759, 0x96C4}, //3359 #CJK UNIFIED IDEOGRAPH + {0x975A, 0x878D}, //3360 #CJK UNIFIED IDEOGRAPH + {0x975B, 0x5915}, //3361 #CJK UNIFIED IDEOGRAPH + {0x975C, 0x4E88}, //3362 #CJK UNIFIED IDEOGRAPH + {0x975D, 0x4F59}, //3363 #CJK UNIFIED IDEOGRAPH + {0x975E, 0x4E0E}, //3364 #CJK UNIFIED IDEOGRAPH + {0x975F, 0x8A89}, //3365 #CJK UNIFIED IDEOGRAPH + {0x9760, 0x8F3F}, //3366 #CJK UNIFIED IDEOGRAPH + {0x9761, 0x9810}, //3367 #CJK UNIFIED IDEOGRAPH + {0x9762, 0x50AD}, //3368 #CJK UNIFIED IDEOGRAPH + {0x9763, 0x5E7C}, //3369 #CJK UNIFIED IDEOGRAPH + {0x9764, 0x5996}, //3370 #CJK UNIFIED IDEOGRAPH + {0x9765, 0x5BB9}, //3371 #CJK UNIFIED IDEOGRAPH + {0x9766, 0x5EB8}, //3372 #CJK UNIFIED IDEOGRAPH + {0x9767, 0x63DA}, //3373 #CJK UNIFIED IDEOGRAPH + {0x9768, 0x63FA}, //3374 #CJK UNIFIED IDEOGRAPH + {0x9769, 0x64C1}, //3375 #CJK UNIFIED IDEOGRAPH + {0x976A, 0x66DC}, //3376 #CJK UNIFIED IDEOGRAPH + {0x976B, 0x694A}, //3377 #CJK UNIFIED IDEOGRAPH + {0x976C, 0x69D8}, //3378 #CJK UNIFIED IDEOGRAPH + {0x976D, 0x6D0B}, //3379 #CJK UNIFIED IDEOGRAPH + {0x976E, 0x6EB6}, //3380 #CJK UNIFIED IDEOGRAPH + {0x976F, 0x7194}, //3381 #CJK UNIFIED IDEOGRAPH + {0x9770, 0x7528}, //3382 #CJK UNIFIED IDEOGRAPH + {0x9771, 0x7AAF}, //3383 #CJK UNIFIED IDEOGRAPH + {0x9772, 0x7F8A}, //3384 #CJK UNIFIED IDEOGRAPH + {0x9773, 0x8000}, //3385 #CJK UNIFIED IDEOGRAPH + {0x9774, 0x8449}, //3386 #CJK UNIFIED IDEOGRAPH + {0x9775, 0x84C9}, //3387 #CJK UNIFIED IDEOGRAPH + {0x9776, 0x8981}, //3388 #CJK UNIFIED IDEOGRAPH + {0x9777, 0x8B21}, //3389 #CJK UNIFIED IDEOGRAPH + {0x9778, 0x8E0A}, //3390 #CJK UNIFIED IDEOGRAPH + {0x9779, 0x9065}, //3391 #CJK UNIFIED IDEOGRAPH + {0x977A, 0x967D}, //3392 #CJK UNIFIED IDEOGRAPH + {0x977B, 0x990A}, //3393 #CJK UNIFIED IDEOGRAPH + {0x977C, 0x617E}, //3394 #CJK UNIFIED IDEOGRAPH + {0x977D, 0x6291}, //3395 #CJK UNIFIED IDEOGRAPH + {0x977E, 0x6B32}, //3396 #CJK UNIFIED IDEOGRAPH + {0x9780, 0x6C83}, //3397 #CJK UNIFIED IDEOGRAPH + {0x9781, 0x6D74}, //3398 #CJK UNIFIED IDEOGRAPH + {0x9782, 0x7FCC}, //3399 #CJK UNIFIED IDEOGRAPH + {0x9783, 0x7FFC}, //3400 #CJK UNIFIED IDEOGRAPH + {0x9784, 0x6DC0}, //3401 #CJK UNIFIED IDEOGRAPH + {0x9785, 0x7F85}, //3402 #CJK UNIFIED IDEOGRAPH + {0x9786, 0x87BA}, //3403 #CJK UNIFIED IDEOGRAPH + {0x9787, 0x88F8}, //3404 #CJK UNIFIED IDEOGRAPH + {0x9788, 0x6765}, //3405 #CJK UNIFIED IDEOGRAPH + {0x9789, 0x83B1}, //3406 #CJK UNIFIED IDEOGRAPH + {0x978A, 0x983C}, //3407 #CJK UNIFIED IDEOGRAPH + {0x978B, 0x96F7}, //3408 #CJK UNIFIED IDEOGRAPH + {0x978C, 0x6D1B}, //3409 #CJK UNIFIED IDEOGRAPH + {0x978D, 0x7D61}, //3410 #CJK UNIFIED IDEOGRAPH + {0x978E, 0x843D}, //3411 #CJK UNIFIED IDEOGRAPH + {0x978F, 0x916A}, //3412 #CJK UNIFIED IDEOGRAPH + {0x9790, 0x4E71}, //3413 #CJK UNIFIED IDEOGRAPH + {0x9791, 0x5375}, //3414 #CJK UNIFIED IDEOGRAPH + {0x9792, 0x5D50}, //3415 #CJK UNIFIED IDEOGRAPH + {0x9793, 0x6B04}, //3416 #CJK UNIFIED IDEOGRAPH + {0x9794, 0x6FEB}, //3417 #CJK UNIFIED IDEOGRAPH + {0x9795, 0x85CD}, //3418 #CJK UNIFIED IDEOGRAPH + {0x9796, 0x862D}, //3419 #CJK UNIFIED IDEOGRAPH + {0x9797, 0x89A7}, //3420 #CJK UNIFIED IDEOGRAPH + {0x9798, 0x5229}, //3421 #CJK UNIFIED IDEOGRAPH + {0x9799, 0x540F}, //3422 #CJK UNIFIED IDEOGRAPH + {0x979A, 0x5C65}, //3423 #CJK UNIFIED IDEOGRAPH + {0x979B, 0x674E}, //3424 #CJK UNIFIED IDEOGRAPH + {0x979C, 0x68A8}, //3425 #CJK UNIFIED IDEOGRAPH + {0x979D, 0x7406}, //3426 #CJK UNIFIED IDEOGRAPH + {0x979E, 0x7483}, //3427 #CJK UNIFIED IDEOGRAPH + {0x979F, 0x75E2}, //3428 #CJK UNIFIED IDEOGRAPH + {0x97A0, 0x88CF}, //3429 #CJK UNIFIED IDEOGRAPH + {0x97A1, 0x88E1}, //3430 #CJK UNIFIED IDEOGRAPH + {0x97A2, 0x91CC}, //3431 #CJK UNIFIED IDEOGRAPH + {0x97A3, 0x96E2}, //3432 #CJK UNIFIED IDEOGRAPH + {0x97A4, 0x9678}, //3433 #CJK UNIFIED IDEOGRAPH + {0x97A5, 0x5F8B}, //3434 #CJK UNIFIED IDEOGRAPH + {0x97A6, 0x7387}, //3435 #CJK UNIFIED IDEOGRAPH + {0x97A7, 0x7ACB}, //3436 #CJK UNIFIED IDEOGRAPH + {0x97A8, 0x844E}, //3437 #CJK UNIFIED IDEOGRAPH + {0x97A9, 0x63A0}, //3438 #CJK UNIFIED IDEOGRAPH + {0x97AA, 0x7565}, //3439 #CJK UNIFIED IDEOGRAPH + {0x97AB, 0x5289}, //3440 #CJK UNIFIED IDEOGRAPH + {0x97AC, 0x6D41}, //3441 #CJK UNIFIED IDEOGRAPH + {0x97AD, 0x6E9C}, //3442 #CJK UNIFIED IDEOGRAPH + {0x97AE, 0x7409}, //3443 #CJK UNIFIED IDEOGRAPH + {0x97AF, 0x7559}, //3444 #CJK UNIFIED IDEOGRAPH + {0x97B0, 0x786B}, //3445 #CJK UNIFIED IDEOGRAPH + {0x97B1, 0x7C92}, //3446 #CJK UNIFIED IDEOGRAPH + {0x97B2, 0x9686}, //3447 #CJK UNIFIED IDEOGRAPH + {0x97B3, 0x7ADC}, //3448 #CJK UNIFIED IDEOGRAPH + {0x97B4, 0x9F8D}, //3449 #CJK UNIFIED IDEOGRAPH + {0x97B5, 0x4FB6}, //3450 #CJK UNIFIED IDEOGRAPH + {0x97B6, 0x616E}, //3451 #CJK UNIFIED IDEOGRAPH + {0x97B7, 0x65C5}, //3452 #CJK UNIFIED IDEOGRAPH + {0x97B8, 0x865C}, //3453 #CJK UNIFIED IDEOGRAPH + {0x97B9, 0x4E86}, //3454 #CJK UNIFIED IDEOGRAPH + {0x97BA, 0x4EAE}, //3455 #CJK UNIFIED IDEOGRAPH + {0x97BB, 0x50DA}, //3456 #CJK UNIFIED IDEOGRAPH + {0x97BC, 0x4E21}, //3457 #CJK UNIFIED IDEOGRAPH + {0x97BD, 0x51CC}, //3458 #CJK UNIFIED IDEOGRAPH + {0x97BE, 0x5BEE}, //3459 #CJK UNIFIED IDEOGRAPH + {0x97BF, 0x6599}, //3460 #CJK UNIFIED IDEOGRAPH + {0x97C0, 0x6881}, //3461 #CJK UNIFIED IDEOGRAPH + {0x97C1, 0x6DBC}, //3462 #CJK UNIFIED IDEOGRAPH + {0x97C2, 0x731F}, //3463 #CJK UNIFIED IDEOGRAPH + {0x97C3, 0x7642}, //3464 #CJK UNIFIED IDEOGRAPH + {0x97C4, 0x77AD}, //3465 #CJK UNIFIED IDEOGRAPH + {0x97C5, 0x7A1C}, //3466 #CJK UNIFIED IDEOGRAPH + {0x97C6, 0x7CE7}, //3467 #CJK UNIFIED IDEOGRAPH + {0x97C7, 0x826F}, //3468 #CJK UNIFIED IDEOGRAPH + {0x97C8, 0x8AD2}, //3469 #CJK UNIFIED IDEOGRAPH + {0x97C9, 0x907C}, //3470 #CJK UNIFIED IDEOGRAPH + {0x97CA, 0x91CF}, //3471 #CJK UNIFIED IDEOGRAPH + {0x97CB, 0x9675}, //3472 #CJK UNIFIED IDEOGRAPH + {0x97CC, 0x9818}, //3473 #CJK UNIFIED IDEOGRAPH + {0x97CD, 0x529B}, //3474 #CJK UNIFIED IDEOGRAPH + {0x97CE, 0x7DD1}, //3475 #CJK UNIFIED IDEOGRAPH + {0x97CF, 0x502B}, //3476 #CJK UNIFIED IDEOGRAPH + {0x97D0, 0x5398}, //3477 #CJK UNIFIED IDEOGRAPH + {0x97D1, 0x6797}, //3478 #CJK UNIFIED IDEOGRAPH + {0x97D2, 0x6DCB}, //3479 #CJK UNIFIED IDEOGRAPH + {0x97D3, 0x71D0}, //3480 #CJK UNIFIED IDEOGRAPH + {0x97D4, 0x7433}, //3481 #CJK UNIFIED IDEOGRAPH + {0x97D5, 0x81E8}, //3482 #CJK UNIFIED IDEOGRAPH + {0x97D6, 0x8F2A}, //3483 #CJK UNIFIED IDEOGRAPH + {0x97D7, 0x96A3}, //3484 #CJK UNIFIED IDEOGRAPH + {0x97D8, 0x9C57}, //3485 #CJK UNIFIED IDEOGRAPH + {0x97D9, 0x9E9F}, //3486 #CJK UNIFIED IDEOGRAPH + {0x97DA, 0x7460}, //3487 #CJK UNIFIED IDEOGRAPH + {0x97DB, 0x5841}, //3488 #CJK UNIFIED IDEOGRAPH + {0x97DC, 0x6D99}, //3489 #CJK UNIFIED IDEOGRAPH + {0x97DD, 0x7D2F}, //3490 #CJK UNIFIED IDEOGRAPH + {0x97DE, 0x985E}, //3491 #CJK UNIFIED IDEOGRAPH + {0x97DF, 0x4EE4}, //3492 #CJK UNIFIED IDEOGRAPH + {0x97E0, 0x4F36}, //3493 #CJK UNIFIED IDEOGRAPH + {0x97E1, 0x4F8B}, //3494 #CJK UNIFIED IDEOGRAPH + {0x97E2, 0x51B7}, //3495 #CJK UNIFIED IDEOGRAPH + {0x97E3, 0x52B1}, //3496 #CJK UNIFIED IDEOGRAPH + {0x97E4, 0x5DBA}, //3497 #CJK UNIFIED IDEOGRAPH + {0x97E5, 0x601C}, //3498 #CJK UNIFIED IDEOGRAPH + {0x97E6, 0x73B2}, //3499 #CJK UNIFIED IDEOGRAPH + {0x97E7, 0x793C}, //3500 #CJK UNIFIED IDEOGRAPH + {0x97E8, 0x82D3}, //3501 #CJK UNIFIED IDEOGRAPH + {0x97E9, 0x9234}, //3502 #CJK UNIFIED IDEOGRAPH + {0x97EA, 0x96B7}, //3503 #CJK UNIFIED IDEOGRAPH + {0x97EB, 0x96F6}, //3504 #CJK UNIFIED IDEOGRAPH + {0x97EC, 0x970A}, //3505 #CJK UNIFIED IDEOGRAPH + {0x97ED, 0x9E97}, //3506 #CJK UNIFIED IDEOGRAPH + {0x97EE, 0x9F62}, //3507 #CJK UNIFIED IDEOGRAPH + {0x97EF, 0x66A6}, //3508 #CJK UNIFIED IDEOGRAPH + {0x97F0, 0x6B74}, //3509 #CJK UNIFIED IDEOGRAPH + {0x97F1, 0x5217}, //3510 #CJK UNIFIED IDEOGRAPH + {0x97F2, 0x52A3}, //3511 #CJK UNIFIED IDEOGRAPH + {0x97F3, 0x70C8}, //3512 #CJK UNIFIED IDEOGRAPH + {0x97F4, 0x88C2}, //3513 #CJK UNIFIED IDEOGRAPH + {0x97F5, 0x5EC9}, //3514 #CJK UNIFIED IDEOGRAPH + {0x97F6, 0x604B}, //3515 #CJK UNIFIED IDEOGRAPH + {0x97F7, 0x6190}, //3516 #CJK UNIFIED IDEOGRAPH + {0x97F8, 0x6F23}, //3517 #CJK UNIFIED IDEOGRAPH + {0x97F9, 0x7149}, //3518 #CJK UNIFIED IDEOGRAPH + {0x97FA, 0x7C3E}, //3519 #CJK UNIFIED IDEOGRAPH + {0x97FB, 0x7DF4}, //3520 #CJK UNIFIED IDEOGRAPH + {0x97FC, 0x806F}, //3521 #CJK UNIFIED IDEOGRAPH + {0x9840, 0x84EE}, //3522 #CJK UNIFIED IDEOGRAPH + {0x9841, 0x9023}, //3523 #CJK UNIFIED IDEOGRAPH + {0x9842, 0x932C}, //3524 #CJK UNIFIED IDEOGRAPH + {0x9843, 0x5442}, //3525 #CJK UNIFIED IDEOGRAPH + {0x9844, 0x9B6F}, //3526 #CJK UNIFIED IDEOGRAPH + {0x9845, 0x6AD3}, //3527 #CJK UNIFIED IDEOGRAPH + {0x9846, 0x7089}, //3528 #CJK UNIFIED IDEOGRAPH + {0x9847, 0x8CC2}, //3529 #CJK UNIFIED IDEOGRAPH + {0x9848, 0x8DEF}, //3530 #CJK UNIFIED IDEOGRAPH + {0x9849, 0x9732}, //3531 #CJK UNIFIED IDEOGRAPH + {0x984A, 0x52B4}, //3532 #CJK UNIFIED IDEOGRAPH + {0x984B, 0x5A41}, //3533 #CJK UNIFIED IDEOGRAPH + {0x984C, 0x5ECA}, //3534 #CJK UNIFIED IDEOGRAPH + {0x984D, 0x5F04}, //3535 #CJK UNIFIED IDEOGRAPH + {0x984E, 0x6717}, //3536 #CJK UNIFIED IDEOGRAPH + {0x984F, 0x697C}, //3537 #CJK UNIFIED IDEOGRAPH + {0x9850, 0x6994}, //3538 #CJK UNIFIED IDEOGRAPH + {0x9851, 0x6D6A}, //3539 #CJK UNIFIED IDEOGRAPH + {0x9852, 0x6F0F}, //3540 #CJK UNIFIED IDEOGRAPH + {0x9853, 0x7262}, //3541 #CJK UNIFIED IDEOGRAPH + {0x9854, 0x72FC}, //3542 #CJK UNIFIED IDEOGRAPH + {0x9855, 0x7BED}, //3543 #CJK UNIFIED IDEOGRAPH + {0x9856, 0x8001}, //3544 #CJK UNIFIED IDEOGRAPH + {0x9857, 0x807E}, //3545 #CJK UNIFIED IDEOGRAPH + {0x9858, 0x874B}, //3546 #CJK UNIFIED IDEOGRAPH + {0x9859, 0x90CE}, //3547 #CJK UNIFIED IDEOGRAPH + {0x985A, 0x516D}, //3548 #CJK UNIFIED IDEOGRAPH + {0x985B, 0x9E93}, //3549 #CJK UNIFIED IDEOGRAPH + {0x985C, 0x7984}, //3550 #CJK UNIFIED IDEOGRAPH + {0x985D, 0x808B}, //3551 #CJK UNIFIED IDEOGRAPH + {0x985E, 0x9332}, //3552 #CJK UNIFIED IDEOGRAPH + {0x985F, 0x8AD6}, //3553 #CJK UNIFIED IDEOGRAPH + {0x9860, 0x502D}, //3554 #CJK UNIFIED IDEOGRAPH + {0x9861, 0x548C}, //3555 #CJK UNIFIED IDEOGRAPH + {0x9862, 0x8A71}, //3556 #CJK UNIFIED IDEOGRAPH + {0x9863, 0x6B6A}, //3557 #CJK UNIFIED IDEOGRAPH + {0x9864, 0x8CC4}, //3558 #CJK UNIFIED IDEOGRAPH + {0x9865, 0x8107}, //3559 #CJK UNIFIED IDEOGRAPH + {0x9866, 0x60D1}, //3560 #CJK UNIFIED IDEOGRAPH + {0x9867, 0x67A0}, //3561 #CJK UNIFIED IDEOGRAPH + {0x9868, 0x9DF2}, //3562 #CJK UNIFIED IDEOGRAPH + {0x9869, 0x4E99}, //3563 #CJK UNIFIED IDEOGRAPH + {0x986A, 0x4E98}, //3564 #CJK UNIFIED IDEOGRAPH + {0x986B, 0x9C10}, //3565 #CJK UNIFIED IDEOGRAPH + {0x986C, 0x8A6B}, //3566 #CJK UNIFIED IDEOGRAPH + {0x986D, 0x85C1}, //3567 #CJK UNIFIED IDEOGRAPH + {0x986E, 0x8568}, //3568 #CJK UNIFIED IDEOGRAPH + {0x986F, 0x6900}, //3569 #CJK UNIFIED IDEOGRAPH + {0x9870, 0x6E7E}, //3570 #CJK UNIFIED IDEOGRAPH + {0x9871, 0x7897}, //3571 #CJK UNIFIED IDEOGRAPH + {0x9872, 0x8155}, //3572 #CJK UNIFIED IDEOGRAPH + {0x989F, 0x5F0C}, //3573 #CJK UNIFIED IDEOGRAPH + {0x98A0, 0x4E10}, //3574 #CJK UNIFIED IDEOGRAPH + {0x98A1, 0x4E15}, //3575 #CJK UNIFIED IDEOGRAPH + {0x98A2, 0x4E2A}, //3576 #CJK UNIFIED IDEOGRAPH + {0x98A3, 0x4E31}, //3577 #CJK UNIFIED IDEOGRAPH + {0x98A4, 0x4E36}, //3578 #CJK UNIFIED IDEOGRAPH + {0x98A5, 0x4E3C}, //3579 #CJK UNIFIED IDEOGRAPH + {0x98A6, 0x4E3F}, //3580 #CJK UNIFIED IDEOGRAPH + {0x98A7, 0x4E42}, //3581 #CJK UNIFIED IDEOGRAPH + {0x98A8, 0x4E56}, //3582 #CJK UNIFIED IDEOGRAPH + {0x98A9, 0x4E58}, //3583 #CJK UNIFIED IDEOGRAPH + {0x98AA, 0x4E82}, //3584 #CJK UNIFIED IDEOGRAPH + {0x98AB, 0x4E85}, //3585 #CJK UNIFIED IDEOGRAPH + {0x98AC, 0x8C6B}, //3586 #CJK UNIFIED IDEOGRAPH + {0x98AD, 0x4E8A}, //3587 #CJK UNIFIED IDEOGRAPH + {0x98AE, 0x8212}, //3588 #CJK UNIFIED IDEOGRAPH + {0x98AF, 0x5F0D}, //3589 #CJK UNIFIED IDEOGRAPH + {0x98B0, 0x4E8E}, //3590 #CJK UNIFIED IDEOGRAPH + {0x98B1, 0x4E9E}, //3591 #CJK UNIFIED IDEOGRAPH + {0x98B2, 0x4E9F}, //3592 #CJK UNIFIED IDEOGRAPH + {0x98B3, 0x4EA0}, //3593 #CJK UNIFIED IDEOGRAPH + {0x98B4, 0x4EA2}, //3594 #CJK UNIFIED IDEOGRAPH + {0x98B5, 0x4EB0}, //3595 #CJK UNIFIED IDEOGRAPH + {0x98B6, 0x4EB3}, //3596 #CJK UNIFIED IDEOGRAPH + {0x98B7, 0x4EB6}, //3597 #CJK UNIFIED IDEOGRAPH + {0x98B8, 0x4ECE}, //3598 #CJK UNIFIED IDEOGRAPH + {0x98B9, 0x4ECD}, //3599 #CJK UNIFIED IDEOGRAPH + {0x98BA, 0x4EC4}, //3600 #CJK UNIFIED IDEOGRAPH + {0x98BB, 0x4EC6}, //3601 #CJK UNIFIED IDEOGRAPH + {0x98BC, 0x4EC2}, //3602 #CJK UNIFIED IDEOGRAPH + {0x98BD, 0x4ED7}, //3603 #CJK UNIFIED IDEOGRAPH + {0x98BE, 0x4EDE}, //3604 #CJK UNIFIED IDEOGRAPH + {0x98BF, 0x4EED}, //3605 #CJK UNIFIED IDEOGRAPH + {0x98C0, 0x4EDF}, //3606 #CJK UNIFIED IDEOGRAPH + {0x98C1, 0x4EF7}, //3607 #CJK UNIFIED IDEOGRAPH + {0x98C2, 0x4F09}, //3608 #CJK UNIFIED IDEOGRAPH + {0x98C3, 0x4F5A}, //3609 #CJK UNIFIED IDEOGRAPH + {0x98C4, 0x4F30}, //3610 #CJK UNIFIED IDEOGRAPH + {0x98C5, 0x4F5B}, //3611 #CJK UNIFIED IDEOGRAPH + {0x98C6, 0x4F5D}, //3612 #CJK UNIFIED IDEOGRAPH + {0x98C7, 0x4F57}, //3613 #CJK UNIFIED IDEOGRAPH + {0x98C8, 0x4F47}, //3614 #CJK UNIFIED IDEOGRAPH + {0x98C9, 0x4F76}, //3615 #CJK UNIFIED IDEOGRAPH + {0x98CA, 0x4F88}, //3616 #CJK UNIFIED IDEOGRAPH + {0x98CB, 0x4F8F}, //3617 #CJK UNIFIED IDEOGRAPH + {0x98CC, 0x4F98}, //3618 #CJK UNIFIED IDEOGRAPH + {0x98CD, 0x4F7B}, //3619 #CJK UNIFIED IDEOGRAPH + {0x98CE, 0x4F69}, //3620 #CJK UNIFIED IDEOGRAPH + {0x98CF, 0x4F70}, //3621 #CJK UNIFIED IDEOGRAPH + {0x98D0, 0x4F91}, //3622 #CJK UNIFIED IDEOGRAPH + {0x98D1, 0x4F6F}, //3623 #CJK UNIFIED IDEOGRAPH + {0x98D2, 0x4F86}, //3624 #CJK UNIFIED IDEOGRAPH + {0x98D3, 0x4F96}, //3625 #CJK UNIFIED IDEOGRAPH + {0x98D4, 0x5118}, //3626 #CJK UNIFIED IDEOGRAPH + {0x98D5, 0x4FD4}, //3627 #CJK UNIFIED IDEOGRAPH + {0x98D6, 0x4FDF}, //3628 #CJK UNIFIED IDEOGRAPH + {0x98D7, 0x4FCE}, //3629 #CJK UNIFIED IDEOGRAPH + {0x98D8, 0x4FD8}, //3630 #CJK UNIFIED IDEOGRAPH + {0x98D9, 0x4FDB}, //3631 #CJK UNIFIED IDEOGRAPH + {0x98DA, 0x4FD1}, //3632 #CJK UNIFIED IDEOGRAPH + {0x98DB, 0x4FDA}, //3633 #CJK UNIFIED IDEOGRAPH + {0x98DC, 0x4FD0}, //3634 #CJK UNIFIED IDEOGRAPH + {0x98DD, 0x4FE4}, //3635 #CJK UNIFIED IDEOGRAPH + {0x98DE, 0x4FE5}, //3636 #CJK UNIFIED IDEOGRAPH + {0x98DF, 0x501A}, //3637 #CJK UNIFIED IDEOGRAPH + {0x98E0, 0x5028}, //3638 #CJK UNIFIED IDEOGRAPH + {0x98E1, 0x5014}, //3639 #CJK UNIFIED IDEOGRAPH + {0x98E2, 0x502A}, //3640 #CJK UNIFIED IDEOGRAPH + {0x98E3, 0x5025}, //3641 #CJK UNIFIED IDEOGRAPH + {0x98E4, 0x5005}, //3642 #CJK UNIFIED IDEOGRAPH + {0x98E5, 0x4F1C}, //3643 #CJK UNIFIED IDEOGRAPH + {0x98E6, 0x4FF6}, //3644 #CJK UNIFIED IDEOGRAPH + {0x98E7, 0x5021}, //3645 #CJK UNIFIED IDEOGRAPH + {0x98E8, 0x5029}, //3646 #CJK UNIFIED IDEOGRAPH + {0x98E9, 0x502C}, //3647 #CJK UNIFIED IDEOGRAPH + {0x98EA, 0x4FFE}, //3648 #CJK UNIFIED IDEOGRAPH + {0x98EB, 0x4FEF}, //3649 #CJK UNIFIED IDEOGRAPH + {0x98EC, 0x5011}, //3650 #CJK UNIFIED IDEOGRAPH + {0x98ED, 0x5006}, //3651 #CJK UNIFIED IDEOGRAPH + {0x98EE, 0x5043}, //3652 #CJK UNIFIED IDEOGRAPH + {0x98EF, 0x5047}, //3653 #CJK UNIFIED IDEOGRAPH + {0x98F0, 0x6703}, //3654 #CJK UNIFIED IDEOGRAPH + {0x98F1, 0x5055}, //3655 #CJK UNIFIED IDEOGRAPH + {0x98F2, 0x5050}, //3656 #CJK UNIFIED IDEOGRAPH + {0x98F3, 0x5048}, //3657 #CJK UNIFIED IDEOGRAPH + {0x98F4, 0x505A}, //3658 #CJK UNIFIED IDEOGRAPH + {0x98F5, 0x5056}, //3659 #CJK UNIFIED IDEOGRAPH + {0x98F6, 0x506C}, //3660 #CJK UNIFIED IDEOGRAPH + {0x98F7, 0x5078}, //3661 #CJK UNIFIED IDEOGRAPH + {0x98F8, 0x5080}, //3662 #CJK UNIFIED IDEOGRAPH + {0x98F9, 0x509A}, //3663 #CJK UNIFIED IDEOGRAPH + {0x98FA, 0x5085}, //3664 #CJK UNIFIED IDEOGRAPH + {0x98FB, 0x50B4}, //3665 #CJK UNIFIED IDEOGRAPH + {0x98FC, 0x50B2}, //3666 #CJK UNIFIED IDEOGRAPH + {0x9940, 0x50C9}, //3667 #CJK UNIFIED IDEOGRAPH + {0x9941, 0x50CA}, //3668 #CJK UNIFIED IDEOGRAPH + {0x9942, 0x50B3}, //3669 #CJK UNIFIED IDEOGRAPH + {0x9943, 0x50C2}, //3670 #CJK UNIFIED IDEOGRAPH + {0x9944, 0x50D6}, //3671 #CJK UNIFIED IDEOGRAPH + {0x9945, 0x50DE}, //3672 #CJK UNIFIED IDEOGRAPH + {0x9946, 0x50E5}, //3673 #CJK UNIFIED IDEOGRAPH + {0x9947, 0x50ED}, //3674 #CJK UNIFIED IDEOGRAPH + {0x9948, 0x50E3}, //3675 #CJK UNIFIED IDEOGRAPH + {0x9949, 0x50EE}, //3676 #CJK UNIFIED IDEOGRAPH + {0x994A, 0x50F9}, //3677 #CJK UNIFIED IDEOGRAPH + {0x994B, 0x50F5}, //3678 #CJK UNIFIED IDEOGRAPH + {0x994C, 0x5109}, //3679 #CJK UNIFIED IDEOGRAPH + {0x994D, 0x5101}, //3680 #CJK UNIFIED IDEOGRAPH + {0x994E, 0x5102}, //3681 #CJK UNIFIED IDEOGRAPH + {0x994F, 0x5116}, //3682 #CJK UNIFIED IDEOGRAPH + {0x9950, 0x5115}, //3683 #CJK UNIFIED IDEOGRAPH + {0x9951, 0x5114}, //3684 #CJK UNIFIED IDEOGRAPH + {0x9952, 0x511A}, //3685 #CJK UNIFIED IDEOGRAPH + {0x9953, 0x5121}, //3686 #CJK UNIFIED IDEOGRAPH + {0x9954, 0x513A}, //3687 #CJK UNIFIED IDEOGRAPH + {0x9955, 0x5137}, //3688 #CJK UNIFIED IDEOGRAPH + {0x9956, 0x513C}, //3689 #CJK UNIFIED IDEOGRAPH + {0x9957, 0x513B}, //3690 #CJK UNIFIED IDEOGRAPH + {0x9958, 0x513F}, //3691 #CJK UNIFIED IDEOGRAPH + {0x9959, 0x5140}, //3692 #CJK UNIFIED IDEOGRAPH + {0x995A, 0x5152}, //3693 #CJK UNIFIED IDEOGRAPH + {0x995B, 0x514C}, //3694 #CJK UNIFIED IDEOGRAPH + {0x995C, 0x5154}, //3695 #CJK UNIFIED IDEOGRAPH + {0x995D, 0x5162}, //3696 #CJK UNIFIED IDEOGRAPH + {0x995E, 0x7AF8}, //3697 #CJK UNIFIED IDEOGRAPH + {0x995F, 0x5169}, //3698 #CJK UNIFIED IDEOGRAPH + {0x9960, 0x516A}, //3699 #CJK UNIFIED IDEOGRAPH + {0x9961, 0x516E}, //3700 #CJK UNIFIED IDEOGRAPH + {0x9962, 0x5180}, //3701 #CJK UNIFIED IDEOGRAPH + {0x9963, 0x5182}, //3702 #CJK UNIFIED IDEOGRAPH + {0x9964, 0x56D8}, //3703 #CJK UNIFIED IDEOGRAPH + {0x9965, 0x518C}, //3704 #CJK UNIFIED IDEOGRAPH + {0x9966, 0x5189}, //3705 #CJK UNIFIED IDEOGRAPH + {0x9967, 0x518F}, //3706 #CJK UNIFIED IDEOGRAPH + {0x9968, 0x5191}, //3707 #CJK UNIFIED IDEOGRAPH + {0x9969, 0x5193}, //3708 #CJK UNIFIED IDEOGRAPH + {0x996A, 0x5195}, //3709 #CJK UNIFIED IDEOGRAPH + {0x996B, 0x5196}, //3710 #CJK UNIFIED IDEOGRAPH + {0x996C, 0x51A4}, //3711 #CJK UNIFIED IDEOGRAPH + {0x996D, 0x51A6}, //3712 #CJK UNIFIED IDEOGRAPH + {0x996E, 0x51A2}, //3713 #CJK UNIFIED IDEOGRAPH + {0x996F, 0x51A9}, //3714 #CJK UNIFIED IDEOGRAPH + {0x9970, 0x51AA}, //3715 #CJK UNIFIED IDEOGRAPH + {0x9971, 0x51AB}, //3716 #CJK UNIFIED IDEOGRAPH + {0x9972, 0x51B3}, //3717 #CJK UNIFIED IDEOGRAPH + {0x9973, 0x51B1}, //3718 #CJK UNIFIED IDEOGRAPH + {0x9974, 0x51B2}, //3719 #CJK UNIFIED IDEOGRAPH + {0x9975, 0x51B0}, //3720 #CJK UNIFIED IDEOGRAPH + {0x9976, 0x51B5}, //3721 #CJK UNIFIED IDEOGRAPH + {0x9977, 0x51BD}, //3722 #CJK UNIFIED IDEOGRAPH + {0x9978, 0x51C5}, //3723 #CJK UNIFIED IDEOGRAPH + {0x9979, 0x51C9}, //3724 #CJK UNIFIED IDEOGRAPH + {0x997A, 0x51DB}, //3725 #CJK UNIFIED IDEOGRAPH + {0x997B, 0x51E0}, //3726 #CJK UNIFIED IDEOGRAPH + {0x997C, 0x8655}, //3727 #CJK UNIFIED IDEOGRAPH + {0x997D, 0x51E9}, //3728 #CJK UNIFIED IDEOGRAPH + {0x997E, 0x51ED}, //3729 #CJK UNIFIED IDEOGRAPH + {0x9980, 0x51F0}, //3730 #CJK UNIFIED IDEOGRAPH + {0x9981, 0x51F5}, //3731 #CJK UNIFIED IDEOGRAPH + {0x9982, 0x51FE}, //3732 #CJK UNIFIED IDEOGRAPH + {0x9983, 0x5204}, //3733 #CJK UNIFIED IDEOGRAPH + {0x9984, 0x520B}, //3734 #CJK UNIFIED IDEOGRAPH + {0x9985, 0x5214}, //3735 #CJK UNIFIED IDEOGRAPH + {0x9986, 0x520E}, //3736 #CJK UNIFIED IDEOGRAPH + {0x9987, 0x5227}, //3737 #CJK UNIFIED IDEOGRAPH + {0x9988, 0x522A}, //3738 #CJK UNIFIED IDEOGRAPH + {0x9989, 0x522E}, //3739 #CJK UNIFIED IDEOGRAPH + {0x998A, 0x5233}, //3740 #CJK UNIFIED IDEOGRAPH + {0x998B, 0x5239}, //3741 #CJK UNIFIED IDEOGRAPH + {0x998C, 0x524F}, //3742 #CJK UNIFIED IDEOGRAPH + {0x998D, 0x5244}, //3743 #CJK UNIFIED IDEOGRAPH + {0x998E, 0x524B}, //3744 #CJK UNIFIED IDEOGRAPH + {0x998F, 0x524C}, //3745 #CJK UNIFIED IDEOGRAPH + {0x9990, 0x525E}, //3746 #CJK UNIFIED IDEOGRAPH + {0x9991, 0x5254}, //3747 #CJK UNIFIED IDEOGRAPH + {0x9992, 0x526A}, //3748 #CJK UNIFIED IDEOGRAPH + {0x9993, 0x5274}, //3749 #CJK UNIFIED IDEOGRAPH + {0x9994, 0x5269}, //3750 #CJK UNIFIED IDEOGRAPH + {0x9995, 0x5273}, //3751 #CJK UNIFIED IDEOGRAPH + {0x9996, 0x527F}, //3752 #CJK UNIFIED IDEOGRAPH + {0x9997, 0x527D}, //3753 #CJK UNIFIED IDEOGRAPH + {0x9998, 0x528D}, //3754 #CJK UNIFIED IDEOGRAPH + {0x9999, 0x5294}, //3755 #CJK UNIFIED IDEOGRAPH + {0x999A, 0x5292}, //3756 #CJK UNIFIED IDEOGRAPH + {0x999B, 0x5271}, //3757 #CJK UNIFIED IDEOGRAPH + {0x999C, 0x5288}, //3758 #CJK UNIFIED IDEOGRAPH + {0x999D, 0x5291}, //3759 #CJK UNIFIED IDEOGRAPH + {0x999E, 0x8FA8}, //3760 #CJK UNIFIED IDEOGRAPH + {0x999F, 0x8FA7}, //3761 #CJK UNIFIED IDEOGRAPH + {0x99A0, 0x52AC}, //3762 #CJK UNIFIED IDEOGRAPH + {0x99A1, 0x52AD}, //3763 #CJK UNIFIED IDEOGRAPH + {0x99A2, 0x52BC}, //3764 #CJK UNIFIED IDEOGRAPH + {0x99A3, 0x52B5}, //3765 #CJK UNIFIED IDEOGRAPH + {0x99A4, 0x52C1}, //3766 #CJK UNIFIED IDEOGRAPH + {0x99A5, 0x52CD}, //3767 #CJK UNIFIED IDEOGRAPH + {0x99A6, 0x52D7}, //3768 #CJK UNIFIED IDEOGRAPH + {0x99A7, 0x52DE}, //3769 #CJK UNIFIED IDEOGRAPH + {0x99A8, 0x52E3}, //3770 #CJK UNIFIED IDEOGRAPH + {0x99A9, 0x52E6}, //3771 #CJK UNIFIED IDEOGRAPH + {0x99AA, 0x98ED}, //3772 #CJK UNIFIED IDEOGRAPH + {0x99AB, 0x52E0}, //3773 #CJK UNIFIED IDEOGRAPH + {0x99AC, 0x52F3}, //3774 #CJK UNIFIED IDEOGRAPH + {0x99AD, 0x52F5}, //3775 #CJK UNIFIED IDEOGRAPH + {0x99AE, 0x52F8}, //3776 #CJK UNIFIED IDEOGRAPH + {0x99AF, 0x52F9}, //3777 #CJK UNIFIED IDEOGRAPH + {0x99B0, 0x5306}, //3778 #CJK UNIFIED IDEOGRAPH + {0x99B1, 0x5308}, //3779 #CJK UNIFIED IDEOGRAPH + {0x99B2, 0x7538}, //3780 #CJK UNIFIED IDEOGRAPH + {0x99B3, 0x530D}, //3781 #CJK UNIFIED IDEOGRAPH + {0x99B4, 0x5310}, //3782 #CJK UNIFIED IDEOGRAPH + {0x99B5, 0x530F}, //3783 #CJK UNIFIED IDEOGRAPH + {0x99B6, 0x5315}, //3784 #CJK UNIFIED IDEOGRAPH + {0x99B7, 0x531A}, //3785 #CJK UNIFIED IDEOGRAPH + {0x99B8, 0x5323}, //3786 #CJK UNIFIED IDEOGRAPH + {0x99B9, 0x532F}, //3787 #CJK UNIFIED IDEOGRAPH + {0x99BA, 0x5331}, //3788 #CJK UNIFIED IDEOGRAPH + {0x99BB, 0x5333}, //3789 #CJK UNIFIED IDEOGRAPH + {0x99BC, 0x5338}, //3790 #CJK UNIFIED IDEOGRAPH + {0x99BD, 0x5340}, //3791 #CJK UNIFIED IDEOGRAPH + {0x99BE, 0x5346}, //3792 #CJK UNIFIED IDEOGRAPH + {0x99BF, 0x5345}, //3793 #CJK UNIFIED IDEOGRAPH + {0x99C0, 0x4E17}, //3794 #CJK UNIFIED IDEOGRAPH + {0x99C1, 0x5349}, //3795 #CJK UNIFIED IDEOGRAPH + {0x99C2, 0x534D}, //3796 #CJK UNIFIED IDEOGRAPH + {0x99C3, 0x51D6}, //3797 #CJK UNIFIED IDEOGRAPH + {0x99C4, 0x535E}, //3798 #CJK UNIFIED IDEOGRAPH + {0x99C5, 0x5369}, //3799 #CJK UNIFIED IDEOGRAPH + {0x99C6, 0x536E}, //3800 #CJK UNIFIED IDEOGRAPH + {0x99C7, 0x5918}, //3801 #CJK UNIFIED IDEOGRAPH + {0x99C8, 0x537B}, //3802 #CJK UNIFIED IDEOGRAPH + {0x99C9, 0x5377}, //3803 #CJK UNIFIED IDEOGRAPH + {0x99CA, 0x5382}, //3804 #CJK UNIFIED IDEOGRAPH + {0x99CB, 0x5396}, //3805 #CJK UNIFIED IDEOGRAPH + {0x99CC, 0x53A0}, //3806 #CJK UNIFIED IDEOGRAPH + {0x99CD, 0x53A6}, //3807 #CJK UNIFIED IDEOGRAPH + {0x99CE, 0x53A5}, //3808 #CJK UNIFIED IDEOGRAPH + {0x99CF, 0x53AE}, //3809 #CJK UNIFIED IDEOGRAPH + {0x99D0, 0x53B0}, //3810 #CJK UNIFIED IDEOGRAPH + {0x99D1, 0x53B6}, //3811 #CJK UNIFIED IDEOGRAPH + {0x99D2, 0x53C3}, //3812 #CJK UNIFIED IDEOGRAPH + {0x99D3, 0x7C12}, //3813 #CJK UNIFIED IDEOGRAPH + {0x99D4, 0x96D9}, //3814 #CJK UNIFIED IDEOGRAPH + {0x99D5, 0x53DF}, //3815 #CJK UNIFIED IDEOGRAPH + {0x99D6, 0x66FC}, //3816 #CJK UNIFIED IDEOGRAPH + {0x99D7, 0x71EE}, //3817 #CJK UNIFIED IDEOGRAPH + {0x99D8, 0x53EE}, //3818 #CJK UNIFIED IDEOGRAPH + {0x99D9, 0x53E8}, //3819 #CJK UNIFIED IDEOGRAPH + {0x99DA, 0x53ED}, //3820 #CJK UNIFIED IDEOGRAPH + {0x99DB, 0x53FA}, //3821 #CJK UNIFIED IDEOGRAPH + {0x99DC, 0x5401}, //3822 #CJK UNIFIED IDEOGRAPH + {0x99DD, 0x543D}, //3823 #CJK UNIFIED IDEOGRAPH + {0x99DE, 0x5440}, //3824 #CJK UNIFIED IDEOGRAPH + {0x99DF, 0x542C}, //3825 #CJK UNIFIED IDEOGRAPH + {0x99E0, 0x542D}, //3826 #CJK UNIFIED IDEOGRAPH + {0x99E1, 0x543C}, //3827 #CJK UNIFIED IDEOGRAPH + {0x99E2, 0x542E}, //3828 #CJK UNIFIED IDEOGRAPH + {0x99E3, 0x5436}, //3829 #CJK UNIFIED IDEOGRAPH + {0x99E4, 0x5429}, //3830 #CJK UNIFIED IDEOGRAPH + {0x99E5, 0x541D}, //3831 #CJK UNIFIED IDEOGRAPH + {0x99E6, 0x544E}, //3832 #CJK UNIFIED IDEOGRAPH + {0x99E7, 0x548F}, //3833 #CJK UNIFIED IDEOGRAPH + {0x99E8, 0x5475}, //3834 #CJK UNIFIED IDEOGRAPH + {0x99E9, 0x548E}, //3835 #CJK UNIFIED IDEOGRAPH + {0x99EA, 0x545F}, //3836 #CJK UNIFIED IDEOGRAPH + {0x99EB, 0x5471}, //3837 #CJK UNIFIED IDEOGRAPH + {0x99EC, 0x5477}, //3838 #CJK UNIFIED IDEOGRAPH + {0x99ED, 0x5470}, //3839 #CJK UNIFIED IDEOGRAPH + {0x99EE, 0x5492}, //3840 #CJK UNIFIED IDEOGRAPH + {0x99EF, 0x547B}, //3841 #CJK UNIFIED IDEOGRAPH + {0x99F0, 0x5480}, //3842 #CJK UNIFIED IDEOGRAPH + {0x99F1, 0x5476}, //3843 #CJK UNIFIED IDEOGRAPH + {0x99F2, 0x5484}, //3844 #CJK UNIFIED IDEOGRAPH + {0x99F3, 0x5490}, //3845 #CJK UNIFIED IDEOGRAPH + {0x99F4, 0x5486}, //3846 #CJK UNIFIED IDEOGRAPH + {0x99F5, 0x54C7}, //3847 #CJK UNIFIED IDEOGRAPH + {0x99F6, 0x54A2}, //3848 #CJK UNIFIED IDEOGRAPH + {0x99F7, 0x54B8}, //3849 #CJK UNIFIED IDEOGRAPH + {0x99F8, 0x54A5}, //3850 #CJK UNIFIED IDEOGRAPH + {0x99F9, 0x54AC}, //3851 #CJK UNIFIED IDEOGRAPH + {0x99FA, 0x54C4}, //3852 #CJK UNIFIED IDEOGRAPH + {0x99FB, 0x54C8}, //3853 #CJK UNIFIED IDEOGRAPH + {0x99FC, 0x54A8}, //3854 #CJK UNIFIED IDEOGRAPH + {0x9A40, 0x54AB}, //3855 #CJK UNIFIED IDEOGRAPH + {0x9A41, 0x54C2}, //3856 #CJK UNIFIED IDEOGRAPH + {0x9A42, 0x54A4}, //3857 #CJK UNIFIED IDEOGRAPH + {0x9A43, 0x54BE}, //3858 #CJK UNIFIED IDEOGRAPH + {0x9A44, 0x54BC}, //3859 #CJK UNIFIED IDEOGRAPH + {0x9A45, 0x54D8}, //3860 #CJK UNIFIED IDEOGRAPH + {0x9A46, 0x54E5}, //3861 #CJK UNIFIED IDEOGRAPH + {0x9A47, 0x54E6}, //3862 #CJK UNIFIED IDEOGRAPH + {0x9A48, 0x550F}, //3863 #CJK UNIFIED IDEOGRAPH + {0x9A49, 0x5514}, //3864 #CJK UNIFIED IDEOGRAPH + {0x9A4A, 0x54FD}, //3865 #CJK UNIFIED IDEOGRAPH + {0x9A4B, 0x54EE}, //3866 #CJK UNIFIED IDEOGRAPH + {0x9A4C, 0x54ED}, //3867 #CJK UNIFIED IDEOGRAPH + {0x9A4D, 0x54FA}, //3868 #CJK UNIFIED IDEOGRAPH + {0x9A4E, 0x54E2}, //3869 #CJK UNIFIED IDEOGRAPH + {0x9A4F, 0x5539}, //3870 #CJK UNIFIED IDEOGRAPH + {0x9A50, 0x5540}, //3871 #CJK UNIFIED IDEOGRAPH + {0x9A51, 0x5563}, //3872 #CJK UNIFIED IDEOGRAPH + {0x9A52, 0x554C}, //3873 #CJK UNIFIED IDEOGRAPH + {0x9A53, 0x552E}, //3874 #CJK UNIFIED IDEOGRAPH + {0x9A54, 0x555C}, //3875 #CJK UNIFIED IDEOGRAPH + {0x9A55, 0x5545}, //3876 #CJK UNIFIED IDEOGRAPH + {0x9A56, 0x5556}, //3877 #CJK UNIFIED IDEOGRAPH + {0x9A57, 0x5557}, //3878 #CJK UNIFIED IDEOGRAPH + {0x9A58, 0x5538}, //3879 #CJK UNIFIED IDEOGRAPH + {0x9A59, 0x5533}, //3880 #CJK UNIFIED IDEOGRAPH + {0x9A5A, 0x555D}, //3881 #CJK UNIFIED IDEOGRAPH + {0x9A5B, 0x5599}, //3882 #CJK UNIFIED IDEOGRAPH + {0x9A5C, 0x5580}, //3883 #CJK UNIFIED IDEOGRAPH + {0x9A5D, 0x54AF}, //3884 #CJK UNIFIED IDEOGRAPH + {0x9A5E, 0x558A}, //3885 #CJK UNIFIED IDEOGRAPH + {0x9A5F, 0x559F}, //3886 #CJK UNIFIED IDEOGRAPH + {0x9A60, 0x557B}, //3887 #CJK UNIFIED IDEOGRAPH + {0x9A61, 0x557E}, //3888 #CJK UNIFIED IDEOGRAPH + {0x9A62, 0x5598}, //3889 #CJK UNIFIED IDEOGRAPH + {0x9A63, 0x559E}, //3890 #CJK UNIFIED IDEOGRAPH + {0x9A64, 0x55AE}, //3891 #CJK UNIFIED IDEOGRAPH + {0x9A65, 0x557C}, //3892 #CJK UNIFIED IDEOGRAPH + {0x9A66, 0x5583}, //3893 #CJK UNIFIED IDEOGRAPH + {0x9A67, 0x55A9}, //3894 #CJK UNIFIED IDEOGRAPH + {0x9A68, 0x5587}, //3895 #CJK UNIFIED IDEOGRAPH + {0x9A69, 0x55A8}, //3896 #CJK UNIFIED IDEOGRAPH + {0x9A6A, 0x55DA}, //3897 #CJK UNIFIED IDEOGRAPH + {0x9A6B, 0x55C5}, //3898 #CJK UNIFIED IDEOGRAPH + {0x9A6C, 0x55DF}, //3899 #CJK UNIFIED IDEOGRAPH + {0x9A6D, 0x55C4}, //3900 #CJK UNIFIED IDEOGRAPH + {0x9A6E, 0x55DC}, //3901 #CJK UNIFIED IDEOGRAPH + {0x9A6F, 0x55E4}, //3902 #CJK UNIFIED IDEOGRAPH + {0x9A70, 0x55D4}, //3903 #CJK UNIFIED IDEOGRAPH + {0x9A71, 0x5614}, //3904 #CJK UNIFIED IDEOGRAPH + {0x9A72, 0x55F7}, //3905 #CJK UNIFIED IDEOGRAPH + {0x9A73, 0x5616}, //3906 #CJK UNIFIED IDEOGRAPH + {0x9A74, 0x55FE}, //3907 #CJK UNIFIED IDEOGRAPH + {0x9A75, 0x55FD}, //3908 #CJK UNIFIED IDEOGRAPH + {0x9A76, 0x561B}, //3909 #CJK UNIFIED IDEOGRAPH + {0x9A77, 0x55F9}, //3910 #CJK UNIFIED IDEOGRAPH + {0x9A78, 0x564E}, //3911 #CJK UNIFIED IDEOGRAPH + {0x9A79, 0x5650}, //3912 #CJK UNIFIED IDEOGRAPH + {0x9A7A, 0x71DF}, //3913 #CJK UNIFIED IDEOGRAPH + {0x9A7B, 0x5634}, //3914 #CJK UNIFIED IDEOGRAPH + {0x9A7C, 0x5636}, //3915 #CJK UNIFIED IDEOGRAPH + {0x9A7D, 0x5632}, //3916 #CJK UNIFIED IDEOGRAPH + {0x9A7E, 0x5638}, //3917 #CJK UNIFIED IDEOGRAPH + {0x9A80, 0x566B}, //3918 #CJK UNIFIED IDEOGRAPH + {0x9A81, 0x5664}, //3919 #CJK UNIFIED IDEOGRAPH + {0x9A82, 0x562F}, //3920 #CJK UNIFIED IDEOGRAPH + {0x9A83, 0x566C}, //3921 #CJK UNIFIED IDEOGRAPH + {0x9A84, 0x566A}, //3922 #CJK UNIFIED IDEOGRAPH + {0x9A85, 0x5686}, //3923 #CJK UNIFIED IDEOGRAPH + {0x9A86, 0x5680}, //3924 #CJK UNIFIED IDEOGRAPH + {0x9A87, 0x568A}, //3925 #CJK UNIFIED IDEOGRAPH + {0x9A88, 0x56A0}, //3926 #CJK UNIFIED IDEOGRAPH + {0x9A89, 0x5694}, //3927 #CJK UNIFIED IDEOGRAPH + {0x9A8A, 0x568F}, //3928 #CJK UNIFIED IDEOGRAPH + {0x9A8B, 0x56A5}, //3929 #CJK UNIFIED IDEOGRAPH + {0x9A8C, 0x56AE}, //3930 #CJK UNIFIED IDEOGRAPH + {0x9A8D, 0x56B6}, //3931 #CJK UNIFIED IDEOGRAPH + {0x9A8E, 0x56B4}, //3932 #CJK UNIFIED IDEOGRAPH + {0x9A8F, 0x56C2}, //3933 #CJK UNIFIED IDEOGRAPH + {0x9A90, 0x56BC}, //3934 #CJK UNIFIED IDEOGRAPH + {0x9A91, 0x56C1}, //3935 #CJK UNIFIED IDEOGRAPH + {0x9A92, 0x56C3}, //3936 #CJK UNIFIED IDEOGRAPH + {0x9A93, 0x56C0}, //3937 #CJK UNIFIED IDEOGRAPH + {0x9A94, 0x56C8}, //3938 #CJK UNIFIED IDEOGRAPH + {0x9A95, 0x56CE}, //3939 #CJK UNIFIED IDEOGRAPH + {0x9A96, 0x56D1}, //3940 #CJK UNIFIED IDEOGRAPH + {0x9A97, 0x56D3}, //3941 #CJK UNIFIED IDEOGRAPH + {0x9A98, 0x56D7}, //3942 #CJK UNIFIED IDEOGRAPH + {0x9A99, 0x56EE}, //3943 #CJK UNIFIED IDEOGRAPH + {0x9A9A, 0x56F9}, //3944 #CJK UNIFIED IDEOGRAPH + {0x9A9B, 0x5700}, //3945 #CJK UNIFIED IDEOGRAPH + {0x9A9C, 0x56FF}, //3946 #CJK UNIFIED IDEOGRAPH + {0x9A9D, 0x5704}, //3947 #CJK UNIFIED IDEOGRAPH + {0x9A9E, 0x5709}, //3948 #CJK UNIFIED IDEOGRAPH + {0x9A9F, 0x5708}, //3949 #CJK UNIFIED IDEOGRAPH + {0x9AA0, 0x570B}, //3950 #CJK UNIFIED IDEOGRAPH + {0x9AA1, 0x570D}, //3951 #CJK UNIFIED IDEOGRAPH + {0x9AA2, 0x5713}, //3952 #CJK UNIFIED IDEOGRAPH + {0x9AA3, 0x5718}, //3953 #CJK UNIFIED IDEOGRAPH + {0x9AA4, 0x5716}, //3954 #CJK UNIFIED IDEOGRAPH + {0x9AA5, 0x55C7}, //3955 #CJK UNIFIED IDEOGRAPH + {0x9AA6, 0x571C}, //3956 #CJK UNIFIED IDEOGRAPH + {0x9AA7, 0x5726}, //3957 #CJK UNIFIED IDEOGRAPH + {0x9AA8, 0x5737}, //3958 #CJK UNIFIED IDEOGRAPH + {0x9AA9, 0x5738}, //3959 #CJK UNIFIED IDEOGRAPH + {0x9AAA, 0x574E}, //3960 #CJK UNIFIED IDEOGRAPH + {0x9AAB, 0x573B}, //3961 #CJK UNIFIED IDEOGRAPH + {0x9AAC, 0x5740}, //3962 #CJK UNIFIED IDEOGRAPH + {0x9AAD, 0x574F}, //3963 #CJK UNIFIED IDEOGRAPH + {0x9AAE, 0x5769}, //3964 #CJK UNIFIED IDEOGRAPH + {0x9AAF, 0x57C0}, //3965 #CJK UNIFIED IDEOGRAPH + {0x9AB0, 0x5788}, //3966 #CJK UNIFIED IDEOGRAPH + {0x9AB1, 0x5761}, //3967 #CJK UNIFIED IDEOGRAPH + {0x9AB2, 0x577F}, //3968 #CJK UNIFIED IDEOGRAPH + {0x9AB3, 0x5789}, //3969 #CJK UNIFIED IDEOGRAPH + {0x9AB4, 0x5793}, //3970 #CJK UNIFIED IDEOGRAPH + {0x9AB5, 0x57A0}, //3971 #CJK UNIFIED IDEOGRAPH + {0x9AB6, 0x57B3}, //3972 #CJK UNIFIED IDEOGRAPH + {0x9AB7, 0x57A4}, //3973 #CJK UNIFIED IDEOGRAPH + {0x9AB8, 0x57AA}, //3974 #CJK UNIFIED IDEOGRAPH + {0x9AB9, 0x57B0}, //3975 #CJK UNIFIED IDEOGRAPH + {0x9ABA, 0x57C3}, //3976 #CJK UNIFIED IDEOGRAPH + {0x9ABB, 0x57C6}, //3977 #CJK UNIFIED IDEOGRAPH + {0x9ABC, 0x57D4}, //3978 #CJK UNIFIED IDEOGRAPH + {0x9ABD, 0x57D2}, //3979 #CJK UNIFIED IDEOGRAPH + {0x9ABE, 0x57D3}, //3980 #CJK UNIFIED IDEOGRAPH + {0x9ABF, 0x580A}, //3981 #CJK UNIFIED IDEOGRAPH + {0x9AC0, 0x57D6}, //3982 #CJK UNIFIED IDEOGRAPH + {0x9AC1, 0x57E3}, //3983 #CJK UNIFIED IDEOGRAPH + {0x9AC2, 0x580B}, //3984 #CJK UNIFIED IDEOGRAPH + {0x9AC3, 0x5819}, //3985 #CJK UNIFIED IDEOGRAPH + {0x9AC4, 0x581D}, //3986 #CJK UNIFIED IDEOGRAPH + {0x9AC5, 0x5872}, //3987 #CJK UNIFIED IDEOGRAPH + {0x9AC6, 0x5821}, //3988 #CJK UNIFIED IDEOGRAPH + {0x9AC7, 0x5862}, //3989 #CJK UNIFIED IDEOGRAPH + {0x9AC8, 0x584B}, //3990 #CJK UNIFIED IDEOGRAPH + {0x9AC9, 0x5870}, //3991 #CJK UNIFIED IDEOGRAPH + {0x9ACA, 0x6BC0}, //3992 #CJK UNIFIED IDEOGRAPH + {0x9ACB, 0x5852}, //3993 #CJK UNIFIED IDEOGRAPH + {0x9ACC, 0x583D}, //3994 #CJK UNIFIED IDEOGRAPH + {0x9ACD, 0x5879}, //3995 #CJK UNIFIED IDEOGRAPH + {0x9ACE, 0x5885}, //3996 #CJK UNIFIED IDEOGRAPH + {0x9ACF, 0x58B9}, //3997 #CJK UNIFIED IDEOGRAPH + {0x9AD0, 0x589F}, //3998 #CJK UNIFIED IDEOGRAPH + {0x9AD1, 0x58AB}, //3999 #CJK UNIFIED IDEOGRAPH + {0x9AD2, 0x58BA}, //4000 #CJK UNIFIED IDEOGRAPH + {0x9AD3, 0x58DE}, //4001 #CJK UNIFIED IDEOGRAPH + {0x9AD4, 0x58BB}, //4002 #CJK UNIFIED IDEOGRAPH + {0x9AD5, 0x58B8}, //4003 #CJK UNIFIED IDEOGRAPH + {0x9AD6, 0x58AE}, //4004 #CJK UNIFIED IDEOGRAPH + {0x9AD7, 0x58C5}, //4005 #CJK UNIFIED IDEOGRAPH + {0x9AD8, 0x58D3}, //4006 #CJK UNIFIED IDEOGRAPH + {0x9AD9, 0x58D1}, //4007 #CJK UNIFIED IDEOGRAPH + {0x9ADA, 0x58D7}, //4008 #CJK UNIFIED IDEOGRAPH + {0x9ADB, 0x58D9}, //4009 #CJK UNIFIED IDEOGRAPH + {0x9ADC, 0x58D8}, //4010 #CJK UNIFIED IDEOGRAPH + {0x9ADD, 0x58E5}, //4011 #CJK UNIFIED IDEOGRAPH + {0x9ADE, 0x58DC}, //4012 #CJK UNIFIED IDEOGRAPH + {0x9ADF, 0x58E4}, //4013 #CJK UNIFIED IDEOGRAPH + {0x9AE0, 0x58DF}, //4014 #CJK UNIFIED IDEOGRAPH + {0x9AE1, 0x58EF}, //4015 #CJK UNIFIED IDEOGRAPH + {0x9AE2, 0x58FA}, //4016 #CJK UNIFIED IDEOGRAPH + {0x9AE3, 0x58F9}, //4017 #CJK UNIFIED IDEOGRAPH + {0x9AE4, 0x58FB}, //4018 #CJK UNIFIED IDEOGRAPH + {0x9AE5, 0x58FC}, //4019 #CJK UNIFIED IDEOGRAPH + {0x9AE6, 0x58FD}, //4020 #CJK UNIFIED IDEOGRAPH + {0x9AE7, 0x5902}, //4021 #CJK UNIFIED IDEOGRAPH + {0x9AE8, 0x590A}, //4022 #CJK UNIFIED IDEOGRAPH + {0x9AE9, 0x5910}, //4023 #CJK UNIFIED IDEOGRAPH + {0x9AEA, 0x591B}, //4024 #CJK UNIFIED IDEOGRAPH + {0x9AEB, 0x68A6}, //4025 #CJK UNIFIED IDEOGRAPH + {0x9AEC, 0x5925}, //4026 #CJK UNIFIED IDEOGRAPH + {0x9AED, 0x592C}, //4027 #CJK UNIFIED IDEOGRAPH + {0x9AEE, 0x592D}, //4028 #CJK UNIFIED IDEOGRAPH + {0x9AEF, 0x5932}, //4029 #CJK UNIFIED IDEOGRAPH + {0x9AF0, 0x5938}, //4030 #CJK UNIFIED IDEOGRAPH + {0x9AF1, 0x593E}, //4031 #CJK UNIFIED IDEOGRAPH + {0x9AF2, 0x7AD2}, //4032 #CJK UNIFIED IDEOGRAPH + {0x9AF3, 0x5955}, //4033 #CJK UNIFIED IDEOGRAPH + {0x9AF4, 0x5950}, //4034 #CJK UNIFIED IDEOGRAPH + {0x9AF5, 0x594E}, //4035 #CJK UNIFIED IDEOGRAPH + {0x9AF6, 0x595A}, //4036 #CJK UNIFIED IDEOGRAPH + {0x9AF7, 0x5958}, //4037 #CJK UNIFIED IDEOGRAPH + {0x9AF8, 0x5962}, //4038 #CJK UNIFIED IDEOGRAPH + {0x9AF9, 0x5960}, //4039 #CJK UNIFIED IDEOGRAPH + {0x9AFA, 0x5967}, //4040 #CJK UNIFIED IDEOGRAPH + {0x9AFB, 0x596C}, //4041 #CJK UNIFIED IDEOGRAPH + {0x9AFC, 0x5969}, //4042 #CJK UNIFIED IDEOGRAPH + {0x9B40, 0x5978}, //4043 #CJK UNIFIED IDEOGRAPH + {0x9B41, 0x5981}, //4044 #CJK UNIFIED IDEOGRAPH + {0x9B42, 0x599D}, //4045 #CJK UNIFIED IDEOGRAPH + {0x9B43, 0x4F5E}, //4046 #CJK UNIFIED IDEOGRAPH + {0x9B44, 0x4FAB}, //4047 #CJK UNIFIED IDEOGRAPH + {0x9B45, 0x59A3}, //4048 #CJK UNIFIED IDEOGRAPH + {0x9B46, 0x59B2}, //4049 #CJK UNIFIED IDEOGRAPH + {0x9B47, 0x59C6}, //4050 #CJK UNIFIED IDEOGRAPH + {0x9B48, 0x59E8}, //4051 #CJK UNIFIED IDEOGRAPH + {0x9B49, 0x59DC}, //4052 #CJK UNIFIED IDEOGRAPH + {0x9B4A, 0x598D}, //4053 #CJK UNIFIED IDEOGRAPH + {0x9B4B, 0x59D9}, //4054 #CJK UNIFIED IDEOGRAPH + {0x9B4C, 0x59DA}, //4055 #CJK UNIFIED IDEOGRAPH + {0x9B4D, 0x5A25}, //4056 #CJK UNIFIED IDEOGRAPH + {0x9B4E, 0x5A1F}, //4057 #CJK UNIFIED IDEOGRAPH + {0x9B4F, 0x5A11}, //4058 #CJK UNIFIED IDEOGRAPH + {0x9B50, 0x5A1C}, //4059 #CJK UNIFIED IDEOGRAPH + {0x9B51, 0x5A09}, //4060 #CJK UNIFIED IDEOGRAPH + {0x9B52, 0x5A1A}, //4061 #CJK UNIFIED IDEOGRAPH + {0x9B53, 0x5A40}, //4062 #CJK UNIFIED IDEOGRAPH + {0x9B54, 0x5A6C}, //4063 #CJK UNIFIED IDEOGRAPH + {0x9B55, 0x5A49}, //4064 #CJK UNIFIED IDEOGRAPH + {0x9B56, 0x5A35}, //4065 #CJK UNIFIED IDEOGRAPH + {0x9B57, 0x5A36}, //4066 #CJK UNIFIED IDEOGRAPH + {0x9B58, 0x5A62}, //4067 #CJK UNIFIED IDEOGRAPH + {0x9B59, 0x5A6A}, //4068 #CJK UNIFIED IDEOGRAPH + {0x9B5A, 0x5A9A}, //4069 #CJK UNIFIED IDEOGRAPH + {0x9B5B, 0x5ABC}, //4070 #CJK UNIFIED IDEOGRAPH + {0x9B5C, 0x5ABE}, //4071 #CJK UNIFIED IDEOGRAPH + {0x9B5D, 0x5ACB}, //4072 #CJK UNIFIED IDEOGRAPH + {0x9B5E, 0x5AC2}, //4073 #CJK UNIFIED IDEOGRAPH + {0x9B5F, 0x5ABD}, //4074 #CJK UNIFIED IDEOGRAPH + {0x9B60, 0x5AE3}, //4075 #CJK UNIFIED IDEOGRAPH + {0x9B61, 0x5AD7}, //4076 #CJK UNIFIED IDEOGRAPH + {0x9B62, 0x5AE6}, //4077 #CJK UNIFIED IDEOGRAPH + {0x9B63, 0x5AE9}, //4078 #CJK UNIFIED IDEOGRAPH + {0x9B64, 0x5AD6}, //4079 #CJK UNIFIED IDEOGRAPH + {0x9B65, 0x5AFA}, //4080 #CJK UNIFIED IDEOGRAPH + {0x9B66, 0x5AFB}, //4081 #CJK UNIFIED IDEOGRAPH + {0x9B67, 0x5B0C}, //4082 #CJK UNIFIED IDEOGRAPH + {0x9B68, 0x5B0B}, //4083 #CJK UNIFIED IDEOGRAPH + {0x9B69, 0x5B16}, //4084 #CJK UNIFIED IDEOGRAPH + {0x9B6A, 0x5B32}, //4085 #CJK UNIFIED IDEOGRAPH + {0x9B6B, 0x5AD0}, //4086 #CJK UNIFIED IDEOGRAPH + {0x9B6C, 0x5B2A}, //4087 #CJK UNIFIED IDEOGRAPH + {0x9B6D, 0x5B36}, //4088 #CJK UNIFIED IDEOGRAPH + {0x9B6E, 0x5B3E}, //4089 #CJK UNIFIED IDEOGRAPH + {0x9B6F, 0x5B43}, //4090 #CJK UNIFIED IDEOGRAPH + {0x9B70, 0x5B45}, //4091 #CJK UNIFIED IDEOGRAPH + {0x9B71, 0x5B40}, //4092 #CJK UNIFIED IDEOGRAPH + {0x9B72, 0x5B51}, //4093 #CJK UNIFIED IDEOGRAPH + {0x9B73, 0x5B55}, //4094 #CJK UNIFIED IDEOGRAPH + {0x9B74, 0x5B5A}, //4095 #CJK UNIFIED IDEOGRAPH + {0x9B75, 0x5B5B}, //4096 #CJK UNIFIED IDEOGRAPH + {0x9B76, 0x5B65}, //4097 #CJK UNIFIED IDEOGRAPH + {0x9B77, 0x5B69}, //4098 #CJK UNIFIED IDEOGRAPH + {0x9B78, 0x5B70}, //4099 #CJK UNIFIED IDEOGRAPH + {0x9B79, 0x5B73}, //4100 #CJK UNIFIED IDEOGRAPH + {0x9B7A, 0x5B75}, //4101 #CJK UNIFIED IDEOGRAPH + {0x9B7B, 0x5B78}, //4102 #CJK UNIFIED IDEOGRAPH + {0x9B7C, 0x6588}, //4103 #CJK UNIFIED IDEOGRAPH + {0x9B7D, 0x5B7A}, //4104 #CJK UNIFIED IDEOGRAPH + {0x9B7E, 0x5B80}, //4105 #CJK UNIFIED IDEOGRAPH + {0x9B80, 0x5B83}, //4106 #CJK UNIFIED IDEOGRAPH + {0x9B81, 0x5BA6}, //4107 #CJK UNIFIED IDEOGRAPH + {0x9B82, 0x5BB8}, //4108 #CJK UNIFIED IDEOGRAPH + {0x9B83, 0x5BC3}, //4109 #CJK UNIFIED IDEOGRAPH + {0x9B84, 0x5BC7}, //4110 #CJK UNIFIED IDEOGRAPH + {0x9B85, 0x5BC9}, //4111 #CJK UNIFIED IDEOGRAPH + {0x9B86, 0x5BD4}, //4112 #CJK UNIFIED IDEOGRAPH + {0x9B87, 0x5BD0}, //4113 #CJK UNIFIED IDEOGRAPH + {0x9B88, 0x5BE4}, //4114 #CJK UNIFIED IDEOGRAPH + {0x9B89, 0x5BE6}, //4115 #CJK UNIFIED IDEOGRAPH + {0x9B8A, 0x5BE2}, //4116 #CJK UNIFIED IDEOGRAPH + {0x9B8B, 0x5BDE}, //4117 #CJK UNIFIED IDEOGRAPH + {0x9B8C, 0x5BE5}, //4118 #CJK UNIFIED IDEOGRAPH + {0x9B8D, 0x5BEB}, //4119 #CJK UNIFIED IDEOGRAPH + {0x9B8E, 0x5BF0}, //4120 #CJK UNIFIED IDEOGRAPH + {0x9B8F, 0x5BF6}, //4121 #CJK UNIFIED IDEOGRAPH + {0x9B90, 0x5BF3}, //4122 #CJK UNIFIED IDEOGRAPH + {0x9B91, 0x5C05}, //4123 #CJK UNIFIED IDEOGRAPH + {0x9B92, 0x5C07}, //4124 #CJK UNIFIED IDEOGRAPH + {0x9B93, 0x5C08}, //4125 #CJK UNIFIED IDEOGRAPH + {0x9B94, 0x5C0D}, //4126 #CJK UNIFIED IDEOGRAPH + {0x9B95, 0x5C13}, //4127 #CJK UNIFIED IDEOGRAPH + {0x9B96, 0x5C20}, //4128 #CJK UNIFIED IDEOGRAPH + {0x9B97, 0x5C22}, //4129 #CJK UNIFIED IDEOGRAPH + {0x9B98, 0x5C28}, //4130 #CJK UNIFIED IDEOGRAPH + {0x9B99, 0x5C38}, //4131 #CJK UNIFIED IDEOGRAPH + {0x9B9A, 0x5C39}, //4132 #CJK UNIFIED IDEOGRAPH + {0x9B9B, 0x5C41}, //4133 #CJK UNIFIED IDEOGRAPH + {0x9B9C, 0x5C46}, //4134 #CJK UNIFIED IDEOGRAPH + {0x9B9D, 0x5C4E}, //4135 #CJK UNIFIED IDEOGRAPH + {0x9B9E, 0x5C53}, //4136 #CJK UNIFIED IDEOGRAPH + {0x9B9F, 0x5C50}, //4137 #CJK UNIFIED IDEOGRAPH + {0x9BA0, 0x5C4F}, //4138 #CJK UNIFIED IDEOGRAPH + {0x9BA1, 0x5B71}, //4139 #CJK UNIFIED IDEOGRAPH + {0x9BA2, 0x5C6C}, //4140 #CJK UNIFIED IDEOGRAPH + {0x9BA3, 0x5C6E}, //4141 #CJK UNIFIED IDEOGRAPH + {0x9BA4, 0x4E62}, //4142 #CJK UNIFIED IDEOGRAPH + {0x9BA5, 0x5C76}, //4143 #CJK UNIFIED IDEOGRAPH + {0x9BA6, 0x5C79}, //4144 #CJK UNIFIED IDEOGRAPH + {0x9BA7, 0x5C8C}, //4145 #CJK UNIFIED IDEOGRAPH + {0x9BA8, 0x5C91}, //4146 #CJK UNIFIED IDEOGRAPH + {0x9BA9, 0x5C94}, //4147 #CJK UNIFIED IDEOGRAPH + {0x9BAA, 0x599B}, //4148 #CJK UNIFIED IDEOGRAPH + {0x9BAB, 0x5CAB}, //4149 #CJK UNIFIED IDEOGRAPH + {0x9BAC, 0x5CBB}, //4150 #CJK UNIFIED IDEOGRAPH + {0x9BAD, 0x5CB6}, //4151 #CJK UNIFIED IDEOGRAPH + {0x9BAE, 0x5CBC}, //4152 #CJK UNIFIED IDEOGRAPH + {0x9BAF, 0x5CB7}, //4153 #CJK UNIFIED IDEOGRAPH + {0x9BB0, 0x5CC5}, //4154 #CJK UNIFIED IDEOGRAPH + {0x9BB1, 0x5CBE}, //4155 #CJK UNIFIED IDEOGRAPH + {0x9BB2, 0x5CC7}, //4156 #CJK UNIFIED IDEOGRAPH + {0x9BB3, 0x5CD9}, //4157 #CJK UNIFIED IDEOGRAPH + {0x9BB4, 0x5CE9}, //4158 #CJK UNIFIED IDEOGRAPH + {0x9BB5, 0x5CFD}, //4159 #CJK UNIFIED IDEOGRAPH + {0x9BB6, 0x5CFA}, //4160 #CJK UNIFIED IDEOGRAPH + {0x9BB7, 0x5CED}, //4161 #CJK UNIFIED IDEOGRAPH + {0x9BB8, 0x5D8C}, //4162 #CJK UNIFIED IDEOGRAPH + {0x9BB9, 0x5CEA}, //4163 #CJK UNIFIED IDEOGRAPH + {0x9BBA, 0x5D0B}, //4164 #CJK UNIFIED IDEOGRAPH + {0x9BBB, 0x5D15}, //4165 #CJK UNIFIED IDEOGRAPH + {0x9BBC, 0x5D17}, //4166 #CJK UNIFIED IDEOGRAPH + {0x9BBD, 0x5D5C}, //4167 #CJK UNIFIED IDEOGRAPH + {0x9BBE, 0x5D1F}, //4168 #CJK UNIFIED IDEOGRAPH + {0x9BBF, 0x5D1B}, //4169 #CJK UNIFIED IDEOGRAPH + {0x9BC0, 0x5D11}, //4170 #CJK UNIFIED IDEOGRAPH + {0x9BC1, 0x5D14}, //4171 #CJK UNIFIED IDEOGRAPH + {0x9BC2, 0x5D22}, //4172 #CJK UNIFIED IDEOGRAPH + {0x9BC3, 0x5D1A}, //4173 #CJK UNIFIED IDEOGRAPH + {0x9BC4, 0x5D19}, //4174 #CJK UNIFIED IDEOGRAPH + {0x9BC5, 0x5D18}, //4175 #CJK UNIFIED IDEOGRAPH + {0x9BC6, 0x5D4C}, //4176 #CJK UNIFIED IDEOGRAPH + {0x9BC7, 0x5D52}, //4177 #CJK UNIFIED IDEOGRAPH + {0x9BC8, 0x5D4E}, //4178 #CJK UNIFIED IDEOGRAPH + {0x9BC9, 0x5D4B}, //4179 #CJK UNIFIED IDEOGRAPH + {0x9BCA, 0x5D6C}, //4180 #CJK UNIFIED IDEOGRAPH + {0x9BCB, 0x5D73}, //4181 #CJK UNIFIED IDEOGRAPH + {0x9BCC, 0x5D76}, //4182 #CJK UNIFIED IDEOGRAPH + {0x9BCD, 0x5D87}, //4183 #CJK UNIFIED IDEOGRAPH + {0x9BCE, 0x5D84}, //4184 #CJK UNIFIED IDEOGRAPH + {0x9BCF, 0x5D82}, //4185 #CJK UNIFIED IDEOGRAPH + {0x9BD0, 0x5DA2}, //4186 #CJK UNIFIED IDEOGRAPH + {0x9BD1, 0x5D9D}, //4187 #CJK UNIFIED IDEOGRAPH + {0x9BD2, 0x5DAC}, //4188 #CJK UNIFIED IDEOGRAPH + {0x9BD3, 0x5DAE}, //4189 #CJK UNIFIED IDEOGRAPH + {0x9BD4, 0x5DBD}, //4190 #CJK UNIFIED IDEOGRAPH + {0x9BD5, 0x5D90}, //4191 #CJK UNIFIED IDEOGRAPH + {0x9BD6, 0x5DB7}, //4192 #CJK UNIFIED IDEOGRAPH + {0x9BD7, 0x5DBC}, //4193 #CJK UNIFIED IDEOGRAPH + {0x9BD8, 0x5DC9}, //4194 #CJK UNIFIED IDEOGRAPH + {0x9BD9, 0x5DCD}, //4195 #CJK UNIFIED IDEOGRAPH + {0x9BDA, 0x5DD3}, //4196 #CJK UNIFIED IDEOGRAPH + {0x9BDB, 0x5DD2}, //4197 #CJK UNIFIED IDEOGRAPH + {0x9BDC, 0x5DD6}, //4198 #CJK UNIFIED IDEOGRAPH + {0x9BDD, 0x5DDB}, //4199 #CJK UNIFIED IDEOGRAPH + {0x9BDE, 0x5DEB}, //4200 #CJK UNIFIED IDEOGRAPH + {0x9BDF, 0x5DF2}, //4201 #CJK UNIFIED IDEOGRAPH + {0x9BE0, 0x5DF5}, //4202 #CJK UNIFIED IDEOGRAPH + {0x9BE1, 0x5E0B}, //4203 #CJK UNIFIED IDEOGRAPH + {0x9BE2, 0x5E1A}, //4204 #CJK UNIFIED IDEOGRAPH + {0x9BE3, 0x5E19}, //4205 #CJK UNIFIED IDEOGRAPH + {0x9BE4, 0x5E11}, //4206 #CJK UNIFIED IDEOGRAPH + {0x9BE5, 0x5E1B}, //4207 #CJK UNIFIED IDEOGRAPH + {0x9BE6, 0x5E36}, //4208 #CJK UNIFIED IDEOGRAPH + {0x9BE7, 0x5E37}, //4209 #CJK UNIFIED IDEOGRAPH + {0x9BE8, 0x5E44}, //4210 #CJK UNIFIED IDEOGRAPH + {0x9BE9, 0x5E43}, //4211 #CJK UNIFIED IDEOGRAPH + {0x9BEA, 0x5E40}, //4212 #CJK UNIFIED IDEOGRAPH + {0x9BEB, 0x5E4E}, //4213 #CJK UNIFIED IDEOGRAPH + {0x9BEC, 0x5E57}, //4214 #CJK UNIFIED IDEOGRAPH + {0x9BED, 0x5E54}, //4215 #CJK UNIFIED IDEOGRAPH + {0x9BEE, 0x5E5F}, //4216 #CJK UNIFIED IDEOGRAPH + {0x9BEF, 0x5E62}, //4217 #CJK UNIFIED IDEOGRAPH + {0x9BF0, 0x5E64}, //4218 #CJK UNIFIED IDEOGRAPH + {0x9BF1, 0x5E47}, //4219 #CJK UNIFIED IDEOGRAPH + {0x9BF2, 0x5E75}, //4220 #CJK UNIFIED IDEOGRAPH + {0x9BF3, 0x5E76}, //4221 #CJK UNIFIED IDEOGRAPH + {0x9BF4, 0x5E7A}, //4222 #CJK UNIFIED IDEOGRAPH + {0x9BF5, 0x9EBC}, //4223 #CJK UNIFIED IDEOGRAPH + {0x9BF6, 0x5E7F}, //4224 #CJK UNIFIED IDEOGRAPH + {0x9BF7, 0x5EA0}, //4225 #CJK UNIFIED IDEOGRAPH + {0x9BF8, 0x5EC1}, //4226 #CJK UNIFIED IDEOGRAPH + {0x9BF9, 0x5EC2}, //4227 #CJK UNIFIED IDEOGRAPH + {0x9BFA, 0x5EC8}, //4228 #CJK UNIFIED IDEOGRAPH + {0x9BFB, 0x5ED0}, //4229 #CJK UNIFIED IDEOGRAPH + {0x9BFC, 0x5ECF}, //4230 #CJK UNIFIED IDEOGRAPH + {0x9C40, 0x5ED6}, //4231 #CJK UNIFIED IDEOGRAPH + {0x9C41, 0x5EE3}, //4232 #CJK UNIFIED IDEOGRAPH + {0x9C42, 0x5EDD}, //4233 #CJK UNIFIED IDEOGRAPH + {0x9C43, 0x5EDA}, //4234 #CJK UNIFIED IDEOGRAPH + {0x9C44, 0x5EDB}, //4235 #CJK UNIFIED IDEOGRAPH + {0x9C45, 0x5EE2}, //4236 #CJK UNIFIED IDEOGRAPH + {0x9C46, 0x5EE1}, //4237 #CJK UNIFIED IDEOGRAPH + {0x9C47, 0x5EE8}, //4238 #CJK UNIFIED IDEOGRAPH + {0x9C48, 0x5EE9}, //4239 #CJK UNIFIED IDEOGRAPH + {0x9C49, 0x5EEC}, //4240 #CJK UNIFIED IDEOGRAPH + {0x9C4A, 0x5EF1}, //4241 #CJK UNIFIED IDEOGRAPH + {0x9C4B, 0x5EF3}, //4242 #CJK UNIFIED IDEOGRAPH + {0x9C4C, 0x5EF0}, //4243 #CJK UNIFIED IDEOGRAPH + {0x9C4D, 0x5EF4}, //4244 #CJK UNIFIED IDEOGRAPH + {0x9C4E, 0x5EF8}, //4245 #CJK UNIFIED IDEOGRAPH + {0x9C4F, 0x5EFE}, //4246 #CJK UNIFIED IDEOGRAPH + {0x9C50, 0x5F03}, //4247 #CJK UNIFIED IDEOGRAPH + {0x9C51, 0x5F09}, //4248 #CJK UNIFIED IDEOGRAPH + {0x9C52, 0x5F5D}, //4249 #CJK UNIFIED IDEOGRAPH + {0x9C53, 0x5F5C}, //4250 #CJK UNIFIED IDEOGRAPH + {0x9C54, 0x5F0B}, //4251 #CJK UNIFIED IDEOGRAPH + {0x9C55, 0x5F11}, //4252 #CJK UNIFIED IDEOGRAPH + {0x9C56, 0x5F16}, //4253 #CJK UNIFIED IDEOGRAPH + {0x9C57, 0x5F29}, //4254 #CJK UNIFIED IDEOGRAPH + {0x9C58, 0x5F2D}, //4255 #CJK UNIFIED IDEOGRAPH + {0x9C59, 0x5F38}, //4256 #CJK UNIFIED IDEOGRAPH + {0x9C5A, 0x5F41}, //4257 #CJK UNIFIED IDEOGRAPH + {0x9C5B, 0x5F48}, //4258 #CJK UNIFIED IDEOGRAPH + {0x9C5C, 0x5F4C}, //4259 #CJK UNIFIED IDEOGRAPH + {0x9C5D, 0x5F4E}, //4260 #CJK UNIFIED IDEOGRAPH + {0x9C5E, 0x5F2F}, //4261 #CJK UNIFIED IDEOGRAPH + {0x9C5F, 0x5F51}, //4262 #CJK UNIFIED IDEOGRAPH + {0x9C60, 0x5F56}, //4263 #CJK UNIFIED IDEOGRAPH + {0x9C61, 0x5F57}, //4264 #CJK UNIFIED IDEOGRAPH + {0x9C62, 0x5F59}, //4265 #CJK UNIFIED IDEOGRAPH + {0x9C63, 0x5F61}, //4266 #CJK UNIFIED IDEOGRAPH + {0x9C64, 0x5F6D}, //4267 #CJK UNIFIED IDEOGRAPH + {0x9C65, 0x5F73}, //4268 #CJK UNIFIED IDEOGRAPH + {0x9C66, 0x5F77}, //4269 #CJK UNIFIED IDEOGRAPH + {0x9C67, 0x5F83}, //4270 #CJK UNIFIED IDEOGRAPH + {0x9C68, 0x5F82}, //4271 #CJK UNIFIED IDEOGRAPH + {0x9C69, 0x5F7F}, //4272 #CJK UNIFIED IDEOGRAPH + {0x9C6A, 0x5F8A}, //4273 #CJK UNIFIED IDEOGRAPH + {0x9C6B, 0x5F88}, //4274 #CJK UNIFIED IDEOGRAPH + {0x9C6C, 0x5F91}, //4275 #CJK UNIFIED IDEOGRAPH + {0x9C6D, 0x5F87}, //4276 #CJK UNIFIED IDEOGRAPH + {0x9C6E, 0x5F9E}, //4277 #CJK UNIFIED IDEOGRAPH + {0x9C6F, 0x5F99}, //4278 #CJK UNIFIED IDEOGRAPH + {0x9C70, 0x5F98}, //4279 #CJK UNIFIED IDEOGRAPH + {0x9C71, 0x5FA0}, //4280 #CJK UNIFIED IDEOGRAPH + {0x9C72, 0x5FA8}, //4281 #CJK UNIFIED IDEOGRAPH + {0x9C73, 0x5FAD}, //4282 #CJK UNIFIED IDEOGRAPH + {0x9C74, 0x5FBC}, //4283 #CJK UNIFIED IDEOGRAPH + {0x9C75, 0x5FD6}, //4284 #CJK UNIFIED IDEOGRAPH + {0x9C76, 0x5FFB}, //4285 #CJK UNIFIED IDEOGRAPH + {0x9C77, 0x5FE4}, //4286 #CJK UNIFIED IDEOGRAPH + {0x9C78, 0x5FF8}, //4287 #CJK UNIFIED IDEOGRAPH + {0x9C79, 0x5FF1}, //4288 #CJK UNIFIED IDEOGRAPH + {0x9C7A, 0x5FDD}, //4289 #CJK UNIFIED IDEOGRAPH + {0x9C7B, 0x60B3}, //4290 #CJK UNIFIED IDEOGRAPH + {0x9C7C, 0x5FFF}, //4291 #CJK UNIFIED IDEOGRAPH + {0x9C7D, 0x6021}, //4292 #CJK UNIFIED IDEOGRAPH + {0x9C7E, 0x6060}, //4293 #CJK UNIFIED IDEOGRAPH + {0x9C80, 0x6019}, //4294 #CJK UNIFIED IDEOGRAPH + {0x9C81, 0x6010}, //4295 #CJK UNIFIED IDEOGRAPH + {0x9C82, 0x6029}, //4296 #CJK UNIFIED IDEOGRAPH + {0x9C83, 0x600E}, //4297 #CJK UNIFIED IDEOGRAPH + {0x9C84, 0x6031}, //4298 #CJK UNIFIED IDEOGRAPH + {0x9C85, 0x601B}, //4299 #CJK UNIFIED IDEOGRAPH + {0x9C86, 0x6015}, //4300 #CJK UNIFIED IDEOGRAPH + {0x9C87, 0x602B}, //4301 #CJK UNIFIED IDEOGRAPH + {0x9C88, 0x6026}, //4302 #CJK UNIFIED IDEOGRAPH + {0x9C89, 0x600F}, //4303 #CJK UNIFIED IDEOGRAPH + {0x9C8A, 0x603A}, //4304 #CJK UNIFIED IDEOGRAPH + {0x9C8B, 0x605A}, //4305 #CJK UNIFIED IDEOGRAPH + {0x9C8C, 0x6041}, //4306 #CJK UNIFIED IDEOGRAPH + {0x9C8D, 0x606A}, //4307 #CJK UNIFIED IDEOGRAPH + {0x9C8E, 0x6077}, //4308 #CJK UNIFIED IDEOGRAPH + {0x9C8F, 0x605F}, //4309 #CJK UNIFIED IDEOGRAPH + {0x9C90, 0x604A}, //4310 #CJK UNIFIED IDEOGRAPH + {0x9C91, 0x6046}, //4311 #CJK UNIFIED IDEOGRAPH + {0x9C92, 0x604D}, //4312 #CJK UNIFIED IDEOGRAPH + {0x9C93, 0x6063}, //4313 #CJK UNIFIED IDEOGRAPH + {0x9C94, 0x6043}, //4314 #CJK UNIFIED IDEOGRAPH + {0x9C95, 0x6064}, //4315 #CJK UNIFIED IDEOGRAPH + {0x9C96, 0x6042}, //4316 #CJK UNIFIED IDEOGRAPH + {0x9C97, 0x606C}, //4317 #CJK UNIFIED IDEOGRAPH + {0x9C98, 0x606B}, //4318 #CJK UNIFIED IDEOGRAPH + {0x9C99, 0x6059}, //4319 #CJK UNIFIED IDEOGRAPH + {0x9C9A, 0x6081}, //4320 #CJK UNIFIED IDEOGRAPH + {0x9C9B, 0x608D}, //4321 #CJK UNIFIED IDEOGRAPH + {0x9C9C, 0x60E7}, //4322 #CJK UNIFIED IDEOGRAPH + {0x9C9D, 0x6083}, //4323 #CJK UNIFIED IDEOGRAPH + {0x9C9E, 0x609A}, //4324 #CJK UNIFIED IDEOGRAPH + {0x9C9F, 0x6084}, //4325 #CJK UNIFIED IDEOGRAPH + {0x9CA0, 0x609B}, //4326 #CJK UNIFIED IDEOGRAPH + {0x9CA1, 0x6096}, //4327 #CJK UNIFIED IDEOGRAPH + {0x9CA2, 0x6097}, //4328 #CJK UNIFIED IDEOGRAPH + {0x9CA3, 0x6092}, //4329 #CJK UNIFIED IDEOGRAPH + {0x9CA4, 0x60A7}, //4330 #CJK UNIFIED IDEOGRAPH + {0x9CA5, 0x608B}, //4331 #CJK UNIFIED IDEOGRAPH + {0x9CA6, 0x60E1}, //4332 #CJK UNIFIED IDEOGRAPH + {0x9CA7, 0x60B8}, //4333 #CJK UNIFIED IDEOGRAPH + {0x9CA8, 0x60E0}, //4334 #CJK UNIFIED IDEOGRAPH + {0x9CA9, 0x60D3}, //4335 #CJK UNIFIED IDEOGRAPH + {0x9CAA, 0x60B4}, //4336 #CJK UNIFIED IDEOGRAPH + {0x9CAB, 0x5FF0}, //4337 #CJK UNIFIED IDEOGRAPH + {0x9CAC, 0x60BD}, //4338 #CJK UNIFIED IDEOGRAPH + {0x9CAD, 0x60C6}, //4339 #CJK UNIFIED IDEOGRAPH + {0x9CAE, 0x60B5}, //4340 #CJK UNIFIED IDEOGRAPH + {0x9CAF, 0x60D8}, //4341 #CJK UNIFIED IDEOGRAPH + {0x9CB0, 0x614D}, //4342 #CJK UNIFIED IDEOGRAPH + {0x9CB1, 0x6115}, //4343 #CJK UNIFIED IDEOGRAPH + {0x9CB2, 0x6106}, //4344 #CJK UNIFIED IDEOGRAPH + {0x9CB3, 0x60F6}, //4345 #CJK UNIFIED IDEOGRAPH + {0x9CB4, 0x60F7}, //4346 #CJK UNIFIED IDEOGRAPH + {0x9CB5, 0x6100}, //4347 #CJK UNIFIED IDEOGRAPH + {0x9CB6, 0x60F4}, //4348 #CJK UNIFIED IDEOGRAPH + {0x9CB7, 0x60FA}, //4349 #CJK UNIFIED IDEOGRAPH + {0x9CB8, 0x6103}, //4350 #CJK UNIFIED IDEOGRAPH + {0x9CB9, 0x6121}, //4351 #CJK UNIFIED IDEOGRAPH + {0x9CBA, 0x60FB}, //4352 #CJK UNIFIED IDEOGRAPH + {0x9CBB, 0x60F1}, //4353 #CJK UNIFIED IDEOGRAPH + {0x9CBC, 0x610D}, //4354 #CJK UNIFIED IDEOGRAPH + {0x9CBD, 0x610E}, //4355 #CJK UNIFIED IDEOGRAPH + {0x9CBE, 0x6147}, //4356 #CJK UNIFIED IDEOGRAPH + {0x9CBF, 0x613E}, //4357 #CJK UNIFIED IDEOGRAPH + {0x9CC0, 0x6128}, //4358 #CJK UNIFIED IDEOGRAPH + {0x9CC1, 0x6127}, //4359 #CJK UNIFIED IDEOGRAPH + {0x9CC2, 0x614A}, //4360 #CJK UNIFIED IDEOGRAPH + {0x9CC3, 0x613F}, //4361 #CJK UNIFIED IDEOGRAPH + {0x9CC4, 0x613C}, //4362 #CJK UNIFIED IDEOGRAPH + {0x9CC5, 0x612C}, //4363 #CJK UNIFIED IDEOGRAPH + {0x9CC6, 0x6134}, //4364 #CJK UNIFIED IDEOGRAPH + {0x9CC7, 0x613D}, //4365 #CJK UNIFIED IDEOGRAPH + {0x9CC8, 0x6142}, //4366 #CJK UNIFIED IDEOGRAPH + {0x9CC9, 0x6144}, //4367 #CJK UNIFIED IDEOGRAPH + {0x9CCA, 0x6173}, //4368 #CJK UNIFIED IDEOGRAPH + {0x9CCB, 0x6177}, //4369 #CJK UNIFIED IDEOGRAPH + {0x9CCC, 0x6158}, //4370 #CJK UNIFIED IDEOGRAPH + {0x9CCD, 0x6159}, //4371 #CJK UNIFIED IDEOGRAPH + {0x9CCE, 0x615A}, //4372 #CJK UNIFIED IDEOGRAPH + {0x9CCF, 0x616B}, //4373 #CJK UNIFIED IDEOGRAPH + {0x9CD0, 0x6174}, //4374 #CJK UNIFIED IDEOGRAPH + {0x9CD1, 0x616F}, //4375 #CJK UNIFIED IDEOGRAPH + {0x9CD2, 0x6165}, //4376 #CJK UNIFIED IDEOGRAPH + {0x9CD3, 0x6171}, //4377 #CJK UNIFIED IDEOGRAPH + {0x9CD4, 0x615F}, //4378 #CJK UNIFIED IDEOGRAPH + {0x9CD5, 0x615D}, //4379 #CJK UNIFIED IDEOGRAPH + {0x9CD6, 0x6153}, //4380 #CJK UNIFIED IDEOGRAPH + {0x9CD7, 0x6175}, //4381 #CJK UNIFIED IDEOGRAPH + {0x9CD8, 0x6199}, //4382 #CJK UNIFIED IDEOGRAPH + {0x9CD9, 0x6196}, //4383 #CJK UNIFIED IDEOGRAPH + {0x9CDA, 0x6187}, //4384 #CJK UNIFIED IDEOGRAPH + {0x9CDB, 0x61AC}, //4385 #CJK UNIFIED IDEOGRAPH + {0x9CDC, 0x6194}, //4386 #CJK UNIFIED IDEOGRAPH + {0x9CDD, 0x619A}, //4387 #CJK UNIFIED IDEOGRAPH + {0x9CDE, 0x618A}, //4388 #CJK UNIFIED IDEOGRAPH + {0x9CDF, 0x6191}, //4389 #CJK UNIFIED IDEOGRAPH + {0x9CE0, 0x61AB}, //4390 #CJK UNIFIED IDEOGRAPH + {0x9CE1, 0x61AE}, //4391 #CJK UNIFIED IDEOGRAPH + {0x9CE2, 0x61CC}, //4392 #CJK UNIFIED IDEOGRAPH + {0x9CE3, 0x61CA}, //4393 #CJK UNIFIED IDEOGRAPH + {0x9CE4, 0x61C9}, //4394 #CJK UNIFIED IDEOGRAPH + {0x9CE5, 0x61F7}, //4395 #CJK UNIFIED IDEOGRAPH + {0x9CE6, 0x61C8}, //4396 #CJK UNIFIED IDEOGRAPH + {0x9CE7, 0x61C3}, //4397 #CJK UNIFIED IDEOGRAPH + {0x9CE8, 0x61C6}, //4398 #CJK UNIFIED IDEOGRAPH + {0x9CE9, 0x61BA}, //4399 #CJK UNIFIED IDEOGRAPH + {0x9CEA, 0x61CB}, //4400 #CJK UNIFIED IDEOGRAPH + {0x9CEB, 0x7F79}, //4401 #CJK UNIFIED IDEOGRAPH + {0x9CEC, 0x61CD}, //4402 #CJK UNIFIED IDEOGRAPH + {0x9CED, 0x61E6}, //4403 #CJK UNIFIED IDEOGRAPH + {0x9CEE, 0x61E3}, //4404 #CJK UNIFIED IDEOGRAPH + {0x9CEF, 0x61F6}, //4405 #CJK UNIFIED IDEOGRAPH + {0x9CF0, 0x61FA}, //4406 #CJK UNIFIED IDEOGRAPH + {0x9CF1, 0x61F4}, //4407 #CJK UNIFIED IDEOGRAPH + {0x9CF2, 0x61FF}, //4408 #CJK UNIFIED IDEOGRAPH + {0x9CF3, 0x61FD}, //4409 #CJK UNIFIED IDEOGRAPH + {0x9CF4, 0x61FC}, //4410 #CJK UNIFIED IDEOGRAPH + {0x9CF5, 0x61FE}, //4411 #CJK UNIFIED IDEOGRAPH + {0x9CF6, 0x6200}, //4412 #CJK UNIFIED IDEOGRAPH + {0x9CF7, 0x6208}, //4413 #CJK UNIFIED IDEOGRAPH + {0x9CF8, 0x6209}, //4414 #CJK UNIFIED IDEOGRAPH + {0x9CF9, 0x620D}, //4415 #CJK UNIFIED IDEOGRAPH + {0x9CFA, 0x620C}, //4416 #CJK UNIFIED IDEOGRAPH + {0x9CFB, 0x6214}, //4417 #CJK UNIFIED IDEOGRAPH + {0x9CFC, 0x621B}, //4418 #CJK UNIFIED IDEOGRAPH + {0x9D40, 0x621E}, //4419 #CJK UNIFIED IDEOGRAPH + {0x9D41, 0x6221}, //4420 #CJK UNIFIED IDEOGRAPH + {0x9D42, 0x622A}, //4421 #CJK UNIFIED IDEOGRAPH + {0x9D43, 0x622E}, //4422 #CJK UNIFIED IDEOGRAPH + {0x9D44, 0x6230}, //4423 #CJK UNIFIED IDEOGRAPH + {0x9D45, 0x6232}, //4424 #CJK UNIFIED IDEOGRAPH + {0x9D46, 0x6233}, //4425 #CJK UNIFIED IDEOGRAPH + {0x9D47, 0x6241}, //4426 #CJK UNIFIED IDEOGRAPH + {0x9D48, 0x624E}, //4427 #CJK UNIFIED IDEOGRAPH + {0x9D49, 0x625E}, //4428 #CJK UNIFIED IDEOGRAPH + {0x9D4A, 0x6263}, //4429 #CJK UNIFIED IDEOGRAPH + {0x9D4B, 0x625B}, //4430 #CJK UNIFIED IDEOGRAPH + {0x9D4C, 0x6260}, //4431 #CJK UNIFIED IDEOGRAPH + {0x9D4D, 0x6268}, //4432 #CJK UNIFIED IDEOGRAPH + {0x9D4E, 0x627C}, //4433 #CJK UNIFIED IDEOGRAPH + {0x9D4F, 0x6282}, //4434 #CJK UNIFIED IDEOGRAPH + {0x9D50, 0x6289}, //4435 #CJK UNIFIED IDEOGRAPH + {0x9D51, 0x627E}, //4436 #CJK UNIFIED IDEOGRAPH + {0x9D52, 0x6292}, //4437 #CJK UNIFIED IDEOGRAPH + {0x9D53, 0x6293}, //4438 #CJK UNIFIED IDEOGRAPH + {0x9D54, 0x6296}, //4439 #CJK UNIFIED IDEOGRAPH + {0x9D55, 0x62D4}, //4440 #CJK UNIFIED IDEOGRAPH + {0x9D56, 0x6283}, //4441 #CJK UNIFIED IDEOGRAPH + {0x9D57, 0x6294}, //4442 #CJK UNIFIED IDEOGRAPH + {0x9D58, 0x62D7}, //4443 #CJK UNIFIED IDEOGRAPH + {0x9D59, 0x62D1}, //4444 #CJK UNIFIED IDEOGRAPH + {0x9D5A, 0x62BB}, //4445 #CJK UNIFIED IDEOGRAPH + {0x9D5B, 0x62CF}, //4446 #CJK UNIFIED IDEOGRAPH + {0x9D5C, 0x62FF}, //4447 #CJK UNIFIED IDEOGRAPH + {0x9D5D, 0x62C6}, //4448 #CJK UNIFIED IDEOGRAPH + {0x9D5E, 0x64D4}, //4449 #CJK UNIFIED IDEOGRAPH + {0x9D5F, 0x62C8}, //4450 #CJK UNIFIED IDEOGRAPH + {0x9D60, 0x62DC}, //4451 #CJK UNIFIED IDEOGRAPH + {0x9D61, 0x62CC}, //4452 #CJK UNIFIED IDEOGRAPH + {0x9D62, 0x62CA}, //4453 #CJK UNIFIED IDEOGRAPH + {0x9D63, 0x62C2}, //4454 #CJK UNIFIED IDEOGRAPH + {0x9D64, 0x62C7}, //4455 #CJK UNIFIED IDEOGRAPH + {0x9D65, 0x629B}, //4456 #CJK UNIFIED IDEOGRAPH + {0x9D66, 0x62C9}, //4457 #CJK UNIFIED IDEOGRAPH + {0x9D67, 0x630C}, //4458 #CJK UNIFIED IDEOGRAPH + {0x9D68, 0x62EE}, //4459 #CJK UNIFIED IDEOGRAPH + {0x9D69, 0x62F1}, //4460 #CJK UNIFIED IDEOGRAPH + {0x9D6A, 0x6327}, //4461 #CJK UNIFIED IDEOGRAPH + {0x9D6B, 0x6302}, //4462 #CJK UNIFIED IDEOGRAPH + {0x9D6C, 0x6308}, //4463 #CJK UNIFIED IDEOGRAPH + {0x9D6D, 0x62EF}, //4464 #CJK UNIFIED IDEOGRAPH + {0x9D6E, 0x62F5}, //4465 #CJK UNIFIED IDEOGRAPH + {0x9D6F, 0x6350}, //4466 #CJK UNIFIED IDEOGRAPH + {0x9D70, 0x633E}, //4467 #CJK UNIFIED IDEOGRAPH + {0x9D71, 0x634D}, //4468 #CJK UNIFIED IDEOGRAPH + {0x9D72, 0x641C}, //4469 #CJK UNIFIED IDEOGRAPH + {0x9D73, 0x634F}, //4470 #CJK UNIFIED IDEOGRAPH + {0x9D74, 0x6396}, //4471 #CJK UNIFIED IDEOGRAPH + {0x9D75, 0x638E}, //4472 #CJK UNIFIED IDEOGRAPH + {0x9D76, 0x6380}, //4473 #CJK UNIFIED IDEOGRAPH + {0x9D77, 0x63AB}, //4474 #CJK UNIFIED IDEOGRAPH + {0x9D78, 0x6376}, //4475 #CJK UNIFIED IDEOGRAPH + {0x9D79, 0x63A3}, //4476 #CJK UNIFIED IDEOGRAPH + {0x9D7A, 0x638F}, //4477 #CJK UNIFIED IDEOGRAPH + {0x9D7B, 0x6389}, //4478 #CJK UNIFIED IDEOGRAPH + {0x9D7C, 0x639F}, //4479 #CJK UNIFIED IDEOGRAPH + {0x9D7D, 0x63B5}, //4480 #CJK UNIFIED IDEOGRAPH + {0x9D7E, 0x636B}, //4481 #CJK UNIFIED IDEOGRAPH + {0x9D80, 0x6369}, //4482 #CJK UNIFIED IDEOGRAPH + {0x9D81, 0x63BE}, //4483 #CJK UNIFIED IDEOGRAPH + {0x9D82, 0x63E9}, //4484 #CJK UNIFIED IDEOGRAPH + {0x9D83, 0x63C0}, //4485 #CJK UNIFIED IDEOGRAPH + {0x9D84, 0x63C6}, //4486 #CJK UNIFIED IDEOGRAPH + {0x9D85, 0x63E3}, //4487 #CJK UNIFIED IDEOGRAPH + {0x9D86, 0x63C9}, //4488 #CJK UNIFIED IDEOGRAPH + {0x9D87, 0x63D2}, //4489 #CJK UNIFIED IDEOGRAPH + {0x9D88, 0x63F6}, //4490 #CJK UNIFIED IDEOGRAPH + {0x9D89, 0x63C4}, //4491 #CJK UNIFIED IDEOGRAPH + {0x9D8A, 0x6416}, //4492 #CJK UNIFIED IDEOGRAPH + {0x9D8B, 0x6434}, //4493 #CJK UNIFIED IDEOGRAPH + {0x9D8C, 0x6406}, //4494 #CJK UNIFIED IDEOGRAPH + {0x9D8D, 0x6413}, //4495 #CJK UNIFIED IDEOGRAPH + {0x9D8E, 0x6426}, //4496 #CJK UNIFIED IDEOGRAPH + {0x9D8F, 0x6436}, //4497 #CJK UNIFIED IDEOGRAPH + {0x9D90, 0x651D}, //4498 #CJK UNIFIED IDEOGRAPH + {0x9D91, 0x6417}, //4499 #CJK UNIFIED IDEOGRAPH + {0x9D92, 0x6428}, //4500 #CJK UNIFIED IDEOGRAPH + {0x9D93, 0x640F}, //4501 #CJK UNIFIED IDEOGRAPH + {0x9D94, 0x6467}, //4502 #CJK UNIFIED IDEOGRAPH + {0x9D95, 0x646F}, //4503 #CJK UNIFIED IDEOGRAPH + {0x9D96, 0x6476}, //4504 #CJK UNIFIED IDEOGRAPH + {0x9D97, 0x644E}, //4505 #CJK UNIFIED IDEOGRAPH + {0x9D98, 0x652A}, //4506 #CJK UNIFIED IDEOGRAPH + {0x9D99, 0x6495}, //4507 #CJK UNIFIED IDEOGRAPH + {0x9D9A, 0x6493}, //4508 #CJK UNIFIED IDEOGRAPH + {0x9D9B, 0x64A5}, //4509 #CJK UNIFIED IDEOGRAPH + {0x9D9C, 0x64A9}, //4510 #CJK UNIFIED IDEOGRAPH + {0x9D9D, 0x6488}, //4511 #CJK UNIFIED IDEOGRAPH + {0x9D9E, 0x64BC}, //4512 #CJK UNIFIED IDEOGRAPH + {0x9D9F, 0x64DA}, //4513 #CJK UNIFIED IDEOGRAPH + {0x9DA0, 0x64D2}, //4514 #CJK UNIFIED IDEOGRAPH + {0x9DA1, 0x64C5}, //4515 #CJK UNIFIED IDEOGRAPH + {0x9DA2, 0x64C7}, //4516 #CJK UNIFIED IDEOGRAPH + {0x9DA3, 0x64BB}, //4517 #CJK UNIFIED IDEOGRAPH + {0x9DA4, 0x64D8}, //4518 #CJK UNIFIED IDEOGRAPH + {0x9DA5, 0x64C2}, //4519 #CJK UNIFIED IDEOGRAPH + {0x9DA6, 0x64F1}, //4520 #CJK UNIFIED IDEOGRAPH + {0x9DA7, 0x64E7}, //4521 #CJK UNIFIED IDEOGRAPH + {0x9DA8, 0x8209}, //4522 #CJK UNIFIED IDEOGRAPH + {0x9DA9, 0x64E0}, //4523 #CJK UNIFIED IDEOGRAPH + {0x9DAA, 0x64E1}, //4524 #CJK UNIFIED IDEOGRAPH + {0x9DAB, 0x62AC}, //4525 #CJK UNIFIED IDEOGRAPH + {0x9DAC, 0x64E3}, //4526 #CJK UNIFIED IDEOGRAPH + {0x9DAD, 0x64EF}, //4527 #CJK UNIFIED IDEOGRAPH + {0x9DAE, 0x652C}, //4528 #CJK UNIFIED IDEOGRAPH + {0x9DAF, 0x64F6}, //4529 #CJK UNIFIED IDEOGRAPH + {0x9DB0, 0x64F4}, //4530 #CJK UNIFIED IDEOGRAPH + {0x9DB1, 0x64F2}, //4531 #CJK UNIFIED IDEOGRAPH + {0x9DB2, 0x64FA}, //4532 #CJK UNIFIED IDEOGRAPH + {0x9DB3, 0x6500}, //4533 #CJK UNIFIED IDEOGRAPH + {0x9DB4, 0x64FD}, //4534 #CJK UNIFIED IDEOGRAPH + {0x9DB5, 0x6518}, //4535 #CJK UNIFIED IDEOGRAPH + {0x9DB6, 0x651C}, //4536 #CJK UNIFIED IDEOGRAPH + {0x9DB7, 0x6505}, //4537 #CJK UNIFIED IDEOGRAPH + {0x9DB8, 0x6524}, //4538 #CJK UNIFIED IDEOGRAPH + {0x9DB9, 0x6523}, //4539 #CJK UNIFIED IDEOGRAPH + {0x9DBA, 0x652B}, //4540 #CJK UNIFIED IDEOGRAPH + {0x9DBB, 0x6534}, //4541 #CJK UNIFIED IDEOGRAPH + {0x9DBC, 0x6535}, //4542 #CJK UNIFIED IDEOGRAPH + {0x9DBD, 0x6537}, //4543 #CJK UNIFIED IDEOGRAPH + {0x9DBE, 0x6536}, //4544 #CJK UNIFIED IDEOGRAPH + {0x9DBF, 0x6538}, //4545 #CJK UNIFIED IDEOGRAPH + {0x9DC0, 0x754B}, //4546 #CJK UNIFIED IDEOGRAPH + {0x9DC1, 0x6548}, //4547 #CJK UNIFIED IDEOGRAPH + {0x9DC2, 0x6556}, //4548 #CJK UNIFIED IDEOGRAPH + {0x9DC3, 0x6555}, //4549 #CJK UNIFIED IDEOGRAPH + {0x9DC4, 0x654D}, //4550 #CJK UNIFIED IDEOGRAPH + {0x9DC5, 0x6558}, //4551 #CJK UNIFIED IDEOGRAPH + {0x9DC6, 0x655E}, //4552 #CJK UNIFIED IDEOGRAPH + {0x9DC7, 0x655D}, //4553 #CJK UNIFIED IDEOGRAPH + {0x9DC8, 0x6572}, //4554 #CJK UNIFIED IDEOGRAPH + {0x9DC9, 0x6578}, //4555 #CJK UNIFIED IDEOGRAPH + {0x9DCA, 0x6582}, //4556 #CJK UNIFIED IDEOGRAPH + {0x9DCB, 0x6583}, //4557 #CJK UNIFIED IDEOGRAPH + {0x9DCC, 0x8B8A}, //4558 #CJK UNIFIED IDEOGRAPH + {0x9DCD, 0x659B}, //4559 #CJK UNIFIED IDEOGRAPH + {0x9DCE, 0x659F}, //4560 #CJK UNIFIED IDEOGRAPH + {0x9DCF, 0x65AB}, //4561 #CJK UNIFIED IDEOGRAPH + {0x9DD0, 0x65B7}, //4562 #CJK UNIFIED IDEOGRAPH + {0x9DD1, 0x65C3}, //4563 #CJK UNIFIED IDEOGRAPH + {0x9DD2, 0x65C6}, //4564 #CJK UNIFIED IDEOGRAPH + {0x9DD3, 0x65C1}, //4565 #CJK UNIFIED IDEOGRAPH + {0x9DD4, 0x65C4}, //4566 #CJK UNIFIED IDEOGRAPH + {0x9DD5, 0x65CC}, //4567 #CJK UNIFIED IDEOGRAPH + {0x9DD6, 0x65D2}, //4568 #CJK UNIFIED IDEOGRAPH + {0x9DD7, 0x65DB}, //4569 #CJK UNIFIED IDEOGRAPH + {0x9DD8, 0x65D9}, //4570 #CJK UNIFIED IDEOGRAPH + {0x9DD9, 0x65E0}, //4571 #CJK UNIFIED IDEOGRAPH + {0x9DDA, 0x65E1}, //4572 #CJK UNIFIED IDEOGRAPH + {0x9DDB, 0x65F1}, //4573 #CJK UNIFIED IDEOGRAPH + {0x9DDC, 0x6772}, //4574 #CJK UNIFIED IDEOGRAPH + {0x9DDD, 0x660A}, //4575 #CJK UNIFIED IDEOGRAPH + {0x9DDE, 0x6603}, //4576 #CJK UNIFIED IDEOGRAPH + {0x9DDF, 0x65FB}, //4577 #CJK UNIFIED IDEOGRAPH + {0x9DE0, 0x6773}, //4578 #CJK UNIFIED IDEOGRAPH + {0x9DE1, 0x6635}, //4579 #CJK UNIFIED IDEOGRAPH + {0x9DE2, 0x6636}, //4580 #CJK UNIFIED IDEOGRAPH + {0x9DE3, 0x6634}, //4581 #CJK UNIFIED IDEOGRAPH + {0x9DE4, 0x661C}, //4582 #CJK UNIFIED IDEOGRAPH + {0x9DE5, 0x664F}, //4583 #CJK UNIFIED IDEOGRAPH + {0x9DE6, 0x6644}, //4584 #CJK UNIFIED IDEOGRAPH + {0x9DE7, 0x6649}, //4585 #CJK UNIFIED IDEOGRAPH + {0x9DE8, 0x6641}, //4586 #CJK UNIFIED IDEOGRAPH + {0x9DE9, 0x665E}, //4587 #CJK UNIFIED IDEOGRAPH + {0x9DEA, 0x665D}, //4588 #CJK UNIFIED IDEOGRAPH + {0x9DEB, 0x6664}, //4589 #CJK UNIFIED IDEOGRAPH + {0x9DEC, 0x6667}, //4590 #CJK UNIFIED IDEOGRAPH + {0x9DED, 0x6668}, //4591 #CJK UNIFIED IDEOGRAPH + {0x9DEE, 0x665F}, //4592 #CJK UNIFIED IDEOGRAPH + {0x9DEF, 0x6662}, //4593 #CJK UNIFIED IDEOGRAPH + {0x9DF0, 0x6670}, //4594 #CJK UNIFIED IDEOGRAPH + {0x9DF1, 0x6683}, //4595 #CJK UNIFIED IDEOGRAPH + {0x9DF2, 0x6688}, //4596 #CJK UNIFIED IDEOGRAPH + {0x9DF3, 0x668E}, //4597 #CJK UNIFIED IDEOGRAPH + {0x9DF4, 0x6689}, //4598 #CJK UNIFIED IDEOGRAPH + {0x9DF5, 0x6684}, //4599 #CJK UNIFIED IDEOGRAPH + {0x9DF6, 0x6698}, //4600 #CJK UNIFIED IDEOGRAPH + {0x9DF7, 0x669D}, //4601 #CJK UNIFIED IDEOGRAPH + {0x9DF8, 0x66C1}, //4602 #CJK UNIFIED IDEOGRAPH + {0x9DF9, 0x66B9}, //4603 #CJK UNIFIED IDEOGRAPH + {0x9DFA, 0x66C9}, //4604 #CJK UNIFIED IDEOGRAPH + {0x9DFB, 0x66BE}, //4605 #CJK UNIFIED IDEOGRAPH + {0x9DFC, 0x66BC}, //4606 #CJK UNIFIED IDEOGRAPH + {0x9E40, 0x66C4}, //4607 #CJK UNIFIED IDEOGRAPH + {0x9E41, 0x66B8}, //4608 #CJK UNIFIED IDEOGRAPH + {0x9E42, 0x66D6}, //4609 #CJK UNIFIED IDEOGRAPH + {0x9E43, 0x66DA}, //4610 #CJK UNIFIED IDEOGRAPH + {0x9E44, 0x66E0}, //4611 #CJK UNIFIED IDEOGRAPH + {0x9E45, 0x663F}, //4612 #CJK UNIFIED IDEOGRAPH + {0x9E46, 0x66E6}, //4613 #CJK UNIFIED IDEOGRAPH + {0x9E47, 0x66E9}, //4614 #CJK UNIFIED IDEOGRAPH + {0x9E48, 0x66F0}, //4615 #CJK UNIFIED IDEOGRAPH + {0x9E49, 0x66F5}, //4616 #CJK UNIFIED IDEOGRAPH + {0x9E4A, 0x66F7}, //4617 #CJK UNIFIED IDEOGRAPH + {0x9E4B, 0x670F}, //4618 #CJK UNIFIED IDEOGRAPH + {0x9E4C, 0x6716}, //4619 #CJK UNIFIED IDEOGRAPH + {0x9E4D, 0x671E}, //4620 #CJK UNIFIED IDEOGRAPH + {0x9E4E, 0x6726}, //4621 #CJK UNIFIED IDEOGRAPH + {0x9E4F, 0x6727}, //4622 #CJK UNIFIED IDEOGRAPH + {0x9E50, 0x9738}, //4623 #CJK UNIFIED IDEOGRAPH + {0x9E51, 0x672E}, //4624 #CJK UNIFIED IDEOGRAPH + {0x9E52, 0x673F}, //4625 #CJK UNIFIED IDEOGRAPH + {0x9E53, 0x6736}, //4626 #CJK UNIFIED IDEOGRAPH + {0x9E54, 0x6741}, //4627 #CJK UNIFIED IDEOGRAPH + {0x9E55, 0x6738}, //4628 #CJK UNIFIED IDEOGRAPH + {0x9E56, 0x6737}, //4629 #CJK UNIFIED IDEOGRAPH + {0x9E57, 0x6746}, //4630 #CJK UNIFIED IDEOGRAPH + {0x9E58, 0x675E}, //4631 #CJK UNIFIED IDEOGRAPH + {0x9E59, 0x6760}, //4632 #CJK UNIFIED IDEOGRAPH + {0x9E5A, 0x6759}, //4633 #CJK UNIFIED IDEOGRAPH + {0x9E5B, 0x6763}, //4634 #CJK UNIFIED IDEOGRAPH + {0x9E5C, 0x6764}, //4635 #CJK UNIFIED IDEOGRAPH + {0x9E5D, 0x6789}, //4636 #CJK UNIFIED IDEOGRAPH + {0x9E5E, 0x6770}, //4637 #CJK UNIFIED IDEOGRAPH + {0x9E5F, 0x67A9}, //4638 #CJK UNIFIED IDEOGRAPH + {0x9E60, 0x677C}, //4639 #CJK UNIFIED IDEOGRAPH + {0x9E61, 0x676A}, //4640 #CJK UNIFIED IDEOGRAPH + {0x9E62, 0x678C}, //4641 #CJK UNIFIED IDEOGRAPH + {0x9E63, 0x678B}, //4642 #CJK UNIFIED IDEOGRAPH + {0x9E64, 0x67A6}, //4643 #CJK UNIFIED IDEOGRAPH + {0x9E65, 0x67A1}, //4644 #CJK UNIFIED IDEOGRAPH + {0x9E66, 0x6785}, //4645 #CJK UNIFIED IDEOGRAPH + {0x9E67, 0x67B7}, //4646 #CJK UNIFIED IDEOGRAPH + {0x9E68, 0x67EF}, //4647 #CJK UNIFIED IDEOGRAPH + {0x9E69, 0x67B4}, //4648 #CJK UNIFIED IDEOGRAPH + {0x9E6A, 0x67EC}, //4649 #CJK UNIFIED IDEOGRAPH + {0x9E6B, 0x67B3}, //4650 #CJK UNIFIED IDEOGRAPH + {0x9E6C, 0x67E9}, //4651 #CJK UNIFIED IDEOGRAPH + {0x9E6D, 0x67B8}, //4652 #CJK UNIFIED IDEOGRAPH + {0x9E6E, 0x67E4}, //4653 #CJK UNIFIED IDEOGRAPH + {0x9E6F, 0x67DE}, //4654 #CJK UNIFIED IDEOGRAPH + {0x9E70, 0x67DD}, //4655 #CJK UNIFIED IDEOGRAPH + {0x9E71, 0x67E2}, //4656 #CJK UNIFIED IDEOGRAPH + {0x9E72, 0x67EE}, //4657 #CJK UNIFIED IDEOGRAPH + {0x9E73, 0x67B9}, //4658 #CJK UNIFIED IDEOGRAPH + {0x9E74, 0x67CE}, //4659 #CJK UNIFIED IDEOGRAPH + {0x9E75, 0x67C6}, //4660 #CJK UNIFIED IDEOGRAPH + {0x9E76, 0x67E7}, //4661 #CJK UNIFIED IDEOGRAPH + {0x9E77, 0x6A9C}, //4662 #CJK UNIFIED IDEOGRAPH + {0x9E78, 0x681E}, //4663 #CJK UNIFIED IDEOGRAPH + {0x9E79, 0x6846}, //4664 #CJK UNIFIED IDEOGRAPH + {0x9E7A, 0x6829}, //4665 #CJK UNIFIED IDEOGRAPH + {0x9E7B, 0x6840}, //4666 #CJK UNIFIED IDEOGRAPH + {0x9E7C, 0x684D}, //4667 #CJK UNIFIED IDEOGRAPH + {0x9E7D, 0x6832}, //4668 #CJK UNIFIED IDEOGRAPH + {0x9E7E, 0x684E}, //4669 #CJK UNIFIED IDEOGRAPH + {0x9E80, 0x68B3}, //4670 #CJK UNIFIED IDEOGRAPH + {0x9E81, 0x682B}, //4671 #CJK UNIFIED IDEOGRAPH + {0x9E82, 0x6859}, //4672 #CJK UNIFIED IDEOGRAPH + {0x9E83, 0x6863}, //4673 #CJK UNIFIED IDEOGRAPH + {0x9E84, 0x6877}, //4674 #CJK UNIFIED IDEOGRAPH + {0x9E85, 0x687F}, //4675 #CJK UNIFIED IDEOGRAPH + {0x9E86, 0x689F}, //4676 #CJK UNIFIED IDEOGRAPH + {0x9E87, 0x688F}, //4677 #CJK UNIFIED IDEOGRAPH + {0x9E88, 0x68AD}, //4678 #CJK UNIFIED IDEOGRAPH + {0x9E89, 0x6894}, //4679 #CJK UNIFIED IDEOGRAPH + {0x9E8A, 0x689D}, //4680 #CJK UNIFIED IDEOGRAPH + {0x9E8B, 0x689B}, //4681 #CJK UNIFIED IDEOGRAPH + {0x9E8C, 0x6883}, //4682 #CJK UNIFIED IDEOGRAPH + {0x9E8D, 0x6AAE}, //4683 #CJK UNIFIED IDEOGRAPH + {0x9E8E, 0x68B9}, //4684 #CJK UNIFIED IDEOGRAPH + {0x9E8F, 0x6874}, //4685 #CJK UNIFIED IDEOGRAPH + {0x9E90, 0x68B5}, //4686 #CJK UNIFIED IDEOGRAPH + {0x9E91, 0x68A0}, //4687 #CJK UNIFIED IDEOGRAPH + {0x9E92, 0x68BA}, //4688 #CJK UNIFIED IDEOGRAPH + {0x9E93, 0x690F}, //4689 #CJK UNIFIED IDEOGRAPH + {0x9E94, 0x688D}, //4690 #CJK UNIFIED IDEOGRAPH + {0x9E95, 0x687E}, //4691 #CJK UNIFIED IDEOGRAPH + {0x9E96, 0x6901}, //4692 #CJK UNIFIED IDEOGRAPH + {0x9E97, 0x68CA}, //4693 #CJK UNIFIED IDEOGRAPH + {0x9E98, 0x6908}, //4694 #CJK UNIFIED IDEOGRAPH + {0x9E99, 0x68D8}, //4695 #CJK UNIFIED IDEOGRAPH + {0x9E9A, 0x6922}, //4696 #CJK UNIFIED IDEOGRAPH + {0x9E9B, 0x6926}, //4697 #CJK UNIFIED IDEOGRAPH + {0x9E9C, 0x68E1}, //4698 #CJK UNIFIED IDEOGRAPH + {0x9E9D, 0x690C}, //4699 #CJK UNIFIED IDEOGRAPH + {0x9E9E, 0x68CD}, //4700 #CJK UNIFIED IDEOGRAPH + {0x9E9F, 0x68D4}, //4701 #CJK UNIFIED IDEOGRAPH + {0x9EA0, 0x68E7}, //4702 #CJK UNIFIED IDEOGRAPH + {0x9EA1, 0x68D5}, //4703 #CJK UNIFIED IDEOGRAPH + {0x9EA2, 0x6936}, //4704 #CJK UNIFIED IDEOGRAPH + {0x9EA3, 0x6912}, //4705 #CJK UNIFIED IDEOGRAPH + {0x9EA4, 0x6904}, //4706 #CJK UNIFIED IDEOGRAPH + {0x9EA5, 0x68D7}, //4707 #CJK UNIFIED IDEOGRAPH + {0x9EA6, 0x68E3}, //4708 #CJK UNIFIED IDEOGRAPH + {0x9EA7, 0x6925}, //4709 #CJK UNIFIED IDEOGRAPH + {0x9EA8, 0x68F9}, //4710 #CJK UNIFIED IDEOGRAPH + {0x9EA9, 0x68E0}, //4711 #CJK UNIFIED IDEOGRAPH + {0x9EAA, 0x68EF}, //4712 #CJK UNIFIED IDEOGRAPH + {0x9EAB, 0x6928}, //4713 #CJK UNIFIED IDEOGRAPH + {0x9EAC, 0x692A}, //4714 #CJK UNIFIED IDEOGRAPH + {0x9EAD, 0x691A}, //4715 #CJK UNIFIED IDEOGRAPH + {0x9EAE, 0x6923}, //4716 #CJK UNIFIED IDEOGRAPH + {0x9EAF, 0x6921}, //4717 #CJK UNIFIED IDEOGRAPH + {0x9EB0, 0x68C6}, //4718 #CJK UNIFIED IDEOGRAPH + {0x9EB1, 0x6979}, //4719 #CJK UNIFIED IDEOGRAPH + {0x9EB2, 0x6977}, //4720 #CJK UNIFIED IDEOGRAPH + {0x9EB3, 0x695C}, //4721 #CJK UNIFIED IDEOGRAPH + {0x9EB4, 0x6978}, //4722 #CJK UNIFIED IDEOGRAPH + {0x9EB5, 0x696B}, //4723 #CJK UNIFIED IDEOGRAPH + {0x9EB6, 0x6954}, //4724 #CJK UNIFIED IDEOGRAPH + {0x9EB7, 0x697E}, //4725 #CJK UNIFIED IDEOGRAPH + {0x9EB8, 0x696E}, //4726 #CJK UNIFIED IDEOGRAPH + {0x9EB9, 0x6939}, //4727 #CJK UNIFIED IDEOGRAPH + {0x9EBA, 0x6974}, //4728 #CJK UNIFIED IDEOGRAPH + {0x9EBB, 0x693D}, //4729 #CJK UNIFIED IDEOGRAPH + {0x9EBC, 0x6959}, //4730 #CJK UNIFIED IDEOGRAPH + {0x9EBD, 0x6930}, //4731 #CJK UNIFIED IDEOGRAPH + {0x9EBE, 0x6961}, //4732 #CJK UNIFIED IDEOGRAPH + {0x9EBF, 0x695E}, //4733 #CJK UNIFIED IDEOGRAPH + {0x9EC0, 0x695D}, //4734 #CJK UNIFIED IDEOGRAPH + {0x9EC1, 0x6981}, //4735 #CJK UNIFIED IDEOGRAPH + {0x9EC2, 0x696A}, //4736 #CJK UNIFIED IDEOGRAPH + {0x9EC3, 0x69B2}, //4737 #CJK UNIFIED IDEOGRAPH + {0x9EC4, 0x69AE}, //4738 #CJK UNIFIED IDEOGRAPH + {0x9EC5, 0x69D0}, //4739 #CJK UNIFIED IDEOGRAPH + {0x9EC6, 0x69BF}, //4740 #CJK UNIFIED IDEOGRAPH + {0x9EC7, 0x69C1}, //4741 #CJK UNIFIED IDEOGRAPH + {0x9EC8, 0x69D3}, //4742 #CJK UNIFIED IDEOGRAPH + {0x9EC9, 0x69BE}, //4743 #CJK UNIFIED IDEOGRAPH + {0x9ECA, 0x69CE}, //4744 #CJK UNIFIED IDEOGRAPH + {0x9ECB, 0x5BE8}, //4745 #CJK UNIFIED IDEOGRAPH + {0x9ECC, 0x69CA}, //4746 #CJK UNIFIED IDEOGRAPH + {0x9ECD, 0x69DD}, //4747 #CJK UNIFIED IDEOGRAPH + {0x9ECE, 0x69BB}, //4748 #CJK UNIFIED IDEOGRAPH + {0x9ECF, 0x69C3}, //4749 #CJK UNIFIED IDEOGRAPH + {0x9ED0, 0x69A7}, //4750 #CJK UNIFIED IDEOGRAPH + {0x9ED1, 0x6A2E}, //4751 #CJK UNIFIED IDEOGRAPH + {0x9ED2, 0x6991}, //4752 #CJK UNIFIED IDEOGRAPH + {0x9ED3, 0x69A0}, //4753 #CJK UNIFIED IDEOGRAPH + {0x9ED4, 0x699C}, //4754 #CJK UNIFIED IDEOGRAPH + {0x9ED5, 0x6995}, //4755 #CJK UNIFIED IDEOGRAPH + {0x9ED6, 0x69B4}, //4756 #CJK UNIFIED IDEOGRAPH + {0x9ED7, 0x69DE}, //4757 #CJK UNIFIED IDEOGRAPH + {0x9ED8, 0x69E8}, //4758 #CJK UNIFIED IDEOGRAPH + {0x9ED9, 0x6A02}, //4759 #CJK UNIFIED IDEOGRAPH + {0x9EDA, 0x6A1B}, //4760 #CJK UNIFIED IDEOGRAPH + {0x9EDB, 0x69FF}, //4761 #CJK UNIFIED IDEOGRAPH + {0x9EDC, 0x6B0A}, //4762 #CJK UNIFIED IDEOGRAPH + {0x9EDD, 0x69F9}, //4763 #CJK UNIFIED IDEOGRAPH + {0x9EDE, 0x69F2}, //4764 #CJK UNIFIED IDEOGRAPH + {0x9EDF, 0x69E7}, //4765 #CJK UNIFIED IDEOGRAPH + {0x9EE0, 0x6A05}, //4766 #CJK UNIFIED IDEOGRAPH + {0x9EE1, 0x69B1}, //4767 #CJK UNIFIED IDEOGRAPH + {0x9EE2, 0x6A1E}, //4768 #CJK UNIFIED IDEOGRAPH + {0x9EE3, 0x69ED}, //4769 #CJK UNIFIED IDEOGRAPH + {0x9EE4, 0x6A14}, //4770 #CJK UNIFIED IDEOGRAPH + {0x9EE5, 0x69EB}, //4771 #CJK UNIFIED IDEOGRAPH + {0x9EE6, 0x6A0A}, //4772 #CJK UNIFIED IDEOGRAPH + {0x9EE7, 0x6A12}, //4773 #CJK UNIFIED IDEOGRAPH + {0x9EE8, 0x6AC1}, //4774 #CJK UNIFIED IDEOGRAPH + {0x9EE9, 0x6A23}, //4775 #CJK UNIFIED IDEOGRAPH + {0x9EEA, 0x6A13}, //4776 #CJK UNIFIED IDEOGRAPH + {0x9EEB, 0x6A44}, //4777 #CJK UNIFIED IDEOGRAPH + {0x9EEC, 0x6A0C}, //4778 #CJK UNIFIED IDEOGRAPH + {0x9EED, 0x6A72}, //4779 #CJK UNIFIED IDEOGRAPH + {0x9EEE, 0x6A36}, //4780 #CJK UNIFIED IDEOGRAPH + {0x9EEF, 0x6A78}, //4781 #CJK UNIFIED IDEOGRAPH + {0x9EF0, 0x6A47}, //4782 #CJK UNIFIED IDEOGRAPH + {0x9EF1, 0x6A62}, //4783 #CJK UNIFIED IDEOGRAPH + {0x9EF2, 0x6A59}, //4784 #CJK UNIFIED IDEOGRAPH + {0x9EF3, 0x6A66}, //4785 #CJK UNIFIED IDEOGRAPH + {0x9EF4, 0x6A48}, //4786 #CJK UNIFIED IDEOGRAPH + {0x9EF5, 0x6A38}, //4787 #CJK UNIFIED IDEOGRAPH + {0x9EF6, 0x6A22}, //4788 #CJK UNIFIED IDEOGRAPH + {0x9EF7, 0x6A90}, //4789 #CJK UNIFIED IDEOGRAPH + {0x9EF8, 0x6A8D}, //4790 #CJK UNIFIED IDEOGRAPH + {0x9EF9, 0x6AA0}, //4791 #CJK UNIFIED IDEOGRAPH + {0x9EFA, 0x6A84}, //4792 #CJK UNIFIED IDEOGRAPH + {0x9EFB, 0x6AA2}, //4793 #CJK UNIFIED IDEOGRAPH + {0x9EFC, 0x6AA3}, //4794 #CJK UNIFIED IDEOGRAPH + {0x9F40, 0x6A97}, //4795 #CJK UNIFIED IDEOGRAPH + {0x9F41, 0x8617}, //4796 #CJK UNIFIED IDEOGRAPH + {0x9F42, 0x6ABB}, //4797 #CJK UNIFIED IDEOGRAPH + {0x9F43, 0x6AC3}, //4798 #CJK UNIFIED IDEOGRAPH + {0x9F44, 0x6AC2}, //4799 #CJK UNIFIED IDEOGRAPH + {0x9F45, 0x6AB8}, //4800 #CJK UNIFIED IDEOGRAPH + {0x9F46, 0x6AB3}, //4801 #CJK UNIFIED IDEOGRAPH + {0x9F47, 0x6AAC}, //4802 #CJK UNIFIED IDEOGRAPH + {0x9F48, 0x6ADE}, //4803 #CJK UNIFIED IDEOGRAPH + {0x9F49, 0x6AD1}, //4804 #CJK UNIFIED IDEOGRAPH + {0x9F4A, 0x6ADF}, //4805 #CJK UNIFIED IDEOGRAPH + {0x9F4B, 0x6AAA}, //4806 #CJK UNIFIED IDEOGRAPH + {0x9F4C, 0x6ADA}, //4807 #CJK UNIFIED IDEOGRAPH + {0x9F4D, 0x6AEA}, //4808 #CJK UNIFIED IDEOGRAPH + {0x9F4E, 0x6AFB}, //4809 #CJK UNIFIED IDEOGRAPH + {0x9F4F, 0x6B05}, //4810 #CJK UNIFIED IDEOGRAPH + {0x9F50, 0x8616}, //4811 #CJK UNIFIED IDEOGRAPH + {0x9F51, 0x6AFA}, //4812 #CJK UNIFIED IDEOGRAPH + {0x9F52, 0x6B12}, //4813 #CJK UNIFIED IDEOGRAPH + {0x9F53, 0x6B16}, //4814 #CJK UNIFIED IDEOGRAPH + {0x9F54, 0x9B31}, //4815 #CJK UNIFIED IDEOGRAPH + {0x9F55, 0x6B1F}, //4816 #CJK UNIFIED IDEOGRAPH + {0x9F56, 0x6B38}, //4817 #CJK UNIFIED IDEOGRAPH + {0x9F57, 0x6B37}, //4818 #CJK UNIFIED IDEOGRAPH + {0x9F58, 0x76DC}, //4819 #CJK UNIFIED IDEOGRAPH + {0x9F59, 0x6B39}, //4820 #CJK UNIFIED IDEOGRAPH + {0x9F5A, 0x98EE}, //4821 #CJK UNIFIED IDEOGRAPH + {0x9F5B, 0x6B47}, //4822 #CJK UNIFIED IDEOGRAPH + {0x9F5C, 0x6B43}, //4823 #CJK UNIFIED IDEOGRAPH + {0x9F5D, 0x6B49}, //4824 #CJK UNIFIED IDEOGRAPH + {0x9F5E, 0x6B50}, //4825 #CJK UNIFIED IDEOGRAPH + {0x9F5F, 0x6B59}, //4826 #CJK UNIFIED IDEOGRAPH + {0x9F60, 0x6B54}, //4827 #CJK UNIFIED IDEOGRAPH + {0x9F61, 0x6B5B}, //4828 #CJK UNIFIED IDEOGRAPH + {0x9F62, 0x6B5F}, //4829 #CJK UNIFIED IDEOGRAPH + {0x9F63, 0x6B61}, //4830 #CJK UNIFIED IDEOGRAPH + {0x9F64, 0x6B78}, //4831 #CJK UNIFIED IDEOGRAPH + {0x9F65, 0x6B79}, //4832 #CJK UNIFIED IDEOGRAPH + {0x9F66, 0x6B7F}, //4833 #CJK UNIFIED IDEOGRAPH + {0x9F67, 0x6B80}, //4834 #CJK UNIFIED IDEOGRAPH + {0x9F68, 0x6B84}, //4835 #CJK UNIFIED IDEOGRAPH + {0x9F69, 0x6B83}, //4836 #CJK UNIFIED IDEOGRAPH + {0x9F6A, 0x6B8D}, //4837 #CJK UNIFIED IDEOGRAPH + {0x9F6B, 0x6B98}, //4838 #CJK UNIFIED IDEOGRAPH + {0x9F6C, 0x6B95}, //4839 #CJK UNIFIED IDEOGRAPH + {0x9F6D, 0x6B9E}, //4840 #CJK UNIFIED IDEOGRAPH + {0x9F6E, 0x6BA4}, //4841 #CJK UNIFIED IDEOGRAPH + {0x9F6F, 0x6BAA}, //4842 #CJK UNIFIED IDEOGRAPH + {0x9F70, 0x6BAB}, //4843 #CJK UNIFIED IDEOGRAPH + {0x9F71, 0x6BAF}, //4844 #CJK UNIFIED IDEOGRAPH + {0x9F72, 0x6BB2}, //4845 #CJK UNIFIED IDEOGRAPH + {0x9F73, 0x6BB1}, //4846 #CJK UNIFIED IDEOGRAPH + {0x9F74, 0x6BB3}, //4847 #CJK UNIFIED IDEOGRAPH + {0x9F75, 0x6BB7}, //4848 #CJK UNIFIED IDEOGRAPH + {0x9F76, 0x6BBC}, //4849 #CJK UNIFIED IDEOGRAPH + {0x9F77, 0x6BC6}, //4850 #CJK UNIFIED IDEOGRAPH + {0x9F78, 0x6BCB}, //4851 #CJK UNIFIED IDEOGRAPH + {0x9F79, 0x6BD3}, //4852 #CJK UNIFIED IDEOGRAPH + {0x9F7A, 0x6BDF}, //4853 #CJK UNIFIED IDEOGRAPH + {0x9F7B, 0x6BEC}, //4854 #CJK UNIFIED IDEOGRAPH + {0x9F7C, 0x6BEB}, //4855 #CJK UNIFIED IDEOGRAPH + {0x9F7D, 0x6BF3}, //4856 #CJK UNIFIED IDEOGRAPH + {0x9F7E, 0x6BEF}, //4857 #CJK UNIFIED IDEOGRAPH + {0x9F80, 0x9EBE}, //4858 #CJK UNIFIED IDEOGRAPH + {0x9F81, 0x6C08}, //4859 #CJK UNIFIED IDEOGRAPH + {0x9F82, 0x6C13}, //4860 #CJK UNIFIED IDEOGRAPH + {0x9F83, 0x6C14}, //4861 #CJK UNIFIED IDEOGRAPH + {0x9F84, 0x6C1B}, //4862 #CJK UNIFIED IDEOGRAPH + {0x9F85, 0x6C24}, //4863 #CJK UNIFIED IDEOGRAPH + {0x9F86, 0x6C23}, //4864 #CJK UNIFIED IDEOGRAPH + {0x9F87, 0x6C5E}, //4865 #CJK UNIFIED IDEOGRAPH + {0x9F88, 0x6C55}, //4866 #CJK UNIFIED IDEOGRAPH + {0x9F89, 0x6C62}, //4867 #CJK UNIFIED IDEOGRAPH + {0x9F8A, 0x6C6A}, //4868 #CJK UNIFIED IDEOGRAPH + {0x9F8B, 0x6C82}, //4869 #CJK UNIFIED IDEOGRAPH + {0x9F8C, 0x6C8D}, //4870 #CJK UNIFIED IDEOGRAPH + {0x9F8D, 0x6C9A}, //4871 #CJK UNIFIED IDEOGRAPH + {0x9F8E, 0x6C81}, //4872 #CJK UNIFIED IDEOGRAPH + {0x9F8F, 0x6C9B}, //4873 #CJK UNIFIED IDEOGRAPH + {0x9F90, 0x6C7E}, //4874 #CJK UNIFIED IDEOGRAPH + {0x9F91, 0x6C68}, //4875 #CJK UNIFIED IDEOGRAPH + {0x9F92, 0x6C73}, //4876 #CJK UNIFIED IDEOGRAPH + {0x9F93, 0x6C92}, //4877 #CJK UNIFIED IDEOGRAPH + {0x9F94, 0x6C90}, //4878 #CJK UNIFIED IDEOGRAPH + {0x9F95, 0x6CC4}, //4879 #CJK UNIFIED IDEOGRAPH + {0x9F96, 0x6CF1}, //4880 #CJK UNIFIED IDEOGRAPH + {0x9F97, 0x6CD3}, //4881 #CJK UNIFIED IDEOGRAPH + {0x9F98, 0x6CBD}, //4882 #CJK UNIFIED IDEOGRAPH + {0x9F99, 0x6CD7}, //4883 #CJK UNIFIED IDEOGRAPH + {0x9F9A, 0x6CC5}, //4884 #CJK UNIFIED IDEOGRAPH + {0x9F9B, 0x6CDD}, //4885 #CJK UNIFIED IDEOGRAPH + {0x9F9C, 0x6CAE}, //4886 #CJK UNIFIED IDEOGRAPH + {0x9F9D, 0x6CB1}, //4887 #CJK UNIFIED IDEOGRAPH + {0x9F9E, 0x6CBE}, //4888 #CJK UNIFIED IDEOGRAPH + {0x9F9F, 0x6CBA}, //4889 #CJK UNIFIED IDEOGRAPH + {0x9FA0, 0x6CDB}, //4890 #CJK UNIFIED IDEOGRAPH + {0x9FA1, 0x6CEF}, //4891 #CJK UNIFIED IDEOGRAPH + {0x9FA2, 0x6CD9}, //4892 #CJK UNIFIED IDEOGRAPH + {0x9FA3, 0x6CEA}, //4893 #CJK UNIFIED IDEOGRAPH + {0x9FA4, 0x6D1F}, //4894 #CJK UNIFIED IDEOGRAPH + {0x9FA5, 0x884D}, //4895 #CJK UNIFIED IDEOGRAPH + {0x9FA6, 0x6D36}, //4896 #CJK UNIFIED IDEOGRAPH + {0x9FA7, 0x6D2B}, //4897 #CJK UNIFIED IDEOGRAPH + {0x9FA8, 0x6D3D}, //4898 #CJK UNIFIED IDEOGRAPH + {0x9FA9, 0x6D38}, //4899 #CJK UNIFIED IDEOGRAPH + {0x9FAA, 0x6D19}, //4900 #CJK UNIFIED IDEOGRAPH + {0x9FAB, 0x6D35}, //4901 #CJK UNIFIED IDEOGRAPH + {0x9FAC, 0x6D33}, //4902 #CJK UNIFIED IDEOGRAPH + {0x9FAD, 0x6D12}, //4903 #CJK UNIFIED IDEOGRAPH + {0x9FAE, 0x6D0C}, //4904 #CJK UNIFIED IDEOGRAPH + {0x9FAF, 0x6D63}, //4905 #CJK UNIFIED IDEOGRAPH + {0x9FB0, 0x6D93}, //4906 #CJK UNIFIED IDEOGRAPH + {0x9FB1, 0x6D64}, //4907 #CJK UNIFIED IDEOGRAPH + {0x9FB2, 0x6D5A}, //4908 #CJK UNIFIED IDEOGRAPH + {0x9FB3, 0x6D79}, //4909 #CJK UNIFIED IDEOGRAPH + {0x9FB4, 0x6D59}, //4910 #CJK UNIFIED IDEOGRAPH + {0x9FB5, 0x6D8E}, //4911 #CJK UNIFIED IDEOGRAPH + {0x9FB6, 0x6D95}, //4912 #CJK UNIFIED IDEOGRAPH + {0x9FB7, 0x6FE4}, //4913 #CJK UNIFIED IDEOGRAPH + {0x9FB8, 0x6D85}, //4914 #CJK UNIFIED IDEOGRAPH + {0x9FB9, 0x6DF9}, //4915 #CJK UNIFIED IDEOGRAPH + {0x9FBA, 0x6E15}, //4916 #CJK UNIFIED IDEOGRAPH + {0x9FBB, 0x6E0A}, //4917 #CJK UNIFIED IDEOGRAPH + {0x9FBC, 0x6DB5}, //4918 #CJK UNIFIED IDEOGRAPH + {0x9FBD, 0x6DC7}, //4919 #CJK UNIFIED IDEOGRAPH + {0x9FBE, 0x6DE6}, //4920 #CJK UNIFIED IDEOGRAPH + {0x9FBF, 0x6DB8}, //4921 #CJK UNIFIED IDEOGRAPH + {0x9FC0, 0x6DC6}, //4922 #CJK UNIFIED IDEOGRAPH + {0x9FC1, 0x6DEC}, //4923 #CJK UNIFIED IDEOGRAPH + {0x9FC2, 0x6DDE}, //4924 #CJK UNIFIED IDEOGRAPH + {0x9FC3, 0x6DCC}, //4925 #CJK UNIFIED IDEOGRAPH + {0x9FC4, 0x6DE8}, //4926 #CJK UNIFIED IDEOGRAPH + {0x9FC5, 0x6DD2}, //4927 #CJK UNIFIED IDEOGRAPH + {0x9FC6, 0x6DC5}, //4928 #CJK UNIFIED IDEOGRAPH + {0x9FC7, 0x6DFA}, //4929 #CJK UNIFIED IDEOGRAPH + {0x9FC8, 0x6DD9}, //4930 #CJK UNIFIED IDEOGRAPH + {0x9FC9, 0x6DE4}, //4931 #CJK UNIFIED IDEOGRAPH + {0x9FCA, 0x6DD5}, //4932 #CJK UNIFIED IDEOGRAPH + {0x9FCB, 0x6DEA}, //4933 #CJK UNIFIED IDEOGRAPH + {0x9FCC, 0x6DEE}, //4934 #CJK UNIFIED IDEOGRAPH + {0x9FCD, 0x6E2D}, //4935 #CJK UNIFIED IDEOGRAPH + {0x9FCE, 0x6E6E}, //4936 #CJK UNIFIED IDEOGRAPH + {0x9FCF, 0x6E2E}, //4937 #CJK UNIFIED IDEOGRAPH + {0x9FD0, 0x6E19}, //4938 #CJK UNIFIED IDEOGRAPH + {0x9FD1, 0x6E72}, //4939 #CJK UNIFIED IDEOGRAPH + {0x9FD2, 0x6E5F}, //4940 #CJK UNIFIED IDEOGRAPH + {0x9FD3, 0x6E3E}, //4941 #CJK UNIFIED IDEOGRAPH + {0x9FD4, 0x6E23}, //4942 #CJK UNIFIED IDEOGRAPH + {0x9FD5, 0x6E6B}, //4943 #CJK UNIFIED IDEOGRAPH + {0x9FD6, 0x6E2B}, //4944 #CJK UNIFIED IDEOGRAPH + {0x9FD7, 0x6E76}, //4945 #CJK UNIFIED IDEOGRAPH + {0x9FD8, 0x6E4D}, //4946 #CJK UNIFIED IDEOGRAPH + {0x9FD9, 0x6E1F}, //4947 #CJK UNIFIED IDEOGRAPH + {0x9FDA, 0x6E43}, //4948 #CJK UNIFIED IDEOGRAPH + {0x9FDB, 0x6E3A}, //4949 #CJK UNIFIED IDEOGRAPH + {0x9FDC, 0x6E4E}, //4950 #CJK UNIFIED IDEOGRAPH + {0x9FDD, 0x6E24}, //4951 #CJK UNIFIED IDEOGRAPH + {0x9FDE, 0x6EFF}, //4952 #CJK UNIFIED IDEOGRAPH + {0x9FDF, 0x6E1D}, //4953 #CJK UNIFIED IDEOGRAPH + {0x9FE0, 0x6E38}, //4954 #CJK UNIFIED IDEOGRAPH + {0x9FE1, 0x6E82}, //4955 #CJK UNIFIED IDEOGRAPH + {0x9FE2, 0x6EAA}, //4956 #CJK UNIFIED IDEOGRAPH + {0x9FE3, 0x6E98}, //4957 #CJK UNIFIED IDEOGRAPH + {0x9FE4, 0x6EC9}, //4958 #CJK UNIFIED IDEOGRAPH + {0x9FE5, 0x6EB7}, //4959 #CJK UNIFIED IDEOGRAPH + {0x9FE6, 0x6ED3}, //4960 #CJK UNIFIED IDEOGRAPH + {0x9FE7, 0x6EBD}, //4961 #CJK UNIFIED IDEOGRAPH + {0x9FE8, 0x6EAF}, //4962 #CJK UNIFIED IDEOGRAPH + {0x9FE9, 0x6EC4}, //4963 #CJK UNIFIED IDEOGRAPH + {0x9FEA, 0x6EB2}, //4964 #CJK UNIFIED IDEOGRAPH + {0x9FEB, 0x6ED4}, //4965 #CJK UNIFIED IDEOGRAPH + {0x9FEC, 0x6ED5}, //4966 #CJK UNIFIED IDEOGRAPH + {0x9FED, 0x6E8F}, //4967 #CJK UNIFIED IDEOGRAPH + {0x9FEE, 0x6EA5}, //4968 #CJK UNIFIED IDEOGRAPH + {0x9FEF, 0x6EC2}, //4969 #CJK UNIFIED IDEOGRAPH + {0x9FF0, 0x6E9F}, //4970 #CJK UNIFIED IDEOGRAPH + {0x9FF1, 0x6F41}, //4971 #CJK UNIFIED IDEOGRAPH + {0x9FF2, 0x6F11}, //4972 #CJK UNIFIED IDEOGRAPH + {0x9FF3, 0x704C}, //4973 #CJK UNIFIED IDEOGRAPH + {0x9FF4, 0x6EEC}, //4974 #CJK UNIFIED IDEOGRAPH + {0x9FF5, 0x6EF8}, //4975 #CJK UNIFIED IDEOGRAPH + {0x9FF6, 0x6EFE}, //4976 #CJK UNIFIED IDEOGRAPH + {0x9FF7, 0x6F3F}, //4977 #CJK UNIFIED IDEOGRAPH + {0x9FF8, 0x6EF2}, //4978 #CJK UNIFIED IDEOGRAPH + {0x9FF9, 0x6F31}, //4979 #CJK UNIFIED IDEOGRAPH + {0x9FFA, 0x6EEF}, //4980 #CJK UNIFIED IDEOGRAPH + {0x9FFB, 0x6F32}, //4981 #CJK UNIFIED IDEOGRAPH + {0x9FFC, 0x6ECC}, //4982 #CJK UNIFIED IDEOGRAPH + {0xE040, 0x6F3E}, //4983 #CJK UNIFIED IDEOGRAPH + {0xE041, 0x6F13}, //4984 #CJK UNIFIED IDEOGRAPH + {0xE042, 0x6EF7}, //4985 #CJK UNIFIED IDEOGRAPH + {0xE043, 0x6F86}, //4986 #CJK UNIFIED IDEOGRAPH + {0xE044, 0x6F7A}, //4987 #CJK UNIFIED IDEOGRAPH + {0xE045, 0x6F78}, //4988 #CJK UNIFIED IDEOGRAPH + {0xE046, 0x6F81}, //4989 #CJK UNIFIED IDEOGRAPH + {0xE047, 0x6F80}, //4990 #CJK UNIFIED IDEOGRAPH + {0xE048, 0x6F6F}, //4991 #CJK UNIFIED IDEOGRAPH + {0xE049, 0x6F5B}, //4992 #CJK UNIFIED IDEOGRAPH + {0xE04A, 0x6FF3}, //4993 #CJK UNIFIED IDEOGRAPH + {0xE04B, 0x6F6D}, //4994 #CJK UNIFIED IDEOGRAPH + {0xE04C, 0x6F82}, //4995 #CJK UNIFIED IDEOGRAPH + {0xE04D, 0x6F7C}, //4996 #CJK UNIFIED IDEOGRAPH + {0xE04E, 0x6F58}, //4997 #CJK UNIFIED IDEOGRAPH + {0xE04F, 0x6F8E}, //4998 #CJK UNIFIED IDEOGRAPH + {0xE050, 0x6F91}, //4999 #CJK UNIFIED IDEOGRAPH + {0xE051, 0x6FC2}, //5000 #CJK UNIFIED IDEOGRAPH + {0xE052, 0x6F66}, //5001 #CJK UNIFIED IDEOGRAPH + {0xE053, 0x6FB3}, //5002 #CJK UNIFIED IDEOGRAPH + {0xE054, 0x6FA3}, //5003 #CJK UNIFIED IDEOGRAPH + {0xE055, 0x6FA1}, //5004 #CJK UNIFIED IDEOGRAPH + {0xE056, 0x6FA4}, //5005 #CJK UNIFIED IDEOGRAPH + {0xE057, 0x6FB9}, //5006 #CJK UNIFIED IDEOGRAPH + {0xE058, 0x6FC6}, //5007 #CJK UNIFIED IDEOGRAPH + {0xE059, 0x6FAA}, //5008 #CJK UNIFIED IDEOGRAPH + {0xE05A, 0x6FDF}, //5009 #CJK UNIFIED IDEOGRAPH + {0xE05B, 0x6FD5}, //5010 #CJK UNIFIED IDEOGRAPH + {0xE05C, 0x6FEC}, //5011 #CJK UNIFIED IDEOGRAPH + {0xE05D, 0x6FD4}, //5012 #CJK UNIFIED IDEOGRAPH + {0xE05E, 0x6FD8}, //5013 #CJK UNIFIED IDEOGRAPH + {0xE05F, 0x6FF1}, //5014 #CJK UNIFIED IDEOGRAPH + {0xE060, 0x6FEE}, //5015 #CJK UNIFIED IDEOGRAPH + {0xE061, 0x6FDB}, //5016 #CJK UNIFIED IDEOGRAPH + {0xE062, 0x7009}, //5017 #CJK UNIFIED IDEOGRAPH + {0xE063, 0x700B}, //5018 #CJK UNIFIED IDEOGRAPH + {0xE064, 0x6FFA}, //5019 #CJK UNIFIED IDEOGRAPH + {0xE065, 0x7011}, //5020 #CJK UNIFIED IDEOGRAPH + {0xE066, 0x7001}, //5021 #CJK UNIFIED IDEOGRAPH + {0xE067, 0x700F}, //5022 #CJK UNIFIED IDEOGRAPH + {0xE068, 0x6FFE}, //5023 #CJK UNIFIED IDEOGRAPH + {0xE069, 0x701B}, //5024 #CJK UNIFIED IDEOGRAPH + {0xE06A, 0x701A}, //5025 #CJK UNIFIED IDEOGRAPH + {0xE06B, 0x6F74}, //5026 #CJK UNIFIED IDEOGRAPH + {0xE06C, 0x701D}, //5027 #CJK UNIFIED IDEOGRAPH + {0xE06D, 0x7018}, //5028 #CJK UNIFIED IDEOGRAPH + {0xE06E, 0x701F}, //5029 #CJK UNIFIED IDEOGRAPH + {0xE06F, 0x7030}, //5030 #CJK UNIFIED IDEOGRAPH + {0xE070, 0x703E}, //5031 #CJK UNIFIED IDEOGRAPH + {0xE071, 0x7032}, //5032 #CJK UNIFIED IDEOGRAPH + {0xE072, 0x7051}, //5033 #CJK UNIFIED IDEOGRAPH + {0xE073, 0x7063}, //5034 #CJK UNIFIED IDEOGRAPH + {0xE074, 0x7099}, //5035 #CJK UNIFIED IDEOGRAPH + {0xE075, 0x7092}, //5036 #CJK UNIFIED IDEOGRAPH + {0xE076, 0x70AF}, //5037 #CJK UNIFIED IDEOGRAPH + {0xE077, 0x70F1}, //5038 #CJK UNIFIED IDEOGRAPH + {0xE078, 0x70AC}, //5039 #CJK UNIFIED IDEOGRAPH + {0xE079, 0x70B8}, //5040 #CJK UNIFIED IDEOGRAPH + {0xE07A, 0x70B3}, //5041 #CJK UNIFIED IDEOGRAPH + {0xE07B, 0x70AE}, //5042 #CJK UNIFIED IDEOGRAPH + {0xE07C, 0x70DF}, //5043 #CJK UNIFIED IDEOGRAPH + {0xE07D, 0x70CB}, //5044 #CJK UNIFIED IDEOGRAPH + {0xE07E, 0x70DD}, //5045 #CJK UNIFIED IDEOGRAPH + {0xE080, 0x70D9}, //5046 #CJK UNIFIED IDEOGRAPH + {0xE081, 0x7109}, //5047 #CJK UNIFIED IDEOGRAPH + {0xE082, 0x70FD}, //5048 #CJK UNIFIED IDEOGRAPH + {0xE083, 0x711C}, //5049 #CJK UNIFIED IDEOGRAPH + {0xE084, 0x7119}, //5050 #CJK UNIFIED IDEOGRAPH + {0xE085, 0x7165}, //5051 #CJK UNIFIED IDEOGRAPH + {0xE086, 0x7155}, //5052 #CJK UNIFIED IDEOGRAPH + {0xE087, 0x7188}, //5053 #CJK UNIFIED IDEOGRAPH + {0xE088, 0x7166}, //5054 #CJK UNIFIED IDEOGRAPH + {0xE089, 0x7162}, //5055 #CJK UNIFIED IDEOGRAPH + {0xE08A, 0x714C}, //5056 #CJK UNIFIED IDEOGRAPH + {0xE08B, 0x7156}, //5057 #CJK UNIFIED IDEOGRAPH + {0xE08C, 0x716C}, //5058 #CJK UNIFIED IDEOGRAPH + {0xE08D, 0x718F}, //5059 #CJK UNIFIED IDEOGRAPH + {0xE08E, 0x71FB}, //5060 #CJK UNIFIED IDEOGRAPH + {0xE08F, 0x7184}, //5061 #CJK UNIFIED IDEOGRAPH + {0xE090, 0x7195}, //5062 #CJK UNIFIED IDEOGRAPH + {0xE091, 0x71A8}, //5063 #CJK UNIFIED IDEOGRAPH + {0xE092, 0x71AC}, //5064 #CJK UNIFIED IDEOGRAPH + {0xE093, 0x71D7}, //5065 #CJK UNIFIED IDEOGRAPH + {0xE094, 0x71B9}, //5066 #CJK UNIFIED IDEOGRAPH + {0xE095, 0x71BE}, //5067 #CJK UNIFIED IDEOGRAPH + {0xE096, 0x71D2}, //5068 #CJK UNIFIED IDEOGRAPH + {0xE097, 0x71C9}, //5069 #CJK UNIFIED IDEOGRAPH + {0xE098, 0x71D4}, //5070 #CJK UNIFIED IDEOGRAPH + {0xE099, 0x71CE}, //5071 #CJK UNIFIED IDEOGRAPH + {0xE09A, 0x71E0}, //5072 #CJK UNIFIED IDEOGRAPH + {0xE09B, 0x71EC}, //5073 #CJK UNIFIED IDEOGRAPH + {0xE09C, 0x71E7}, //5074 #CJK UNIFIED IDEOGRAPH + {0xE09D, 0x71F5}, //5075 #CJK UNIFIED IDEOGRAPH + {0xE09E, 0x71FC}, //5076 #CJK UNIFIED IDEOGRAPH + {0xE09F, 0x71F9}, //5077 #CJK UNIFIED IDEOGRAPH + {0xE0A0, 0x71FF}, //5078 #CJK UNIFIED IDEOGRAPH + {0xE0A1, 0x720D}, //5079 #CJK UNIFIED IDEOGRAPH + {0xE0A2, 0x7210}, //5080 #CJK UNIFIED IDEOGRAPH + {0xE0A3, 0x721B}, //5081 #CJK UNIFIED IDEOGRAPH + {0xE0A4, 0x7228}, //5082 #CJK UNIFIED IDEOGRAPH + {0xE0A5, 0x722D}, //5083 #CJK UNIFIED IDEOGRAPH + {0xE0A6, 0x722C}, //5084 #CJK UNIFIED IDEOGRAPH + {0xE0A7, 0x7230}, //5085 #CJK UNIFIED IDEOGRAPH + {0xE0A8, 0x7232}, //5086 #CJK UNIFIED IDEOGRAPH + {0xE0A9, 0x723B}, //5087 #CJK UNIFIED IDEOGRAPH + {0xE0AA, 0x723C}, //5088 #CJK UNIFIED IDEOGRAPH + {0xE0AB, 0x723F}, //5089 #CJK UNIFIED IDEOGRAPH + {0xE0AC, 0x7240}, //5090 #CJK UNIFIED IDEOGRAPH + {0xE0AD, 0x7246}, //5091 #CJK UNIFIED IDEOGRAPH + {0xE0AE, 0x724B}, //5092 #CJK UNIFIED IDEOGRAPH + {0xE0AF, 0x7258}, //5093 #CJK UNIFIED IDEOGRAPH + {0xE0B0, 0x7274}, //5094 #CJK UNIFIED IDEOGRAPH + {0xE0B1, 0x727E}, //5095 #CJK UNIFIED IDEOGRAPH + {0xE0B2, 0x7282}, //5096 #CJK UNIFIED IDEOGRAPH + {0xE0B3, 0x7281}, //5097 #CJK UNIFIED IDEOGRAPH + {0xE0B4, 0x7287}, //5098 #CJK UNIFIED IDEOGRAPH + {0xE0B5, 0x7292}, //5099 #CJK UNIFIED IDEOGRAPH + {0xE0B6, 0x7296}, //5100 #CJK UNIFIED IDEOGRAPH + {0xE0B7, 0x72A2}, //5101 #CJK UNIFIED IDEOGRAPH + {0xE0B8, 0x72A7}, //5102 #CJK UNIFIED IDEOGRAPH + {0xE0B9, 0x72B9}, //5103 #CJK UNIFIED IDEOGRAPH + {0xE0BA, 0x72B2}, //5104 #CJK UNIFIED IDEOGRAPH + {0xE0BB, 0x72C3}, //5105 #CJK UNIFIED IDEOGRAPH + {0xE0BC, 0x72C6}, //5106 #CJK UNIFIED IDEOGRAPH + {0xE0BD, 0x72C4}, //5107 #CJK UNIFIED IDEOGRAPH + {0xE0BE, 0x72CE}, //5108 #CJK UNIFIED IDEOGRAPH + {0xE0BF, 0x72D2}, //5109 #CJK UNIFIED IDEOGRAPH + {0xE0C0, 0x72E2}, //5110 #CJK UNIFIED IDEOGRAPH + {0xE0C1, 0x72E0}, //5111 #CJK UNIFIED IDEOGRAPH + {0xE0C2, 0x72E1}, //5112 #CJK UNIFIED IDEOGRAPH + {0xE0C3, 0x72F9}, //5113 #CJK UNIFIED IDEOGRAPH + {0xE0C4, 0x72F7}, //5114 #CJK UNIFIED IDEOGRAPH + {0xE0C5, 0x500F}, //5115 #CJK UNIFIED IDEOGRAPH + {0xE0C6, 0x7317}, //5116 #CJK UNIFIED IDEOGRAPH + {0xE0C7, 0x730A}, //5117 #CJK UNIFIED IDEOGRAPH + {0xE0C8, 0x731C}, //5118 #CJK UNIFIED IDEOGRAPH + {0xE0C9, 0x7316}, //5119 #CJK UNIFIED IDEOGRAPH + {0xE0CA, 0x731D}, //5120 #CJK UNIFIED IDEOGRAPH + {0xE0CB, 0x7334}, //5121 #CJK UNIFIED IDEOGRAPH + {0xE0CC, 0x732F}, //5122 #CJK UNIFIED IDEOGRAPH + {0xE0CD, 0x7329}, //5123 #CJK UNIFIED IDEOGRAPH + {0xE0CE, 0x7325}, //5124 #CJK UNIFIED IDEOGRAPH + {0xE0CF, 0x733E}, //5125 #CJK UNIFIED IDEOGRAPH + {0xE0D0, 0x734E}, //5126 #CJK UNIFIED IDEOGRAPH + {0xE0D1, 0x734F}, //5127 #CJK UNIFIED IDEOGRAPH + {0xE0D2, 0x9ED8}, //5128 #CJK UNIFIED IDEOGRAPH + {0xE0D3, 0x7357}, //5129 #CJK UNIFIED IDEOGRAPH + {0xE0D4, 0x736A}, //5130 #CJK UNIFIED IDEOGRAPH + {0xE0D5, 0x7368}, //5131 #CJK UNIFIED IDEOGRAPH + {0xE0D6, 0x7370}, //5132 #CJK UNIFIED IDEOGRAPH + {0xE0D7, 0x7378}, //5133 #CJK UNIFIED IDEOGRAPH + {0xE0D8, 0x7375}, //5134 #CJK UNIFIED IDEOGRAPH + {0xE0D9, 0x737B}, //5135 #CJK UNIFIED IDEOGRAPH + {0xE0DA, 0x737A}, //5136 #CJK UNIFIED IDEOGRAPH + {0xE0DB, 0x73C8}, //5137 #CJK UNIFIED IDEOGRAPH + {0xE0DC, 0x73B3}, //5138 #CJK UNIFIED IDEOGRAPH + {0xE0DD, 0x73CE}, //5139 #CJK UNIFIED IDEOGRAPH + {0xE0DE, 0x73BB}, //5140 #CJK UNIFIED IDEOGRAPH + {0xE0DF, 0x73C0}, //5141 #CJK UNIFIED IDEOGRAPH + {0xE0E0, 0x73E5}, //5142 #CJK UNIFIED IDEOGRAPH + {0xE0E1, 0x73EE}, //5143 #CJK UNIFIED IDEOGRAPH + {0xE0E2, 0x73DE}, //5144 #CJK UNIFIED IDEOGRAPH + {0xE0E3, 0x74A2}, //5145 #CJK UNIFIED IDEOGRAPH + {0xE0E4, 0x7405}, //5146 #CJK UNIFIED IDEOGRAPH + {0xE0E5, 0x746F}, //5147 #CJK UNIFIED IDEOGRAPH + {0xE0E6, 0x7425}, //5148 #CJK UNIFIED IDEOGRAPH + {0xE0E7, 0x73F8}, //5149 #CJK UNIFIED IDEOGRAPH + {0xE0E8, 0x7432}, //5150 #CJK UNIFIED IDEOGRAPH + {0xE0E9, 0x743A}, //5151 #CJK UNIFIED IDEOGRAPH + {0xE0EA, 0x7455}, //5152 #CJK UNIFIED IDEOGRAPH + {0xE0EB, 0x743F}, //5153 #CJK UNIFIED IDEOGRAPH + {0xE0EC, 0x745F}, //5154 #CJK UNIFIED IDEOGRAPH + {0xE0ED, 0x7459}, //5155 #CJK UNIFIED IDEOGRAPH + {0xE0EE, 0x7441}, //5156 #CJK UNIFIED IDEOGRAPH + {0xE0EF, 0x745C}, //5157 #CJK UNIFIED IDEOGRAPH + {0xE0F0, 0x7469}, //5158 #CJK UNIFIED IDEOGRAPH + {0xE0F1, 0x7470}, //5159 #CJK UNIFIED IDEOGRAPH + {0xE0F2, 0x7463}, //5160 #CJK UNIFIED IDEOGRAPH + {0xE0F3, 0x746A}, //5161 #CJK UNIFIED IDEOGRAPH + {0xE0F4, 0x7476}, //5162 #CJK UNIFIED IDEOGRAPH + {0xE0F5, 0x747E}, //5163 #CJK UNIFIED IDEOGRAPH + {0xE0F6, 0x748B}, //5164 #CJK UNIFIED IDEOGRAPH + {0xE0F7, 0x749E}, //5165 #CJK UNIFIED IDEOGRAPH + {0xE0F8, 0x74A7}, //5166 #CJK UNIFIED IDEOGRAPH + {0xE0F9, 0x74CA}, //5167 #CJK UNIFIED IDEOGRAPH + {0xE0FA, 0x74CF}, //5168 #CJK UNIFIED IDEOGRAPH + {0xE0FB, 0x74D4}, //5169 #CJK UNIFIED IDEOGRAPH + {0xE0FC, 0x73F1}, //5170 #CJK UNIFIED IDEOGRAPH + {0xE140, 0x74E0}, //5171 #CJK UNIFIED IDEOGRAPH + {0xE141, 0x74E3}, //5172 #CJK UNIFIED IDEOGRAPH + {0xE142, 0x74E7}, //5173 #CJK UNIFIED IDEOGRAPH + {0xE143, 0x74E9}, //5174 #CJK UNIFIED IDEOGRAPH + {0xE144, 0x74EE}, //5175 #CJK UNIFIED IDEOGRAPH + {0xE145, 0x74F2}, //5176 #CJK UNIFIED IDEOGRAPH + {0xE146, 0x74F0}, //5177 #CJK UNIFIED IDEOGRAPH + {0xE147, 0x74F1}, //5178 #CJK UNIFIED IDEOGRAPH + {0xE148, 0x74F8}, //5179 #CJK UNIFIED IDEOGRAPH + {0xE149, 0x74F7}, //5180 #CJK UNIFIED IDEOGRAPH + {0xE14A, 0x7504}, //5181 #CJK UNIFIED IDEOGRAPH + {0xE14B, 0x7503}, //5182 #CJK UNIFIED IDEOGRAPH + {0xE14C, 0x7505}, //5183 #CJK UNIFIED IDEOGRAPH + {0xE14D, 0x750C}, //5184 #CJK UNIFIED IDEOGRAPH + {0xE14E, 0x750E}, //5185 #CJK UNIFIED IDEOGRAPH + {0xE14F, 0x750D}, //5186 #CJK UNIFIED IDEOGRAPH + {0xE150, 0x7515}, //5187 #CJK UNIFIED IDEOGRAPH + {0xE151, 0x7513}, //5188 #CJK UNIFIED IDEOGRAPH + {0xE152, 0x751E}, //5189 #CJK UNIFIED IDEOGRAPH + {0xE153, 0x7526}, //5190 #CJK UNIFIED IDEOGRAPH + {0xE154, 0x752C}, //5191 #CJK UNIFIED IDEOGRAPH + {0xE155, 0x753C}, //5192 #CJK UNIFIED IDEOGRAPH + {0xE156, 0x7544}, //5193 #CJK UNIFIED IDEOGRAPH + {0xE157, 0x754D}, //5194 #CJK UNIFIED IDEOGRAPH + {0xE158, 0x754A}, //5195 #CJK UNIFIED IDEOGRAPH + {0xE159, 0x7549}, //5196 #CJK UNIFIED IDEOGRAPH + {0xE15A, 0x755B}, //5197 #CJK UNIFIED IDEOGRAPH + {0xE15B, 0x7546}, //5198 #CJK UNIFIED IDEOGRAPH + {0xE15C, 0x755A}, //5199 #CJK UNIFIED IDEOGRAPH + {0xE15D, 0x7569}, //5200 #CJK UNIFIED IDEOGRAPH + {0xE15E, 0x7564}, //5201 #CJK UNIFIED IDEOGRAPH + {0xE15F, 0x7567}, //5202 #CJK UNIFIED IDEOGRAPH + {0xE160, 0x756B}, //5203 #CJK UNIFIED IDEOGRAPH + {0xE161, 0x756D}, //5204 #CJK UNIFIED IDEOGRAPH + {0xE162, 0x7578}, //5205 #CJK UNIFIED IDEOGRAPH + {0xE163, 0x7576}, //5206 #CJK UNIFIED IDEOGRAPH + {0xE164, 0x7586}, //5207 #CJK UNIFIED IDEOGRAPH + {0xE165, 0x7587}, //5208 #CJK UNIFIED IDEOGRAPH + {0xE166, 0x7574}, //5209 #CJK UNIFIED IDEOGRAPH + {0xE167, 0x758A}, //5210 #CJK UNIFIED IDEOGRAPH + {0xE168, 0x7589}, //5211 #CJK UNIFIED IDEOGRAPH + {0xE169, 0x7582}, //5212 #CJK UNIFIED IDEOGRAPH + {0xE16A, 0x7594}, //5213 #CJK UNIFIED IDEOGRAPH + {0xE16B, 0x759A}, //5214 #CJK UNIFIED IDEOGRAPH + {0xE16C, 0x759D}, //5215 #CJK UNIFIED IDEOGRAPH + {0xE16D, 0x75A5}, //5216 #CJK UNIFIED IDEOGRAPH + {0xE16E, 0x75A3}, //5217 #CJK UNIFIED IDEOGRAPH + {0xE16F, 0x75C2}, //5218 #CJK UNIFIED IDEOGRAPH + {0xE170, 0x75B3}, //5219 #CJK UNIFIED IDEOGRAPH + {0xE171, 0x75C3}, //5220 #CJK UNIFIED IDEOGRAPH + {0xE172, 0x75B5}, //5221 #CJK UNIFIED IDEOGRAPH + {0xE173, 0x75BD}, //5222 #CJK UNIFIED IDEOGRAPH + {0xE174, 0x75B8}, //5223 #CJK UNIFIED IDEOGRAPH + {0xE175, 0x75BC}, //5224 #CJK UNIFIED IDEOGRAPH + {0xE176, 0x75B1}, //5225 #CJK UNIFIED IDEOGRAPH + {0xE177, 0x75CD}, //5226 #CJK UNIFIED IDEOGRAPH + {0xE178, 0x75CA}, //5227 #CJK UNIFIED IDEOGRAPH + {0xE179, 0x75D2}, //5228 #CJK UNIFIED IDEOGRAPH + {0xE17A, 0x75D9}, //5229 #CJK UNIFIED IDEOGRAPH + {0xE17B, 0x75E3}, //5230 #CJK UNIFIED IDEOGRAPH + {0xE17C, 0x75DE}, //5231 #CJK UNIFIED IDEOGRAPH + {0xE17D, 0x75FE}, //5232 #CJK UNIFIED IDEOGRAPH + {0xE17E, 0x75FF}, //5233 #CJK UNIFIED IDEOGRAPH + {0xE180, 0x75FC}, //5234 #CJK UNIFIED IDEOGRAPH + {0xE181, 0x7601}, //5235 #CJK UNIFIED IDEOGRAPH + {0xE182, 0x75F0}, //5236 #CJK UNIFIED IDEOGRAPH + {0xE183, 0x75FA}, //5237 #CJK UNIFIED IDEOGRAPH + {0xE184, 0x75F2}, //5238 #CJK UNIFIED IDEOGRAPH + {0xE185, 0x75F3}, //5239 #CJK UNIFIED IDEOGRAPH + {0xE186, 0x760B}, //5240 #CJK UNIFIED IDEOGRAPH + {0xE187, 0x760D}, //5241 #CJK UNIFIED IDEOGRAPH + {0xE188, 0x7609}, //5242 #CJK UNIFIED IDEOGRAPH + {0xE189, 0x761F}, //5243 #CJK UNIFIED IDEOGRAPH + {0xE18A, 0x7627}, //5244 #CJK UNIFIED IDEOGRAPH + {0xE18B, 0x7620}, //5245 #CJK UNIFIED IDEOGRAPH + {0xE18C, 0x7621}, //5246 #CJK UNIFIED IDEOGRAPH + {0xE18D, 0x7622}, //5247 #CJK UNIFIED IDEOGRAPH + {0xE18E, 0x7624}, //5248 #CJK UNIFIED IDEOGRAPH + {0xE18F, 0x7634}, //5249 #CJK UNIFIED IDEOGRAPH + {0xE190, 0x7630}, //5250 #CJK UNIFIED IDEOGRAPH + {0xE191, 0x763B}, //5251 #CJK UNIFIED IDEOGRAPH + {0xE192, 0x7647}, //5252 #CJK UNIFIED IDEOGRAPH + {0xE193, 0x7648}, //5253 #CJK UNIFIED IDEOGRAPH + {0xE194, 0x7646}, //5254 #CJK UNIFIED IDEOGRAPH + {0xE195, 0x765C}, //5255 #CJK UNIFIED IDEOGRAPH + {0xE196, 0x7658}, //5256 #CJK UNIFIED IDEOGRAPH + {0xE197, 0x7661}, //5257 #CJK UNIFIED IDEOGRAPH + {0xE198, 0x7662}, //5258 #CJK UNIFIED IDEOGRAPH + {0xE199, 0x7668}, //5259 #CJK UNIFIED IDEOGRAPH + {0xE19A, 0x7669}, //5260 #CJK UNIFIED IDEOGRAPH + {0xE19B, 0x766A}, //5261 #CJK UNIFIED IDEOGRAPH + {0xE19C, 0x7667}, //5262 #CJK UNIFIED IDEOGRAPH + {0xE19D, 0x766C}, //5263 #CJK UNIFIED IDEOGRAPH + {0xE19E, 0x7670}, //5264 #CJK UNIFIED IDEOGRAPH + {0xE19F, 0x7672}, //5265 #CJK UNIFIED IDEOGRAPH + {0xE1A0, 0x7676}, //5266 #CJK UNIFIED IDEOGRAPH + {0xE1A1, 0x7678}, //5267 #CJK UNIFIED IDEOGRAPH + {0xE1A2, 0x767C}, //5268 #CJK UNIFIED IDEOGRAPH + {0xE1A3, 0x7680}, //5269 #CJK UNIFIED IDEOGRAPH + {0xE1A4, 0x7683}, //5270 #CJK UNIFIED IDEOGRAPH + {0xE1A5, 0x7688}, //5271 #CJK UNIFIED IDEOGRAPH + {0xE1A6, 0x768B}, //5272 #CJK UNIFIED IDEOGRAPH + {0xE1A7, 0x768E}, //5273 #CJK UNIFIED IDEOGRAPH + {0xE1A8, 0x7696}, //5274 #CJK UNIFIED IDEOGRAPH + {0xE1A9, 0x7693}, //5275 #CJK UNIFIED IDEOGRAPH + {0xE1AA, 0x7699}, //5276 #CJK UNIFIED IDEOGRAPH + {0xE1AB, 0x769A}, //5277 #CJK UNIFIED IDEOGRAPH + {0xE1AC, 0x76B0}, //5278 #CJK UNIFIED IDEOGRAPH + {0xE1AD, 0x76B4}, //5279 #CJK UNIFIED IDEOGRAPH + {0xE1AE, 0x76B8}, //5280 #CJK UNIFIED IDEOGRAPH + {0xE1AF, 0x76B9}, //5281 #CJK UNIFIED IDEOGRAPH + {0xE1B0, 0x76BA}, //5282 #CJK UNIFIED IDEOGRAPH + {0xE1B1, 0x76C2}, //5283 #CJK UNIFIED IDEOGRAPH + {0xE1B2, 0x76CD}, //5284 #CJK UNIFIED IDEOGRAPH + {0xE1B3, 0x76D6}, //5285 #CJK UNIFIED IDEOGRAPH + {0xE1B4, 0x76D2}, //5286 #CJK UNIFIED IDEOGRAPH + {0xE1B5, 0x76DE}, //5287 #CJK UNIFIED IDEOGRAPH + {0xE1B6, 0x76E1}, //5288 #CJK UNIFIED IDEOGRAPH + {0xE1B7, 0x76E5}, //5289 #CJK UNIFIED IDEOGRAPH + {0xE1B8, 0x76E7}, //5290 #CJK UNIFIED IDEOGRAPH + {0xE1B9, 0x76EA}, //5291 #CJK UNIFIED IDEOGRAPH + {0xE1BA, 0x862F}, //5292 #CJK UNIFIED IDEOGRAPH + {0xE1BB, 0x76FB}, //5293 #CJK UNIFIED IDEOGRAPH + {0xE1BC, 0x7708}, //5294 #CJK UNIFIED IDEOGRAPH + {0xE1BD, 0x7707}, //5295 #CJK UNIFIED IDEOGRAPH + {0xE1BE, 0x7704}, //5296 #CJK UNIFIED IDEOGRAPH + {0xE1BF, 0x7729}, //5297 #CJK UNIFIED IDEOGRAPH + {0xE1C0, 0x7724}, //5298 #CJK UNIFIED IDEOGRAPH + {0xE1C1, 0x771E}, //5299 #CJK UNIFIED IDEOGRAPH + {0xE1C2, 0x7725}, //5300 #CJK UNIFIED IDEOGRAPH + {0xE1C3, 0x7726}, //5301 #CJK UNIFIED IDEOGRAPH + {0xE1C4, 0x771B}, //5302 #CJK UNIFIED IDEOGRAPH + {0xE1C5, 0x7737}, //5303 #CJK UNIFIED IDEOGRAPH + {0xE1C6, 0x7738}, //5304 #CJK UNIFIED IDEOGRAPH + {0xE1C7, 0x7747}, //5305 #CJK UNIFIED IDEOGRAPH + {0xE1C8, 0x775A}, //5306 #CJK UNIFIED IDEOGRAPH + {0xE1C9, 0x7768}, //5307 #CJK UNIFIED IDEOGRAPH + {0xE1CA, 0x776B}, //5308 #CJK UNIFIED IDEOGRAPH + {0xE1CB, 0x775B}, //5309 #CJK UNIFIED IDEOGRAPH + {0xE1CC, 0x7765}, //5310 #CJK UNIFIED IDEOGRAPH + {0xE1CD, 0x777F}, //5311 #CJK UNIFIED IDEOGRAPH + {0xE1CE, 0x777E}, //5312 #CJK UNIFIED IDEOGRAPH + {0xE1CF, 0x7779}, //5313 #CJK UNIFIED IDEOGRAPH + {0xE1D0, 0x778E}, //5314 #CJK UNIFIED IDEOGRAPH + {0xE1D1, 0x778B}, //5315 #CJK UNIFIED IDEOGRAPH + {0xE1D2, 0x7791}, //5316 #CJK UNIFIED IDEOGRAPH + {0xE1D3, 0x77A0}, //5317 #CJK UNIFIED IDEOGRAPH + {0xE1D4, 0x779E}, //5318 #CJK UNIFIED IDEOGRAPH + {0xE1D5, 0x77B0}, //5319 #CJK UNIFIED IDEOGRAPH + {0xE1D6, 0x77B6}, //5320 #CJK UNIFIED IDEOGRAPH + {0xE1D7, 0x77B9}, //5321 #CJK UNIFIED IDEOGRAPH + {0xE1D8, 0x77BF}, //5322 #CJK UNIFIED IDEOGRAPH + {0xE1D9, 0x77BC}, //5323 #CJK UNIFIED IDEOGRAPH + {0xE1DA, 0x77BD}, //5324 #CJK UNIFIED IDEOGRAPH + {0xE1DB, 0x77BB}, //5325 #CJK UNIFIED IDEOGRAPH + {0xE1DC, 0x77C7}, //5326 #CJK UNIFIED IDEOGRAPH + {0xE1DD, 0x77CD}, //5327 #CJK UNIFIED IDEOGRAPH + {0xE1DE, 0x77D7}, //5328 #CJK UNIFIED IDEOGRAPH + {0xE1DF, 0x77DA}, //5329 #CJK UNIFIED IDEOGRAPH + {0xE1E0, 0x77DC}, //5330 #CJK UNIFIED IDEOGRAPH + {0xE1E1, 0x77E3}, //5331 #CJK UNIFIED IDEOGRAPH + {0xE1E2, 0x77EE}, //5332 #CJK UNIFIED IDEOGRAPH + {0xE1E3, 0x77FC}, //5333 #CJK UNIFIED IDEOGRAPH + {0xE1E4, 0x780C}, //5334 #CJK UNIFIED IDEOGRAPH + {0xE1E5, 0x7812}, //5335 #CJK UNIFIED IDEOGRAPH + {0xE1E6, 0x7926}, //5336 #CJK UNIFIED IDEOGRAPH + {0xE1E7, 0x7820}, //5337 #CJK UNIFIED IDEOGRAPH + {0xE1E8, 0x792A}, //5338 #CJK UNIFIED IDEOGRAPH + {0xE1E9, 0x7845}, //5339 #CJK UNIFIED IDEOGRAPH + {0xE1EA, 0x788E}, //5340 #CJK UNIFIED IDEOGRAPH + {0xE1EB, 0x7874}, //5341 #CJK UNIFIED IDEOGRAPH + {0xE1EC, 0x7886}, //5342 #CJK UNIFIED IDEOGRAPH + {0xE1ED, 0x787C}, //5343 #CJK UNIFIED IDEOGRAPH + {0xE1EE, 0x789A}, //5344 #CJK UNIFIED IDEOGRAPH + {0xE1EF, 0x788C}, //5345 #CJK UNIFIED IDEOGRAPH + {0xE1F0, 0x78A3}, //5346 #CJK UNIFIED IDEOGRAPH + {0xE1F1, 0x78B5}, //5347 #CJK UNIFIED IDEOGRAPH + {0xE1F2, 0x78AA}, //5348 #CJK UNIFIED IDEOGRAPH + {0xE1F3, 0x78AF}, //5349 #CJK UNIFIED IDEOGRAPH + {0xE1F4, 0x78D1}, //5350 #CJK UNIFIED IDEOGRAPH + {0xE1F5, 0x78C6}, //5351 #CJK UNIFIED IDEOGRAPH + {0xE1F6, 0x78CB}, //5352 #CJK UNIFIED IDEOGRAPH + {0xE1F7, 0x78D4}, //5353 #CJK UNIFIED IDEOGRAPH + {0xE1F8, 0x78BE}, //5354 #CJK UNIFIED IDEOGRAPH + {0xE1F9, 0x78BC}, //5355 #CJK UNIFIED IDEOGRAPH + {0xE1FA, 0x78C5}, //5356 #CJK UNIFIED IDEOGRAPH + {0xE1FB, 0x78CA}, //5357 #CJK UNIFIED IDEOGRAPH + {0xE1FC, 0x78EC}, //5358 #CJK UNIFIED IDEOGRAPH + {0xE240, 0x78E7}, //5359 #CJK UNIFIED IDEOGRAPH + {0xE241, 0x78DA}, //5360 #CJK UNIFIED IDEOGRAPH + {0xE242, 0x78FD}, //5361 #CJK UNIFIED IDEOGRAPH + {0xE243, 0x78F4}, //5362 #CJK UNIFIED IDEOGRAPH + {0xE244, 0x7907}, //5363 #CJK UNIFIED IDEOGRAPH + {0xE245, 0x7912}, //5364 #CJK UNIFIED IDEOGRAPH + {0xE246, 0x7911}, //5365 #CJK UNIFIED IDEOGRAPH + {0xE247, 0x7919}, //5366 #CJK UNIFIED IDEOGRAPH + {0xE248, 0x792C}, //5367 #CJK UNIFIED IDEOGRAPH + {0xE249, 0x792B}, //5368 #CJK UNIFIED IDEOGRAPH + {0xE24A, 0x7940}, //5369 #CJK UNIFIED IDEOGRAPH + {0xE24B, 0x7960}, //5370 #CJK UNIFIED IDEOGRAPH + {0xE24C, 0x7957}, //5371 #CJK UNIFIED IDEOGRAPH + {0xE24D, 0x795F}, //5372 #CJK UNIFIED IDEOGRAPH + {0xE24E, 0x795A}, //5373 #CJK UNIFIED IDEOGRAPH + {0xE24F, 0x7955}, //5374 #CJK UNIFIED IDEOGRAPH + {0xE250, 0x7953}, //5375 #CJK UNIFIED IDEOGRAPH + {0xE251, 0x797A}, //5376 #CJK UNIFIED IDEOGRAPH + {0xE252, 0x797F}, //5377 #CJK UNIFIED IDEOGRAPH + {0xE253, 0x798A}, //5378 #CJK UNIFIED IDEOGRAPH + {0xE254, 0x799D}, //5379 #CJK UNIFIED IDEOGRAPH + {0xE255, 0x79A7}, //5380 #CJK UNIFIED IDEOGRAPH + {0xE256, 0x9F4B}, //5381 #CJK UNIFIED IDEOGRAPH + {0xE257, 0x79AA}, //5382 #CJK UNIFIED IDEOGRAPH + {0xE258, 0x79AE}, //5383 #CJK UNIFIED IDEOGRAPH + {0xE259, 0x79B3}, //5384 #CJK UNIFIED IDEOGRAPH + {0xE25A, 0x79B9}, //5385 #CJK UNIFIED IDEOGRAPH + {0xE25B, 0x79BA}, //5386 #CJK UNIFIED IDEOGRAPH + {0xE25C, 0x79C9}, //5387 #CJK UNIFIED IDEOGRAPH + {0xE25D, 0x79D5}, //5388 #CJK UNIFIED IDEOGRAPH + {0xE25E, 0x79E7}, //5389 #CJK UNIFIED IDEOGRAPH + {0xE25F, 0x79EC}, //5390 #CJK UNIFIED IDEOGRAPH + {0xE260, 0x79E1}, //5391 #CJK UNIFIED IDEOGRAPH + {0xE261, 0x79E3}, //5392 #CJK UNIFIED IDEOGRAPH + {0xE262, 0x7A08}, //5393 #CJK UNIFIED IDEOGRAPH + {0xE263, 0x7A0D}, //5394 #CJK UNIFIED IDEOGRAPH + {0xE264, 0x7A18}, //5395 #CJK UNIFIED IDEOGRAPH + {0xE265, 0x7A19}, //5396 #CJK UNIFIED IDEOGRAPH + {0xE266, 0x7A20}, //5397 #CJK UNIFIED IDEOGRAPH + {0xE267, 0x7A1F}, //5398 #CJK UNIFIED IDEOGRAPH + {0xE268, 0x7980}, //5399 #CJK UNIFIED IDEOGRAPH + {0xE269, 0x7A31}, //5400 #CJK UNIFIED IDEOGRAPH + {0xE26A, 0x7A3B}, //5401 #CJK UNIFIED IDEOGRAPH + {0xE26B, 0x7A3E}, //5402 #CJK UNIFIED IDEOGRAPH + {0xE26C, 0x7A37}, //5403 #CJK UNIFIED IDEOGRAPH + {0xE26D, 0x7A43}, //5404 #CJK UNIFIED IDEOGRAPH + {0xE26E, 0x7A57}, //5405 #CJK UNIFIED IDEOGRAPH + {0xE26F, 0x7A49}, //5406 #CJK UNIFIED IDEOGRAPH + {0xE270, 0x7A61}, //5407 #CJK UNIFIED IDEOGRAPH + {0xE271, 0x7A62}, //5408 #CJK UNIFIED IDEOGRAPH + {0xE272, 0x7A69}, //5409 #CJK UNIFIED IDEOGRAPH + {0xE273, 0x9F9D}, //5410 #CJK UNIFIED IDEOGRAPH + {0xE274, 0x7A70}, //5411 #CJK UNIFIED IDEOGRAPH + {0xE275, 0x7A79}, //5412 #CJK UNIFIED IDEOGRAPH + {0xE276, 0x7A7D}, //5413 #CJK UNIFIED IDEOGRAPH + {0xE277, 0x7A88}, //5414 #CJK UNIFIED IDEOGRAPH + {0xE278, 0x7A97}, //5415 #CJK UNIFIED IDEOGRAPH + {0xE279, 0x7A95}, //5416 #CJK UNIFIED IDEOGRAPH + {0xE27A, 0x7A98}, //5417 #CJK UNIFIED IDEOGRAPH + {0xE27B, 0x7A96}, //5418 #CJK UNIFIED IDEOGRAPH + {0xE27C, 0x7AA9}, //5419 #CJK UNIFIED IDEOGRAPH + {0xE27D, 0x7AC8}, //5420 #CJK UNIFIED IDEOGRAPH + {0xE27E, 0x7AB0}, //5421 #CJK UNIFIED IDEOGRAPH + {0xE280, 0x7AB6}, //5422 #CJK UNIFIED IDEOGRAPH + {0xE281, 0x7AC5}, //5423 #CJK UNIFIED IDEOGRAPH + {0xE282, 0x7AC4}, //5424 #CJK UNIFIED IDEOGRAPH + {0xE283, 0x7ABF}, //5425 #CJK UNIFIED IDEOGRAPH + {0xE284, 0x9083}, //5426 #CJK UNIFIED IDEOGRAPH + {0xE285, 0x7AC7}, //5427 #CJK UNIFIED IDEOGRAPH + {0xE286, 0x7ACA}, //5428 #CJK UNIFIED IDEOGRAPH + {0xE287, 0x7ACD}, //5429 #CJK UNIFIED IDEOGRAPH + {0xE288, 0x7ACF}, //5430 #CJK UNIFIED IDEOGRAPH + {0xE289, 0x7AD5}, //5431 #CJK UNIFIED IDEOGRAPH + {0xE28A, 0x7AD3}, //5432 #CJK UNIFIED IDEOGRAPH + {0xE28B, 0x7AD9}, //5433 #CJK UNIFIED IDEOGRAPH + {0xE28C, 0x7ADA}, //5434 #CJK UNIFIED IDEOGRAPH + {0xE28D, 0x7ADD}, //5435 #CJK UNIFIED IDEOGRAPH + {0xE28E, 0x7AE1}, //5436 #CJK UNIFIED IDEOGRAPH + {0xE28F, 0x7AE2}, //5437 #CJK UNIFIED IDEOGRAPH + {0xE290, 0x7AE6}, //5438 #CJK UNIFIED IDEOGRAPH + {0xE291, 0x7AED}, //5439 #CJK UNIFIED IDEOGRAPH + {0xE292, 0x7AF0}, //5440 #CJK UNIFIED IDEOGRAPH + {0xE293, 0x7B02}, //5441 #CJK UNIFIED IDEOGRAPH + {0xE294, 0x7B0F}, //5442 #CJK UNIFIED IDEOGRAPH + {0xE295, 0x7B0A}, //5443 #CJK UNIFIED IDEOGRAPH + {0xE296, 0x7B06}, //5444 #CJK UNIFIED IDEOGRAPH + {0xE297, 0x7B33}, //5445 #CJK UNIFIED IDEOGRAPH + {0xE298, 0x7B18}, //5446 #CJK UNIFIED IDEOGRAPH + {0xE299, 0x7B19}, //5447 #CJK UNIFIED IDEOGRAPH + {0xE29A, 0x7B1E}, //5448 #CJK UNIFIED IDEOGRAPH + {0xE29B, 0x7B35}, //5449 #CJK UNIFIED IDEOGRAPH + {0xE29C, 0x7B28}, //5450 #CJK UNIFIED IDEOGRAPH + {0xE29D, 0x7B36}, //5451 #CJK UNIFIED IDEOGRAPH + {0xE29E, 0x7B50}, //5452 #CJK UNIFIED IDEOGRAPH + {0xE29F, 0x7B7A}, //5453 #CJK UNIFIED IDEOGRAPH + {0xE2A0, 0x7B04}, //5454 #CJK UNIFIED IDEOGRAPH + {0xE2A1, 0x7B4D}, //5455 #CJK UNIFIED IDEOGRAPH + {0xE2A2, 0x7B0B}, //5456 #CJK UNIFIED IDEOGRAPH + {0xE2A3, 0x7B4C}, //5457 #CJK UNIFIED IDEOGRAPH + {0xE2A4, 0x7B45}, //5458 #CJK UNIFIED IDEOGRAPH + {0xE2A5, 0x7B75}, //5459 #CJK UNIFIED IDEOGRAPH + {0xE2A6, 0x7B65}, //5460 #CJK UNIFIED IDEOGRAPH + {0xE2A7, 0x7B74}, //5461 #CJK UNIFIED IDEOGRAPH + {0xE2A8, 0x7B67}, //5462 #CJK UNIFIED IDEOGRAPH + {0xE2A9, 0x7B70}, //5463 #CJK UNIFIED IDEOGRAPH + {0xE2AA, 0x7B71}, //5464 #CJK UNIFIED IDEOGRAPH + {0xE2AB, 0x7B6C}, //5465 #CJK UNIFIED IDEOGRAPH + {0xE2AC, 0x7B6E}, //5466 #CJK UNIFIED IDEOGRAPH + {0xE2AD, 0x7B9D}, //5467 #CJK UNIFIED IDEOGRAPH + {0xE2AE, 0x7B98}, //5468 #CJK UNIFIED IDEOGRAPH + {0xE2AF, 0x7B9F}, //5469 #CJK UNIFIED IDEOGRAPH + {0xE2B0, 0x7B8D}, //5470 #CJK UNIFIED IDEOGRAPH + {0xE2B1, 0x7B9C}, //5471 #CJK UNIFIED IDEOGRAPH + {0xE2B2, 0x7B9A}, //5472 #CJK UNIFIED IDEOGRAPH + {0xE2B3, 0x7B8B}, //5473 #CJK UNIFIED IDEOGRAPH + {0xE2B4, 0x7B92}, //5474 #CJK UNIFIED IDEOGRAPH + {0xE2B5, 0x7B8F}, //5475 #CJK UNIFIED IDEOGRAPH + {0xE2B6, 0x7B5D}, //5476 #CJK UNIFIED IDEOGRAPH + {0xE2B7, 0x7B99}, //5477 #CJK UNIFIED IDEOGRAPH + {0xE2B8, 0x7BCB}, //5478 #CJK UNIFIED IDEOGRAPH + {0xE2B9, 0x7BC1}, //5479 #CJK UNIFIED IDEOGRAPH + {0xE2BA, 0x7BCC}, //5480 #CJK UNIFIED IDEOGRAPH + {0xE2BB, 0x7BCF}, //5481 #CJK UNIFIED IDEOGRAPH + {0xE2BC, 0x7BB4}, //5482 #CJK UNIFIED IDEOGRAPH + {0xE2BD, 0x7BC6}, //5483 #CJK UNIFIED IDEOGRAPH + {0xE2BE, 0x7BDD}, //5484 #CJK UNIFIED IDEOGRAPH + {0xE2BF, 0x7BE9}, //5485 #CJK UNIFIED IDEOGRAPH + {0xE2C0, 0x7C11}, //5486 #CJK UNIFIED IDEOGRAPH + {0xE2C1, 0x7C14}, //5487 #CJK UNIFIED IDEOGRAPH + {0xE2C2, 0x7BE6}, //5488 #CJK UNIFIED IDEOGRAPH + {0xE2C3, 0x7BE5}, //5489 #CJK UNIFIED IDEOGRAPH + {0xE2C4, 0x7C60}, //5490 #CJK UNIFIED IDEOGRAPH + {0xE2C5, 0x7C00}, //5491 #CJK UNIFIED IDEOGRAPH + {0xE2C6, 0x7C07}, //5492 #CJK UNIFIED IDEOGRAPH + {0xE2C7, 0x7C13}, //5493 #CJK UNIFIED IDEOGRAPH + {0xE2C8, 0x7BF3}, //5494 #CJK UNIFIED IDEOGRAPH + {0xE2C9, 0x7BF7}, //5495 #CJK UNIFIED IDEOGRAPH + {0xE2CA, 0x7C17}, //5496 #CJK UNIFIED IDEOGRAPH + {0xE2CB, 0x7C0D}, //5497 #CJK UNIFIED IDEOGRAPH + {0xE2CC, 0x7BF6}, //5498 #CJK UNIFIED IDEOGRAPH + {0xE2CD, 0x7C23}, //5499 #CJK UNIFIED IDEOGRAPH + {0xE2CE, 0x7C27}, //5500 #CJK UNIFIED IDEOGRAPH + {0xE2CF, 0x7C2A}, //5501 #CJK UNIFIED IDEOGRAPH + {0xE2D0, 0x7C1F}, //5502 #CJK UNIFIED IDEOGRAPH + {0xE2D1, 0x7C37}, //5503 #CJK UNIFIED IDEOGRAPH + {0xE2D2, 0x7C2B}, //5504 #CJK UNIFIED IDEOGRAPH + {0xE2D3, 0x7C3D}, //5505 #CJK UNIFIED IDEOGRAPH + {0xE2D4, 0x7C4C}, //5506 #CJK UNIFIED IDEOGRAPH + {0xE2D5, 0x7C43}, //5507 #CJK UNIFIED IDEOGRAPH + {0xE2D6, 0x7C54}, //5508 #CJK UNIFIED IDEOGRAPH + {0xE2D7, 0x7C4F}, //5509 #CJK UNIFIED IDEOGRAPH + {0xE2D8, 0x7C40}, //5510 #CJK UNIFIED IDEOGRAPH + {0xE2D9, 0x7C50}, //5511 #CJK UNIFIED IDEOGRAPH + {0xE2DA, 0x7C58}, //5512 #CJK UNIFIED IDEOGRAPH + {0xE2DB, 0x7C5F}, //5513 #CJK UNIFIED IDEOGRAPH + {0xE2DC, 0x7C64}, //5514 #CJK UNIFIED IDEOGRAPH + {0xE2DD, 0x7C56}, //5515 #CJK UNIFIED IDEOGRAPH + {0xE2DE, 0x7C65}, //5516 #CJK UNIFIED IDEOGRAPH + {0xE2DF, 0x7C6C}, //5517 #CJK UNIFIED IDEOGRAPH + {0xE2E0, 0x7C75}, //5518 #CJK UNIFIED IDEOGRAPH + {0xE2E1, 0x7C83}, //5519 #CJK UNIFIED IDEOGRAPH + {0xE2E2, 0x7C90}, //5520 #CJK UNIFIED IDEOGRAPH + {0xE2E3, 0x7CA4}, //5521 #CJK UNIFIED IDEOGRAPH + {0xE2E4, 0x7CAD}, //5522 #CJK UNIFIED IDEOGRAPH + {0xE2E5, 0x7CA2}, //5523 #CJK UNIFIED IDEOGRAPH + {0xE2E6, 0x7CAB}, //5524 #CJK UNIFIED IDEOGRAPH + {0xE2E7, 0x7CA1}, //5525 #CJK UNIFIED IDEOGRAPH + {0xE2E8, 0x7CA8}, //5526 #CJK UNIFIED IDEOGRAPH + {0xE2E9, 0x7CB3}, //5527 #CJK UNIFIED IDEOGRAPH + {0xE2EA, 0x7CB2}, //5528 #CJK UNIFIED IDEOGRAPH + {0xE2EB, 0x7CB1}, //5529 #CJK UNIFIED IDEOGRAPH + {0xE2EC, 0x7CAE}, //5530 #CJK UNIFIED IDEOGRAPH + {0xE2ED, 0x7CB9}, //5531 #CJK UNIFIED IDEOGRAPH + {0xE2EE, 0x7CBD}, //5532 #CJK UNIFIED IDEOGRAPH + {0xE2EF, 0x7CC0}, //5533 #CJK UNIFIED IDEOGRAPH + {0xE2F0, 0x7CC5}, //5534 #CJK UNIFIED IDEOGRAPH + {0xE2F1, 0x7CC2}, //5535 #CJK UNIFIED IDEOGRAPH + {0xE2F2, 0x7CD8}, //5536 #CJK UNIFIED IDEOGRAPH + {0xE2F3, 0x7CD2}, //5537 #CJK UNIFIED IDEOGRAPH + {0xE2F4, 0x7CDC}, //5538 #CJK UNIFIED IDEOGRAPH + {0xE2F5, 0x7CE2}, //5539 #CJK UNIFIED IDEOGRAPH + {0xE2F6, 0x9B3B}, //5540 #CJK UNIFIED IDEOGRAPH + {0xE2F7, 0x7CEF}, //5541 #CJK UNIFIED IDEOGRAPH + {0xE2F8, 0x7CF2}, //5542 #CJK UNIFIED IDEOGRAPH + {0xE2F9, 0x7CF4}, //5543 #CJK UNIFIED IDEOGRAPH + {0xE2FA, 0x7CF6}, //5544 #CJK UNIFIED IDEOGRAPH + {0xE2FB, 0x7CFA}, //5545 #CJK UNIFIED IDEOGRAPH + {0xE2FC, 0x7D06}, //5546 #CJK UNIFIED IDEOGRAPH + {0xE340, 0x7D02}, //5547 #CJK UNIFIED IDEOGRAPH + {0xE341, 0x7D1C}, //5548 #CJK UNIFIED IDEOGRAPH + {0xE342, 0x7D15}, //5549 #CJK UNIFIED IDEOGRAPH + {0xE343, 0x7D0A}, //5550 #CJK UNIFIED IDEOGRAPH + {0xE344, 0x7D45}, //5551 #CJK UNIFIED IDEOGRAPH + {0xE345, 0x7D4B}, //5552 #CJK UNIFIED IDEOGRAPH + {0xE346, 0x7D2E}, //5553 #CJK UNIFIED IDEOGRAPH + {0xE347, 0x7D32}, //5554 #CJK UNIFIED IDEOGRAPH + {0xE348, 0x7D3F}, //5555 #CJK UNIFIED IDEOGRAPH + {0xE349, 0x7D35}, //5556 #CJK UNIFIED IDEOGRAPH + {0xE34A, 0x7D46}, //5557 #CJK UNIFIED IDEOGRAPH + {0xE34B, 0x7D73}, //5558 #CJK UNIFIED IDEOGRAPH + {0xE34C, 0x7D56}, //5559 #CJK UNIFIED IDEOGRAPH + {0xE34D, 0x7D4E}, //5560 #CJK UNIFIED IDEOGRAPH + {0xE34E, 0x7D72}, //5561 #CJK UNIFIED IDEOGRAPH + {0xE34F, 0x7D68}, //5562 #CJK UNIFIED IDEOGRAPH + {0xE350, 0x7D6E}, //5563 #CJK UNIFIED IDEOGRAPH + {0xE351, 0x7D4F}, //5564 #CJK UNIFIED IDEOGRAPH + {0xE352, 0x7D63}, //5565 #CJK UNIFIED IDEOGRAPH + {0xE353, 0x7D93}, //5566 #CJK UNIFIED IDEOGRAPH + {0xE354, 0x7D89}, //5567 #CJK UNIFIED IDEOGRAPH + {0xE355, 0x7D5B}, //5568 #CJK UNIFIED IDEOGRAPH + {0xE356, 0x7D8F}, //5569 #CJK UNIFIED IDEOGRAPH + {0xE357, 0x7D7D}, //5570 #CJK UNIFIED IDEOGRAPH + {0xE358, 0x7D9B}, //5571 #CJK UNIFIED IDEOGRAPH + {0xE359, 0x7DBA}, //5572 #CJK UNIFIED IDEOGRAPH + {0xE35A, 0x7DAE}, //5573 #CJK UNIFIED IDEOGRAPH + {0xE35B, 0x7DA3}, //5574 #CJK UNIFIED IDEOGRAPH + {0xE35C, 0x7DB5}, //5575 #CJK UNIFIED IDEOGRAPH + {0xE35D, 0x7DC7}, //5576 #CJK UNIFIED IDEOGRAPH + {0xE35E, 0x7DBD}, //5577 #CJK UNIFIED IDEOGRAPH + {0xE35F, 0x7DAB}, //5578 #CJK UNIFIED IDEOGRAPH + {0xE360, 0x7E3D}, //5579 #CJK UNIFIED IDEOGRAPH + {0xE361, 0x7DA2}, //5580 #CJK UNIFIED IDEOGRAPH + {0xE362, 0x7DAF}, //5581 #CJK UNIFIED IDEOGRAPH + {0xE363, 0x7DDC}, //5582 #CJK UNIFIED IDEOGRAPH + {0xE364, 0x7DB8}, //5583 #CJK UNIFIED IDEOGRAPH + {0xE365, 0x7D9F}, //5584 #CJK UNIFIED IDEOGRAPH + {0xE366, 0x7DB0}, //5585 #CJK UNIFIED IDEOGRAPH + {0xE367, 0x7DD8}, //5586 #CJK UNIFIED IDEOGRAPH + {0xE368, 0x7DDD}, //5587 #CJK UNIFIED IDEOGRAPH + {0xE369, 0x7DE4}, //5588 #CJK UNIFIED IDEOGRAPH + {0xE36A, 0x7DDE}, //5589 #CJK UNIFIED IDEOGRAPH + {0xE36B, 0x7DFB}, //5590 #CJK UNIFIED IDEOGRAPH + {0xE36C, 0x7DF2}, //5591 #CJK UNIFIED IDEOGRAPH + {0xE36D, 0x7DE1}, //5592 #CJK UNIFIED IDEOGRAPH + {0xE36E, 0x7E05}, //5593 #CJK UNIFIED IDEOGRAPH + {0xE36F, 0x7E0A}, //5594 #CJK UNIFIED IDEOGRAPH + {0xE370, 0x7E23}, //5595 #CJK UNIFIED IDEOGRAPH + {0xE371, 0x7E21}, //5596 #CJK UNIFIED IDEOGRAPH + {0xE372, 0x7E12}, //5597 #CJK UNIFIED IDEOGRAPH + {0xE373, 0x7E31}, //5598 #CJK UNIFIED IDEOGRAPH + {0xE374, 0x7E1F}, //5599 #CJK UNIFIED IDEOGRAPH + {0xE375, 0x7E09}, //5600 #CJK UNIFIED IDEOGRAPH + {0xE376, 0x7E0B}, //5601 #CJK UNIFIED IDEOGRAPH + {0xE377, 0x7E22}, //5602 #CJK UNIFIED IDEOGRAPH + {0xE378, 0x7E46}, //5603 #CJK UNIFIED IDEOGRAPH + {0xE379, 0x7E66}, //5604 #CJK UNIFIED IDEOGRAPH + {0xE37A, 0x7E3B}, //5605 #CJK UNIFIED IDEOGRAPH + {0xE37B, 0x7E35}, //5606 #CJK UNIFIED IDEOGRAPH + {0xE37C, 0x7E39}, //5607 #CJK UNIFIED IDEOGRAPH + {0xE37D, 0x7E43}, //5608 #CJK UNIFIED IDEOGRAPH + {0xE37E, 0x7E37}, //5609 #CJK UNIFIED IDEOGRAPH + {0xE380, 0x7E32}, //5610 #CJK UNIFIED IDEOGRAPH + {0xE381, 0x7E3A}, //5611 #CJK UNIFIED IDEOGRAPH + {0xE382, 0x7E67}, //5612 #CJK UNIFIED IDEOGRAPH + {0xE383, 0x7E5D}, //5613 #CJK UNIFIED IDEOGRAPH + {0xE384, 0x7E56}, //5614 #CJK UNIFIED IDEOGRAPH + {0xE385, 0x7E5E}, //5615 #CJK UNIFIED IDEOGRAPH + {0xE386, 0x7E59}, //5616 #CJK UNIFIED IDEOGRAPH + {0xE387, 0x7E5A}, //5617 #CJK UNIFIED IDEOGRAPH + {0xE388, 0x7E79}, //5618 #CJK UNIFIED IDEOGRAPH + {0xE389, 0x7E6A}, //5619 #CJK UNIFIED IDEOGRAPH + {0xE38A, 0x7E69}, //5620 #CJK UNIFIED IDEOGRAPH + {0xE38B, 0x7E7C}, //5621 #CJK UNIFIED IDEOGRAPH + {0xE38C, 0x7E7B}, //5622 #CJK UNIFIED IDEOGRAPH + {0xE38D, 0x7E83}, //5623 #CJK UNIFIED IDEOGRAPH + {0xE38E, 0x7DD5}, //5624 #CJK UNIFIED IDEOGRAPH + {0xE38F, 0x7E7D}, //5625 #CJK UNIFIED IDEOGRAPH + {0xE390, 0x8FAE}, //5626 #CJK UNIFIED IDEOGRAPH + {0xE391, 0x7E7F}, //5627 #CJK UNIFIED IDEOGRAPH + {0xE392, 0x7E88}, //5628 #CJK UNIFIED IDEOGRAPH + {0xE393, 0x7E89}, //5629 #CJK UNIFIED IDEOGRAPH + {0xE394, 0x7E8C}, //5630 #CJK UNIFIED IDEOGRAPH + {0xE395, 0x7E92}, //5631 #CJK UNIFIED IDEOGRAPH + {0xE396, 0x7E90}, //5632 #CJK UNIFIED IDEOGRAPH + {0xE397, 0x7E93}, //5633 #CJK UNIFIED IDEOGRAPH + {0xE398, 0x7E94}, //5634 #CJK UNIFIED IDEOGRAPH + {0xE399, 0x7E96}, //5635 #CJK UNIFIED IDEOGRAPH + {0xE39A, 0x7E8E}, //5636 #CJK UNIFIED IDEOGRAPH + {0xE39B, 0x7E9B}, //5637 #CJK UNIFIED IDEOGRAPH + {0xE39C, 0x7E9C}, //5638 #CJK UNIFIED IDEOGRAPH + {0xE39D, 0x7F38}, //5639 #CJK UNIFIED IDEOGRAPH + {0xE39E, 0x7F3A}, //5640 #CJK UNIFIED IDEOGRAPH + {0xE39F, 0x7F45}, //5641 #CJK UNIFIED IDEOGRAPH + {0xE3A0, 0x7F4C}, //5642 #CJK UNIFIED IDEOGRAPH + {0xE3A1, 0x7F4D}, //5643 #CJK UNIFIED IDEOGRAPH + {0xE3A2, 0x7F4E}, //5644 #CJK UNIFIED IDEOGRAPH + {0xE3A3, 0x7F50}, //5645 #CJK UNIFIED IDEOGRAPH + {0xE3A4, 0x7F51}, //5646 #CJK UNIFIED IDEOGRAPH + {0xE3A5, 0x7F55}, //5647 #CJK UNIFIED IDEOGRAPH + {0xE3A6, 0x7F54}, //5648 #CJK UNIFIED IDEOGRAPH + {0xE3A7, 0x7F58}, //5649 #CJK UNIFIED IDEOGRAPH + {0xE3A8, 0x7F5F}, //5650 #CJK UNIFIED IDEOGRAPH + {0xE3A9, 0x7F60}, //5651 #CJK UNIFIED IDEOGRAPH + {0xE3AA, 0x7F68}, //5652 #CJK UNIFIED IDEOGRAPH + {0xE3AB, 0x7F69}, //5653 #CJK UNIFIED IDEOGRAPH + {0xE3AC, 0x7F67}, //5654 #CJK UNIFIED IDEOGRAPH + {0xE3AD, 0x7F78}, //5655 #CJK UNIFIED IDEOGRAPH + {0xE3AE, 0x7F82}, //5656 #CJK UNIFIED IDEOGRAPH + {0xE3AF, 0x7F86}, //5657 #CJK UNIFIED IDEOGRAPH + {0xE3B0, 0x7F83}, //5658 #CJK UNIFIED IDEOGRAPH + {0xE3B1, 0x7F88}, //5659 #CJK UNIFIED IDEOGRAPH + {0xE3B2, 0x7F87}, //5660 #CJK UNIFIED IDEOGRAPH + {0xE3B3, 0x7F8C}, //5661 #CJK UNIFIED IDEOGRAPH + {0xE3B4, 0x7F94}, //5662 #CJK UNIFIED IDEOGRAPH + {0xE3B5, 0x7F9E}, //5663 #CJK UNIFIED IDEOGRAPH + {0xE3B6, 0x7F9D}, //5664 #CJK UNIFIED IDEOGRAPH + {0xE3B7, 0x7F9A}, //5665 #CJK UNIFIED IDEOGRAPH + {0xE3B8, 0x7FA3}, //5666 #CJK UNIFIED IDEOGRAPH + {0xE3B9, 0x7FAF}, //5667 #CJK UNIFIED IDEOGRAPH + {0xE3BA, 0x7FB2}, //5668 #CJK UNIFIED IDEOGRAPH + {0xE3BB, 0x7FB9}, //5669 #CJK UNIFIED IDEOGRAPH + {0xE3BC, 0x7FAE}, //5670 #CJK UNIFIED IDEOGRAPH + {0xE3BD, 0x7FB6}, //5671 #CJK UNIFIED IDEOGRAPH + {0xE3BE, 0x7FB8}, //5672 #CJK UNIFIED IDEOGRAPH + {0xE3BF, 0x8B71}, //5673 #CJK UNIFIED IDEOGRAPH + {0xE3C0, 0x7FC5}, //5674 #CJK UNIFIED IDEOGRAPH + {0xE3C1, 0x7FC6}, //5675 #CJK UNIFIED IDEOGRAPH + {0xE3C2, 0x7FCA}, //5676 #CJK UNIFIED IDEOGRAPH + {0xE3C3, 0x7FD5}, //5677 #CJK UNIFIED IDEOGRAPH + {0xE3C4, 0x7FD4}, //5678 #CJK UNIFIED IDEOGRAPH + {0xE3C5, 0x7FE1}, //5679 #CJK UNIFIED IDEOGRAPH + {0xE3C6, 0x7FE6}, //5680 #CJK UNIFIED IDEOGRAPH + {0xE3C7, 0x7FE9}, //5681 #CJK UNIFIED IDEOGRAPH + {0xE3C8, 0x7FF3}, //5682 #CJK UNIFIED IDEOGRAPH + {0xE3C9, 0x7FF9}, //5683 #CJK UNIFIED IDEOGRAPH + {0xE3CA, 0x98DC}, //5684 #CJK UNIFIED IDEOGRAPH + {0xE3CB, 0x8006}, //5685 #CJK UNIFIED IDEOGRAPH + {0xE3CC, 0x8004}, //5686 #CJK UNIFIED IDEOGRAPH + {0xE3CD, 0x800B}, //5687 #CJK UNIFIED IDEOGRAPH + {0xE3CE, 0x8012}, //5688 #CJK UNIFIED IDEOGRAPH + {0xE3CF, 0x8018}, //5689 #CJK UNIFIED IDEOGRAPH + {0xE3D0, 0x8019}, //5690 #CJK UNIFIED IDEOGRAPH + {0xE3D1, 0x801C}, //5691 #CJK UNIFIED IDEOGRAPH + {0xE3D2, 0x8021}, //5692 #CJK UNIFIED IDEOGRAPH + {0xE3D3, 0x8028}, //5693 #CJK UNIFIED IDEOGRAPH + {0xE3D4, 0x803F}, //5694 #CJK UNIFIED IDEOGRAPH + {0xE3D5, 0x803B}, //5695 #CJK UNIFIED IDEOGRAPH + {0xE3D6, 0x804A}, //5696 #CJK UNIFIED IDEOGRAPH + {0xE3D7, 0x8046}, //5697 #CJK UNIFIED IDEOGRAPH + {0xE3D8, 0x8052}, //5698 #CJK UNIFIED IDEOGRAPH + {0xE3D9, 0x8058}, //5699 #CJK UNIFIED IDEOGRAPH + {0xE3DA, 0x805A}, //5700 #CJK UNIFIED IDEOGRAPH + {0xE3DB, 0x805F}, //5701 #CJK UNIFIED IDEOGRAPH + {0xE3DC, 0x8062}, //5702 #CJK UNIFIED IDEOGRAPH + {0xE3DD, 0x8068}, //5703 #CJK UNIFIED IDEOGRAPH + {0xE3DE, 0x8073}, //5704 #CJK UNIFIED IDEOGRAPH + {0xE3DF, 0x8072}, //5705 #CJK UNIFIED IDEOGRAPH + {0xE3E0, 0x8070}, //5706 #CJK UNIFIED IDEOGRAPH + {0xE3E1, 0x8076}, //5707 #CJK UNIFIED IDEOGRAPH + {0xE3E2, 0x8079}, //5708 #CJK UNIFIED IDEOGRAPH + {0xE3E3, 0x807D}, //5709 #CJK UNIFIED IDEOGRAPH + {0xE3E4, 0x807F}, //5710 #CJK UNIFIED IDEOGRAPH + {0xE3E5, 0x8084}, //5711 #CJK UNIFIED IDEOGRAPH + {0xE3E6, 0x8086}, //5712 #CJK UNIFIED IDEOGRAPH + {0xE3E7, 0x8085}, //5713 #CJK UNIFIED IDEOGRAPH + {0xE3E8, 0x809B}, //5714 #CJK UNIFIED IDEOGRAPH + {0xE3E9, 0x8093}, //5715 #CJK UNIFIED IDEOGRAPH + {0xE3EA, 0x809A}, //5716 #CJK UNIFIED IDEOGRAPH + {0xE3EB, 0x80AD}, //5717 #CJK UNIFIED IDEOGRAPH + {0xE3EC, 0x5190}, //5718 #CJK UNIFIED IDEOGRAPH + {0xE3ED, 0x80AC}, //5719 #CJK UNIFIED IDEOGRAPH + {0xE3EE, 0x80DB}, //5720 #CJK UNIFIED IDEOGRAPH + {0xE3EF, 0x80E5}, //5721 #CJK UNIFIED IDEOGRAPH + {0xE3F0, 0x80D9}, //5722 #CJK UNIFIED IDEOGRAPH + {0xE3F1, 0x80DD}, //5723 #CJK UNIFIED IDEOGRAPH + {0xE3F2, 0x80C4}, //5724 #CJK UNIFIED IDEOGRAPH + {0xE3F3, 0x80DA}, //5725 #CJK UNIFIED IDEOGRAPH + {0xE3F4, 0x80D6}, //5726 #CJK UNIFIED IDEOGRAPH + {0xE3F5, 0x8109}, //5727 #CJK UNIFIED IDEOGRAPH + {0xE3F6, 0x80EF}, //5728 #CJK UNIFIED IDEOGRAPH + {0xE3F7, 0x80F1}, //5729 #CJK UNIFIED IDEOGRAPH + {0xE3F8, 0x811B}, //5730 #CJK UNIFIED IDEOGRAPH + {0xE3F9, 0x8129}, //5731 #CJK UNIFIED IDEOGRAPH + {0xE3FA, 0x8123}, //5732 #CJK UNIFIED IDEOGRAPH + {0xE3FB, 0x812F}, //5733 #CJK UNIFIED IDEOGRAPH + {0xE3FC, 0x814B}, //5734 #CJK UNIFIED IDEOGRAPH + {0xE440, 0x968B}, //5735 #CJK UNIFIED IDEOGRAPH + {0xE441, 0x8146}, //5736 #CJK UNIFIED IDEOGRAPH + {0xE442, 0x813E}, //5737 #CJK UNIFIED IDEOGRAPH + {0xE443, 0x8153}, //5738 #CJK UNIFIED IDEOGRAPH + {0xE444, 0x8151}, //5739 #CJK UNIFIED IDEOGRAPH + {0xE445, 0x80FC}, //5740 #CJK UNIFIED IDEOGRAPH + {0xE446, 0x8171}, //5741 #CJK UNIFIED IDEOGRAPH + {0xE447, 0x816E}, //5742 #CJK UNIFIED IDEOGRAPH + {0xE448, 0x8165}, //5743 #CJK UNIFIED IDEOGRAPH + {0xE449, 0x8166}, //5744 #CJK UNIFIED IDEOGRAPH + {0xE44A, 0x8174}, //5745 #CJK UNIFIED IDEOGRAPH + {0xE44B, 0x8183}, //5746 #CJK UNIFIED IDEOGRAPH + {0xE44C, 0x8188}, //5747 #CJK UNIFIED IDEOGRAPH + {0xE44D, 0x818A}, //5748 #CJK UNIFIED IDEOGRAPH + {0xE44E, 0x8180}, //5749 #CJK UNIFIED IDEOGRAPH + {0xE44F, 0x8182}, //5750 #CJK UNIFIED IDEOGRAPH + {0xE450, 0x81A0}, //5751 #CJK UNIFIED IDEOGRAPH + {0xE451, 0x8195}, //5752 #CJK UNIFIED IDEOGRAPH + {0xE452, 0x81A4}, //5753 #CJK UNIFIED IDEOGRAPH + {0xE453, 0x81A3}, //5754 #CJK UNIFIED IDEOGRAPH + {0xE454, 0x815F}, //5755 #CJK UNIFIED IDEOGRAPH + {0xE455, 0x8193}, //5756 #CJK UNIFIED IDEOGRAPH + {0xE456, 0x81A9}, //5757 #CJK UNIFIED IDEOGRAPH + {0xE457, 0x81B0}, //5758 #CJK UNIFIED IDEOGRAPH + {0xE458, 0x81B5}, //5759 #CJK UNIFIED IDEOGRAPH + {0xE459, 0x81BE}, //5760 #CJK UNIFIED IDEOGRAPH + {0xE45A, 0x81B8}, //5761 #CJK UNIFIED IDEOGRAPH + {0xE45B, 0x81BD}, //5762 #CJK UNIFIED IDEOGRAPH + {0xE45C, 0x81C0}, //5763 #CJK UNIFIED IDEOGRAPH + {0xE45D, 0x81C2}, //5764 #CJK UNIFIED IDEOGRAPH + {0xE45E, 0x81BA}, //5765 #CJK UNIFIED IDEOGRAPH + {0xE45F, 0x81C9}, //5766 #CJK UNIFIED IDEOGRAPH + {0xE460, 0x81CD}, //5767 #CJK UNIFIED IDEOGRAPH + {0xE461, 0x81D1}, //5768 #CJK UNIFIED IDEOGRAPH + {0xE462, 0x81D9}, //5769 #CJK UNIFIED IDEOGRAPH + {0xE463, 0x81D8}, //5770 #CJK UNIFIED IDEOGRAPH + {0xE464, 0x81C8}, //5771 #CJK UNIFIED IDEOGRAPH + {0xE465, 0x81DA}, //5772 #CJK UNIFIED IDEOGRAPH + {0xE466, 0x81DF}, //5773 #CJK UNIFIED IDEOGRAPH + {0xE467, 0x81E0}, //5774 #CJK UNIFIED IDEOGRAPH + {0xE468, 0x81E7}, //5775 #CJK UNIFIED IDEOGRAPH + {0xE469, 0x81FA}, //5776 #CJK UNIFIED IDEOGRAPH + {0xE46A, 0x81FB}, //5777 #CJK UNIFIED IDEOGRAPH + {0xE46B, 0x81FE}, //5778 #CJK UNIFIED IDEOGRAPH + {0xE46C, 0x8201}, //5779 #CJK UNIFIED IDEOGRAPH + {0xE46D, 0x8202}, //5780 #CJK UNIFIED IDEOGRAPH + {0xE46E, 0x8205}, //5781 #CJK UNIFIED IDEOGRAPH + {0xE46F, 0x8207}, //5782 #CJK UNIFIED IDEOGRAPH + {0xE470, 0x820A}, //5783 #CJK UNIFIED IDEOGRAPH + {0xE471, 0x820D}, //5784 #CJK UNIFIED IDEOGRAPH + {0xE472, 0x8210}, //5785 #CJK UNIFIED IDEOGRAPH + {0xE473, 0x8216}, //5786 #CJK UNIFIED IDEOGRAPH + {0xE474, 0x8229}, //5787 #CJK UNIFIED IDEOGRAPH + {0xE475, 0x822B}, //5788 #CJK UNIFIED IDEOGRAPH + {0xE476, 0x8238}, //5789 #CJK UNIFIED IDEOGRAPH + {0xE477, 0x8233}, //5790 #CJK UNIFIED IDEOGRAPH + {0xE478, 0x8240}, //5791 #CJK UNIFIED IDEOGRAPH + {0xE479, 0x8259}, //5792 #CJK UNIFIED IDEOGRAPH + {0xE47A, 0x8258}, //5793 #CJK UNIFIED IDEOGRAPH + {0xE47B, 0x825D}, //5794 #CJK UNIFIED IDEOGRAPH + {0xE47C, 0x825A}, //5795 #CJK UNIFIED IDEOGRAPH + {0xE47D, 0x825F}, //5796 #CJK UNIFIED IDEOGRAPH + {0xE47E, 0x8264}, //5797 #CJK UNIFIED IDEOGRAPH + {0xE480, 0x8262}, //5798 #CJK UNIFIED IDEOGRAPH + {0xE481, 0x8268}, //5799 #CJK UNIFIED IDEOGRAPH + {0xE482, 0x826A}, //5800 #CJK UNIFIED IDEOGRAPH + {0xE483, 0x826B}, //5801 #CJK UNIFIED IDEOGRAPH + {0xE484, 0x822E}, //5802 #CJK UNIFIED IDEOGRAPH + {0xE485, 0x8271}, //5803 #CJK UNIFIED IDEOGRAPH + {0xE486, 0x8277}, //5804 #CJK UNIFIED IDEOGRAPH + {0xE487, 0x8278}, //5805 #CJK UNIFIED IDEOGRAPH + {0xE488, 0x827E}, //5806 #CJK UNIFIED IDEOGRAPH + {0xE489, 0x828D}, //5807 #CJK UNIFIED IDEOGRAPH + {0xE48A, 0x8292}, //5808 #CJK UNIFIED IDEOGRAPH + {0xE48B, 0x82AB}, //5809 #CJK UNIFIED IDEOGRAPH + {0xE48C, 0x829F}, //5810 #CJK UNIFIED IDEOGRAPH + {0xE48D, 0x82BB}, //5811 #CJK UNIFIED IDEOGRAPH + {0xE48E, 0x82AC}, //5812 #CJK UNIFIED IDEOGRAPH + {0xE48F, 0x82E1}, //5813 #CJK UNIFIED IDEOGRAPH + {0xE490, 0x82E3}, //5814 #CJK UNIFIED IDEOGRAPH + {0xE491, 0x82DF}, //5815 #CJK UNIFIED IDEOGRAPH + {0xE492, 0x82D2}, //5816 #CJK UNIFIED IDEOGRAPH + {0xE493, 0x82F4}, //5817 #CJK UNIFIED IDEOGRAPH + {0xE494, 0x82F3}, //5818 #CJK UNIFIED IDEOGRAPH + {0xE495, 0x82FA}, //5819 #CJK UNIFIED IDEOGRAPH + {0xE496, 0x8393}, //5820 #CJK UNIFIED IDEOGRAPH + {0xE497, 0x8303}, //5821 #CJK UNIFIED IDEOGRAPH + {0xE498, 0x82FB}, //5822 #CJK UNIFIED IDEOGRAPH + {0xE499, 0x82F9}, //5823 #CJK UNIFIED IDEOGRAPH + {0xE49A, 0x82DE}, //5824 #CJK UNIFIED IDEOGRAPH + {0xE49B, 0x8306}, //5825 #CJK UNIFIED IDEOGRAPH + {0xE49C, 0x82DC}, //5826 #CJK UNIFIED IDEOGRAPH + {0xE49D, 0x8309}, //5827 #CJK UNIFIED IDEOGRAPH + {0xE49E, 0x82D9}, //5828 #CJK UNIFIED IDEOGRAPH + {0xE49F, 0x8335}, //5829 #CJK UNIFIED IDEOGRAPH + {0xE4A0, 0x8334}, //5830 #CJK UNIFIED IDEOGRAPH + {0xE4A1, 0x8316}, //5831 #CJK UNIFIED IDEOGRAPH + {0xE4A2, 0x8332}, //5832 #CJK UNIFIED IDEOGRAPH + {0xE4A3, 0x8331}, //5833 #CJK UNIFIED IDEOGRAPH + {0xE4A4, 0x8340}, //5834 #CJK UNIFIED IDEOGRAPH + {0xE4A5, 0x8339}, //5835 #CJK UNIFIED IDEOGRAPH + {0xE4A6, 0x8350}, //5836 #CJK UNIFIED IDEOGRAPH + {0xE4A7, 0x8345}, //5837 #CJK UNIFIED IDEOGRAPH + {0xE4A8, 0x832F}, //5838 #CJK UNIFIED IDEOGRAPH + {0xE4A9, 0x832B}, //5839 #CJK UNIFIED IDEOGRAPH + {0xE4AA, 0x8317}, //5840 #CJK UNIFIED IDEOGRAPH + {0xE4AB, 0x8318}, //5841 #CJK UNIFIED IDEOGRAPH + {0xE4AC, 0x8385}, //5842 #CJK UNIFIED IDEOGRAPH + {0xE4AD, 0x839A}, //5843 #CJK UNIFIED IDEOGRAPH + {0xE4AE, 0x83AA}, //5844 #CJK UNIFIED IDEOGRAPH + {0xE4AF, 0x839F}, //5845 #CJK UNIFIED IDEOGRAPH + {0xE4B0, 0x83A2}, //5846 #CJK UNIFIED IDEOGRAPH + {0xE4B1, 0x8396}, //5847 #CJK UNIFIED IDEOGRAPH + {0xE4B2, 0x8323}, //5848 #CJK UNIFIED IDEOGRAPH + {0xE4B3, 0x838E}, //5849 #CJK UNIFIED IDEOGRAPH + {0xE4B4, 0x8387}, //5850 #CJK UNIFIED IDEOGRAPH + {0xE4B5, 0x838A}, //5851 #CJK UNIFIED IDEOGRAPH + {0xE4B6, 0x837C}, //5852 #CJK UNIFIED IDEOGRAPH + {0xE4B7, 0x83B5}, //5853 #CJK UNIFIED IDEOGRAPH + {0xE4B8, 0x8373}, //5854 #CJK UNIFIED IDEOGRAPH + {0xE4B9, 0x8375}, //5855 #CJK UNIFIED IDEOGRAPH + {0xE4BA, 0x83A0}, //5856 #CJK UNIFIED IDEOGRAPH + {0xE4BB, 0x8389}, //5857 #CJK UNIFIED IDEOGRAPH + {0xE4BC, 0x83A8}, //5858 #CJK UNIFIED IDEOGRAPH + {0xE4BD, 0x83F4}, //5859 #CJK UNIFIED IDEOGRAPH + {0xE4BE, 0x8413}, //5860 #CJK UNIFIED IDEOGRAPH + {0xE4BF, 0x83EB}, //5861 #CJK UNIFIED IDEOGRAPH + {0xE4C0, 0x83CE}, //5862 #CJK UNIFIED IDEOGRAPH + {0xE4C1, 0x83FD}, //5863 #CJK UNIFIED IDEOGRAPH + {0xE4C2, 0x8403}, //5864 #CJK UNIFIED IDEOGRAPH + {0xE4C3, 0x83D8}, //5865 #CJK UNIFIED IDEOGRAPH + {0xE4C4, 0x840B}, //5866 #CJK UNIFIED IDEOGRAPH + {0xE4C5, 0x83C1}, //5867 #CJK UNIFIED IDEOGRAPH + {0xE4C6, 0x83F7}, //5868 #CJK UNIFIED IDEOGRAPH + {0xE4C7, 0x8407}, //5869 #CJK UNIFIED IDEOGRAPH + {0xE4C8, 0x83E0}, //5870 #CJK UNIFIED IDEOGRAPH + {0xE4C9, 0x83F2}, //5871 #CJK UNIFIED IDEOGRAPH + {0xE4CA, 0x840D}, //5872 #CJK UNIFIED IDEOGRAPH + {0xE4CB, 0x8422}, //5873 #CJK UNIFIED IDEOGRAPH + {0xE4CC, 0x8420}, //5874 #CJK UNIFIED IDEOGRAPH + {0xE4CD, 0x83BD}, //5875 #CJK UNIFIED IDEOGRAPH + {0xE4CE, 0x8438}, //5876 #CJK UNIFIED IDEOGRAPH + {0xE4CF, 0x8506}, //5877 #CJK UNIFIED IDEOGRAPH + {0xE4D0, 0x83FB}, //5878 #CJK UNIFIED IDEOGRAPH + {0xE4D1, 0x846D}, //5879 #CJK UNIFIED IDEOGRAPH + {0xE4D2, 0x842A}, //5880 #CJK UNIFIED IDEOGRAPH + {0xE4D3, 0x843C}, //5881 #CJK UNIFIED IDEOGRAPH + {0xE4D4, 0x855A}, //5882 #CJK UNIFIED IDEOGRAPH + {0xE4D5, 0x8484}, //5883 #CJK UNIFIED IDEOGRAPH + {0xE4D6, 0x8477}, //5884 #CJK UNIFIED IDEOGRAPH + {0xE4D7, 0x846B}, //5885 #CJK UNIFIED IDEOGRAPH + {0xE4D8, 0x84AD}, //5886 #CJK UNIFIED IDEOGRAPH + {0xE4D9, 0x846E}, //5887 #CJK UNIFIED IDEOGRAPH + {0xE4DA, 0x8482}, //5888 #CJK UNIFIED IDEOGRAPH + {0xE4DB, 0x8469}, //5889 #CJK UNIFIED IDEOGRAPH + {0xE4DC, 0x8446}, //5890 #CJK UNIFIED IDEOGRAPH + {0xE4DD, 0x842C}, //5891 #CJK UNIFIED IDEOGRAPH + {0xE4DE, 0x846F}, //5892 #CJK UNIFIED IDEOGRAPH + {0xE4DF, 0x8479}, //5893 #CJK UNIFIED IDEOGRAPH + {0xE4E0, 0x8435}, //5894 #CJK UNIFIED IDEOGRAPH + {0xE4E1, 0x84CA}, //5895 #CJK UNIFIED IDEOGRAPH + {0xE4E2, 0x8462}, //5896 #CJK UNIFIED IDEOGRAPH + {0xE4E3, 0x84B9}, //5897 #CJK UNIFIED IDEOGRAPH + {0xE4E4, 0x84BF}, //5898 #CJK UNIFIED IDEOGRAPH + {0xE4E5, 0x849F}, //5899 #CJK UNIFIED IDEOGRAPH + {0xE4E6, 0x84D9}, //5900 #CJK UNIFIED IDEOGRAPH + {0xE4E7, 0x84CD}, //5901 #CJK UNIFIED IDEOGRAPH + {0xE4E8, 0x84BB}, //5902 #CJK UNIFIED IDEOGRAPH + {0xE4E9, 0x84DA}, //5903 #CJK UNIFIED IDEOGRAPH + {0xE4EA, 0x84D0}, //5904 #CJK UNIFIED IDEOGRAPH + {0xE4EB, 0x84C1}, //5905 #CJK UNIFIED IDEOGRAPH + {0xE4EC, 0x84C6}, //5906 #CJK UNIFIED IDEOGRAPH + {0xE4ED, 0x84D6}, //5907 #CJK UNIFIED IDEOGRAPH + {0xE4EE, 0x84A1}, //5908 #CJK UNIFIED IDEOGRAPH + {0xE4EF, 0x8521}, //5909 #CJK UNIFIED IDEOGRAPH + {0xE4F0, 0x84FF}, //5910 #CJK UNIFIED IDEOGRAPH + {0xE4F1, 0x84F4}, //5911 #CJK UNIFIED IDEOGRAPH + {0xE4F2, 0x8517}, //5912 #CJK UNIFIED IDEOGRAPH + {0xE4F3, 0x8518}, //5913 #CJK UNIFIED IDEOGRAPH + {0xE4F4, 0x852C}, //5914 #CJK UNIFIED IDEOGRAPH + {0xE4F5, 0x851F}, //5915 #CJK UNIFIED IDEOGRAPH + {0xE4F6, 0x8515}, //5916 #CJK UNIFIED IDEOGRAPH + {0xE4F7, 0x8514}, //5917 #CJK UNIFIED IDEOGRAPH + {0xE4F8, 0x84FC}, //5918 #CJK UNIFIED IDEOGRAPH + {0xE4F9, 0x8540}, //5919 #CJK UNIFIED IDEOGRAPH + {0xE4FA, 0x8563}, //5920 #CJK UNIFIED IDEOGRAPH + {0xE4FB, 0x8558}, //5921 #CJK UNIFIED IDEOGRAPH + {0xE4FC, 0x8548}, //5922 #CJK UNIFIED IDEOGRAPH + {0xE540, 0x8541}, //5923 #CJK UNIFIED IDEOGRAPH + {0xE541, 0x8602}, //5924 #CJK UNIFIED IDEOGRAPH + {0xE542, 0x854B}, //5925 #CJK UNIFIED IDEOGRAPH + {0xE543, 0x8555}, //5926 #CJK UNIFIED IDEOGRAPH + {0xE544, 0x8580}, //5927 #CJK UNIFIED IDEOGRAPH + {0xE545, 0x85A4}, //5928 #CJK UNIFIED IDEOGRAPH + {0xE546, 0x8588}, //5929 #CJK UNIFIED IDEOGRAPH + {0xE547, 0x8591}, //5930 #CJK UNIFIED IDEOGRAPH + {0xE548, 0x858A}, //5931 #CJK UNIFIED IDEOGRAPH + {0xE549, 0x85A8}, //5932 #CJK UNIFIED IDEOGRAPH + {0xE54A, 0x856D}, //5933 #CJK UNIFIED IDEOGRAPH + {0xE54B, 0x8594}, //5934 #CJK UNIFIED IDEOGRAPH + {0xE54C, 0x859B}, //5935 #CJK UNIFIED IDEOGRAPH + {0xE54D, 0x85EA}, //5936 #CJK UNIFIED IDEOGRAPH + {0xE54E, 0x8587}, //5937 #CJK UNIFIED IDEOGRAPH + {0xE54F, 0x859C}, //5938 #CJK UNIFIED IDEOGRAPH + {0xE550, 0x8577}, //5939 #CJK UNIFIED IDEOGRAPH + {0xE551, 0x857E}, //5940 #CJK UNIFIED IDEOGRAPH + {0xE552, 0x8590}, //5941 #CJK UNIFIED IDEOGRAPH + {0xE553, 0x85C9}, //5942 #CJK UNIFIED IDEOGRAPH + {0xE554, 0x85BA}, //5943 #CJK UNIFIED IDEOGRAPH + {0xE555, 0x85CF}, //5944 #CJK UNIFIED IDEOGRAPH + {0xE556, 0x85B9}, //5945 #CJK UNIFIED IDEOGRAPH + {0xE557, 0x85D0}, //5946 #CJK UNIFIED IDEOGRAPH + {0xE558, 0x85D5}, //5947 #CJK UNIFIED IDEOGRAPH + {0xE559, 0x85DD}, //5948 #CJK UNIFIED IDEOGRAPH + {0xE55A, 0x85E5}, //5949 #CJK UNIFIED IDEOGRAPH + {0xE55B, 0x85DC}, //5950 #CJK UNIFIED IDEOGRAPH + {0xE55C, 0x85F9}, //5951 #CJK UNIFIED IDEOGRAPH + {0xE55D, 0x860A}, //5952 #CJK UNIFIED IDEOGRAPH + {0xE55E, 0x8613}, //5953 #CJK UNIFIED IDEOGRAPH + {0xE55F, 0x860B}, //5954 #CJK UNIFIED IDEOGRAPH + {0xE560, 0x85FE}, //5955 #CJK UNIFIED IDEOGRAPH + {0xE561, 0x85FA}, //5956 #CJK UNIFIED IDEOGRAPH + {0xE562, 0x8606}, //5957 #CJK UNIFIED IDEOGRAPH + {0xE563, 0x8622}, //5958 #CJK UNIFIED IDEOGRAPH + {0xE564, 0x861A}, //5959 #CJK UNIFIED IDEOGRAPH + {0xE565, 0x8630}, //5960 #CJK UNIFIED IDEOGRAPH + {0xE566, 0x863F}, //5961 #CJK UNIFIED IDEOGRAPH + {0xE567, 0x864D}, //5962 #CJK UNIFIED IDEOGRAPH + {0xE568, 0x4E55}, //5963 #CJK UNIFIED IDEOGRAPH + {0xE569, 0x8654}, //5964 #CJK UNIFIED IDEOGRAPH + {0xE56A, 0x865F}, //5965 #CJK UNIFIED IDEOGRAPH + {0xE56B, 0x8667}, //5966 #CJK UNIFIED IDEOGRAPH + {0xE56C, 0x8671}, //5967 #CJK UNIFIED IDEOGRAPH + {0xE56D, 0x8693}, //5968 #CJK UNIFIED IDEOGRAPH + {0xE56E, 0x86A3}, //5969 #CJK UNIFIED IDEOGRAPH + {0xE56F, 0x86A9}, //5970 #CJK UNIFIED IDEOGRAPH + {0xE570, 0x86AA}, //5971 #CJK UNIFIED IDEOGRAPH + {0xE571, 0x868B}, //5972 #CJK UNIFIED IDEOGRAPH + {0xE572, 0x868C}, //5973 #CJK UNIFIED IDEOGRAPH + {0xE573, 0x86B6}, //5974 #CJK UNIFIED IDEOGRAPH + {0xE574, 0x86AF}, //5975 #CJK UNIFIED IDEOGRAPH + {0xE575, 0x86C4}, //5976 #CJK UNIFIED IDEOGRAPH + {0xE576, 0x86C6}, //5977 #CJK UNIFIED IDEOGRAPH + {0xE577, 0x86B0}, //5978 #CJK UNIFIED IDEOGRAPH + {0xE578, 0x86C9}, //5979 #CJK UNIFIED IDEOGRAPH + {0xE579, 0x8823}, //5980 #CJK UNIFIED IDEOGRAPH + {0xE57A, 0x86AB}, //5981 #CJK UNIFIED IDEOGRAPH + {0xE57B, 0x86D4}, //5982 #CJK UNIFIED IDEOGRAPH + {0xE57C, 0x86DE}, //5983 #CJK UNIFIED IDEOGRAPH + {0xE57D, 0x86E9}, //5984 #CJK UNIFIED IDEOGRAPH + {0xE57E, 0x86EC}, //5985 #CJK UNIFIED IDEOGRAPH + {0xE580, 0x86DF}, //5986 #CJK UNIFIED IDEOGRAPH + {0xE581, 0x86DB}, //5987 #CJK UNIFIED IDEOGRAPH + {0xE582, 0x86EF}, //5988 #CJK UNIFIED IDEOGRAPH + {0xE583, 0x8712}, //5989 #CJK UNIFIED IDEOGRAPH + {0xE584, 0x8706}, //5990 #CJK UNIFIED IDEOGRAPH + {0xE585, 0x8708}, //5991 #CJK UNIFIED IDEOGRAPH + {0xE586, 0x8700}, //5992 #CJK UNIFIED IDEOGRAPH + {0xE587, 0x8703}, //5993 #CJK UNIFIED IDEOGRAPH + {0xE588, 0x86FB}, //5994 #CJK UNIFIED IDEOGRAPH + {0xE589, 0x8711}, //5995 #CJK UNIFIED IDEOGRAPH + {0xE58A, 0x8709}, //5996 #CJK UNIFIED IDEOGRAPH + {0xE58B, 0x870D}, //5997 #CJK UNIFIED IDEOGRAPH + {0xE58C, 0x86F9}, //5998 #CJK UNIFIED IDEOGRAPH + {0xE58D, 0x870A}, //5999 #CJK UNIFIED IDEOGRAPH + {0xE58E, 0x8734}, //6000 #CJK UNIFIED IDEOGRAPH + {0xE58F, 0x873F}, //6001 #CJK UNIFIED IDEOGRAPH + {0xE590, 0x8737}, //6002 #CJK UNIFIED IDEOGRAPH + {0xE591, 0x873B}, //6003 #CJK UNIFIED IDEOGRAPH + {0xE592, 0x8725}, //6004 #CJK UNIFIED IDEOGRAPH + {0xE593, 0x8729}, //6005 #CJK UNIFIED IDEOGRAPH + {0xE594, 0x871A}, //6006 #CJK UNIFIED IDEOGRAPH + {0xE595, 0x8760}, //6007 #CJK UNIFIED IDEOGRAPH + {0xE596, 0x875F}, //6008 #CJK UNIFIED IDEOGRAPH + {0xE597, 0x8778}, //6009 #CJK UNIFIED IDEOGRAPH + {0xE598, 0x874C}, //6010 #CJK UNIFIED IDEOGRAPH + {0xE599, 0x874E}, //6011 #CJK UNIFIED IDEOGRAPH + {0xE59A, 0x8774}, //6012 #CJK UNIFIED IDEOGRAPH + {0xE59B, 0x8757}, //6013 #CJK UNIFIED IDEOGRAPH + {0xE59C, 0x8768}, //6014 #CJK UNIFIED IDEOGRAPH + {0xE59D, 0x876E}, //6015 #CJK UNIFIED IDEOGRAPH + {0xE59E, 0x8759}, //6016 #CJK UNIFIED IDEOGRAPH + {0xE59F, 0x8753}, //6017 #CJK UNIFIED IDEOGRAPH + {0xE5A0, 0x8763}, //6018 #CJK UNIFIED IDEOGRAPH + {0xE5A1, 0x876A}, //6019 #CJK UNIFIED IDEOGRAPH + {0xE5A2, 0x8805}, //6020 #CJK UNIFIED IDEOGRAPH + {0xE5A3, 0x87A2}, //6021 #CJK UNIFIED IDEOGRAPH + {0xE5A4, 0x879F}, //6022 #CJK UNIFIED IDEOGRAPH + {0xE5A5, 0x8782}, //6023 #CJK UNIFIED IDEOGRAPH + {0xE5A6, 0x87AF}, //6024 #CJK UNIFIED IDEOGRAPH + {0xE5A7, 0x87CB}, //6025 #CJK UNIFIED IDEOGRAPH + {0xE5A8, 0x87BD}, //6026 #CJK UNIFIED IDEOGRAPH + {0xE5A9, 0x87C0}, //6027 #CJK UNIFIED IDEOGRAPH + {0xE5AA, 0x87D0}, //6028 #CJK UNIFIED IDEOGRAPH + {0xE5AB, 0x96D6}, //6029 #CJK UNIFIED IDEOGRAPH + {0xE5AC, 0x87AB}, //6030 #CJK UNIFIED IDEOGRAPH + {0xE5AD, 0x87C4}, //6031 #CJK UNIFIED IDEOGRAPH + {0xE5AE, 0x87B3}, //6032 #CJK UNIFIED IDEOGRAPH + {0xE5AF, 0x87C7}, //6033 #CJK UNIFIED IDEOGRAPH + {0xE5B0, 0x87C6}, //6034 #CJK UNIFIED IDEOGRAPH + {0xE5B1, 0x87BB}, //6035 #CJK UNIFIED IDEOGRAPH + {0xE5B2, 0x87EF}, //6036 #CJK UNIFIED IDEOGRAPH + {0xE5B3, 0x87F2}, //6037 #CJK UNIFIED IDEOGRAPH + {0xE5B4, 0x87E0}, //6038 #CJK UNIFIED IDEOGRAPH + {0xE5B5, 0x880F}, //6039 #CJK UNIFIED IDEOGRAPH + {0xE5B6, 0x880D}, //6040 #CJK UNIFIED IDEOGRAPH + {0xE5B7, 0x87FE}, //6041 #CJK UNIFIED IDEOGRAPH + {0xE5B8, 0x87F6}, //6042 #CJK UNIFIED IDEOGRAPH + {0xE5B9, 0x87F7}, //6043 #CJK UNIFIED IDEOGRAPH + {0xE5BA, 0x880E}, //6044 #CJK UNIFIED IDEOGRAPH + {0xE5BB, 0x87D2}, //6045 #CJK UNIFIED IDEOGRAPH + {0xE5BC, 0x8811}, //6046 #CJK UNIFIED IDEOGRAPH + {0xE5BD, 0x8816}, //6047 #CJK UNIFIED IDEOGRAPH + {0xE5BE, 0x8815}, //6048 #CJK UNIFIED IDEOGRAPH + {0xE5BF, 0x8822}, //6049 #CJK UNIFIED IDEOGRAPH + {0xE5C0, 0x8821}, //6050 #CJK UNIFIED IDEOGRAPH + {0xE5C1, 0x8831}, //6051 #CJK UNIFIED IDEOGRAPH + {0xE5C2, 0x8836}, //6052 #CJK UNIFIED IDEOGRAPH + {0xE5C3, 0x8839}, //6053 #CJK UNIFIED IDEOGRAPH + {0xE5C4, 0x8827}, //6054 #CJK UNIFIED IDEOGRAPH + {0xE5C5, 0x883B}, //6055 #CJK UNIFIED IDEOGRAPH + {0xE5C6, 0x8844}, //6056 #CJK UNIFIED IDEOGRAPH + {0xE5C7, 0x8842}, //6057 #CJK UNIFIED IDEOGRAPH + {0xE5C8, 0x8852}, //6058 #CJK UNIFIED IDEOGRAPH + {0xE5C9, 0x8859}, //6059 #CJK UNIFIED IDEOGRAPH + {0xE5CA, 0x885E}, //6060 #CJK UNIFIED IDEOGRAPH + {0xE5CB, 0x8862}, //6061 #CJK UNIFIED IDEOGRAPH + {0xE5CC, 0x886B}, //6062 #CJK UNIFIED IDEOGRAPH + {0xE5CD, 0x8881}, //6063 #CJK UNIFIED IDEOGRAPH + {0xE5CE, 0x887E}, //6064 #CJK UNIFIED IDEOGRAPH + {0xE5CF, 0x889E}, //6065 #CJK UNIFIED IDEOGRAPH + {0xE5D0, 0x8875}, //6066 #CJK UNIFIED IDEOGRAPH + {0xE5D1, 0x887D}, //6067 #CJK UNIFIED IDEOGRAPH + {0xE5D2, 0x88B5}, //6068 #CJK UNIFIED IDEOGRAPH + {0xE5D3, 0x8872}, //6069 #CJK UNIFIED IDEOGRAPH + {0xE5D4, 0x8882}, //6070 #CJK UNIFIED IDEOGRAPH + {0xE5D5, 0x8897}, //6071 #CJK UNIFIED IDEOGRAPH + {0xE5D6, 0x8892}, //6072 #CJK UNIFIED IDEOGRAPH + {0xE5D7, 0x88AE}, //6073 #CJK UNIFIED IDEOGRAPH + {0xE5D8, 0x8899}, //6074 #CJK UNIFIED IDEOGRAPH + {0xE5D9, 0x88A2}, //6075 #CJK UNIFIED IDEOGRAPH + {0xE5DA, 0x888D}, //6076 #CJK UNIFIED IDEOGRAPH + {0xE5DB, 0x88A4}, //6077 #CJK UNIFIED IDEOGRAPH + {0xE5DC, 0x88B0}, //6078 #CJK UNIFIED IDEOGRAPH + {0xE5DD, 0x88BF}, //6079 #CJK UNIFIED IDEOGRAPH + {0xE5DE, 0x88B1}, //6080 #CJK UNIFIED IDEOGRAPH + {0xE5DF, 0x88C3}, //6081 #CJK UNIFIED IDEOGRAPH + {0xE5E0, 0x88C4}, //6082 #CJK UNIFIED IDEOGRAPH + {0xE5E1, 0x88D4}, //6083 #CJK UNIFIED IDEOGRAPH + {0xE5E2, 0x88D8}, //6084 #CJK UNIFIED IDEOGRAPH + {0xE5E3, 0x88D9}, //6085 #CJK UNIFIED IDEOGRAPH + {0xE5E4, 0x88DD}, //6086 #CJK UNIFIED IDEOGRAPH + {0xE5E5, 0x88F9}, //6087 #CJK UNIFIED IDEOGRAPH + {0xE5E6, 0x8902}, //6088 #CJK UNIFIED IDEOGRAPH + {0xE5E7, 0x88FC}, //6089 #CJK UNIFIED IDEOGRAPH + {0xE5E8, 0x88F4}, //6090 #CJK UNIFIED IDEOGRAPH + {0xE5E9, 0x88E8}, //6091 #CJK UNIFIED IDEOGRAPH + {0xE5EA, 0x88F2}, //6092 #CJK UNIFIED IDEOGRAPH + {0xE5EB, 0x8904}, //6093 #CJK UNIFIED IDEOGRAPH + {0xE5EC, 0x890C}, //6094 #CJK UNIFIED IDEOGRAPH + {0xE5ED, 0x890A}, //6095 #CJK UNIFIED IDEOGRAPH + {0xE5EE, 0x8913}, //6096 #CJK UNIFIED IDEOGRAPH + {0xE5EF, 0x8943}, //6097 #CJK UNIFIED IDEOGRAPH + {0xE5F0, 0x891E}, //6098 #CJK UNIFIED IDEOGRAPH + {0xE5F1, 0x8925}, //6099 #CJK UNIFIED IDEOGRAPH + {0xE5F2, 0x892A}, //6100 #CJK UNIFIED IDEOGRAPH + {0xE5F3, 0x892B}, //6101 #CJK UNIFIED IDEOGRAPH + {0xE5F4, 0x8941}, //6102 #CJK UNIFIED IDEOGRAPH + {0xE5F5, 0x8944}, //6103 #CJK UNIFIED IDEOGRAPH + {0xE5F6, 0x893B}, //6104 #CJK UNIFIED IDEOGRAPH + {0xE5F7, 0x8936}, //6105 #CJK UNIFIED IDEOGRAPH + {0xE5F8, 0x8938}, //6106 #CJK UNIFIED IDEOGRAPH + {0xE5F9, 0x894C}, //6107 #CJK UNIFIED IDEOGRAPH + {0xE5FA, 0x891D}, //6108 #CJK UNIFIED IDEOGRAPH + {0xE5FB, 0x8960}, //6109 #CJK UNIFIED IDEOGRAPH + {0xE5FC, 0x895E}, //6110 #CJK UNIFIED IDEOGRAPH + {0xE640, 0x8966}, //6111 #CJK UNIFIED IDEOGRAPH + {0xE641, 0x8964}, //6112 #CJK UNIFIED IDEOGRAPH + {0xE642, 0x896D}, //6113 #CJK UNIFIED IDEOGRAPH + {0xE643, 0x896A}, //6114 #CJK UNIFIED IDEOGRAPH + {0xE644, 0x896F}, //6115 #CJK UNIFIED IDEOGRAPH + {0xE645, 0x8974}, //6116 #CJK UNIFIED IDEOGRAPH + {0xE646, 0x8977}, //6117 #CJK UNIFIED IDEOGRAPH + {0xE647, 0x897E}, //6118 #CJK UNIFIED IDEOGRAPH + {0xE648, 0x8983}, //6119 #CJK UNIFIED IDEOGRAPH + {0xE649, 0x8988}, //6120 #CJK UNIFIED IDEOGRAPH + {0xE64A, 0x898A}, //6121 #CJK UNIFIED IDEOGRAPH + {0xE64B, 0x8993}, //6122 #CJK UNIFIED IDEOGRAPH + {0xE64C, 0x8998}, //6123 #CJK UNIFIED IDEOGRAPH + {0xE64D, 0x89A1}, //6124 #CJK UNIFIED IDEOGRAPH + {0xE64E, 0x89A9}, //6125 #CJK UNIFIED IDEOGRAPH + {0xE64F, 0x89A6}, //6126 #CJK UNIFIED IDEOGRAPH + {0xE650, 0x89AC}, //6127 #CJK UNIFIED IDEOGRAPH + {0xE651, 0x89AF}, //6128 #CJK UNIFIED IDEOGRAPH + {0xE652, 0x89B2}, //6129 #CJK UNIFIED IDEOGRAPH + {0xE653, 0x89BA}, //6130 #CJK UNIFIED IDEOGRAPH + {0xE654, 0x89BD}, //6131 #CJK UNIFIED IDEOGRAPH + {0xE655, 0x89BF}, //6132 #CJK UNIFIED IDEOGRAPH + {0xE656, 0x89C0}, //6133 #CJK UNIFIED IDEOGRAPH + {0xE657, 0x89DA}, //6134 #CJK UNIFIED IDEOGRAPH + {0xE658, 0x89DC}, //6135 #CJK UNIFIED IDEOGRAPH + {0xE659, 0x89DD}, //6136 #CJK UNIFIED IDEOGRAPH + {0xE65A, 0x89E7}, //6137 #CJK UNIFIED IDEOGRAPH + {0xE65B, 0x89F4}, //6138 #CJK UNIFIED IDEOGRAPH + {0xE65C, 0x89F8}, //6139 #CJK UNIFIED IDEOGRAPH + {0xE65D, 0x8A03}, //6140 #CJK UNIFIED IDEOGRAPH + {0xE65E, 0x8A16}, //6141 #CJK UNIFIED IDEOGRAPH + {0xE65F, 0x8A10}, //6142 #CJK UNIFIED IDEOGRAPH + {0xE660, 0x8A0C}, //6143 #CJK UNIFIED IDEOGRAPH + {0xE661, 0x8A1B}, //6144 #CJK UNIFIED IDEOGRAPH + {0xE662, 0x8A1D}, //6145 #CJK UNIFIED IDEOGRAPH + {0xE663, 0x8A25}, //6146 #CJK UNIFIED IDEOGRAPH + {0xE664, 0x8A36}, //6147 #CJK UNIFIED IDEOGRAPH + {0xE665, 0x8A41}, //6148 #CJK UNIFIED IDEOGRAPH + {0xE666, 0x8A5B}, //6149 #CJK UNIFIED IDEOGRAPH + {0xE667, 0x8A52}, //6150 #CJK UNIFIED IDEOGRAPH + {0xE668, 0x8A46}, //6151 #CJK UNIFIED IDEOGRAPH + {0xE669, 0x8A48}, //6152 #CJK UNIFIED IDEOGRAPH + {0xE66A, 0x8A7C}, //6153 #CJK UNIFIED IDEOGRAPH + {0xE66B, 0x8A6D}, //6154 #CJK UNIFIED IDEOGRAPH + {0xE66C, 0x8A6C}, //6155 #CJK UNIFIED IDEOGRAPH + {0xE66D, 0x8A62}, //6156 #CJK UNIFIED IDEOGRAPH + {0xE66E, 0x8A85}, //6157 #CJK UNIFIED IDEOGRAPH + {0xE66F, 0x8A82}, //6158 #CJK UNIFIED IDEOGRAPH + {0xE670, 0x8A84}, //6159 #CJK UNIFIED IDEOGRAPH + {0xE671, 0x8AA8}, //6160 #CJK UNIFIED IDEOGRAPH + {0xE672, 0x8AA1}, //6161 #CJK UNIFIED IDEOGRAPH + {0xE673, 0x8A91}, //6162 #CJK UNIFIED IDEOGRAPH + {0xE674, 0x8AA5}, //6163 #CJK UNIFIED IDEOGRAPH + {0xE675, 0x8AA6}, //6164 #CJK UNIFIED IDEOGRAPH + {0xE676, 0x8A9A}, //6165 #CJK UNIFIED IDEOGRAPH + {0xE677, 0x8AA3}, //6166 #CJK UNIFIED IDEOGRAPH + {0xE678, 0x8AC4}, //6167 #CJK UNIFIED IDEOGRAPH + {0xE679, 0x8ACD}, //6168 #CJK UNIFIED IDEOGRAPH + {0xE67A, 0x8AC2}, //6169 #CJK UNIFIED IDEOGRAPH + {0xE67B, 0x8ADA}, //6170 #CJK UNIFIED IDEOGRAPH + {0xE67C, 0x8AEB}, //6171 #CJK UNIFIED IDEOGRAPH + {0xE67D, 0x8AF3}, //6172 #CJK UNIFIED IDEOGRAPH + {0xE67E, 0x8AE7}, //6173 #CJK UNIFIED IDEOGRAPH + {0xE680, 0x8AE4}, //6174 #CJK UNIFIED IDEOGRAPH + {0xE681, 0x8AF1}, //6175 #CJK UNIFIED IDEOGRAPH + {0xE682, 0x8B14}, //6176 #CJK UNIFIED IDEOGRAPH + {0xE683, 0x8AE0}, //6177 #CJK UNIFIED IDEOGRAPH + {0xE684, 0x8AE2}, //6178 #CJK UNIFIED IDEOGRAPH + {0xE685, 0x8AF7}, //6179 #CJK UNIFIED IDEOGRAPH + {0xE686, 0x8ADE}, //6180 #CJK UNIFIED IDEOGRAPH + {0xE687, 0x8ADB}, //6181 #CJK UNIFIED IDEOGRAPH + {0xE688, 0x8B0C}, //6182 #CJK UNIFIED IDEOGRAPH + {0xE689, 0x8B07}, //6183 #CJK UNIFIED IDEOGRAPH + {0xE68A, 0x8B1A}, //6184 #CJK UNIFIED IDEOGRAPH + {0xE68B, 0x8AE1}, //6185 #CJK UNIFIED IDEOGRAPH + {0xE68C, 0x8B16}, //6186 #CJK UNIFIED IDEOGRAPH + {0xE68D, 0x8B10}, //6187 #CJK UNIFIED IDEOGRAPH + {0xE68E, 0x8B17}, //6188 #CJK UNIFIED IDEOGRAPH + {0xE68F, 0x8B20}, //6189 #CJK UNIFIED IDEOGRAPH + {0xE690, 0x8B33}, //6190 #CJK UNIFIED IDEOGRAPH + {0xE691, 0x97AB}, //6191 #CJK UNIFIED IDEOGRAPH + {0xE692, 0x8B26}, //6192 #CJK UNIFIED IDEOGRAPH + {0xE693, 0x8B2B}, //6193 #CJK UNIFIED IDEOGRAPH + {0xE694, 0x8B3E}, //6194 #CJK UNIFIED IDEOGRAPH + {0xE695, 0x8B28}, //6195 #CJK UNIFIED IDEOGRAPH + {0xE696, 0x8B41}, //6196 #CJK UNIFIED IDEOGRAPH + {0xE697, 0x8B4C}, //6197 #CJK UNIFIED IDEOGRAPH + {0xE698, 0x8B4F}, //6198 #CJK UNIFIED IDEOGRAPH + {0xE699, 0x8B4E}, //6199 #CJK UNIFIED IDEOGRAPH + {0xE69A, 0x8B49}, //6200 #CJK UNIFIED IDEOGRAPH + {0xE69B, 0x8B56}, //6201 #CJK UNIFIED IDEOGRAPH + {0xE69C, 0x8B5B}, //6202 #CJK UNIFIED IDEOGRAPH + {0xE69D, 0x8B5A}, //6203 #CJK UNIFIED IDEOGRAPH + {0xE69E, 0x8B6B}, //6204 #CJK UNIFIED IDEOGRAPH + {0xE69F, 0x8B5F}, //6205 #CJK UNIFIED IDEOGRAPH + {0xE6A0, 0x8B6C}, //6206 #CJK UNIFIED IDEOGRAPH + {0xE6A1, 0x8B6F}, //6207 #CJK UNIFIED IDEOGRAPH + {0xE6A2, 0x8B74}, //6208 #CJK UNIFIED IDEOGRAPH + {0xE6A3, 0x8B7D}, //6209 #CJK UNIFIED IDEOGRAPH + {0xE6A4, 0x8B80}, //6210 #CJK UNIFIED IDEOGRAPH + {0xE6A5, 0x8B8C}, //6211 #CJK UNIFIED IDEOGRAPH + {0xE6A6, 0x8B8E}, //6212 #CJK UNIFIED IDEOGRAPH + {0xE6A7, 0x8B92}, //6213 #CJK UNIFIED IDEOGRAPH + {0xE6A8, 0x8B93}, //6214 #CJK UNIFIED IDEOGRAPH + {0xE6A9, 0x8B96}, //6215 #CJK UNIFIED IDEOGRAPH + {0xE6AA, 0x8B99}, //6216 #CJK UNIFIED IDEOGRAPH + {0xE6AB, 0x8B9A}, //6217 #CJK UNIFIED IDEOGRAPH + {0xE6AC, 0x8C3A}, //6218 #CJK UNIFIED IDEOGRAPH + {0xE6AD, 0x8C41}, //6219 #CJK UNIFIED IDEOGRAPH + {0xE6AE, 0x8C3F}, //6220 #CJK UNIFIED IDEOGRAPH + {0xE6AF, 0x8C48}, //6221 #CJK UNIFIED IDEOGRAPH + {0xE6B0, 0x8C4C}, //6222 #CJK UNIFIED IDEOGRAPH + {0xE6B1, 0x8C4E}, //6223 #CJK UNIFIED IDEOGRAPH + {0xE6B2, 0x8C50}, //6224 #CJK UNIFIED IDEOGRAPH + {0xE6B3, 0x8C55}, //6225 #CJK UNIFIED IDEOGRAPH + {0xE6B4, 0x8C62}, //6226 #CJK UNIFIED IDEOGRAPH + {0xE6B5, 0x8C6C}, //6227 #CJK UNIFIED IDEOGRAPH + {0xE6B6, 0x8C78}, //6228 #CJK UNIFIED IDEOGRAPH + {0xE6B7, 0x8C7A}, //6229 #CJK UNIFIED IDEOGRAPH + {0xE6B8, 0x8C82}, //6230 #CJK UNIFIED IDEOGRAPH + {0xE6B9, 0x8C89}, //6231 #CJK UNIFIED IDEOGRAPH + {0xE6BA, 0x8C85}, //6232 #CJK UNIFIED IDEOGRAPH + {0xE6BB, 0x8C8A}, //6233 #CJK UNIFIED IDEOGRAPH + {0xE6BC, 0x8C8D}, //6234 #CJK UNIFIED IDEOGRAPH + {0xE6BD, 0x8C8E}, //6235 #CJK UNIFIED IDEOGRAPH + {0xE6BE, 0x8C94}, //6236 #CJK UNIFIED IDEOGRAPH + {0xE6BF, 0x8C7C}, //6237 #CJK UNIFIED IDEOGRAPH + {0xE6C0, 0x8C98}, //6238 #CJK UNIFIED IDEOGRAPH + {0xE6C1, 0x621D}, //6239 #CJK UNIFIED IDEOGRAPH + {0xE6C2, 0x8CAD}, //6240 #CJK UNIFIED IDEOGRAPH + {0xE6C3, 0x8CAA}, //6241 #CJK UNIFIED IDEOGRAPH + {0xE6C4, 0x8CBD}, //6242 #CJK UNIFIED IDEOGRAPH + {0xE6C5, 0x8CB2}, //6243 #CJK UNIFIED IDEOGRAPH + {0xE6C6, 0x8CB3}, //6244 #CJK UNIFIED IDEOGRAPH + {0xE6C7, 0x8CAE}, //6245 #CJK UNIFIED IDEOGRAPH + {0xE6C8, 0x8CB6}, //6246 #CJK UNIFIED IDEOGRAPH + {0xE6C9, 0x8CC8}, //6247 #CJK UNIFIED IDEOGRAPH + {0xE6CA, 0x8CC1}, //6248 #CJK UNIFIED IDEOGRAPH + {0xE6CB, 0x8CE4}, //6249 #CJK UNIFIED IDEOGRAPH + {0xE6CC, 0x8CE3}, //6250 #CJK UNIFIED IDEOGRAPH + {0xE6CD, 0x8CDA}, //6251 #CJK UNIFIED IDEOGRAPH + {0xE6CE, 0x8CFD}, //6252 #CJK UNIFIED IDEOGRAPH + {0xE6CF, 0x8CFA}, //6253 #CJK UNIFIED IDEOGRAPH + {0xE6D0, 0x8CFB}, //6254 #CJK UNIFIED IDEOGRAPH + {0xE6D1, 0x8D04}, //6255 #CJK UNIFIED IDEOGRAPH + {0xE6D2, 0x8D05}, //6256 #CJK UNIFIED IDEOGRAPH + {0xE6D3, 0x8D0A}, //6257 #CJK UNIFIED IDEOGRAPH + {0xE6D4, 0x8D07}, //6258 #CJK UNIFIED IDEOGRAPH + {0xE6D5, 0x8D0F}, //6259 #CJK UNIFIED IDEOGRAPH + {0xE6D6, 0x8D0D}, //6260 #CJK UNIFIED IDEOGRAPH + {0xE6D7, 0x8D10}, //6261 #CJK UNIFIED IDEOGRAPH + {0xE6D8, 0x9F4E}, //6262 #CJK UNIFIED IDEOGRAPH + {0xE6D9, 0x8D13}, //6263 #CJK UNIFIED IDEOGRAPH + {0xE6DA, 0x8CCD}, //6264 #CJK UNIFIED IDEOGRAPH + {0xE6DB, 0x8D14}, //6265 #CJK UNIFIED IDEOGRAPH + {0xE6DC, 0x8D16}, //6266 #CJK UNIFIED IDEOGRAPH + {0xE6DD, 0x8D67}, //6267 #CJK UNIFIED IDEOGRAPH + {0xE6DE, 0x8D6D}, //6268 #CJK UNIFIED IDEOGRAPH + {0xE6DF, 0x8D71}, //6269 #CJK UNIFIED IDEOGRAPH + {0xE6E0, 0x8D73}, //6270 #CJK UNIFIED IDEOGRAPH + {0xE6E1, 0x8D81}, //6271 #CJK UNIFIED IDEOGRAPH + {0xE6E2, 0x8D99}, //6272 #CJK UNIFIED IDEOGRAPH + {0xE6E3, 0x8DC2}, //6273 #CJK UNIFIED IDEOGRAPH + {0xE6E4, 0x8DBE}, //6274 #CJK UNIFIED IDEOGRAPH + {0xE6E5, 0x8DBA}, //6275 #CJK UNIFIED IDEOGRAPH + {0xE6E6, 0x8DCF}, //6276 #CJK UNIFIED IDEOGRAPH + {0xE6E7, 0x8DDA}, //6277 #CJK UNIFIED IDEOGRAPH + {0xE6E8, 0x8DD6}, //6278 #CJK UNIFIED IDEOGRAPH + {0xE6E9, 0x8DCC}, //6279 #CJK UNIFIED IDEOGRAPH + {0xE6EA, 0x8DDB}, //6280 #CJK UNIFIED IDEOGRAPH + {0xE6EB, 0x8DCB}, //6281 #CJK UNIFIED IDEOGRAPH + {0xE6EC, 0x8DEA}, //6282 #CJK UNIFIED IDEOGRAPH + {0xE6ED, 0x8DEB}, //6283 #CJK UNIFIED IDEOGRAPH + {0xE6EE, 0x8DDF}, //6284 #CJK UNIFIED IDEOGRAPH + {0xE6EF, 0x8DE3}, //6285 #CJK UNIFIED IDEOGRAPH + {0xE6F0, 0x8DFC}, //6286 #CJK UNIFIED IDEOGRAPH + {0xE6F1, 0x8E08}, //6287 #CJK UNIFIED IDEOGRAPH + {0xE6F2, 0x8E09}, //6288 #CJK UNIFIED IDEOGRAPH + {0xE6F3, 0x8DFF}, //6289 #CJK UNIFIED IDEOGRAPH + {0xE6F4, 0x8E1D}, //6290 #CJK UNIFIED IDEOGRAPH + {0xE6F5, 0x8E1E}, //6291 #CJK UNIFIED IDEOGRAPH + {0xE6F6, 0x8E10}, //6292 #CJK UNIFIED IDEOGRAPH + {0xE6F7, 0x8E1F}, //6293 #CJK UNIFIED IDEOGRAPH + {0xE6F8, 0x8E42}, //6294 #CJK UNIFIED IDEOGRAPH + {0xE6F9, 0x8E35}, //6295 #CJK UNIFIED IDEOGRAPH + {0xE6FA, 0x8E30}, //6296 #CJK UNIFIED IDEOGRAPH + {0xE6FB, 0x8E34}, //6297 #CJK UNIFIED IDEOGRAPH + {0xE6FC, 0x8E4A}, //6298 #CJK UNIFIED IDEOGRAPH + {0xE740, 0x8E47}, //6299 #CJK UNIFIED IDEOGRAPH + {0xE741, 0x8E49}, //6300 #CJK UNIFIED IDEOGRAPH + {0xE742, 0x8E4C}, //6301 #CJK UNIFIED IDEOGRAPH + {0xE743, 0x8E50}, //6302 #CJK UNIFIED IDEOGRAPH + {0xE744, 0x8E48}, //6303 #CJK UNIFIED IDEOGRAPH + {0xE745, 0x8E59}, //6304 #CJK UNIFIED IDEOGRAPH + {0xE746, 0x8E64}, //6305 #CJK UNIFIED IDEOGRAPH + {0xE747, 0x8E60}, //6306 #CJK UNIFIED IDEOGRAPH + {0xE748, 0x8E2A}, //6307 #CJK UNIFIED IDEOGRAPH + {0xE749, 0x8E63}, //6308 #CJK UNIFIED IDEOGRAPH + {0xE74A, 0x8E55}, //6309 #CJK UNIFIED IDEOGRAPH + {0xE74B, 0x8E76}, //6310 #CJK UNIFIED IDEOGRAPH + {0xE74C, 0x8E72}, //6311 #CJK UNIFIED IDEOGRAPH + {0xE74D, 0x8E7C}, //6312 #CJK UNIFIED IDEOGRAPH + {0xE74E, 0x8E81}, //6313 #CJK UNIFIED IDEOGRAPH + {0xE74F, 0x8E87}, //6314 #CJK UNIFIED IDEOGRAPH + {0xE750, 0x8E85}, //6315 #CJK UNIFIED IDEOGRAPH + {0xE751, 0x8E84}, //6316 #CJK UNIFIED IDEOGRAPH + {0xE752, 0x8E8B}, //6317 #CJK UNIFIED IDEOGRAPH + {0xE753, 0x8E8A}, //6318 #CJK UNIFIED IDEOGRAPH + {0xE754, 0x8E93}, //6319 #CJK UNIFIED IDEOGRAPH + {0xE755, 0x8E91}, //6320 #CJK UNIFIED IDEOGRAPH + {0xE756, 0x8E94}, //6321 #CJK UNIFIED IDEOGRAPH + {0xE757, 0x8E99}, //6322 #CJK UNIFIED IDEOGRAPH + {0xE758, 0x8EAA}, //6323 #CJK UNIFIED IDEOGRAPH + {0xE759, 0x8EA1}, //6324 #CJK UNIFIED IDEOGRAPH + {0xE75A, 0x8EAC}, //6325 #CJK UNIFIED IDEOGRAPH + {0xE75B, 0x8EB0}, //6326 #CJK UNIFIED IDEOGRAPH + {0xE75C, 0x8EC6}, //6327 #CJK UNIFIED IDEOGRAPH + {0xE75D, 0x8EB1}, //6328 #CJK UNIFIED IDEOGRAPH + {0xE75E, 0x8EBE}, //6329 #CJK UNIFIED IDEOGRAPH + {0xE75F, 0x8EC5}, //6330 #CJK UNIFIED IDEOGRAPH + {0xE760, 0x8EC8}, //6331 #CJK UNIFIED IDEOGRAPH + {0xE761, 0x8ECB}, //6332 #CJK UNIFIED IDEOGRAPH + {0xE762, 0x8EDB}, //6333 #CJK UNIFIED IDEOGRAPH + {0xE763, 0x8EE3}, //6334 #CJK UNIFIED IDEOGRAPH + {0xE764, 0x8EFC}, //6335 #CJK UNIFIED IDEOGRAPH + {0xE765, 0x8EFB}, //6336 #CJK UNIFIED IDEOGRAPH + {0xE766, 0x8EEB}, //6337 #CJK UNIFIED IDEOGRAPH + {0xE767, 0x8EFE}, //6338 #CJK UNIFIED IDEOGRAPH + {0xE768, 0x8F0A}, //6339 #CJK UNIFIED IDEOGRAPH + {0xE769, 0x8F05}, //6340 #CJK UNIFIED IDEOGRAPH + {0xE76A, 0x8F15}, //6341 #CJK UNIFIED IDEOGRAPH + {0xE76B, 0x8F12}, //6342 #CJK UNIFIED IDEOGRAPH + {0xE76C, 0x8F19}, //6343 #CJK UNIFIED IDEOGRAPH + {0xE76D, 0x8F13}, //6344 #CJK UNIFIED IDEOGRAPH + {0xE76E, 0x8F1C}, //6345 #CJK UNIFIED IDEOGRAPH + {0xE76F, 0x8F1F}, //6346 #CJK UNIFIED IDEOGRAPH + {0xE770, 0x8F1B}, //6347 #CJK UNIFIED IDEOGRAPH + {0xE771, 0x8F0C}, //6348 #CJK UNIFIED IDEOGRAPH + {0xE772, 0x8F26}, //6349 #CJK UNIFIED IDEOGRAPH + {0xE773, 0x8F33}, //6350 #CJK UNIFIED IDEOGRAPH + {0xE774, 0x8F3B}, //6351 #CJK UNIFIED IDEOGRAPH + {0xE775, 0x8F39}, //6352 #CJK UNIFIED IDEOGRAPH + {0xE776, 0x8F45}, //6353 #CJK UNIFIED IDEOGRAPH + {0xE777, 0x8F42}, //6354 #CJK UNIFIED IDEOGRAPH + {0xE778, 0x8F3E}, //6355 #CJK UNIFIED IDEOGRAPH + {0xE779, 0x8F4C}, //6356 #CJK UNIFIED IDEOGRAPH + {0xE77A, 0x8F49}, //6357 #CJK UNIFIED IDEOGRAPH + {0xE77B, 0x8F46}, //6358 #CJK UNIFIED IDEOGRAPH + {0xE77C, 0x8F4E}, //6359 #CJK UNIFIED IDEOGRAPH + {0xE77D, 0x8F57}, //6360 #CJK UNIFIED IDEOGRAPH + {0xE77E, 0x8F5C}, //6361 #CJK UNIFIED IDEOGRAPH + {0xE780, 0x8F62}, //6362 #CJK UNIFIED IDEOGRAPH + {0xE781, 0x8F63}, //6363 #CJK UNIFIED IDEOGRAPH + {0xE782, 0x8F64}, //6364 #CJK UNIFIED IDEOGRAPH + {0xE783, 0x8F9C}, //6365 #CJK UNIFIED IDEOGRAPH + {0xE784, 0x8F9F}, //6366 #CJK UNIFIED IDEOGRAPH + {0xE785, 0x8FA3}, //6367 #CJK UNIFIED IDEOGRAPH + {0xE786, 0x8FAD}, //6368 #CJK UNIFIED IDEOGRAPH + {0xE787, 0x8FAF}, //6369 #CJK UNIFIED IDEOGRAPH + {0xE788, 0x8FB7}, //6370 #CJK UNIFIED IDEOGRAPH + {0xE789, 0x8FDA}, //6371 #CJK UNIFIED IDEOGRAPH + {0xE78A, 0x8FE5}, //6372 #CJK UNIFIED IDEOGRAPH + {0xE78B, 0x8FE2}, //6373 #CJK UNIFIED IDEOGRAPH + {0xE78C, 0x8FEA}, //6374 #CJK UNIFIED IDEOGRAPH + {0xE78D, 0x8FEF}, //6375 #CJK UNIFIED IDEOGRAPH + {0xE78E, 0x9087}, //6376 #CJK UNIFIED IDEOGRAPH + {0xE78F, 0x8FF4}, //6377 #CJK UNIFIED IDEOGRAPH + {0xE790, 0x9005}, //6378 #CJK UNIFIED IDEOGRAPH + {0xE791, 0x8FF9}, //6379 #CJK UNIFIED IDEOGRAPH + {0xE792, 0x8FFA}, //6380 #CJK UNIFIED IDEOGRAPH + {0xE793, 0x9011}, //6381 #CJK UNIFIED IDEOGRAPH + {0xE794, 0x9015}, //6382 #CJK UNIFIED IDEOGRAPH + {0xE795, 0x9021}, //6383 #CJK UNIFIED IDEOGRAPH + {0xE796, 0x900D}, //6384 #CJK UNIFIED IDEOGRAPH + {0xE797, 0x901E}, //6385 #CJK UNIFIED IDEOGRAPH + {0xE798, 0x9016}, //6386 #CJK UNIFIED IDEOGRAPH + {0xE799, 0x900B}, //6387 #CJK UNIFIED IDEOGRAPH + {0xE79A, 0x9027}, //6388 #CJK UNIFIED IDEOGRAPH + {0xE79B, 0x9036}, //6389 #CJK UNIFIED IDEOGRAPH + {0xE79C, 0x9035}, //6390 #CJK UNIFIED IDEOGRAPH + {0xE79D, 0x9039}, //6391 #CJK UNIFIED IDEOGRAPH + {0xE79E, 0x8FF8}, //6392 #CJK UNIFIED IDEOGRAPH + {0xE79F, 0x904F}, //6393 #CJK UNIFIED IDEOGRAPH + {0xE7A0, 0x9050}, //6394 #CJK UNIFIED IDEOGRAPH + {0xE7A1, 0x9051}, //6395 #CJK UNIFIED IDEOGRAPH + {0xE7A2, 0x9052}, //6396 #CJK UNIFIED IDEOGRAPH + {0xE7A3, 0x900E}, //6397 #CJK UNIFIED IDEOGRAPH + {0xE7A4, 0x9049}, //6398 #CJK UNIFIED IDEOGRAPH + {0xE7A5, 0x903E}, //6399 #CJK UNIFIED IDEOGRAPH + {0xE7A6, 0x9056}, //6400 #CJK UNIFIED IDEOGRAPH + {0xE7A7, 0x9058}, //6401 #CJK UNIFIED IDEOGRAPH + {0xE7A8, 0x905E}, //6402 #CJK UNIFIED IDEOGRAPH + {0xE7A9, 0x9068}, //6403 #CJK UNIFIED IDEOGRAPH + {0xE7AA, 0x906F}, //6404 #CJK UNIFIED IDEOGRAPH + {0xE7AB, 0x9076}, //6405 #CJK UNIFIED IDEOGRAPH + {0xE7AC, 0x96A8}, //6406 #CJK UNIFIED IDEOGRAPH + {0xE7AD, 0x9072}, //6407 #CJK UNIFIED IDEOGRAPH + {0xE7AE, 0x9082}, //6408 #CJK UNIFIED IDEOGRAPH + {0xE7AF, 0x907D}, //6409 #CJK UNIFIED IDEOGRAPH + {0xE7B0, 0x9081}, //6410 #CJK UNIFIED IDEOGRAPH + {0xE7B1, 0x9080}, //6411 #CJK UNIFIED IDEOGRAPH + {0xE7B2, 0x908A}, //6412 #CJK UNIFIED IDEOGRAPH + {0xE7B3, 0x9089}, //6413 #CJK UNIFIED IDEOGRAPH + {0xE7B4, 0x908F}, //6414 #CJK UNIFIED IDEOGRAPH + {0xE7B5, 0x90A8}, //6415 #CJK UNIFIED IDEOGRAPH + {0xE7B6, 0x90AF}, //6416 #CJK UNIFIED IDEOGRAPH + {0xE7B7, 0x90B1}, //6417 #CJK UNIFIED IDEOGRAPH + {0xE7B8, 0x90B5}, //6418 #CJK UNIFIED IDEOGRAPH + {0xE7B9, 0x90E2}, //6419 #CJK UNIFIED IDEOGRAPH + {0xE7BA, 0x90E4}, //6420 #CJK UNIFIED IDEOGRAPH + {0xE7BB, 0x6248}, //6421 #CJK UNIFIED IDEOGRAPH + {0xE7BC, 0x90DB}, //6422 #CJK UNIFIED IDEOGRAPH + {0xE7BD, 0x9102}, //6423 #CJK UNIFIED IDEOGRAPH + {0xE7BE, 0x9112}, //6424 #CJK UNIFIED IDEOGRAPH + {0xE7BF, 0x9119}, //6425 #CJK UNIFIED IDEOGRAPH + {0xE7C0, 0x9132}, //6426 #CJK UNIFIED IDEOGRAPH + {0xE7C1, 0x9130}, //6427 #CJK UNIFIED IDEOGRAPH + {0xE7C2, 0x914A}, //6428 #CJK UNIFIED IDEOGRAPH + {0xE7C3, 0x9156}, //6429 #CJK UNIFIED IDEOGRAPH + {0xE7C4, 0x9158}, //6430 #CJK UNIFIED IDEOGRAPH + {0xE7C5, 0x9163}, //6431 #CJK UNIFIED IDEOGRAPH + {0xE7C6, 0x9165}, //6432 #CJK UNIFIED IDEOGRAPH + {0xE7C7, 0x9169}, //6433 #CJK UNIFIED IDEOGRAPH + {0xE7C8, 0x9173}, //6434 #CJK UNIFIED IDEOGRAPH + {0xE7C9, 0x9172}, //6435 #CJK UNIFIED IDEOGRAPH + {0xE7CA, 0x918B}, //6436 #CJK UNIFIED IDEOGRAPH + {0xE7CB, 0x9189}, //6437 #CJK UNIFIED IDEOGRAPH + {0xE7CC, 0x9182}, //6438 #CJK UNIFIED IDEOGRAPH + {0xE7CD, 0x91A2}, //6439 #CJK UNIFIED IDEOGRAPH + {0xE7CE, 0x91AB}, //6440 #CJK UNIFIED IDEOGRAPH + {0xE7CF, 0x91AF}, //6441 #CJK UNIFIED IDEOGRAPH + {0xE7D0, 0x91AA}, //6442 #CJK UNIFIED IDEOGRAPH + {0xE7D1, 0x91B5}, //6443 #CJK UNIFIED IDEOGRAPH + {0xE7D2, 0x91B4}, //6444 #CJK UNIFIED IDEOGRAPH + {0xE7D3, 0x91BA}, //6445 #CJK UNIFIED IDEOGRAPH + {0xE7D4, 0x91C0}, //6446 #CJK UNIFIED IDEOGRAPH + {0xE7D5, 0x91C1}, //6447 #CJK UNIFIED IDEOGRAPH + {0xE7D6, 0x91C9}, //6448 #CJK UNIFIED IDEOGRAPH + {0xE7D7, 0x91CB}, //6449 #CJK UNIFIED IDEOGRAPH + {0xE7D8, 0x91D0}, //6450 #CJK UNIFIED IDEOGRAPH + {0xE7D9, 0x91D6}, //6451 #CJK UNIFIED IDEOGRAPH + {0xE7DA, 0x91DF}, //6452 #CJK UNIFIED IDEOGRAPH + {0xE7DB, 0x91E1}, //6453 #CJK UNIFIED IDEOGRAPH + {0xE7DC, 0x91DB}, //6454 #CJK UNIFIED IDEOGRAPH + {0xE7DD, 0x91FC}, //6455 #CJK UNIFIED IDEOGRAPH + {0xE7DE, 0x91F5}, //6456 #CJK UNIFIED IDEOGRAPH + {0xE7DF, 0x91F6}, //6457 #CJK UNIFIED IDEOGRAPH + {0xE7E0, 0x921E}, //6458 #CJK UNIFIED IDEOGRAPH + {0xE7E1, 0x91FF}, //6459 #CJK UNIFIED IDEOGRAPH + {0xE7E2, 0x9214}, //6460 #CJK UNIFIED IDEOGRAPH + {0xE7E3, 0x922C}, //6461 #CJK UNIFIED IDEOGRAPH + {0xE7E4, 0x9215}, //6462 #CJK UNIFIED IDEOGRAPH + {0xE7E5, 0x9211}, //6463 #CJK UNIFIED IDEOGRAPH + {0xE7E6, 0x925E}, //6464 #CJK UNIFIED IDEOGRAPH + {0xE7E7, 0x9257}, //6465 #CJK UNIFIED IDEOGRAPH + {0xE7E8, 0x9245}, //6466 #CJK UNIFIED IDEOGRAPH + {0xE7E9, 0x9249}, //6467 #CJK UNIFIED IDEOGRAPH + {0xE7EA, 0x9264}, //6468 #CJK UNIFIED IDEOGRAPH + {0xE7EB, 0x9248}, //6469 #CJK UNIFIED IDEOGRAPH + {0xE7EC, 0x9295}, //6470 #CJK UNIFIED IDEOGRAPH + {0xE7ED, 0x923F}, //6471 #CJK UNIFIED IDEOGRAPH + {0xE7EE, 0x924B}, //6472 #CJK UNIFIED IDEOGRAPH + {0xE7EF, 0x9250}, //6473 #CJK UNIFIED IDEOGRAPH + {0xE7F0, 0x929C}, //6474 #CJK UNIFIED IDEOGRAPH + {0xE7F1, 0x9296}, //6475 #CJK UNIFIED IDEOGRAPH + {0xE7F2, 0x9293}, //6476 #CJK UNIFIED IDEOGRAPH + {0xE7F3, 0x929B}, //6477 #CJK UNIFIED IDEOGRAPH + {0xE7F4, 0x925A}, //6478 #CJK UNIFIED IDEOGRAPH + {0xE7F5, 0x92CF}, //6479 #CJK UNIFIED IDEOGRAPH + {0xE7F6, 0x92B9}, //6480 #CJK UNIFIED IDEOGRAPH + {0xE7F7, 0x92B7}, //6481 #CJK UNIFIED IDEOGRAPH + {0xE7F8, 0x92E9}, //6482 #CJK UNIFIED IDEOGRAPH + {0xE7F9, 0x930F}, //6483 #CJK UNIFIED IDEOGRAPH + {0xE7FA, 0x92FA}, //6484 #CJK UNIFIED IDEOGRAPH + {0xE7FB, 0x9344}, //6485 #CJK UNIFIED IDEOGRAPH + {0xE7FC, 0x932E}, //6486 #CJK UNIFIED IDEOGRAPH + {0xE840, 0x9319}, //6487 #CJK UNIFIED IDEOGRAPH + {0xE841, 0x9322}, //6488 #CJK UNIFIED IDEOGRAPH + {0xE842, 0x931A}, //6489 #CJK UNIFIED IDEOGRAPH + {0xE843, 0x9323}, //6490 #CJK UNIFIED IDEOGRAPH + {0xE844, 0x933A}, //6491 #CJK UNIFIED IDEOGRAPH + {0xE845, 0x9335}, //6492 #CJK UNIFIED IDEOGRAPH + {0xE846, 0x933B}, //6493 #CJK UNIFIED IDEOGRAPH + {0xE847, 0x935C}, //6494 #CJK UNIFIED IDEOGRAPH + {0xE848, 0x9360}, //6495 #CJK UNIFIED IDEOGRAPH + {0xE849, 0x937C}, //6496 #CJK UNIFIED IDEOGRAPH + {0xE84A, 0x936E}, //6497 #CJK UNIFIED IDEOGRAPH + {0xE84B, 0x9356}, //6498 #CJK UNIFIED IDEOGRAPH + {0xE84C, 0x93B0}, //6499 #CJK UNIFIED IDEOGRAPH + {0xE84D, 0x93AC}, //6500 #CJK UNIFIED IDEOGRAPH + {0xE84E, 0x93AD}, //6501 #CJK UNIFIED IDEOGRAPH + {0xE84F, 0x9394}, //6502 #CJK UNIFIED IDEOGRAPH + {0xE850, 0x93B9}, //6503 #CJK UNIFIED IDEOGRAPH + {0xE851, 0x93D6}, //6504 #CJK UNIFIED IDEOGRAPH + {0xE852, 0x93D7}, //6505 #CJK UNIFIED IDEOGRAPH + {0xE853, 0x93E8}, //6506 #CJK UNIFIED IDEOGRAPH + {0xE854, 0x93E5}, //6507 #CJK UNIFIED IDEOGRAPH + {0xE855, 0x93D8}, //6508 #CJK UNIFIED IDEOGRAPH + {0xE856, 0x93C3}, //6509 #CJK UNIFIED IDEOGRAPH + {0xE857, 0x93DD}, //6510 #CJK UNIFIED IDEOGRAPH + {0xE858, 0x93D0}, //6511 #CJK UNIFIED IDEOGRAPH + {0xE859, 0x93C8}, //6512 #CJK UNIFIED IDEOGRAPH + {0xE85A, 0x93E4}, //6513 #CJK UNIFIED IDEOGRAPH + {0xE85B, 0x941A}, //6514 #CJK UNIFIED IDEOGRAPH + {0xE85C, 0x9414}, //6515 #CJK UNIFIED IDEOGRAPH + {0xE85D, 0x9413}, //6516 #CJK UNIFIED IDEOGRAPH + {0xE85E, 0x9403}, //6517 #CJK UNIFIED IDEOGRAPH + {0xE85F, 0x9407}, //6518 #CJK UNIFIED IDEOGRAPH + {0xE860, 0x9410}, //6519 #CJK UNIFIED IDEOGRAPH + {0xE861, 0x9436}, //6520 #CJK UNIFIED IDEOGRAPH + {0xE862, 0x942B}, //6521 #CJK UNIFIED IDEOGRAPH + {0xE863, 0x9435}, //6522 #CJK UNIFIED IDEOGRAPH + {0xE864, 0x9421}, //6523 #CJK UNIFIED IDEOGRAPH + {0xE865, 0x943A}, //6524 #CJK UNIFIED IDEOGRAPH + {0xE866, 0x9441}, //6525 #CJK UNIFIED IDEOGRAPH + {0xE867, 0x9452}, //6526 #CJK UNIFIED IDEOGRAPH + {0xE868, 0x9444}, //6527 #CJK UNIFIED IDEOGRAPH + {0xE869, 0x945B}, //6528 #CJK UNIFIED IDEOGRAPH + {0xE86A, 0x9460}, //6529 #CJK UNIFIED IDEOGRAPH + {0xE86B, 0x9462}, //6530 #CJK UNIFIED IDEOGRAPH + {0xE86C, 0x945E}, //6531 #CJK UNIFIED IDEOGRAPH + {0xE86D, 0x946A}, //6532 #CJK UNIFIED IDEOGRAPH + {0xE86E, 0x9229}, //6533 #CJK UNIFIED IDEOGRAPH + {0xE86F, 0x9470}, //6534 #CJK UNIFIED IDEOGRAPH + {0xE870, 0x9475}, //6535 #CJK UNIFIED IDEOGRAPH + {0xE871, 0x9477}, //6536 #CJK UNIFIED IDEOGRAPH + {0xE872, 0x947D}, //6537 #CJK UNIFIED IDEOGRAPH + {0xE873, 0x945A}, //6538 #CJK UNIFIED IDEOGRAPH + {0xE874, 0x947C}, //6539 #CJK UNIFIED IDEOGRAPH + {0xE875, 0x947E}, //6540 #CJK UNIFIED IDEOGRAPH + {0xE876, 0x9481}, //6541 #CJK UNIFIED IDEOGRAPH + {0xE877, 0x947F}, //6542 #CJK UNIFIED IDEOGRAPH + {0xE878, 0x9582}, //6543 #CJK UNIFIED IDEOGRAPH + {0xE879, 0x9587}, //6544 #CJK UNIFIED IDEOGRAPH + {0xE87A, 0x958A}, //6545 #CJK UNIFIED IDEOGRAPH + {0xE87B, 0x9594}, //6546 #CJK UNIFIED IDEOGRAPH + {0xE87C, 0x9596}, //6547 #CJK UNIFIED IDEOGRAPH + {0xE87D, 0x9598}, //6548 #CJK UNIFIED IDEOGRAPH + {0xE87E, 0x9599}, //6549 #CJK UNIFIED IDEOGRAPH + {0xE880, 0x95A0}, //6550 #CJK UNIFIED IDEOGRAPH + {0xE881, 0x95A8}, //6551 #CJK UNIFIED IDEOGRAPH + {0xE882, 0x95A7}, //6552 #CJK UNIFIED IDEOGRAPH + {0xE883, 0x95AD}, //6553 #CJK UNIFIED IDEOGRAPH + {0xE884, 0x95BC}, //6554 #CJK UNIFIED IDEOGRAPH + {0xE885, 0x95BB}, //6555 #CJK UNIFIED IDEOGRAPH + {0xE886, 0x95B9}, //6556 #CJK UNIFIED IDEOGRAPH + {0xE887, 0x95BE}, //6557 #CJK UNIFIED IDEOGRAPH + {0xE888, 0x95CA}, //6558 #CJK UNIFIED IDEOGRAPH + {0xE889, 0x6FF6}, //6559 #CJK UNIFIED IDEOGRAPH + {0xE88A, 0x95C3}, //6560 #CJK UNIFIED IDEOGRAPH + {0xE88B, 0x95CD}, //6561 #CJK UNIFIED IDEOGRAPH + {0xE88C, 0x95CC}, //6562 #CJK UNIFIED IDEOGRAPH + {0xE88D, 0x95D5}, //6563 #CJK UNIFIED IDEOGRAPH + {0xE88E, 0x95D4}, //6564 #CJK UNIFIED IDEOGRAPH + {0xE88F, 0x95D6}, //6565 #CJK UNIFIED IDEOGRAPH + {0xE890, 0x95DC}, //6566 #CJK UNIFIED IDEOGRAPH + {0xE891, 0x95E1}, //6567 #CJK UNIFIED IDEOGRAPH + {0xE892, 0x95E5}, //6568 #CJK UNIFIED IDEOGRAPH + {0xE893, 0x95E2}, //6569 #CJK UNIFIED IDEOGRAPH + {0xE894, 0x9621}, //6570 #CJK UNIFIED IDEOGRAPH + {0xE895, 0x9628}, //6571 #CJK UNIFIED IDEOGRAPH + {0xE896, 0x962E}, //6572 #CJK UNIFIED IDEOGRAPH + {0xE897, 0x962F}, //6573 #CJK UNIFIED IDEOGRAPH + {0xE898, 0x9642}, //6574 #CJK UNIFIED IDEOGRAPH + {0xE899, 0x964C}, //6575 #CJK UNIFIED IDEOGRAPH + {0xE89A, 0x964F}, //6576 #CJK UNIFIED IDEOGRAPH + {0xE89B, 0x964B}, //6577 #CJK UNIFIED IDEOGRAPH + {0xE89C, 0x9677}, //6578 #CJK UNIFIED IDEOGRAPH + {0xE89D, 0x965C}, //6579 #CJK UNIFIED IDEOGRAPH + {0xE89E, 0x965E}, //6580 #CJK UNIFIED IDEOGRAPH + {0xE89F, 0x965D}, //6581 #CJK UNIFIED IDEOGRAPH + {0xE8A0, 0x965F}, //6582 #CJK UNIFIED IDEOGRAPH + {0xE8A1, 0x9666}, //6583 #CJK UNIFIED IDEOGRAPH + {0xE8A2, 0x9672}, //6584 #CJK UNIFIED IDEOGRAPH + {0xE8A3, 0x966C}, //6585 #CJK UNIFIED IDEOGRAPH + {0xE8A4, 0x968D}, //6586 #CJK UNIFIED IDEOGRAPH + {0xE8A5, 0x9698}, //6587 #CJK UNIFIED IDEOGRAPH + {0xE8A6, 0x9695}, //6588 #CJK UNIFIED IDEOGRAPH + {0xE8A7, 0x9697}, //6589 #CJK UNIFIED IDEOGRAPH + {0xE8A8, 0x96AA}, //6590 #CJK UNIFIED IDEOGRAPH + {0xE8A9, 0x96A7}, //6591 #CJK UNIFIED IDEOGRAPH + {0xE8AA, 0x96B1}, //6592 #CJK UNIFIED IDEOGRAPH + {0xE8AB, 0x96B2}, //6593 #CJK UNIFIED IDEOGRAPH + {0xE8AC, 0x96B0}, //6594 #CJK UNIFIED IDEOGRAPH + {0xE8AD, 0x96B4}, //6595 #CJK UNIFIED IDEOGRAPH + {0xE8AE, 0x96B6}, //6596 #CJK UNIFIED IDEOGRAPH + {0xE8AF, 0x96B8}, //6597 #CJK UNIFIED IDEOGRAPH + {0xE8B0, 0x96B9}, //6598 #CJK UNIFIED IDEOGRAPH + {0xE8B1, 0x96CE}, //6599 #CJK UNIFIED IDEOGRAPH + {0xE8B2, 0x96CB}, //6600 #CJK UNIFIED IDEOGRAPH + {0xE8B3, 0x96C9}, //6601 #CJK UNIFIED IDEOGRAPH + {0xE8B4, 0x96CD}, //6602 #CJK UNIFIED IDEOGRAPH + {0xE8B5, 0x894D}, //6603 #CJK UNIFIED IDEOGRAPH + {0xE8B6, 0x96DC}, //6604 #CJK UNIFIED IDEOGRAPH + {0xE8B7, 0x970D}, //6605 #CJK UNIFIED IDEOGRAPH + {0xE8B8, 0x96D5}, //6606 #CJK UNIFIED IDEOGRAPH + {0xE8B9, 0x96F9}, //6607 #CJK UNIFIED IDEOGRAPH + {0xE8BA, 0x9704}, //6608 #CJK UNIFIED IDEOGRAPH + {0xE8BB, 0x9706}, //6609 #CJK UNIFIED IDEOGRAPH + {0xE8BC, 0x9708}, //6610 #CJK UNIFIED IDEOGRAPH + {0xE8BD, 0x9713}, //6611 #CJK UNIFIED IDEOGRAPH + {0xE8BE, 0x970E}, //6612 #CJK UNIFIED IDEOGRAPH + {0xE8BF, 0x9711}, //6613 #CJK UNIFIED IDEOGRAPH + {0xE8C0, 0x970F}, //6614 #CJK UNIFIED IDEOGRAPH + {0xE8C1, 0x9716}, //6615 #CJK UNIFIED IDEOGRAPH + {0xE8C2, 0x9719}, //6616 #CJK UNIFIED IDEOGRAPH + {0xE8C3, 0x9724}, //6617 #CJK UNIFIED IDEOGRAPH + {0xE8C4, 0x972A}, //6618 #CJK UNIFIED IDEOGRAPH + {0xE8C5, 0x9730}, //6619 #CJK UNIFIED IDEOGRAPH + {0xE8C6, 0x9739}, //6620 #CJK UNIFIED IDEOGRAPH + {0xE8C7, 0x973D}, //6621 #CJK UNIFIED IDEOGRAPH + {0xE8C8, 0x973E}, //6622 #CJK UNIFIED IDEOGRAPH + {0xE8C9, 0x9744}, //6623 #CJK UNIFIED IDEOGRAPH + {0xE8CA, 0x9746}, //6624 #CJK UNIFIED IDEOGRAPH + {0xE8CB, 0x9748}, //6625 #CJK UNIFIED IDEOGRAPH + {0xE8CC, 0x9742}, //6626 #CJK UNIFIED IDEOGRAPH + {0xE8CD, 0x9749}, //6627 #CJK UNIFIED IDEOGRAPH + {0xE8CE, 0x975C}, //6628 #CJK UNIFIED IDEOGRAPH + {0xE8CF, 0x9760}, //6629 #CJK UNIFIED IDEOGRAPH + {0xE8D0, 0x9764}, //6630 #CJK UNIFIED IDEOGRAPH + {0xE8D1, 0x9766}, //6631 #CJK UNIFIED IDEOGRAPH + {0xE8D2, 0x9768}, //6632 #CJK UNIFIED IDEOGRAPH + {0xE8D3, 0x52D2}, //6633 #CJK UNIFIED IDEOGRAPH + {0xE8D4, 0x976B}, //6634 #CJK UNIFIED IDEOGRAPH + {0xE8D5, 0x9771}, //6635 #CJK UNIFIED IDEOGRAPH + {0xE8D6, 0x9779}, //6636 #CJK UNIFIED IDEOGRAPH + {0xE8D7, 0x9785}, //6637 #CJK UNIFIED IDEOGRAPH + {0xE8D8, 0x977C}, //6638 #CJK UNIFIED IDEOGRAPH + {0xE8D9, 0x9781}, //6639 #CJK UNIFIED IDEOGRAPH + {0xE8DA, 0x977A}, //6640 #CJK UNIFIED IDEOGRAPH + {0xE8DB, 0x9786}, //6641 #CJK UNIFIED IDEOGRAPH + {0xE8DC, 0x978B}, //6642 #CJK UNIFIED IDEOGRAPH + {0xE8DD, 0x978F}, //6643 #CJK UNIFIED IDEOGRAPH + {0xE8DE, 0x9790}, //6644 #CJK UNIFIED IDEOGRAPH + {0xE8DF, 0x979C}, //6645 #CJK UNIFIED IDEOGRAPH + {0xE8E0, 0x97A8}, //6646 #CJK UNIFIED IDEOGRAPH + {0xE8E1, 0x97A6}, //6647 #CJK UNIFIED IDEOGRAPH + {0xE8E2, 0x97A3}, //6648 #CJK UNIFIED IDEOGRAPH + {0xE8E3, 0x97B3}, //6649 #CJK UNIFIED IDEOGRAPH + {0xE8E4, 0x97B4}, //6650 #CJK UNIFIED IDEOGRAPH + {0xE8E5, 0x97C3}, //6651 #CJK UNIFIED IDEOGRAPH + {0xE8E6, 0x97C6}, //6652 #CJK UNIFIED IDEOGRAPH + {0xE8E7, 0x97C8}, //6653 #CJK UNIFIED IDEOGRAPH + {0xE8E8, 0x97CB}, //6654 #CJK UNIFIED IDEOGRAPH + {0xE8E9, 0x97DC}, //6655 #CJK UNIFIED IDEOGRAPH + {0xE8EA, 0x97ED}, //6656 #CJK UNIFIED IDEOGRAPH + {0xE8EB, 0x9F4F}, //6657 #CJK UNIFIED IDEOGRAPH + {0xE8EC, 0x97F2}, //6658 #CJK UNIFIED IDEOGRAPH + {0xE8ED, 0x7ADF}, //6659 #CJK UNIFIED IDEOGRAPH + {0xE8EE, 0x97F6}, //6660 #CJK UNIFIED IDEOGRAPH + {0xE8EF, 0x97F5}, //6661 #CJK UNIFIED IDEOGRAPH + {0xE8F0, 0x980F}, //6662 #CJK UNIFIED IDEOGRAPH + {0xE8F1, 0x980C}, //6663 #CJK UNIFIED IDEOGRAPH + {0xE8F2, 0x9838}, //6664 #CJK UNIFIED IDEOGRAPH + {0xE8F3, 0x9824}, //6665 #CJK UNIFIED IDEOGRAPH + {0xE8F4, 0x9821}, //6666 #CJK UNIFIED IDEOGRAPH + {0xE8F5, 0x9837}, //6667 #CJK UNIFIED IDEOGRAPH + {0xE8F6, 0x983D}, //6668 #CJK UNIFIED IDEOGRAPH + {0xE8F7, 0x9846}, //6669 #CJK UNIFIED IDEOGRAPH + {0xE8F8, 0x984F}, //6670 #CJK UNIFIED IDEOGRAPH + {0xE8F9, 0x984B}, //6671 #CJK UNIFIED IDEOGRAPH + {0xE8FA, 0x986B}, //6672 #CJK UNIFIED IDEOGRAPH + {0xE8FB, 0x986F}, //6673 #CJK UNIFIED IDEOGRAPH + {0xE8FC, 0x9870}, //6674 #CJK UNIFIED IDEOGRAPH + {0xE940, 0x9871}, //6675 #CJK UNIFIED IDEOGRAPH + {0xE941, 0x9874}, //6676 #CJK UNIFIED IDEOGRAPH + {0xE942, 0x9873}, //6677 #CJK UNIFIED IDEOGRAPH + {0xE943, 0x98AA}, //6678 #CJK UNIFIED IDEOGRAPH + {0xE944, 0x98AF}, //6679 #CJK UNIFIED IDEOGRAPH + {0xE945, 0x98B1}, //6680 #CJK UNIFIED IDEOGRAPH + {0xE946, 0x98B6}, //6681 #CJK UNIFIED IDEOGRAPH + {0xE947, 0x98C4}, //6682 #CJK UNIFIED IDEOGRAPH + {0xE948, 0x98C3}, //6683 #CJK UNIFIED IDEOGRAPH + {0xE949, 0x98C6}, //6684 #CJK UNIFIED IDEOGRAPH + {0xE94A, 0x98E9}, //6685 #CJK UNIFIED IDEOGRAPH + {0xE94B, 0x98EB}, //6686 #CJK UNIFIED IDEOGRAPH + {0xE94C, 0x9903}, //6687 #CJK UNIFIED IDEOGRAPH + {0xE94D, 0x9909}, //6688 #CJK UNIFIED IDEOGRAPH + {0xE94E, 0x9912}, //6689 #CJK UNIFIED IDEOGRAPH + {0xE94F, 0x9914}, //6690 #CJK UNIFIED IDEOGRAPH + {0xE950, 0x9918}, //6691 #CJK UNIFIED IDEOGRAPH + {0xE951, 0x9921}, //6692 #CJK UNIFIED IDEOGRAPH + {0xE952, 0x991D}, //6693 #CJK UNIFIED IDEOGRAPH + {0xE953, 0x991E}, //6694 #CJK UNIFIED IDEOGRAPH + {0xE954, 0x9924}, //6695 #CJK UNIFIED IDEOGRAPH + {0xE955, 0x9920}, //6696 #CJK UNIFIED IDEOGRAPH + {0xE956, 0x992C}, //6697 #CJK UNIFIED IDEOGRAPH + {0xE957, 0x992E}, //6698 #CJK UNIFIED IDEOGRAPH + {0xE958, 0x993D}, //6699 #CJK UNIFIED IDEOGRAPH + {0xE959, 0x993E}, //6700 #CJK UNIFIED IDEOGRAPH + {0xE95A, 0x9942}, //6701 #CJK UNIFIED IDEOGRAPH + {0xE95B, 0x9949}, //6702 #CJK UNIFIED IDEOGRAPH + {0xE95C, 0x9945}, //6703 #CJK UNIFIED IDEOGRAPH + {0xE95D, 0x9950}, //6704 #CJK UNIFIED IDEOGRAPH + {0xE95E, 0x994B}, //6705 #CJK UNIFIED IDEOGRAPH + {0xE95F, 0x9951}, //6706 #CJK UNIFIED IDEOGRAPH + {0xE960, 0x9952}, //6707 #CJK UNIFIED IDEOGRAPH + {0xE961, 0x994C}, //6708 #CJK UNIFIED IDEOGRAPH + {0xE962, 0x9955}, //6709 #CJK UNIFIED IDEOGRAPH + {0xE963, 0x9997}, //6710 #CJK UNIFIED IDEOGRAPH + {0xE964, 0x9998}, //6711 #CJK UNIFIED IDEOGRAPH + {0xE965, 0x99A5}, //6712 #CJK UNIFIED IDEOGRAPH + {0xE966, 0x99AD}, //6713 #CJK UNIFIED IDEOGRAPH + {0xE967, 0x99AE}, //6714 #CJK UNIFIED IDEOGRAPH + {0xE968, 0x99BC}, //6715 #CJK UNIFIED IDEOGRAPH + {0xE969, 0x99DF}, //6716 #CJK UNIFIED IDEOGRAPH + {0xE96A, 0x99DB}, //6717 #CJK UNIFIED IDEOGRAPH + {0xE96B, 0x99DD}, //6718 #CJK UNIFIED IDEOGRAPH + {0xE96C, 0x99D8}, //6719 #CJK UNIFIED IDEOGRAPH + {0xE96D, 0x99D1}, //6720 #CJK UNIFIED IDEOGRAPH + {0xE96E, 0x99ED}, //6721 #CJK UNIFIED IDEOGRAPH + {0xE96F, 0x99EE}, //6722 #CJK UNIFIED IDEOGRAPH + {0xE970, 0x99F1}, //6723 #CJK UNIFIED IDEOGRAPH + {0xE971, 0x99F2}, //6724 #CJK UNIFIED IDEOGRAPH + {0xE972, 0x99FB}, //6725 #CJK UNIFIED IDEOGRAPH + {0xE973, 0x99F8}, //6726 #CJK UNIFIED IDEOGRAPH + {0xE974, 0x9A01}, //6727 #CJK UNIFIED IDEOGRAPH + {0xE975, 0x9A0F}, //6728 #CJK UNIFIED IDEOGRAPH + {0xE976, 0x9A05}, //6729 #CJK UNIFIED IDEOGRAPH + {0xE977, 0x99E2}, //6730 #CJK UNIFIED IDEOGRAPH + {0xE978, 0x9A19}, //6731 #CJK UNIFIED IDEOGRAPH + {0xE979, 0x9A2B}, //6732 #CJK UNIFIED IDEOGRAPH + {0xE97A, 0x9A37}, //6733 #CJK UNIFIED IDEOGRAPH + {0xE97B, 0x9A45}, //6734 #CJK UNIFIED IDEOGRAPH + {0xE97C, 0x9A42}, //6735 #CJK UNIFIED IDEOGRAPH + {0xE97D, 0x9A40}, //6736 #CJK UNIFIED IDEOGRAPH + {0xE97E, 0x9A43}, //6737 #CJK UNIFIED IDEOGRAPH + {0xE980, 0x9A3E}, //6738 #CJK UNIFIED IDEOGRAPH + {0xE981, 0x9A55}, //6739 #CJK UNIFIED IDEOGRAPH + {0xE982, 0x9A4D}, //6740 #CJK UNIFIED IDEOGRAPH + {0xE983, 0x9A5B}, //6741 #CJK UNIFIED IDEOGRAPH + {0xE984, 0x9A57}, //6742 #CJK UNIFIED IDEOGRAPH + {0xE985, 0x9A5F}, //6743 #CJK UNIFIED IDEOGRAPH + {0xE986, 0x9A62}, //6744 #CJK UNIFIED IDEOGRAPH + {0xE987, 0x9A65}, //6745 #CJK UNIFIED IDEOGRAPH + {0xE988, 0x9A64}, //6746 #CJK UNIFIED IDEOGRAPH + {0xE989, 0x9A69}, //6747 #CJK UNIFIED IDEOGRAPH + {0xE98A, 0x9A6B}, //6748 #CJK UNIFIED IDEOGRAPH + {0xE98B, 0x9A6A}, //6749 #CJK UNIFIED IDEOGRAPH + {0xE98C, 0x9AAD}, //6750 #CJK UNIFIED IDEOGRAPH + {0xE98D, 0x9AB0}, //6751 #CJK UNIFIED IDEOGRAPH + {0xE98E, 0x9ABC}, //6752 #CJK UNIFIED IDEOGRAPH + {0xE98F, 0x9AC0}, //6753 #CJK UNIFIED IDEOGRAPH + {0xE990, 0x9ACF}, //6754 #CJK UNIFIED IDEOGRAPH + {0xE991, 0x9AD1}, //6755 #CJK UNIFIED IDEOGRAPH + {0xE992, 0x9AD3}, //6756 #CJK UNIFIED IDEOGRAPH + {0xE993, 0x9AD4}, //6757 #CJK UNIFIED IDEOGRAPH + {0xE994, 0x9ADE}, //6758 #CJK UNIFIED IDEOGRAPH + {0xE995, 0x9ADF}, //6759 #CJK UNIFIED IDEOGRAPH + {0xE996, 0x9AE2}, //6760 #CJK UNIFIED IDEOGRAPH + {0xE997, 0x9AE3}, //6761 #CJK UNIFIED IDEOGRAPH + {0xE998, 0x9AE6}, //6762 #CJK UNIFIED IDEOGRAPH + {0xE999, 0x9AEF}, //6763 #CJK UNIFIED IDEOGRAPH + {0xE99A, 0x9AEB}, //6764 #CJK UNIFIED IDEOGRAPH + {0xE99B, 0x9AEE}, //6765 #CJK UNIFIED IDEOGRAPH + {0xE99C, 0x9AF4}, //6766 #CJK UNIFIED IDEOGRAPH + {0xE99D, 0x9AF1}, //6767 #CJK UNIFIED IDEOGRAPH + {0xE99E, 0x9AF7}, //6768 #CJK UNIFIED IDEOGRAPH + {0xE99F, 0x9AFB}, //6769 #CJK UNIFIED IDEOGRAPH + {0xE9A0, 0x9B06}, //6770 #CJK UNIFIED IDEOGRAPH + {0xE9A1, 0x9B18}, //6771 #CJK UNIFIED IDEOGRAPH + {0xE9A2, 0x9B1A}, //6772 #CJK UNIFIED IDEOGRAPH + {0xE9A3, 0x9B1F}, //6773 #CJK UNIFIED IDEOGRAPH + {0xE9A4, 0x9B22}, //6774 #CJK UNIFIED IDEOGRAPH + {0xE9A5, 0x9B23}, //6775 #CJK UNIFIED IDEOGRAPH + {0xE9A6, 0x9B25}, //6776 #CJK UNIFIED IDEOGRAPH + {0xE9A7, 0x9B27}, //6777 #CJK UNIFIED IDEOGRAPH + {0xE9A8, 0x9B28}, //6778 #CJK UNIFIED IDEOGRAPH + {0xE9A9, 0x9B29}, //6779 #CJK UNIFIED IDEOGRAPH + {0xE9AA, 0x9B2A}, //6780 #CJK UNIFIED IDEOGRAPH + {0xE9AB, 0x9B2E}, //6781 #CJK UNIFIED IDEOGRAPH + {0xE9AC, 0x9B2F}, //6782 #CJK UNIFIED IDEOGRAPH + {0xE9AD, 0x9B32}, //6783 #CJK UNIFIED IDEOGRAPH + {0xE9AE, 0x9B44}, //6784 #CJK UNIFIED IDEOGRAPH + {0xE9AF, 0x9B43}, //6785 #CJK UNIFIED IDEOGRAPH + {0xE9B0, 0x9B4F}, //6786 #CJK UNIFIED IDEOGRAPH + {0xE9B1, 0x9B4D}, //6787 #CJK UNIFIED IDEOGRAPH + {0xE9B2, 0x9B4E}, //6788 #CJK UNIFIED IDEOGRAPH + {0xE9B3, 0x9B51}, //6789 #CJK UNIFIED IDEOGRAPH + {0xE9B4, 0x9B58}, //6790 #CJK UNIFIED IDEOGRAPH + {0xE9B5, 0x9B74}, //6791 #CJK UNIFIED IDEOGRAPH + {0xE9B6, 0x9B93}, //6792 #CJK UNIFIED IDEOGRAPH + {0xE9B7, 0x9B83}, //6793 #CJK UNIFIED IDEOGRAPH + {0xE9B8, 0x9B91}, //6794 #CJK UNIFIED IDEOGRAPH + {0xE9B9, 0x9B96}, //6795 #CJK UNIFIED IDEOGRAPH + {0xE9BA, 0x9B97}, //6796 #CJK UNIFIED IDEOGRAPH + {0xE9BB, 0x9B9F}, //6797 #CJK UNIFIED IDEOGRAPH + {0xE9BC, 0x9BA0}, //6798 #CJK UNIFIED IDEOGRAPH + {0xE9BD, 0x9BA8}, //6799 #CJK UNIFIED IDEOGRAPH + {0xE9BE, 0x9BB4}, //6800 #CJK UNIFIED IDEOGRAPH + {0xE9BF, 0x9BC0}, //6801 #CJK UNIFIED IDEOGRAPH + {0xE9C0, 0x9BCA}, //6802 #CJK UNIFIED IDEOGRAPH + {0xE9C1, 0x9BB9}, //6803 #CJK UNIFIED IDEOGRAPH + {0xE9C2, 0x9BC6}, //6804 #CJK UNIFIED IDEOGRAPH + {0xE9C3, 0x9BCF}, //6805 #CJK UNIFIED IDEOGRAPH + {0xE9C4, 0x9BD1}, //6806 #CJK UNIFIED IDEOGRAPH + {0xE9C5, 0x9BD2}, //6807 #CJK UNIFIED IDEOGRAPH + {0xE9C6, 0x9BE3}, //6808 #CJK UNIFIED IDEOGRAPH + {0xE9C7, 0x9BE2}, //6809 #CJK UNIFIED IDEOGRAPH + {0xE9C8, 0x9BE4}, //6810 #CJK UNIFIED IDEOGRAPH + {0xE9C9, 0x9BD4}, //6811 #CJK UNIFIED IDEOGRAPH + {0xE9CA, 0x9BE1}, //6812 #CJK UNIFIED IDEOGRAPH + {0xE9CB, 0x9C3A}, //6813 #CJK UNIFIED IDEOGRAPH + {0xE9CC, 0x9BF2}, //6814 #CJK UNIFIED IDEOGRAPH + {0xE9CD, 0x9BF1}, //6815 #CJK UNIFIED IDEOGRAPH + {0xE9CE, 0x9BF0}, //6816 #CJK UNIFIED IDEOGRAPH + {0xE9CF, 0x9C15}, //6817 #CJK UNIFIED IDEOGRAPH + {0xE9D0, 0x9C14}, //6818 #CJK UNIFIED IDEOGRAPH + {0xE9D1, 0x9C09}, //6819 #CJK UNIFIED IDEOGRAPH + {0xE9D2, 0x9C13}, //6820 #CJK UNIFIED IDEOGRAPH + {0xE9D3, 0x9C0C}, //6821 #CJK UNIFIED IDEOGRAPH + {0xE9D4, 0x9C06}, //6822 #CJK UNIFIED IDEOGRAPH + {0xE9D5, 0x9C08}, //6823 #CJK UNIFIED IDEOGRAPH + {0xE9D6, 0x9C12}, //6824 #CJK UNIFIED IDEOGRAPH + {0xE9D7, 0x9C0A}, //6825 #CJK UNIFIED IDEOGRAPH + {0xE9D8, 0x9C04}, //6826 #CJK UNIFIED IDEOGRAPH + {0xE9D9, 0x9C2E}, //6827 #CJK UNIFIED IDEOGRAPH + {0xE9DA, 0x9C1B}, //6828 #CJK UNIFIED IDEOGRAPH + {0xE9DB, 0x9C25}, //6829 #CJK UNIFIED IDEOGRAPH + {0xE9DC, 0x9C24}, //6830 #CJK UNIFIED IDEOGRAPH + {0xE9DD, 0x9C21}, //6831 #CJK UNIFIED IDEOGRAPH + {0xE9DE, 0x9C30}, //6832 #CJK UNIFIED IDEOGRAPH + {0xE9DF, 0x9C47}, //6833 #CJK UNIFIED IDEOGRAPH + {0xE9E0, 0x9C32}, //6834 #CJK UNIFIED IDEOGRAPH + {0xE9E1, 0x9C46}, //6835 #CJK UNIFIED IDEOGRAPH + {0xE9E2, 0x9C3E}, //6836 #CJK UNIFIED IDEOGRAPH + {0xE9E3, 0x9C5A}, //6837 #CJK UNIFIED IDEOGRAPH + {0xE9E4, 0x9C60}, //6838 #CJK UNIFIED IDEOGRAPH + {0xE9E5, 0x9C67}, //6839 #CJK UNIFIED IDEOGRAPH + {0xE9E6, 0x9C76}, //6840 #CJK UNIFIED IDEOGRAPH + {0xE9E7, 0x9C78}, //6841 #CJK UNIFIED IDEOGRAPH + {0xE9E8, 0x9CE7}, //6842 #CJK UNIFIED IDEOGRAPH + {0xE9E9, 0x9CEC}, //6843 #CJK UNIFIED IDEOGRAPH + {0xE9EA, 0x9CF0}, //6844 #CJK UNIFIED IDEOGRAPH + {0xE9EB, 0x9D09}, //6845 #CJK UNIFIED IDEOGRAPH + {0xE9EC, 0x9D08}, //6846 #CJK UNIFIED IDEOGRAPH + {0xE9ED, 0x9CEB}, //6847 #CJK UNIFIED IDEOGRAPH + {0xE9EE, 0x9D03}, //6848 #CJK UNIFIED IDEOGRAPH + {0xE9EF, 0x9D06}, //6849 #CJK UNIFIED IDEOGRAPH + {0xE9F0, 0x9D2A}, //6850 #CJK UNIFIED IDEOGRAPH + {0xE9F1, 0x9D26}, //6851 #CJK UNIFIED IDEOGRAPH + {0xE9F2, 0x9DAF}, //6852 #CJK UNIFIED IDEOGRAPH + {0xE9F3, 0x9D23}, //6853 #CJK UNIFIED IDEOGRAPH + {0xE9F4, 0x9D1F}, //6854 #CJK UNIFIED IDEOGRAPH + {0xE9F5, 0x9D44}, //6855 #CJK UNIFIED IDEOGRAPH + {0xE9F6, 0x9D15}, //6856 #CJK UNIFIED IDEOGRAPH + {0xE9F7, 0x9D12}, //6857 #CJK UNIFIED IDEOGRAPH + {0xE9F8, 0x9D41}, //6858 #CJK UNIFIED IDEOGRAPH + {0xE9F9, 0x9D3F}, //6859 #CJK UNIFIED IDEOGRAPH + {0xE9FA, 0x9D3E}, //6860 #CJK UNIFIED IDEOGRAPH + {0xE9FB, 0x9D46}, //6861 #CJK UNIFIED IDEOGRAPH + {0xE9FC, 0x9D48}, //6862 #CJK UNIFIED IDEOGRAPH + {0xEA40, 0x9D5D}, //6863 #CJK UNIFIED IDEOGRAPH + {0xEA41, 0x9D5E}, //6864 #CJK UNIFIED IDEOGRAPH + {0xEA42, 0x9D64}, //6865 #CJK UNIFIED IDEOGRAPH + {0xEA43, 0x9D51}, //6866 #CJK UNIFIED IDEOGRAPH + {0xEA44, 0x9D50}, //6867 #CJK UNIFIED IDEOGRAPH + {0xEA45, 0x9D59}, //6868 #CJK UNIFIED IDEOGRAPH + {0xEA46, 0x9D72}, //6869 #CJK UNIFIED IDEOGRAPH + {0xEA47, 0x9D89}, //6870 #CJK UNIFIED IDEOGRAPH + {0xEA48, 0x9D87}, //6871 #CJK UNIFIED IDEOGRAPH + {0xEA49, 0x9DAB}, //6872 #CJK UNIFIED IDEOGRAPH + {0xEA4A, 0x9D6F}, //6873 #CJK UNIFIED IDEOGRAPH + {0xEA4B, 0x9D7A}, //6874 #CJK UNIFIED IDEOGRAPH + {0xEA4C, 0x9D9A}, //6875 #CJK UNIFIED IDEOGRAPH + {0xEA4D, 0x9DA4}, //6876 #CJK UNIFIED IDEOGRAPH + {0xEA4E, 0x9DA9}, //6877 #CJK UNIFIED IDEOGRAPH + {0xEA4F, 0x9DB2}, //6878 #CJK UNIFIED IDEOGRAPH + {0xEA50, 0x9DC4}, //6879 #CJK UNIFIED IDEOGRAPH + {0xEA51, 0x9DC1}, //6880 #CJK UNIFIED IDEOGRAPH + {0xEA52, 0x9DBB}, //6881 #CJK UNIFIED IDEOGRAPH + {0xEA53, 0x9DB8}, //6882 #CJK UNIFIED IDEOGRAPH + {0xEA54, 0x9DBA}, //6883 #CJK UNIFIED IDEOGRAPH + {0xEA55, 0x9DC6}, //6884 #CJK UNIFIED IDEOGRAPH + {0xEA56, 0x9DCF}, //6885 #CJK UNIFIED IDEOGRAPH + {0xEA57, 0x9DC2}, //6886 #CJK UNIFIED IDEOGRAPH + {0xEA58, 0x9DD9}, //6887 #CJK UNIFIED IDEOGRAPH + {0xEA59, 0x9DD3}, //6888 #CJK UNIFIED IDEOGRAPH + {0xEA5A, 0x9DF8}, //6889 #CJK UNIFIED IDEOGRAPH + {0xEA5B, 0x9DE6}, //6890 #CJK UNIFIED IDEOGRAPH + {0xEA5C, 0x9DED}, //6891 #CJK UNIFIED IDEOGRAPH + {0xEA5D, 0x9DEF}, //6892 #CJK UNIFIED IDEOGRAPH + {0xEA5E, 0x9DFD}, //6893 #CJK UNIFIED IDEOGRAPH + {0xEA5F, 0x9E1A}, //6894 #CJK UNIFIED IDEOGRAPH + {0xEA60, 0x9E1B}, //6895 #CJK UNIFIED IDEOGRAPH + {0xEA61, 0x9E1E}, //6896 #CJK UNIFIED IDEOGRAPH + {0xEA62, 0x9E75}, //6897 #CJK UNIFIED IDEOGRAPH + {0xEA63, 0x9E79}, //6898 #CJK UNIFIED IDEOGRAPH + {0xEA64, 0x9E7D}, //6899 #CJK UNIFIED IDEOGRAPH + {0xEA65, 0x9E81}, //6900 #CJK UNIFIED IDEOGRAPH + {0xEA66, 0x9E88}, //6901 #CJK UNIFIED IDEOGRAPH + {0xEA67, 0x9E8B}, //6902 #CJK UNIFIED IDEOGRAPH + {0xEA68, 0x9E8C}, //6903 #CJK UNIFIED IDEOGRAPH + {0xEA69, 0x9E92}, //6904 #CJK UNIFIED IDEOGRAPH + {0xEA6A, 0x9E95}, //6905 #CJK UNIFIED IDEOGRAPH + {0xEA6B, 0x9E91}, //6906 #CJK UNIFIED IDEOGRAPH + {0xEA6C, 0x9E9D}, //6907 #CJK UNIFIED IDEOGRAPH + {0xEA6D, 0x9EA5}, //6908 #CJK UNIFIED IDEOGRAPH + {0xEA6E, 0x9EA9}, //6909 #CJK UNIFIED IDEOGRAPH + {0xEA6F, 0x9EB8}, //6910 #CJK UNIFIED IDEOGRAPH + {0xEA70, 0x9EAA}, //6911 #CJK UNIFIED IDEOGRAPH + {0xEA71, 0x9EAD}, //6912 #CJK UNIFIED IDEOGRAPH + {0xEA72, 0x9761}, //6913 #CJK UNIFIED IDEOGRAPH + {0xEA73, 0x9ECC}, //6914 #CJK UNIFIED IDEOGRAPH + {0xEA74, 0x9ECE}, //6915 #CJK UNIFIED IDEOGRAPH + {0xEA75, 0x9ECF}, //6916 #CJK UNIFIED IDEOGRAPH + {0xEA76, 0x9ED0}, //6917 #CJK UNIFIED IDEOGRAPH + {0xEA77, 0x9ED4}, //6918 #CJK UNIFIED IDEOGRAPH + {0xEA78, 0x9EDC}, //6919 #CJK UNIFIED IDEOGRAPH + {0xEA79, 0x9EDE}, //6920 #CJK UNIFIED IDEOGRAPH + {0xEA7A, 0x9EDD}, //6921 #CJK UNIFIED IDEOGRAPH + {0xEA7B, 0x9EE0}, //6922 #CJK UNIFIED IDEOGRAPH + {0xEA7C, 0x9EE5}, //6923 #CJK UNIFIED IDEOGRAPH + {0xEA7D, 0x9EE8}, //6924 #CJK UNIFIED IDEOGRAPH + {0xEA7E, 0x9EEF}, //6925 #CJK UNIFIED IDEOGRAPH + {0xEA80, 0x9EF4}, //6926 #CJK UNIFIED IDEOGRAPH + {0xEA81, 0x9EF6}, //6927 #CJK UNIFIED IDEOGRAPH + {0xEA82, 0x9EF7}, //6928 #CJK UNIFIED IDEOGRAPH + {0xEA83, 0x9EF9}, //6929 #CJK UNIFIED IDEOGRAPH + {0xEA84, 0x9EFB}, //6930 #CJK UNIFIED IDEOGRAPH + {0xEA85, 0x9EFC}, //6931 #CJK UNIFIED IDEOGRAPH + {0xEA86, 0x9EFD}, //6932 #CJK UNIFIED IDEOGRAPH + {0xEA87, 0x9F07}, //6933 #CJK UNIFIED IDEOGRAPH + {0xEA88, 0x9F08}, //6934 #CJK UNIFIED IDEOGRAPH + {0xEA89, 0x76B7}, //6935 #CJK UNIFIED IDEOGRAPH + {0xEA8A, 0x9F15}, //6936 #CJK UNIFIED IDEOGRAPH + {0xEA8B, 0x9F21}, //6937 #CJK UNIFIED IDEOGRAPH + {0xEA8C, 0x9F2C}, //6938 #CJK UNIFIED IDEOGRAPH + {0xEA8D, 0x9F3E}, //6939 #CJK UNIFIED IDEOGRAPH + {0xEA8E, 0x9F4A}, //6940 #CJK UNIFIED IDEOGRAPH + {0xEA8F, 0x9F52}, //6941 #CJK UNIFIED IDEOGRAPH + {0xEA90, 0x9F54}, //6942 #CJK UNIFIED IDEOGRAPH + {0xEA91, 0x9F63}, //6943 #CJK UNIFIED IDEOGRAPH + {0xEA92, 0x9F5F}, //6944 #CJK UNIFIED IDEOGRAPH + {0xEA93, 0x9F60}, //6945 #CJK UNIFIED IDEOGRAPH + {0xEA94, 0x9F61}, //6946 #CJK UNIFIED IDEOGRAPH + {0xEA95, 0x9F66}, //6947 #CJK UNIFIED IDEOGRAPH + {0xEA96, 0x9F67}, //6948 #CJK UNIFIED IDEOGRAPH + {0xEA97, 0x9F6C}, //6949 #CJK UNIFIED IDEOGRAPH + {0xEA98, 0x9F6A}, //6950 #CJK UNIFIED IDEOGRAPH + {0xEA99, 0x9F77}, //6951 #CJK UNIFIED IDEOGRAPH + {0xEA9A, 0x9F72}, //6952 #CJK UNIFIED IDEOGRAPH + {0xEA9B, 0x9F76}, //6953 #CJK UNIFIED IDEOGRAPH + {0xEA9C, 0x9F95}, //6954 #CJK UNIFIED IDEOGRAPH + {0xEA9D, 0x9F9C}, //6955 #CJK UNIFIED IDEOGRAPH + {0xEA9E, 0x9FA0}, //6956 #CJK UNIFIED IDEOGRAPH + {0xEA9F, 0x582F}, //6957 #CJK UNIFIED IDEOGRAPH + {0xEAA0, 0x69C7}, //6958 #CJK UNIFIED IDEOGRAPH + {0xEAA1, 0x9059}, //6959 #CJK UNIFIED IDEOGRAPH + {0xEAA2, 0x7464}, //6960 #CJK UNIFIED IDEOGRAPH + {0xEAA3, 0x51DC}, //6961 #CJK UNIFIED IDEOGRAPH + {0xEAA4, 0x7199}, //6962 #CJK UNIFIED IDEOGRAPH + {0xED40, 0x7E8A}, //6963 #CJK UNIFIED IDEOGRAPH + {0xED41, 0x891C}, //6964 #CJK UNIFIED IDEOGRAPH + {0xED42, 0x9348}, //6965 #CJK UNIFIED IDEOGRAPH + {0xED43, 0x9288}, //6966 #CJK UNIFIED IDEOGRAPH + {0xED44, 0x84DC}, //6967 #CJK UNIFIED IDEOGRAPH + {0xED45, 0x4FC9}, //6968 #CJK UNIFIED IDEOGRAPH + {0xED46, 0x70BB}, //6969 #CJK UNIFIED IDEOGRAPH + {0xED47, 0x6631}, //6970 #CJK UNIFIED IDEOGRAPH + {0xED48, 0x68C8}, //6971 #CJK UNIFIED IDEOGRAPH + {0xED49, 0x92F9}, //6972 #CJK UNIFIED IDEOGRAPH + {0xED4A, 0x66FB}, //6973 #CJK UNIFIED IDEOGRAPH + {0xED4B, 0x5F45}, //6974 #CJK UNIFIED IDEOGRAPH + {0xED4C, 0x4E28}, //6975 #CJK UNIFIED IDEOGRAPH + {0xED4D, 0x4EE1}, //6976 #CJK UNIFIED IDEOGRAPH + {0xED4E, 0x4EFC}, //6977 #CJK UNIFIED IDEOGRAPH + {0xED4F, 0x4F00}, //6978 #CJK UNIFIED IDEOGRAPH + {0xED50, 0x4F03}, //6979 #CJK UNIFIED IDEOGRAPH + {0xED51, 0x4F39}, //6980 #CJK UNIFIED IDEOGRAPH + {0xED52, 0x4F56}, //6981 #CJK UNIFIED IDEOGRAPH + {0xED53, 0x4F92}, //6982 #CJK UNIFIED IDEOGRAPH + {0xED54, 0x4F8A}, //6983 #CJK UNIFIED IDEOGRAPH + {0xED55, 0x4F9A}, //6984 #CJK UNIFIED IDEOGRAPH + {0xED56, 0x4F94}, //6985 #CJK UNIFIED IDEOGRAPH + {0xED57, 0x4FCD}, //6986 #CJK UNIFIED IDEOGRAPH + {0xED58, 0x5040}, //6987 #CJK UNIFIED IDEOGRAPH + {0xED59, 0x5022}, //6988 #CJK UNIFIED IDEOGRAPH + {0xED5A, 0x4FFF}, //6989 #CJK UNIFIED IDEOGRAPH + {0xED5B, 0x501E}, //6990 #CJK UNIFIED IDEOGRAPH + {0xED5C, 0x5046}, //6991 #CJK UNIFIED IDEOGRAPH + {0xED5D, 0x5070}, //6992 #CJK UNIFIED IDEOGRAPH + {0xED5E, 0x5042}, //6993 #CJK UNIFIED IDEOGRAPH + {0xED5F, 0x5094}, //6994 #CJK UNIFIED IDEOGRAPH + {0xED60, 0x50F4}, //6995 #CJK UNIFIED IDEOGRAPH + {0xED61, 0x50D8}, //6996 #CJK UNIFIED IDEOGRAPH + {0xED62, 0x514A}, //6997 #CJK UNIFIED IDEOGRAPH + {0xED63, 0x5164}, //6998 #CJK UNIFIED IDEOGRAPH + {0xED64, 0x519D}, //6999 #CJK UNIFIED IDEOGRAPH + {0xED65, 0x51BE}, //7000 #CJK UNIFIED IDEOGRAPH + {0xED66, 0x51EC}, //7001 #CJK UNIFIED IDEOGRAPH + {0xED67, 0x5215}, //7002 #CJK UNIFIED IDEOGRAPH + {0xED68, 0x529C}, //7003 #CJK UNIFIED IDEOGRAPH + {0xED69, 0x52A6}, //7004 #CJK UNIFIED IDEOGRAPH + {0xED6A, 0x52C0}, //7005 #CJK UNIFIED IDEOGRAPH + {0xED6B, 0x52DB}, //7006 #CJK UNIFIED IDEOGRAPH + {0xED6C, 0x5300}, //7007 #CJK UNIFIED IDEOGRAPH + {0xED6D, 0x5307}, //7008 #CJK UNIFIED IDEOGRAPH + {0xED6E, 0x5324}, //7009 #CJK UNIFIED IDEOGRAPH + {0xED6F, 0x5372}, //7010 #CJK UNIFIED IDEOGRAPH + {0xED70, 0x5393}, //7011 #CJK UNIFIED IDEOGRAPH + {0xED71, 0x53B2}, //7012 #CJK UNIFIED IDEOGRAPH + {0xED72, 0x53DD}, //7013 #CJK UNIFIED IDEOGRAPH + {0xED73, 0xFA0E}, //7014 #CJK COMPATIBILITY IDEOGRAPH + {0xED74, 0x549C}, //7015 #CJK UNIFIED IDEOGRAPH + {0xED75, 0x548A}, //7016 #CJK UNIFIED IDEOGRAPH + {0xED76, 0x54A9}, //7017 #CJK UNIFIED IDEOGRAPH + {0xED77, 0x54FF}, //7018 #CJK UNIFIED IDEOGRAPH + {0xED78, 0x5586}, //7019 #CJK UNIFIED IDEOGRAPH + {0xED79, 0x5759}, //7020 #CJK UNIFIED IDEOGRAPH + {0xED7A, 0x5765}, //7021 #CJK UNIFIED IDEOGRAPH + {0xED7B, 0x57AC}, //7022 #CJK UNIFIED IDEOGRAPH + {0xED7C, 0x57C8}, //7023 #CJK UNIFIED IDEOGRAPH + {0xED7D, 0x57C7}, //7024 #CJK UNIFIED IDEOGRAPH + {0xED7E, 0xFA0F}, //7025 #CJK COMPATIBILITY IDEOGRAPH + {0xED80, 0xFA10}, //7026 #CJK COMPATIBILITY IDEOGRAPH + {0xED81, 0x589E}, //7027 #CJK UNIFIED IDEOGRAPH + {0xED82, 0x58B2}, //7028 #CJK UNIFIED IDEOGRAPH + {0xED83, 0x590B}, //7029 #CJK UNIFIED IDEOGRAPH + {0xED84, 0x5953}, //7030 #CJK UNIFIED IDEOGRAPH + {0xED85, 0x595B}, //7031 #CJK UNIFIED IDEOGRAPH + {0xED86, 0x595D}, //7032 #CJK UNIFIED IDEOGRAPH + {0xED87, 0x5963}, //7033 #CJK UNIFIED IDEOGRAPH + {0xED88, 0x59A4}, //7034 #CJK UNIFIED IDEOGRAPH + {0xED89, 0x59BA}, //7035 #CJK UNIFIED IDEOGRAPH + {0xED8A, 0x5B56}, //7036 #CJK UNIFIED IDEOGRAPH + {0xED8B, 0x5BC0}, //7037 #CJK UNIFIED IDEOGRAPH + {0xED8C, 0x752F}, //7038 #CJK UNIFIED IDEOGRAPH + {0xED8D, 0x5BD8}, //7039 #CJK UNIFIED IDEOGRAPH + {0xED8E, 0x5BEC}, //7040 #CJK UNIFIED IDEOGRAPH + {0xED8F, 0x5C1E}, //7041 #CJK UNIFIED IDEOGRAPH + {0xED90, 0x5CA6}, //7042 #CJK UNIFIED IDEOGRAPH + {0xED91, 0x5CBA}, //7043 #CJK UNIFIED IDEOGRAPH + {0xED92, 0x5CF5}, //7044 #CJK UNIFIED IDEOGRAPH + {0xED93, 0x5D27}, //7045 #CJK UNIFIED IDEOGRAPH + {0xED94, 0x5D53}, //7046 #CJK UNIFIED IDEOGRAPH + {0xED95, 0xFA11}, //7047 #CJK COMPATIBILITY IDEOGRAPH + {0xED96, 0x5D42}, //7048 #CJK UNIFIED IDEOGRAPH + {0xED97, 0x5D6D}, //7049 #CJK UNIFIED IDEOGRAPH + {0xED98, 0x5DB8}, //7050 #CJK UNIFIED IDEOGRAPH + {0xED99, 0x5DB9}, //7051 #CJK UNIFIED IDEOGRAPH + {0xED9A, 0x5DD0}, //7052 #CJK UNIFIED IDEOGRAPH + {0xED9B, 0x5F21}, //7053 #CJK UNIFIED IDEOGRAPH + {0xED9C, 0x5F34}, //7054 #CJK UNIFIED IDEOGRAPH + {0xED9D, 0x5F67}, //7055 #CJK UNIFIED IDEOGRAPH + {0xED9E, 0x5FB7}, //7056 #CJK UNIFIED IDEOGRAPH + {0xED9F, 0x5FDE}, //7057 #CJK UNIFIED IDEOGRAPH + {0xEDA0, 0x605D}, //7058 #CJK UNIFIED IDEOGRAPH + {0xEDA1, 0x6085}, //7059 #CJK UNIFIED IDEOGRAPH + {0xEDA2, 0x608A}, //7060 #CJK UNIFIED IDEOGRAPH + {0xEDA3, 0x60DE}, //7061 #CJK UNIFIED IDEOGRAPH + {0xEDA4, 0x60D5}, //7062 #CJK UNIFIED IDEOGRAPH + {0xEDA5, 0x6120}, //7063 #CJK UNIFIED IDEOGRAPH + {0xEDA6, 0x60F2}, //7064 #CJK UNIFIED IDEOGRAPH + {0xEDA7, 0x6111}, //7065 #CJK UNIFIED IDEOGRAPH + {0xEDA8, 0x6137}, //7066 #CJK UNIFIED IDEOGRAPH + {0xEDA9, 0x6130}, //7067 #CJK UNIFIED IDEOGRAPH + {0xEDAA, 0x6198}, //7068 #CJK UNIFIED IDEOGRAPH + {0xEDAB, 0x6213}, //7069 #CJK UNIFIED IDEOGRAPH + {0xEDAC, 0x62A6}, //7070 #CJK UNIFIED IDEOGRAPH + {0xEDAD, 0x63F5}, //7071 #CJK UNIFIED IDEOGRAPH + {0xEDAE, 0x6460}, //7072 #CJK UNIFIED IDEOGRAPH + {0xEDAF, 0x649D}, //7073 #CJK UNIFIED IDEOGRAPH + {0xEDB0, 0x64CE}, //7074 #CJK UNIFIED IDEOGRAPH + {0xEDB1, 0x654E}, //7075 #CJK UNIFIED IDEOGRAPH + {0xEDB2, 0x6600}, //7076 #CJK UNIFIED IDEOGRAPH + {0xEDB3, 0x6615}, //7077 #CJK UNIFIED IDEOGRAPH + {0xEDB4, 0x663B}, //7078 #CJK UNIFIED IDEOGRAPH + {0xEDB5, 0x6609}, //7079 #CJK UNIFIED IDEOGRAPH + {0xEDB6, 0x662E}, //7080 #CJK UNIFIED IDEOGRAPH + {0xEDB7, 0x661E}, //7081 #CJK UNIFIED IDEOGRAPH + {0xEDB8, 0x6624}, //7082 #CJK UNIFIED IDEOGRAPH + {0xEDB9, 0x6665}, //7083 #CJK UNIFIED IDEOGRAPH + {0xEDBA, 0x6657}, //7084 #CJK UNIFIED IDEOGRAPH + {0xEDBB, 0x6659}, //7085 #CJK UNIFIED IDEOGRAPH + {0xEDBC, 0xFA12}, //7086 #CJK COMPATIBILITY IDEOGRAPH + {0xEDBD, 0x6673}, //7087 #CJK UNIFIED IDEOGRAPH + {0xEDBE, 0x6699}, //7088 #CJK UNIFIED IDEOGRAPH + {0xEDBF, 0x66A0}, //7089 #CJK UNIFIED IDEOGRAPH + {0xEDC0, 0x66B2}, //7090 #CJK UNIFIED IDEOGRAPH + {0xEDC1, 0x66BF}, //7091 #CJK UNIFIED IDEOGRAPH + {0xEDC2, 0x66FA}, //7092 #CJK UNIFIED IDEOGRAPH + {0xEDC3, 0x670E}, //7093 #CJK UNIFIED IDEOGRAPH + {0xEDC4, 0xF929}, //7094 #CJK COMPATIBILITY IDEOGRAPH + {0xEDC5, 0x6766}, //7095 #CJK UNIFIED IDEOGRAPH + {0xEDC6, 0x67BB}, //7096 #CJK UNIFIED IDEOGRAPH + {0xEDC7, 0x6852}, //7097 #CJK UNIFIED IDEOGRAPH + {0xEDC8, 0x67C0}, //7098 #CJK UNIFIED IDEOGRAPH + {0xEDC9, 0x6801}, //7099 #CJK UNIFIED IDEOGRAPH + {0xEDCA, 0x6844}, //7100 #CJK UNIFIED IDEOGRAPH + {0xEDCB, 0x68CF}, //7101 #CJK UNIFIED IDEOGRAPH + {0xEDCC, 0xFA13}, //7102 #CJK COMPATIBILITY IDEOGRAPH + {0xEDCD, 0x6968}, //7103 #CJK UNIFIED IDEOGRAPH + {0xEDCE, 0xFA14}, //7104 #CJK COMPATIBILITY IDEOGRAPH + {0xEDCF, 0x6998}, //7105 #CJK UNIFIED IDEOGRAPH + {0xEDD0, 0x69E2}, //7106 #CJK UNIFIED IDEOGRAPH + {0xEDD1, 0x6A30}, //7107 #CJK UNIFIED IDEOGRAPH + {0xEDD2, 0x6A6B}, //7108 #CJK UNIFIED IDEOGRAPH + {0xEDD3, 0x6A46}, //7109 #CJK UNIFIED IDEOGRAPH + {0xEDD4, 0x6A73}, //7110 #CJK UNIFIED IDEOGRAPH + {0xEDD5, 0x6A7E}, //7111 #CJK UNIFIED IDEOGRAPH + {0xEDD6, 0x6AE2}, //7112 #CJK UNIFIED IDEOGRAPH + {0xEDD7, 0x6AE4}, //7113 #CJK UNIFIED IDEOGRAPH + {0xEDD8, 0x6BD6}, //7114 #CJK UNIFIED IDEOGRAPH + {0xEDD9, 0x6C3F}, //7115 #CJK UNIFIED IDEOGRAPH + {0xEDDA, 0x6C5C}, //7116 #CJK UNIFIED IDEOGRAPH + {0xEDDB, 0x6C86}, //7117 #CJK UNIFIED IDEOGRAPH + {0xEDDC, 0x6C6F}, //7118 #CJK UNIFIED IDEOGRAPH + {0xEDDD, 0x6CDA}, //7119 #CJK UNIFIED IDEOGRAPH + {0xEDDE, 0x6D04}, //7120 #CJK UNIFIED IDEOGRAPH + {0xEDDF, 0x6D87}, //7121 #CJK UNIFIED IDEOGRAPH + {0xEDE0, 0x6D6F}, //7122 #CJK UNIFIED IDEOGRAPH + {0xEDE1, 0x6D96}, //7123 #CJK UNIFIED IDEOGRAPH + {0xEDE2, 0x6DAC}, //7124 #CJK UNIFIED IDEOGRAPH + {0xEDE3, 0x6DCF}, //7125 #CJK UNIFIED IDEOGRAPH + {0xEDE4, 0x6DF8}, //7126 #CJK UNIFIED IDEOGRAPH + {0xEDE5, 0x6DF2}, //7127 #CJK UNIFIED IDEOGRAPH + {0xEDE6, 0x6DFC}, //7128 #CJK UNIFIED IDEOGRAPH + {0xEDE7, 0x6E39}, //7129 #CJK UNIFIED IDEOGRAPH + {0xEDE8, 0x6E5C}, //7130 #CJK UNIFIED IDEOGRAPH + {0xEDE9, 0x6E27}, //7131 #CJK UNIFIED IDEOGRAPH + {0xEDEA, 0x6E3C}, //7132 #CJK UNIFIED IDEOGRAPH + {0xEDEB, 0x6EBF}, //7133 #CJK UNIFIED IDEOGRAPH + {0xEDEC, 0x6F88}, //7134 #CJK UNIFIED IDEOGRAPH + {0xEDED, 0x6FB5}, //7135 #CJK UNIFIED IDEOGRAPH + {0xEDEE, 0x6FF5}, //7136 #CJK UNIFIED IDEOGRAPH + {0xEDEF, 0x7005}, //7137 #CJK UNIFIED IDEOGRAPH + {0xEDF0, 0x7007}, //7138 #CJK UNIFIED IDEOGRAPH + {0xEDF1, 0x7028}, //7139 #CJK UNIFIED IDEOGRAPH + {0xEDF2, 0x7085}, //7140 #CJK UNIFIED IDEOGRAPH + {0xEDF3, 0x70AB}, //7141 #CJK UNIFIED IDEOGRAPH + {0xEDF4, 0x710F}, //7142 #CJK UNIFIED IDEOGRAPH + {0xEDF5, 0x7104}, //7143 #CJK UNIFIED IDEOGRAPH + {0xEDF6, 0x715C}, //7144 #CJK UNIFIED IDEOGRAPH + {0xEDF7, 0x7146}, //7145 #CJK UNIFIED IDEOGRAPH + {0xEDF8, 0x7147}, //7146 #CJK UNIFIED IDEOGRAPH + {0xEDF9, 0xFA15}, //7147 #CJK COMPATIBILITY IDEOGRAPH + {0xEDFA, 0x71C1}, //7148 #CJK UNIFIED IDEOGRAPH + {0xEDFB, 0x71FE}, //7149 #CJK UNIFIED IDEOGRAPH + {0xEDFC, 0x72B1}, //7150 #CJK UNIFIED IDEOGRAPH + {0xEE40, 0x72BE}, //7151 #CJK UNIFIED IDEOGRAPH + {0xEE41, 0x7324}, //7152 #CJK UNIFIED IDEOGRAPH + {0xEE42, 0xFA16}, //7153 #CJK COMPATIBILITY IDEOGRAPH + {0xEE43, 0x7377}, //7154 #CJK UNIFIED IDEOGRAPH + {0xEE44, 0x73BD}, //7155 #CJK UNIFIED IDEOGRAPH + {0xEE45, 0x73C9}, //7156 #CJK UNIFIED IDEOGRAPH + {0xEE46, 0x73D6}, //7157 #CJK UNIFIED IDEOGRAPH + {0xEE47, 0x73E3}, //7158 #CJK UNIFIED IDEOGRAPH + {0xEE48, 0x73D2}, //7159 #CJK UNIFIED IDEOGRAPH + {0xEE49, 0x7407}, //7160 #CJK UNIFIED IDEOGRAPH + {0xEE4A, 0x73F5}, //7161 #CJK UNIFIED IDEOGRAPH + {0xEE4B, 0x7426}, //7162 #CJK UNIFIED IDEOGRAPH + {0xEE4C, 0x742A}, //7163 #CJK UNIFIED IDEOGRAPH + {0xEE4D, 0x7429}, //7164 #CJK UNIFIED IDEOGRAPH + {0xEE4E, 0x742E}, //7165 #CJK UNIFIED IDEOGRAPH + {0xEE4F, 0x7462}, //7166 #CJK UNIFIED IDEOGRAPH + {0xEE50, 0x7489}, //7167 #CJK UNIFIED IDEOGRAPH + {0xEE51, 0x749F}, //7168 #CJK UNIFIED IDEOGRAPH + {0xEE52, 0x7501}, //7169 #CJK UNIFIED IDEOGRAPH + {0xEE53, 0x756F}, //7170 #CJK UNIFIED IDEOGRAPH + {0xEE54, 0x7682}, //7171 #CJK UNIFIED IDEOGRAPH + {0xEE55, 0x769C}, //7172 #CJK UNIFIED IDEOGRAPH + {0xEE56, 0x769E}, //7173 #CJK UNIFIED IDEOGRAPH + {0xEE57, 0x769B}, //7174 #CJK UNIFIED IDEOGRAPH + {0xEE58, 0x76A6}, //7175 #CJK UNIFIED IDEOGRAPH + {0xEE59, 0xFA17}, //7176 #CJK COMPATIBILITY IDEOGRAPH + {0xEE5A, 0x7746}, //7177 #CJK UNIFIED IDEOGRAPH + {0xEE5B, 0x52AF}, //7178 #CJK UNIFIED IDEOGRAPH + {0xEE5C, 0x7821}, //7179 #CJK UNIFIED IDEOGRAPH + {0xEE5D, 0x784E}, //7180 #CJK UNIFIED IDEOGRAPH + {0xEE5E, 0x7864}, //7181 #CJK UNIFIED IDEOGRAPH + {0xEE5F, 0x787A}, //7182 #CJK UNIFIED IDEOGRAPH + {0xEE60, 0x7930}, //7183 #CJK UNIFIED IDEOGRAPH + {0xEE61, 0xFA18}, //7184 #CJK COMPATIBILITY IDEOGRAPH + {0xEE62, 0xFA19}, //7185 #CJK COMPATIBILITY IDEOGRAPH + {0xEE63, 0xFA1A}, //7186 #CJK COMPATIBILITY IDEOGRAPH + {0xEE64, 0x7994}, //7187 #CJK UNIFIED IDEOGRAPH + {0xEE65, 0xFA1B}, //7188 #CJK COMPATIBILITY IDEOGRAPH + {0xEE66, 0x799B}, //7189 #CJK UNIFIED IDEOGRAPH + {0xEE67, 0x7AD1}, //7190 #CJK UNIFIED IDEOGRAPH + {0xEE68, 0x7AE7}, //7191 #CJK UNIFIED IDEOGRAPH + {0xEE69, 0xFA1C}, //7192 #CJK COMPATIBILITY IDEOGRAPH + {0xEE6A, 0x7AEB}, //7193 #CJK UNIFIED IDEOGRAPH + {0xEE6B, 0x7B9E}, //7194 #CJK UNIFIED IDEOGRAPH + {0xEE6C, 0xFA1D}, //7195 #CJK COMPATIBILITY IDEOGRAPH + {0xEE6D, 0x7D48}, //7196 #CJK UNIFIED IDEOGRAPH + {0xEE6E, 0x7D5C}, //7197 #CJK UNIFIED IDEOGRAPH + {0xEE6F, 0x7DB7}, //7198 #CJK UNIFIED IDEOGRAPH + {0xEE70, 0x7DA0}, //7199 #CJK UNIFIED IDEOGRAPH + {0xEE71, 0x7DD6}, //7200 #CJK UNIFIED IDEOGRAPH + {0xEE72, 0x7E52}, //7201 #CJK UNIFIED IDEOGRAPH + {0xEE73, 0x7F47}, //7202 #CJK UNIFIED IDEOGRAPH + {0xEE74, 0x7FA1}, //7203 #CJK UNIFIED IDEOGRAPH + {0xEE75, 0xFA1E}, //7204 #CJK COMPATIBILITY IDEOGRAPH + {0xEE76, 0x8301}, //7205 #CJK UNIFIED IDEOGRAPH + {0xEE77, 0x8362}, //7206 #CJK UNIFIED IDEOGRAPH + {0xEE78, 0x837F}, //7207 #CJK UNIFIED IDEOGRAPH + {0xEE79, 0x83C7}, //7208 #CJK UNIFIED IDEOGRAPH + {0xEE7A, 0x83F6}, //7209 #CJK UNIFIED IDEOGRAPH + {0xEE7B, 0x8448}, //7210 #CJK UNIFIED IDEOGRAPH + {0xEE7C, 0x84B4}, //7211 #CJK UNIFIED IDEOGRAPH + {0xEE7D, 0x8553}, //7212 #CJK UNIFIED IDEOGRAPH + {0xEE7E, 0x8559}, //7213 #CJK UNIFIED IDEOGRAPH + {0xEE80, 0x856B}, //7214 #CJK UNIFIED IDEOGRAPH + {0xEE81, 0xFA1F}, //7215 #CJK COMPATIBILITY IDEOGRAPH + {0xEE82, 0x85B0}, //7216 #CJK UNIFIED IDEOGRAPH + {0xEE83, 0xFA20}, //7217 #CJK COMPATIBILITY IDEOGRAPH + {0xEE84, 0xFA21}, //7218 #CJK COMPATIBILITY IDEOGRAPH + {0xEE85, 0x8807}, //7219 #CJK UNIFIED IDEOGRAPH + {0xEE86, 0x88F5}, //7220 #CJK UNIFIED IDEOGRAPH + {0xEE87, 0x8A12}, //7221 #CJK UNIFIED IDEOGRAPH + {0xEE88, 0x8A37}, //7222 #CJK UNIFIED IDEOGRAPH + {0xEE89, 0x8A79}, //7223 #CJK UNIFIED IDEOGRAPH + {0xEE8A, 0x8AA7}, //7224 #CJK UNIFIED IDEOGRAPH + {0xEE8B, 0x8ABE}, //7225 #CJK UNIFIED IDEOGRAPH + {0xEE8C, 0x8ADF}, //7226 #CJK UNIFIED IDEOGRAPH + {0xEE8D, 0xFA22}, //7227 #CJK COMPATIBILITY IDEOGRAPH + {0xEE8E, 0x8AF6}, //7228 #CJK UNIFIED IDEOGRAPH + {0xEE8F, 0x8B53}, //7229 #CJK UNIFIED IDEOGRAPH + {0xEE90, 0x8B7F}, //7230 #CJK UNIFIED IDEOGRAPH + {0xEE91, 0x8CF0}, //7231 #CJK UNIFIED IDEOGRAPH + {0xEE92, 0x8CF4}, //7232 #CJK UNIFIED IDEOGRAPH + {0xEE93, 0x8D12}, //7233 #CJK UNIFIED IDEOGRAPH + {0xEE94, 0x8D76}, //7234 #CJK UNIFIED IDEOGRAPH + {0xEE95, 0xFA23}, //7235 #CJK COMPATIBILITY IDEOGRAPH + {0xEE96, 0x8ECF}, //7236 #CJK UNIFIED IDEOGRAPH + {0xEE97, 0xFA24}, //7237 #CJK COMPATIBILITY IDEOGRAPH + {0xEE98, 0xFA25}, //7238 #CJK COMPATIBILITY IDEOGRAPH + {0xEE99, 0x9067}, //7239 #CJK UNIFIED IDEOGRAPH + {0xEE9A, 0x90DE}, //7240 #CJK UNIFIED IDEOGRAPH + {0xEE9B, 0xFA26}, //7241 #CJK COMPATIBILITY IDEOGRAPH + {0xEE9C, 0x9115}, //7242 #CJK UNIFIED IDEOGRAPH + {0xEE9D, 0x9127}, //7243 #CJK UNIFIED IDEOGRAPH + {0xEE9E, 0x91DA}, //7244 #CJK UNIFIED IDEOGRAPH + {0xEE9F, 0x91D7}, //7245 #CJK UNIFIED IDEOGRAPH + {0xEEA0, 0x91DE}, //7246 #CJK UNIFIED IDEOGRAPH + {0xEEA1, 0x91ED}, //7247 #CJK UNIFIED IDEOGRAPH + {0xEEA2, 0x91EE}, //7248 #CJK UNIFIED IDEOGRAPH + {0xEEA3, 0x91E4}, //7249 #CJK UNIFIED IDEOGRAPH + {0xEEA4, 0x91E5}, //7250 #CJK UNIFIED IDEOGRAPH + {0xEEA5, 0x9206}, //7251 #CJK UNIFIED IDEOGRAPH + {0xEEA6, 0x9210}, //7252 #CJK UNIFIED IDEOGRAPH + {0xEEA7, 0x920A}, //7253 #CJK UNIFIED IDEOGRAPH + {0xEEA8, 0x923A}, //7254 #CJK UNIFIED IDEOGRAPH + {0xEEA9, 0x9240}, //7255 #CJK UNIFIED IDEOGRAPH + {0xEEAA, 0x923C}, //7256 #CJK UNIFIED IDEOGRAPH + {0xEEAB, 0x924E}, //7257 #CJK UNIFIED IDEOGRAPH + {0xEEAC, 0x9259}, //7258 #CJK UNIFIED IDEOGRAPH + {0xEEAD, 0x9251}, //7259 #CJK UNIFIED IDEOGRAPH + {0xEEAE, 0x9239}, //7260 #CJK UNIFIED IDEOGRAPH + {0xEEAF, 0x9267}, //7261 #CJK UNIFIED IDEOGRAPH + {0xEEB0, 0x92A7}, //7262 #CJK UNIFIED IDEOGRAPH + {0xEEB1, 0x9277}, //7263 #CJK UNIFIED IDEOGRAPH + {0xEEB2, 0x9278}, //7264 #CJK UNIFIED IDEOGRAPH + {0xEEB3, 0x92E7}, //7265 #CJK UNIFIED IDEOGRAPH + {0xEEB4, 0x92D7}, //7266 #CJK UNIFIED IDEOGRAPH + {0xEEB5, 0x92D9}, //7267 #CJK UNIFIED IDEOGRAPH + {0xEEB6, 0x92D0}, //7268 #CJK UNIFIED IDEOGRAPH + {0xEEB7, 0xFA27}, //7269 #CJK COMPATIBILITY IDEOGRAPH + {0xEEB8, 0x92D5}, //7270 #CJK UNIFIED IDEOGRAPH + {0xEEB9, 0x92E0}, //7271 #CJK UNIFIED IDEOGRAPH + {0xEEBA, 0x92D3}, //7272 #CJK UNIFIED IDEOGRAPH + {0xEEBB, 0x9325}, //7273 #CJK UNIFIED IDEOGRAPH + {0xEEBC, 0x9321}, //7274 #CJK UNIFIED IDEOGRAPH + {0xEEBD, 0x92FB}, //7275 #CJK UNIFIED IDEOGRAPH + {0xEEBE, 0xFA28}, //7276 #CJK COMPATIBILITY IDEOGRAPH + {0xEEBF, 0x931E}, //7277 #CJK UNIFIED IDEOGRAPH + {0xEEC0, 0x92FF}, //7278 #CJK UNIFIED IDEOGRAPH + {0xEEC1, 0x931D}, //7279 #CJK UNIFIED IDEOGRAPH + {0xEEC2, 0x9302}, //7280 #CJK UNIFIED IDEOGRAPH + {0xEEC3, 0x9370}, //7281 #CJK UNIFIED IDEOGRAPH + {0xEEC4, 0x9357}, //7282 #CJK UNIFIED IDEOGRAPH + {0xEEC5, 0x93A4}, //7283 #CJK UNIFIED IDEOGRAPH + {0xEEC6, 0x93C6}, //7284 #CJK UNIFIED IDEOGRAPH + {0xEEC7, 0x93DE}, //7285 #CJK UNIFIED IDEOGRAPH + {0xEEC8, 0x93F8}, //7286 #CJK UNIFIED IDEOGRAPH + {0xEEC9, 0x9431}, //7287 #CJK UNIFIED IDEOGRAPH + {0xEECA, 0x9445}, //7288 #CJK UNIFIED IDEOGRAPH + {0xEECB, 0x9448}, //7289 #CJK UNIFIED IDEOGRAPH + {0xEECC, 0x9592}, //7290 #CJK UNIFIED IDEOGRAPH + {0xEECD, 0xF9DC}, //7291 #CJK COMPATIBILITY IDEOGRAPH + {0xEECE, 0xFA29}, //7292 #CJK COMPATIBILITY IDEOGRAPH + {0xEECF, 0x969D}, //7293 #CJK UNIFIED IDEOGRAPH + {0xEED0, 0x96AF}, //7294 #CJK UNIFIED IDEOGRAPH + {0xEED1, 0x9733}, //7295 #CJK UNIFIED IDEOGRAPH + {0xEED2, 0x973B}, //7296 #CJK UNIFIED IDEOGRAPH + {0xEED3, 0x9743}, //7297 #CJK UNIFIED IDEOGRAPH + {0xEED4, 0x974D}, //7298 #CJK UNIFIED IDEOGRAPH + {0xEED5, 0x974F}, //7299 #CJK UNIFIED IDEOGRAPH + {0xEED6, 0x9751}, //7300 #CJK UNIFIED IDEOGRAPH + {0xEED7, 0x9755}, //7301 #CJK UNIFIED IDEOGRAPH + {0xEED8, 0x9857}, //7302 #CJK UNIFIED IDEOGRAPH + {0xEED9, 0x9865}, //7303 #CJK UNIFIED IDEOGRAPH + {0xEEDA, 0xFA2A}, //7304 #CJK COMPATIBILITY IDEOGRAPH + {0xEEDB, 0xFA2B}, //7305 #CJK COMPATIBILITY IDEOGRAPH + {0xEEDC, 0x9927}, //7306 #CJK UNIFIED IDEOGRAPH + {0xEEDD, 0xFA2C}, //7307 #CJK COMPATIBILITY IDEOGRAPH + {0xEEDE, 0x999E}, //7308 #CJK UNIFIED IDEOGRAPH + {0xEEDF, 0x9A4E}, //7309 #CJK UNIFIED IDEOGRAPH + {0xEEE0, 0x9AD9}, //7310 #CJK UNIFIED IDEOGRAPH + {0xEEE1, 0x9ADC}, //7311 #CJK UNIFIED IDEOGRAPH + {0xEEE2, 0x9B75}, //7312 #CJK UNIFIED IDEOGRAPH + {0xEEE3, 0x9B72}, //7313 #CJK UNIFIED IDEOGRAPH + {0xEEE4, 0x9B8F}, //7314 #CJK UNIFIED IDEOGRAPH + {0xEEE5, 0x9BB1}, //7315 #CJK UNIFIED IDEOGRAPH + {0xEEE6, 0x9BBB}, //7316 #CJK UNIFIED IDEOGRAPH + {0xEEE7, 0x9C00}, //7317 #CJK UNIFIED IDEOGRAPH + {0xEEE8, 0x9D70}, //7318 #CJK UNIFIED IDEOGRAPH + {0xEEE9, 0x9D6B}, //7319 #CJK UNIFIED IDEOGRAPH + {0xEEEA, 0xFA2D}, //7320 #CJK COMPATIBILITY IDEOGRAPH + {0xEEEB, 0x9E19}, //7321 #CJK UNIFIED IDEOGRAPH + {0xEEEC, 0x9ED1}, //7322 #CJK UNIFIED IDEOGRAPH + {0xEEEF, 0x2170}, //7323 #SMALL ROMAN NUMERAL ONE + {0xEEF0, 0x2171}, //7324 #SMALL ROMAN NUMERAL TWO + {0xEEF1, 0x2172}, //7325 #SMALL ROMAN NUMERAL THREE + {0xEEF2, 0x2173}, //7326 #SMALL ROMAN NUMERAL FOUR + {0xEEF3, 0x2174}, //7327 #SMALL ROMAN NUMERAL FIVE + {0xEEF4, 0x2175}, //7328 #SMALL ROMAN NUMERAL SIX + {0xEEF5, 0x2176}, //7329 #SMALL ROMAN NUMERAL SEVEN + {0xEEF6, 0x2177}, //7330 #SMALL ROMAN NUMERAL EIGHT + {0xEEF7, 0x2178}, //7331 #SMALL ROMAN NUMERAL NINE + {0xEEF8, 0x2179}, //7332 #SMALL ROMAN NUMERAL TEN + {0xEEF9, 0xFFE2}, //7333 #FULLWIDTH NOT SIGN + {0xEEFA, 0xFFE4}, //7334 #FULLWIDTH BROKEN BAR + {0xEEFB, 0xFF07}, //7335 #FULLWIDTH APOSTROPHE + {0xEEFC, 0xFF02}, //7336 #FULLWIDTH QUOTATION MARK + {0xFA40, 0x2170}, //7337 #SMALL ROMAN NUMERAL ONE + {0xFA41, 0x2171}, //7338 #SMALL ROMAN NUMERAL TWO + {0xFA42, 0x2172}, //7339 #SMALL ROMAN NUMERAL THREE + {0xFA43, 0x2173}, //7340 #SMALL ROMAN NUMERAL FOUR + {0xFA44, 0x2174}, //7341 #SMALL ROMAN NUMERAL FIVE + {0xFA45, 0x2175}, //7342 #SMALL ROMAN NUMERAL SIX + {0xFA46, 0x2176}, //7343 #SMALL ROMAN NUMERAL SEVEN + {0xFA47, 0x2177}, //7344 #SMALL ROMAN NUMERAL EIGHT + {0xFA48, 0x2178}, //7345 #SMALL ROMAN NUMERAL NINE + {0xFA49, 0x2179}, //7346 #SMALL ROMAN NUMERAL TEN + {0xFA4A, 0x2160}, //7347 #ROMAN NUMERAL ONE + {0xFA4B, 0x2161}, //7348 #ROMAN NUMERAL TWO + {0xFA4C, 0x2162}, //7349 #ROMAN NUMERAL THREE + {0xFA4D, 0x2163}, //7350 #ROMAN NUMERAL FOUR + {0xFA4E, 0x2164}, //7351 #ROMAN NUMERAL FIVE + {0xFA4F, 0x2165}, //7352 #ROMAN NUMERAL SIX + {0xFA50, 0x2166}, //7353 #ROMAN NUMERAL SEVEN + {0xFA51, 0x2167}, //7354 #ROMAN NUMERAL EIGHT + {0xFA52, 0x2168}, //7355 #ROMAN NUMERAL NINE + {0xFA53, 0x2169}, //7356 #ROMAN NUMERAL TEN + {0xFA54, 0xFFE2}, //7357 #FULLWIDTH NOT SIGN + {0xFA55, 0xFFE4}, //7358 #FULLWIDTH BROKEN BAR + {0xFA56, 0xFF07}, //7359 #FULLWIDTH APOSTROPHE + {0xFA57, 0xFF02}, //7360 #FULLWIDTH QUOTATION MARK + {0xFA58, 0x3231}, //7361 #PARENTHESIZED IDEOGRAPH STOCK + {0xFA59, 0x2116}, //7362 #NUMERO SIGN + {0xFA5A, 0x2121}, //7363 #TELEPHONE SIGN + {0xFA5B, 0x2235}, //7364 #BECAUSE + {0xFA5C, 0x7E8A}, //7365 #CJK UNIFIED IDEOGRAPH + {0xFA5D, 0x891C}, //7366 #CJK UNIFIED IDEOGRAPH + {0xFA5E, 0x9348}, //7367 #CJK UNIFIED IDEOGRAPH + {0xFA5F, 0x9288}, //7368 #CJK UNIFIED IDEOGRAPH + {0xFA60, 0x84DC}, //7369 #CJK UNIFIED IDEOGRAPH + {0xFA61, 0x4FC9}, //7370 #CJK UNIFIED IDEOGRAPH + {0xFA62, 0x70BB}, //7371 #CJK UNIFIED IDEOGRAPH + {0xFA63, 0x6631}, //7372 #CJK UNIFIED IDEOGRAPH + {0xFA64, 0x68C8}, //7373 #CJK UNIFIED IDEOGRAPH + {0xFA65, 0x92F9}, //7374 #CJK UNIFIED IDEOGRAPH + {0xFA66, 0x66FB}, //7375 #CJK UNIFIED IDEOGRAPH + {0xFA67, 0x5F45}, //7376 #CJK UNIFIED IDEOGRAPH + {0xFA68, 0x4E28}, //7377 #CJK UNIFIED IDEOGRAPH + {0xFA69, 0x4EE1}, //7378 #CJK UNIFIED IDEOGRAPH + {0xFA6A, 0x4EFC}, //7379 #CJK UNIFIED IDEOGRAPH + {0xFA6B, 0x4F00}, //7380 #CJK UNIFIED IDEOGRAPH + {0xFA6C, 0x4F03}, //7381 #CJK UNIFIED IDEOGRAPH + {0xFA6D, 0x4F39}, //7382 #CJK UNIFIED IDEOGRAPH + {0xFA6E, 0x4F56}, //7383 #CJK UNIFIED IDEOGRAPH + {0xFA6F, 0x4F92}, //7384 #CJK UNIFIED IDEOGRAPH + {0xFA70, 0x4F8A}, //7385 #CJK UNIFIED IDEOGRAPH + {0xFA71, 0x4F9A}, //7386 #CJK UNIFIED IDEOGRAPH + {0xFA72, 0x4F94}, //7387 #CJK UNIFIED IDEOGRAPH + {0xFA73, 0x4FCD}, //7388 #CJK UNIFIED IDEOGRAPH + {0xFA74, 0x5040}, //7389 #CJK UNIFIED IDEOGRAPH + {0xFA75, 0x5022}, //7390 #CJK UNIFIED IDEOGRAPH + {0xFA76, 0x4FFF}, //7391 #CJK UNIFIED IDEOGRAPH + {0xFA77, 0x501E}, //7392 #CJK UNIFIED IDEOGRAPH + {0xFA78, 0x5046}, //7393 #CJK UNIFIED IDEOGRAPH + {0xFA79, 0x5070}, //7394 #CJK UNIFIED IDEOGRAPH + {0xFA7A, 0x5042}, //7395 #CJK UNIFIED IDEOGRAPH + {0xFA7B, 0x5094}, //7396 #CJK UNIFIED IDEOGRAPH + {0xFA7C, 0x50F4}, //7397 #CJK UNIFIED IDEOGRAPH + {0xFA7D, 0x50D8}, //7398 #CJK UNIFIED IDEOGRAPH + {0xFA7E, 0x514A}, //7399 #CJK UNIFIED IDEOGRAPH + {0xFA80, 0x5164}, //7400 #CJK UNIFIED IDEOGRAPH + {0xFA81, 0x519D}, //7401 #CJK UNIFIED IDEOGRAPH + {0xFA82, 0x51BE}, //7402 #CJK UNIFIED IDEOGRAPH + {0xFA83, 0x51EC}, //7403 #CJK UNIFIED IDEOGRAPH + {0xFA84, 0x5215}, //7404 #CJK UNIFIED IDEOGRAPH + {0xFA85, 0x529C}, //7405 #CJK UNIFIED IDEOGRAPH + {0xFA86, 0x52A6}, //7406 #CJK UNIFIED IDEOGRAPH + {0xFA87, 0x52C0}, //7407 #CJK UNIFIED IDEOGRAPH + {0xFA88, 0x52DB}, //7408 #CJK UNIFIED IDEOGRAPH + {0xFA89, 0x5300}, //7409 #CJK UNIFIED IDEOGRAPH + {0xFA8A, 0x5307}, //7410 #CJK UNIFIED IDEOGRAPH + {0xFA8B, 0x5324}, //7411 #CJK UNIFIED IDEOGRAPH + {0xFA8C, 0x5372}, //7412 #CJK UNIFIED IDEOGRAPH + {0xFA8D, 0x5393}, //7413 #CJK UNIFIED IDEOGRAPH + {0xFA8E, 0x53B2}, //7414 #CJK UNIFIED IDEOGRAPH + {0xFA8F, 0x53DD}, //7415 #CJK UNIFIED IDEOGRAPH + {0xFA90, 0xFA0E}, //7416 #CJK COMPATIBILITY IDEOGRAPH + {0xFA91, 0x549C}, //7417 #CJK UNIFIED IDEOGRAPH + {0xFA92, 0x548A}, //7418 #CJK UNIFIED IDEOGRAPH + {0xFA93, 0x54A9}, //7419 #CJK UNIFIED IDEOGRAPH + {0xFA94, 0x54FF}, //7420 #CJK UNIFIED IDEOGRAPH + {0xFA95, 0x5586}, //7421 #CJK UNIFIED IDEOGRAPH + {0xFA96, 0x5759}, //7422 #CJK UNIFIED IDEOGRAPH + {0xFA97, 0x5765}, //7423 #CJK UNIFIED IDEOGRAPH + {0xFA98, 0x57AC}, //7424 #CJK UNIFIED IDEOGRAPH + {0xFA99, 0x57C8}, //7425 #CJK UNIFIED IDEOGRAPH + {0xFA9A, 0x57C7}, //7426 #CJK UNIFIED IDEOGRAPH + {0xFA9B, 0xFA0F}, //7427 #CJK COMPATIBILITY IDEOGRAPH + {0xFA9C, 0xFA10}, //7428 #CJK COMPATIBILITY IDEOGRAPH + {0xFA9D, 0x589E}, //7429 #CJK UNIFIED IDEOGRAPH + {0xFA9E, 0x58B2}, //7430 #CJK UNIFIED IDEOGRAPH + {0xFA9F, 0x590B}, //7431 #CJK UNIFIED IDEOGRAPH + {0xFAA0, 0x5953}, //7432 #CJK UNIFIED IDEOGRAPH + {0xFAA1, 0x595B}, //7433 #CJK UNIFIED IDEOGRAPH + {0xFAA2, 0x595D}, //7434 #CJK UNIFIED IDEOGRAPH + {0xFAA3, 0x5963}, //7435 #CJK UNIFIED IDEOGRAPH + {0xFAA4, 0x59A4}, //7436 #CJK UNIFIED IDEOGRAPH + {0xFAA5, 0x59BA}, //7437 #CJK UNIFIED IDEOGRAPH + {0xFAA6, 0x5B56}, //7438 #CJK UNIFIED IDEOGRAPH + {0xFAA7, 0x5BC0}, //7439 #CJK UNIFIED IDEOGRAPH + {0xFAA8, 0x752F}, //7440 #CJK UNIFIED IDEOGRAPH + {0xFAA9, 0x5BD8}, //7441 #CJK UNIFIED IDEOGRAPH + {0xFAAA, 0x5BEC}, //7442 #CJK UNIFIED IDEOGRAPH + {0xFAAB, 0x5C1E}, //7443 #CJK UNIFIED IDEOGRAPH + {0xFAAC, 0x5CA6}, //7444 #CJK UNIFIED IDEOGRAPH + {0xFAAD, 0x5CBA}, //7445 #CJK UNIFIED IDEOGRAPH + {0xFAAE, 0x5CF5}, //7446 #CJK UNIFIED IDEOGRAPH + {0xFAAF, 0x5D27}, //7447 #CJK UNIFIED IDEOGRAPH + {0xFAB0, 0x5D53}, //7448 #CJK UNIFIED IDEOGRAPH + {0xFAB1, 0xFA11}, //7449 #CJK COMPATIBILITY IDEOGRAPH + {0xFAB2, 0x5D42}, //7450 #CJK UNIFIED IDEOGRAPH + {0xFAB3, 0x5D6D}, //7451 #CJK UNIFIED IDEOGRAPH + {0xFAB4, 0x5DB8}, //7452 #CJK UNIFIED IDEOGRAPH + {0xFAB5, 0x5DB9}, //7453 #CJK UNIFIED IDEOGRAPH + {0xFAB6, 0x5DD0}, //7454 #CJK UNIFIED IDEOGRAPH + {0xFAB7, 0x5F21}, //7455 #CJK UNIFIED IDEOGRAPH + {0xFAB8, 0x5F34}, //7456 #CJK UNIFIED IDEOGRAPH + {0xFAB9, 0x5F67}, //7457 #CJK UNIFIED IDEOGRAPH + {0xFABA, 0x5FB7}, //7458 #CJK UNIFIED IDEOGRAPH + {0xFABB, 0x5FDE}, //7459 #CJK UNIFIED IDEOGRAPH + {0xFABC, 0x605D}, //7460 #CJK UNIFIED IDEOGRAPH + {0xFABD, 0x6085}, //7461 #CJK UNIFIED IDEOGRAPH + {0xFABE, 0x608A}, //7462 #CJK UNIFIED IDEOGRAPH + {0xFABF, 0x60DE}, //7463 #CJK UNIFIED IDEOGRAPH + {0xFAC0, 0x60D5}, //7464 #CJK UNIFIED IDEOGRAPH + {0xFAC1, 0x6120}, //7465 #CJK UNIFIED IDEOGRAPH + {0xFAC2, 0x60F2}, //7466 #CJK UNIFIED IDEOGRAPH + {0xFAC3, 0x6111}, //7467 #CJK UNIFIED IDEOGRAPH + {0xFAC4, 0x6137}, //7468 #CJK UNIFIED IDEOGRAPH + {0xFAC5, 0x6130}, //7469 #CJK UNIFIED IDEOGRAPH + {0xFAC6, 0x6198}, //7470 #CJK UNIFIED IDEOGRAPH + {0xFAC7, 0x6213}, //7471 #CJK UNIFIED IDEOGRAPH + {0xFAC8, 0x62A6}, //7472 #CJK UNIFIED IDEOGRAPH + {0xFAC9, 0x63F5}, //7473 #CJK UNIFIED IDEOGRAPH + {0xFACA, 0x6460}, //7474 #CJK UNIFIED IDEOGRAPH + {0xFACB, 0x649D}, //7475 #CJK UNIFIED IDEOGRAPH + {0xFACC, 0x64CE}, //7476 #CJK UNIFIED IDEOGRAPH + {0xFACD, 0x654E}, //7477 #CJK UNIFIED IDEOGRAPH + {0xFACE, 0x6600}, //7478 #CJK UNIFIED IDEOGRAPH + {0xFACF, 0x6615}, //7479 #CJK UNIFIED IDEOGRAPH + {0xFAD0, 0x663B}, //7480 #CJK UNIFIED IDEOGRAPH + {0xFAD1, 0x6609}, //7481 #CJK UNIFIED IDEOGRAPH + {0xFAD2, 0x662E}, //7482 #CJK UNIFIED IDEOGRAPH + {0xFAD3, 0x661E}, //7483 #CJK UNIFIED IDEOGRAPH + {0xFAD4, 0x6624}, //7484 #CJK UNIFIED IDEOGRAPH + {0xFAD5, 0x6665}, //7485 #CJK UNIFIED IDEOGRAPH + {0xFAD6, 0x6657}, //7486 #CJK UNIFIED IDEOGRAPH + {0xFAD7, 0x6659}, //7487 #CJK UNIFIED IDEOGRAPH + {0xFAD8, 0xFA12}, //7488 #CJK COMPATIBILITY IDEOGRAPH + {0xFAD9, 0x6673}, //7489 #CJK UNIFIED IDEOGRAPH + {0xFADA, 0x6699}, //7490 #CJK UNIFIED IDEOGRAPH + {0xFADB, 0x66A0}, //7491 #CJK UNIFIED IDEOGRAPH + {0xFADC, 0x66B2}, //7492 #CJK UNIFIED IDEOGRAPH + {0xFADD, 0x66BF}, //7493 #CJK UNIFIED IDEOGRAPH + {0xFADE, 0x66FA}, //7494 #CJK UNIFIED IDEOGRAPH + {0xFADF, 0x670E}, //7495 #CJK UNIFIED IDEOGRAPH + {0xFAE0, 0xF929}, //7496 #CJK COMPATIBILITY IDEOGRAPH + {0xFAE1, 0x6766}, //7497 #CJK UNIFIED IDEOGRAPH + {0xFAE2, 0x67BB}, //7498 #CJK UNIFIED IDEOGRAPH + {0xFAE3, 0x6852}, //7499 #CJK UNIFIED IDEOGRAPH + {0xFAE4, 0x67C0}, //7500 #CJK UNIFIED IDEOGRAPH + {0xFAE5, 0x6801}, //7501 #CJK UNIFIED IDEOGRAPH + {0xFAE6, 0x6844}, //7502 #CJK UNIFIED IDEOGRAPH + {0xFAE7, 0x68CF}, //7503 #CJK UNIFIED IDEOGRAPH + {0xFAE8, 0xFA13}, //7504 #CJK COMPATIBILITY IDEOGRAPH + {0xFAE9, 0x6968}, //7505 #CJK UNIFIED IDEOGRAPH + {0xFAEA, 0xFA14}, //7506 #CJK COMPATIBILITY IDEOGRAPH + {0xFAEB, 0x6998}, //7507 #CJK UNIFIED IDEOGRAPH + {0xFAEC, 0x69E2}, //7508 #CJK UNIFIED IDEOGRAPH + {0xFAED, 0x6A30}, //7509 #CJK UNIFIED IDEOGRAPH + {0xFAEE, 0x6A6B}, //7510 #CJK UNIFIED IDEOGRAPH + {0xFAEF, 0x6A46}, //7511 #CJK UNIFIED IDEOGRAPH + {0xFAF0, 0x6A73}, //7512 #CJK UNIFIED IDEOGRAPH + {0xFAF1, 0x6A7E}, //7513 #CJK UNIFIED IDEOGRAPH + {0xFAF2, 0x6AE2}, //7514 #CJK UNIFIED IDEOGRAPH + {0xFAF3, 0x6AE4}, //7515 #CJK UNIFIED IDEOGRAPH + {0xFAF4, 0x6BD6}, //7516 #CJK UNIFIED IDEOGRAPH + {0xFAF5, 0x6C3F}, //7517 #CJK UNIFIED IDEOGRAPH + {0xFAF6, 0x6C5C}, //7518 #CJK UNIFIED IDEOGRAPH + {0xFAF7, 0x6C86}, //7519 #CJK UNIFIED IDEOGRAPH + {0xFAF8, 0x6C6F}, //7520 #CJK UNIFIED IDEOGRAPH + {0xFAF9, 0x6CDA}, //7521 #CJK UNIFIED IDEOGRAPH + {0xFAFA, 0x6D04}, //7522 #CJK UNIFIED IDEOGRAPH + {0xFAFB, 0x6D87}, //7523 #CJK UNIFIED IDEOGRAPH + {0xFAFC, 0x6D6F}, //7524 #CJK UNIFIED IDEOGRAPH + {0xFB40, 0x6D96}, //7525 #CJK UNIFIED IDEOGRAPH + {0xFB41, 0x6DAC}, //7526 #CJK UNIFIED IDEOGRAPH + {0xFB42, 0x6DCF}, //7527 #CJK UNIFIED IDEOGRAPH + {0xFB43, 0x6DF8}, //7528 #CJK UNIFIED IDEOGRAPH + {0xFB44, 0x6DF2}, //7529 #CJK UNIFIED IDEOGRAPH + {0xFB45, 0x6DFC}, //7530 #CJK UNIFIED IDEOGRAPH + {0xFB46, 0x6E39}, //7531 #CJK UNIFIED IDEOGRAPH + {0xFB47, 0x6E5C}, //7532 #CJK UNIFIED IDEOGRAPH + {0xFB48, 0x6E27}, //7533 #CJK UNIFIED IDEOGRAPH + {0xFB49, 0x6E3C}, //7534 #CJK UNIFIED IDEOGRAPH + {0xFB4A, 0x6EBF}, //7535 #CJK UNIFIED IDEOGRAPH + {0xFB4B, 0x6F88}, //7536 #CJK UNIFIED IDEOGRAPH + {0xFB4C, 0x6FB5}, //7537 #CJK UNIFIED IDEOGRAPH + {0xFB4D, 0x6FF5}, //7538 #CJK UNIFIED IDEOGRAPH + {0xFB4E, 0x7005}, //7539 #CJK UNIFIED IDEOGRAPH + {0xFB4F, 0x7007}, //7540 #CJK UNIFIED IDEOGRAPH + {0xFB50, 0x7028}, //7541 #CJK UNIFIED IDEOGRAPH + {0xFB51, 0x7085}, //7542 #CJK UNIFIED IDEOGRAPH + {0xFB52, 0x70AB}, //7543 #CJK UNIFIED IDEOGRAPH + {0xFB53, 0x710F}, //7544 #CJK UNIFIED IDEOGRAPH + {0xFB54, 0x7104}, //7545 #CJK UNIFIED IDEOGRAPH + {0xFB55, 0x715C}, //7546 #CJK UNIFIED IDEOGRAPH + {0xFB56, 0x7146}, //7547 #CJK UNIFIED IDEOGRAPH + {0xFB57, 0x7147}, //7548 #CJK UNIFIED IDEOGRAPH + {0xFB58, 0xFA15}, //7549 #CJK COMPATIBILITY IDEOGRAPH + {0xFB59, 0x71C1}, //7550 #CJK UNIFIED IDEOGRAPH + {0xFB5A, 0x71FE}, //7551 #CJK UNIFIED IDEOGRAPH + {0xFB5B, 0x72B1}, //7552 #CJK UNIFIED IDEOGRAPH + {0xFB5C, 0x72BE}, //7553 #CJK UNIFIED IDEOGRAPH + {0xFB5D, 0x7324}, //7554 #CJK UNIFIED IDEOGRAPH + {0xFB5E, 0xFA16}, //7555 #CJK COMPATIBILITY IDEOGRAPH + {0xFB5F, 0x7377}, //7556 #CJK UNIFIED IDEOGRAPH + {0xFB60, 0x73BD}, //7557 #CJK UNIFIED IDEOGRAPH + {0xFB61, 0x73C9}, //7558 #CJK UNIFIED IDEOGRAPH + {0xFB62, 0x73D6}, //7559 #CJK UNIFIED IDEOGRAPH + {0xFB63, 0x73E3}, //7560 #CJK UNIFIED IDEOGRAPH + {0xFB64, 0x73D2}, //7561 #CJK UNIFIED IDEOGRAPH + {0xFB65, 0x7407}, //7562 #CJK UNIFIED IDEOGRAPH + {0xFB66, 0x73F5}, //7563 #CJK UNIFIED IDEOGRAPH + {0xFB67, 0x7426}, //7564 #CJK UNIFIED IDEOGRAPH + {0xFB68, 0x742A}, //7565 #CJK UNIFIED IDEOGRAPH + {0xFB69, 0x7429}, //7566 #CJK UNIFIED IDEOGRAPH + {0xFB6A, 0x742E}, //7567 #CJK UNIFIED IDEOGRAPH + {0xFB6B, 0x7462}, //7568 #CJK UNIFIED IDEOGRAPH + {0xFB6C, 0x7489}, //7569 #CJK UNIFIED IDEOGRAPH + {0xFB6D, 0x749F}, //7570 #CJK UNIFIED IDEOGRAPH + {0xFB6E, 0x7501}, //7571 #CJK UNIFIED IDEOGRAPH + {0xFB6F, 0x756F}, //7572 #CJK UNIFIED IDEOGRAPH + {0xFB70, 0x7682}, //7573 #CJK UNIFIED IDEOGRAPH + {0xFB71, 0x769C}, //7574 #CJK UNIFIED IDEOGRAPH + {0xFB72, 0x769E}, //7575 #CJK UNIFIED IDEOGRAPH + {0xFB73, 0x769B}, //7576 #CJK UNIFIED IDEOGRAPH + {0xFB74, 0x76A6}, //7577 #CJK UNIFIED IDEOGRAPH + {0xFB75, 0xFA17}, //7578 #CJK COMPATIBILITY IDEOGRAPH + {0xFB76, 0x7746}, //7579 #CJK UNIFIED IDEOGRAPH + {0xFB77, 0x52AF}, //7580 #CJK UNIFIED IDEOGRAPH + {0xFB78, 0x7821}, //7581 #CJK UNIFIED IDEOGRAPH + {0xFB79, 0x784E}, //7582 #CJK UNIFIED IDEOGRAPH + {0xFB7A, 0x7864}, //7583 #CJK UNIFIED IDEOGRAPH + {0xFB7B, 0x787A}, //7584 #CJK UNIFIED IDEOGRAPH + {0xFB7C, 0x7930}, //7585 #CJK UNIFIED IDEOGRAPH + {0xFB7D, 0xFA18}, //7586 #CJK COMPATIBILITY IDEOGRAPH + {0xFB7E, 0xFA19}, //7587 #CJK COMPATIBILITY IDEOGRAPH + {0xFB80, 0xFA1A}, //7588 #CJK COMPATIBILITY IDEOGRAPH + {0xFB81, 0x7994}, //7589 #CJK UNIFIED IDEOGRAPH + {0xFB82, 0xFA1B}, //7590 #CJK COMPATIBILITY IDEOGRAPH + {0xFB83, 0x799B}, //7591 #CJK UNIFIED IDEOGRAPH + {0xFB84, 0x7AD1}, //7592 #CJK UNIFIED IDEOGRAPH + {0xFB85, 0x7AE7}, //7593 #CJK UNIFIED IDEOGRAPH + {0xFB86, 0xFA1C}, //7594 #CJK COMPATIBILITY IDEOGRAPH + {0xFB87, 0x7AEB}, //7595 #CJK UNIFIED IDEOGRAPH + {0xFB88, 0x7B9E}, //7596 #CJK UNIFIED IDEOGRAPH + {0xFB89, 0xFA1D}, //7597 #CJK COMPATIBILITY IDEOGRAPH + {0xFB8A, 0x7D48}, //7598 #CJK UNIFIED IDEOGRAPH + {0xFB8B, 0x7D5C}, //7599 #CJK UNIFIED IDEOGRAPH + {0xFB8C, 0x7DB7}, //7600 #CJK UNIFIED IDEOGRAPH + {0xFB8D, 0x7DA0}, //7601 #CJK UNIFIED IDEOGRAPH + {0xFB8E, 0x7DD6}, //7602 #CJK UNIFIED IDEOGRAPH + {0xFB8F, 0x7E52}, //7603 #CJK UNIFIED IDEOGRAPH + {0xFB90, 0x7F47}, //7604 #CJK UNIFIED IDEOGRAPH + {0xFB91, 0x7FA1}, //7605 #CJK UNIFIED IDEOGRAPH + {0xFB92, 0xFA1E}, //7606 #CJK COMPATIBILITY IDEOGRAPH + {0xFB93, 0x8301}, //7607 #CJK UNIFIED IDEOGRAPH + {0xFB94, 0x8362}, //7608 #CJK UNIFIED IDEOGRAPH + {0xFB95, 0x837F}, //7609 #CJK UNIFIED IDEOGRAPH + {0xFB96, 0x83C7}, //7610 #CJK UNIFIED IDEOGRAPH + {0xFB97, 0x83F6}, //7611 #CJK UNIFIED IDEOGRAPH + {0xFB98, 0x8448}, //7612 #CJK UNIFIED IDEOGRAPH + {0xFB99, 0x84B4}, //7613 #CJK UNIFIED IDEOGRAPH + {0xFB9A, 0x8553}, //7614 #CJK UNIFIED IDEOGRAPH + {0xFB9B, 0x8559}, //7615 #CJK UNIFIED IDEOGRAPH + {0xFB9C, 0x856B}, //7616 #CJK UNIFIED IDEOGRAPH + {0xFB9D, 0xFA1F}, //7617 #CJK COMPATIBILITY IDEOGRAPH + {0xFB9E, 0x85B0}, //7618 #CJK UNIFIED IDEOGRAPH + {0xFB9F, 0xFA20}, //7619 #CJK COMPATIBILITY IDEOGRAPH + {0xFBA0, 0xFA21}, //7620 #CJK COMPATIBILITY IDEOGRAPH + {0xFBA1, 0x8807}, //7621 #CJK UNIFIED IDEOGRAPH + {0xFBA2, 0x88F5}, //7622 #CJK UNIFIED IDEOGRAPH + {0xFBA3, 0x8A12}, //7623 #CJK UNIFIED IDEOGRAPH + {0xFBA4, 0x8A37}, //7624 #CJK UNIFIED IDEOGRAPH + {0xFBA5, 0x8A79}, //7625 #CJK UNIFIED IDEOGRAPH + {0xFBA6, 0x8AA7}, //7626 #CJK UNIFIED IDEOGRAPH + {0xFBA7, 0x8ABE}, //7627 #CJK UNIFIED IDEOGRAPH + {0xFBA8, 0x8ADF}, //7628 #CJK UNIFIED IDEOGRAPH + {0xFBA9, 0xFA22}, //7629 #CJK COMPATIBILITY IDEOGRAPH + {0xFBAA, 0x8AF6}, //7630 #CJK UNIFIED IDEOGRAPH + {0xFBAB, 0x8B53}, //7631 #CJK UNIFIED IDEOGRAPH + {0xFBAC, 0x8B7F}, //7632 #CJK UNIFIED IDEOGRAPH + {0xFBAD, 0x8CF0}, //7633 #CJK UNIFIED IDEOGRAPH + {0xFBAE, 0x8CF4}, //7634 #CJK UNIFIED IDEOGRAPH + {0xFBAF, 0x8D12}, //7635 #CJK UNIFIED IDEOGRAPH + {0xFBB0, 0x8D76}, //7636 #CJK UNIFIED IDEOGRAPH + {0xFBB1, 0xFA23}, //7637 #CJK COMPATIBILITY IDEOGRAPH + {0xFBB2, 0x8ECF}, //7638 #CJK UNIFIED IDEOGRAPH + {0xFBB3, 0xFA24}, //7639 #CJK COMPATIBILITY IDEOGRAPH + {0xFBB4, 0xFA25}, //7640 #CJK COMPATIBILITY IDEOGRAPH + {0xFBB5, 0x9067}, //7641 #CJK UNIFIED IDEOGRAPH + {0xFBB6, 0x90DE}, //7642 #CJK UNIFIED IDEOGRAPH + {0xFBB7, 0xFA26}, //7643 #CJK COMPATIBILITY IDEOGRAPH + {0xFBB8, 0x9115}, //7644 #CJK UNIFIED IDEOGRAPH + {0xFBB9, 0x9127}, //7645 #CJK UNIFIED IDEOGRAPH + {0xFBBA, 0x91DA}, //7646 #CJK UNIFIED IDEOGRAPH + {0xFBBB, 0x91D7}, //7647 #CJK UNIFIED IDEOGRAPH + {0xFBBC, 0x91DE}, //7648 #CJK UNIFIED IDEOGRAPH + {0xFBBD, 0x91ED}, //7649 #CJK UNIFIED IDEOGRAPH + {0xFBBE, 0x91EE}, //7650 #CJK UNIFIED IDEOGRAPH + {0xFBBF, 0x91E4}, //7651 #CJK UNIFIED IDEOGRAPH + {0xFBC0, 0x91E5}, //7652 #CJK UNIFIED IDEOGRAPH + {0xFBC1, 0x9206}, //7653 #CJK UNIFIED IDEOGRAPH + {0xFBC2, 0x9210}, //7654 #CJK UNIFIED IDEOGRAPH + {0xFBC3, 0x920A}, //7655 #CJK UNIFIED IDEOGRAPH + {0xFBC4, 0x923A}, //7656 #CJK UNIFIED IDEOGRAPH + {0xFBC5, 0x9240}, //7657 #CJK UNIFIED IDEOGRAPH + {0xFBC6, 0x923C}, //7658 #CJK UNIFIED IDEOGRAPH + {0xFBC7, 0x924E}, //7659 #CJK UNIFIED IDEOGRAPH + {0xFBC8, 0x9259}, //7660 #CJK UNIFIED IDEOGRAPH + {0xFBC9, 0x9251}, //7661 #CJK UNIFIED IDEOGRAPH + {0xFBCA, 0x9239}, //7662 #CJK UNIFIED IDEOGRAPH + {0xFBCB, 0x9267}, //7663 #CJK UNIFIED IDEOGRAPH + {0xFBCC, 0x92A7}, //7664 #CJK UNIFIED IDEOGRAPH + {0xFBCD, 0x9277}, //7665 #CJK UNIFIED IDEOGRAPH + {0xFBCE, 0x9278}, //7666 #CJK UNIFIED IDEOGRAPH + {0xFBCF, 0x92E7}, //7667 #CJK UNIFIED IDEOGRAPH + {0xFBD0, 0x92D7}, //7668 #CJK UNIFIED IDEOGRAPH + {0xFBD1, 0x92D9}, //7669 #CJK UNIFIED IDEOGRAPH + {0xFBD2, 0x92D0}, //7670 #CJK UNIFIED IDEOGRAPH + {0xFBD3, 0xFA27}, //7671 #CJK COMPATIBILITY IDEOGRAPH + {0xFBD4, 0x92D5}, //7672 #CJK UNIFIED IDEOGRAPH + {0xFBD5, 0x92E0}, //7673 #CJK UNIFIED IDEOGRAPH + {0xFBD6, 0x92D3}, //7674 #CJK UNIFIED IDEOGRAPH + {0xFBD7, 0x9325}, //7675 #CJK UNIFIED IDEOGRAPH + {0xFBD8, 0x9321}, //7676 #CJK UNIFIED IDEOGRAPH + {0xFBD9, 0x92FB}, //7677 #CJK UNIFIED IDEOGRAPH + {0xFBDA, 0xFA28}, //7678 #CJK COMPATIBILITY IDEOGRAPH + {0xFBDB, 0x931E}, //7679 #CJK UNIFIED IDEOGRAPH + {0xFBDC, 0x92FF}, //7680 #CJK UNIFIED IDEOGRAPH + {0xFBDD, 0x931D}, //7681 #CJK UNIFIED IDEOGRAPH + {0xFBDE, 0x9302}, //7682 #CJK UNIFIED IDEOGRAPH + {0xFBDF, 0x9370}, //7683 #CJK UNIFIED IDEOGRAPH + {0xFBE0, 0x9357}, //7684 #CJK UNIFIED IDEOGRAPH + {0xFBE1, 0x93A4}, //7685 #CJK UNIFIED IDEOGRAPH + {0xFBE2, 0x93C6}, //7686 #CJK UNIFIED IDEOGRAPH + {0xFBE3, 0x93DE}, //7687 #CJK UNIFIED IDEOGRAPH + {0xFBE4, 0x93F8}, //7688 #CJK UNIFIED IDEOGRAPH + {0xFBE5, 0x9431}, //7689 #CJK UNIFIED IDEOGRAPH + {0xFBE6, 0x9445}, //7690 #CJK UNIFIED IDEOGRAPH + {0xFBE7, 0x9448}, //7691 #CJK UNIFIED IDEOGRAPH + {0xFBE8, 0x9592}, //7692 #CJK UNIFIED IDEOGRAPH + {0xFBE9, 0xF9DC}, //7693 #CJK COMPATIBILITY IDEOGRAPH + {0xFBEA, 0xFA29}, //7694 #CJK COMPATIBILITY IDEOGRAPH + {0xFBEB, 0x969D}, //7695 #CJK UNIFIED IDEOGRAPH + {0xFBEC, 0x96AF}, //7696 #CJK UNIFIED IDEOGRAPH + {0xFBED, 0x9733}, //7697 #CJK UNIFIED IDEOGRAPH + {0xFBEE, 0x973B}, //7698 #CJK UNIFIED IDEOGRAPH + {0xFBEF, 0x9743}, //7699 #CJK UNIFIED IDEOGRAPH + {0xFBF0, 0x974D}, //7700 #CJK UNIFIED IDEOGRAPH + {0xFBF1, 0x974F}, //7701 #CJK UNIFIED IDEOGRAPH + {0xFBF2, 0x9751}, //7702 #CJK UNIFIED IDEOGRAPH + {0xFBF3, 0x9755}, //7703 #CJK UNIFIED IDEOGRAPH + {0xFBF4, 0x9857}, //7704 #CJK UNIFIED IDEOGRAPH + {0xFBF5, 0x9865}, //7705 #CJK UNIFIED IDEOGRAPH + {0xFBF6, 0xFA2A}, //7706 #CJK COMPATIBILITY IDEOGRAPH + {0xFBF7, 0xFA2B}, //7707 #CJK COMPATIBILITY IDEOGRAPH + {0xFBF8, 0x9927}, //7708 #CJK UNIFIED IDEOGRAPH + {0xFBF9, 0xFA2C}, //7709 #CJK COMPATIBILITY IDEOGRAPH + {0xFBFA, 0x999E}, //7710 #CJK UNIFIED IDEOGRAPH + {0xFBFB, 0x9A4E}, //7711 #CJK UNIFIED IDEOGRAPH + {0xFBFC, 0x9AD9}, //7712 #CJK UNIFIED IDEOGRAPH + {0xFC40, 0x9ADC}, //7713 #CJK UNIFIED IDEOGRAPH + {0xFC41, 0x9B75}, //7714 #CJK UNIFIED IDEOGRAPH + {0xFC42, 0x9B72}, //7715 #CJK UNIFIED IDEOGRAPH + {0xFC43, 0x9B8F}, //7716 #CJK UNIFIED IDEOGRAPH + {0xFC44, 0x9BB1}, //7717 #CJK UNIFIED IDEOGRAPH + {0xFC45, 0x9BBB}, //7718 #CJK UNIFIED IDEOGRAPH + {0xFC46, 0x9C00}, //7719 #CJK UNIFIED IDEOGRAPH + {0xFC47, 0x9D70}, //7720 #CJK UNIFIED IDEOGRAPH + {0xFC48, 0x9D6B}, //7721 #CJK UNIFIED IDEOGRAPH + {0xFC49, 0xFA2D}, //7722 #CJK COMPATIBILITY IDEOGRAPH + {0xFC4A, 0x9E19}, //7723 #CJK UNIFIED IDEOGRAPH + {0xFC4B, 0x9ED1} //7724 #CJK UNIFIED IDEOGRAPH +}; +#endif // DRW_CPTABLE932_H diff --git a/extlib/libdxfrw/intern/drw_cptable936.h b/extlib/libdxfrw/intern/drw_cptable936.h new file mode 100644 index 0000000..4c1c141 --- /dev/null +++ b/extlib/libdxfrw/intern/drw_cptable936.h @@ -0,0 +1,21943 @@ +#ifndef DRW_CPTABLE936_H +#define DRW_CPTABLE936_H + +//Chinese PRC GBK (XGB) + +//first entry in this tables are 0x80 +#define CPOFFSET936 0x80 +#define CPLENGHT936 21791 +#define NOTFOUND936 0x003F + +//Table 949 one byte +static const int DRW_Table936[] = { + 0x20AC //1 #EURO SIGN 0x80 +// 0xF8F5 //2 #EURO SIGN 0x80 +}; + +//Table 936 +static const int DRW_LeadTable936[] = { + 0, //1#DBCS LEAD BYTE 0x81 + 190, //2#DBCS LEAD BYTE 0x82 + 380, //3#DBCS LEAD BYTE 0x83 + 570, //4#DBCS LEAD BYTE 0x84 + 760, //5#DBCS LEAD BYTE 0x85 + 950, //6#DBCS LEAD BYTE 0x86 + 1140, //7#DBCS LEAD BYTE 0x87 + 1330, //8#DBCS LEAD BYTE 0x88 + 1520, //9#DBCS LEAD BYTE 0x89 + 1710, //10#DBCS LEAD BYTE 0x8A + 1900, //11#DBCS LEAD BYTE 0x8B + 2090, //12#DBCS LEAD BYTE 0x8C + 2280, //13#DBCS LEAD BYTE 0x8D + 2470, //14#DBCS LEAD BYTE 0x8E + 2660, //15#DBCS LEAD BYTE 0x8F + 2850, //16#DBCS LEAD BYTE 0x90 + 3040, //17#DBCS LEAD BYTE 0x91 + 3230, //18#DBCS LEAD BYTE 0x92 + 3420, //19#DBCS LEAD BYTE 0x93 + 3610, //20#DBCS LEAD BYTE 0x94 + 3800, //21#DBCS LEAD BYTE 0x95 + 3990, //22#DBCS LEAD BYTE 0x96 + 4180, //23#DBCS LEAD BYTE 0x97 + 4370, //24#DBCS LEAD BYTE 0x98 + 4560, //25#DBCS LEAD BYTE 0x99 + 4750, //26#DBCS LEAD BYTE 0x9A + 4940, //27#DBCS LEAD BYTE 0x9B + 5130, //28#DBCS LEAD BYTE 0x9C + 5320, //29#DBCS LEAD BYTE 0x9D + 5510, //30#DBCS LEAD BYTE 0x9E + 5700, //31#DBCS LEAD BYTE 0x9F + 5906, //32#DBCS LEAD BYTE 0xA0 + 6080, //33#DBCS LEAD BYTE 0xA1 + 6174, //34#DBCS LEAD BYTE 0xA2 + 6256, //35#DBCS LEAD BYTE 0xA3 + 6350, //36#DBCS LEAD BYTE 0xA4 + 6433, //37#DBCS LEAD BYTE 0xA5 + 6519, //38#DBCS LEAD BYTE 0xA6 + 6586, //39#DBCS LEAD BYTE 0xA7 + 6652, //40#DBCS LEAD BYTE 0xA8 + 6804, //41#DBCS LEAD BYTE 0xA9 + 6948, //42#DBCS LEAD BYTE 0xAA + 7044, //43#DBCS LEAD BYTE 0xAB + 7140, //44#DBCS LEAD BYTE 0xAC + 7236, //45#DBCS LEAD BYTE 0xAD + 7332, //46#DBCS LEAD BYTE 0xAE + 7428, //47#DBCS LEAD BYTE 0xAF + 7524, //48#DBCS LEAD BYTE 0xB0 + 7714, //49#DBCS LEAD BYTE 0xB1 + 7904, //50#DBCS LEAD BYTE 0xB2 + 8094, //51#DBCS LEAD BYTE 0xB3 + 8284, //52#DBCS LEAD BYTE 0xB4 + 8474, //53#DBCS LEAD BYTE 0xB5 + 8664, //54#DBCS LEAD BYTE 0xB6 + 8854, //55#DBCS LEAD BYTE 0xB7 + 9044, //56#DBCS LEAD BYTE 0xB8 + 9224, //57#DBCS LEAD BYTE 0xB9 + 9424, //58#DBCS LEAD BYTE 0xBA + 9614, //59#DBCS LEAD BYTE 0xBB + 9804, //60#DBCS LEAD BYTE 0xBC + 9994, //61#DBCS LEAD BYTE 0xBD + 10184, //62#DBCS LEAD BYTE 0xBE + 10374, //63#DBCS LEAD BYTE 0xBF + 10564, //64#DBCS LEAD BYTE 0xC0 + 10754, //65#DBCS LEAD BYTE 0xC1 + 10944, //66#DBCS LEAD BYTE 0xC2 + 11134, //67#DBCS LEAD BYTE 0xC3 + 11324, //68#DBCS LEAD BYTE 0xC4 + 11514, //69#DBCS LEAD BYTE 0xC5 + 11704, //70#DBCS LEAD BYTE 0xC6 + 11894, //71#DBCS LEAD BYTE 0xC7 + 12084, //72#DBCS LEAD BYTE 0xC8 + 12274, //73#DBCS LEAD BYTE 0xC9 + 12464, //74#DBCS LEAD BYTE 0xCA + 12654, //75#DBCS LEAD BYTE 0xCB + 12844, //76#DBCS LEAD BYTE 0xCC + 13034, //77#DBCS LEAD BYTE 0xCD + 13224, //78#DBCS LEAD BYTE 0xCE + 13414, //79#DBCS LEAD BYTE 0xCF + 13604, //80#DBCS LEAD BYTE 0xD0 + 13794, //81#DBCS LEAD BYTE 0xD1 + 13984, //82#DBCS LEAD BYTE 0xD2 + 14174, //83#DBCS LEAD BYTE 0xD3 + 14364, //84#DBCS LEAD BYTE 0xD4 + 14554, //85#DBCS LEAD BYTE 0xD5 + 14744, //86#DBCS LEAD BYTE 0xD6 + 14934, //87#DBCS LEAD BYTE 0xD7 + 15119, //88#DBCS LEAD BYTE 0xD8 + 15309, //89#DBCS LEAD BYTE 0xD9 + 15499, //90#DBCS LEAD BYTE 0xDA + 15689, //91#DBCS LEAD BYTE 0xDB + 15879, //92#DBCS LEAD BYTE 0xDC + 16069, //93#DBCS LEAD BYTE 0xDD + 16259, //94#DBCS LEAD BYTE 0xDE + 16449, //95#DBCS LEAD BYTE 0xDF + 16639, //96#DBCS LEAD BYTE 0xE0 + 16829, //97#DBCS LEAD BYTE 0xE1 + 17019, //98#DBCS LEAD BYTE 0xE2 + 17209, //99#DBCS LEAD BYTE 0xE3 + 17399, //100#DBCS LEAD BYTE 0xE4 + 17589, //101#DBCS LEAD BYTE 0xE5 + 17779, //102#DBCS LEAD BYTE 0xE6 + 17969, //103#DBCS LEAD BYTE 0xE7 + 18159, //104#DBCS LEAD BYTE 0xE8 + 18349, //105#DBCS LEAD BYTE 0xE9 + 18539, //106#DBCS LEAD BYTE 0xEA + 18729, //107#DBCS LEAD BYTE 0xEB + 18919, //108#DBCS LEAD BYTE 0xEC + 19109, //109#DBCS LEAD BYTE 0xED + 19299, //110#DBCS LEAD BYTE 0xEE + 19489, //111#DBCS LEAD BYTE 0xEF + 19679, //112#DBCS LEAD BYTE 0xF0 + 19869, //113#DBCS LEAD BYTE 0xF1 + 20059, //114#DBCS LEAD BYTE 0xF2 + 20249, //115#DBCS LEAD BYTE 0xF3 + 20439, //116#DBCS LEAD BYTE 0xF4 + 20659, //117#DBCS LEAD BYTE 0xF5 + 20819, //118#DBCS LEAD BYTE 0xF6 + 21009, //119#DBCS LEAD BYTE 0xF7 + 21199, //120#DBCS LEAD BYTE 0xF8 + 21295, //121#DBCS LEAD BYTE 0xF9 + 21391, //122#DBCS LEAD BYTE 0xFA + 21487, //123#DBCS LEAD BYTE 0xFB + 21583, //124#DBCS LEAD BYTE 0xFC + 21679, //125#DBCS LEAD BYTE 0xFD + 21775, //126#DBCS LEAD BYTE 0xFE + 21791, //127#UNDEFINED 0xFF, END OF TABLE +}; + +//Table 936 tail byte +static const int DRW_DoubleTable936[][2] = { + {0x8140, 0x4E02}, //1 #CJK UNIFIED IDEOGRAPH + {0x8141, 0x4E04}, //2 #CJK UNIFIED IDEOGRAPH + {0x8142, 0x4E05}, //3 #CJK UNIFIED IDEOGRAPH + {0x8143, 0x4E06}, //4 #CJK UNIFIED IDEOGRAPH + {0x8144, 0x4E0F}, //5 #CJK UNIFIED IDEOGRAPH + {0x8145, 0x4E12}, //6 #CJK UNIFIED IDEOGRAPH + {0x8146, 0x4E17}, //7 #CJK UNIFIED IDEOGRAPH + {0x8147, 0x4E1F}, //8 #CJK UNIFIED IDEOGRAPH + {0x8148, 0x4E20}, //9 #CJK UNIFIED IDEOGRAPH + {0x8149, 0x4E21}, //10 #CJK UNIFIED IDEOGRAPH + {0x814A, 0x4E23}, //11 #CJK UNIFIED IDEOGRAPH + {0x814B, 0x4E26}, //12 #CJK UNIFIED IDEOGRAPH + {0x814C, 0x4E29}, //13 #CJK UNIFIED IDEOGRAPH + {0x814D, 0x4E2E}, //14 #CJK UNIFIED IDEOGRAPH + {0x814E, 0x4E2F}, //15 #CJK UNIFIED IDEOGRAPH + {0x814F, 0x4E31}, //16 #CJK UNIFIED IDEOGRAPH + {0x8150, 0x4E33}, //17 #CJK UNIFIED IDEOGRAPH + {0x8151, 0x4E35}, //18 #CJK UNIFIED IDEOGRAPH + {0x8152, 0x4E37}, //19 #CJK UNIFIED IDEOGRAPH + {0x8153, 0x4E3C}, //20 #CJK UNIFIED IDEOGRAPH + {0x8154, 0x4E40}, //21 #CJK UNIFIED IDEOGRAPH + {0x8155, 0x4E41}, //22 #CJK UNIFIED IDEOGRAPH + {0x8156, 0x4E42}, //23 #CJK UNIFIED IDEOGRAPH + {0x8157, 0x4E44}, //24 #CJK UNIFIED IDEOGRAPH + {0x8158, 0x4E46}, //25 #CJK UNIFIED IDEOGRAPH + {0x8159, 0x4E4A}, //26 #CJK UNIFIED IDEOGRAPH + {0x815A, 0x4E51}, //27 #CJK UNIFIED IDEOGRAPH + {0x815B, 0x4E55}, //28 #CJK UNIFIED IDEOGRAPH + {0x815C, 0x4E57}, //29 #CJK UNIFIED IDEOGRAPH + {0x815D, 0x4E5A}, //30 #CJK UNIFIED IDEOGRAPH + {0x815E, 0x4E5B}, //31 #CJK UNIFIED IDEOGRAPH + {0x815F, 0x4E62}, //32 #CJK UNIFIED IDEOGRAPH + {0x8160, 0x4E63}, //33 #CJK UNIFIED IDEOGRAPH + {0x8161, 0x4E64}, //34 #CJK UNIFIED IDEOGRAPH + {0x8162, 0x4E65}, //35 #CJK UNIFIED IDEOGRAPH + {0x8163, 0x4E67}, //36 #CJK UNIFIED IDEOGRAPH + {0x8164, 0x4E68}, //37 #CJK UNIFIED IDEOGRAPH + {0x8165, 0x4E6A}, //38 #CJK UNIFIED IDEOGRAPH + {0x8166, 0x4E6B}, //39 #CJK UNIFIED IDEOGRAPH + {0x8167, 0x4E6C}, //40 #CJK UNIFIED IDEOGRAPH + {0x8168, 0x4E6D}, //41 #CJK UNIFIED IDEOGRAPH + {0x8169, 0x4E6E}, //42 #CJK UNIFIED IDEOGRAPH + {0x816A, 0x4E6F}, //43 #CJK UNIFIED IDEOGRAPH + {0x816B, 0x4E72}, //44 #CJK UNIFIED IDEOGRAPH + {0x816C, 0x4E74}, //45 #CJK UNIFIED IDEOGRAPH + {0x816D, 0x4E75}, //46 #CJK UNIFIED IDEOGRAPH + {0x816E, 0x4E76}, //47 #CJK UNIFIED IDEOGRAPH + {0x816F, 0x4E77}, //48 #CJK UNIFIED IDEOGRAPH + {0x8170, 0x4E78}, //49 #CJK UNIFIED IDEOGRAPH + {0x8171, 0x4E79}, //50 #CJK UNIFIED IDEOGRAPH + {0x8172, 0x4E7A}, //51 #CJK UNIFIED IDEOGRAPH + {0x8173, 0x4E7B}, //52 #CJK UNIFIED IDEOGRAPH + {0x8174, 0x4E7C}, //53 #CJK UNIFIED IDEOGRAPH + {0x8175, 0x4E7D}, //54 #CJK UNIFIED IDEOGRAPH + {0x8176, 0x4E7F}, //55 #CJK UNIFIED IDEOGRAPH + {0x8177, 0x4E80}, //56 #CJK UNIFIED IDEOGRAPH + {0x8178, 0x4E81}, //57 #CJK UNIFIED IDEOGRAPH + {0x8179, 0x4E82}, //58 #CJK UNIFIED IDEOGRAPH + {0x817A, 0x4E83}, //59 #CJK UNIFIED IDEOGRAPH + {0x817B, 0x4E84}, //60 #CJK UNIFIED IDEOGRAPH + {0x817C, 0x4E85}, //61 #CJK UNIFIED IDEOGRAPH + {0x817D, 0x4E87}, //62 #CJK UNIFIED IDEOGRAPH + {0x817E, 0x4E8A}, //63 #CJK UNIFIED IDEOGRAPH + {0x8180, 0x4E90}, //64 #CJK UNIFIED IDEOGRAPH + {0x8181, 0x4E96}, //65 #CJK UNIFIED IDEOGRAPH + {0x8182, 0x4E97}, //66 #CJK UNIFIED IDEOGRAPH + {0x8183, 0x4E99}, //67 #CJK UNIFIED IDEOGRAPH + {0x8184, 0x4E9C}, //68 #CJK UNIFIED IDEOGRAPH + {0x8185, 0x4E9D}, //69 #CJK UNIFIED IDEOGRAPH + {0x8186, 0x4E9E}, //70 #CJK UNIFIED IDEOGRAPH + {0x8187, 0x4EA3}, //71 #CJK UNIFIED IDEOGRAPH + {0x8188, 0x4EAA}, //72 #CJK UNIFIED IDEOGRAPH + {0x8189, 0x4EAF}, //73 #CJK UNIFIED IDEOGRAPH + {0x818A, 0x4EB0}, //74 #CJK UNIFIED IDEOGRAPH + {0x818B, 0x4EB1}, //75 #CJK UNIFIED IDEOGRAPH + {0x818C, 0x4EB4}, //76 #CJK UNIFIED IDEOGRAPH + {0x818D, 0x4EB6}, //77 #CJK UNIFIED IDEOGRAPH + {0x818E, 0x4EB7}, //78 #CJK UNIFIED IDEOGRAPH + {0x818F, 0x4EB8}, //79 #CJK UNIFIED IDEOGRAPH + {0x8190, 0x4EB9}, //80 #CJK UNIFIED IDEOGRAPH + {0x8191, 0x4EBC}, //81 #CJK UNIFIED IDEOGRAPH + {0x8192, 0x4EBD}, //82 #CJK UNIFIED IDEOGRAPH + {0x8193, 0x4EBE}, //83 #CJK UNIFIED IDEOGRAPH + {0x8194, 0x4EC8}, //84 #CJK UNIFIED IDEOGRAPH + {0x8195, 0x4ECC}, //85 #CJK UNIFIED IDEOGRAPH + {0x8196, 0x4ECF}, //86 #CJK UNIFIED IDEOGRAPH + {0x8197, 0x4ED0}, //87 #CJK UNIFIED IDEOGRAPH + {0x8198, 0x4ED2}, //88 #CJK UNIFIED IDEOGRAPH + {0x8199, 0x4EDA}, //89 #CJK UNIFIED IDEOGRAPH + {0x819A, 0x4EDB}, //90 #CJK UNIFIED IDEOGRAPH + {0x819B, 0x4EDC}, //91 #CJK UNIFIED IDEOGRAPH + {0x819C, 0x4EE0}, //92 #CJK UNIFIED IDEOGRAPH + {0x819D, 0x4EE2}, //93 #CJK UNIFIED IDEOGRAPH + {0x819E, 0x4EE6}, //94 #CJK UNIFIED IDEOGRAPH + {0x819F, 0x4EE7}, //95 #CJK UNIFIED IDEOGRAPH + {0x81A0, 0x4EE9}, //96 #CJK UNIFIED IDEOGRAPH + {0x81A1, 0x4EED}, //97 #CJK UNIFIED IDEOGRAPH + {0x81A2, 0x4EEE}, //98 #CJK UNIFIED IDEOGRAPH + {0x81A3, 0x4EEF}, //99 #CJK UNIFIED IDEOGRAPH + {0x81A4, 0x4EF1}, //100 #CJK UNIFIED IDEOGRAPH + {0x81A5, 0x4EF4}, //101 #CJK UNIFIED IDEOGRAPH + {0x81A6, 0x4EF8}, //102 #CJK UNIFIED IDEOGRAPH + {0x81A7, 0x4EF9}, //103 #CJK UNIFIED IDEOGRAPH + {0x81A8, 0x4EFA}, //104 #CJK UNIFIED IDEOGRAPH + {0x81A9, 0x4EFC}, //105 #CJK UNIFIED IDEOGRAPH + {0x81AA, 0x4EFE}, //106 #CJK UNIFIED IDEOGRAPH + {0x81AB, 0x4F00}, //107 #CJK UNIFIED IDEOGRAPH + {0x81AC, 0x4F02}, //108 #CJK UNIFIED IDEOGRAPH + {0x81AD, 0x4F03}, //109 #CJK UNIFIED IDEOGRAPH + {0x81AE, 0x4F04}, //110 #CJK UNIFIED IDEOGRAPH + {0x81AF, 0x4F05}, //111 #CJK UNIFIED IDEOGRAPH + {0x81B0, 0x4F06}, //112 #CJK UNIFIED IDEOGRAPH + {0x81B1, 0x4F07}, //113 #CJK UNIFIED IDEOGRAPH + {0x81B2, 0x4F08}, //114 #CJK UNIFIED IDEOGRAPH + {0x81B3, 0x4F0B}, //115 #CJK UNIFIED IDEOGRAPH + {0x81B4, 0x4F0C}, //116 #CJK UNIFIED IDEOGRAPH + {0x81B5, 0x4F12}, //117 #CJK UNIFIED IDEOGRAPH + {0x81B6, 0x4F13}, //118 #CJK UNIFIED IDEOGRAPH + {0x81B7, 0x4F14}, //119 #CJK UNIFIED IDEOGRAPH + {0x81B8, 0x4F15}, //120 #CJK UNIFIED IDEOGRAPH + {0x81B9, 0x4F16}, //121 #CJK UNIFIED IDEOGRAPH + {0x81BA, 0x4F1C}, //122 #CJK UNIFIED IDEOGRAPH + {0x81BB, 0x4F1D}, //123 #CJK UNIFIED IDEOGRAPH + {0x81BC, 0x4F21}, //124 #CJK UNIFIED IDEOGRAPH + {0x81BD, 0x4F23}, //125 #CJK UNIFIED IDEOGRAPH + {0x81BE, 0x4F28}, //126 #CJK UNIFIED IDEOGRAPH + {0x81BF, 0x4F29}, //127 #CJK UNIFIED IDEOGRAPH + {0x81C0, 0x4F2C}, //128 #CJK UNIFIED IDEOGRAPH + {0x81C1, 0x4F2D}, //129 #CJK UNIFIED IDEOGRAPH + {0x81C2, 0x4F2E}, //130 #CJK UNIFIED IDEOGRAPH + {0x81C3, 0x4F31}, //131 #CJK UNIFIED IDEOGRAPH + {0x81C4, 0x4F33}, //132 #CJK UNIFIED IDEOGRAPH + {0x81C5, 0x4F35}, //133 #CJK UNIFIED IDEOGRAPH + {0x81C6, 0x4F37}, //134 #CJK UNIFIED IDEOGRAPH + {0x81C7, 0x4F39}, //135 #CJK UNIFIED IDEOGRAPH + {0x81C8, 0x4F3B}, //136 #CJK UNIFIED IDEOGRAPH + {0x81C9, 0x4F3E}, //137 #CJK UNIFIED IDEOGRAPH + {0x81CA, 0x4F3F}, //138 #CJK UNIFIED IDEOGRAPH + {0x81CB, 0x4F40}, //139 #CJK UNIFIED IDEOGRAPH + {0x81CC, 0x4F41}, //140 #CJK UNIFIED IDEOGRAPH + {0x81CD, 0x4F42}, //141 #CJK UNIFIED IDEOGRAPH + {0x81CE, 0x4F44}, //142 #CJK UNIFIED IDEOGRAPH + {0x81CF, 0x4F45}, //143 #CJK UNIFIED IDEOGRAPH + {0x81D0, 0x4F47}, //144 #CJK UNIFIED IDEOGRAPH + {0x81D1, 0x4F48}, //145 #CJK UNIFIED IDEOGRAPH + {0x81D2, 0x4F49}, //146 #CJK UNIFIED IDEOGRAPH + {0x81D3, 0x4F4A}, //147 #CJK UNIFIED IDEOGRAPH + {0x81D4, 0x4F4B}, //148 #CJK UNIFIED IDEOGRAPH + {0x81D5, 0x4F4C}, //149 #CJK UNIFIED IDEOGRAPH + {0x81D6, 0x4F52}, //150 #CJK UNIFIED IDEOGRAPH + {0x81D7, 0x4F54}, //151 #CJK UNIFIED IDEOGRAPH + {0x81D8, 0x4F56}, //152 #CJK UNIFIED IDEOGRAPH + {0x81D9, 0x4F61}, //153 #CJK UNIFIED IDEOGRAPH + {0x81DA, 0x4F62}, //154 #CJK UNIFIED IDEOGRAPH + {0x81DB, 0x4F66}, //155 #CJK UNIFIED IDEOGRAPH + {0x81DC, 0x4F68}, //156 #CJK UNIFIED IDEOGRAPH + {0x81DD, 0x4F6A}, //157 #CJK UNIFIED IDEOGRAPH + {0x81DE, 0x4F6B}, //158 #CJK UNIFIED IDEOGRAPH + {0x81DF, 0x4F6D}, //159 #CJK UNIFIED IDEOGRAPH + {0x81E0, 0x4F6E}, //160 #CJK UNIFIED IDEOGRAPH + {0x81E1, 0x4F71}, //161 #CJK UNIFIED IDEOGRAPH + {0x81E2, 0x4F72}, //162 #CJK UNIFIED IDEOGRAPH + {0x81E3, 0x4F75}, //163 #CJK UNIFIED IDEOGRAPH + {0x81E4, 0x4F77}, //164 #CJK UNIFIED IDEOGRAPH + {0x81E5, 0x4F78}, //165 #CJK UNIFIED IDEOGRAPH + {0x81E6, 0x4F79}, //166 #CJK UNIFIED IDEOGRAPH + {0x81E7, 0x4F7A}, //167 #CJK UNIFIED IDEOGRAPH + {0x81E8, 0x4F7D}, //168 #CJK UNIFIED IDEOGRAPH + {0x81E9, 0x4F80}, //169 #CJK UNIFIED IDEOGRAPH + {0x81EA, 0x4F81}, //170 #CJK UNIFIED IDEOGRAPH + {0x81EB, 0x4F82}, //171 #CJK UNIFIED IDEOGRAPH + {0x81EC, 0x4F85}, //172 #CJK UNIFIED IDEOGRAPH + {0x81ED, 0x4F86}, //173 #CJK UNIFIED IDEOGRAPH + {0x81EE, 0x4F87}, //174 #CJK UNIFIED IDEOGRAPH + {0x81EF, 0x4F8A}, //175 #CJK UNIFIED IDEOGRAPH + {0x81F0, 0x4F8C}, //176 #CJK UNIFIED IDEOGRAPH + {0x81F1, 0x4F8E}, //177 #CJK UNIFIED IDEOGRAPH + {0x81F2, 0x4F90}, //178 #CJK UNIFIED IDEOGRAPH + {0x81F3, 0x4F92}, //179 #CJK UNIFIED IDEOGRAPH + {0x81F4, 0x4F93}, //180 #CJK UNIFIED IDEOGRAPH + {0x81F5, 0x4F95}, //181 #CJK UNIFIED IDEOGRAPH + {0x81F6, 0x4F96}, //182 #CJK UNIFIED IDEOGRAPH + {0x81F7, 0x4F98}, //183 #CJK UNIFIED IDEOGRAPH + {0x81F8, 0x4F99}, //184 #CJK UNIFIED IDEOGRAPH + {0x81F9, 0x4F9A}, //185 #CJK UNIFIED IDEOGRAPH + {0x81FA, 0x4F9C}, //186 #CJK UNIFIED IDEOGRAPH + {0x81FB, 0x4F9E}, //187 #CJK UNIFIED IDEOGRAPH + {0x81FC, 0x4F9F}, //188 #CJK UNIFIED IDEOGRAPH + {0x81FD, 0x4FA1}, //189 #CJK UNIFIED IDEOGRAPH + {0x81FE, 0x4FA2}, //190 #CJK UNIFIED IDEOGRAPH + {0x8240, 0x4FA4}, //191 #CJK UNIFIED IDEOGRAPH + {0x8241, 0x4FAB}, //192 #CJK UNIFIED IDEOGRAPH + {0x8242, 0x4FAD}, //193 #CJK UNIFIED IDEOGRAPH + {0x8243, 0x4FB0}, //194 #CJK UNIFIED IDEOGRAPH + {0x8244, 0x4FB1}, //195 #CJK UNIFIED IDEOGRAPH + {0x8245, 0x4FB2}, //196 #CJK UNIFIED IDEOGRAPH + {0x8246, 0x4FB3}, //197 #CJK UNIFIED IDEOGRAPH + {0x8247, 0x4FB4}, //198 #CJK UNIFIED IDEOGRAPH + {0x8248, 0x4FB6}, //199 #CJK UNIFIED IDEOGRAPH + {0x8249, 0x4FB7}, //200 #CJK UNIFIED IDEOGRAPH + {0x824A, 0x4FB8}, //201 #CJK UNIFIED IDEOGRAPH + {0x824B, 0x4FB9}, //202 #CJK UNIFIED IDEOGRAPH + {0x824C, 0x4FBA}, //203 #CJK UNIFIED IDEOGRAPH + {0x824D, 0x4FBB}, //204 #CJK UNIFIED IDEOGRAPH + {0x824E, 0x4FBC}, //205 #CJK UNIFIED IDEOGRAPH + {0x824F, 0x4FBD}, //206 #CJK UNIFIED IDEOGRAPH + {0x8250, 0x4FBE}, //207 #CJK UNIFIED IDEOGRAPH + {0x8251, 0x4FC0}, //208 #CJK UNIFIED IDEOGRAPH + {0x8252, 0x4FC1}, //209 #CJK UNIFIED IDEOGRAPH + {0x8253, 0x4FC2}, //210 #CJK UNIFIED IDEOGRAPH + {0x8254, 0x4FC6}, //211 #CJK UNIFIED IDEOGRAPH + {0x8255, 0x4FC7}, //212 #CJK UNIFIED IDEOGRAPH + {0x8256, 0x4FC8}, //213 #CJK UNIFIED IDEOGRAPH + {0x8257, 0x4FC9}, //214 #CJK UNIFIED IDEOGRAPH + {0x8258, 0x4FCB}, //215 #CJK UNIFIED IDEOGRAPH + {0x8259, 0x4FCC}, //216 #CJK UNIFIED IDEOGRAPH + {0x825A, 0x4FCD}, //217 #CJK UNIFIED IDEOGRAPH + {0x825B, 0x4FD2}, //218 #CJK UNIFIED IDEOGRAPH + {0x825C, 0x4FD3}, //219 #CJK UNIFIED IDEOGRAPH + {0x825D, 0x4FD4}, //220 #CJK UNIFIED IDEOGRAPH + {0x825E, 0x4FD5}, //221 #CJK UNIFIED IDEOGRAPH + {0x825F, 0x4FD6}, //222 #CJK UNIFIED IDEOGRAPH + {0x8260, 0x4FD9}, //223 #CJK UNIFIED IDEOGRAPH + {0x8261, 0x4FDB}, //224 #CJK UNIFIED IDEOGRAPH + {0x8262, 0x4FE0}, //225 #CJK UNIFIED IDEOGRAPH + {0x8263, 0x4FE2}, //226 #CJK UNIFIED IDEOGRAPH + {0x8264, 0x4FE4}, //227 #CJK UNIFIED IDEOGRAPH + {0x8265, 0x4FE5}, //228 #CJK UNIFIED IDEOGRAPH + {0x8266, 0x4FE7}, //229 #CJK UNIFIED IDEOGRAPH + {0x8267, 0x4FEB}, //230 #CJK UNIFIED IDEOGRAPH + {0x8268, 0x4FEC}, //231 #CJK UNIFIED IDEOGRAPH + {0x8269, 0x4FF0}, //232 #CJK UNIFIED IDEOGRAPH + {0x826A, 0x4FF2}, //233 #CJK UNIFIED IDEOGRAPH + {0x826B, 0x4FF4}, //234 #CJK UNIFIED IDEOGRAPH + {0x826C, 0x4FF5}, //235 #CJK UNIFIED IDEOGRAPH + {0x826D, 0x4FF6}, //236 #CJK UNIFIED IDEOGRAPH + {0x826E, 0x4FF7}, //237 #CJK UNIFIED IDEOGRAPH + {0x826F, 0x4FF9}, //238 #CJK UNIFIED IDEOGRAPH + {0x8270, 0x4FFB}, //239 #CJK UNIFIED IDEOGRAPH + {0x8271, 0x4FFC}, //240 #CJK UNIFIED IDEOGRAPH + {0x8272, 0x4FFD}, //241 #CJK UNIFIED IDEOGRAPH + {0x8273, 0x4FFF}, //242 #CJK UNIFIED IDEOGRAPH + {0x8274, 0x5000}, //243 #CJK UNIFIED IDEOGRAPH + {0x8275, 0x5001}, //244 #CJK UNIFIED IDEOGRAPH + {0x8276, 0x5002}, //245 #CJK UNIFIED IDEOGRAPH + {0x8277, 0x5003}, //246 #CJK UNIFIED IDEOGRAPH + {0x8278, 0x5004}, //247 #CJK UNIFIED IDEOGRAPH + {0x8279, 0x5005}, //248 #CJK UNIFIED IDEOGRAPH + {0x827A, 0x5006}, //249 #CJK UNIFIED IDEOGRAPH + {0x827B, 0x5007}, //250 #CJK UNIFIED IDEOGRAPH + {0x827C, 0x5008}, //251 #CJK UNIFIED IDEOGRAPH + {0x827D, 0x5009}, //252 #CJK UNIFIED IDEOGRAPH + {0x827E, 0x500A}, //253 #CJK UNIFIED IDEOGRAPH + {0x8280, 0x500B}, //254 #CJK UNIFIED IDEOGRAPH + {0x8281, 0x500E}, //255 #CJK UNIFIED IDEOGRAPH + {0x8282, 0x5010}, //256 #CJK UNIFIED IDEOGRAPH + {0x8283, 0x5011}, //257 #CJK UNIFIED IDEOGRAPH + {0x8284, 0x5013}, //258 #CJK UNIFIED IDEOGRAPH + {0x8285, 0x5015}, //259 #CJK UNIFIED IDEOGRAPH + {0x8286, 0x5016}, //260 #CJK UNIFIED IDEOGRAPH + {0x8287, 0x5017}, //261 #CJK UNIFIED IDEOGRAPH + {0x8288, 0x501B}, //262 #CJK UNIFIED IDEOGRAPH + {0x8289, 0x501D}, //263 #CJK UNIFIED IDEOGRAPH + {0x828A, 0x501E}, //264 #CJK UNIFIED IDEOGRAPH + {0x828B, 0x5020}, //265 #CJK UNIFIED IDEOGRAPH + {0x828C, 0x5022}, //266 #CJK UNIFIED IDEOGRAPH + {0x828D, 0x5023}, //267 #CJK UNIFIED IDEOGRAPH + {0x828E, 0x5024}, //268 #CJK UNIFIED IDEOGRAPH + {0x828F, 0x5027}, //269 #CJK UNIFIED IDEOGRAPH + {0x8290, 0x502B}, //270 #CJK UNIFIED IDEOGRAPH + {0x8291, 0x502F}, //271 #CJK UNIFIED IDEOGRAPH + {0x8292, 0x5030}, //272 #CJK UNIFIED IDEOGRAPH + {0x8293, 0x5031}, //273 #CJK UNIFIED IDEOGRAPH + {0x8294, 0x5032}, //274 #CJK UNIFIED IDEOGRAPH + {0x8295, 0x5033}, //275 #CJK UNIFIED IDEOGRAPH + {0x8296, 0x5034}, //276 #CJK UNIFIED IDEOGRAPH + {0x8297, 0x5035}, //277 #CJK UNIFIED IDEOGRAPH + {0x8298, 0x5036}, //278 #CJK UNIFIED IDEOGRAPH + {0x8299, 0x5037}, //279 #CJK UNIFIED IDEOGRAPH + {0x829A, 0x5038}, //280 #CJK UNIFIED IDEOGRAPH + {0x829B, 0x5039}, //281 #CJK UNIFIED IDEOGRAPH + {0x829C, 0x503B}, //282 #CJK UNIFIED IDEOGRAPH + {0x829D, 0x503D}, //283 #CJK UNIFIED IDEOGRAPH + {0x829E, 0x503F}, //284 #CJK UNIFIED IDEOGRAPH + {0x829F, 0x5040}, //285 #CJK UNIFIED IDEOGRAPH + {0x82A0, 0x5041}, //286 #CJK UNIFIED IDEOGRAPH + {0x82A1, 0x5042}, //287 #CJK UNIFIED IDEOGRAPH + {0x82A2, 0x5044}, //288 #CJK UNIFIED IDEOGRAPH + {0x82A3, 0x5045}, //289 #CJK UNIFIED IDEOGRAPH + {0x82A4, 0x5046}, //290 #CJK UNIFIED IDEOGRAPH + {0x82A5, 0x5049}, //291 #CJK UNIFIED IDEOGRAPH + {0x82A6, 0x504A}, //292 #CJK UNIFIED IDEOGRAPH + {0x82A7, 0x504B}, //293 #CJK UNIFIED IDEOGRAPH + {0x82A8, 0x504D}, //294 #CJK UNIFIED IDEOGRAPH + {0x82A9, 0x5050}, //295 #CJK UNIFIED IDEOGRAPH + {0x82AA, 0x5051}, //296 #CJK UNIFIED IDEOGRAPH + {0x82AB, 0x5052}, //297 #CJK UNIFIED IDEOGRAPH + {0x82AC, 0x5053}, //298 #CJK UNIFIED IDEOGRAPH + {0x82AD, 0x5054}, //299 #CJK UNIFIED IDEOGRAPH + {0x82AE, 0x5056}, //300 #CJK UNIFIED IDEOGRAPH + {0x82AF, 0x5057}, //301 #CJK UNIFIED IDEOGRAPH + {0x82B0, 0x5058}, //302 #CJK UNIFIED IDEOGRAPH + {0x82B1, 0x5059}, //303 #CJK UNIFIED IDEOGRAPH + {0x82B2, 0x505B}, //304 #CJK UNIFIED IDEOGRAPH + {0x82B3, 0x505D}, //305 #CJK UNIFIED IDEOGRAPH + {0x82B4, 0x505E}, //306 #CJK UNIFIED IDEOGRAPH + {0x82B5, 0x505F}, //307 #CJK UNIFIED IDEOGRAPH + {0x82B6, 0x5060}, //308 #CJK UNIFIED IDEOGRAPH + {0x82B7, 0x5061}, //309 #CJK UNIFIED IDEOGRAPH + {0x82B8, 0x5062}, //310 #CJK UNIFIED IDEOGRAPH + {0x82B9, 0x5063}, //311 #CJK UNIFIED IDEOGRAPH + {0x82BA, 0x5064}, //312 #CJK UNIFIED IDEOGRAPH + {0x82BB, 0x5066}, //313 #CJK UNIFIED IDEOGRAPH + {0x82BC, 0x5067}, //314 #CJK UNIFIED IDEOGRAPH + {0x82BD, 0x5068}, //315 #CJK UNIFIED IDEOGRAPH + {0x82BE, 0x5069}, //316 #CJK UNIFIED IDEOGRAPH + {0x82BF, 0x506A}, //317 #CJK UNIFIED IDEOGRAPH + {0x82C0, 0x506B}, //318 #CJK UNIFIED IDEOGRAPH + {0x82C1, 0x506D}, //319 #CJK UNIFIED IDEOGRAPH + {0x82C2, 0x506E}, //320 #CJK UNIFIED IDEOGRAPH + {0x82C3, 0x506F}, //321 #CJK UNIFIED IDEOGRAPH + {0x82C4, 0x5070}, //322 #CJK UNIFIED IDEOGRAPH + {0x82C5, 0x5071}, //323 #CJK UNIFIED IDEOGRAPH + {0x82C6, 0x5072}, //324 #CJK UNIFIED IDEOGRAPH + {0x82C7, 0x5073}, //325 #CJK UNIFIED IDEOGRAPH + {0x82C8, 0x5074}, //326 #CJK UNIFIED IDEOGRAPH + {0x82C9, 0x5075}, //327 #CJK UNIFIED IDEOGRAPH + {0x82CA, 0x5078}, //328 #CJK UNIFIED IDEOGRAPH + {0x82CB, 0x5079}, //329 #CJK UNIFIED IDEOGRAPH + {0x82CC, 0x507A}, //330 #CJK UNIFIED IDEOGRAPH + {0x82CD, 0x507C}, //331 #CJK UNIFIED IDEOGRAPH + {0x82CE, 0x507D}, //332 #CJK UNIFIED IDEOGRAPH + {0x82CF, 0x5081}, //333 #CJK UNIFIED IDEOGRAPH + {0x82D0, 0x5082}, //334 #CJK UNIFIED IDEOGRAPH + {0x82D1, 0x5083}, //335 #CJK UNIFIED IDEOGRAPH + {0x82D2, 0x5084}, //336 #CJK UNIFIED IDEOGRAPH + {0x82D3, 0x5086}, //337 #CJK UNIFIED IDEOGRAPH + {0x82D4, 0x5087}, //338 #CJK UNIFIED IDEOGRAPH + {0x82D5, 0x5089}, //339 #CJK UNIFIED IDEOGRAPH + {0x82D6, 0x508A}, //340 #CJK UNIFIED IDEOGRAPH + {0x82D7, 0x508B}, //341 #CJK UNIFIED IDEOGRAPH + {0x82D8, 0x508C}, //342 #CJK UNIFIED IDEOGRAPH + {0x82D9, 0x508E}, //343 #CJK UNIFIED IDEOGRAPH + {0x82DA, 0x508F}, //344 #CJK UNIFIED IDEOGRAPH + {0x82DB, 0x5090}, //345 #CJK UNIFIED IDEOGRAPH + {0x82DC, 0x5091}, //346 #CJK UNIFIED IDEOGRAPH + {0x82DD, 0x5092}, //347 #CJK UNIFIED IDEOGRAPH + {0x82DE, 0x5093}, //348 #CJK UNIFIED IDEOGRAPH + {0x82DF, 0x5094}, //349 #CJK UNIFIED IDEOGRAPH + {0x82E0, 0x5095}, //350 #CJK UNIFIED IDEOGRAPH + {0x82E1, 0x5096}, //351 #CJK UNIFIED IDEOGRAPH + {0x82E2, 0x5097}, //352 #CJK UNIFIED IDEOGRAPH + {0x82E3, 0x5098}, //353 #CJK UNIFIED IDEOGRAPH + {0x82E4, 0x5099}, //354 #CJK UNIFIED IDEOGRAPH + {0x82E5, 0x509A}, //355 #CJK UNIFIED IDEOGRAPH + {0x82E6, 0x509B}, //356 #CJK UNIFIED IDEOGRAPH + {0x82E7, 0x509C}, //357 #CJK UNIFIED IDEOGRAPH + {0x82E8, 0x509D}, //358 #CJK UNIFIED IDEOGRAPH + {0x82E9, 0x509E}, //359 #CJK UNIFIED IDEOGRAPH + {0x82EA, 0x509F}, //360 #CJK UNIFIED IDEOGRAPH + {0x82EB, 0x50A0}, //361 #CJK UNIFIED IDEOGRAPH + {0x82EC, 0x50A1}, //362 #CJK UNIFIED IDEOGRAPH + {0x82ED, 0x50A2}, //363 #CJK UNIFIED IDEOGRAPH + {0x82EE, 0x50A4}, //364 #CJK UNIFIED IDEOGRAPH + {0x82EF, 0x50A6}, //365 #CJK UNIFIED IDEOGRAPH + {0x82F0, 0x50AA}, //366 #CJK UNIFIED IDEOGRAPH + {0x82F1, 0x50AB}, //367 #CJK UNIFIED IDEOGRAPH + {0x82F2, 0x50AD}, //368 #CJK UNIFIED IDEOGRAPH + {0x82F3, 0x50AE}, //369 #CJK UNIFIED IDEOGRAPH + {0x82F4, 0x50AF}, //370 #CJK UNIFIED IDEOGRAPH + {0x82F5, 0x50B0}, //371 #CJK UNIFIED IDEOGRAPH + {0x82F6, 0x50B1}, //372 #CJK UNIFIED IDEOGRAPH + {0x82F7, 0x50B3}, //373 #CJK UNIFIED IDEOGRAPH + {0x82F8, 0x50B4}, //374 #CJK UNIFIED IDEOGRAPH + {0x82F9, 0x50B5}, //375 #CJK UNIFIED IDEOGRAPH + {0x82FA, 0x50B6}, //376 #CJK UNIFIED IDEOGRAPH + {0x82FB, 0x50B7}, //377 #CJK UNIFIED IDEOGRAPH + {0x82FC, 0x50B8}, //378 #CJK UNIFIED IDEOGRAPH + {0x82FD, 0x50B9}, //379 #CJK UNIFIED IDEOGRAPH + {0x82FE, 0x50BC}, //380 #CJK UNIFIED IDEOGRAPH + {0x8340, 0x50BD}, //381 #CJK UNIFIED IDEOGRAPH + {0x8341, 0x50BE}, //382 #CJK UNIFIED IDEOGRAPH + {0x8342, 0x50BF}, //383 #CJK UNIFIED IDEOGRAPH + {0x8343, 0x50C0}, //384 #CJK UNIFIED IDEOGRAPH + {0x8344, 0x50C1}, //385 #CJK UNIFIED IDEOGRAPH + {0x8345, 0x50C2}, //386 #CJK UNIFIED IDEOGRAPH + {0x8346, 0x50C3}, //387 #CJK UNIFIED IDEOGRAPH + {0x8347, 0x50C4}, //388 #CJK UNIFIED IDEOGRAPH + {0x8348, 0x50C5}, //389 #CJK UNIFIED IDEOGRAPH + {0x8349, 0x50C6}, //390 #CJK UNIFIED IDEOGRAPH + {0x834A, 0x50C7}, //391 #CJK UNIFIED IDEOGRAPH + {0x834B, 0x50C8}, //392 #CJK UNIFIED IDEOGRAPH + {0x834C, 0x50C9}, //393 #CJK UNIFIED IDEOGRAPH + {0x834D, 0x50CA}, //394 #CJK UNIFIED IDEOGRAPH + {0x834E, 0x50CB}, //395 #CJK UNIFIED IDEOGRAPH + {0x834F, 0x50CC}, //396 #CJK UNIFIED IDEOGRAPH + {0x8350, 0x50CD}, //397 #CJK UNIFIED IDEOGRAPH + {0x8351, 0x50CE}, //398 #CJK UNIFIED IDEOGRAPH + {0x8352, 0x50D0}, //399 #CJK UNIFIED IDEOGRAPH + {0x8353, 0x50D1}, //400 #CJK UNIFIED IDEOGRAPH + {0x8354, 0x50D2}, //401 #CJK UNIFIED IDEOGRAPH + {0x8355, 0x50D3}, //402 #CJK UNIFIED IDEOGRAPH + {0x8356, 0x50D4}, //403 #CJK UNIFIED IDEOGRAPH + {0x8357, 0x50D5}, //404 #CJK UNIFIED IDEOGRAPH + {0x8358, 0x50D7}, //405 #CJK UNIFIED IDEOGRAPH + {0x8359, 0x50D8}, //406 #CJK UNIFIED IDEOGRAPH + {0x835A, 0x50D9}, //407 #CJK UNIFIED IDEOGRAPH + {0x835B, 0x50DB}, //408 #CJK UNIFIED IDEOGRAPH + {0x835C, 0x50DC}, //409 #CJK UNIFIED IDEOGRAPH + {0x835D, 0x50DD}, //410 #CJK UNIFIED IDEOGRAPH + {0x835E, 0x50DE}, //411 #CJK UNIFIED IDEOGRAPH + {0x835F, 0x50DF}, //412 #CJK UNIFIED IDEOGRAPH + {0x8360, 0x50E0}, //413 #CJK UNIFIED IDEOGRAPH + {0x8361, 0x50E1}, //414 #CJK UNIFIED IDEOGRAPH + {0x8362, 0x50E2}, //415 #CJK UNIFIED IDEOGRAPH + {0x8363, 0x50E3}, //416 #CJK UNIFIED IDEOGRAPH + {0x8364, 0x50E4}, //417 #CJK UNIFIED IDEOGRAPH + {0x8365, 0x50E5}, //418 #CJK UNIFIED IDEOGRAPH + {0x8366, 0x50E8}, //419 #CJK UNIFIED IDEOGRAPH + {0x8367, 0x50E9}, //420 #CJK UNIFIED IDEOGRAPH + {0x8368, 0x50EA}, //421 #CJK UNIFIED IDEOGRAPH + {0x8369, 0x50EB}, //422 #CJK UNIFIED IDEOGRAPH + {0x836A, 0x50EF}, //423 #CJK UNIFIED IDEOGRAPH + {0x836B, 0x50F0}, //424 #CJK UNIFIED IDEOGRAPH + {0x836C, 0x50F1}, //425 #CJK UNIFIED IDEOGRAPH + {0x836D, 0x50F2}, //426 #CJK UNIFIED IDEOGRAPH + {0x836E, 0x50F4}, //427 #CJK UNIFIED IDEOGRAPH + {0x836F, 0x50F6}, //428 #CJK UNIFIED IDEOGRAPH + {0x8370, 0x50F7}, //429 #CJK UNIFIED IDEOGRAPH + {0x8371, 0x50F8}, //430 #CJK UNIFIED IDEOGRAPH + {0x8372, 0x50F9}, //431 #CJK UNIFIED IDEOGRAPH + {0x8373, 0x50FA}, //432 #CJK UNIFIED IDEOGRAPH + {0x8374, 0x50FC}, //433 #CJK UNIFIED IDEOGRAPH + {0x8375, 0x50FD}, //434 #CJK UNIFIED IDEOGRAPH + {0x8376, 0x50FE}, //435 #CJK UNIFIED IDEOGRAPH + {0x8377, 0x50FF}, //436 #CJK UNIFIED IDEOGRAPH + {0x8378, 0x5100}, //437 #CJK UNIFIED IDEOGRAPH + {0x8379, 0x5101}, //438 #CJK UNIFIED IDEOGRAPH + {0x837A, 0x5102}, //439 #CJK UNIFIED IDEOGRAPH + {0x837B, 0x5103}, //440 #CJK UNIFIED IDEOGRAPH + {0x837C, 0x5104}, //441 #CJK UNIFIED IDEOGRAPH + {0x837D, 0x5105}, //442 #CJK UNIFIED IDEOGRAPH + {0x837E, 0x5108}, //443 #CJK UNIFIED IDEOGRAPH + {0x8380, 0x5109}, //444 #CJK UNIFIED IDEOGRAPH + {0x8381, 0x510A}, //445 #CJK UNIFIED IDEOGRAPH + {0x8382, 0x510C}, //446 #CJK UNIFIED IDEOGRAPH + {0x8383, 0x510D}, //447 #CJK UNIFIED IDEOGRAPH + {0x8384, 0x510E}, //448 #CJK UNIFIED IDEOGRAPH + {0x8385, 0x510F}, //449 #CJK UNIFIED IDEOGRAPH + {0x8386, 0x5110}, //450 #CJK UNIFIED IDEOGRAPH + {0x8387, 0x5111}, //451 #CJK UNIFIED IDEOGRAPH + {0x8388, 0x5113}, //452 #CJK UNIFIED IDEOGRAPH + {0x8389, 0x5114}, //453 #CJK UNIFIED IDEOGRAPH + {0x838A, 0x5115}, //454 #CJK UNIFIED IDEOGRAPH + {0x838B, 0x5116}, //455 #CJK UNIFIED IDEOGRAPH + {0x838C, 0x5117}, //456 #CJK UNIFIED IDEOGRAPH + {0x838D, 0x5118}, //457 #CJK UNIFIED IDEOGRAPH + {0x838E, 0x5119}, //458 #CJK UNIFIED IDEOGRAPH + {0x838F, 0x511A}, //459 #CJK UNIFIED IDEOGRAPH + {0x8390, 0x511B}, //460 #CJK UNIFIED IDEOGRAPH + {0x8391, 0x511C}, //461 #CJK UNIFIED IDEOGRAPH + {0x8392, 0x511D}, //462 #CJK UNIFIED IDEOGRAPH + {0x8393, 0x511E}, //463 #CJK UNIFIED IDEOGRAPH + {0x8394, 0x511F}, //464 #CJK UNIFIED IDEOGRAPH + {0x8395, 0x5120}, //465 #CJK UNIFIED IDEOGRAPH + {0x8396, 0x5122}, //466 #CJK UNIFIED IDEOGRAPH + {0x8397, 0x5123}, //467 #CJK UNIFIED IDEOGRAPH + {0x8398, 0x5124}, //468 #CJK UNIFIED IDEOGRAPH + {0x8399, 0x5125}, //469 #CJK UNIFIED IDEOGRAPH + {0x839A, 0x5126}, //470 #CJK UNIFIED IDEOGRAPH + {0x839B, 0x5127}, //471 #CJK UNIFIED IDEOGRAPH + {0x839C, 0x5128}, //472 #CJK UNIFIED IDEOGRAPH + {0x839D, 0x5129}, //473 #CJK UNIFIED IDEOGRAPH + {0x839E, 0x512A}, //474 #CJK UNIFIED IDEOGRAPH + {0x839F, 0x512B}, //475 #CJK UNIFIED IDEOGRAPH + {0x83A0, 0x512C}, //476 #CJK UNIFIED IDEOGRAPH + {0x83A1, 0x512D}, //477 #CJK UNIFIED IDEOGRAPH + {0x83A2, 0x512E}, //478 #CJK UNIFIED IDEOGRAPH + {0x83A3, 0x512F}, //479 #CJK UNIFIED IDEOGRAPH + {0x83A4, 0x5130}, //480 #CJK UNIFIED IDEOGRAPH + {0x83A5, 0x5131}, //481 #CJK UNIFIED IDEOGRAPH + {0x83A6, 0x5132}, //482 #CJK UNIFIED IDEOGRAPH + {0x83A7, 0x5133}, //483 #CJK UNIFIED IDEOGRAPH + {0x83A8, 0x5134}, //484 #CJK UNIFIED IDEOGRAPH + {0x83A9, 0x5135}, //485 #CJK UNIFIED IDEOGRAPH + {0x83AA, 0x5136}, //486 #CJK UNIFIED IDEOGRAPH + {0x83AB, 0x5137}, //487 #CJK UNIFIED IDEOGRAPH + {0x83AC, 0x5138}, //488 #CJK UNIFIED IDEOGRAPH + {0x83AD, 0x5139}, //489 #CJK UNIFIED IDEOGRAPH + {0x83AE, 0x513A}, //490 #CJK UNIFIED IDEOGRAPH + {0x83AF, 0x513B}, //491 #CJK UNIFIED IDEOGRAPH + {0x83B0, 0x513C}, //492 #CJK UNIFIED IDEOGRAPH + {0x83B1, 0x513D}, //493 #CJK UNIFIED IDEOGRAPH + {0x83B2, 0x513E}, //494 #CJK UNIFIED IDEOGRAPH + {0x83B3, 0x5142}, //495 #CJK UNIFIED IDEOGRAPH + {0x83B4, 0x5147}, //496 #CJK UNIFIED IDEOGRAPH + {0x83B5, 0x514A}, //497 #CJK UNIFIED IDEOGRAPH + {0x83B6, 0x514C}, //498 #CJK UNIFIED IDEOGRAPH + {0x83B7, 0x514E}, //499 #CJK UNIFIED IDEOGRAPH + {0x83B8, 0x514F}, //500 #CJK UNIFIED IDEOGRAPH + {0x83B9, 0x5150}, //501 #CJK UNIFIED IDEOGRAPH + {0x83BA, 0x5152}, //502 #CJK UNIFIED IDEOGRAPH + {0x83BB, 0x5153}, //503 #CJK UNIFIED IDEOGRAPH + {0x83BC, 0x5157}, //504 #CJK UNIFIED IDEOGRAPH + {0x83BD, 0x5158}, //505 #CJK UNIFIED IDEOGRAPH + {0x83BE, 0x5159}, //506 #CJK UNIFIED IDEOGRAPH + {0x83BF, 0x515B}, //507 #CJK UNIFIED IDEOGRAPH + {0x83C0, 0x515D}, //508 #CJK UNIFIED IDEOGRAPH + {0x83C1, 0x515E}, //509 #CJK UNIFIED IDEOGRAPH + {0x83C2, 0x515F}, //510 #CJK UNIFIED IDEOGRAPH + {0x83C3, 0x5160}, //511 #CJK UNIFIED IDEOGRAPH + {0x83C4, 0x5161}, //512 #CJK UNIFIED IDEOGRAPH + {0x83C5, 0x5163}, //513 #CJK UNIFIED IDEOGRAPH + {0x83C6, 0x5164}, //514 #CJK UNIFIED IDEOGRAPH + {0x83C7, 0x5166}, //515 #CJK UNIFIED IDEOGRAPH + {0x83C8, 0x5167}, //516 #CJK UNIFIED IDEOGRAPH + {0x83C9, 0x5169}, //517 #CJK UNIFIED IDEOGRAPH + {0x83CA, 0x516A}, //518 #CJK UNIFIED IDEOGRAPH + {0x83CB, 0x516F}, //519 #CJK UNIFIED IDEOGRAPH + {0x83CC, 0x5172}, //520 #CJK UNIFIED IDEOGRAPH + {0x83CD, 0x517A}, //521 #CJK UNIFIED IDEOGRAPH + {0x83CE, 0x517E}, //522 #CJK UNIFIED IDEOGRAPH + {0x83CF, 0x517F}, //523 #CJK UNIFIED IDEOGRAPH + {0x83D0, 0x5183}, //524 #CJK UNIFIED IDEOGRAPH + {0x83D1, 0x5184}, //525 #CJK UNIFIED IDEOGRAPH + {0x83D2, 0x5186}, //526 #CJK UNIFIED IDEOGRAPH + {0x83D3, 0x5187}, //527 #CJK UNIFIED IDEOGRAPH + {0x83D4, 0x518A}, //528 #CJK UNIFIED IDEOGRAPH + {0x83D5, 0x518B}, //529 #CJK UNIFIED IDEOGRAPH + {0x83D6, 0x518E}, //530 #CJK UNIFIED IDEOGRAPH + {0x83D7, 0x518F}, //531 #CJK UNIFIED IDEOGRAPH + {0x83D8, 0x5190}, //532 #CJK UNIFIED IDEOGRAPH + {0x83D9, 0x5191}, //533 #CJK UNIFIED IDEOGRAPH + {0x83DA, 0x5193}, //534 #CJK UNIFIED IDEOGRAPH + {0x83DB, 0x5194}, //535 #CJK UNIFIED IDEOGRAPH + {0x83DC, 0x5198}, //536 #CJK UNIFIED IDEOGRAPH + {0x83DD, 0x519A}, //537 #CJK UNIFIED IDEOGRAPH + {0x83DE, 0x519D}, //538 #CJK UNIFIED IDEOGRAPH + {0x83DF, 0x519E}, //539 #CJK UNIFIED IDEOGRAPH + {0x83E0, 0x519F}, //540 #CJK UNIFIED IDEOGRAPH + {0x83E1, 0x51A1}, //541 #CJK UNIFIED IDEOGRAPH + {0x83E2, 0x51A3}, //542 #CJK UNIFIED IDEOGRAPH + {0x83E3, 0x51A6}, //543 #CJK UNIFIED IDEOGRAPH + {0x83E4, 0x51A7}, //544 #CJK UNIFIED IDEOGRAPH + {0x83E5, 0x51A8}, //545 #CJK UNIFIED IDEOGRAPH + {0x83E6, 0x51A9}, //546 #CJK UNIFIED IDEOGRAPH + {0x83E7, 0x51AA}, //547 #CJK UNIFIED IDEOGRAPH + {0x83E8, 0x51AD}, //548 #CJK UNIFIED IDEOGRAPH + {0x83E9, 0x51AE}, //549 #CJK UNIFIED IDEOGRAPH + {0x83EA, 0x51B4}, //550 #CJK UNIFIED IDEOGRAPH + {0x83EB, 0x51B8}, //551 #CJK UNIFIED IDEOGRAPH + {0x83EC, 0x51B9}, //552 #CJK UNIFIED IDEOGRAPH + {0x83ED, 0x51BA}, //553 #CJK UNIFIED IDEOGRAPH + {0x83EE, 0x51BE}, //554 #CJK UNIFIED IDEOGRAPH + {0x83EF, 0x51BF}, //555 #CJK UNIFIED IDEOGRAPH + {0x83F0, 0x51C1}, //556 #CJK UNIFIED IDEOGRAPH + {0x83F1, 0x51C2}, //557 #CJK UNIFIED IDEOGRAPH + {0x83F2, 0x51C3}, //558 #CJK UNIFIED IDEOGRAPH + {0x83F3, 0x51C5}, //559 #CJK UNIFIED IDEOGRAPH + {0x83F4, 0x51C8}, //560 #CJK UNIFIED IDEOGRAPH + {0x83F5, 0x51CA}, //561 #CJK UNIFIED IDEOGRAPH + {0x83F6, 0x51CD}, //562 #CJK UNIFIED IDEOGRAPH + {0x83F7, 0x51CE}, //563 #CJK UNIFIED IDEOGRAPH + {0x83F8, 0x51D0}, //564 #CJK UNIFIED IDEOGRAPH + {0x83F9, 0x51D2}, //565 #CJK UNIFIED IDEOGRAPH + {0x83FA, 0x51D3}, //566 #CJK UNIFIED IDEOGRAPH + {0x83FB, 0x51D4}, //567 #CJK UNIFIED IDEOGRAPH + {0x83FC, 0x51D5}, //568 #CJK UNIFIED IDEOGRAPH + {0x83FD, 0x51D6}, //569 #CJK UNIFIED IDEOGRAPH + {0x83FE, 0x51D7}, //570 #CJK UNIFIED IDEOGRAPH + {0x8440, 0x51D8}, //571 #CJK UNIFIED IDEOGRAPH + {0x8441, 0x51D9}, //572 #CJK UNIFIED IDEOGRAPH + {0x8442, 0x51DA}, //573 #CJK UNIFIED IDEOGRAPH + {0x8443, 0x51DC}, //574 #CJK UNIFIED IDEOGRAPH + {0x8444, 0x51DE}, //575 #CJK UNIFIED IDEOGRAPH + {0x8445, 0x51DF}, //576 #CJK UNIFIED IDEOGRAPH + {0x8446, 0x51E2}, //577 #CJK UNIFIED IDEOGRAPH + {0x8447, 0x51E3}, //578 #CJK UNIFIED IDEOGRAPH + {0x8448, 0x51E5}, //579 #CJK UNIFIED IDEOGRAPH + {0x8449, 0x51E6}, //580 #CJK UNIFIED IDEOGRAPH + {0x844A, 0x51E7}, //581 #CJK UNIFIED IDEOGRAPH + {0x844B, 0x51E8}, //582 #CJK UNIFIED IDEOGRAPH + {0x844C, 0x51E9}, //583 #CJK UNIFIED IDEOGRAPH + {0x844D, 0x51EA}, //584 #CJK UNIFIED IDEOGRAPH + {0x844E, 0x51EC}, //585 #CJK UNIFIED IDEOGRAPH + {0x844F, 0x51EE}, //586 #CJK UNIFIED IDEOGRAPH + {0x8450, 0x51F1}, //587 #CJK UNIFIED IDEOGRAPH + {0x8451, 0x51F2}, //588 #CJK UNIFIED IDEOGRAPH + {0x8452, 0x51F4}, //589 #CJK UNIFIED IDEOGRAPH + {0x8453, 0x51F7}, //590 #CJK UNIFIED IDEOGRAPH + {0x8454, 0x51FE}, //591 #CJK UNIFIED IDEOGRAPH + {0x8455, 0x5204}, //592 #CJK UNIFIED IDEOGRAPH + {0x8456, 0x5205}, //593 #CJK UNIFIED IDEOGRAPH + {0x8457, 0x5209}, //594 #CJK UNIFIED IDEOGRAPH + {0x8458, 0x520B}, //595 #CJK UNIFIED IDEOGRAPH + {0x8459, 0x520C}, //596 #CJK UNIFIED IDEOGRAPH + {0x845A, 0x520F}, //597 #CJK UNIFIED IDEOGRAPH + {0x845B, 0x5210}, //598 #CJK UNIFIED IDEOGRAPH + {0x845C, 0x5213}, //599 #CJK UNIFIED IDEOGRAPH + {0x845D, 0x5214}, //600 #CJK UNIFIED IDEOGRAPH + {0x845E, 0x5215}, //601 #CJK UNIFIED IDEOGRAPH + {0x845F, 0x521C}, //602 #CJK UNIFIED IDEOGRAPH + {0x8460, 0x521E}, //603 #CJK UNIFIED IDEOGRAPH + {0x8461, 0x521F}, //604 #CJK UNIFIED IDEOGRAPH + {0x8462, 0x5221}, //605 #CJK UNIFIED IDEOGRAPH + {0x8463, 0x5222}, //606 #CJK UNIFIED IDEOGRAPH + {0x8464, 0x5223}, //607 #CJK UNIFIED IDEOGRAPH + {0x8465, 0x5225}, //608 #CJK UNIFIED IDEOGRAPH + {0x8466, 0x5226}, //609 #CJK UNIFIED IDEOGRAPH + {0x8467, 0x5227}, //610 #CJK UNIFIED IDEOGRAPH + {0x8468, 0x522A}, //611 #CJK UNIFIED IDEOGRAPH + {0x8469, 0x522C}, //612 #CJK UNIFIED IDEOGRAPH + {0x846A, 0x522F}, //613 #CJK UNIFIED IDEOGRAPH + {0x846B, 0x5231}, //614 #CJK UNIFIED IDEOGRAPH + {0x846C, 0x5232}, //615 #CJK UNIFIED IDEOGRAPH + {0x846D, 0x5234}, //616 #CJK UNIFIED IDEOGRAPH + {0x846E, 0x5235}, //617 #CJK UNIFIED IDEOGRAPH + {0x846F, 0x523C}, //618 #CJK UNIFIED IDEOGRAPH + {0x8470, 0x523E}, //619 #CJK UNIFIED IDEOGRAPH + {0x8471, 0x5244}, //620 #CJK UNIFIED IDEOGRAPH + {0x8472, 0x5245}, //621 #CJK UNIFIED IDEOGRAPH + {0x8473, 0x5246}, //622 #CJK UNIFIED IDEOGRAPH + {0x8474, 0x5247}, //623 #CJK UNIFIED IDEOGRAPH + {0x8475, 0x5248}, //624 #CJK UNIFIED IDEOGRAPH + {0x8476, 0x5249}, //625 #CJK UNIFIED IDEOGRAPH + {0x8477, 0x524B}, //626 #CJK UNIFIED IDEOGRAPH + {0x8478, 0x524E}, //627 #CJK UNIFIED IDEOGRAPH + {0x8479, 0x524F}, //628 #CJK UNIFIED IDEOGRAPH + {0x847A, 0x5252}, //629 #CJK UNIFIED IDEOGRAPH + {0x847B, 0x5253}, //630 #CJK UNIFIED IDEOGRAPH + {0x847C, 0x5255}, //631 #CJK UNIFIED IDEOGRAPH + {0x847D, 0x5257}, //632 #CJK UNIFIED IDEOGRAPH + {0x847E, 0x5258}, //633 #CJK UNIFIED IDEOGRAPH + {0x8480, 0x5259}, //634 #CJK UNIFIED IDEOGRAPH + {0x8481, 0x525A}, //635 #CJK UNIFIED IDEOGRAPH + {0x8482, 0x525B}, //636 #CJK UNIFIED IDEOGRAPH + {0x8483, 0x525D}, //637 #CJK UNIFIED IDEOGRAPH + {0x8484, 0x525F}, //638 #CJK UNIFIED IDEOGRAPH + {0x8485, 0x5260}, //639 #CJK UNIFIED IDEOGRAPH + {0x8486, 0x5262}, //640 #CJK UNIFIED IDEOGRAPH + {0x8487, 0x5263}, //641 #CJK UNIFIED IDEOGRAPH + {0x8488, 0x5264}, //642 #CJK UNIFIED IDEOGRAPH + {0x8489, 0x5266}, //643 #CJK UNIFIED IDEOGRAPH + {0x848A, 0x5268}, //644 #CJK UNIFIED IDEOGRAPH + {0x848B, 0x526B}, //645 #CJK UNIFIED IDEOGRAPH + {0x848C, 0x526C}, //646 #CJK UNIFIED IDEOGRAPH + {0x848D, 0x526D}, //647 #CJK UNIFIED IDEOGRAPH + {0x848E, 0x526E}, //648 #CJK UNIFIED IDEOGRAPH + {0x848F, 0x5270}, //649 #CJK UNIFIED IDEOGRAPH + {0x8490, 0x5271}, //650 #CJK UNIFIED IDEOGRAPH + {0x8491, 0x5273}, //651 #CJK UNIFIED IDEOGRAPH + {0x8492, 0x5274}, //652 #CJK UNIFIED IDEOGRAPH + {0x8493, 0x5275}, //653 #CJK UNIFIED IDEOGRAPH + {0x8494, 0x5276}, //654 #CJK UNIFIED IDEOGRAPH + {0x8495, 0x5277}, //655 #CJK UNIFIED IDEOGRAPH + {0x8496, 0x5278}, //656 #CJK UNIFIED IDEOGRAPH + {0x8497, 0x5279}, //657 #CJK UNIFIED IDEOGRAPH + {0x8498, 0x527A}, //658 #CJK UNIFIED IDEOGRAPH + {0x8499, 0x527B}, //659 #CJK UNIFIED IDEOGRAPH + {0x849A, 0x527C}, //660 #CJK UNIFIED IDEOGRAPH + {0x849B, 0x527E}, //661 #CJK UNIFIED IDEOGRAPH + {0x849C, 0x5280}, //662 #CJK UNIFIED IDEOGRAPH + {0x849D, 0x5283}, //663 #CJK UNIFIED IDEOGRAPH + {0x849E, 0x5284}, //664 #CJK UNIFIED IDEOGRAPH + {0x849F, 0x5285}, //665 #CJK UNIFIED IDEOGRAPH + {0x84A0, 0x5286}, //666 #CJK UNIFIED IDEOGRAPH + {0x84A1, 0x5287}, //667 #CJK UNIFIED IDEOGRAPH + {0x84A2, 0x5289}, //668 #CJK UNIFIED IDEOGRAPH + {0x84A3, 0x528A}, //669 #CJK UNIFIED IDEOGRAPH + {0x84A4, 0x528B}, //670 #CJK UNIFIED IDEOGRAPH + {0x84A5, 0x528C}, //671 #CJK UNIFIED IDEOGRAPH + {0x84A6, 0x528D}, //672 #CJK UNIFIED IDEOGRAPH + {0x84A7, 0x528E}, //673 #CJK UNIFIED IDEOGRAPH + {0x84A8, 0x528F}, //674 #CJK UNIFIED IDEOGRAPH + {0x84A9, 0x5291}, //675 #CJK UNIFIED IDEOGRAPH + {0x84AA, 0x5292}, //676 #CJK UNIFIED IDEOGRAPH + {0x84AB, 0x5294}, //677 #CJK UNIFIED IDEOGRAPH + {0x84AC, 0x5295}, //678 #CJK UNIFIED IDEOGRAPH + {0x84AD, 0x5296}, //679 #CJK UNIFIED IDEOGRAPH + {0x84AE, 0x5297}, //680 #CJK UNIFIED IDEOGRAPH + {0x84AF, 0x5298}, //681 #CJK UNIFIED IDEOGRAPH + {0x84B0, 0x5299}, //682 #CJK UNIFIED IDEOGRAPH + {0x84B1, 0x529A}, //683 #CJK UNIFIED IDEOGRAPH + {0x84B2, 0x529C}, //684 #CJK UNIFIED IDEOGRAPH + {0x84B3, 0x52A4}, //685 #CJK UNIFIED IDEOGRAPH + {0x84B4, 0x52A5}, //686 #CJK UNIFIED IDEOGRAPH + {0x84B5, 0x52A6}, //687 #CJK UNIFIED IDEOGRAPH + {0x84B6, 0x52A7}, //688 #CJK UNIFIED IDEOGRAPH + {0x84B7, 0x52AE}, //689 #CJK UNIFIED IDEOGRAPH + {0x84B8, 0x52AF}, //690 #CJK UNIFIED IDEOGRAPH + {0x84B9, 0x52B0}, //691 #CJK UNIFIED IDEOGRAPH + {0x84BA, 0x52B4}, //692 #CJK UNIFIED IDEOGRAPH + {0x84BB, 0x52B5}, //693 #CJK UNIFIED IDEOGRAPH + {0x84BC, 0x52B6}, //694 #CJK UNIFIED IDEOGRAPH + {0x84BD, 0x52B7}, //695 #CJK UNIFIED IDEOGRAPH + {0x84BE, 0x52B8}, //696 #CJK UNIFIED IDEOGRAPH + {0x84BF, 0x52B9}, //697 #CJK UNIFIED IDEOGRAPH + {0x84C0, 0x52BA}, //698 #CJK UNIFIED IDEOGRAPH + {0x84C1, 0x52BB}, //699 #CJK UNIFIED IDEOGRAPH + {0x84C2, 0x52BC}, //700 #CJK UNIFIED IDEOGRAPH + {0x84C3, 0x52BD}, //701 #CJK UNIFIED IDEOGRAPH + {0x84C4, 0x52C0}, //702 #CJK UNIFIED IDEOGRAPH + {0x84C5, 0x52C1}, //703 #CJK UNIFIED IDEOGRAPH + {0x84C6, 0x52C2}, //704 #CJK UNIFIED IDEOGRAPH + {0x84C7, 0x52C4}, //705 #CJK UNIFIED IDEOGRAPH + {0x84C8, 0x52C5}, //706 #CJK UNIFIED IDEOGRAPH + {0x84C9, 0x52C6}, //707 #CJK UNIFIED IDEOGRAPH + {0x84CA, 0x52C8}, //708 #CJK UNIFIED IDEOGRAPH + {0x84CB, 0x52CA}, //709 #CJK UNIFIED IDEOGRAPH + {0x84CC, 0x52CC}, //710 #CJK UNIFIED IDEOGRAPH + {0x84CD, 0x52CD}, //711 #CJK UNIFIED IDEOGRAPH + {0x84CE, 0x52CE}, //712 #CJK UNIFIED IDEOGRAPH + {0x84CF, 0x52CF}, //713 #CJK UNIFIED IDEOGRAPH + {0x84D0, 0x52D1}, //714 #CJK UNIFIED IDEOGRAPH + {0x84D1, 0x52D3}, //715 #CJK UNIFIED IDEOGRAPH + {0x84D2, 0x52D4}, //716 #CJK UNIFIED IDEOGRAPH + {0x84D3, 0x52D5}, //717 #CJK UNIFIED IDEOGRAPH + {0x84D4, 0x52D7}, //718 #CJK UNIFIED IDEOGRAPH + {0x84D5, 0x52D9}, //719 #CJK UNIFIED IDEOGRAPH + {0x84D6, 0x52DA}, //720 #CJK UNIFIED IDEOGRAPH + {0x84D7, 0x52DB}, //721 #CJK UNIFIED IDEOGRAPH + {0x84D8, 0x52DC}, //722 #CJK UNIFIED IDEOGRAPH + {0x84D9, 0x52DD}, //723 #CJK UNIFIED IDEOGRAPH + {0x84DA, 0x52DE}, //724 #CJK UNIFIED IDEOGRAPH + {0x84DB, 0x52E0}, //725 #CJK UNIFIED IDEOGRAPH + {0x84DC, 0x52E1}, //726 #CJK UNIFIED IDEOGRAPH + {0x84DD, 0x52E2}, //727 #CJK UNIFIED IDEOGRAPH + {0x84DE, 0x52E3}, //728 #CJK UNIFIED IDEOGRAPH + {0x84DF, 0x52E5}, //729 #CJK UNIFIED IDEOGRAPH + {0x84E0, 0x52E6}, //730 #CJK UNIFIED IDEOGRAPH + {0x84E1, 0x52E7}, //731 #CJK UNIFIED IDEOGRAPH + {0x84E2, 0x52E8}, //732 #CJK UNIFIED IDEOGRAPH + {0x84E3, 0x52E9}, //733 #CJK UNIFIED IDEOGRAPH + {0x84E4, 0x52EA}, //734 #CJK UNIFIED IDEOGRAPH + {0x84E5, 0x52EB}, //735 #CJK UNIFIED IDEOGRAPH + {0x84E6, 0x52EC}, //736 #CJK UNIFIED IDEOGRAPH + {0x84E7, 0x52ED}, //737 #CJK UNIFIED IDEOGRAPH + {0x84E8, 0x52EE}, //738 #CJK UNIFIED IDEOGRAPH + {0x84E9, 0x52EF}, //739 #CJK UNIFIED IDEOGRAPH + {0x84EA, 0x52F1}, //740 #CJK UNIFIED IDEOGRAPH + {0x84EB, 0x52F2}, //741 #CJK UNIFIED IDEOGRAPH + {0x84EC, 0x52F3}, //742 #CJK UNIFIED IDEOGRAPH + {0x84ED, 0x52F4}, //743 #CJK UNIFIED IDEOGRAPH + {0x84EE, 0x52F5}, //744 #CJK UNIFIED IDEOGRAPH + {0x84EF, 0x52F6}, //745 #CJK UNIFIED IDEOGRAPH + {0x84F0, 0x52F7}, //746 #CJK UNIFIED IDEOGRAPH + {0x84F1, 0x52F8}, //747 #CJK UNIFIED IDEOGRAPH + {0x84F2, 0x52FB}, //748 #CJK UNIFIED IDEOGRAPH + {0x84F3, 0x52FC}, //749 #CJK UNIFIED IDEOGRAPH + {0x84F4, 0x52FD}, //750 #CJK UNIFIED IDEOGRAPH + {0x84F5, 0x5301}, //751 #CJK UNIFIED IDEOGRAPH + {0x84F6, 0x5302}, //752 #CJK UNIFIED IDEOGRAPH + {0x84F7, 0x5303}, //753 #CJK UNIFIED IDEOGRAPH + {0x84F8, 0x5304}, //754 #CJK UNIFIED IDEOGRAPH + {0x84F9, 0x5307}, //755 #CJK UNIFIED IDEOGRAPH + {0x84FA, 0x5309}, //756 #CJK UNIFIED IDEOGRAPH + {0x84FB, 0x530A}, //757 #CJK UNIFIED IDEOGRAPH + {0x84FC, 0x530B}, //758 #CJK UNIFIED IDEOGRAPH + {0x84FD, 0x530C}, //759 #CJK UNIFIED IDEOGRAPH + {0x84FE, 0x530E}, //760 #CJK UNIFIED IDEOGRAPH + {0x8540, 0x5311}, //761 #CJK UNIFIED IDEOGRAPH + {0x8541, 0x5312}, //762 #CJK UNIFIED IDEOGRAPH + {0x8542, 0x5313}, //763 #CJK UNIFIED IDEOGRAPH + {0x8543, 0x5314}, //764 #CJK UNIFIED IDEOGRAPH + {0x8544, 0x5318}, //765 #CJK UNIFIED IDEOGRAPH + {0x8545, 0x531B}, //766 #CJK UNIFIED IDEOGRAPH + {0x8546, 0x531C}, //767 #CJK UNIFIED IDEOGRAPH + {0x8547, 0x531E}, //768 #CJK UNIFIED IDEOGRAPH + {0x8548, 0x531F}, //769 #CJK UNIFIED IDEOGRAPH + {0x8549, 0x5322}, //770 #CJK UNIFIED IDEOGRAPH + {0x854A, 0x5324}, //771 #CJK UNIFIED IDEOGRAPH + {0x854B, 0x5325}, //772 #CJK UNIFIED IDEOGRAPH + {0x854C, 0x5327}, //773 #CJK UNIFIED IDEOGRAPH + {0x854D, 0x5328}, //774 #CJK UNIFIED IDEOGRAPH + {0x854E, 0x5329}, //775 #CJK UNIFIED IDEOGRAPH + {0x854F, 0x532B}, //776 #CJK UNIFIED IDEOGRAPH + {0x8550, 0x532C}, //777 #CJK UNIFIED IDEOGRAPH + {0x8551, 0x532D}, //778 #CJK UNIFIED IDEOGRAPH + {0x8552, 0x532F}, //779 #CJK UNIFIED IDEOGRAPH + {0x8553, 0x5330}, //780 #CJK UNIFIED IDEOGRAPH + {0x8554, 0x5331}, //781 #CJK UNIFIED IDEOGRAPH + {0x8555, 0x5332}, //782 #CJK UNIFIED IDEOGRAPH + {0x8556, 0x5333}, //783 #CJK UNIFIED IDEOGRAPH + {0x8557, 0x5334}, //784 #CJK UNIFIED IDEOGRAPH + {0x8558, 0x5335}, //785 #CJK UNIFIED IDEOGRAPH + {0x8559, 0x5336}, //786 #CJK UNIFIED IDEOGRAPH + {0x855A, 0x5337}, //787 #CJK UNIFIED IDEOGRAPH + {0x855B, 0x5338}, //788 #CJK UNIFIED IDEOGRAPH + {0x855C, 0x533C}, //789 #CJK UNIFIED IDEOGRAPH + {0x855D, 0x533D}, //790 #CJK UNIFIED IDEOGRAPH + {0x855E, 0x5340}, //791 #CJK UNIFIED IDEOGRAPH + {0x855F, 0x5342}, //792 #CJK UNIFIED IDEOGRAPH + {0x8560, 0x5344}, //793 #CJK UNIFIED IDEOGRAPH + {0x8561, 0x5346}, //794 #CJK UNIFIED IDEOGRAPH + {0x8562, 0x534B}, //795 #CJK UNIFIED IDEOGRAPH + {0x8563, 0x534C}, //796 #CJK UNIFIED IDEOGRAPH + {0x8564, 0x534D}, //797 #CJK UNIFIED IDEOGRAPH + {0x8565, 0x5350}, //798 #CJK UNIFIED IDEOGRAPH + {0x8566, 0x5354}, //799 #CJK UNIFIED IDEOGRAPH + {0x8567, 0x5358}, //800 #CJK UNIFIED IDEOGRAPH + {0x8568, 0x5359}, //801 #CJK UNIFIED IDEOGRAPH + {0x8569, 0x535B}, //802 #CJK UNIFIED IDEOGRAPH + {0x856A, 0x535D}, //803 #CJK UNIFIED IDEOGRAPH + {0x856B, 0x5365}, //804 #CJK UNIFIED IDEOGRAPH + {0x856C, 0x5368}, //805 #CJK UNIFIED IDEOGRAPH + {0x856D, 0x536A}, //806 #CJK UNIFIED IDEOGRAPH + {0x856E, 0x536C}, //807 #CJK UNIFIED IDEOGRAPH + {0x856F, 0x536D}, //808 #CJK UNIFIED IDEOGRAPH + {0x8570, 0x5372}, //809 #CJK UNIFIED IDEOGRAPH + {0x8571, 0x5376}, //810 #CJK UNIFIED IDEOGRAPH + {0x8572, 0x5379}, //811 #CJK UNIFIED IDEOGRAPH + {0x8573, 0x537B}, //812 #CJK UNIFIED IDEOGRAPH + {0x8574, 0x537C}, //813 #CJK UNIFIED IDEOGRAPH + {0x8575, 0x537D}, //814 #CJK UNIFIED IDEOGRAPH + {0x8576, 0x537E}, //815 #CJK UNIFIED IDEOGRAPH + {0x8577, 0x5380}, //816 #CJK UNIFIED IDEOGRAPH + {0x8578, 0x5381}, //817 #CJK UNIFIED IDEOGRAPH + {0x8579, 0x5383}, //818 #CJK UNIFIED IDEOGRAPH + {0x857A, 0x5387}, //819 #CJK UNIFIED IDEOGRAPH + {0x857B, 0x5388}, //820 #CJK UNIFIED IDEOGRAPH + {0x857C, 0x538A}, //821 #CJK UNIFIED IDEOGRAPH + {0x857D, 0x538E}, //822 #CJK UNIFIED IDEOGRAPH + {0x857E, 0x538F}, //823 #CJK UNIFIED IDEOGRAPH + {0x8580, 0x5390}, //824 #CJK UNIFIED IDEOGRAPH + {0x8581, 0x5391}, //825 #CJK UNIFIED IDEOGRAPH + {0x8582, 0x5392}, //826 #CJK UNIFIED IDEOGRAPH + {0x8583, 0x5393}, //827 #CJK UNIFIED IDEOGRAPH + {0x8584, 0x5394}, //828 #CJK UNIFIED IDEOGRAPH + {0x8585, 0x5396}, //829 #CJK UNIFIED IDEOGRAPH + {0x8586, 0x5397}, //830 #CJK UNIFIED IDEOGRAPH + {0x8587, 0x5399}, //831 #CJK UNIFIED IDEOGRAPH + {0x8588, 0x539B}, //832 #CJK UNIFIED IDEOGRAPH + {0x8589, 0x539C}, //833 #CJK UNIFIED IDEOGRAPH + {0x858A, 0x539E}, //834 #CJK UNIFIED IDEOGRAPH + {0x858B, 0x53A0}, //835 #CJK UNIFIED IDEOGRAPH + {0x858C, 0x53A1}, //836 #CJK UNIFIED IDEOGRAPH + {0x858D, 0x53A4}, //837 #CJK UNIFIED IDEOGRAPH + {0x858E, 0x53A7}, //838 #CJK UNIFIED IDEOGRAPH + {0x858F, 0x53AA}, //839 #CJK UNIFIED IDEOGRAPH + {0x8590, 0x53AB}, //840 #CJK UNIFIED IDEOGRAPH + {0x8591, 0x53AC}, //841 #CJK UNIFIED IDEOGRAPH + {0x8592, 0x53AD}, //842 #CJK UNIFIED IDEOGRAPH + {0x8593, 0x53AF}, //843 #CJK UNIFIED IDEOGRAPH + {0x8594, 0x53B0}, //844 #CJK UNIFIED IDEOGRAPH + {0x8595, 0x53B1}, //845 #CJK UNIFIED IDEOGRAPH + {0x8596, 0x53B2}, //846 #CJK UNIFIED IDEOGRAPH + {0x8597, 0x53B3}, //847 #CJK UNIFIED IDEOGRAPH + {0x8598, 0x53B4}, //848 #CJK UNIFIED IDEOGRAPH + {0x8599, 0x53B5}, //849 #CJK UNIFIED IDEOGRAPH + {0x859A, 0x53B7}, //850 #CJK UNIFIED IDEOGRAPH + {0x859B, 0x53B8}, //851 #CJK UNIFIED IDEOGRAPH + {0x859C, 0x53B9}, //852 #CJK UNIFIED IDEOGRAPH + {0x859D, 0x53BA}, //853 #CJK UNIFIED IDEOGRAPH + {0x859E, 0x53BC}, //854 #CJK UNIFIED IDEOGRAPH + {0x859F, 0x53BD}, //855 #CJK UNIFIED IDEOGRAPH + {0x85A0, 0x53BE}, //856 #CJK UNIFIED IDEOGRAPH + {0x85A1, 0x53C0}, //857 #CJK UNIFIED IDEOGRAPH + {0x85A2, 0x53C3}, //858 #CJK UNIFIED IDEOGRAPH + {0x85A3, 0x53C4}, //859 #CJK UNIFIED IDEOGRAPH + {0x85A4, 0x53C5}, //860 #CJK UNIFIED IDEOGRAPH + {0x85A5, 0x53C6}, //861 #CJK UNIFIED IDEOGRAPH + {0x85A6, 0x53C7}, //862 #CJK UNIFIED IDEOGRAPH + {0x85A7, 0x53CE}, //863 #CJK UNIFIED IDEOGRAPH + {0x85A8, 0x53CF}, //864 #CJK UNIFIED IDEOGRAPH + {0x85A9, 0x53D0}, //865 #CJK UNIFIED IDEOGRAPH + {0x85AA, 0x53D2}, //866 #CJK UNIFIED IDEOGRAPH + {0x85AB, 0x53D3}, //867 #CJK UNIFIED IDEOGRAPH + {0x85AC, 0x53D5}, //868 #CJK UNIFIED IDEOGRAPH + {0x85AD, 0x53DA}, //869 #CJK UNIFIED IDEOGRAPH + {0x85AE, 0x53DC}, //870 #CJK UNIFIED IDEOGRAPH + {0x85AF, 0x53DD}, //871 #CJK UNIFIED IDEOGRAPH + {0x85B0, 0x53DE}, //872 #CJK UNIFIED IDEOGRAPH + {0x85B1, 0x53E1}, //873 #CJK UNIFIED IDEOGRAPH + {0x85B2, 0x53E2}, //874 #CJK UNIFIED IDEOGRAPH + {0x85B3, 0x53E7}, //875 #CJK UNIFIED IDEOGRAPH + {0x85B4, 0x53F4}, //876 #CJK UNIFIED IDEOGRAPH + {0x85B5, 0x53FA}, //877 #CJK UNIFIED IDEOGRAPH + {0x85B6, 0x53FE}, //878 #CJK UNIFIED IDEOGRAPH + {0x85B7, 0x53FF}, //879 #CJK UNIFIED IDEOGRAPH + {0x85B8, 0x5400}, //880 #CJK UNIFIED IDEOGRAPH + {0x85B9, 0x5402}, //881 #CJK UNIFIED IDEOGRAPH + {0x85BA, 0x5405}, //882 #CJK UNIFIED IDEOGRAPH + {0x85BB, 0x5407}, //883 #CJK UNIFIED IDEOGRAPH + {0x85BC, 0x540B}, //884 #CJK UNIFIED IDEOGRAPH + {0x85BD, 0x5414}, //885 #CJK UNIFIED IDEOGRAPH + {0x85BE, 0x5418}, //886 #CJK UNIFIED IDEOGRAPH + {0x85BF, 0x5419}, //887 #CJK UNIFIED IDEOGRAPH + {0x85C0, 0x541A}, //888 #CJK UNIFIED IDEOGRAPH + {0x85C1, 0x541C}, //889 #CJK UNIFIED IDEOGRAPH + {0x85C2, 0x5422}, //890 #CJK UNIFIED IDEOGRAPH + {0x85C3, 0x5424}, //891 #CJK UNIFIED IDEOGRAPH + {0x85C4, 0x5425}, //892 #CJK UNIFIED IDEOGRAPH + {0x85C5, 0x542A}, //893 #CJK UNIFIED IDEOGRAPH + {0x85C6, 0x5430}, //894 #CJK UNIFIED IDEOGRAPH + {0x85C7, 0x5433}, //895 #CJK UNIFIED IDEOGRAPH + {0x85C8, 0x5436}, //896 #CJK UNIFIED IDEOGRAPH + {0x85C9, 0x5437}, //897 #CJK UNIFIED IDEOGRAPH + {0x85CA, 0x543A}, //898 #CJK UNIFIED IDEOGRAPH + {0x85CB, 0x543D}, //899 #CJK UNIFIED IDEOGRAPH + {0x85CC, 0x543F}, //900 #CJK UNIFIED IDEOGRAPH + {0x85CD, 0x5441}, //901 #CJK UNIFIED IDEOGRAPH + {0x85CE, 0x5442}, //902 #CJK UNIFIED IDEOGRAPH + {0x85CF, 0x5444}, //903 #CJK UNIFIED IDEOGRAPH + {0x85D0, 0x5445}, //904 #CJK UNIFIED IDEOGRAPH + {0x85D1, 0x5447}, //905 #CJK UNIFIED IDEOGRAPH + {0x85D2, 0x5449}, //906 #CJK UNIFIED IDEOGRAPH + {0x85D3, 0x544C}, //907 #CJK UNIFIED IDEOGRAPH + {0x85D4, 0x544D}, //908 #CJK UNIFIED IDEOGRAPH + {0x85D5, 0x544E}, //909 #CJK UNIFIED IDEOGRAPH + {0x85D6, 0x544F}, //910 #CJK UNIFIED IDEOGRAPH + {0x85D7, 0x5451}, //911 #CJK UNIFIED IDEOGRAPH + {0x85D8, 0x545A}, //912 #CJK UNIFIED IDEOGRAPH + {0x85D9, 0x545D}, //913 #CJK UNIFIED IDEOGRAPH + {0x85DA, 0x545E}, //914 #CJK UNIFIED IDEOGRAPH + {0x85DB, 0x545F}, //915 #CJK UNIFIED IDEOGRAPH + {0x85DC, 0x5460}, //916 #CJK UNIFIED IDEOGRAPH + {0x85DD, 0x5461}, //917 #CJK UNIFIED IDEOGRAPH + {0x85DE, 0x5463}, //918 #CJK UNIFIED IDEOGRAPH + {0x85DF, 0x5465}, //919 #CJK UNIFIED IDEOGRAPH + {0x85E0, 0x5467}, //920 #CJK UNIFIED IDEOGRAPH + {0x85E1, 0x5469}, //921 #CJK UNIFIED IDEOGRAPH + {0x85E2, 0x546A}, //922 #CJK UNIFIED IDEOGRAPH + {0x85E3, 0x546B}, //923 #CJK UNIFIED IDEOGRAPH + {0x85E4, 0x546C}, //924 #CJK UNIFIED IDEOGRAPH + {0x85E5, 0x546D}, //925 #CJK UNIFIED IDEOGRAPH + {0x85E6, 0x546E}, //926 #CJK UNIFIED IDEOGRAPH + {0x85E7, 0x546F}, //927 #CJK UNIFIED IDEOGRAPH + {0x85E8, 0x5470}, //928 #CJK UNIFIED IDEOGRAPH + {0x85E9, 0x5474}, //929 #CJK UNIFIED IDEOGRAPH + {0x85EA, 0x5479}, //930 #CJK UNIFIED IDEOGRAPH + {0x85EB, 0x547A}, //931 #CJK UNIFIED IDEOGRAPH + {0x85EC, 0x547E}, //932 #CJK UNIFIED IDEOGRAPH + {0x85ED, 0x547F}, //933 #CJK UNIFIED IDEOGRAPH + {0x85EE, 0x5481}, //934 #CJK UNIFIED IDEOGRAPH + {0x85EF, 0x5483}, //935 #CJK UNIFIED IDEOGRAPH + {0x85F0, 0x5485}, //936 #CJK UNIFIED IDEOGRAPH + {0x85F1, 0x5487}, //937 #CJK UNIFIED IDEOGRAPH + {0x85F2, 0x5488}, //938 #CJK UNIFIED IDEOGRAPH + {0x85F3, 0x5489}, //939 #CJK UNIFIED IDEOGRAPH + {0x85F4, 0x548A}, //940 #CJK UNIFIED IDEOGRAPH + {0x85F5, 0x548D}, //941 #CJK UNIFIED IDEOGRAPH + {0x85F6, 0x5491}, //942 #CJK UNIFIED IDEOGRAPH + {0x85F7, 0x5493}, //943 #CJK UNIFIED IDEOGRAPH + {0x85F8, 0x5497}, //944 #CJK UNIFIED IDEOGRAPH + {0x85F9, 0x5498}, //945 #CJK UNIFIED IDEOGRAPH + {0x85FA, 0x549C}, //946 #CJK UNIFIED IDEOGRAPH + {0x85FB, 0x549E}, //947 #CJK UNIFIED IDEOGRAPH + {0x85FC, 0x549F}, //948 #CJK UNIFIED IDEOGRAPH + {0x85FD, 0x54A0}, //949 #CJK UNIFIED IDEOGRAPH + {0x85FE, 0x54A1}, //950 #CJK UNIFIED IDEOGRAPH + {0x8640, 0x54A2}, //951 #CJK UNIFIED IDEOGRAPH + {0x8641, 0x54A5}, //952 #CJK UNIFIED IDEOGRAPH + {0x8642, 0x54AE}, //953 #CJK UNIFIED IDEOGRAPH + {0x8643, 0x54B0}, //954 #CJK UNIFIED IDEOGRAPH + {0x8644, 0x54B2}, //955 #CJK UNIFIED IDEOGRAPH + {0x8645, 0x54B5}, //956 #CJK UNIFIED IDEOGRAPH + {0x8646, 0x54B6}, //957 #CJK UNIFIED IDEOGRAPH + {0x8647, 0x54B7}, //958 #CJK UNIFIED IDEOGRAPH + {0x8648, 0x54B9}, //959 #CJK UNIFIED IDEOGRAPH + {0x8649, 0x54BA}, //960 #CJK UNIFIED IDEOGRAPH + {0x864A, 0x54BC}, //961 #CJK UNIFIED IDEOGRAPH + {0x864B, 0x54BE}, //962 #CJK UNIFIED IDEOGRAPH + {0x864C, 0x54C3}, //963 #CJK UNIFIED IDEOGRAPH + {0x864D, 0x54C5}, //964 #CJK UNIFIED IDEOGRAPH + {0x864E, 0x54CA}, //965 #CJK UNIFIED IDEOGRAPH + {0x864F, 0x54CB}, //966 #CJK UNIFIED IDEOGRAPH + {0x8650, 0x54D6}, //967 #CJK UNIFIED IDEOGRAPH + {0x8651, 0x54D8}, //968 #CJK UNIFIED IDEOGRAPH + {0x8652, 0x54DB}, //969 #CJK UNIFIED IDEOGRAPH + {0x8653, 0x54E0}, //970 #CJK UNIFIED IDEOGRAPH + {0x8654, 0x54E1}, //971 #CJK UNIFIED IDEOGRAPH + {0x8655, 0x54E2}, //972 #CJK UNIFIED IDEOGRAPH + {0x8656, 0x54E3}, //973 #CJK UNIFIED IDEOGRAPH + {0x8657, 0x54E4}, //974 #CJK UNIFIED IDEOGRAPH + {0x8658, 0x54EB}, //975 #CJK UNIFIED IDEOGRAPH + {0x8659, 0x54EC}, //976 #CJK UNIFIED IDEOGRAPH + {0x865A, 0x54EF}, //977 #CJK UNIFIED IDEOGRAPH + {0x865B, 0x54F0}, //978 #CJK UNIFIED IDEOGRAPH + {0x865C, 0x54F1}, //979 #CJK UNIFIED IDEOGRAPH + {0x865D, 0x54F4}, //980 #CJK UNIFIED IDEOGRAPH + {0x865E, 0x54F5}, //981 #CJK UNIFIED IDEOGRAPH + {0x865F, 0x54F6}, //982 #CJK UNIFIED IDEOGRAPH + {0x8660, 0x54F7}, //983 #CJK UNIFIED IDEOGRAPH + {0x8661, 0x54F8}, //984 #CJK UNIFIED IDEOGRAPH + {0x8662, 0x54F9}, //985 #CJK UNIFIED IDEOGRAPH + {0x8663, 0x54FB}, //986 #CJK UNIFIED IDEOGRAPH + {0x8664, 0x54FE}, //987 #CJK UNIFIED IDEOGRAPH + {0x8665, 0x5500}, //988 #CJK UNIFIED IDEOGRAPH + {0x8666, 0x5502}, //989 #CJK UNIFIED IDEOGRAPH + {0x8667, 0x5503}, //990 #CJK UNIFIED IDEOGRAPH + {0x8668, 0x5504}, //991 #CJK UNIFIED IDEOGRAPH + {0x8669, 0x5505}, //992 #CJK UNIFIED IDEOGRAPH + {0x866A, 0x5508}, //993 #CJK UNIFIED IDEOGRAPH + {0x866B, 0x550A}, //994 #CJK UNIFIED IDEOGRAPH + {0x866C, 0x550B}, //995 #CJK UNIFIED IDEOGRAPH + {0x866D, 0x550C}, //996 #CJK UNIFIED IDEOGRAPH + {0x866E, 0x550D}, //997 #CJK UNIFIED IDEOGRAPH + {0x866F, 0x550E}, //998 #CJK UNIFIED IDEOGRAPH + {0x8670, 0x5512}, //999 #CJK UNIFIED IDEOGRAPH + {0x8671, 0x5513}, //1000 #CJK UNIFIED IDEOGRAPH + {0x8672, 0x5515}, //1001 #CJK UNIFIED IDEOGRAPH + {0x8673, 0x5516}, //1002 #CJK UNIFIED IDEOGRAPH + {0x8674, 0x5517}, //1003 #CJK UNIFIED IDEOGRAPH + {0x8675, 0x5518}, //1004 #CJK UNIFIED IDEOGRAPH + {0x8676, 0x5519}, //1005 #CJK UNIFIED IDEOGRAPH + {0x8677, 0x551A}, //1006 #CJK UNIFIED IDEOGRAPH + {0x8678, 0x551C}, //1007 #CJK UNIFIED IDEOGRAPH + {0x8679, 0x551D}, //1008 #CJK UNIFIED IDEOGRAPH + {0x867A, 0x551E}, //1009 #CJK UNIFIED IDEOGRAPH + {0x867B, 0x551F}, //1010 #CJK UNIFIED IDEOGRAPH + {0x867C, 0x5521}, //1011 #CJK UNIFIED IDEOGRAPH + {0x867D, 0x5525}, //1012 #CJK UNIFIED IDEOGRAPH + {0x867E, 0x5526}, //1013 #CJK UNIFIED IDEOGRAPH + {0x8680, 0x5528}, //1014 #CJK UNIFIED IDEOGRAPH + {0x8681, 0x5529}, //1015 #CJK UNIFIED IDEOGRAPH + {0x8682, 0x552B}, //1016 #CJK UNIFIED IDEOGRAPH + {0x8683, 0x552D}, //1017 #CJK UNIFIED IDEOGRAPH + {0x8684, 0x5532}, //1018 #CJK UNIFIED IDEOGRAPH + {0x8685, 0x5534}, //1019 #CJK UNIFIED IDEOGRAPH + {0x8686, 0x5535}, //1020 #CJK UNIFIED IDEOGRAPH + {0x8687, 0x5536}, //1021 #CJK UNIFIED IDEOGRAPH + {0x8688, 0x5538}, //1022 #CJK UNIFIED IDEOGRAPH + {0x8689, 0x5539}, //1023 #CJK UNIFIED IDEOGRAPH + {0x868A, 0x553A}, //1024 #CJK UNIFIED IDEOGRAPH + {0x868B, 0x553B}, //1025 #CJK UNIFIED IDEOGRAPH + {0x868C, 0x553D}, //1026 #CJK UNIFIED IDEOGRAPH + {0x868D, 0x5540}, //1027 #CJK UNIFIED IDEOGRAPH + {0x868E, 0x5542}, //1028 #CJK UNIFIED IDEOGRAPH + {0x868F, 0x5545}, //1029 #CJK UNIFIED IDEOGRAPH + {0x8690, 0x5547}, //1030 #CJK UNIFIED IDEOGRAPH + {0x8691, 0x5548}, //1031 #CJK UNIFIED IDEOGRAPH + {0x8692, 0x554B}, //1032 #CJK UNIFIED IDEOGRAPH + {0x8693, 0x554C}, //1033 #CJK UNIFIED IDEOGRAPH + {0x8694, 0x554D}, //1034 #CJK UNIFIED IDEOGRAPH + {0x8695, 0x554E}, //1035 #CJK UNIFIED IDEOGRAPH + {0x8696, 0x554F}, //1036 #CJK UNIFIED IDEOGRAPH + {0x8697, 0x5551}, //1037 #CJK UNIFIED IDEOGRAPH + {0x8698, 0x5552}, //1038 #CJK UNIFIED IDEOGRAPH + {0x8699, 0x5553}, //1039 #CJK UNIFIED IDEOGRAPH + {0x869A, 0x5554}, //1040 #CJK UNIFIED IDEOGRAPH + {0x869B, 0x5557}, //1041 #CJK UNIFIED IDEOGRAPH + {0x869C, 0x5558}, //1042 #CJK UNIFIED IDEOGRAPH + {0x869D, 0x5559}, //1043 #CJK UNIFIED IDEOGRAPH + {0x869E, 0x555A}, //1044 #CJK UNIFIED IDEOGRAPH + {0x869F, 0x555B}, //1045 #CJK UNIFIED IDEOGRAPH + {0x86A0, 0x555D}, //1046 #CJK UNIFIED IDEOGRAPH + {0x86A1, 0x555E}, //1047 #CJK UNIFIED IDEOGRAPH + {0x86A2, 0x555F}, //1048 #CJK UNIFIED IDEOGRAPH + {0x86A3, 0x5560}, //1049 #CJK UNIFIED IDEOGRAPH + {0x86A4, 0x5562}, //1050 #CJK UNIFIED IDEOGRAPH + {0x86A5, 0x5563}, //1051 #CJK UNIFIED IDEOGRAPH + {0x86A6, 0x5568}, //1052 #CJK UNIFIED IDEOGRAPH + {0x86A7, 0x5569}, //1053 #CJK UNIFIED IDEOGRAPH + {0x86A8, 0x556B}, //1054 #CJK UNIFIED IDEOGRAPH + {0x86A9, 0x556F}, //1055 #CJK UNIFIED IDEOGRAPH + {0x86AA, 0x5570}, //1056 #CJK UNIFIED IDEOGRAPH + {0x86AB, 0x5571}, //1057 #CJK UNIFIED IDEOGRAPH + {0x86AC, 0x5572}, //1058 #CJK UNIFIED IDEOGRAPH + {0x86AD, 0x5573}, //1059 #CJK UNIFIED IDEOGRAPH + {0x86AE, 0x5574}, //1060 #CJK UNIFIED IDEOGRAPH + {0x86AF, 0x5579}, //1061 #CJK UNIFIED IDEOGRAPH + {0x86B0, 0x557A}, //1062 #CJK UNIFIED IDEOGRAPH + {0x86B1, 0x557D}, //1063 #CJK UNIFIED IDEOGRAPH + {0x86B2, 0x557F}, //1064 #CJK UNIFIED IDEOGRAPH + {0x86B3, 0x5585}, //1065 #CJK UNIFIED IDEOGRAPH + {0x86B4, 0x5586}, //1066 #CJK UNIFIED IDEOGRAPH + {0x86B5, 0x558C}, //1067 #CJK UNIFIED IDEOGRAPH + {0x86B6, 0x558D}, //1068 #CJK UNIFIED IDEOGRAPH + {0x86B7, 0x558E}, //1069 #CJK UNIFIED IDEOGRAPH + {0x86B8, 0x5590}, //1070 #CJK UNIFIED IDEOGRAPH + {0x86B9, 0x5592}, //1071 #CJK UNIFIED IDEOGRAPH + {0x86BA, 0x5593}, //1072 #CJK UNIFIED IDEOGRAPH + {0x86BB, 0x5595}, //1073 #CJK UNIFIED IDEOGRAPH + {0x86BC, 0x5596}, //1074 #CJK UNIFIED IDEOGRAPH + {0x86BD, 0x5597}, //1075 #CJK UNIFIED IDEOGRAPH + {0x86BE, 0x559A}, //1076 #CJK UNIFIED IDEOGRAPH + {0x86BF, 0x559B}, //1077 #CJK UNIFIED IDEOGRAPH + {0x86C0, 0x559E}, //1078 #CJK UNIFIED IDEOGRAPH + {0x86C1, 0x55A0}, //1079 #CJK UNIFIED IDEOGRAPH + {0x86C2, 0x55A1}, //1080 #CJK UNIFIED IDEOGRAPH + {0x86C3, 0x55A2}, //1081 #CJK UNIFIED IDEOGRAPH + {0x86C4, 0x55A3}, //1082 #CJK UNIFIED IDEOGRAPH + {0x86C5, 0x55A4}, //1083 #CJK UNIFIED IDEOGRAPH + {0x86C6, 0x55A5}, //1084 #CJK UNIFIED IDEOGRAPH + {0x86C7, 0x55A6}, //1085 #CJK UNIFIED IDEOGRAPH + {0x86C8, 0x55A8}, //1086 #CJK UNIFIED IDEOGRAPH + {0x86C9, 0x55A9}, //1087 #CJK UNIFIED IDEOGRAPH + {0x86CA, 0x55AA}, //1088 #CJK UNIFIED IDEOGRAPH + {0x86CB, 0x55AB}, //1089 #CJK UNIFIED IDEOGRAPH + {0x86CC, 0x55AC}, //1090 #CJK UNIFIED IDEOGRAPH + {0x86CD, 0x55AD}, //1091 #CJK UNIFIED IDEOGRAPH + {0x86CE, 0x55AE}, //1092 #CJK UNIFIED IDEOGRAPH + {0x86CF, 0x55AF}, //1093 #CJK UNIFIED IDEOGRAPH + {0x86D0, 0x55B0}, //1094 #CJK UNIFIED IDEOGRAPH + {0x86D1, 0x55B2}, //1095 #CJK UNIFIED IDEOGRAPH + {0x86D2, 0x55B4}, //1096 #CJK UNIFIED IDEOGRAPH + {0x86D3, 0x55B6}, //1097 #CJK UNIFIED IDEOGRAPH + {0x86D4, 0x55B8}, //1098 #CJK UNIFIED IDEOGRAPH + {0x86D5, 0x55BA}, //1099 #CJK UNIFIED IDEOGRAPH + {0x86D6, 0x55BC}, //1100 #CJK UNIFIED IDEOGRAPH + {0x86D7, 0x55BF}, //1101 #CJK UNIFIED IDEOGRAPH + {0x86D8, 0x55C0}, //1102 #CJK UNIFIED IDEOGRAPH + {0x86D9, 0x55C1}, //1103 #CJK UNIFIED IDEOGRAPH + {0x86DA, 0x55C2}, //1104 #CJK UNIFIED IDEOGRAPH + {0x86DB, 0x55C3}, //1105 #CJK UNIFIED IDEOGRAPH + {0x86DC, 0x55C6}, //1106 #CJK UNIFIED IDEOGRAPH + {0x86DD, 0x55C7}, //1107 #CJK UNIFIED IDEOGRAPH + {0x86DE, 0x55C8}, //1108 #CJK UNIFIED IDEOGRAPH + {0x86DF, 0x55CA}, //1109 #CJK UNIFIED IDEOGRAPH + {0x86E0, 0x55CB}, //1110 #CJK UNIFIED IDEOGRAPH + {0x86E1, 0x55CE}, //1111 #CJK UNIFIED IDEOGRAPH + {0x86E2, 0x55CF}, //1112 #CJK UNIFIED IDEOGRAPH + {0x86E3, 0x55D0}, //1113 #CJK UNIFIED IDEOGRAPH + {0x86E4, 0x55D5}, //1114 #CJK UNIFIED IDEOGRAPH + {0x86E5, 0x55D7}, //1115 #CJK UNIFIED IDEOGRAPH + {0x86E6, 0x55D8}, //1116 #CJK UNIFIED IDEOGRAPH + {0x86E7, 0x55D9}, //1117 #CJK UNIFIED IDEOGRAPH + {0x86E8, 0x55DA}, //1118 #CJK UNIFIED IDEOGRAPH + {0x86E9, 0x55DB}, //1119 #CJK UNIFIED IDEOGRAPH + {0x86EA, 0x55DE}, //1120 #CJK UNIFIED IDEOGRAPH + {0x86EB, 0x55E0}, //1121 #CJK UNIFIED IDEOGRAPH + {0x86EC, 0x55E2}, //1122 #CJK UNIFIED IDEOGRAPH + {0x86ED, 0x55E7}, //1123 #CJK UNIFIED IDEOGRAPH + {0x86EE, 0x55E9}, //1124 #CJK UNIFIED IDEOGRAPH + {0x86EF, 0x55ED}, //1125 #CJK UNIFIED IDEOGRAPH + {0x86F0, 0x55EE}, //1126 #CJK UNIFIED IDEOGRAPH + {0x86F1, 0x55F0}, //1127 #CJK UNIFIED IDEOGRAPH + {0x86F2, 0x55F1}, //1128 #CJK UNIFIED IDEOGRAPH + {0x86F3, 0x55F4}, //1129 #CJK UNIFIED IDEOGRAPH + {0x86F4, 0x55F6}, //1130 #CJK UNIFIED IDEOGRAPH + {0x86F5, 0x55F8}, //1131 #CJK UNIFIED IDEOGRAPH + {0x86F6, 0x55F9}, //1132 #CJK UNIFIED IDEOGRAPH + {0x86F7, 0x55FA}, //1133 #CJK UNIFIED IDEOGRAPH + {0x86F8, 0x55FB}, //1134 #CJK UNIFIED IDEOGRAPH + {0x86F9, 0x55FC}, //1135 #CJK UNIFIED IDEOGRAPH + {0x86FA, 0x55FF}, //1136 #CJK UNIFIED IDEOGRAPH + {0x86FB, 0x5602}, //1137 #CJK UNIFIED IDEOGRAPH + {0x86FC, 0x5603}, //1138 #CJK UNIFIED IDEOGRAPH + {0x86FD, 0x5604}, //1139 #CJK UNIFIED IDEOGRAPH + {0x86FE, 0x5605}, //1140 #CJK UNIFIED IDEOGRAPH + {0x8740, 0x5606}, //1141 #CJK UNIFIED IDEOGRAPH + {0x8741, 0x5607}, //1142 #CJK UNIFIED IDEOGRAPH + {0x8742, 0x560A}, //1143 #CJK UNIFIED IDEOGRAPH + {0x8743, 0x560B}, //1144 #CJK UNIFIED IDEOGRAPH + {0x8744, 0x560D}, //1145 #CJK UNIFIED IDEOGRAPH + {0x8745, 0x5610}, //1146 #CJK UNIFIED IDEOGRAPH + {0x8746, 0x5611}, //1147 #CJK UNIFIED IDEOGRAPH + {0x8747, 0x5612}, //1148 #CJK UNIFIED IDEOGRAPH + {0x8748, 0x5613}, //1149 #CJK UNIFIED IDEOGRAPH + {0x8749, 0x5614}, //1150 #CJK UNIFIED IDEOGRAPH + {0x874A, 0x5615}, //1151 #CJK UNIFIED IDEOGRAPH + {0x874B, 0x5616}, //1152 #CJK UNIFIED IDEOGRAPH + {0x874C, 0x5617}, //1153 #CJK UNIFIED IDEOGRAPH + {0x874D, 0x5619}, //1154 #CJK UNIFIED IDEOGRAPH + {0x874E, 0x561A}, //1155 #CJK UNIFIED IDEOGRAPH + {0x874F, 0x561C}, //1156 #CJK UNIFIED IDEOGRAPH + {0x8750, 0x561D}, //1157 #CJK UNIFIED IDEOGRAPH + {0x8751, 0x5620}, //1158 #CJK UNIFIED IDEOGRAPH + {0x8752, 0x5621}, //1159 #CJK UNIFIED IDEOGRAPH + {0x8753, 0x5622}, //1160 #CJK UNIFIED IDEOGRAPH + {0x8754, 0x5625}, //1161 #CJK UNIFIED IDEOGRAPH + {0x8755, 0x5626}, //1162 #CJK UNIFIED IDEOGRAPH + {0x8756, 0x5628}, //1163 #CJK UNIFIED IDEOGRAPH + {0x8757, 0x5629}, //1164 #CJK UNIFIED IDEOGRAPH + {0x8758, 0x562A}, //1165 #CJK UNIFIED IDEOGRAPH + {0x8759, 0x562B}, //1166 #CJK UNIFIED IDEOGRAPH + {0x875A, 0x562E}, //1167 #CJK UNIFIED IDEOGRAPH + {0x875B, 0x562F}, //1168 #CJK UNIFIED IDEOGRAPH + {0x875C, 0x5630}, //1169 #CJK UNIFIED IDEOGRAPH + {0x875D, 0x5633}, //1170 #CJK UNIFIED IDEOGRAPH + {0x875E, 0x5635}, //1171 #CJK UNIFIED IDEOGRAPH + {0x875F, 0x5637}, //1172 #CJK UNIFIED IDEOGRAPH + {0x8760, 0x5638}, //1173 #CJK UNIFIED IDEOGRAPH + {0x8761, 0x563A}, //1174 #CJK UNIFIED IDEOGRAPH + {0x8762, 0x563C}, //1175 #CJK UNIFIED IDEOGRAPH + {0x8763, 0x563D}, //1176 #CJK UNIFIED IDEOGRAPH + {0x8764, 0x563E}, //1177 #CJK UNIFIED IDEOGRAPH + {0x8765, 0x5640}, //1178 #CJK UNIFIED IDEOGRAPH + {0x8766, 0x5641}, //1179 #CJK UNIFIED IDEOGRAPH + {0x8767, 0x5642}, //1180 #CJK UNIFIED IDEOGRAPH + {0x8768, 0x5643}, //1181 #CJK UNIFIED IDEOGRAPH + {0x8769, 0x5644}, //1182 #CJK UNIFIED IDEOGRAPH + {0x876A, 0x5645}, //1183 #CJK UNIFIED IDEOGRAPH + {0x876B, 0x5646}, //1184 #CJK UNIFIED IDEOGRAPH + {0x876C, 0x5647}, //1185 #CJK UNIFIED IDEOGRAPH + {0x876D, 0x5648}, //1186 #CJK UNIFIED IDEOGRAPH + {0x876E, 0x5649}, //1187 #CJK UNIFIED IDEOGRAPH + {0x876F, 0x564A}, //1188 #CJK UNIFIED IDEOGRAPH + {0x8770, 0x564B}, //1189 #CJK UNIFIED IDEOGRAPH + {0x8771, 0x564F}, //1190 #CJK UNIFIED IDEOGRAPH + {0x8772, 0x5650}, //1191 #CJK UNIFIED IDEOGRAPH + {0x8773, 0x5651}, //1192 #CJK UNIFIED IDEOGRAPH + {0x8774, 0x5652}, //1193 #CJK UNIFIED IDEOGRAPH + {0x8775, 0x5653}, //1194 #CJK UNIFIED IDEOGRAPH + {0x8776, 0x5655}, //1195 #CJK UNIFIED IDEOGRAPH + {0x8777, 0x5656}, //1196 #CJK UNIFIED IDEOGRAPH + {0x8778, 0x565A}, //1197 #CJK UNIFIED IDEOGRAPH + {0x8779, 0x565B}, //1198 #CJK UNIFIED IDEOGRAPH + {0x877A, 0x565D}, //1199 #CJK UNIFIED IDEOGRAPH + {0x877B, 0x565E}, //1200 #CJK UNIFIED IDEOGRAPH + {0x877C, 0x565F}, //1201 #CJK UNIFIED IDEOGRAPH + {0x877D, 0x5660}, //1202 #CJK UNIFIED IDEOGRAPH + {0x877E, 0x5661}, //1203 #CJK UNIFIED IDEOGRAPH + {0x8780, 0x5663}, //1204 #CJK UNIFIED IDEOGRAPH + {0x8781, 0x5665}, //1205 #CJK UNIFIED IDEOGRAPH + {0x8782, 0x5666}, //1206 #CJK UNIFIED IDEOGRAPH + {0x8783, 0x5667}, //1207 #CJK UNIFIED IDEOGRAPH + {0x8784, 0x566D}, //1208 #CJK UNIFIED IDEOGRAPH + {0x8785, 0x566E}, //1209 #CJK UNIFIED IDEOGRAPH + {0x8786, 0x566F}, //1210 #CJK UNIFIED IDEOGRAPH + {0x8787, 0x5670}, //1211 #CJK UNIFIED IDEOGRAPH + {0x8788, 0x5672}, //1212 #CJK UNIFIED IDEOGRAPH + {0x8789, 0x5673}, //1213 #CJK UNIFIED IDEOGRAPH + {0x878A, 0x5674}, //1214 #CJK UNIFIED IDEOGRAPH + {0x878B, 0x5675}, //1215 #CJK UNIFIED IDEOGRAPH + {0x878C, 0x5677}, //1216 #CJK UNIFIED IDEOGRAPH + {0x878D, 0x5678}, //1217 #CJK UNIFIED IDEOGRAPH + {0x878E, 0x5679}, //1218 #CJK UNIFIED IDEOGRAPH + {0x878F, 0x567A}, //1219 #CJK UNIFIED IDEOGRAPH + {0x8790, 0x567D}, //1220 #CJK UNIFIED IDEOGRAPH + {0x8791, 0x567E}, //1221 #CJK UNIFIED IDEOGRAPH + {0x8792, 0x567F}, //1222 #CJK UNIFIED IDEOGRAPH + {0x8793, 0x5680}, //1223 #CJK UNIFIED IDEOGRAPH + {0x8794, 0x5681}, //1224 #CJK UNIFIED IDEOGRAPH + {0x8795, 0x5682}, //1225 #CJK UNIFIED IDEOGRAPH + {0x8796, 0x5683}, //1226 #CJK UNIFIED IDEOGRAPH + {0x8797, 0x5684}, //1227 #CJK UNIFIED IDEOGRAPH + {0x8798, 0x5687}, //1228 #CJK UNIFIED IDEOGRAPH + {0x8799, 0x5688}, //1229 #CJK UNIFIED IDEOGRAPH + {0x879A, 0x5689}, //1230 #CJK UNIFIED IDEOGRAPH + {0x879B, 0x568A}, //1231 #CJK UNIFIED IDEOGRAPH + {0x879C, 0x568B}, //1232 #CJK UNIFIED IDEOGRAPH + {0x879D, 0x568C}, //1233 #CJK UNIFIED IDEOGRAPH + {0x879E, 0x568D}, //1234 #CJK UNIFIED IDEOGRAPH + {0x879F, 0x5690}, //1235 #CJK UNIFIED IDEOGRAPH + {0x87A0, 0x5691}, //1236 #CJK UNIFIED IDEOGRAPH + {0x87A1, 0x5692}, //1237 #CJK UNIFIED IDEOGRAPH + {0x87A2, 0x5694}, //1238 #CJK UNIFIED IDEOGRAPH + {0x87A3, 0x5695}, //1239 #CJK UNIFIED IDEOGRAPH + {0x87A4, 0x5696}, //1240 #CJK UNIFIED IDEOGRAPH + {0x87A5, 0x5697}, //1241 #CJK UNIFIED IDEOGRAPH + {0x87A6, 0x5698}, //1242 #CJK UNIFIED IDEOGRAPH + {0x87A7, 0x5699}, //1243 #CJK UNIFIED IDEOGRAPH + {0x87A8, 0x569A}, //1244 #CJK UNIFIED IDEOGRAPH + {0x87A9, 0x569B}, //1245 #CJK UNIFIED IDEOGRAPH + {0x87AA, 0x569C}, //1246 #CJK UNIFIED IDEOGRAPH + {0x87AB, 0x569D}, //1247 #CJK UNIFIED IDEOGRAPH + {0x87AC, 0x569E}, //1248 #CJK UNIFIED IDEOGRAPH + {0x87AD, 0x569F}, //1249 #CJK UNIFIED IDEOGRAPH + {0x87AE, 0x56A0}, //1250 #CJK UNIFIED IDEOGRAPH + {0x87AF, 0x56A1}, //1251 #CJK UNIFIED IDEOGRAPH + {0x87B0, 0x56A2}, //1252 #CJK UNIFIED IDEOGRAPH + {0x87B1, 0x56A4}, //1253 #CJK UNIFIED IDEOGRAPH + {0x87B2, 0x56A5}, //1254 #CJK UNIFIED IDEOGRAPH + {0x87B3, 0x56A6}, //1255 #CJK UNIFIED IDEOGRAPH + {0x87B4, 0x56A7}, //1256 #CJK UNIFIED IDEOGRAPH + {0x87B5, 0x56A8}, //1257 #CJK UNIFIED IDEOGRAPH + {0x87B6, 0x56A9}, //1258 #CJK UNIFIED IDEOGRAPH + {0x87B7, 0x56AA}, //1259 #CJK UNIFIED IDEOGRAPH + {0x87B8, 0x56AB}, //1260 #CJK UNIFIED IDEOGRAPH + {0x87B9, 0x56AC}, //1261 #CJK UNIFIED IDEOGRAPH + {0x87BA, 0x56AD}, //1262 #CJK UNIFIED IDEOGRAPH + {0x87BB, 0x56AE}, //1263 #CJK UNIFIED IDEOGRAPH + {0x87BC, 0x56B0}, //1264 #CJK UNIFIED IDEOGRAPH + {0x87BD, 0x56B1}, //1265 #CJK UNIFIED IDEOGRAPH + {0x87BE, 0x56B2}, //1266 #CJK UNIFIED IDEOGRAPH + {0x87BF, 0x56B3}, //1267 #CJK UNIFIED IDEOGRAPH + {0x87C0, 0x56B4}, //1268 #CJK UNIFIED IDEOGRAPH + {0x87C1, 0x56B5}, //1269 #CJK UNIFIED IDEOGRAPH + {0x87C2, 0x56B6}, //1270 #CJK UNIFIED IDEOGRAPH + {0x87C3, 0x56B8}, //1271 #CJK UNIFIED IDEOGRAPH + {0x87C4, 0x56B9}, //1272 #CJK UNIFIED IDEOGRAPH + {0x87C5, 0x56BA}, //1273 #CJK UNIFIED IDEOGRAPH + {0x87C6, 0x56BB}, //1274 #CJK UNIFIED IDEOGRAPH + {0x87C7, 0x56BD}, //1275 #CJK UNIFIED IDEOGRAPH + {0x87C8, 0x56BE}, //1276 #CJK UNIFIED IDEOGRAPH + {0x87C9, 0x56BF}, //1277 #CJK UNIFIED IDEOGRAPH + {0x87CA, 0x56C0}, //1278 #CJK UNIFIED IDEOGRAPH + {0x87CB, 0x56C1}, //1279 #CJK UNIFIED IDEOGRAPH + {0x87CC, 0x56C2}, //1280 #CJK UNIFIED IDEOGRAPH + {0x87CD, 0x56C3}, //1281 #CJK UNIFIED IDEOGRAPH + {0x87CE, 0x56C4}, //1282 #CJK UNIFIED IDEOGRAPH + {0x87CF, 0x56C5}, //1283 #CJK UNIFIED IDEOGRAPH + {0x87D0, 0x56C6}, //1284 #CJK UNIFIED IDEOGRAPH + {0x87D1, 0x56C7}, //1285 #CJK UNIFIED IDEOGRAPH + {0x87D2, 0x56C8}, //1286 #CJK UNIFIED IDEOGRAPH + {0x87D3, 0x56C9}, //1287 #CJK UNIFIED IDEOGRAPH + {0x87D4, 0x56CB}, //1288 #CJK UNIFIED IDEOGRAPH + {0x87D5, 0x56CC}, //1289 #CJK UNIFIED IDEOGRAPH + {0x87D6, 0x56CD}, //1290 #CJK UNIFIED IDEOGRAPH + {0x87D7, 0x56CE}, //1291 #CJK UNIFIED IDEOGRAPH + {0x87D8, 0x56CF}, //1292 #CJK UNIFIED IDEOGRAPH + {0x87D9, 0x56D0}, //1293 #CJK UNIFIED IDEOGRAPH + {0x87DA, 0x56D1}, //1294 #CJK UNIFIED IDEOGRAPH + {0x87DB, 0x56D2}, //1295 #CJK UNIFIED IDEOGRAPH + {0x87DC, 0x56D3}, //1296 #CJK UNIFIED IDEOGRAPH + {0x87DD, 0x56D5}, //1297 #CJK UNIFIED IDEOGRAPH + {0x87DE, 0x56D6}, //1298 #CJK UNIFIED IDEOGRAPH + {0x87DF, 0x56D8}, //1299 #CJK UNIFIED IDEOGRAPH + {0x87E0, 0x56D9}, //1300 #CJK UNIFIED IDEOGRAPH + {0x87E1, 0x56DC}, //1301 #CJK UNIFIED IDEOGRAPH + {0x87E2, 0x56E3}, //1302 #CJK UNIFIED IDEOGRAPH + {0x87E3, 0x56E5}, //1303 #CJK UNIFIED IDEOGRAPH + {0x87E4, 0x56E6}, //1304 #CJK UNIFIED IDEOGRAPH + {0x87E5, 0x56E7}, //1305 #CJK UNIFIED IDEOGRAPH + {0x87E6, 0x56E8}, //1306 #CJK UNIFIED IDEOGRAPH + {0x87E7, 0x56E9}, //1307 #CJK UNIFIED IDEOGRAPH + {0x87E8, 0x56EA}, //1308 #CJK UNIFIED IDEOGRAPH + {0x87E9, 0x56EC}, //1309 #CJK UNIFIED IDEOGRAPH + {0x87EA, 0x56EE}, //1310 #CJK UNIFIED IDEOGRAPH + {0x87EB, 0x56EF}, //1311 #CJK UNIFIED IDEOGRAPH + {0x87EC, 0x56F2}, //1312 #CJK UNIFIED IDEOGRAPH + {0x87ED, 0x56F3}, //1313 #CJK UNIFIED IDEOGRAPH + {0x87EE, 0x56F6}, //1314 #CJK UNIFIED IDEOGRAPH + {0x87EF, 0x56F7}, //1315 #CJK UNIFIED IDEOGRAPH + {0x87F0, 0x56F8}, //1316 #CJK UNIFIED IDEOGRAPH + {0x87F1, 0x56FB}, //1317 #CJK UNIFIED IDEOGRAPH + {0x87F2, 0x56FC}, //1318 #CJK UNIFIED IDEOGRAPH + {0x87F3, 0x5700}, //1319 #CJK UNIFIED IDEOGRAPH + {0x87F4, 0x5701}, //1320 #CJK UNIFIED IDEOGRAPH + {0x87F5, 0x5702}, //1321 #CJK UNIFIED IDEOGRAPH + {0x87F6, 0x5705}, //1322 #CJK UNIFIED IDEOGRAPH + {0x87F7, 0x5707}, //1323 #CJK UNIFIED IDEOGRAPH + {0x87F8, 0x570B}, //1324 #CJK UNIFIED IDEOGRAPH + {0x87F9, 0x570C}, //1325 #CJK UNIFIED IDEOGRAPH + {0x87FA, 0x570D}, //1326 #CJK UNIFIED IDEOGRAPH + {0x87FB, 0x570E}, //1327 #CJK UNIFIED IDEOGRAPH + {0x87FC, 0x570F}, //1328 #CJK UNIFIED IDEOGRAPH + {0x87FD, 0x5710}, //1329 #CJK UNIFIED IDEOGRAPH + {0x87FE, 0x5711}, //1330 #CJK UNIFIED IDEOGRAPH + {0x8840, 0x5712}, //1331 #CJK UNIFIED IDEOGRAPH + {0x8841, 0x5713}, //1332 #CJK UNIFIED IDEOGRAPH + {0x8842, 0x5714}, //1333 #CJK UNIFIED IDEOGRAPH + {0x8843, 0x5715}, //1334 #CJK UNIFIED IDEOGRAPH + {0x8844, 0x5716}, //1335 #CJK UNIFIED IDEOGRAPH + {0x8845, 0x5717}, //1336 #CJK UNIFIED IDEOGRAPH + {0x8846, 0x5718}, //1337 #CJK UNIFIED IDEOGRAPH + {0x8847, 0x5719}, //1338 #CJK UNIFIED IDEOGRAPH + {0x8848, 0x571A}, //1339 #CJK UNIFIED IDEOGRAPH + {0x8849, 0x571B}, //1340 #CJK UNIFIED IDEOGRAPH + {0x884A, 0x571D}, //1341 #CJK UNIFIED IDEOGRAPH + {0x884B, 0x571E}, //1342 #CJK UNIFIED IDEOGRAPH + {0x884C, 0x5720}, //1343 #CJK UNIFIED IDEOGRAPH + {0x884D, 0x5721}, //1344 #CJK UNIFIED IDEOGRAPH + {0x884E, 0x5722}, //1345 #CJK UNIFIED IDEOGRAPH + {0x884F, 0x5724}, //1346 #CJK UNIFIED IDEOGRAPH + {0x8850, 0x5725}, //1347 #CJK UNIFIED IDEOGRAPH + {0x8851, 0x5726}, //1348 #CJK UNIFIED IDEOGRAPH + {0x8852, 0x5727}, //1349 #CJK UNIFIED IDEOGRAPH + {0x8853, 0x572B}, //1350 #CJK UNIFIED IDEOGRAPH + {0x8854, 0x5731}, //1351 #CJK UNIFIED IDEOGRAPH + {0x8855, 0x5732}, //1352 #CJK UNIFIED IDEOGRAPH + {0x8856, 0x5734}, //1353 #CJK UNIFIED IDEOGRAPH + {0x8857, 0x5735}, //1354 #CJK UNIFIED IDEOGRAPH + {0x8858, 0x5736}, //1355 #CJK UNIFIED IDEOGRAPH + {0x8859, 0x5737}, //1356 #CJK UNIFIED IDEOGRAPH + {0x885A, 0x5738}, //1357 #CJK UNIFIED IDEOGRAPH + {0x885B, 0x573C}, //1358 #CJK UNIFIED IDEOGRAPH + {0x885C, 0x573D}, //1359 #CJK UNIFIED IDEOGRAPH + {0x885D, 0x573F}, //1360 #CJK UNIFIED IDEOGRAPH + {0x885E, 0x5741}, //1361 #CJK UNIFIED IDEOGRAPH + {0x885F, 0x5743}, //1362 #CJK UNIFIED IDEOGRAPH + {0x8860, 0x5744}, //1363 #CJK UNIFIED IDEOGRAPH + {0x8861, 0x5745}, //1364 #CJK UNIFIED IDEOGRAPH + {0x8862, 0x5746}, //1365 #CJK UNIFIED IDEOGRAPH + {0x8863, 0x5748}, //1366 #CJK UNIFIED IDEOGRAPH + {0x8864, 0x5749}, //1367 #CJK UNIFIED IDEOGRAPH + {0x8865, 0x574B}, //1368 #CJK UNIFIED IDEOGRAPH + {0x8866, 0x5752}, //1369 #CJK UNIFIED IDEOGRAPH + {0x8867, 0x5753}, //1370 #CJK UNIFIED IDEOGRAPH + {0x8868, 0x5754}, //1371 #CJK UNIFIED IDEOGRAPH + {0x8869, 0x5755}, //1372 #CJK UNIFIED IDEOGRAPH + {0x886A, 0x5756}, //1373 #CJK UNIFIED IDEOGRAPH + {0x886B, 0x5758}, //1374 #CJK UNIFIED IDEOGRAPH + {0x886C, 0x5759}, //1375 #CJK UNIFIED IDEOGRAPH + {0x886D, 0x5762}, //1376 #CJK UNIFIED IDEOGRAPH + {0x886E, 0x5763}, //1377 #CJK UNIFIED IDEOGRAPH + {0x886F, 0x5765}, //1378 #CJK UNIFIED IDEOGRAPH + {0x8870, 0x5767}, //1379 #CJK UNIFIED IDEOGRAPH + {0x8871, 0x576C}, //1380 #CJK UNIFIED IDEOGRAPH + {0x8872, 0x576E}, //1381 #CJK UNIFIED IDEOGRAPH + {0x8873, 0x5770}, //1382 #CJK UNIFIED IDEOGRAPH + {0x8874, 0x5771}, //1383 #CJK UNIFIED IDEOGRAPH + {0x8875, 0x5772}, //1384 #CJK UNIFIED IDEOGRAPH + {0x8876, 0x5774}, //1385 #CJK UNIFIED IDEOGRAPH + {0x8877, 0x5775}, //1386 #CJK UNIFIED IDEOGRAPH + {0x8878, 0x5778}, //1387 #CJK UNIFIED IDEOGRAPH + {0x8879, 0x5779}, //1388 #CJK UNIFIED IDEOGRAPH + {0x887A, 0x577A}, //1389 #CJK UNIFIED IDEOGRAPH + {0x887B, 0x577D}, //1390 #CJK UNIFIED IDEOGRAPH + {0x887C, 0x577E}, //1391 #CJK UNIFIED IDEOGRAPH + {0x887D, 0x577F}, //1392 #CJK UNIFIED IDEOGRAPH + {0x887E, 0x5780}, //1393 #CJK UNIFIED IDEOGRAPH + {0x8880, 0x5781}, //1394 #CJK UNIFIED IDEOGRAPH + {0x8881, 0x5787}, //1395 #CJK UNIFIED IDEOGRAPH + {0x8882, 0x5788}, //1396 #CJK UNIFIED IDEOGRAPH + {0x8883, 0x5789}, //1397 #CJK UNIFIED IDEOGRAPH + {0x8884, 0x578A}, //1398 #CJK UNIFIED IDEOGRAPH + {0x8885, 0x578D}, //1399 #CJK UNIFIED IDEOGRAPH + {0x8886, 0x578E}, //1400 #CJK UNIFIED IDEOGRAPH + {0x8887, 0x578F}, //1401 #CJK UNIFIED IDEOGRAPH + {0x8888, 0x5790}, //1402 #CJK UNIFIED IDEOGRAPH + {0x8889, 0x5791}, //1403 #CJK UNIFIED IDEOGRAPH + {0x888A, 0x5794}, //1404 #CJK UNIFIED IDEOGRAPH + {0x888B, 0x5795}, //1405 #CJK UNIFIED IDEOGRAPH + {0x888C, 0x5796}, //1406 #CJK UNIFIED IDEOGRAPH + {0x888D, 0x5797}, //1407 #CJK UNIFIED IDEOGRAPH + {0x888E, 0x5798}, //1408 #CJK UNIFIED IDEOGRAPH + {0x888F, 0x5799}, //1409 #CJK UNIFIED IDEOGRAPH + {0x8890, 0x579A}, //1410 #CJK UNIFIED IDEOGRAPH + {0x8891, 0x579C}, //1411 #CJK UNIFIED IDEOGRAPH + {0x8892, 0x579D}, //1412 #CJK UNIFIED IDEOGRAPH + {0x8893, 0x579E}, //1413 #CJK UNIFIED IDEOGRAPH + {0x8894, 0x579F}, //1414 #CJK UNIFIED IDEOGRAPH + {0x8895, 0x57A5}, //1415 #CJK UNIFIED IDEOGRAPH + {0x8896, 0x57A8}, //1416 #CJK UNIFIED IDEOGRAPH + {0x8897, 0x57AA}, //1417 #CJK UNIFIED IDEOGRAPH + {0x8898, 0x57AC}, //1418 #CJK UNIFIED IDEOGRAPH + {0x8899, 0x57AF}, //1419 #CJK UNIFIED IDEOGRAPH + {0x889A, 0x57B0}, //1420 #CJK UNIFIED IDEOGRAPH + {0x889B, 0x57B1}, //1421 #CJK UNIFIED IDEOGRAPH + {0x889C, 0x57B3}, //1422 #CJK UNIFIED IDEOGRAPH + {0x889D, 0x57B5}, //1423 #CJK UNIFIED IDEOGRAPH + {0x889E, 0x57B6}, //1424 #CJK UNIFIED IDEOGRAPH + {0x889F, 0x57B7}, //1425 #CJK UNIFIED IDEOGRAPH + {0x88A0, 0x57B9}, //1426 #CJK UNIFIED IDEOGRAPH + {0x88A1, 0x57BA}, //1427 #CJK UNIFIED IDEOGRAPH + {0x88A2, 0x57BB}, //1428 #CJK UNIFIED IDEOGRAPH + {0x88A3, 0x57BC}, //1429 #CJK UNIFIED IDEOGRAPH + {0x88A4, 0x57BD}, //1430 #CJK UNIFIED IDEOGRAPH + {0x88A5, 0x57BE}, //1431 #CJK UNIFIED IDEOGRAPH + {0x88A6, 0x57BF}, //1432 #CJK UNIFIED IDEOGRAPH + {0x88A7, 0x57C0}, //1433 #CJK UNIFIED IDEOGRAPH + {0x88A8, 0x57C1}, //1434 #CJK UNIFIED IDEOGRAPH + {0x88A9, 0x57C4}, //1435 #CJK UNIFIED IDEOGRAPH + {0x88AA, 0x57C5}, //1436 #CJK UNIFIED IDEOGRAPH + {0x88AB, 0x57C6}, //1437 #CJK UNIFIED IDEOGRAPH + {0x88AC, 0x57C7}, //1438 #CJK UNIFIED IDEOGRAPH + {0x88AD, 0x57C8}, //1439 #CJK UNIFIED IDEOGRAPH + {0x88AE, 0x57C9}, //1440 #CJK UNIFIED IDEOGRAPH + {0x88AF, 0x57CA}, //1441 #CJK UNIFIED IDEOGRAPH + {0x88B0, 0x57CC}, //1442 #CJK UNIFIED IDEOGRAPH + {0x88B1, 0x57CD}, //1443 #CJK UNIFIED IDEOGRAPH + {0x88B2, 0x57D0}, //1444 #CJK UNIFIED IDEOGRAPH + {0x88B3, 0x57D1}, //1445 #CJK UNIFIED IDEOGRAPH + {0x88B4, 0x57D3}, //1446 #CJK UNIFIED IDEOGRAPH + {0x88B5, 0x57D6}, //1447 #CJK UNIFIED IDEOGRAPH + {0x88B6, 0x57D7}, //1448 #CJK UNIFIED IDEOGRAPH + {0x88B7, 0x57DB}, //1449 #CJK UNIFIED IDEOGRAPH + {0x88B8, 0x57DC}, //1450 #CJK UNIFIED IDEOGRAPH + {0x88B9, 0x57DE}, //1451 #CJK UNIFIED IDEOGRAPH + {0x88BA, 0x57E1}, //1452 #CJK UNIFIED IDEOGRAPH + {0x88BB, 0x57E2}, //1453 #CJK UNIFIED IDEOGRAPH + {0x88BC, 0x57E3}, //1454 #CJK UNIFIED IDEOGRAPH + {0x88BD, 0x57E5}, //1455 #CJK UNIFIED IDEOGRAPH + {0x88BE, 0x57E6}, //1456 #CJK UNIFIED IDEOGRAPH + {0x88BF, 0x57E7}, //1457 #CJK UNIFIED IDEOGRAPH + {0x88C0, 0x57E8}, //1458 #CJK UNIFIED IDEOGRAPH + {0x88C1, 0x57E9}, //1459 #CJK UNIFIED IDEOGRAPH + {0x88C2, 0x57EA}, //1460 #CJK UNIFIED IDEOGRAPH + {0x88C3, 0x57EB}, //1461 #CJK UNIFIED IDEOGRAPH + {0x88C4, 0x57EC}, //1462 #CJK UNIFIED IDEOGRAPH + {0x88C5, 0x57EE}, //1463 #CJK UNIFIED IDEOGRAPH + {0x88C6, 0x57F0}, //1464 #CJK UNIFIED IDEOGRAPH + {0x88C7, 0x57F1}, //1465 #CJK UNIFIED IDEOGRAPH + {0x88C8, 0x57F2}, //1466 #CJK UNIFIED IDEOGRAPH + {0x88C9, 0x57F3}, //1467 #CJK UNIFIED IDEOGRAPH + {0x88CA, 0x57F5}, //1468 #CJK UNIFIED IDEOGRAPH + {0x88CB, 0x57F6}, //1469 #CJK UNIFIED IDEOGRAPH + {0x88CC, 0x57F7}, //1470 #CJK UNIFIED IDEOGRAPH + {0x88CD, 0x57FB}, //1471 #CJK UNIFIED IDEOGRAPH + {0x88CE, 0x57FC}, //1472 #CJK UNIFIED IDEOGRAPH + {0x88CF, 0x57FE}, //1473 #CJK UNIFIED IDEOGRAPH + {0x88D0, 0x57FF}, //1474 #CJK UNIFIED IDEOGRAPH + {0x88D1, 0x5801}, //1475 #CJK UNIFIED IDEOGRAPH + {0x88D2, 0x5803}, //1476 #CJK UNIFIED IDEOGRAPH + {0x88D3, 0x5804}, //1477 #CJK UNIFIED IDEOGRAPH + {0x88D4, 0x5805}, //1478 #CJK UNIFIED IDEOGRAPH + {0x88D5, 0x5808}, //1479 #CJK UNIFIED IDEOGRAPH + {0x88D6, 0x5809}, //1480 #CJK UNIFIED IDEOGRAPH + {0x88D7, 0x580A}, //1481 #CJK UNIFIED IDEOGRAPH + {0x88D8, 0x580C}, //1482 #CJK UNIFIED IDEOGRAPH + {0x88D9, 0x580E}, //1483 #CJK UNIFIED IDEOGRAPH + {0x88DA, 0x580F}, //1484 #CJK UNIFIED IDEOGRAPH + {0x88DB, 0x5810}, //1485 #CJK UNIFIED IDEOGRAPH + {0x88DC, 0x5812}, //1486 #CJK UNIFIED IDEOGRAPH + {0x88DD, 0x5813}, //1487 #CJK UNIFIED IDEOGRAPH + {0x88DE, 0x5814}, //1488 #CJK UNIFIED IDEOGRAPH + {0x88DF, 0x5816}, //1489 #CJK UNIFIED IDEOGRAPH + {0x88E0, 0x5817}, //1490 #CJK UNIFIED IDEOGRAPH + {0x88E1, 0x5818}, //1491 #CJK UNIFIED IDEOGRAPH + {0x88E2, 0x581A}, //1492 #CJK UNIFIED IDEOGRAPH + {0x88E3, 0x581B}, //1493 #CJK UNIFIED IDEOGRAPH + {0x88E4, 0x581C}, //1494 #CJK UNIFIED IDEOGRAPH + {0x88E5, 0x581D}, //1495 #CJK UNIFIED IDEOGRAPH + {0x88E6, 0x581F}, //1496 #CJK UNIFIED IDEOGRAPH + {0x88E7, 0x5822}, //1497 #CJK UNIFIED IDEOGRAPH + {0x88E8, 0x5823}, //1498 #CJK UNIFIED IDEOGRAPH + {0x88E9, 0x5825}, //1499 #CJK UNIFIED IDEOGRAPH + {0x88EA, 0x5826}, //1500 #CJK UNIFIED IDEOGRAPH + {0x88EB, 0x5827}, //1501 #CJK UNIFIED IDEOGRAPH + {0x88EC, 0x5828}, //1502 #CJK UNIFIED IDEOGRAPH + {0x88ED, 0x5829}, //1503 #CJK UNIFIED IDEOGRAPH + {0x88EE, 0x582B}, //1504 #CJK UNIFIED IDEOGRAPH + {0x88EF, 0x582C}, //1505 #CJK UNIFIED IDEOGRAPH + {0x88F0, 0x582D}, //1506 #CJK UNIFIED IDEOGRAPH + {0x88F1, 0x582E}, //1507 #CJK UNIFIED IDEOGRAPH + {0x88F2, 0x582F}, //1508 #CJK UNIFIED IDEOGRAPH + {0x88F3, 0x5831}, //1509 #CJK UNIFIED IDEOGRAPH + {0x88F4, 0x5832}, //1510 #CJK UNIFIED IDEOGRAPH + {0x88F5, 0x5833}, //1511 #CJK UNIFIED IDEOGRAPH + {0x88F6, 0x5834}, //1512 #CJK UNIFIED IDEOGRAPH + {0x88F7, 0x5836}, //1513 #CJK UNIFIED IDEOGRAPH + {0x88F8, 0x5837}, //1514 #CJK UNIFIED IDEOGRAPH + {0x88F9, 0x5838}, //1515 #CJK UNIFIED IDEOGRAPH + {0x88FA, 0x5839}, //1516 #CJK UNIFIED IDEOGRAPH + {0x88FB, 0x583A}, //1517 #CJK UNIFIED IDEOGRAPH + {0x88FC, 0x583B}, //1518 #CJK UNIFIED IDEOGRAPH + {0x88FD, 0x583C}, //1519 #CJK UNIFIED IDEOGRAPH + {0x88FE, 0x583D}, //1520 #CJK UNIFIED IDEOGRAPH + {0x8940, 0x583E}, //1521 #CJK UNIFIED IDEOGRAPH + {0x8941, 0x583F}, //1522 #CJK UNIFIED IDEOGRAPH + {0x8942, 0x5840}, //1523 #CJK UNIFIED IDEOGRAPH + {0x8943, 0x5841}, //1524 #CJK UNIFIED IDEOGRAPH + {0x8944, 0x5842}, //1525 #CJK UNIFIED IDEOGRAPH + {0x8945, 0x5843}, //1526 #CJK UNIFIED IDEOGRAPH + {0x8946, 0x5845}, //1527 #CJK UNIFIED IDEOGRAPH + {0x8947, 0x5846}, //1528 #CJK UNIFIED IDEOGRAPH + {0x8948, 0x5847}, //1529 #CJK UNIFIED IDEOGRAPH + {0x8949, 0x5848}, //1530 #CJK UNIFIED IDEOGRAPH + {0x894A, 0x5849}, //1531 #CJK UNIFIED IDEOGRAPH + {0x894B, 0x584A}, //1532 #CJK UNIFIED IDEOGRAPH + {0x894C, 0x584B}, //1533 #CJK UNIFIED IDEOGRAPH + {0x894D, 0x584E}, //1534 #CJK UNIFIED IDEOGRAPH + {0x894E, 0x584F}, //1535 #CJK UNIFIED IDEOGRAPH + {0x894F, 0x5850}, //1536 #CJK UNIFIED IDEOGRAPH + {0x8950, 0x5852}, //1537 #CJK UNIFIED IDEOGRAPH + {0x8951, 0x5853}, //1538 #CJK UNIFIED IDEOGRAPH + {0x8952, 0x5855}, //1539 #CJK UNIFIED IDEOGRAPH + {0x8953, 0x5856}, //1540 #CJK UNIFIED IDEOGRAPH + {0x8954, 0x5857}, //1541 #CJK UNIFIED IDEOGRAPH + {0x8955, 0x5859}, //1542 #CJK UNIFIED IDEOGRAPH + {0x8956, 0x585A}, //1543 #CJK UNIFIED IDEOGRAPH + {0x8957, 0x585B}, //1544 #CJK UNIFIED IDEOGRAPH + {0x8958, 0x585C}, //1545 #CJK UNIFIED IDEOGRAPH + {0x8959, 0x585D}, //1546 #CJK UNIFIED IDEOGRAPH + {0x895A, 0x585F}, //1547 #CJK UNIFIED IDEOGRAPH + {0x895B, 0x5860}, //1548 #CJK UNIFIED IDEOGRAPH + {0x895C, 0x5861}, //1549 #CJK UNIFIED IDEOGRAPH + {0x895D, 0x5862}, //1550 #CJK UNIFIED IDEOGRAPH + {0x895E, 0x5863}, //1551 #CJK UNIFIED IDEOGRAPH + {0x895F, 0x5864}, //1552 #CJK UNIFIED IDEOGRAPH + {0x8960, 0x5866}, //1553 #CJK UNIFIED IDEOGRAPH + {0x8961, 0x5867}, //1554 #CJK UNIFIED IDEOGRAPH + {0x8962, 0x5868}, //1555 #CJK UNIFIED IDEOGRAPH + {0x8963, 0x5869}, //1556 #CJK UNIFIED IDEOGRAPH + {0x8964, 0x586A}, //1557 #CJK UNIFIED IDEOGRAPH + {0x8965, 0x586D}, //1558 #CJK UNIFIED IDEOGRAPH + {0x8966, 0x586E}, //1559 #CJK UNIFIED IDEOGRAPH + {0x8967, 0x586F}, //1560 #CJK UNIFIED IDEOGRAPH + {0x8968, 0x5870}, //1561 #CJK UNIFIED IDEOGRAPH + {0x8969, 0x5871}, //1562 #CJK UNIFIED IDEOGRAPH + {0x896A, 0x5872}, //1563 #CJK UNIFIED IDEOGRAPH + {0x896B, 0x5873}, //1564 #CJK UNIFIED IDEOGRAPH + {0x896C, 0x5874}, //1565 #CJK UNIFIED IDEOGRAPH + {0x896D, 0x5875}, //1566 #CJK UNIFIED IDEOGRAPH + {0x896E, 0x5876}, //1567 #CJK UNIFIED IDEOGRAPH + {0x896F, 0x5877}, //1568 #CJK UNIFIED IDEOGRAPH + {0x8970, 0x5878}, //1569 #CJK UNIFIED IDEOGRAPH + {0x8971, 0x5879}, //1570 #CJK UNIFIED IDEOGRAPH + {0x8972, 0x587A}, //1571 #CJK UNIFIED IDEOGRAPH + {0x8973, 0x587B}, //1572 #CJK UNIFIED IDEOGRAPH + {0x8974, 0x587C}, //1573 #CJK UNIFIED IDEOGRAPH + {0x8975, 0x587D}, //1574 #CJK UNIFIED IDEOGRAPH + {0x8976, 0x587F}, //1575 #CJK UNIFIED IDEOGRAPH + {0x8977, 0x5882}, //1576 #CJK UNIFIED IDEOGRAPH + {0x8978, 0x5884}, //1577 #CJK UNIFIED IDEOGRAPH + {0x8979, 0x5886}, //1578 #CJK UNIFIED IDEOGRAPH + {0x897A, 0x5887}, //1579 #CJK UNIFIED IDEOGRAPH + {0x897B, 0x5888}, //1580 #CJK UNIFIED IDEOGRAPH + {0x897C, 0x588A}, //1581 #CJK UNIFIED IDEOGRAPH + {0x897D, 0x588B}, //1582 #CJK UNIFIED IDEOGRAPH + {0x897E, 0x588C}, //1583 #CJK UNIFIED IDEOGRAPH + {0x8980, 0x588D}, //1584 #CJK UNIFIED IDEOGRAPH + {0x8981, 0x588E}, //1585 #CJK UNIFIED IDEOGRAPH + {0x8982, 0x588F}, //1586 #CJK UNIFIED IDEOGRAPH + {0x8983, 0x5890}, //1587 #CJK UNIFIED IDEOGRAPH + {0x8984, 0x5891}, //1588 #CJK UNIFIED IDEOGRAPH + {0x8985, 0x5894}, //1589 #CJK UNIFIED IDEOGRAPH + {0x8986, 0x5895}, //1590 #CJK UNIFIED IDEOGRAPH + {0x8987, 0x5896}, //1591 #CJK UNIFIED IDEOGRAPH + {0x8988, 0x5897}, //1592 #CJK UNIFIED IDEOGRAPH + {0x8989, 0x5898}, //1593 #CJK UNIFIED IDEOGRAPH + {0x898A, 0x589B}, //1594 #CJK UNIFIED IDEOGRAPH + {0x898B, 0x589C}, //1595 #CJK UNIFIED IDEOGRAPH + {0x898C, 0x589D}, //1596 #CJK UNIFIED IDEOGRAPH + {0x898D, 0x58A0}, //1597 #CJK UNIFIED IDEOGRAPH + {0x898E, 0x58A1}, //1598 #CJK UNIFIED IDEOGRAPH + {0x898F, 0x58A2}, //1599 #CJK UNIFIED IDEOGRAPH + {0x8990, 0x58A3}, //1600 #CJK UNIFIED IDEOGRAPH + {0x8991, 0x58A4}, //1601 #CJK UNIFIED IDEOGRAPH + {0x8992, 0x58A5}, //1602 #CJK UNIFIED IDEOGRAPH + {0x8993, 0x58A6}, //1603 #CJK UNIFIED IDEOGRAPH + {0x8994, 0x58A7}, //1604 #CJK UNIFIED IDEOGRAPH + {0x8995, 0x58AA}, //1605 #CJK UNIFIED IDEOGRAPH + {0x8996, 0x58AB}, //1606 #CJK UNIFIED IDEOGRAPH + {0x8997, 0x58AC}, //1607 #CJK UNIFIED IDEOGRAPH + {0x8998, 0x58AD}, //1608 #CJK UNIFIED IDEOGRAPH + {0x8999, 0x58AE}, //1609 #CJK UNIFIED IDEOGRAPH + {0x899A, 0x58AF}, //1610 #CJK UNIFIED IDEOGRAPH + {0x899B, 0x58B0}, //1611 #CJK UNIFIED IDEOGRAPH + {0x899C, 0x58B1}, //1612 #CJK UNIFIED IDEOGRAPH + {0x899D, 0x58B2}, //1613 #CJK UNIFIED IDEOGRAPH + {0x899E, 0x58B3}, //1614 #CJK UNIFIED IDEOGRAPH + {0x899F, 0x58B4}, //1615 #CJK UNIFIED IDEOGRAPH + {0x89A0, 0x58B5}, //1616 #CJK UNIFIED IDEOGRAPH + {0x89A1, 0x58B6}, //1617 #CJK UNIFIED IDEOGRAPH + {0x89A2, 0x58B7}, //1618 #CJK UNIFIED IDEOGRAPH + {0x89A3, 0x58B8}, //1619 #CJK UNIFIED IDEOGRAPH + {0x89A4, 0x58B9}, //1620 #CJK UNIFIED IDEOGRAPH + {0x89A5, 0x58BA}, //1621 #CJK UNIFIED IDEOGRAPH + {0x89A6, 0x58BB}, //1622 #CJK UNIFIED IDEOGRAPH + {0x89A7, 0x58BD}, //1623 #CJK UNIFIED IDEOGRAPH + {0x89A8, 0x58BE}, //1624 #CJK UNIFIED IDEOGRAPH + {0x89A9, 0x58BF}, //1625 #CJK UNIFIED IDEOGRAPH + {0x89AA, 0x58C0}, //1626 #CJK UNIFIED IDEOGRAPH + {0x89AB, 0x58C2}, //1627 #CJK UNIFIED IDEOGRAPH + {0x89AC, 0x58C3}, //1628 #CJK UNIFIED IDEOGRAPH + {0x89AD, 0x58C4}, //1629 #CJK UNIFIED IDEOGRAPH + {0x89AE, 0x58C6}, //1630 #CJK UNIFIED IDEOGRAPH + {0x89AF, 0x58C7}, //1631 #CJK UNIFIED IDEOGRAPH + {0x89B0, 0x58C8}, //1632 #CJK UNIFIED IDEOGRAPH + {0x89B1, 0x58C9}, //1633 #CJK UNIFIED IDEOGRAPH + {0x89B2, 0x58CA}, //1634 #CJK UNIFIED IDEOGRAPH + {0x89B3, 0x58CB}, //1635 #CJK UNIFIED IDEOGRAPH + {0x89B4, 0x58CC}, //1636 #CJK UNIFIED IDEOGRAPH + {0x89B5, 0x58CD}, //1637 #CJK UNIFIED IDEOGRAPH + {0x89B6, 0x58CE}, //1638 #CJK UNIFIED IDEOGRAPH + {0x89B7, 0x58CF}, //1639 #CJK UNIFIED IDEOGRAPH + {0x89B8, 0x58D0}, //1640 #CJK UNIFIED IDEOGRAPH + {0x89B9, 0x58D2}, //1641 #CJK UNIFIED IDEOGRAPH + {0x89BA, 0x58D3}, //1642 #CJK UNIFIED IDEOGRAPH + {0x89BB, 0x58D4}, //1643 #CJK UNIFIED IDEOGRAPH + {0x89BC, 0x58D6}, //1644 #CJK UNIFIED IDEOGRAPH + {0x89BD, 0x58D7}, //1645 #CJK UNIFIED IDEOGRAPH + {0x89BE, 0x58D8}, //1646 #CJK UNIFIED IDEOGRAPH + {0x89BF, 0x58D9}, //1647 #CJK UNIFIED IDEOGRAPH + {0x89C0, 0x58DA}, //1648 #CJK UNIFIED IDEOGRAPH + {0x89C1, 0x58DB}, //1649 #CJK UNIFIED IDEOGRAPH + {0x89C2, 0x58DC}, //1650 #CJK UNIFIED IDEOGRAPH + {0x89C3, 0x58DD}, //1651 #CJK UNIFIED IDEOGRAPH + {0x89C4, 0x58DE}, //1652 #CJK UNIFIED IDEOGRAPH + {0x89C5, 0x58DF}, //1653 #CJK UNIFIED IDEOGRAPH + {0x89C6, 0x58E0}, //1654 #CJK UNIFIED IDEOGRAPH + {0x89C7, 0x58E1}, //1655 #CJK UNIFIED IDEOGRAPH + {0x89C8, 0x58E2}, //1656 #CJK UNIFIED IDEOGRAPH + {0x89C9, 0x58E3}, //1657 #CJK UNIFIED IDEOGRAPH + {0x89CA, 0x58E5}, //1658 #CJK UNIFIED IDEOGRAPH + {0x89CB, 0x58E6}, //1659 #CJK UNIFIED IDEOGRAPH + {0x89CC, 0x58E7}, //1660 #CJK UNIFIED IDEOGRAPH + {0x89CD, 0x58E8}, //1661 #CJK UNIFIED IDEOGRAPH + {0x89CE, 0x58E9}, //1662 #CJK UNIFIED IDEOGRAPH + {0x89CF, 0x58EA}, //1663 #CJK UNIFIED IDEOGRAPH + {0x89D0, 0x58ED}, //1664 #CJK UNIFIED IDEOGRAPH + {0x89D1, 0x58EF}, //1665 #CJK UNIFIED IDEOGRAPH + {0x89D2, 0x58F1}, //1666 #CJK UNIFIED IDEOGRAPH + {0x89D3, 0x58F2}, //1667 #CJK UNIFIED IDEOGRAPH + {0x89D4, 0x58F4}, //1668 #CJK UNIFIED IDEOGRAPH + {0x89D5, 0x58F5}, //1669 #CJK UNIFIED IDEOGRAPH + {0x89D6, 0x58F7}, //1670 #CJK UNIFIED IDEOGRAPH + {0x89D7, 0x58F8}, //1671 #CJK UNIFIED IDEOGRAPH + {0x89D8, 0x58FA}, //1672 #CJK UNIFIED IDEOGRAPH + {0x89D9, 0x58FB}, //1673 #CJK UNIFIED IDEOGRAPH + {0x89DA, 0x58FC}, //1674 #CJK UNIFIED IDEOGRAPH + {0x89DB, 0x58FD}, //1675 #CJK UNIFIED IDEOGRAPH + {0x89DC, 0x58FE}, //1676 #CJK UNIFIED IDEOGRAPH + {0x89DD, 0x58FF}, //1677 #CJK UNIFIED IDEOGRAPH + {0x89DE, 0x5900}, //1678 #CJK UNIFIED IDEOGRAPH + {0x89DF, 0x5901}, //1679 #CJK UNIFIED IDEOGRAPH + {0x89E0, 0x5903}, //1680 #CJK UNIFIED IDEOGRAPH + {0x89E1, 0x5905}, //1681 #CJK UNIFIED IDEOGRAPH + {0x89E2, 0x5906}, //1682 #CJK UNIFIED IDEOGRAPH + {0x89E3, 0x5908}, //1683 #CJK UNIFIED IDEOGRAPH + {0x89E4, 0x5909}, //1684 #CJK UNIFIED IDEOGRAPH + {0x89E5, 0x590A}, //1685 #CJK UNIFIED IDEOGRAPH + {0x89E6, 0x590B}, //1686 #CJK UNIFIED IDEOGRAPH + {0x89E7, 0x590C}, //1687 #CJK UNIFIED IDEOGRAPH + {0x89E8, 0x590E}, //1688 #CJK UNIFIED IDEOGRAPH + {0x89E9, 0x5910}, //1689 #CJK UNIFIED IDEOGRAPH + {0x89EA, 0x5911}, //1690 #CJK UNIFIED IDEOGRAPH + {0x89EB, 0x5912}, //1691 #CJK UNIFIED IDEOGRAPH + {0x89EC, 0x5913}, //1692 #CJK UNIFIED IDEOGRAPH + {0x89ED, 0x5917}, //1693 #CJK UNIFIED IDEOGRAPH + {0x89EE, 0x5918}, //1694 #CJK UNIFIED IDEOGRAPH + {0x89EF, 0x591B}, //1695 #CJK UNIFIED IDEOGRAPH + {0x89F0, 0x591D}, //1696 #CJK UNIFIED IDEOGRAPH + {0x89F1, 0x591E}, //1697 #CJK UNIFIED IDEOGRAPH + {0x89F2, 0x5920}, //1698 #CJK UNIFIED IDEOGRAPH + {0x89F3, 0x5921}, //1699 #CJK UNIFIED IDEOGRAPH + {0x89F4, 0x5922}, //1700 #CJK UNIFIED IDEOGRAPH + {0x89F5, 0x5923}, //1701 #CJK UNIFIED IDEOGRAPH + {0x89F6, 0x5926}, //1702 #CJK UNIFIED IDEOGRAPH + {0x89F7, 0x5928}, //1703 #CJK UNIFIED IDEOGRAPH + {0x89F8, 0x592C}, //1704 #CJK UNIFIED IDEOGRAPH + {0x89F9, 0x5930}, //1705 #CJK UNIFIED IDEOGRAPH + {0x89FA, 0x5932}, //1706 #CJK UNIFIED IDEOGRAPH + {0x89FB, 0x5933}, //1707 #CJK UNIFIED IDEOGRAPH + {0x89FC, 0x5935}, //1708 #CJK UNIFIED IDEOGRAPH + {0x89FD, 0x5936}, //1709 #CJK UNIFIED IDEOGRAPH + {0x89FE, 0x593B}, //1710 #CJK UNIFIED IDEOGRAPH + {0x8A40, 0x593D}, //1711 #CJK UNIFIED IDEOGRAPH + {0x8A41, 0x593E}, //1712 #CJK UNIFIED IDEOGRAPH + {0x8A42, 0x593F}, //1713 #CJK UNIFIED IDEOGRAPH + {0x8A43, 0x5940}, //1714 #CJK UNIFIED IDEOGRAPH + {0x8A44, 0x5943}, //1715 #CJK UNIFIED IDEOGRAPH + {0x8A45, 0x5945}, //1716 #CJK UNIFIED IDEOGRAPH + {0x8A46, 0x5946}, //1717 #CJK UNIFIED IDEOGRAPH + {0x8A47, 0x594A}, //1718 #CJK UNIFIED IDEOGRAPH + {0x8A48, 0x594C}, //1719 #CJK UNIFIED IDEOGRAPH + {0x8A49, 0x594D}, //1720 #CJK UNIFIED IDEOGRAPH + {0x8A4A, 0x5950}, //1721 #CJK UNIFIED IDEOGRAPH + {0x8A4B, 0x5952}, //1722 #CJK UNIFIED IDEOGRAPH + {0x8A4C, 0x5953}, //1723 #CJK UNIFIED IDEOGRAPH + {0x8A4D, 0x5959}, //1724 #CJK UNIFIED IDEOGRAPH + {0x8A4E, 0x595B}, //1725 #CJK UNIFIED IDEOGRAPH + {0x8A4F, 0x595C}, //1726 #CJK UNIFIED IDEOGRAPH + {0x8A50, 0x595D}, //1727 #CJK UNIFIED IDEOGRAPH + {0x8A51, 0x595E}, //1728 #CJK UNIFIED IDEOGRAPH + {0x8A52, 0x595F}, //1729 #CJK UNIFIED IDEOGRAPH + {0x8A53, 0x5961}, //1730 #CJK UNIFIED IDEOGRAPH + {0x8A54, 0x5963}, //1731 #CJK UNIFIED IDEOGRAPH + {0x8A55, 0x5964}, //1732 #CJK UNIFIED IDEOGRAPH + {0x8A56, 0x5966}, //1733 #CJK UNIFIED IDEOGRAPH + {0x8A57, 0x5967}, //1734 #CJK UNIFIED IDEOGRAPH + {0x8A58, 0x5968}, //1735 #CJK UNIFIED IDEOGRAPH + {0x8A59, 0x5969}, //1736 #CJK UNIFIED IDEOGRAPH + {0x8A5A, 0x596A}, //1737 #CJK UNIFIED IDEOGRAPH + {0x8A5B, 0x596B}, //1738 #CJK UNIFIED IDEOGRAPH + {0x8A5C, 0x596C}, //1739 #CJK UNIFIED IDEOGRAPH + {0x8A5D, 0x596D}, //1740 #CJK UNIFIED IDEOGRAPH + {0x8A5E, 0x596E}, //1741 #CJK UNIFIED IDEOGRAPH + {0x8A5F, 0x596F}, //1742 #CJK UNIFIED IDEOGRAPH + {0x8A60, 0x5970}, //1743 #CJK UNIFIED IDEOGRAPH + {0x8A61, 0x5971}, //1744 #CJK UNIFIED IDEOGRAPH + {0x8A62, 0x5972}, //1745 #CJK UNIFIED IDEOGRAPH + {0x8A63, 0x5975}, //1746 #CJK UNIFIED IDEOGRAPH + {0x8A64, 0x5977}, //1747 #CJK UNIFIED IDEOGRAPH + {0x8A65, 0x597A}, //1748 #CJK UNIFIED IDEOGRAPH + {0x8A66, 0x597B}, //1749 #CJK UNIFIED IDEOGRAPH + {0x8A67, 0x597C}, //1750 #CJK UNIFIED IDEOGRAPH + {0x8A68, 0x597E}, //1751 #CJK UNIFIED IDEOGRAPH + {0x8A69, 0x597F}, //1752 #CJK UNIFIED IDEOGRAPH + {0x8A6A, 0x5980}, //1753 #CJK UNIFIED IDEOGRAPH + {0x8A6B, 0x5985}, //1754 #CJK UNIFIED IDEOGRAPH + {0x8A6C, 0x5989}, //1755 #CJK UNIFIED IDEOGRAPH + {0x8A6D, 0x598B}, //1756 #CJK UNIFIED IDEOGRAPH + {0x8A6E, 0x598C}, //1757 #CJK UNIFIED IDEOGRAPH + {0x8A6F, 0x598E}, //1758 #CJK UNIFIED IDEOGRAPH + {0x8A70, 0x598F}, //1759 #CJK UNIFIED IDEOGRAPH + {0x8A71, 0x5990}, //1760 #CJK UNIFIED IDEOGRAPH + {0x8A72, 0x5991}, //1761 #CJK UNIFIED IDEOGRAPH + {0x8A73, 0x5994}, //1762 #CJK UNIFIED IDEOGRAPH + {0x8A74, 0x5995}, //1763 #CJK UNIFIED IDEOGRAPH + {0x8A75, 0x5998}, //1764 #CJK UNIFIED IDEOGRAPH + {0x8A76, 0x599A}, //1765 #CJK UNIFIED IDEOGRAPH + {0x8A77, 0x599B}, //1766 #CJK UNIFIED IDEOGRAPH + {0x8A78, 0x599C}, //1767 #CJK UNIFIED IDEOGRAPH + {0x8A79, 0x599D}, //1768 #CJK UNIFIED IDEOGRAPH + {0x8A7A, 0x599F}, //1769 #CJK UNIFIED IDEOGRAPH + {0x8A7B, 0x59A0}, //1770 #CJK UNIFIED IDEOGRAPH + {0x8A7C, 0x59A1}, //1771 #CJK UNIFIED IDEOGRAPH + {0x8A7D, 0x59A2}, //1772 #CJK UNIFIED IDEOGRAPH + {0x8A7E, 0x59A6}, //1773 #CJK UNIFIED IDEOGRAPH + {0x8A80, 0x59A7}, //1774 #CJK UNIFIED IDEOGRAPH + {0x8A81, 0x59AC}, //1775 #CJK UNIFIED IDEOGRAPH + {0x8A82, 0x59AD}, //1776 #CJK UNIFIED IDEOGRAPH + {0x8A83, 0x59B0}, //1777 #CJK UNIFIED IDEOGRAPH + {0x8A84, 0x59B1}, //1778 #CJK UNIFIED IDEOGRAPH + {0x8A85, 0x59B3}, //1779 #CJK UNIFIED IDEOGRAPH + {0x8A86, 0x59B4}, //1780 #CJK UNIFIED IDEOGRAPH + {0x8A87, 0x59B5}, //1781 #CJK UNIFIED IDEOGRAPH + {0x8A88, 0x59B6}, //1782 #CJK UNIFIED IDEOGRAPH + {0x8A89, 0x59B7}, //1783 #CJK UNIFIED IDEOGRAPH + {0x8A8A, 0x59B8}, //1784 #CJK UNIFIED IDEOGRAPH + {0x8A8B, 0x59BA}, //1785 #CJK UNIFIED IDEOGRAPH + {0x8A8C, 0x59BC}, //1786 #CJK UNIFIED IDEOGRAPH + {0x8A8D, 0x59BD}, //1787 #CJK UNIFIED IDEOGRAPH + {0x8A8E, 0x59BF}, //1788 #CJK UNIFIED IDEOGRAPH + {0x8A8F, 0x59C0}, //1789 #CJK UNIFIED IDEOGRAPH + {0x8A90, 0x59C1}, //1790 #CJK UNIFIED IDEOGRAPH + {0x8A91, 0x59C2}, //1791 #CJK UNIFIED IDEOGRAPH + {0x8A92, 0x59C3}, //1792 #CJK UNIFIED IDEOGRAPH + {0x8A93, 0x59C4}, //1793 #CJK UNIFIED IDEOGRAPH + {0x8A94, 0x59C5}, //1794 #CJK UNIFIED IDEOGRAPH + {0x8A95, 0x59C7}, //1795 #CJK UNIFIED IDEOGRAPH + {0x8A96, 0x59C8}, //1796 #CJK UNIFIED IDEOGRAPH + {0x8A97, 0x59C9}, //1797 #CJK UNIFIED IDEOGRAPH + {0x8A98, 0x59CC}, //1798 #CJK UNIFIED IDEOGRAPH + {0x8A99, 0x59CD}, //1799 #CJK UNIFIED IDEOGRAPH + {0x8A9A, 0x59CE}, //1800 #CJK UNIFIED IDEOGRAPH + {0x8A9B, 0x59CF}, //1801 #CJK UNIFIED IDEOGRAPH + {0x8A9C, 0x59D5}, //1802 #CJK UNIFIED IDEOGRAPH + {0x8A9D, 0x59D6}, //1803 #CJK UNIFIED IDEOGRAPH + {0x8A9E, 0x59D9}, //1804 #CJK UNIFIED IDEOGRAPH + {0x8A9F, 0x59DB}, //1805 #CJK UNIFIED IDEOGRAPH + {0x8AA0, 0x59DE}, //1806 #CJK UNIFIED IDEOGRAPH + {0x8AA1, 0x59DF}, //1807 #CJK UNIFIED IDEOGRAPH + {0x8AA2, 0x59E0}, //1808 #CJK UNIFIED IDEOGRAPH + {0x8AA3, 0x59E1}, //1809 #CJK UNIFIED IDEOGRAPH + {0x8AA4, 0x59E2}, //1810 #CJK UNIFIED IDEOGRAPH + {0x8AA5, 0x59E4}, //1811 #CJK UNIFIED IDEOGRAPH + {0x8AA6, 0x59E6}, //1812 #CJK UNIFIED IDEOGRAPH + {0x8AA7, 0x59E7}, //1813 #CJK UNIFIED IDEOGRAPH + {0x8AA8, 0x59E9}, //1814 #CJK UNIFIED IDEOGRAPH + {0x8AA9, 0x59EA}, //1815 #CJK UNIFIED IDEOGRAPH + {0x8AAA, 0x59EB}, //1816 #CJK UNIFIED IDEOGRAPH + {0x8AAB, 0x59ED}, //1817 #CJK UNIFIED IDEOGRAPH + {0x8AAC, 0x59EE}, //1818 #CJK UNIFIED IDEOGRAPH + {0x8AAD, 0x59EF}, //1819 #CJK UNIFIED IDEOGRAPH + {0x8AAE, 0x59F0}, //1820 #CJK UNIFIED IDEOGRAPH + {0x8AAF, 0x59F1}, //1821 #CJK UNIFIED IDEOGRAPH + {0x8AB0, 0x59F2}, //1822 #CJK UNIFIED IDEOGRAPH + {0x8AB1, 0x59F3}, //1823 #CJK UNIFIED IDEOGRAPH + {0x8AB2, 0x59F4}, //1824 #CJK UNIFIED IDEOGRAPH + {0x8AB3, 0x59F5}, //1825 #CJK UNIFIED IDEOGRAPH + {0x8AB4, 0x59F6}, //1826 #CJK UNIFIED IDEOGRAPH + {0x8AB5, 0x59F7}, //1827 #CJK UNIFIED IDEOGRAPH + {0x8AB6, 0x59F8}, //1828 #CJK UNIFIED IDEOGRAPH + {0x8AB7, 0x59FA}, //1829 #CJK UNIFIED IDEOGRAPH + {0x8AB8, 0x59FC}, //1830 #CJK UNIFIED IDEOGRAPH + {0x8AB9, 0x59FD}, //1831 #CJK UNIFIED IDEOGRAPH + {0x8ABA, 0x59FE}, //1832 #CJK UNIFIED IDEOGRAPH + {0x8ABB, 0x5A00}, //1833 #CJK UNIFIED IDEOGRAPH + {0x8ABC, 0x5A02}, //1834 #CJK UNIFIED IDEOGRAPH + {0x8ABD, 0x5A0A}, //1835 #CJK UNIFIED IDEOGRAPH + {0x8ABE, 0x5A0B}, //1836 #CJK UNIFIED IDEOGRAPH + {0x8ABF, 0x5A0D}, //1837 #CJK UNIFIED IDEOGRAPH + {0x8AC0, 0x5A0E}, //1838 #CJK UNIFIED IDEOGRAPH + {0x8AC1, 0x5A0F}, //1839 #CJK UNIFIED IDEOGRAPH + {0x8AC2, 0x5A10}, //1840 #CJK UNIFIED IDEOGRAPH + {0x8AC3, 0x5A12}, //1841 #CJK UNIFIED IDEOGRAPH + {0x8AC4, 0x5A14}, //1842 #CJK UNIFIED IDEOGRAPH + {0x8AC5, 0x5A15}, //1843 #CJK UNIFIED IDEOGRAPH + {0x8AC6, 0x5A16}, //1844 #CJK UNIFIED IDEOGRAPH + {0x8AC7, 0x5A17}, //1845 #CJK UNIFIED IDEOGRAPH + {0x8AC8, 0x5A19}, //1846 #CJK UNIFIED IDEOGRAPH + {0x8AC9, 0x5A1A}, //1847 #CJK UNIFIED IDEOGRAPH + {0x8ACA, 0x5A1B}, //1848 #CJK UNIFIED IDEOGRAPH + {0x8ACB, 0x5A1D}, //1849 #CJK UNIFIED IDEOGRAPH + {0x8ACC, 0x5A1E}, //1850 #CJK UNIFIED IDEOGRAPH + {0x8ACD, 0x5A21}, //1851 #CJK UNIFIED IDEOGRAPH + {0x8ACE, 0x5A22}, //1852 #CJK UNIFIED IDEOGRAPH + {0x8ACF, 0x5A24}, //1853 #CJK UNIFIED IDEOGRAPH + {0x8AD0, 0x5A26}, //1854 #CJK UNIFIED IDEOGRAPH + {0x8AD1, 0x5A27}, //1855 #CJK UNIFIED IDEOGRAPH + {0x8AD2, 0x5A28}, //1856 #CJK UNIFIED IDEOGRAPH + {0x8AD3, 0x5A2A}, //1857 #CJK UNIFIED IDEOGRAPH + {0x8AD4, 0x5A2B}, //1858 #CJK UNIFIED IDEOGRAPH + {0x8AD5, 0x5A2C}, //1859 #CJK UNIFIED IDEOGRAPH + {0x8AD6, 0x5A2D}, //1860 #CJK UNIFIED IDEOGRAPH + {0x8AD7, 0x5A2E}, //1861 #CJK UNIFIED IDEOGRAPH + {0x8AD8, 0x5A2F}, //1862 #CJK UNIFIED IDEOGRAPH + {0x8AD9, 0x5A30}, //1863 #CJK UNIFIED IDEOGRAPH + {0x8ADA, 0x5A33}, //1864 #CJK UNIFIED IDEOGRAPH + {0x8ADB, 0x5A35}, //1865 #CJK UNIFIED IDEOGRAPH + {0x8ADC, 0x5A37}, //1866 #CJK UNIFIED IDEOGRAPH + {0x8ADD, 0x5A38}, //1867 #CJK UNIFIED IDEOGRAPH + {0x8ADE, 0x5A39}, //1868 #CJK UNIFIED IDEOGRAPH + {0x8ADF, 0x5A3A}, //1869 #CJK UNIFIED IDEOGRAPH + {0x8AE0, 0x5A3B}, //1870 #CJK UNIFIED IDEOGRAPH + {0x8AE1, 0x5A3D}, //1871 #CJK UNIFIED IDEOGRAPH + {0x8AE2, 0x5A3E}, //1872 #CJK UNIFIED IDEOGRAPH + {0x8AE3, 0x5A3F}, //1873 #CJK UNIFIED IDEOGRAPH + {0x8AE4, 0x5A41}, //1874 #CJK UNIFIED IDEOGRAPH + {0x8AE5, 0x5A42}, //1875 #CJK UNIFIED IDEOGRAPH + {0x8AE6, 0x5A43}, //1876 #CJK UNIFIED IDEOGRAPH + {0x8AE7, 0x5A44}, //1877 #CJK UNIFIED IDEOGRAPH + {0x8AE8, 0x5A45}, //1878 #CJK UNIFIED IDEOGRAPH + {0x8AE9, 0x5A47}, //1879 #CJK UNIFIED IDEOGRAPH + {0x8AEA, 0x5A48}, //1880 #CJK UNIFIED IDEOGRAPH + {0x8AEB, 0x5A4B}, //1881 #CJK UNIFIED IDEOGRAPH + {0x8AEC, 0x5A4C}, //1882 #CJK UNIFIED IDEOGRAPH + {0x8AED, 0x5A4D}, //1883 #CJK UNIFIED IDEOGRAPH + {0x8AEE, 0x5A4E}, //1884 #CJK UNIFIED IDEOGRAPH + {0x8AEF, 0x5A4F}, //1885 #CJK UNIFIED IDEOGRAPH + {0x8AF0, 0x5A50}, //1886 #CJK UNIFIED IDEOGRAPH + {0x8AF1, 0x5A51}, //1887 #CJK UNIFIED IDEOGRAPH + {0x8AF2, 0x5A52}, //1888 #CJK UNIFIED IDEOGRAPH + {0x8AF3, 0x5A53}, //1889 #CJK UNIFIED IDEOGRAPH + {0x8AF4, 0x5A54}, //1890 #CJK UNIFIED IDEOGRAPH + {0x8AF5, 0x5A56}, //1891 #CJK UNIFIED IDEOGRAPH + {0x8AF6, 0x5A57}, //1892 #CJK UNIFIED IDEOGRAPH + {0x8AF7, 0x5A58}, //1893 #CJK UNIFIED IDEOGRAPH + {0x8AF8, 0x5A59}, //1894 #CJK UNIFIED IDEOGRAPH + {0x8AF9, 0x5A5B}, //1895 #CJK UNIFIED IDEOGRAPH + {0x8AFA, 0x5A5C}, //1896 #CJK UNIFIED IDEOGRAPH + {0x8AFB, 0x5A5D}, //1897 #CJK UNIFIED IDEOGRAPH + {0x8AFC, 0x5A5E}, //1898 #CJK UNIFIED IDEOGRAPH + {0x8AFD, 0x5A5F}, //1899 #CJK UNIFIED IDEOGRAPH + {0x8AFE, 0x5A60}, //1900 #CJK UNIFIED IDEOGRAPH + {0x8B40, 0x5A61}, //1901 #CJK UNIFIED IDEOGRAPH + {0x8B41, 0x5A63}, //1902 #CJK UNIFIED IDEOGRAPH + {0x8B42, 0x5A64}, //1903 #CJK UNIFIED IDEOGRAPH + {0x8B43, 0x5A65}, //1904 #CJK UNIFIED IDEOGRAPH + {0x8B44, 0x5A66}, //1905 #CJK UNIFIED IDEOGRAPH + {0x8B45, 0x5A68}, //1906 #CJK UNIFIED IDEOGRAPH + {0x8B46, 0x5A69}, //1907 #CJK UNIFIED IDEOGRAPH + {0x8B47, 0x5A6B}, //1908 #CJK UNIFIED IDEOGRAPH + {0x8B48, 0x5A6C}, //1909 #CJK UNIFIED IDEOGRAPH + {0x8B49, 0x5A6D}, //1910 #CJK UNIFIED IDEOGRAPH + {0x8B4A, 0x5A6E}, //1911 #CJK UNIFIED IDEOGRAPH + {0x8B4B, 0x5A6F}, //1912 #CJK UNIFIED IDEOGRAPH + {0x8B4C, 0x5A70}, //1913 #CJK UNIFIED IDEOGRAPH + {0x8B4D, 0x5A71}, //1914 #CJK UNIFIED IDEOGRAPH + {0x8B4E, 0x5A72}, //1915 #CJK UNIFIED IDEOGRAPH + {0x8B4F, 0x5A73}, //1916 #CJK UNIFIED IDEOGRAPH + {0x8B50, 0x5A78}, //1917 #CJK UNIFIED IDEOGRAPH + {0x8B51, 0x5A79}, //1918 #CJK UNIFIED IDEOGRAPH + {0x8B52, 0x5A7B}, //1919 #CJK UNIFIED IDEOGRAPH + {0x8B53, 0x5A7C}, //1920 #CJK UNIFIED IDEOGRAPH + {0x8B54, 0x5A7D}, //1921 #CJK UNIFIED IDEOGRAPH + {0x8B55, 0x5A7E}, //1922 #CJK UNIFIED IDEOGRAPH + {0x8B56, 0x5A80}, //1923 #CJK UNIFIED IDEOGRAPH + {0x8B57, 0x5A81}, //1924 #CJK UNIFIED IDEOGRAPH + {0x8B58, 0x5A82}, //1925 #CJK UNIFIED IDEOGRAPH + {0x8B59, 0x5A83}, //1926 #CJK UNIFIED IDEOGRAPH + {0x8B5A, 0x5A84}, //1927 #CJK UNIFIED IDEOGRAPH + {0x8B5B, 0x5A85}, //1928 #CJK UNIFIED IDEOGRAPH + {0x8B5C, 0x5A86}, //1929 #CJK UNIFIED IDEOGRAPH + {0x8B5D, 0x5A87}, //1930 #CJK UNIFIED IDEOGRAPH + {0x8B5E, 0x5A88}, //1931 #CJK UNIFIED IDEOGRAPH + {0x8B5F, 0x5A89}, //1932 #CJK UNIFIED IDEOGRAPH + {0x8B60, 0x5A8A}, //1933 #CJK UNIFIED IDEOGRAPH + {0x8B61, 0x5A8B}, //1934 #CJK UNIFIED IDEOGRAPH + {0x8B62, 0x5A8C}, //1935 #CJK UNIFIED IDEOGRAPH + {0x8B63, 0x5A8D}, //1936 #CJK UNIFIED IDEOGRAPH + {0x8B64, 0x5A8E}, //1937 #CJK UNIFIED IDEOGRAPH + {0x8B65, 0x5A8F}, //1938 #CJK UNIFIED IDEOGRAPH + {0x8B66, 0x5A90}, //1939 #CJK UNIFIED IDEOGRAPH + {0x8B67, 0x5A91}, //1940 #CJK UNIFIED IDEOGRAPH + {0x8B68, 0x5A93}, //1941 #CJK UNIFIED IDEOGRAPH + {0x8B69, 0x5A94}, //1942 #CJK UNIFIED IDEOGRAPH + {0x8B6A, 0x5A95}, //1943 #CJK UNIFIED IDEOGRAPH + {0x8B6B, 0x5A96}, //1944 #CJK UNIFIED IDEOGRAPH + {0x8B6C, 0x5A97}, //1945 #CJK UNIFIED IDEOGRAPH + {0x8B6D, 0x5A98}, //1946 #CJK UNIFIED IDEOGRAPH + {0x8B6E, 0x5A99}, //1947 #CJK UNIFIED IDEOGRAPH + {0x8B6F, 0x5A9C}, //1948 #CJK UNIFIED IDEOGRAPH + {0x8B70, 0x5A9D}, //1949 #CJK UNIFIED IDEOGRAPH + {0x8B71, 0x5A9E}, //1950 #CJK UNIFIED IDEOGRAPH + {0x8B72, 0x5A9F}, //1951 #CJK UNIFIED IDEOGRAPH + {0x8B73, 0x5AA0}, //1952 #CJK UNIFIED IDEOGRAPH + {0x8B74, 0x5AA1}, //1953 #CJK UNIFIED IDEOGRAPH + {0x8B75, 0x5AA2}, //1954 #CJK UNIFIED IDEOGRAPH + {0x8B76, 0x5AA3}, //1955 #CJK UNIFIED IDEOGRAPH + {0x8B77, 0x5AA4}, //1956 #CJK UNIFIED IDEOGRAPH + {0x8B78, 0x5AA5}, //1957 #CJK UNIFIED IDEOGRAPH + {0x8B79, 0x5AA6}, //1958 #CJK UNIFIED IDEOGRAPH + {0x8B7A, 0x5AA7}, //1959 #CJK UNIFIED IDEOGRAPH + {0x8B7B, 0x5AA8}, //1960 #CJK UNIFIED IDEOGRAPH + {0x8B7C, 0x5AA9}, //1961 #CJK UNIFIED IDEOGRAPH + {0x8B7D, 0x5AAB}, //1962 #CJK UNIFIED IDEOGRAPH + {0x8B7E, 0x5AAC}, //1963 #CJK UNIFIED IDEOGRAPH + {0x8B80, 0x5AAD}, //1964 #CJK UNIFIED IDEOGRAPH + {0x8B81, 0x5AAE}, //1965 #CJK UNIFIED IDEOGRAPH + {0x8B82, 0x5AAF}, //1966 #CJK UNIFIED IDEOGRAPH + {0x8B83, 0x5AB0}, //1967 #CJK UNIFIED IDEOGRAPH + {0x8B84, 0x5AB1}, //1968 #CJK UNIFIED IDEOGRAPH + {0x8B85, 0x5AB4}, //1969 #CJK UNIFIED IDEOGRAPH + {0x8B86, 0x5AB6}, //1970 #CJK UNIFIED IDEOGRAPH + {0x8B87, 0x5AB7}, //1971 #CJK UNIFIED IDEOGRAPH + {0x8B88, 0x5AB9}, //1972 #CJK UNIFIED IDEOGRAPH + {0x8B89, 0x5ABA}, //1973 #CJK UNIFIED IDEOGRAPH + {0x8B8A, 0x5ABB}, //1974 #CJK UNIFIED IDEOGRAPH + {0x8B8B, 0x5ABC}, //1975 #CJK UNIFIED IDEOGRAPH + {0x8B8C, 0x5ABD}, //1976 #CJK UNIFIED IDEOGRAPH + {0x8B8D, 0x5ABF}, //1977 #CJK UNIFIED IDEOGRAPH + {0x8B8E, 0x5AC0}, //1978 #CJK UNIFIED IDEOGRAPH + {0x8B8F, 0x5AC3}, //1979 #CJK UNIFIED IDEOGRAPH + {0x8B90, 0x5AC4}, //1980 #CJK UNIFIED IDEOGRAPH + {0x8B91, 0x5AC5}, //1981 #CJK UNIFIED IDEOGRAPH + {0x8B92, 0x5AC6}, //1982 #CJK UNIFIED IDEOGRAPH + {0x8B93, 0x5AC7}, //1983 #CJK UNIFIED IDEOGRAPH + {0x8B94, 0x5AC8}, //1984 #CJK UNIFIED IDEOGRAPH + {0x8B95, 0x5ACA}, //1985 #CJK UNIFIED IDEOGRAPH + {0x8B96, 0x5ACB}, //1986 #CJK UNIFIED IDEOGRAPH + {0x8B97, 0x5ACD}, //1987 #CJK UNIFIED IDEOGRAPH + {0x8B98, 0x5ACE}, //1988 #CJK UNIFIED IDEOGRAPH + {0x8B99, 0x5ACF}, //1989 #CJK UNIFIED IDEOGRAPH + {0x8B9A, 0x5AD0}, //1990 #CJK UNIFIED IDEOGRAPH + {0x8B9B, 0x5AD1}, //1991 #CJK UNIFIED IDEOGRAPH + {0x8B9C, 0x5AD3}, //1992 #CJK UNIFIED IDEOGRAPH + {0x8B9D, 0x5AD5}, //1993 #CJK UNIFIED IDEOGRAPH + {0x8B9E, 0x5AD7}, //1994 #CJK UNIFIED IDEOGRAPH + {0x8B9F, 0x5AD9}, //1995 #CJK UNIFIED IDEOGRAPH + {0x8BA0, 0x5ADA}, //1996 #CJK UNIFIED IDEOGRAPH + {0x8BA1, 0x5ADB}, //1997 #CJK UNIFIED IDEOGRAPH + {0x8BA2, 0x5ADD}, //1998 #CJK UNIFIED IDEOGRAPH + {0x8BA3, 0x5ADE}, //1999 #CJK UNIFIED IDEOGRAPH + {0x8BA4, 0x5ADF}, //2000 #CJK UNIFIED IDEOGRAPH + {0x8BA5, 0x5AE2}, //2001 #CJK UNIFIED IDEOGRAPH + {0x8BA6, 0x5AE4}, //2002 #CJK UNIFIED IDEOGRAPH + {0x8BA7, 0x5AE5}, //2003 #CJK UNIFIED IDEOGRAPH + {0x8BA8, 0x5AE7}, //2004 #CJK UNIFIED IDEOGRAPH + {0x8BA9, 0x5AE8}, //2005 #CJK UNIFIED IDEOGRAPH + {0x8BAA, 0x5AEA}, //2006 #CJK UNIFIED IDEOGRAPH + {0x8BAB, 0x5AEC}, //2007 #CJK UNIFIED IDEOGRAPH + {0x8BAC, 0x5AED}, //2008 #CJK UNIFIED IDEOGRAPH + {0x8BAD, 0x5AEE}, //2009 #CJK UNIFIED IDEOGRAPH + {0x8BAE, 0x5AEF}, //2010 #CJK UNIFIED IDEOGRAPH + {0x8BAF, 0x5AF0}, //2011 #CJK UNIFIED IDEOGRAPH + {0x8BB0, 0x5AF2}, //2012 #CJK UNIFIED IDEOGRAPH + {0x8BB1, 0x5AF3}, //2013 #CJK UNIFIED IDEOGRAPH + {0x8BB2, 0x5AF4}, //2014 #CJK UNIFIED IDEOGRAPH + {0x8BB3, 0x5AF5}, //2015 #CJK UNIFIED IDEOGRAPH + {0x8BB4, 0x5AF6}, //2016 #CJK UNIFIED IDEOGRAPH + {0x8BB5, 0x5AF7}, //2017 #CJK UNIFIED IDEOGRAPH + {0x8BB6, 0x5AF8}, //2018 #CJK UNIFIED IDEOGRAPH + {0x8BB7, 0x5AF9}, //2019 #CJK UNIFIED IDEOGRAPH + {0x8BB8, 0x5AFA}, //2020 #CJK UNIFIED IDEOGRAPH + {0x8BB9, 0x5AFB}, //2021 #CJK UNIFIED IDEOGRAPH + {0x8BBA, 0x5AFC}, //2022 #CJK UNIFIED IDEOGRAPH + {0x8BBB, 0x5AFD}, //2023 #CJK UNIFIED IDEOGRAPH + {0x8BBC, 0x5AFE}, //2024 #CJK UNIFIED IDEOGRAPH + {0x8BBD, 0x5AFF}, //2025 #CJK UNIFIED IDEOGRAPH + {0x8BBE, 0x5B00}, //2026 #CJK UNIFIED IDEOGRAPH + {0x8BBF, 0x5B01}, //2027 #CJK UNIFIED IDEOGRAPH + {0x8BC0, 0x5B02}, //2028 #CJK UNIFIED IDEOGRAPH + {0x8BC1, 0x5B03}, //2029 #CJK UNIFIED IDEOGRAPH + {0x8BC2, 0x5B04}, //2030 #CJK UNIFIED IDEOGRAPH + {0x8BC3, 0x5B05}, //2031 #CJK UNIFIED IDEOGRAPH + {0x8BC4, 0x5B06}, //2032 #CJK UNIFIED IDEOGRAPH + {0x8BC5, 0x5B07}, //2033 #CJK UNIFIED IDEOGRAPH + {0x8BC6, 0x5B08}, //2034 #CJK UNIFIED IDEOGRAPH + {0x8BC7, 0x5B0A}, //2035 #CJK UNIFIED IDEOGRAPH + {0x8BC8, 0x5B0B}, //2036 #CJK UNIFIED IDEOGRAPH + {0x8BC9, 0x5B0C}, //2037 #CJK UNIFIED IDEOGRAPH + {0x8BCA, 0x5B0D}, //2038 #CJK UNIFIED IDEOGRAPH + {0x8BCB, 0x5B0E}, //2039 #CJK UNIFIED IDEOGRAPH + {0x8BCC, 0x5B0F}, //2040 #CJK UNIFIED IDEOGRAPH + {0x8BCD, 0x5B10}, //2041 #CJK UNIFIED IDEOGRAPH + {0x8BCE, 0x5B11}, //2042 #CJK UNIFIED IDEOGRAPH + {0x8BCF, 0x5B12}, //2043 #CJK UNIFIED IDEOGRAPH + {0x8BD0, 0x5B13}, //2044 #CJK UNIFIED IDEOGRAPH + {0x8BD1, 0x5B14}, //2045 #CJK UNIFIED IDEOGRAPH + {0x8BD2, 0x5B15}, //2046 #CJK UNIFIED IDEOGRAPH + {0x8BD3, 0x5B18}, //2047 #CJK UNIFIED IDEOGRAPH + {0x8BD4, 0x5B19}, //2048 #CJK UNIFIED IDEOGRAPH + {0x8BD5, 0x5B1A}, //2049 #CJK UNIFIED IDEOGRAPH + {0x8BD6, 0x5B1B}, //2050 #CJK UNIFIED IDEOGRAPH + {0x8BD7, 0x5B1C}, //2051 #CJK UNIFIED IDEOGRAPH + {0x8BD8, 0x5B1D}, //2052 #CJK UNIFIED IDEOGRAPH + {0x8BD9, 0x5B1E}, //2053 #CJK UNIFIED IDEOGRAPH + {0x8BDA, 0x5B1F}, //2054 #CJK UNIFIED IDEOGRAPH + {0x8BDB, 0x5B20}, //2055 #CJK UNIFIED IDEOGRAPH + {0x8BDC, 0x5B21}, //2056 #CJK UNIFIED IDEOGRAPH + {0x8BDD, 0x5B22}, //2057 #CJK UNIFIED IDEOGRAPH + {0x8BDE, 0x5B23}, //2058 #CJK UNIFIED IDEOGRAPH + {0x8BDF, 0x5B24}, //2059 #CJK UNIFIED IDEOGRAPH + {0x8BE0, 0x5B25}, //2060 #CJK UNIFIED IDEOGRAPH + {0x8BE1, 0x5B26}, //2061 #CJK UNIFIED IDEOGRAPH + {0x8BE2, 0x5B27}, //2062 #CJK UNIFIED IDEOGRAPH + {0x8BE3, 0x5B28}, //2063 #CJK UNIFIED IDEOGRAPH + {0x8BE4, 0x5B29}, //2064 #CJK UNIFIED IDEOGRAPH + {0x8BE5, 0x5B2A}, //2065 #CJK UNIFIED IDEOGRAPH + {0x8BE6, 0x5B2B}, //2066 #CJK UNIFIED IDEOGRAPH + {0x8BE7, 0x5B2C}, //2067 #CJK UNIFIED IDEOGRAPH + {0x8BE8, 0x5B2D}, //2068 #CJK UNIFIED IDEOGRAPH + {0x8BE9, 0x5B2E}, //2069 #CJK UNIFIED IDEOGRAPH + {0x8BEA, 0x5B2F}, //2070 #CJK UNIFIED IDEOGRAPH + {0x8BEB, 0x5B30}, //2071 #CJK UNIFIED IDEOGRAPH + {0x8BEC, 0x5B31}, //2072 #CJK UNIFIED IDEOGRAPH + {0x8BED, 0x5B33}, //2073 #CJK UNIFIED IDEOGRAPH + {0x8BEE, 0x5B35}, //2074 #CJK UNIFIED IDEOGRAPH + {0x8BEF, 0x5B36}, //2075 #CJK UNIFIED IDEOGRAPH + {0x8BF0, 0x5B38}, //2076 #CJK UNIFIED IDEOGRAPH + {0x8BF1, 0x5B39}, //2077 #CJK UNIFIED IDEOGRAPH + {0x8BF2, 0x5B3A}, //2078 #CJK UNIFIED IDEOGRAPH + {0x8BF3, 0x5B3B}, //2079 #CJK UNIFIED IDEOGRAPH + {0x8BF4, 0x5B3C}, //2080 #CJK UNIFIED IDEOGRAPH + {0x8BF5, 0x5B3D}, //2081 #CJK UNIFIED IDEOGRAPH + {0x8BF6, 0x5B3E}, //2082 #CJK UNIFIED IDEOGRAPH + {0x8BF7, 0x5B3F}, //2083 #CJK UNIFIED IDEOGRAPH + {0x8BF8, 0x5B41}, //2084 #CJK UNIFIED IDEOGRAPH + {0x8BF9, 0x5B42}, //2085 #CJK UNIFIED IDEOGRAPH + {0x8BFA, 0x5B43}, //2086 #CJK UNIFIED IDEOGRAPH + {0x8BFB, 0x5B44}, //2087 #CJK UNIFIED IDEOGRAPH + {0x8BFC, 0x5B45}, //2088 #CJK UNIFIED IDEOGRAPH + {0x8BFD, 0x5B46}, //2089 #CJK UNIFIED IDEOGRAPH + {0x8BFE, 0x5B47}, //2090 #CJK UNIFIED IDEOGRAPH + {0x8C40, 0x5B48}, //2091 #CJK UNIFIED IDEOGRAPH + {0x8C41, 0x5B49}, //2092 #CJK UNIFIED IDEOGRAPH + {0x8C42, 0x5B4A}, //2093 #CJK UNIFIED IDEOGRAPH + {0x8C43, 0x5B4B}, //2094 #CJK UNIFIED IDEOGRAPH + {0x8C44, 0x5B4C}, //2095 #CJK UNIFIED IDEOGRAPH + {0x8C45, 0x5B4D}, //2096 #CJK UNIFIED IDEOGRAPH + {0x8C46, 0x5B4E}, //2097 #CJK UNIFIED IDEOGRAPH + {0x8C47, 0x5B4F}, //2098 #CJK UNIFIED IDEOGRAPH + {0x8C48, 0x5B52}, //2099 #CJK UNIFIED IDEOGRAPH + {0x8C49, 0x5B56}, //2100 #CJK UNIFIED IDEOGRAPH + {0x8C4A, 0x5B5E}, //2101 #CJK UNIFIED IDEOGRAPH + {0x8C4B, 0x5B60}, //2102 #CJK UNIFIED IDEOGRAPH + {0x8C4C, 0x5B61}, //2103 #CJK UNIFIED IDEOGRAPH + {0x8C4D, 0x5B67}, //2104 #CJK UNIFIED IDEOGRAPH + {0x8C4E, 0x5B68}, //2105 #CJK UNIFIED IDEOGRAPH + {0x8C4F, 0x5B6B}, //2106 #CJK UNIFIED IDEOGRAPH + {0x8C50, 0x5B6D}, //2107 #CJK UNIFIED IDEOGRAPH + {0x8C51, 0x5B6E}, //2108 #CJK UNIFIED IDEOGRAPH + {0x8C52, 0x5B6F}, //2109 #CJK UNIFIED IDEOGRAPH + {0x8C53, 0x5B72}, //2110 #CJK UNIFIED IDEOGRAPH + {0x8C54, 0x5B74}, //2111 #CJK UNIFIED IDEOGRAPH + {0x8C55, 0x5B76}, //2112 #CJK UNIFIED IDEOGRAPH + {0x8C56, 0x5B77}, //2113 #CJK UNIFIED IDEOGRAPH + {0x8C57, 0x5B78}, //2114 #CJK UNIFIED IDEOGRAPH + {0x8C58, 0x5B79}, //2115 #CJK UNIFIED IDEOGRAPH + {0x8C59, 0x5B7B}, //2116 #CJK UNIFIED IDEOGRAPH + {0x8C5A, 0x5B7C}, //2117 #CJK UNIFIED IDEOGRAPH + {0x8C5B, 0x5B7E}, //2118 #CJK UNIFIED IDEOGRAPH + {0x8C5C, 0x5B7F}, //2119 #CJK UNIFIED IDEOGRAPH + {0x8C5D, 0x5B82}, //2120 #CJK UNIFIED IDEOGRAPH + {0x8C5E, 0x5B86}, //2121 #CJK UNIFIED IDEOGRAPH + {0x8C5F, 0x5B8A}, //2122 #CJK UNIFIED IDEOGRAPH + {0x8C60, 0x5B8D}, //2123 #CJK UNIFIED IDEOGRAPH + {0x8C61, 0x5B8E}, //2124 #CJK UNIFIED IDEOGRAPH + {0x8C62, 0x5B90}, //2125 #CJK UNIFIED IDEOGRAPH + {0x8C63, 0x5B91}, //2126 #CJK UNIFIED IDEOGRAPH + {0x8C64, 0x5B92}, //2127 #CJK UNIFIED IDEOGRAPH + {0x8C65, 0x5B94}, //2128 #CJK UNIFIED IDEOGRAPH + {0x8C66, 0x5B96}, //2129 #CJK UNIFIED IDEOGRAPH + {0x8C67, 0x5B9F}, //2130 #CJK UNIFIED IDEOGRAPH + {0x8C68, 0x5BA7}, //2131 #CJK UNIFIED IDEOGRAPH + {0x8C69, 0x5BA8}, //2132 #CJK UNIFIED IDEOGRAPH + {0x8C6A, 0x5BA9}, //2133 #CJK UNIFIED IDEOGRAPH + {0x8C6B, 0x5BAC}, //2134 #CJK UNIFIED IDEOGRAPH + {0x8C6C, 0x5BAD}, //2135 #CJK UNIFIED IDEOGRAPH + {0x8C6D, 0x5BAE}, //2136 #CJK UNIFIED IDEOGRAPH + {0x8C6E, 0x5BAF}, //2137 #CJK UNIFIED IDEOGRAPH + {0x8C6F, 0x5BB1}, //2138 #CJK UNIFIED IDEOGRAPH + {0x8C70, 0x5BB2}, //2139 #CJK UNIFIED IDEOGRAPH + {0x8C71, 0x5BB7}, //2140 #CJK UNIFIED IDEOGRAPH + {0x8C72, 0x5BBA}, //2141 #CJK UNIFIED IDEOGRAPH + {0x8C73, 0x5BBB}, //2142 #CJK UNIFIED IDEOGRAPH + {0x8C74, 0x5BBC}, //2143 #CJK UNIFIED IDEOGRAPH + {0x8C75, 0x5BC0}, //2144 #CJK UNIFIED IDEOGRAPH + {0x8C76, 0x5BC1}, //2145 #CJK UNIFIED IDEOGRAPH + {0x8C77, 0x5BC3}, //2146 #CJK UNIFIED IDEOGRAPH + {0x8C78, 0x5BC8}, //2147 #CJK UNIFIED IDEOGRAPH + {0x8C79, 0x5BC9}, //2148 #CJK UNIFIED IDEOGRAPH + {0x8C7A, 0x5BCA}, //2149 #CJK UNIFIED IDEOGRAPH + {0x8C7B, 0x5BCB}, //2150 #CJK UNIFIED IDEOGRAPH + {0x8C7C, 0x5BCD}, //2151 #CJK UNIFIED IDEOGRAPH + {0x8C7D, 0x5BCE}, //2152 #CJK UNIFIED IDEOGRAPH + {0x8C7E, 0x5BCF}, //2153 #CJK UNIFIED IDEOGRAPH + {0x8C80, 0x5BD1}, //2154 #CJK UNIFIED IDEOGRAPH + {0x8C81, 0x5BD4}, //2155 #CJK UNIFIED IDEOGRAPH + {0x8C82, 0x5BD5}, //2156 #CJK UNIFIED IDEOGRAPH + {0x8C83, 0x5BD6}, //2157 #CJK UNIFIED IDEOGRAPH + {0x8C84, 0x5BD7}, //2158 #CJK UNIFIED IDEOGRAPH + {0x8C85, 0x5BD8}, //2159 #CJK UNIFIED IDEOGRAPH + {0x8C86, 0x5BD9}, //2160 #CJK UNIFIED IDEOGRAPH + {0x8C87, 0x5BDA}, //2161 #CJK UNIFIED IDEOGRAPH + {0x8C88, 0x5BDB}, //2162 #CJK UNIFIED IDEOGRAPH + {0x8C89, 0x5BDC}, //2163 #CJK UNIFIED IDEOGRAPH + {0x8C8A, 0x5BE0}, //2164 #CJK UNIFIED IDEOGRAPH + {0x8C8B, 0x5BE2}, //2165 #CJK UNIFIED IDEOGRAPH + {0x8C8C, 0x5BE3}, //2166 #CJK UNIFIED IDEOGRAPH + {0x8C8D, 0x5BE6}, //2167 #CJK UNIFIED IDEOGRAPH + {0x8C8E, 0x5BE7}, //2168 #CJK UNIFIED IDEOGRAPH + {0x8C8F, 0x5BE9}, //2169 #CJK UNIFIED IDEOGRAPH + {0x8C90, 0x5BEA}, //2170 #CJK UNIFIED IDEOGRAPH + {0x8C91, 0x5BEB}, //2171 #CJK UNIFIED IDEOGRAPH + {0x8C92, 0x5BEC}, //2172 #CJK UNIFIED IDEOGRAPH + {0x8C93, 0x5BED}, //2173 #CJK UNIFIED IDEOGRAPH + {0x8C94, 0x5BEF}, //2174 #CJK UNIFIED IDEOGRAPH + {0x8C95, 0x5BF1}, //2175 #CJK UNIFIED IDEOGRAPH + {0x8C96, 0x5BF2}, //2176 #CJK UNIFIED IDEOGRAPH + {0x8C97, 0x5BF3}, //2177 #CJK UNIFIED IDEOGRAPH + {0x8C98, 0x5BF4}, //2178 #CJK UNIFIED IDEOGRAPH + {0x8C99, 0x5BF5}, //2179 #CJK UNIFIED IDEOGRAPH + {0x8C9A, 0x5BF6}, //2180 #CJK UNIFIED IDEOGRAPH + {0x8C9B, 0x5BF7}, //2181 #CJK UNIFIED IDEOGRAPH + {0x8C9C, 0x5BFD}, //2182 #CJK UNIFIED IDEOGRAPH + {0x8C9D, 0x5BFE}, //2183 #CJK UNIFIED IDEOGRAPH + {0x8C9E, 0x5C00}, //2184 #CJK UNIFIED IDEOGRAPH + {0x8C9F, 0x5C02}, //2185 #CJK UNIFIED IDEOGRAPH + {0x8CA0, 0x5C03}, //2186 #CJK UNIFIED IDEOGRAPH + {0x8CA1, 0x5C05}, //2187 #CJK UNIFIED IDEOGRAPH + {0x8CA2, 0x5C07}, //2188 #CJK UNIFIED IDEOGRAPH + {0x8CA3, 0x5C08}, //2189 #CJK UNIFIED IDEOGRAPH + {0x8CA4, 0x5C0B}, //2190 #CJK UNIFIED IDEOGRAPH + {0x8CA5, 0x5C0C}, //2191 #CJK UNIFIED IDEOGRAPH + {0x8CA6, 0x5C0D}, //2192 #CJK UNIFIED IDEOGRAPH + {0x8CA7, 0x5C0E}, //2193 #CJK UNIFIED IDEOGRAPH + {0x8CA8, 0x5C10}, //2194 #CJK UNIFIED IDEOGRAPH + {0x8CA9, 0x5C12}, //2195 #CJK UNIFIED IDEOGRAPH + {0x8CAA, 0x5C13}, //2196 #CJK UNIFIED IDEOGRAPH + {0x8CAB, 0x5C17}, //2197 #CJK UNIFIED IDEOGRAPH + {0x8CAC, 0x5C19}, //2198 #CJK UNIFIED IDEOGRAPH + {0x8CAD, 0x5C1B}, //2199 #CJK UNIFIED IDEOGRAPH + {0x8CAE, 0x5C1E}, //2200 #CJK UNIFIED IDEOGRAPH + {0x8CAF, 0x5C1F}, //2201 #CJK UNIFIED IDEOGRAPH + {0x8CB0, 0x5C20}, //2202 #CJK UNIFIED IDEOGRAPH + {0x8CB1, 0x5C21}, //2203 #CJK UNIFIED IDEOGRAPH + {0x8CB2, 0x5C23}, //2204 #CJK UNIFIED IDEOGRAPH + {0x8CB3, 0x5C26}, //2205 #CJK UNIFIED IDEOGRAPH + {0x8CB4, 0x5C28}, //2206 #CJK UNIFIED IDEOGRAPH + {0x8CB5, 0x5C29}, //2207 #CJK UNIFIED IDEOGRAPH + {0x8CB6, 0x5C2A}, //2208 #CJK UNIFIED IDEOGRAPH + {0x8CB7, 0x5C2B}, //2209 #CJK UNIFIED IDEOGRAPH + {0x8CB8, 0x5C2D}, //2210 #CJK UNIFIED IDEOGRAPH + {0x8CB9, 0x5C2E}, //2211 #CJK UNIFIED IDEOGRAPH + {0x8CBA, 0x5C2F}, //2212 #CJK UNIFIED IDEOGRAPH + {0x8CBB, 0x5C30}, //2213 #CJK UNIFIED IDEOGRAPH + {0x8CBC, 0x5C32}, //2214 #CJK UNIFIED IDEOGRAPH + {0x8CBD, 0x5C33}, //2215 #CJK UNIFIED IDEOGRAPH + {0x8CBE, 0x5C35}, //2216 #CJK UNIFIED IDEOGRAPH + {0x8CBF, 0x5C36}, //2217 #CJK UNIFIED IDEOGRAPH + {0x8CC0, 0x5C37}, //2218 #CJK UNIFIED IDEOGRAPH + {0x8CC1, 0x5C43}, //2219 #CJK UNIFIED IDEOGRAPH + {0x8CC2, 0x5C44}, //2220 #CJK UNIFIED IDEOGRAPH + {0x8CC3, 0x5C46}, //2221 #CJK UNIFIED IDEOGRAPH + {0x8CC4, 0x5C47}, //2222 #CJK UNIFIED IDEOGRAPH + {0x8CC5, 0x5C4C}, //2223 #CJK UNIFIED IDEOGRAPH + {0x8CC6, 0x5C4D}, //2224 #CJK UNIFIED IDEOGRAPH + {0x8CC7, 0x5C52}, //2225 #CJK UNIFIED IDEOGRAPH + {0x8CC8, 0x5C53}, //2226 #CJK UNIFIED IDEOGRAPH + {0x8CC9, 0x5C54}, //2227 #CJK UNIFIED IDEOGRAPH + {0x8CCA, 0x5C56}, //2228 #CJK UNIFIED IDEOGRAPH + {0x8CCB, 0x5C57}, //2229 #CJK UNIFIED IDEOGRAPH + {0x8CCC, 0x5C58}, //2230 #CJK UNIFIED IDEOGRAPH + {0x8CCD, 0x5C5A}, //2231 #CJK UNIFIED IDEOGRAPH + {0x8CCE, 0x5C5B}, //2232 #CJK UNIFIED IDEOGRAPH + {0x8CCF, 0x5C5C}, //2233 #CJK UNIFIED IDEOGRAPH + {0x8CD0, 0x5C5D}, //2234 #CJK UNIFIED IDEOGRAPH + {0x8CD1, 0x5C5F}, //2235 #CJK UNIFIED IDEOGRAPH + {0x8CD2, 0x5C62}, //2236 #CJK UNIFIED IDEOGRAPH + {0x8CD3, 0x5C64}, //2237 #CJK UNIFIED IDEOGRAPH + {0x8CD4, 0x5C67}, //2238 #CJK UNIFIED IDEOGRAPH + {0x8CD5, 0x5C68}, //2239 #CJK UNIFIED IDEOGRAPH + {0x8CD6, 0x5C69}, //2240 #CJK UNIFIED IDEOGRAPH + {0x8CD7, 0x5C6A}, //2241 #CJK UNIFIED IDEOGRAPH + {0x8CD8, 0x5C6B}, //2242 #CJK UNIFIED IDEOGRAPH + {0x8CD9, 0x5C6C}, //2243 #CJK UNIFIED IDEOGRAPH + {0x8CDA, 0x5C6D}, //2244 #CJK UNIFIED IDEOGRAPH + {0x8CDB, 0x5C70}, //2245 #CJK UNIFIED IDEOGRAPH + {0x8CDC, 0x5C72}, //2246 #CJK UNIFIED IDEOGRAPH + {0x8CDD, 0x5C73}, //2247 #CJK UNIFIED IDEOGRAPH + {0x8CDE, 0x5C74}, //2248 #CJK UNIFIED IDEOGRAPH + {0x8CDF, 0x5C75}, //2249 #CJK UNIFIED IDEOGRAPH + {0x8CE0, 0x5C76}, //2250 #CJK UNIFIED IDEOGRAPH + {0x8CE1, 0x5C77}, //2251 #CJK UNIFIED IDEOGRAPH + {0x8CE2, 0x5C78}, //2252 #CJK UNIFIED IDEOGRAPH + {0x8CE3, 0x5C7B}, //2253 #CJK UNIFIED IDEOGRAPH + {0x8CE4, 0x5C7C}, //2254 #CJK UNIFIED IDEOGRAPH + {0x8CE5, 0x5C7D}, //2255 #CJK UNIFIED IDEOGRAPH + {0x8CE6, 0x5C7E}, //2256 #CJK UNIFIED IDEOGRAPH + {0x8CE7, 0x5C80}, //2257 #CJK UNIFIED IDEOGRAPH + {0x8CE8, 0x5C83}, //2258 #CJK UNIFIED IDEOGRAPH + {0x8CE9, 0x5C84}, //2259 #CJK UNIFIED IDEOGRAPH + {0x8CEA, 0x5C85}, //2260 #CJK UNIFIED IDEOGRAPH + {0x8CEB, 0x5C86}, //2261 #CJK UNIFIED IDEOGRAPH + {0x8CEC, 0x5C87}, //2262 #CJK UNIFIED IDEOGRAPH + {0x8CED, 0x5C89}, //2263 #CJK UNIFIED IDEOGRAPH + {0x8CEE, 0x5C8A}, //2264 #CJK UNIFIED IDEOGRAPH + {0x8CEF, 0x5C8B}, //2265 #CJK UNIFIED IDEOGRAPH + {0x8CF0, 0x5C8E}, //2266 #CJK UNIFIED IDEOGRAPH + {0x8CF1, 0x5C8F}, //2267 #CJK UNIFIED IDEOGRAPH + {0x8CF2, 0x5C92}, //2268 #CJK UNIFIED IDEOGRAPH + {0x8CF3, 0x5C93}, //2269 #CJK UNIFIED IDEOGRAPH + {0x8CF4, 0x5C95}, //2270 #CJK UNIFIED IDEOGRAPH + {0x8CF5, 0x5C9D}, //2271 #CJK UNIFIED IDEOGRAPH + {0x8CF6, 0x5C9E}, //2272 #CJK UNIFIED IDEOGRAPH + {0x8CF7, 0x5C9F}, //2273 #CJK UNIFIED IDEOGRAPH + {0x8CF8, 0x5CA0}, //2274 #CJK UNIFIED IDEOGRAPH + {0x8CF9, 0x5CA1}, //2275 #CJK UNIFIED IDEOGRAPH + {0x8CFA, 0x5CA4}, //2276 #CJK UNIFIED IDEOGRAPH + {0x8CFB, 0x5CA5}, //2277 #CJK UNIFIED IDEOGRAPH + {0x8CFC, 0x5CA6}, //2278 #CJK UNIFIED IDEOGRAPH + {0x8CFD, 0x5CA7}, //2279 #CJK UNIFIED IDEOGRAPH + {0x8CFE, 0x5CA8}, //2280 #CJK UNIFIED IDEOGRAPH + {0x8D40, 0x5CAA}, //2281 #CJK UNIFIED IDEOGRAPH + {0x8D41, 0x5CAE}, //2282 #CJK UNIFIED IDEOGRAPH + {0x8D42, 0x5CAF}, //2283 #CJK UNIFIED IDEOGRAPH + {0x8D43, 0x5CB0}, //2284 #CJK UNIFIED IDEOGRAPH + {0x8D44, 0x5CB2}, //2285 #CJK UNIFIED IDEOGRAPH + {0x8D45, 0x5CB4}, //2286 #CJK UNIFIED IDEOGRAPH + {0x8D46, 0x5CB6}, //2287 #CJK UNIFIED IDEOGRAPH + {0x8D47, 0x5CB9}, //2288 #CJK UNIFIED IDEOGRAPH + {0x8D48, 0x5CBA}, //2289 #CJK UNIFIED IDEOGRAPH + {0x8D49, 0x5CBB}, //2290 #CJK UNIFIED IDEOGRAPH + {0x8D4A, 0x5CBC}, //2291 #CJK UNIFIED IDEOGRAPH + {0x8D4B, 0x5CBE}, //2292 #CJK UNIFIED IDEOGRAPH + {0x8D4C, 0x5CC0}, //2293 #CJK UNIFIED IDEOGRAPH + {0x8D4D, 0x5CC2}, //2294 #CJK UNIFIED IDEOGRAPH + {0x8D4E, 0x5CC3}, //2295 #CJK UNIFIED IDEOGRAPH + {0x8D4F, 0x5CC5}, //2296 #CJK UNIFIED IDEOGRAPH + {0x8D50, 0x5CC6}, //2297 #CJK UNIFIED IDEOGRAPH + {0x8D51, 0x5CC7}, //2298 #CJK UNIFIED IDEOGRAPH + {0x8D52, 0x5CC8}, //2299 #CJK UNIFIED IDEOGRAPH + {0x8D53, 0x5CC9}, //2300 #CJK UNIFIED IDEOGRAPH + {0x8D54, 0x5CCA}, //2301 #CJK UNIFIED IDEOGRAPH + {0x8D55, 0x5CCC}, //2302 #CJK UNIFIED IDEOGRAPH + {0x8D56, 0x5CCD}, //2303 #CJK UNIFIED IDEOGRAPH + {0x8D57, 0x5CCE}, //2304 #CJK UNIFIED IDEOGRAPH + {0x8D58, 0x5CCF}, //2305 #CJK UNIFIED IDEOGRAPH + {0x8D59, 0x5CD0}, //2306 #CJK UNIFIED IDEOGRAPH + {0x8D5A, 0x5CD1}, //2307 #CJK UNIFIED IDEOGRAPH + {0x8D5B, 0x5CD3}, //2308 #CJK UNIFIED IDEOGRAPH + {0x8D5C, 0x5CD4}, //2309 #CJK UNIFIED IDEOGRAPH + {0x8D5D, 0x5CD5}, //2310 #CJK UNIFIED IDEOGRAPH + {0x8D5E, 0x5CD6}, //2311 #CJK UNIFIED IDEOGRAPH + {0x8D5F, 0x5CD7}, //2312 #CJK UNIFIED IDEOGRAPH + {0x8D60, 0x5CD8}, //2313 #CJK UNIFIED IDEOGRAPH + {0x8D61, 0x5CDA}, //2314 #CJK UNIFIED IDEOGRAPH + {0x8D62, 0x5CDB}, //2315 #CJK UNIFIED IDEOGRAPH + {0x8D63, 0x5CDC}, //2316 #CJK UNIFIED IDEOGRAPH + {0x8D64, 0x5CDD}, //2317 #CJK UNIFIED IDEOGRAPH + {0x8D65, 0x5CDE}, //2318 #CJK UNIFIED IDEOGRAPH + {0x8D66, 0x5CDF}, //2319 #CJK UNIFIED IDEOGRAPH + {0x8D67, 0x5CE0}, //2320 #CJK UNIFIED IDEOGRAPH + {0x8D68, 0x5CE2}, //2321 #CJK UNIFIED IDEOGRAPH + {0x8D69, 0x5CE3}, //2322 #CJK UNIFIED IDEOGRAPH + {0x8D6A, 0x5CE7}, //2323 #CJK UNIFIED IDEOGRAPH + {0x8D6B, 0x5CE9}, //2324 #CJK UNIFIED IDEOGRAPH + {0x8D6C, 0x5CEB}, //2325 #CJK UNIFIED IDEOGRAPH + {0x8D6D, 0x5CEC}, //2326 #CJK UNIFIED IDEOGRAPH + {0x8D6E, 0x5CEE}, //2327 #CJK UNIFIED IDEOGRAPH + {0x8D6F, 0x5CEF}, //2328 #CJK UNIFIED IDEOGRAPH + {0x8D70, 0x5CF1}, //2329 #CJK UNIFIED IDEOGRAPH + {0x8D71, 0x5CF2}, //2330 #CJK UNIFIED IDEOGRAPH + {0x8D72, 0x5CF3}, //2331 #CJK UNIFIED IDEOGRAPH + {0x8D73, 0x5CF4}, //2332 #CJK UNIFIED IDEOGRAPH + {0x8D74, 0x5CF5}, //2333 #CJK UNIFIED IDEOGRAPH + {0x8D75, 0x5CF6}, //2334 #CJK UNIFIED IDEOGRAPH + {0x8D76, 0x5CF7}, //2335 #CJK UNIFIED IDEOGRAPH + {0x8D77, 0x5CF8}, //2336 #CJK UNIFIED IDEOGRAPH + {0x8D78, 0x5CF9}, //2337 #CJK UNIFIED IDEOGRAPH + {0x8D79, 0x5CFA}, //2338 #CJK UNIFIED IDEOGRAPH + {0x8D7A, 0x5CFC}, //2339 #CJK UNIFIED IDEOGRAPH + {0x8D7B, 0x5CFD}, //2340 #CJK UNIFIED IDEOGRAPH + {0x8D7C, 0x5CFE}, //2341 #CJK UNIFIED IDEOGRAPH + {0x8D7D, 0x5CFF}, //2342 #CJK UNIFIED IDEOGRAPH + {0x8D7E, 0x5D00}, //2343 #CJK UNIFIED IDEOGRAPH + {0x8D80, 0x5D01}, //2344 #CJK UNIFIED IDEOGRAPH + {0x8D81, 0x5D04}, //2345 #CJK UNIFIED IDEOGRAPH + {0x8D82, 0x5D05}, //2346 #CJK UNIFIED IDEOGRAPH + {0x8D83, 0x5D08}, //2347 #CJK UNIFIED IDEOGRAPH + {0x8D84, 0x5D09}, //2348 #CJK UNIFIED IDEOGRAPH + {0x8D85, 0x5D0A}, //2349 #CJK UNIFIED IDEOGRAPH + {0x8D86, 0x5D0B}, //2350 #CJK UNIFIED IDEOGRAPH + {0x8D87, 0x5D0C}, //2351 #CJK UNIFIED IDEOGRAPH + {0x8D88, 0x5D0D}, //2352 #CJK UNIFIED IDEOGRAPH + {0x8D89, 0x5D0F}, //2353 #CJK UNIFIED IDEOGRAPH + {0x8D8A, 0x5D10}, //2354 #CJK UNIFIED IDEOGRAPH + {0x8D8B, 0x5D11}, //2355 #CJK UNIFIED IDEOGRAPH + {0x8D8C, 0x5D12}, //2356 #CJK UNIFIED IDEOGRAPH + {0x8D8D, 0x5D13}, //2357 #CJK UNIFIED IDEOGRAPH + {0x8D8E, 0x5D15}, //2358 #CJK UNIFIED IDEOGRAPH + {0x8D8F, 0x5D17}, //2359 #CJK UNIFIED IDEOGRAPH + {0x8D90, 0x5D18}, //2360 #CJK UNIFIED IDEOGRAPH + {0x8D91, 0x5D19}, //2361 #CJK UNIFIED IDEOGRAPH + {0x8D92, 0x5D1A}, //2362 #CJK UNIFIED IDEOGRAPH + {0x8D93, 0x5D1C}, //2363 #CJK UNIFIED IDEOGRAPH + {0x8D94, 0x5D1D}, //2364 #CJK UNIFIED IDEOGRAPH + {0x8D95, 0x5D1F}, //2365 #CJK UNIFIED IDEOGRAPH + {0x8D96, 0x5D20}, //2366 #CJK UNIFIED IDEOGRAPH + {0x8D97, 0x5D21}, //2367 #CJK UNIFIED IDEOGRAPH + {0x8D98, 0x5D22}, //2368 #CJK UNIFIED IDEOGRAPH + {0x8D99, 0x5D23}, //2369 #CJK UNIFIED IDEOGRAPH + {0x8D9A, 0x5D25}, //2370 #CJK UNIFIED IDEOGRAPH + {0x8D9B, 0x5D28}, //2371 #CJK UNIFIED IDEOGRAPH + {0x8D9C, 0x5D2A}, //2372 #CJK UNIFIED IDEOGRAPH + {0x8D9D, 0x5D2B}, //2373 #CJK UNIFIED IDEOGRAPH + {0x8D9E, 0x5D2C}, //2374 #CJK UNIFIED IDEOGRAPH + {0x8D9F, 0x5D2F}, //2375 #CJK UNIFIED IDEOGRAPH + {0x8DA0, 0x5D30}, //2376 #CJK UNIFIED IDEOGRAPH + {0x8DA1, 0x5D31}, //2377 #CJK UNIFIED IDEOGRAPH + {0x8DA2, 0x5D32}, //2378 #CJK UNIFIED IDEOGRAPH + {0x8DA3, 0x5D33}, //2379 #CJK UNIFIED IDEOGRAPH + {0x8DA4, 0x5D35}, //2380 #CJK UNIFIED IDEOGRAPH + {0x8DA5, 0x5D36}, //2381 #CJK UNIFIED IDEOGRAPH + {0x8DA6, 0x5D37}, //2382 #CJK UNIFIED IDEOGRAPH + {0x8DA7, 0x5D38}, //2383 #CJK UNIFIED IDEOGRAPH + {0x8DA8, 0x5D39}, //2384 #CJK UNIFIED IDEOGRAPH + {0x8DA9, 0x5D3A}, //2385 #CJK UNIFIED IDEOGRAPH + {0x8DAA, 0x5D3B}, //2386 #CJK UNIFIED IDEOGRAPH + {0x8DAB, 0x5D3C}, //2387 #CJK UNIFIED IDEOGRAPH + {0x8DAC, 0x5D3F}, //2388 #CJK UNIFIED IDEOGRAPH + {0x8DAD, 0x5D40}, //2389 #CJK UNIFIED IDEOGRAPH + {0x8DAE, 0x5D41}, //2390 #CJK UNIFIED IDEOGRAPH + {0x8DAF, 0x5D42}, //2391 #CJK UNIFIED IDEOGRAPH + {0x8DB0, 0x5D43}, //2392 #CJK UNIFIED IDEOGRAPH + {0x8DB1, 0x5D44}, //2393 #CJK UNIFIED IDEOGRAPH + {0x8DB2, 0x5D45}, //2394 #CJK UNIFIED IDEOGRAPH + {0x8DB3, 0x5D46}, //2395 #CJK UNIFIED IDEOGRAPH + {0x8DB4, 0x5D48}, //2396 #CJK UNIFIED IDEOGRAPH + {0x8DB5, 0x5D49}, //2397 #CJK UNIFIED IDEOGRAPH + {0x8DB6, 0x5D4D}, //2398 #CJK UNIFIED IDEOGRAPH + {0x8DB7, 0x5D4E}, //2399 #CJK UNIFIED IDEOGRAPH + {0x8DB8, 0x5D4F}, //2400 #CJK UNIFIED IDEOGRAPH + {0x8DB9, 0x5D50}, //2401 #CJK UNIFIED IDEOGRAPH + {0x8DBA, 0x5D51}, //2402 #CJK UNIFIED IDEOGRAPH + {0x8DBB, 0x5D52}, //2403 #CJK UNIFIED IDEOGRAPH + {0x8DBC, 0x5D53}, //2404 #CJK UNIFIED IDEOGRAPH + {0x8DBD, 0x5D54}, //2405 #CJK UNIFIED IDEOGRAPH + {0x8DBE, 0x5D55}, //2406 #CJK UNIFIED IDEOGRAPH + {0x8DBF, 0x5D56}, //2407 #CJK UNIFIED IDEOGRAPH + {0x8DC0, 0x5D57}, //2408 #CJK UNIFIED IDEOGRAPH + {0x8DC1, 0x5D59}, //2409 #CJK UNIFIED IDEOGRAPH + {0x8DC2, 0x5D5A}, //2410 #CJK UNIFIED IDEOGRAPH + {0x8DC3, 0x5D5C}, //2411 #CJK UNIFIED IDEOGRAPH + {0x8DC4, 0x5D5E}, //2412 #CJK UNIFIED IDEOGRAPH + {0x8DC5, 0x5D5F}, //2413 #CJK UNIFIED IDEOGRAPH + {0x8DC6, 0x5D60}, //2414 #CJK UNIFIED IDEOGRAPH + {0x8DC7, 0x5D61}, //2415 #CJK UNIFIED IDEOGRAPH + {0x8DC8, 0x5D62}, //2416 #CJK UNIFIED IDEOGRAPH + {0x8DC9, 0x5D63}, //2417 #CJK UNIFIED IDEOGRAPH + {0x8DCA, 0x5D64}, //2418 #CJK UNIFIED IDEOGRAPH + {0x8DCB, 0x5D65}, //2419 #CJK UNIFIED IDEOGRAPH + {0x8DCC, 0x5D66}, //2420 #CJK UNIFIED IDEOGRAPH + {0x8DCD, 0x5D67}, //2421 #CJK UNIFIED IDEOGRAPH + {0x8DCE, 0x5D68}, //2422 #CJK UNIFIED IDEOGRAPH + {0x8DCF, 0x5D6A}, //2423 #CJK UNIFIED IDEOGRAPH + {0x8DD0, 0x5D6D}, //2424 #CJK UNIFIED IDEOGRAPH + {0x8DD1, 0x5D6E}, //2425 #CJK UNIFIED IDEOGRAPH + {0x8DD2, 0x5D70}, //2426 #CJK UNIFIED IDEOGRAPH + {0x8DD3, 0x5D71}, //2427 #CJK UNIFIED IDEOGRAPH + {0x8DD4, 0x5D72}, //2428 #CJK UNIFIED IDEOGRAPH + {0x8DD5, 0x5D73}, //2429 #CJK UNIFIED IDEOGRAPH + {0x8DD6, 0x5D75}, //2430 #CJK UNIFIED IDEOGRAPH + {0x8DD7, 0x5D76}, //2431 #CJK UNIFIED IDEOGRAPH + {0x8DD8, 0x5D77}, //2432 #CJK UNIFIED IDEOGRAPH + {0x8DD9, 0x5D78}, //2433 #CJK UNIFIED IDEOGRAPH + {0x8DDA, 0x5D79}, //2434 #CJK UNIFIED IDEOGRAPH + {0x8DDB, 0x5D7A}, //2435 #CJK UNIFIED IDEOGRAPH + {0x8DDC, 0x5D7B}, //2436 #CJK UNIFIED IDEOGRAPH + {0x8DDD, 0x5D7C}, //2437 #CJK UNIFIED IDEOGRAPH + {0x8DDE, 0x5D7D}, //2438 #CJK UNIFIED IDEOGRAPH + {0x8DDF, 0x5D7E}, //2439 #CJK UNIFIED IDEOGRAPH + {0x8DE0, 0x5D7F}, //2440 #CJK UNIFIED IDEOGRAPH + {0x8DE1, 0x5D80}, //2441 #CJK UNIFIED IDEOGRAPH + {0x8DE2, 0x5D81}, //2442 #CJK UNIFIED IDEOGRAPH + {0x8DE3, 0x5D83}, //2443 #CJK UNIFIED IDEOGRAPH + {0x8DE4, 0x5D84}, //2444 #CJK UNIFIED IDEOGRAPH + {0x8DE5, 0x5D85}, //2445 #CJK UNIFIED IDEOGRAPH + {0x8DE6, 0x5D86}, //2446 #CJK UNIFIED IDEOGRAPH + {0x8DE7, 0x5D87}, //2447 #CJK UNIFIED IDEOGRAPH + {0x8DE8, 0x5D88}, //2448 #CJK UNIFIED IDEOGRAPH + {0x8DE9, 0x5D89}, //2449 #CJK UNIFIED IDEOGRAPH + {0x8DEA, 0x5D8A}, //2450 #CJK UNIFIED IDEOGRAPH + {0x8DEB, 0x5D8B}, //2451 #CJK UNIFIED IDEOGRAPH + {0x8DEC, 0x5D8C}, //2452 #CJK UNIFIED IDEOGRAPH + {0x8DED, 0x5D8D}, //2453 #CJK UNIFIED IDEOGRAPH + {0x8DEE, 0x5D8E}, //2454 #CJK UNIFIED IDEOGRAPH + {0x8DEF, 0x5D8F}, //2455 #CJK UNIFIED IDEOGRAPH + {0x8DF0, 0x5D90}, //2456 #CJK UNIFIED IDEOGRAPH + {0x8DF1, 0x5D91}, //2457 #CJK UNIFIED IDEOGRAPH + {0x8DF2, 0x5D92}, //2458 #CJK UNIFIED IDEOGRAPH + {0x8DF3, 0x5D93}, //2459 #CJK UNIFIED IDEOGRAPH + {0x8DF4, 0x5D94}, //2460 #CJK UNIFIED IDEOGRAPH + {0x8DF5, 0x5D95}, //2461 #CJK UNIFIED IDEOGRAPH + {0x8DF6, 0x5D96}, //2462 #CJK UNIFIED IDEOGRAPH + {0x8DF7, 0x5D97}, //2463 #CJK UNIFIED IDEOGRAPH + {0x8DF8, 0x5D98}, //2464 #CJK UNIFIED IDEOGRAPH + {0x8DF9, 0x5D9A}, //2465 #CJK UNIFIED IDEOGRAPH + {0x8DFA, 0x5D9B}, //2466 #CJK UNIFIED IDEOGRAPH + {0x8DFB, 0x5D9C}, //2467 #CJK UNIFIED IDEOGRAPH + {0x8DFC, 0x5D9E}, //2468 #CJK UNIFIED IDEOGRAPH + {0x8DFD, 0x5D9F}, //2469 #CJK UNIFIED IDEOGRAPH + {0x8DFE, 0x5DA0}, //2470 #CJK UNIFIED IDEOGRAPH + {0x8E40, 0x5DA1}, //2471 #CJK UNIFIED IDEOGRAPH + {0x8E41, 0x5DA2}, //2472 #CJK UNIFIED IDEOGRAPH + {0x8E42, 0x5DA3}, //2473 #CJK UNIFIED IDEOGRAPH + {0x8E43, 0x5DA4}, //2474 #CJK UNIFIED IDEOGRAPH + {0x8E44, 0x5DA5}, //2475 #CJK UNIFIED IDEOGRAPH + {0x8E45, 0x5DA6}, //2476 #CJK UNIFIED IDEOGRAPH + {0x8E46, 0x5DA7}, //2477 #CJK UNIFIED IDEOGRAPH + {0x8E47, 0x5DA8}, //2478 #CJK UNIFIED IDEOGRAPH + {0x8E48, 0x5DA9}, //2479 #CJK UNIFIED IDEOGRAPH + {0x8E49, 0x5DAA}, //2480 #CJK UNIFIED IDEOGRAPH + {0x8E4A, 0x5DAB}, //2481 #CJK UNIFIED IDEOGRAPH + {0x8E4B, 0x5DAC}, //2482 #CJK UNIFIED IDEOGRAPH + {0x8E4C, 0x5DAD}, //2483 #CJK UNIFIED IDEOGRAPH + {0x8E4D, 0x5DAE}, //2484 #CJK UNIFIED IDEOGRAPH + {0x8E4E, 0x5DAF}, //2485 #CJK UNIFIED IDEOGRAPH + {0x8E4F, 0x5DB0}, //2486 #CJK UNIFIED IDEOGRAPH + {0x8E50, 0x5DB1}, //2487 #CJK UNIFIED IDEOGRAPH + {0x8E51, 0x5DB2}, //2488 #CJK UNIFIED IDEOGRAPH + {0x8E52, 0x5DB3}, //2489 #CJK UNIFIED IDEOGRAPH + {0x8E53, 0x5DB4}, //2490 #CJK UNIFIED IDEOGRAPH + {0x8E54, 0x5DB5}, //2491 #CJK UNIFIED IDEOGRAPH + {0x8E55, 0x5DB6}, //2492 #CJK UNIFIED IDEOGRAPH + {0x8E56, 0x5DB8}, //2493 #CJK UNIFIED IDEOGRAPH + {0x8E57, 0x5DB9}, //2494 #CJK UNIFIED IDEOGRAPH + {0x8E58, 0x5DBA}, //2495 #CJK UNIFIED IDEOGRAPH + {0x8E59, 0x5DBB}, //2496 #CJK UNIFIED IDEOGRAPH + {0x8E5A, 0x5DBC}, //2497 #CJK UNIFIED IDEOGRAPH + {0x8E5B, 0x5DBD}, //2498 #CJK UNIFIED IDEOGRAPH + {0x8E5C, 0x5DBE}, //2499 #CJK UNIFIED IDEOGRAPH + {0x8E5D, 0x5DBF}, //2500 #CJK UNIFIED IDEOGRAPH + {0x8E5E, 0x5DC0}, //2501 #CJK UNIFIED IDEOGRAPH + {0x8E5F, 0x5DC1}, //2502 #CJK UNIFIED IDEOGRAPH + {0x8E60, 0x5DC2}, //2503 #CJK UNIFIED IDEOGRAPH + {0x8E61, 0x5DC3}, //2504 #CJK UNIFIED IDEOGRAPH + {0x8E62, 0x5DC4}, //2505 #CJK UNIFIED IDEOGRAPH + {0x8E63, 0x5DC6}, //2506 #CJK UNIFIED IDEOGRAPH + {0x8E64, 0x5DC7}, //2507 #CJK UNIFIED IDEOGRAPH + {0x8E65, 0x5DC8}, //2508 #CJK UNIFIED IDEOGRAPH + {0x8E66, 0x5DC9}, //2509 #CJK UNIFIED IDEOGRAPH + {0x8E67, 0x5DCA}, //2510 #CJK UNIFIED IDEOGRAPH + {0x8E68, 0x5DCB}, //2511 #CJK UNIFIED IDEOGRAPH + {0x8E69, 0x5DCC}, //2512 #CJK UNIFIED IDEOGRAPH + {0x8E6A, 0x5DCE}, //2513 #CJK UNIFIED IDEOGRAPH + {0x8E6B, 0x5DCF}, //2514 #CJK UNIFIED IDEOGRAPH + {0x8E6C, 0x5DD0}, //2515 #CJK UNIFIED IDEOGRAPH + {0x8E6D, 0x5DD1}, //2516 #CJK UNIFIED IDEOGRAPH + {0x8E6E, 0x5DD2}, //2517 #CJK UNIFIED IDEOGRAPH + {0x8E6F, 0x5DD3}, //2518 #CJK UNIFIED IDEOGRAPH + {0x8E70, 0x5DD4}, //2519 #CJK UNIFIED IDEOGRAPH + {0x8E71, 0x5DD5}, //2520 #CJK UNIFIED IDEOGRAPH + {0x8E72, 0x5DD6}, //2521 #CJK UNIFIED IDEOGRAPH + {0x8E73, 0x5DD7}, //2522 #CJK UNIFIED IDEOGRAPH + {0x8E74, 0x5DD8}, //2523 #CJK UNIFIED IDEOGRAPH + {0x8E75, 0x5DD9}, //2524 #CJK UNIFIED IDEOGRAPH + {0x8E76, 0x5DDA}, //2525 #CJK UNIFIED IDEOGRAPH + {0x8E77, 0x5DDC}, //2526 #CJK UNIFIED IDEOGRAPH + {0x8E78, 0x5DDF}, //2527 #CJK UNIFIED IDEOGRAPH + {0x8E79, 0x5DE0}, //2528 #CJK UNIFIED IDEOGRAPH + {0x8E7A, 0x5DE3}, //2529 #CJK UNIFIED IDEOGRAPH + {0x8E7B, 0x5DE4}, //2530 #CJK UNIFIED IDEOGRAPH + {0x8E7C, 0x5DEA}, //2531 #CJK UNIFIED IDEOGRAPH + {0x8E7D, 0x5DEC}, //2532 #CJK UNIFIED IDEOGRAPH + {0x8E7E, 0x5DED}, //2533 #CJK UNIFIED IDEOGRAPH + {0x8E80, 0x5DF0}, //2534 #CJK UNIFIED IDEOGRAPH + {0x8E81, 0x5DF5}, //2535 #CJK UNIFIED IDEOGRAPH + {0x8E82, 0x5DF6}, //2536 #CJK UNIFIED IDEOGRAPH + {0x8E83, 0x5DF8}, //2537 #CJK UNIFIED IDEOGRAPH + {0x8E84, 0x5DF9}, //2538 #CJK UNIFIED IDEOGRAPH + {0x8E85, 0x5DFA}, //2539 #CJK UNIFIED IDEOGRAPH + {0x8E86, 0x5DFB}, //2540 #CJK UNIFIED IDEOGRAPH + {0x8E87, 0x5DFC}, //2541 #CJK UNIFIED IDEOGRAPH + {0x8E88, 0x5DFF}, //2542 #CJK UNIFIED IDEOGRAPH + {0x8E89, 0x5E00}, //2543 #CJK UNIFIED IDEOGRAPH + {0x8E8A, 0x5E04}, //2544 #CJK UNIFIED IDEOGRAPH + {0x8E8B, 0x5E07}, //2545 #CJK UNIFIED IDEOGRAPH + {0x8E8C, 0x5E09}, //2546 #CJK UNIFIED IDEOGRAPH + {0x8E8D, 0x5E0A}, //2547 #CJK UNIFIED IDEOGRAPH + {0x8E8E, 0x5E0B}, //2548 #CJK UNIFIED IDEOGRAPH + {0x8E8F, 0x5E0D}, //2549 #CJK UNIFIED IDEOGRAPH + {0x8E90, 0x5E0E}, //2550 #CJK UNIFIED IDEOGRAPH + {0x8E91, 0x5E12}, //2551 #CJK UNIFIED IDEOGRAPH + {0x8E92, 0x5E13}, //2552 #CJK UNIFIED IDEOGRAPH + {0x8E93, 0x5E17}, //2553 #CJK UNIFIED IDEOGRAPH + {0x8E94, 0x5E1E}, //2554 #CJK UNIFIED IDEOGRAPH + {0x8E95, 0x5E1F}, //2555 #CJK UNIFIED IDEOGRAPH + {0x8E96, 0x5E20}, //2556 #CJK UNIFIED IDEOGRAPH + {0x8E97, 0x5E21}, //2557 #CJK UNIFIED IDEOGRAPH + {0x8E98, 0x5E22}, //2558 #CJK UNIFIED IDEOGRAPH + {0x8E99, 0x5E23}, //2559 #CJK UNIFIED IDEOGRAPH + {0x8E9A, 0x5E24}, //2560 #CJK UNIFIED IDEOGRAPH + {0x8E9B, 0x5E25}, //2561 #CJK UNIFIED IDEOGRAPH + {0x8E9C, 0x5E28}, //2562 #CJK UNIFIED IDEOGRAPH + {0x8E9D, 0x5E29}, //2563 #CJK UNIFIED IDEOGRAPH + {0x8E9E, 0x5E2A}, //2564 #CJK UNIFIED IDEOGRAPH + {0x8E9F, 0x5E2B}, //2565 #CJK UNIFIED IDEOGRAPH + {0x8EA0, 0x5E2C}, //2566 #CJK UNIFIED IDEOGRAPH + {0x8EA1, 0x5E2F}, //2567 #CJK UNIFIED IDEOGRAPH + {0x8EA2, 0x5E30}, //2568 #CJK UNIFIED IDEOGRAPH + {0x8EA3, 0x5E32}, //2569 #CJK UNIFIED IDEOGRAPH + {0x8EA4, 0x5E33}, //2570 #CJK UNIFIED IDEOGRAPH + {0x8EA5, 0x5E34}, //2571 #CJK UNIFIED IDEOGRAPH + {0x8EA6, 0x5E35}, //2572 #CJK UNIFIED IDEOGRAPH + {0x8EA7, 0x5E36}, //2573 #CJK UNIFIED IDEOGRAPH + {0x8EA8, 0x5E39}, //2574 #CJK UNIFIED IDEOGRAPH + {0x8EA9, 0x5E3A}, //2575 #CJK UNIFIED IDEOGRAPH + {0x8EAA, 0x5E3E}, //2576 #CJK UNIFIED IDEOGRAPH + {0x8EAB, 0x5E3F}, //2577 #CJK UNIFIED IDEOGRAPH + {0x8EAC, 0x5E40}, //2578 #CJK UNIFIED IDEOGRAPH + {0x8EAD, 0x5E41}, //2579 #CJK UNIFIED IDEOGRAPH + {0x8EAE, 0x5E43}, //2580 #CJK UNIFIED IDEOGRAPH + {0x8EAF, 0x5E46}, //2581 #CJK UNIFIED IDEOGRAPH + {0x8EB0, 0x5E47}, //2582 #CJK UNIFIED IDEOGRAPH + {0x8EB1, 0x5E48}, //2583 #CJK UNIFIED IDEOGRAPH + {0x8EB2, 0x5E49}, //2584 #CJK UNIFIED IDEOGRAPH + {0x8EB3, 0x5E4A}, //2585 #CJK UNIFIED IDEOGRAPH + {0x8EB4, 0x5E4B}, //2586 #CJK UNIFIED IDEOGRAPH + {0x8EB5, 0x5E4D}, //2587 #CJK UNIFIED IDEOGRAPH + {0x8EB6, 0x5E4E}, //2588 #CJK UNIFIED IDEOGRAPH + {0x8EB7, 0x5E4F}, //2589 #CJK UNIFIED IDEOGRAPH + {0x8EB8, 0x5E50}, //2590 #CJK UNIFIED IDEOGRAPH + {0x8EB9, 0x5E51}, //2591 #CJK UNIFIED IDEOGRAPH + {0x8EBA, 0x5E52}, //2592 #CJK UNIFIED IDEOGRAPH + {0x8EBB, 0x5E53}, //2593 #CJK UNIFIED IDEOGRAPH + {0x8EBC, 0x5E56}, //2594 #CJK UNIFIED IDEOGRAPH + {0x8EBD, 0x5E57}, //2595 #CJK UNIFIED IDEOGRAPH + {0x8EBE, 0x5E58}, //2596 #CJK UNIFIED IDEOGRAPH + {0x8EBF, 0x5E59}, //2597 #CJK UNIFIED IDEOGRAPH + {0x8EC0, 0x5E5A}, //2598 #CJK UNIFIED IDEOGRAPH + {0x8EC1, 0x5E5C}, //2599 #CJK UNIFIED IDEOGRAPH + {0x8EC2, 0x5E5D}, //2600 #CJK UNIFIED IDEOGRAPH + {0x8EC3, 0x5E5F}, //2601 #CJK UNIFIED IDEOGRAPH + {0x8EC4, 0x5E60}, //2602 #CJK UNIFIED IDEOGRAPH + {0x8EC5, 0x5E63}, //2603 #CJK UNIFIED IDEOGRAPH + {0x8EC6, 0x5E64}, //2604 #CJK UNIFIED IDEOGRAPH + {0x8EC7, 0x5E65}, //2605 #CJK UNIFIED IDEOGRAPH + {0x8EC8, 0x5E66}, //2606 #CJK UNIFIED IDEOGRAPH + {0x8EC9, 0x5E67}, //2607 #CJK UNIFIED IDEOGRAPH + {0x8ECA, 0x5E68}, //2608 #CJK UNIFIED IDEOGRAPH + {0x8ECB, 0x5E69}, //2609 #CJK UNIFIED IDEOGRAPH + {0x8ECC, 0x5E6A}, //2610 #CJK UNIFIED IDEOGRAPH + {0x8ECD, 0x5E6B}, //2611 #CJK UNIFIED IDEOGRAPH + {0x8ECE, 0x5E6C}, //2612 #CJK UNIFIED IDEOGRAPH + {0x8ECF, 0x5E6D}, //2613 #CJK UNIFIED IDEOGRAPH + {0x8ED0, 0x5E6E}, //2614 #CJK UNIFIED IDEOGRAPH + {0x8ED1, 0x5E6F}, //2615 #CJK UNIFIED IDEOGRAPH + {0x8ED2, 0x5E70}, //2616 #CJK UNIFIED IDEOGRAPH + {0x8ED3, 0x5E71}, //2617 #CJK UNIFIED IDEOGRAPH + {0x8ED4, 0x5E75}, //2618 #CJK UNIFIED IDEOGRAPH + {0x8ED5, 0x5E77}, //2619 #CJK UNIFIED IDEOGRAPH + {0x8ED6, 0x5E79}, //2620 #CJK UNIFIED IDEOGRAPH + {0x8ED7, 0x5E7E}, //2621 #CJK UNIFIED IDEOGRAPH + {0x8ED8, 0x5E81}, //2622 #CJK UNIFIED IDEOGRAPH + {0x8ED9, 0x5E82}, //2623 #CJK UNIFIED IDEOGRAPH + {0x8EDA, 0x5E83}, //2624 #CJK UNIFIED IDEOGRAPH + {0x8EDB, 0x5E85}, //2625 #CJK UNIFIED IDEOGRAPH + {0x8EDC, 0x5E88}, //2626 #CJK UNIFIED IDEOGRAPH + {0x8EDD, 0x5E89}, //2627 #CJK UNIFIED IDEOGRAPH + {0x8EDE, 0x5E8C}, //2628 #CJK UNIFIED IDEOGRAPH + {0x8EDF, 0x5E8D}, //2629 #CJK UNIFIED IDEOGRAPH + {0x8EE0, 0x5E8E}, //2630 #CJK UNIFIED IDEOGRAPH + {0x8EE1, 0x5E92}, //2631 #CJK UNIFIED IDEOGRAPH + {0x8EE2, 0x5E98}, //2632 #CJK UNIFIED IDEOGRAPH + {0x8EE3, 0x5E9B}, //2633 #CJK UNIFIED IDEOGRAPH + {0x8EE4, 0x5E9D}, //2634 #CJK UNIFIED IDEOGRAPH + {0x8EE5, 0x5EA1}, //2635 #CJK UNIFIED IDEOGRAPH + {0x8EE6, 0x5EA2}, //2636 #CJK UNIFIED IDEOGRAPH + {0x8EE7, 0x5EA3}, //2637 #CJK UNIFIED IDEOGRAPH + {0x8EE8, 0x5EA4}, //2638 #CJK UNIFIED IDEOGRAPH + {0x8EE9, 0x5EA8}, //2639 #CJK UNIFIED IDEOGRAPH + {0x8EEA, 0x5EA9}, //2640 #CJK UNIFIED IDEOGRAPH + {0x8EEB, 0x5EAA}, //2641 #CJK UNIFIED IDEOGRAPH + {0x8EEC, 0x5EAB}, //2642 #CJK UNIFIED IDEOGRAPH + {0x8EED, 0x5EAC}, //2643 #CJK UNIFIED IDEOGRAPH + {0x8EEE, 0x5EAE}, //2644 #CJK UNIFIED IDEOGRAPH + {0x8EEF, 0x5EAF}, //2645 #CJK UNIFIED IDEOGRAPH + {0x8EF0, 0x5EB0}, //2646 #CJK UNIFIED IDEOGRAPH + {0x8EF1, 0x5EB1}, //2647 #CJK UNIFIED IDEOGRAPH + {0x8EF2, 0x5EB2}, //2648 #CJK UNIFIED IDEOGRAPH + {0x8EF3, 0x5EB4}, //2649 #CJK UNIFIED IDEOGRAPH + {0x8EF4, 0x5EBA}, //2650 #CJK UNIFIED IDEOGRAPH + {0x8EF5, 0x5EBB}, //2651 #CJK UNIFIED IDEOGRAPH + {0x8EF6, 0x5EBC}, //2652 #CJK UNIFIED IDEOGRAPH + {0x8EF7, 0x5EBD}, //2653 #CJK UNIFIED IDEOGRAPH + {0x8EF8, 0x5EBF}, //2654 #CJK UNIFIED IDEOGRAPH + {0x8EF9, 0x5EC0}, //2655 #CJK UNIFIED IDEOGRAPH + {0x8EFA, 0x5EC1}, //2656 #CJK UNIFIED IDEOGRAPH + {0x8EFB, 0x5EC2}, //2657 #CJK UNIFIED IDEOGRAPH + {0x8EFC, 0x5EC3}, //2658 #CJK UNIFIED IDEOGRAPH + {0x8EFD, 0x5EC4}, //2659 #CJK UNIFIED IDEOGRAPH + {0x8EFE, 0x5EC5}, //2660 #CJK UNIFIED IDEOGRAPH + {0x8F40, 0x5EC6}, //2661 #CJK UNIFIED IDEOGRAPH + {0x8F41, 0x5EC7}, //2662 #CJK UNIFIED IDEOGRAPH + {0x8F42, 0x5EC8}, //2663 #CJK UNIFIED IDEOGRAPH + {0x8F43, 0x5ECB}, //2664 #CJK UNIFIED IDEOGRAPH + {0x8F44, 0x5ECC}, //2665 #CJK UNIFIED IDEOGRAPH + {0x8F45, 0x5ECD}, //2666 #CJK UNIFIED IDEOGRAPH + {0x8F46, 0x5ECE}, //2667 #CJK UNIFIED IDEOGRAPH + {0x8F47, 0x5ECF}, //2668 #CJK UNIFIED IDEOGRAPH + {0x8F48, 0x5ED0}, //2669 #CJK UNIFIED IDEOGRAPH + {0x8F49, 0x5ED4}, //2670 #CJK UNIFIED IDEOGRAPH + {0x8F4A, 0x5ED5}, //2671 #CJK UNIFIED IDEOGRAPH + {0x8F4B, 0x5ED7}, //2672 #CJK UNIFIED IDEOGRAPH + {0x8F4C, 0x5ED8}, //2673 #CJK UNIFIED IDEOGRAPH + {0x8F4D, 0x5ED9}, //2674 #CJK UNIFIED IDEOGRAPH + {0x8F4E, 0x5EDA}, //2675 #CJK UNIFIED IDEOGRAPH + {0x8F4F, 0x5EDC}, //2676 #CJK UNIFIED IDEOGRAPH + {0x8F50, 0x5EDD}, //2677 #CJK UNIFIED IDEOGRAPH + {0x8F51, 0x5EDE}, //2678 #CJK UNIFIED IDEOGRAPH + {0x8F52, 0x5EDF}, //2679 #CJK UNIFIED IDEOGRAPH + {0x8F53, 0x5EE0}, //2680 #CJK UNIFIED IDEOGRAPH + {0x8F54, 0x5EE1}, //2681 #CJK UNIFIED IDEOGRAPH + {0x8F55, 0x5EE2}, //2682 #CJK UNIFIED IDEOGRAPH + {0x8F56, 0x5EE3}, //2683 #CJK UNIFIED IDEOGRAPH + {0x8F57, 0x5EE4}, //2684 #CJK UNIFIED IDEOGRAPH + {0x8F58, 0x5EE5}, //2685 #CJK UNIFIED IDEOGRAPH + {0x8F59, 0x5EE6}, //2686 #CJK UNIFIED IDEOGRAPH + {0x8F5A, 0x5EE7}, //2687 #CJK UNIFIED IDEOGRAPH + {0x8F5B, 0x5EE9}, //2688 #CJK UNIFIED IDEOGRAPH + {0x8F5C, 0x5EEB}, //2689 #CJK UNIFIED IDEOGRAPH + {0x8F5D, 0x5EEC}, //2690 #CJK UNIFIED IDEOGRAPH + {0x8F5E, 0x5EED}, //2691 #CJK UNIFIED IDEOGRAPH + {0x8F5F, 0x5EEE}, //2692 #CJK UNIFIED IDEOGRAPH + {0x8F60, 0x5EEF}, //2693 #CJK UNIFIED IDEOGRAPH + {0x8F61, 0x5EF0}, //2694 #CJK UNIFIED IDEOGRAPH + {0x8F62, 0x5EF1}, //2695 #CJK UNIFIED IDEOGRAPH + {0x8F63, 0x5EF2}, //2696 #CJK UNIFIED IDEOGRAPH + {0x8F64, 0x5EF3}, //2697 #CJK UNIFIED IDEOGRAPH + {0x8F65, 0x5EF5}, //2698 #CJK UNIFIED IDEOGRAPH + {0x8F66, 0x5EF8}, //2699 #CJK UNIFIED IDEOGRAPH + {0x8F67, 0x5EF9}, //2700 #CJK UNIFIED IDEOGRAPH + {0x8F68, 0x5EFB}, //2701 #CJK UNIFIED IDEOGRAPH + {0x8F69, 0x5EFC}, //2702 #CJK UNIFIED IDEOGRAPH + {0x8F6A, 0x5EFD}, //2703 #CJK UNIFIED IDEOGRAPH + {0x8F6B, 0x5F05}, //2704 #CJK UNIFIED IDEOGRAPH + {0x8F6C, 0x5F06}, //2705 #CJK UNIFIED IDEOGRAPH + {0x8F6D, 0x5F07}, //2706 #CJK UNIFIED IDEOGRAPH + {0x8F6E, 0x5F09}, //2707 #CJK UNIFIED IDEOGRAPH + {0x8F6F, 0x5F0C}, //2708 #CJK UNIFIED IDEOGRAPH + {0x8F70, 0x5F0D}, //2709 #CJK UNIFIED IDEOGRAPH + {0x8F71, 0x5F0E}, //2710 #CJK UNIFIED IDEOGRAPH + {0x8F72, 0x5F10}, //2711 #CJK UNIFIED IDEOGRAPH + {0x8F73, 0x5F12}, //2712 #CJK UNIFIED IDEOGRAPH + {0x8F74, 0x5F14}, //2713 #CJK UNIFIED IDEOGRAPH + {0x8F75, 0x5F16}, //2714 #CJK UNIFIED IDEOGRAPH + {0x8F76, 0x5F19}, //2715 #CJK UNIFIED IDEOGRAPH + {0x8F77, 0x5F1A}, //2716 #CJK UNIFIED IDEOGRAPH + {0x8F78, 0x5F1C}, //2717 #CJK UNIFIED IDEOGRAPH + {0x8F79, 0x5F1D}, //2718 #CJK UNIFIED IDEOGRAPH + {0x8F7A, 0x5F1E}, //2719 #CJK UNIFIED IDEOGRAPH + {0x8F7B, 0x5F21}, //2720 #CJK UNIFIED IDEOGRAPH + {0x8F7C, 0x5F22}, //2721 #CJK UNIFIED IDEOGRAPH + {0x8F7D, 0x5F23}, //2722 #CJK UNIFIED IDEOGRAPH + {0x8F7E, 0x5F24}, //2723 #CJK UNIFIED IDEOGRAPH + {0x8F80, 0x5F28}, //2724 #CJK UNIFIED IDEOGRAPH + {0x8F81, 0x5F2B}, //2725 #CJK UNIFIED IDEOGRAPH + {0x8F82, 0x5F2C}, //2726 #CJK UNIFIED IDEOGRAPH + {0x8F83, 0x5F2E}, //2727 #CJK UNIFIED IDEOGRAPH + {0x8F84, 0x5F30}, //2728 #CJK UNIFIED IDEOGRAPH + {0x8F85, 0x5F32}, //2729 #CJK UNIFIED IDEOGRAPH + {0x8F86, 0x5F33}, //2730 #CJK UNIFIED IDEOGRAPH + {0x8F87, 0x5F34}, //2731 #CJK UNIFIED IDEOGRAPH + {0x8F88, 0x5F35}, //2732 #CJK UNIFIED IDEOGRAPH + {0x8F89, 0x5F36}, //2733 #CJK UNIFIED IDEOGRAPH + {0x8F8A, 0x5F37}, //2734 #CJK UNIFIED IDEOGRAPH + {0x8F8B, 0x5F38}, //2735 #CJK UNIFIED IDEOGRAPH + {0x8F8C, 0x5F3B}, //2736 #CJK UNIFIED IDEOGRAPH + {0x8F8D, 0x5F3D}, //2737 #CJK UNIFIED IDEOGRAPH + {0x8F8E, 0x5F3E}, //2738 #CJK UNIFIED IDEOGRAPH + {0x8F8F, 0x5F3F}, //2739 #CJK UNIFIED IDEOGRAPH + {0x8F90, 0x5F41}, //2740 #CJK UNIFIED IDEOGRAPH + {0x8F91, 0x5F42}, //2741 #CJK UNIFIED IDEOGRAPH + {0x8F92, 0x5F43}, //2742 #CJK UNIFIED IDEOGRAPH + {0x8F93, 0x5F44}, //2743 #CJK UNIFIED IDEOGRAPH + {0x8F94, 0x5F45}, //2744 #CJK UNIFIED IDEOGRAPH + {0x8F95, 0x5F46}, //2745 #CJK UNIFIED IDEOGRAPH + {0x8F96, 0x5F47}, //2746 #CJK UNIFIED IDEOGRAPH + {0x8F97, 0x5F48}, //2747 #CJK UNIFIED IDEOGRAPH + {0x8F98, 0x5F49}, //2748 #CJK UNIFIED IDEOGRAPH + {0x8F99, 0x5F4A}, //2749 #CJK UNIFIED IDEOGRAPH + {0x8F9A, 0x5F4B}, //2750 #CJK UNIFIED IDEOGRAPH + {0x8F9B, 0x5F4C}, //2751 #CJK UNIFIED IDEOGRAPH + {0x8F9C, 0x5F4D}, //2752 #CJK UNIFIED IDEOGRAPH + {0x8F9D, 0x5F4E}, //2753 #CJK UNIFIED IDEOGRAPH + {0x8F9E, 0x5F4F}, //2754 #CJK UNIFIED IDEOGRAPH + {0x8F9F, 0x5F51}, //2755 #CJK UNIFIED IDEOGRAPH + {0x8FA0, 0x5F54}, //2756 #CJK UNIFIED IDEOGRAPH + {0x8FA1, 0x5F59}, //2757 #CJK UNIFIED IDEOGRAPH + {0x8FA2, 0x5F5A}, //2758 #CJK UNIFIED IDEOGRAPH + {0x8FA3, 0x5F5B}, //2759 #CJK UNIFIED IDEOGRAPH + {0x8FA4, 0x5F5C}, //2760 #CJK UNIFIED IDEOGRAPH + {0x8FA5, 0x5F5E}, //2761 #CJK UNIFIED IDEOGRAPH + {0x8FA6, 0x5F5F}, //2762 #CJK UNIFIED IDEOGRAPH + {0x8FA7, 0x5F60}, //2763 #CJK UNIFIED IDEOGRAPH + {0x8FA8, 0x5F63}, //2764 #CJK UNIFIED IDEOGRAPH + {0x8FA9, 0x5F65}, //2765 #CJK UNIFIED IDEOGRAPH + {0x8FAA, 0x5F67}, //2766 #CJK UNIFIED IDEOGRAPH + {0x8FAB, 0x5F68}, //2767 #CJK UNIFIED IDEOGRAPH + {0x8FAC, 0x5F6B}, //2768 #CJK UNIFIED IDEOGRAPH + {0x8FAD, 0x5F6E}, //2769 #CJK UNIFIED IDEOGRAPH + {0x8FAE, 0x5F6F}, //2770 #CJK UNIFIED IDEOGRAPH + {0x8FAF, 0x5F72}, //2771 #CJK UNIFIED IDEOGRAPH + {0x8FB0, 0x5F74}, //2772 #CJK UNIFIED IDEOGRAPH + {0x8FB1, 0x5F75}, //2773 #CJK UNIFIED IDEOGRAPH + {0x8FB2, 0x5F76}, //2774 #CJK UNIFIED IDEOGRAPH + {0x8FB3, 0x5F78}, //2775 #CJK UNIFIED IDEOGRAPH + {0x8FB4, 0x5F7A}, //2776 #CJK UNIFIED IDEOGRAPH + {0x8FB5, 0x5F7D}, //2777 #CJK UNIFIED IDEOGRAPH + {0x8FB6, 0x5F7E}, //2778 #CJK UNIFIED IDEOGRAPH + {0x8FB7, 0x5F7F}, //2779 #CJK UNIFIED IDEOGRAPH + {0x8FB8, 0x5F83}, //2780 #CJK UNIFIED IDEOGRAPH + {0x8FB9, 0x5F86}, //2781 #CJK UNIFIED IDEOGRAPH + {0x8FBA, 0x5F8D}, //2782 #CJK UNIFIED IDEOGRAPH + {0x8FBB, 0x5F8E}, //2783 #CJK UNIFIED IDEOGRAPH + {0x8FBC, 0x5F8F}, //2784 #CJK UNIFIED IDEOGRAPH + {0x8FBD, 0x5F91}, //2785 #CJK UNIFIED IDEOGRAPH + {0x8FBE, 0x5F93}, //2786 #CJK UNIFIED IDEOGRAPH + {0x8FBF, 0x5F94}, //2787 #CJK UNIFIED IDEOGRAPH + {0x8FC0, 0x5F96}, //2788 #CJK UNIFIED IDEOGRAPH + {0x8FC1, 0x5F9A}, //2789 #CJK UNIFIED IDEOGRAPH + {0x8FC2, 0x5F9B}, //2790 #CJK UNIFIED IDEOGRAPH + {0x8FC3, 0x5F9D}, //2791 #CJK UNIFIED IDEOGRAPH + {0x8FC4, 0x5F9E}, //2792 #CJK UNIFIED IDEOGRAPH + {0x8FC5, 0x5F9F}, //2793 #CJK UNIFIED IDEOGRAPH + {0x8FC6, 0x5FA0}, //2794 #CJK UNIFIED IDEOGRAPH + {0x8FC7, 0x5FA2}, //2795 #CJK UNIFIED IDEOGRAPH + {0x8FC8, 0x5FA3}, //2796 #CJK UNIFIED IDEOGRAPH + {0x8FC9, 0x5FA4}, //2797 #CJK UNIFIED IDEOGRAPH + {0x8FCA, 0x5FA5}, //2798 #CJK UNIFIED IDEOGRAPH + {0x8FCB, 0x5FA6}, //2799 #CJK UNIFIED IDEOGRAPH + {0x8FCC, 0x5FA7}, //2800 #CJK UNIFIED IDEOGRAPH + {0x8FCD, 0x5FA9}, //2801 #CJK UNIFIED IDEOGRAPH + {0x8FCE, 0x5FAB}, //2802 #CJK UNIFIED IDEOGRAPH + {0x8FCF, 0x5FAC}, //2803 #CJK UNIFIED IDEOGRAPH + {0x8FD0, 0x5FAF}, //2804 #CJK UNIFIED IDEOGRAPH + {0x8FD1, 0x5FB0}, //2805 #CJK UNIFIED IDEOGRAPH + {0x8FD2, 0x5FB1}, //2806 #CJK UNIFIED IDEOGRAPH + {0x8FD3, 0x5FB2}, //2807 #CJK UNIFIED IDEOGRAPH + {0x8FD4, 0x5FB3}, //2808 #CJK UNIFIED IDEOGRAPH + {0x8FD5, 0x5FB4}, //2809 #CJK UNIFIED IDEOGRAPH + {0x8FD6, 0x5FB6}, //2810 #CJK UNIFIED IDEOGRAPH + {0x8FD7, 0x5FB8}, //2811 #CJK UNIFIED IDEOGRAPH + {0x8FD8, 0x5FB9}, //2812 #CJK UNIFIED IDEOGRAPH + {0x8FD9, 0x5FBA}, //2813 #CJK UNIFIED IDEOGRAPH + {0x8FDA, 0x5FBB}, //2814 #CJK UNIFIED IDEOGRAPH + {0x8FDB, 0x5FBE}, //2815 #CJK UNIFIED IDEOGRAPH + {0x8FDC, 0x5FBF}, //2816 #CJK UNIFIED IDEOGRAPH + {0x8FDD, 0x5FC0}, //2817 #CJK UNIFIED IDEOGRAPH + {0x8FDE, 0x5FC1}, //2818 #CJK UNIFIED IDEOGRAPH + {0x8FDF, 0x5FC2}, //2819 #CJK UNIFIED IDEOGRAPH + {0x8FE0, 0x5FC7}, //2820 #CJK UNIFIED IDEOGRAPH + {0x8FE1, 0x5FC8}, //2821 #CJK UNIFIED IDEOGRAPH + {0x8FE2, 0x5FCA}, //2822 #CJK UNIFIED IDEOGRAPH + {0x8FE3, 0x5FCB}, //2823 #CJK UNIFIED IDEOGRAPH + {0x8FE4, 0x5FCE}, //2824 #CJK UNIFIED IDEOGRAPH + {0x8FE5, 0x5FD3}, //2825 #CJK UNIFIED IDEOGRAPH + {0x8FE6, 0x5FD4}, //2826 #CJK UNIFIED IDEOGRAPH + {0x8FE7, 0x5FD5}, //2827 #CJK UNIFIED IDEOGRAPH + {0x8FE8, 0x5FDA}, //2828 #CJK UNIFIED IDEOGRAPH + {0x8FE9, 0x5FDB}, //2829 #CJK UNIFIED IDEOGRAPH + {0x8FEA, 0x5FDC}, //2830 #CJK UNIFIED IDEOGRAPH + {0x8FEB, 0x5FDE}, //2831 #CJK UNIFIED IDEOGRAPH + {0x8FEC, 0x5FDF}, //2832 #CJK UNIFIED IDEOGRAPH + {0x8FED, 0x5FE2}, //2833 #CJK UNIFIED IDEOGRAPH + {0x8FEE, 0x5FE3}, //2834 #CJK UNIFIED IDEOGRAPH + {0x8FEF, 0x5FE5}, //2835 #CJK UNIFIED IDEOGRAPH + {0x8FF0, 0x5FE6}, //2836 #CJK UNIFIED IDEOGRAPH + {0x8FF1, 0x5FE8}, //2837 #CJK UNIFIED IDEOGRAPH + {0x8FF2, 0x5FE9}, //2838 #CJK UNIFIED IDEOGRAPH + {0x8FF3, 0x5FEC}, //2839 #CJK UNIFIED IDEOGRAPH + {0x8FF4, 0x5FEF}, //2840 #CJK UNIFIED IDEOGRAPH + {0x8FF5, 0x5FF0}, //2841 #CJK UNIFIED IDEOGRAPH + {0x8FF6, 0x5FF2}, //2842 #CJK UNIFIED IDEOGRAPH + {0x8FF7, 0x5FF3}, //2843 #CJK UNIFIED IDEOGRAPH + {0x8FF8, 0x5FF4}, //2844 #CJK UNIFIED IDEOGRAPH + {0x8FF9, 0x5FF6}, //2845 #CJK UNIFIED IDEOGRAPH + {0x8FFA, 0x5FF7}, //2846 #CJK UNIFIED IDEOGRAPH + {0x8FFB, 0x5FF9}, //2847 #CJK UNIFIED IDEOGRAPH + {0x8FFC, 0x5FFA}, //2848 #CJK UNIFIED IDEOGRAPH + {0x8FFD, 0x5FFC}, //2849 #CJK UNIFIED IDEOGRAPH + {0x8FFE, 0x6007}, //2850 #CJK UNIFIED IDEOGRAPH + {0x9040, 0x6008}, //2851 #CJK UNIFIED IDEOGRAPH + {0x9041, 0x6009}, //2852 #CJK UNIFIED IDEOGRAPH + {0x9042, 0x600B}, //2853 #CJK UNIFIED IDEOGRAPH + {0x9043, 0x600C}, //2854 #CJK UNIFIED IDEOGRAPH + {0x9044, 0x6010}, //2855 #CJK UNIFIED IDEOGRAPH + {0x9045, 0x6011}, //2856 #CJK UNIFIED IDEOGRAPH + {0x9046, 0x6013}, //2857 #CJK UNIFIED IDEOGRAPH + {0x9047, 0x6017}, //2858 #CJK UNIFIED IDEOGRAPH + {0x9048, 0x6018}, //2859 #CJK UNIFIED IDEOGRAPH + {0x9049, 0x601A}, //2860 #CJK UNIFIED IDEOGRAPH + {0x904A, 0x601E}, //2861 #CJK UNIFIED IDEOGRAPH + {0x904B, 0x601F}, //2862 #CJK UNIFIED IDEOGRAPH + {0x904C, 0x6022}, //2863 #CJK UNIFIED IDEOGRAPH + {0x904D, 0x6023}, //2864 #CJK UNIFIED IDEOGRAPH + {0x904E, 0x6024}, //2865 #CJK UNIFIED IDEOGRAPH + {0x904F, 0x602C}, //2866 #CJK UNIFIED IDEOGRAPH + {0x9050, 0x602D}, //2867 #CJK UNIFIED IDEOGRAPH + {0x9051, 0x602E}, //2868 #CJK UNIFIED IDEOGRAPH + {0x9052, 0x6030}, //2869 #CJK UNIFIED IDEOGRAPH + {0x9053, 0x6031}, //2870 #CJK UNIFIED IDEOGRAPH + {0x9054, 0x6032}, //2871 #CJK UNIFIED IDEOGRAPH + {0x9055, 0x6033}, //2872 #CJK UNIFIED IDEOGRAPH + {0x9056, 0x6034}, //2873 #CJK UNIFIED IDEOGRAPH + {0x9057, 0x6036}, //2874 #CJK UNIFIED IDEOGRAPH + {0x9058, 0x6037}, //2875 #CJK UNIFIED IDEOGRAPH + {0x9059, 0x6038}, //2876 #CJK UNIFIED IDEOGRAPH + {0x905A, 0x6039}, //2877 #CJK UNIFIED IDEOGRAPH + {0x905B, 0x603A}, //2878 #CJK UNIFIED IDEOGRAPH + {0x905C, 0x603D}, //2879 #CJK UNIFIED IDEOGRAPH + {0x905D, 0x603E}, //2880 #CJK UNIFIED IDEOGRAPH + {0x905E, 0x6040}, //2881 #CJK UNIFIED IDEOGRAPH + {0x905F, 0x6044}, //2882 #CJK UNIFIED IDEOGRAPH + {0x9060, 0x6045}, //2883 #CJK UNIFIED IDEOGRAPH + {0x9061, 0x6046}, //2884 #CJK UNIFIED IDEOGRAPH + {0x9062, 0x6047}, //2885 #CJK UNIFIED IDEOGRAPH + {0x9063, 0x6048}, //2886 #CJK UNIFIED IDEOGRAPH + {0x9064, 0x6049}, //2887 #CJK UNIFIED IDEOGRAPH + {0x9065, 0x604A}, //2888 #CJK UNIFIED IDEOGRAPH + {0x9066, 0x604C}, //2889 #CJK UNIFIED IDEOGRAPH + {0x9067, 0x604E}, //2890 #CJK UNIFIED IDEOGRAPH + {0x9068, 0x604F}, //2891 #CJK UNIFIED IDEOGRAPH + {0x9069, 0x6051}, //2892 #CJK UNIFIED IDEOGRAPH + {0x906A, 0x6053}, //2893 #CJK UNIFIED IDEOGRAPH + {0x906B, 0x6054}, //2894 #CJK UNIFIED IDEOGRAPH + {0x906C, 0x6056}, //2895 #CJK UNIFIED IDEOGRAPH + {0x906D, 0x6057}, //2896 #CJK UNIFIED IDEOGRAPH + {0x906E, 0x6058}, //2897 #CJK UNIFIED IDEOGRAPH + {0x906F, 0x605B}, //2898 #CJK UNIFIED IDEOGRAPH + {0x9070, 0x605C}, //2899 #CJK UNIFIED IDEOGRAPH + {0x9071, 0x605E}, //2900 #CJK UNIFIED IDEOGRAPH + {0x9072, 0x605F}, //2901 #CJK UNIFIED IDEOGRAPH + {0x9073, 0x6060}, //2902 #CJK UNIFIED IDEOGRAPH + {0x9074, 0x6061}, //2903 #CJK UNIFIED IDEOGRAPH + {0x9075, 0x6065}, //2904 #CJK UNIFIED IDEOGRAPH + {0x9076, 0x6066}, //2905 #CJK UNIFIED IDEOGRAPH + {0x9077, 0x606E}, //2906 #CJK UNIFIED IDEOGRAPH + {0x9078, 0x6071}, //2907 #CJK UNIFIED IDEOGRAPH + {0x9079, 0x6072}, //2908 #CJK UNIFIED IDEOGRAPH + {0x907A, 0x6074}, //2909 #CJK UNIFIED IDEOGRAPH + {0x907B, 0x6075}, //2910 #CJK UNIFIED IDEOGRAPH + {0x907C, 0x6077}, //2911 #CJK UNIFIED IDEOGRAPH + {0x907D, 0x607E}, //2912 #CJK UNIFIED IDEOGRAPH + {0x907E, 0x6080}, //2913 #CJK UNIFIED IDEOGRAPH + {0x9080, 0x6081}, //2914 #CJK UNIFIED IDEOGRAPH + {0x9081, 0x6082}, //2915 #CJK UNIFIED IDEOGRAPH + {0x9082, 0x6085}, //2916 #CJK UNIFIED IDEOGRAPH + {0x9083, 0x6086}, //2917 #CJK UNIFIED IDEOGRAPH + {0x9084, 0x6087}, //2918 #CJK UNIFIED IDEOGRAPH + {0x9085, 0x6088}, //2919 #CJK UNIFIED IDEOGRAPH + {0x9086, 0x608A}, //2920 #CJK UNIFIED IDEOGRAPH + {0x9087, 0x608B}, //2921 #CJK UNIFIED IDEOGRAPH + {0x9088, 0x608E}, //2922 #CJK UNIFIED IDEOGRAPH + {0x9089, 0x608F}, //2923 #CJK UNIFIED IDEOGRAPH + {0x908A, 0x6090}, //2924 #CJK UNIFIED IDEOGRAPH + {0x908B, 0x6091}, //2925 #CJK UNIFIED IDEOGRAPH + {0x908C, 0x6093}, //2926 #CJK UNIFIED IDEOGRAPH + {0x908D, 0x6095}, //2927 #CJK UNIFIED IDEOGRAPH + {0x908E, 0x6097}, //2928 #CJK UNIFIED IDEOGRAPH + {0x908F, 0x6098}, //2929 #CJK UNIFIED IDEOGRAPH + {0x9090, 0x6099}, //2930 #CJK UNIFIED IDEOGRAPH + {0x9091, 0x609C}, //2931 #CJK UNIFIED IDEOGRAPH + {0x9092, 0x609E}, //2932 #CJK UNIFIED IDEOGRAPH + {0x9093, 0x60A1}, //2933 #CJK UNIFIED IDEOGRAPH + {0x9094, 0x60A2}, //2934 #CJK UNIFIED IDEOGRAPH + {0x9095, 0x60A4}, //2935 #CJK UNIFIED IDEOGRAPH + {0x9096, 0x60A5}, //2936 #CJK UNIFIED IDEOGRAPH + {0x9097, 0x60A7}, //2937 #CJK UNIFIED IDEOGRAPH + {0x9098, 0x60A9}, //2938 #CJK UNIFIED IDEOGRAPH + {0x9099, 0x60AA}, //2939 #CJK UNIFIED IDEOGRAPH + {0x909A, 0x60AE}, //2940 #CJK UNIFIED IDEOGRAPH + {0x909B, 0x60B0}, //2941 #CJK UNIFIED IDEOGRAPH + {0x909C, 0x60B3}, //2942 #CJK UNIFIED IDEOGRAPH + {0x909D, 0x60B5}, //2943 #CJK UNIFIED IDEOGRAPH + {0x909E, 0x60B6}, //2944 #CJK UNIFIED IDEOGRAPH + {0x909F, 0x60B7}, //2945 #CJK UNIFIED IDEOGRAPH + {0x90A0, 0x60B9}, //2946 #CJK UNIFIED IDEOGRAPH + {0x90A1, 0x60BA}, //2947 #CJK UNIFIED IDEOGRAPH + {0x90A2, 0x60BD}, //2948 #CJK UNIFIED IDEOGRAPH + {0x90A3, 0x60BE}, //2949 #CJK UNIFIED IDEOGRAPH + {0x90A4, 0x60BF}, //2950 #CJK UNIFIED IDEOGRAPH + {0x90A5, 0x60C0}, //2951 #CJK UNIFIED IDEOGRAPH + {0x90A6, 0x60C1}, //2952 #CJK UNIFIED IDEOGRAPH + {0x90A7, 0x60C2}, //2953 #CJK UNIFIED IDEOGRAPH + {0x90A8, 0x60C3}, //2954 #CJK UNIFIED IDEOGRAPH + {0x90A9, 0x60C4}, //2955 #CJK UNIFIED IDEOGRAPH + {0x90AA, 0x60C7}, //2956 #CJK UNIFIED IDEOGRAPH + {0x90AB, 0x60C8}, //2957 #CJK UNIFIED IDEOGRAPH + {0x90AC, 0x60C9}, //2958 #CJK UNIFIED IDEOGRAPH + {0x90AD, 0x60CC}, //2959 #CJK UNIFIED IDEOGRAPH + {0x90AE, 0x60CD}, //2960 #CJK UNIFIED IDEOGRAPH + {0x90AF, 0x60CE}, //2961 #CJK UNIFIED IDEOGRAPH + {0x90B0, 0x60CF}, //2962 #CJK UNIFIED IDEOGRAPH + {0x90B1, 0x60D0}, //2963 #CJK UNIFIED IDEOGRAPH + {0x90B2, 0x60D2}, //2964 #CJK UNIFIED IDEOGRAPH + {0x90B3, 0x60D3}, //2965 #CJK UNIFIED IDEOGRAPH + {0x90B4, 0x60D4}, //2966 #CJK UNIFIED IDEOGRAPH + {0x90B5, 0x60D6}, //2967 #CJK UNIFIED IDEOGRAPH + {0x90B6, 0x60D7}, //2968 #CJK UNIFIED IDEOGRAPH + {0x90B7, 0x60D9}, //2969 #CJK UNIFIED IDEOGRAPH + {0x90B8, 0x60DB}, //2970 #CJK UNIFIED IDEOGRAPH + {0x90B9, 0x60DE}, //2971 #CJK UNIFIED IDEOGRAPH + {0x90BA, 0x60E1}, //2972 #CJK UNIFIED IDEOGRAPH + {0x90BB, 0x60E2}, //2973 #CJK UNIFIED IDEOGRAPH + {0x90BC, 0x60E3}, //2974 #CJK UNIFIED IDEOGRAPH + {0x90BD, 0x60E4}, //2975 #CJK UNIFIED IDEOGRAPH + {0x90BE, 0x60E5}, //2976 #CJK UNIFIED IDEOGRAPH + {0x90BF, 0x60EA}, //2977 #CJK UNIFIED IDEOGRAPH + {0x90C0, 0x60F1}, //2978 #CJK UNIFIED IDEOGRAPH + {0x90C1, 0x60F2}, //2979 #CJK UNIFIED IDEOGRAPH + {0x90C2, 0x60F5}, //2980 #CJK UNIFIED IDEOGRAPH + {0x90C3, 0x60F7}, //2981 #CJK UNIFIED IDEOGRAPH + {0x90C4, 0x60F8}, //2982 #CJK UNIFIED IDEOGRAPH + {0x90C5, 0x60FB}, //2983 #CJK UNIFIED IDEOGRAPH + {0x90C6, 0x60FC}, //2984 #CJK UNIFIED IDEOGRAPH + {0x90C7, 0x60FD}, //2985 #CJK UNIFIED IDEOGRAPH + {0x90C8, 0x60FE}, //2986 #CJK UNIFIED IDEOGRAPH + {0x90C9, 0x60FF}, //2987 #CJK UNIFIED IDEOGRAPH + {0x90CA, 0x6102}, //2988 #CJK UNIFIED IDEOGRAPH + {0x90CB, 0x6103}, //2989 #CJK UNIFIED IDEOGRAPH + {0x90CC, 0x6104}, //2990 #CJK UNIFIED IDEOGRAPH + {0x90CD, 0x6105}, //2991 #CJK UNIFIED IDEOGRAPH + {0x90CE, 0x6107}, //2992 #CJK UNIFIED IDEOGRAPH + {0x90CF, 0x610A}, //2993 #CJK UNIFIED IDEOGRAPH + {0x90D0, 0x610B}, //2994 #CJK UNIFIED IDEOGRAPH + {0x90D1, 0x610C}, //2995 #CJK UNIFIED IDEOGRAPH + {0x90D2, 0x6110}, //2996 #CJK UNIFIED IDEOGRAPH + {0x90D3, 0x6111}, //2997 #CJK UNIFIED IDEOGRAPH + {0x90D4, 0x6112}, //2998 #CJK UNIFIED IDEOGRAPH + {0x90D5, 0x6113}, //2999 #CJK UNIFIED IDEOGRAPH + {0x90D6, 0x6114}, //3000 #CJK UNIFIED IDEOGRAPH + {0x90D7, 0x6116}, //3001 #CJK UNIFIED IDEOGRAPH + {0x90D8, 0x6117}, //3002 #CJK UNIFIED IDEOGRAPH + {0x90D9, 0x6118}, //3003 #CJK UNIFIED IDEOGRAPH + {0x90DA, 0x6119}, //3004 #CJK UNIFIED IDEOGRAPH + {0x90DB, 0x611B}, //3005 #CJK UNIFIED IDEOGRAPH + {0x90DC, 0x611C}, //3006 #CJK UNIFIED IDEOGRAPH + {0x90DD, 0x611D}, //3007 #CJK UNIFIED IDEOGRAPH + {0x90DE, 0x611E}, //3008 #CJK UNIFIED IDEOGRAPH + {0x90DF, 0x6121}, //3009 #CJK UNIFIED IDEOGRAPH + {0x90E0, 0x6122}, //3010 #CJK UNIFIED IDEOGRAPH + {0x90E1, 0x6125}, //3011 #CJK UNIFIED IDEOGRAPH + {0x90E2, 0x6128}, //3012 #CJK UNIFIED IDEOGRAPH + {0x90E3, 0x6129}, //3013 #CJK UNIFIED IDEOGRAPH + {0x90E4, 0x612A}, //3014 #CJK UNIFIED IDEOGRAPH + {0x90E5, 0x612C}, //3015 #CJK UNIFIED IDEOGRAPH + {0x90E6, 0x612D}, //3016 #CJK UNIFIED IDEOGRAPH + {0x90E7, 0x612E}, //3017 #CJK UNIFIED IDEOGRAPH + {0x90E8, 0x612F}, //3018 #CJK UNIFIED IDEOGRAPH + {0x90E9, 0x6130}, //3019 #CJK UNIFIED IDEOGRAPH + {0x90EA, 0x6131}, //3020 #CJK UNIFIED IDEOGRAPH + {0x90EB, 0x6132}, //3021 #CJK UNIFIED IDEOGRAPH + {0x90EC, 0x6133}, //3022 #CJK UNIFIED IDEOGRAPH + {0x90ED, 0x6134}, //3023 #CJK UNIFIED IDEOGRAPH + {0x90EE, 0x6135}, //3024 #CJK UNIFIED IDEOGRAPH + {0x90EF, 0x6136}, //3025 #CJK UNIFIED IDEOGRAPH + {0x90F0, 0x6137}, //3026 #CJK UNIFIED IDEOGRAPH + {0x90F1, 0x6138}, //3027 #CJK UNIFIED IDEOGRAPH + {0x90F2, 0x6139}, //3028 #CJK UNIFIED IDEOGRAPH + {0x90F3, 0x613A}, //3029 #CJK UNIFIED IDEOGRAPH + {0x90F4, 0x613B}, //3030 #CJK UNIFIED IDEOGRAPH + {0x90F5, 0x613C}, //3031 #CJK UNIFIED IDEOGRAPH + {0x90F6, 0x613D}, //3032 #CJK UNIFIED IDEOGRAPH + {0x90F7, 0x613E}, //3033 #CJK UNIFIED IDEOGRAPH + {0x90F8, 0x6140}, //3034 #CJK UNIFIED IDEOGRAPH + {0x90F9, 0x6141}, //3035 #CJK UNIFIED IDEOGRAPH + {0x90FA, 0x6142}, //3036 #CJK UNIFIED IDEOGRAPH + {0x90FB, 0x6143}, //3037 #CJK UNIFIED IDEOGRAPH + {0x90FC, 0x6144}, //3038 #CJK UNIFIED IDEOGRAPH + {0x90FD, 0x6145}, //3039 #CJK UNIFIED IDEOGRAPH + {0x90FE, 0x6146}, //3040 #CJK UNIFIED IDEOGRAPH + {0x9140, 0x6147}, //3041 #CJK UNIFIED IDEOGRAPH + {0x9141, 0x6149}, //3042 #CJK UNIFIED IDEOGRAPH + {0x9142, 0x614B}, //3043 #CJK UNIFIED IDEOGRAPH + {0x9143, 0x614D}, //3044 #CJK UNIFIED IDEOGRAPH + {0x9144, 0x614F}, //3045 #CJK UNIFIED IDEOGRAPH + {0x9145, 0x6150}, //3046 #CJK UNIFIED IDEOGRAPH + {0x9146, 0x6152}, //3047 #CJK UNIFIED IDEOGRAPH + {0x9147, 0x6153}, //3048 #CJK UNIFIED IDEOGRAPH + {0x9148, 0x6154}, //3049 #CJK UNIFIED IDEOGRAPH + {0x9149, 0x6156}, //3050 #CJK UNIFIED IDEOGRAPH + {0x914A, 0x6157}, //3051 #CJK UNIFIED IDEOGRAPH + {0x914B, 0x6158}, //3052 #CJK UNIFIED IDEOGRAPH + {0x914C, 0x6159}, //3053 #CJK UNIFIED IDEOGRAPH + {0x914D, 0x615A}, //3054 #CJK UNIFIED IDEOGRAPH + {0x914E, 0x615B}, //3055 #CJK UNIFIED IDEOGRAPH + {0x914F, 0x615C}, //3056 #CJK UNIFIED IDEOGRAPH + {0x9150, 0x615E}, //3057 #CJK UNIFIED IDEOGRAPH + {0x9151, 0x615F}, //3058 #CJK UNIFIED IDEOGRAPH + {0x9152, 0x6160}, //3059 #CJK UNIFIED IDEOGRAPH + {0x9153, 0x6161}, //3060 #CJK UNIFIED IDEOGRAPH + {0x9154, 0x6163}, //3061 #CJK UNIFIED IDEOGRAPH + {0x9155, 0x6164}, //3062 #CJK UNIFIED IDEOGRAPH + {0x9156, 0x6165}, //3063 #CJK UNIFIED IDEOGRAPH + {0x9157, 0x6166}, //3064 #CJK UNIFIED IDEOGRAPH + {0x9158, 0x6169}, //3065 #CJK UNIFIED IDEOGRAPH + {0x9159, 0x616A}, //3066 #CJK UNIFIED IDEOGRAPH + {0x915A, 0x616B}, //3067 #CJK UNIFIED IDEOGRAPH + {0x915B, 0x616C}, //3068 #CJK UNIFIED IDEOGRAPH + {0x915C, 0x616D}, //3069 #CJK UNIFIED IDEOGRAPH + {0x915D, 0x616E}, //3070 #CJK UNIFIED IDEOGRAPH + {0x915E, 0x616F}, //3071 #CJK UNIFIED IDEOGRAPH + {0x915F, 0x6171}, //3072 #CJK UNIFIED IDEOGRAPH + {0x9160, 0x6172}, //3073 #CJK UNIFIED IDEOGRAPH + {0x9161, 0x6173}, //3074 #CJK UNIFIED IDEOGRAPH + {0x9162, 0x6174}, //3075 #CJK UNIFIED IDEOGRAPH + {0x9163, 0x6176}, //3076 #CJK UNIFIED IDEOGRAPH + {0x9164, 0x6178}, //3077 #CJK UNIFIED IDEOGRAPH + {0x9165, 0x6179}, //3078 #CJK UNIFIED IDEOGRAPH + {0x9166, 0x617A}, //3079 #CJK UNIFIED IDEOGRAPH + {0x9167, 0x617B}, //3080 #CJK UNIFIED IDEOGRAPH + {0x9168, 0x617C}, //3081 #CJK UNIFIED IDEOGRAPH + {0x9169, 0x617D}, //3082 #CJK UNIFIED IDEOGRAPH + {0x916A, 0x617E}, //3083 #CJK UNIFIED IDEOGRAPH + {0x916B, 0x617F}, //3084 #CJK UNIFIED IDEOGRAPH + {0x916C, 0x6180}, //3085 #CJK UNIFIED IDEOGRAPH + {0x916D, 0x6181}, //3086 #CJK UNIFIED IDEOGRAPH + {0x916E, 0x6182}, //3087 #CJK UNIFIED IDEOGRAPH + {0x916F, 0x6183}, //3088 #CJK UNIFIED IDEOGRAPH + {0x9170, 0x6184}, //3089 #CJK UNIFIED IDEOGRAPH + {0x9171, 0x6185}, //3090 #CJK UNIFIED IDEOGRAPH + {0x9172, 0x6186}, //3091 #CJK UNIFIED IDEOGRAPH + {0x9173, 0x6187}, //3092 #CJK UNIFIED IDEOGRAPH + {0x9174, 0x6188}, //3093 #CJK UNIFIED IDEOGRAPH + {0x9175, 0x6189}, //3094 #CJK UNIFIED IDEOGRAPH + {0x9176, 0x618A}, //3095 #CJK UNIFIED IDEOGRAPH + {0x9177, 0x618C}, //3096 #CJK UNIFIED IDEOGRAPH + {0x9178, 0x618D}, //3097 #CJK UNIFIED IDEOGRAPH + {0x9179, 0x618F}, //3098 #CJK UNIFIED IDEOGRAPH + {0x917A, 0x6190}, //3099 #CJK UNIFIED IDEOGRAPH + {0x917B, 0x6191}, //3100 #CJK UNIFIED IDEOGRAPH + {0x917C, 0x6192}, //3101 #CJK UNIFIED IDEOGRAPH + {0x917D, 0x6193}, //3102 #CJK UNIFIED IDEOGRAPH + {0x917E, 0x6195}, //3103 #CJK UNIFIED IDEOGRAPH + {0x9180, 0x6196}, //3104 #CJK UNIFIED IDEOGRAPH + {0x9181, 0x6197}, //3105 #CJK UNIFIED IDEOGRAPH + {0x9182, 0x6198}, //3106 #CJK UNIFIED IDEOGRAPH + {0x9183, 0x6199}, //3107 #CJK UNIFIED IDEOGRAPH + {0x9184, 0x619A}, //3108 #CJK UNIFIED IDEOGRAPH + {0x9185, 0x619B}, //3109 #CJK UNIFIED IDEOGRAPH + {0x9186, 0x619C}, //3110 #CJK UNIFIED IDEOGRAPH + {0x9187, 0x619E}, //3111 #CJK UNIFIED IDEOGRAPH + {0x9188, 0x619F}, //3112 #CJK UNIFIED IDEOGRAPH + {0x9189, 0x61A0}, //3113 #CJK UNIFIED IDEOGRAPH + {0x918A, 0x61A1}, //3114 #CJK UNIFIED IDEOGRAPH + {0x918B, 0x61A2}, //3115 #CJK UNIFIED IDEOGRAPH + {0x918C, 0x61A3}, //3116 #CJK UNIFIED IDEOGRAPH + {0x918D, 0x61A4}, //3117 #CJK UNIFIED IDEOGRAPH + {0x918E, 0x61A5}, //3118 #CJK UNIFIED IDEOGRAPH + {0x918F, 0x61A6}, //3119 #CJK UNIFIED IDEOGRAPH + {0x9190, 0x61AA}, //3120 #CJK UNIFIED IDEOGRAPH + {0x9191, 0x61AB}, //3121 #CJK UNIFIED IDEOGRAPH + {0x9192, 0x61AD}, //3122 #CJK UNIFIED IDEOGRAPH + {0x9193, 0x61AE}, //3123 #CJK UNIFIED IDEOGRAPH + {0x9194, 0x61AF}, //3124 #CJK UNIFIED IDEOGRAPH + {0x9195, 0x61B0}, //3125 #CJK UNIFIED IDEOGRAPH + {0x9196, 0x61B1}, //3126 #CJK UNIFIED IDEOGRAPH + {0x9197, 0x61B2}, //3127 #CJK UNIFIED IDEOGRAPH + {0x9198, 0x61B3}, //3128 #CJK UNIFIED IDEOGRAPH + {0x9199, 0x61B4}, //3129 #CJK UNIFIED IDEOGRAPH + {0x919A, 0x61B5}, //3130 #CJK UNIFIED IDEOGRAPH + {0x919B, 0x61B6}, //3131 #CJK UNIFIED IDEOGRAPH + {0x919C, 0x61B8}, //3132 #CJK UNIFIED IDEOGRAPH + {0x919D, 0x61B9}, //3133 #CJK UNIFIED IDEOGRAPH + {0x919E, 0x61BA}, //3134 #CJK UNIFIED IDEOGRAPH + {0x919F, 0x61BB}, //3135 #CJK UNIFIED IDEOGRAPH + {0x91A0, 0x61BC}, //3136 #CJK UNIFIED IDEOGRAPH + {0x91A1, 0x61BD}, //3137 #CJK UNIFIED IDEOGRAPH + {0x91A2, 0x61BF}, //3138 #CJK UNIFIED IDEOGRAPH + {0x91A3, 0x61C0}, //3139 #CJK UNIFIED IDEOGRAPH + {0x91A4, 0x61C1}, //3140 #CJK UNIFIED IDEOGRAPH + {0x91A5, 0x61C3}, //3141 #CJK UNIFIED IDEOGRAPH + {0x91A6, 0x61C4}, //3142 #CJK UNIFIED IDEOGRAPH + {0x91A7, 0x61C5}, //3143 #CJK UNIFIED IDEOGRAPH + {0x91A8, 0x61C6}, //3144 #CJK UNIFIED IDEOGRAPH + {0x91A9, 0x61C7}, //3145 #CJK UNIFIED IDEOGRAPH + {0x91AA, 0x61C9}, //3146 #CJK UNIFIED IDEOGRAPH + {0x91AB, 0x61CC}, //3147 #CJK UNIFIED IDEOGRAPH + {0x91AC, 0x61CD}, //3148 #CJK UNIFIED IDEOGRAPH + {0x91AD, 0x61CE}, //3149 #CJK UNIFIED IDEOGRAPH + {0x91AE, 0x61CF}, //3150 #CJK UNIFIED IDEOGRAPH + {0x91AF, 0x61D0}, //3151 #CJK UNIFIED IDEOGRAPH + {0x91B0, 0x61D3}, //3152 #CJK UNIFIED IDEOGRAPH + {0x91B1, 0x61D5}, //3153 #CJK UNIFIED IDEOGRAPH + {0x91B2, 0x61D6}, //3154 #CJK UNIFIED IDEOGRAPH + {0x91B3, 0x61D7}, //3155 #CJK UNIFIED IDEOGRAPH + {0x91B4, 0x61D8}, //3156 #CJK UNIFIED IDEOGRAPH + {0x91B5, 0x61D9}, //3157 #CJK UNIFIED IDEOGRAPH + {0x91B6, 0x61DA}, //3158 #CJK UNIFIED IDEOGRAPH + {0x91B7, 0x61DB}, //3159 #CJK UNIFIED IDEOGRAPH + {0x91B8, 0x61DC}, //3160 #CJK UNIFIED IDEOGRAPH + {0x91B9, 0x61DD}, //3161 #CJK UNIFIED IDEOGRAPH + {0x91BA, 0x61DE}, //3162 #CJK UNIFIED IDEOGRAPH + {0x91BB, 0x61DF}, //3163 #CJK UNIFIED IDEOGRAPH + {0x91BC, 0x61E0}, //3164 #CJK UNIFIED IDEOGRAPH + {0x91BD, 0x61E1}, //3165 #CJK UNIFIED IDEOGRAPH + {0x91BE, 0x61E2}, //3166 #CJK UNIFIED IDEOGRAPH + {0x91BF, 0x61E3}, //3167 #CJK UNIFIED IDEOGRAPH + {0x91C0, 0x61E4}, //3168 #CJK UNIFIED IDEOGRAPH + {0x91C1, 0x61E5}, //3169 #CJK UNIFIED IDEOGRAPH + {0x91C2, 0x61E7}, //3170 #CJK UNIFIED IDEOGRAPH + {0x91C3, 0x61E8}, //3171 #CJK UNIFIED IDEOGRAPH + {0x91C4, 0x61E9}, //3172 #CJK UNIFIED IDEOGRAPH + {0x91C5, 0x61EA}, //3173 #CJK UNIFIED IDEOGRAPH + {0x91C6, 0x61EB}, //3174 #CJK UNIFIED IDEOGRAPH + {0x91C7, 0x61EC}, //3175 #CJK UNIFIED IDEOGRAPH + {0x91C8, 0x61ED}, //3176 #CJK UNIFIED IDEOGRAPH + {0x91C9, 0x61EE}, //3177 #CJK UNIFIED IDEOGRAPH + {0x91CA, 0x61EF}, //3178 #CJK UNIFIED IDEOGRAPH + {0x91CB, 0x61F0}, //3179 #CJK UNIFIED IDEOGRAPH + {0x91CC, 0x61F1}, //3180 #CJK UNIFIED IDEOGRAPH + {0x91CD, 0x61F2}, //3181 #CJK UNIFIED IDEOGRAPH + {0x91CE, 0x61F3}, //3182 #CJK UNIFIED IDEOGRAPH + {0x91CF, 0x61F4}, //3183 #CJK UNIFIED IDEOGRAPH + {0x91D0, 0x61F6}, //3184 #CJK UNIFIED IDEOGRAPH + {0x91D1, 0x61F7}, //3185 #CJK UNIFIED IDEOGRAPH + {0x91D2, 0x61F8}, //3186 #CJK UNIFIED IDEOGRAPH + {0x91D3, 0x61F9}, //3187 #CJK UNIFIED IDEOGRAPH + {0x91D4, 0x61FA}, //3188 #CJK UNIFIED IDEOGRAPH + {0x91D5, 0x61FB}, //3189 #CJK UNIFIED IDEOGRAPH + {0x91D6, 0x61FC}, //3190 #CJK UNIFIED IDEOGRAPH + {0x91D7, 0x61FD}, //3191 #CJK UNIFIED IDEOGRAPH + {0x91D8, 0x61FE}, //3192 #CJK UNIFIED IDEOGRAPH + {0x91D9, 0x6200}, //3193 #CJK UNIFIED IDEOGRAPH + {0x91DA, 0x6201}, //3194 #CJK UNIFIED IDEOGRAPH + {0x91DB, 0x6202}, //3195 #CJK UNIFIED IDEOGRAPH + {0x91DC, 0x6203}, //3196 #CJK UNIFIED IDEOGRAPH + {0x91DD, 0x6204}, //3197 #CJK UNIFIED IDEOGRAPH + {0x91DE, 0x6205}, //3198 #CJK UNIFIED IDEOGRAPH + {0x91DF, 0x6207}, //3199 #CJK UNIFIED IDEOGRAPH + {0x91E0, 0x6209}, //3200 #CJK UNIFIED IDEOGRAPH + {0x91E1, 0x6213}, //3201 #CJK UNIFIED IDEOGRAPH + {0x91E2, 0x6214}, //3202 #CJK UNIFIED IDEOGRAPH + {0x91E3, 0x6219}, //3203 #CJK UNIFIED IDEOGRAPH + {0x91E4, 0x621C}, //3204 #CJK UNIFIED IDEOGRAPH + {0x91E5, 0x621D}, //3205 #CJK UNIFIED IDEOGRAPH + {0x91E6, 0x621E}, //3206 #CJK UNIFIED IDEOGRAPH + {0x91E7, 0x6220}, //3207 #CJK UNIFIED IDEOGRAPH + {0x91E8, 0x6223}, //3208 #CJK UNIFIED IDEOGRAPH + {0x91E9, 0x6226}, //3209 #CJK UNIFIED IDEOGRAPH + {0x91EA, 0x6227}, //3210 #CJK UNIFIED IDEOGRAPH + {0x91EB, 0x6228}, //3211 #CJK UNIFIED IDEOGRAPH + {0x91EC, 0x6229}, //3212 #CJK UNIFIED IDEOGRAPH + {0x91ED, 0x622B}, //3213 #CJK UNIFIED IDEOGRAPH + {0x91EE, 0x622D}, //3214 #CJK UNIFIED IDEOGRAPH + {0x91EF, 0x622F}, //3215 #CJK UNIFIED IDEOGRAPH + {0x91F0, 0x6230}, //3216 #CJK UNIFIED IDEOGRAPH + {0x91F1, 0x6231}, //3217 #CJK UNIFIED IDEOGRAPH + {0x91F2, 0x6232}, //3218 #CJK UNIFIED IDEOGRAPH + {0x91F3, 0x6235}, //3219 #CJK UNIFIED IDEOGRAPH + {0x91F4, 0x6236}, //3220 #CJK UNIFIED IDEOGRAPH + {0x91F5, 0x6238}, //3221 #CJK UNIFIED IDEOGRAPH + {0x91F6, 0x6239}, //3222 #CJK UNIFIED IDEOGRAPH + {0x91F7, 0x623A}, //3223 #CJK UNIFIED IDEOGRAPH + {0x91F8, 0x623B}, //3224 #CJK UNIFIED IDEOGRAPH + {0x91F9, 0x623C}, //3225 #CJK UNIFIED IDEOGRAPH + {0x91FA, 0x6242}, //3226 #CJK UNIFIED IDEOGRAPH + {0x91FB, 0x6244}, //3227 #CJK UNIFIED IDEOGRAPH + {0x91FC, 0x6245}, //3228 #CJK UNIFIED IDEOGRAPH + {0x91FD, 0x6246}, //3229 #CJK UNIFIED IDEOGRAPH + {0x91FE, 0x624A}, //3230 #CJK UNIFIED IDEOGRAPH + {0x9240, 0x624F}, //3231 #CJK UNIFIED IDEOGRAPH + {0x9241, 0x6250}, //3232 #CJK UNIFIED IDEOGRAPH + {0x9242, 0x6255}, //3233 #CJK UNIFIED IDEOGRAPH + {0x9243, 0x6256}, //3234 #CJK UNIFIED IDEOGRAPH + {0x9244, 0x6257}, //3235 #CJK UNIFIED IDEOGRAPH + {0x9245, 0x6259}, //3236 #CJK UNIFIED IDEOGRAPH + {0x9246, 0x625A}, //3237 #CJK UNIFIED IDEOGRAPH + {0x9247, 0x625C}, //3238 #CJK UNIFIED IDEOGRAPH + {0x9248, 0x625D}, //3239 #CJK UNIFIED IDEOGRAPH + {0x9249, 0x625E}, //3240 #CJK UNIFIED IDEOGRAPH + {0x924A, 0x625F}, //3241 #CJK UNIFIED IDEOGRAPH + {0x924B, 0x6260}, //3242 #CJK UNIFIED IDEOGRAPH + {0x924C, 0x6261}, //3243 #CJK UNIFIED IDEOGRAPH + {0x924D, 0x6262}, //3244 #CJK UNIFIED IDEOGRAPH + {0x924E, 0x6264}, //3245 #CJK UNIFIED IDEOGRAPH + {0x924F, 0x6265}, //3246 #CJK UNIFIED IDEOGRAPH + {0x9250, 0x6268}, //3247 #CJK UNIFIED IDEOGRAPH + {0x9251, 0x6271}, //3248 #CJK UNIFIED IDEOGRAPH + {0x9252, 0x6272}, //3249 #CJK UNIFIED IDEOGRAPH + {0x9253, 0x6274}, //3250 #CJK UNIFIED IDEOGRAPH + {0x9254, 0x6275}, //3251 #CJK UNIFIED IDEOGRAPH + {0x9255, 0x6277}, //3252 #CJK UNIFIED IDEOGRAPH + {0x9256, 0x6278}, //3253 #CJK UNIFIED IDEOGRAPH + {0x9257, 0x627A}, //3254 #CJK UNIFIED IDEOGRAPH + {0x9258, 0x627B}, //3255 #CJK UNIFIED IDEOGRAPH + {0x9259, 0x627D}, //3256 #CJK UNIFIED IDEOGRAPH + {0x925A, 0x6281}, //3257 #CJK UNIFIED IDEOGRAPH + {0x925B, 0x6282}, //3258 #CJK UNIFIED IDEOGRAPH + {0x925C, 0x6283}, //3259 #CJK UNIFIED IDEOGRAPH + {0x925D, 0x6285}, //3260 #CJK UNIFIED IDEOGRAPH + {0x925E, 0x6286}, //3261 #CJK UNIFIED IDEOGRAPH + {0x925F, 0x6287}, //3262 #CJK UNIFIED IDEOGRAPH + {0x9260, 0x6288}, //3263 #CJK UNIFIED IDEOGRAPH + {0x9261, 0x628B}, //3264 #CJK UNIFIED IDEOGRAPH + {0x9262, 0x628C}, //3265 #CJK UNIFIED IDEOGRAPH + {0x9263, 0x628D}, //3266 #CJK UNIFIED IDEOGRAPH + {0x9264, 0x628E}, //3267 #CJK UNIFIED IDEOGRAPH + {0x9265, 0x628F}, //3268 #CJK UNIFIED IDEOGRAPH + {0x9266, 0x6290}, //3269 #CJK UNIFIED IDEOGRAPH + {0x9267, 0x6294}, //3270 #CJK UNIFIED IDEOGRAPH + {0x9268, 0x6299}, //3271 #CJK UNIFIED IDEOGRAPH + {0x9269, 0x629C}, //3272 #CJK UNIFIED IDEOGRAPH + {0x926A, 0x629D}, //3273 #CJK UNIFIED IDEOGRAPH + {0x926B, 0x629E}, //3274 #CJK UNIFIED IDEOGRAPH + {0x926C, 0x62A3}, //3275 #CJK UNIFIED IDEOGRAPH + {0x926D, 0x62A6}, //3276 #CJK UNIFIED IDEOGRAPH + {0x926E, 0x62A7}, //3277 #CJK UNIFIED IDEOGRAPH + {0x926F, 0x62A9}, //3278 #CJK UNIFIED IDEOGRAPH + {0x9270, 0x62AA}, //3279 #CJK UNIFIED IDEOGRAPH + {0x9271, 0x62AD}, //3280 #CJK UNIFIED IDEOGRAPH + {0x9272, 0x62AE}, //3281 #CJK UNIFIED IDEOGRAPH + {0x9273, 0x62AF}, //3282 #CJK UNIFIED IDEOGRAPH + {0x9274, 0x62B0}, //3283 #CJK UNIFIED IDEOGRAPH + {0x9275, 0x62B2}, //3284 #CJK UNIFIED IDEOGRAPH + {0x9276, 0x62B3}, //3285 #CJK UNIFIED IDEOGRAPH + {0x9277, 0x62B4}, //3286 #CJK UNIFIED IDEOGRAPH + {0x9278, 0x62B6}, //3287 #CJK UNIFIED IDEOGRAPH + {0x9279, 0x62B7}, //3288 #CJK UNIFIED IDEOGRAPH + {0x927A, 0x62B8}, //3289 #CJK UNIFIED IDEOGRAPH + {0x927B, 0x62BA}, //3290 #CJK UNIFIED IDEOGRAPH + {0x927C, 0x62BE}, //3291 #CJK UNIFIED IDEOGRAPH + {0x927D, 0x62C0}, //3292 #CJK UNIFIED IDEOGRAPH + {0x927E, 0x62C1}, //3293 #CJK UNIFIED IDEOGRAPH + {0x9280, 0x62C3}, //3294 #CJK UNIFIED IDEOGRAPH + {0x9281, 0x62CB}, //3295 #CJK UNIFIED IDEOGRAPH + {0x9282, 0x62CF}, //3296 #CJK UNIFIED IDEOGRAPH + {0x9283, 0x62D1}, //3297 #CJK UNIFIED IDEOGRAPH + {0x9284, 0x62D5}, //3298 #CJK UNIFIED IDEOGRAPH + {0x9285, 0x62DD}, //3299 #CJK UNIFIED IDEOGRAPH + {0x9286, 0x62DE}, //3300 #CJK UNIFIED IDEOGRAPH + {0x9287, 0x62E0}, //3301 #CJK UNIFIED IDEOGRAPH + {0x9288, 0x62E1}, //3302 #CJK UNIFIED IDEOGRAPH + {0x9289, 0x62E4}, //3303 #CJK UNIFIED IDEOGRAPH + {0x928A, 0x62EA}, //3304 #CJK UNIFIED IDEOGRAPH + {0x928B, 0x62EB}, //3305 #CJK UNIFIED IDEOGRAPH + {0x928C, 0x62F0}, //3306 #CJK UNIFIED IDEOGRAPH + {0x928D, 0x62F2}, //3307 #CJK UNIFIED IDEOGRAPH + {0x928E, 0x62F5}, //3308 #CJK UNIFIED IDEOGRAPH + {0x928F, 0x62F8}, //3309 #CJK UNIFIED IDEOGRAPH + {0x9290, 0x62F9}, //3310 #CJK UNIFIED IDEOGRAPH + {0x9291, 0x62FA}, //3311 #CJK UNIFIED IDEOGRAPH + {0x9292, 0x62FB}, //3312 #CJK UNIFIED IDEOGRAPH + {0x9293, 0x6300}, //3313 #CJK UNIFIED IDEOGRAPH + {0x9294, 0x6303}, //3314 #CJK UNIFIED IDEOGRAPH + {0x9295, 0x6304}, //3315 #CJK UNIFIED IDEOGRAPH + {0x9296, 0x6305}, //3316 #CJK UNIFIED IDEOGRAPH + {0x9297, 0x6306}, //3317 #CJK UNIFIED IDEOGRAPH + {0x9298, 0x630A}, //3318 #CJK UNIFIED IDEOGRAPH + {0x9299, 0x630B}, //3319 #CJK UNIFIED IDEOGRAPH + {0x929A, 0x630C}, //3320 #CJK UNIFIED IDEOGRAPH + {0x929B, 0x630D}, //3321 #CJK UNIFIED IDEOGRAPH + {0x929C, 0x630F}, //3322 #CJK UNIFIED IDEOGRAPH + {0x929D, 0x6310}, //3323 #CJK UNIFIED IDEOGRAPH + {0x929E, 0x6312}, //3324 #CJK UNIFIED IDEOGRAPH + {0x929F, 0x6313}, //3325 #CJK UNIFIED IDEOGRAPH + {0x92A0, 0x6314}, //3326 #CJK UNIFIED IDEOGRAPH + {0x92A1, 0x6315}, //3327 #CJK UNIFIED IDEOGRAPH + {0x92A2, 0x6317}, //3328 #CJK UNIFIED IDEOGRAPH + {0x92A3, 0x6318}, //3329 #CJK UNIFIED IDEOGRAPH + {0x92A4, 0x6319}, //3330 #CJK UNIFIED IDEOGRAPH + {0x92A5, 0x631C}, //3331 #CJK UNIFIED IDEOGRAPH + {0x92A6, 0x6326}, //3332 #CJK UNIFIED IDEOGRAPH + {0x92A7, 0x6327}, //3333 #CJK UNIFIED IDEOGRAPH + {0x92A8, 0x6329}, //3334 #CJK UNIFIED IDEOGRAPH + {0x92A9, 0x632C}, //3335 #CJK UNIFIED IDEOGRAPH + {0x92AA, 0x632D}, //3336 #CJK UNIFIED IDEOGRAPH + {0x92AB, 0x632E}, //3337 #CJK UNIFIED IDEOGRAPH + {0x92AC, 0x6330}, //3338 #CJK UNIFIED IDEOGRAPH + {0x92AD, 0x6331}, //3339 #CJK UNIFIED IDEOGRAPH + {0x92AE, 0x6333}, //3340 #CJK UNIFIED IDEOGRAPH + {0x92AF, 0x6334}, //3341 #CJK UNIFIED IDEOGRAPH + {0x92B0, 0x6335}, //3342 #CJK UNIFIED IDEOGRAPH + {0x92B1, 0x6336}, //3343 #CJK UNIFIED IDEOGRAPH + {0x92B2, 0x6337}, //3344 #CJK UNIFIED IDEOGRAPH + {0x92B3, 0x6338}, //3345 #CJK UNIFIED IDEOGRAPH + {0x92B4, 0x633B}, //3346 #CJK UNIFIED IDEOGRAPH + {0x92B5, 0x633C}, //3347 #CJK UNIFIED IDEOGRAPH + {0x92B6, 0x633E}, //3348 #CJK UNIFIED IDEOGRAPH + {0x92B7, 0x633F}, //3349 #CJK UNIFIED IDEOGRAPH + {0x92B8, 0x6340}, //3350 #CJK UNIFIED IDEOGRAPH + {0x92B9, 0x6341}, //3351 #CJK UNIFIED IDEOGRAPH + {0x92BA, 0x6344}, //3352 #CJK UNIFIED IDEOGRAPH + {0x92BB, 0x6347}, //3353 #CJK UNIFIED IDEOGRAPH + {0x92BC, 0x6348}, //3354 #CJK UNIFIED IDEOGRAPH + {0x92BD, 0x634A}, //3355 #CJK UNIFIED IDEOGRAPH + {0x92BE, 0x6351}, //3356 #CJK UNIFIED IDEOGRAPH + {0x92BF, 0x6352}, //3357 #CJK UNIFIED IDEOGRAPH + {0x92C0, 0x6353}, //3358 #CJK UNIFIED IDEOGRAPH + {0x92C1, 0x6354}, //3359 #CJK UNIFIED IDEOGRAPH + {0x92C2, 0x6356}, //3360 #CJK UNIFIED IDEOGRAPH + {0x92C3, 0x6357}, //3361 #CJK UNIFIED IDEOGRAPH + {0x92C4, 0x6358}, //3362 #CJK UNIFIED IDEOGRAPH + {0x92C5, 0x6359}, //3363 #CJK UNIFIED IDEOGRAPH + {0x92C6, 0x635A}, //3364 #CJK UNIFIED IDEOGRAPH + {0x92C7, 0x635B}, //3365 #CJK UNIFIED IDEOGRAPH + {0x92C8, 0x635C}, //3366 #CJK UNIFIED IDEOGRAPH + {0x92C9, 0x635D}, //3367 #CJK UNIFIED IDEOGRAPH + {0x92CA, 0x6360}, //3368 #CJK UNIFIED IDEOGRAPH + {0x92CB, 0x6364}, //3369 #CJK UNIFIED IDEOGRAPH + {0x92CC, 0x6365}, //3370 #CJK UNIFIED IDEOGRAPH + {0x92CD, 0x6366}, //3371 #CJK UNIFIED IDEOGRAPH + {0x92CE, 0x6368}, //3372 #CJK UNIFIED IDEOGRAPH + {0x92CF, 0x636A}, //3373 #CJK UNIFIED IDEOGRAPH + {0x92D0, 0x636B}, //3374 #CJK UNIFIED IDEOGRAPH + {0x92D1, 0x636C}, //3375 #CJK UNIFIED IDEOGRAPH + {0x92D2, 0x636F}, //3376 #CJK UNIFIED IDEOGRAPH + {0x92D3, 0x6370}, //3377 #CJK UNIFIED IDEOGRAPH + {0x92D4, 0x6372}, //3378 #CJK UNIFIED IDEOGRAPH + {0x92D5, 0x6373}, //3379 #CJK UNIFIED IDEOGRAPH + {0x92D6, 0x6374}, //3380 #CJK UNIFIED IDEOGRAPH + {0x92D7, 0x6375}, //3381 #CJK UNIFIED IDEOGRAPH + {0x92D8, 0x6378}, //3382 #CJK UNIFIED IDEOGRAPH + {0x92D9, 0x6379}, //3383 #CJK UNIFIED IDEOGRAPH + {0x92DA, 0x637C}, //3384 #CJK UNIFIED IDEOGRAPH + {0x92DB, 0x637D}, //3385 #CJK UNIFIED IDEOGRAPH + {0x92DC, 0x637E}, //3386 #CJK UNIFIED IDEOGRAPH + {0x92DD, 0x637F}, //3387 #CJK UNIFIED IDEOGRAPH + {0x92DE, 0x6381}, //3388 #CJK UNIFIED IDEOGRAPH + {0x92DF, 0x6383}, //3389 #CJK UNIFIED IDEOGRAPH + {0x92E0, 0x6384}, //3390 #CJK UNIFIED IDEOGRAPH + {0x92E1, 0x6385}, //3391 #CJK UNIFIED IDEOGRAPH + {0x92E2, 0x6386}, //3392 #CJK UNIFIED IDEOGRAPH + {0x92E3, 0x638B}, //3393 #CJK UNIFIED IDEOGRAPH + {0x92E4, 0x638D}, //3394 #CJK UNIFIED IDEOGRAPH + {0x92E5, 0x6391}, //3395 #CJK UNIFIED IDEOGRAPH + {0x92E6, 0x6393}, //3396 #CJK UNIFIED IDEOGRAPH + {0x92E7, 0x6394}, //3397 #CJK UNIFIED IDEOGRAPH + {0x92E8, 0x6395}, //3398 #CJK UNIFIED IDEOGRAPH + {0x92E9, 0x6397}, //3399 #CJK UNIFIED IDEOGRAPH + {0x92EA, 0x6399}, //3400 #CJK UNIFIED IDEOGRAPH + {0x92EB, 0x639A}, //3401 #CJK UNIFIED IDEOGRAPH + {0x92EC, 0x639B}, //3402 #CJK UNIFIED IDEOGRAPH + {0x92ED, 0x639C}, //3403 #CJK UNIFIED IDEOGRAPH + {0x92EE, 0x639D}, //3404 #CJK UNIFIED IDEOGRAPH + {0x92EF, 0x639E}, //3405 #CJK UNIFIED IDEOGRAPH + {0x92F0, 0x639F}, //3406 #CJK UNIFIED IDEOGRAPH + {0x92F1, 0x63A1}, //3407 #CJK UNIFIED IDEOGRAPH + {0x92F2, 0x63A4}, //3408 #CJK UNIFIED IDEOGRAPH + {0x92F3, 0x63A6}, //3409 #CJK UNIFIED IDEOGRAPH + {0x92F4, 0x63AB}, //3410 #CJK UNIFIED IDEOGRAPH + {0x92F5, 0x63AF}, //3411 #CJK UNIFIED IDEOGRAPH + {0x92F6, 0x63B1}, //3412 #CJK UNIFIED IDEOGRAPH + {0x92F7, 0x63B2}, //3413 #CJK UNIFIED IDEOGRAPH + {0x92F8, 0x63B5}, //3414 #CJK UNIFIED IDEOGRAPH + {0x92F9, 0x63B6}, //3415 #CJK UNIFIED IDEOGRAPH + {0x92FA, 0x63B9}, //3416 #CJK UNIFIED IDEOGRAPH + {0x92FB, 0x63BB}, //3417 #CJK UNIFIED IDEOGRAPH + {0x92FC, 0x63BD}, //3418 #CJK UNIFIED IDEOGRAPH + {0x92FD, 0x63BF}, //3419 #CJK UNIFIED IDEOGRAPH + {0x92FE, 0x63C0}, //3420 #CJK UNIFIED IDEOGRAPH + {0x9340, 0x63C1}, //3421 #CJK UNIFIED IDEOGRAPH + {0x9341, 0x63C2}, //3422 #CJK UNIFIED IDEOGRAPH + {0x9342, 0x63C3}, //3423 #CJK UNIFIED IDEOGRAPH + {0x9343, 0x63C5}, //3424 #CJK UNIFIED IDEOGRAPH + {0x9344, 0x63C7}, //3425 #CJK UNIFIED IDEOGRAPH + {0x9345, 0x63C8}, //3426 #CJK UNIFIED IDEOGRAPH + {0x9346, 0x63CA}, //3427 #CJK UNIFIED IDEOGRAPH + {0x9347, 0x63CB}, //3428 #CJK UNIFIED IDEOGRAPH + {0x9348, 0x63CC}, //3429 #CJK UNIFIED IDEOGRAPH + {0x9349, 0x63D1}, //3430 #CJK UNIFIED IDEOGRAPH + {0x934A, 0x63D3}, //3431 #CJK UNIFIED IDEOGRAPH + {0x934B, 0x63D4}, //3432 #CJK UNIFIED IDEOGRAPH + {0x934C, 0x63D5}, //3433 #CJK UNIFIED IDEOGRAPH + {0x934D, 0x63D7}, //3434 #CJK UNIFIED IDEOGRAPH + {0x934E, 0x63D8}, //3435 #CJK UNIFIED IDEOGRAPH + {0x934F, 0x63D9}, //3436 #CJK UNIFIED IDEOGRAPH + {0x9350, 0x63DA}, //3437 #CJK UNIFIED IDEOGRAPH + {0x9351, 0x63DB}, //3438 #CJK UNIFIED IDEOGRAPH + {0x9352, 0x63DC}, //3439 #CJK UNIFIED IDEOGRAPH + {0x9353, 0x63DD}, //3440 #CJK UNIFIED IDEOGRAPH + {0x9354, 0x63DF}, //3441 #CJK UNIFIED IDEOGRAPH + {0x9355, 0x63E2}, //3442 #CJK UNIFIED IDEOGRAPH + {0x9356, 0x63E4}, //3443 #CJK UNIFIED IDEOGRAPH + {0x9357, 0x63E5}, //3444 #CJK UNIFIED IDEOGRAPH + {0x9358, 0x63E6}, //3445 #CJK UNIFIED IDEOGRAPH + {0x9359, 0x63E7}, //3446 #CJK UNIFIED IDEOGRAPH + {0x935A, 0x63E8}, //3447 #CJK UNIFIED IDEOGRAPH + {0x935B, 0x63EB}, //3448 #CJK UNIFIED IDEOGRAPH + {0x935C, 0x63EC}, //3449 #CJK UNIFIED IDEOGRAPH + {0x935D, 0x63EE}, //3450 #CJK UNIFIED IDEOGRAPH + {0x935E, 0x63EF}, //3451 #CJK UNIFIED IDEOGRAPH + {0x935F, 0x63F0}, //3452 #CJK UNIFIED IDEOGRAPH + {0x9360, 0x63F1}, //3453 #CJK UNIFIED IDEOGRAPH + {0x9361, 0x63F3}, //3454 #CJK UNIFIED IDEOGRAPH + {0x9362, 0x63F5}, //3455 #CJK UNIFIED IDEOGRAPH + {0x9363, 0x63F7}, //3456 #CJK UNIFIED IDEOGRAPH + {0x9364, 0x63F9}, //3457 #CJK UNIFIED IDEOGRAPH + {0x9365, 0x63FA}, //3458 #CJK UNIFIED IDEOGRAPH + {0x9366, 0x63FB}, //3459 #CJK UNIFIED IDEOGRAPH + {0x9367, 0x63FC}, //3460 #CJK UNIFIED IDEOGRAPH + {0x9368, 0x63FE}, //3461 #CJK UNIFIED IDEOGRAPH + {0x9369, 0x6403}, //3462 #CJK UNIFIED IDEOGRAPH + {0x936A, 0x6404}, //3463 #CJK UNIFIED IDEOGRAPH + {0x936B, 0x6406}, //3464 #CJK UNIFIED IDEOGRAPH + {0x936C, 0x6407}, //3465 #CJK UNIFIED IDEOGRAPH + {0x936D, 0x6408}, //3466 #CJK UNIFIED IDEOGRAPH + {0x936E, 0x6409}, //3467 #CJK UNIFIED IDEOGRAPH + {0x936F, 0x640A}, //3468 #CJK UNIFIED IDEOGRAPH + {0x9370, 0x640D}, //3469 #CJK UNIFIED IDEOGRAPH + {0x9371, 0x640E}, //3470 #CJK UNIFIED IDEOGRAPH + {0x9372, 0x6411}, //3471 #CJK UNIFIED IDEOGRAPH + {0x9373, 0x6412}, //3472 #CJK UNIFIED IDEOGRAPH + {0x9374, 0x6415}, //3473 #CJK UNIFIED IDEOGRAPH + {0x9375, 0x6416}, //3474 #CJK UNIFIED IDEOGRAPH + {0x9376, 0x6417}, //3475 #CJK UNIFIED IDEOGRAPH + {0x9377, 0x6418}, //3476 #CJK UNIFIED IDEOGRAPH + {0x9378, 0x6419}, //3477 #CJK UNIFIED IDEOGRAPH + {0x9379, 0x641A}, //3478 #CJK UNIFIED IDEOGRAPH + {0x937A, 0x641D}, //3479 #CJK UNIFIED IDEOGRAPH + {0x937B, 0x641F}, //3480 #CJK UNIFIED IDEOGRAPH + {0x937C, 0x6422}, //3481 #CJK UNIFIED IDEOGRAPH + {0x937D, 0x6423}, //3482 #CJK UNIFIED IDEOGRAPH + {0x937E, 0x6424}, //3483 #CJK UNIFIED IDEOGRAPH + {0x9380, 0x6425}, //3484 #CJK UNIFIED IDEOGRAPH + {0x9381, 0x6427}, //3485 #CJK UNIFIED IDEOGRAPH + {0x9382, 0x6428}, //3486 #CJK UNIFIED IDEOGRAPH + {0x9383, 0x6429}, //3487 #CJK UNIFIED IDEOGRAPH + {0x9384, 0x642B}, //3488 #CJK UNIFIED IDEOGRAPH + {0x9385, 0x642E}, //3489 #CJK UNIFIED IDEOGRAPH + {0x9386, 0x642F}, //3490 #CJK UNIFIED IDEOGRAPH + {0x9387, 0x6430}, //3491 #CJK UNIFIED IDEOGRAPH + {0x9388, 0x6431}, //3492 #CJK UNIFIED IDEOGRAPH + {0x9389, 0x6432}, //3493 #CJK UNIFIED IDEOGRAPH + {0x938A, 0x6433}, //3494 #CJK UNIFIED IDEOGRAPH + {0x938B, 0x6435}, //3495 #CJK UNIFIED IDEOGRAPH + {0x938C, 0x6436}, //3496 #CJK UNIFIED IDEOGRAPH + {0x938D, 0x6437}, //3497 #CJK UNIFIED IDEOGRAPH + {0x938E, 0x6438}, //3498 #CJK UNIFIED IDEOGRAPH + {0x938F, 0x6439}, //3499 #CJK UNIFIED IDEOGRAPH + {0x9390, 0x643B}, //3500 #CJK UNIFIED IDEOGRAPH + {0x9391, 0x643C}, //3501 #CJK UNIFIED IDEOGRAPH + {0x9392, 0x643E}, //3502 #CJK UNIFIED IDEOGRAPH + {0x9393, 0x6440}, //3503 #CJK UNIFIED IDEOGRAPH + {0x9394, 0x6442}, //3504 #CJK UNIFIED IDEOGRAPH + {0x9395, 0x6443}, //3505 #CJK UNIFIED IDEOGRAPH + {0x9396, 0x6449}, //3506 #CJK UNIFIED IDEOGRAPH + {0x9397, 0x644B}, //3507 #CJK UNIFIED IDEOGRAPH + {0x9398, 0x644C}, //3508 #CJK UNIFIED IDEOGRAPH + {0x9399, 0x644D}, //3509 #CJK UNIFIED IDEOGRAPH + {0x939A, 0x644E}, //3510 #CJK UNIFIED IDEOGRAPH + {0x939B, 0x644F}, //3511 #CJK UNIFIED IDEOGRAPH + {0x939C, 0x6450}, //3512 #CJK UNIFIED IDEOGRAPH + {0x939D, 0x6451}, //3513 #CJK UNIFIED IDEOGRAPH + {0x939E, 0x6453}, //3514 #CJK UNIFIED IDEOGRAPH + {0x939F, 0x6455}, //3515 #CJK UNIFIED IDEOGRAPH + {0x93A0, 0x6456}, //3516 #CJK UNIFIED IDEOGRAPH + {0x93A1, 0x6457}, //3517 #CJK UNIFIED IDEOGRAPH + {0x93A2, 0x6459}, //3518 #CJK UNIFIED IDEOGRAPH + {0x93A3, 0x645A}, //3519 #CJK UNIFIED IDEOGRAPH + {0x93A4, 0x645B}, //3520 #CJK UNIFIED IDEOGRAPH + {0x93A5, 0x645C}, //3521 #CJK UNIFIED IDEOGRAPH + {0x93A6, 0x645D}, //3522 #CJK UNIFIED IDEOGRAPH + {0x93A7, 0x645F}, //3523 #CJK UNIFIED IDEOGRAPH + {0x93A8, 0x6460}, //3524 #CJK UNIFIED IDEOGRAPH + {0x93A9, 0x6461}, //3525 #CJK UNIFIED IDEOGRAPH + {0x93AA, 0x6462}, //3526 #CJK UNIFIED IDEOGRAPH + {0x93AB, 0x6463}, //3527 #CJK UNIFIED IDEOGRAPH + {0x93AC, 0x6464}, //3528 #CJK UNIFIED IDEOGRAPH + {0x93AD, 0x6465}, //3529 #CJK UNIFIED IDEOGRAPH + {0x93AE, 0x6466}, //3530 #CJK UNIFIED IDEOGRAPH + {0x93AF, 0x6468}, //3531 #CJK UNIFIED IDEOGRAPH + {0x93B0, 0x646A}, //3532 #CJK UNIFIED IDEOGRAPH + {0x93B1, 0x646B}, //3533 #CJK UNIFIED IDEOGRAPH + {0x93B2, 0x646C}, //3534 #CJK UNIFIED IDEOGRAPH + {0x93B3, 0x646E}, //3535 #CJK UNIFIED IDEOGRAPH + {0x93B4, 0x646F}, //3536 #CJK UNIFIED IDEOGRAPH + {0x93B5, 0x6470}, //3537 #CJK UNIFIED IDEOGRAPH + {0x93B6, 0x6471}, //3538 #CJK UNIFIED IDEOGRAPH + {0x93B7, 0x6472}, //3539 #CJK UNIFIED IDEOGRAPH + {0x93B8, 0x6473}, //3540 #CJK UNIFIED IDEOGRAPH + {0x93B9, 0x6474}, //3541 #CJK UNIFIED IDEOGRAPH + {0x93BA, 0x6475}, //3542 #CJK UNIFIED IDEOGRAPH + {0x93BB, 0x6476}, //3543 #CJK UNIFIED IDEOGRAPH + {0x93BC, 0x6477}, //3544 #CJK UNIFIED IDEOGRAPH + {0x93BD, 0x647B}, //3545 #CJK UNIFIED IDEOGRAPH + {0x93BE, 0x647C}, //3546 #CJK UNIFIED IDEOGRAPH + {0x93BF, 0x647D}, //3547 #CJK UNIFIED IDEOGRAPH + {0x93C0, 0x647E}, //3548 #CJK UNIFIED IDEOGRAPH + {0x93C1, 0x647F}, //3549 #CJK UNIFIED IDEOGRAPH + {0x93C2, 0x6480}, //3550 #CJK UNIFIED IDEOGRAPH + {0x93C3, 0x6481}, //3551 #CJK UNIFIED IDEOGRAPH + {0x93C4, 0x6483}, //3552 #CJK UNIFIED IDEOGRAPH + {0x93C5, 0x6486}, //3553 #CJK UNIFIED IDEOGRAPH + {0x93C6, 0x6488}, //3554 #CJK UNIFIED IDEOGRAPH + {0x93C7, 0x6489}, //3555 #CJK UNIFIED IDEOGRAPH + {0x93C8, 0x648A}, //3556 #CJK UNIFIED IDEOGRAPH + {0x93C9, 0x648B}, //3557 #CJK UNIFIED IDEOGRAPH + {0x93CA, 0x648C}, //3558 #CJK UNIFIED IDEOGRAPH + {0x93CB, 0x648D}, //3559 #CJK UNIFIED IDEOGRAPH + {0x93CC, 0x648E}, //3560 #CJK UNIFIED IDEOGRAPH + {0x93CD, 0x648F}, //3561 #CJK UNIFIED IDEOGRAPH + {0x93CE, 0x6490}, //3562 #CJK UNIFIED IDEOGRAPH + {0x93CF, 0x6493}, //3563 #CJK UNIFIED IDEOGRAPH + {0x93D0, 0x6494}, //3564 #CJK UNIFIED IDEOGRAPH + {0x93D1, 0x6497}, //3565 #CJK UNIFIED IDEOGRAPH + {0x93D2, 0x6498}, //3566 #CJK UNIFIED IDEOGRAPH + {0x93D3, 0x649A}, //3567 #CJK UNIFIED IDEOGRAPH + {0x93D4, 0x649B}, //3568 #CJK UNIFIED IDEOGRAPH + {0x93D5, 0x649C}, //3569 #CJK UNIFIED IDEOGRAPH + {0x93D6, 0x649D}, //3570 #CJK UNIFIED IDEOGRAPH + {0x93D7, 0x649F}, //3571 #CJK UNIFIED IDEOGRAPH + {0x93D8, 0x64A0}, //3572 #CJK UNIFIED IDEOGRAPH + {0x93D9, 0x64A1}, //3573 #CJK UNIFIED IDEOGRAPH + {0x93DA, 0x64A2}, //3574 #CJK UNIFIED IDEOGRAPH + {0x93DB, 0x64A3}, //3575 #CJK UNIFIED IDEOGRAPH + {0x93DC, 0x64A5}, //3576 #CJK UNIFIED IDEOGRAPH + {0x93DD, 0x64A6}, //3577 #CJK UNIFIED IDEOGRAPH + {0x93DE, 0x64A7}, //3578 #CJK UNIFIED IDEOGRAPH + {0x93DF, 0x64A8}, //3579 #CJK UNIFIED IDEOGRAPH + {0x93E0, 0x64AA}, //3580 #CJK UNIFIED IDEOGRAPH + {0x93E1, 0x64AB}, //3581 #CJK UNIFIED IDEOGRAPH + {0x93E2, 0x64AF}, //3582 #CJK UNIFIED IDEOGRAPH + {0x93E3, 0x64B1}, //3583 #CJK UNIFIED IDEOGRAPH + {0x93E4, 0x64B2}, //3584 #CJK UNIFIED IDEOGRAPH + {0x93E5, 0x64B3}, //3585 #CJK UNIFIED IDEOGRAPH + {0x93E6, 0x64B4}, //3586 #CJK UNIFIED IDEOGRAPH + {0x93E7, 0x64B6}, //3587 #CJK UNIFIED IDEOGRAPH + {0x93E8, 0x64B9}, //3588 #CJK UNIFIED IDEOGRAPH + {0x93E9, 0x64BB}, //3589 #CJK UNIFIED IDEOGRAPH + {0x93EA, 0x64BD}, //3590 #CJK UNIFIED IDEOGRAPH + {0x93EB, 0x64BE}, //3591 #CJK UNIFIED IDEOGRAPH + {0x93EC, 0x64BF}, //3592 #CJK UNIFIED IDEOGRAPH + {0x93ED, 0x64C1}, //3593 #CJK UNIFIED IDEOGRAPH + {0x93EE, 0x64C3}, //3594 #CJK UNIFIED IDEOGRAPH + {0x93EF, 0x64C4}, //3595 #CJK UNIFIED IDEOGRAPH + {0x93F0, 0x64C6}, //3596 #CJK UNIFIED IDEOGRAPH + {0x93F1, 0x64C7}, //3597 #CJK UNIFIED IDEOGRAPH + {0x93F2, 0x64C8}, //3598 #CJK UNIFIED IDEOGRAPH + {0x93F3, 0x64C9}, //3599 #CJK UNIFIED IDEOGRAPH + {0x93F4, 0x64CA}, //3600 #CJK UNIFIED IDEOGRAPH + {0x93F5, 0x64CB}, //3601 #CJK UNIFIED IDEOGRAPH + {0x93F6, 0x64CC}, //3602 #CJK UNIFIED IDEOGRAPH + {0x93F7, 0x64CF}, //3603 #CJK UNIFIED IDEOGRAPH + {0x93F8, 0x64D1}, //3604 #CJK UNIFIED IDEOGRAPH + {0x93F9, 0x64D3}, //3605 #CJK UNIFIED IDEOGRAPH + {0x93FA, 0x64D4}, //3606 #CJK UNIFIED IDEOGRAPH + {0x93FB, 0x64D5}, //3607 #CJK UNIFIED IDEOGRAPH + {0x93FC, 0x64D6}, //3608 #CJK UNIFIED IDEOGRAPH + {0x93FD, 0x64D9}, //3609 #CJK UNIFIED IDEOGRAPH + {0x93FE, 0x64DA}, //3610 #CJK UNIFIED IDEOGRAPH + {0x9440, 0x64DB}, //3611 #CJK UNIFIED IDEOGRAPH + {0x9441, 0x64DC}, //3612 #CJK UNIFIED IDEOGRAPH + {0x9442, 0x64DD}, //3613 #CJK UNIFIED IDEOGRAPH + {0x9443, 0x64DF}, //3614 #CJK UNIFIED IDEOGRAPH + {0x9444, 0x64E0}, //3615 #CJK UNIFIED IDEOGRAPH + {0x9445, 0x64E1}, //3616 #CJK UNIFIED IDEOGRAPH + {0x9446, 0x64E3}, //3617 #CJK UNIFIED IDEOGRAPH + {0x9447, 0x64E5}, //3618 #CJK UNIFIED IDEOGRAPH + {0x9448, 0x64E7}, //3619 #CJK UNIFIED IDEOGRAPH + {0x9449, 0x64E8}, //3620 #CJK UNIFIED IDEOGRAPH + {0x944A, 0x64E9}, //3621 #CJK UNIFIED IDEOGRAPH + {0x944B, 0x64EA}, //3622 #CJK UNIFIED IDEOGRAPH + {0x944C, 0x64EB}, //3623 #CJK UNIFIED IDEOGRAPH + {0x944D, 0x64EC}, //3624 #CJK UNIFIED IDEOGRAPH + {0x944E, 0x64ED}, //3625 #CJK UNIFIED IDEOGRAPH + {0x944F, 0x64EE}, //3626 #CJK UNIFIED IDEOGRAPH + {0x9450, 0x64EF}, //3627 #CJK UNIFIED IDEOGRAPH + {0x9451, 0x64F0}, //3628 #CJK UNIFIED IDEOGRAPH + {0x9452, 0x64F1}, //3629 #CJK UNIFIED IDEOGRAPH + {0x9453, 0x64F2}, //3630 #CJK UNIFIED IDEOGRAPH + {0x9454, 0x64F3}, //3631 #CJK UNIFIED IDEOGRAPH + {0x9455, 0x64F4}, //3632 #CJK UNIFIED IDEOGRAPH + {0x9456, 0x64F5}, //3633 #CJK UNIFIED IDEOGRAPH + {0x9457, 0x64F6}, //3634 #CJK UNIFIED IDEOGRAPH + {0x9458, 0x64F7}, //3635 #CJK UNIFIED IDEOGRAPH + {0x9459, 0x64F8}, //3636 #CJK UNIFIED IDEOGRAPH + {0x945A, 0x64F9}, //3637 #CJK UNIFIED IDEOGRAPH + {0x945B, 0x64FA}, //3638 #CJK UNIFIED IDEOGRAPH + {0x945C, 0x64FB}, //3639 #CJK UNIFIED IDEOGRAPH + {0x945D, 0x64FC}, //3640 #CJK UNIFIED IDEOGRAPH + {0x945E, 0x64FD}, //3641 #CJK UNIFIED IDEOGRAPH + {0x945F, 0x64FE}, //3642 #CJK UNIFIED IDEOGRAPH + {0x9460, 0x64FF}, //3643 #CJK UNIFIED IDEOGRAPH + {0x9461, 0x6501}, //3644 #CJK UNIFIED IDEOGRAPH + {0x9462, 0x6502}, //3645 #CJK UNIFIED IDEOGRAPH + {0x9463, 0x6503}, //3646 #CJK UNIFIED IDEOGRAPH + {0x9464, 0x6504}, //3647 #CJK UNIFIED IDEOGRAPH + {0x9465, 0x6505}, //3648 #CJK UNIFIED IDEOGRAPH + {0x9466, 0x6506}, //3649 #CJK UNIFIED IDEOGRAPH + {0x9467, 0x6507}, //3650 #CJK UNIFIED IDEOGRAPH + {0x9468, 0x6508}, //3651 #CJK UNIFIED IDEOGRAPH + {0x9469, 0x650A}, //3652 #CJK UNIFIED IDEOGRAPH + {0x946A, 0x650B}, //3653 #CJK UNIFIED IDEOGRAPH + {0x946B, 0x650C}, //3654 #CJK UNIFIED IDEOGRAPH + {0x946C, 0x650D}, //3655 #CJK UNIFIED IDEOGRAPH + {0x946D, 0x650E}, //3656 #CJK UNIFIED IDEOGRAPH + {0x946E, 0x650F}, //3657 #CJK UNIFIED IDEOGRAPH + {0x946F, 0x6510}, //3658 #CJK UNIFIED IDEOGRAPH + {0x9470, 0x6511}, //3659 #CJK UNIFIED IDEOGRAPH + {0x9471, 0x6513}, //3660 #CJK UNIFIED IDEOGRAPH + {0x9472, 0x6514}, //3661 #CJK UNIFIED IDEOGRAPH + {0x9473, 0x6515}, //3662 #CJK UNIFIED IDEOGRAPH + {0x9474, 0x6516}, //3663 #CJK UNIFIED IDEOGRAPH + {0x9475, 0x6517}, //3664 #CJK UNIFIED IDEOGRAPH + {0x9476, 0x6519}, //3665 #CJK UNIFIED IDEOGRAPH + {0x9477, 0x651A}, //3666 #CJK UNIFIED IDEOGRAPH + {0x9478, 0x651B}, //3667 #CJK UNIFIED IDEOGRAPH + {0x9479, 0x651C}, //3668 #CJK UNIFIED IDEOGRAPH + {0x947A, 0x651D}, //3669 #CJK UNIFIED IDEOGRAPH + {0x947B, 0x651E}, //3670 #CJK UNIFIED IDEOGRAPH + {0x947C, 0x651F}, //3671 #CJK UNIFIED IDEOGRAPH + {0x947D, 0x6520}, //3672 #CJK UNIFIED IDEOGRAPH + {0x947E, 0x6521}, //3673 #CJK UNIFIED IDEOGRAPH + {0x9480, 0x6522}, //3674 #CJK UNIFIED IDEOGRAPH + {0x9481, 0x6523}, //3675 #CJK UNIFIED IDEOGRAPH + {0x9482, 0x6524}, //3676 #CJK UNIFIED IDEOGRAPH + {0x9483, 0x6526}, //3677 #CJK UNIFIED IDEOGRAPH + {0x9484, 0x6527}, //3678 #CJK UNIFIED IDEOGRAPH + {0x9485, 0x6528}, //3679 #CJK UNIFIED IDEOGRAPH + {0x9486, 0x6529}, //3680 #CJK UNIFIED IDEOGRAPH + {0x9487, 0x652A}, //3681 #CJK UNIFIED IDEOGRAPH + {0x9488, 0x652C}, //3682 #CJK UNIFIED IDEOGRAPH + {0x9489, 0x652D}, //3683 #CJK UNIFIED IDEOGRAPH + {0x948A, 0x6530}, //3684 #CJK UNIFIED IDEOGRAPH + {0x948B, 0x6531}, //3685 #CJK UNIFIED IDEOGRAPH + {0x948C, 0x6532}, //3686 #CJK UNIFIED IDEOGRAPH + {0x948D, 0x6533}, //3687 #CJK UNIFIED IDEOGRAPH + {0x948E, 0x6537}, //3688 #CJK UNIFIED IDEOGRAPH + {0x948F, 0x653A}, //3689 #CJK UNIFIED IDEOGRAPH + {0x9490, 0x653C}, //3690 #CJK UNIFIED IDEOGRAPH + {0x9491, 0x653D}, //3691 #CJK UNIFIED IDEOGRAPH + {0x9492, 0x6540}, //3692 #CJK UNIFIED IDEOGRAPH + {0x9493, 0x6541}, //3693 #CJK UNIFIED IDEOGRAPH + {0x9494, 0x6542}, //3694 #CJK UNIFIED IDEOGRAPH + {0x9495, 0x6543}, //3695 #CJK UNIFIED IDEOGRAPH + {0x9496, 0x6544}, //3696 #CJK UNIFIED IDEOGRAPH + {0x9497, 0x6546}, //3697 #CJK UNIFIED IDEOGRAPH + {0x9498, 0x6547}, //3698 #CJK UNIFIED IDEOGRAPH + {0x9499, 0x654A}, //3699 #CJK UNIFIED IDEOGRAPH + {0x949A, 0x654B}, //3700 #CJK UNIFIED IDEOGRAPH + {0x949B, 0x654D}, //3701 #CJK UNIFIED IDEOGRAPH + {0x949C, 0x654E}, //3702 #CJK UNIFIED IDEOGRAPH + {0x949D, 0x6550}, //3703 #CJK UNIFIED IDEOGRAPH + {0x949E, 0x6552}, //3704 #CJK UNIFIED IDEOGRAPH + {0x949F, 0x6553}, //3705 #CJK UNIFIED IDEOGRAPH + {0x94A0, 0x6554}, //3706 #CJK UNIFIED IDEOGRAPH + {0x94A1, 0x6557}, //3707 #CJK UNIFIED IDEOGRAPH + {0x94A2, 0x6558}, //3708 #CJK UNIFIED IDEOGRAPH + {0x94A3, 0x655A}, //3709 #CJK UNIFIED IDEOGRAPH + {0x94A4, 0x655C}, //3710 #CJK UNIFIED IDEOGRAPH + {0x94A5, 0x655F}, //3711 #CJK UNIFIED IDEOGRAPH + {0x94A6, 0x6560}, //3712 #CJK UNIFIED IDEOGRAPH + {0x94A7, 0x6561}, //3713 #CJK UNIFIED IDEOGRAPH + {0x94A8, 0x6564}, //3714 #CJK UNIFIED IDEOGRAPH + {0x94A9, 0x6565}, //3715 #CJK UNIFIED IDEOGRAPH + {0x94AA, 0x6567}, //3716 #CJK UNIFIED IDEOGRAPH + {0x94AB, 0x6568}, //3717 #CJK UNIFIED IDEOGRAPH + {0x94AC, 0x6569}, //3718 #CJK UNIFIED IDEOGRAPH + {0x94AD, 0x656A}, //3719 #CJK UNIFIED IDEOGRAPH + {0x94AE, 0x656D}, //3720 #CJK UNIFIED IDEOGRAPH + {0x94AF, 0x656E}, //3721 #CJK UNIFIED IDEOGRAPH + {0x94B0, 0x656F}, //3722 #CJK UNIFIED IDEOGRAPH + {0x94B1, 0x6571}, //3723 #CJK UNIFIED IDEOGRAPH + {0x94B2, 0x6573}, //3724 #CJK UNIFIED IDEOGRAPH + {0x94B3, 0x6575}, //3725 #CJK UNIFIED IDEOGRAPH + {0x94B4, 0x6576}, //3726 #CJK UNIFIED IDEOGRAPH + {0x94B5, 0x6578}, //3727 #CJK UNIFIED IDEOGRAPH + {0x94B6, 0x6579}, //3728 #CJK UNIFIED IDEOGRAPH + {0x94B7, 0x657A}, //3729 #CJK UNIFIED IDEOGRAPH + {0x94B8, 0x657B}, //3730 #CJK UNIFIED IDEOGRAPH + {0x94B9, 0x657C}, //3731 #CJK UNIFIED IDEOGRAPH + {0x94BA, 0x657D}, //3732 #CJK UNIFIED IDEOGRAPH + {0x94BB, 0x657E}, //3733 #CJK UNIFIED IDEOGRAPH + {0x94BC, 0x657F}, //3734 #CJK UNIFIED IDEOGRAPH + {0x94BD, 0x6580}, //3735 #CJK UNIFIED IDEOGRAPH + {0x94BE, 0x6581}, //3736 #CJK UNIFIED IDEOGRAPH + {0x94BF, 0x6582}, //3737 #CJK UNIFIED IDEOGRAPH + {0x94C0, 0x6583}, //3738 #CJK UNIFIED IDEOGRAPH + {0x94C1, 0x6584}, //3739 #CJK UNIFIED IDEOGRAPH + {0x94C2, 0x6585}, //3740 #CJK UNIFIED IDEOGRAPH + {0x94C3, 0x6586}, //3741 #CJK UNIFIED IDEOGRAPH + {0x94C4, 0x6588}, //3742 #CJK UNIFIED IDEOGRAPH + {0x94C5, 0x6589}, //3743 #CJK UNIFIED IDEOGRAPH + {0x94C6, 0x658A}, //3744 #CJK UNIFIED IDEOGRAPH + {0x94C7, 0x658D}, //3745 #CJK UNIFIED IDEOGRAPH + {0x94C8, 0x658E}, //3746 #CJK UNIFIED IDEOGRAPH + {0x94C9, 0x658F}, //3747 #CJK UNIFIED IDEOGRAPH + {0x94CA, 0x6592}, //3748 #CJK UNIFIED IDEOGRAPH + {0x94CB, 0x6594}, //3749 #CJK UNIFIED IDEOGRAPH + {0x94CC, 0x6595}, //3750 #CJK UNIFIED IDEOGRAPH + {0x94CD, 0x6596}, //3751 #CJK UNIFIED IDEOGRAPH + {0x94CE, 0x6598}, //3752 #CJK UNIFIED IDEOGRAPH + {0x94CF, 0x659A}, //3753 #CJK UNIFIED IDEOGRAPH + {0x94D0, 0x659D}, //3754 #CJK UNIFIED IDEOGRAPH + {0x94D1, 0x659E}, //3755 #CJK UNIFIED IDEOGRAPH + {0x94D2, 0x65A0}, //3756 #CJK UNIFIED IDEOGRAPH + {0x94D3, 0x65A2}, //3757 #CJK UNIFIED IDEOGRAPH + {0x94D4, 0x65A3}, //3758 #CJK UNIFIED IDEOGRAPH + {0x94D5, 0x65A6}, //3759 #CJK UNIFIED IDEOGRAPH + {0x94D6, 0x65A8}, //3760 #CJK UNIFIED IDEOGRAPH + {0x94D7, 0x65AA}, //3761 #CJK UNIFIED IDEOGRAPH + {0x94D8, 0x65AC}, //3762 #CJK UNIFIED IDEOGRAPH + {0x94D9, 0x65AE}, //3763 #CJK UNIFIED IDEOGRAPH + {0x94DA, 0x65B1}, //3764 #CJK UNIFIED IDEOGRAPH + {0x94DB, 0x65B2}, //3765 #CJK UNIFIED IDEOGRAPH + {0x94DC, 0x65B3}, //3766 #CJK UNIFIED IDEOGRAPH + {0x94DD, 0x65B4}, //3767 #CJK UNIFIED IDEOGRAPH + {0x94DE, 0x65B5}, //3768 #CJK UNIFIED IDEOGRAPH + {0x94DF, 0x65B6}, //3769 #CJK UNIFIED IDEOGRAPH + {0x94E0, 0x65B7}, //3770 #CJK UNIFIED IDEOGRAPH + {0x94E1, 0x65B8}, //3771 #CJK UNIFIED IDEOGRAPH + {0x94E2, 0x65BA}, //3772 #CJK UNIFIED IDEOGRAPH + {0x94E3, 0x65BB}, //3773 #CJK UNIFIED IDEOGRAPH + {0x94E4, 0x65BE}, //3774 #CJK UNIFIED IDEOGRAPH + {0x94E5, 0x65BF}, //3775 #CJK UNIFIED IDEOGRAPH + {0x94E6, 0x65C0}, //3776 #CJK UNIFIED IDEOGRAPH + {0x94E7, 0x65C2}, //3777 #CJK UNIFIED IDEOGRAPH + {0x94E8, 0x65C7}, //3778 #CJK UNIFIED IDEOGRAPH + {0x94E9, 0x65C8}, //3779 #CJK UNIFIED IDEOGRAPH + {0x94EA, 0x65C9}, //3780 #CJK UNIFIED IDEOGRAPH + {0x94EB, 0x65CA}, //3781 #CJK UNIFIED IDEOGRAPH + {0x94EC, 0x65CD}, //3782 #CJK UNIFIED IDEOGRAPH + {0x94ED, 0x65D0}, //3783 #CJK UNIFIED IDEOGRAPH + {0x94EE, 0x65D1}, //3784 #CJK UNIFIED IDEOGRAPH + {0x94EF, 0x65D3}, //3785 #CJK UNIFIED IDEOGRAPH + {0x94F0, 0x65D4}, //3786 #CJK UNIFIED IDEOGRAPH + {0x94F1, 0x65D5}, //3787 #CJK UNIFIED IDEOGRAPH + {0x94F2, 0x65D8}, //3788 #CJK UNIFIED IDEOGRAPH + {0x94F3, 0x65D9}, //3789 #CJK UNIFIED IDEOGRAPH + {0x94F4, 0x65DA}, //3790 #CJK UNIFIED IDEOGRAPH + {0x94F5, 0x65DB}, //3791 #CJK UNIFIED IDEOGRAPH + {0x94F6, 0x65DC}, //3792 #CJK UNIFIED IDEOGRAPH + {0x94F7, 0x65DD}, //3793 #CJK UNIFIED IDEOGRAPH + {0x94F8, 0x65DE}, //3794 #CJK UNIFIED IDEOGRAPH + {0x94F9, 0x65DF}, //3795 #CJK UNIFIED IDEOGRAPH + {0x94FA, 0x65E1}, //3796 #CJK UNIFIED IDEOGRAPH + {0x94FB, 0x65E3}, //3797 #CJK UNIFIED IDEOGRAPH + {0x94FC, 0x65E4}, //3798 #CJK UNIFIED IDEOGRAPH + {0x94FD, 0x65EA}, //3799 #CJK UNIFIED IDEOGRAPH + {0x94FE, 0x65EB}, //3800 #CJK UNIFIED IDEOGRAPH + {0x9540, 0x65F2}, //3801 #CJK UNIFIED IDEOGRAPH + {0x9541, 0x65F3}, //3802 #CJK UNIFIED IDEOGRAPH + {0x9542, 0x65F4}, //3803 #CJK UNIFIED IDEOGRAPH + {0x9543, 0x65F5}, //3804 #CJK UNIFIED IDEOGRAPH + {0x9544, 0x65F8}, //3805 #CJK UNIFIED IDEOGRAPH + {0x9545, 0x65F9}, //3806 #CJK UNIFIED IDEOGRAPH + {0x9546, 0x65FB}, //3807 #CJK UNIFIED IDEOGRAPH + {0x9547, 0x65FC}, //3808 #CJK UNIFIED IDEOGRAPH + {0x9548, 0x65FD}, //3809 #CJK UNIFIED IDEOGRAPH + {0x9549, 0x65FE}, //3810 #CJK UNIFIED IDEOGRAPH + {0x954A, 0x65FF}, //3811 #CJK UNIFIED IDEOGRAPH + {0x954B, 0x6601}, //3812 #CJK UNIFIED IDEOGRAPH + {0x954C, 0x6604}, //3813 #CJK UNIFIED IDEOGRAPH + {0x954D, 0x6605}, //3814 #CJK UNIFIED IDEOGRAPH + {0x954E, 0x6607}, //3815 #CJK UNIFIED IDEOGRAPH + {0x954F, 0x6608}, //3816 #CJK UNIFIED IDEOGRAPH + {0x9550, 0x6609}, //3817 #CJK UNIFIED IDEOGRAPH + {0x9551, 0x660B}, //3818 #CJK UNIFIED IDEOGRAPH + {0x9552, 0x660D}, //3819 #CJK UNIFIED IDEOGRAPH + {0x9553, 0x6610}, //3820 #CJK UNIFIED IDEOGRAPH + {0x9554, 0x6611}, //3821 #CJK UNIFIED IDEOGRAPH + {0x9555, 0x6612}, //3822 #CJK UNIFIED IDEOGRAPH + {0x9556, 0x6616}, //3823 #CJK UNIFIED IDEOGRAPH + {0x9557, 0x6617}, //3824 #CJK UNIFIED IDEOGRAPH + {0x9558, 0x6618}, //3825 #CJK UNIFIED IDEOGRAPH + {0x9559, 0x661A}, //3826 #CJK UNIFIED IDEOGRAPH + {0x955A, 0x661B}, //3827 #CJK UNIFIED IDEOGRAPH + {0x955B, 0x661C}, //3828 #CJK UNIFIED IDEOGRAPH + {0x955C, 0x661E}, //3829 #CJK UNIFIED IDEOGRAPH + {0x955D, 0x6621}, //3830 #CJK UNIFIED IDEOGRAPH + {0x955E, 0x6622}, //3831 #CJK UNIFIED IDEOGRAPH + {0x955F, 0x6623}, //3832 #CJK UNIFIED IDEOGRAPH + {0x9560, 0x6624}, //3833 #CJK UNIFIED IDEOGRAPH + {0x9561, 0x6626}, //3834 #CJK UNIFIED IDEOGRAPH + {0x9562, 0x6629}, //3835 #CJK UNIFIED IDEOGRAPH + {0x9563, 0x662A}, //3836 #CJK UNIFIED IDEOGRAPH + {0x9564, 0x662B}, //3837 #CJK UNIFIED IDEOGRAPH + {0x9565, 0x662C}, //3838 #CJK UNIFIED IDEOGRAPH + {0x9566, 0x662E}, //3839 #CJK UNIFIED IDEOGRAPH + {0x9567, 0x6630}, //3840 #CJK UNIFIED IDEOGRAPH + {0x9568, 0x6632}, //3841 #CJK UNIFIED IDEOGRAPH + {0x9569, 0x6633}, //3842 #CJK UNIFIED IDEOGRAPH + {0x956A, 0x6637}, //3843 #CJK UNIFIED IDEOGRAPH + {0x956B, 0x6638}, //3844 #CJK UNIFIED IDEOGRAPH + {0x956C, 0x6639}, //3845 #CJK UNIFIED IDEOGRAPH + {0x956D, 0x663A}, //3846 #CJK UNIFIED IDEOGRAPH + {0x956E, 0x663B}, //3847 #CJK UNIFIED IDEOGRAPH + {0x956F, 0x663D}, //3848 #CJK UNIFIED IDEOGRAPH + {0x9570, 0x663F}, //3849 #CJK UNIFIED IDEOGRAPH + {0x9571, 0x6640}, //3850 #CJK UNIFIED IDEOGRAPH + {0x9572, 0x6642}, //3851 #CJK UNIFIED IDEOGRAPH + {0x9573, 0x6644}, //3852 #CJK UNIFIED IDEOGRAPH + {0x9574, 0x6645}, //3853 #CJK UNIFIED IDEOGRAPH + {0x9575, 0x6646}, //3854 #CJK UNIFIED IDEOGRAPH + {0x9576, 0x6647}, //3855 #CJK UNIFIED IDEOGRAPH + {0x9577, 0x6648}, //3856 #CJK UNIFIED IDEOGRAPH + {0x9578, 0x6649}, //3857 #CJK UNIFIED IDEOGRAPH + {0x9579, 0x664A}, //3858 #CJK UNIFIED IDEOGRAPH + {0x957A, 0x664D}, //3859 #CJK UNIFIED IDEOGRAPH + {0x957B, 0x664E}, //3860 #CJK UNIFIED IDEOGRAPH + {0x957C, 0x6650}, //3861 #CJK UNIFIED IDEOGRAPH + {0x957D, 0x6651}, //3862 #CJK UNIFIED IDEOGRAPH + {0x957E, 0x6658}, //3863 #CJK UNIFIED IDEOGRAPH + {0x9580, 0x6659}, //3864 #CJK UNIFIED IDEOGRAPH + {0x9581, 0x665B}, //3865 #CJK UNIFIED IDEOGRAPH + {0x9582, 0x665C}, //3866 #CJK UNIFIED IDEOGRAPH + {0x9583, 0x665D}, //3867 #CJK UNIFIED IDEOGRAPH + {0x9584, 0x665E}, //3868 #CJK UNIFIED IDEOGRAPH + {0x9585, 0x6660}, //3869 #CJK UNIFIED IDEOGRAPH + {0x9586, 0x6662}, //3870 #CJK UNIFIED IDEOGRAPH + {0x9587, 0x6663}, //3871 #CJK UNIFIED IDEOGRAPH + {0x9588, 0x6665}, //3872 #CJK UNIFIED IDEOGRAPH + {0x9589, 0x6667}, //3873 #CJK UNIFIED IDEOGRAPH + {0x958A, 0x6669}, //3874 #CJK UNIFIED IDEOGRAPH + {0x958B, 0x666A}, //3875 #CJK UNIFIED IDEOGRAPH + {0x958C, 0x666B}, //3876 #CJK UNIFIED IDEOGRAPH + {0x958D, 0x666C}, //3877 #CJK UNIFIED IDEOGRAPH + {0x958E, 0x666D}, //3878 #CJK UNIFIED IDEOGRAPH + {0x958F, 0x6671}, //3879 #CJK UNIFIED IDEOGRAPH + {0x9590, 0x6672}, //3880 #CJK UNIFIED IDEOGRAPH + {0x9591, 0x6673}, //3881 #CJK UNIFIED IDEOGRAPH + {0x9592, 0x6675}, //3882 #CJK UNIFIED IDEOGRAPH + {0x9593, 0x6678}, //3883 #CJK UNIFIED IDEOGRAPH + {0x9594, 0x6679}, //3884 #CJK UNIFIED IDEOGRAPH + {0x9595, 0x667B}, //3885 #CJK UNIFIED IDEOGRAPH + {0x9596, 0x667C}, //3886 #CJK UNIFIED IDEOGRAPH + {0x9597, 0x667D}, //3887 #CJK UNIFIED IDEOGRAPH + {0x9598, 0x667F}, //3888 #CJK UNIFIED IDEOGRAPH + {0x9599, 0x6680}, //3889 #CJK UNIFIED IDEOGRAPH + {0x959A, 0x6681}, //3890 #CJK UNIFIED IDEOGRAPH + {0x959B, 0x6683}, //3891 #CJK UNIFIED IDEOGRAPH + {0x959C, 0x6685}, //3892 #CJK UNIFIED IDEOGRAPH + {0x959D, 0x6686}, //3893 #CJK UNIFIED IDEOGRAPH + {0x959E, 0x6688}, //3894 #CJK UNIFIED IDEOGRAPH + {0x959F, 0x6689}, //3895 #CJK UNIFIED IDEOGRAPH + {0x95A0, 0x668A}, //3896 #CJK UNIFIED IDEOGRAPH + {0x95A1, 0x668B}, //3897 #CJK UNIFIED IDEOGRAPH + {0x95A2, 0x668D}, //3898 #CJK UNIFIED IDEOGRAPH + {0x95A3, 0x668E}, //3899 #CJK UNIFIED IDEOGRAPH + {0x95A4, 0x668F}, //3900 #CJK UNIFIED IDEOGRAPH + {0x95A5, 0x6690}, //3901 #CJK UNIFIED IDEOGRAPH + {0x95A6, 0x6692}, //3902 #CJK UNIFIED IDEOGRAPH + {0x95A7, 0x6693}, //3903 #CJK UNIFIED IDEOGRAPH + {0x95A8, 0x6694}, //3904 #CJK UNIFIED IDEOGRAPH + {0x95A9, 0x6695}, //3905 #CJK UNIFIED IDEOGRAPH + {0x95AA, 0x6698}, //3906 #CJK UNIFIED IDEOGRAPH + {0x95AB, 0x6699}, //3907 #CJK UNIFIED IDEOGRAPH + {0x95AC, 0x669A}, //3908 #CJK UNIFIED IDEOGRAPH + {0x95AD, 0x669B}, //3909 #CJK UNIFIED IDEOGRAPH + {0x95AE, 0x669C}, //3910 #CJK UNIFIED IDEOGRAPH + {0x95AF, 0x669E}, //3911 #CJK UNIFIED IDEOGRAPH + {0x95B0, 0x669F}, //3912 #CJK UNIFIED IDEOGRAPH + {0x95B1, 0x66A0}, //3913 #CJK UNIFIED IDEOGRAPH + {0x95B2, 0x66A1}, //3914 #CJK UNIFIED IDEOGRAPH + {0x95B3, 0x66A2}, //3915 #CJK UNIFIED IDEOGRAPH + {0x95B4, 0x66A3}, //3916 #CJK UNIFIED IDEOGRAPH + {0x95B5, 0x66A4}, //3917 #CJK UNIFIED IDEOGRAPH + {0x95B6, 0x66A5}, //3918 #CJK UNIFIED IDEOGRAPH + {0x95B7, 0x66A6}, //3919 #CJK UNIFIED IDEOGRAPH + {0x95B8, 0x66A9}, //3920 #CJK UNIFIED IDEOGRAPH + {0x95B9, 0x66AA}, //3921 #CJK UNIFIED IDEOGRAPH + {0x95BA, 0x66AB}, //3922 #CJK UNIFIED IDEOGRAPH + {0x95BB, 0x66AC}, //3923 #CJK UNIFIED IDEOGRAPH + {0x95BC, 0x66AD}, //3924 #CJK UNIFIED IDEOGRAPH + {0x95BD, 0x66AF}, //3925 #CJK UNIFIED IDEOGRAPH + {0x95BE, 0x66B0}, //3926 #CJK UNIFIED IDEOGRAPH + {0x95BF, 0x66B1}, //3927 #CJK UNIFIED IDEOGRAPH + {0x95C0, 0x66B2}, //3928 #CJK UNIFIED IDEOGRAPH + {0x95C1, 0x66B3}, //3929 #CJK UNIFIED IDEOGRAPH + {0x95C2, 0x66B5}, //3930 #CJK UNIFIED IDEOGRAPH + {0x95C3, 0x66B6}, //3931 #CJK UNIFIED IDEOGRAPH + {0x95C4, 0x66B7}, //3932 #CJK UNIFIED IDEOGRAPH + {0x95C5, 0x66B8}, //3933 #CJK UNIFIED IDEOGRAPH + {0x95C6, 0x66BA}, //3934 #CJK UNIFIED IDEOGRAPH + {0x95C7, 0x66BB}, //3935 #CJK UNIFIED IDEOGRAPH + {0x95C8, 0x66BC}, //3936 #CJK UNIFIED IDEOGRAPH + {0x95C9, 0x66BD}, //3937 #CJK UNIFIED IDEOGRAPH + {0x95CA, 0x66BF}, //3938 #CJK UNIFIED IDEOGRAPH + {0x95CB, 0x66C0}, //3939 #CJK UNIFIED IDEOGRAPH + {0x95CC, 0x66C1}, //3940 #CJK UNIFIED IDEOGRAPH + {0x95CD, 0x66C2}, //3941 #CJK UNIFIED IDEOGRAPH + {0x95CE, 0x66C3}, //3942 #CJK UNIFIED IDEOGRAPH + {0x95CF, 0x66C4}, //3943 #CJK UNIFIED IDEOGRAPH + {0x95D0, 0x66C5}, //3944 #CJK UNIFIED IDEOGRAPH + {0x95D1, 0x66C6}, //3945 #CJK UNIFIED IDEOGRAPH + {0x95D2, 0x66C7}, //3946 #CJK UNIFIED IDEOGRAPH + {0x95D3, 0x66C8}, //3947 #CJK UNIFIED IDEOGRAPH + {0x95D4, 0x66C9}, //3948 #CJK UNIFIED IDEOGRAPH + {0x95D5, 0x66CA}, //3949 #CJK UNIFIED IDEOGRAPH + {0x95D6, 0x66CB}, //3950 #CJK UNIFIED IDEOGRAPH + {0x95D7, 0x66CC}, //3951 #CJK UNIFIED IDEOGRAPH + {0x95D8, 0x66CD}, //3952 #CJK UNIFIED IDEOGRAPH + {0x95D9, 0x66CE}, //3953 #CJK UNIFIED IDEOGRAPH + {0x95DA, 0x66CF}, //3954 #CJK UNIFIED IDEOGRAPH + {0x95DB, 0x66D0}, //3955 #CJK UNIFIED IDEOGRAPH + {0x95DC, 0x66D1}, //3956 #CJK UNIFIED IDEOGRAPH + {0x95DD, 0x66D2}, //3957 #CJK UNIFIED IDEOGRAPH + {0x95DE, 0x66D3}, //3958 #CJK UNIFIED IDEOGRAPH + {0x95DF, 0x66D4}, //3959 #CJK UNIFIED IDEOGRAPH + {0x95E0, 0x66D5}, //3960 #CJK UNIFIED IDEOGRAPH + {0x95E1, 0x66D6}, //3961 #CJK UNIFIED IDEOGRAPH + {0x95E2, 0x66D7}, //3962 #CJK UNIFIED IDEOGRAPH + {0x95E3, 0x66D8}, //3963 #CJK UNIFIED IDEOGRAPH + {0x95E4, 0x66DA}, //3964 #CJK UNIFIED IDEOGRAPH + {0x95E5, 0x66DE}, //3965 #CJK UNIFIED IDEOGRAPH + {0x95E6, 0x66DF}, //3966 #CJK UNIFIED IDEOGRAPH + {0x95E7, 0x66E0}, //3967 #CJK UNIFIED IDEOGRAPH + {0x95E8, 0x66E1}, //3968 #CJK UNIFIED IDEOGRAPH + {0x95E9, 0x66E2}, //3969 #CJK UNIFIED IDEOGRAPH + {0x95EA, 0x66E3}, //3970 #CJK UNIFIED IDEOGRAPH + {0x95EB, 0x66E4}, //3971 #CJK UNIFIED IDEOGRAPH + {0x95EC, 0x66E5}, //3972 #CJK UNIFIED IDEOGRAPH + {0x95ED, 0x66E7}, //3973 #CJK UNIFIED IDEOGRAPH + {0x95EE, 0x66E8}, //3974 #CJK UNIFIED IDEOGRAPH + {0x95EF, 0x66EA}, //3975 #CJK UNIFIED IDEOGRAPH + {0x95F0, 0x66EB}, //3976 #CJK UNIFIED IDEOGRAPH + {0x95F1, 0x66EC}, //3977 #CJK UNIFIED IDEOGRAPH + {0x95F2, 0x66ED}, //3978 #CJK UNIFIED IDEOGRAPH + {0x95F3, 0x66EE}, //3979 #CJK UNIFIED IDEOGRAPH + {0x95F4, 0x66EF}, //3980 #CJK UNIFIED IDEOGRAPH + {0x95F5, 0x66F1}, //3981 #CJK UNIFIED IDEOGRAPH + {0x95F6, 0x66F5}, //3982 #CJK UNIFIED IDEOGRAPH + {0x95F7, 0x66F6}, //3983 #CJK UNIFIED IDEOGRAPH + {0x95F8, 0x66F8}, //3984 #CJK UNIFIED IDEOGRAPH + {0x95F9, 0x66FA}, //3985 #CJK UNIFIED IDEOGRAPH + {0x95FA, 0x66FB}, //3986 #CJK UNIFIED IDEOGRAPH + {0x95FB, 0x66FD}, //3987 #CJK UNIFIED IDEOGRAPH + {0x95FC, 0x6701}, //3988 #CJK UNIFIED IDEOGRAPH + {0x95FD, 0x6702}, //3989 #CJK UNIFIED IDEOGRAPH + {0x95FE, 0x6703}, //3990 #CJK UNIFIED IDEOGRAPH + {0x9640, 0x6704}, //3991 #CJK UNIFIED IDEOGRAPH + {0x9641, 0x6705}, //3992 #CJK UNIFIED IDEOGRAPH + {0x9642, 0x6706}, //3993 #CJK UNIFIED IDEOGRAPH + {0x9643, 0x6707}, //3994 #CJK UNIFIED IDEOGRAPH + {0x9644, 0x670C}, //3995 #CJK UNIFIED IDEOGRAPH + {0x9645, 0x670E}, //3996 #CJK UNIFIED IDEOGRAPH + {0x9646, 0x670F}, //3997 #CJK UNIFIED IDEOGRAPH + {0x9647, 0x6711}, //3998 #CJK UNIFIED IDEOGRAPH + {0x9648, 0x6712}, //3999 #CJK UNIFIED IDEOGRAPH + {0x9649, 0x6713}, //4000 #CJK UNIFIED IDEOGRAPH + {0x964A, 0x6716}, //4001 #CJK UNIFIED IDEOGRAPH + {0x964B, 0x6718}, //4002 #CJK UNIFIED IDEOGRAPH + {0x964C, 0x6719}, //4003 #CJK UNIFIED IDEOGRAPH + {0x964D, 0x671A}, //4004 #CJK UNIFIED IDEOGRAPH + {0x964E, 0x671C}, //4005 #CJK UNIFIED IDEOGRAPH + {0x964F, 0x671E}, //4006 #CJK UNIFIED IDEOGRAPH + {0x9650, 0x6720}, //4007 #CJK UNIFIED IDEOGRAPH + {0x9651, 0x6721}, //4008 #CJK UNIFIED IDEOGRAPH + {0x9652, 0x6722}, //4009 #CJK UNIFIED IDEOGRAPH + {0x9653, 0x6723}, //4010 #CJK UNIFIED IDEOGRAPH + {0x9654, 0x6724}, //4011 #CJK UNIFIED IDEOGRAPH + {0x9655, 0x6725}, //4012 #CJK UNIFIED IDEOGRAPH + {0x9656, 0x6727}, //4013 #CJK UNIFIED IDEOGRAPH + {0x9657, 0x6729}, //4014 #CJK UNIFIED IDEOGRAPH + {0x9658, 0x672E}, //4015 #CJK UNIFIED IDEOGRAPH + {0x9659, 0x6730}, //4016 #CJK UNIFIED IDEOGRAPH + {0x965A, 0x6732}, //4017 #CJK UNIFIED IDEOGRAPH + {0x965B, 0x6733}, //4018 #CJK UNIFIED IDEOGRAPH + {0x965C, 0x6736}, //4019 #CJK UNIFIED IDEOGRAPH + {0x965D, 0x6737}, //4020 #CJK UNIFIED IDEOGRAPH + {0x965E, 0x6738}, //4021 #CJK UNIFIED IDEOGRAPH + {0x965F, 0x6739}, //4022 #CJK UNIFIED IDEOGRAPH + {0x9660, 0x673B}, //4023 #CJK UNIFIED IDEOGRAPH + {0x9661, 0x673C}, //4024 #CJK UNIFIED IDEOGRAPH + {0x9662, 0x673E}, //4025 #CJK UNIFIED IDEOGRAPH + {0x9663, 0x673F}, //4026 #CJK UNIFIED IDEOGRAPH + {0x9664, 0x6741}, //4027 #CJK UNIFIED IDEOGRAPH + {0x9665, 0x6744}, //4028 #CJK UNIFIED IDEOGRAPH + {0x9666, 0x6745}, //4029 #CJK UNIFIED IDEOGRAPH + {0x9667, 0x6747}, //4030 #CJK UNIFIED IDEOGRAPH + {0x9668, 0x674A}, //4031 #CJK UNIFIED IDEOGRAPH + {0x9669, 0x674B}, //4032 #CJK UNIFIED IDEOGRAPH + {0x966A, 0x674D}, //4033 #CJK UNIFIED IDEOGRAPH + {0x966B, 0x6752}, //4034 #CJK UNIFIED IDEOGRAPH + {0x966C, 0x6754}, //4035 #CJK UNIFIED IDEOGRAPH + {0x966D, 0x6755}, //4036 #CJK UNIFIED IDEOGRAPH + {0x966E, 0x6757}, //4037 #CJK UNIFIED IDEOGRAPH + {0x966F, 0x6758}, //4038 #CJK UNIFIED IDEOGRAPH + {0x9670, 0x6759}, //4039 #CJK UNIFIED IDEOGRAPH + {0x9671, 0x675A}, //4040 #CJK UNIFIED IDEOGRAPH + {0x9672, 0x675B}, //4041 #CJK UNIFIED IDEOGRAPH + {0x9673, 0x675D}, //4042 #CJK UNIFIED IDEOGRAPH + {0x9674, 0x6762}, //4043 #CJK UNIFIED IDEOGRAPH + {0x9675, 0x6763}, //4044 #CJK UNIFIED IDEOGRAPH + {0x9676, 0x6764}, //4045 #CJK UNIFIED IDEOGRAPH + {0x9677, 0x6766}, //4046 #CJK UNIFIED IDEOGRAPH + {0x9678, 0x6767}, //4047 #CJK UNIFIED IDEOGRAPH + {0x9679, 0x676B}, //4048 #CJK UNIFIED IDEOGRAPH + {0x967A, 0x676C}, //4049 #CJK UNIFIED IDEOGRAPH + {0x967B, 0x676E}, //4050 #CJK UNIFIED IDEOGRAPH + {0x967C, 0x6771}, //4051 #CJK UNIFIED IDEOGRAPH + {0x967D, 0x6774}, //4052 #CJK UNIFIED IDEOGRAPH + {0x967E, 0x6776}, //4053 #CJK UNIFIED IDEOGRAPH + {0x9680, 0x6778}, //4054 #CJK UNIFIED IDEOGRAPH + {0x9681, 0x6779}, //4055 #CJK UNIFIED IDEOGRAPH + {0x9682, 0x677A}, //4056 #CJK UNIFIED IDEOGRAPH + {0x9683, 0x677B}, //4057 #CJK UNIFIED IDEOGRAPH + {0x9684, 0x677D}, //4058 #CJK UNIFIED IDEOGRAPH + {0x9685, 0x6780}, //4059 #CJK UNIFIED IDEOGRAPH + {0x9686, 0x6782}, //4060 #CJK UNIFIED IDEOGRAPH + {0x9687, 0x6783}, //4061 #CJK UNIFIED IDEOGRAPH + {0x9688, 0x6785}, //4062 #CJK UNIFIED IDEOGRAPH + {0x9689, 0x6786}, //4063 #CJK UNIFIED IDEOGRAPH + {0x968A, 0x6788}, //4064 #CJK UNIFIED IDEOGRAPH + {0x968B, 0x678A}, //4065 #CJK UNIFIED IDEOGRAPH + {0x968C, 0x678C}, //4066 #CJK UNIFIED IDEOGRAPH + {0x968D, 0x678D}, //4067 #CJK UNIFIED IDEOGRAPH + {0x968E, 0x678E}, //4068 #CJK UNIFIED IDEOGRAPH + {0x968F, 0x678F}, //4069 #CJK UNIFIED IDEOGRAPH + {0x9690, 0x6791}, //4070 #CJK UNIFIED IDEOGRAPH + {0x9691, 0x6792}, //4071 #CJK UNIFIED IDEOGRAPH + {0x9692, 0x6793}, //4072 #CJK UNIFIED IDEOGRAPH + {0x9693, 0x6794}, //4073 #CJK UNIFIED IDEOGRAPH + {0x9694, 0x6796}, //4074 #CJK UNIFIED IDEOGRAPH + {0x9695, 0x6799}, //4075 #CJK UNIFIED IDEOGRAPH + {0x9696, 0x679B}, //4076 #CJK UNIFIED IDEOGRAPH + {0x9697, 0x679F}, //4077 #CJK UNIFIED IDEOGRAPH + {0x9698, 0x67A0}, //4078 #CJK UNIFIED IDEOGRAPH + {0x9699, 0x67A1}, //4079 #CJK UNIFIED IDEOGRAPH + {0x969A, 0x67A4}, //4080 #CJK UNIFIED IDEOGRAPH + {0x969B, 0x67A6}, //4081 #CJK UNIFIED IDEOGRAPH + {0x969C, 0x67A9}, //4082 #CJK UNIFIED IDEOGRAPH + {0x969D, 0x67AC}, //4083 #CJK UNIFIED IDEOGRAPH + {0x969E, 0x67AE}, //4084 #CJK UNIFIED IDEOGRAPH + {0x969F, 0x67B1}, //4085 #CJK UNIFIED IDEOGRAPH + {0x96A0, 0x67B2}, //4086 #CJK UNIFIED IDEOGRAPH + {0x96A1, 0x67B4}, //4087 #CJK UNIFIED IDEOGRAPH + {0x96A2, 0x67B9}, //4088 #CJK UNIFIED IDEOGRAPH + {0x96A3, 0x67BA}, //4089 #CJK UNIFIED IDEOGRAPH + {0x96A4, 0x67BB}, //4090 #CJK UNIFIED IDEOGRAPH + {0x96A5, 0x67BC}, //4091 #CJK UNIFIED IDEOGRAPH + {0x96A6, 0x67BD}, //4092 #CJK UNIFIED IDEOGRAPH + {0x96A7, 0x67BE}, //4093 #CJK UNIFIED IDEOGRAPH + {0x96A8, 0x67BF}, //4094 #CJK UNIFIED IDEOGRAPH + {0x96A9, 0x67C0}, //4095 #CJK UNIFIED IDEOGRAPH + {0x96AA, 0x67C2}, //4096 #CJK UNIFIED IDEOGRAPH + {0x96AB, 0x67C5}, //4097 #CJK UNIFIED IDEOGRAPH + {0x96AC, 0x67C6}, //4098 #CJK UNIFIED IDEOGRAPH + {0x96AD, 0x67C7}, //4099 #CJK UNIFIED IDEOGRAPH + {0x96AE, 0x67C8}, //4100 #CJK UNIFIED IDEOGRAPH + {0x96AF, 0x67C9}, //4101 #CJK UNIFIED IDEOGRAPH + {0x96B0, 0x67CA}, //4102 #CJK UNIFIED IDEOGRAPH + {0x96B1, 0x67CB}, //4103 #CJK UNIFIED IDEOGRAPH + {0x96B2, 0x67CC}, //4104 #CJK UNIFIED IDEOGRAPH + {0x96B3, 0x67CD}, //4105 #CJK UNIFIED IDEOGRAPH + {0x96B4, 0x67CE}, //4106 #CJK UNIFIED IDEOGRAPH + {0x96B5, 0x67D5}, //4107 #CJK UNIFIED IDEOGRAPH + {0x96B6, 0x67D6}, //4108 #CJK UNIFIED IDEOGRAPH + {0x96B7, 0x67D7}, //4109 #CJK UNIFIED IDEOGRAPH + {0x96B8, 0x67DB}, //4110 #CJK UNIFIED IDEOGRAPH + {0x96B9, 0x67DF}, //4111 #CJK UNIFIED IDEOGRAPH + {0x96BA, 0x67E1}, //4112 #CJK UNIFIED IDEOGRAPH + {0x96BB, 0x67E3}, //4113 #CJK UNIFIED IDEOGRAPH + {0x96BC, 0x67E4}, //4114 #CJK UNIFIED IDEOGRAPH + {0x96BD, 0x67E6}, //4115 #CJK UNIFIED IDEOGRAPH + {0x96BE, 0x67E7}, //4116 #CJK UNIFIED IDEOGRAPH + {0x96BF, 0x67E8}, //4117 #CJK UNIFIED IDEOGRAPH + {0x96C0, 0x67EA}, //4118 #CJK UNIFIED IDEOGRAPH + {0x96C1, 0x67EB}, //4119 #CJK UNIFIED IDEOGRAPH + {0x96C2, 0x67ED}, //4120 #CJK UNIFIED IDEOGRAPH + {0x96C3, 0x67EE}, //4121 #CJK UNIFIED IDEOGRAPH + {0x96C4, 0x67F2}, //4122 #CJK UNIFIED IDEOGRAPH + {0x96C5, 0x67F5}, //4123 #CJK UNIFIED IDEOGRAPH + {0x96C6, 0x67F6}, //4124 #CJK UNIFIED IDEOGRAPH + {0x96C7, 0x67F7}, //4125 #CJK UNIFIED IDEOGRAPH + {0x96C8, 0x67F8}, //4126 #CJK UNIFIED IDEOGRAPH + {0x96C9, 0x67F9}, //4127 #CJK UNIFIED IDEOGRAPH + {0x96CA, 0x67FA}, //4128 #CJK UNIFIED IDEOGRAPH + {0x96CB, 0x67FB}, //4129 #CJK UNIFIED IDEOGRAPH + {0x96CC, 0x67FC}, //4130 #CJK UNIFIED IDEOGRAPH + {0x96CD, 0x67FE}, //4131 #CJK UNIFIED IDEOGRAPH + {0x96CE, 0x6801}, //4132 #CJK UNIFIED IDEOGRAPH + {0x96CF, 0x6802}, //4133 #CJK UNIFIED IDEOGRAPH + {0x96D0, 0x6803}, //4134 #CJK UNIFIED IDEOGRAPH + {0x96D1, 0x6804}, //4135 #CJK UNIFIED IDEOGRAPH + {0x96D2, 0x6806}, //4136 #CJK UNIFIED IDEOGRAPH + {0x96D3, 0x680D}, //4137 #CJK UNIFIED IDEOGRAPH + {0x96D4, 0x6810}, //4138 #CJK UNIFIED IDEOGRAPH + {0x96D5, 0x6812}, //4139 #CJK UNIFIED IDEOGRAPH + {0x96D6, 0x6814}, //4140 #CJK UNIFIED IDEOGRAPH + {0x96D7, 0x6815}, //4141 #CJK UNIFIED IDEOGRAPH + {0x96D8, 0x6818}, //4142 #CJK UNIFIED IDEOGRAPH + {0x96D9, 0x6819}, //4143 #CJK UNIFIED IDEOGRAPH + {0x96DA, 0x681A}, //4144 #CJK UNIFIED IDEOGRAPH + {0x96DB, 0x681B}, //4145 #CJK UNIFIED IDEOGRAPH + {0x96DC, 0x681C}, //4146 #CJK UNIFIED IDEOGRAPH + {0x96DD, 0x681E}, //4147 #CJK UNIFIED IDEOGRAPH + {0x96DE, 0x681F}, //4148 #CJK UNIFIED IDEOGRAPH + {0x96DF, 0x6820}, //4149 #CJK UNIFIED IDEOGRAPH + {0x96E0, 0x6822}, //4150 #CJK UNIFIED IDEOGRAPH + {0x96E1, 0x6823}, //4151 #CJK UNIFIED IDEOGRAPH + {0x96E2, 0x6824}, //4152 #CJK UNIFIED IDEOGRAPH + {0x96E3, 0x6825}, //4153 #CJK UNIFIED IDEOGRAPH + {0x96E4, 0x6826}, //4154 #CJK UNIFIED IDEOGRAPH + {0x96E5, 0x6827}, //4155 #CJK UNIFIED IDEOGRAPH + {0x96E6, 0x6828}, //4156 #CJK UNIFIED IDEOGRAPH + {0x96E7, 0x682B}, //4157 #CJK UNIFIED IDEOGRAPH + {0x96E8, 0x682C}, //4158 #CJK UNIFIED IDEOGRAPH + {0x96E9, 0x682D}, //4159 #CJK UNIFIED IDEOGRAPH + {0x96EA, 0x682E}, //4160 #CJK UNIFIED IDEOGRAPH + {0x96EB, 0x682F}, //4161 #CJK UNIFIED IDEOGRAPH + {0x96EC, 0x6830}, //4162 #CJK UNIFIED IDEOGRAPH + {0x96ED, 0x6831}, //4163 #CJK UNIFIED IDEOGRAPH + {0x96EE, 0x6834}, //4164 #CJK UNIFIED IDEOGRAPH + {0x96EF, 0x6835}, //4165 #CJK UNIFIED IDEOGRAPH + {0x96F0, 0x6836}, //4166 #CJK UNIFIED IDEOGRAPH + {0x96F1, 0x683A}, //4167 #CJK UNIFIED IDEOGRAPH + {0x96F2, 0x683B}, //4168 #CJK UNIFIED IDEOGRAPH + {0x96F3, 0x683F}, //4169 #CJK UNIFIED IDEOGRAPH + {0x96F4, 0x6847}, //4170 #CJK UNIFIED IDEOGRAPH + {0x96F5, 0x684B}, //4171 #CJK UNIFIED IDEOGRAPH + {0x96F6, 0x684D}, //4172 #CJK UNIFIED IDEOGRAPH + {0x96F7, 0x684F}, //4173 #CJK UNIFIED IDEOGRAPH + {0x96F8, 0x6852}, //4174 #CJK UNIFIED IDEOGRAPH + {0x96F9, 0x6856}, //4175 #CJK UNIFIED IDEOGRAPH + {0x96FA, 0x6857}, //4176 #CJK UNIFIED IDEOGRAPH + {0x96FB, 0x6858}, //4177 #CJK UNIFIED IDEOGRAPH + {0x96FC, 0x6859}, //4178 #CJK UNIFIED IDEOGRAPH + {0x96FD, 0x685A}, //4179 #CJK UNIFIED IDEOGRAPH + {0x96FE, 0x685B}, //4180 #CJK UNIFIED IDEOGRAPH + {0x9740, 0x685C}, //4181 #CJK UNIFIED IDEOGRAPH + {0x9741, 0x685D}, //4182 #CJK UNIFIED IDEOGRAPH + {0x9742, 0x685E}, //4183 #CJK UNIFIED IDEOGRAPH + {0x9743, 0x685F}, //4184 #CJK UNIFIED IDEOGRAPH + {0x9744, 0x686A}, //4185 #CJK UNIFIED IDEOGRAPH + {0x9745, 0x686C}, //4186 #CJK UNIFIED IDEOGRAPH + {0x9746, 0x686D}, //4187 #CJK UNIFIED IDEOGRAPH + {0x9747, 0x686E}, //4188 #CJK UNIFIED IDEOGRAPH + {0x9748, 0x686F}, //4189 #CJK UNIFIED IDEOGRAPH + {0x9749, 0x6870}, //4190 #CJK UNIFIED IDEOGRAPH + {0x974A, 0x6871}, //4191 #CJK UNIFIED IDEOGRAPH + {0x974B, 0x6872}, //4192 #CJK UNIFIED IDEOGRAPH + {0x974C, 0x6873}, //4193 #CJK UNIFIED IDEOGRAPH + {0x974D, 0x6875}, //4194 #CJK UNIFIED IDEOGRAPH + {0x974E, 0x6878}, //4195 #CJK UNIFIED IDEOGRAPH + {0x974F, 0x6879}, //4196 #CJK UNIFIED IDEOGRAPH + {0x9750, 0x687A}, //4197 #CJK UNIFIED IDEOGRAPH + {0x9751, 0x687B}, //4198 #CJK UNIFIED IDEOGRAPH + {0x9752, 0x687C}, //4199 #CJK UNIFIED IDEOGRAPH + {0x9753, 0x687D}, //4200 #CJK UNIFIED IDEOGRAPH + {0x9754, 0x687E}, //4201 #CJK UNIFIED IDEOGRAPH + {0x9755, 0x687F}, //4202 #CJK UNIFIED IDEOGRAPH + {0x9756, 0x6880}, //4203 #CJK UNIFIED IDEOGRAPH + {0x9757, 0x6882}, //4204 #CJK UNIFIED IDEOGRAPH + {0x9758, 0x6884}, //4205 #CJK UNIFIED IDEOGRAPH + {0x9759, 0x6887}, //4206 #CJK UNIFIED IDEOGRAPH + {0x975A, 0x6888}, //4207 #CJK UNIFIED IDEOGRAPH + {0x975B, 0x6889}, //4208 #CJK UNIFIED IDEOGRAPH + {0x975C, 0x688A}, //4209 #CJK UNIFIED IDEOGRAPH + {0x975D, 0x688B}, //4210 #CJK UNIFIED IDEOGRAPH + {0x975E, 0x688C}, //4211 #CJK UNIFIED IDEOGRAPH + {0x975F, 0x688D}, //4212 #CJK UNIFIED IDEOGRAPH + {0x9760, 0x688E}, //4213 #CJK UNIFIED IDEOGRAPH + {0x9761, 0x6890}, //4214 #CJK UNIFIED IDEOGRAPH + {0x9762, 0x6891}, //4215 #CJK UNIFIED IDEOGRAPH + {0x9763, 0x6892}, //4216 #CJK UNIFIED IDEOGRAPH + {0x9764, 0x6894}, //4217 #CJK UNIFIED IDEOGRAPH + {0x9765, 0x6895}, //4218 #CJK UNIFIED IDEOGRAPH + {0x9766, 0x6896}, //4219 #CJK UNIFIED IDEOGRAPH + {0x9767, 0x6898}, //4220 #CJK UNIFIED IDEOGRAPH + {0x9768, 0x6899}, //4221 #CJK UNIFIED IDEOGRAPH + {0x9769, 0x689A}, //4222 #CJK UNIFIED IDEOGRAPH + {0x976A, 0x689B}, //4223 #CJK UNIFIED IDEOGRAPH + {0x976B, 0x689C}, //4224 #CJK UNIFIED IDEOGRAPH + {0x976C, 0x689D}, //4225 #CJK UNIFIED IDEOGRAPH + {0x976D, 0x689E}, //4226 #CJK UNIFIED IDEOGRAPH + {0x976E, 0x689F}, //4227 #CJK UNIFIED IDEOGRAPH + {0x976F, 0x68A0}, //4228 #CJK UNIFIED IDEOGRAPH + {0x9770, 0x68A1}, //4229 #CJK UNIFIED IDEOGRAPH + {0x9771, 0x68A3}, //4230 #CJK UNIFIED IDEOGRAPH + {0x9772, 0x68A4}, //4231 #CJK UNIFIED IDEOGRAPH + {0x9773, 0x68A5}, //4232 #CJK UNIFIED IDEOGRAPH + {0x9774, 0x68A9}, //4233 #CJK UNIFIED IDEOGRAPH + {0x9775, 0x68AA}, //4234 #CJK UNIFIED IDEOGRAPH + {0x9776, 0x68AB}, //4235 #CJK UNIFIED IDEOGRAPH + {0x9777, 0x68AC}, //4236 #CJK UNIFIED IDEOGRAPH + {0x9778, 0x68AE}, //4237 #CJK UNIFIED IDEOGRAPH + {0x9779, 0x68B1}, //4238 #CJK UNIFIED IDEOGRAPH + {0x977A, 0x68B2}, //4239 #CJK UNIFIED IDEOGRAPH + {0x977B, 0x68B4}, //4240 #CJK UNIFIED IDEOGRAPH + {0x977C, 0x68B6}, //4241 #CJK UNIFIED IDEOGRAPH + {0x977D, 0x68B7}, //4242 #CJK UNIFIED IDEOGRAPH + {0x977E, 0x68B8}, //4243 #CJK UNIFIED IDEOGRAPH + {0x9780, 0x68B9}, //4244 #CJK UNIFIED IDEOGRAPH + {0x9781, 0x68BA}, //4245 #CJK UNIFIED IDEOGRAPH + {0x9782, 0x68BB}, //4246 #CJK UNIFIED IDEOGRAPH + {0x9783, 0x68BC}, //4247 #CJK UNIFIED IDEOGRAPH + {0x9784, 0x68BD}, //4248 #CJK UNIFIED IDEOGRAPH + {0x9785, 0x68BE}, //4249 #CJK UNIFIED IDEOGRAPH + {0x9786, 0x68BF}, //4250 #CJK UNIFIED IDEOGRAPH + {0x9787, 0x68C1}, //4251 #CJK UNIFIED IDEOGRAPH + {0x9788, 0x68C3}, //4252 #CJK UNIFIED IDEOGRAPH + {0x9789, 0x68C4}, //4253 #CJK UNIFIED IDEOGRAPH + {0x978A, 0x68C5}, //4254 #CJK UNIFIED IDEOGRAPH + {0x978B, 0x68C6}, //4255 #CJK UNIFIED IDEOGRAPH + {0x978C, 0x68C7}, //4256 #CJK UNIFIED IDEOGRAPH + {0x978D, 0x68C8}, //4257 #CJK UNIFIED IDEOGRAPH + {0x978E, 0x68CA}, //4258 #CJK UNIFIED IDEOGRAPH + {0x978F, 0x68CC}, //4259 #CJK UNIFIED IDEOGRAPH + {0x9790, 0x68CE}, //4260 #CJK UNIFIED IDEOGRAPH + {0x9791, 0x68CF}, //4261 #CJK UNIFIED IDEOGRAPH + {0x9792, 0x68D0}, //4262 #CJK UNIFIED IDEOGRAPH + {0x9793, 0x68D1}, //4263 #CJK UNIFIED IDEOGRAPH + {0x9794, 0x68D3}, //4264 #CJK UNIFIED IDEOGRAPH + {0x9795, 0x68D4}, //4265 #CJK UNIFIED IDEOGRAPH + {0x9796, 0x68D6}, //4266 #CJK UNIFIED IDEOGRAPH + {0x9797, 0x68D7}, //4267 #CJK UNIFIED IDEOGRAPH + {0x9798, 0x68D9}, //4268 #CJK UNIFIED IDEOGRAPH + {0x9799, 0x68DB}, //4269 #CJK UNIFIED IDEOGRAPH + {0x979A, 0x68DC}, //4270 #CJK UNIFIED IDEOGRAPH + {0x979B, 0x68DD}, //4271 #CJK UNIFIED IDEOGRAPH + {0x979C, 0x68DE}, //4272 #CJK UNIFIED IDEOGRAPH + {0x979D, 0x68DF}, //4273 #CJK UNIFIED IDEOGRAPH + {0x979E, 0x68E1}, //4274 #CJK UNIFIED IDEOGRAPH + {0x979F, 0x68E2}, //4275 #CJK UNIFIED IDEOGRAPH + {0x97A0, 0x68E4}, //4276 #CJK UNIFIED IDEOGRAPH + {0x97A1, 0x68E5}, //4277 #CJK UNIFIED IDEOGRAPH + {0x97A2, 0x68E6}, //4278 #CJK UNIFIED IDEOGRAPH + {0x97A3, 0x68E7}, //4279 #CJK UNIFIED IDEOGRAPH + {0x97A4, 0x68E8}, //4280 #CJK UNIFIED IDEOGRAPH + {0x97A5, 0x68E9}, //4281 #CJK UNIFIED IDEOGRAPH + {0x97A6, 0x68EA}, //4282 #CJK UNIFIED IDEOGRAPH + {0x97A7, 0x68EB}, //4283 #CJK UNIFIED IDEOGRAPH + {0x97A8, 0x68EC}, //4284 #CJK UNIFIED IDEOGRAPH + {0x97A9, 0x68ED}, //4285 #CJK UNIFIED IDEOGRAPH + {0x97AA, 0x68EF}, //4286 #CJK UNIFIED IDEOGRAPH + {0x97AB, 0x68F2}, //4287 #CJK UNIFIED IDEOGRAPH + {0x97AC, 0x68F3}, //4288 #CJK UNIFIED IDEOGRAPH + {0x97AD, 0x68F4}, //4289 #CJK UNIFIED IDEOGRAPH + {0x97AE, 0x68F6}, //4290 #CJK UNIFIED IDEOGRAPH + {0x97AF, 0x68F7}, //4291 #CJK UNIFIED IDEOGRAPH + {0x97B0, 0x68F8}, //4292 #CJK UNIFIED IDEOGRAPH + {0x97B1, 0x68FB}, //4293 #CJK UNIFIED IDEOGRAPH + {0x97B2, 0x68FD}, //4294 #CJK UNIFIED IDEOGRAPH + {0x97B3, 0x68FE}, //4295 #CJK UNIFIED IDEOGRAPH + {0x97B4, 0x68FF}, //4296 #CJK UNIFIED IDEOGRAPH + {0x97B5, 0x6900}, //4297 #CJK UNIFIED IDEOGRAPH + {0x97B6, 0x6902}, //4298 #CJK UNIFIED IDEOGRAPH + {0x97B7, 0x6903}, //4299 #CJK UNIFIED IDEOGRAPH + {0x97B8, 0x6904}, //4300 #CJK UNIFIED IDEOGRAPH + {0x97B9, 0x6906}, //4301 #CJK UNIFIED IDEOGRAPH + {0x97BA, 0x6907}, //4302 #CJK UNIFIED IDEOGRAPH + {0x97BB, 0x6908}, //4303 #CJK UNIFIED IDEOGRAPH + {0x97BC, 0x6909}, //4304 #CJK UNIFIED IDEOGRAPH + {0x97BD, 0x690A}, //4305 #CJK UNIFIED IDEOGRAPH + {0x97BE, 0x690C}, //4306 #CJK UNIFIED IDEOGRAPH + {0x97BF, 0x690F}, //4307 #CJK UNIFIED IDEOGRAPH + {0x97C0, 0x6911}, //4308 #CJK UNIFIED IDEOGRAPH + {0x97C1, 0x6913}, //4309 #CJK UNIFIED IDEOGRAPH + {0x97C2, 0x6914}, //4310 #CJK UNIFIED IDEOGRAPH + {0x97C3, 0x6915}, //4311 #CJK UNIFIED IDEOGRAPH + {0x97C4, 0x6916}, //4312 #CJK UNIFIED IDEOGRAPH + {0x97C5, 0x6917}, //4313 #CJK UNIFIED IDEOGRAPH + {0x97C6, 0x6918}, //4314 #CJK UNIFIED IDEOGRAPH + {0x97C7, 0x6919}, //4315 #CJK UNIFIED IDEOGRAPH + {0x97C8, 0x691A}, //4316 #CJK UNIFIED IDEOGRAPH + {0x97C9, 0x691B}, //4317 #CJK UNIFIED IDEOGRAPH + {0x97CA, 0x691C}, //4318 #CJK UNIFIED IDEOGRAPH + {0x97CB, 0x691D}, //4319 #CJK UNIFIED IDEOGRAPH + {0x97CC, 0x691E}, //4320 #CJK UNIFIED IDEOGRAPH + {0x97CD, 0x6921}, //4321 #CJK UNIFIED IDEOGRAPH + {0x97CE, 0x6922}, //4322 #CJK UNIFIED IDEOGRAPH + {0x97CF, 0x6923}, //4323 #CJK UNIFIED IDEOGRAPH + {0x97D0, 0x6925}, //4324 #CJK UNIFIED IDEOGRAPH + {0x97D1, 0x6926}, //4325 #CJK UNIFIED IDEOGRAPH + {0x97D2, 0x6927}, //4326 #CJK UNIFIED IDEOGRAPH + {0x97D3, 0x6928}, //4327 #CJK UNIFIED IDEOGRAPH + {0x97D4, 0x6929}, //4328 #CJK UNIFIED IDEOGRAPH + {0x97D5, 0x692A}, //4329 #CJK UNIFIED IDEOGRAPH + {0x97D6, 0x692B}, //4330 #CJK UNIFIED IDEOGRAPH + {0x97D7, 0x692C}, //4331 #CJK UNIFIED IDEOGRAPH + {0x97D8, 0x692E}, //4332 #CJK UNIFIED IDEOGRAPH + {0x97D9, 0x692F}, //4333 #CJK UNIFIED IDEOGRAPH + {0x97DA, 0x6931}, //4334 #CJK UNIFIED IDEOGRAPH + {0x97DB, 0x6932}, //4335 #CJK UNIFIED IDEOGRAPH + {0x97DC, 0x6933}, //4336 #CJK UNIFIED IDEOGRAPH + {0x97DD, 0x6935}, //4337 #CJK UNIFIED IDEOGRAPH + {0x97DE, 0x6936}, //4338 #CJK UNIFIED IDEOGRAPH + {0x97DF, 0x6937}, //4339 #CJK UNIFIED IDEOGRAPH + {0x97E0, 0x6938}, //4340 #CJK UNIFIED IDEOGRAPH + {0x97E1, 0x693A}, //4341 #CJK UNIFIED IDEOGRAPH + {0x97E2, 0x693B}, //4342 #CJK UNIFIED IDEOGRAPH + {0x97E3, 0x693C}, //4343 #CJK UNIFIED IDEOGRAPH + {0x97E4, 0x693E}, //4344 #CJK UNIFIED IDEOGRAPH + {0x97E5, 0x6940}, //4345 #CJK UNIFIED IDEOGRAPH + {0x97E6, 0x6941}, //4346 #CJK UNIFIED IDEOGRAPH + {0x97E7, 0x6943}, //4347 #CJK UNIFIED IDEOGRAPH + {0x97E8, 0x6944}, //4348 #CJK UNIFIED IDEOGRAPH + {0x97E9, 0x6945}, //4349 #CJK UNIFIED IDEOGRAPH + {0x97EA, 0x6946}, //4350 #CJK UNIFIED IDEOGRAPH + {0x97EB, 0x6947}, //4351 #CJK UNIFIED IDEOGRAPH + {0x97EC, 0x6948}, //4352 #CJK UNIFIED IDEOGRAPH + {0x97ED, 0x6949}, //4353 #CJK UNIFIED IDEOGRAPH + {0x97EE, 0x694A}, //4354 #CJK UNIFIED IDEOGRAPH + {0x97EF, 0x694B}, //4355 #CJK UNIFIED IDEOGRAPH + {0x97F0, 0x694C}, //4356 #CJK UNIFIED IDEOGRAPH + {0x97F1, 0x694D}, //4357 #CJK UNIFIED IDEOGRAPH + {0x97F2, 0x694E}, //4358 #CJK UNIFIED IDEOGRAPH + {0x97F3, 0x694F}, //4359 #CJK UNIFIED IDEOGRAPH + {0x97F4, 0x6950}, //4360 #CJK UNIFIED IDEOGRAPH + {0x97F5, 0x6951}, //4361 #CJK UNIFIED IDEOGRAPH + {0x97F6, 0x6952}, //4362 #CJK UNIFIED IDEOGRAPH + {0x97F7, 0x6953}, //4363 #CJK UNIFIED IDEOGRAPH + {0x97F8, 0x6955}, //4364 #CJK UNIFIED IDEOGRAPH + {0x97F9, 0x6956}, //4365 #CJK UNIFIED IDEOGRAPH + {0x97FA, 0x6958}, //4366 #CJK UNIFIED IDEOGRAPH + {0x97FB, 0x6959}, //4367 #CJK UNIFIED IDEOGRAPH + {0x97FC, 0x695B}, //4368 #CJK UNIFIED IDEOGRAPH + {0x97FD, 0x695C}, //4369 #CJK UNIFIED IDEOGRAPH + {0x97FE, 0x695F}, //4370 #CJK UNIFIED IDEOGRAPH + {0x9840, 0x6961}, //4371 #CJK UNIFIED IDEOGRAPH + {0x9841, 0x6962}, //4372 #CJK UNIFIED IDEOGRAPH + {0x9842, 0x6964}, //4373 #CJK UNIFIED IDEOGRAPH + {0x9843, 0x6965}, //4374 #CJK UNIFIED IDEOGRAPH + {0x9844, 0x6967}, //4375 #CJK UNIFIED IDEOGRAPH + {0x9845, 0x6968}, //4376 #CJK UNIFIED IDEOGRAPH + {0x9846, 0x6969}, //4377 #CJK UNIFIED IDEOGRAPH + {0x9847, 0x696A}, //4378 #CJK UNIFIED IDEOGRAPH + {0x9848, 0x696C}, //4379 #CJK UNIFIED IDEOGRAPH + {0x9849, 0x696D}, //4380 #CJK UNIFIED IDEOGRAPH + {0x984A, 0x696F}, //4381 #CJK UNIFIED IDEOGRAPH + {0x984B, 0x6970}, //4382 #CJK UNIFIED IDEOGRAPH + {0x984C, 0x6972}, //4383 #CJK UNIFIED IDEOGRAPH + {0x984D, 0x6973}, //4384 #CJK UNIFIED IDEOGRAPH + {0x984E, 0x6974}, //4385 #CJK UNIFIED IDEOGRAPH + {0x984F, 0x6975}, //4386 #CJK UNIFIED IDEOGRAPH + {0x9850, 0x6976}, //4387 #CJK UNIFIED IDEOGRAPH + {0x9851, 0x697A}, //4388 #CJK UNIFIED IDEOGRAPH + {0x9852, 0x697B}, //4389 #CJK UNIFIED IDEOGRAPH + {0x9853, 0x697D}, //4390 #CJK UNIFIED IDEOGRAPH + {0x9854, 0x697E}, //4391 #CJK UNIFIED IDEOGRAPH + {0x9855, 0x697F}, //4392 #CJK UNIFIED IDEOGRAPH + {0x9856, 0x6981}, //4393 #CJK UNIFIED IDEOGRAPH + {0x9857, 0x6983}, //4394 #CJK UNIFIED IDEOGRAPH + {0x9858, 0x6985}, //4395 #CJK UNIFIED IDEOGRAPH + {0x9859, 0x698A}, //4396 #CJK UNIFIED IDEOGRAPH + {0x985A, 0x698B}, //4397 #CJK UNIFIED IDEOGRAPH + {0x985B, 0x698C}, //4398 #CJK UNIFIED IDEOGRAPH + {0x985C, 0x698E}, //4399 #CJK UNIFIED IDEOGRAPH + {0x985D, 0x698F}, //4400 #CJK UNIFIED IDEOGRAPH + {0x985E, 0x6990}, //4401 #CJK UNIFIED IDEOGRAPH + {0x985F, 0x6991}, //4402 #CJK UNIFIED IDEOGRAPH + {0x9860, 0x6992}, //4403 #CJK UNIFIED IDEOGRAPH + {0x9861, 0x6993}, //4404 #CJK UNIFIED IDEOGRAPH + {0x9862, 0x6996}, //4405 #CJK UNIFIED IDEOGRAPH + {0x9863, 0x6997}, //4406 #CJK UNIFIED IDEOGRAPH + {0x9864, 0x6999}, //4407 #CJK UNIFIED IDEOGRAPH + {0x9865, 0x699A}, //4408 #CJK UNIFIED IDEOGRAPH + {0x9866, 0x699D}, //4409 #CJK UNIFIED IDEOGRAPH + {0x9867, 0x699E}, //4410 #CJK UNIFIED IDEOGRAPH + {0x9868, 0x699F}, //4411 #CJK UNIFIED IDEOGRAPH + {0x9869, 0x69A0}, //4412 #CJK UNIFIED IDEOGRAPH + {0x986A, 0x69A1}, //4413 #CJK UNIFIED IDEOGRAPH + {0x986B, 0x69A2}, //4414 #CJK UNIFIED IDEOGRAPH + {0x986C, 0x69A3}, //4415 #CJK UNIFIED IDEOGRAPH + {0x986D, 0x69A4}, //4416 #CJK UNIFIED IDEOGRAPH + {0x986E, 0x69A5}, //4417 #CJK UNIFIED IDEOGRAPH + {0x986F, 0x69A6}, //4418 #CJK UNIFIED IDEOGRAPH + {0x9870, 0x69A9}, //4419 #CJK UNIFIED IDEOGRAPH + {0x9871, 0x69AA}, //4420 #CJK UNIFIED IDEOGRAPH + {0x9872, 0x69AC}, //4421 #CJK UNIFIED IDEOGRAPH + {0x9873, 0x69AE}, //4422 #CJK UNIFIED IDEOGRAPH + {0x9874, 0x69AF}, //4423 #CJK UNIFIED IDEOGRAPH + {0x9875, 0x69B0}, //4424 #CJK UNIFIED IDEOGRAPH + {0x9876, 0x69B2}, //4425 #CJK UNIFIED IDEOGRAPH + {0x9877, 0x69B3}, //4426 #CJK UNIFIED IDEOGRAPH + {0x9878, 0x69B5}, //4427 #CJK UNIFIED IDEOGRAPH + {0x9879, 0x69B6}, //4428 #CJK UNIFIED IDEOGRAPH + {0x987A, 0x69B8}, //4429 #CJK UNIFIED IDEOGRAPH + {0x987B, 0x69B9}, //4430 #CJK UNIFIED IDEOGRAPH + {0x987C, 0x69BA}, //4431 #CJK UNIFIED IDEOGRAPH + {0x987D, 0x69BC}, //4432 #CJK UNIFIED IDEOGRAPH + {0x987E, 0x69BD}, //4433 #CJK UNIFIED IDEOGRAPH + {0x9880, 0x69BE}, //4434 #CJK UNIFIED IDEOGRAPH + {0x9881, 0x69BF}, //4435 #CJK UNIFIED IDEOGRAPH + {0x9882, 0x69C0}, //4436 #CJK UNIFIED IDEOGRAPH + {0x9883, 0x69C2}, //4437 #CJK UNIFIED IDEOGRAPH + {0x9884, 0x69C3}, //4438 #CJK UNIFIED IDEOGRAPH + {0x9885, 0x69C4}, //4439 #CJK UNIFIED IDEOGRAPH + {0x9886, 0x69C5}, //4440 #CJK UNIFIED IDEOGRAPH + {0x9887, 0x69C6}, //4441 #CJK UNIFIED IDEOGRAPH + {0x9888, 0x69C7}, //4442 #CJK UNIFIED IDEOGRAPH + {0x9889, 0x69C8}, //4443 #CJK UNIFIED IDEOGRAPH + {0x988A, 0x69C9}, //4444 #CJK UNIFIED IDEOGRAPH + {0x988B, 0x69CB}, //4445 #CJK UNIFIED IDEOGRAPH + {0x988C, 0x69CD}, //4446 #CJK UNIFIED IDEOGRAPH + {0x988D, 0x69CF}, //4447 #CJK UNIFIED IDEOGRAPH + {0x988E, 0x69D1}, //4448 #CJK UNIFIED IDEOGRAPH + {0x988F, 0x69D2}, //4449 #CJK UNIFIED IDEOGRAPH + {0x9890, 0x69D3}, //4450 #CJK UNIFIED IDEOGRAPH + {0x9891, 0x69D5}, //4451 #CJK UNIFIED IDEOGRAPH + {0x9892, 0x69D6}, //4452 #CJK UNIFIED IDEOGRAPH + {0x9893, 0x69D7}, //4453 #CJK UNIFIED IDEOGRAPH + {0x9894, 0x69D8}, //4454 #CJK UNIFIED IDEOGRAPH + {0x9895, 0x69D9}, //4455 #CJK UNIFIED IDEOGRAPH + {0x9896, 0x69DA}, //4456 #CJK UNIFIED IDEOGRAPH + {0x9897, 0x69DC}, //4457 #CJK UNIFIED IDEOGRAPH + {0x9898, 0x69DD}, //4458 #CJK UNIFIED IDEOGRAPH + {0x9899, 0x69DE}, //4459 #CJK UNIFIED IDEOGRAPH + {0x989A, 0x69E1}, //4460 #CJK UNIFIED IDEOGRAPH + {0x989B, 0x69E2}, //4461 #CJK UNIFIED IDEOGRAPH + {0x989C, 0x69E3}, //4462 #CJK UNIFIED IDEOGRAPH + {0x989D, 0x69E4}, //4463 #CJK UNIFIED IDEOGRAPH + {0x989E, 0x69E5}, //4464 #CJK UNIFIED IDEOGRAPH + {0x989F, 0x69E6}, //4465 #CJK UNIFIED IDEOGRAPH + {0x98A0, 0x69E7}, //4466 #CJK UNIFIED IDEOGRAPH + {0x98A1, 0x69E8}, //4467 #CJK UNIFIED IDEOGRAPH + {0x98A2, 0x69E9}, //4468 #CJK UNIFIED IDEOGRAPH + {0x98A3, 0x69EA}, //4469 #CJK UNIFIED IDEOGRAPH + {0x98A4, 0x69EB}, //4470 #CJK UNIFIED IDEOGRAPH + {0x98A5, 0x69EC}, //4471 #CJK UNIFIED IDEOGRAPH + {0x98A6, 0x69EE}, //4472 #CJK UNIFIED IDEOGRAPH + {0x98A7, 0x69EF}, //4473 #CJK UNIFIED IDEOGRAPH + {0x98A8, 0x69F0}, //4474 #CJK UNIFIED IDEOGRAPH + {0x98A9, 0x69F1}, //4475 #CJK UNIFIED IDEOGRAPH + {0x98AA, 0x69F3}, //4476 #CJK UNIFIED IDEOGRAPH + {0x98AB, 0x69F4}, //4477 #CJK UNIFIED IDEOGRAPH + {0x98AC, 0x69F5}, //4478 #CJK UNIFIED IDEOGRAPH + {0x98AD, 0x69F6}, //4479 #CJK UNIFIED IDEOGRAPH + {0x98AE, 0x69F7}, //4480 #CJK UNIFIED IDEOGRAPH + {0x98AF, 0x69F8}, //4481 #CJK UNIFIED IDEOGRAPH + {0x98B0, 0x69F9}, //4482 #CJK UNIFIED IDEOGRAPH + {0x98B1, 0x69FA}, //4483 #CJK UNIFIED IDEOGRAPH + {0x98B2, 0x69FB}, //4484 #CJK UNIFIED IDEOGRAPH + {0x98B3, 0x69FC}, //4485 #CJK UNIFIED IDEOGRAPH + {0x98B4, 0x69FE}, //4486 #CJK UNIFIED IDEOGRAPH + {0x98B5, 0x6A00}, //4487 #CJK UNIFIED IDEOGRAPH + {0x98B6, 0x6A01}, //4488 #CJK UNIFIED IDEOGRAPH + {0x98B7, 0x6A02}, //4489 #CJK UNIFIED IDEOGRAPH + {0x98B8, 0x6A03}, //4490 #CJK UNIFIED IDEOGRAPH + {0x98B9, 0x6A04}, //4491 #CJK UNIFIED IDEOGRAPH + {0x98BA, 0x6A05}, //4492 #CJK UNIFIED IDEOGRAPH + {0x98BB, 0x6A06}, //4493 #CJK UNIFIED IDEOGRAPH + {0x98BC, 0x6A07}, //4494 #CJK UNIFIED IDEOGRAPH + {0x98BD, 0x6A08}, //4495 #CJK UNIFIED IDEOGRAPH + {0x98BE, 0x6A09}, //4496 #CJK UNIFIED IDEOGRAPH + {0x98BF, 0x6A0B}, //4497 #CJK UNIFIED IDEOGRAPH + {0x98C0, 0x6A0C}, //4498 #CJK UNIFIED IDEOGRAPH + {0x98C1, 0x6A0D}, //4499 #CJK UNIFIED IDEOGRAPH + {0x98C2, 0x6A0E}, //4500 #CJK UNIFIED IDEOGRAPH + {0x98C3, 0x6A0F}, //4501 #CJK UNIFIED IDEOGRAPH + {0x98C4, 0x6A10}, //4502 #CJK UNIFIED IDEOGRAPH + {0x98C5, 0x6A11}, //4503 #CJK UNIFIED IDEOGRAPH + {0x98C6, 0x6A12}, //4504 #CJK UNIFIED IDEOGRAPH + {0x98C7, 0x6A13}, //4505 #CJK UNIFIED IDEOGRAPH + {0x98C8, 0x6A14}, //4506 #CJK UNIFIED IDEOGRAPH + {0x98C9, 0x6A15}, //4507 #CJK UNIFIED IDEOGRAPH + {0x98CA, 0x6A16}, //4508 #CJK UNIFIED IDEOGRAPH + {0x98CB, 0x6A19}, //4509 #CJK UNIFIED IDEOGRAPH + {0x98CC, 0x6A1A}, //4510 #CJK UNIFIED IDEOGRAPH + {0x98CD, 0x6A1B}, //4511 #CJK UNIFIED IDEOGRAPH + {0x98CE, 0x6A1C}, //4512 #CJK UNIFIED IDEOGRAPH + {0x98CF, 0x6A1D}, //4513 #CJK UNIFIED IDEOGRAPH + {0x98D0, 0x6A1E}, //4514 #CJK UNIFIED IDEOGRAPH + {0x98D1, 0x6A20}, //4515 #CJK UNIFIED IDEOGRAPH + {0x98D2, 0x6A22}, //4516 #CJK UNIFIED IDEOGRAPH + {0x98D3, 0x6A23}, //4517 #CJK UNIFIED IDEOGRAPH + {0x98D4, 0x6A24}, //4518 #CJK UNIFIED IDEOGRAPH + {0x98D5, 0x6A25}, //4519 #CJK UNIFIED IDEOGRAPH + {0x98D6, 0x6A26}, //4520 #CJK UNIFIED IDEOGRAPH + {0x98D7, 0x6A27}, //4521 #CJK UNIFIED IDEOGRAPH + {0x98D8, 0x6A29}, //4522 #CJK UNIFIED IDEOGRAPH + {0x98D9, 0x6A2B}, //4523 #CJK UNIFIED IDEOGRAPH + {0x98DA, 0x6A2C}, //4524 #CJK UNIFIED IDEOGRAPH + {0x98DB, 0x6A2D}, //4525 #CJK UNIFIED IDEOGRAPH + {0x98DC, 0x6A2E}, //4526 #CJK UNIFIED IDEOGRAPH + {0x98DD, 0x6A30}, //4527 #CJK UNIFIED IDEOGRAPH + {0x98DE, 0x6A32}, //4528 #CJK UNIFIED IDEOGRAPH + {0x98DF, 0x6A33}, //4529 #CJK UNIFIED IDEOGRAPH + {0x98E0, 0x6A34}, //4530 #CJK UNIFIED IDEOGRAPH + {0x98E1, 0x6A36}, //4531 #CJK UNIFIED IDEOGRAPH + {0x98E2, 0x6A37}, //4532 #CJK UNIFIED IDEOGRAPH + {0x98E3, 0x6A38}, //4533 #CJK UNIFIED IDEOGRAPH + {0x98E4, 0x6A39}, //4534 #CJK UNIFIED IDEOGRAPH + {0x98E5, 0x6A3A}, //4535 #CJK UNIFIED IDEOGRAPH + {0x98E6, 0x6A3B}, //4536 #CJK UNIFIED IDEOGRAPH + {0x98E7, 0x6A3C}, //4537 #CJK UNIFIED IDEOGRAPH + {0x98E8, 0x6A3F}, //4538 #CJK UNIFIED IDEOGRAPH + {0x98E9, 0x6A40}, //4539 #CJK UNIFIED IDEOGRAPH + {0x98EA, 0x6A41}, //4540 #CJK UNIFIED IDEOGRAPH + {0x98EB, 0x6A42}, //4541 #CJK UNIFIED IDEOGRAPH + {0x98EC, 0x6A43}, //4542 #CJK UNIFIED IDEOGRAPH + {0x98ED, 0x6A45}, //4543 #CJK UNIFIED IDEOGRAPH + {0x98EE, 0x6A46}, //4544 #CJK UNIFIED IDEOGRAPH + {0x98EF, 0x6A48}, //4545 #CJK UNIFIED IDEOGRAPH + {0x98F0, 0x6A49}, //4546 #CJK UNIFIED IDEOGRAPH + {0x98F1, 0x6A4A}, //4547 #CJK UNIFIED IDEOGRAPH + {0x98F2, 0x6A4B}, //4548 #CJK UNIFIED IDEOGRAPH + {0x98F3, 0x6A4C}, //4549 #CJK UNIFIED IDEOGRAPH + {0x98F4, 0x6A4D}, //4550 #CJK UNIFIED IDEOGRAPH + {0x98F5, 0x6A4E}, //4551 #CJK UNIFIED IDEOGRAPH + {0x98F6, 0x6A4F}, //4552 #CJK UNIFIED IDEOGRAPH + {0x98F7, 0x6A51}, //4553 #CJK UNIFIED IDEOGRAPH + {0x98F8, 0x6A52}, //4554 #CJK UNIFIED IDEOGRAPH + {0x98F9, 0x6A53}, //4555 #CJK UNIFIED IDEOGRAPH + {0x98FA, 0x6A54}, //4556 #CJK UNIFIED IDEOGRAPH + {0x98FB, 0x6A55}, //4557 #CJK UNIFIED IDEOGRAPH + {0x98FC, 0x6A56}, //4558 #CJK UNIFIED IDEOGRAPH + {0x98FD, 0x6A57}, //4559 #CJK UNIFIED IDEOGRAPH + {0x98FE, 0x6A5A}, //4560 #CJK UNIFIED IDEOGRAPH + {0x9940, 0x6A5C}, //4561 #CJK UNIFIED IDEOGRAPH + {0x9941, 0x6A5D}, //4562 #CJK UNIFIED IDEOGRAPH + {0x9942, 0x6A5E}, //4563 #CJK UNIFIED IDEOGRAPH + {0x9943, 0x6A5F}, //4564 #CJK UNIFIED IDEOGRAPH + {0x9944, 0x6A60}, //4565 #CJK UNIFIED IDEOGRAPH + {0x9945, 0x6A62}, //4566 #CJK UNIFIED IDEOGRAPH + {0x9946, 0x6A63}, //4567 #CJK UNIFIED IDEOGRAPH + {0x9947, 0x6A64}, //4568 #CJK UNIFIED IDEOGRAPH + {0x9948, 0x6A66}, //4569 #CJK UNIFIED IDEOGRAPH + {0x9949, 0x6A67}, //4570 #CJK UNIFIED IDEOGRAPH + {0x994A, 0x6A68}, //4571 #CJK UNIFIED IDEOGRAPH + {0x994B, 0x6A69}, //4572 #CJK UNIFIED IDEOGRAPH + {0x994C, 0x6A6A}, //4573 #CJK UNIFIED IDEOGRAPH + {0x994D, 0x6A6B}, //4574 #CJK UNIFIED IDEOGRAPH + {0x994E, 0x6A6C}, //4575 #CJK UNIFIED IDEOGRAPH + {0x994F, 0x6A6D}, //4576 #CJK UNIFIED IDEOGRAPH + {0x9950, 0x6A6E}, //4577 #CJK UNIFIED IDEOGRAPH + {0x9951, 0x6A6F}, //4578 #CJK UNIFIED IDEOGRAPH + {0x9952, 0x6A70}, //4579 #CJK UNIFIED IDEOGRAPH + {0x9953, 0x6A72}, //4580 #CJK UNIFIED IDEOGRAPH + {0x9954, 0x6A73}, //4581 #CJK UNIFIED IDEOGRAPH + {0x9955, 0x6A74}, //4582 #CJK UNIFIED IDEOGRAPH + {0x9956, 0x6A75}, //4583 #CJK UNIFIED IDEOGRAPH + {0x9957, 0x6A76}, //4584 #CJK UNIFIED IDEOGRAPH + {0x9958, 0x6A77}, //4585 #CJK UNIFIED IDEOGRAPH + {0x9959, 0x6A78}, //4586 #CJK UNIFIED IDEOGRAPH + {0x995A, 0x6A7A}, //4587 #CJK UNIFIED IDEOGRAPH + {0x995B, 0x6A7B}, //4588 #CJK UNIFIED IDEOGRAPH + {0x995C, 0x6A7D}, //4589 #CJK UNIFIED IDEOGRAPH + {0x995D, 0x6A7E}, //4590 #CJK UNIFIED IDEOGRAPH + {0x995E, 0x6A7F}, //4591 #CJK UNIFIED IDEOGRAPH + {0x995F, 0x6A81}, //4592 #CJK UNIFIED IDEOGRAPH + {0x9960, 0x6A82}, //4593 #CJK UNIFIED IDEOGRAPH + {0x9961, 0x6A83}, //4594 #CJK UNIFIED IDEOGRAPH + {0x9962, 0x6A85}, //4595 #CJK UNIFIED IDEOGRAPH + {0x9963, 0x6A86}, //4596 #CJK UNIFIED IDEOGRAPH + {0x9964, 0x6A87}, //4597 #CJK UNIFIED IDEOGRAPH + {0x9965, 0x6A88}, //4598 #CJK UNIFIED IDEOGRAPH + {0x9966, 0x6A89}, //4599 #CJK UNIFIED IDEOGRAPH + {0x9967, 0x6A8A}, //4600 #CJK UNIFIED IDEOGRAPH + {0x9968, 0x6A8B}, //4601 #CJK UNIFIED IDEOGRAPH + {0x9969, 0x6A8C}, //4602 #CJK UNIFIED IDEOGRAPH + {0x996A, 0x6A8D}, //4603 #CJK UNIFIED IDEOGRAPH + {0x996B, 0x6A8F}, //4604 #CJK UNIFIED IDEOGRAPH + {0x996C, 0x6A92}, //4605 #CJK UNIFIED IDEOGRAPH + {0x996D, 0x6A93}, //4606 #CJK UNIFIED IDEOGRAPH + {0x996E, 0x6A94}, //4607 #CJK UNIFIED IDEOGRAPH + {0x996F, 0x6A95}, //4608 #CJK UNIFIED IDEOGRAPH + {0x9970, 0x6A96}, //4609 #CJK UNIFIED IDEOGRAPH + {0x9971, 0x6A98}, //4610 #CJK UNIFIED IDEOGRAPH + {0x9972, 0x6A99}, //4611 #CJK UNIFIED IDEOGRAPH + {0x9973, 0x6A9A}, //4612 #CJK UNIFIED IDEOGRAPH + {0x9974, 0x6A9B}, //4613 #CJK UNIFIED IDEOGRAPH + {0x9975, 0x6A9C}, //4614 #CJK UNIFIED IDEOGRAPH + {0x9976, 0x6A9D}, //4615 #CJK UNIFIED IDEOGRAPH + {0x9977, 0x6A9E}, //4616 #CJK UNIFIED IDEOGRAPH + {0x9978, 0x6A9F}, //4617 #CJK UNIFIED IDEOGRAPH + {0x9979, 0x6AA1}, //4618 #CJK UNIFIED IDEOGRAPH + {0x997A, 0x6AA2}, //4619 #CJK UNIFIED IDEOGRAPH + {0x997B, 0x6AA3}, //4620 #CJK UNIFIED IDEOGRAPH + {0x997C, 0x6AA4}, //4621 #CJK UNIFIED IDEOGRAPH + {0x997D, 0x6AA5}, //4622 #CJK UNIFIED IDEOGRAPH + {0x997E, 0x6AA6}, //4623 #CJK UNIFIED IDEOGRAPH + {0x9980, 0x6AA7}, //4624 #CJK UNIFIED IDEOGRAPH + {0x9981, 0x6AA8}, //4625 #CJK UNIFIED IDEOGRAPH + {0x9982, 0x6AAA}, //4626 #CJK UNIFIED IDEOGRAPH + {0x9983, 0x6AAD}, //4627 #CJK UNIFIED IDEOGRAPH + {0x9984, 0x6AAE}, //4628 #CJK UNIFIED IDEOGRAPH + {0x9985, 0x6AAF}, //4629 #CJK UNIFIED IDEOGRAPH + {0x9986, 0x6AB0}, //4630 #CJK UNIFIED IDEOGRAPH + {0x9987, 0x6AB1}, //4631 #CJK UNIFIED IDEOGRAPH + {0x9988, 0x6AB2}, //4632 #CJK UNIFIED IDEOGRAPH + {0x9989, 0x6AB3}, //4633 #CJK UNIFIED IDEOGRAPH + {0x998A, 0x6AB4}, //4634 #CJK UNIFIED IDEOGRAPH + {0x998B, 0x6AB5}, //4635 #CJK UNIFIED IDEOGRAPH + {0x998C, 0x6AB6}, //4636 #CJK UNIFIED IDEOGRAPH + {0x998D, 0x6AB7}, //4637 #CJK UNIFIED IDEOGRAPH + {0x998E, 0x6AB8}, //4638 #CJK UNIFIED IDEOGRAPH + {0x998F, 0x6AB9}, //4639 #CJK UNIFIED IDEOGRAPH + {0x9990, 0x6ABA}, //4640 #CJK UNIFIED IDEOGRAPH + {0x9991, 0x6ABB}, //4641 #CJK UNIFIED IDEOGRAPH + {0x9992, 0x6ABC}, //4642 #CJK UNIFIED IDEOGRAPH + {0x9993, 0x6ABD}, //4643 #CJK UNIFIED IDEOGRAPH + {0x9994, 0x6ABE}, //4644 #CJK UNIFIED IDEOGRAPH + {0x9995, 0x6ABF}, //4645 #CJK UNIFIED IDEOGRAPH + {0x9996, 0x6AC0}, //4646 #CJK UNIFIED IDEOGRAPH + {0x9997, 0x6AC1}, //4647 #CJK UNIFIED IDEOGRAPH + {0x9998, 0x6AC2}, //4648 #CJK UNIFIED IDEOGRAPH + {0x9999, 0x6AC3}, //4649 #CJK UNIFIED IDEOGRAPH + {0x999A, 0x6AC4}, //4650 #CJK UNIFIED IDEOGRAPH + {0x999B, 0x6AC5}, //4651 #CJK UNIFIED IDEOGRAPH + {0x999C, 0x6AC6}, //4652 #CJK UNIFIED IDEOGRAPH + {0x999D, 0x6AC7}, //4653 #CJK UNIFIED IDEOGRAPH + {0x999E, 0x6AC8}, //4654 #CJK UNIFIED IDEOGRAPH + {0x999F, 0x6AC9}, //4655 #CJK UNIFIED IDEOGRAPH + {0x99A0, 0x6ACA}, //4656 #CJK UNIFIED IDEOGRAPH + {0x99A1, 0x6ACB}, //4657 #CJK UNIFIED IDEOGRAPH + {0x99A2, 0x6ACC}, //4658 #CJK UNIFIED IDEOGRAPH + {0x99A3, 0x6ACD}, //4659 #CJK UNIFIED IDEOGRAPH + {0x99A4, 0x6ACE}, //4660 #CJK UNIFIED IDEOGRAPH + {0x99A5, 0x6ACF}, //4661 #CJK UNIFIED IDEOGRAPH + {0x99A6, 0x6AD0}, //4662 #CJK UNIFIED IDEOGRAPH + {0x99A7, 0x6AD1}, //4663 #CJK UNIFIED IDEOGRAPH + {0x99A8, 0x6AD2}, //4664 #CJK UNIFIED IDEOGRAPH + {0x99A9, 0x6AD3}, //4665 #CJK UNIFIED IDEOGRAPH + {0x99AA, 0x6AD4}, //4666 #CJK UNIFIED IDEOGRAPH + {0x99AB, 0x6AD5}, //4667 #CJK UNIFIED IDEOGRAPH + {0x99AC, 0x6AD6}, //4668 #CJK UNIFIED IDEOGRAPH + {0x99AD, 0x6AD7}, //4669 #CJK UNIFIED IDEOGRAPH + {0x99AE, 0x6AD8}, //4670 #CJK UNIFIED IDEOGRAPH + {0x99AF, 0x6AD9}, //4671 #CJK UNIFIED IDEOGRAPH + {0x99B0, 0x6ADA}, //4672 #CJK UNIFIED IDEOGRAPH + {0x99B1, 0x6ADB}, //4673 #CJK UNIFIED IDEOGRAPH + {0x99B2, 0x6ADC}, //4674 #CJK UNIFIED IDEOGRAPH + {0x99B3, 0x6ADD}, //4675 #CJK UNIFIED IDEOGRAPH + {0x99B4, 0x6ADE}, //4676 #CJK UNIFIED IDEOGRAPH + {0x99B5, 0x6ADF}, //4677 #CJK UNIFIED IDEOGRAPH + {0x99B6, 0x6AE0}, //4678 #CJK UNIFIED IDEOGRAPH + {0x99B7, 0x6AE1}, //4679 #CJK UNIFIED IDEOGRAPH + {0x99B8, 0x6AE2}, //4680 #CJK UNIFIED IDEOGRAPH + {0x99B9, 0x6AE3}, //4681 #CJK UNIFIED IDEOGRAPH + {0x99BA, 0x6AE4}, //4682 #CJK UNIFIED IDEOGRAPH + {0x99BB, 0x6AE5}, //4683 #CJK UNIFIED IDEOGRAPH + {0x99BC, 0x6AE6}, //4684 #CJK UNIFIED IDEOGRAPH + {0x99BD, 0x6AE7}, //4685 #CJK UNIFIED IDEOGRAPH + {0x99BE, 0x6AE8}, //4686 #CJK UNIFIED IDEOGRAPH + {0x99BF, 0x6AE9}, //4687 #CJK UNIFIED IDEOGRAPH + {0x99C0, 0x6AEA}, //4688 #CJK UNIFIED IDEOGRAPH + {0x99C1, 0x6AEB}, //4689 #CJK UNIFIED IDEOGRAPH + {0x99C2, 0x6AEC}, //4690 #CJK UNIFIED IDEOGRAPH + {0x99C3, 0x6AED}, //4691 #CJK UNIFIED IDEOGRAPH + {0x99C4, 0x6AEE}, //4692 #CJK UNIFIED IDEOGRAPH + {0x99C5, 0x6AEF}, //4693 #CJK UNIFIED IDEOGRAPH + {0x99C6, 0x6AF0}, //4694 #CJK UNIFIED IDEOGRAPH + {0x99C7, 0x6AF1}, //4695 #CJK UNIFIED IDEOGRAPH + {0x99C8, 0x6AF2}, //4696 #CJK UNIFIED IDEOGRAPH + {0x99C9, 0x6AF3}, //4697 #CJK UNIFIED IDEOGRAPH + {0x99CA, 0x6AF4}, //4698 #CJK UNIFIED IDEOGRAPH + {0x99CB, 0x6AF5}, //4699 #CJK UNIFIED IDEOGRAPH + {0x99CC, 0x6AF6}, //4700 #CJK UNIFIED IDEOGRAPH + {0x99CD, 0x6AF7}, //4701 #CJK UNIFIED IDEOGRAPH + {0x99CE, 0x6AF8}, //4702 #CJK UNIFIED IDEOGRAPH + {0x99CF, 0x6AF9}, //4703 #CJK UNIFIED IDEOGRAPH + {0x99D0, 0x6AFA}, //4704 #CJK UNIFIED IDEOGRAPH + {0x99D1, 0x6AFB}, //4705 #CJK UNIFIED IDEOGRAPH + {0x99D2, 0x6AFC}, //4706 #CJK UNIFIED IDEOGRAPH + {0x99D3, 0x6AFD}, //4707 #CJK UNIFIED IDEOGRAPH + {0x99D4, 0x6AFE}, //4708 #CJK UNIFIED IDEOGRAPH + {0x99D5, 0x6AFF}, //4709 #CJK UNIFIED IDEOGRAPH + {0x99D6, 0x6B00}, //4710 #CJK UNIFIED IDEOGRAPH + {0x99D7, 0x6B01}, //4711 #CJK UNIFIED IDEOGRAPH + {0x99D8, 0x6B02}, //4712 #CJK UNIFIED IDEOGRAPH + {0x99D9, 0x6B03}, //4713 #CJK UNIFIED IDEOGRAPH + {0x99DA, 0x6B04}, //4714 #CJK UNIFIED IDEOGRAPH + {0x99DB, 0x6B05}, //4715 #CJK UNIFIED IDEOGRAPH + {0x99DC, 0x6B06}, //4716 #CJK UNIFIED IDEOGRAPH + {0x99DD, 0x6B07}, //4717 #CJK UNIFIED IDEOGRAPH + {0x99DE, 0x6B08}, //4718 #CJK UNIFIED IDEOGRAPH + {0x99DF, 0x6B09}, //4719 #CJK UNIFIED IDEOGRAPH + {0x99E0, 0x6B0A}, //4720 #CJK UNIFIED IDEOGRAPH + {0x99E1, 0x6B0B}, //4721 #CJK UNIFIED IDEOGRAPH + {0x99E2, 0x6B0C}, //4722 #CJK UNIFIED IDEOGRAPH + {0x99E3, 0x6B0D}, //4723 #CJK UNIFIED IDEOGRAPH + {0x99E4, 0x6B0E}, //4724 #CJK UNIFIED IDEOGRAPH + {0x99E5, 0x6B0F}, //4725 #CJK UNIFIED IDEOGRAPH + {0x99E6, 0x6B10}, //4726 #CJK UNIFIED IDEOGRAPH + {0x99E7, 0x6B11}, //4727 #CJK UNIFIED IDEOGRAPH + {0x99E8, 0x6B12}, //4728 #CJK UNIFIED IDEOGRAPH + {0x99E9, 0x6B13}, //4729 #CJK UNIFIED IDEOGRAPH + {0x99EA, 0x6B14}, //4730 #CJK UNIFIED IDEOGRAPH + {0x99EB, 0x6B15}, //4731 #CJK UNIFIED IDEOGRAPH + {0x99EC, 0x6B16}, //4732 #CJK UNIFIED IDEOGRAPH + {0x99ED, 0x6B17}, //4733 #CJK UNIFIED IDEOGRAPH + {0x99EE, 0x6B18}, //4734 #CJK UNIFIED IDEOGRAPH + {0x99EF, 0x6B19}, //4735 #CJK UNIFIED IDEOGRAPH + {0x99F0, 0x6B1A}, //4736 #CJK UNIFIED IDEOGRAPH + {0x99F1, 0x6B1B}, //4737 #CJK UNIFIED IDEOGRAPH + {0x99F2, 0x6B1C}, //4738 #CJK UNIFIED IDEOGRAPH + {0x99F3, 0x6B1D}, //4739 #CJK UNIFIED IDEOGRAPH + {0x99F4, 0x6B1E}, //4740 #CJK UNIFIED IDEOGRAPH + {0x99F5, 0x6B1F}, //4741 #CJK UNIFIED IDEOGRAPH + {0x99F6, 0x6B25}, //4742 #CJK UNIFIED IDEOGRAPH + {0x99F7, 0x6B26}, //4743 #CJK UNIFIED IDEOGRAPH + {0x99F8, 0x6B28}, //4744 #CJK UNIFIED IDEOGRAPH + {0x99F9, 0x6B29}, //4745 #CJK UNIFIED IDEOGRAPH + {0x99FA, 0x6B2A}, //4746 #CJK UNIFIED IDEOGRAPH + {0x99FB, 0x6B2B}, //4747 #CJK UNIFIED IDEOGRAPH + {0x99FC, 0x6B2C}, //4748 #CJK UNIFIED IDEOGRAPH + {0x99FD, 0x6B2D}, //4749 #CJK UNIFIED IDEOGRAPH + {0x99FE, 0x6B2E}, //4750 #CJK UNIFIED IDEOGRAPH + {0x9A40, 0x6B2F}, //4751 #CJK UNIFIED IDEOGRAPH + {0x9A41, 0x6B30}, //4752 #CJK UNIFIED IDEOGRAPH + {0x9A42, 0x6B31}, //4753 #CJK UNIFIED IDEOGRAPH + {0x9A43, 0x6B33}, //4754 #CJK UNIFIED IDEOGRAPH + {0x9A44, 0x6B34}, //4755 #CJK UNIFIED IDEOGRAPH + {0x9A45, 0x6B35}, //4756 #CJK UNIFIED IDEOGRAPH + {0x9A46, 0x6B36}, //4757 #CJK UNIFIED IDEOGRAPH + {0x9A47, 0x6B38}, //4758 #CJK UNIFIED IDEOGRAPH + {0x9A48, 0x6B3B}, //4759 #CJK UNIFIED IDEOGRAPH + {0x9A49, 0x6B3C}, //4760 #CJK UNIFIED IDEOGRAPH + {0x9A4A, 0x6B3D}, //4761 #CJK UNIFIED IDEOGRAPH + {0x9A4B, 0x6B3F}, //4762 #CJK UNIFIED IDEOGRAPH + {0x9A4C, 0x6B40}, //4763 #CJK UNIFIED IDEOGRAPH + {0x9A4D, 0x6B41}, //4764 #CJK UNIFIED IDEOGRAPH + {0x9A4E, 0x6B42}, //4765 #CJK UNIFIED IDEOGRAPH + {0x9A4F, 0x6B44}, //4766 #CJK UNIFIED IDEOGRAPH + {0x9A50, 0x6B45}, //4767 #CJK UNIFIED IDEOGRAPH + {0x9A51, 0x6B48}, //4768 #CJK UNIFIED IDEOGRAPH + {0x9A52, 0x6B4A}, //4769 #CJK UNIFIED IDEOGRAPH + {0x9A53, 0x6B4B}, //4770 #CJK UNIFIED IDEOGRAPH + {0x9A54, 0x6B4D}, //4771 #CJK UNIFIED IDEOGRAPH + {0x9A55, 0x6B4E}, //4772 #CJK UNIFIED IDEOGRAPH + {0x9A56, 0x6B4F}, //4773 #CJK UNIFIED IDEOGRAPH + {0x9A57, 0x6B50}, //4774 #CJK UNIFIED IDEOGRAPH + {0x9A58, 0x6B51}, //4775 #CJK UNIFIED IDEOGRAPH + {0x9A59, 0x6B52}, //4776 #CJK UNIFIED IDEOGRAPH + {0x9A5A, 0x6B53}, //4777 #CJK UNIFIED IDEOGRAPH + {0x9A5B, 0x6B54}, //4778 #CJK UNIFIED IDEOGRAPH + {0x9A5C, 0x6B55}, //4779 #CJK UNIFIED IDEOGRAPH + {0x9A5D, 0x6B56}, //4780 #CJK UNIFIED IDEOGRAPH + {0x9A5E, 0x6B57}, //4781 #CJK UNIFIED IDEOGRAPH + {0x9A5F, 0x6B58}, //4782 #CJK UNIFIED IDEOGRAPH + {0x9A60, 0x6B5A}, //4783 #CJK UNIFIED IDEOGRAPH + {0x9A61, 0x6B5B}, //4784 #CJK UNIFIED IDEOGRAPH + {0x9A62, 0x6B5C}, //4785 #CJK UNIFIED IDEOGRAPH + {0x9A63, 0x6B5D}, //4786 #CJK UNIFIED IDEOGRAPH + {0x9A64, 0x6B5E}, //4787 #CJK UNIFIED IDEOGRAPH + {0x9A65, 0x6B5F}, //4788 #CJK UNIFIED IDEOGRAPH + {0x9A66, 0x6B60}, //4789 #CJK UNIFIED IDEOGRAPH + {0x9A67, 0x6B61}, //4790 #CJK UNIFIED IDEOGRAPH + {0x9A68, 0x6B68}, //4791 #CJK UNIFIED IDEOGRAPH + {0x9A69, 0x6B69}, //4792 #CJK UNIFIED IDEOGRAPH + {0x9A6A, 0x6B6B}, //4793 #CJK UNIFIED IDEOGRAPH + {0x9A6B, 0x6B6C}, //4794 #CJK UNIFIED IDEOGRAPH + {0x9A6C, 0x6B6D}, //4795 #CJK UNIFIED IDEOGRAPH + {0x9A6D, 0x6B6E}, //4796 #CJK UNIFIED IDEOGRAPH + {0x9A6E, 0x6B6F}, //4797 #CJK UNIFIED IDEOGRAPH + {0x9A6F, 0x6B70}, //4798 #CJK UNIFIED IDEOGRAPH + {0x9A70, 0x6B71}, //4799 #CJK UNIFIED IDEOGRAPH + {0x9A71, 0x6B72}, //4800 #CJK UNIFIED IDEOGRAPH + {0x9A72, 0x6B73}, //4801 #CJK UNIFIED IDEOGRAPH + {0x9A73, 0x6B74}, //4802 #CJK UNIFIED IDEOGRAPH + {0x9A74, 0x6B75}, //4803 #CJK UNIFIED IDEOGRAPH + {0x9A75, 0x6B76}, //4804 #CJK UNIFIED IDEOGRAPH + {0x9A76, 0x6B77}, //4805 #CJK UNIFIED IDEOGRAPH + {0x9A77, 0x6B78}, //4806 #CJK UNIFIED IDEOGRAPH + {0x9A78, 0x6B7A}, //4807 #CJK UNIFIED IDEOGRAPH + {0x9A79, 0x6B7D}, //4808 #CJK UNIFIED IDEOGRAPH + {0x9A7A, 0x6B7E}, //4809 #CJK UNIFIED IDEOGRAPH + {0x9A7B, 0x6B7F}, //4810 #CJK UNIFIED IDEOGRAPH + {0x9A7C, 0x6B80}, //4811 #CJK UNIFIED IDEOGRAPH + {0x9A7D, 0x6B85}, //4812 #CJK UNIFIED IDEOGRAPH + {0x9A7E, 0x6B88}, //4813 #CJK UNIFIED IDEOGRAPH + {0x9A80, 0x6B8C}, //4814 #CJK UNIFIED IDEOGRAPH + {0x9A81, 0x6B8E}, //4815 #CJK UNIFIED IDEOGRAPH + {0x9A82, 0x6B8F}, //4816 #CJK UNIFIED IDEOGRAPH + {0x9A83, 0x6B90}, //4817 #CJK UNIFIED IDEOGRAPH + {0x9A84, 0x6B91}, //4818 #CJK UNIFIED IDEOGRAPH + {0x9A85, 0x6B94}, //4819 #CJK UNIFIED IDEOGRAPH + {0x9A86, 0x6B95}, //4820 #CJK UNIFIED IDEOGRAPH + {0x9A87, 0x6B97}, //4821 #CJK UNIFIED IDEOGRAPH + {0x9A88, 0x6B98}, //4822 #CJK UNIFIED IDEOGRAPH + {0x9A89, 0x6B99}, //4823 #CJK UNIFIED IDEOGRAPH + {0x9A8A, 0x6B9C}, //4824 #CJK UNIFIED IDEOGRAPH + {0x9A8B, 0x6B9D}, //4825 #CJK UNIFIED IDEOGRAPH + {0x9A8C, 0x6B9E}, //4826 #CJK UNIFIED IDEOGRAPH + {0x9A8D, 0x6B9F}, //4827 #CJK UNIFIED IDEOGRAPH + {0x9A8E, 0x6BA0}, //4828 #CJK UNIFIED IDEOGRAPH + {0x9A8F, 0x6BA2}, //4829 #CJK UNIFIED IDEOGRAPH + {0x9A90, 0x6BA3}, //4830 #CJK UNIFIED IDEOGRAPH + {0x9A91, 0x6BA4}, //4831 #CJK UNIFIED IDEOGRAPH + {0x9A92, 0x6BA5}, //4832 #CJK UNIFIED IDEOGRAPH + {0x9A93, 0x6BA6}, //4833 #CJK UNIFIED IDEOGRAPH + {0x9A94, 0x6BA7}, //4834 #CJK UNIFIED IDEOGRAPH + {0x9A95, 0x6BA8}, //4835 #CJK UNIFIED IDEOGRAPH + {0x9A96, 0x6BA9}, //4836 #CJK UNIFIED IDEOGRAPH + {0x9A97, 0x6BAB}, //4837 #CJK UNIFIED IDEOGRAPH + {0x9A98, 0x6BAC}, //4838 #CJK UNIFIED IDEOGRAPH + {0x9A99, 0x6BAD}, //4839 #CJK UNIFIED IDEOGRAPH + {0x9A9A, 0x6BAE}, //4840 #CJK UNIFIED IDEOGRAPH + {0x9A9B, 0x6BAF}, //4841 #CJK UNIFIED IDEOGRAPH + {0x9A9C, 0x6BB0}, //4842 #CJK UNIFIED IDEOGRAPH + {0x9A9D, 0x6BB1}, //4843 #CJK UNIFIED IDEOGRAPH + {0x9A9E, 0x6BB2}, //4844 #CJK UNIFIED IDEOGRAPH + {0x9A9F, 0x6BB6}, //4845 #CJK UNIFIED IDEOGRAPH + {0x9AA0, 0x6BB8}, //4846 #CJK UNIFIED IDEOGRAPH + {0x9AA1, 0x6BB9}, //4847 #CJK UNIFIED IDEOGRAPH + {0x9AA2, 0x6BBA}, //4848 #CJK UNIFIED IDEOGRAPH + {0x9AA3, 0x6BBB}, //4849 #CJK UNIFIED IDEOGRAPH + {0x9AA4, 0x6BBC}, //4850 #CJK UNIFIED IDEOGRAPH + {0x9AA5, 0x6BBD}, //4851 #CJK UNIFIED IDEOGRAPH + {0x9AA6, 0x6BBE}, //4852 #CJK UNIFIED IDEOGRAPH + {0x9AA7, 0x6BC0}, //4853 #CJK UNIFIED IDEOGRAPH + {0x9AA8, 0x6BC3}, //4854 #CJK UNIFIED IDEOGRAPH + {0x9AA9, 0x6BC4}, //4855 #CJK UNIFIED IDEOGRAPH + {0x9AAA, 0x6BC6}, //4856 #CJK UNIFIED IDEOGRAPH + {0x9AAB, 0x6BC7}, //4857 #CJK UNIFIED IDEOGRAPH + {0x9AAC, 0x6BC8}, //4858 #CJK UNIFIED IDEOGRAPH + {0x9AAD, 0x6BC9}, //4859 #CJK UNIFIED IDEOGRAPH + {0x9AAE, 0x6BCA}, //4860 #CJK UNIFIED IDEOGRAPH + {0x9AAF, 0x6BCC}, //4861 #CJK UNIFIED IDEOGRAPH + {0x9AB0, 0x6BCE}, //4862 #CJK UNIFIED IDEOGRAPH + {0x9AB1, 0x6BD0}, //4863 #CJK UNIFIED IDEOGRAPH + {0x9AB2, 0x6BD1}, //4864 #CJK UNIFIED IDEOGRAPH + {0x9AB3, 0x6BD8}, //4865 #CJK UNIFIED IDEOGRAPH + {0x9AB4, 0x6BDA}, //4866 #CJK UNIFIED IDEOGRAPH + {0x9AB5, 0x6BDC}, //4867 #CJK UNIFIED IDEOGRAPH + {0x9AB6, 0x6BDD}, //4868 #CJK UNIFIED IDEOGRAPH + {0x9AB7, 0x6BDE}, //4869 #CJK UNIFIED IDEOGRAPH + {0x9AB8, 0x6BDF}, //4870 #CJK UNIFIED IDEOGRAPH + {0x9AB9, 0x6BE0}, //4871 #CJK UNIFIED IDEOGRAPH + {0x9ABA, 0x6BE2}, //4872 #CJK UNIFIED IDEOGRAPH + {0x9ABB, 0x6BE3}, //4873 #CJK UNIFIED IDEOGRAPH + {0x9ABC, 0x6BE4}, //4874 #CJK UNIFIED IDEOGRAPH + {0x9ABD, 0x6BE5}, //4875 #CJK UNIFIED IDEOGRAPH + {0x9ABE, 0x6BE6}, //4876 #CJK UNIFIED IDEOGRAPH + {0x9ABF, 0x6BE7}, //4877 #CJK UNIFIED IDEOGRAPH + {0x9AC0, 0x6BE8}, //4878 #CJK UNIFIED IDEOGRAPH + {0x9AC1, 0x6BE9}, //4879 #CJK UNIFIED IDEOGRAPH + {0x9AC2, 0x6BEC}, //4880 #CJK UNIFIED IDEOGRAPH + {0x9AC3, 0x6BED}, //4881 #CJK UNIFIED IDEOGRAPH + {0x9AC4, 0x6BEE}, //4882 #CJK UNIFIED IDEOGRAPH + {0x9AC5, 0x6BF0}, //4883 #CJK UNIFIED IDEOGRAPH + {0x9AC6, 0x6BF1}, //4884 #CJK UNIFIED IDEOGRAPH + {0x9AC7, 0x6BF2}, //4885 #CJK UNIFIED IDEOGRAPH + {0x9AC8, 0x6BF4}, //4886 #CJK UNIFIED IDEOGRAPH + {0x9AC9, 0x6BF6}, //4887 #CJK UNIFIED IDEOGRAPH + {0x9ACA, 0x6BF7}, //4888 #CJK UNIFIED IDEOGRAPH + {0x9ACB, 0x6BF8}, //4889 #CJK UNIFIED IDEOGRAPH + {0x9ACC, 0x6BFA}, //4890 #CJK UNIFIED IDEOGRAPH + {0x9ACD, 0x6BFB}, //4891 #CJK UNIFIED IDEOGRAPH + {0x9ACE, 0x6BFC}, //4892 #CJK UNIFIED IDEOGRAPH + {0x9ACF, 0x6BFE}, //4893 #CJK UNIFIED IDEOGRAPH + {0x9AD0, 0x6BFF}, //4894 #CJK UNIFIED IDEOGRAPH + {0x9AD1, 0x6C00}, //4895 #CJK UNIFIED IDEOGRAPH + {0x9AD2, 0x6C01}, //4896 #CJK UNIFIED IDEOGRAPH + {0x9AD3, 0x6C02}, //4897 #CJK UNIFIED IDEOGRAPH + {0x9AD4, 0x6C03}, //4898 #CJK UNIFIED IDEOGRAPH + {0x9AD5, 0x6C04}, //4899 #CJK UNIFIED IDEOGRAPH + {0x9AD6, 0x6C08}, //4900 #CJK UNIFIED IDEOGRAPH + {0x9AD7, 0x6C09}, //4901 #CJK UNIFIED IDEOGRAPH + {0x9AD8, 0x6C0A}, //4902 #CJK UNIFIED IDEOGRAPH + {0x9AD9, 0x6C0B}, //4903 #CJK UNIFIED IDEOGRAPH + {0x9ADA, 0x6C0C}, //4904 #CJK UNIFIED IDEOGRAPH + {0x9ADB, 0x6C0E}, //4905 #CJK UNIFIED IDEOGRAPH + {0x9ADC, 0x6C12}, //4906 #CJK UNIFIED IDEOGRAPH + {0x9ADD, 0x6C17}, //4907 #CJK UNIFIED IDEOGRAPH + {0x9ADE, 0x6C1C}, //4908 #CJK UNIFIED IDEOGRAPH + {0x9ADF, 0x6C1D}, //4909 #CJK UNIFIED IDEOGRAPH + {0x9AE0, 0x6C1E}, //4910 #CJK UNIFIED IDEOGRAPH + {0x9AE1, 0x6C20}, //4911 #CJK UNIFIED IDEOGRAPH + {0x9AE2, 0x6C23}, //4912 #CJK UNIFIED IDEOGRAPH + {0x9AE3, 0x6C25}, //4913 #CJK UNIFIED IDEOGRAPH + {0x9AE4, 0x6C2B}, //4914 #CJK UNIFIED IDEOGRAPH + {0x9AE5, 0x6C2C}, //4915 #CJK UNIFIED IDEOGRAPH + {0x9AE6, 0x6C2D}, //4916 #CJK UNIFIED IDEOGRAPH + {0x9AE7, 0x6C31}, //4917 #CJK UNIFIED IDEOGRAPH + {0x9AE8, 0x6C33}, //4918 #CJK UNIFIED IDEOGRAPH + {0x9AE9, 0x6C36}, //4919 #CJK UNIFIED IDEOGRAPH + {0x9AEA, 0x6C37}, //4920 #CJK UNIFIED IDEOGRAPH + {0x9AEB, 0x6C39}, //4921 #CJK UNIFIED IDEOGRAPH + {0x9AEC, 0x6C3A}, //4922 #CJK UNIFIED IDEOGRAPH + {0x9AED, 0x6C3B}, //4923 #CJK UNIFIED IDEOGRAPH + {0x9AEE, 0x6C3C}, //4924 #CJK UNIFIED IDEOGRAPH + {0x9AEF, 0x6C3E}, //4925 #CJK UNIFIED IDEOGRAPH + {0x9AF0, 0x6C3F}, //4926 #CJK UNIFIED IDEOGRAPH + {0x9AF1, 0x6C43}, //4927 #CJK UNIFIED IDEOGRAPH + {0x9AF2, 0x6C44}, //4928 #CJK UNIFIED IDEOGRAPH + {0x9AF3, 0x6C45}, //4929 #CJK UNIFIED IDEOGRAPH + {0x9AF4, 0x6C48}, //4930 #CJK UNIFIED IDEOGRAPH + {0x9AF5, 0x6C4B}, //4931 #CJK UNIFIED IDEOGRAPH + {0x9AF6, 0x6C4C}, //4932 #CJK UNIFIED IDEOGRAPH + {0x9AF7, 0x6C4D}, //4933 #CJK UNIFIED IDEOGRAPH + {0x9AF8, 0x6C4E}, //4934 #CJK UNIFIED IDEOGRAPH + {0x9AF9, 0x6C4F}, //4935 #CJK UNIFIED IDEOGRAPH + {0x9AFA, 0x6C51}, //4936 #CJK UNIFIED IDEOGRAPH + {0x9AFB, 0x6C52}, //4937 #CJK UNIFIED IDEOGRAPH + {0x9AFC, 0x6C53}, //4938 #CJK UNIFIED IDEOGRAPH + {0x9AFD, 0x6C56}, //4939 #CJK UNIFIED IDEOGRAPH + {0x9AFE, 0x6C58}, //4940 #CJK UNIFIED IDEOGRAPH + {0x9B40, 0x6C59}, //4941 #CJK UNIFIED IDEOGRAPH + {0x9B41, 0x6C5A}, //4942 #CJK UNIFIED IDEOGRAPH + {0x9B42, 0x6C62}, //4943 #CJK UNIFIED IDEOGRAPH + {0x9B43, 0x6C63}, //4944 #CJK UNIFIED IDEOGRAPH + {0x9B44, 0x6C65}, //4945 #CJK UNIFIED IDEOGRAPH + {0x9B45, 0x6C66}, //4946 #CJK UNIFIED IDEOGRAPH + {0x9B46, 0x6C67}, //4947 #CJK UNIFIED IDEOGRAPH + {0x9B47, 0x6C6B}, //4948 #CJK UNIFIED IDEOGRAPH + {0x9B48, 0x6C6C}, //4949 #CJK UNIFIED IDEOGRAPH + {0x9B49, 0x6C6D}, //4950 #CJK UNIFIED IDEOGRAPH + {0x9B4A, 0x6C6E}, //4951 #CJK UNIFIED IDEOGRAPH + {0x9B4B, 0x6C6F}, //4952 #CJK UNIFIED IDEOGRAPH + {0x9B4C, 0x6C71}, //4953 #CJK UNIFIED IDEOGRAPH + {0x9B4D, 0x6C73}, //4954 #CJK UNIFIED IDEOGRAPH + {0x9B4E, 0x6C75}, //4955 #CJK UNIFIED IDEOGRAPH + {0x9B4F, 0x6C77}, //4956 #CJK UNIFIED IDEOGRAPH + {0x9B50, 0x6C78}, //4957 #CJK UNIFIED IDEOGRAPH + {0x9B51, 0x6C7A}, //4958 #CJK UNIFIED IDEOGRAPH + {0x9B52, 0x6C7B}, //4959 #CJK UNIFIED IDEOGRAPH + {0x9B53, 0x6C7C}, //4960 #CJK UNIFIED IDEOGRAPH + {0x9B54, 0x6C7F}, //4961 #CJK UNIFIED IDEOGRAPH + {0x9B55, 0x6C80}, //4962 #CJK UNIFIED IDEOGRAPH + {0x9B56, 0x6C84}, //4963 #CJK UNIFIED IDEOGRAPH + {0x9B57, 0x6C87}, //4964 #CJK UNIFIED IDEOGRAPH + {0x9B58, 0x6C8A}, //4965 #CJK UNIFIED IDEOGRAPH + {0x9B59, 0x6C8B}, //4966 #CJK UNIFIED IDEOGRAPH + {0x9B5A, 0x6C8D}, //4967 #CJK UNIFIED IDEOGRAPH + {0x9B5B, 0x6C8E}, //4968 #CJK UNIFIED IDEOGRAPH + {0x9B5C, 0x6C91}, //4969 #CJK UNIFIED IDEOGRAPH + {0x9B5D, 0x6C92}, //4970 #CJK UNIFIED IDEOGRAPH + {0x9B5E, 0x6C95}, //4971 #CJK UNIFIED IDEOGRAPH + {0x9B5F, 0x6C96}, //4972 #CJK UNIFIED IDEOGRAPH + {0x9B60, 0x6C97}, //4973 #CJK UNIFIED IDEOGRAPH + {0x9B61, 0x6C98}, //4974 #CJK UNIFIED IDEOGRAPH + {0x9B62, 0x6C9A}, //4975 #CJK UNIFIED IDEOGRAPH + {0x9B63, 0x6C9C}, //4976 #CJK UNIFIED IDEOGRAPH + {0x9B64, 0x6C9D}, //4977 #CJK UNIFIED IDEOGRAPH + {0x9B65, 0x6C9E}, //4978 #CJK UNIFIED IDEOGRAPH + {0x9B66, 0x6CA0}, //4979 #CJK UNIFIED IDEOGRAPH + {0x9B67, 0x6CA2}, //4980 #CJK UNIFIED IDEOGRAPH + {0x9B68, 0x6CA8}, //4981 #CJK UNIFIED IDEOGRAPH + {0x9B69, 0x6CAC}, //4982 #CJK UNIFIED IDEOGRAPH + {0x9B6A, 0x6CAF}, //4983 #CJK UNIFIED IDEOGRAPH + {0x9B6B, 0x6CB0}, //4984 #CJK UNIFIED IDEOGRAPH + {0x9B6C, 0x6CB4}, //4985 #CJK UNIFIED IDEOGRAPH + {0x9B6D, 0x6CB5}, //4986 #CJK UNIFIED IDEOGRAPH + {0x9B6E, 0x6CB6}, //4987 #CJK UNIFIED IDEOGRAPH + {0x9B6F, 0x6CB7}, //4988 #CJK UNIFIED IDEOGRAPH + {0x9B70, 0x6CBA}, //4989 #CJK UNIFIED IDEOGRAPH + {0x9B71, 0x6CC0}, //4990 #CJK UNIFIED IDEOGRAPH + {0x9B72, 0x6CC1}, //4991 #CJK UNIFIED IDEOGRAPH + {0x9B73, 0x6CC2}, //4992 #CJK UNIFIED IDEOGRAPH + {0x9B74, 0x6CC3}, //4993 #CJK UNIFIED IDEOGRAPH + {0x9B75, 0x6CC6}, //4994 #CJK UNIFIED IDEOGRAPH + {0x9B76, 0x6CC7}, //4995 #CJK UNIFIED IDEOGRAPH + {0x9B77, 0x6CC8}, //4996 #CJK UNIFIED IDEOGRAPH + {0x9B78, 0x6CCB}, //4997 #CJK UNIFIED IDEOGRAPH + {0x9B79, 0x6CCD}, //4998 #CJK UNIFIED IDEOGRAPH + {0x9B7A, 0x6CCE}, //4999 #CJK UNIFIED IDEOGRAPH + {0x9B7B, 0x6CCF}, //5000 #CJK UNIFIED IDEOGRAPH + {0x9B7C, 0x6CD1}, //5001 #CJK UNIFIED IDEOGRAPH + {0x9B7D, 0x6CD2}, //5002 #CJK UNIFIED IDEOGRAPH + {0x9B7E, 0x6CD8}, //5003 #CJK UNIFIED IDEOGRAPH + {0x9B80, 0x6CD9}, //5004 #CJK UNIFIED IDEOGRAPH + {0x9B81, 0x6CDA}, //5005 #CJK UNIFIED IDEOGRAPH + {0x9B82, 0x6CDC}, //5006 #CJK UNIFIED IDEOGRAPH + {0x9B83, 0x6CDD}, //5007 #CJK UNIFIED IDEOGRAPH + {0x9B84, 0x6CDF}, //5008 #CJK UNIFIED IDEOGRAPH + {0x9B85, 0x6CE4}, //5009 #CJK UNIFIED IDEOGRAPH + {0x9B86, 0x6CE6}, //5010 #CJK UNIFIED IDEOGRAPH + {0x9B87, 0x6CE7}, //5011 #CJK UNIFIED IDEOGRAPH + {0x9B88, 0x6CE9}, //5012 #CJK UNIFIED IDEOGRAPH + {0x9B89, 0x6CEC}, //5013 #CJK UNIFIED IDEOGRAPH + {0x9B8A, 0x6CED}, //5014 #CJK UNIFIED IDEOGRAPH + {0x9B8B, 0x6CF2}, //5015 #CJK UNIFIED IDEOGRAPH + {0x9B8C, 0x6CF4}, //5016 #CJK UNIFIED IDEOGRAPH + {0x9B8D, 0x6CF9}, //5017 #CJK UNIFIED IDEOGRAPH + {0x9B8E, 0x6CFF}, //5018 #CJK UNIFIED IDEOGRAPH + {0x9B8F, 0x6D00}, //5019 #CJK UNIFIED IDEOGRAPH + {0x9B90, 0x6D02}, //5020 #CJK UNIFIED IDEOGRAPH + {0x9B91, 0x6D03}, //5021 #CJK UNIFIED IDEOGRAPH + {0x9B92, 0x6D05}, //5022 #CJK UNIFIED IDEOGRAPH + {0x9B93, 0x6D06}, //5023 #CJK UNIFIED IDEOGRAPH + {0x9B94, 0x6D08}, //5024 #CJK UNIFIED IDEOGRAPH + {0x9B95, 0x6D09}, //5025 #CJK UNIFIED IDEOGRAPH + {0x9B96, 0x6D0A}, //5026 #CJK UNIFIED IDEOGRAPH + {0x9B97, 0x6D0D}, //5027 #CJK UNIFIED IDEOGRAPH + {0x9B98, 0x6D0F}, //5028 #CJK UNIFIED IDEOGRAPH + {0x9B99, 0x6D10}, //5029 #CJK UNIFIED IDEOGRAPH + {0x9B9A, 0x6D11}, //5030 #CJK UNIFIED IDEOGRAPH + {0x9B9B, 0x6D13}, //5031 #CJK UNIFIED IDEOGRAPH + {0x9B9C, 0x6D14}, //5032 #CJK UNIFIED IDEOGRAPH + {0x9B9D, 0x6D15}, //5033 #CJK UNIFIED IDEOGRAPH + {0x9B9E, 0x6D16}, //5034 #CJK UNIFIED IDEOGRAPH + {0x9B9F, 0x6D18}, //5035 #CJK UNIFIED IDEOGRAPH + {0x9BA0, 0x6D1C}, //5036 #CJK UNIFIED IDEOGRAPH + {0x9BA1, 0x6D1D}, //5037 #CJK UNIFIED IDEOGRAPH + {0x9BA2, 0x6D1F}, //5038 #CJK UNIFIED IDEOGRAPH + {0x9BA3, 0x6D20}, //5039 #CJK UNIFIED IDEOGRAPH + {0x9BA4, 0x6D21}, //5040 #CJK UNIFIED IDEOGRAPH + {0x9BA5, 0x6D22}, //5041 #CJK UNIFIED IDEOGRAPH + {0x9BA6, 0x6D23}, //5042 #CJK UNIFIED IDEOGRAPH + {0x9BA7, 0x6D24}, //5043 #CJK UNIFIED IDEOGRAPH + {0x9BA8, 0x6D26}, //5044 #CJK UNIFIED IDEOGRAPH + {0x9BA9, 0x6D28}, //5045 #CJK UNIFIED IDEOGRAPH + {0x9BAA, 0x6D29}, //5046 #CJK UNIFIED IDEOGRAPH + {0x9BAB, 0x6D2C}, //5047 #CJK UNIFIED IDEOGRAPH + {0x9BAC, 0x6D2D}, //5048 #CJK UNIFIED IDEOGRAPH + {0x9BAD, 0x6D2F}, //5049 #CJK UNIFIED IDEOGRAPH + {0x9BAE, 0x6D30}, //5050 #CJK UNIFIED IDEOGRAPH + {0x9BAF, 0x6D34}, //5051 #CJK UNIFIED IDEOGRAPH + {0x9BB0, 0x6D36}, //5052 #CJK UNIFIED IDEOGRAPH + {0x9BB1, 0x6D37}, //5053 #CJK UNIFIED IDEOGRAPH + {0x9BB2, 0x6D38}, //5054 #CJK UNIFIED IDEOGRAPH + {0x9BB3, 0x6D3A}, //5055 #CJK UNIFIED IDEOGRAPH + {0x9BB4, 0x6D3F}, //5056 #CJK UNIFIED IDEOGRAPH + {0x9BB5, 0x6D40}, //5057 #CJK UNIFIED IDEOGRAPH + {0x9BB6, 0x6D42}, //5058 #CJK UNIFIED IDEOGRAPH + {0x9BB7, 0x6D44}, //5059 #CJK UNIFIED IDEOGRAPH + {0x9BB8, 0x6D49}, //5060 #CJK UNIFIED IDEOGRAPH + {0x9BB9, 0x6D4C}, //5061 #CJK UNIFIED IDEOGRAPH + {0x9BBA, 0x6D50}, //5062 #CJK UNIFIED IDEOGRAPH + {0x9BBB, 0x6D55}, //5063 #CJK UNIFIED IDEOGRAPH + {0x9BBC, 0x6D56}, //5064 #CJK UNIFIED IDEOGRAPH + {0x9BBD, 0x6D57}, //5065 #CJK UNIFIED IDEOGRAPH + {0x9BBE, 0x6D58}, //5066 #CJK UNIFIED IDEOGRAPH + {0x9BBF, 0x6D5B}, //5067 #CJK UNIFIED IDEOGRAPH + {0x9BC0, 0x6D5D}, //5068 #CJK UNIFIED IDEOGRAPH + {0x9BC1, 0x6D5F}, //5069 #CJK UNIFIED IDEOGRAPH + {0x9BC2, 0x6D61}, //5070 #CJK UNIFIED IDEOGRAPH + {0x9BC3, 0x6D62}, //5071 #CJK UNIFIED IDEOGRAPH + {0x9BC4, 0x6D64}, //5072 #CJK UNIFIED IDEOGRAPH + {0x9BC5, 0x6D65}, //5073 #CJK UNIFIED IDEOGRAPH + {0x9BC6, 0x6D67}, //5074 #CJK UNIFIED IDEOGRAPH + {0x9BC7, 0x6D68}, //5075 #CJK UNIFIED IDEOGRAPH + {0x9BC8, 0x6D6B}, //5076 #CJK UNIFIED IDEOGRAPH + {0x9BC9, 0x6D6C}, //5077 #CJK UNIFIED IDEOGRAPH + {0x9BCA, 0x6D6D}, //5078 #CJK UNIFIED IDEOGRAPH + {0x9BCB, 0x6D70}, //5079 #CJK UNIFIED IDEOGRAPH + {0x9BCC, 0x6D71}, //5080 #CJK UNIFIED IDEOGRAPH + {0x9BCD, 0x6D72}, //5081 #CJK UNIFIED IDEOGRAPH + {0x9BCE, 0x6D73}, //5082 #CJK UNIFIED IDEOGRAPH + {0x9BCF, 0x6D75}, //5083 #CJK UNIFIED IDEOGRAPH + {0x9BD0, 0x6D76}, //5084 #CJK UNIFIED IDEOGRAPH + {0x9BD1, 0x6D79}, //5085 #CJK UNIFIED IDEOGRAPH + {0x9BD2, 0x6D7A}, //5086 #CJK UNIFIED IDEOGRAPH + {0x9BD3, 0x6D7B}, //5087 #CJK UNIFIED IDEOGRAPH + {0x9BD4, 0x6D7D}, //5088 #CJK UNIFIED IDEOGRAPH + {0x9BD5, 0x6D7E}, //5089 #CJK UNIFIED IDEOGRAPH + {0x9BD6, 0x6D7F}, //5090 #CJK UNIFIED IDEOGRAPH + {0x9BD7, 0x6D80}, //5091 #CJK UNIFIED IDEOGRAPH + {0x9BD8, 0x6D81}, //5092 #CJK UNIFIED IDEOGRAPH + {0x9BD9, 0x6D83}, //5093 #CJK UNIFIED IDEOGRAPH + {0x9BDA, 0x6D84}, //5094 #CJK UNIFIED IDEOGRAPH + {0x9BDB, 0x6D86}, //5095 #CJK UNIFIED IDEOGRAPH + {0x9BDC, 0x6D87}, //5096 #CJK UNIFIED IDEOGRAPH + {0x9BDD, 0x6D8A}, //5097 #CJK UNIFIED IDEOGRAPH + {0x9BDE, 0x6D8B}, //5098 #CJK UNIFIED IDEOGRAPH + {0x9BDF, 0x6D8D}, //5099 #CJK UNIFIED IDEOGRAPH + {0x9BE0, 0x6D8F}, //5100 #CJK UNIFIED IDEOGRAPH + {0x9BE1, 0x6D90}, //5101 #CJK UNIFIED IDEOGRAPH + {0x9BE2, 0x6D92}, //5102 #CJK UNIFIED IDEOGRAPH + {0x9BE3, 0x6D96}, //5103 #CJK UNIFIED IDEOGRAPH + {0x9BE4, 0x6D97}, //5104 #CJK UNIFIED IDEOGRAPH + {0x9BE5, 0x6D98}, //5105 #CJK UNIFIED IDEOGRAPH + {0x9BE6, 0x6D99}, //5106 #CJK UNIFIED IDEOGRAPH + {0x9BE7, 0x6D9A}, //5107 #CJK UNIFIED IDEOGRAPH + {0x9BE8, 0x6D9C}, //5108 #CJK UNIFIED IDEOGRAPH + {0x9BE9, 0x6DA2}, //5109 #CJK UNIFIED IDEOGRAPH + {0x9BEA, 0x6DA5}, //5110 #CJK UNIFIED IDEOGRAPH + {0x9BEB, 0x6DAC}, //5111 #CJK UNIFIED IDEOGRAPH + {0x9BEC, 0x6DAD}, //5112 #CJK UNIFIED IDEOGRAPH + {0x9BED, 0x6DB0}, //5113 #CJK UNIFIED IDEOGRAPH + {0x9BEE, 0x6DB1}, //5114 #CJK UNIFIED IDEOGRAPH + {0x9BEF, 0x6DB3}, //5115 #CJK UNIFIED IDEOGRAPH + {0x9BF0, 0x6DB4}, //5116 #CJK UNIFIED IDEOGRAPH + {0x9BF1, 0x6DB6}, //5117 #CJK UNIFIED IDEOGRAPH + {0x9BF2, 0x6DB7}, //5118 #CJK UNIFIED IDEOGRAPH + {0x9BF3, 0x6DB9}, //5119 #CJK UNIFIED IDEOGRAPH + {0x9BF4, 0x6DBA}, //5120 #CJK UNIFIED IDEOGRAPH + {0x9BF5, 0x6DBB}, //5121 #CJK UNIFIED IDEOGRAPH + {0x9BF6, 0x6DBC}, //5122 #CJK UNIFIED IDEOGRAPH + {0x9BF7, 0x6DBD}, //5123 #CJK UNIFIED IDEOGRAPH + {0x9BF8, 0x6DBE}, //5124 #CJK UNIFIED IDEOGRAPH + {0x9BF9, 0x6DC1}, //5125 #CJK UNIFIED IDEOGRAPH + {0x9BFA, 0x6DC2}, //5126 #CJK UNIFIED IDEOGRAPH + {0x9BFB, 0x6DC3}, //5127 #CJK UNIFIED IDEOGRAPH + {0x9BFC, 0x6DC8}, //5128 #CJK UNIFIED IDEOGRAPH + {0x9BFD, 0x6DC9}, //5129 #CJK UNIFIED IDEOGRAPH + {0x9BFE, 0x6DCA}, //5130 #CJK UNIFIED IDEOGRAPH + {0x9C40, 0x6DCD}, //5131 #CJK UNIFIED IDEOGRAPH + {0x9C41, 0x6DCE}, //5132 #CJK UNIFIED IDEOGRAPH + {0x9C42, 0x6DCF}, //5133 #CJK UNIFIED IDEOGRAPH + {0x9C43, 0x6DD0}, //5134 #CJK UNIFIED IDEOGRAPH + {0x9C44, 0x6DD2}, //5135 #CJK UNIFIED IDEOGRAPH + {0x9C45, 0x6DD3}, //5136 #CJK UNIFIED IDEOGRAPH + {0x9C46, 0x6DD4}, //5137 #CJK UNIFIED IDEOGRAPH + {0x9C47, 0x6DD5}, //5138 #CJK UNIFIED IDEOGRAPH + {0x9C48, 0x6DD7}, //5139 #CJK UNIFIED IDEOGRAPH + {0x9C49, 0x6DDA}, //5140 #CJK UNIFIED IDEOGRAPH + {0x9C4A, 0x6DDB}, //5141 #CJK UNIFIED IDEOGRAPH + {0x9C4B, 0x6DDC}, //5142 #CJK UNIFIED IDEOGRAPH + {0x9C4C, 0x6DDF}, //5143 #CJK UNIFIED IDEOGRAPH + {0x9C4D, 0x6DE2}, //5144 #CJK UNIFIED IDEOGRAPH + {0x9C4E, 0x6DE3}, //5145 #CJK UNIFIED IDEOGRAPH + {0x9C4F, 0x6DE5}, //5146 #CJK UNIFIED IDEOGRAPH + {0x9C50, 0x6DE7}, //5147 #CJK UNIFIED IDEOGRAPH + {0x9C51, 0x6DE8}, //5148 #CJK UNIFIED IDEOGRAPH + {0x9C52, 0x6DE9}, //5149 #CJK UNIFIED IDEOGRAPH + {0x9C53, 0x6DEA}, //5150 #CJK UNIFIED IDEOGRAPH + {0x9C54, 0x6DED}, //5151 #CJK UNIFIED IDEOGRAPH + {0x9C55, 0x6DEF}, //5152 #CJK UNIFIED IDEOGRAPH + {0x9C56, 0x6DF0}, //5153 #CJK UNIFIED IDEOGRAPH + {0x9C57, 0x6DF2}, //5154 #CJK UNIFIED IDEOGRAPH + {0x9C58, 0x6DF4}, //5155 #CJK UNIFIED IDEOGRAPH + {0x9C59, 0x6DF5}, //5156 #CJK UNIFIED IDEOGRAPH + {0x9C5A, 0x6DF6}, //5157 #CJK UNIFIED IDEOGRAPH + {0x9C5B, 0x6DF8}, //5158 #CJK UNIFIED IDEOGRAPH + {0x9C5C, 0x6DFA}, //5159 #CJK UNIFIED IDEOGRAPH + {0x9C5D, 0x6DFD}, //5160 #CJK UNIFIED IDEOGRAPH + {0x9C5E, 0x6DFE}, //5161 #CJK UNIFIED IDEOGRAPH + {0x9C5F, 0x6DFF}, //5162 #CJK UNIFIED IDEOGRAPH + {0x9C60, 0x6E00}, //5163 #CJK UNIFIED IDEOGRAPH + {0x9C61, 0x6E01}, //5164 #CJK UNIFIED IDEOGRAPH + {0x9C62, 0x6E02}, //5165 #CJK UNIFIED IDEOGRAPH + {0x9C63, 0x6E03}, //5166 #CJK UNIFIED IDEOGRAPH + {0x9C64, 0x6E04}, //5167 #CJK UNIFIED IDEOGRAPH + {0x9C65, 0x6E06}, //5168 #CJK UNIFIED IDEOGRAPH + {0x9C66, 0x6E07}, //5169 #CJK UNIFIED IDEOGRAPH + {0x9C67, 0x6E08}, //5170 #CJK UNIFIED IDEOGRAPH + {0x9C68, 0x6E09}, //5171 #CJK UNIFIED IDEOGRAPH + {0x9C69, 0x6E0B}, //5172 #CJK UNIFIED IDEOGRAPH + {0x9C6A, 0x6E0F}, //5173 #CJK UNIFIED IDEOGRAPH + {0x9C6B, 0x6E12}, //5174 #CJK UNIFIED IDEOGRAPH + {0x9C6C, 0x6E13}, //5175 #CJK UNIFIED IDEOGRAPH + {0x9C6D, 0x6E15}, //5176 #CJK UNIFIED IDEOGRAPH + {0x9C6E, 0x6E18}, //5177 #CJK UNIFIED IDEOGRAPH + {0x9C6F, 0x6E19}, //5178 #CJK UNIFIED IDEOGRAPH + {0x9C70, 0x6E1B}, //5179 #CJK UNIFIED IDEOGRAPH + {0x9C71, 0x6E1C}, //5180 #CJK UNIFIED IDEOGRAPH + {0x9C72, 0x6E1E}, //5181 #CJK UNIFIED IDEOGRAPH + {0x9C73, 0x6E1F}, //5182 #CJK UNIFIED IDEOGRAPH + {0x9C74, 0x6E22}, //5183 #CJK UNIFIED IDEOGRAPH + {0x9C75, 0x6E26}, //5184 #CJK UNIFIED IDEOGRAPH + {0x9C76, 0x6E27}, //5185 #CJK UNIFIED IDEOGRAPH + {0x9C77, 0x6E28}, //5186 #CJK UNIFIED IDEOGRAPH + {0x9C78, 0x6E2A}, //5187 #CJK UNIFIED IDEOGRAPH + {0x9C79, 0x6E2C}, //5188 #CJK UNIFIED IDEOGRAPH + {0x9C7A, 0x6E2E}, //5189 #CJK UNIFIED IDEOGRAPH + {0x9C7B, 0x6E30}, //5190 #CJK UNIFIED IDEOGRAPH + {0x9C7C, 0x6E31}, //5191 #CJK UNIFIED IDEOGRAPH + {0x9C7D, 0x6E33}, //5192 #CJK UNIFIED IDEOGRAPH + {0x9C7E, 0x6E35}, //5193 #CJK UNIFIED IDEOGRAPH + {0x9C80, 0x6E36}, //5194 #CJK UNIFIED IDEOGRAPH + {0x9C81, 0x6E37}, //5195 #CJK UNIFIED IDEOGRAPH + {0x9C82, 0x6E39}, //5196 #CJK UNIFIED IDEOGRAPH + {0x9C83, 0x6E3B}, //5197 #CJK UNIFIED IDEOGRAPH + {0x9C84, 0x6E3C}, //5198 #CJK UNIFIED IDEOGRAPH + {0x9C85, 0x6E3D}, //5199 #CJK UNIFIED IDEOGRAPH + {0x9C86, 0x6E3E}, //5200 #CJK UNIFIED IDEOGRAPH + {0x9C87, 0x6E3F}, //5201 #CJK UNIFIED IDEOGRAPH + {0x9C88, 0x6E40}, //5202 #CJK UNIFIED IDEOGRAPH + {0x9C89, 0x6E41}, //5203 #CJK UNIFIED IDEOGRAPH + {0x9C8A, 0x6E42}, //5204 #CJK UNIFIED IDEOGRAPH + {0x9C8B, 0x6E45}, //5205 #CJK UNIFIED IDEOGRAPH + {0x9C8C, 0x6E46}, //5206 #CJK UNIFIED IDEOGRAPH + {0x9C8D, 0x6E47}, //5207 #CJK UNIFIED IDEOGRAPH + {0x9C8E, 0x6E48}, //5208 #CJK UNIFIED IDEOGRAPH + {0x9C8F, 0x6E49}, //5209 #CJK UNIFIED IDEOGRAPH + {0x9C90, 0x6E4A}, //5210 #CJK UNIFIED IDEOGRAPH + {0x9C91, 0x6E4B}, //5211 #CJK UNIFIED IDEOGRAPH + {0x9C92, 0x6E4C}, //5212 #CJK UNIFIED IDEOGRAPH + {0x9C93, 0x6E4F}, //5213 #CJK UNIFIED IDEOGRAPH + {0x9C94, 0x6E50}, //5214 #CJK UNIFIED IDEOGRAPH + {0x9C95, 0x6E51}, //5215 #CJK UNIFIED IDEOGRAPH + {0x9C96, 0x6E52}, //5216 #CJK UNIFIED IDEOGRAPH + {0x9C97, 0x6E55}, //5217 #CJK UNIFIED IDEOGRAPH + {0x9C98, 0x6E57}, //5218 #CJK UNIFIED IDEOGRAPH + {0x9C99, 0x6E59}, //5219 #CJK UNIFIED IDEOGRAPH + {0x9C9A, 0x6E5A}, //5220 #CJK UNIFIED IDEOGRAPH + {0x9C9B, 0x6E5C}, //5221 #CJK UNIFIED IDEOGRAPH + {0x9C9C, 0x6E5D}, //5222 #CJK UNIFIED IDEOGRAPH + {0x9C9D, 0x6E5E}, //5223 #CJK UNIFIED IDEOGRAPH + {0x9C9E, 0x6E60}, //5224 #CJK UNIFIED IDEOGRAPH + {0x9C9F, 0x6E61}, //5225 #CJK UNIFIED IDEOGRAPH + {0x9CA0, 0x6E62}, //5226 #CJK UNIFIED IDEOGRAPH + {0x9CA1, 0x6E63}, //5227 #CJK UNIFIED IDEOGRAPH + {0x9CA2, 0x6E64}, //5228 #CJK UNIFIED IDEOGRAPH + {0x9CA3, 0x6E65}, //5229 #CJK UNIFIED IDEOGRAPH + {0x9CA4, 0x6E66}, //5230 #CJK UNIFIED IDEOGRAPH + {0x9CA5, 0x6E67}, //5231 #CJK UNIFIED IDEOGRAPH + {0x9CA6, 0x6E68}, //5232 #CJK UNIFIED IDEOGRAPH + {0x9CA7, 0x6E69}, //5233 #CJK UNIFIED IDEOGRAPH + {0x9CA8, 0x6E6A}, //5234 #CJK UNIFIED IDEOGRAPH + {0x9CA9, 0x6E6C}, //5235 #CJK UNIFIED IDEOGRAPH + {0x9CAA, 0x6E6D}, //5236 #CJK UNIFIED IDEOGRAPH + {0x9CAB, 0x6E6F}, //5237 #CJK UNIFIED IDEOGRAPH + {0x9CAC, 0x6E70}, //5238 #CJK UNIFIED IDEOGRAPH + {0x9CAD, 0x6E71}, //5239 #CJK UNIFIED IDEOGRAPH + {0x9CAE, 0x6E72}, //5240 #CJK UNIFIED IDEOGRAPH + {0x9CAF, 0x6E73}, //5241 #CJK UNIFIED IDEOGRAPH + {0x9CB0, 0x6E74}, //5242 #CJK UNIFIED IDEOGRAPH + {0x9CB1, 0x6E75}, //5243 #CJK UNIFIED IDEOGRAPH + {0x9CB2, 0x6E76}, //5244 #CJK UNIFIED IDEOGRAPH + {0x9CB3, 0x6E77}, //5245 #CJK UNIFIED IDEOGRAPH + {0x9CB4, 0x6E78}, //5246 #CJK UNIFIED IDEOGRAPH + {0x9CB5, 0x6E79}, //5247 #CJK UNIFIED IDEOGRAPH + {0x9CB6, 0x6E7A}, //5248 #CJK UNIFIED IDEOGRAPH + {0x9CB7, 0x6E7B}, //5249 #CJK UNIFIED IDEOGRAPH + {0x9CB8, 0x6E7C}, //5250 #CJK UNIFIED IDEOGRAPH + {0x9CB9, 0x6E7D}, //5251 #CJK UNIFIED IDEOGRAPH + {0x9CBA, 0x6E80}, //5252 #CJK UNIFIED IDEOGRAPH + {0x9CBB, 0x6E81}, //5253 #CJK UNIFIED IDEOGRAPH + {0x9CBC, 0x6E82}, //5254 #CJK UNIFIED IDEOGRAPH + {0x9CBD, 0x6E84}, //5255 #CJK UNIFIED IDEOGRAPH + {0x9CBE, 0x6E87}, //5256 #CJK UNIFIED IDEOGRAPH + {0x9CBF, 0x6E88}, //5257 #CJK UNIFIED IDEOGRAPH + {0x9CC0, 0x6E8A}, //5258 #CJK UNIFIED IDEOGRAPH + {0x9CC1, 0x6E8B}, //5259 #CJK UNIFIED IDEOGRAPH + {0x9CC2, 0x6E8C}, //5260 #CJK UNIFIED IDEOGRAPH + {0x9CC3, 0x6E8D}, //5261 #CJK UNIFIED IDEOGRAPH + {0x9CC4, 0x6E8E}, //5262 #CJK UNIFIED IDEOGRAPH + {0x9CC5, 0x6E91}, //5263 #CJK UNIFIED IDEOGRAPH + {0x9CC6, 0x6E92}, //5264 #CJK UNIFIED IDEOGRAPH + {0x9CC7, 0x6E93}, //5265 #CJK UNIFIED IDEOGRAPH + {0x9CC8, 0x6E94}, //5266 #CJK UNIFIED IDEOGRAPH + {0x9CC9, 0x6E95}, //5267 #CJK UNIFIED IDEOGRAPH + {0x9CCA, 0x6E96}, //5268 #CJK UNIFIED IDEOGRAPH + {0x9CCB, 0x6E97}, //5269 #CJK UNIFIED IDEOGRAPH + {0x9CCC, 0x6E99}, //5270 #CJK UNIFIED IDEOGRAPH + {0x9CCD, 0x6E9A}, //5271 #CJK UNIFIED IDEOGRAPH + {0x9CCE, 0x6E9B}, //5272 #CJK UNIFIED IDEOGRAPH + {0x9CCF, 0x6E9D}, //5273 #CJK UNIFIED IDEOGRAPH + {0x9CD0, 0x6E9E}, //5274 #CJK UNIFIED IDEOGRAPH + {0x9CD1, 0x6EA0}, //5275 #CJK UNIFIED IDEOGRAPH + {0x9CD2, 0x6EA1}, //5276 #CJK UNIFIED IDEOGRAPH + {0x9CD3, 0x6EA3}, //5277 #CJK UNIFIED IDEOGRAPH + {0x9CD4, 0x6EA4}, //5278 #CJK UNIFIED IDEOGRAPH + {0x9CD5, 0x6EA6}, //5279 #CJK UNIFIED IDEOGRAPH + {0x9CD6, 0x6EA8}, //5280 #CJK UNIFIED IDEOGRAPH + {0x9CD7, 0x6EA9}, //5281 #CJK UNIFIED IDEOGRAPH + {0x9CD8, 0x6EAB}, //5282 #CJK UNIFIED IDEOGRAPH + {0x9CD9, 0x6EAC}, //5283 #CJK UNIFIED IDEOGRAPH + {0x9CDA, 0x6EAD}, //5284 #CJK UNIFIED IDEOGRAPH + {0x9CDB, 0x6EAE}, //5285 #CJK UNIFIED IDEOGRAPH + {0x9CDC, 0x6EB0}, //5286 #CJK UNIFIED IDEOGRAPH + {0x9CDD, 0x6EB3}, //5287 #CJK UNIFIED IDEOGRAPH + {0x9CDE, 0x6EB5}, //5288 #CJK UNIFIED IDEOGRAPH + {0x9CDF, 0x6EB8}, //5289 #CJK UNIFIED IDEOGRAPH + {0x9CE0, 0x6EB9}, //5290 #CJK UNIFIED IDEOGRAPH + {0x9CE1, 0x6EBC}, //5291 #CJK UNIFIED IDEOGRAPH + {0x9CE2, 0x6EBE}, //5292 #CJK UNIFIED IDEOGRAPH + {0x9CE3, 0x6EBF}, //5293 #CJK UNIFIED IDEOGRAPH + {0x9CE4, 0x6EC0}, //5294 #CJK UNIFIED IDEOGRAPH + {0x9CE5, 0x6EC3}, //5295 #CJK UNIFIED IDEOGRAPH + {0x9CE6, 0x6EC4}, //5296 #CJK UNIFIED IDEOGRAPH + {0x9CE7, 0x6EC5}, //5297 #CJK UNIFIED IDEOGRAPH + {0x9CE8, 0x6EC6}, //5298 #CJK UNIFIED IDEOGRAPH + {0x9CE9, 0x6EC8}, //5299 #CJK UNIFIED IDEOGRAPH + {0x9CEA, 0x6EC9}, //5300 #CJK UNIFIED IDEOGRAPH + {0x9CEB, 0x6ECA}, //5301 #CJK UNIFIED IDEOGRAPH + {0x9CEC, 0x6ECC}, //5302 #CJK UNIFIED IDEOGRAPH + {0x9CED, 0x6ECD}, //5303 #CJK UNIFIED IDEOGRAPH + {0x9CEE, 0x6ECE}, //5304 #CJK UNIFIED IDEOGRAPH + {0x9CEF, 0x6ED0}, //5305 #CJK UNIFIED IDEOGRAPH + {0x9CF0, 0x6ED2}, //5306 #CJK UNIFIED IDEOGRAPH + {0x9CF1, 0x6ED6}, //5307 #CJK UNIFIED IDEOGRAPH + {0x9CF2, 0x6ED8}, //5308 #CJK UNIFIED IDEOGRAPH + {0x9CF3, 0x6ED9}, //5309 #CJK UNIFIED IDEOGRAPH + {0x9CF4, 0x6EDB}, //5310 #CJK UNIFIED IDEOGRAPH + {0x9CF5, 0x6EDC}, //5311 #CJK UNIFIED IDEOGRAPH + {0x9CF6, 0x6EDD}, //5312 #CJK UNIFIED IDEOGRAPH + {0x9CF7, 0x6EE3}, //5313 #CJK UNIFIED IDEOGRAPH + {0x9CF8, 0x6EE7}, //5314 #CJK UNIFIED IDEOGRAPH + {0x9CF9, 0x6EEA}, //5315 #CJK UNIFIED IDEOGRAPH + {0x9CFA, 0x6EEB}, //5316 #CJK UNIFIED IDEOGRAPH + {0x9CFB, 0x6EEC}, //5317 #CJK UNIFIED IDEOGRAPH + {0x9CFC, 0x6EED}, //5318 #CJK UNIFIED IDEOGRAPH + {0x9CFD, 0x6EEE}, //5319 #CJK UNIFIED IDEOGRAPH + {0x9CFE, 0x6EEF}, //5320 #CJK UNIFIED IDEOGRAPH + {0x9D40, 0x6EF0}, //5321 #CJK UNIFIED IDEOGRAPH + {0x9D41, 0x6EF1}, //5322 #CJK UNIFIED IDEOGRAPH + {0x9D42, 0x6EF2}, //5323 #CJK UNIFIED IDEOGRAPH + {0x9D43, 0x6EF3}, //5324 #CJK UNIFIED IDEOGRAPH + {0x9D44, 0x6EF5}, //5325 #CJK UNIFIED IDEOGRAPH + {0x9D45, 0x6EF6}, //5326 #CJK UNIFIED IDEOGRAPH + {0x9D46, 0x6EF7}, //5327 #CJK UNIFIED IDEOGRAPH + {0x9D47, 0x6EF8}, //5328 #CJK UNIFIED IDEOGRAPH + {0x9D48, 0x6EFA}, //5329 #CJK UNIFIED IDEOGRAPH + {0x9D49, 0x6EFB}, //5330 #CJK UNIFIED IDEOGRAPH + {0x9D4A, 0x6EFC}, //5331 #CJK UNIFIED IDEOGRAPH + {0x9D4B, 0x6EFD}, //5332 #CJK UNIFIED IDEOGRAPH + {0x9D4C, 0x6EFE}, //5333 #CJK UNIFIED IDEOGRAPH + {0x9D4D, 0x6EFF}, //5334 #CJK UNIFIED IDEOGRAPH + {0x9D4E, 0x6F00}, //5335 #CJK UNIFIED IDEOGRAPH + {0x9D4F, 0x6F01}, //5336 #CJK UNIFIED IDEOGRAPH + {0x9D50, 0x6F03}, //5337 #CJK UNIFIED IDEOGRAPH + {0x9D51, 0x6F04}, //5338 #CJK UNIFIED IDEOGRAPH + {0x9D52, 0x6F05}, //5339 #CJK UNIFIED IDEOGRAPH + {0x9D53, 0x6F07}, //5340 #CJK UNIFIED IDEOGRAPH + {0x9D54, 0x6F08}, //5341 #CJK UNIFIED IDEOGRAPH + {0x9D55, 0x6F0A}, //5342 #CJK UNIFIED IDEOGRAPH + {0x9D56, 0x6F0B}, //5343 #CJK UNIFIED IDEOGRAPH + {0x9D57, 0x6F0C}, //5344 #CJK UNIFIED IDEOGRAPH + {0x9D58, 0x6F0D}, //5345 #CJK UNIFIED IDEOGRAPH + {0x9D59, 0x6F0E}, //5346 #CJK UNIFIED IDEOGRAPH + {0x9D5A, 0x6F10}, //5347 #CJK UNIFIED IDEOGRAPH + {0x9D5B, 0x6F11}, //5348 #CJK UNIFIED IDEOGRAPH + {0x9D5C, 0x6F12}, //5349 #CJK UNIFIED IDEOGRAPH + {0x9D5D, 0x6F16}, //5350 #CJK UNIFIED IDEOGRAPH + {0x9D5E, 0x6F17}, //5351 #CJK UNIFIED IDEOGRAPH + {0x9D5F, 0x6F18}, //5352 #CJK UNIFIED IDEOGRAPH + {0x9D60, 0x6F19}, //5353 #CJK UNIFIED IDEOGRAPH + {0x9D61, 0x6F1A}, //5354 #CJK UNIFIED IDEOGRAPH + {0x9D62, 0x6F1B}, //5355 #CJK UNIFIED IDEOGRAPH + {0x9D63, 0x6F1C}, //5356 #CJK UNIFIED IDEOGRAPH + {0x9D64, 0x6F1D}, //5357 #CJK UNIFIED IDEOGRAPH + {0x9D65, 0x6F1E}, //5358 #CJK UNIFIED IDEOGRAPH + {0x9D66, 0x6F1F}, //5359 #CJK UNIFIED IDEOGRAPH + {0x9D67, 0x6F21}, //5360 #CJK UNIFIED IDEOGRAPH + {0x9D68, 0x6F22}, //5361 #CJK UNIFIED IDEOGRAPH + {0x9D69, 0x6F23}, //5362 #CJK UNIFIED IDEOGRAPH + {0x9D6A, 0x6F25}, //5363 #CJK UNIFIED IDEOGRAPH + {0x9D6B, 0x6F26}, //5364 #CJK UNIFIED IDEOGRAPH + {0x9D6C, 0x6F27}, //5365 #CJK UNIFIED IDEOGRAPH + {0x9D6D, 0x6F28}, //5366 #CJK UNIFIED IDEOGRAPH + {0x9D6E, 0x6F2C}, //5367 #CJK UNIFIED IDEOGRAPH + {0x9D6F, 0x6F2E}, //5368 #CJK UNIFIED IDEOGRAPH + {0x9D70, 0x6F30}, //5369 #CJK UNIFIED IDEOGRAPH + {0x9D71, 0x6F32}, //5370 #CJK UNIFIED IDEOGRAPH + {0x9D72, 0x6F34}, //5371 #CJK UNIFIED IDEOGRAPH + {0x9D73, 0x6F35}, //5372 #CJK UNIFIED IDEOGRAPH + {0x9D74, 0x6F37}, //5373 #CJK UNIFIED IDEOGRAPH + {0x9D75, 0x6F38}, //5374 #CJK UNIFIED IDEOGRAPH + {0x9D76, 0x6F39}, //5375 #CJK UNIFIED IDEOGRAPH + {0x9D77, 0x6F3A}, //5376 #CJK UNIFIED IDEOGRAPH + {0x9D78, 0x6F3B}, //5377 #CJK UNIFIED IDEOGRAPH + {0x9D79, 0x6F3C}, //5378 #CJK UNIFIED IDEOGRAPH + {0x9D7A, 0x6F3D}, //5379 #CJK UNIFIED IDEOGRAPH + {0x9D7B, 0x6F3F}, //5380 #CJK UNIFIED IDEOGRAPH + {0x9D7C, 0x6F40}, //5381 #CJK UNIFIED IDEOGRAPH + {0x9D7D, 0x6F41}, //5382 #CJK UNIFIED IDEOGRAPH + {0x9D7E, 0x6F42}, //5383 #CJK UNIFIED IDEOGRAPH + {0x9D80, 0x6F43}, //5384 #CJK UNIFIED IDEOGRAPH + {0x9D81, 0x6F44}, //5385 #CJK UNIFIED IDEOGRAPH + {0x9D82, 0x6F45}, //5386 #CJK UNIFIED IDEOGRAPH + {0x9D83, 0x6F48}, //5387 #CJK UNIFIED IDEOGRAPH + {0x9D84, 0x6F49}, //5388 #CJK UNIFIED IDEOGRAPH + {0x9D85, 0x6F4A}, //5389 #CJK UNIFIED IDEOGRAPH + {0x9D86, 0x6F4C}, //5390 #CJK UNIFIED IDEOGRAPH + {0x9D87, 0x6F4E}, //5391 #CJK UNIFIED IDEOGRAPH + {0x9D88, 0x6F4F}, //5392 #CJK UNIFIED IDEOGRAPH + {0x9D89, 0x6F50}, //5393 #CJK UNIFIED IDEOGRAPH + {0x9D8A, 0x6F51}, //5394 #CJK UNIFIED IDEOGRAPH + {0x9D8B, 0x6F52}, //5395 #CJK UNIFIED IDEOGRAPH + {0x9D8C, 0x6F53}, //5396 #CJK UNIFIED IDEOGRAPH + {0x9D8D, 0x6F54}, //5397 #CJK UNIFIED IDEOGRAPH + {0x9D8E, 0x6F55}, //5398 #CJK UNIFIED IDEOGRAPH + {0x9D8F, 0x6F56}, //5399 #CJK UNIFIED IDEOGRAPH + {0x9D90, 0x6F57}, //5400 #CJK UNIFIED IDEOGRAPH + {0x9D91, 0x6F59}, //5401 #CJK UNIFIED IDEOGRAPH + {0x9D92, 0x6F5A}, //5402 #CJK UNIFIED IDEOGRAPH + {0x9D93, 0x6F5B}, //5403 #CJK UNIFIED IDEOGRAPH + {0x9D94, 0x6F5D}, //5404 #CJK UNIFIED IDEOGRAPH + {0x9D95, 0x6F5F}, //5405 #CJK UNIFIED IDEOGRAPH + {0x9D96, 0x6F60}, //5406 #CJK UNIFIED IDEOGRAPH + {0x9D97, 0x6F61}, //5407 #CJK UNIFIED IDEOGRAPH + {0x9D98, 0x6F63}, //5408 #CJK UNIFIED IDEOGRAPH + {0x9D99, 0x6F64}, //5409 #CJK UNIFIED IDEOGRAPH + {0x9D9A, 0x6F65}, //5410 #CJK UNIFIED IDEOGRAPH + {0x9D9B, 0x6F67}, //5411 #CJK UNIFIED IDEOGRAPH + {0x9D9C, 0x6F68}, //5412 #CJK UNIFIED IDEOGRAPH + {0x9D9D, 0x6F69}, //5413 #CJK UNIFIED IDEOGRAPH + {0x9D9E, 0x6F6A}, //5414 #CJK UNIFIED IDEOGRAPH + {0x9D9F, 0x6F6B}, //5415 #CJK UNIFIED IDEOGRAPH + {0x9DA0, 0x6F6C}, //5416 #CJK UNIFIED IDEOGRAPH + {0x9DA1, 0x6F6F}, //5417 #CJK UNIFIED IDEOGRAPH + {0x9DA2, 0x6F70}, //5418 #CJK UNIFIED IDEOGRAPH + {0x9DA3, 0x6F71}, //5419 #CJK UNIFIED IDEOGRAPH + {0x9DA4, 0x6F73}, //5420 #CJK UNIFIED IDEOGRAPH + {0x9DA5, 0x6F75}, //5421 #CJK UNIFIED IDEOGRAPH + {0x9DA6, 0x6F76}, //5422 #CJK UNIFIED IDEOGRAPH + {0x9DA7, 0x6F77}, //5423 #CJK UNIFIED IDEOGRAPH + {0x9DA8, 0x6F79}, //5424 #CJK UNIFIED IDEOGRAPH + {0x9DA9, 0x6F7B}, //5425 #CJK UNIFIED IDEOGRAPH + {0x9DAA, 0x6F7D}, //5426 #CJK UNIFIED IDEOGRAPH + {0x9DAB, 0x6F7E}, //5427 #CJK UNIFIED IDEOGRAPH + {0x9DAC, 0x6F7F}, //5428 #CJK UNIFIED IDEOGRAPH + {0x9DAD, 0x6F80}, //5429 #CJK UNIFIED IDEOGRAPH + {0x9DAE, 0x6F81}, //5430 #CJK UNIFIED IDEOGRAPH + {0x9DAF, 0x6F82}, //5431 #CJK UNIFIED IDEOGRAPH + {0x9DB0, 0x6F83}, //5432 #CJK UNIFIED IDEOGRAPH + {0x9DB1, 0x6F85}, //5433 #CJK UNIFIED IDEOGRAPH + {0x9DB2, 0x6F86}, //5434 #CJK UNIFIED IDEOGRAPH + {0x9DB3, 0x6F87}, //5435 #CJK UNIFIED IDEOGRAPH + {0x9DB4, 0x6F8A}, //5436 #CJK UNIFIED IDEOGRAPH + {0x9DB5, 0x6F8B}, //5437 #CJK UNIFIED IDEOGRAPH + {0x9DB6, 0x6F8F}, //5438 #CJK UNIFIED IDEOGRAPH + {0x9DB7, 0x6F90}, //5439 #CJK UNIFIED IDEOGRAPH + {0x9DB8, 0x6F91}, //5440 #CJK UNIFIED IDEOGRAPH + {0x9DB9, 0x6F92}, //5441 #CJK UNIFIED IDEOGRAPH + {0x9DBA, 0x6F93}, //5442 #CJK UNIFIED IDEOGRAPH + {0x9DBB, 0x6F94}, //5443 #CJK UNIFIED IDEOGRAPH + {0x9DBC, 0x6F95}, //5444 #CJK UNIFIED IDEOGRAPH + {0x9DBD, 0x6F96}, //5445 #CJK UNIFIED IDEOGRAPH + {0x9DBE, 0x6F97}, //5446 #CJK UNIFIED IDEOGRAPH + {0x9DBF, 0x6F98}, //5447 #CJK UNIFIED IDEOGRAPH + {0x9DC0, 0x6F99}, //5448 #CJK UNIFIED IDEOGRAPH + {0x9DC1, 0x6F9A}, //5449 #CJK UNIFIED IDEOGRAPH + {0x9DC2, 0x6F9B}, //5450 #CJK UNIFIED IDEOGRAPH + {0x9DC3, 0x6F9D}, //5451 #CJK UNIFIED IDEOGRAPH + {0x9DC4, 0x6F9E}, //5452 #CJK UNIFIED IDEOGRAPH + {0x9DC5, 0x6F9F}, //5453 #CJK UNIFIED IDEOGRAPH + {0x9DC6, 0x6FA0}, //5454 #CJK UNIFIED IDEOGRAPH + {0x9DC7, 0x6FA2}, //5455 #CJK UNIFIED IDEOGRAPH + {0x9DC8, 0x6FA3}, //5456 #CJK UNIFIED IDEOGRAPH + {0x9DC9, 0x6FA4}, //5457 #CJK UNIFIED IDEOGRAPH + {0x9DCA, 0x6FA5}, //5458 #CJK UNIFIED IDEOGRAPH + {0x9DCB, 0x6FA6}, //5459 #CJK UNIFIED IDEOGRAPH + {0x9DCC, 0x6FA8}, //5460 #CJK UNIFIED IDEOGRAPH + {0x9DCD, 0x6FA9}, //5461 #CJK UNIFIED IDEOGRAPH + {0x9DCE, 0x6FAA}, //5462 #CJK UNIFIED IDEOGRAPH + {0x9DCF, 0x6FAB}, //5463 #CJK UNIFIED IDEOGRAPH + {0x9DD0, 0x6FAC}, //5464 #CJK UNIFIED IDEOGRAPH + {0x9DD1, 0x6FAD}, //5465 #CJK UNIFIED IDEOGRAPH + {0x9DD2, 0x6FAE}, //5466 #CJK UNIFIED IDEOGRAPH + {0x9DD3, 0x6FAF}, //5467 #CJK UNIFIED IDEOGRAPH + {0x9DD4, 0x6FB0}, //5468 #CJK UNIFIED IDEOGRAPH + {0x9DD5, 0x6FB1}, //5469 #CJK UNIFIED IDEOGRAPH + {0x9DD6, 0x6FB2}, //5470 #CJK UNIFIED IDEOGRAPH + {0x9DD7, 0x6FB4}, //5471 #CJK UNIFIED IDEOGRAPH + {0x9DD8, 0x6FB5}, //5472 #CJK UNIFIED IDEOGRAPH + {0x9DD9, 0x6FB7}, //5473 #CJK UNIFIED IDEOGRAPH + {0x9DDA, 0x6FB8}, //5474 #CJK UNIFIED IDEOGRAPH + {0x9DDB, 0x6FBA}, //5475 #CJK UNIFIED IDEOGRAPH + {0x9DDC, 0x6FBB}, //5476 #CJK UNIFIED IDEOGRAPH + {0x9DDD, 0x6FBC}, //5477 #CJK UNIFIED IDEOGRAPH + {0x9DDE, 0x6FBD}, //5478 #CJK UNIFIED IDEOGRAPH + {0x9DDF, 0x6FBE}, //5479 #CJK UNIFIED IDEOGRAPH + {0x9DE0, 0x6FBF}, //5480 #CJK UNIFIED IDEOGRAPH + {0x9DE1, 0x6FC1}, //5481 #CJK UNIFIED IDEOGRAPH + {0x9DE2, 0x6FC3}, //5482 #CJK UNIFIED IDEOGRAPH + {0x9DE3, 0x6FC4}, //5483 #CJK UNIFIED IDEOGRAPH + {0x9DE4, 0x6FC5}, //5484 #CJK UNIFIED IDEOGRAPH + {0x9DE5, 0x6FC6}, //5485 #CJK UNIFIED IDEOGRAPH + {0x9DE6, 0x6FC7}, //5486 #CJK UNIFIED IDEOGRAPH + {0x9DE7, 0x6FC8}, //5487 #CJK UNIFIED IDEOGRAPH + {0x9DE8, 0x6FCA}, //5488 #CJK UNIFIED IDEOGRAPH + {0x9DE9, 0x6FCB}, //5489 #CJK UNIFIED IDEOGRAPH + {0x9DEA, 0x6FCC}, //5490 #CJK UNIFIED IDEOGRAPH + {0x9DEB, 0x6FCD}, //5491 #CJK UNIFIED IDEOGRAPH + {0x9DEC, 0x6FCE}, //5492 #CJK UNIFIED IDEOGRAPH + {0x9DED, 0x6FCF}, //5493 #CJK UNIFIED IDEOGRAPH + {0x9DEE, 0x6FD0}, //5494 #CJK UNIFIED IDEOGRAPH + {0x9DEF, 0x6FD3}, //5495 #CJK UNIFIED IDEOGRAPH + {0x9DF0, 0x6FD4}, //5496 #CJK UNIFIED IDEOGRAPH + {0x9DF1, 0x6FD5}, //5497 #CJK UNIFIED IDEOGRAPH + {0x9DF2, 0x6FD6}, //5498 #CJK UNIFIED IDEOGRAPH + {0x9DF3, 0x6FD7}, //5499 #CJK UNIFIED IDEOGRAPH + {0x9DF4, 0x6FD8}, //5500 #CJK UNIFIED IDEOGRAPH + {0x9DF5, 0x6FD9}, //5501 #CJK UNIFIED IDEOGRAPH + {0x9DF6, 0x6FDA}, //5502 #CJK UNIFIED IDEOGRAPH + {0x9DF7, 0x6FDB}, //5503 #CJK UNIFIED IDEOGRAPH + {0x9DF8, 0x6FDC}, //5504 #CJK UNIFIED IDEOGRAPH + {0x9DF9, 0x6FDD}, //5505 #CJK UNIFIED IDEOGRAPH + {0x9DFA, 0x6FDF}, //5506 #CJK UNIFIED IDEOGRAPH + {0x9DFB, 0x6FE2}, //5507 #CJK UNIFIED IDEOGRAPH + {0x9DFC, 0x6FE3}, //5508 #CJK UNIFIED IDEOGRAPH + {0x9DFD, 0x6FE4}, //5509 #CJK UNIFIED IDEOGRAPH + {0x9DFE, 0x6FE5}, //5510 #CJK UNIFIED IDEOGRAPH + {0x9E40, 0x6FE6}, //5511 #CJK UNIFIED IDEOGRAPH + {0x9E41, 0x6FE7}, //5512 #CJK UNIFIED IDEOGRAPH + {0x9E42, 0x6FE8}, //5513 #CJK UNIFIED IDEOGRAPH + {0x9E43, 0x6FE9}, //5514 #CJK UNIFIED IDEOGRAPH + {0x9E44, 0x6FEA}, //5515 #CJK UNIFIED IDEOGRAPH + {0x9E45, 0x6FEB}, //5516 #CJK UNIFIED IDEOGRAPH + {0x9E46, 0x6FEC}, //5517 #CJK UNIFIED IDEOGRAPH + {0x9E47, 0x6FED}, //5518 #CJK UNIFIED IDEOGRAPH + {0x9E48, 0x6FF0}, //5519 #CJK UNIFIED IDEOGRAPH + {0x9E49, 0x6FF1}, //5520 #CJK UNIFIED IDEOGRAPH + {0x9E4A, 0x6FF2}, //5521 #CJK UNIFIED IDEOGRAPH + {0x9E4B, 0x6FF3}, //5522 #CJK UNIFIED IDEOGRAPH + {0x9E4C, 0x6FF4}, //5523 #CJK UNIFIED IDEOGRAPH + {0x9E4D, 0x6FF5}, //5524 #CJK UNIFIED IDEOGRAPH + {0x9E4E, 0x6FF6}, //5525 #CJK UNIFIED IDEOGRAPH + {0x9E4F, 0x6FF7}, //5526 #CJK UNIFIED IDEOGRAPH + {0x9E50, 0x6FF8}, //5527 #CJK UNIFIED IDEOGRAPH + {0x9E51, 0x6FF9}, //5528 #CJK UNIFIED IDEOGRAPH + {0x9E52, 0x6FFA}, //5529 #CJK UNIFIED IDEOGRAPH + {0x9E53, 0x6FFB}, //5530 #CJK UNIFIED IDEOGRAPH + {0x9E54, 0x6FFC}, //5531 #CJK UNIFIED IDEOGRAPH + {0x9E55, 0x6FFD}, //5532 #CJK UNIFIED IDEOGRAPH + {0x9E56, 0x6FFE}, //5533 #CJK UNIFIED IDEOGRAPH + {0x9E57, 0x6FFF}, //5534 #CJK UNIFIED IDEOGRAPH + {0x9E58, 0x7000}, //5535 #CJK UNIFIED IDEOGRAPH + {0x9E59, 0x7001}, //5536 #CJK UNIFIED IDEOGRAPH + {0x9E5A, 0x7002}, //5537 #CJK UNIFIED IDEOGRAPH + {0x9E5B, 0x7003}, //5538 #CJK UNIFIED IDEOGRAPH + {0x9E5C, 0x7004}, //5539 #CJK UNIFIED IDEOGRAPH + {0x9E5D, 0x7005}, //5540 #CJK UNIFIED IDEOGRAPH + {0x9E5E, 0x7006}, //5541 #CJK UNIFIED IDEOGRAPH + {0x9E5F, 0x7007}, //5542 #CJK UNIFIED IDEOGRAPH + {0x9E60, 0x7008}, //5543 #CJK UNIFIED IDEOGRAPH + {0x9E61, 0x7009}, //5544 #CJK UNIFIED IDEOGRAPH + {0x9E62, 0x700A}, //5545 #CJK UNIFIED IDEOGRAPH + {0x9E63, 0x700B}, //5546 #CJK UNIFIED IDEOGRAPH + {0x9E64, 0x700C}, //5547 #CJK UNIFIED IDEOGRAPH + {0x9E65, 0x700D}, //5548 #CJK UNIFIED IDEOGRAPH + {0x9E66, 0x700E}, //5549 #CJK UNIFIED IDEOGRAPH + {0x9E67, 0x700F}, //5550 #CJK UNIFIED IDEOGRAPH + {0x9E68, 0x7010}, //5551 #CJK UNIFIED IDEOGRAPH + {0x9E69, 0x7012}, //5552 #CJK UNIFIED IDEOGRAPH + {0x9E6A, 0x7013}, //5553 #CJK UNIFIED IDEOGRAPH + {0x9E6B, 0x7014}, //5554 #CJK UNIFIED IDEOGRAPH + {0x9E6C, 0x7015}, //5555 #CJK UNIFIED IDEOGRAPH + {0x9E6D, 0x7016}, //5556 #CJK UNIFIED IDEOGRAPH + {0x9E6E, 0x7017}, //5557 #CJK UNIFIED IDEOGRAPH + {0x9E6F, 0x7018}, //5558 #CJK UNIFIED IDEOGRAPH + {0x9E70, 0x7019}, //5559 #CJK UNIFIED IDEOGRAPH + {0x9E71, 0x701C}, //5560 #CJK UNIFIED IDEOGRAPH + {0x9E72, 0x701D}, //5561 #CJK UNIFIED IDEOGRAPH + {0x9E73, 0x701E}, //5562 #CJK UNIFIED IDEOGRAPH + {0x9E74, 0x701F}, //5563 #CJK UNIFIED IDEOGRAPH + {0x9E75, 0x7020}, //5564 #CJK UNIFIED IDEOGRAPH + {0x9E76, 0x7021}, //5565 #CJK UNIFIED IDEOGRAPH + {0x9E77, 0x7022}, //5566 #CJK UNIFIED IDEOGRAPH + {0x9E78, 0x7024}, //5567 #CJK UNIFIED IDEOGRAPH + {0x9E79, 0x7025}, //5568 #CJK UNIFIED IDEOGRAPH + {0x9E7A, 0x7026}, //5569 #CJK UNIFIED IDEOGRAPH + {0x9E7B, 0x7027}, //5570 #CJK UNIFIED IDEOGRAPH + {0x9E7C, 0x7028}, //5571 #CJK UNIFIED IDEOGRAPH + {0x9E7D, 0x7029}, //5572 #CJK UNIFIED IDEOGRAPH + {0x9E7E, 0x702A}, //5573 #CJK UNIFIED IDEOGRAPH + {0x9E80, 0x702B}, //5574 #CJK UNIFIED IDEOGRAPH + {0x9E81, 0x702C}, //5575 #CJK UNIFIED IDEOGRAPH + {0x9E82, 0x702D}, //5576 #CJK UNIFIED IDEOGRAPH + {0x9E83, 0x702E}, //5577 #CJK UNIFIED IDEOGRAPH + {0x9E84, 0x702F}, //5578 #CJK UNIFIED IDEOGRAPH + {0x9E85, 0x7030}, //5579 #CJK UNIFIED IDEOGRAPH + {0x9E86, 0x7031}, //5580 #CJK UNIFIED IDEOGRAPH + {0x9E87, 0x7032}, //5581 #CJK UNIFIED IDEOGRAPH + {0x9E88, 0x7033}, //5582 #CJK UNIFIED IDEOGRAPH + {0x9E89, 0x7034}, //5583 #CJK UNIFIED IDEOGRAPH + {0x9E8A, 0x7036}, //5584 #CJK UNIFIED IDEOGRAPH + {0x9E8B, 0x7037}, //5585 #CJK UNIFIED IDEOGRAPH + {0x9E8C, 0x7038}, //5586 #CJK UNIFIED IDEOGRAPH + {0x9E8D, 0x703A}, //5587 #CJK UNIFIED IDEOGRAPH + {0x9E8E, 0x703B}, //5588 #CJK UNIFIED IDEOGRAPH + {0x9E8F, 0x703C}, //5589 #CJK UNIFIED IDEOGRAPH + {0x9E90, 0x703D}, //5590 #CJK UNIFIED IDEOGRAPH + {0x9E91, 0x703E}, //5591 #CJK UNIFIED IDEOGRAPH + {0x9E92, 0x703F}, //5592 #CJK UNIFIED IDEOGRAPH + {0x9E93, 0x7040}, //5593 #CJK UNIFIED IDEOGRAPH + {0x9E94, 0x7041}, //5594 #CJK UNIFIED IDEOGRAPH + {0x9E95, 0x7042}, //5595 #CJK UNIFIED IDEOGRAPH + {0x9E96, 0x7043}, //5596 #CJK UNIFIED IDEOGRAPH + {0x9E97, 0x7044}, //5597 #CJK UNIFIED IDEOGRAPH + {0x9E98, 0x7045}, //5598 #CJK UNIFIED IDEOGRAPH + {0x9E99, 0x7046}, //5599 #CJK UNIFIED IDEOGRAPH + {0x9E9A, 0x7047}, //5600 #CJK UNIFIED IDEOGRAPH + {0x9E9B, 0x7048}, //5601 #CJK UNIFIED IDEOGRAPH + {0x9E9C, 0x7049}, //5602 #CJK UNIFIED IDEOGRAPH + {0x9E9D, 0x704A}, //5603 #CJK UNIFIED IDEOGRAPH + {0x9E9E, 0x704B}, //5604 #CJK UNIFIED IDEOGRAPH + {0x9E9F, 0x704D}, //5605 #CJK UNIFIED IDEOGRAPH + {0x9EA0, 0x704E}, //5606 #CJK UNIFIED IDEOGRAPH + {0x9EA1, 0x7050}, //5607 #CJK UNIFIED IDEOGRAPH + {0x9EA2, 0x7051}, //5608 #CJK UNIFIED IDEOGRAPH + {0x9EA3, 0x7052}, //5609 #CJK UNIFIED IDEOGRAPH + {0x9EA4, 0x7053}, //5610 #CJK UNIFIED IDEOGRAPH + {0x9EA5, 0x7054}, //5611 #CJK UNIFIED IDEOGRAPH + {0x9EA6, 0x7055}, //5612 #CJK UNIFIED IDEOGRAPH + {0x9EA7, 0x7056}, //5613 #CJK UNIFIED IDEOGRAPH + {0x9EA8, 0x7057}, //5614 #CJK UNIFIED IDEOGRAPH + {0x9EA9, 0x7058}, //5615 #CJK UNIFIED IDEOGRAPH + {0x9EAA, 0x7059}, //5616 #CJK UNIFIED IDEOGRAPH + {0x9EAB, 0x705A}, //5617 #CJK UNIFIED IDEOGRAPH + {0x9EAC, 0x705B}, //5618 #CJK UNIFIED IDEOGRAPH + {0x9EAD, 0x705C}, //5619 #CJK UNIFIED IDEOGRAPH + {0x9EAE, 0x705D}, //5620 #CJK UNIFIED IDEOGRAPH + {0x9EAF, 0x705F}, //5621 #CJK UNIFIED IDEOGRAPH + {0x9EB0, 0x7060}, //5622 #CJK UNIFIED IDEOGRAPH + {0x9EB1, 0x7061}, //5623 #CJK UNIFIED IDEOGRAPH + {0x9EB2, 0x7062}, //5624 #CJK UNIFIED IDEOGRAPH + {0x9EB3, 0x7063}, //5625 #CJK UNIFIED IDEOGRAPH + {0x9EB4, 0x7064}, //5626 #CJK UNIFIED IDEOGRAPH + {0x9EB5, 0x7065}, //5627 #CJK UNIFIED IDEOGRAPH + {0x9EB6, 0x7066}, //5628 #CJK UNIFIED IDEOGRAPH + {0x9EB7, 0x7067}, //5629 #CJK UNIFIED IDEOGRAPH + {0x9EB8, 0x7068}, //5630 #CJK UNIFIED IDEOGRAPH + {0x9EB9, 0x7069}, //5631 #CJK UNIFIED IDEOGRAPH + {0x9EBA, 0x706A}, //5632 #CJK UNIFIED IDEOGRAPH + {0x9EBB, 0x706E}, //5633 #CJK UNIFIED IDEOGRAPH + {0x9EBC, 0x7071}, //5634 #CJK UNIFIED IDEOGRAPH + {0x9EBD, 0x7072}, //5635 #CJK UNIFIED IDEOGRAPH + {0x9EBE, 0x7073}, //5636 #CJK UNIFIED IDEOGRAPH + {0x9EBF, 0x7074}, //5637 #CJK UNIFIED IDEOGRAPH + {0x9EC0, 0x7077}, //5638 #CJK UNIFIED IDEOGRAPH + {0x9EC1, 0x7079}, //5639 #CJK UNIFIED IDEOGRAPH + {0x9EC2, 0x707A}, //5640 #CJK UNIFIED IDEOGRAPH + {0x9EC3, 0x707B}, //5641 #CJK UNIFIED IDEOGRAPH + {0x9EC4, 0x707D}, //5642 #CJK UNIFIED IDEOGRAPH + {0x9EC5, 0x7081}, //5643 #CJK UNIFIED IDEOGRAPH + {0x9EC6, 0x7082}, //5644 #CJK UNIFIED IDEOGRAPH + {0x9EC7, 0x7083}, //5645 #CJK UNIFIED IDEOGRAPH + {0x9EC8, 0x7084}, //5646 #CJK UNIFIED IDEOGRAPH + {0x9EC9, 0x7086}, //5647 #CJK UNIFIED IDEOGRAPH + {0x9ECA, 0x7087}, //5648 #CJK UNIFIED IDEOGRAPH + {0x9ECB, 0x7088}, //5649 #CJK UNIFIED IDEOGRAPH + {0x9ECC, 0x708B}, //5650 #CJK UNIFIED IDEOGRAPH + {0x9ECD, 0x708C}, //5651 #CJK UNIFIED IDEOGRAPH + {0x9ECE, 0x708D}, //5652 #CJK UNIFIED IDEOGRAPH + {0x9ECF, 0x708F}, //5653 #CJK UNIFIED IDEOGRAPH + {0x9ED0, 0x7090}, //5654 #CJK UNIFIED IDEOGRAPH + {0x9ED1, 0x7091}, //5655 #CJK UNIFIED IDEOGRAPH + {0x9ED2, 0x7093}, //5656 #CJK UNIFIED IDEOGRAPH + {0x9ED3, 0x7097}, //5657 #CJK UNIFIED IDEOGRAPH + {0x9ED4, 0x7098}, //5658 #CJK UNIFIED IDEOGRAPH + {0x9ED5, 0x709A}, //5659 #CJK UNIFIED IDEOGRAPH + {0x9ED6, 0x709B}, //5660 #CJK UNIFIED IDEOGRAPH + {0x9ED7, 0x709E}, //5661 #CJK UNIFIED IDEOGRAPH + {0x9ED8, 0x709F}, //5662 #CJK UNIFIED IDEOGRAPH + {0x9ED9, 0x70A0}, //5663 #CJK UNIFIED IDEOGRAPH + {0x9EDA, 0x70A1}, //5664 #CJK UNIFIED IDEOGRAPH + {0x9EDB, 0x70A2}, //5665 #CJK UNIFIED IDEOGRAPH + {0x9EDC, 0x70A3}, //5666 #CJK UNIFIED IDEOGRAPH + {0x9EDD, 0x70A4}, //5667 #CJK UNIFIED IDEOGRAPH + {0x9EDE, 0x70A5}, //5668 #CJK UNIFIED IDEOGRAPH + {0x9EDF, 0x70A6}, //5669 #CJK UNIFIED IDEOGRAPH + {0x9EE0, 0x70A7}, //5670 #CJK UNIFIED IDEOGRAPH + {0x9EE1, 0x70A8}, //5671 #CJK UNIFIED IDEOGRAPH + {0x9EE2, 0x70A9}, //5672 #CJK UNIFIED IDEOGRAPH + {0x9EE3, 0x70AA}, //5673 #CJK UNIFIED IDEOGRAPH + {0x9EE4, 0x70B0}, //5674 #CJK UNIFIED IDEOGRAPH + {0x9EE5, 0x70B2}, //5675 #CJK UNIFIED IDEOGRAPH + {0x9EE6, 0x70B4}, //5676 #CJK UNIFIED IDEOGRAPH + {0x9EE7, 0x70B5}, //5677 #CJK UNIFIED IDEOGRAPH + {0x9EE8, 0x70B6}, //5678 #CJK UNIFIED IDEOGRAPH + {0x9EE9, 0x70BA}, //5679 #CJK UNIFIED IDEOGRAPH + {0x9EEA, 0x70BE}, //5680 #CJK UNIFIED IDEOGRAPH + {0x9EEB, 0x70BF}, //5681 #CJK UNIFIED IDEOGRAPH + {0x9EEC, 0x70C4}, //5682 #CJK UNIFIED IDEOGRAPH + {0x9EED, 0x70C5}, //5683 #CJK UNIFIED IDEOGRAPH + {0x9EEE, 0x70C6}, //5684 #CJK UNIFIED IDEOGRAPH + {0x9EEF, 0x70C7}, //5685 #CJK UNIFIED IDEOGRAPH + {0x9EF0, 0x70C9}, //5686 #CJK UNIFIED IDEOGRAPH + {0x9EF1, 0x70CB}, //5687 #CJK UNIFIED IDEOGRAPH + {0x9EF2, 0x70CC}, //5688 #CJK UNIFIED IDEOGRAPH + {0x9EF3, 0x70CD}, //5689 #CJK UNIFIED IDEOGRAPH + {0x9EF4, 0x70CE}, //5690 #CJK UNIFIED IDEOGRAPH + {0x9EF5, 0x70CF}, //5691 #CJK UNIFIED IDEOGRAPH + {0x9EF6, 0x70D0}, //5692 #CJK UNIFIED IDEOGRAPH + {0x9EF7, 0x70D1}, //5693 #CJK UNIFIED IDEOGRAPH + {0x9EF8, 0x70D2}, //5694 #CJK UNIFIED IDEOGRAPH + {0x9EF9, 0x70D3}, //5695 #CJK UNIFIED IDEOGRAPH + {0x9EFA, 0x70D4}, //5696 #CJK UNIFIED IDEOGRAPH + {0x9EFB, 0x70D5}, //5697 #CJK UNIFIED IDEOGRAPH + {0x9EFC, 0x70D6}, //5698 #CJK UNIFIED IDEOGRAPH + {0x9EFD, 0x70D7}, //5699 #CJK UNIFIED IDEOGRAPH + {0x9EFE, 0x70DA}, //5700 #CJK UNIFIED IDEOGRAPH + {0x9F40, 0x70DC}, //5701 #CJK UNIFIED IDEOGRAPH + {0x9F41, 0x70DD}, //5702 #CJK UNIFIED IDEOGRAPH + {0x9F42, 0x70DE}, //5703 #CJK UNIFIED IDEOGRAPH + {0x9F43, 0x70E0}, //5704 #CJK UNIFIED IDEOGRAPH + {0x9F44, 0x70E1}, //5705 #CJK UNIFIED IDEOGRAPH + {0x9F45, 0x70E2}, //5706 #CJK UNIFIED IDEOGRAPH + {0x9F46, 0x70E3}, //5707 #CJK UNIFIED IDEOGRAPH + {0x9F47, 0x70E5}, //5708 #CJK UNIFIED IDEOGRAPH + {0x9F48, 0x70EA}, //5709 #CJK UNIFIED IDEOGRAPH + {0x9F49, 0x70EE}, //5710 #CJK UNIFIED IDEOGRAPH + {0x9F4A, 0x70F0}, //5711 #CJK UNIFIED IDEOGRAPH + {0x9F4B, 0x70F1}, //5712 #CJK UNIFIED IDEOGRAPH + {0x9F4C, 0x70F2}, //5713 #CJK UNIFIED IDEOGRAPH + {0x9F4D, 0x70F3}, //5714 #CJK UNIFIED IDEOGRAPH + {0x9F4E, 0x70F4}, //5715 #CJK UNIFIED IDEOGRAPH + {0x9F4F, 0x70F5}, //5716 #CJK UNIFIED IDEOGRAPH + {0x9F50, 0x70F6}, //5717 #CJK UNIFIED IDEOGRAPH + {0x9F51, 0x70F8}, //5718 #CJK UNIFIED IDEOGRAPH + {0x9F52, 0x70FA}, //5719 #CJK UNIFIED IDEOGRAPH + {0x9F53, 0x70FB}, //5720 #CJK UNIFIED IDEOGRAPH + {0x9F54, 0x70FC}, //5721 #CJK UNIFIED IDEOGRAPH + {0x9F55, 0x70FE}, //5722 #CJK UNIFIED IDEOGRAPH + {0x9F56, 0x70FF}, //5723 #CJK UNIFIED IDEOGRAPH + {0x9F57, 0x7100}, //5724 #CJK UNIFIED IDEOGRAPH + {0x9F58, 0x7101}, //5725 #CJK UNIFIED IDEOGRAPH + {0x9F59, 0x7102}, //5726 #CJK UNIFIED IDEOGRAPH + {0x9F5A, 0x7103}, //5727 #CJK UNIFIED IDEOGRAPH + {0x9F5B, 0x7104}, //5728 #CJK UNIFIED IDEOGRAPH + {0x9F5C, 0x7105}, //5729 #CJK UNIFIED IDEOGRAPH + {0x9F5D, 0x7106}, //5730 #CJK UNIFIED IDEOGRAPH + {0x9F5E, 0x7107}, //5731 #CJK UNIFIED IDEOGRAPH + {0x9F5F, 0x7108}, //5732 #CJK UNIFIED IDEOGRAPH + {0x9F60, 0x710B}, //5733 #CJK UNIFIED IDEOGRAPH + {0x9F61, 0x710C}, //5734 #CJK UNIFIED IDEOGRAPH + {0x9F62, 0x710D}, //5735 #CJK UNIFIED IDEOGRAPH + {0x9F63, 0x710E}, //5736 #CJK UNIFIED IDEOGRAPH + {0x9F64, 0x710F}, //5737 #CJK UNIFIED IDEOGRAPH + {0x9F65, 0x7111}, //5738 #CJK UNIFIED IDEOGRAPH + {0x9F66, 0x7112}, //5739 #CJK UNIFIED IDEOGRAPH + {0x9F67, 0x7114}, //5740 #CJK UNIFIED IDEOGRAPH + {0x9F68, 0x7117}, //5741 #CJK UNIFIED IDEOGRAPH + {0x9F69, 0x711B}, //5742 #CJK UNIFIED IDEOGRAPH + {0x9F6A, 0x711C}, //5743 #CJK UNIFIED IDEOGRAPH + {0x9F6B, 0x711D}, //5744 #CJK UNIFIED IDEOGRAPH + {0x9F6C, 0x711E}, //5745 #CJK UNIFIED IDEOGRAPH + {0x9F6D, 0x711F}, //5746 #CJK UNIFIED IDEOGRAPH + {0x9F6E, 0x7120}, //5747 #CJK UNIFIED IDEOGRAPH + {0x9F6F, 0x7121}, //5748 #CJK UNIFIED IDEOGRAPH + {0x9F70, 0x7122}, //5749 #CJK UNIFIED IDEOGRAPH + {0x9F71, 0x7123}, //5750 #CJK UNIFIED IDEOGRAPH + {0x9F72, 0x7124}, //5751 #CJK UNIFIED IDEOGRAPH + {0x9F73, 0x7125}, //5752 #CJK UNIFIED IDEOGRAPH + {0x9F74, 0x7127}, //5753 #CJK UNIFIED IDEOGRAPH + {0x9F75, 0x7128}, //5754 #CJK UNIFIED IDEOGRAPH + {0x9F76, 0x7129}, //5755 #CJK UNIFIED IDEOGRAPH + {0x9F77, 0x712A}, //5756 #CJK UNIFIED IDEOGRAPH + {0x9F78, 0x712B}, //5757 #CJK UNIFIED IDEOGRAPH + {0x9F79, 0x712C}, //5758 #CJK UNIFIED IDEOGRAPH + {0x9F7A, 0x712D}, //5759 #CJK UNIFIED IDEOGRAPH + {0x9F7B, 0x712E}, //5760 #CJK UNIFIED IDEOGRAPH + {0x9F7C, 0x7132}, //5761 #CJK UNIFIED IDEOGRAPH + {0x9F7D, 0x7133}, //5762 #CJK UNIFIED IDEOGRAPH + {0x9F7E, 0x7134}, //5763 #CJK UNIFIED IDEOGRAPH + {0x9F80, 0x7135}, //5764 #CJK UNIFIED IDEOGRAPH + {0x9F81, 0x7137}, //5765 #CJK UNIFIED IDEOGRAPH + {0x9F82, 0x7138}, //5766 #CJK UNIFIED IDEOGRAPH + {0x9F83, 0x7139}, //5767 #CJK UNIFIED IDEOGRAPH + {0x9F84, 0x713A}, //5768 #CJK UNIFIED IDEOGRAPH + {0x9F85, 0x713B}, //5769 #CJK UNIFIED IDEOGRAPH + {0x9F86, 0x713C}, //5770 #CJK UNIFIED IDEOGRAPH + {0x9F87, 0x713D}, //5771 #CJK UNIFIED IDEOGRAPH + {0x9F88, 0x713E}, //5772 #CJK UNIFIED IDEOGRAPH + {0x9F89, 0x713F}, //5773 #CJK UNIFIED IDEOGRAPH + {0x9F8A, 0x7140}, //5774 #CJK UNIFIED IDEOGRAPH + {0x9F8B, 0x7141}, //5775 #CJK UNIFIED IDEOGRAPH + {0x9F8C, 0x7142}, //5776 #CJK UNIFIED IDEOGRAPH + {0x9F8D, 0x7143}, //5777 #CJK UNIFIED IDEOGRAPH + {0x9F8E, 0x7144}, //5778 #CJK UNIFIED IDEOGRAPH + {0x9F8F, 0x7146}, //5779 #CJK UNIFIED IDEOGRAPH + {0x9F90, 0x7147}, //5780 #CJK UNIFIED IDEOGRAPH + {0x9F91, 0x7148}, //5781 #CJK UNIFIED IDEOGRAPH + {0x9F92, 0x7149}, //5782 #CJK UNIFIED IDEOGRAPH + {0x9F93, 0x714B}, //5783 #CJK UNIFIED IDEOGRAPH + {0x9F94, 0x714D}, //5784 #CJK UNIFIED IDEOGRAPH + {0x9F95, 0x714F}, //5785 #CJK UNIFIED IDEOGRAPH + {0x9F96, 0x7150}, //5786 #CJK UNIFIED IDEOGRAPH + {0x9F97, 0x7151}, //5787 #CJK UNIFIED IDEOGRAPH + {0x9F98, 0x7152}, //5788 #CJK UNIFIED IDEOGRAPH + {0x9F99, 0x7153}, //5789 #CJK UNIFIED IDEOGRAPH + {0x9F9A, 0x7154}, //5790 #CJK UNIFIED IDEOGRAPH + {0x9F9B, 0x7155}, //5791 #CJK UNIFIED IDEOGRAPH + {0x9F9C, 0x7156}, //5792 #CJK UNIFIED IDEOGRAPH + {0x9F9D, 0x7157}, //5793 #CJK UNIFIED IDEOGRAPH + {0x9F9E, 0x7158}, //5794 #CJK UNIFIED IDEOGRAPH + {0x9F9F, 0x7159}, //5795 #CJK UNIFIED IDEOGRAPH + {0x9FA0, 0x715A}, //5796 #CJK UNIFIED IDEOGRAPH + {0x9FA1, 0x715B}, //5797 #CJK UNIFIED IDEOGRAPH + {0x9FA2, 0x715D}, //5798 #CJK UNIFIED IDEOGRAPH + {0x9FA3, 0x715F}, //5799 #CJK UNIFIED IDEOGRAPH + {0x9FA4, 0x7160}, //5800 #CJK UNIFIED IDEOGRAPH + {0x9FA5, 0x7161}, //5801 #CJK UNIFIED IDEOGRAPH + {0x9FA6, 0x7162}, //5802 #CJK UNIFIED IDEOGRAPH + {0x9FA7, 0x7163}, //5803 #CJK UNIFIED IDEOGRAPH + {0x9FA8, 0x7165}, //5804 #CJK UNIFIED IDEOGRAPH + {0x9FA9, 0x7169}, //5805 #CJK UNIFIED IDEOGRAPH + {0x9FAA, 0x716A}, //5806 #CJK UNIFIED IDEOGRAPH + {0x9FAB, 0x716B}, //5807 #CJK UNIFIED IDEOGRAPH + {0x9FAC, 0x716C}, //5808 #CJK UNIFIED IDEOGRAPH + {0x9FAD, 0x716D}, //5809 #CJK UNIFIED IDEOGRAPH + {0x9FAE, 0x716F}, //5810 #CJK UNIFIED IDEOGRAPH + {0x9FAF, 0x7170}, //5811 #CJK UNIFIED IDEOGRAPH + {0x9FB0, 0x7171}, //5812 #CJK UNIFIED IDEOGRAPH + {0x9FB1, 0x7174}, //5813 #CJK UNIFIED IDEOGRAPH + {0x9FB2, 0x7175}, //5814 #CJK UNIFIED IDEOGRAPH + {0x9FB3, 0x7176}, //5815 #CJK UNIFIED IDEOGRAPH + {0x9FB4, 0x7177}, //5816 #CJK UNIFIED IDEOGRAPH + {0x9FB5, 0x7179}, //5817 #CJK UNIFIED IDEOGRAPH + {0x9FB6, 0x717B}, //5818 #CJK UNIFIED IDEOGRAPH + {0x9FB7, 0x717C}, //5819 #CJK UNIFIED IDEOGRAPH + {0x9FB8, 0x717E}, //5820 #CJK UNIFIED IDEOGRAPH + {0x9FB9, 0x717F}, //5821 #CJK UNIFIED IDEOGRAPH + {0x9FBA, 0x7180}, //5822 #CJK UNIFIED IDEOGRAPH + {0x9FBB, 0x7181}, //5823 #CJK UNIFIED IDEOGRAPH + {0x9FBC, 0x7182}, //5824 #CJK UNIFIED IDEOGRAPH + {0x9FBD, 0x7183}, //5825 #CJK UNIFIED IDEOGRAPH + {0x9FBE, 0x7185}, //5826 #CJK UNIFIED IDEOGRAPH + {0x9FBF, 0x7186}, //5827 #CJK UNIFIED IDEOGRAPH + {0x9FC0, 0x7187}, //5828 #CJK UNIFIED IDEOGRAPH + {0x9FC1, 0x7188}, //5829 #CJK UNIFIED IDEOGRAPH + {0x9FC2, 0x7189}, //5830 #CJK UNIFIED IDEOGRAPH + {0x9FC3, 0x718B}, //5831 #CJK UNIFIED IDEOGRAPH + {0x9FC4, 0x718C}, //5832 #CJK UNIFIED IDEOGRAPH + {0x9FC5, 0x718D}, //5833 #CJK UNIFIED IDEOGRAPH + {0x9FC6, 0x718E}, //5834 #CJK UNIFIED IDEOGRAPH + {0x9FC7, 0x7190}, //5835 #CJK UNIFIED IDEOGRAPH + {0x9FC8, 0x7191}, //5836 #CJK UNIFIED IDEOGRAPH + {0x9FC9, 0x7192}, //5837 #CJK UNIFIED IDEOGRAPH + {0x9FCA, 0x7193}, //5838 #CJK UNIFIED IDEOGRAPH + {0x9FCB, 0x7195}, //5839 #CJK UNIFIED IDEOGRAPH + {0x9FCC, 0x7196}, //5840 #CJK UNIFIED IDEOGRAPH + {0x9FCD, 0x7197}, //5841 #CJK UNIFIED IDEOGRAPH + {0x9FCE, 0x719A}, //5842 #CJK UNIFIED IDEOGRAPH + {0x9FCF, 0x719B}, //5843 #CJK UNIFIED IDEOGRAPH + {0x9FD0, 0x719C}, //5844 #CJK UNIFIED IDEOGRAPH + {0x9FD1, 0x719D}, //5845 #CJK UNIFIED IDEOGRAPH + {0x9FD2, 0x719E}, //5846 #CJK UNIFIED IDEOGRAPH + {0x9FD3, 0x71A1}, //5847 #CJK UNIFIED IDEOGRAPH + {0x9FD4, 0x71A2}, //5848 #CJK UNIFIED IDEOGRAPH + {0x9FD5, 0x71A3}, //5849 #CJK UNIFIED IDEOGRAPH + {0x9FD6, 0x71A4}, //5850 #CJK UNIFIED IDEOGRAPH + {0x9FD7, 0x71A5}, //5851 #CJK UNIFIED IDEOGRAPH + {0x9FD8, 0x71A6}, //5852 #CJK UNIFIED IDEOGRAPH + {0x9FD9, 0x71A7}, //5853 #CJK UNIFIED IDEOGRAPH + {0x9FDA, 0x71A9}, //5854 #CJK UNIFIED IDEOGRAPH + {0x9FDB, 0x71AA}, //5855 #CJK UNIFIED IDEOGRAPH + {0x9FDC, 0x71AB}, //5856 #CJK UNIFIED IDEOGRAPH + {0x9FDD, 0x71AD}, //5857 #CJK UNIFIED IDEOGRAPH + {0x9FDE, 0x71AE}, //5858 #CJK UNIFIED IDEOGRAPH + {0x9FDF, 0x71AF}, //5859 #CJK UNIFIED IDEOGRAPH + {0x9FE0, 0x71B0}, //5860 #CJK UNIFIED IDEOGRAPH + {0x9FE1, 0x71B1}, //5861 #CJK UNIFIED IDEOGRAPH + {0x9FE2, 0x71B2}, //5862 #CJK UNIFIED IDEOGRAPH + {0x9FE3, 0x71B4}, //5863 #CJK UNIFIED IDEOGRAPH + {0x9FE4, 0x71B6}, //5864 #CJK UNIFIED IDEOGRAPH + {0x9FE5, 0x71B7}, //5865 #CJK UNIFIED IDEOGRAPH + {0x9FE6, 0x71B8}, //5866 #CJK UNIFIED IDEOGRAPH + {0x9FE7, 0x71BA}, //5867 #CJK UNIFIED IDEOGRAPH + {0x9FE8, 0x71BB}, //5868 #CJK UNIFIED IDEOGRAPH + {0x9FE9, 0x71BC}, //5869 #CJK UNIFIED IDEOGRAPH + {0x9FEA, 0x71BD}, //5870 #CJK UNIFIED IDEOGRAPH + {0x9FEB, 0x71BE}, //5871 #CJK UNIFIED IDEOGRAPH + {0x9FEC, 0x71BF}, //5872 #CJK UNIFIED IDEOGRAPH + {0x9FED, 0x71C0}, //5873 #CJK UNIFIED IDEOGRAPH + {0x9FEE, 0x71C1}, //5874 #CJK UNIFIED IDEOGRAPH + {0x9FEF, 0x71C2}, //5875 #CJK UNIFIED IDEOGRAPH + {0x9FF0, 0x71C4}, //5876 #CJK UNIFIED IDEOGRAPH + {0x9FF1, 0x71C5}, //5877 #CJK UNIFIED IDEOGRAPH + {0x9FF2, 0x71C6}, //5878 #CJK UNIFIED IDEOGRAPH + {0x9FF3, 0x71C7}, //5879 #CJK UNIFIED IDEOGRAPH + {0x9FF4, 0x71C8}, //5880 #CJK UNIFIED IDEOGRAPH + {0x9FF5, 0x71C9}, //5881 #CJK UNIFIED IDEOGRAPH + {0x9FF6, 0x71CA}, //5882 #CJK UNIFIED IDEOGRAPH + {0x9FF7, 0x71CB}, //5883 #CJK UNIFIED IDEOGRAPH + {0x9FF8, 0x71CC}, //5884 #CJK UNIFIED IDEOGRAPH + {0x9FF9, 0x71CD}, //5885 #CJK UNIFIED IDEOGRAPH + {0x9FFA, 0x71CF}, //5886 #CJK UNIFIED IDEOGRAPH + {0x9FFB, 0x71D0}, //5887 #CJK UNIFIED IDEOGRAPH + {0x9FFC, 0x71D1}, //5888 #CJK UNIFIED IDEOGRAPH + {0x9FFD, 0x71D2}, //5889 #CJK UNIFIED IDEOGRAPH + {0x9FFE, 0x71D3}, //5890 #CJK UNIFIED IDEOGRAPH + {0xA040, 0x71D6}, //5891 #CJK UNIFIED IDEOGRAPH + {0xA041, 0x71D7}, //5892 #CJK UNIFIED IDEOGRAPH + {0xA042, 0x71D8}, //5893 #CJK UNIFIED IDEOGRAPH + {0xA043, 0x71D9}, //5894 #CJK UNIFIED IDEOGRAPH + {0xA044, 0x71DA}, //5895 #CJK UNIFIED IDEOGRAPH + {0xA045, 0x71DB}, //5896 #CJK UNIFIED IDEOGRAPH + {0xA046, 0x71DC}, //5897 #CJK UNIFIED IDEOGRAPH + {0xA047, 0x71DD}, //5898 #CJK UNIFIED IDEOGRAPH + {0xA048, 0x71DE}, //5899 #CJK UNIFIED IDEOGRAPH + {0xA049, 0x71DF}, //5900 #CJK UNIFIED IDEOGRAPH + {0xA04A, 0x71E1}, //5901 #CJK UNIFIED IDEOGRAPH + {0xA04B, 0x71E2}, //5902 #CJK UNIFIED IDEOGRAPH + {0xA04C, 0x71E3}, //5903 #CJK UNIFIED IDEOGRAPH + {0xA04D, 0x71E4}, //5904 #CJK UNIFIED IDEOGRAPH + {0xA04E, 0x71E6}, //5905 #CJK UNIFIED IDEOGRAPH + {0xA04F, 0x71E8}, //5906 #CJK UNIFIED IDEOGRAPH + {0xA050, 0x71E9}, //5907 #CJK UNIFIED IDEOGRAPH + {0xA051, 0x71EA}, //5908 #CJK UNIFIED IDEOGRAPH + {0xA052, 0x71EB}, //5909 #CJK UNIFIED IDEOGRAPH + {0xA053, 0x71EC}, //5910 #CJK UNIFIED IDEOGRAPH + {0xA054, 0x71ED}, //5911 #CJK UNIFIED IDEOGRAPH + {0xA055, 0x71EF}, //5912 #CJK UNIFIED IDEOGRAPH + {0xA056, 0x71F0}, //5913 #CJK UNIFIED IDEOGRAPH + {0xA057, 0x71F1}, //5914 #CJK UNIFIED IDEOGRAPH + {0xA058, 0x71F2}, //5915 #CJK UNIFIED IDEOGRAPH + {0xA059, 0x71F3}, //5916 #CJK UNIFIED IDEOGRAPH + {0xA05A, 0x71F4}, //5917 #CJK UNIFIED IDEOGRAPH + {0xA05B, 0x71F5}, //5918 #CJK UNIFIED IDEOGRAPH + {0xA05C, 0x71F6}, //5919 #CJK UNIFIED IDEOGRAPH + {0xA05D, 0x71F7}, //5920 #CJK UNIFIED IDEOGRAPH + {0xA05E, 0x71F8}, //5921 #CJK UNIFIED IDEOGRAPH + {0xA05F, 0x71FA}, //5922 #CJK UNIFIED IDEOGRAPH + {0xA060, 0x71FB}, //5923 #CJK UNIFIED IDEOGRAPH + {0xA061, 0x71FC}, //5924 #CJK UNIFIED IDEOGRAPH + {0xA062, 0x71FD}, //5925 #CJK UNIFIED IDEOGRAPH + {0xA063, 0x71FE}, //5926 #CJK UNIFIED IDEOGRAPH + {0xA064, 0x71FF}, //5927 #CJK UNIFIED IDEOGRAPH + {0xA065, 0x7200}, //5928 #CJK UNIFIED IDEOGRAPH + {0xA066, 0x7201}, //5929 #CJK UNIFIED IDEOGRAPH + {0xA067, 0x7202}, //5930 #CJK UNIFIED IDEOGRAPH + {0xA068, 0x7203}, //5931 #CJK UNIFIED IDEOGRAPH + {0xA069, 0x7204}, //5932 #CJK UNIFIED IDEOGRAPH + {0xA06A, 0x7205}, //5933 #CJK UNIFIED IDEOGRAPH + {0xA06B, 0x7207}, //5934 #CJK UNIFIED IDEOGRAPH + {0xA06C, 0x7208}, //5935 #CJK UNIFIED IDEOGRAPH + {0xA06D, 0x7209}, //5936 #CJK UNIFIED IDEOGRAPH + {0xA06E, 0x720A}, //5937 #CJK UNIFIED IDEOGRAPH + {0xA06F, 0x720B}, //5938 #CJK UNIFIED IDEOGRAPH + {0xA070, 0x720C}, //5939 #CJK UNIFIED IDEOGRAPH + {0xA071, 0x720D}, //5940 #CJK UNIFIED IDEOGRAPH + {0xA072, 0x720E}, //5941 #CJK UNIFIED IDEOGRAPH + {0xA073, 0x720F}, //5942 #CJK UNIFIED IDEOGRAPH + {0xA074, 0x7210}, //5943 #CJK UNIFIED IDEOGRAPH + {0xA075, 0x7211}, //5944 #CJK UNIFIED IDEOGRAPH + {0xA076, 0x7212}, //5945 #CJK UNIFIED IDEOGRAPH + {0xA077, 0x7213}, //5946 #CJK UNIFIED IDEOGRAPH + {0xA078, 0x7214}, //5947 #CJK UNIFIED IDEOGRAPH + {0xA079, 0x7215}, //5948 #CJK UNIFIED IDEOGRAPH + {0xA07A, 0x7216}, //5949 #CJK UNIFIED IDEOGRAPH + {0xA07B, 0x7217}, //5950 #CJK UNIFIED IDEOGRAPH + {0xA07C, 0x7218}, //5951 #CJK UNIFIED IDEOGRAPH + {0xA07D, 0x7219}, //5952 #CJK UNIFIED IDEOGRAPH + {0xA07E, 0x721A}, //5953 #CJK UNIFIED IDEOGRAPH + {0xA080, 0x721B}, //5954 #CJK UNIFIED IDEOGRAPH + {0xA081, 0x721C}, //5955 #CJK UNIFIED IDEOGRAPH + {0xA082, 0x721E}, //5956 #CJK UNIFIED IDEOGRAPH + {0xA083, 0x721F}, //5957 #CJK UNIFIED IDEOGRAPH + {0xA084, 0x7220}, //5958 #CJK UNIFIED IDEOGRAPH + {0xA085, 0x7221}, //5959 #CJK UNIFIED IDEOGRAPH + {0xA086, 0x7222}, //5960 #CJK UNIFIED IDEOGRAPH + {0xA087, 0x7223}, //5961 #CJK UNIFIED IDEOGRAPH + {0xA088, 0x7224}, //5962 #CJK UNIFIED IDEOGRAPH + {0xA089, 0x7225}, //5963 #CJK UNIFIED IDEOGRAPH + {0xA08A, 0x7226}, //5964 #CJK UNIFIED IDEOGRAPH + {0xA08B, 0x7227}, //5965 #CJK UNIFIED IDEOGRAPH + {0xA08C, 0x7229}, //5966 #CJK UNIFIED IDEOGRAPH + {0xA08D, 0x722B}, //5967 #CJK UNIFIED IDEOGRAPH + {0xA08E, 0x722D}, //5968 #CJK UNIFIED IDEOGRAPH + {0xA08F, 0x722E}, //5969 #CJK UNIFIED IDEOGRAPH + {0xA090, 0x722F}, //5970 #CJK UNIFIED IDEOGRAPH + {0xA091, 0x7232}, //5971 #CJK UNIFIED IDEOGRAPH + {0xA092, 0x7233}, //5972 #CJK UNIFIED IDEOGRAPH + {0xA093, 0x7234}, //5973 #CJK UNIFIED IDEOGRAPH + {0xA094, 0x723A}, //5974 #CJK UNIFIED IDEOGRAPH + {0xA095, 0x723C}, //5975 #CJK UNIFIED IDEOGRAPH + {0xA096, 0x723E}, //5976 #CJK UNIFIED IDEOGRAPH + {0xA097, 0x7240}, //5977 #CJK UNIFIED IDEOGRAPH + {0xA098, 0x7241}, //5978 #CJK UNIFIED IDEOGRAPH + {0xA099, 0x7242}, //5979 #CJK UNIFIED IDEOGRAPH + {0xA09A, 0x7243}, //5980 #CJK UNIFIED IDEOGRAPH + {0xA09B, 0x7244}, //5981 #CJK UNIFIED IDEOGRAPH + {0xA09C, 0x7245}, //5982 #CJK UNIFIED IDEOGRAPH + {0xA09D, 0x7246}, //5983 #CJK UNIFIED IDEOGRAPH + {0xA09E, 0x7249}, //5984 #CJK UNIFIED IDEOGRAPH + {0xA09F, 0x724A}, //5985 #CJK UNIFIED IDEOGRAPH + {0xA0A0, 0x724B}, //5986 #CJK UNIFIED IDEOGRAPH + {0xA0A1, 0x724E}, //5987 #CJK UNIFIED IDEOGRAPH + {0xA0A2, 0x724F}, //5988 #CJK UNIFIED IDEOGRAPH + {0xA0A3, 0x7250}, //5989 #CJK UNIFIED IDEOGRAPH + {0xA0A4, 0x7251}, //5990 #CJK UNIFIED IDEOGRAPH + {0xA0A5, 0x7253}, //5991 #CJK UNIFIED IDEOGRAPH + {0xA0A6, 0x7254}, //5992 #CJK UNIFIED IDEOGRAPH + {0xA0A7, 0x7255}, //5993 #CJK UNIFIED IDEOGRAPH + {0xA0A8, 0x7257}, //5994 #CJK UNIFIED IDEOGRAPH + {0xA0A9, 0x7258}, //5995 #CJK UNIFIED IDEOGRAPH + {0xA0AA, 0x725A}, //5996 #CJK UNIFIED IDEOGRAPH + {0xA0AB, 0x725C}, //5997 #CJK UNIFIED IDEOGRAPH + {0xA0AC, 0x725E}, //5998 #CJK UNIFIED IDEOGRAPH + {0xA0AD, 0x7260}, //5999 #CJK UNIFIED IDEOGRAPH + {0xA0AE, 0x7263}, //6000 #CJK UNIFIED IDEOGRAPH + {0xA0AF, 0x7264}, //6001 #CJK UNIFIED IDEOGRAPH + {0xA0B0, 0x7265}, //6002 #CJK UNIFIED IDEOGRAPH + {0xA0B1, 0x7268}, //6003 #CJK UNIFIED IDEOGRAPH + {0xA0B2, 0x726A}, //6004 #CJK UNIFIED IDEOGRAPH + {0xA0B3, 0x726B}, //6005 #CJK UNIFIED IDEOGRAPH + {0xA0B4, 0x726C}, //6006 #CJK UNIFIED IDEOGRAPH + {0xA0B5, 0x726D}, //6007 #CJK UNIFIED IDEOGRAPH + {0xA0B6, 0x7270}, //6008 #CJK UNIFIED IDEOGRAPH + {0xA0B7, 0x7271}, //6009 #CJK UNIFIED IDEOGRAPH + {0xA0B8, 0x7273}, //6010 #CJK UNIFIED IDEOGRAPH + {0xA0B9, 0x7274}, //6011 #CJK UNIFIED IDEOGRAPH + {0xA0BA, 0x7276}, //6012 #CJK UNIFIED IDEOGRAPH + {0xA0BB, 0x7277}, //6013 #CJK UNIFIED IDEOGRAPH + {0xA0BC, 0x7278}, //6014 #CJK UNIFIED IDEOGRAPH + {0xA0BD, 0x727B}, //6015 #CJK UNIFIED IDEOGRAPH + {0xA0BE, 0x727C}, //6016 #CJK UNIFIED IDEOGRAPH + {0xA0BF, 0x727D}, //6017 #CJK UNIFIED IDEOGRAPH + {0xA0C0, 0x7282}, //6018 #CJK UNIFIED IDEOGRAPH + {0xA0C1, 0x7283}, //6019 #CJK UNIFIED IDEOGRAPH + {0xA0C2, 0x7285}, //6020 #CJK UNIFIED IDEOGRAPH + {0xA0C3, 0x7286}, //6021 #CJK UNIFIED IDEOGRAPH + {0xA0C4, 0x7287}, //6022 #CJK UNIFIED IDEOGRAPH + {0xA0C5, 0x7288}, //6023 #CJK UNIFIED IDEOGRAPH + {0xA0C6, 0x7289}, //6024 #CJK UNIFIED IDEOGRAPH + {0xA0C7, 0x728C}, //6025 #CJK UNIFIED IDEOGRAPH + {0xA0C8, 0x728E}, //6026 #CJK UNIFIED IDEOGRAPH + {0xA0C9, 0x7290}, //6027 #CJK UNIFIED IDEOGRAPH + {0xA0CA, 0x7291}, //6028 #CJK UNIFIED IDEOGRAPH + {0xA0CB, 0x7293}, //6029 #CJK UNIFIED IDEOGRAPH + {0xA0CC, 0x7294}, //6030 #CJK UNIFIED IDEOGRAPH + {0xA0CD, 0x7295}, //6031 #CJK UNIFIED IDEOGRAPH + {0xA0CE, 0x7296}, //6032 #CJK UNIFIED IDEOGRAPH + {0xA0CF, 0x7297}, //6033 #CJK UNIFIED IDEOGRAPH + {0xA0D0, 0x7298}, //6034 #CJK UNIFIED IDEOGRAPH + {0xA0D1, 0x7299}, //6035 #CJK UNIFIED IDEOGRAPH + {0xA0D2, 0x729A}, //6036 #CJK UNIFIED IDEOGRAPH + {0xA0D3, 0x729B}, //6037 #CJK UNIFIED IDEOGRAPH + {0xA0D4, 0x729C}, //6038 #CJK UNIFIED IDEOGRAPH + {0xA0D5, 0x729D}, //6039 #CJK UNIFIED IDEOGRAPH + {0xA0D6, 0x729E}, //6040 #CJK UNIFIED IDEOGRAPH + {0xA0D7, 0x72A0}, //6041 #CJK UNIFIED IDEOGRAPH + {0xA0D8, 0x72A1}, //6042 #CJK UNIFIED IDEOGRAPH + {0xA0D9, 0x72A2}, //6043 #CJK UNIFIED IDEOGRAPH + {0xA0DA, 0x72A3}, //6044 #CJK UNIFIED IDEOGRAPH + {0xA0DB, 0x72A4}, //6045 #CJK UNIFIED IDEOGRAPH + {0xA0DC, 0x72A5}, //6046 #CJK UNIFIED IDEOGRAPH + {0xA0DD, 0x72A6}, //6047 #CJK UNIFIED IDEOGRAPH + {0xA0DE, 0x72A7}, //6048 #CJK UNIFIED IDEOGRAPH + {0xA0DF, 0x72A8}, //6049 #CJK UNIFIED IDEOGRAPH + {0xA0E0, 0x72A9}, //6050 #CJK UNIFIED IDEOGRAPH + {0xA0E1, 0x72AA}, //6051 #CJK UNIFIED IDEOGRAPH + {0xA0E2, 0x72AB}, //6052 #CJK UNIFIED IDEOGRAPH + {0xA0E3, 0x72AE}, //6053 #CJK UNIFIED IDEOGRAPH + {0xA0E4, 0x72B1}, //6054 #CJK UNIFIED IDEOGRAPH + {0xA0E5, 0x72B2}, //6055 #CJK UNIFIED IDEOGRAPH + {0xA0E6, 0x72B3}, //6056 #CJK UNIFIED IDEOGRAPH + {0xA0E7, 0x72B5}, //6057 #CJK UNIFIED IDEOGRAPH + {0xA0E8, 0x72BA}, //6058 #CJK UNIFIED IDEOGRAPH + {0xA0E9, 0x72BB}, //6059 #CJK UNIFIED IDEOGRAPH + {0xA0EA, 0x72BC}, //6060 #CJK UNIFIED IDEOGRAPH + {0xA0EB, 0x72BD}, //6061 #CJK UNIFIED IDEOGRAPH + {0xA0EC, 0x72BE}, //6062 #CJK UNIFIED IDEOGRAPH + {0xA0ED, 0x72BF}, //6063 #CJK UNIFIED IDEOGRAPH + {0xA0EE, 0x72C0}, //6064 #CJK UNIFIED IDEOGRAPH + {0xA0EF, 0x72C5}, //6065 #CJK UNIFIED IDEOGRAPH + {0xA0F0, 0x72C6}, //6066 #CJK UNIFIED IDEOGRAPH + {0xA0F1, 0x72C7}, //6067 #CJK UNIFIED IDEOGRAPH + {0xA0F2, 0x72C9}, //6068 #CJK UNIFIED IDEOGRAPH + {0xA0F3, 0x72CA}, //6069 #CJK UNIFIED IDEOGRAPH + {0xA0F4, 0x72CB}, //6070 #CJK UNIFIED IDEOGRAPH + {0xA0F5, 0x72CC}, //6071 #CJK UNIFIED IDEOGRAPH + {0xA0F6, 0x72CF}, //6072 #CJK UNIFIED IDEOGRAPH + {0xA0F7, 0x72D1}, //6073 #CJK UNIFIED IDEOGRAPH + {0xA0F8, 0x72D3}, //6074 #CJK UNIFIED IDEOGRAPH + {0xA0F9, 0x72D4}, //6075 #CJK UNIFIED IDEOGRAPH + {0xA0FA, 0x72D5}, //6076 #CJK UNIFIED IDEOGRAPH + {0xA0FB, 0x72D6}, //6077 #CJK UNIFIED IDEOGRAPH + {0xA0FC, 0x72D8}, //6078 #CJK UNIFIED IDEOGRAPH + {0xA0FD, 0x72DA}, //6079 #CJK UNIFIED IDEOGRAPH + {0xA0FE, 0x72DB}, //6080 #CJK UNIFIED IDEOGRAPH + {0xA1A1, 0x3000}, //6081 #IDEOGRAPHIC SPACE + {0xA1A2, 0x3001}, //6082 #IDEOGRAPHIC COMMA + {0xA1A3, 0x3002}, //6083 #IDEOGRAPHIC FULL STOP + {0xA1A4, 0x00B7}, //6084 #MIDDLE DOT + {0xA1A5, 0x02C9}, //6085 #MODIFIER LETTER MACRON + {0xA1A6, 0x02C7}, //6086 #CARON + {0xA1A7, 0x00A8}, //6087 #DIAERESIS + {0xA1A8, 0x3003}, //6088 #DITTO MARK + {0xA1A9, 0x3005}, //6089 #IDEOGRAPHIC ITERATION MARK + {0xA1AA, 0x2014}, //6090 #EM DASH + {0xA1AB, 0xFF5E}, //6091 #FULLWIDTH TILDE + {0xA1AC, 0x2016}, //6092 #DOUBLE VERTICAL LINE + {0xA1AD, 0x2026}, //6093 #HORIZONTAL ELLIPSIS + {0xA1AE, 0x2018}, //6094 #LEFT SINGLE QUOTATION MARK + {0xA1AF, 0x2019}, //6095 #RIGHT SINGLE QUOTATION MARK + {0xA1B0, 0x201C}, //6096 #LEFT DOUBLE QUOTATION MARK + {0xA1B1, 0x201D}, //6097 #RIGHT DOUBLE QUOTATION MARK + {0xA1B2, 0x3014}, //6098 #LEFT TORTOISE SHELL BRACKET + {0xA1B3, 0x3015}, //6099 #RIGHT TORTOISE SHELL BRACKET + {0xA1B4, 0x3008}, //6100 #LEFT ANGLE BRACKET + {0xA1B5, 0x3009}, //6101 #RIGHT ANGLE BRACKET + {0xA1B6, 0x300A}, //6102 #LEFT DOUBLE ANGLE BRACKET + {0xA1B7, 0x300B}, //6103 #RIGHT DOUBLE ANGLE BRACKET + {0xA1B8, 0x300C}, //6104 #LEFT CORNER BRACKET + {0xA1B9, 0x300D}, //6105 #RIGHT CORNER BRACKET + {0xA1BA, 0x300E}, //6106 #LEFT WHITE CORNER BRACKET + {0xA1BB, 0x300F}, //6107 #RIGHT WHITE CORNER BRACKET + {0xA1BC, 0x3016}, //6108 #LEFT WHITE LENTICULAR BRACKET + {0xA1BD, 0x3017}, //6109 #RIGHT WHITE LENTICULAR BRACKET + {0xA1BE, 0x3010}, //6110 #LEFT BLACK LENTICULAR BRACKET + {0xA1BF, 0x3011}, //6111 #RIGHT BLACK LENTICULAR BRACKET + {0xA1C0, 0x00B1}, //6112 #PLUS-MINUS SIGN + {0xA1C1, 0x00D7}, //6113 #MULTIPLICATION SIGN + {0xA1C2, 0x00F7}, //6114 #DIVISION SIGN + {0xA1C3, 0x2236}, //6115 #RATIO + {0xA1C4, 0x2227}, //6116 #LOGICAL AND + {0xA1C5, 0x2228}, //6117 #LOGICAL OR + {0xA1C6, 0x2211}, //6118 #N-ARY SUMMATION + {0xA1C7, 0x220F}, //6119 #N-ARY PRODUCT + {0xA1C8, 0x222A}, //6120 #UNION + {0xA1C9, 0x2229}, //6121 #INTERSECTION + {0xA1CA, 0x2208}, //6122 #ELEMENT OF + {0xA1CB, 0x2237}, //6123 #PROPORTION + {0xA1CC, 0x221A}, //6124 #SQUARE ROOT + {0xA1CD, 0x22A5}, //6125 #UP TACK + {0xA1CE, 0x2225}, //6126 #PARALLEL TO + {0xA1CF, 0x2220}, //6127 #ANGLE + {0xA1D0, 0x2312}, //6128 #ARC + {0xA1D1, 0x2299}, //6129 #CIRCLED DOT OPERATOR + {0xA1D2, 0x222B}, //6130 #INTEGRAL + {0xA1D3, 0x222E}, //6131 #CONTOUR INTEGRAL + {0xA1D4, 0x2261}, //6132 #IDENTICAL TO + {0xA1D5, 0x224C}, //6133 #ALL EQUAL TO + {0xA1D6, 0x2248}, //6134 #ALMOST EQUAL TO + {0xA1D7, 0x223D}, //6135 #REVERSED TILDE + {0xA1D8, 0x221D}, //6136 #PROPORTIONAL TO + {0xA1D9, 0x2260}, //6137 #NOT EQUAL TO + {0xA1DA, 0x226E}, //6138 #NOT LESS-THAN + {0xA1DB, 0x226F}, //6139 #NOT GREATER-THAN + {0xA1DC, 0x2264}, //6140 #LESS-THAN OR EQUAL TO + {0xA1DD, 0x2265}, //6141 #GREATER-THAN OR EQUAL TO + {0xA1DE, 0x221E}, //6142 #INFINITY + {0xA1DF, 0x2235}, //6143 #BECAUSE + {0xA1E0, 0x2234}, //6144 #THEREFORE + {0xA1E1, 0x2642}, //6145 #MALE SIGN + {0xA1E2, 0x2640}, //6146 #FEMALE SIGN + {0xA1E3, 0x00B0}, //6147 #DEGREE SIGN + {0xA1E4, 0x2032}, //6148 #PRIME + {0xA1E5, 0x2033}, //6149 #DOUBLE PRIME + {0xA1E6, 0x2103}, //6150 #DEGREE CELSIUS + {0xA1E7, 0xFF04}, //6151 #FULLWIDTH DOLLAR SIGN + {0xA1E8, 0x00A4}, //6152 #CURRENCY SIGN + {0xA1E9, 0xFFE0}, //6153 #FULLWIDTH CENT SIGN + {0xA1EA, 0xFFE1}, //6154 #FULLWIDTH POUND SIGN + {0xA1EB, 0x2030}, //6155 #PER MILLE SIGN + {0xA1EC, 0x00A7}, //6156 #SECTION SIGN + {0xA1ED, 0x2116}, //6157 #NUMERO SIGN + {0xA1EE, 0x2606}, //6158 #WHITE STAR + {0xA1EF, 0x2605}, //6159 #BLACK STAR + {0xA1F0, 0x25CB}, //6160 #WHITE CIRCLE + {0xA1F1, 0x25CF}, //6161 #BLACK CIRCLE + {0xA1F2, 0x25CE}, //6162 #BULLSEYE + {0xA1F3, 0x25C7}, //6163 #WHITE DIAMOND + {0xA1F4, 0x25C6}, //6164 #BLACK DIAMOND + {0xA1F5, 0x25A1}, //6165 #WHITE SQUARE + {0xA1F6, 0x25A0}, //6166 #BLACK SQUARE + {0xA1F7, 0x25B3}, //6167 #WHITE UP-POINTING TRIANGLE + {0xA1F8, 0x25B2}, //6168 #BLACK UP-POINTING TRIANGLE + {0xA1F9, 0x203B}, //6169 #REFERENCE MARK + {0xA1FA, 0x2192}, //6170 #RIGHTWARDS ARROW + {0xA1FB, 0x2190}, //6171 #LEFTWARDS ARROW + {0xA1FC, 0x2191}, //6172 #UPWARDS ARROW + {0xA1FD, 0x2193}, //6173 #DOWNWARDS ARROW + {0xA1FE, 0x3013}, //6174 #GETA MARK + {0xA2A1, 0x2170}, //6175 #SMALL ROMAN NUMERAL ONE + {0xA2A2, 0x2171}, //6176 #SMALL ROMAN NUMERAL TWO + {0xA2A3, 0x2172}, //6177 #SMALL ROMAN NUMERAL THREE + {0xA2A4, 0x2173}, //6178 #SMALL ROMAN NUMERAL FOUR + {0xA2A5, 0x2174}, //6179 #SMALL ROMAN NUMERAL FIVE + {0xA2A6, 0x2175}, //6180 #SMALL ROMAN NUMERAL SIX + {0xA2A7, 0x2176}, //6181 #SMALL ROMAN NUMERAL SEVEN + {0xA2A8, 0x2177}, //6182 #SMALL ROMAN NUMERAL EIGHT + {0xA2A9, 0x2178}, //6183 #SMALL ROMAN NUMERAL NINE + {0xA2AA, 0x2179}, //6184 #SMALL ROMAN NUMERAL TEN + {0xA2B1, 0x2488}, //6185 #DIGIT ONE FULL STOP + {0xA2B2, 0x2489}, //6186 #DIGIT TWO FULL STOP + {0xA2B3, 0x248A}, //6187 #DIGIT THREE FULL STOP + {0xA2B4, 0x248B}, //6188 #DIGIT FOUR FULL STOP + {0xA2B5, 0x248C}, //6189 #DIGIT FIVE FULL STOP + {0xA2B6, 0x248D}, //6190 #DIGIT SIX FULL STOP + {0xA2B7, 0x248E}, //6191 #DIGIT SEVEN FULL STOP + {0xA2B8, 0x248F}, //6192 #DIGIT EIGHT FULL STOP + {0xA2B9, 0x2490}, //6193 #DIGIT NINE FULL STOP + {0xA2BA, 0x2491}, //6194 #NUMBER TEN FULL STOP + {0xA2BB, 0x2492}, //6195 #NUMBER ELEVEN FULL STOP + {0xA2BC, 0x2493}, //6196 #NUMBER TWELVE FULL STOP + {0xA2BD, 0x2494}, //6197 #NUMBER THIRTEEN FULL STOP + {0xA2BE, 0x2495}, //6198 #NUMBER FOURTEEN FULL STOP + {0xA2BF, 0x2496}, //6199 #NUMBER FIFTEEN FULL STOP + {0xA2C0, 0x2497}, //6200 #NUMBER SIXTEEN FULL STOP + {0xA2C1, 0x2498}, //6201 #NUMBER SEVENTEEN FULL STOP + {0xA2C2, 0x2499}, //6202 #NUMBER EIGHTEEN FULL STOP + {0xA2C3, 0x249A}, //6203 #NUMBER NINETEEN FULL STOP + {0xA2C4, 0x249B}, //6204 #NUMBER TWENTY FULL STOP + {0xA2C5, 0x2474}, //6205 #PARENTHESIZED DIGIT ONE + {0xA2C6, 0x2475}, //6206 #PARENTHESIZED DIGIT TWO + {0xA2C7, 0x2476}, //6207 #PARENTHESIZED DIGIT THREE + {0xA2C8, 0x2477}, //6208 #PARENTHESIZED DIGIT FOUR + {0xA2C9, 0x2478}, //6209 #PARENTHESIZED DIGIT FIVE + {0xA2CA, 0x2479}, //6210 #PARENTHESIZED DIGIT SIX + {0xA2CB, 0x247A}, //6211 #PARENTHESIZED DIGIT SEVEN + {0xA2CC, 0x247B}, //6212 #PARENTHESIZED DIGIT EIGHT + {0xA2CD, 0x247C}, //6213 #PARENTHESIZED DIGIT NINE + {0xA2CE, 0x247D}, //6214 #PARENTHESIZED NUMBER TEN + {0xA2CF, 0x247E}, //6215 #PARENTHESIZED NUMBER ELEVEN + {0xA2D0, 0x247F}, //6216 #PARENTHESIZED NUMBER TWELVE + {0xA2D1, 0x2480}, //6217 #PARENTHESIZED NUMBER THIRTEEN + {0xA2D2, 0x2481}, //6218 #PARENTHESIZED NUMBER FOURTEEN + {0xA2D3, 0x2482}, //6219 #PARENTHESIZED NUMBER FIFTEEN + {0xA2D4, 0x2483}, //6220 #PARENTHESIZED NUMBER SIXTEEN + {0xA2D5, 0x2484}, //6221 #PARENTHESIZED NUMBER SEVENTEEN + {0xA2D6, 0x2485}, //6222 #PARENTHESIZED NUMBER EIGHTEEN + {0xA2D7, 0x2486}, //6223 #PARENTHESIZED NUMBER NINETEEN + {0xA2D8, 0x2487}, //6224 #PARENTHESIZED NUMBER TWENTY + {0xA2D9, 0x2460}, //6225 #CIRCLED DIGIT ONE + {0xA2DA, 0x2461}, //6226 #CIRCLED DIGIT TWO + {0xA2DB, 0x2462}, //6227 #CIRCLED DIGIT THREE + {0xA2DC, 0x2463}, //6228 #CIRCLED DIGIT FOUR + {0xA2DD, 0x2464}, //6229 #CIRCLED DIGIT FIVE + {0xA2DE, 0x2465}, //6230 #CIRCLED DIGIT SIX + {0xA2DF, 0x2466}, //6231 #CIRCLED DIGIT SEVEN + {0xA2E0, 0x2467}, //6232 #CIRCLED DIGIT EIGHT + {0xA2E1, 0x2468}, //6233 #CIRCLED DIGIT NINE + {0xA2E2, 0x2469}, //6234 #CIRCLED NUMBER TEN + {0xA2E5, 0x3220}, //6235 #PARENTHESIZED IDEOGRAPH ONE + {0xA2E6, 0x3221}, //6236 #PARENTHESIZED IDEOGRAPH TWO + {0xA2E7, 0x3222}, //6237 #PARENTHESIZED IDEOGRAPH THREE + {0xA2E8, 0x3223}, //6238 #PARENTHESIZED IDEOGRAPH FOUR + {0xA2E9, 0x3224}, //6239 #PARENTHESIZED IDEOGRAPH FIVE + {0xA2EA, 0x3225}, //6240 #PARENTHESIZED IDEOGRAPH SIX + {0xA2EB, 0x3226}, //6241 #PARENTHESIZED IDEOGRAPH SEVEN + {0xA2EC, 0x3227}, //6242 #PARENTHESIZED IDEOGRAPH EIGHT + {0xA2ED, 0x3228}, //6243 #PARENTHESIZED IDEOGRAPH NINE + {0xA2EE, 0x3229}, //6244 #PARENTHESIZED IDEOGRAPH TEN + {0xA2F1, 0x2160}, //6245 #ROMAN NUMERAL ONE + {0xA2F2, 0x2161}, //6246 #ROMAN NUMERAL TWO + {0xA2F3, 0x2162}, //6247 #ROMAN NUMERAL THREE + {0xA2F4, 0x2163}, //6248 #ROMAN NUMERAL FOUR + {0xA2F5, 0x2164}, //6249 #ROMAN NUMERAL FIVE + {0xA2F6, 0x2165}, //6250 #ROMAN NUMERAL SIX + {0xA2F7, 0x2166}, //6251 #ROMAN NUMERAL SEVEN + {0xA2F8, 0x2167}, //6252 #ROMAN NUMERAL EIGHT + {0xA2F9, 0x2168}, //6253 #ROMAN NUMERAL NINE + {0xA2FA, 0x2169}, //6254 #ROMAN NUMERAL TEN + {0xA2FB, 0x216A}, //6255 #ROMAN NUMERAL ELEVEN + {0xA2FC, 0x216B}, //6256 #ROMAN NUMERAL TWELVE + {0xA3A1, 0xFF01}, //6257 #FULLWIDTH EXCLAMATION MARK + {0xA3A2, 0xFF02}, //6258 #FULLWIDTH QUOTATION MARK + {0xA3A3, 0xFF03}, //6259 #FULLWIDTH NUMBER SIGN + {0xA3A4, 0xFFE5}, //6260 #FULLWIDTH YEN SIGN + {0xA3A5, 0xFF05}, //6261 #FULLWIDTH PERCENT SIGN + {0xA3A6, 0xFF06}, //6262 #FULLWIDTH AMPERSAND + {0xA3A7, 0xFF07}, //6263 #FULLWIDTH APOSTROPHE + {0xA3A8, 0xFF08}, //6264 #FULLWIDTH LEFT PARENTHESIS + {0xA3A9, 0xFF09}, //6265 #FULLWIDTH RIGHT PARENTHESIS + {0xA3AA, 0xFF0A}, //6266 #FULLWIDTH ASTERISK + {0xA3AB, 0xFF0B}, //6267 #FULLWIDTH PLUS SIGN + {0xA3AC, 0xFF0C}, //6268 #FULLWIDTH COMMA + {0xA3AD, 0xFF0D}, //6269 #FULLWIDTH HYPHEN-MINUS + {0xA3AE, 0xFF0E}, //6270 #FULLWIDTH FULL STOP + {0xA3AF, 0xFF0F}, //6271 #FULLWIDTH SOLIDUS + {0xA3B0, 0xFF10}, //6272 #FULLWIDTH DIGIT ZERO + {0xA3B1, 0xFF11}, //6273 #FULLWIDTH DIGIT ONE + {0xA3B2, 0xFF12}, //6274 #FULLWIDTH DIGIT TWO + {0xA3B3, 0xFF13}, //6275 #FULLWIDTH DIGIT THREE + {0xA3B4, 0xFF14}, //6276 #FULLWIDTH DIGIT FOUR + {0xA3B5, 0xFF15}, //6277 #FULLWIDTH DIGIT FIVE + {0xA3B6, 0xFF16}, //6278 #FULLWIDTH DIGIT SIX + {0xA3B7, 0xFF17}, //6279 #FULLWIDTH DIGIT SEVEN + {0xA3B8, 0xFF18}, //6280 #FULLWIDTH DIGIT EIGHT + {0xA3B9, 0xFF19}, //6281 #FULLWIDTH DIGIT NINE + {0xA3BA, 0xFF1A}, //6282 #FULLWIDTH COLON + {0xA3BB, 0xFF1B}, //6283 #FULLWIDTH SEMICOLON + {0xA3BC, 0xFF1C}, //6284 #FULLWIDTH LESS-THAN SIGN + {0xA3BD, 0xFF1D}, //6285 #FULLWIDTH EQUALS SIGN + {0xA3BE, 0xFF1E}, //6286 #FULLWIDTH GREATER-THAN SIGN + {0xA3BF, 0xFF1F}, //6287 #FULLWIDTH QUESTION MARK + {0xA3C0, 0xFF20}, //6288 #FULLWIDTH COMMERCIAL AT + {0xA3C1, 0xFF21}, //6289 #FULLWIDTH LATIN CAPITAL LETTER A + {0xA3C2, 0xFF22}, //6290 #FULLWIDTH LATIN CAPITAL LETTER B + {0xA3C3, 0xFF23}, //6291 #FULLWIDTH LATIN CAPITAL LETTER C + {0xA3C4, 0xFF24}, //6292 #FULLWIDTH LATIN CAPITAL LETTER D + {0xA3C5, 0xFF25}, //6293 #FULLWIDTH LATIN CAPITAL LETTER E + {0xA3C6, 0xFF26}, //6294 #FULLWIDTH LATIN CAPITAL LETTER F + {0xA3C7, 0xFF27}, //6295 #FULLWIDTH LATIN CAPITAL LETTER G + {0xA3C8, 0xFF28}, //6296 #FULLWIDTH LATIN CAPITAL LETTER H + {0xA3C9, 0xFF29}, //6297 #FULLWIDTH LATIN CAPITAL LETTER I + {0xA3CA, 0xFF2A}, //6298 #FULLWIDTH LATIN CAPITAL LETTER J + {0xA3CB, 0xFF2B}, //6299 #FULLWIDTH LATIN CAPITAL LETTER K + {0xA3CC, 0xFF2C}, //6300 #FULLWIDTH LATIN CAPITAL LETTER L + {0xA3CD, 0xFF2D}, //6301 #FULLWIDTH LATIN CAPITAL LETTER M + {0xA3CE, 0xFF2E}, //6302 #FULLWIDTH LATIN CAPITAL LETTER N + {0xA3CF, 0xFF2F}, //6303 #FULLWIDTH LATIN CAPITAL LETTER O + {0xA3D0, 0xFF30}, //6304 #FULLWIDTH LATIN CAPITAL LETTER P + {0xA3D1, 0xFF31}, //6305 #FULLWIDTH LATIN CAPITAL LETTER Q + {0xA3D2, 0xFF32}, //6306 #FULLWIDTH LATIN CAPITAL LETTER R + {0xA3D3, 0xFF33}, //6307 #FULLWIDTH LATIN CAPITAL LETTER S + {0xA3D4, 0xFF34}, //6308 #FULLWIDTH LATIN CAPITAL LETTER T + {0xA3D5, 0xFF35}, //6309 #FULLWIDTH LATIN CAPITAL LETTER U + {0xA3D6, 0xFF36}, //6310 #FULLWIDTH LATIN CAPITAL LETTER V + {0xA3D7, 0xFF37}, //6311 #FULLWIDTH LATIN CAPITAL LETTER W + {0xA3D8, 0xFF38}, //6312 #FULLWIDTH LATIN CAPITAL LETTER X + {0xA3D9, 0xFF39}, //6313 #FULLWIDTH LATIN CAPITAL LETTER Y + {0xA3DA, 0xFF3A}, //6314 #FULLWIDTH LATIN CAPITAL LETTER Z + {0xA3DB, 0xFF3B}, //6315 #FULLWIDTH LEFT SQUARE BRACKET + {0xA3DC, 0xFF3C}, //6316 #FULLWIDTH REVERSE SOLIDUS + {0xA3DD, 0xFF3D}, //6317 #FULLWIDTH RIGHT SQUARE BRACKET + {0xA3DE, 0xFF3E}, //6318 #FULLWIDTH CIRCUMFLEX ACCENT + {0xA3DF, 0xFF3F}, //6319 #FULLWIDTH LOW LINE + {0xA3E0, 0xFF40}, //6320 #FULLWIDTH GRAVE ACCENT + {0xA3E1, 0xFF41}, //6321 #FULLWIDTH LATIN SMALL LETTER A + {0xA3E2, 0xFF42}, //6322 #FULLWIDTH LATIN SMALL LETTER B + {0xA3E3, 0xFF43}, //6323 #FULLWIDTH LATIN SMALL LETTER C + {0xA3E4, 0xFF44}, //6324 #FULLWIDTH LATIN SMALL LETTER D + {0xA3E5, 0xFF45}, //6325 #FULLWIDTH LATIN SMALL LETTER E + {0xA3E6, 0xFF46}, //6326 #FULLWIDTH LATIN SMALL LETTER F + {0xA3E7, 0xFF47}, //6327 #FULLWIDTH LATIN SMALL LETTER G + {0xA3E8, 0xFF48}, //6328 #FULLWIDTH LATIN SMALL LETTER H + {0xA3E9, 0xFF49}, //6329 #FULLWIDTH LATIN SMALL LETTER I + {0xA3EA, 0xFF4A}, //6330 #FULLWIDTH LATIN SMALL LETTER J + {0xA3EB, 0xFF4B}, //6331 #FULLWIDTH LATIN SMALL LETTER K + {0xA3EC, 0xFF4C}, //6332 #FULLWIDTH LATIN SMALL LETTER L + {0xA3ED, 0xFF4D}, //6333 #FULLWIDTH LATIN SMALL LETTER M + {0xA3EE, 0xFF4E}, //6334 #FULLWIDTH LATIN SMALL LETTER N + {0xA3EF, 0xFF4F}, //6335 #FULLWIDTH LATIN SMALL LETTER O + {0xA3F0, 0xFF50}, //6336 #FULLWIDTH LATIN SMALL LETTER P + {0xA3F1, 0xFF51}, //6337 #FULLWIDTH LATIN SMALL LETTER Q + {0xA3F2, 0xFF52}, //6338 #FULLWIDTH LATIN SMALL LETTER R + {0xA3F3, 0xFF53}, //6339 #FULLWIDTH LATIN SMALL LETTER S + {0xA3F4, 0xFF54}, //6340 #FULLWIDTH LATIN SMALL LETTER T + {0xA3F5, 0xFF55}, //6341 #FULLWIDTH LATIN SMALL LETTER U + {0xA3F6, 0xFF56}, //6342 #FULLWIDTH LATIN SMALL LETTER V + {0xA3F7, 0xFF57}, //6343 #FULLWIDTH LATIN SMALL LETTER W + {0xA3F8, 0xFF58}, //6344 #FULLWIDTH LATIN SMALL LETTER X + {0xA3F9, 0xFF59}, //6345 #FULLWIDTH LATIN SMALL LETTER Y + {0xA3FA, 0xFF5A}, //6346 #FULLWIDTH LATIN SMALL LETTER Z + {0xA3FB, 0xFF5B}, //6347 #FULLWIDTH LEFT CURLY BRACKET + {0xA3FC, 0xFF5C}, //6348 #FULLWIDTH VERTICAL LINE + {0xA3FD, 0xFF5D}, //6349 #FULLWIDTH RIGHT CURLY BRACKET + {0xA3FE, 0xFFE3}, //6350 #FULLWIDTH MACRON + {0xA4A1, 0x3041}, //6351 #HIRAGANA LETTER SMALL A + {0xA4A2, 0x3042}, //6352 #HIRAGANA LETTER A + {0xA4A3, 0x3043}, //6353 #HIRAGANA LETTER SMALL I + {0xA4A4, 0x3044}, //6354 #HIRAGANA LETTER I + {0xA4A5, 0x3045}, //6355 #HIRAGANA LETTER SMALL U + {0xA4A6, 0x3046}, //6356 #HIRAGANA LETTER U + {0xA4A7, 0x3047}, //6357 #HIRAGANA LETTER SMALL E + {0xA4A8, 0x3048}, //6358 #HIRAGANA LETTER E + {0xA4A9, 0x3049}, //6359 #HIRAGANA LETTER SMALL O + {0xA4AA, 0x304A}, //6360 #HIRAGANA LETTER O + {0xA4AB, 0x304B}, //6361 #HIRAGANA LETTER KA + {0xA4AC, 0x304C}, //6362 #HIRAGANA LETTER GA + {0xA4AD, 0x304D}, //6363 #HIRAGANA LETTER KI + {0xA4AE, 0x304E}, //6364 #HIRAGANA LETTER GI + {0xA4AF, 0x304F}, //6365 #HIRAGANA LETTER KU + {0xA4B0, 0x3050}, //6366 #HIRAGANA LETTER GU + {0xA4B1, 0x3051}, //6367 #HIRAGANA LETTER KE + {0xA4B2, 0x3052}, //6368 #HIRAGANA LETTER GE + {0xA4B3, 0x3053}, //6369 #HIRAGANA LETTER KO + {0xA4B4, 0x3054}, //6370 #HIRAGANA LETTER GO + {0xA4B5, 0x3055}, //6371 #HIRAGANA LETTER SA + {0xA4B6, 0x3056}, //6372 #HIRAGANA LETTER ZA + {0xA4B7, 0x3057}, //6373 #HIRAGANA LETTER SI + {0xA4B8, 0x3058}, //6374 #HIRAGANA LETTER ZI + {0xA4B9, 0x3059}, //6375 #HIRAGANA LETTER SU + {0xA4BA, 0x305A}, //6376 #HIRAGANA LETTER ZU + {0xA4BB, 0x305B}, //6377 #HIRAGANA LETTER SE + {0xA4BC, 0x305C}, //6378 #HIRAGANA LETTER ZE + {0xA4BD, 0x305D}, //6379 #HIRAGANA LETTER SO + {0xA4BE, 0x305E}, //6380 #HIRAGANA LETTER ZO + {0xA4BF, 0x305F}, //6381 #HIRAGANA LETTER TA + {0xA4C0, 0x3060}, //6382 #HIRAGANA LETTER DA + {0xA4C1, 0x3061}, //6383 #HIRAGANA LETTER TI + {0xA4C2, 0x3062}, //6384 #HIRAGANA LETTER DI + {0xA4C3, 0x3063}, //6385 #HIRAGANA LETTER SMALL TU + {0xA4C4, 0x3064}, //6386 #HIRAGANA LETTER TU + {0xA4C5, 0x3065}, //6387 #HIRAGANA LETTER DU + {0xA4C6, 0x3066}, //6388 #HIRAGANA LETTER TE + {0xA4C7, 0x3067}, //6389 #HIRAGANA LETTER DE + {0xA4C8, 0x3068}, //6390 #HIRAGANA LETTER TO + {0xA4C9, 0x3069}, //6391 #HIRAGANA LETTER DO + {0xA4CA, 0x306A}, //6392 #HIRAGANA LETTER NA + {0xA4CB, 0x306B}, //6393 #HIRAGANA LETTER NI + {0xA4CC, 0x306C}, //6394 #HIRAGANA LETTER NU + {0xA4CD, 0x306D}, //6395 #HIRAGANA LETTER NE + {0xA4CE, 0x306E}, //6396 #HIRAGANA LETTER NO + {0xA4CF, 0x306F}, //6397 #HIRAGANA LETTER HA + {0xA4D0, 0x3070}, //6398 #HIRAGANA LETTER BA + {0xA4D1, 0x3071}, //6399 #HIRAGANA LETTER PA + {0xA4D2, 0x3072}, //6400 #HIRAGANA LETTER HI + {0xA4D3, 0x3073}, //6401 #HIRAGANA LETTER BI + {0xA4D4, 0x3074}, //6402 #HIRAGANA LETTER PI + {0xA4D5, 0x3075}, //6403 #HIRAGANA LETTER HU + {0xA4D6, 0x3076}, //6404 #HIRAGANA LETTER BU + {0xA4D7, 0x3077}, //6405 #HIRAGANA LETTER PU + {0xA4D8, 0x3078}, //6406 #HIRAGANA LETTER HE + {0xA4D9, 0x3079}, //6407 #HIRAGANA LETTER BE + {0xA4DA, 0x307A}, //6408 #HIRAGANA LETTER PE + {0xA4DB, 0x307B}, //6409 #HIRAGANA LETTER HO + {0xA4DC, 0x307C}, //6410 #HIRAGANA LETTER BO + {0xA4DD, 0x307D}, //6411 #HIRAGANA LETTER PO + {0xA4DE, 0x307E}, //6412 #HIRAGANA LETTER MA + {0xA4DF, 0x307F}, //6413 #HIRAGANA LETTER MI + {0xA4E0, 0x3080}, //6414 #HIRAGANA LETTER MU + {0xA4E1, 0x3081}, //6415 #HIRAGANA LETTER ME + {0xA4E2, 0x3082}, //6416 #HIRAGANA LETTER MO + {0xA4E3, 0x3083}, //6417 #HIRAGANA LETTER SMALL YA + {0xA4E4, 0x3084}, //6418 #HIRAGANA LETTER YA + {0xA4E5, 0x3085}, //6419 #HIRAGANA LETTER SMALL YU + {0xA4E6, 0x3086}, //6420 #HIRAGANA LETTER YU + {0xA4E7, 0x3087}, //6421 #HIRAGANA LETTER SMALL YO + {0xA4E8, 0x3088}, //6422 #HIRAGANA LETTER YO + {0xA4E9, 0x3089}, //6423 #HIRAGANA LETTER RA + {0xA4EA, 0x308A}, //6424 #HIRAGANA LETTER RI + {0xA4EB, 0x308B}, //6425 #HIRAGANA LETTER RU + {0xA4EC, 0x308C}, //6426 #HIRAGANA LETTER RE + {0xA4ED, 0x308D}, //6427 #HIRAGANA LETTER RO + {0xA4EE, 0x308E}, //6428 #HIRAGANA LETTER SMALL WA + {0xA4EF, 0x308F}, //6429 #HIRAGANA LETTER WA + {0xA4F0, 0x3090}, //6430 #HIRAGANA LETTER WI + {0xA4F1, 0x3091}, //6431 #HIRAGANA LETTER WE + {0xA4F2, 0x3092}, //6432 #HIRAGANA LETTER WO + {0xA4F3, 0x3093}, //6433 #HIRAGANA LETTER N + {0xA5A1, 0x30A1}, //6434 #KATAKANA LETTER SMALL A + {0xA5A2, 0x30A2}, //6435 #KATAKANA LETTER A + {0xA5A3, 0x30A3}, //6436 #KATAKANA LETTER SMALL I + {0xA5A4, 0x30A4}, //6437 #KATAKANA LETTER I + {0xA5A5, 0x30A5}, //6438 #KATAKANA LETTER SMALL U + {0xA5A6, 0x30A6}, //6439 #KATAKANA LETTER U + {0xA5A7, 0x30A7}, //6440 #KATAKANA LETTER SMALL E + {0xA5A8, 0x30A8}, //6441 #KATAKANA LETTER E + {0xA5A9, 0x30A9}, //6442 #KATAKANA LETTER SMALL O + {0xA5AA, 0x30AA}, //6443 #KATAKANA LETTER O + {0xA5AB, 0x30AB}, //6444 #KATAKANA LETTER KA + {0xA5AC, 0x30AC}, //6445 #KATAKANA LETTER GA + {0xA5AD, 0x30AD}, //6446 #KATAKANA LETTER KI + {0xA5AE, 0x30AE}, //6447 #KATAKANA LETTER GI + {0xA5AF, 0x30AF}, //6448 #KATAKANA LETTER KU + {0xA5B0, 0x30B0}, //6449 #KATAKANA LETTER GU + {0xA5B1, 0x30B1}, //6450 #KATAKANA LETTER KE + {0xA5B2, 0x30B2}, //6451 #KATAKANA LETTER GE + {0xA5B3, 0x30B3}, //6452 #KATAKANA LETTER KO + {0xA5B4, 0x30B4}, //6453 #KATAKANA LETTER GO + {0xA5B5, 0x30B5}, //6454 #KATAKANA LETTER SA + {0xA5B6, 0x30B6}, //6455 #KATAKANA LETTER ZA + {0xA5B7, 0x30B7}, //6456 #KATAKANA LETTER SI + {0xA5B8, 0x30B8}, //6457 #KATAKANA LETTER ZI + {0xA5B9, 0x30B9}, //6458 #KATAKANA LETTER SU + {0xA5BA, 0x30BA}, //6459 #KATAKANA LETTER ZU + {0xA5BB, 0x30BB}, //6460 #KATAKANA LETTER SE + {0xA5BC, 0x30BC}, //6461 #KATAKANA LETTER ZE + {0xA5BD, 0x30BD}, //6462 #KATAKANA LETTER SO + {0xA5BE, 0x30BE}, //6463 #KATAKANA LETTER ZO + {0xA5BF, 0x30BF}, //6464 #KATAKANA LETTER TA + {0xA5C0, 0x30C0}, //6465 #KATAKANA LETTER DA + {0xA5C1, 0x30C1}, //6466 #KATAKANA LETTER TI + {0xA5C2, 0x30C2}, //6467 #KATAKANA LETTER DI + {0xA5C3, 0x30C3}, //6468 #KATAKANA LETTER SMALL TU + {0xA5C4, 0x30C4}, //6469 #KATAKANA LETTER TU + {0xA5C5, 0x30C5}, //6470 #KATAKANA LETTER DU + {0xA5C6, 0x30C6}, //6471 #KATAKANA LETTER TE + {0xA5C7, 0x30C7}, //6472 #KATAKANA LETTER DE + {0xA5C8, 0x30C8}, //6473 #KATAKANA LETTER TO + {0xA5C9, 0x30C9}, //6474 #KATAKANA LETTER DO + {0xA5CA, 0x30CA}, //6475 #KATAKANA LETTER NA + {0xA5CB, 0x30CB}, //6476 #KATAKANA LETTER NI + {0xA5CC, 0x30CC}, //6477 #KATAKANA LETTER NU + {0xA5CD, 0x30CD}, //6478 #KATAKANA LETTER NE + {0xA5CE, 0x30CE}, //6479 #KATAKANA LETTER NO + {0xA5CF, 0x30CF}, //6480 #KATAKANA LETTER HA + {0xA5D0, 0x30D0}, //6481 #KATAKANA LETTER BA + {0xA5D1, 0x30D1}, //6482 #KATAKANA LETTER PA + {0xA5D2, 0x30D2}, //6483 #KATAKANA LETTER HI + {0xA5D3, 0x30D3}, //6484 #KATAKANA LETTER BI + {0xA5D4, 0x30D4}, //6485 #KATAKANA LETTER PI + {0xA5D5, 0x30D5}, //6486 #KATAKANA LETTER HU + {0xA5D6, 0x30D6}, //6487 #KATAKANA LETTER BU + {0xA5D7, 0x30D7}, //6488 #KATAKANA LETTER PU + {0xA5D8, 0x30D8}, //6489 #KATAKANA LETTER HE + {0xA5D9, 0x30D9}, //6490 #KATAKANA LETTER BE + {0xA5DA, 0x30DA}, //6491 #KATAKANA LETTER PE + {0xA5DB, 0x30DB}, //6492 #KATAKANA LETTER HO + {0xA5DC, 0x30DC}, //6493 #KATAKANA LETTER BO + {0xA5DD, 0x30DD}, //6494 #KATAKANA LETTER PO + {0xA5DE, 0x30DE}, //6495 #KATAKANA LETTER MA + {0xA5DF, 0x30DF}, //6496 #KATAKANA LETTER MI + {0xA5E0, 0x30E0}, //6497 #KATAKANA LETTER MU + {0xA5E1, 0x30E1}, //6498 #KATAKANA LETTER ME + {0xA5E2, 0x30E2}, //6499 #KATAKANA LETTER MO + {0xA5E3, 0x30E3}, //6500 #KATAKANA LETTER SMALL YA + {0xA5E4, 0x30E4}, //6501 #KATAKANA LETTER YA + {0xA5E5, 0x30E5}, //6502 #KATAKANA LETTER SMALL YU + {0xA5E6, 0x30E6}, //6503 #KATAKANA LETTER YU + {0xA5E7, 0x30E7}, //6504 #KATAKANA LETTER SMALL YO + {0xA5E8, 0x30E8}, //6505 #KATAKANA LETTER YO + {0xA5E9, 0x30E9}, //6506 #KATAKANA LETTER RA + {0xA5EA, 0x30EA}, //6507 #KATAKANA LETTER RI + {0xA5EB, 0x30EB}, //6508 #KATAKANA LETTER RU + {0xA5EC, 0x30EC}, //6509 #KATAKANA LETTER RE + {0xA5ED, 0x30ED}, //6510 #KATAKANA LETTER RO + {0xA5EE, 0x30EE}, //6511 #KATAKANA LETTER SMALL WA + {0xA5EF, 0x30EF}, //6512 #KATAKANA LETTER WA + {0xA5F0, 0x30F0}, //6513 #KATAKANA LETTER WI + {0xA5F1, 0x30F1}, //6514 #KATAKANA LETTER WE + {0xA5F2, 0x30F2}, //6515 #KATAKANA LETTER WO + {0xA5F3, 0x30F3}, //6516 #KATAKANA LETTER N + {0xA5F4, 0x30F4}, //6517 #KATAKANA LETTER VU + {0xA5F5, 0x30F5}, //6518 #KATAKANA LETTER SMALL KA + {0xA5F6, 0x30F6}, //6519 #KATAKANA LETTER SMALL KE + {0xA6A1, 0x0391}, //6520 #GREEK CAPITAL LETTER ALPHA + {0xA6A2, 0x0392}, //6521 #GREEK CAPITAL LETTER BETA + {0xA6A3, 0x0393}, //6522 #GREEK CAPITAL LETTER GAMMA + {0xA6A4, 0x0394}, //6523 #GREEK CAPITAL LETTER DELTA + {0xA6A5, 0x0395}, //6524 #GREEK CAPITAL LETTER EPSILON + {0xA6A6, 0x0396}, //6525 #GREEK CAPITAL LETTER ZETA + {0xA6A7, 0x0397}, //6526 #GREEK CAPITAL LETTER ETA + {0xA6A8, 0x0398}, //6527 #GREEK CAPITAL LETTER THETA + {0xA6A9, 0x0399}, //6528 #GREEK CAPITAL LETTER IOTA + {0xA6AA, 0x039A}, //6529 #GREEK CAPITAL LETTER KAPPA + {0xA6AB, 0x039B}, //6530 #GREEK CAPITAL LETTER LAMDA + {0xA6AC, 0x039C}, //6531 #GREEK CAPITAL LETTER MU + {0xA6AD, 0x039D}, //6532 #GREEK CAPITAL LETTER NU + {0xA6AE, 0x039E}, //6533 #GREEK CAPITAL LETTER XI + {0xA6AF, 0x039F}, //6534 #GREEK CAPITAL LETTER OMICRON + {0xA6B0, 0x03A0}, //6535 #GREEK CAPITAL LETTER PI + {0xA6B1, 0x03A1}, //6536 #GREEK CAPITAL LETTER RHO + {0xA6B2, 0x03A3}, //6537 #GREEK CAPITAL LETTER SIGMA + {0xA6B3, 0x03A4}, //6538 #GREEK CAPITAL LETTER TAU + {0xA6B4, 0x03A5}, //6539 #GREEK CAPITAL LETTER UPSILON + {0xA6B5, 0x03A6}, //6540 #GREEK CAPITAL LETTER PHI + {0xA6B6, 0x03A7}, //6541 #GREEK CAPITAL LETTER CHI + {0xA6B7, 0x03A8}, //6542 #GREEK CAPITAL LETTER PSI + {0xA6B8, 0x03A9}, //6543 #GREEK CAPITAL LETTER OMEGA + {0xA6C1, 0x03B1}, //6544 #GREEK SMALL LETTER ALPHA + {0xA6C2, 0x03B2}, //6545 #GREEK SMALL LETTER BETA + {0xA6C3, 0x03B3}, //6546 #GREEK SMALL LETTER GAMMA + {0xA6C4, 0x03B4}, //6547 #GREEK SMALL LETTER DELTA + {0xA6C5, 0x03B5}, //6548 #GREEK SMALL LETTER EPSILON + {0xA6C6, 0x03B6}, //6549 #GREEK SMALL LETTER ZETA + {0xA6C7, 0x03B7}, //6550 #GREEK SMALL LETTER ETA + {0xA6C8, 0x03B8}, //6551 #GREEK SMALL LETTER THETA + {0xA6C9, 0x03B9}, //6552 #GREEK SMALL LETTER IOTA + {0xA6CA, 0x03BA}, //6553 #GREEK SMALL LETTER KAPPA + {0xA6CB, 0x03BB}, //6554 #GREEK SMALL LETTER LAMDA + {0xA6CC, 0x03BC}, //6555 #GREEK SMALL LETTER MU + {0xA6CD, 0x03BD}, //6556 #GREEK SMALL LETTER NU + {0xA6CE, 0x03BE}, //6557 #GREEK SMALL LETTER XI + {0xA6CF, 0x03BF}, //6558 #GREEK SMALL LETTER OMICRON + {0xA6D0, 0x03C0}, //6559 #GREEK SMALL LETTER PI + {0xA6D1, 0x03C1}, //6560 #GREEK SMALL LETTER RHO + {0xA6D2, 0x03C3}, //6561 #GREEK SMALL LETTER SIGMA + {0xA6D3, 0x03C4}, //6562 #GREEK SMALL LETTER TAU + {0xA6D4, 0x03C5}, //6563 #GREEK SMALL LETTER UPSILON + {0xA6D5, 0x03C6}, //6564 #GREEK SMALL LETTER PHI + {0xA6D6, 0x03C7}, //6565 #GREEK SMALL LETTER CHI + {0xA6D7, 0x03C8}, //6566 #GREEK SMALL LETTER PSI + {0xA6D8, 0x03C9}, //6567 #GREEK SMALL LETTER OMEGA + {0xA6E0, 0xFE35}, //6568 #PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS + {0xA6E1, 0xFE36}, //6569 #PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS + {0xA6E2, 0xFE39}, //6570 #PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET + {0xA6E3, 0xFE3A}, //6571 #PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET + {0xA6E4, 0xFE3F}, //6572 #PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET + {0xA6E5, 0xFE40}, //6573 #PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET + {0xA6E6, 0xFE3D}, //6574 #PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET + {0xA6E7, 0xFE3E}, //6575 #PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET + {0xA6E8, 0xFE41}, //6576 #PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET + {0xA6E9, 0xFE42}, //6577 #PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET + {0xA6EA, 0xFE43}, //6578 #PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET + {0xA6EB, 0xFE44}, //6579 #PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET + {0xA6EE, 0xFE3B}, //6580 #PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET + {0xA6EF, 0xFE3C}, //6581 #PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET + {0xA6F0, 0xFE37}, //6582 #PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET + {0xA6F1, 0xFE38}, //6583 #PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET + {0xA6F2, 0xFE31}, //6584 #PRESENTATION FORM FOR VERTICAL EM DASH + {0xA6F4, 0xFE33}, //6585 #PRESENTATION FORM FOR VERTICAL LOW LINE + {0xA6F5, 0xFE34}, //6586 #PRESENTATION FORM FOR VERTICAL WAVY LOW LINE + {0xA7A1, 0x0410}, //6587 #CYRILLIC CAPITAL LETTER A + {0xA7A2, 0x0411}, //6588 #CYRILLIC CAPITAL LETTER BE + {0xA7A3, 0x0412}, //6589 #CYRILLIC CAPITAL LETTER VE + {0xA7A4, 0x0413}, //6590 #CYRILLIC CAPITAL LETTER GHE + {0xA7A5, 0x0414}, //6591 #CYRILLIC CAPITAL LETTER DE + {0xA7A6, 0x0415}, //6592 #CYRILLIC CAPITAL LETTER IE + {0xA7A7, 0x0401}, //6593 #CYRILLIC CAPITAL LETTER IO + {0xA7A8, 0x0416}, //6594 #CYRILLIC CAPITAL LETTER ZHE + {0xA7A9, 0x0417}, //6595 #CYRILLIC CAPITAL LETTER ZE + {0xA7AA, 0x0418}, //6596 #CYRILLIC CAPITAL LETTER I + {0xA7AB, 0x0419}, //6597 #CYRILLIC CAPITAL LETTER SHORT I + {0xA7AC, 0x041A}, //6598 #CYRILLIC CAPITAL LETTER KA + {0xA7AD, 0x041B}, //6599 #CYRILLIC CAPITAL LETTER EL + {0xA7AE, 0x041C}, //6600 #CYRILLIC CAPITAL LETTER EM + {0xA7AF, 0x041D}, //6601 #CYRILLIC CAPITAL LETTER EN + {0xA7B0, 0x041E}, //6602 #CYRILLIC CAPITAL LETTER O + {0xA7B1, 0x041F}, //6603 #CYRILLIC CAPITAL LETTER PE + {0xA7B2, 0x0420}, //6604 #CYRILLIC CAPITAL LETTER ER + {0xA7B3, 0x0421}, //6605 #CYRILLIC CAPITAL LETTER ES + {0xA7B4, 0x0422}, //6606 #CYRILLIC CAPITAL LETTER TE + {0xA7B5, 0x0423}, //6607 #CYRILLIC CAPITAL LETTER U + {0xA7B6, 0x0424}, //6608 #CYRILLIC CAPITAL LETTER EF + {0xA7B7, 0x0425}, //6609 #CYRILLIC CAPITAL LETTER HA + {0xA7B8, 0x0426}, //6610 #CYRILLIC CAPITAL LETTER TSE + {0xA7B9, 0x0427}, //6611 #CYRILLIC CAPITAL LETTER CHE + {0xA7BA, 0x0428}, //6612 #CYRILLIC CAPITAL LETTER SHA + {0xA7BB, 0x0429}, //6613 #CYRILLIC CAPITAL LETTER SHCHA + {0xA7BC, 0x042A}, //6614 #CYRILLIC CAPITAL LETTER HARD SIGN + {0xA7BD, 0x042B}, //6615 #CYRILLIC CAPITAL LETTER YERU + {0xA7BE, 0x042C}, //6616 #CYRILLIC CAPITAL LETTER SOFT SIGN + {0xA7BF, 0x042D}, //6617 #CYRILLIC CAPITAL LETTER E + {0xA7C0, 0x042E}, //6618 #CYRILLIC CAPITAL LETTER YU + {0xA7C1, 0x042F}, //6619 #CYRILLIC CAPITAL LETTER YA + {0xA7D1, 0x0430}, //6620 #CYRILLIC SMALL LETTER A + {0xA7D2, 0x0431}, //6621 #CYRILLIC SMALL LETTER BE + {0xA7D3, 0x0432}, //6622 #CYRILLIC SMALL LETTER VE + {0xA7D4, 0x0433}, //6623 #CYRILLIC SMALL LETTER GHE + {0xA7D5, 0x0434}, //6624 #CYRILLIC SMALL LETTER DE + {0xA7D6, 0x0435}, //6625 #CYRILLIC SMALL LETTER IE + {0xA7D7, 0x0451}, //6626 #CYRILLIC SMALL LETTER IO + {0xA7D8, 0x0436}, //6627 #CYRILLIC SMALL LETTER ZHE + {0xA7D9, 0x0437}, //6628 #CYRILLIC SMALL LETTER ZE + {0xA7DA, 0x0438}, //6629 #CYRILLIC SMALL LETTER I + {0xA7DB, 0x0439}, //6630 #CYRILLIC SMALL LETTER SHORT I + {0xA7DC, 0x043A}, //6631 #CYRILLIC SMALL LETTER KA + {0xA7DD, 0x043B}, //6632 #CYRILLIC SMALL LETTER EL + {0xA7DE, 0x043C}, //6633 #CYRILLIC SMALL LETTER EM + {0xA7DF, 0x043D}, //6634 #CYRILLIC SMALL LETTER EN + {0xA7E0, 0x043E}, //6635 #CYRILLIC SMALL LETTER O + {0xA7E1, 0x043F}, //6636 #CYRILLIC SMALL LETTER PE + {0xA7E2, 0x0440}, //6637 #CYRILLIC SMALL LETTER ER + {0xA7E3, 0x0441}, //6638 #CYRILLIC SMALL LETTER ES + {0xA7E4, 0x0442}, //6639 #CYRILLIC SMALL LETTER TE + {0xA7E5, 0x0443}, //6640 #CYRILLIC SMALL LETTER U + {0xA7E6, 0x0444}, //6641 #CYRILLIC SMALL LETTER EF + {0xA7E7, 0x0445}, //6642 #CYRILLIC SMALL LETTER HA + {0xA7E8, 0x0446}, //6643 #CYRILLIC SMALL LETTER TSE + {0xA7E9, 0x0447}, //6644 #CYRILLIC SMALL LETTER CHE + {0xA7EA, 0x0448}, //6645 #CYRILLIC SMALL LETTER SHA + {0xA7EB, 0x0449}, //6646 #CYRILLIC SMALL LETTER SHCHA + {0xA7EC, 0x044A}, //6647 #CYRILLIC SMALL LETTER HARD SIGN + {0xA7ED, 0x044B}, //6648 #CYRILLIC SMALL LETTER YERU + {0xA7EE, 0x044C}, //6649 #CYRILLIC SMALL LETTER SOFT SIGN + {0xA7EF, 0x044D}, //6650 #CYRILLIC SMALL LETTER E + {0xA7F0, 0x044E}, //6651 #CYRILLIC SMALL LETTER YU + {0xA7F1, 0x044F}, //6652 #CYRILLIC SMALL LETTER YA + {0xA840, 0x02CA}, //6653 #MODIFIER LETTER ACUTE ACCENT + {0xA841, 0x02CB}, //6654 #MODIFIER LETTER GRAVE ACCENT + {0xA842, 0x02D9}, //6655 #DOT ABOVE + {0xA843, 0x2013}, //6656 #EN DASH + {0xA844, 0x2015}, //6657 #HORIZONTAL BAR + {0xA845, 0x2025}, //6658 #TWO DOT LEADER + {0xA846, 0x2035}, //6659 #REVERSED PRIME + {0xA847, 0x2105}, //6660 #CARE OF + {0xA848, 0x2109}, //6661 #DEGREE FAHRENHEIT + {0xA849, 0x2196}, //6662 #NORTH WEST ARROW + {0xA84A, 0x2197}, //6663 #NORTH EAST ARROW + {0xA84B, 0x2198}, //6664 #SOUTH EAST ARROW + {0xA84C, 0x2199}, //6665 #SOUTH WEST ARROW + {0xA84D, 0x2215}, //6666 #DIVISION SLASH + {0xA84E, 0x221F}, //6667 #RIGHT ANGLE + {0xA84F, 0x2223}, //6668 #DIVIDES + {0xA850, 0x2252}, //6669 #APPROXIMATELY EQUAL TO OR THE IMAGE OF + {0xA851, 0x2266}, //6670 #LESS-THAN OVER EQUAL TO + {0xA852, 0x2267}, //6671 #GREATER-THAN OVER EQUAL TO + {0xA853, 0x22BF}, //6672 #RIGHT TRIANGLE + {0xA854, 0x2550}, //6673 #BOX DRAWINGS DOUBLE HORIZONTAL + {0xA855, 0x2551}, //6674 #BOX DRAWINGS DOUBLE VERTICAL + {0xA856, 0x2552}, //6675 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + {0xA857, 0x2553}, //6676 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + {0xA858, 0x2554}, //6677 #BOX DRAWINGS DOUBLE DOWN AND RIGHT + {0xA859, 0x2555}, //6678 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + {0xA85A, 0x2556}, //6679 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + {0xA85B, 0x2557}, //6680 #BOX DRAWINGS DOUBLE DOWN AND LEFT + {0xA85C, 0x2558}, //6681 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + {0xA85D, 0x2559}, //6682 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + {0xA85E, 0x255A}, //6683 #BOX DRAWINGS DOUBLE UP AND RIGHT + {0xA85F, 0x255B}, //6684 #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + {0xA860, 0x255C}, //6685 #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + {0xA861, 0x255D}, //6686 #BOX DRAWINGS DOUBLE UP AND LEFT + {0xA862, 0x255E}, //6687 #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + {0xA863, 0x255F}, //6688 #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + {0xA864, 0x2560}, //6689 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + {0xA865, 0x2561}, //6690 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + {0xA866, 0x2562}, //6691 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + {0xA867, 0x2563}, //6692 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT + {0xA868, 0x2564}, //6693 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + {0xA869, 0x2565}, //6694 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + {0xA86A, 0x2566}, //6695 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + {0xA86B, 0x2567}, //6696 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + {0xA86C, 0x2568}, //6697 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + {0xA86D, 0x2569}, //6698 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL + {0xA86E, 0x256A}, //6699 #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + {0xA86F, 0x256B}, //6700 #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + {0xA870, 0x256C}, //6701 #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + {0xA871, 0x256D}, //6702 #BOX DRAWINGS LIGHT ARC DOWN AND RIGHT + {0xA872, 0x256E}, //6703 #BOX DRAWINGS LIGHT ARC DOWN AND LEFT + {0xA873, 0x256F}, //6704 #BOX DRAWINGS LIGHT ARC UP AND LEFT + {0xA874, 0x2570}, //6705 #BOX DRAWINGS LIGHT ARC UP AND RIGHT + {0xA875, 0x2571}, //6706 #BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT + {0xA876, 0x2572}, //6707 #BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT + {0xA877, 0x2573}, //6708 #BOX DRAWINGS LIGHT DIAGONAL CROSS + {0xA878, 0x2581}, //6709 #LOWER ONE EIGHTH BLOCK + {0xA879, 0x2582}, //6710 #LOWER ONE QUARTER BLOCK + {0xA87A, 0x2583}, //6711 #LOWER THREE EIGHTHS BLOCK + {0xA87B, 0x2584}, //6712 #LOWER HALF BLOCK + {0xA87C, 0x2585}, //6713 #LOWER FIVE EIGHTHS BLOCK + {0xA87D, 0x2586}, //6714 #LOWER THREE QUARTERS BLOCK + {0xA87E, 0x2587}, //6715 #LOWER SEVEN EIGHTHS BLOCK + {0xA880, 0x2588}, //6716 #FULL BLOCK + {0xA881, 0x2589}, //6717 #LEFT SEVEN EIGHTHS BLOCK + {0xA882, 0x258A}, //6718 #LEFT THREE QUARTERS BLOCK + {0xA883, 0x258B}, //6719 #LEFT FIVE EIGHTHS BLOCK + {0xA884, 0x258C}, //6720 #LEFT HALF BLOCK + {0xA885, 0x258D}, //6721 #LEFT THREE EIGHTHS BLOCK + {0xA886, 0x258E}, //6722 #LEFT ONE QUARTER BLOCK + {0xA887, 0x258F}, //6723 #LEFT ONE EIGHTH BLOCK + {0xA888, 0x2593}, //6724 #DARK SHADE + {0xA889, 0x2594}, //6725 #UPPER ONE EIGHTH BLOCK + {0xA88A, 0x2595}, //6726 #RIGHT ONE EIGHTH BLOCK + {0xA88B, 0x25BC}, //6727 #BLACK DOWN-POINTING TRIANGLE + {0xA88C, 0x25BD}, //6728 #WHITE DOWN-POINTING TRIANGLE + {0xA88D, 0x25E2}, //6729 #BLACK LOWER RIGHT TRIANGLE + {0xA88E, 0x25E3}, //6730 #BLACK LOWER LEFT TRIANGLE + {0xA88F, 0x25E4}, //6731 #BLACK UPPER LEFT TRIANGLE + {0xA890, 0x25E5}, //6732 #BLACK UPPER RIGHT TRIANGLE + {0xA891, 0x2609}, //6733 #SUN + {0xA892, 0x2295}, //6734 #CIRCLED PLUS + {0xA893, 0x3012}, //6735 #POSTAL MARK + {0xA894, 0x301D}, //6736 #REVERSED DOUBLE PRIME QUOTATION MARK + {0xA895, 0x301E}, //6737 #DOUBLE PRIME QUOTATION MARK + {0xA8A1, 0x0101}, //6738 #LATIN SMALL LETTER A WITH MACRON + {0xA8A2, 0x00E1}, //6739 #LATIN SMALL LETTER A WITH ACUTE + {0xA8A3, 0x01CE}, //6740 #LATIN SMALL LETTER A WITH CARON + {0xA8A4, 0x00E0}, //6741 #LATIN SMALL LETTER A WITH GRAVE + {0xA8A5, 0x0113}, //6742 #LATIN SMALL LETTER E WITH MACRON + {0xA8A6, 0x00E9}, //6743 #LATIN SMALL LETTER E WITH ACUTE + {0xA8A7, 0x011B}, //6744 #LATIN SMALL LETTER E WITH CARON + {0xA8A8, 0x00E8}, //6745 #LATIN SMALL LETTER E WITH GRAVE + {0xA8A9, 0x012B}, //6746 #LATIN SMALL LETTER I WITH MACRON + {0xA8AA, 0x00ED}, //6747 #LATIN SMALL LETTER I WITH ACUTE + {0xA8AB, 0x01D0}, //6748 #LATIN SMALL LETTER I WITH CARON + {0xA8AC, 0x00EC}, //6749 #LATIN SMALL LETTER I WITH GRAVE + {0xA8AD, 0x014D}, //6750 #LATIN SMALL LETTER O WITH MACRON + {0xA8AE, 0x00F3}, //6751 #LATIN SMALL LETTER O WITH ACUTE + {0xA8AF, 0x01D2}, //6752 #LATIN SMALL LETTER O WITH CARON + {0xA8B0, 0x00F2}, //6753 #LATIN SMALL LETTER O WITH GRAVE + {0xA8B1, 0x016B}, //6754 #LATIN SMALL LETTER U WITH MACRON + {0xA8B2, 0x00FA}, //6755 #LATIN SMALL LETTER U WITH ACUTE + {0xA8B3, 0x01D4}, //6756 #LATIN SMALL LETTER U WITH CARON + {0xA8B4, 0x00F9}, //6757 #LATIN SMALL LETTER U WITH GRAVE + {0xA8B5, 0x01D6}, //6758 #LATIN SMALL LETTER U WITH DIAERESIS AND MACRON + {0xA8B6, 0x01D8}, //6759 #LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE + {0xA8B7, 0x01DA}, //6760 #LATIN SMALL LETTER U WITH DIAERESIS AND CARON + {0xA8B8, 0x01DC}, //6761 #LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE + {0xA8B9, 0x00FC}, //6762 #LATIN SMALL LETTER U WITH DIAERESIS + {0xA8BA, 0x00EA}, //6763 #LATIN SMALL LETTER E WITH CIRCUMFLEX + {0xA8BB, 0x0251}, //6764 #LATIN SMALL LETTER ALPHA + {0xA8BD, 0x0144}, //6765 #LATIN SMALL LETTER N WITH ACUTE + {0xA8BE, 0x0148}, //6766 #LATIN SMALL LETTER N WITH CARON + {0xA8C0, 0x0261}, //6767 #LATIN SMALL LETTER SCRIPT G + {0xA8C5, 0x3105}, //6768 #BOPOMOFO LETTER B + {0xA8C6, 0x3106}, //6769 #BOPOMOFO LETTER P + {0xA8C7, 0x3107}, //6770 #BOPOMOFO LETTER M + {0xA8C8, 0x3108}, //6771 #BOPOMOFO LETTER F + {0xA8C9, 0x3109}, //6772 #BOPOMOFO LETTER D + {0xA8CA, 0x310A}, //6773 #BOPOMOFO LETTER T + {0xA8CB, 0x310B}, //6774 #BOPOMOFO LETTER N + {0xA8CC, 0x310C}, //6775 #BOPOMOFO LETTER L + {0xA8CD, 0x310D}, //6776 #BOPOMOFO LETTER G + {0xA8CE, 0x310E}, //6777 #BOPOMOFO LETTER K + {0xA8CF, 0x310F}, //6778 #BOPOMOFO LETTER H + {0xA8D0, 0x3110}, //6779 #BOPOMOFO LETTER J + {0xA8D1, 0x3111}, //6780 #BOPOMOFO LETTER Q + {0xA8D2, 0x3112}, //6781 #BOPOMOFO LETTER X + {0xA8D3, 0x3113}, //6782 #BOPOMOFO LETTER ZH + {0xA8D4, 0x3114}, //6783 #BOPOMOFO LETTER CH + {0xA8D5, 0x3115}, //6784 #BOPOMOFO LETTER SH + {0xA8D6, 0x3116}, //6785 #BOPOMOFO LETTER R + {0xA8D7, 0x3117}, //6786 #BOPOMOFO LETTER Z + {0xA8D8, 0x3118}, //6787 #BOPOMOFO LETTER C + {0xA8D9, 0x3119}, //6788 #BOPOMOFO LETTER S + {0xA8DA, 0x311A}, //6789 #BOPOMOFO LETTER A + {0xA8DB, 0x311B}, //6790 #BOPOMOFO LETTER O + {0xA8DC, 0x311C}, //6791 #BOPOMOFO LETTER E + {0xA8DD, 0x311D}, //6792 #BOPOMOFO LETTER EH + {0xA8DE, 0x311E}, //6793 #BOPOMOFO LETTER AI + {0xA8DF, 0x311F}, //6794 #BOPOMOFO LETTER EI + {0xA8E0, 0x3120}, //6795 #BOPOMOFO LETTER AU + {0xA8E1, 0x3121}, //6796 #BOPOMOFO LETTER OU + {0xA8E2, 0x3122}, //6797 #BOPOMOFO LETTER AN + {0xA8E3, 0x3123}, //6798 #BOPOMOFO LETTER EN + {0xA8E4, 0x3124}, //6799 #BOPOMOFO LETTER ANG + {0xA8E5, 0x3125}, //6800 #BOPOMOFO LETTER ENG + {0xA8E6, 0x3126}, //6801 #BOPOMOFO LETTER ER + {0xA8E7, 0x3127}, //6802 #BOPOMOFO LETTER I + {0xA8E8, 0x3128}, //6803 #BOPOMOFO LETTER U + {0xA8E9, 0x3129}, //6804 #BOPOMOFO LETTER IU + {0xA940, 0x3021}, //6805 #HANGZHOU NUMERAL ONE + {0xA941, 0x3022}, //6806 #HANGZHOU NUMERAL TWO + {0xA942, 0x3023}, //6807 #HANGZHOU NUMERAL THREE + {0xA943, 0x3024}, //6808 #HANGZHOU NUMERAL FOUR + {0xA944, 0x3025}, //6809 #HANGZHOU NUMERAL FIVE + {0xA945, 0x3026}, //6810 #HANGZHOU NUMERAL SIX + {0xA946, 0x3027}, //6811 #HANGZHOU NUMERAL SEVEN + {0xA947, 0x3028}, //6812 #HANGZHOU NUMERAL EIGHT + {0xA948, 0x3029}, //6813 #HANGZHOU NUMERAL NINE + {0xA949, 0x32A3}, //6814 #CIRCLED IDEOGRAPH CORRECT + {0xA94A, 0x338E}, //6815 #SQUARE MG + {0xA94B, 0x338F}, //6816 #SQUARE KG + {0xA94C, 0x339C}, //6817 #SQUARE MM + {0xA94D, 0x339D}, //6818 #SQUARE CM + {0xA94E, 0x339E}, //6819 #SQUARE KM + {0xA94F, 0x33A1}, //6820 #SQUARE M SQUARED + {0xA950, 0x33C4}, //6821 #SQUARE CC + {0xA951, 0x33CE}, //6822 #SQUARE KM CAPITAL + {0xA952, 0x33D1}, //6823 #SQUARE LN + {0xA953, 0x33D2}, //6824 #SQUARE LOG + {0xA954, 0x33D5}, //6825 #SQUARE MIL + {0xA955, 0xFE30}, //6826 #PRESENTATION FORM FOR VERTICAL TWO DOT LEADER + {0xA956, 0xFFE2}, //6827 #FULLWIDTH NOT SIGN + {0xA957, 0xFFE4}, //6828 #FULLWIDTH BROKEN BAR + {0xA959, 0x2121}, //6829 #TELEPHONE SIGN + {0xA95A, 0x3231}, //6830 #PARENTHESIZED IDEOGRAPH STOCK + {0xA95C, 0x2010}, //6831 #HYPHEN + {0xA960, 0x30FC}, //6832 #KATAKANA-HIRAGANA PROLONGED SOUND MARK + {0xA961, 0x309B}, //6833 #KATAKANA-HIRAGANA VOICED SOUND MARK + {0xA962, 0x309C}, //6834 #KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + {0xA963, 0x30FD}, //6835 #KATAKANA ITERATION MARK + {0xA964, 0x30FE}, //6836 #KATAKANA VOICED ITERATION MARK + {0xA965, 0x3006}, //6837 #IDEOGRAPHIC CLOSING MARK + {0xA966, 0x309D}, //6838 #HIRAGANA ITERATION MARK + {0xA967, 0x309E}, //6839 #HIRAGANA VOICED ITERATION MARK + {0xA968, 0xFE49}, //6840 #DASHED OVERLINE + {0xA969, 0xFE4A}, //6841 #CENTRELINE OVERLINE + {0xA96A, 0xFE4B}, //6842 #WAVY OVERLINE + {0xA96B, 0xFE4C}, //6843 #DOUBLE WAVY OVERLINE + {0xA96C, 0xFE4D}, //6844 #DASHED LOW LINE + {0xA96D, 0xFE4E}, //6845 #CENTRELINE LOW LINE + {0xA96E, 0xFE4F}, //6846 #WAVY LOW LINE + {0xA96F, 0xFE50}, //6847 #SMALL COMMA + {0xA970, 0xFE51}, //6848 #SMALL IDEOGRAPHIC COMMA + {0xA971, 0xFE52}, //6849 #SMALL FULL STOP + {0xA972, 0xFE54}, //6850 #SMALL SEMICOLON + {0xA973, 0xFE55}, //6851 #SMALL COLON + {0xA974, 0xFE56}, //6852 #SMALL QUESTION MARK + {0xA975, 0xFE57}, //6853 #SMALL EXCLAMATION MARK + {0xA976, 0xFE59}, //6854 #SMALL LEFT PARENTHESIS + {0xA977, 0xFE5A}, //6855 #SMALL RIGHT PARENTHESIS + {0xA978, 0xFE5B}, //6856 #SMALL LEFT CURLY BRACKET + {0xA979, 0xFE5C}, //6857 #SMALL RIGHT CURLY BRACKET + {0xA97A, 0xFE5D}, //6858 #SMALL LEFT TORTOISE SHELL BRACKET + {0xA97B, 0xFE5E}, //6859 #SMALL RIGHT TORTOISE SHELL BRACKET + {0xA97C, 0xFE5F}, //6860 #SMALL NUMBER SIGN + {0xA97D, 0xFE60}, //6861 #SMALL AMPERSAND + {0xA97E, 0xFE61}, //6862 #SMALL ASTERISK + {0xA980, 0xFE62}, //6863 #SMALL PLUS SIGN + {0xA981, 0xFE63}, //6864 #SMALL HYPHEN-MINUS + {0xA982, 0xFE64}, //6865 #SMALL LESS-THAN SIGN + {0xA983, 0xFE65}, //6866 #SMALL GREATER-THAN SIGN + {0xA984, 0xFE66}, //6867 #SMALL EQUALS SIGN + {0xA985, 0xFE68}, //6868 #SMALL REVERSE SOLIDUS + {0xA986, 0xFE69}, //6869 #SMALL DOLLAR SIGN + {0xA987, 0xFE6A}, //6870 #SMALL PERCENT SIGN + {0xA988, 0xFE6B}, //6871 #SMALL COMMERCIAL AT + {0xA996, 0x3007}, //6872 #IDEOGRAPHIC NUMBER ZERO + {0xA9A4, 0x2500}, //6873 #BOX DRAWINGS LIGHT HORIZONTAL + {0xA9A5, 0x2501}, //6874 #BOX DRAWINGS HEAVY HORIZONTAL + {0xA9A6, 0x2502}, //6875 #BOX DRAWINGS LIGHT VERTICAL + {0xA9A7, 0x2503}, //6876 #BOX DRAWINGS HEAVY VERTICAL + {0xA9A8, 0x2504}, //6877 #BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL + {0xA9A9, 0x2505}, //6878 #BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL + {0xA9AA, 0x2506}, //6879 #BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL + {0xA9AB, 0x2507}, //6880 #BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL + {0xA9AC, 0x2508}, //6881 #BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL + {0xA9AD, 0x2509}, //6882 #BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL + {0xA9AE, 0x250A}, //6883 #BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL + {0xA9AF, 0x250B}, //6884 #BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL + {0xA9B0, 0x250C}, //6885 #BOX DRAWINGS LIGHT DOWN AND RIGHT + {0xA9B1, 0x250D}, //6886 #BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY + {0xA9B2, 0x250E}, //6887 #BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT + {0xA9B3, 0x250F}, //6888 #BOX DRAWINGS HEAVY DOWN AND RIGHT + {0xA9B4, 0x2510}, //6889 #BOX DRAWINGS LIGHT DOWN AND LEFT + {0xA9B5, 0x2511}, //6890 #BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY + {0xA9B6, 0x2512}, //6891 #BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT + {0xA9B7, 0x2513}, //6892 #BOX DRAWINGS HEAVY DOWN AND LEFT + {0xA9B8, 0x2514}, //6893 #BOX DRAWINGS LIGHT UP AND RIGHT + {0xA9B9, 0x2515}, //6894 #BOX DRAWINGS UP LIGHT AND RIGHT HEAVY + {0xA9BA, 0x2516}, //6895 #BOX DRAWINGS UP HEAVY AND RIGHT LIGHT + {0xA9BB, 0x2517}, //6896 #BOX DRAWINGS HEAVY UP AND RIGHT + {0xA9BC, 0x2518}, //6897 #BOX DRAWINGS LIGHT UP AND LEFT + {0xA9BD, 0x2519}, //6898 #BOX DRAWINGS UP LIGHT AND LEFT HEAVY + {0xA9BE, 0x251A}, //6899 #BOX DRAWINGS UP HEAVY AND LEFT LIGHT + {0xA9BF, 0x251B}, //6900 #BOX DRAWINGS HEAVY UP AND LEFT + {0xA9C0, 0x251C}, //6901 #BOX DRAWINGS LIGHT VERTICAL AND RIGHT + {0xA9C1, 0x251D}, //6902 #BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY + {0xA9C2, 0x251E}, //6903 #BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT + {0xA9C3, 0x251F}, //6904 #BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT + {0xA9C4, 0x2520}, //6905 #BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT + {0xA9C5, 0x2521}, //6906 #BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY + {0xA9C6, 0x2522}, //6907 #BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY + {0xA9C7, 0x2523}, //6908 #BOX DRAWINGS HEAVY VERTICAL AND RIGHT + {0xA9C8, 0x2524}, //6909 #BOX DRAWINGS LIGHT VERTICAL AND LEFT + {0xA9C9, 0x2525}, //6910 #BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY + {0xA9CA, 0x2526}, //6911 #BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT + {0xA9CB, 0x2527}, //6912 #BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT + {0xA9CC, 0x2528}, //6913 #BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT + {0xA9CD, 0x2529}, //6914 #BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY + {0xA9CE, 0x252A}, //6915 #BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY + {0xA9CF, 0x252B}, //6916 #BOX DRAWINGS HEAVY VERTICAL AND LEFT + {0xA9D0, 0x252C}, //6917 #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + {0xA9D1, 0x252D}, //6918 #BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT + {0xA9D2, 0x252E}, //6919 #BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT + {0xA9D3, 0x252F}, //6920 #BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY + {0xA9D4, 0x2530}, //6921 #BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT + {0xA9D5, 0x2531}, //6922 #BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY + {0xA9D6, 0x2532}, //6923 #BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY + {0xA9D7, 0x2533}, //6924 #BOX DRAWINGS HEAVY DOWN AND HORIZONTAL + {0xA9D8, 0x2534}, //6925 #BOX DRAWINGS LIGHT UP AND HORIZONTAL + {0xA9D9, 0x2535}, //6926 #BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT + {0xA9DA, 0x2536}, //6927 #BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT + {0xA9DB, 0x2537}, //6928 #BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY + {0xA9DC, 0x2538}, //6929 #BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT + {0xA9DD, 0x2539}, //6930 #BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY + {0xA9DE, 0x253A}, //6931 #BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY + {0xA9DF, 0x253B}, //6932 #BOX DRAWINGS HEAVY UP AND HORIZONTAL + {0xA9E0, 0x253C}, //6933 #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + {0xA9E1, 0x253D}, //6934 #BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT + {0xA9E2, 0x253E}, //6935 #BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT + {0xA9E3, 0x253F}, //6936 #BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY + {0xA9E4, 0x2540}, //6937 #BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT + {0xA9E5, 0x2541}, //6938 #BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT + {0xA9E6, 0x2542}, //6939 #BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT + {0xA9E7, 0x2543}, //6940 #BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT + {0xA9E8, 0x2544}, //6941 #BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT + {0xA9E9, 0x2545}, //6942 #BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT + {0xA9EA, 0x2546}, //6943 #BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT + {0xA9EB, 0x2547}, //6944 #BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY + {0xA9EC, 0x2548}, //6945 #BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY + {0xA9ED, 0x2549}, //6946 #BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY + {0xA9EE, 0x254A}, //6947 #BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY + {0xA9EF, 0x254B}, //6948 #BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL + {0xAA40, 0x72DC}, //6949 #CJK UNIFIED IDEOGRAPH + {0xAA41, 0x72DD}, //6950 #CJK UNIFIED IDEOGRAPH + {0xAA42, 0x72DF}, //6951 #CJK UNIFIED IDEOGRAPH + {0xAA43, 0x72E2}, //6952 #CJK UNIFIED IDEOGRAPH + {0xAA44, 0x72E3}, //6953 #CJK UNIFIED IDEOGRAPH + {0xAA45, 0x72E4}, //6954 #CJK UNIFIED IDEOGRAPH + {0xAA46, 0x72E5}, //6955 #CJK UNIFIED IDEOGRAPH + {0xAA47, 0x72E6}, //6956 #CJK UNIFIED IDEOGRAPH + {0xAA48, 0x72E7}, //6957 #CJK UNIFIED IDEOGRAPH + {0xAA49, 0x72EA}, //6958 #CJK UNIFIED IDEOGRAPH + {0xAA4A, 0x72EB}, //6959 #CJK UNIFIED IDEOGRAPH + {0xAA4B, 0x72F5}, //6960 #CJK UNIFIED IDEOGRAPH + {0xAA4C, 0x72F6}, //6961 #CJK UNIFIED IDEOGRAPH + {0xAA4D, 0x72F9}, //6962 #CJK UNIFIED IDEOGRAPH + {0xAA4E, 0x72FD}, //6963 #CJK UNIFIED IDEOGRAPH + {0xAA4F, 0x72FE}, //6964 #CJK UNIFIED IDEOGRAPH + {0xAA50, 0x72FF}, //6965 #CJK UNIFIED IDEOGRAPH + {0xAA51, 0x7300}, //6966 #CJK UNIFIED IDEOGRAPH + {0xAA52, 0x7302}, //6967 #CJK UNIFIED IDEOGRAPH + {0xAA53, 0x7304}, //6968 #CJK UNIFIED IDEOGRAPH + {0xAA54, 0x7305}, //6969 #CJK UNIFIED IDEOGRAPH + {0xAA55, 0x7306}, //6970 #CJK UNIFIED IDEOGRAPH + {0xAA56, 0x7307}, //6971 #CJK UNIFIED IDEOGRAPH + {0xAA57, 0x7308}, //6972 #CJK UNIFIED IDEOGRAPH + {0xAA58, 0x7309}, //6973 #CJK UNIFIED IDEOGRAPH + {0xAA59, 0x730B}, //6974 #CJK UNIFIED IDEOGRAPH + {0xAA5A, 0x730C}, //6975 #CJK UNIFIED IDEOGRAPH + {0xAA5B, 0x730D}, //6976 #CJK UNIFIED IDEOGRAPH + {0xAA5C, 0x730F}, //6977 #CJK UNIFIED IDEOGRAPH + {0xAA5D, 0x7310}, //6978 #CJK UNIFIED IDEOGRAPH + {0xAA5E, 0x7311}, //6979 #CJK UNIFIED IDEOGRAPH + {0xAA5F, 0x7312}, //6980 #CJK UNIFIED IDEOGRAPH + {0xAA60, 0x7314}, //6981 #CJK UNIFIED IDEOGRAPH + {0xAA61, 0x7318}, //6982 #CJK UNIFIED IDEOGRAPH + {0xAA62, 0x7319}, //6983 #CJK UNIFIED IDEOGRAPH + {0xAA63, 0x731A}, //6984 #CJK UNIFIED IDEOGRAPH + {0xAA64, 0x731F}, //6985 #CJK UNIFIED IDEOGRAPH + {0xAA65, 0x7320}, //6986 #CJK UNIFIED IDEOGRAPH + {0xAA66, 0x7323}, //6987 #CJK UNIFIED IDEOGRAPH + {0xAA67, 0x7324}, //6988 #CJK UNIFIED IDEOGRAPH + {0xAA68, 0x7326}, //6989 #CJK UNIFIED IDEOGRAPH + {0xAA69, 0x7327}, //6990 #CJK UNIFIED IDEOGRAPH + {0xAA6A, 0x7328}, //6991 #CJK UNIFIED IDEOGRAPH + {0xAA6B, 0x732D}, //6992 #CJK UNIFIED IDEOGRAPH + {0xAA6C, 0x732F}, //6993 #CJK UNIFIED IDEOGRAPH + {0xAA6D, 0x7330}, //6994 #CJK UNIFIED IDEOGRAPH + {0xAA6E, 0x7332}, //6995 #CJK UNIFIED IDEOGRAPH + {0xAA6F, 0x7333}, //6996 #CJK UNIFIED IDEOGRAPH + {0xAA70, 0x7335}, //6997 #CJK UNIFIED IDEOGRAPH + {0xAA71, 0x7336}, //6998 #CJK UNIFIED IDEOGRAPH + {0xAA72, 0x733A}, //6999 #CJK UNIFIED IDEOGRAPH + {0xAA73, 0x733B}, //7000 #CJK UNIFIED IDEOGRAPH + {0xAA74, 0x733C}, //7001 #CJK UNIFIED IDEOGRAPH + {0xAA75, 0x733D}, //7002 #CJK UNIFIED IDEOGRAPH + {0xAA76, 0x7340}, //7003 #CJK UNIFIED IDEOGRAPH + {0xAA77, 0x7341}, //7004 #CJK UNIFIED IDEOGRAPH + {0xAA78, 0x7342}, //7005 #CJK UNIFIED IDEOGRAPH + {0xAA79, 0x7343}, //7006 #CJK UNIFIED IDEOGRAPH + {0xAA7A, 0x7344}, //7007 #CJK UNIFIED IDEOGRAPH + {0xAA7B, 0x7345}, //7008 #CJK UNIFIED IDEOGRAPH + {0xAA7C, 0x7346}, //7009 #CJK UNIFIED IDEOGRAPH + {0xAA7D, 0x7347}, //7010 #CJK UNIFIED IDEOGRAPH + {0xAA7E, 0x7348}, //7011 #CJK UNIFIED IDEOGRAPH + {0xAA80, 0x7349}, //7012 #CJK UNIFIED IDEOGRAPH + {0xAA81, 0x734A}, //7013 #CJK UNIFIED IDEOGRAPH + {0xAA82, 0x734B}, //7014 #CJK UNIFIED IDEOGRAPH + {0xAA83, 0x734C}, //7015 #CJK UNIFIED IDEOGRAPH + {0xAA84, 0x734E}, //7016 #CJK UNIFIED IDEOGRAPH + {0xAA85, 0x734F}, //7017 #CJK UNIFIED IDEOGRAPH + {0xAA86, 0x7351}, //7018 #CJK UNIFIED IDEOGRAPH + {0xAA87, 0x7353}, //7019 #CJK UNIFIED IDEOGRAPH + {0xAA88, 0x7354}, //7020 #CJK UNIFIED IDEOGRAPH + {0xAA89, 0x7355}, //7021 #CJK UNIFIED IDEOGRAPH + {0xAA8A, 0x7356}, //7022 #CJK UNIFIED IDEOGRAPH + {0xAA8B, 0x7358}, //7023 #CJK UNIFIED IDEOGRAPH + {0xAA8C, 0x7359}, //7024 #CJK UNIFIED IDEOGRAPH + {0xAA8D, 0x735A}, //7025 #CJK UNIFIED IDEOGRAPH + {0xAA8E, 0x735B}, //7026 #CJK UNIFIED IDEOGRAPH + {0xAA8F, 0x735C}, //7027 #CJK UNIFIED IDEOGRAPH + {0xAA90, 0x735D}, //7028 #CJK UNIFIED IDEOGRAPH + {0xAA91, 0x735E}, //7029 #CJK UNIFIED IDEOGRAPH + {0xAA92, 0x735F}, //7030 #CJK UNIFIED IDEOGRAPH + {0xAA93, 0x7361}, //7031 #CJK UNIFIED IDEOGRAPH + {0xAA94, 0x7362}, //7032 #CJK UNIFIED IDEOGRAPH + {0xAA95, 0x7363}, //7033 #CJK UNIFIED IDEOGRAPH + {0xAA96, 0x7364}, //7034 #CJK UNIFIED IDEOGRAPH + {0xAA97, 0x7365}, //7035 #CJK UNIFIED IDEOGRAPH + {0xAA98, 0x7366}, //7036 #CJK UNIFIED IDEOGRAPH + {0xAA99, 0x7367}, //7037 #CJK UNIFIED IDEOGRAPH + {0xAA9A, 0x7368}, //7038 #CJK UNIFIED IDEOGRAPH + {0xAA9B, 0x7369}, //7039 #CJK UNIFIED IDEOGRAPH + {0xAA9C, 0x736A}, //7040 #CJK UNIFIED IDEOGRAPH + {0xAA9D, 0x736B}, //7041 #CJK UNIFIED IDEOGRAPH + {0xAA9E, 0x736E}, //7042 #CJK UNIFIED IDEOGRAPH + {0xAA9F, 0x7370}, //7043 #CJK UNIFIED IDEOGRAPH + {0xAAA0, 0x7371}, //7044 #CJK UNIFIED IDEOGRAPH + {0xAB40, 0x7372}, //7045 #CJK UNIFIED IDEOGRAPH + {0xAB41, 0x7373}, //7046 #CJK UNIFIED IDEOGRAPH + {0xAB42, 0x7374}, //7047 #CJK UNIFIED IDEOGRAPH + {0xAB43, 0x7375}, //7048 #CJK UNIFIED IDEOGRAPH + {0xAB44, 0x7376}, //7049 #CJK UNIFIED IDEOGRAPH + {0xAB45, 0x7377}, //7050 #CJK UNIFIED IDEOGRAPH + {0xAB46, 0x7378}, //7051 #CJK UNIFIED IDEOGRAPH + {0xAB47, 0x7379}, //7052 #CJK UNIFIED IDEOGRAPH + {0xAB48, 0x737A}, //7053 #CJK UNIFIED IDEOGRAPH + {0xAB49, 0x737B}, //7054 #CJK UNIFIED IDEOGRAPH + {0xAB4A, 0x737C}, //7055 #CJK UNIFIED IDEOGRAPH + {0xAB4B, 0x737D}, //7056 #CJK UNIFIED IDEOGRAPH + {0xAB4C, 0x737F}, //7057 #CJK UNIFIED IDEOGRAPH + {0xAB4D, 0x7380}, //7058 #CJK UNIFIED IDEOGRAPH + {0xAB4E, 0x7381}, //7059 #CJK UNIFIED IDEOGRAPH + {0xAB4F, 0x7382}, //7060 #CJK UNIFIED IDEOGRAPH + {0xAB50, 0x7383}, //7061 #CJK UNIFIED IDEOGRAPH + {0xAB51, 0x7385}, //7062 #CJK UNIFIED IDEOGRAPH + {0xAB52, 0x7386}, //7063 #CJK UNIFIED IDEOGRAPH + {0xAB53, 0x7388}, //7064 #CJK UNIFIED IDEOGRAPH + {0xAB54, 0x738A}, //7065 #CJK UNIFIED IDEOGRAPH + {0xAB55, 0x738C}, //7066 #CJK UNIFIED IDEOGRAPH + {0xAB56, 0x738D}, //7067 #CJK UNIFIED IDEOGRAPH + {0xAB57, 0x738F}, //7068 #CJK UNIFIED IDEOGRAPH + {0xAB58, 0x7390}, //7069 #CJK UNIFIED IDEOGRAPH + {0xAB59, 0x7392}, //7070 #CJK UNIFIED IDEOGRAPH + {0xAB5A, 0x7393}, //7071 #CJK UNIFIED IDEOGRAPH + {0xAB5B, 0x7394}, //7072 #CJK UNIFIED IDEOGRAPH + {0xAB5C, 0x7395}, //7073 #CJK UNIFIED IDEOGRAPH + {0xAB5D, 0x7397}, //7074 #CJK UNIFIED IDEOGRAPH + {0xAB5E, 0x7398}, //7075 #CJK UNIFIED IDEOGRAPH + {0xAB5F, 0x7399}, //7076 #CJK UNIFIED IDEOGRAPH + {0xAB60, 0x739A}, //7077 #CJK UNIFIED IDEOGRAPH + {0xAB61, 0x739C}, //7078 #CJK UNIFIED IDEOGRAPH + {0xAB62, 0x739D}, //7079 #CJK UNIFIED IDEOGRAPH + {0xAB63, 0x739E}, //7080 #CJK UNIFIED IDEOGRAPH + {0xAB64, 0x73A0}, //7081 #CJK UNIFIED IDEOGRAPH + {0xAB65, 0x73A1}, //7082 #CJK UNIFIED IDEOGRAPH + {0xAB66, 0x73A3}, //7083 #CJK UNIFIED IDEOGRAPH + {0xAB67, 0x73A4}, //7084 #CJK UNIFIED IDEOGRAPH + {0xAB68, 0x73A5}, //7085 #CJK UNIFIED IDEOGRAPH + {0xAB69, 0x73A6}, //7086 #CJK UNIFIED IDEOGRAPH + {0xAB6A, 0x73A7}, //7087 #CJK UNIFIED IDEOGRAPH + {0xAB6B, 0x73A8}, //7088 #CJK UNIFIED IDEOGRAPH + {0xAB6C, 0x73AA}, //7089 #CJK UNIFIED IDEOGRAPH + {0xAB6D, 0x73AC}, //7090 #CJK UNIFIED IDEOGRAPH + {0xAB6E, 0x73AD}, //7091 #CJK UNIFIED IDEOGRAPH + {0xAB6F, 0x73B1}, //7092 #CJK UNIFIED IDEOGRAPH + {0xAB70, 0x73B4}, //7093 #CJK UNIFIED IDEOGRAPH + {0xAB71, 0x73B5}, //7094 #CJK UNIFIED IDEOGRAPH + {0xAB72, 0x73B6}, //7095 #CJK UNIFIED IDEOGRAPH + {0xAB73, 0x73B8}, //7096 #CJK UNIFIED IDEOGRAPH + {0xAB74, 0x73B9}, //7097 #CJK UNIFIED IDEOGRAPH + {0xAB75, 0x73BC}, //7098 #CJK UNIFIED IDEOGRAPH + {0xAB76, 0x73BD}, //7099 #CJK UNIFIED IDEOGRAPH + {0xAB77, 0x73BE}, //7100 #CJK UNIFIED IDEOGRAPH + {0xAB78, 0x73BF}, //7101 #CJK UNIFIED IDEOGRAPH + {0xAB79, 0x73C1}, //7102 #CJK UNIFIED IDEOGRAPH + {0xAB7A, 0x73C3}, //7103 #CJK UNIFIED IDEOGRAPH + {0xAB7B, 0x73C4}, //7104 #CJK UNIFIED IDEOGRAPH + {0xAB7C, 0x73C5}, //7105 #CJK UNIFIED IDEOGRAPH + {0xAB7D, 0x73C6}, //7106 #CJK UNIFIED IDEOGRAPH + {0xAB7E, 0x73C7}, //7107 #CJK UNIFIED IDEOGRAPH + {0xAB80, 0x73CB}, //7108 #CJK UNIFIED IDEOGRAPH + {0xAB81, 0x73CC}, //7109 #CJK UNIFIED IDEOGRAPH + {0xAB82, 0x73CE}, //7110 #CJK UNIFIED IDEOGRAPH + {0xAB83, 0x73D2}, //7111 #CJK UNIFIED IDEOGRAPH + {0xAB84, 0x73D3}, //7112 #CJK UNIFIED IDEOGRAPH + {0xAB85, 0x73D4}, //7113 #CJK UNIFIED IDEOGRAPH + {0xAB86, 0x73D5}, //7114 #CJK UNIFIED IDEOGRAPH + {0xAB87, 0x73D6}, //7115 #CJK UNIFIED IDEOGRAPH + {0xAB88, 0x73D7}, //7116 #CJK UNIFIED IDEOGRAPH + {0xAB89, 0x73D8}, //7117 #CJK UNIFIED IDEOGRAPH + {0xAB8A, 0x73DA}, //7118 #CJK UNIFIED IDEOGRAPH + {0xAB8B, 0x73DB}, //7119 #CJK UNIFIED IDEOGRAPH + {0xAB8C, 0x73DC}, //7120 #CJK UNIFIED IDEOGRAPH + {0xAB8D, 0x73DD}, //7121 #CJK UNIFIED IDEOGRAPH + {0xAB8E, 0x73DF}, //7122 #CJK UNIFIED IDEOGRAPH + {0xAB8F, 0x73E1}, //7123 #CJK UNIFIED IDEOGRAPH + {0xAB90, 0x73E2}, //7124 #CJK UNIFIED IDEOGRAPH + {0xAB91, 0x73E3}, //7125 #CJK UNIFIED IDEOGRAPH + {0xAB92, 0x73E4}, //7126 #CJK UNIFIED IDEOGRAPH + {0xAB93, 0x73E6}, //7127 #CJK UNIFIED IDEOGRAPH + {0xAB94, 0x73E8}, //7128 #CJK UNIFIED IDEOGRAPH + {0xAB95, 0x73EA}, //7129 #CJK UNIFIED IDEOGRAPH + {0xAB96, 0x73EB}, //7130 #CJK UNIFIED IDEOGRAPH + {0xAB97, 0x73EC}, //7131 #CJK UNIFIED IDEOGRAPH + {0xAB98, 0x73EE}, //7132 #CJK UNIFIED IDEOGRAPH + {0xAB99, 0x73EF}, //7133 #CJK UNIFIED IDEOGRAPH + {0xAB9A, 0x73F0}, //7134 #CJK UNIFIED IDEOGRAPH + {0xAB9B, 0x73F1}, //7135 #CJK UNIFIED IDEOGRAPH + {0xAB9C, 0x73F3}, //7136 #CJK UNIFIED IDEOGRAPH + {0xAB9D, 0x73F4}, //7137 #CJK UNIFIED IDEOGRAPH + {0xAB9E, 0x73F5}, //7138 #CJK UNIFIED IDEOGRAPH + {0xAB9F, 0x73F6}, //7139 #CJK UNIFIED IDEOGRAPH + {0xABA0, 0x73F7}, //7140 #CJK UNIFIED IDEOGRAPH + {0xAC40, 0x73F8}, //7141 #CJK UNIFIED IDEOGRAPH + {0xAC41, 0x73F9}, //7142 #CJK UNIFIED IDEOGRAPH + {0xAC42, 0x73FA}, //7143 #CJK UNIFIED IDEOGRAPH + {0xAC43, 0x73FB}, //7144 #CJK UNIFIED IDEOGRAPH + {0xAC44, 0x73FC}, //7145 #CJK UNIFIED IDEOGRAPH + {0xAC45, 0x73FD}, //7146 #CJK UNIFIED IDEOGRAPH + {0xAC46, 0x73FE}, //7147 #CJK UNIFIED IDEOGRAPH + {0xAC47, 0x73FF}, //7148 #CJK UNIFIED IDEOGRAPH + {0xAC48, 0x7400}, //7149 #CJK UNIFIED IDEOGRAPH + {0xAC49, 0x7401}, //7150 #CJK UNIFIED IDEOGRAPH + {0xAC4A, 0x7402}, //7151 #CJK UNIFIED IDEOGRAPH + {0xAC4B, 0x7404}, //7152 #CJK UNIFIED IDEOGRAPH + {0xAC4C, 0x7407}, //7153 #CJK UNIFIED IDEOGRAPH + {0xAC4D, 0x7408}, //7154 #CJK UNIFIED IDEOGRAPH + {0xAC4E, 0x740B}, //7155 #CJK UNIFIED IDEOGRAPH + {0xAC4F, 0x740C}, //7156 #CJK UNIFIED IDEOGRAPH + {0xAC50, 0x740D}, //7157 #CJK UNIFIED IDEOGRAPH + {0xAC51, 0x740E}, //7158 #CJK UNIFIED IDEOGRAPH + {0xAC52, 0x7411}, //7159 #CJK UNIFIED IDEOGRAPH + {0xAC53, 0x7412}, //7160 #CJK UNIFIED IDEOGRAPH + {0xAC54, 0x7413}, //7161 #CJK UNIFIED IDEOGRAPH + {0xAC55, 0x7414}, //7162 #CJK UNIFIED IDEOGRAPH + {0xAC56, 0x7415}, //7163 #CJK UNIFIED IDEOGRAPH + {0xAC57, 0x7416}, //7164 #CJK UNIFIED IDEOGRAPH + {0xAC58, 0x7417}, //7165 #CJK UNIFIED IDEOGRAPH + {0xAC59, 0x7418}, //7166 #CJK UNIFIED IDEOGRAPH + {0xAC5A, 0x7419}, //7167 #CJK UNIFIED IDEOGRAPH + {0xAC5B, 0x741C}, //7168 #CJK UNIFIED IDEOGRAPH + {0xAC5C, 0x741D}, //7169 #CJK UNIFIED IDEOGRAPH + {0xAC5D, 0x741E}, //7170 #CJK UNIFIED IDEOGRAPH + {0xAC5E, 0x741F}, //7171 #CJK UNIFIED IDEOGRAPH + {0xAC5F, 0x7420}, //7172 #CJK UNIFIED IDEOGRAPH + {0xAC60, 0x7421}, //7173 #CJK UNIFIED IDEOGRAPH + {0xAC61, 0x7423}, //7174 #CJK UNIFIED IDEOGRAPH + {0xAC62, 0x7424}, //7175 #CJK UNIFIED IDEOGRAPH + {0xAC63, 0x7427}, //7176 #CJK UNIFIED IDEOGRAPH + {0xAC64, 0x7429}, //7177 #CJK UNIFIED IDEOGRAPH + {0xAC65, 0x742B}, //7178 #CJK UNIFIED IDEOGRAPH + {0xAC66, 0x742D}, //7179 #CJK UNIFIED IDEOGRAPH + {0xAC67, 0x742F}, //7180 #CJK UNIFIED IDEOGRAPH + {0xAC68, 0x7431}, //7181 #CJK UNIFIED IDEOGRAPH + {0xAC69, 0x7432}, //7182 #CJK UNIFIED IDEOGRAPH + {0xAC6A, 0x7437}, //7183 #CJK UNIFIED IDEOGRAPH + {0xAC6B, 0x7438}, //7184 #CJK UNIFIED IDEOGRAPH + {0xAC6C, 0x7439}, //7185 #CJK UNIFIED IDEOGRAPH + {0xAC6D, 0x743A}, //7186 #CJK UNIFIED IDEOGRAPH + {0xAC6E, 0x743B}, //7187 #CJK UNIFIED IDEOGRAPH + {0xAC6F, 0x743D}, //7188 #CJK UNIFIED IDEOGRAPH + {0xAC70, 0x743E}, //7189 #CJK UNIFIED IDEOGRAPH + {0xAC71, 0x743F}, //7190 #CJK UNIFIED IDEOGRAPH + {0xAC72, 0x7440}, //7191 #CJK UNIFIED IDEOGRAPH + {0xAC73, 0x7442}, //7192 #CJK UNIFIED IDEOGRAPH + {0xAC74, 0x7443}, //7193 #CJK UNIFIED IDEOGRAPH + {0xAC75, 0x7444}, //7194 #CJK UNIFIED IDEOGRAPH + {0xAC76, 0x7445}, //7195 #CJK UNIFIED IDEOGRAPH + {0xAC77, 0x7446}, //7196 #CJK UNIFIED IDEOGRAPH + {0xAC78, 0x7447}, //7197 #CJK UNIFIED IDEOGRAPH + {0xAC79, 0x7448}, //7198 #CJK UNIFIED IDEOGRAPH + {0xAC7A, 0x7449}, //7199 #CJK UNIFIED IDEOGRAPH + {0xAC7B, 0x744A}, //7200 #CJK UNIFIED IDEOGRAPH + {0xAC7C, 0x744B}, //7201 #CJK UNIFIED IDEOGRAPH + {0xAC7D, 0x744C}, //7202 #CJK UNIFIED IDEOGRAPH + {0xAC7E, 0x744D}, //7203 #CJK UNIFIED IDEOGRAPH + {0xAC80, 0x744E}, //7204 #CJK UNIFIED IDEOGRAPH + {0xAC81, 0x744F}, //7205 #CJK UNIFIED IDEOGRAPH + {0xAC82, 0x7450}, //7206 #CJK UNIFIED IDEOGRAPH + {0xAC83, 0x7451}, //7207 #CJK UNIFIED IDEOGRAPH + {0xAC84, 0x7452}, //7208 #CJK UNIFIED IDEOGRAPH + {0xAC85, 0x7453}, //7209 #CJK UNIFIED IDEOGRAPH + {0xAC86, 0x7454}, //7210 #CJK UNIFIED IDEOGRAPH + {0xAC87, 0x7456}, //7211 #CJK UNIFIED IDEOGRAPH + {0xAC88, 0x7458}, //7212 #CJK UNIFIED IDEOGRAPH + {0xAC89, 0x745D}, //7213 #CJK UNIFIED IDEOGRAPH + {0xAC8A, 0x7460}, //7214 #CJK UNIFIED IDEOGRAPH + {0xAC8B, 0x7461}, //7215 #CJK UNIFIED IDEOGRAPH + {0xAC8C, 0x7462}, //7216 #CJK UNIFIED IDEOGRAPH + {0xAC8D, 0x7463}, //7217 #CJK UNIFIED IDEOGRAPH + {0xAC8E, 0x7464}, //7218 #CJK UNIFIED IDEOGRAPH + {0xAC8F, 0x7465}, //7219 #CJK UNIFIED IDEOGRAPH + {0xAC90, 0x7466}, //7220 #CJK UNIFIED IDEOGRAPH + {0xAC91, 0x7467}, //7221 #CJK UNIFIED IDEOGRAPH + {0xAC92, 0x7468}, //7222 #CJK UNIFIED IDEOGRAPH + {0xAC93, 0x7469}, //7223 #CJK UNIFIED IDEOGRAPH + {0xAC94, 0x746A}, //7224 #CJK UNIFIED IDEOGRAPH + {0xAC95, 0x746B}, //7225 #CJK UNIFIED IDEOGRAPH + {0xAC96, 0x746C}, //7226 #CJK UNIFIED IDEOGRAPH + {0xAC97, 0x746E}, //7227 #CJK UNIFIED IDEOGRAPH + {0xAC98, 0x746F}, //7228 #CJK UNIFIED IDEOGRAPH + {0xAC99, 0x7471}, //7229 #CJK UNIFIED IDEOGRAPH + {0xAC9A, 0x7472}, //7230 #CJK UNIFIED IDEOGRAPH + {0xAC9B, 0x7473}, //7231 #CJK UNIFIED IDEOGRAPH + {0xAC9C, 0x7474}, //7232 #CJK UNIFIED IDEOGRAPH + {0xAC9D, 0x7475}, //7233 #CJK UNIFIED IDEOGRAPH + {0xAC9E, 0x7478}, //7234 #CJK UNIFIED IDEOGRAPH + {0xAC9F, 0x7479}, //7235 #CJK UNIFIED IDEOGRAPH + {0xACA0, 0x747A}, //7236 #CJK UNIFIED IDEOGRAPH + {0xAD40, 0x747B}, //7237 #CJK UNIFIED IDEOGRAPH + {0xAD41, 0x747C}, //7238 #CJK UNIFIED IDEOGRAPH + {0xAD42, 0x747D}, //7239 #CJK UNIFIED IDEOGRAPH + {0xAD43, 0x747F}, //7240 #CJK UNIFIED IDEOGRAPH + {0xAD44, 0x7482}, //7241 #CJK UNIFIED IDEOGRAPH + {0xAD45, 0x7484}, //7242 #CJK UNIFIED IDEOGRAPH + {0xAD46, 0x7485}, //7243 #CJK UNIFIED IDEOGRAPH + {0xAD47, 0x7486}, //7244 #CJK UNIFIED IDEOGRAPH + {0xAD48, 0x7488}, //7245 #CJK UNIFIED IDEOGRAPH + {0xAD49, 0x7489}, //7246 #CJK UNIFIED IDEOGRAPH + {0xAD4A, 0x748A}, //7247 #CJK UNIFIED IDEOGRAPH + {0xAD4B, 0x748C}, //7248 #CJK UNIFIED IDEOGRAPH + {0xAD4C, 0x748D}, //7249 #CJK UNIFIED IDEOGRAPH + {0xAD4D, 0x748F}, //7250 #CJK UNIFIED IDEOGRAPH + {0xAD4E, 0x7491}, //7251 #CJK UNIFIED IDEOGRAPH + {0xAD4F, 0x7492}, //7252 #CJK UNIFIED IDEOGRAPH + {0xAD50, 0x7493}, //7253 #CJK UNIFIED IDEOGRAPH + {0xAD51, 0x7494}, //7254 #CJK UNIFIED IDEOGRAPH + {0xAD52, 0x7495}, //7255 #CJK UNIFIED IDEOGRAPH + {0xAD53, 0x7496}, //7256 #CJK UNIFIED IDEOGRAPH + {0xAD54, 0x7497}, //7257 #CJK UNIFIED IDEOGRAPH + {0xAD55, 0x7498}, //7258 #CJK UNIFIED IDEOGRAPH + {0xAD56, 0x7499}, //7259 #CJK UNIFIED IDEOGRAPH + {0xAD57, 0x749A}, //7260 #CJK UNIFIED IDEOGRAPH + {0xAD58, 0x749B}, //7261 #CJK UNIFIED IDEOGRAPH + {0xAD59, 0x749D}, //7262 #CJK UNIFIED IDEOGRAPH + {0xAD5A, 0x749F}, //7263 #CJK UNIFIED IDEOGRAPH + {0xAD5B, 0x74A0}, //7264 #CJK UNIFIED IDEOGRAPH + {0xAD5C, 0x74A1}, //7265 #CJK UNIFIED IDEOGRAPH + {0xAD5D, 0x74A2}, //7266 #CJK UNIFIED IDEOGRAPH + {0xAD5E, 0x74A3}, //7267 #CJK UNIFIED IDEOGRAPH + {0xAD5F, 0x74A4}, //7268 #CJK UNIFIED IDEOGRAPH + {0xAD60, 0x74A5}, //7269 #CJK UNIFIED IDEOGRAPH + {0xAD61, 0x74A6}, //7270 #CJK UNIFIED IDEOGRAPH + {0xAD62, 0x74AA}, //7271 #CJK UNIFIED IDEOGRAPH + {0xAD63, 0x74AB}, //7272 #CJK UNIFIED IDEOGRAPH + {0xAD64, 0x74AC}, //7273 #CJK UNIFIED IDEOGRAPH + {0xAD65, 0x74AD}, //7274 #CJK UNIFIED IDEOGRAPH + {0xAD66, 0x74AE}, //7275 #CJK UNIFIED IDEOGRAPH + {0xAD67, 0x74AF}, //7276 #CJK UNIFIED IDEOGRAPH + {0xAD68, 0x74B0}, //7277 #CJK UNIFIED IDEOGRAPH + {0xAD69, 0x74B1}, //7278 #CJK UNIFIED IDEOGRAPH + {0xAD6A, 0x74B2}, //7279 #CJK UNIFIED IDEOGRAPH + {0xAD6B, 0x74B3}, //7280 #CJK UNIFIED IDEOGRAPH + {0xAD6C, 0x74B4}, //7281 #CJK UNIFIED IDEOGRAPH + {0xAD6D, 0x74B5}, //7282 #CJK UNIFIED IDEOGRAPH + {0xAD6E, 0x74B6}, //7283 #CJK UNIFIED IDEOGRAPH + {0xAD6F, 0x74B7}, //7284 #CJK UNIFIED IDEOGRAPH + {0xAD70, 0x74B8}, //7285 #CJK UNIFIED IDEOGRAPH + {0xAD71, 0x74B9}, //7286 #CJK UNIFIED IDEOGRAPH + {0xAD72, 0x74BB}, //7287 #CJK UNIFIED IDEOGRAPH + {0xAD73, 0x74BC}, //7288 #CJK UNIFIED IDEOGRAPH + {0xAD74, 0x74BD}, //7289 #CJK UNIFIED IDEOGRAPH + {0xAD75, 0x74BE}, //7290 #CJK UNIFIED IDEOGRAPH + {0xAD76, 0x74BF}, //7291 #CJK UNIFIED IDEOGRAPH + {0xAD77, 0x74C0}, //7292 #CJK UNIFIED IDEOGRAPH + {0xAD78, 0x74C1}, //7293 #CJK UNIFIED IDEOGRAPH + {0xAD79, 0x74C2}, //7294 #CJK UNIFIED IDEOGRAPH + {0xAD7A, 0x74C3}, //7295 #CJK UNIFIED IDEOGRAPH + {0xAD7B, 0x74C4}, //7296 #CJK UNIFIED IDEOGRAPH + {0xAD7C, 0x74C5}, //7297 #CJK UNIFIED IDEOGRAPH + {0xAD7D, 0x74C6}, //7298 #CJK UNIFIED IDEOGRAPH + {0xAD7E, 0x74C7}, //7299 #CJK UNIFIED IDEOGRAPH + {0xAD80, 0x74C8}, //7300 #CJK UNIFIED IDEOGRAPH + {0xAD81, 0x74C9}, //7301 #CJK UNIFIED IDEOGRAPH + {0xAD82, 0x74CA}, //7302 #CJK UNIFIED IDEOGRAPH + {0xAD83, 0x74CB}, //7303 #CJK UNIFIED IDEOGRAPH + {0xAD84, 0x74CC}, //7304 #CJK UNIFIED IDEOGRAPH + {0xAD85, 0x74CD}, //7305 #CJK UNIFIED IDEOGRAPH + {0xAD86, 0x74CE}, //7306 #CJK UNIFIED IDEOGRAPH + {0xAD87, 0x74CF}, //7307 #CJK UNIFIED IDEOGRAPH + {0xAD88, 0x74D0}, //7308 #CJK UNIFIED IDEOGRAPH + {0xAD89, 0x74D1}, //7309 #CJK UNIFIED IDEOGRAPH + {0xAD8A, 0x74D3}, //7310 #CJK UNIFIED IDEOGRAPH + {0xAD8B, 0x74D4}, //7311 #CJK UNIFIED IDEOGRAPH + {0xAD8C, 0x74D5}, //7312 #CJK UNIFIED IDEOGRAPH + {0xAD8D, 0x74D6}, //7313 #CJK UNIFIED IDEOGRAPH + {0xAD8E, 0x74D7}, //7314 #CJK UNIFIED IDEOGRAPH + {0xAD8F, 0x74D8}, //7315 #CJK UNIFIED IDEOGRAPH + {0xAD90, 0x74D9}, //7316 #CJK UNIFIED IDEOGRAPH + {0xAD91, 0x74DA}, //7317 #CJK UNIFIED IDEOGRAPH + {0xAD92, 0x74DB}, //7318 #CJK UNIFIED IDEOGRAPH + {0xAD93, 0x74DD}, //7319 #CJK UNIFIED IDEOGRAPH + {0xAD94, 0x74DF}, //7320 #CJK UNIFIED IDEOGRAPH + {0xAD95, 0x74E1}, //7321 #CJK UNIFIED IDEOGRAPH + {0xAD96, 0x74E5}, //7322 #CJK UNIFIED IDEOGRAPH + {0xAD97, 0x74E7}, //7323 #CJK UNIFIED IDEOGRAPH + {0xAD98, 0x74E8}, //7324 #CJK UNIFIED IDEOGRAPH + {0xAD99, 0x74E9}, //7325 #CJK UNIFIED IDEOGRAPH + {0xAD9A, 0x74EA}, //7326 #CJK UNIFIED IDEOGRAPH + {0xAD9B, 0x74EB}, //7327 #CJK UNIFIED IDEOGRAPH + {0xAD9C, 0x74EC}, //7328 #CJK UNIFIED IDEOGRAPH + {0xAD9D, 0x74ED}, //7329 #CJK UNIFIED IDEOGRAPH + {0xAD9E, 0x74F0}, //7330 #CJK UNIFIED IDEOGRAPH + {0xAD9F, 0x74F1}, //7331 #CJK UNIFIED IDEOGRAPH + {0xADA0, 0x74F2}, //7332 #CJK UNIFIED IDEOGRAPH + {0xAE40, 0x74F3}, //7333 #CJK UNIFIED IDEOGRAPH + {0xAE41, 0x74F5}, //7334 #CJK UNIFIED IDEOGRAPH + {0xAE42, 0x74F8}, //7335 #CJK UNIFIED IDEOGRAPH + {0xAE43, 0x74F9}, //7336 #CJK UNIFIED IDEOGRAPH + {0xAE44, 0x74FA}, //7337 #CJK UNIFIED IDEOGRAPH + {0xAE45, 0x74FB}, //7338 #CJK UNIFIED IDEOGRAPH + {0xAE46, 0x74FC}, //7339 #CJK UNIFIED IDEOGRAPH + {0xAE47, 0x74FD}, //7340 #CJK UNIFIED IDEOGRAPH + {0xAE48, 0x74FE}, //7341 #CJK UNIFIED IDEOGRAPH + {0xAE49, 0x7500}, //7342 #CJK UNIFIED IDEOGRAPH + {0xAE4A, 0x7501}, //7343 #CJK UNIFIED IDEOGRAPH + {0xAE4B, 0x7502}, //7344 #CJK UNIFIED IDEOGRAPH + {0xAE4C, 0x7503}, //7345 #CJK UNIFIED IDEOGRAPH + {0xAE4D, 0x7505}, //7346 #CJK UNIFIED IDEOGRAPH + {0xAE4E, 0x7506}, //7347 #CJK UNIFIED IDEOGRAPH + {0xAE4F, 0x7507}, //7348 #CJK UNIFIED IDEOGRAPH + {0xAE50, 0x7508}, //7349 #CJK UNIFIED IDEOGRAPH + {0xAE51, 0x7509}, //7350 #CJK UNIFIED IDEOGRAPH + {0xAE52, 0x750A}, //7351 #CJK UNIFIED IDEOGRAPH + {0xAE53, 0x750B}, //7352 #CJK UNIFIED IDEOGRAPH + {0xAE54, 0x750C}, //7353 #CJK UNIFIED IDEOGRAPH + {0xAE55, 0x750E}, //7354 #CJK UNIFIED IDEOGRAPH + {0xAE56, 0x7510}, //7355 #CJK UNIFIED IDEOGRAPH + {0xAE57, 0x7512}, //7356 #CJK UNIFIED IDEOGRAPH + {0xAE58, 0x7514}, //7357 #CJK UNIFIED IDEOGRAPH + {0xAE59, 0x7515}, //7358 #CJK UNIFIED IDEOGRAPH + {0xAE5A, 0x7516}, //7359 #CJK UNIFIED IDEOGRAPH + {0xAE5B, 0x7517}, //7360 #CJK UNIFIED IDEOGRAPH + {0xAE5C, 0x751B}, //7361 #CJK UNIFIED IDEOGRAPH + {0xAE5D, 0x751D}, //7362 #CJK UNIFIED IDEOGRAPH + {0xAE5E, 0x751E}, //7363 #CJK UNIFIED IDEOGRAPH + {0xAE5F, 0x7520}, //7364 #CJK UNIFIED IDEOGRAPH + {0xAE60, 0x7521}, //7365 #CJK UNIFIED IDEOGRAPH + {0xAE61, 0x7522}, //7366 #CJK UNIFIED IDEOGRAPH + {0xAE62, 0x7523}, //7367 #CJK UNIFIED IDEOGRAPH + {0xAE63, 0x7524}, //7368 #CJK UNIFIED IDEOGRAPH + {0xAE64, 0x7526}, //7369 #CJK UNIFIED IDEOGRAPH + {0xAE65, 0x7527}, //7370 #CJK UNIFIED IDEOGRAPH + {0xAE66, 0x752A}, //7371 #CJK UNIFIED IDEOGRAPH + {0xAE67, 0x752E}, //7372 #CJK UNIFIED IDEOGRAPH + {0xAE68, 0x7534}, //7373 #CJK UNIFIED IDEOGRAPH + {0xAE69, 0x7536}, //7374 #CJK UNIFIED IDEOGRAPH + {0xAE6A, 0x7539}, //7375 #CJK UNIFIED IDEOGRAPH + {0xAE6B, 0x753C}, //7376 #CJK UNIFIED IDEOGRAPH + {0xAE6C, 0x753D}, //7377 #CJK UNIFIED IDEOGRAPH + {0xAE6D, 0x753F}, //7378 #CJK UNIFIED IDEOGRAPH + {0xAE6E, 0x7541}, //7379 #CJK UNIFIED IDEOGRAPH + {0xAE6F, 0x7542}, //7380 #CJK UNIFIED IDEOGRAPH + {0xAE70, 0x7543}, //7381 #CJK UNIFIED IDEOGRAPH + {0xAE71, 0x7544}, //7382 #CJK UNIFIED IDEOGRAPH + {0xAE72, 0x7546}, //7383 #CJK UNIFIED IDEOGRAPH + {0xAE73, 0x7547}, //7384 #CJK UNIFIED IDEOGRAPH + {0xAE74, 0x7549}, //7385 #CJK UNIFIED IDEOGRAPH + {0xAE75, 0x754A}, //7386 #CJK UNIFIED IDEOGRAPH + {0xAE76, 0x754D}, //7387 #CJK UNIFIED IDEOGRAPH + {0xAE77, 0x7550}, //7388 #CJK UNIFIED IDEOGRAPH + {0xAE78, 0x7551}, //7389 #CJK UNIFIED IDEOGRAPH + {0xAE79, 0x7552}, //7390 #CJK UNIFIED IDEOGRAPH + {0xAE7A, 0x7553}, //7391 #CJK UNIFIED IDEOGRAPH + {0xAE7B, 0x7555}, //7392 #CJK UNIFIED IDEOGRAPH + {0xAE7C, 0x7556}, //7393 #CJK UNIFIED IDEOGRAPH + {0xAE7D, 0x7557}, //7394 #CJK UNIFIED IDEOGRAPH + {0xAE7E, 0x7558}, //7395 #CJK UNIFIED IDEOGRAPH + {0xAE80, 0x755D}, //7396 #CJK UNIFIED IDEOGRAPH + {0xAE81, 0x755E}, //7397 #CJK UNIFIED IDEOGRAPH + {0xAE82, 0x755F}, //7398 #CJK UNIFIED IDEOGRAPH + {0xAE83, 0x7560}, //7399 #CJK UNIFIED IDEOGRAPH + {0xAE84, 0x7561}, //7400 #CJK UNIFIED IDEOGRAPH + {0xAE85, 0x7562}, //7401 #CJK UNIFIED IDEOGRAPH + {0xAE86, 0x7563}, //7402 #CJK UNIFIED IDEOGRAPH + {0xAE87, 0x7564}, //7403 #CJK UNIFIED IDEOGRAPH + {0xAE88, 0x7567}, //7404 #CJK UNIFIED IDEOGRAPH + {0xAE89, 0x7568}, //7405 #CJK UNIFIED IDEOGRAPH + {0xAE8A, 0x7569}, //7406 #CJK UNIFIED IDEOGRAPH + {0xAE8B, 0x756B}, //7407 #CJK UNIFIED IDEOGRAPH + {0xAE8C, 0x756C}, //7408 #CJK UNIFIED IDEOGRAPH + {0xAE8D, 0x756D}, //7409 #CJK UNIFIED IDEOGRAPH + {0xAE8E, 0x756E}, //7410 #CJK UNIFIED IDEOGRAPH + {0xAE8F, 0x756F}, //7411 #CJK UNIFIED IDEOGRAPH + {0xAE90, 0x7570}, //7412 #CJK UNIFIED IDEOGRAPH + {0xAE91, 0x7571}, //7413 #CJK UNIFIED IDEOGRAPH + {0xAE92, 0x7573}, //7414 #CJK UNIFIED IDEOGRAPH + {0xAE93, 0x7575}, //7415 #CJK UNIFIED IDEOGRAPH + {0xAE94, 0x7576}, //7416 #CJK UNIFIED IDEOGRAPH + {0xAE95, 0x7577}, //7417 #CJK UNIFIED IDEOGRAPH + {0xAE96, 0x757A}, //7418 #CJK UNIFIED IDEOGRAPH + {0xAE97, 0x757B}, //7419 #CJK UNIFIED IDEOGRAPH + {0xAE98, 0x757C}, //7420 #CJK UNIFIED IDEOGRAPH + {0xAE99, 0x757D}, //7421 #CJK UNIFIED IDEOGRAPH + {0xAE9A, 0x757E}, //7422 #CJK UNIFIED IDEOGRAPH + {0xAE9B, 0x7580}, //7423 #CJK UNIFIED IDEOGRAPH + {0xAE9C, 0x7581}, //7424 #CJK UNIFIED IDEOGRAPH + {0xAE9D, 0x7582}, //7425 #CJK UNIFIED IDEOGRAPH + {0xAE9E, 0x7584}, //7426 #CJK UNIFIED IDEOGRAPH + {0xAE9F, 0x7585}, //7427 #CJK UNIFIED IDEOGRAPH + {0xAEA0, 0x7587}, //7428 #CJK UNIFIED IDEOGRAPH + {0xAF40, 0x7588}, //7429 #CJK UNIFIED IDEOGRAPH + {0xAF41, 0x7589}, //7430 #CJK UNIFIED IDEOGRAPH + {0xAF42, 0x758A}, //7431 #CJK UNIFIED IDEOGRAPH + {0xAF43, 0x758C}, //7432 #CJK UNIFIED IDEOGRAPH + {0xAF44, 0x758D}, //7433 #CJK UNIFIED IDEOGRAPH + {0xAF45, 0x758E}, //7434 #CJK UNIFIED IDEOGRAPH + {0xAF46, 0x7590}, //7435 #CJK UNIFIED IDEOGRAPH + {0xAF47, 0x7593}, //7436 #CJK UNIFIED IDEOGRAPH + {0xAF48, 0x7595}, //7437 #CJK UNIFIED IDEOGRAPH + {0xAF49, 0x7598}, //7438 #CJK UNIFIED IDEOGRAPH + {0xAF4A, 0x759B}, //7439 #CJK UNIFIED IDEOGRAPH + {0xAF4B, 0x759C}, //7440 #CJK UNIFIED IDEOGRAPH + {0xAF4C, 0x759E}, //7441 #CJK UNIFIED IDEOGRAPH + {0xAF4D, 0x75A2}, //7442 #CJK UNIFIED IDEOGRAPH + {0xAF4E, 0x75A6}, //7443 #CJK UNIFIED IDEOGRAPH + {0xAF4F, 0x75A7}, //7444 #CJK UNIFIED IDEOGRAPH + {0xAF50, 0x75A8}, //7445 #CJK UNIFIED IDEOGRAPH + {0xAF51, 0x75A9}, //7446 #CJK UNIFIED IDEOGRAPH + {0xAF52, 0x75AA}, //7447 #CJK UNIFIED IDEOGRAPH + {0xAF53, 0x75AD}, //7448 #CJK UNIFIED IDEOGRAPH + {0xAF54, 0x75B6}, //7449 #CJK UNIFIED IDEOGRAPH + {0xAF55, 0x75B7}, //7450 #CJK UNIFIED IDEOGRAPH + {0xAF56, 0x75BA}, //7451 #CJK UNIFIED IDEOGRAPH + {0xAF57, 0x75BB}, //7452 #CJK UNIFIED IDEOGRAPH + {0xAF58, 0x75BF}, //7453 #CJK UNIFIED IDEOGRAPH + {0xAF59, 0x75C0}, //7454 #CJK UNIFIED IDEOGRAPH + {0xAF5A, 0x75C1}, //7455 #CJK UNIFIED IDEOGRAPH + {0xAF5B, 0x75C6}, //7456 #CJK UNIFIED IDEOGRAPH + {0xAF5C, 0x75CB}, //7457 #CJK UNIFIED IDEOGRAPH + {0xAF5D, 0x75CC}, //7458 #CJK UNIFIED IDEOGRAPH + {0xAF5E, 0x75CE}, //7459 #CJK UNIFIED IDEOGRAPH + {0xAF5F, 0x75CF}, //7460 #CJK UNIFIED IDEOGRAPH + {0xAF60, 0x75D0}, //7461 #CJK UNIFIED IDEOGRAPH + {0xAF61, 0x75D1}, //7462 #CJK UNIFIED IDEOGRAPH + {0xAF62, 0x75D3}, //7463 #CJK UNIFIED IDEOGRAPH + {0xAF63, 0x75D7}, //7464 #CJK UNIFIED IDEOGRAPH + {0xAF64, 0x75D9}, //7465 #CJK UNIFIED IDEOGRAPH + {0xAF65, 0x75DA}, //7466 #CJK UNIFIED IDEOGRAPH + {0xAF66, 0x75DC}, //7467 #CJK UNIFIED IDEOGRAPH + {0xAF67, 0x75DD}, //7468 #CJK UNIFIED IDEOGRAPH + {0xAF68, 0x75DF}, //7469 #CJK UNIFIED IDEOGRAPH + {0xAF69, 0x75E0}, //7470 #CJK UNIFIED IDEOGRAPH + {0xAF6A, 0x75E1}, //7471 #CJK UNIFIED IDEOGRAPH + {0xAF6B, 0x75E5}, //7472 #CJK UNIFIED IDEOGRAPH + {0xAF6C, 0x75E9}, //7473 #CJK UNIFIED IDEOGRAPH + {0xAF6D, 0x75EC}, //7474 #CJK UNIFIED IDEOGRAPH + {0xAF6E, 0x75ED}, //7475 #CJK UNIFIED IDEOGRAPH + {0xAF6F, 0x75EE}, //7476 #CJK UNIFIED IDEOGRAPH + {0xAF70, 0x75EF}, //7477 #CJK UNIFIED IDEOGRAPH + {0xAF71, 0x75F2}, //7478 #CJK UNIFIED IDEOGRAPH + {0xAF72, 0x75F3}, //7479 #CJK UNIFIED IDEOGRAPH + {0xAF73, 0x75F5}, //7480 #CJK UNIFIED IDEOGRAPH + {0xAF74, 0x75F6}, //7481 #CJK UNIFIED IDEOGRAPH + {0xAF75, 0x75F7}, //7482 #CJK UNIFIED IDEOGRAPH + {0xAF76, 0x75F8}, //7483 #CJK UNIFIED IDEOGRAPH + {0xAF77, 0x75FA}, //7484 #CJK UNIFIED IDEOGRAPH + {0xAF78, 0x75FB}, //7485 #CJK UNIFIED IDEOGRAPH + {0xAF79, 0x75FD}, //7486 #CJK UNIFIED IDEOGRAPH + {0xAF7A, 0x75FE}, //7487 #CJK UNIFIED IDEOGRAPH + {0xAF7B, 0x7602}, //7488 #CJK UNIFIED IDEOGRAPH + {0xAF7C, 0x7604}, //7489 #CJK UNIFIED IDEOGRAPH + {0xAF7D, 0x7606}, //7490 #CJK UNIFIED IDEOGRAPH + {0xAF7E, 0x7607}, //7491 #CJK UNIFIED IDEOGRAPH + {0xAF80, 0x7608}, //7492 #CJK UNIFIED IDEOGRAPH + {0xAF81, 0x7609}, //7493 #CJK UNIFIED IDEOGRAPH + {0xAF82, 0x760B}, //7494 #CJK UNIFIED IDEOGRAPH + {0xAF83, 0x760D}, //7495 #CJK UNIFIED IDEOGRAPH + {0xAF84, 0x760E}, //7496 #CJK UNIFIED IDEOGRAPH + {0xAF85, 0x760F}, //7497 #CJK UNIFIED IDEOGRAPH + {0xAF86, 0x7611}, //7498 #CJK UNIFIED IDEOGRAPH + {0xAF87, 0x7612}, //7499 #CJK UNIFIED IDEOGRAPH + {0xAF88, 0x7613}, //7500 #CJK UNIFIED IDEOGRAPH + {0xAF89, 0x7614}, //7501 #CJK UNIFIED IDEOGRAPH + {0xAF8A, 0x7616}, //7502 #CJK UNIFIED IDEOGRAPH + {0xAF8B, 0x761A}, //7503 #CJK UNIFIED IDEOGRAPH + {0xAF8C, 0x761C}, //7504 #CJK UNIFIED IDEOGRAPH + {0xAF8D, 0x761D}, //7505 #CJK UNIFIED IDEOGRAPH + {0xAF8E, 0x761E}, //7506 #CJK UNIFIED IDEOGRAPH + {0xAF8F, 0x7621}, //7507 #CJK UNIFIED IDEOGRAPH + {0xAF90, 0x7623}, //7508 #CJK UNIFIED IDEOGRAPH + {0xAF91, 0x7627}, //7509 #CJK UNIFIED IDEOGRAPH + {0xAF92, 0x7628}, //7510 #CJK UNIFIED IDEOGRAPH + {0xAF93, 0x762C}, //7511 #CJK UNIFIED IDEOGRAPH + {0xAF94, 0x762E}, //7512 #CJK UNIFIED IDEOGRAPH + {0xAF95, 0x762F}, //7513 #CJK UNIFIED IDEOGRAPH + {0xAF96, 0x7631}, //7514 #CJK UNIFIED IDEOGRAPH + {0xAF97, 0x7632}, //7515 #CJK UNIFIED IDEOGRAPH + {0xAF98, 0x7636}, //7516 #CJK UNIFIED IDEOGRAPH + {0xAF99, 0x7637}, //7517 #CJK UNIFIED IDEOGRAPH + {0xAF9A, 0x7639}, //7518 #CJK UNIFIED IDEOGRAPH + {0xAF9B, 0x763A}, //7519 #CJK UNIFIED IDEOGRAPH + {0xAF9C, 0x763B}, //7520 #CJK UNIFIED IDEOGRAPH + {0xAF9D, 0x763D}, //7521 #CJK UNIFIED IDEOGRAPH + {0xAF9E, 0x7641}, //7522 #CJK UNIFIED IDEOGRAPH + {0xAF9F, 0x7642}, //7523 #CJK UNIFIED IDEOGRAPH + {0xAFA0, 0x7644}, //7524 #CJK UNIFIED IDEOGRAPH + {0xB040, 0x7645}, //7525 #CJK UNIFIED IDEOGRAPH + {0xB041, 0x7646}, //7526 #CJK UNIFIED IDEOGRAPH + {0xB042, 0x7647}, //7527 #CJK UNIFIED IDEOGRAPH + {0xB043, 0x7648}, //7528 #CJK UNIFIED IDEOGRAPH + {0xB044, 0x7649}, //7529 #CJK UNIFIED IDEOGRAPH + {0xB045, 0x764A}, //7530 #CJK UNIFIED IDEOGRAPH + {0xB046, 0x764B}, //7531 #CJK UNIFIED IDEOGRAPH + {0xB047, 0x764E}, //7532 #CJK UNIFIED IDEOGRAPH + {0xB048, 0x764F}, //7533 #CJK UNIFIED IDEOGRAPH + {0xB049, 0x7650}, //7534 #CJK UNIFIED IDEOGRAPH + {0xB04A, 0x7651}, //7535 #CJK UNIFIED IDEOGRAPH + {0xB04B, 0x7652}, //7536 #CJK UNIFIED IDEOGRAPH + {0xB04C, 0x7653}, //7537 #CJK UNIFIED IDEOGRAPH + {0xB04D, 0x7655}, //7538 #CJK UNIFIED IDEOGRAPH + {0xB04E, 0x7657}, //7539 #CJK UNIFIED IDEOGRAPH + {0xB04F, 0x7658}, //7540 #CJK UNIFIED IDEOGRAPH + {0xB050, 0x7659}, //7541 #CJK UNIFIED IDEOGRAPH + {0xB051, 0x765A}, //7542 #CJK UNIFIED IDEOGRAPH + {0xB052, 0x765B}, //7543 #CJK UNIFIED IDEOGRAPH + {0xB053, 0x765D}, //7544 #CJK UNIFIED IDEOGRAPH + {0xB054, 0x765F}, //7545 #CJK UNIFIED IDEOGRAPH + {0xB055, 0x7660}, //7546 #CJK UNIFIED IDEOGRAPH + {0xB056, 0x7661}, //7547 #CJK UNIFIED IDEOGRAPH + {0xB057, 0x7662}, //7548 #CJK UNIFIED IDEOGRAPH + {0xB058, 0x7664}, //7549 #CJK UNIFIED IDEOGRAPH + {0xB059, 0x7665}, //7550 #CJK UNIFIED IDEOGRAPH + {0xB05A, 0x7666}, //7551 #CJK UNIFIED IDEOGRAPH + {0xB05B, 0x7667}, //7552 #CJK UNIFIED IDEOGRAPH + {0xB05C, 0x7668}, //7553 #CJK UNIFIED IDEOGRAPH + {0xB05D, 0x7669}, //7554 #CJK UNIFIED IDEOGRAPH + {0xB05E, 0x766A}, //7555 #CJK UNIFIED IDEOGRAPH + {0xB05F, 0x766C}, //7556 #CJK UNIFIED IDEOGRAPH + {0xB060, 0x766D}, //7557 #CJK UNIFIED IDEOGRAPH + {0xB061, 0x766E}, //7558 #CJK UNIFIED IDEOGRAPH + {0xB062, 0x7670}, //7559 #CJK UNIFIED IDEOGRAPH + {0xB063, 0x7671}, //7560 #CJK UNIFIED IDEOGRAPH + {0xB064, 0x7672}, //7561 #CJK UNIFIED IDEOGRAPH + {0xB065, 0x7673}, //7562 #CJK UNIFIED IDEOGRAPH + {0xB066, 0x7674}, //7563 #CJK UNIFIED IDEOGRAPH + {0xB067, 0x7675}, //7564 #CJK UNIFIED IDEOGRAPH + {0xB068, 0x7676}, //7565 #CJK UNIFIED IDEOGRAPH + {0xB069, 0x7677}, //7566 #CJK UNIFIED IDEOGRAPH + {0xB06A, 0x7679}, //7567 #CJK UNIFIED IDEOGRAPH + {0xB06B, 0x767A}, //7568 #CJK UNIFIED IDEOGRAPH + {0xB06C, 0x767C}, //7569 #CJK UNIFIED IDEOGRAPH + {0xB06D, 0x767F}, //7570 #CJK UNIFIED IDEOGRAPH + {0xB06E, 0x7680}, //7571 #CJK UNIFIED IDEOGRAPH + {0xB06F, 0x7681}, //7572 #CJK UNIFIED IDEOGRAPH + {0xB070, 0x7683}, //7573 #CJK UNIFIED IDEOGRAPH + {0xB071, 0x7685}, //7574 #CJK UNIFIED IDEOGRAPH + {0xB072, 0x7689}, //7575 #CJK UNIFIED IDEOGRAPH + {0xB073, 0x768A}, //7576 #CJK UNIFIED IDEOGRAPH + {0xB074, 0x768C}, //7577 #CJK UNIFIED IDEOGRAPH + {0xB075, 0x768D}, //7578 #CJK UNIFIED IDEOGRAPH + {0xB076, 0x768F}, //7579 #CJK UNIFIED IDEOGRAPH + {0xB077, 0x7690}, //7580 #CJK UNIFIED IDEOGRAPH + {0xB078, 0x7692}, //7581 #CJK UNIFIED IDEOGRAPH + {0xB079, 0x7694}, //7582 #CJK UNIFIED IDEOGRAPH + {0xB07A, 0x7695}, //7583 #CJK UNIFIED IDEOGRAPH + {0xB07B, 0x7697}, //7584 #CJK UNIFIED IDEOGRAPH + {0xB07C, 0x7698}, //7585 #CJK UNIFIED IDEOGRAPH + {0xB07D, 0x769A}, //7586 #CJK UNIFIED IDEOGRAPH + {0xB07E, 0x769B}, //7587 #CJK UNIFIED IDEOGRAPH + {0xB080, 0x769C}, //7588 #CJK UNIFIED IDEOGRAPH + {0xB081, 0x769D}, //7589 #CJK UNIFIED IDEOGRAPH + {0xB082, 0x769E}, //7590 #CJK UNIFIED IDEOGRAPH + {0xB083, 0x769F}, //7591 #CJK UNIFIED IDEOGRAPH + {0xB084, 0x76A0}, //7592 #CJK UNIFIED IDEOGRAPH + {0xB085, 0x76A1}, //7593 #CJK UNIFIED IDEOGRAPH + {0xB086, 0x76A2}, //7594 #CJK UNIFIED IDEOGRAPH + {0xB087, 0x76A3}, //7595 #CJK UNIFIED IDEOGRAPH + {0xB088, 0x76A5}, //7596 #CJK UNIFIED IDEOGRAPH + {0xB089, 0x76A6}, //7597 #CJK UNIFIED IDEOGRAPH + {0xB08A, 0x76A7}, //7598 #CJK UNIFIED IDEOGRAPH + {0xB08B, 0x76A8}, //7599 #CJK UNIFIED IDEOGRAPH + {0xB08C, 0x76A9}, //7600 #CJK UNIFIED IDEOGRAPH + {0xB08D, 0x76AA}, //7601 #CJK UNIFIED IDEOGRAPH + {0xB08E, 0x76AB}, //7602 #CJK UNIFIED IDEOGRAPH + {0xB08F, 0x76AC}, //7603 #CJK UNIFIED IDEOGRAPH + {0xB090, 0x76AD}, //7604 #CJK UNIFIED IDEOGRAPH + {0xB091, 0x76AF}, //7605 #CJK UNIFIED IDEOGRAPH + {0xB092, 0x76B0}, //7606 #CJK UNIFIED IDEOGRAPH + {0xB093, 0x76B3}, //7607 #CJK UNIFIED IDEOGRAPH + {0xB094, 0x76B5}, //7608 #CJK UNIFIED IDEOGRAPH + {0xB095, 0x76B6}, //7609 #CJK UNIFIED IDEOGRAPH + {0xB096, 0x76B7}, //7610 #CJK UNIFIED IDEOGRAPH + {0xB097, 0x76B8}, //7611 #CJK UNIFIED IDEOGRAPH + {0xB098, 0x76B9}, //7612 #CJK UNIFIED IDEOGRAPH + {0xB099, 0x76BA}, //7613 #CJK UNIFIED IDEOGRAPH + {0xB09A, 0x76BB}, //7614 #CJK UNIFIED IDEOGRAPH + {0xB09B, 0x76BC}, //7615 #CJK UNIFIED IDEOGRAPH + {0xB09C, 0x76BD}, //7616 #CJK UNIFIED IDEOGRAPH + {0xB09D, 0x76BE}, //7617 #CJK UNIFIED IDEOGRAPH + {0xB09E, 0x76C0}, //7618 #CJK UNIFIED IDEOGRAPH + {0xB09F, 0x76C1}, //7619 #CJK UNIFIED IDEOGRAPH + {0xB0A0, 0x76C3}, //7620 #CJK UNIFIED IDEOGRAPH + {0xB0A1, 0x554A}, //7621 #CJK UNIFIED IDEOGRAPH + {0xB0A2, 0x963F}, //7622 #CJK UNIFIED IDEOGRAPH + {0xB0A3, 0x57C3}, //7623 #CJK UNIFIED IDEOGRAPH + {0xB0A4, 0x6328}, //7624 #CJK UNIFIED IDEOGRAPH + {0xB0A5, 0x54CE}, //7625 #CJK UNIFIED IDEOGRAPH + {0xB0A6, 0x5509}, //7626 #CJK UNIFIED IDEOGRAPH + {0xB0A7, 0x54C0}, //7627 #CJK UNIFIED IDEOGRAPH + {0xB0A8, 0x7691}, //7628 #CJK UNIFIED IDEOGRAPH + {0xB0A9, 0x764C}, //7629 #CJK UNIFIED IDEOGRAPH + {0xB0AA, 0x853C}, //7630 #CJK UNIFIED IDEOGRAPH + {0xB0AB, 0x77EE}, //7631 #CJK UNIFIED IDEOGRAPH + {0xB0AC, 0x827E}, //7632 #CJK UNIFIED IDEOGRAPH + {0xB0AD, 0x788D}, //7633 #CJK UNIFIED IDEOGRAPH + {0xB0AE, 0x7231}, //7634 #CJK UNIFIED IDEOGRAPH + {0xB0AF, 0x9698}, //7635 #CJK UNIFIED IDEOGRAPH + {0xB0B0, 0x978D}, //7636 #CJK UNIFIED IDEOGRAPH + {0xB0B1, 0x6C28}, //7637 #CJK UNIFIED IDEOGRAPH + {0xB0B2, 0x5B89}, //7638 #CJK UNIFIED IDEOGRAPH + {0xB0B3, 0x4FFA}, //7639 #CJK UNIFIED IDEOGRAPH + {0xB0B4, 0x6309}, //7640 #CJK UNIFIED IDEOGRAPH + {0xB0B5, 0x6697}, //7641 #CJK UNIFIED IDEOGRAPH + {0xB0B6, 0x5CB8}, //7642 #CJK UNIFIED IDEOGRAPH + {0xB0B7, 0x80FA}, //7643 #CJK UNIFIED IDEOGRAPH + {0xB0B8, 0x6848}, //7644 #CJK UNIFIED IDEOGRAPH + {0xB0B9, 0x80AE}, //7645 #CJK UNIFIED IDEOGRAPH + {0xB0BA, 0x6602}, //7646 #CJK UNIFIED IDEOGRAPH + {0xB0BB, 0x76CE}, //7647 #CJK UNIFIED IDEOGRAPH + {0xB0BC, 0x51F9}, //7648 #CJK UNIFIED IDEOGRAPH + {0xB0BD, 0x6556}, //7649 #CJK UNIFIED IDEOGRAPH + {0xB0BE, 0x71AC}, //7650 #CJK UNIFIED IDEOGRAPH + {0xB0BF, 0x7FF1}, //7651 #CJK UNIFIED IDEOGRAPH + {0xB0C0, 0x8884}, //7652 #CJK UNIFIED IDEOGRAPH + {0xB0C1, 0x50B2}, //7653 #CJK UNIFIED IDEOGRAPH + {0xB0C2, 0x5965}, //7654 #CJK UNIFIED IDEOGRAPH + {0xB0C3, 0x61CA}, //7655 #CJK UNIFIED IDEOGRAPH + {0xB0C4, 0x6FB3}, //7656 #CJK UNIFIED IDEOGRAPH + {0xB0C5, 0x82AD}, //7657 #CJK UNIFIED IDEOGRAPH + {0xB0C6, 0x634C}, //7658 #CJK UNIFIED IDEOGRAPH + {0xB0C7, 0x6252}, //7659 #CJK UNIFIED IDEOGRAPH + {0xB0C8, 0x53ED}, //7660 #CJK UNIFIED IDEOGRAPH + {0xB0C9, 0x5427}, //7661 #CJK UNIFIED IDEOGRAPH + {0xB0CA, 0x7B06}, //7662 #CJK UNIFIED IDEOGRAPH + {0xB0CB, 0x516B}, //7663 #CJK UNIFIED IDEOGRAPH + {0xB0CC, 0x75A4}, //7664 #CJK UNIFIED IDEOGRAPH + {0xB0CD, 0x5DF4}, //7665 #CJK UNIFIED IDEOGRAPH + {0xB0CE, 0x62D4}, //7666 #CJK UNIFIED IDEOGRAPH + {0xB0CF, 0x8DCB}, //7667 #CJK UNIFIED IDEOGRAPH + {0xB0D0, 0x9776}, //7668 #CJK UNIFIED IDEOGRAPH + {0xB0D1, 0x628A}, //7669 #CJK UNIFIED IDEOGRAPH + {0xB0D2, 0x8019}, //7670 #CJK UNIFIED IDEOGRAPH + {0xB0D3, 0x575D}, //7671 #CJK UNIFIED IDEOGRAPH + {0xB0D4, 0x9738}, //7672 #CJK UNIFIED IDEOGRAPH + {0xB0D5, 0x7F62}, //7673 #CJK UNIFIED IDEOGRAPH + {0xB0D6, 0x7238}, //7674 #CJK UNIFIED IDEOGRAPH + {0xB0D7, 0x767D}, //7675 #CJK UNIFIED IDEOGRAPH + {0xB0D8, 0x67CF}, //7676 #CJK UNIFIED IDEOGRAPH + {0xB0D9, 0x767E}, //7677 #CJK UNIFIED IDEOGRAPH + {0xB0DA, 0x6446}, //7678 #CJK UNIFIED IDEOGRAPH + {0xB0DB, 0x4F70}, //7679 #CJK UNIFIED IDEOGRAPH + {0xB0DC, 0x8D25}, //7680 #CJK UNIFIED IDEOGRAPH + {0xB0DD, 0x62DC}, //7681 #CJK UNIFIED IDEOGRAPH + {0xB0DE, 0x7A17}, //7682 #CJK UNIFIED IDEOGRAPH + {0xB0DF, 0x6591}, //7683 #CJK UNIFIED IDEOGRAPH + {0xB0E0, 0x73ED}, //7684 #CJK UNIFIED IDEOGRAPH + {0xB0E1, 0x642C}, //7685 #CJK UNIFIED IDEOGRAPH + {0xB0E2, 0x6273}, //7686 #CJK UNIFIED IDEOGRAPH + {0xB0E3, 0x822C}, //7687 #CJK UNIFIED IDEOGRAPH + {0xB0E4, 0x9881}, //7688 #CJK UNIFIED IDEOGRAPH + {0xB0E5, 0x677F}, //7689 #CJK UNIFIED IDEOGRAPH + {0xB0E6, 0x7248}, //7690 #CJK UNIFIED IDEOGRAPH + {0xB0E7, 0x626E}, //7691 #CJK UNIFIED IDEOGRAPH + {0xB0E8, 0x62CC}, //7692 #CJK UNIFIED IDEOGRAPH + {0xB0E9, 0x4F34}, //7693 #CJK UNIFIED IDEOGRAPH + {0xB0EA, 0x74E3}, //7694 #CJK UNIFIED IDEOGRAPH + {0xB0EB, 0x534A}, //7695 #CJK UNIFIED IDEOGRAPH + {0xB0EC, 0x529E}, //7696 #CJK UNIFIED IDEOGRAPH + {0xB0ED, 0x7ECA}, //7697 #CJK UNIFIED IDEOGRAPH + {0xB0EE, 0x90A6}, //7698 #CJK UNIFIED IDEOGRAPH + {0xB0EF, 0x5E2E}, //7699 #CJK UNIFIED IDEOGRAPH + {0xB0F0, 0x6886}, //7700 #CJK UNIFIED IDEOGRAPH + {0xB0F1, 0x699C}, //7701 #CJK UNIFIED IDEOGRAPH + {0xB0F2, 0x8180}, //7702 #CJK UNIFIED IDEOGRAPH + {0xB0F3, 0x7ED1}, //7703 #CJK UNIFIED IDEOGRAPH + {0xB0F4, 0x68D2}, //7704 #CJK UNIFIED IDEOGRAPH + {0xB0F5, 0x78C5}, //7705 #CJK UNIFIED IDEOGRAPH + {0xB0F6, 0x868C}, //7706 #CJK UNIFIED IDEOGRAPH + {0xB0F7, 0x9551}, //7707 #CJK UNIFIED IDEOGRAPH + {0xB0F8, 0x508D}, //7708 #CJK UNIFIED IDEOGRAPH + {0xB0F9, 0x8C24}, //7709 #CJK UNIFIED IDEOGRAPH + {0xB0FA, 0x82DE}, //7710 #CJK UNIFIED IDEOGRAPH + {0xB0FB, 0x80DE}, //7711 #CJK UNIFIED IDEOGRAPH + {0xB0FC, 0x5305}, //7712 #CJK UNIFIED IDEOGRAPH + {0xB0FD, 0x8912}, //7713 #CJK UNIFIED IDEOGRAPH + {0xB0FE, 0x5265}, //7714 #CJK UNIFIED IDEOGRAPH + {0xB140, 0x76C4}, //7715 #CJK UNIFIED IDEOGRAPH + {0xB141, 0x76C7}, //7716 #CJK UNIFIED IDEOGRAPH + {0xB142, 0x76C9}, //7717 #CJK UNIFIED IDEOGRAPH + {0xB143, 0x76CB}, //7718 #CJK UNIFIED IDEOGRAPH + {0xB144, 0x76CC}, //7719 #CJK UNIFIED IDEOGRAPH + {0xB145, 0x76D3}, //7720 #CJK UNIFIED IDEOGRAPH + {0xB146, 0x76D5}, //7721 #CJK UNIFIED IDEOGRAPH + {0xB147, 0x76D9}, //7722 #CJK UNIFIED IDEOGRAPH + {0xB148, 0x76DA}, //7723 #CJK UNIFIED IDEOGRAPH + {0xB149, 0x76DC}, //7724 #CJK UNIFIED IDEOGRAPH + {0xB14A, 0x76DD}, //7725 #CJK UNIFIED IDEOGRAPH + {0xB14B, 0x76DE}, //7726 #CJK UNIFIED IDEOGRAPH + {0xB14C, 0x76E0}, //7727 #CJK UNIFIED IDEOGRAPH + {0xB14D, 0x76E1}, //7728 #CJK UNIFIED IDEOGRAPH + {0xB14E, 0x76E2}, //7729 #CJK UNIFIED IDEOGRAPH + {0xB14F, 0x76E3}, //7730 #CJK UNIFIED IDEOGRAPH + {0xB150, 0x76E4}, //7731 #CJK UNIFIED IDEOGRAPH + {0xB151, 0x76E6}, //7732 #CJK UNIFIED IDEOGRAPH + {0xB152, 0x76E7}, //7733 #CJK UNIFIED IDEOGRAPH + {0xB153, 0x76E8}, //7734 #CJK UNIFIED IDEOGRAPH + {0xB154, 0x76E9}, //7735 #CJK UNIFIED IDEOGRAPH + {0xB155, 0x76EA}, //7736 #CJK UNIFIED IDEOGRAPH + {0xB156, 0x76EB}, //7737 #CJK UNIFIED IDEOGRAPH + {0xB157, 0x76EC}, //7738 #CJK UNIFIED IDEOGRAPH + {0xB158, 0x76ED}, //7739 #CJK UNIFIED IDEOGRAPH + {0xB159, 0x76F0}, //7740 #CJK UNIFIED IDEOGRAPH + {0xB15A, 0x76F3}, //7741 #CJK UNIFIED IDEOGRAPH + {0xB15B, 0x76F5}, //7742 #CJK UNIFIED IDEOGRAPH + {0xB15C, 0x76F6}, //7743 #CJK UNIFIED IDEOGRAPH + {0xB15D, 0x76F7}, //7744 #CJK UNIFIED IDEOGRAPH + {0xB15E, 0x76FA}, //7745 #CJK UNIFIED IDEOGRAPH + {0xB15F, 0x76FB}, //7746 #CJK UNIFIED IDEOGRAPH + {0xB160, 0x76FD}, //7747 #CJK UNIFIED IDEOGRAPH + {0xB161, 0x76FF}, //7748 #CJK UNIFIED IDEOGRAPH + {0xB162, 0x7700}, //7749 #CJK UNIFIED IDEOGRAPH + {0xB163, 0x7702}, //7750 #CJK UNIFIED IDEOGRAPH + {0xB164, 0x7703}, //7751 #CJK UNIFIED IDEOGRAPH + {0xB165, 0x7705}, //7752 #CJK UNIFIED IDEOGRAPH + {0xB166, 0x7706}, //7753 #CJK UNIFIED IDEOGRAPH + {0xB167, 0x770A}, //7754 #CJK UNIFIED IDEOGRAPH + {0xB168, 0x770C}, //7755 #CJK UNIFIED IDEOGRAPH + {0xB169, 0x770E}, //7756 #CJK UNIFIED IDEOGRAPH + {0xB16A, 0x770F}, //7757 #CJK UNIFIED IDEOGRAPH + {0xB16B, 0x7710}, //7758 #CJK UNIFIED IDEOGRAPH + {0xB16C, 0x7711}, //7759 #CJK UNIFIED IDEOGRAPH + {0xB16D, 0x7712}, //7760 #CJK UNIFIED IDEOGRAPH + {0xB16E, 0x7713}, //7761 #CJK UNIFIED IDEOGRAPH + {0xB16F, 0x7714}, //7762 #CJK UNIFIED IDEOGRAPH + {0xB170, 0x7715}, //7763 #CJK UNIFIED IDEOGRAPH + {0xB171, 0x7716}, //7764 #CJK UNIFIED IDEOGRAPH + {0xB172, 0x7717}, //7765 #CJK UNIFIED IDEOGRAPH + {0xB173, 0x7718}, //7766 #CJK UNIFIED IDEOGRAPH + {0xB174, 0x771B}, //7767 #CJK UNIFIED IDEOGRAPH + {0xB175, 0x771C}, //7768 #CJK UNIFIED IDEOGRAPH + {0xB176, 0x771D}, //7769 #CJK UNIFIED IDEOGRAPH + {0xB177, 0x771E}, //7770 #CJK UNIFIED IDEOGRAPH + {0xB178, 0x7721}, //7771 #CJK UNIFIED IDEOGRAPH + {0xB179, 0x7723}, //7772 #CJK UNIFIED IDEOGRAPH + {0xB17A, 0x7724}, //7773 #CJK UNIFIED IDEOGRAPH + {0xB17B, 0x7725}, //7774 #CJK UNIFIED IDEOGRAPH + {0xB17C, 0x7727}, //7775 #CJK UNIFIED IDEOGRAPH + {0xB17D, 0x772A}, //7776 #CJK UNIFIED IDEOGRAPH + {0xB17E, 0x772B}, //7777 #CJK UNIFIED IDEOGRAPH + {0xB180, 0x772C}, //7778 #CJK UNIFIED IDEOGRAPH + {0xB181, 0x772E}, //7779 #CJK UNIFIED IDEOGRAPH + {0xB182, 0x7730}, //7780 #CJK UNIFIED IDEOGRAPH + {0xB183, 0x7731}, //7781 #CJK UNIFIED IDEOGRAPH + {0xB184, 0x7732}, //7782 #CJK UNIFIED IDEOGRAPH + {0xB185, 0x7733}, //7783 #CJK UNIFIED IDEOGRAPH + {0xB186, 0x7734}, //7784 #CJK UNIFIED IDEOGRAPH + {0xB187, 0x7739}, //7785 #CJK UNIFIED IDEOGRAPH + {0xB188, 0x773B}, //7786 #CJK UNIFIED IDEOGRAPH + {0xB189, 0x773D}, //7787 #CJK UNIFIED IDEOGRAPH + {0xB18A, 0x773E}, //7788 #CJK UNIFIED IDEOGRAPH + {0xB18B, 0x773F}, //7789 #CJK UNIFIED IDEOGRAPH + {0xB18C, 0x7742}, //7790 #CJK UNIFIED IDEOGRAPH + {0xB18D, 0x7744}, //7791 #CJK UNIFIED IDEOGRAPH + {0xB18E, 0x7745}, //7792 #CJK UNIFIED IDEOGRAPH + {0xB18F, 0x7746}, //7793 #CJK UNIFIED IDEOGRAPH + {0xB190, 0x7748}, //7794 #CJK UNIFIED IDEOGRAPH + {0xB191, 0x7749}, //7795 #CJK UNIFIED IDEOGRAPH + {0xB192, 0x774A}, //7796 #CJK UNIFIED IDEOGRAPH + {0xB193, 0x774B}, //7797 #CJK UNIFIED IDEOGRAPH + {0xB194, 0x774C}, //7798 #CJK UNIFIED IDEOGRAPH + {0xB195, 0x774D}, //7799 #CJK UNIFIED IDEOGRAPH + {0xB196, 0x774E}, //7800 #CJK UNIFIED IDEOGRAPH + {0xB197, 0x774F}, //7801 #CJK UNIFIED IDEOGRAPH + {0xB198, 0x7752}, //7802 #CJK UNIFIED IDEOGRAPH + {0xB199, 0x7753}, //7803 #CJK UNIFIED IDEOGRAPH + {0xB19A, 0x7754}, //7804 #CJK UNIFIED IDEOGRAPH + {0xB19B, 0x7755}, //7805 #CJK UNIFIED IDEOGRAPH + {0xB19C, 0x7756}, //7806 #CJK UNIFIED IDEOGRAPH + {0xB19D, 0x7757}, //7807 #CJK UNIFIED IDEOGRAPH + {0xB19E, 0x7758}, //7808 #CJK UNIFIED IDEOGRAPH + {0xB19F, 0x7759}, //7809 #CJK UNIFIED IDEOGRAPH + {0xB1A0, 0x775C}, //7810 #CJK UNIFIED IDEOGRAPH + {0xB1A1, 0x8584}, //7811 #CJK UNIFIED IDEOGRAPH + {0xB1A2, 0x96F9}, //7812 #CJK UNIFIED IDEOGRAPH + {0xB1A3, 0x4FDD}, //7813 #CJK UNIFIED IDEOGRAPH + {0xB1A4, 0x5821}, //7814 #CJK UNIFIED IDEOGRAPH + {0xB1A5, 0x9971}, //7815 #CJK UNIFIED IDEOGRAPH + {0xB1A6, 0x5B9D}, //7816 #CJK UNIFIED IDEOGRAPH + {0xB1A7, 0x62B1}, //7817 #CJK UNIFIED IDEOGRAPH + {0xB1A8, 0x62A5}, //7818 #CJK UNIFIED IDEOGRAPH + {0xB1A9, 0x66B4}, //7819 #CJK UNIFIED IDEOGRAPH + {0xB1AA, 0x8C79}, //7820 #CJK UNIFIED IDEOGRAPH + {0xB1AB, 0x9C8D}, //7821 #CJK UNIFIED IDEOGRAPH + {0xB1AC, 0x7206}, //7822 #CJK UNIFIED IDEOGRAPH + {0xB1AD, 0x676F}, //7823 #CJK UNIFIED IDEOGRAPH + {0xB1AE, 0x7891}, //7824 #CJK UNIFIED IDEOGRAPH + {0xB1AF, 0x60B2}, //7825 #CJK UNIFIED IDEOGRAPH + {0xB1B0, 0x5351}, //7826 #CJK UNIFIED IDEOGRAPH + {0xB1B1, 0x5317}, //7827 #CJK UNIFIED IDEOGRAPH + {0xB1B2, 0x8F88}, //7828 #CJK UNIFIED IDEOGRAPH + {0xB1B3, 0x80CC}, //7829 #CJK UNIFIED IDEOGRAPH + {0xB1B4, 0x8D1D}, //7830 #CJK UNIFIED IDEOGRAPH + {0xB1B5, 0x94A1}, //7831 #CJK UNIFIED IDEOGRAPH + {0xB1B6, 0x500D}, //7832 #CJK UNIFIED IDEOGRAPH + {0xB1B7, 0x72C8}, //7833 #CJK UNIFIED IDEOGRAPH + {0xB1B8, 0x5907}, //7834 #CJK UNIFIED IDEOGRAPH + {0xB1B9, 0x60EB}, //7835 #CJK UNIFIED IDEOGRAPH + {0xB1BA, 0x7119}, //7836 #CJK UNIFIED IDEOGRAPH + {0xB1BB, 0x88AB}, //7837 #CJK UNIFIED IDEOGRAPH + {0xB1BC, 0x5954}, //7838 #CJK UNIFIED IDEOGRAPH + {0xB1BD, 0x82EF}, //7839 #CJK UNIFIED IDEOGRAPH + {0xB1BE, 0x672C}, //7840 #CJK UNIFIED IDEOGRAPH + {0xB1BF, 0x7B28}, //7841 #CJK UNIFIED IDEOGRAPH + {0xB1C0, 0x5D29}, //7842 #CJK UNIFIED IDEOGRAPH + {0xB1C1, 0x7EF7}, //7843 #CJK UNIFIED IDEOGRAPH + {0xB1C2, 0x752D}, //7844 #CJK UNIFIED IDEOGRAPH + {0xB1C3, 0x6CF5}, //7845 #CJK UNIFIED IDEOGRAPH + {0xB1C4, 0x8E66}, //7846 #CJK UNIFIED IDEOGRAPH + {0xB1C5, 0x8FF8}, //7847 #CJK UNIFIED IDEOGRAPH + {0xB1C6, 0x903C}, //7848 #CJK UNIFIED IDEOGRAPH + {0xB1C7, 0x9F3B}, //7849 #CJK UNIFIED IDEOGRAPH + {0xB1C8, 0x6BD4}, //7850 #CJK UNIFIED IDEOGRAPH + {0xB1C9, 0x9119}, //7851 #CJK UNIFIED IDEOGRAPH + {0xB1CA, 0x7B14}, //7852 #CJK UNIFIED IDEOGRAPH + {0xB1CB, 0x5F7C}, //7853 #CJK UNIFIED IDEOGRAPH + {0xB1CC, 0x78A7}, //7854 #CJK UNIFIED IDEOGRAPH + {0xB1CD, 0x84D6}, //7855 #CJK UNIFIED IDEOGRAPH + {0xB1CE, 0x853D}, //7856 #CJK UNIFIED IDEOGRAPH + {0xB1CF, 0x6BD5}, //7857 #CJK UNIFIED IDEOGRAPH + {0xB1D0, 0x6BD9}, //7858 #CJK UNIFIED IDEOGRAPH + {0xB1D1, 0x6BD6}, //7859 #CJK UNIFIED IDEOGRAPH + {0xB1D2, 0x5E01}, //7860 #CJK UNIFIED IDEOGRAPH + {0xB1D3, 0x5E87}, //7861 #CJK UNIFIED IDEOGRAPH + {0xB1D4, 0x75F9}, //7862 #CJK UNIFIED IDEOGRAPH + {0xB1D5, 0x95ED}, //7863 #CJK UNIFIED IDEOGRAPH + {0xB1D6, 0x655D}, //7864 #CJK UNIFIED IDEOGRAPH + {0xB1D7, 0x5F0A}, //7865 #CJK UNIFIED IDEOGRAPH + {0xB1D8, 0x5FC5}, //7866 #CJK UNIFIED IDEOGRAPH + {0xB1D9, 0x8F9F}, //7867 #CJK UNIFIED IDEOGRAPH + {0xB1DA, 0x58C1}, //7868 #CJK UNIFIED IDEOGRAPH + {0xB1DB, 0x81C2}, //7869 #CJK UNIFIED IDEOGRAPH + {0xB1DC, 0x907F}, //7870 #CJK UNIFIED IDEOGRAPH + {0xB1DD, 0x965B}, //7871 #CJK UNIFIED IDEOGRAPH + {0xB1DE, 0x97AD}, //7872 #CJK UNIFIED IDEOGRAPH + {0xB1DF, 0x8FB9}, //7873 #CJK UNIFIED IDEOGRAPH + {0xB1E0, 0x7F16}, //7874 #CJK UNIFIED IDEOGRAPH + {0xB1E1, 0x8D2C}, //7875 #CJK UNIFIED IDEOGRAPH + {0xB1E2, 0x6241}, //7876 #CJK UNIFIED IDEOGRAPH + {0xB1E3, 0x4FBF}, //7877 #CJK UNIFIED IDEOGRAPH + {0xB1E4, 0x53D8}, //7878 #CJK UNIFIED IDEOGRAPH + {0xB1E5, 0x535E}, //7879 #CJK UNIFIED IDEOGRAPH + {0xB1E6, 0x8FA8}, //7880 #CJK UNIFIED IDEOGRAPH + {0xB1E7, 0x8FA9}, //7881 #CJK UNIFIED IDEOGRAPH + {0xB1E8, 0x8FAB}, //7882 #CJK UNIFIED IDEOGRAPH + {0xB1E9, 0x904D}, //7883 #CJK UNIFIED IDEOGRAPH + {0xB1EA, 0x6807}, //7884 #CJK UNIFIED IDEOGRAPH + {0xB1EB, 0x5F6A}, //7885 #CJK UNIFIED IDEOGRAPH + {0xB1EC, 0x8198}, //7886 #CJK UNIFIED IDEOGRAPH + {0xB1ED, 0x8868}, //7887 #CJK UNIFIED IDEOGRAPH + {0xB1EE, 0x9CD6}, //7888 #CJK UNIFIED IDEOGRAPH + {0xB1EF, 0x618B}, //7889 #CJK UNIFIED IDEOGRAPH + {0xB1F0, 0x522B}, //7890 #CJK UNIFIED IDEOGRAPH + {0xB1F1, 0x762A}, //7891 #CJK UNIFIED IDEOGRAPH + {0xB1F2, 0x5F6C}, //7892 #CJK UNIFIED IDEOGRAPH + {0xB1F3, 0x658C}, //7893 #CJK UNIFIED IDEOGRAPH + {0xB1F4, 0x6FD2}, //7894 #CJK UNIFIED IDEOGRAPH + {0xB1F5, 0x6EE8}, //7895 #CJK UNIFIED IDEOGRAPH + {0xB1F6, 0x5BBE}, //7896 #CJK UNIFIED IDEOGRAPH + {0xB1F7, 0x6448}, //7897 #CJK UNIFIED IDEOGRAPH + {0xB1F8, 0x5175}, //7898 #CJK UNIFIED IDEOGRAPH + {0xB1F9, 0x51B0}, //7899 #CJK UNIFIED IDEOGRAPH + {0xB1FA, 0x67C4}, //7900 #CJK UNIFIED IDEOGRAPH + {0xB1FB, 0x4E19}, //7901 #CJK UNIFIED IDEOGRAPH + {0xB1FC, 0x79C9}, //7902 #CJK UNIFIED IDEOGRAPH + {0xB1FD, 0x997C}, //7903 #CJK UNIFIED IDEOGRAPH + {0xB1FE, 0x70B3}, //7904 #CJK UNIFIED IDEOGRAPH + {0xB240, 0x775D}, //7905 #CJK UNIFIED IDEOGRAPH + {0xB241, 0x775E}, //7906 #CJK UNIFIED IDEOGRAPH + {0xB242, 0x775F}, //7907 #CJK UNIFIED IDEOGRAPH + {0xB243, 0x7760}, //7908 #CJK UNIFIED IDEOGRAPH + {0xB244, 0x7764}, //7909 #CJK UNIFIED IDEOGRAPH + {0xB245, 0x7767}, //7910 #CJK UNIFIED IDEOGRAPH + {0xB246, 0x7769}, //7911 #CJK UNIFIED IDEOGRAPH + {0xB247, 0x776A}, //7912 #CJK UNIFIED IDEOGRAPH + {0xB248, 0x776D}, //7913 #CJK UNIFIED IDEOGRAPH + {0xB249, 0x776E}, //7914 #CJK UNIFIED IDEOGRAPH + {0xB24A, 0x776F}, //7915 #CJK UNIFIED IDEOGRAPH + {0xB24B, 0x7770}, //7916 #CJK UNIFIED IDEOGRAPH + {0xB24C, 0x7771}, //7917 #CJK UNIFIED IDEOGRAPH + {0xB24D, 0x7772}, //7918 #CJK UNIFIED IDEOGRAPH + {0xB24E, 0x7773}, //7919 #CJK UNIFIED IDEOGRAPH + {0xB24F, 0x7774}, //7920 #CJK UNIFIED IDEOGRAPH + {0xB250, 0x7775}, //7921 #CJK UNIFIED IDEOGRAPH + {0xB251, 0x7776}, //7922 #CJK UNIFIED IDEOGRAPH + {0xB252, 0x7777}, //7923 #CJK UNIFIED IDEOGRAPH + {0xB253, 0x7778}, //7924 #CJK UNIFIED IDEOGRAPH + {0xB254, 0x777A}, //7925 #CJK UNIFIED IDEOGRAPH + {0xB255, 0x777B}, //7926 #CJK UNIFIED IDEOGRAPH + {0xB256, 0x777C}, //7927 #CJK UNIFIED IDEOGRAPH + {0xB257, 0x7781}, //7928 #CJK UNIFIED IDEOGRAPH + {0xB258, 0x7782}, //7929 #CJK UNIFIED IDEOGRAPH + {0xB259, 0x7783}, //7930 #CJK UNIFIED IDEOGRAPH + {0xB25A, 0x7786}, //7931 #CJK UNIFIED IDEOGRAPH + {0xB25B, 0x7787}, //7932 #CJK UNIFIED IDEOGRAPH + {0xB25C, 0x7788}, //7933 #CJK UNIFIED IDEOGRAPH + {0xB25D, 0x7789}, //7934 #CJK UNIFIED IDEOGRAPH + {0xB25E, 0x778A}, //7935 #CJK UNIFIED IDEOGRAPH + {0xB25F, 0x778B}, //7936 #CJK UNIFIED IDEOGRAPH + {0xB260, 0x778F}, //7937 #CJK UNIFIED IDEOGRAPH + {0xB261, 0x7790}, //7938 #CJK UNIFIED IDEOGRAPH + {0xB262, 0x7793}, //7939 #CJK UNIFIED IDEOGRAPH + {0xB263, 0x7794}, //7940 #CJK UNIFIED IDEOGRAPH + {0xB264, 0x7795}, //7941 #CJK UNIFIED IDEOGRAPH + {0xB265, 0x7796}, //7942 #CJK UNIFIED IDEOGRAPH + {0xB266, 0x7797}, //7943 #CJK UNIFIED IDEOGRAPH + {0xB267, 0x7798}, //7944 #CJK UNIFIED IDEOGRAPH + {0xB268, 0x7799}, //7945 #CJK UNIFIED IDEOGRAPH + {0xB269, 0x779A}, //7946 #CJK UNIFIED IDEOGRAPH + {0xB26A, 0x779B}, //7947 #CJK UNIFIED IDEOGRAPH + {0xB26B, 0x779C}, //7948 #CJK UNIFIED IDEOGRAPH + {0xB26C, 0x779D}, //7949 #CJK UNIFIED IDEOGRAPH + {0xB26D, 0x779E}, //7950 #CJK UNIFIED IDEOGRAPH + {0xB26E, 0x77A1}, //7951 #CJK UNIFIED IDEOGRAPH + {0xB26F, 0x77A3}, //7952 #CJK UNIFIED IDEOGRAPH + {0xB270, 0x77A4}, //7953 #CJK UNIFIED IDEOGRAPH + {0xB271, 0x77A6}, //7954 #CJK UNIFIED IDEOGRAPH + {0xB272, 0x77A8}, //7955 #CJK UNIFIED IDEOGRAPH + {0xB273, 0x77AB}, //7956 #CJK UNIFIED IDEOGRAPH + {0xB274, 0x77AD}, //7957 #CJK UNIFIED IDEOGRAPH + {0xB275, 0x77AE}, //7958 #CJK UNIFIED IDEOGRAPH + {0xB276, 0x77AF}, //7959 #CJK UNIFIED IDEOGRAPH + {0xB277, 0x77B1}, //7960 #CJK UNIFIED IDEOGRAPH + {0xB278, 0x77B2}, //7961 #CJK UNIFIED IDEOGRAPH + {0xB279, 0x77B4}, //7962 #CJK UNIFIED IDEOGRAPH + {0xB27A, 0x77B6}, //7963 #CJK UNIFIED IDEOGRAPH + {0xB27B, 0x77B7}, //7964 #CJK UNIFIED IDEOGRAPH + {0xB27C, 0x77B8}, //7965 #CJK UNIFIED IDEOGRAPH + {0xB27D, 0x77B9}, //7966 #CJK UNIFIED IDEOGRAPH + {0xB27E, 0x77BA}, //7967 #CJK UNIFIED IDEOGRAPH + {0xB280, 0x77BC}, //7968 #CJK UNIFIED IDEOGRAPH + {0xB281, 0x77BE}, //7969 #CJK UNIFIED IDEOGRAPH + {0xB282, 0x77C0}, //7970 #CJK UNIFIED IDEOGRAPH + {0xB283, 0x77C1}, //7971 #CJK UNIFIED IDEOGRAPH + {0xB284, 0x77C2}, //7972 #CJK UNIFIED IDEOGRAPH + {0xB285, 0x77C3}, //7973 #CJK UNIFIED IDEOGRAPH + {0xB286, 0x77C4}, //7974 #CJK UNIFIED IDEOGRAPH + {0xB287, 0x77C5}, //7975 #CJK UNIFIED IDEOGRAPH + {0xB288, 0x77C6}, //7976 #CJK UNIFIED IDEOGRAPH + {0xB289, 0x77C7}, //7977 #CJK UNIFIED IDEOGRAPH + {0xB28A, 0x77C8}, //7978 #CJK UNIFIED IDEOGRAPH + {0xB28B, 0x77C9}, //7979 #CJK UNIFIED IDEOGRAPH + {0xB28C, 0x77CA}, //7980 #CJK UNIFIED IDEOGRAPH + {0xB28D, 0x77CB}, //7981 #CJK UNIFIED IDEOGRAPH + {0xB28E, 0x77CC}, //7982 #CJK UNIFIED IDEOGRAPH + {0xB28F, 0x77CE}, //7983 #CJK UNIFIED IDEOGRAPH + {0xB290, 0x77CF}, //7984 #CJK UNIFIED IDEOGRAPH + {0xB291, 0x77D0}, //7985 #CJK UNIFIED IDEOGRAPH + {0xB292, 0x77D1}, //7986 #CJK UNIFIED IDEOGRAPH + {0xB293, 0x77D2}, //7987 #CJK UNIFIED IDEOGRAPH + {0xB294, 0x77D3}, //7988 #CJK UNIFIED IDEOGRAPH + {0xB295, 0x77D4}, //7989 #CJK UNIFIED IDEOGRAPH + {0xB296, 0x77D5}, //7990 #CJK UNIFIED IDEOGRAPH + {0xB297, 0x77D6}, //7991 #CJK UNIFIED IDEOGRAPH + {0xB298, 0x77D8}, //7992 #CJK UNIFIED IDEOGRAPH + {0xB299, 0x77D9}, //7993 #CJK UNIFIED IDEOGRAPH + {0xB29A, 0x77DA}, //7994 #CJK UNIFIED IDEOGRAPH + {0xB29B, 0x77DD}, //7995 #CJK UNIFIED IDEOGRAPH + {0xB29C, 0x77DE}, //7996 #CJK UNIFIED IDEOGRAPH + {0xB29D, 0x77DF}, //7997 #CJK UNIFIED IDEOGRAPH + {0xB29E, 0x77E0}, //7998 #CJK UNIFIED IDEOGRAPH + {0xB29F, 0x77E1}, //7999 #CJK UNIFIED IDEOGRAPH + {0xB2A0, 0x77E4}, //8000 #CJK UNIFIED IDEOGRAPH + {0xB2A1, 0x75C5}, //8001 #CJK UNIFIED IDEOGRAPH + {0xB2A2, 0x5E76}, //8002 #CJK UNIFIED IDEOGRAPH + {0xB2A3, 0x73BB}, //8003 #CJK UNIFIED IDEOGRAPH + {0xB2A4, 0x83E0}, //8004 #CJK UNIFIED IDEOGRAPH + {0xB2A5, 0x64AD}, //8005 #CJK UNIFIED IDEOGRAPH + {0xB2A6, 0x62E8}, //8006 #CJK UNIFIED IDEOGRAPH + {0xB2A7, 0x94B5}, //8007 #CJK UNIFIED IDEOGRAPH + {0xB2A8, 0x6CE2}, //8008 #CJK UNIFIED IDEOGRAPH + {0xB2A9, 0x535A}, //8009 #CJK UNIFIED IDEOGRAPH + {0xB2AA, 0x52C3}, //8010 #CJK UNIFIED IDEOGRAPH + {0xB2AB, 0x640F}, //8011 #CJK UNIFIED IDEOGRAPH + {0xB2AC, 0x94C2}, //8012 #CJK UNIFIED IDEOGRAPH + {0xB2AD, 0x7B94}, //8013 #CJK UNIFIED IDEOGRAPH + {0xB2AE, 0x4F2F}, //8014 #CJK UNIFIED IDEOGRAPH + {0xB2AF, 0x5E1B}, //8015 #CJK UNIFIED IDEOGRAPH + {0xB2B0, 0x8236}, //8016 #CJK UNIFIED IDEOGRAPH + {0xB2B1, 0x8116}, //8017 #CJK UNIFIED IDEOGRAPH + {0xB2B2, 0x818A}, //8018 #CJK UNIFIED IDEOGRAPH + {0xB2B3, 0x6E24}, //8019 #CJK UNIFIED IDEOGRAPH + {0xB2B4, 0x6CCA}, //8020 #CJK UNIFIED IDEOGRAPH + {0xB2B5, 0x9A73}, //8021 #CJK UNIFIED IDEOGRAPH + {0xB2B6, 0x6355}, //8022 #CJK UNIFIED IDEOGRAPH + {0xB2B7, 0x535C}, //8023 #CJK UNIFIED IDEOGRAPH + {0xB2B8, 0x54FA}, //8024 #CJK UNIFIED IDEOGRAPH + {0xB2B9, 0x8865}, //8025 #CJK UNIFIED IDEOGRAPH + {0xB2BA, 0x57E0}, //8026 #CJK UNIFIED IDEOGRAPH + {0xB2BB, 0x4E0D}, //8027 #CJK UNIFIED IDEOGRAPH + {0xB2BC, 0x5E03}, //8028 #CJK UNIFIED IDEOGRAPH + {0xB2BD, 0x6B65}, //8029 #CJK UNIFIED IDEOGRAPH + {0xB2BE, 0x7C3F}, //8030 #CJK UNIFIED IDEOGRAPH + {0xB2BF, 0x90E8}, //8031 #CJK UNIFIED IDEOGRAPH + {0xB2C0, 0x6016}, //8032 #CJK UNIFIED IDEOGRAPH + {0xB2C1, 0x64E6}, //8033 #CJK UNIFIED IDEOGRAPH + {0xB2C2, 0x731C}, //8034 #CJK UNIFIED IDEOGRAPH + {0xB2C3, 0x88C1}, //8035 #CJK UNIFIED IDEOGRAPH + {0xB2C4, 0x6750}, //8036 #CJK UNIFIED IDEOGRAPH + {0xB2C5, 0x624D}, //8037 #CJK UNIFIED IDEOGRAPH + {0xB2C6, 0x8D22}, //8038 #CJK UNIFIED IDEOGRAPH + {0xB2C7, 0x776C}, //8039 #CJK UNIFIED IDEOGRAPH + {0xB2C8, 0x8E29}, //8040 #CJK UNIFIED IDEOGRAPH + {0xB2C9, 0x91C7}, //8041 #CJK UNIFIED IDEOGRAPH + {0xB2CA, 0x5F69}, //8042 #CJK UNIFIED IDEOGRAPH + {0xB2CB, 0x83DC}, //8043 #CJK UNIFIED IDEOGRAPH + {0xB2CC, 0x8521}, //8044 #CJK UNIFIED IDEOGRAPH + {0xB2CD, 0x9910}, //8045 #CJK UNIFIED IDEOGRAPH + {0xB2CE, 0x53C2}, //8046 #CJK UNIFIED IDEOGRAPH + {0xB2CF, 0x8695}, //8047 #CJK UNIFIED IDEOGRAPH + {0xB2D0, 0x6B8B}, //8048 #CJK UNIFIED IDEOGRAPH + {0xB2D1, 0x60ED}, //8049 #CJK UNIFIED IDEOGRAPH + {0xB2D2, 0x60E8}, //8050 #CJK UNIFIED IDEOGRAPH + {0xB2D3, 0x707F}, //8051 #CJK UNIFIED IDEOGRAPH + {0xB2D4, 0x82CD}, //8052 #CJK UNIFIED IDEOGRAPH + {0xB2D5, 0x8231}, //8053 #CJK UNIFIED IDEOGRAPH + {0xB2D6, 0x4ED3}, //8054 #CJK UNIFIED IDEOGRAPH + {0xB2D7, 0x6CA7}, //8055 #CJK UNIFIED IDEOGRAPH + {0xB2D8, 0x85CF}, //8056 #CJK UNIFIED IDEOGRAPH + {0xB2D9, 0x64CD}, //8057 #CJK UNIFIED IDEOGRAPH + {0xB2DA, 0x7CD9}, //8058 #CJK UNIFIED IDEOGRAPH + {0xB2DB, 0x69FD}, //8059 #CJK UNIFIED IDEOGRAPH + {0xB2DC, 0x66F9}, //8060 #CJK UNIFIED IDEOGRAPH + {0xB2DD, 0x8349}, //8061 #CJK UNIFIED IDEOGRAPH + {0xB2DE, 0x5395}, //8062 #CJK UNIFIED IDEOGRAPH + {0xB2DF, 0x7B56}, //8063 #CJK UNIFIED IDEOGRAPH + {0xB2E0, 0x4FA7}, //8064 #CJK UNIFIED IDEOGRAPH + {0xB2E1, 0x518C}, //8065 #CJK UNIFIED IDEOGRAPH + {0xB2E2, 0x6D4B}, //8066 #CJK UNIFIED IDEOGRAPH + {0xB2E3, 0x5C42}, //8067 #CJK UNIFIED IDEOGRAPH + {0xB2E4, 0x8E6D}, //8068 #CJK UNIFIED IDEOGRAPH + {0xB2E5, 0x63D2}, //8069 #CJK UNIFIED IDEOGRAPH + {0xB2E6, 0x53C9}, //8070 #CJK UNIFIED IDEOGRAPH + {0xB2E7, 0x832C}, //8071 #CJK UNIFIED IDEOGRAPH + {0xB2E8, 0x8336}, //8072 #CJK UNIFIED IDEOGRAPH + {0xB2E9, 0x67E5}, //8073 #CJK UNIFIED IDEOGRAPH + {0xB2EA, 0x78B4}, //8074 #CJK UNIFIED IDEOGRAPH + {0xB2EB, 0x643D}, //8075 #CJK UNIFIED IDEOGRAPH + {0xB2EC, 0x5BDF}, //8076 #CJK UNIFIED IDEOGRAPH + {0xB2ED, 0x5C94}, //8077 #CJK UNIFIED IDEOGRAPH + {0xB2EE, 0x5DEE}, //8078 #CJK UNIFIED IDEOGRAPH + {0xB2EF, 0x8BE7}, //8079 #CJK UNIFIED IDEOGRAPH + {0xB2F0, 0x62C6}, //8080 #CJK UNIFIED IDEOGRAPH + {0xB2F1, 0x67F4}, //8081 #CJK UNIFIED IDEOGRAPH + {0xB2F2, 0x8C7A}, //8082 #CJK UNIFIED IDEOGRAPH + {0xB2F3, 0x6400}, //8083 #CJK UNIFIED IDEOGRAPH + {0xB2F4, 0x63BA}, //8084 #CJK UNIFIED IDEOGRAPH + {0xB2F5, 0x8749}, //8085 #CJK UNIFIED IDEOGRAPH + {0xB2F6, 0x998B}, //8086 #CJK UNIFIED IDEOGRAPH + {0xB2F7, 0x8C17}, //8087 #CJK UNIFIED IDEOGRAPH + {0xB2F8, 0x7F20}, //8088 #CJK UNIFIED IDEOGRAPH + {0xB2F9, 0x94F2}, //8089 #CJK UNIFIED IDEOGRAPH + {0xB2FA, 0x4EA7}, //8090 #CJK UNIFIED IDEOGRAPH + {0xB2FB, 0x9610}, //8091 #CJK UNIFIED IDEOGRAPH + {0xB2FC, 0x98A4}, //8092 #CJK UNIFIED IDEOGRAPH + {0xB2FD, 0x660C}, //8093 #CJK UNIFIED IDEOGRAPH + {0xB2FE, 0x7316}, //8094 #CJK UNIFIED IDEOGRAPH + {0xB340, 0x77E6}, //8095 #CJK UNIFIED IDEOGRAPH + {0xB341, 0x77E8}, //8096 #CJK UNIFIED IDEOGRAPH + {0xB342, 0x77EA}, //8097 #CJK UNIFIED IDEOGRAPH + {0xB343, 0x77EF}, //8098 #CJK UNIFIED IDEOGRAPH + {0xB344, 0x77F0}, //8099 #CJK UNIFIED IDEOGRAPH + {0xB345, 0x77F1}, //8100 #CJK UNIFIED IDEOGRAPH + {0xB346, 0x77F2}, //8101 #CJK UNIFIED IDEOGRAPH + {0xB347, 0x77F4}, //8102 #CJK UNIFIED IDEOGRAPH + {0xB348, 0x77F5}, //8103 #CJK UNIFIED IDEOGRAPH + {0xB349, 0x77F7}, //8104 #CJK UNIFIED IDEOGRAPH + {0xB34A, 0x77F9}, //8105 #CJK UNIFIED IDEOGRAPH + {0xB34B, 0x77FA}, //8106 #CJK UNIFIED IDEOGRAPH + {0xB34C, 0x77FB}, //8107 #CJK UNIFIED IDEOGRAPH + {0xB34D, 0x77FC}, //8108 #CJK UNIFIED IDEOGRAPH + {0xB34E, 0x7803}, //8109 #CJK UNIFIED IDEOGRAPH + {0xB34F, 0x7804}, //8110 #CJK UNIFIED IDEOGRAPH + {0xB350, 0x7805}, //8111 #CJK UNIFIED IDEOGRAPH + {0xB351, 0x7806}, //8112 #CJK UNIFIED IDEOGRAPH + {0xB352, 0x7807}, //8113 #CJK UNIFIED IDEOGRAPH + {0xB353, 0x7808}, //8114 #CJK UNIFIED IDEOGRAPH + {0xB354, 0x780A}, //8115 #CJK UNIFIED IDEOGRAPH + {0xB355, 0x780B}, //8116 #CJK UNIFIED IDEOGRAPH + {0xB356, 0x780E}, //8117 #CJK UNIFIED IDEOGRAPH + {0xB357, 0x780F}, //8118 #CJK UNIFIED IDEOGRAPH + {0xB358, 0x7810}, //8119 #CJK UNIFIED IDEOGRAPH + {0xB359, 0x7813}, //8120 #CJK UNIFIED IDEOGRAPH + {0xB35A, 0x7815}, //8121 #CJK UNIFIED IDEOGRAPH + {0xB35B, 0x7819}, //8122 #CJK UNIFIED IDEOGRAPH + {0xB35C, 0x781B}, //8123 #CJK UNIFIED IDEOGRAPH + {0xB35D, 0x781E}, //8124 #CJK UNIFIED IDEOGRAPH + {0xB35E, 0x7820}, //8125 #CJK UNIFIED IDEOGRAPH + {0xB35F, 0x7821}, //8126 #CJK UNIFIED IDEOGRAPH + {0xB360, 0x7822}, //8127 #CJK UNIFIED IDEOGRAPH + {0xB361, 0x7824}, //8128 #CJK UNIFIED IDEOGRAPH + {0xB362, 0x7828}, //8129 #CJK UNIFIED IDEOGRAPH + {0xB363, 0x782A}, //8130 #CJK UNIFIED IDEOGRAPH + {0xB364, 0x782B}, //8131 #CJK UNIFIED IDEOGRAPH + {0xB365, 0x782E}, //8132 #CJK UNIFIED IDEOGRAPH + {0xB366, 0x782F}, //8133 #CJK UNIFIED IDEOGRAPH + {0xB367, 0x7831}, //8134 #CJK UNIFIED IDEOGRAPH + {0xB368, 0x7832}, //8135 #CJK UNIFIED IDEOGRAPH + {0xB369, 0x7833}, //8136 #CJK UNIFIED IDEOGRAPH + {0xB36A, 0x7835}, //8137 #CJK UNIFIED IDEOGRAPH + {0xB36B, 0x7836}, //8138 #CJK UNIFIED IDEOGRAPH + {0xB36C, 0x783D}, //8139 #CJK UNIFIED IDEOGRAPH + {0xB36D, 0x783F}, //8140 #CJK UNIFIED IDEOGRAPH + {0xB36E, 0x7841}, //8141 #CJK UNIFIED IDEOGRAPH + {0xB36F, 0x7842}, //8142 #CJK UNIFIED IDEOGRAPH + {0xB370, 0x7843}, //8143 #CJK UNIFIED IDEOGRAPH + {0xB371, 0x7844}, //8144 #CJK UNIFIED IDEOGRAPH + {0xB372, 0x7846}, //8145 #CJK UNIFIED IDEOGRAPH + {0xB373, 0x7848}, //8146 #CJK UNIFIED IDEOGRAPH + {0xB374, 0x7849}, //8147 #CJK UNIFIED IDEOGRAPH + {0xB375, 0x784A}, //8148 #CJK UNIFIED IDEOGRAPH + {0xB376, 0x784B}, //8149 #CJK UNIFIED IDEOGRAPH + {0xB377, 0x784D}, //8150 #CJK UNIFIED IDEOGRAPH + {0xB378, 0x784F}, //8151 #CJK UNIFIED IDEOGRAPH + {0xB379, 0x7851}, //8152 #CJK UNIFIED IDEOGRAPH + {0xB37A, 0x7853}, //8153 #CJK UNIFIED IDEOGRAPH + {0xB37B, 0x7854}, //8154 #CJK UNIFIED IDEOGRAPH + {0xB37C, 0x7858}, //8155 #CJK UNIFIED IDEOGRAPH + {0xB37D, 0x7859}, //8156 #CJK UNIFIED IDEOGRAPH + {0xB37E, 0x785A}, //8157 #CJK UNIFIED IDEOGRAPH + {0xB380, 0x785B}, //8158 #CJK UNIFIED IDEOGRAPH + {0xB381, 0x785C}, //8159 #CJK UNIFIED IDEOGRAPH + {0xB382, 0x785E}, //8160 #CJK UNIFIED IDEOGRAPH + {0xB383, 0x785F}, //8161 #CJK UNIFIED IDEOGRAPH + {0xB384, 0x7860}, //8162 #CJK UNIFIED IDEOGRAPH + {0xB385, 0x7861}, //8163 #CJK UNIFIED IDEOGRAPH + {0xB386, 0x7862}, //8164 #CJK UNIFIED IDEOGRAPH + {0xB387, 0x7863}, //8165 #CJK UNIFIED IDEOGRAPH + {0xB388, 0x7864}, //8166 #CJK UNIFIED IDEOGRAPH + {0xB389, 0x7865}, //8167 #CJK UNIFIED IDEOGRAPH + {0xB38A, 0x7866}, //8168 #CJK UNIFIED IDEOGRAPH + {0xB38B, 0x7867}, //8169 #CJK UNIFIED IDEOGRAPH + {0xB38C, 0x7868}, //8170 #CJK UNIFIED IDEOGRAPH + {0xB38D, 0x7869}, //8171 #CJK UNIFIED IDEOGRAPH + {0xB38E, 0x786F}, //8172 #CJK UNIFIED IDEOGRAPH + {0xB38F, 0x7870}, //8173 #CJK UNIFIED IDEOGRAPH + {0xB390, 0x7871}, //8174 #CJK UNIFIED IDEOGRAPH + {0xB391, 0x7872}, //8175 #CJK UNIFIED IDEOGRAPH + {0xB392, 0x7873}, //8176 #CJK UNIFIED IDEOGRAPH + {0xB393, 0x7874}, //8177 #CJK UNIFIED IDEOGRAPH + {0xB394, 0x7875}, //8178 #CJK UNIFIED IDEOGRAPH + {0xB395, 0x7876}, //8179 #CJK UNIFIED IDEOGRAPH + {0xB396, 0x7878}, //8180 #CJK UNIFIED IDEOGRAPH + {0xB397, 0x7879}, //8181 #CJK UNIFIED IDEOGRAPH + {0xB398, 0x787A}, //8182 #CJK UNIFIED IDEOGRAPH + {0xB399, 0x787B}, //8183 #CJK UNIFIED IDEOGRAPH + {0xB39A, 0x787D}, //8184 #CJK UNIFIED IDEOGRAPH + {0xB39B, 0x787E}, //8185 #CJK UNIFIED IDEOGRAPH + {0xB39C, 0x787F}, //8186 #CJK UNIFIED IDEOGRAPH + {0xB39D, 0x7880}, //8187 #CJK UNIFIED IDEOGRAPH + {0xB39E, 0x7881}, //8188 #CJK UNIFIED IDEOGRAPH + {0xB39F, 0x7882}, //8189 #CJK UNIFIED IDEOGRAPH + {0xB3A0, 0x7883}, //8190 #CJK UNIFIED IDEOGRAPH + {0xB3A1, 0x573A}, //8191 #CJK UNIFIED IDEOGRAPH + {0xB3A2, 0x5C1D}, //8192 #CJK UNIFIED IDEOGRAPH + {0xB3A3, 0x5E38}, //8193 #CJK UNIFIED IDEOGRAPH + {0xB3A4, 0x957F}, //8194 #CJK UNIFIED IDEOGRAPH + {0xB3A5, 0x507F}, //8195 #CJK UNIFIED IDEOGRAPH + {0xB3A6, 0x80A0}, //8196 #CJK UNIFIED IDEOGRAPH + {0xB3A7, 0x5382}, //8197 #CJK UNIFIED IDEOGRAPH + {0xB3A8, 0x655E}, //8198 #CJK UNIFIED IDEOGRAPH + {0xB3A9, 0x7545}, //8199 #CJK UNIFIED IDEOGRAPH + {0xB3AA, 0x5531}, //8200 #CJK UNIFIED IDEOGRAPH + {0xB3AB, 0x5021}, //8201 #CJK UNIFIED IDEOGRAPH + {0xB3AC, 0x8D85}, //8202 #CJK UNIFIED IDEOGRAPH + {0xB3AD, 0x6284}, //8203 #CJK UNIFIED IDEOGRAPH + {0xB3AE, 0x949E}, //8204 #CJK UNIFIED IDEOGRAPH + {0xB3AF, 0x671D}, //8205 #CJK UNIFIED IDEOGRAPH + {0xB3B0, 0x5632}, //8206 #CJK UNIFIED IDEOGRAPH + {0xB3B1, 0x6F6E}, //8207 #CJK UNIFIED IDEOGRAPH + {0xB3B2, 0x5DE2}, //8208 #CJK UNIFIED IDEOGRAPH + {0xB3B3, 0x5435}, //8209 #CJK UNIFIED IDEOGRAPH + {0xB3B4, 0x7092}, //8210 #CJK UNIFIED IDEOGRAPH + {0xB3B5, 0x8F66}, //8211 #CJK UNIFIED IDEOGRAPH + {0xB3B6, 0x626F}, //8212 #CJK UNIFIED IDEOGRAPH + {0xB3B7, 0x64A4}, //8213 #CJK UNIFIED IDEOGRAPH + {0xB3B8, 0x63A3}, //8214 #CJK UNIFIED IDEOGRAPH + {0xB3B9, 0x5F7B}, //8215 #CJK UNIFIED IDEOGRAPH + {0xB3BA, 0x6F88}, //8216 #CJK UNIFIED IDEOGRAPH + {0xB3BB, 0x90F4}, //8217 #CJK UNIFIED IDEOGRAPH + {0xB3BC, 0x81E3}, //8218 #CJK UNIFIED IDEOGRAPH + {0xB3BD, 0x8FB0}, //8219 #CJK UNIFIED IDEOGRAPH + {0xB3BE, 0x5C18}, //8220 #CJK UNIFIED IDEOGRAPH + {0xB3BF, 0x6668}, //8221 #CJK UNIFIED IDEOGRAPH + {0xB3C0, 0x5FF1}, //8222 #CJK UNIFIED IDEOGRAPH + {0xB3C1, 0x6C89}, //8223 #CJK UNIFIED IDEOGRAPH + {0xB3C2, 0x9648}, //8224 #CJK UNIFIED IDEOGRAPH + {0xB3C3, 0x8D81}, //8225 #CJK UNIFIED IDEOGRAPH + {0xB3C4, 0x886C}, //8226 #CJK UNIFIED IDEOGRAPH + {0xB3C5, 0x6491}, //8227 #CJK UNIFIED IDEOGRAPH + {0xB3C6, 0x79F0}, //8228 #CJK UNIFIED IDEOGRAPH + {0xB3C7, 0x57CE}, //8229 #CJK UNIFIED IDEOGRAPH + {0xB3C8, 0x6A59}, //8230 #CJK UNIFIED IDEOGRAPH + {0xB3C9, 0x6210}, //8231 #CJK UNIFIED IDEOGRAPH + {0xB3CA, 0x5448}, //8232 #CJK UNIFIED IDEOGRAPH + {0xB3CB, 0x4E58}, //8233 #CJK UNIFIED IDEOGRAPH + {0xB3CC, 0x7A0B}, //8234 #CJK UNIFIED IDEOGRAPH + {0xB3CD, 0x60E9}, //8235 #CJK UNIFIED IDEOGRAPH + {0xB3CE, 0x6F84}, //8236 #CJK UNIFIED IDEOGRAPH + {0xB3CF, 0x8BDA}, //8237 #CJK UNIFIED IDEOGRAPH + {0xB3D0, 0x627F}, //8238 #CJK UNIFIED IDEOGRAPH + {0xB3D1, 0x901E}, //8239 #CJK UNIFIED IDEOGRAPH + {0xB3D2, 0x9A8B}, //8240 #CJK UNIFIED IDEOGRAPH + {0xB3D3, 0x79E4}, //8241 #CJK UNIFIED IDEOGRAPH + {0xB3D4, 0x5403}, //8242 #CJK UNIFIED IDEOGRAPH + {0xB3D5, 0x75F4}, //8243 #CJK UNIFIED IDEOGRAPH + {0xB3D6, 0x6301}, //8244 #CJK UNIFIED IDEOGRAPH + {0xB3D7, 0x5319}, //8245 #CJK UNIFIED IDEOGRAPH + {0xB3D8, 0x6C60}, //8246 #CJK UNIFIED IDEOGRAPH + {0xB3D9, 0x8FDF}, //8247 #CJK UNIFIED IDEOGRAPH + {0xB3DA, 0x5F1B}, //8248 #CJK UNIFIED IDEOGRAPH + {0xB3DB, 0x9A70}, //8249 #CJK UNIFIED IDEOGRAPH + {0xB3DC, 0x803B}, //8250 #CJK UNIFIED IDEOGRAPH + {0xB3DD, 0x9F7F}, //8251 #CJK UNIFIED IDEOGRAPH + {0xB3DE, 0x4F88}, //8252 #CJK UNIFIED IDEOGRAPH + {0xB3DF, 0x5C3A}, //8253 #CJK UNIFIED IDEOGRAPH + {0xB3E0, 0x8D64}, //8254 #CJK UNIFIED IDEOGRAPH + {0xB3E1, 0x7FC5}, //8255 #CJK UNIFIED IDEOGRAPH + {0xB3E2, 0x65A5}, //8256 #CJK UNIFIED IDEOGRAPH + {0xB3E3, 0x70BD}, //8257 #CJK UNIFIED IDEOGRAPH + {0xB3E4, 0x5145}, //8258 #CJK UNIFIED IDEOGRAPH + {0xB3E5, 0x51B2}, //8259 #CJK UNIFIED IDEOGRAPH + {0xB3E6, 0x866B}, //8260 #CJK UNIFIED IDEOGRAPH + {0xB3E7, 0x5D07}, //8261 #CJK UNIFIED IDEOGRAPH + {0xB3E8, 0x5BA0}, //8262 #CJK UNIFIED IDEOGRAPH + {0xB3E9, 0x62BD}, //8263 #CJK UNIFIED IDEOGRAPH + {0xB3EA, 0x916C}, //8264 #CJK UNIFIED IDEOGRAPH + {0xB3EB, 0x7574}, //8265 #CJK UNIFIED IDEOGRAPH + {0xB3EC, 0x8E0C}, //8266 #CJK UNIFIED IDEOGRAPH + {0xB3ED, 0x7A20}, //8267 #CJK UNIFIED IDEOGRAPH + {0xB3EE, 0x6101}, //8268 #CJK UNIFIED IDEOGRAPH + {0xB3EF, 0x7B79}, //8269 #CJK UNIFIED IDEOGRAPH + {0xB3F0, 0x4EC7}, //8270 #CJK UNIFIED IDEOGRAPH + {0xB3F1, 0x7EF8}, //8271 #CJK UNIFIED IDEOGRAPH + {0xB3F2, 0x7785}, //8272 #CJK UNIFIED IDEOGRAPH + {0xB3F3, 0x4E11}, //8273 #CJK UNIFIED IDEOGRAPH + {0xB3F4, 0x81ED}, //8274 #CJK UNIFIED IDEOGRAPH + {0xB3F5, 0x521D}, //8275 #CJK UNIFIED IDEOGRAPH + {0xB3F6, 0x51FA}, //8276 #CJK UNIFIED IDEOGRAPH + {0xB3F7, 0x6A71}, //8277 #CJK UNIFIED IDEOGRAPH + {0xB3F8, 0x53A8}, //8278 #CJK UNIFIED IDEOGRAPH + {0xB3F9, 0x8E87}, //8279 #CJK UNIFIED IDEOGRAPH + {0xB3FA, 0x9504}, //8280 #CJK UNIFIED IDEOGRAPH + {0xB3FB, 0x96CF}, //8281 #CJK UNIFIED IDEOGRAPH + {0xB3FC, 0x6EC1}, //8282 #CJK UNIFIED IDEOGRAPH + {0xB3FD, 0x9664}, //8283 #CJK UNIFIED IDEOGRAPH + {0xB3FE, 0x695A}, //8284 #CJK UNIFIED IDEOGRAPH + {0xB440, 0x7884}, //8285 #CJK UNIFIED IDEOGRAPH + {0xB441, 0x7885}, //8286 #CJK UNIFIED IDEOGRAPH + {0xB442, 0x7886}, //8287 #CJK UNIFIED IDEOGRAPH + {0xB443, 0x7888}, //8288 #CJK UNIFIED IDEOGRAPH + {0xB444, 0x788A}, //8289 #CJK UNIFIED IDEOGRAPH + {0xB445, 0x788B}, //8290 #CJK UNIFIED IDEOGRAPH + {0xB446, 0x788F}, //8291 #CJK UNIFIED IDEOGRAPH + {0xB447, 0x7890}, //8292 #CJK UNIFIED IDEOGRAPH + {0xB448, 0x7892}, //8293 #CJK UNIFIED IDEOGRAPH + {0xB449, 0x7894}, //8294 #CJK UNIFIED IDEOGRAPH + {0xB44A, 0x7895}, //8295 #CJK UNIFIED IDEOGRAPH + {0xB44B, 0x7896}, //8296 #CJK UNIFIED IDEOGRAPH + {0xB44C, 0x7899}, //8297 #CJK UNIFIED IDEOGRAPH + {0xB44D, 0x789D}, //8298 #CJK UNIFIED IDEOGRAPH + {0xB44E, 0x789E}, //8299 #CJK UNIFIED IDEOGRAPH + {0xB44F, 0x78A0}, //8300 #CJK UNIFIED IDEOGRAPH + {0xB450, 0x78A2}, //8301 #CJK UNIFIED IDEOGRAPH + {0xB451, 0x78A4}, //8302 #CJK UNIFIED IDEOGRAPH + {0xB452, 0x78A6}, //8303 #CJK UNIFIED IDEOGRAPH + {0xB453, 0x78A8}, //8304 #CJK UNIFIED IDEOGRAPH + {0xB454, 0x78A9}, //8305 #CJK UNIFIED IDEOGRAPH + {0xB455, 0x78AA}, //8306 #CJK UNIFIED IDEOGRAPH + {0xB456, 0x78AB}, //8307 #CJK UNIFIED IDEOGRAPH + {0xB457, 0x78AC}, //8308 #CJK UNIFIED IDEOGRAPH + {0xB458, 0x78AD}, //8309 #CJK UNIFIED IDEOGRAPH + {0xB459, 0x78AE}, //8310 #CJK UNIFIED IDEOGRAPH + {0xB45A, 0x78AF}, //8311 #CJK UNIFIED IDEOGRAPH + {0xB45B, 0x78B5}, //8312 #CJK UNIFIED IDEOGRAPH + {0xB45C, 0x78B6}, //8313 #CJK UNIFIED IDEOGRAPH + {0xB45D, 0x78B7}, //8314 #CJK UNIFIED IDEOGRAPH + {0xB45E, 0x78B8}, //8315 #CJK UNIFIED IDEOGRAPH + {0xB45F, 0x78BA}, //8316 #CJK UNIFIED IDEOGRAPH + {0xB460, 0x78BB}, //8317 #CJK UNIFIED IDEOGRAPH + {0xB461, 0x78BC}, //8318 #CJK UNIFIED IDEOGRAPH + {0xB462, 0x78BD}, //8319 #CJK UNIFIED IDEOGRAPH + {0xB463, 0x78BF}, //8320 #CJK UNIFIED IDEOGRAPH + {0xB464, 0x78C0}, //8321 #CJK UNIFIED IDEOGRAPH + {0xB465, 0x78C2}, //8322 #CJK UNIFIED IDEOGRAPH + {0xB466, 0x78C3}, //8323 #CJK UNIFIED IDEOGRAPH + {0xB467, 0x78C4}, //8324 #CJK UNIFIED IDEOGRAPH + {0xB468, 0x78C6}, //8325 #CJK UNIFIED IDEOGRAPH + {0xB469, 0x78C7}, //8326 #CJK UNIFIED IDEOGRAPH + {0xB46A, 0x78C8}, //8327 #CJK UNIFIED IDEOGRAPH + {0xB46B, 0x78CC}, //8328 #CJK UNIFIED IDEOGRAPH + {0xB46C, 0x78CD}, //8329 #CJK UNIFIED IDEOGRAPH + {0xB46D, 0x78CE}, //8330 #CJK UNIFIED IDEOGRAPH + {0xB46E, 0x78CF}, //8331 #CJK UNIFIED IDEOGRAPH + {0xB46F, 0x78D1}, //8332 #CJK UNIFIED IDEOGRAPH + {0xB470, 0x78D2}, //8333 #CJK UNIFIED IDEOGRAPH + {0xB471, 0x78D3}, //8334 #CJK UNIFIED IDEOGRAPH + {0xB472, 0x78D6}, //8335 #CJK UNIFIED IDEOGRAPH + {0xB473, 0x78D7}, //8336 #CJK UNIFIED IDEOGRAPH + {0xB474, 0x78D8}, //8337 #CJK UNIFIED IDEOGRAPH + {0xB475, 0x78DA}, //8338 #CJK UNIFIED IDEOGRAPH + {0xB476, 0x78DB}, //8339 #CJK UNIFIED IDEOGRAPH + {0xB477, 0x78DC}, //8340 #CJK UNIFIED IDEOGRAPH + {0xB478, 0x78DD}, //8341 #CJK UNIFIED IDEOGRAPH + {0xB479, 0x78DE}, //8342 #CJK UNIFIED IDEOGRAPH + {0xB47A, 0x78DF}, //8343 #CJK UNIFIED IDEOGRAPH + {0xB47B, 0x78E0}, //8344 #CJK UNIFIED IDEOGRAPH + {0xB47C, 0x78E1}, //8345 #CJK UNIFIED IDEOGRAPH + {0xB47D, 0x78E2}, //8346 #CJK UNIFIED IDEOGRAPH + {0xB47E, 0x78E3}, //8347 #CJK UNIFIED IDEOGRAPH + {0xB480, 0x78E4}, //8348 #CJK UNIFIED IDEOGRAPH + {0xB481, 0x78E5}, //8349 #CJK UNIFIED IDEOGRAPH + {0xB482, 0x78E6}, //8350 #CJK UNIFIED IDEOGRAPH + {0xB483, 0x78E7}, //8351 #CJK UNIFIED IDEOGRAPH + {0xB484, 0x78E9}, //8352 #CJK UNIFIED IDEOGRAPH + {0xB485, 0x78EA}, //8353 #CJK UNIFIED IDEOGRAPH + {0xB486, 0x78EB}, //8354 #CJK UNIFIED IDEOGRAPH + {0xB487, 0x78ED}, //8355 #CJK UNIFIED IDEOGRAPH + {0xB488, 0x78EE}, //8356 #CJK UNIFIED IDEOGRAPH + {0xB489, 0x78EF}, //8357 #CJK UNIFIED IDEOGRAPH + {0xB48A, 0x78F0}, //8358 #CJK UNIFIED IDEOGRAPH + {0xB48B, 0x78F1}, //8359 #CJK UNIFIED IDEOGRAPH + {0xB48C, 0x78F3}, //8360 #CJK UNIFIED IDEOGRAPH + {0xB48D, 0x78F5}, //8361 #CJK UNIFIED IDEOGRAPH + {0xB48E, 0x78F6}, //8362 #CJK UNIFIED IDEOGRAPH + {0xB48F, 0x78F8}, //8363 #CJK UNIFIED IDEOGRAPH + {0xB490, 0x78F9}, //8364 #CJK UNIFIED IDEOGRAPH + {0xB491, 0x78FB}, //8365 #CJK UNIFIED IDEOGRAPH + {0xB492, 0x78FC}, //8366 #CJK UNIFIED IDEOGRAPH + {0xB493, 0x78FD}, //8367 #CJK UNIFIED IDEOGRAPH + {0xB494, 0x78FE}, //8368 #CJK UNIFIED IDEOGRAPH + {0xB495, 0x78FF}, //8369 #CJK UNIFIED IDEOGRAPH + {0xB496, 0x7900}, //8370 #CJK UNIFIED IDEOGRAPH + {0xB497, 0x7902}, //8371 #CJK UNIFIED IDEOGRAPH + {0xB498, 0x7903}, //8372 #CJK UNIFIED IDEOGRAPH + {0xB499, 0x7904}, //8373 #CJK UNIFIED IDEOGRAPH + {0xB49A, 0x7906}, //8374 #CJK UNIFIED IDEOGRAPH + {0xB49B, 0x7907}, //8375 #CJK UNIFIED IDEOGRAPH + {0xB49C, 0x7908}, //8376 #CJK UNIFIED IDEOGRAPH + {0xB49D, 0x7909}, //8377 #CJK UNIFIED IDEOGRAPH + {0xB49E, 0x790A}, //8378 #CJK UNIFIED IDEOGRAPH + {0xB49F, 0x790B}, //8379 #CJK UNIFIED IDEOGRAPH + {0xB4A0, 0x790C}, //8380 #CJK UNIFIED IDEOGRAPH + {0xB4A1, 0x7840}, //8381 #CJK UNIFIED IDEOGRAPH + {0xB4A2, 0x50A8}, //8382 #CJK UNIFIED IDEOGRAPH + {0xB4A3, 0x77D7}, //8383 #CJK UNIFIED IDEOGRAPH + {0xB4A4, 0x6410}, //8384 #CJK UNIFIED IDEOGRAPH + {0xB4A5, 0x89E6}, //8385 #CJK UNIFIED IDEOGRAPH + {0xB4A6, 0x5904}, //8386 #CJK UNIFIED IDEOGRAPH + {0xB4A7, 0x63E3}, //8387 #CJK UNIFIED IDEOGRAPH + {0xB4A8, 0x5DDD}, //8388 #CJK UNIFIED IDEOGRAPH + {0xB4A9, 0x7A7F}, //8389 #CJK UNIFIED IDEOGRAPH + {0xB4AA, 0x693D}, //8390 #CJK UNIFIED IDEOGRAPH + {0xB4AB, 0x4F20}, //8391 #CJK UNIFIED IDEOGRAPH + {0xB4AC, 0x8239}, //8392 #CJK UNIFIED IDEOGRAPH + {0xB4AD, 0x5598}, //8393 #CJK UNIFIED IDEOGRAPH + {0xB4AE, 0x4E32}, //8394 #CJK UNIFIED IDEOGRAPH + {0xB4AF, 0x75AE}, //8395 #CJK UNIFIED IDEOGRAPH + {0xB4B0, 0x7A97}, //8396 #CJK UNIFIED IDEOGRAPH + {0xB4B1, 0x5E62}, //8397 #CJK UNIFIED IDEOGRAPH + {0xB4B2, 0x5E8A}, //8398 #CJK UNIFIED IDEOGRAPH + {0xB4B3, 0x95EF}, //8399 #CJK UNIFIED IDEOGRAPH + {0xB4B4, 0x521B}, //8400 #CJK UNIFIED IDEOGRAPH + {0xB4B5, 0x5439}, //8401 #CJK UNIFIED IDEOGRAPH + {0xB4B6, 0x708A}, //8402 #CJK UNIFIED IDEOGRAPH + {0xB4B7, 0x6376}, //8403 #CJK UNIFIED IDEOGRAPH + {0xB4B8, 0x9524}, //8404 #CJK UNIFIED IDEOGRAPH + {0xB4B9, 0x5782}, //8405 #CJK UNIFIED IDEOGRAPH + {0xB4BA, 0x6625}, //8406 #CJK UNIFIED IDEOGRAPH + {0xB4BB, 0x693F}, //8407 #CJK UNIFIED IDEOGRAPH + {0xB4BC, 0x9187}, //8408 #CJK UNIFIED IDEOGRAPH + {0xB4BD, 0x5507}, //8409 #CJK UNIFIED IDEOGRAPH + {0xB4BE, 0x6DF3}, //8410 #CJK UNIFIED IDEOGRAPH + {0xB4BF, 0x7EAF}, //8411 #CJK UNIFIED IDEOGRAPH + {0xB4C0, 0x8822}, //8412 #CJK UNIFIED IDEOGRAPH + {0xB4C1, 0x6233}, //8413 #CJK UNIFIED IDEOGRAPH + {0xB4C2, 0x7EF0}, //8414 #CJK UNIFIED IDEOGRAPH + {0xB4C3, 0x75B5}, //8415 #CJK UNIFIED IDEOGRAPH + {0xB4C4, 0x8328}, //8416 #CJK UNIFIED IDEOGRAPH + {0xB4C5, 0x78C1}, //8417 #CJK UNIFIED IDEOGRAPH + {0xB4C6, 0x96CC}, //8418 #CJK UNIFIED IDEOGRAPH + {0xB4C7, 0x8F9E}, //8419 #CJK UNIFIED IDEOGRAPH + {0xB4C8, 0x6148}, //8420 #CJK UNIFIED IDEOGRAPH + {0xB4C9, 0x74F7}, //8421 #CJK UNIFIED IDEOGRAPH + {0xB4CA, 0x8BCD}, //8422 #CJK UNIFIED IDEOGRAPH + {0xB4CB, 0x6B64}, //8423 #CJK UNIFIED IDEOGRAPH + {0xB4CC, 0x523A}, //8424 #CJK UNIFIED IDEOGRAPH + {0xB4CD, 0x8D50}, //8425 #CJK UNIFIED IDEOGRAPH + {0xB4CE, 0x6B21}, //8426 #CJK UNIFIED IDEOGRAPH + {0xB4CF, 0x806A}, //8427 #CJK UNIFIED IDEOGRAPH + {0xB4D0, 0x8471}, //8428 #CJK UNIFIED IDEOGRAPH + {0xB4D1, 0x56F1}, //8429 #CJK UNIFIED IDEOGRAPH + {0xB4D2, 0x5306}, //8430 #CJK UNIFIED IDEOGRAPH + {0xB4D3, 0x4ECE}, //8431 #CJK UNIFIED IDEOGRAPH + {0xB4D4, 0x4E1B}, //8432 #CJK UNIFIED IDEOGRAPH + {0xB4D5, 0x51D1}, //8433 #CJK UNIFIED IDEOGRAPH + {0xB4D6, 0x7C97}, //8434 #CJK UNIFIED IDEOGRAPH + {0xB4D7, 0x918B}, //8435 #CJK UNIFIED IDEOGRAPH + {0xB4D8, 0x7C07}, //8436 #CJK UNIFIED IDEOGRAPH + {0xB4D9, 0x4FC3}, //8437 #CJK UNIFIED IDEOGRAPH + {0xB4DA, 0x8E7F}, //8438 #CJK UNIFIED IDEOGRAPH + {0xB4DB, 0x7BE1}, //8439 #CJK UNIFIED IDEOGRAPH + {0xB4DC, 0x7A9C}, //8440 #CJK UNIFIED IDEOGRAPH + {0xB4DD, 0x6467}, //8441 #CJK UNIFIED IDEOGRAPH + {0xB4DE, 0x5D14}, //8442 #CJK UNIFIED IDEOGRAPH + {0xB4DF, 0x50AC}, //8443 #CJK UNIFIED IDEOGRAPH + {0xB4E0, 0x8106}, //8444 #CJK UNIFIED IDEOGRAPH + {0xB4E1, 0x7601}, //8445 #CJK UNIFIED IDEOGRAPH + {0xB4E2, 0x7CB9}, //8446 #CJK UNIFIED IDEOGRAPH + {0xB4E3, 0x6DEC}, //8447 #CJK UNIFIED IDEOGRAPH + {0xB4E4, 0x7FE0}, //8448 #CJK UNIFIED IDEOGRAPH + {0xB4E5, 0x6751}, //8449 #CJK UNIFIED IDEOGRAPH + {0xB4E6, 0x5B58}, //8450 #CJK UNIFIED IDEOGRAPH + {0xB4E7, 0x5BF8}, //8451 #CJK UNIFIED IDEOGRAPH + {0xB4E8, 0x78CB}, //8452 #CJK UNIFIED IDEOGRAPH + {0xB4E9, 0x64AE}, //8453 #CJK UNIFIED IDEOGRAPH + {0xB4EA, 0x6413}, //8454 #CJK UNIFIED IDEOGRAPH + {0xB4EB, 0x63AA}, //8455 #CJK UNIFIED IDEOGRAPH + {0xB4EC, 0x632B}, //8456 #CJK UNIFIED IDEOGRAPH + {0xB4ED, 0x9519}, //8457 #CJK UNIFIED IDEOGRAPH + {0xB4EE, 0x642D}, //8458 #CJK UNIFIED IDEOGRAPH + {0xB4EF, 0x8FBE}, //8459 #CJK UNIFIED IDEOGRAPH + {0xB4F0, 0x7B54}, //8460 #CJK UNIFIED IDEOGRAPH + {0xB4F1, 0x7629}, //8461 #CJK UNIFIED IDEOGRAPH + {0xB4F2, 0x6253}, //8462 #CJK UNIFIED IDEOGRAPH + {0xB4F3, 0x5927}, //8463 #CJK UNIFIED IDEOGRAPH + {0xB4F4, 0x5446}, //8464 #CJK UNIFIED IDEOGRAPH + {0xB4F5, 0x6B79}, //8465 #CJK UNIFIED IDEOGRAPH + {0xB4F6, 0x50A3}, //8466 #CJK UNIFIED IDEOGRAPH + {0xB4F7, 0x6234}, //8467 #CJK UNIFIED IDEOGRAPH + {0xB4F8, 0x5E26}, //8468 #CJK UNIFIED IDEOGRAPH + {0xB4F9, 0x6B86}, //8469 #CJK UNIFIED IDEOGRAPH + {0xB4FA, 0x4EE3}, //8470 #CJK UNIFIED IDEOGRAPH + {0xB4FB, 0x8D37}, //8471 #CJK UNIFIED IDEOGRAPH + {0xB4FC, 0x888B}, //8472 #CJK UNIFIED IDEOGRAPH + {0xB4FD, 0x5F85}, //8473 #CJK UNIFIED IDEOGRAPH + {0xB4FE, 0x902E}, //8474 #CJK UNIFIED IDEOGRAPH + {0xB540, 0x790D}, //8475 #CJK UNIFIED IDEOGRAPH + {0xB541, 0x790E}, //8476 #CJK UNIFIED IDEOGRAPH + {0xB542, 0x790F}, //8477 #CJK UNIFIED IDEOGRAPH + {0xB543, 0x7910}, //8478 #CJK UNIFIED IDEOGRAPH + {0xB544, 0x7911}, //8479 #CJK UNIFIED IDEOGRAPH + {0xB545, 0x7912}, //8480 #CJK UNIFIED IDEOGRAPH + {0xB546, 0x7914}, //8481 #CJK UNIFIED IDEOGRAPH + {0xB547, 0x7915}, //8482 #CJK UNIFIED IDEOGRAPH + {0xB548, 0x7916}, //8483 #CJK UNIFIED IDEOGRAPH + {0xB549, 0x7917}, //8484 #CJK UNIFIED IDEOGRAPH + {0xB54A, 0x7918}, //8485 #CJK UNIFIED IDEOGRAPH + {0xB54B, 0x7919}, //8486 #CJK UNIFIED IDEOGRAPH + {0xB54C, 0x791A}, //8487 #CJK UNIFIED IDEOGRAPH + {0xB54D, 0x791B}, //8488 #CJK UNIFIED IDEOGRAPH + {0xB54E, 0x791C}, //8489 #CJK UNIFIED IDEOGRAPH + {0xB54F, 0x791D}, //8490 #CJK UNIFIED IDEOGRAPH + {0xB550, 0x791F}, //8491 #CJK UNIFIED IDEOGRAPH + {0xB551, 0x7920}, //8492 #CJK UNIFIED IDEOGRAPH + {0xB552, 0x7921}, //8493 #CJK UNIFIED IDEOGRAPH + {0xB553, 0x7922}, //8494 #CJK UNIFIED IDEOGRAPH + {0xB554, 0x7923}, //8495 #CJK UNIFIED IDEOGRAPH + {0xB555, 0x7925}, //8496 #CJK UNIFIED IDEOGRAPH + {0xB556, 0x7926}, //8497 #CJK UNIFIED IDEOGRAPH + {0xB557, 0x7927}, //8498 #CJK UNIFIED IDEOGRAPH + {0xB558, 0x7928}, //8499 #CJK UNIFIED IDEOGRAPH + {0xB559, 0x7929}, //8500 #CJK UNIFIED IDEOGRAPH + {0xB55A, 0x792A}, //8501 #CJK UNIFIED IDEOGRAPH + {0xB55B, 0x792B}, //8502 #CJK UNIFIED IDEOGRAPH + {0xB55C, 0x792C}, //8503 #CJK UNIFIED IDEOGRAPH + {0xB55D, 0x792D}, //8504 #CJK UNIFIED IDEOGRAPH + {0xB55E, 0x792E}, //8505 #CJK UNIFIED IDEOGRAPH + {0xB55F, 0x792F}, //8506 #CJK UNIFIED IDEOGRAPH + {0xB560, 0x7930}, //8507 #CJK UNIFIED IDEOGRAPH + {0xB561, 0x7931}, //8508 #CJK UNIFIED IDEOGRAPH + {0xB562, 0x7932}, //8509 #CJK UNIFIED IDEOGRAPH + {0xB563, 0x7933}, //8510 #CJK UNIFIED IDEOGRAPH + {0xB564, 0x7935}, //8511 #CJK UNIFIED IDEOGRAPH + {0xB565, 0x7936}, //8512 #CJK UNIFIED IDEOGRAPH + {0xB566, 0x7937}, //8513 #CJK UNIFIED IDEOGRAPH + {0xB567, 0x7938}, //8514 #CJK UNIFIED IDEOGRAPH + {0xB568, 0x7939}, //8515 #CJK UNIFIED IDEOGRAPH + {0xB569, 0x793D}, //8516 #CJK UNIFIED IDEOGRAPH + {0xB56A, 0x793F}, //8517 #CJK UNIFIED IDEOGRAPH + {0xB56B, 0x7942}, //8518 #CJK UNIFIED IDEOGRAPH + {0xB56C, 0x7943}, //8519 #CJK UNIFIED IDEOGRAPH + {0xB56D, 0x7944}, //8520 #CJK UNIFIED IDEOGRAPH + {0xB56E, 0x7945}, //8521 #CJK UNIFIED IDEOGRAPH + {0xB56F, 0x7947}, //8522 #CJK UNIFIED IDEOGRAPH + {0xB570, 0x794A}, //8523 #CJK UNIFIED IDEOGRAPH + {0xB571, 0x794B}, //8524 #CJK UNIFIED IDEOGRAPH + {0xB572, 0x794C}, //8525 #CJK UNIFIED IDEOGRAPH + {0xB573, 0x794D}, //8526 #CJK UNIFIED IDEOGRAPH + {0xB574, 0x794E}, //8527 #CJK UNIFIED IDEOGRAPH + {0xB575, 0x794F}, //8528 #CJK UNIFIED IDEOGRAPH + {0xB576, 0x7950}, //8529 #CJK UNIFIED IDEOGRAPH + {0xB577, 0x7951}, //8530 #CJK UNIFIED IDEOGRAPH + {0xB578, 0x7952}, //8531 #CJK UNIFIED IDEOGRAPH + {0xB579, 0x7954}, //8532 #CJK UNIFIED IDEOGRAPH + {0xB57A, 0x7955}, //8533 #CJK UNIFIED IDEOGRAPH + {0xB57B, 0x7958}, //8534 #CJK UNIFIED IDEOGRAPH + {0xB57C, 0x7959}, //8535 #CJK UNIFIED IDEOGRAPH + {0xB57D, 0x7961}, //8536 #CJK UNIFIED IDEOGRAPH + {0xB57E, 0x7963}, //8537 #CJK UNIFIED IDEOGRAPH + {0xB580, 0x7964}, //8538 #CJK UNIFIED IDEOGRAPH + {0xB581, 0x7966}, //8539 #CJK UNIFIED IDEOGRAPH + {0xB582, 0x7969}, //8540 #CJK UNIFIED IDEOGRAPH + {0xB583, 0x796A}, //8541 #CJK UNIFIED IDEOGRAPH + {0xB584, 0x796B}, //8542 #CJK UNIFIED IDEOGRAPH + {0xB585, 0x796C}, //8543 #CJK UNIFIED IDEOGRAPH + {0xB586, 0x796E}, //8544 #CJK UNIFIED IDEOGRAPH + {0xB587, 0x7970}, //8545 #CJK UNIFIED IDEOGRAPH + {0xB588, 0x7971}, //8546 #CJK UNIFIED IDEOGRAPH + {0xB589, 0x7972}, //8547 #CJK UNIFIED IDEOGRAPH + {0xB58A, 0x7973}, //8548 #CJK UNIFIED IDEOGRAPH + {0xB58B, 0x7974}, //8549 #CJK UNIFIED IDEOGRAPH + {0xB58C, 0x7975}, //8550 #CJK UNIFIED IDEOGRAPH + {0xB58D, 0x7976}, //8551 #CJK UNIFIED IDEOGRAPH + {0xB58E, 0x7979}, //8552 #CJK UNIFIED IDEOGRAPH + {0xB58F, 0x797B}, //8553 #CJK UNIFIED IDEOGRAPH + {0xB590, 0x797C}, //8554 #CJK UNIFIED IDEOGRAPH + {0xB591, 0x797D}, //8555 #CJK UNIFIED IDEOGRAPH + {0xB592, 0x797E}, //8556 #CJK UNIFIED IDEOGRAPH + {0xB593, 0x797F}, //8557 #CJK UNIFIED IDEOGRAPH + {0xB594, 0x7982}, //8558 #CJK UNIFIED IDEOGRAPH + {0xB595, 0x7983}, //8559 #CJK UNIFIED IDEOGRAPH + {0xB596, 0x7986}, //8560 #CJK UNIFIED IDEOGRAPH + {0xB597, 0x7987}, //8561 #CJK UNIFIED IDEOGRAPH + {0xB598, 0x7988}, //8562 #CJK UNIFIED IDEOGRAPH + {0xB599, 0x7989}, //8563 #CJK UNIFIED IDEOGRAPH + {0xB59A, 0x798B}, //8564 #CJK UNIFIED IDEOGRAPH + {0xB59B, 0x798C}, //8565 #CJK UNIFIED IDEOGRAPH + {0xB59C, 0x798D}, //8566 #CJK UNIFIED IDEOGRAPH + {0xB59D, 0x798E}, //8567 #CJK UNIFIED IDEOGRAPH + {0xB59E, 0x7990}, //8568 #CJK UNIFIED IDEOGRAPH + {0xB59F, 0x7991}, //8569 #CJK UNIFIED IDEOGRAPH + {0xB5A0, 0x7992}, //8570 #CJK UNIFIED IDEOGRAPH + {0xB5A1, 0x6020}, //8571 #CJK UNIFIED IDEOGRAPH + {0xB5A2, 0x803D}, //8572 #CJK UNIFIED IDEOGRAPH + {0xB5A3, 0x62C5}, //8573 #CJK UNIFIED IDEOGRAPH + {0xB5A4, 0x4E39}, //8574 #CJK UNIFIED IDEOGRAPH + {0xB5A5, 0x5355}, //8575 #CJK UNIFIED IDEOGRAPH + {0xB5A6, 0x90F8}, //8576 #CJK UNIFIED IDEOGRAPH + {0xB5A7, 0x63B8}, //8577 #CJK UNIFIED IDEOGRAPH + {0xB5A8, 0x80C6}, //8578 #CJK UNIFIED IDEOGRAPH + {0xB5A9, 0x65E6}, //8579 #CJK UNIFIED IDEOGRAPH + {0xB5AA, 0x6C2E}, //8580 #CJK UNIFIED IDEOGRAPH + {0xB5AB, 0x4F46}, //8581 #CJK UNIFIED IDEOGRAPH + {0xB5AC, 0x60EE}, //8582 #CJK UNIFIED IDEOGRAPH + {0xB5AD, 0x6DE1}, //8583 #CJK UNIFIED IDEOGRAPH + {0xB5AE, 0x8BDE}, //8584 #CJK UNIFIED IDEOGRAPH + {0xB5AF, 0x5F39}, //8585 #CJK UNIFIED IDEOGRAPH + {0xB5B0, 0x86CB}, //8586 #CJK UNIFIED IDEOGRAPH + {0xB5B1, 0x5F53}, //8587 #CJK UNIFIED IDEOGRAPH + {0xB5B2, 0x6321}, //8588 #CJK UNIFIED IDEOGRAPH + {0xB5B3, 0x515A}, //8589 #CJK UNIFIED IDEOGRAPH + {0xB5B4, 0x8361}, //8590 #CJK UNIFIED IDEOGRAPH + {0xB5B5, 0x6863}, //8591 #CJK UNIFIED IDEOGRAPH + {0xB5B6, 0x5200}, //8592 #CJK UNIFIED IDEOGRAPH + {0xB5B7, 0x6363}, //8593 #CJK UNIFIED IDEOGRAPH + {0xB5B8, 0x8E48}, //8594 #CJK UNIFIED IDEOGRAPH + {0xB5B9, 0x5012}, //8595 #CJK UNIFIED IDEOGRAPH + {0xB5BA, 0x5C9B}, //8596 #CJK UNIFIED IDEOGRAPH + {0xB5BB, 0x7977}, //8597 #CJK UNIFIED IDEOGRAPH + {0xB5BC, 0x5BFC}, //8598 #CJK UNIFIED IDEOGRAPH + {0xB5BD, 0x5230}, //8599 #CJK UNIFIED IDEOGRAPH + {0xB5BE, 0x7A3B}, //8600 #CJK UNIFIED IDEOGRAPH + {0xB5BF, 0x60BC}, //8601 #CJK UNIFIED IDEOGRAPH + {0xB5C0, 0x9053}, //8602 #CJK UNIFIED IDEOGRAPH + {0xB5C1, 0x76D7}, //8603 #CJK UNIFIED IDEOGRAPH + {0xB5C2, 0x5FB7}, //8604 #CJK UNIFIED IDEOGRAPH + {0xB5C3, 0x5F97}, //8605 #CJK UNIFIED IDEOGRAPH + {0xB5C4, 0x7684}, //8606 #CJK UNIFIED IDEOGRAPH + {0xB5C5, 0x8E6C}, //8607 #CJK UNIFIED IDEOGRAPH + {0xB5C6, 0x706F}, //8608 #CJK UNIFIED IDEOGRAPH + {0xB5C7, 0x767B}, //8609 #CJK UNIFIED IDEOGRAPH + {0xB5C8, 0x7B49}, //8610 #CJK UNIFIED IDEOGRAPH + {0xB5C9, 0x77AA}, //8611 #CJK UNIFIED IDEOGRAPH + {0xB5CA, 0x51F3}, //8612 #CJK UNIFIED IDEOGRAPH + {0xB5CB, 0x9093}, //8613 #CJK UNIFIED IDEOGRAPH + {0xB5CC, 0x5824}, //8614 #CJK UNIFIED IDEOGRAPH + {0xB5CD, 0x4F4E}, //8615 #CJK UNIFIED IDEOGRAPH + {0xB5CE, 0x6EF4}, //8616 #CJK UNIFIED IDEOGRAPH + {0xB5CF, 0x8FEA}, //8617 #CJK UNIFIED IDEOGRAPH + {0xB5D0, 0x654C}, //8618 #CJK UNIFIED IDEOGRAPH + {0xB5D1, 0x7B1B}, //8619 #CJK UNIFIED IDEOGRAPH + {0xB5D2, 0x72C4}, //8620 #CJK UNIFIED IDEOGRAPH + {0xB5D3, 0x6DA4}, //8621 #CJK UNIFIED IDEOGRAPH + {0xB5D4, 0x7FDF}, //8622 #CJK UNIFIED IDEOGRAPH + {0xB5D5, 0x5AE1}, //8623 #CJK UNIFIED IDEOGRAPH + {0xB5D6, 0x62B5}, //8624 #CJK UNIFIED IDEOGRAPH + {0xB5D7, 0x5E95}, //8625 #CJK UNIFIED IDEOGRAPH + {0xB5D8, 0x5730}, //8626 #CJK UNIFIED IDEOGRAPH + {0xB5D9, 0x8482}, //8627 #CJK UNIFIED IDEOGRAPH + {0xB5DA, 0x7B2C}, //8628 #CJK UNIFIED IDEOGRAPH + {0xB5DB, 0x5E1D}, //8629 #CJK UNIFIED IDEOGRAPH + {0xB5DC, 0x5F1F}, //8630 #CJK UNIFIED IDEOGRAPH + {0xB5DD, 0x9012}, //8631 #CJK UNIFIED IDEOGRAPH + {0xB5DE, 0x7F14}, //8632 #CJK UNIFIED IDEOGRAPH + {0xB5DF, 0x98A0}, //8633 #CJK UNIFIED IDEOGRAPH + {0xB5E0, 0x6382}, //8634 #CJK UNIFIED IDEOGRAPH + {0xB5E1, 0x6EC7}, //8635 #CJK UNIFIED IDEOGRAPH + {0xB5E2, 0x7898}, //8636 #CJK UNIFIED IDEOGRAPH + {0xB5E3, 0x70B9}, //8637 #CJK UNIFIED IDEOGRAPH + {0xB5E4, 0x5178}, //8638 #CJK UNIFIED IDEOGRAPH + {0xB5E5, 0x975B}, //8639 #CJK UNIFIED IDEOGRAPH + {0xB5E6, 0x57AB}, //8640 #CJK UNIFIED IDEOGRAPH + {0xB5E7, 0x7535}, //8641 #CJK UNIFIED IDEOGRAPH + {0xB5E8, 0x4F43}, //8642 #CJK UNIFIED IDEOGRAPH + {0xB5E9, 0x7538}, //8643 #CJK UNIFIED IDEOGRAPH + {0xB5EA, 0x5E97}, //8644 #CJK UNIFIED IDEOGRAPH + {0xB5EB, 0x60E6}, //8645 #CJK UNIFIED IDEOGRAPH + {0xB5EC, 0x5960}, //8646 #CJK UNIFIED IDEOGRAPH + {0xB5ED, 0x6DC0}, //8647 #CJK UNIFIED IDEOGRAPH + {0xB5EE, 0x6BBF}, //8648 #CJK UNIFIED IDEOGRAPH + {0xB5EF, 0x7889}, //8649 #CJK UNIFIED IDEOGRAPH + {0xB5F0, 0x53FC}, //8650 #CJK UNIFIED IDEOGRAPH + {0xB5F1, 0x96D5}, //8651 #CJK UNIFIED IDEOGRAPH + {0xB5F2, 0x51CB}, //8652 #CJK UNIFIED IDEOGRAPH + {0xB5F3, 0x5201}, //8653 #CJK UNIFIED IDEOGRAPH + {0xB5F4, 0x6389}, //8654 #CJK UNIFIED IDEOGRAPH + {0xB5F5, 0x540A}, //8655 #CJK UNIFIED IDEOGRAPH + {0xB5F6, 0x9493}, //8656 #CJK UNIFIED IDEOGRAPH + {0xB5F7, 0x8C03}, //8657 #CJK UNIFIED IDEOGRAPH + {0xB5F8, 0x8DCC}, //8658 #CJK UNIFIED IDEOGRAPH + {0xB5F9, 0x7239}, //8659 #CJK UNIFIED IDEOGRAPH + {0xB5FA, 0x789F}, //8660 #CJK UNIFIED IDEOGRAPH + {0xB5FB, 0x8776}, //8661 #CJK UNIFIED IDEOGRAPH + {0xB5FC, 0x8FED}, //8662 #CJK UNIFIED IDEOGRAPH + {0xB5FD, 0x8C0D}, //8663 #CJK UNIFIED IDEOGRAPH + {0xB5FE, 0x53E0}, //8664 #CJK UNIFIED IDEOGRAPH + {0xB640, 0x7993}, //8665 #CJK UNIFIED IDEOGRAPH + {0xB641, 0x7994}, //8666 #CJK UNIFIED IDEOGRAPH + {0xB642, 0x7995}, //8667 #CJK UNIFIED IDEOGRAPH + {0xB643, 0x7996}, //8668 #CJK UNIFIED IDEOGRAPH + {0xB644, 0x7997}, //8669 #CJK UNIFIED IDEOGRAPH + {0xB645, 0x7998}, //8670 #CJK UNIFIED IDEOGRAPH + {0xB646, 0x7999}, //8671 #CJK UNIFIED IDEOGRAPH + {0xB647, 0x799B}, //8672 #CJK UNIFIED IDEOGRAPH + {0xB648, 0x799C}, //8673 #CJK UNIFIED IDEOGRAPH + {0xB649, 0x799D}, //8674 #CJK UNIFIED IDEOGRAPH + {0xB64A, 0x799E}, //8675 #CJK UNIFIED IDEOGRAPH + {0xB64B, 0x799F}, //8676 #CJK UNIFIED IDEOGRAPH + {0xB64C, 0x79A0}, //8677 #CJK UNIFIED IDEOGRAPH + {0xB64D, 0x79A1}, //8678 #CJK UNIFIED IDEOGRAPH + {0xB64E, 0x79A2}, //8679 #CJK UNIFIED IDEOGRAPH + {0xB64F, 0x79A3}, //8680 #CJK UNIFIED IDEOGRAPH + {0xB650, 0x79A4}, //8681 #CJK UNIFIED IDEOGRAPH + {0xB651, 0x79A5}, //8682 #CJK UNIFIED IDEOGRAPH + {0xB652, 0x79A6}, //8683 #CJK UNIFIED IDEOGRAPH + {0xB653, 0x79A8}, //8684 #CJK UNIFIED IDEOGRAPH + {0xB654, 0x79A9}, //8685 #CJK UNIFIED IDEOGRAPH + {0xB655, 0x79AA}, //8686 #CJK UNIFIED IDEOGRAPH + {0xB656, 0x79AB}, //8687 #CJK UNIFIED IDEOGRAPH + {0xB657, 0x79AC}, //8688 #CJK UNIFIED IDEOGRAPH + {0xB658, 0x79AD}, //8689 #CJK UNIFIED IDEOGRAPH + {0xB659, 0x79AE}, //8690 #CJK UNIFIED IDEOGRAPH + {0xB65A, 0x79AF}, //8691 #CJK UNIFIED IDEOGRAPH + {0xB65B, 0x79B0}, //8692 #CJK UNIFIED IDEOGRAPH + {0xB65C, 0x79B1}, //8693 #CJK UNIFIED IDEOGRAPH + {0xB65D, 0x79B2}, //8694 #CJK UNIFIED IDEOGRAPH + {0xB65E, 0x79B4}, //8695 #CJK UNIFIED IDEOGRAPH + {0xB65F, 0x79B5}, //8696 #CJK UNIFIED IDEOGRAPH + {0xB660, 0x79B6}, //8697 #CJK UNIFIED IDEOGRAPH + {0xB661, 0x79B7}, //8698 #CJK UNIFIED IDEOGRAPH + {0xB662, 0x79B8}, //8699 #CJK UNIFIED IDEOGRAPH + {0xB663, 0x79BC}, //8700 #CJK UNIFIED IDEOGRAPH + {0xB664, 0x79BF}, //8701 #CJK UNIFIED IDEOGRAPH + {0xB665, 0x79C2}, //8702 #CJK UNIFIED IDEOGRAPH + {0xB666, 0x79C4}, //8703 #CJK UNIFIED IDEOGRAPH + {0xB667, 0x79C5}, //8704 #CJK UNIFIED IDEOGRAPH + {0xB668, 0x79C7}, //8705 #CJK UNIFIED IDEOGRAPH + {0xB669, 0x79C8}, //8706 #CJK UNIFIED IDEOGRAPH + {0xB66A, 0x79CA}, //8707 #CJK UNIFIED IDEOGRAPH + {0xB66B, 0x79CC}, //8708 #CJK UNIFIED IDEOGRAPH + {0xB66C, 0x79CE}, //8709 #CJK UNIFIED IDEOGRAPH + {0xB66D, 0x79CF}, //8710 #CJK UNIFIED IDEOGRAPH + {0xB66E, 0x79D0}, //8711 #CJK UNIFIED IDEOGRAPH + {0xB66F, 0x79D3}, //8712 #CJK UNIFIED IDEOGRAPH + {0xB670, 0x79D4}, //8713 #CJK UNIFIED IDEOGRAPH + {0xB671, 0x79D6}, //8714 #CJK UNIFIED IDEOGRAPH + {0xB672, 0x79D7}, //8715 #CJK UNIFIED IDEOGRAPH + {0xB673, 0x79D9}, //8716 #CJK UNIFIED IDEOGRAPH + {0xB674, 0x79DA}, //8717 #CJK UNIFIED IDEOGRAPH + {0xB675, 0x79DB}, //8718 #CJK UNIFIED IDEOGRAPH + {0xB676, 0x79DC}, //8719 #CJK UNIFIED IDEOGRAPH + {0xB677, 0x79DD}, //8720 #CJK UNIFIED IDEOGRAPH + {0xB678, 0x79DE}, //8721 #CJK UNIFIED IDEOGRAPH + {0xB679, 0x79E0}, //8722 #CJK UNIFIED IDEOGRAPH + {0xB67A, 0x79E1}, //8723 #CJK UNIFIED IDEOGRAPH + {0xB67B, 0x79E2}, //8724 #CJK UNIFIED IDEOGRAPH + {0xB67C, 0x79E5}, //8725 #CJK UNIFIED IDEOGRAPH + {0xB67D, 0x79E8}, //8726 #CJK UNIFIED IDEOGRAPH + {0xB67E, 0x79EA}, //8727 #CJK UNIFIED IDEOGRAPH + {0xB680, 0x79EC}, //8728 #CJK UNIFIED IDEOGRAPH + {0xB681, 0x79EE}, //8729 #CJK UNIFIED IDEOGRAPH + {0xB682, 0x79F1}, //8730 #CJK UNIFIED IDEOGRAPH + {0xB683, 0x79F2}, //8731 #CJK UNIFIED IDEOGRAPH + {0xB684, 0x79F3}, //8732 #CJK UNIFIED IDEOGRAPH + {0xB685, 0x79F4}, //8733 #CJK UNIFIED IDEOGRAPH + {0xB686, 0x79F5}, //8734 #CJK UNIFIED IDEOGRAPH + {0xB687, 0x79F6}, //8735 #CJK UNIFIED IDEOGRAPH + {0xB688, 0x79F7}, //8736 #CJK UNIFIED IDEOGRAPH + {0xB689, 0x79F9}, //8737 #CJK UNIFIED IDEOGRAPH + {0xB68A, 0x79FA}, //8738 #CJK UNIFIED IDEOGRAPH + {0xB68B, 0x79FC}, //8739 #CJK UNIFIED IDEOGRAPH + {0xB68C, 0x79FE}, //8740 #CJK UNIFIED IDEOGRAPH + {0xB68D, 0x79FF}, //8741 #CJK UNIFIED IDEOGRAPH + {0xB68E, 0x7A01}, //8742 #CJK UNIFIED IDEOGRAPH + {0xB68F, 0x7A04}, //8743 #CJK UNIFIED IDEOGRAPH + {0xB690, 0x7A05}, //8744 #CJK UNIFIED IDEOGRAPH + {0xB691, 0x7A07}, //8745 #CJK UNIFIED IDEOGRAPH + {0xB692, 0x7A08}, //8746 #CJK UNIFIED IDEOGRAPH + {0xB693, 0x7A09}, //8747 #CJK UNIFIED IDEOGRAPH + {0xB694, 0x7A0A}, //8748 #CJK UNIFIED IDEOGRAPH + {0xB695, 0x7A0C}, //8749 #CJK UNIFIED IDEOGRAPH + {0xB696, 0x7A0F}, //8750 #CJK UNIFIED IDEOGRAPH + {0xB697, 0x7A10}, //8751 #CJK UNIFIED IDEOGRAPH + {0xB698, 0x7A11}, //8752 #CJK UNIFIED IDEOGRAPH + {0xB699, 0x7A12}, //8753 #CJK UNIFIED IDEOGRAPH + {0xB69A, 0x7A13}, //8754 #CJK UNIFIED IDEOGRAPH + {0xB69B, 0x7A15}, //8755 #CJK UNIFIED IDEOGRAPH + {0xB69C, 0x7A16}, //8756 #CJK UNIFIED IDEOGRAPH + {0xB69D, 0x7A18}, //8757 #CJK UNIFIED IDEOGRAPH + {0xB69E, 0x7A19}, //8758 #CJK UNIFIED IDEOGRAPH + {0xB69F, 0x7A1B}, //8759 #CJK UNIFIED IDEOGRAPH + {0xB6A0, 0x7A1C}, //8760 #CJK UNIFIED IDEOGRAPH + {0xB6A1, 0x4E01}, //8761 #CJK UNIFIED IDEOGRAPH + {0xB6A2, 0x76EF}, //8762 #CJK UNIFIED IDEOGRAPH + {0xB6A3, 0x53EE}, //8763 #CJK UNIFIED IDEOGRAPH + {0xB6A4, 0x9489}, //8764 #CJK UNIFIED IDEOGRAPH + {0xB6A5, 0x9876}, //8765 #CJK UNIFIED IDEOGRAPH + {0xB6A6, 0x9F0E}, //8766 #CJK UNIFIED IDEOGRAPH + {0xB6A7, 0x952D}, //8767 #CJK UNIFIED IDEOGRAPH + {0xB6A8, 0x5B9A}, //8768 #CJK UNIFIED IDEOGRAPH + {0xB6A9, 0x8BA2}, //8769 #CJK UNIFIED IDEOGRAPH + {0xB6AA, 0x4E22}, //8770 #CJK UNIFIED IDEOGRAPH + {0xB6AB, 0x4E1C}, //8771 #CJK UNIFIED IDEOGRAPH + {0xB6AC, 0x51AC}, //8772 #CJK UNIFIED IDEOGRAPH + {0xB6AD, 0x8463}, //8773 #CJK UNIFIED IDEOGRAPH + {0xB6AE, 0x61C2}, //8774 #CJK UNIFIED IDEOGRAPH + {0xB6AF, 0x52A8}, //8775 #CJK UNIFIED IDEOGRAPH + {0xB6B0, 0x680B}, //8776 #CJK UNIFIED IDEOGRAPH + {0xB6B1, 0x4F97}, //8777 #CJK UNIFIED IDEOGRAPH + {0xB6B2, 0x606B}, //8778 #CJK UNIFIED IDEOGRAPH + {0xB6B3, 0x51BB}, //8779 #CJK UNIFIED IDEOGRAPH + {0xB6B4, 0x6D1E}, //8780 #CJK UNIFIED IDEOGRAPH + {0xB6B5, 0x515C}, //8781 #CJK UNIFIED IDEOGRAPH + {0xB6B6, 0x6296}, //8782 #CJK UNIFIED IDEOGRAPH + {0xB6B7, 0x6597}, //8783 #CJK UNIFIED IDEOGRAPH + {0xB6B8, 0x9661}, //8784 #CJK UNIFIED IDEOGRAPH + {0xB6B9, 0x8C46}, //8785 #CJK UNIFIED IDEOGRAPH + {0xB6BA, 0x9017}, //8786 #CJK UNIFIED IDEOGRAPH + {0xB6BB, 0x75D8}, //8787 #CJK UNIFIED IDEOGRAPH + {0xB6BC, 0x90FD}, //8788 #CJK UNIFIED IDEOGRAPH + {0xB6BD, 0x7763}, //8789 #CJK UNIFIED IDEOGRAPH + {0xB6BE, 0x6BD2}, //8790 #CJK UNIFIED IDEOGRAPH + {0xB6BF, 0x728A}, //8791 #CJK UNIFIED IDEOGRAPH + {0xB6C0, 0x72EC}, //8792 #CJK UNIFIED IDEOGRAPH + {0xB6C1, 0x8BFB}, //8793 #CJK UNIFIED IDEOGRAPH + {0xB6C2, 0x5835}, //8794 #CJK UNIFIED IDEOGRAPH + {0xB6C3, 0x7779}, //8795 #CJK UNIFIED IDEOGRAPH + {0xB6C4, 0x8D4C}, //8796 #CJK UNIFIED IDEOGRAPH + {0xB6C5, 0x675C}, //8797 #CJK UNIFIED IDEOGRAPH + {0xB6C6, 0x9540}, //8798 #CJK UNIFIED IDEOGRAPH + {0xB6C7, 0x809A}, //8799 #CJK UNIFIED IDEOGRAPH + {0xB6C8, 0x5EA6}, //8800 #CJK UNIFIED IDEOGRAPH + {0xB6C9, 0x6E21}, //8801 #CJK UNIFIED IDEOGRAPH + {0xB6CA, 0x5992}, //8802 #CJK UNIFIED IDEOGRAPH + {0xB6CB, 0x7AEF}, //8803 #CJK UNIFIED IDEOGRAPH + {0xB6CC, 0x77ED}, //8804 #CJK UNIFIED IDEOGRAPH + {0xB6CD, 0x953B}, //8805 #CJK UNIFIED IDEOGRAPH + {0xB6CE, 0x6BB5}, //8806 #CJK UNIFIED IDEOGRAPH + {0xB6CF, 0x65AD}, //8807 #CJK UNIFIED IDEOGRAPH + {0xB6D0, 0x7F0E}, //8808 #CJK UNIFIED IDEOGRAPH + {0xB6D1, 0x5806}, //8809 #CJK UNIFIED IDEOGRAPH + {0xB6D2, 0x5151}, //8810 #CJK UNIFIED IDEOGRAPH + {0xB6D3, 0x961F}, //8811 #CJK UNIFIED IDEOGRAPH + {0xB6D4, 0x5BF9}, //8812 #CJK UNIFIED IDEOGRAPH + {0xB6D5, 0x58A9}, //8813 #CJK UNIFIED IDEOGRAPH + {0xB6D6, 0x5428}, //8814 #CJK UNIFIED IDEOGRAPH + {0xB6D7, 0x8E72}, //8815 #CJK UNIFIED IDEOGRAPH + {0xB6D8, 0x6566}, //8816 #CJK UNIFIED IDEOGRAPH + {0xB6D9, 0x987F}, //8817 #CJK UNIFIED IDEOGRAPH + {0xB6DA, 0x56E4}, //8818 #CJK UNIFIED IDEOGRAPH + {0xB6DB, 0x949D}, //8819 #CJK UNIFIED IDEOGRAPH + {0xB6DC, 0x76FE}, //8820 #CJK UNIFIED IDEOGRAPH + {0xB6DD, 0x9041}, //8821 #CJK UNIFIED IDEOGRAPH + {0xB6DE, 0x6387}, //8822 #CJK UNIFIED IDEOGRAPH + {0xB6DF, 0x54C6}, //8823 #CJK UNIFIED IDEOGRAPH + {0xB6E0, 0x591A}, //8824 #CJK UNIFIED IDEOGRAPH + {0xB6E1, 0x593A}, //8825 #CJK UNIFIED IDEOGRAPH + {0xB6E2, 0x579B}, //8826 #CJK UNIFIED IDEOGRAPH + {0xB6E3, 0x8EB2}, //8827 #CJK UNIFIED IDEOGRAPH + {0xB6E4, 0x6735}, //8828 #CJK UNIFIED IDEOGRAPH + {0xB6E5, 0x8DFA}, //8829 #CJK UNIFIED IDEOGRAPH + {0xB6E6, 0x8235}, //8830 #CJK UNIFIED IDEOGRAPH + {0xB6E7, 0x5241}, //8831 #CJK UNIFIED IDEOGRAPH + {0xB6E8, 0x60F0}, //8832 #CJK UNIFIED IDEOGRAPH + {0xB6E9, 0x5815}, //8833 #CJK UNIFIED IDEOGRAPH + {0xB6EA, 0x86FE}, //8834 #CJK UNIFIED IDEOGRAPH + {0xB6EB, 0x5CE8}, //8835 #CJK UNIFIED IDEOGRAPH + {0xB6EC, 0x9E45}, //8836 #CJK UNIFIED IDEOGRAPH + {0xB6ED, 0x4FC4}, //8837 #CJK UNIFIED IDEOGRAPH + {0xB6EE, 0x989D}, //8838 #CJK UNIFIED IDEOGRAPH + {0xB6EF, 0x8BB9}, //8839 #CJK UNIFIED IDEOGRAPH + {0xB6F0, 0x5A25}, //8840 #CJK UNIFIED IDEOGRAPH + {0xB6F1, 0x6076}, //8841 #CJK UNIFIED IDEOGRAPH + {0xB6F2, 0x5384}, //8842 #CJK UNIFIED IDEOGRAPH + {0xB6F3, 0x627C}, //8843 #CJK UNIFIED IDEOGRAPH + {0xB6F4, 0x904F}, //8844 #CJK UNIFIED IDEOGRAPH + {0xB6F5, 0x9102}, //8845 #CJK UNIFIED IDEOGRAPH + {0xB6F6, 0x997F}, //8846 #CJK UNIFIED IDEOGRAPH + {0xB6F7, 0x6069}, //8847 #CJK UNIFIED IDEOGRAPH + {0xB6F8, 0x800C}, //8848 #CJK UNIFIED IDEOGRAPH + {0xB6F9, 0x513F}, //8849 #CJK UNIFIED IDEOGRAPH + {0xB6FA, 0x8033}, //8850 #CJK UNIFIED IDEOGRAPH + {0xB6FB, 0x5C14}, //8851 #CJK UNIFIED IDEOGRAPH + {0xB6FC, 0x9975}, //8852 #CJK UNIFIED IDEOGRAPH + {0xB6FD, 0x6D31}, //8853 #CJK UNIFIED IDEOGRAPH + {0xB6FE, 0x4E8C}, //8854 #CJK UNIFIED IDEOGRAPH + {0xB740, 0x7A1D}, //8855 #CJK UNIFIED IDEOGRAPH + {0xB741, 0x7A1F}, //8856 #CJK UNIFIED IDEOGRAPH + {0xB742, 0x7A21}, //8857 #CJK UNIFIED IDEOGRAPH + {0xB743, 0x7A22}, //8858 #CJK UNIFIED IDEOGRAPH + {0xB744, 0x7A24}, //8859 #CJK UNIFIED IDEOGRAPH + {0xB745, 0x7A25}, //8860 #CJK UNIFIED IDEOGRAPH + {0xB746, 0x7A26}, //8861 #CJK UNIFIED IDEOGRAPH + {0xB747, 0x7A27}, //8862 #CJK UNIFIED IDEOGRAPH + {0xB748, 0x7A28}, //8863 #CJK UNIFIED IDEOGRAPH + {0xB749, 0x7A29}, //8864 #CJK UNIFIED IDEOGRAPH + {0xB74A, 0x7A2A}, //8865 #CJK UNIFIED IDEOGRAPH + {0xB74B, 0x7A2B}, //8866 #CJK UNIFIED IDEOGRAPH + {0xB74C, 0x7A2C}, //8867 #CJK UNIFIED IDEOGRAPH + {0xB74D, 0x7A2D}, //8868 #CJK UNIFIED IDEOGRAPH + {0xB74E, 0x7A2E}, //8869 #CJK UNIFIED IDEOGRAPH + {0xB74F, 0x7A2F}, //8870 #CJK UNIFIED IDEOGRAPH + {0xB750, 0x7A30}, //8871 #CJK UNIFIED IDEOGRAPH + {0xB751, 0x7A31}, //8872 #CJK UNIFIED IDEOGRAPH + {0xB752, 0x7A32}, //8873 #CJK UNIFIED IDEOGRAPH + {0xB753, 0x7A34}, //8874 #CJK UNIFIED IDEOGRAPH + {0xB754, 0x7A35}, //8875 #CJK UNIFIED IDEOGRAPH + {0xB755, 0x7A36}, //8876 #CJK UNIFIED IDEOGRAPH + {0xB756, 0x7A38}, //8877 #CJK UNIFIED IDEOGRAPH + {0xB757, 0x7A3A}, //8878 #CJK UNIFIED IDEOGRAPH + {0xB758, 0x7A3E}, //8879 #CJK UNIFIED IDEOGRAPH + {0xB759, 0x7A40}, //8880 #CJK UNIFIED IDEOGRAPH + {0xB75A, 0x7A41}, //8881 #CJK UNIFIED IDEOGRAPH + {0xB75B, 0x7A42}, //8882 #CJK UNIFIED IDEOGRAPH + {0xB75C, 0x7A43}, //8883 #CJK UNIFIED IDEOGRAPH + {0xB75D, 0x7A44}, //8884 #CJK UNIFIED IDEOGRAPH + {0xB75E, 0x7A45}, //8885 #CJK UNIFIED IDEOGRAPH + {0xB75F, 0x7A47}, //8886 #CJK UNIFIED IDEOGRAPH + {0xB760, 0x7A48}, //8887 #CJK UNIFIED IDEOGRAPH + {0xB761, 0x7A49}, //8888 #CJK UNIFIED IDEOGRAPH + {0xB762, 0x7A4A}, //8889 #CJK UNIFIED IDEOGRAPH + {0xB763, 0x7A4B}, //8890 #CJK UNIFIED IDEOGRAPH + {0xB764, 0x7A4C}, //8891 #CJK UNIFIED IDEOGRAPH + {0xB765, 0x7A4D}, //8892 #CJK UNIFIED IDEOGRAPH + {0xB766, 0x7A4E}, //8893 #CJK UNIFIED IDEOGRAPH + {0xB767, 0x7A4F}, //8894 #CJK UNIFIED IDEOGRAPH + {0xB768, 0x7A50}, //8895 #CJK UNIFIED IDEOGRAPH + {0xB769, 0x7A52}, //8896 #CJK UNIFIED IDEOGRAPH + {0xB76A, 0x7A53}, //8897 #CJK UNIFIED IDEOGRAPH + {0xB76B, 0x7A54}, //8898 #CJK UNIFIED IDEOGRAPH + {0xB76C, 0x7A55}, //8899 #CJK UNIFIED IDEOGRAPH + {0xB76D, 0x7A56}, //8900 #CJK UNIFIED IDEOGRAPH + {0xB76E, 0x7A58}, //8901 #CJK UNIFIED IDEOGRAPH + {0xB76F, 0x7A59}, //8902 #CJK UNIFIED IDEOGRAPH + {0xB770, 0x7A5A}, //8903 #CJK UNIFIED IDEOGRAPH + {0xB771, 0x7A5B}, //8904 #CJK UNIFIED IDEOGRAPH + {0xB772, 0x7A5C}, //8905 #CJK UNIFIED IDEOGRAPH + {0xB773, 0x7A5D}, //8906 #CJK UNIFIED IDEOGRAPH + {0xB774, 0x7A5E}, //8907 #CJK UNIFIED IDEOGRAPH + {0xB775, 0x7A5F}, //8908 #CJK UNIFIED IDEOGRAPH + {0xB776, 0x7A60}, //8909 #CJK UNIFIED IDEOGRAPH + {0xB777, 0x7A61}, //8910 #CJK UNIFIED IDEOGRAPH + {0xB778, 0x7A62}, //8911 #CJK UNIFIED IDEOGRAPH + {0xB779, 0x7A63}, //8912 #CJK UNIFIED IDEOGRAPH + {0xB77A, 0x7A64}, //8913 #CJK UNIFIED IDEOGRAPH + {0xB77B, 0x7A65}, //8914 #CJK UNIFIED IDEOGRAPH + {0xB77C, 0x7A66}, //8915 #CJK UNIFIED IDEOGRAPH + {0xB77D, 0x7A67}, //8916 #CJK UNIFIED IDEOGRAPH + {0xB77E, 0x7A68}, //8917 #CJK UNIFIED IDEOGRAPH + {0xB780, 0x7A69}, //8918 #CJK UNIFIED IDEOGRAPH + {0xB781, 0x7A6A}, //8919 #CJK UNIFIED IDEOGRAPH + {0xB782, 0x7A6B}, //8920 #CJK UNIFIED IDEOGRAPH + {0xB783, 0x7A6C}, //8921 #CJK UNIFIED IDEOGRAPH + {0xB784, 0x7A6D}, //8922 #CJK UNIFIED IDEOGRAPH + {0xB785, 0x7A6E}, //8923 #CJK UNIFIED IDEOGRAPH + {0xB786, 0x7A6F}, //8924 #CJK UNIFIED IDEOGRAPH + {0xB787, 0x7A71}, //8925 #CJK UNIFIED IDEOGRAPH + {0xB788, 0x7A72}, //8926 #CJK UNIFIED IDEOGRAPH + {0xB789, 0x7A73}, //8927 #CJK UNIFIED IDEOGRAPH + {0xB78A, 0x7A75}, //8928 #CJK UNIFIED IDEOGRAPH + {0xB78B, 0x7A7B}, //8929 #CJK UNIFIED IDEOGRAPH + {0xB78C, 0x7A7C}, //8930 #CJK UNIFIED IDEOGRAPH + {0xB78D, 0x7A7D}, //8931 #CJK UNIFIED IDEOGRAPH + {0xB78E, 0x7A7E}, //8932 #CJK UNIFIED IDEOGRAPH + {0xB78F, 0x7A82}, //8933 #CJK UNIFIED IDEOGRAPH + {0xB790, 0x7A85}, //8934 #CJK UNIFIED IDEOGRAPH + {0xB791, 0x7A87}, //8935 #CJK UNIFIED IDEOGRAPH + {0xB792, 0x7A89}, //8936 #CJK UNIFIED IDEOGRAPH + {0xB793, 0x7A8A}, //8937 #CJK UNIFIED IDEOGRAPH + {0xB794, 0x7A8B}, //8938 #CJK UNIFIED IDEOGRAPH + {0xB795, 0x7A8C}, //8939 #CJK UNIFIED IDEOGRAPH + {0xB796, 0x7A8E}, //8940 #CJK UNIFIED IDEOGRAPH + {0xB797, 0x7A8F}, //8941 #CJK UNIFIED IDEOGRAPH + {0xB798, 0x7A90}, //8942 #CJK UNIFIED IDEOGRAPH + {0xB799, 0x7A93}, //8943 #CJK UNIFIED IDEOGRAPH + {0xB79A, 0x7A94}, //8944 #CJK UNIFIED IDEOGRAPH + {0xB79B, 0x7A99}, //8945 #CJK UNIFIED IDEOGRAPH + {0xB79C, 0x7A9A}, //8946 #CJK UNIFIED IDEOGRAPH + {0xB79D, 0x7A9B}, //8947 #CJK UNIFIED IDEOGRAPH + {0xB79E, 0x7A9E}, //8948 #CJK UNIFIED IDEOGRAPH + {0xB79F, 0x7AA1}, //8949 #CJK UNIFIED IDEOGRAPH + {0xB7A0, 0x7AA2}, //8950 #CJK UNIFIED IDEOGRAPH + {0xB7A1, 0x8D30}, //8951 #CJK UNIFIED IDEOGRAPH + {0xB7A2, 0x53D1}, //8952 #CJK UNIFIED IDEOGRAPH + {0xB7A3, 0x7F5A}, //8953 #CJK UNIFIED IDEOGRAPH + {0xB7A4, 0x7B4F}, //8954 #CJK UNIFIED IDEOGRAPH + {0xB7A5, 0x4F10}, //8955 #CJK UNIFIED IDEOGRAPH + {0xB7A6, 0x4E4F}, //8956 #CJK UNIFIED IDEOGRAPH + {0xB7A7, 0x9600}, //8957 #CJK UNIFIED IDEOGRAPH + {0xB7A8, 0x6CD5}, //8958 #CJK UNIFIED IDEOGRAPH + {0xB7A9, 0x73D0}, //8959 #CJK UNIFIED IDEOGRAPH + {0xB7AA, 0x85E9}, //8960 #CJK UNIFIED IDEOGRAPH + {0xB7AB, 0x5E06}, //8961 #CJK UNIFIED IDEOGRAPH + {0xB7AC, 0x756A}, //8962 #CJK UNIFIED IDEOGRAPH + {0xB7AD, 0x7FFB}, //8963 #CJK UNIFIED IDEOGRAPH + {0xB7AE, 0x6A0A}, //8964 #CJK UNIFIED IDEOGRAPH + {0xB7AF, 0x77FE}, //8965 #CJK UNIFIED IDEOGRAPH + {0xB7B0, 0x9492}, //8966 #CJK UNIFIED IDEOGRAPH + {0xB7B1, 0x7E41}, //8967 #CJK UNIFIED IDEOGRAPH + {0xB7B2, 0x51E1}, //8968 #CJK UNIFIED IDEOGRAPH + {0xB7B3, 0x70E6}, //8969 #CJK UNIFIED IDEOGRAPH + {0xB7B4, 0x53CD}, //8970 #CJK UNIFIED IDEOGRAPH + {0xB7B5, 0x8FD4}, //8971 #CJK UNIFIED IDEOGRAPH + {0xB7B6, 0x8303}, //8972 #CJK UNIFIED IDEOGRAPH + {0xB7B7, 0x8D29}, //8973 #CJK UNIFIED IDEOGRAPH + {0xB7B8, 0x72AF}, //8974 #CJK UNIFIED IDEOGRAPH + {0xB7B9, 0x996D}, //8975 #CJK UNIFIED IDEOGRAPH + {0xB7BA, 0x6CDB}, //8976 #CJK UNIFIED IDEOGRAPH + {0xB7BB, 0x574A}, //8977 #CJK UNIFIED IDEOGRAPH + {0xB7BC, 0x82B3}, //8978 #CJK UNIFIED IDEOGRAPH + {0xB7BD, 0x65B9}, //8979 #CJK UNIFIED IDEOGRAPH + {0xB7BE, 0x80AA}, //8980 #CJK UNIFIED IDEOGRAPH + {0xB7BF, 0x623F}, //8981 #CJK UNIFIED IDEOGRAPH + {0xB7C0, 0x9632}, //8982 #CJK UNIFIED IDEOGRAPH + {0xB7C1, 0x59A8}, //8983 #CJK UNIFIED IDEOGRAPH + {0xB7C2, 0x4EFF}, //8984 #CJK UNIFIED IDEOGRAPH + {0xB7C3, 0x8BBF}, //8985 #CJK UNIFIED IDEOGRAPH + {0xB7C4, 0x7EBA}, //8986 #CJK UNIFIED IDEOGRAPH + {0xB7C5, 0x653E}, //8987 #CJK UNIFIED IDEOGRAPH + {0xB7C6, 0x83F2}, //8988 #CJK UNIFIED IDEOGRAPH + {0xB7C7, 0x975E}, //8989 #CJK UNIFIED IDEOGRAPH + {0xB7C8, 0x5561}, //8990 #CJK UNIFIED IDEOGRAPH + {0xB7C9, 0x98DE}, //8991 #CJK UNIFIED IDEOGRAPH + {0xB7CA, 0x80A5}, //8992 #CJK UNIFIED IDEOGRAPH + {0xB7CB, 0x532A}, //8993 #CJK UNIFIED IDEOGRAPH + {0xB7CC, 0x8BFD}, //8994 #CJK UNIFIED IDEOGRAPH + {0xB7CD, 0x5420}, //8995 #CJK UNIFIED IDEOGRAPH + {0xB7CE, 0x80BA}, //8996 #CJK UNIFIED IDEOGRAPH + {0xB7CF, 0x5E9F}, //8997 #CJK UNIFIED IDEOGRAPH + {0xB7D0, 0x6CB8}, //8998 #CJK UNIFIED IDEOGRAPH + {0xB7D1, 0x8D39}, //8999 #CJK UNIFIED IDEOGRAPH + {0xB7D2, 0x82AC}, //9000 #CJK UNIFIED IDEOGRAPH + {0xB7D3, 0x915A}, //9001 #CJK UNIFIED IDEOGRAPH + {0xB7D4, 0x5429}, //9002 #CJK UNIFIED IDEOGRAPH + {0xB7D5, 0x6C1B}, //9003 #CJK UNIFIED IDEOGRAPH + {0xB7D6, 0x5206}, //9004 #CJK UNIFIED IDEOGRAPH + {0xB7D7, 0x7EB7}, //9005 #CJK UNIFIED IDEOGRAPH + {0xB7D8, 0x575F}, //9006 #CJK UNIFIED IDEOGRAPH + {0xB7D9, 0x711A}, //9007 #CJK UNIFIED IDEOGRAPH + {0xB7DA, 0x6C7E}, //9008 #CJK UNIFIED IDEOGRAPH + {0xB7DB, 0x7C89}, //9009 #CJK UNIFIED IDEOGRAPH + {0xB7DC, 0x594B}, //9010 #CJK UNIFIED IDEOGRAPH + {0xB7DD, 0x4EFD}, //9011 #CJK UNIFIED IDEOGRAPH + {0xB7DE, 0x5FFF}, //9012 #CJK UNIFIED IDEOGRAPH + {0xB7DF, 0x6124}, //9013 #CJK UNIFIED IDEOGRAPH + {0xB7E0, 0x7CAA}, //9014 #CJK UNIFIED IDEOGRAPH + {0xB7E1, 0x4E30}, //9015 #CJK UNIFIED IDEOGRAPH + {0xB7E2, 0x5C01}, //9016 #CJK UNIFIED IDEOGRAPH + {0xB7E3, 0x67AB}, //9017 #CJK UNIFIED IDEOGRAPH + {0xB7E4, 0x8702}, //9018 #CJK UNIFIED IDEOGRAPH + {0xB7E5, 0x5CF0}, //9019 #CJK UNIFIED IDEOGRAPH + {0xB7E6, 0x950B}, //9020 #CJK UNIFIED IDEOGRAPH + {0xB7E7, 0x98CE}, //9021 #CJK UNIFIED IDEOGRAPH + {0xB7E8, 0x75AF}, //9022 #CJK UNIFIED IDEOGRAPH + {0xB7E9, 0x70FD}, //9023 #CJK UNIFIED IDEOGRAPH + {0xB7EA, 0x9022}, //9024 #CJK UNIFIED IDEOGRAPH + {0xB7EB, 0x51AF}, //9025 #CJK UNIFIED IDEOGRAPH + {0xB7EC, 0x7F1D}, //9026 #CJK UNIFIED IDEOGRAPH + {0xB7ED, 0x8BBD}, //9027 #CJK UNIFIED IDEOGRAPH + {0xB7EE, 0x5949}, //9028 #CJK UNIFIED IDEOGRAPH + {0xB7EF, 0x51E4}, //9029 #CJK UNIFIED IDEOGRAPH + {0xB7F0, 0x4F5B}, //9030 #CJK UNIFIED IDEOGRAPH + {0xB7F1, 0x5426}, //9031 #CJK UNIFIED IDEOGRAPH + {0xB7F2, 0x592B}, //9032 #CJK UNIFIED IDEOGRAPH + {0xB7F3, 0x6577}, //9033 #CJK UNIFIED IDEOGRAPH + {0xB7F4, 0x80A4}, //9034 #CJK UNIFIED IDEOGRAPH + {0xB7F5, 0x5B75}, //9035 #CJK UNIFIED IDEOGRAPH + {0xB7F6, 0x6276}, //9036 #CJK UNIFIED IDEOGRAPH + {0xB7F7, 0x62C2}, //9037 #CJK UNIFIED IDEOGRAPH + {0xB7F8, 0x8F90}, //9038 #CJK UNIFIED IDEOGRAPH + {0xB7F9, 0x5E45}, //9039 #CJK UNIFIED IDEOGRAPH + {0xB7FA, 0x6C1F}, //9040 #CJK UNIFIED IDEOGRAPH + {0xB7FB, 0x7B26}, //9041 #CJK UNIFIED IDEOGRAPH + {0xB7FC, 0x4F0F}, //9042 #CJK UNIFIED IDEOGRAPH + {0xB7FD, 0x4FD8}, //9043 #CJK UNIFIED IDEOGRAPH + {0xB7FE, 0x670D}, //9044 #CJK UNIFIED IDEOGRAPH + {0xB840, 0x7AA3}, //9045 #CJK UNIFIED IDEOGRAPH + {0xB841, 0x7AA4}, //9046 #CJK UNIFIED IDEOGRAPH + {0xB842, 0x7AA7}, //9047 #CJK UNIFIED IDEOGRAPH + {0xB843, 0x7AA9}, //9048 #CJK UNIFIED IDEOGRAPH + {0xB844, 0x7AAA}, //9049 #CJK UNIFIED IDEOGRAPH + {0xB845, 0x7AAB}, //9050 #CJK UNIFIED IDEOGRAPH + {0xB846, 0x7AAE}, //9051 #CJK UNIFIED IDEOGRAPH + {0xB847, 0x7AAF}, //9052 #CJK UNIFIED IDEOGRAPH + {0xB848, 0x7AB0}, //9053 #CJK UNIFIED IDEOGRAPH + {0xB849, 0x7AB1}, //9054 #CJK UNIFIED IDEOGRAPH + {0xB84A, 0x7AB2}, //9055 #CJK UNIFIED IDEOGRAPH + {0xB84B, 0x7AB4}, //9056 #CJK UNIFIED IDEOGRAPH + {0xB84C, 0x7AB5}, //9057 #CJK UNIFIED IDEOGRAPH + {0xB84D, 0x7AB6}, //9058 #CJK UNIFIED IDEOGRAPH + {0xB84E, 0x7AB7}, //9059 #CJK UNIFIED IDEOGRAPH + {0xB84F, 0x7AB8}, //9060 #CJK UNIFIED IDEOGRAPH + {0xB850, 0x7AB9}, //9061 #CJK UNIFIED IDEOGRAPH + {0xB851, 0x7ABA}, //9062 #CJK UNIFIED IDEOGRAPH + {0xB852, 0x7ABB}, //9063 #CJK UNIFIED IDEOGRAPH + {0xB853, 0x7ABC}, //9064 #CJK UNIFIED IDEOGRAPH + {0xB854, 0x7ABD}, //9065 #CJK UNIFIED IDEOGRAPH + {0xB855, 0x7ABE}, //9066 #CJK UNIFIED IDEOGRAPH + {0xB856, 0x7AC0}, //9067 #CJK UNIFIED IDEOGRAPH + {0xB857, 0x7AC1}, //9068 #CJK UNIFIED IDEOGRAPH + {0xB858, 0x7AC2}, //9069 #CJK UNIFIED IDEOGRAPH + {0xB859, 0x7AC3}, //9070 #CJK UNIFIED IDEOGRAPH + {0xB85A, 0x7AC4}, //9071 #CJK UNIFIED IDEOGRAPH + {0xB85B, 0x7AC5}, //9072 #CJK UNIFIED IDEOGRAPH + {0xB85C, 0x7AC6}, //9073 #CJK UNIFIED IDEOGRAPH + {0xB85D, 0x7AC7}, //9074 #CJK UNIFIED IDEOGRAPH + {0xB85E, 0x7AC8}, //9075 #CJK UNIFIED IDEOGRAPH + {0xB85F, 0x7AC9}, //9076 #CJK UNIFIED IDEOGRAPH + {0xB860, 0x7ACA}, //9077 #CJK UNIFIED IDEOGRAPH + {0xB861, 0x7ACC}, //9078 #CJK UNIFIED IDEOGRAPH + {0xB862, 0x7ACD}, //9079 #CJK UNIFIED IDEOGRAPH + {0xB863, 0x7ACE}, //9080 #CJK UNIFIED IDEOGRAPH + {0xB864, 0x7ACF}, //9081 #CJK UNIFIED IDEOGRAPH + {0xB865, 0x7AD0}, //9082 #CJK UNIFIED IDEOGRAPH + {0xB866, 0x7AD1}, //9083 #CJK UNIFIED IDEOGRAPH + {0xB867, 0x7AD2}, //9084 #CJK UNIFIED IDEOGRAPH + {0xB868, 0x7AD3}, //9085 #CJK UNIFIED IDEOGRAPH + {0xB869, 0x7AD4}, //9086 #CJK UNIFIED IDEOGRAPH + {0xB86A, 0x7AD5}, //9087 #CJK UNIFIED IDEOGRAPH + {0xB86B, 0x7AD7}, //9088 #CJK UNIFIED IDEOGRAPH + {0xB86C, 0x7AD8}, //9089 #CJK UNIFIED IDEOGRAPH + {0xB86D, 0x7ADA}, //9090 #CJK UNIFIED IDEOGRAPH + {0xB86E, 0x7ADB}, //9091 #CJK UNIFIED IDEOGRAPH + {0xB86F, 0x7ADC}, //9092 #CJK UNIFIED IDEOGRAPH + {0xB870, 0x7ADD}, //9093 #CJK UNIFIED IDEOGRAPH + {0xB871, 0x7AE1}, //9094 #CJK UNIFIED IDEOGRAPH + {0xB872, 0x7AE2}, //9095 #CJK UNIFIED IDEOGRAPH + {0xB873, 0x7AE4}, //9096 #CJK UNIFIED IDEOGRAPH + {0xB874, 0x7AE7}, //9097 #CJK UNIFIED IDEOGRAPH + {0xB875, 0x7AE8}, //9098 #CJK UNIFIED IDEOGRAPH + {0xB876, 0x7AE9}, //9099 #CJK UNIFIED IDEOGRAPH + {0xB877, 0x7AEA}, //9100 #CJK UNIFIED IDEOGRAPH + {0xB878, 0x7AEB}, //9101 #CJK UNIFIED IDEOGRAPH + {0xB879, 0x7AEC}, //9102 #CJK UNIFIED IDEOGRAPH + {0xB87A, 0x7AEE}, //9103 #CJK UNIFIED IDEOGRAPH + {0xB87B, 0x7AF0}, //9104 #CJK UNIFIED IDEOGRAPH + {0xB87C, 0x7AF1}, //9105 #CJK UNIFIED IDEOGRAPH + {0xB87D, 0x7AF2}, //9106 #CJK UNIFIED IDEOGRAPH + {0xB87E, 0x7AF3}, //9107 #CJK UNIFIED IDEOGRAPH + {0xB880, 0x7AF4}, //9108 #CJK UNIFIED IDEOGRAPH + {0xB881, 0x7AF5}, //9109 #CJK UNIFIED IDEOGRAPH + {0xB882, 0x7AF6}, //9110 #CJK UNIFIED IDEOGRAPH + {0xB883, 0x7AF7}, //9111 #CJK UNIFIED IDEOGRAPH + {0xB884, 0x7AF8}, //9112 #CJK UNIFIED IDEOGRAPH + {0xB885, 0x7AFB}, //9113 #CJK UNIFIED IDEOGRAPH + {0xB886, 0x7AFC}, //9114 #CJK UNIFIED IDEOGRAPH + {0xB887, 0x7AFE}, //9115 #CJK UNIFIED IDEOGRAPH + {0xB888, 0x7B00}, //9116 #CJK UNIFIED IDEOGRAPH + {0xB889, 0x7B01}, //9117 #CJK UNIFIED IDEOGRAPH + {0xB88A, 0x7B02}, //9118 #CJK UNIFIED IDEOGRAPH + {0xB88B, 0x7B05}, //9119 #CJK UNIFIED IDEOGRAPH + {0xB88C, 0x7B07}, //9120 #CJK UNIFIED IDEOGRAPH + {0xB88D, 0x7B09}, //9121 #CJK UNIFIED IDEOGRAPH + {0xB88E, 0x7B0C}, //9122 #CJK UNIFIED IDEOGRAPH + {0xB88F, 0x7B0D}, //9123 #CJK UNIFIED IDEOGRAPH + {0xB890, 0x7B0E}, //9124 #CJK UNIFIED IDEOGRAPH + {0xB891, 0x7B10}, //9125 #CJK UNIFIED IDEOGRAPH + {0xB892, 0x7B12}, //9126 #CJK UNIFIED IDEOGRAPH + {0xB893, 0x7B13}, //9127 #CJK UNIFIED IDEOGRAPH + {0xB894, 0x7B16}, //9128 #CJK UNIFIED IDEOGRAPH + {0xB895, 0x7B17}, //9129 #CJK UNIFIED IDEOGRAPH + {0xB896, 0x7B18}, //9130 #CJK UNIFIED IDEOGRAPH + {0xB897, 0x7B1A}, //9131 #CJK UNIFIED IDEOGRAPH + {0xB898, 0x7B1C}, //9132 #CJK UNIFIED IDEOGRAPH + {0xB899, 0x7B1D}, //9133 #CJK UNIFIED IDEOGRAPH + {0xB89A, 0x7B1F}, //9134 #CJK UNIFIED IDEOGRAPH + {0xB89B, 0x7B21}, //9135 #CJK UNIFIED IDEOGRAPH + {0xB89C, 0x7B22}, //9136 #CJK UNIFIED IDEOGRAPH + {0xB89D, 0x7B23}, //9137 #CJK UNIFIED IDEOGRAPH + {0xB89E, 0x7B27}, //9138 #CJK UNIFIED IDEOGRAPH + {0xB89F, 0x7B29}, //9139 #CJK UNIFIED IDEOGRAPH + {0xB8A0, 0x7B2D}, //9140 #CJK UNIFIED IDEOGRAPH + {0xB8A1, 0x6D6E}, //9141 #CJK UNIFIED IDEOGRAPH + {0xB8A2, 0x6DAA}, //9142 #CJK UNIFIED IDEOGRAPH + {0xB8A3, 0x798F}, //9143 #CJK UNIFIED IDEOGRAPH + {0xB8A4, 0x88B1}, //9144 #CJK UNIFIED IDEOGRAPH + {0xB8A5, 0x5F17}, //9145 #CJK UNIFIED IDEOGRAPH + {0xB8A6, 0x752B}, //9146 #CJK UNIFIED IDEOGRAPH + {0xB8A7, 0x629A}, //9147 #CJK UNIFIED IDEOGRAPH + {0xB8A8, 0x8F85}, //9148 #CJK UNIFIED IDEOGRAPH + {0xB8A9, 0x4FEF}, //9149 #CJK UNIFIED IDEOGRAPH + {0xB8AA, 0x91DC}, //9150 #CJK UNIFIED IDEOGRAPH + {0xB8AB, 0x65A7}, //9151 #CJK UNIFIED IDEOGRAPH + {0xB8AC, 0x812F}, //9152 #CJK UNIFIED IDEOGRAPH + {0xB8AD, 0x8151}, //9153 #CJK UNIFIED IDEOGRAPH + {0xB8AE, 0x5E9C}, //9154 #CJK UNIFIED IDEOGRAPH + {0xB8AF, 0x8150}, //9155 #CJK UNIFIED IDEOGRAPH + {0xB8B0, 0x8D74}, //9156 #CJK UNIFIED IDEOGRAPH + {0xB8B1, 0x526F}, //9157 #CJK UNIFIED IDEOGRAPH + {0xB8B2, 0x8986}, //9158 #CJK UNIFIED IDEOGRAPH + {0xB8B3, 0x8D4B}, //9159 #CJK UNIFIED IDEOGRAPH + {0xB8B4, 0x590D}, //9160 #CJK UNIFIED IDEOGRAPH + {0xB8B5, 0x5085}, //9161 #CJK UNIFIED IDEOGRAPH + {0xB8B6, 0x4ED8}, //9162 #CJK UNIFIED IDEOGRAPH + {0xB8B7, 0x961C}, //9163 #CJK UNIFIED IDEOGRAPH + {0xB8B8, 0x7236}, //9164 #CJK UNIFIED IDEOGRAPH + {0xB8B9, 0x8179}, //9165 #CJK UNIFIED IDEOGRAPH + {0xB8BA, 0x8D1F}, //9166 #CJK UNIFIED IDEOGRAPH + {0xB8BB, 0x5BCC}, //9167 #CJK UNIFIED IDEOGRAPH + {0xB8BC, 0x8BA3}, //9168 #CJK UNIFIED IDEOGRAPH + {0xB8BD, 0x9644}, //9169 #CJK UNIFIED IDEOGRAPH + {0xB8BE, 0x5987}, //9170 #CJK UNIFIED IDEOGRAPH + {0xB8BF, 0x7F1A}, //9171 #CJK UNIFIED IDEOGRAPH + {0xB8C0, 0x5490}, //9172 #CJK UNIFIED IDEOGRAPH + {0xB8C1, 0x5676}, //9173 #CJK UNIFIED IDEOGRAPH + {0xB8C2, 0x560E}, //9174 #CJK UNIFIED IDEOGRAPH + {0xB8C3, 0x8BE5}, //9175 #CJK UNIFIED IDEOGRAPH + {0xB8C4, 0x6539}, //9176 #CJK UNIFIED IDEOGRAPH + {0xB8C5, 0x6982}, //9177 #CJK UNIFIED IDEOGRAPH + {0xB8C6, 0x9499}, //9178 #CJK UNIFIED IDEOGRAPH + {0xB8C7, 0x76D6}, //9179 #CJK UNIFIED IDEOGRAPH + {0xB8C8, 0x6E89}, //9180 #CJK UNIFIED IDEOGRAPH + {0xB8C9, 0x5E72}, //9181 #CJK UNIFIED IDEOGRAPH + {0xB8CA, 0x7518}, //9182 #CJK UNIFIED IDEOGRAPH + {0xB8CB, 0x6746}, //9183 #CJK UNIFIED IDEOGRAPH + {0xB8CC, 0x67D1}, //9184 #CJK UNIFIED IDEOGRAPH + {0xB8CD, 0x7AFF}, //9185 #CJK UNIFIED IDEOGRAPH + {0xB8CE, 0x809D}, //9186 #CJK UNIFIED IDEOGRAPH + {0xB8CF, 0x8D76}, //9187 #CJK UNIFIED IDEOGRAPH + {0xB8D0, 0x611F}, //9188 #CJK UNIFIED IDEOGRAPH + {0xB8D1, 0x79C6}, //9189 #CJK UNIFIED IDEOGRAPH + {0xB8D2, 0x6562}, //9190 #CJK UNIFIED IDEOGRAPH + {0xB8D3, 0x8D63}, //9191 #CJK UNIFIED IDEOGRAPH + {0xB8D4, 0x5188}, //9192 #CJK UNIFIED IDEOGRAPH + {0xB8D5, 0x521A}, //9193 #CJK UNIFIED IDEOGRAPH + {0xB8D6, 0x94A2}, //9194 #CJK UNIFIED IDEOGRAPH + {0xB8D7, 0x7F38}, //9195 #CJK UNIFIED IDEOGRAPH + {0xB8D8, 0x809B}, //9196 #CJK UNIFIED IDEOGRAPH + {0xB8D9, 0x7EB2}, //9197 #CJK UNIFIED IDEOGRAPH + {0xB8DA, 0x5C97}, //9198 #CJK UNIFIED IDEOGRAPH + {0xB8DB, 0x6E2F}, //9199 #CJK UNIFIED IDEOGRAPH + {0xB8DC, 0x6760}, //9200 #CJK UNIFIED IDEOGRAPH + {0xB8DD, 0x7BD9}, //9201 #CJK UNIFIED IDEOGRAPH + {0xB8DE, 0x768B}, //9202 #CJK UNIFIED IDEOGRAPH + {0xB8DF, 0x9AD8}, //9203 #CJK UNIFIED IDEOGRAPH + {0xB8E0, 0x818F}, //9204 #CJK UNIFIED IDEOGRAPH + {0xB8E1, 0x7F94}, //9205 #CJK UNIFIED IDEOGRAPH + {0xB8E2, 0x7CD5}, //9206 #CJK UNIFIED IDEOGRAPH + {0xB8E3, 0x641E}, //9207 #CJK UNIFIED IDEOGRAPH + {0xB8E4, 0x9550}, //9208 #CJK UNIFIED IDEOGRAPH + {0xB8E5, 0x7A3F}, //9209 #CJK UNIFIED IDEOGRAPH + {0xB8E6, 0x544A}, //9210 #CJK UNIFIED IDEOGRAPH + {0xB8E7, 0x54E5}, //9211 #CJK UNIFIED IDEOGRAPH + {0xB8E8, 0x6B4C}, //9212 #CJK UNIFIED IDEOGRAPH + {0xB8E9, 0x6401}, //9213 #CJK UNIFIED IDEOGRAPH + {0xB8EA, 0x6208}, //9214 #CJK UNIFIED IDEOGRAPH + {0xB8EB, 0x9E3D}, //9215 #CJK UNIFIED IDEOGRAPH + {0xB8EC, 0x80F3}, //9216 #CJK UNIFIED IDEOGRAPH + {0xB8ED, 0x7599}, //9217 #CJK UNIFIED IDEOGRAPH + {0xB8EE, 0x5272}, //9218 #CJK UNIFIED IDEOGRAPH + {0xB8EF, 0x9769}, //9219 #CJK UNIFIED IDEOGRAPH + {0xB8F0, 0x845B}, //9220 #CJK UNIFIED IDEOGRAPH + {0xB8F1, 0x683C}, //9221 #CJK UNIFIED IDEOGRAPH + {0xB8F2, 0x86E4}, //9222 #CJK UNIFIED IDEOGRAPH + {0xB8F3, 0x9601}, //9223 #CJK UNIFIED IDEOGRAPH + {0xB8F4, 0x9694}, //9224 #CJK UNIFIED IDEOGRAPH + {0xB8F5, 0x94EC}, //9225 #CJK UNIFIED IDEOGRAPH + {0xB8F6, 0x4E2A}, //9226 #CJK UNIFIED IDEOGRAPH + {0xB8F7, 0x5404}, //9227 #CJK UNIFIED IDEOGRAPH + {0xB8F8, 0x7ED9}, //9228 #CJK UNIFIED IDEOGRAPH + {0xB8F9, 0x6839}, //9229 #CJK UNIFIED IDEOGRAPH + {0xB8FA, 0x8DDF}, //9230 #CJK UNIFIED IDEOGRAPH + {0xB8FB, 0x8015}, //9231 #CJK UNIFIED IDEOGRAPH + {0xB8FC, 0x66F4}, //9232 #CJK UNIFIED IDEOGRAPH + {0xB8FD, 0x5E9A}, //9233 #CJK UNIFIED IDEOGRAPH + {0xB8FE, 0x7FB9}, //9234 #CJK UNIFIED IDEOGRAPH + {0xB940, 0x7B2F}, //9235 #CJK UNIFIED IDEOGRAPH + {0xB941, 0x7B30}, //9236 #CJK UNIFIED IDEOGRAPH + {0xB942, 0x7B32}, //9237 #CJK UNIFIED IDEOGRAPH + {0xB943, 0x7B34}, //9238 #CJK UNIFIED IDEOGRAPH + {0xB944, 0x7B35}, //9239 #CJK UNIFIED IDEOGRAPH + {0xB945, 0x7B36}, //9240 #CJK UNIFIED IDEOGRAPH + {0xB946, 0x7B37}, //9241 #CJK UNIFIED IDEOGRAPH + {0xB947, 0x7B39}, //9242 #CJK UNIFIED IDEOGRAPH + {0xB948, 0x7B3B}, //9243 #CJK UNIFIED IDEOGRAPH + {0xB949, 0x7B3D}, //9244 #CJK UNIFIED IDEOGRAPH + {0xB94A, 0x7B3F}, //9245 #CJK UNIFIED IDEOGRAPH + {0xB94B, 0x7B40}, //9246 #CJK UNIFIED IDEOGRAPH + {0xB94C, 0x7B41}, //9247 #CJK UNIFIED IDEOGRAPH + {0xB94D, 0x7B42}, //9248 #CJK UNIFIED IDEOGRAPH + {0xB94E, 0x7B43}, //9249 #CJK UNIFIED IDEOGRAPH + {0xB94F, 0x7B44}, //9250 #CJK UNIFIED IDEOGRAPH + {0xB950, 0x7B46}, //9251 #CJK UNIFIED IDEOGRAPH + {0xB951, 0x7B48}, //9252 #CJK UNIFIED IDEOGRAPH + {0xB952, 0x7B4A}, //9253 #CJK UNIFIED IDEOGRAPH + {0xB953, 0x7B4D}, //9254 #CJK UNIFIED IDEOGRAPH + {0xB954, 0x7B4E}, //9255 #CJK UNIFIED IDEOGRAPH + {0xB955, 0x7B53}, //9256 #CJK UNIFIED IDEOGRAPH + {0xB956, 0x7B55}, //9257 #CJK UNIFIED IDEOGRAPH + {0xB957, 0x7B57}, //9258 #CJK UNIFIED IDEOGRAPH + {0xB958, 0x7B59}, //9259 #CJK UNIFIED IDEOGRAPH + {0xB959, 0x7B5C}, //9260 #CJK UNIFIED IDEOGRAPH + {0xB95A, 0x7B5E}, //9261 #CJK UNIFIED IDEOGRAPH + {0xB95B, 0x7B5F}, //9262 #CJK UNIFIED IDEOGRAPH + {0xB95C, 0x7B61}, //9263 #CJK UNIFIED IDEOGRAPH + {0xB95D, 0x7B63}, //9264 #CJK UNIFIED IDEOGRAPH + {0xB95E, 0x7B64}, //9265 #CJK UNIFIED IDEOGRAPH + {0xB95F, 0x7B65}, //9266 #CJK UNIFIED IDEOGRAPH + {0xB960, 0x7B66}, //9267 #CJK UNIFIED IDEOGRAPH + {0xB961, 0x7B67}, //9268 #CJK UNIFIED IDEOGRAPH + {0xB962, 0x7B68}, //9269 #CJK UNIFIED IDEOGRAPH + {0xB963, 0x7B69}, //9270 #CJK UNIFIED IDEOGRAPH + {0xB964, 0x7B6A}, //9271 #CJK UNIFIED IDEOGRAPH + {0xB965, 0x7B6B}, //9272 #CJK UNIFIED IDEOGRAPH + {0xB966, 0x7B6C}, //9273 #CJK UNIFIED IDEOGRAPH + {0xB967, 0x7B6D}, //9274 #CJK UNIFIED IDEOGRAPH + {0xB968, 0x7B6F}, //9275 #CJK UNIFIED IDEOGRAPH + {0xB969, 0x7B70}, //9276 #CJK UNIFIED IDEOGRAPH + {0xB96A, 0x7B73}, //9277 #CJK UNIFIED IDEOGRAPH + {0xB96B, 0x7B74}, //9278 #CJK UNIFIED IDEOGRAPH + {0xB96C, 0x7B76}, //9279 #CJK UNIFIED IDEOGRAPH + {0xB96D, 0x7B78}, //9280 #CJK UNIFIED IDEOGRAPH + {0xB96E, 0x7B7A}, //9281 #CJK UNIFIED IDEOGRAPH + {0xB96F, 0x7B7C}, //9282 #CJK UNIFIED IDEOGRAPH + {0xB970, 0x7B7D}, //9283 #CJK UNIFIED IDEOGRAPH + {0xB971, 0x7B7F}, //9284 #CJK UNIFIED IDEOGRAPH + {0xB972, 0x7B81}, //9285 #CJK UNIFIED IDEOGRAPH + {0xB973, 0x7B82}, //9286 #CJK UNIFIED IDEOGRAPH + {0xB974, 0x7B83}, //9287 #CJK UNIFIED IDEOGRAPH + {0xB975, 0x7B84}, //9288 #CJK UNIFIED IDEOGRAPH + {0xB976, 0x7B86}, //9289 #CJK UNIFIED IDEOGRAPH + {0xB977, 0x7B87}, //9290 #CJK UNIFIED IDEOGRAPH + {0xB978, 0x7B88}, //9291 #CJK UNIFIED IDEOGRAPH + {0xB979, 0x7B89}, //9292 #CJK UNIFIED IDEOGRAPH + {0xB97A, 0x7B8A}, //9293 #CJK UNIFIED IDEOGRAPH + {0xB97B, 0x7B8B}, //9294 #CJK UNIFIED IDEOGRAPH + {0xB97C, 0x7B8C}, //9295 #CJK UNIFIED IDEOGRAPH + {0xB97D, 0x7B8E}, //9296 #CJK UNIFIED IDEOGRAPH + {0xB97E, 0x7B8F}, //9297 #CJK UNIFIED IDEOGRAPH + {0xB980, 0x7B91}, //9298 #CJK UNIFIED IDEOGRAPH + {0xB981, 0x7B92}, //9299 #CJK UNIFIED IDEOGRAPH + {0xB982, 0x7B93}, //9300 #CJK UNIFIED IDEOGRAPH + {0xB983, 0x7B96}, //9301 #CJK UNIFIED IDEOGRAPH + {0xB984, 0x7B98}, //9302 #CJK UNIFIED IDEOGRAPH + {0xB985, 0x7B99}, //9303 #CJK UNIFIED IDEOGRAPH + {0xB986, 0x7B9A}, //9304 #CJK UNIFIED IDEOGRAPH + {0xB987, 0x7B9B}, //9305 #CJK UNIFIED IDEOGRAPH + {0xB988, 0x7B9E}, //9306 #CJK UNIFIED IDEOGRAPH + {0xB989, 0x7B9F}, //9307 #CJK UNIFIED IDEOGRAPH + {0xB98A, 0x7BA0}, //9308 #CJK UNIFIED IDEOGRAPH + {0xB98B, 0x7BA3}, //9309 #CJK UNIFIED IDEOGRAPH + {0xB98C, 0x7BA4}, //9310 #CJK UNIFIED IDEOGRAPH + {0xB98D, 0x7BA5}, //9311 #CJK UNIFIED IDEOGRAPH + {0xB98E, 0x7BAE}, //9312 #CJK UNIFIED IDEOGRAPH + {0xB98F, 0x7BAF}, //9313 #CJK UNIFIED IDEOGRAPH + {0xB990, 0x7BB0}, //9314 #CJK UNIFIED IDEOGRAPH + {0xB991, 0x7BB2}, //9315 #CJK UNIFIED IDEOGRAPH + {0xB992, 0x7BB3}, //9316 #CJK UNIFIED IDEOGRAPH + {0xB993, 0x7BB5}, //9317 #CJK UNIFIED IDEOGRAPH + {0xB994, 0x7BB6}, //9318 #CJK UNIFIED IDEOGRAPH + {0xB995, 0x7BB7}, //9319 #CJK UNIFIED IDEOGRAPH + {0xB996, 0x7BB9}, //9320 #CJK UNIFIED IDEOGRAPH + {0xB997, 0x7BBA}, //9321 #CJK UNIFIED IDEOGRAPH + {0xB998, 0x7BBB}, //9322 #CJK UNIFIED IDEOGRAPH + {0xB999, 0x7BBC}, //9323 #CJK UNIFIED IDEOGRAPH + {0xB99A, 0x7BBD}, //9324 #CJK UNIFIED IDEOGRAPH + {0xB99B, 0x7BBE}, //9325 #CJK UNIFIED IDEOGRAPH + {0xB99C, 0x7BBF}, //9326 #CJK UNIFIED IDEOGRAPH + {0xB99D, 0x7BC0}, //9327 #CJK UNIFIED IDEOGRAPH + {0xB99E, 0x7BC2}, //9328 #CJK UNIFIED IDEOGRAPH + {0xB99F, 0x7BC3}, //9329 #CJK UNIFIED IDEOGRAPH + {0xB9A0, 0x7BC4}, //9330 #CJK UNIFIED IDEOGRAPH + {0xB9A1, 0x57C2}, //9331 #CJK UNIFIED IDEOGRAPH + {0xB9A2, 0x803F}, //9332 #CJK UNIFIED IDEOGRAPH + {0xB9A3, 0x6897}, //9333 #CJK UNIFIED IDEOGRAPH + {0xB9A4, 0x5DE5}, //9334 #CJK UNIFIED IDEOGRAPH + {0xB9A5, 0x653B}, //9335 #CJK UNIFIED IDEOGRAPH + {0xB9A6, 0x529F}, //9336 #CJK UNIFIED IDEOGRAPH + {0xB9A7, 0x606D}, //9337 #CJK UNIFIED IDEOGRAPH + {0xB9A8, 0x9F9A}, //9338 #CJK UNIFIED IDEOGRAPH + {0xB9A9, 0x4F9B}, //9339 #CJK UNIFIED IDEOGRAPH + {0xB9AA, 0x8EAC}, //9340 #CJK UNIFIED IDEOGRAPH + {0xB9AB, 0x516C}, //9341 #CJK UNIFIED IDEOGRAPH + {0xB9AC, 0x5BAB}, //9342 #CJK UNIFIED IDEOGRAPH + {0xB9AD, 0x5F13}, //9343 #CJK UNIFIED IDEOGRAPH + {0xB9AE, 0x5DE9}, //9344 #CJK UNIFIED IDEOGRAPH + {0xB9AF, 0x6C5E}, //9345 #CJK UNIFIED IDEOGRAPH + {0xB9B0, 0x62F1}, //9346 #CJK UNIFIED IDEOGRAPH + {0xB9B1, 0x8D21}, //9347 #CJK UNIFIED IDEOGRAPH + {0xB9B2, 0x5171}, //9348 #CJK UNIFIED IDEOGRAPH + {0xB9B3, 0x94A9}, //9349 #CJK UNIFIED IDEOGRAPH + {0xB9B4, 0x52FE}, //9350 #CJK UNIFIED IDEOGRAPH + {0xB9B5, 0x6C9F}, //9351 #CJK UNIFIED IDEOGRAPH + {0xB9B6, 0x82DF}, //9352 #CJK UNIFIED IDEOGRAPH + {0xB9B7, 0x72D7}, //9353 #CJK UNIFIED IDEOGRAPH + {0xB9B8, 0x57A2}, //9354 #CJK UNIFIED IDEOGRAPH + {0xB9B9, 0x6784}, //9355 #CJK UNIFIED IDEOGRAPH + {0xB9BA, 0x8D2D}, //9356 #CJK UNIFIED IDEOGRAPH + {0xB9BB, 0x591F}, //9357 #CJK UNIFIED IDEOGRAPH + {0xB9BC, 0x8F9C}, //9358 #CJK UNIFIED IDEOGRAPH + {0xB9BD, 0x83C7}, //9359 #CJK UNIFIED IDEOGRAPH + {0xB9BE, 0x5495}, //9360 #CJK UNIFIED IDEOGRAPH + {0xB9BF, 0x7B8D}, //9361 #CJK UNIFIED IDEOGRAPH + {0xB9C0, 0x4F30}, //9362 #CJK UNIFIED IDEOGRAPH + {0xB9C1, 0x6CBD}, //9363 #CJK UNIFIED IDEOGRAPH + {0xB9C2, 0x5B64}, //9364 #CJK UNIFIED IDEOGRAPH + {0xB9C3, 0x59D1}, //9365 #CJK UNIFIED IDEOGRAPH + {0xB9C4, 0x9F13}, //9366 #CJK UNIFIED IDEOGRAPH + {0xB9C5, 0x53E4}, //9367 #CJK UNIFIED IDEOGRAPH + {0xB9C6, 0x86CA}, //9368 #CJK UNIFIED IDEOGRAPH + {0xB9C7, 0x9AA8}, //9369 #CJK UNIFIED IDEOGRAPH + {0xB9C8, 0x8C37}, //9370 #CJK UNIFIED IDEOGRAPH + {0xB9C9, 0x80A1}, //9371 #CJK UNIFIED IDEOGRAPH + {0xB9CA, 0x6545}, //9372 #CJK UNIFIED IDEOGRAPH + {0xB9CB, 0x987E}, //9373 #CJK UNIFIED IDEOGRAPH + {0xB9CC, 0x56FA}, //9374 #CJK UNIFIED IDEOGRAPH + {0xB9CD, 0x96C7}, //9375 #CJK UNIFIED IDEOGRAPH + {0xB9CE, 0x522E}, //9376 #CJK UNIFIED IDEOGRAPH + {0xB9CF, 0x74DC}, //9377 #CJK UNIFIED IDEOGRAPH + {0xB9D0, 0x5250}, //9378 #CJK UNIFIED IDEOGRAPH + {0xB9D1, 0x5BE1}, //9379 #CJK UNIFIED IDEOGRAPH + {0xB9D2, 0x6302}, //9380 #CJK UNIFIED IDEOGRAPH + {0xB9D3, 0x8902}, //9381 #CJK UNIFIED IDEOGRAPH + {0xB9D4, 0x4E56}, //9382 #CJK UNIFIED IDEOGRAPH + {0xB9D5, 0x62D0}, //9383 #CJK UNIFIED IDEOGRAPH + {0xB9D6, 0x602A}, //9384 #CJK UNIFIED IDEOGRAPH + {0xB9D7, 0x68FA}, //9385 #CJK UNIFIED IDEOGRAPH + {0xB9D8, 0x5173}, //9386 #CJK UNIFIED IDEOGRAPH + {0xB9D9, 0x5B98}, //9387 #CJK UNIFIED IDEOGRAPH + {0xB9DA, 0x51A0}, //9388 #CJK UNIFIED IDEOGRAPH + {0xB9DB, 0x89C2}, //9389 #CJK UNIFIED IDEOGRAPH + {0xB9DC, 0x7BA1}, //9390 #CJK UNIFIED IDEOGRAPH + {0xB9DD, 0x9986}, //9391 #CJK UNIFIED IDEOGRAPH + {0xB9DE, 0x7F50}, //9392 #CJK UNIFIED IDEOGRAPH + {0xB9DF, 0x60EF}, //9393 #CJK UNIFIED IDEOGRAPH + {0xB9E0, 0x704C}, //9394 #CJK UNIFIED IDEOGRAPH + {0xB9E1, 0x8D2F}, //9395 #CJK UNIFIED IDEOGRAPH + {0xB9E2, 0x5149}, //9396 #CJK UNIFIED IDEOGRAPH + {0xB9E3, 0x5E7F}, //9397 #CJK UNIFIED IDEOGRAPH + {0xB9E4, 0x901B}, //9398 #CJK UNIFIED IDEOGRAPH + {0xB9E5, 0x7470}, //9399 #CJK UNIFIED IDEOGRAPH + {0xB9E6, 0x89C4}, //9400 #CJK UNIFIED IDEOGRAPH + {0xB9E7, 0x572D}, //9401 #CJK UNIFIED IDEOGRAPH + {0xB9E8, 0x7845}, //9402 #CJK UNIFIED IDEOGRAPH + {0xB9E9, 0x5F52}, //9403 #CJK UNIFIED IDEOGRAPH + {0xB9EA, 0x9F9F}, //9404 #CJK UNIFIED IDEOGRAPH + {0xB9EB, 0x95FA}, //9405 #CJK UNIFIED IDEOGRAPH + {0xB9EC, 0x8F68}, //9406 #CJK UNIFIED IDEOGRAPH + {0xB9ED, 0x9B3C}, //9407 #CJK UNIFIED IDEOGRAPH + {0xB9EE, 0x8BE1}, //9408 #CJK UNIFIED IDEOGRAPH + {0xB9EF, 0x7678}, //9409 #CJK UNIFIED IDEOGRAPH + {0xB9F0, 0x6842}, //9410 #CJK UNIFIED IDEOGRAPH + {0xB9F1, 0x67DC}, //9411 #CJK UNIFIED IDEOGRAPH + {0xB9F2, 0x8DEA}, //9412 #CJK UNIFIED IDEOGRAPH + {0xB9F3, 0x8D35}, //9413 #CJK UNIFIED IDEOGRAPH + {0xB9F4, 0x523D}, //9414 #CJK UNIFIED IDEOGRAPH + {0xB9F5, 0x8F8A}, //9415 #CJK UNIFIED IDEOGRAPH + {0xB9F6, 0x6EDA}, //9416 #CJK UNIFIED IDEOGRAPH + {0xB9F7, 0x68CD}, //9417 #CJK UNIFIED IDEOGRAPH + {0xB9F8, 0x9505}, //9418 #CJK UNIFIED IDEOGRAPH + {0xB9F9, 0x90ED}, //9419 #CJK UNIFIED IDEOGRAPH + {0xB9FA, 0x56FD}, //9420 #CJK UNIFIED IDEOGRAPH + {0xB9FB, 0x679C}, //9421 #CJK UNIFIED IDEOGRAPH + {0xB9FC, 0x88F9}, //9422 #CJK UNIFIED IDEOGRAPH + {0xB9FD, 0x8FC7}, //9423 #CJK UNIFIED IDEOGRAPH + {0xB9FE, 0x54C8}, //9424 #CJK UNIFIED IDEOGRAPH + {0xBA40, 0x7BC5}, //9425 #CJK UNIFIED IDEOGRAPH + {0xBA41, 0x7BC8}, //9426 #CJK UNIFIED IDEOGRAPH + {0xBA42, 0x7BC9}, //9427 #CJK UNIFIED IDEOGRAPH + {0xBA43, 0x7BCA}, //9428 #CJK UNIFIED IDEOGRAPH + {0xBA44, 0x7BCB}, //9429 #CJK UNIFIED IDEOGRAPH + {0xBA45, 0x7BCD}, //9430 #CJK UNIFIED IDEOGRAPH + {0xBA46, 0x7BCE}, //9431 #CJK UNIFIED IDEOGRAPH + {0xBA47, 0x7BCF}, //9432 #CJK UNIFIED IDEOGRAPH + {0xBA48, 0x7BD0}, //9433 #CJK UNIFIED IDEOGRAPH + {0xBA49, 0x7BD2}, //9434 #CJK UNIFIED IDEOGRAPH + {0xBA4A, 0x7BD4}, //9435 #CJK UNIFIED IDEOGRAPH + {0xBA4B, 0x7BD5}, //9436 #CJK UNIFIED IDEOGRAPH + {0xBA4C, 0x7BD6}, //9437 #CJK UNIFIED IDEOGRAPH + {0xBA4D, 0x7BD7}, //9438 #CJK UNIFIED IDEOGRAPH + {0xBA4E, 0x7BD8}, //9439 #CJK UNIFIED IDEOGRAPH + {0xBA4F, 0x7BDB}, //9440 #CJK UNIFIED IDEOGRAPH + {0xBA50, 0x7BDC}, //9441 #CJK UNIFIED IDEOGRAPH + {0xBA51, 0x7BDE}, //9442 #CJK UNIFIED IDEOGRAPH + {0xBA52, 0x7BDF}, //9443 #CJK UNIFIED IDEOGRAPH + {0xBA53, 0x7BE0}, //9444 #CJK UNIFIED IDEOGRAPH + {0xBA54, 0x7BE2}, //9445 #CJK UNIFIED IDEOGRAPH + {0xBA55, 0x7BE3}, //9446 #CJK UNIFIED IDEOGRAPH + {0xBA56, 0x7BE4}, //9447 #CJK UNIFIED IDEOGRAPH + {0xBA57, 0x7BE7}, //9448 #CJK UNIFIED IDEOGRAPH + {0xBA58, 0x7BE8}, //9449 #CJK UNIFIED IDEOGRAPH + {0xBA59, 0x7BE9}, //9450 #CJK UNIFIED IDEOGRAPH + {0xBA5A, 0x7BEB}, //9451 #CJK UNIFIED IDEOGRAPH + {0xBA5B, 0x7BEC}, //9452 #CJK UNIFIED IDEOGRAPH + {0xBA5C, 0x7BED}, //9453 #CJK UNIFIED IDEOGRAPH + {0xBA5D, 0x7BEF}, //9454 #CJK UNIFIED IDEOGRAPH + {0xBA5E, 0x7BF0}, //9455 #CJK UNIFIED IDEOGRAPH + {0xBA5F, 0x7BF2}, //9456 #CJK UNIFIED IDEOGRAPH + {0xBA60, 0x7BF3}, //9457 #CJK UNIFIED IDEOGRAPH + {0xBA61, 0x7BF4}, //9458 #CJK UNIFIED IDEOGRAPH + {0xBA62, 0x7BF5}, //9459 #CJK UNIFIED IDEOGRAPH + {0xBA63, 0x7BF6}, //9460 #CJK UNIFIED IDEOGRAPH + {0xBA64, 0x7BF8}, //9461 #CJK UNIFIED IDEOGRAPH + {0xBA65, 0x7BF9}, //9462 #CJK UNIFIED IDEOGRAPH + {0xBA66, 0x7BFA}, //9463 #CJK UNIFIED IDEOGRAPH + {0xBA67, 0x7BFB}, //9464 #CJK UNIFIED IDEOGRAPH + {0xBA68, 0x7BFD}, //9465 #CJK UNIFIED IDEOGRAPH + {0xBA69, 0x7BFF}, //9466 #CJK UNIFIED IDEOGRAPH + {0xBA6A, 0x7C00}, //9467 #CJK UNIFIED IDEOGRAPH + {0xBA6B, 0x7C01}, //9468 #CJK UNIFIED IDEOGRAPH + {0xBA6C, 0x7C02}, //9469 #CJK UNIFIED IDEOGRAPH + {0xBA6D, 0x7C03}, //9470 #CJK UNIFIED IDEOGRAPH + {0xBA6E, 0x7C04}, //9471 #CJK UNIFIED IDEOGRAPH + {0xBA6F, 0x7C05}, //9472 #CJK UNIFIED IDEOGRAPH + {0xBA70, 0x7C06}, //9473 #CJK UNIFIED IDEOGRAPH + {0xBA71, 0x7C08}, //9474 #CJK UNIFIED IDEOGRAPH + {0xBA72, 0x7C09}, //9475 #CJK UNIFIED IDEOGRAPH + {0xBA73, 0x7C0A}, //9476 #CJK UNIFIED IDEOGRAPH + {0xBA74, 0x7C0D}, //9477 #CJK UNIFIED IDEOGRAPH + {0xBA75, 0x7C0E}, //9478 #CJK UNIFIED IDEOGRAPH + {0xBA76, 0x7C10}, //9479 #CJK UNIFIED IDEOGRAPH + {0xBA77, 0x7C11}, //9480 #CJK UNIFIED IDEOGRAPH + {0xBA78, 0x7C12}, //9481 #CJK UNIFIED IDEOGRAPH + {0xBA79, 0x7C13}, //9482 #CJK UNIFIED IDEOGRAPH + {0xBA7A, 0x7C14}, //9483 #CJK UNIFIED IDEOGRAPH + {0xBA7B, 0x7C15}, //9484 #CJK UNIFIED IDEOGRAPH + {0xBA7C, 0x7C17}, //9485 #CJK UNIFIED IDEOGRAPH + {0xBA7D, 0x7C18}, //9486 #CJK UNIFIED IDEOGRAPH + {0xBA7E, 0x7C19}, //9487 #CJK UNIFIED IDEOGRAPH + {0xBA80, 0x7C1A}, //9488 #CJK UNIFIED IDEOGRAPH + {0xBA81, 0x7C1B}, //9489 #CJK UNIFIED IDEOGRAPH + {0xBA82, 0x7C1C}, //9490 #CJK UNIFIED IDEOGRAPH + {0xBA83, 0x7C1D}, //9491 #CJK UNIFIED IDEOGRAPH + {0xBA84, 0x7C1E}, //9492 #CJK UNIFIED IDEOGRAPH + {0xBA85, 0x7C20}, //9493 #CJK UNIFIED IDEOGRAPH + {0xBA86, 0x7C21}, //9494 #CJK UNIFIED IDEOGRAPH + {0xBA87, 0x7C22}, //9495 #CJK UNIFIED IDEOGRAPH + {0xBA88, 0x7C23}, //9496 #CJK UNIFIED IDEOGRAPH + {0xBA89, 0x7C24}, //9497 #CJK UNIFIED IDEOGRAPH + {0xBA8A, 0x7C25}, //9498 #CJK UNIFIED IDEOGRAPH + {0xBA8B, 0x7C28}, //9499 #CJK UNIFIED IDEOGRAPH + {0xBA8C, 0x7C29}, //9500 #CJK UNIFIED IDEOGRAPH + {0xBA8D, 0x7C2B}, //9501 #CJK UNIFIED IDEOGRAPH + {0xBA8E, 0x7C2C}, //9502 #CJK UNIFIED IDEOGRAPH + {0xBA8F, 0x7C2D}, //9503 #CJK UNIFIED IDEOGRAPH + {0xBA90, 0x7C2E}, //9504 #CJK UNIFIED IDEOGRAPH + {0xBA91, 0x7C2F}, //9505 #CJK UNIFIED IDEOGRAPH + {0xBA92, 0x7C30}, //9506 #CJK UNIFIED IDEOGRAPH + {0xBA93, 0x7C31}, //9507 #CJK UNIFIED IDEOGRAPH + {0xBA94, 0x7C32}, //9508 #CJK UNIFIED IDEOGRAPH + {0xBA95, 0x7C33}, //9509 #CJK UNIFIED IDEOGRAPH + {0xBA96, 0x7C34}, //9510 #CJK UNIFIED IDEOGRAPH + {0xBA97, 0x7C35}, //9511 #CJK UNIFIED IDEOGRAPH + {0xBA98, 0x7C36}, //9512 #CJK UNIFIED IDEOGRAPH + {0xBA99, 0x7C37}, //9513 #CJK UNIFIED IDEOGRAPH + {0xBA9A, 0x7C39}, //9514 #CJK UNIFIED IDEOGRAPH + {0xBA9B, 0x7C3A}, //9515 #CJK UNIFIED IDEOGRAPH + {0xBA9C, 0x7C3B}, //9516 #CJK UNIFIED IDEOGRAPH + {0xBA9D, 0x7C3C}, //9517 #CJK UNIFIED IDEOGRAPH + {0xBA9E, 0x7C3D}, //9518 #CJK UNIFIED IDEOGRAPH + {0xBA9F, 0x7C3E}, //9519 #CJK UNIFIED IDEOGRAPH + {0xBAA0, 0x7C42}, //9520 #CJK UNIFIED IDEOGRAPH + {0xBAA1, 0x9AB8}, //9521 #CJK UNIFIED IDEOGRAPH + {0xBAA2, 0x5B69}, //9522 #CJK UNIFIED IDEOGRAPH + {0xBAA3, 0x6D77}, //9523 #CJK UNIFIED IDEOGRAPH + {0xBAA4, 0x6C26}, //9524 #CJK UNIFIED IDEOGRAPH + {0xBAA5, 0x4EA5}, //9525 #CJK UNIFIED IDEOGRAPH + {0xBAA6, 0x5BB3}, //9526 #CJK UNIFIED IDEOGRAPH + {0xBAA7, 0x9A87}, //9527 #CJK UNIFIED IDEOGRAPH + {0xBAA8, 0x9163}, //9528 #CJK UNIFIED IDEOGRAPH + {0xBAA9, 0x61A8}, //9529 #CJK UNIFIED IDEOGRAPH + {0xBAAA, 0x90AF}, //9530 #CJK UNIFIED IDEOGRAPH + {0xBAAB, 0x97E9}, //9531 #CJK UNIFIED IDEOGRAPH + {0xBAAC, 0x542B}, //9532 #CJK UNIFIED IDEOGRAPH + {0xBAAD, 0x6DB5}, //9533 #CJK UNIFIED IDEOGRAPH + {0xBAAE, 0x5BD2}, //9534 #CJK UNIFIED IDEOGRAPH + {0xBAAF, 0x51FD}, //9535 #CJK UNIFIED IDEOGRAPH + {0xBAB0, 0x558A}, //9536 #CJK UNIFIED IDEOGRAPH + {0xBAB1, 0x7F55}, //9537 #CJK UNIFIED IDEOGRAPH + {0xBAB2, 0x7FF0}, //9538 #CJK UNIFIED IDEOGRAPH + {0xBAB3, 0x64BC}, //9539 #CJK UNIFIED IDEOGRAPH + {0xBAB4, 0x634D}, //9540 #CJK UNIFIED IDEOGRAPH + {0xBAB5, 0x65F1}, //9541 #CJK UNIFIED IDEOGRAPH + {0xBAB6, 0x61BE}, //9542 #CJK UNIFIED IDEOGRAPH + {0xBAB7, 0x608D}, //9543 #CJK UNIFIED IDEOGRAPH + {0xBAB8, 0x710A}, //9544 #CJK UNIFIED IDEOGRAPH + {0xBAB9, 0x6C57}, //9545 #CJK UNIFIED IDEOGRAPH + {0xBABA, 0x6C49}, //9546 #CJK UNIFIED IDEOGRAPH + {0xBABB, 0x592F}, //9547 #CJK UNIFIED IDEOGRAPH + {0xBABC, 0x676D}, //9548 #CJK UNIFIED IDEOGRAPH + {0xBABD, 0x822A}, //9549 #CJK UNIFIED IDEOGRAPH + {0xBABE, 0x58D5}, //9550 #CJK UNIFIED IDEOGRAPH + {0xBABF, 0x568E}, //9551 #CJK UNIFIED IDEOGRAPH + {0xBAC0, 0x8C6A}, //9552 #CJK UNIFIED IDEOGRAPH + {0xBAC1, 0x6BEB}, //9553 #CJK UNIFIED IDEOGRAPH + {0xBAC2, 0x90DD}, //9554 #CJK UNIFIED IDEOGRAPH + {0xBAC3, 0x597D}, //9555 #CJK UNIFIED IDEOGRAPH + {0xBAC4, 0x8017}, //9556 #CJK UNIFIED IDEOGRAPH + {0xBAC5, 0x53F7}, //9557 #CJK UNIFIED IDEOGRAPH + {0xBAC6, 0x6D69}, //9558 #CJK UNIFIED IDEOGRAPH + {0xBAC7, 0x5475}, //9559 #CJK UNIFIED IDEOGRAPH + {0xBAC8, 0x559D}, //9560 #CJK UNIFIED IDEOGRAPH + {0xBAC9, 0x8377}, //9561 #CJK UNIFIED IDEOGRAPH + {0xBACA, 0x83CF}, //9562 #CJK UNIFIED IDEOGRAPH + {0xBACB, 0x6838}, //9563 #CJK UNIFIED IDEOGRAPH + {0xBACC, 0x79BE}, //9564 #CJK UNIFIED IDEOGRAPH + {0xBACD, 0x548C}, //9565 #CJK UNIFIED IDEOGRAPH + {0xBACE, 0x4F55}, //9566 #CJK UNIFIED IDEOGRAPH + {0xBACF, 0x5408}, //9567 #CJK UNIFIED IDEOGRAPH + {0xBAD0, 0x76D2}, //9568 #CJK UNIFIED IDEOGRAPH + {0xBAD1, 0x8C89}, //9569 #CJK UNIFIED IDEOGRAPH + {0xBAD2, 0x9602}, //9570 #CJK UNIFIED IDEOGRAPH + {0xBAD3, 0x6CB3}, //9571 #CJK UNIFIED IDEOGRAPH + {0xBAD4, 0x6DB8}, //9572 #CJK UNIFIED IDEOGRAPH + {0xBAD5, 0x8D6B}, //9573 #CJK UNIFIED IDEOGRAPH + {0xBAD6, 0x8910}, //9574 #CJK UNIFIED IDEOGRAPH + {0xBAD7, 0x9E64}, //9575 #CJK UNIFIED IDEOGRAPH + {0xBAD8, 0x8D3A}, //9576 #CJK UNIFIED IDEOGRAPH + {0xBAD9, 0x563F}, //9577 #CJK UNIFIED IDEOGRAPH + {0xBADA, 0x9ED1}, //9578 #CJK UNIFIED IDEOGRAPH + {0xBADB, 0x75D5}, //9579 #CJK UNIFIED IDEOGRAPH + {0xBADC, 0x5F88}, //9580 #CJK UNIFIED IDEOGRAPH + {0xBADD, 0x72E0}, //9581 #CJK UNIFIED IDEOGRAPH + {0xBADE, 0x6068}, //9582 #CJK UNIFIED IDEOGRAPH + {0xBADF, 0x54FC}, //9583 #CJK UNIFIED IDEOGRAPH + {0xBAE0, 0x4EA8}, //9584 #CJK UNIFIED IDEOGRAPH + {0xBAE1, 0x6A2A}, //9585 #CJK UNIFIED IDEOGRAPH + {0xBAE2, 0x8861}, //9586 #CJK UNIFIED IDEOGRAPH + {0xBAE3, 0x6052}, //9587 #CJK UNIFIED IDEOGRAPH + {0xBAE4, 0x8F70}, //9588 #CJK UNIFIED IDEOGRAPH + {0xBAE5, 0x54C4}, //9589 #CJK UNIFIED IDEOGRAPH + {0xBAE6, 0x70D8}, //9590 #CJK UNIFIED IDEOGRAPH + {0xBAE7, 0x8679}, //9591 #CJK UNIFIED IDEOGRAPH + {0xBAE8, 0x9E3F}, //9592 #CJK UNIFIED IDEOGRAPH + {0xBAE9, 0x6D2A}, //9593 #CJK UNIFIED IDEOGRAPH + {0xBAEA, 0x5B8F}, //9594 #CJK UNIFIED IDEOGRAPH + {0xBAEB, 0x5F18}, //9595 #CJK UNIFIED IDEOGRAPH + {0xBAEC, 0x7EA2}, //9596 #CJK UNIFIED IDEOGRAPH + {0xBAED, 0x5589}, //9597 #CJK UNIFIED IDEOGRAPH + {0xBAEE, 0x4FAF}, //9598 #CJK UNIFIED IDEOGRAPH + {0xBAEF, 0x7334}, //9599 #CJK UNIFIED IDEOGRAPH + {0xBAF0, 0x543C}, //9600 #CJK UNIFIED IDEOGRAPH + {0xBAF1, 0x539A}, //9601 #CJK UNIFIED IDEOGRAPH + {0xBAF2, 0x5019}, //9602 #CJK UNIFIED IDEOGRAPH + {0xBAF3, 0x540E}, //9603 #CJK UNIFIED IDEOGRAPH + {0xBAF4, 0x547C}, //9604 #CJK UNIFIED IDEOGRAPH + {0xBAF5, 0x4E4E}, //9605 #CJK UNIFIED IDEOGRAPH + {0xBAF6, 0x5FFD}, //9606 #CJK UNIFIED IDEOGRAPH + {0xBAF7, 0x745A}, //9607 #CJK UNIFIED IDEOGRAPH + {0xBAF8, 0x58F6}, //9608 #CJK UNIFIED IDEOGRAPH + {0xBAF9, 0x846B}, //9609 #CJK UNIFIED IDEOGRAPH + {0xBAFA, 0x80E1}, //9610 #CJK UNIFIED IDEOGRAPH + {0xBAFB, 0x8774}, //9611 #CJK UNIFIED IDEOGRAPH + {0xBAFC, 0x72D0}, //9612 #CJK UNIFIED IDEOGRAPH + {0xBAFD, 0x7CCA}, //9613 #CJK UNIFIED IDEOGRAPH + {0xBAFE, 0x6E56}, //9614 #CJK UNIFIED IDEOGRAPH + {0xBB40, 0x7C43}, //9615 #CJK UNIFIED IDEOGRAPH + {0xBB41, 0x7C44}, //9616 #CJK UNIFIED IDEOGRAPH + {0xBB42, 0x7C45}, //9617 #CJK UNIFIED IDEOGRAPH + {0xBB43, 0x7C46}, //9618 #CJK UNIFIED IDEOGRAPH + {0xBB44, 0x7C47}, //9619 #CJK UNIFIED IDEOGRAPH + {0xBB45, 0x7C48}, //9620 #CJK UNIFIED IDEOGRAPH + {0xBB46, 0x7C49}, //9621 #CJK UNIFIED IDEOGRAPH + {0xBB47, 0x7C4A}, //9622 #CJK UNIFIED IDEOGRAPH + {0xBB48, 0x7C4B}, //9623 #CJK UNIFIED IDEOGRAPH + {0xBB49, 0x7C4C}, //9624 #CJK UNIFIED IDEOGRAPH + {0xBB4A, 0x7C4E}, //9625 #CJK UNIFIED IDEOGRAPH + {0xBB4B, 0x7C4F}, //9626 #CJK UNIFIED IDEOGRAPH + {0xBB4C, 0x7C50}, //9627 #CJK UNIFIED IDEOGRAPH + {0xBB4D, 0x7C51}, //9628 #CJK UNIFIED IDEOGRAPH + {0xBB4E, 0x7C52}, //9629 #CJK UNIFIED IDEOGRAPH + {0xBB4F, 0x7C53}, //9630 #CJK UNIFIED IDEOGRAPH + {0xBB50, 0x7C54}, //9631 #CJK UNIFIED IDEOGRAPH + {0xBB51, 0x7C55}, //9632 #CJK UNIFIED IDEOGRAPH + {0xBB52, 0x7C56}, //9633 #CJK UNIFIED IDEOGRAPH + {0xBB53, 0x7C57}, //9634 #CJK UNIFIED IDEOGRAPH + {0xBB54, 0x7C58}, //9635 #CJK UNIFIED IDEOGRAPH + {0xBB55, 0x7C59}, //9636 #CJK UNIFIED IDEOGRAPH + {0xBB56, 0x7C5A}, //9637 #CJK UNIFIED IDEOGRAPH + {0xBB57, 0x7C5B}, //9638 #CJK UNIFIED IDEOGRAPH + {0xBB58, 0x7C5C}, //9639 #CJK UNIFIED IDEOGRAPH + {0xBB59, 0x7C5D}, //9640 #CJK UNIFIED IDEOGRAPH + {0xBB5A, 0x7C5E}, //9641 #CJK UNIFIED IDEOGRAPH + {0xBB5B, 0x7C5F}, //9642 #CJK UNIFIED IDEOGRAPH + {0xBB5C, 0x7C60}, //9643 #CJK UNIFIED IDEOGRAPH + {0xBB5D, 0x7C61}, //9644 #CJK UNIFIED IDEOGRAPH + {0xBB5E, 0x7C62}, //9645 #CJK UNIFIED IDEOGRAPH + {0xBB5F, 0x7C63}, //9646 #CJK UNIFIED IDEOGRAPH + {0xBB60, 0x7C64}, //9647 #CJK UNIFIED IDEOGRAPH + {0xBB61, 0x7C65}, //9648 #CJK UNIFIED IDEOGRAPH + {0xBB62, 0x7C66}, //9649 #CJK UNIFIED IDEOGRAPH + {0xBB63, 0x7C67}, //9650 #CJK UNIFIED IDEOGRAPH + {0xBB64, 0x7C68}, //9651 #CJK UNIFIED IDEOGRAPH + {0xBB65, 0x7C69}, //9652 #CJK UNIFIED IDEOGRAPH + {0xBB66, 0x7C6A}, //9653 #CJK UNIFIED IDEOGRAPH + {0xBB67, 0x7C6B}, //9654 #CJK UNIFIED IDEOGRAPH + {0xBB68, 0x7C6C}, //9655 #CJK UNIFIED IDEOGRAPH + {0xBB69, 0x7C6D}, //9656 #CJK UNIFIED IDEOGRAPH + {0xBB6A, 0x7C6E}, //9657 #CJK UNIFIED IDEOGRAPH + {0xBB6B, 0x7C6F}, //9658 #CJK UNIFIED IDEOGRAPH + {0xBB6C, 0x7C70}, //9659 #CJK UNIFIED IDEOGRAPH + {0xBB6D, 0x7C71}, //9660 #CJK UNIFIED IDEOGRAPH + {0xBB6E, 0x7C72}, //9661 #CJK UNIFIED IDEOGRAPH + {0xBB6F, 0x7C75}, //9662 #CJK UNIFIED IDEOGRAPH + {0xBB70, 0x7C76}, //9663 #CJK UNIFIED IDEOGRAPH + {0xBB71, 0x7C77}, //9664 #CJK UNIFIED IDEOGRAPH + {0xBB72, 0x7C78}, //9665 #CJK UNIFIED IDEOGRAPH + {0xBB73, 0x7C79}, //9666 #CJK UNIFIED IDEOGRAPH + {0xBB74, 0x7C7A}, //9667 #CJK UNIFIED IDEOGRAPH + {0xBB75, 0x7C7E}, //9668 #CJK UNIFIED IDEOGRAPH + {0xBB76, 0x7C7F}, //9669 #CJK UNIFIED IDEOGRAPH + {0xBB77, 0x7C80}, //9670 #CJK UNIFIED IDEOGRAPH + {0xBB78, 0x7C81}, //9671 #CJK UNIFIED IDEOGRAPH + {0xBB79, 0x7C82}, //9672 #CJK UNIFIED IDEOGRAPH + {0xBB7A, 0x7C83}, //9673 #CJK UNIFIED IDEOGRAPH + {0xBB7B, 0x7C84}, //9674 #CJK UNIFIED IDEOGRAPH + {0xBB7C, 0x7C85}, //9675 #CJK UNIFIED IDEOGRAPH + {0xBB7D, 0x7C86}, //9676 #CJK UNIFIED IDEOGRAPH + {0xBB7E, 0x7C87}, //9677 #CJK UNIFIED IDEOGRAPH + {0xBB80, 0x7C88}, //9678 #CJK UNIFIED IDEOGRAPH + {0xBB81, 0x7C8A}, //9679 #CJK UNIFIED IDEOGRAPH + {0xBB82, 0x7C8B}, //9680 #CJK UNIFIED IDEOGRAPH + {0xBB83, 0x7C8C}, //9681 #CJK UNIFIED IDEOGRAPH + {0xBB84, 0x7C8D}, //9682 #CJK UNIFIED IDEOGRAPH + {0xBB85, 0x7C8E}, //9683 #CJK UNIFIED IDEOGRAPH + {0xBB86, 0x7C8F}, //9684 #CJK UNIFIED IDEOGRAPH + {0xBB87, 0x7C90}, //9685 #CJK UNIFIED IDEOGRAPH + {0xBB88, 0x7C93}, //9686 #CJK UNIFIED IDEOGRAPH + {0xBB89, 0x7C94}, //9687 #CJK UNIFIED IDEOGRAPH + {0xBB8A, 0x7C96}, //9688 #CJK UNIFIED IDEOGRAPH + {0xBB8B, 0x7C99}, //9689 #CJK UNIFIED IDEOGRAPH + {0xBB8C, 0x7C9A}, //9690 #CJK UNIFIED IDEOGRAPH + {0xBB8D, 0x7C9B}, //9691 #CJK UNIFIED IDEOGRAPH + {0xBB8E, 0x7CA0}, //9692 #CJK UNIFIED IDEOGRAPH + {0xBB8F, 0x7CA1}, //9693 #CJK UNIFIED IDEOGRAPH + {0xBB90, 0x7CA3}, //9694 #CJK UNIFIED IDEOGRAPH + {0xBB91, 0x7CA6}, //9695 #CJK UNIFIED IDEOGRAPH + {0xBB92, 0x7CA7}, //9696 #CJK UNIFIED IDEOGRAPH + {0xBB93, 0x7CA8}, //9697 #CJK UNIFIED IDEOGRAPH + {0xBB94, 0x7CA9}, //9698 #CJK UNIFIED IDEOGRAPH + {0xBB95, 0x7CAB}, //9699 #CJK UNIFIED IDEOGRAPH + {0xBB96, 0x7CAC}, //9700 #CJK UNIFIED IDEOGRAPH + {0xBB97, 0x7CAD}, //9701 #CJK UNIFIED IDEOGRAPH + {0xBB98, 0x7CAF}, //9702 #CJK UNIFIED IDEOGRAPH + {0xBB99, 0x7CB0}, //9703 #CJK UNIFIED IDEOGRAPH + {0xBB9A, 0x7CB4}, //9704 #CJK UNIFIED IDEOGRAPH + {0xBB9B, 0x7CB5}, //9705 #CJK UNIFIED IDEOGRAPH + {0xBB9C, 0x7CB6}, //9706 #CJK UNIFIED IDEOGRAPH + {0xBB9D, 0x7CB7}, //9707 #CJK UNIFIED IDEOGRAPH + {0xBB9E, 0x7CB8}, //9708 #CJK UNIFIED IDEOGRAPH + {0xBB9F, 0x7CBA}, //9709 #CJK UNIFIED IDEOGRAPH + {0xBBA0, 0x7CBB}, //9710 #CJK UNIFIED IDEOGRAPH + {0xBBA1, 0x5F27}, //9711 #CJK UNIFIED IDEOGRAPH + {0xBBA2, 0x864E}, //9712 #CJK UNIFIED IDEOGRAPH + {0xBBA3, 0x552C}, //9713 #CJK UNIFIED IDEOGRAPH + {0xBBA4, 0x62A4}, //9714 #CJK UNIFIED IDEOGRAPH + {0xBBA5, 0x4E92}, //9715 #CJK UNIFIED IDEOGRAPH + {0xBBA6, 0x6CAA}, //9716 #CJK UNIFIED IDEOGRAPH + {0xBBA7, 0x6237}, //9717 #CJK UNIFIED IDEOGRAPH + {0xBBA8, 0x82B1}, //9718 #CJK UNIFIED IDEOGRAPH + {0xBBA9, 0x54D7}, //9719 #CJK UNIFIED IDEOGRAPH + {0xBBAA, 0x534E}, //9720 #CJK UNIFIED IDEOGRAPH + {0xBBAB, 0x733E}, //9721 #CJK UNIFIED IDEOGRAPH + {0xBBAC, 0x6ED1}, //9722 #CJK UNIFIED IDEOGRAPH + {0xBBAD, 0x753B}, //9723 #CJK UNIFIED IDEOGRAPH + {0xBBAE, 0x5212}, //9724 #CJK UNIFIED IDEOGRAPH + {0xBBAF, 0x5316}, //9725 #CJK UNIFIED IDEOGRAPH + {0xBBB0, 0x8BDD}, //9726 #CJK UNIFIED IDEOGRAPH + {0xBBB1, 0x69D0}, //9727 #CJK UNIFIED IDEOGRAPH + {0xBBB2, 0x5F8A}, //9728 #CJK UNIFIED IDEOGRAPH + {0xBBB3, 0x6000}, //9729 #CJK UNIFIED IDEOGRAPH + {0xBBB4, 0x6DEE}, //9730 #CJK UNIFIED IDEOGRAPH + {0xBBB5, 0x574F}, //9731 #CJK UNIFIED IDEOGRAPH + {0xBBB6, 0x6B22}, //9732 #CJK UNIFIED IDEOGRAPH + {0xBBB7, 0x73AF}, //9733 #CJK UNIFIED IDEOGRAPH + {0xBBB8, 0x6853}, //9734 #CJK UNIFIED IDEOGRAPH + {0xBBB9, 0x8FD8}, //9735 #CJK UNIFIED IDEOGRAPH + {0xBBBA, 0x7F13}, //9736 #CJK UNIFIED IDEOGRAPH + {0xBBBB, 0x6362}, //9737 #CJK UNIFIED IDEOGRAPH + {0xBBBC, 0x60A3}, //9738 #CJK UNIFIED IDEOGRAPH + {0xBBBD, 0x5524}, //9739 #CJK UNIFIED IDEOGRAPH + {0xBBBE, 0x75EA}, //9740 #CJK UNIFIED IDEOGRAPH + {0xBBBF, 0x8C62}, //9741 #CJK UNIFIED IDEOGRAPH + {0xBBC0, 0x7115}, //9742 #CJK UNIFIED IDEOGRAPH + {0xBBC1, 0x6DA3}, //9743 #CJK UNIFIED IDEOGRAPH + {0xBBC2, 0x5BA6}, //9744 #CJK UNIFIED IDEOGRAPH + {0xBBC3, 0x5E7B}, //9745 #CJK UNIFIED IDEOGRAPH + {0xBBC4, 0x8352}, //9746 #CJK UNIFIED IDEOGRAPH + {0xBBC5, 0x614C}, //9747 #CJK UNIFIED IDEOGRAPH + {0xBBC6, 0x9EC4}, //9748 #CJK UNIFIED IDEOGRAPH + {0xBBC7, 0x78FA}, //9749 #CJK UNIFIED IDEOGRAPH + {0xBBC8, 0x8757}, //9750 #CJK UNIFIED IDEOGRAPH + {0xBBC9, 0x7C27}, //9751 #CJK UNIFIED IDEOGRAPH + {0xBBCA, 0x7687}, //9752 #CJK UNIFIED IDEOGRAPH + {0xBBCB, 0x51F0}, //9753 #CJK UNIFIED IDEOGRAPH + {0xBBCC, 0x60F6}, //9754 #CJK UNIFIED IDEOGRAPH + {0xBBCD, 0x714C}, //9755 #CJK UNIFIED IDEOGRAPH + {0xBBCE, 0x6643}, //9756 #CJK UNIFIED IDEOGRAPH + {0xBBCF, 0x5E4C}, //9757 #CJK UNIFIED IDEOGRAPH + {0xBBD0, 0x604D}, //9758 #CJK UNIFIED IDEOGRAPH + {0xBBD1, 0x8C0E}, //9759 #CJK UNIFIED IDEOGRAPH + {0xBBD2, 0x7070}, //9760 #CJK UNIFIED IDEOGRAPH + {0xBBD3, 0x6325}, //9761 #CJK UNIFIED IDEOGRAPH + {0xBBD4, 0x8F89}, //9762 #CJK UNIFIED IDEOGRAPH + {0xBBD5, 0x5FBD}, //9763 #CJK UNIFIED IDEOGRAPH + {0xBBD6, 0x6062}, //9764 #CJK UNIFIED IDEOGRAPH + {0xBBD7, 0x86D4}, //9765 #CJK UNIFIED IDEOGRAPH + {0xBBD8, 0x56DE}, //9766 #CJK UNIFIED IDEOGRAPH + {0xBBD9, 0x6BC1}, //9767 #CJK UNIFIED IDEOGRAPH + {0xBBDA, 0x6094}, //9768 #CJK UNIFIED IDEOGRAPH + {0xBBDB, 0x6167}, //9769 #CJK UNIFIED IDEOGRAPH + {0xBBDC, 0x5349}, //9770 #CJK UNIFIED IDEOGRAPH + {0xBBDD, 0x60E0}, //9771 #CJK UNIFIED IDEOGRAPH + {0xBBDE, 0x6666}, //9772 #CJK UNIFIED IDEOGRAPH + {0xBBDF, 0x8D3F}, //9773 #CJK UNIFIED IDEOGRAPH + {0xBBE0, 0x79FD}, //9774 #CJK UNIFIED IDEOGRAPH + {0xBBE1, 0x4F1A}, //9775 #CJK UNIFIED IDEOGRAPH + {0xBBE2, 0x70E9}, //9776 #CJK UNIFIED IDEOGRAPH + {0xBBE3, 0x6C47}, //9777 #CJK UNIFIED IDEOGRAPH + {0xBBE4, 0x8BB3}, //9778 #CJK UNIFIED IDEOGRAPH + {0xBBE5, 0x8BF2}, //9779 #CJK UNIFIED IDEOGRAPH + {0xBBE6, 0x7ED8}, //9780 #CJK UNIFIED IDEOGRAPH + {0xBBE7, 0x8364}, //9781 #CJK UNIFIED IDEOGRAPH + {0xBBE8, 0x660F}, //9782 #CJK UNIFIED IDEOGRAPH + {0xBBE9, 0x5A5A}, //9783 #CJK UNIFIED IDEOGRAPH + {0xBBEA, 0x9B42}, //9784 #CJK UNIFIED IDEOGRAPH + {0xBBEB, 0x6D51}, //9785 #CJK UNIFIED IDEOGRAPH + {0xBBEC, 0x6DF7}, //9786 #CJK UNIFIED IDEOGRAPH + {0xBBED, 0x8C41}, //9787 #CJK UNIFIED IDEOGRAPH + {0xBBEE, 0x6D3B}, //9788 #CJK UNIFIED IDEOGRAPH + {0xBBEF, 0x4F19}, //9789 #CJK UNIFIED IDEOGRAPH + {0xBBF0, 0x706B}, //9790 #CJK UNIFIED IDEOGRAPH + {0xBBF1, 0x83B7}, //9791 #CJK UNIFIED IDEOGRAPH + {0xBBF2, 0x6216}, //9792 #CJK UNIFIED IDEOGRAPH + {0xBBF3, 0x60D1}, //9793 #CJK UNIFIED IDEOGRAPH + {0xBBF4, 0x970D}, //9794 #CJK UNIFIED IDEOGRAPH + {0xBBF5, 0x8D27}, //9795 #CJK UNIFIED IDEOGRAPH + {0xBBF6, 0x7978}, //9796 #CJK UNIFIED IDEOGRAPH + {0xBBF7, 0x51FB}, //9797 #CJK UNIFIED IDEOGRAPH + {0xBBF8, 0x573E}, //9798 #CJK UNIFIED IDEOGRAPH + {0xBBF9, 0x57FA}, //9799 #CJK UNIFIED IDEOGRAPH + {0xBBFA, 0x673A}, //9800 #CJK UNIFIED IDEOGRAPH + {0xBBFB, 0x7578}, //9801 #CJK UNIFIED IDEOGRAPH + {0xBBFC, 0x7A3D}, //9802 #CJK UNIFIED IDEOGRAPH + {0xBBFD, 0x79EF}, //9803 #CJK UNIFIED IDEOGRAPH + {0xBBFE, 0x7B95}, //9804 #CJK UNIFIED IDEOGRAPH + {0xBC40, 0x7CBF}, //9805 #CJK UNIFIED IDEOGRAPH + {0xBC41, 0x7CC0}, //9806 #CJK UNIFIED IDEOGRAPH + {0xBC42, 0x7CC2}, //9807 #CJK UNIFIED IDEOGRAPH + {0xBC43, 0x7CC3}, //9808 #CJK UNIFIED IDEOGRAPH + {0xBC44, 0x7CC4}, //9809 #CJK UNIFIED IDEOGRAPH + {0xBC45, 0x7CC6}, //9810 #CJK UNIFIED IDEOGRAPH + {0xBC46, 0x7CC9}, //9811 #CJK UNIFIED IDEOGRAPH + {0xBC47, 0x7CCB}, //9812 #CJK UNIFIED IDEOGRAPH + {0xBC48, 0x7CCE}, //9813 #CJK UNIFIED IDEOGRAPH + {0xBC49, 0x7CCF}, //9814 #CJK UNIFIED IDEOGRAPH + {0xBC4A, 0x7CD0}, //9815 #CJK UNIFIED IDEOGRAPH + {0xBC4B, 0x7CD1}, //9816 #CJK UNIFIED IDEOGRAPH + {0xBC4C, 0x7CD2}, //9817 #CJK UNIFIED IDEOGRAPH + {0xBC4D, 0x7CD3}, //9818 #CJK UNIFIED IDEOGRAPH + {0xBC4E, 0x7CD4}, //9819 #CJK UNIFIED IDEOGRAPH + {0xBC4F, 0x7CD8}, //9820 #CJK UNIFIED IDEOGRAPH + {0xBC50, 0x7CDA}, //9821 #CJK UNIFIED IDEOGRAPH + {0xBC51, 0x7CDB}, //9822 #CJK UNIFIED IDEOGRAPH + {0xBC52, 0x7CDD}, //9823 #CJK UNIFIED IDEOGRAPH + {0xBC53, 0x7CDE}, //9824 #CJK UNIFIED IDEOGRAPH + {0xBC54, 0x7CE1}, //9825 #CJK UNIFIED IDEOGRAPH + {0xBC55, 0x7CE2}, //9826 #CJK UNIFIED IDEOGRAPH + {0xBC56, 0x7CE3}, //9827 #CJK UNIFIED IDEOGRAPH + {0xBC57, 0x7CE4}, //9828 #CJK UNIFIED IDEOGRAPH + {0xBC58, 0x7CE5}, //9829 #CJK UNIFIED IDEOGRAPH + {0xBC59, 0x7CE6}, //9830 #CJK UNIFIED IDEOGRAPH + {0xBC5A, 0x7CE7}, //9831 #CJK UNIFIED IDEOGRAPH + {0xBC5B, 0x7CE9}, //9832 #CJK UNIFIED IDEOGRAPH + {0xBC5C, 0x7CEA}, //9833 #CJK UNIFIED IDEOGRAPH + {0xBC5D, 0x7CEB}, //9834 #CJK UNIFIED IDEOGRAPH + {0xBC5E, 0x7CEC}, //9835 #CJK UNIFIED IDEOGRAPH + {0xBC5F, 0x7CED}, //9836 #CJK UNIFIED IDEOGRAPH + {0xBC60, 0x7CEE}, //9837 #CJK UNIFIED IDEOGRAPH + {0xBC61, 0x7CF0}, //9838 #CJK UNIFIED IDEOGRAPH + {0xBC62, 0x7CF1}, //9839 #CJK UNIFIED IDEOGRAPH + {0xBC63, 0x7CF2}, //9840 #CJK UNIFIED IDEOGRAPH + {0xBC64, 0x7CF3}, //9841 #CJK UNIFIED IDEOGRAPH + {0xBC65, 0x7CF4}, //9842 #CJK UNIFIED IDEOGRAPH + {0xBC66, 0x7CF5}, //9843 #CJK UNIFIED IDEOGRAPH + {0xBC67, 0x7CF6}, //9844 #CJK UNIFIED IDEOGRAPH + {0xBC68, 0x7CF7}, //9845 #CJK UNIFIED IDEOGRAPH + {0xBC69, 0x7CF9}, //9846 #CJK UNIFIED IDEOGRAPH + {0xBC6A, 0x7CFA}, //9847 #CJK UNIFIED IDEOGRAPH + {0xBC6B, 0x7CFC}, //9848 #CJK UNIFIED IDEOGRAPH + {0xBC6C, 0x7CFD}, //9849 #CJK UNIFIED IDEOGRAPH + {0xBC6D, 0x7CFE}, //9850 #CJK UNIFIED IDEOGRAPH + {0xBC6E, 0x7CFF}, //9851 #CJK UNIFIED IDEOGRAPH + {0xBC6F, 0x7D00}, //9852 #CJK UNIFIED IDEOGRAPH + {0xBC70, 0x7D01}, //9853 #CJK UNIFIED IDEOGRAPH + {0xBC71, 0x7D02}, //9854 #CJK UNIFIED IDEOGRAPH + {0xBC72, 0x7D03}, //9855 #CJK UNIFIED IDEOGRAPH + {0xBC73, 0x7D04}, //9856 #CJK UNIFIED IDEOGRAPH + {0xBC74, 0x7D05}, //9857 #CJK UNIFIED IDEOGRAPH + {0xBC75, 0x7D06}, //9858 #CJK UNIFIED IDEOGRAPH + {0xBC76, 0x7D07}, //9859 #CJK UNIFIED IDEOGRAPH + {0xBC77, 0x7D08}, //9860 #CJK UNIFIED IDEOGRAPH + {0xBC78, 0x7D09}, //9861 #CJK UNIFIED IDEOGRAPH + {0xBC79, 0x7D0B}, //9862 #CJK UNIFIED IDEOGRAPH + {0xBC7A, 0x7D0C}, //9863 #CJK UNIFIED IDEOGRAPH + {0xBC7B, 0x7D0D}, //9864 #CJK UNIFIED IDEOGRAPH + {0xBC7C, 0x7D0E}, //9865 #CJK UNIFIED IDEOGRAPH + {0xBC7D, 0x7D0F}, //9866 #CJK UNIFIED IDEOGRAPH + {0xBC7E, 0x7D10}, //9867 #CJK UNIFIED IDEOGRAPH + {0xBC80, 0x7D11}, //9868 #CJK UNIFIED IDEOGRAPH + {0xBC81, 0x7D12}, //9869 #CJK UNIFIED IDEOGRAPH + {0xBC82, 0x7D13}, //9870 #CJK UNIFIED IDEOGRAPH + {0xBC83, 0x7D14}, //9871 #CJK UNIFIED IDEOGRAPH + {0xBC84, 0x7D15}, //9872 #CJK UNIFIED IDEOGRAPH + {0xBC85, 0x7D16}, //9873 #CJK UNIFIED IDEOGRAPH + {0xBC86, 0x7D17}, //9874 #CJK UNIFIED IDEOGRAPH + {0xBC87, 0x7D18}, //9875 #CJK UNIFIED IDEOGRAPH + {0xBC88, 0x7D19}, //9876 #CJK UNIFIED IDEOGRAPH + {0xBC89, 0x7D1A}, //9877 #CJK UNIFIED IDEOGRAPH + {0xBC8A, 0x7D1B}, //9878 #CJK UNIFIED IDEOGRAPH + {0xBC8B, 0x7D1C}, //9879 #CJK UNIFIED IDEOGRAPH + {0xBC8C, 0x7D1D}, //9880 #CJK UNIFIED IDEOGRAPH + {0xBC8D, 0x7D1E}, //9881 #CJK UNIFIED IDEOGRAPH + {0xBC8E, 0x7D1F}, //9882 #CJK UNIFIED IDEOGRAPH + {0xBC8F, 0x7D21}, //9883 #CJK UNIFIED IDEOGRAPH + {0xBC90, 0x7D23}, //9884 #CJK UNIFIED IDEOGRAPH + {0xBC91, 0x7D24}, //9885 #CJK UNIFIED IDEOGRAPH + {0xBC92, 0x7D25}, //9886 #CJK UNIFIED IDEOGRAPH + {0xBC93, 0x7D26}, //9887 #CJK UNIFIED IDEOGRAPH + {0xBC94, 0x7D28}, //9888 #CJK UNIFIED IDEOGRAPH + {0xBC95, 0x7D29}, //9889 #CJK UNIFIED IDEOGRAPH + {0xBC96, 0x7D2A}, //9890 #CJK UNIFIED IDEOGRAPH + {0xBC97, 0x7D2C}, //9891 #CJK UNIFIED IDEOGRAPH + {0xBC98, 0x7D2D}, //9892 #CJK UNIFIED IDEOGRAPH + {0xBC99, 0x7D2E}, //9893 #CJK UNIFIED IDEOGRAPH + {0xBC9A, 0x7D30}, //9894 #CJK UNIFIED IDEOGRAPH + {0xBC9B, 0x7D31}, //9895 #CJK UNIFIED IDEOGRAPH + {0xBC9C, 0x7D32}, //9896 #CJK UNIFIED IDEOGRAPH + {0xBC9D, 0x7D33}, //9897 #CJK UNIFIED IDEOGRAPH + {0xBC9E, 0x7D34}, //9898 #CJK UNIFIED IDEOGRAPH + {0xBC9F, 0x7D35}, //9899 #CJK UNIFIED IDEOGRAPH + {0xBCA0, 0x7D36}, //9900 #CJK UNIFIED IDEOGRAPH + {0xBCA1, 0x808C}, //9901 #CJK UNIFIED IDEOGRAPH + {0xBCA2, 0x9965}, //9902 #CJK UNIFIED IDEOGRAPH + {0xBCA3, 0x8FF9}, //9903 #CJK UNIFIED IDEOGRAPH + {0xBCA4, 0x6FC0}, //9904 #CJK UNIFIED IDEOGRAPH + {0xBCA5, 0x8BA5}, //9905 #CJK UNIFIED IDEOGRAPH + {0xBCA6, 0x9E21}, //9906 #CJK UNIFIED IDEOGRAPH + {0xBCA7, 0x59EC}, //9907 #CJK UNIFIED IDEOGRAPH + {0xBCA8, 0x7EE9}, //9908 #CJK UNIFIED IDEOGRAPH + {0xBCA9, 0x7F09}, //9909 #CJK UNIFIED IDEOGRAPH + {0xBCAA, 0x5409}, //9910 #CJK UNIFIED IDEOGRAPH + {0xBCAB, 0x6781}, //9911 #CJK UNIFIED IDEOGRAPH + {0xBCAC, 0x68D8}, //9912 #CJK UNIFIED IDEOGRAPH + {0xBCAD, 0x8F91}, //9913 #CJK UNIFIED IDEOGRAPH + {0xBCAE, 0x7C4D}, //9914 #CJK UNIFIED IDEOGRAPH + {0xBCAF, 0x96C6}, //9915 #CJK UNIFIED IDEOGRAPH + {0xBCB0, 0x53CA}, //9916 #CJK UNIFIED IDEOGRAPH + {0xBCB1, 0x6025}, //9917 #CJK UNIFIED IDEOGRAPH + {0xBCB2, 0x75BE}, //9918 #CJK UNIFIED IDEOGRAPH + {0xBCB3, 0x6C72}, //9919 #CJK UNIFIED IDEOGRAPH + {0xBCB4, 0x5373}, //9920 #CJK UNIFIED IDEOGRAPH + {0xBCB5, 0x5AC9}, //9921 #CJK UNIFIED IDEOGRAPH + {0xBCB6, 0x7EA7}, //9922 #CJK UNIFIED IDEOGRAPH + {0xBCB7, 0x6324}, //9923 #CJK UNIFIED IDEOGRAPH + {0xBCB8, 0x51E0}, //9924 #CJK UNIFIED IDEOGRAPH + {0xBCB9, 0x810A}, //9925 #CJK UNIFIED IDEOGRAPH + {0xBCBA, 0x5DF1}, //9926 #CJK UNIFIED IDEOGRAPH + {0xBCBB, 0x84DF}, //9927 #CJK UNIFIED IDEOGRAPH + {0xBCBC, 0x6280}, //9928 #CJK UNIFIED IDEOGRAPH + {0xBCBD, 0x5180}, //9929 #CJK UNIFIED IDEOGRAPH + {0xBCBE, 0x5B63}, //9930 #CJK UNIFIED IDEOGRAPH + {0xBCBF, 0x4F0E}, //9931 #CJK UNIFIED IDEOGRAPH + {0xBCC0, 0x796D}, //9932 #CJK UNIFIED IDEOGRAPH + {0xBCC1, 0x5242}, //9933 #CJK UNIFIED IDEOGRAPH + {0xBCC2, 0x60B8}, //9934 #CJK UNIFIED IDEOGRAPH + {0xBCC3, 0x6D4E}, //9935 #CJK UNIFIED IDEOGRAPH + {0xBCC4, 0x5BC4}, //9936 #CJK UNIFIED IDEOGRAPH + {0xBCC5, 0x5BC2}, //9937 #CJK UNIFIED IDEOGRAPH + {0xBCC6, 0x8BA1}, //9938 #CJK UNIFIED IDEOGRAPH + {0xBCC7, 0x8BB0}, //9939 #CJK UNIFIED IDEOGRAPH + {0xBCC8, 0x65E2}, //9940 #CJK UNIFIED IDEOGRAPH + {0xBCC9, 0x5FCC}, //9941 #CJK UNIFIED IDEOGRAPH + {0xBCCA, 0x9645}, //9942 #CJK UNIFIED IDEOGRAPH + {0xBCCB, 0x5993}, //9943 #CJK UNIFIED IDEOGRAPH + {0xBCCC, 0x7EE7}, //9944 #CJK UNIFIED IDEOGRAPH + {0xBCCD, 0x7EAA}, //9945 #CJK UNIFIED IDEOGRAPH + {0xBCCE, 0x5609}, //9946 #CJK UNIFIED IDEOGRAPH + {0xBCCF, 0x67B7}, //9947 #CJK UNIFIED IDEOGRAPH + {0xBCD0, 0x5939}, //9948 #CJK UNIFIED IDEOGRAPH + {0xBCD1, 0x4F73}, //9949 #CJK UNIFIED IDEOGRAPH + {0xBCD2, 0x5BB6}, //9950 #CJK UNIFIED IDEOGRAPH + {0xBCD3, 0x52A0}, //9951 #CJK UNIFIED IDEOGRAPH + {0xBCD4, 0x835A}, //9952 #CJK UNIFIED IDEOGRAPH + {0xBCD5, 0x988A}, //9953 #CJK UNIFIED IDEOGRAPH + {0xBCD6, 0x8D3E}, //9954 #CJK UNIFIED IDEOGRAPH + {0xBCD7, 0x7532}, //9955 #CJK UNIFIED IDEOGRAPH + {0xBCD8, 0x94BE}, //9956 #CJK UNIFIED IDEOGRAPH + {0xBCD9, 0x5047}, //9957 #CJK UNIFIED IDEOGRAPH + {0xBCDA, 0x7A3C}, //9958 #CJK UNIFIED IDEOGRAPH + {0xBCDB, 0x4EF7}, //9959 #CJK UNIFIED IDEOGRAPH + {0xBCDC, 0x67B6}, //9960 #CJK UNIFIED IDEOGRAPH + {0xBCDD, 0x9A7E}, //9961 #CJK UNIFIED IDEOGRAPH + {0xBCDE, 0x5AC1}, //9962 #CJK UNIFIED IDEOGRAPH + {0xBCDF, 0x6B7C}, //9963 #CJK UNIFIED IDEOGRAPH + {0xBCE0, 0x76D1}, //9964 #CJK UNIFIED IDEOGRAPH + {0xBCE1, 0x575A}, //9965 #CJK UNIFIED IDEOGRAPH + {0xBCE2, 0x5C16}, //9966 #CJK UNIFIED IDEOGRAPH + {0xBCE3, 0x7B3A}, //9967 #CJK UNIFIED IDEOGRAPH + {0xBCE4, 0x95F4}, //9968 #CJK UNIFIED IDEOGRAPH + {0xBCE5, 0x714E}, //9969 #CJK UNIFIED IDEOGRAPH + {0xBCE6, 0x517C}, //9970 #CJK UNIFIED IDEOGRAPH + {0xBCE7, 0x80A9}, //9971 #CJK UNIFIED IDEOGRAPH + {0xBCE8, 0x8270}, //9972 #CJK UNIFIED IDEOGRAPH + {0xBCE9, 0x5978}, //9973 #CJK UNIFIED IDEOGRAPH + {0xBCEA, 0x7F04}, //9974 #CJK UNIFIED IDEOGRAPH + {0xBCEB, 0x8327}, //9975 #CJK UNIFIED IDEOGRAPH + {0xBCEC, 0x68C0}, //9976 #CJK UNIFIED IDEOGRAPH + {0xBCED, 0x67EC}, //9977 #CJK UNIFIED IDEOGRAPH + {0xBCEE, 0x78B1}, //9978 #CJK UNIFIED IDEOGRAPH + {0xBCEF, 0x7877}, //9979 #CJK UNIFIED IDEOGRAPH + {0xBCF0, 0x62E3}, //9980 #CJK UNIFIED IDEOGRAPH + {0xBCF1, 0x6361}, //9981 #CJK UNIFIED IDEOGRAPH + {0xBCF2, 0x7B80}, //9982 #CJK UNIFIED IDEOGRAPH + {0xBCF3, 0x4FED}, //9983 #CJK UNIFIED IDEOGRAPH + {0xBCF4, 0x526A}, //9984 #CJK UNIFIED IDEOGRAPH + {0xBCF5, 0x51CF}, //9985 #CJK UNIFIED IDEOGRAPH + {0xBCF6, 0x8350}, //9986 #CJK UNIFIED IDEOGRAPH + {0xBCF7, 0x69DB}, //9987 #CJK UNIFIED IDEOGRAPH + {0xBCF8, 0x9274}, //9988 #CJK UNIFIED IDEOGRAPH + {0xBCF9, 0x8DF5}, //9989 #CJK UNIFIED IDEOGRAPH + {0xBCFA, 0x8D31}, //9990 #CJK UNIFIED IDEOGRAPH + {0xBCFB, 0x89C1}, //9991 #CJK UNIFIED IDEOGRAPH + {0xBCFC, 0x952E}, //9992 #CJK UNIFIED IDEOGRAPH + {0xBCFD, 0x7BAD}, //9993 #CJK UNIFIED IDEOGRAPH + {0xBCFE, 0x4EF6}, //9994 #CJK UNIFIED IDEOGRAPH + {0xBD40, 0x7D37}, //9995 #CJK UNIFIED IDEOGRAPH + {0xBD41, 0x7D38}, //9996 #CJK UNIFIED IDEOGRAPH + {0xBD42, 0x7D39}, //9997 #CJK UNIFIED IDEOGRAPH + {0xBD43, 0x7D3A}, //9998 #CJK UNIFIED IDEOGRAPH + {0xBD44, 0x7D3B}, //9999 #CJK UNIFIED IDEOGRAPH + {0xBD45, 0x7D3C}, //10000 #CJK UNIFIED IDEOGRAPH + {0xBD46, 0x7D3D}, //10001 #CJK UNIFIED IDEOGRAPH + {0xBD47, 0x7D3E}, //10002 #CJK UNIFIED IDEOGRAPH + {0xBD48, 0x7D3F}, //10003 #CJK UNIFIED IDEOGRAPH + {0xBD49, 0x7D40}, //10004 #CJK UNIFIED IDEOGRAPH + {0xBD4A, 0x7D41}, //10005 #CJK UNIFIED IDEOGRAPH + {0xBD4B, 0x7D42}, //10006 #CJK UNIFIED IDEOGRAPH + {0xBD4C, 0x7D43}, //10007 #CJK UNIFIED IDEOGRAPH + {0xBD4D, 0x7D44}, //10008 #CJK UNIFIED IDEOGRAPH + {0xBD4E, 0x7D45}, //10009 #CJK UNIFIED IDEOGRAPH + {0xBD4F, 0x7D46}, //10010 #CJK UNIFIED IDEOGRAPH + {0xBD50, 0x7D47}, //10011 #CJK UNIFIED IDEOGRAPH + {0xBD51, 0x7D48}, //10012 #CJK UNIFIED IDEOGRAPH + {0xBD52, 0x7D49}, //10013 #CJK UNIFIED IDEOGRAPH + {0xBD53, 0x7D4A}, //10014 #CJK UNIFIED IDEOGRAPH + {0xBD54, 0x7D4B}, //10015 #CJK UNIFIED IDEOGRAPH + {0xBD55, 0x7D4C}, //10016 #CJK UNIFIED IDEOGRAPH + {0xBD56, 0x7D4D}, //10017 #CJK UNIFIED IDEOGRAPH + {0xBD57, 0x7D4E}, //10018 #CJK UNIFIED IDEOGRAPH + {0xBD58, 0x7D4F}, //10019 #CJK UNIFIED IDEOGRAPH + {0xBD59, 0x7D50}, //10020 #CJK UNIFIED IDEOGRAPH + {0xBD5A, 0x7D51}, //10021 #CJK UNIFIED IDEOGRAPH + {0xBD5B, 0x7D52}, //10022 #CJK UNIFIED IDEOGRAPH + {0xBD5C, 0x7D53}, //10023 #CJK UNIFIED IDEOGRAPH + {0xBD5D, 0x7D54}, //10024 #CJK UNIFIED IDEOGRAPH + {0xBD5E, 0x7D55}, //10025 #CJK UNIFIED IDEOGRAPH + {0xBD5F, 0x7D56}, //10026 #CJK UNIFIED IDEOGRAPH + {0xBD60, 0x7D57}, //10027 #CJK UNIFIED IDEOGRAPH + {0xBD61, 0x7D58}, //10028 #CJK UNIFIED IDEOGRAPH + {0xBD62, 0x7D59}, //10029 #CJK UNIFIED IDEOGRAPH + {0xBD63, 0x7D5A}, //10030 #CJK UNIFIED IDEOGRAPH + {0xBD64, 0x7D5B}, //10031 #CJK UNIFIED IDEOGRAPH + {0xBD65, 0x7D5C}, //10032 #CJK UNIFIED IDEOGRAPH + {0xBD66, 0x7D5D}, //10033 #CJK UNIFIED IDEOGRAPH + {0xBD67, 0x7D5E}, //10034 #CJK UNIFIED IDEOGRAPH + {0xBD68, 0x7D5F}, //10035 #CJK UNIFIED IDEOGRAPH + {0xBD69, 0x7D60}, //10036 #CJK UNIFIED IDEOGRAPH + {0xBD6A, 0x7D61}, //10037 #CJK UNIFIED IDEOGRAPH + {0xBD6B, 0x7D62}, //10038 #CJK UNIFIED IDEOGRAPH + {0xBD6C, 0x7D63}, //10039 #CJK UNIFIED IDEOGRAPH + {0xBD6D, 0x7D64}, //10040 #CJK UNIFIED IDEOGRAPH + {0xBD6E, 0x7D65}, //10041 #CJK UNIFIED IDEOGRAPH + {0xBD6F, 0x7D66}, //10042 #CJK UNIFIED IDEOGRAPH + {0xBD70, 0x7D67}, //10043 #CJK UNIFIED IDEOGRAPH + {0xBD71, 0x7D68}, //10044 #CJK UNIFIED IDEOGRAPH + {0xBD72, 0x7D69}, //10045 #CJK UNIFIED IDEOGRAPH + {0xBD73, 0x7D6A}, //10046 #CJK UNIFIED IDEOGRAPH + {0xBD74, 0x7D6B}, //10047 #CJK UNIFIED IDEOGRAPH + {0xBD75, 0x7D6C}, //10048 #CJK UNIFIED IDEOGRAPH + {0xBD76, 0x7D6D}, //10049 #CJK UNIFIED IDEOGRAPH + {0xBD77, 0x7D6F}, //10050 #CJK UNIFIED IDEOGRAPH + {0xBD78, 0x7D70}, //10051 #CJK UNIFIED IDEOGRAPH + {0xBD79, 0x7D71}, //10052 #CJK UNIFIED IDEOGRAPH + {0xBD7A, 0x7D72}, //10053 #CJK UNIFIED IDEOGRAPH + {0xBD7B, 0x7D73}, //10054 #CJK UNIFIED IDEOGRAPH + {0xBD7C, 0x7D74}, //10055 #CJK UNIFIED IDEOGRAPH + {0xBD7D, 0x7D75}, //10056 #CJK UNIFIED IDEOGRAPH + {0xBD7E, 0x7D76}, //10057 #CJK UNIFIED IDEOGRAPH + {0xBD80, 0x7D78}, //10058 #CJK UNIFIED IDEOGRAPH + {0xBD81, 0x7D79}, //10059 #CJK UNIFIED IDEOGRAPH + {0xBD82, 0x7D7A}, //10060 #CJK UNIFIED IDEOGRAPH + {0xBD83, 0x7D7B}, //10061 #CJK UNIFIED IDEOGRAPH + {0xBD84, 0x7D7C}, //10062 #CJK UNIFIED IDEOGRAPH + {0xBD85, 0x7D7D}, //10063 #CJK UNIFIED IDEOGRAPH + {0xBD86, 0x7D7E}, //10064 #CJK UNIFIED IDEOGRAPH + {0xBD87, 0x7D7F}, //10065 #CJK UNIFIED IDEOGRAPH + {0xBD88, 0x7D80}, //10066 #CJK UNIFIED IDEOGRAPH + {0xBD89, 0x7D81}, //10067 #CJK UNIFIED IDEOGRAPH + {0xBD8A, 0x7D82}, //10068 #CJK UNIFIED IDEOGRAPH + {0xBD8B, 0x7D83}, //10069 #CJK UNIFIED IDEOGRAPH + {0xBD8C, 0x7D84}, //10070 #CJK UNIFIED IDEOGRAPH + {0xBD8D, 0x7D85}, //10071 #CJK UNIFIED IDEOGRAPH + {0xBD8E, 0x7D86}, //10072 #CJK UNIFIED IDEOGRAPH + {0xBD8F, 0x7D87}, //10073 #CJK UNIFIED IDEOGRAPH + {0xBD90, 0x7D88}, //10074 #CJK UNIFIED IDEOGRAPH + {0xBD91, 0x7D89}, //10075 #CJK UNIFIED IDEOGRAPH + {0xBD92, 0x7D8A}, //10076 #CJK UNIFIED IDEOGRAPH + {0xBD93, 0x7D8B}, //10077 #CJK UNIFIED IDEOGRAPH + {0xBD94, 0x7D8C}, //10078 #CJK UNIFIED IDEOGRAPH + {0xBD95, 0x7D8D}, //10079 #CJK UNIFIED IDEOGRAPH + {0xBD96, 0x7D8E}, //10080 #CJK UNIFIED IDEOGRAPH + {0xBD97, 0x7D8F}, //10081 #CJK UNIFIED IDEOGRAPH + {0xBD98, 0x7D90}, //10082 #CJK UNIFIED IDEOGRAPH + {0xBD99, 0x7D91}, //10083 #CJK UNIFIED IDEOGRAPH + {0xBD9A, 0x7D92}, //10084 #CJK UNIFIED IDEOGRAPH + {0xBD9B, 0x7D93}, //10085 #CJK UNIFIED IDEOGRAPH + {0xBD9C, 0x7D94}, //10086 #CJK UNIFIED IDEOGRAPH + {0xBD9D, 0x7D95}, //10087 #CJK UNIFIED IDEOGRAPH + {0xBD9E, 0x7D96}, //10088 #CJK UNIFIED IDEOGRAPH + {0xBD9F, 0x7D97}, //10089 #CJK UNIFIED IDEOGRAPH + {0xBDA0, 0x7D98}, //10090 #CJK UNIFIED IDEOGRAPH + {0xBDA1, 0x5065}, //10091 #CJK UNIFIED IDEOGRAPH + {0xBDA2, 0x8230}, //10092 #CJK UNIFIED IDEOGRAPH + {0xBDA3, 0x5251}, //10093 #CJK UNIFIED IDEOGRAPH + {0xBDA4, 0x996F}, //10094 #CJK UNIFIED IDEOGRAPH + {0xBDA5, 0x6E10}, //10095 #CJK UNIFIED IDEOGRAPH + {0xBDA6, 0x6E85}, //10096 #CJK UNIFIED IDEOGRAPH + {0xBDA7, 0x6DA7}, //10097 #CJK UNIFIED IDEOGRAPH + {0xBDA8, 0x5EFA}, //10098 #CJK UNIFIED IDEOGRAPH + {0xBDA9, 0x50F5}, //10099 #CJK UNIFIED IDEOGRAPH + {0xBDAA, 0x59DC}, //10100 #CJK UNIFIED IDEOGRAPH + {0xBDAB, 0x5C06}, //10101 #CJK UNIFIED IDEOGRAPH + {0xBDAC, 0x6D46}, //10102 #CJK UNIFIED IDEOGRAPH + {0xBDAD, 0x6C5F}, //10103 #CJK UNIFIED IDEOGRAPH + {0xBDAE, 0x7586}, //10104 #CJK UNIFIED IDEOGRAPH + {0xBDAF, 0x848B}, //10105 #CJK UNIFIED IDEOGRAPH + {0xBDB0, 0x6868}, //10106 #CJK UNIFIED IDEOGRAPH + {0xBDB1, 0x5956}, //10107 #CJK UNIFIED IDEOGRAPH + {0xBDB2, 0x8BB2}, //10108 #CJK UNIFIED IDEOGRAPH + {0xBDB3, 0x5320}, //10109 #CJK UNIFIED IDEOGRAPH + {0xBDB4, 0x9171}, //10110 #CJK UNIFIED IDEOGRAPH + {0xBDB5, 0x964D}, //10111 #CJK UNIFIED IDEOGRAPH + {0xBDB6, 0x8549}, //10112 #CJK UNIFIED IDEOGRAPH + {0xBDB7, 0x6912}, //10113 #CJK UNIFIED IDEOGRAPH + {0xBDB8, 0x7901}, //10114 #CJK UNIFIED IDEOGRAPH + {0xBDB9, 0x7126}, //10115 #CJK UNIFIED IDEOGRAPH + {0xBDBA, 0x80F6}, //10116 #CJK UNIFIED IDEOGRAPH + {0xBDBB, 0x4EA4}, //10117 #CJK UNIFIED IDEOGRAPH + {0xBDBC, 0x90CA}, //10118 #CJK UNIFIED IDEOGRAPH + {0xBDBD, 0x6D47}, //10119 #CJK UNIFIED IDEOGRAPH + {0xBDBE, 0x9A84}, //10120 #CJK UNIFIED IDEOGRAPH + {0xBDBF, 0x5A07}, //10121 #CJK UNIFIED IDEOGRAPH + {0xBDC0, 0x56BC}, //10122 #CJK UNIFIED IDEOGRAPH + {0xBDC1, 0x6405}, //10123 #CJK UNIFIED IDEOGRAPH + {0xBDC2, 0x94F0}, //10124 #CJK UNIFIED IDEOGRAPH + {0xBDC3, 0x77EB}, //10125 #CJK UNIFIED IDEOGRAPH + {0xBDC4, 0x4FA5}, //10126 #CJK UNIFIED IDEOGRAPH + {0xBDC5, 0x811A}, //10127 #CJK UNIFIED IDEOGRAPH + {0xBDC6, 0x72E1}, //10128 #CJK UNIFIED IDEOGRAPH + {0xBDC7, 0x89D2}, //10129 #CJK UNIFIED IDEOGRAPH + {0xBDC8, 0x997A}, //10130 #CJK UNIFIED IDEOGRAPH + {0xBDC9, 0x7F34}, //10131 #CJK UNIFIED IDEOGRAPH + {0xBDCA, 0x7EDE}, //10132 #CJK UNIFIED IDEOGRAPH + {0xBDCB, 0x527F}, //10133 #CJK UNIFIED IDEOGRAPH + {0xBDCC, 0x6559}, //10134 #CJK UNIFIED IDEOGRAPH + {0xBDCD, 0x9175}, //10135 #CJK UNIFIED IDEOGRAPH + {0xBDCE, 0x8F7F}, //10136 #CJK UNIFIED IDEOGRAPH + {0xBDCF, 0x8F83}, //10137 #CJK UNIFIED IDEOGRAPH + {0xBDD0, 0x53EB}, //10138 #CJK UNIFIED IDEOGRAPH + {0xBDD1, 0x7A96}, //10139 #CJK UNIFIED IDEOGRAPH + {0xBDD2, 0x63ED}, //10140 #CJK UNIFIED IDEOGRAPH + {0xBDD3, 0x63A5}, //10141 #CJK UNIFIED IDEOGRAPH + {0xBDD4, 0x7686}, //10142 #CJK UNIFIED IDEOGRAPH + {0xBDD5, 0x79F8}, //10143 #CJK UNIFIED IDEOGRAPH + {0xBDD6, 0x8857}, //10144 #CJK UNIFIED IDEOGRAPH + {0xBDD7, 0x9636}, //10145 #CJK UNIFIED IDEOGRAPH + {0xBDD8, 0x622A}, //10146 #CJK UNIFIED IDEOGRAPH + {0xBDD9, 0x52AB}, //10147 #CJK UNIFIED IDEOGRAPH + {0xBDDA, 0x8282}, //10148 #CJK UNIFIED IDEOGRAPH + {0xBDDB, 0x6854}, //10149 #CJK UNIFIED IDEOGRAPH + {0xBDDC, 0x6770}, //10150 #CJK UNIFIED IDEOGRAPH + {0xBDDD, 0x6377}, //10151 #CJK UNIFIED IDEOGRAPH + {0xBDDE, 0x776B}, //10152 #CJK UNIFIED IDEOGRAPH + {0xBDDF, 0x7AED}, //10153 #CJK UNIFIED IDEOGRAPH + {0xBDE0, 0x6D01}, //10154 #CJK UNIFIED IDEOGRAPH + {0xBDE1, 0x7ED3}, //10155 #CJK UNIFIED IDEOGRAPH + {0xBDE2, 0x89E3}, //10156 #CJK UNIFIED IDEOGRAPH + {0xBDE3, 0x59D0}, //10157 #CJK UNIFIED IDEOGRAPH + {0xBDE4, 0x6212}, //10158 #CJK UNIFIED IDEOGRAPH + {0xBDE5, 0x85C9}, //10159 #CJK UNIFIED IDEOGRAPH + {0xBDE6, 0x82A5}, //10160 #CJK UNIFIED IDEOGRAPH + {0xBDE7, 0x754C}, //10161 #CJK UNIFIED IDEOGRAPH + {0xBDE8, 0x501F}, //10162 #CJK UNIFIED IDEOGRAPH + {0xBDE9, 0x4ECB}, //10163 #CJK UNIFIED IDEOGRAPH + {0xBDEA, 0x75A5}, //10164 #CJK UNIFIED IDEOGRAPH + {0xBDEB, 0x8BEB}, //10165 #CJK UNIFIED IDEOGRAPH + {0xBDEC, 0x5C4A}, //10166 #CJK UNIFIED IDEOGRAPH + {0xBDED, 0x5DFE}, //10167 #CJK UNIFIED IDEOGRAPH + {0xBDEE, 0x7B4B}, //10168 #CJK UNIFIED IDEOGRAPH + {0xBDEF, 0x65A4}, //10169 #CJK UNIFIED IDEOGRAPH + {0xBDF0, 0x91D1}, //10170 #CJK UNIFIED IDEOGRAPH + {0xBDF1, 0x4ECA}, //10171 #CJK UNIFIED IDEOGRAPH + {0xBDF2, 0x6D25}, //10172 #CJK UNIFIED IDEOGRAPH + {0xBDF3, 0x895F}, //10173 #CJK UNIFIED IDEOGRAPH + {0xBDF4, 0x7D27}, //10174 #CJK UNIFIED IDEOGRAPH + {0xBDF5, 0x9526}, //10175 #CJK UNIFIED IDEOGRAPH + {0xBDF6, 0x4EC5}, //10176 #CJK UNIFIED IDEOGRAPH + {0xBDF7, 0x8C28}, //10177 #CJK UNIFIED IDEOGRAPH + {0xBDF8, 0x8FDB}, //10178 #CJK UNIFIED IDEOGRAPH + {0xBDF9, 0x9773}, //10179 #CJK UNIFIED IDEOGRAPH + {0xBDFA, 0x664B}, //10180 #CJK UNIFIED IDEOGRAPH + {0xBDFB, 0x7981}, //10181 #CJK UNIFIED IDEOGRAPH + {0xBDFC, 0x8FD1}, //10182 #CJK UNIFIED IDEOGRAPH + {0xBDFD, 0x70EC}, //10183 #CJK UNIFIED IDEOGRAPH + {0xBDFE, 0x6D78}, //10184 #CJK UNIFIED IDEOGRAPH + {0xBE40, 0x7D99}, //10185 #CJK UNIFIED IDEOGRAPH + {0xBE41, 0x7D9A}, //10186 #CJK UNIFIED IDEOGRAPH + {0xBE42, 0x7D9B}, //10187 #CJK UNIFIED IDEOGRAPH + {0xBE43, 0x7D9C}, //10188 #CJK UNIFIED IDEOGRAPH + {0xBE44, 0x7D9D}, //10189 #CJK UNIFIED IDEOGRAPH + {0xBE45, 0x7D9E}, //10190 #CJK UNIFIED IDEOGRAPH + {0xBE46, 0x7D9F}, //10191 #CJK UNIFIED IDEOGRAPH + {0xBE47, 0x7DA0}, //10192 #CJK UNIFIED IDEOGRAPH + {0xBE48, 0x7DA1}, //10193 #CJK UNIFIED IDEOGRAPH + {0xBE49, 0x7DA2}, //10194 #CJK UNIFIED IDEOGRAPH + {0xBE4A, 0x7DA3}, //10195 #CJK UNIFIED IDEOGRAPH + {0xBE4B, 0x7DA4}, //10196 #CJK UNIFIED IDEOGRAPH + {0xBE4C, 0x7DA5}, //10197 #CJK UNIFIED IDEOGRAPH + {0xBE4D, 0x7DA7}, //10198 #CJK UNIFIED IDEOGRAPH + {0xBE4E, 0x7DA8}, //10199 #CJK UNIFIED IDEOGRAPH + {0xBE4F, 0x7DA9}, //10200 #CJK UNIFIED IDEOGRAPH + {0xBE50, 0x7DAA}, //10201 #CJK UNIFIED IDEOGRAPH + {0xBE51, 0x7DAB}, //10202 #CJK UNIFIED IDEOGRAPH + {0xBE52, 0x7DAC}, //10203 #CJK UNIFIED IDEOGRAPH + {0xBE53, 0x7DAD}, //10204 #CJK UNIFIED IDEOGRAPH + {0xBE54, 0x7DAF}, //10205 #CJK UNIFIED IDEOGRAPH + {0xBE55, 0x7DB0}, //10206 #CJK UNIFIED IDEOGRAPH + {0xBE56, 0x7DB1}, //10207 #CJK UNIFIED IDEOGRAPH + {0xBE57, 0x7DB2}, //10208 #CJK UNIFIED IDEOGRAPH + {0xBE58, 0x7DB3}, //10209 #CJK UNIFIED IDEOGRAPH + {0xBE59, 0x7DB4}, //10210 #CJK UNIFIED IDEOGRAPH + {0xBE5A, 0x7DB5}, //10211 #CJK UNIFIED IDEOGRAPH + {0xBE5B, 0x7DB6}, //10212 #CJK UNIFIED IDEOGRAPH + {0xBE5C, 0x7DB7}, //10213 #CJK UNIFIED IDEOGRAPH + {0xBE5D, 0x7DB8}, //10214 #CJK UNIFIED IDEOGRAPH + {0xBE5E, 0x7DB9}, //10215 #CJK UNIFIED IDEOGRAPH + {0xBE5F, 0x7DBA}, //10216 #CJK UNIFIED IDEOGRAPH + {0xBE60, 0x7DBB}, //10217 #CJK UNIFIED IDEOGRAPH + {0xBE61, 0x7DBC}, //10218 #CJK UNIFIED IDEOGRAPH + {0xBE62, 0x7DBD}, //10219 #CJK UNIFIED IDEOGRAPH + {0xBE63, 0x7DBE}, //10220 #CJK UNIFIED IDEOGRAPH + {0xBE64, 0x7DBF}, //10221 #CJK UNIFIED IDEOGRAPH + {0xBE65, 0x7DC0}, //10222 #CJK UNIFIED IDEOGRAPH + {0xBE66, 0x7DC1}, //10223 #CJK UNIFIED IDEOGRAPH + {0xBE67, 0x7DC2}, //10224 #CJK UNIFIED IDEOGRAPH + {0xBE68, 0x7DC3}, //10225 #CJK UNIFIED IDEOGRAPH + {0xBE69, 0x7DC4}, //10226 #CJK UNIFIED IDEOGRAPH + {0xBE6A, 0x7DC5}, //10227 #CJK UNIFIED IDEOGRAPH + {0xBE6B, 0x7DC6}, //10228 #CJK UNIFIED IDEOGRAPH + {0xBE6C, 0x7DC7}, //10229 #CJK UNIFIED IDEOGRAPH + {0xBE6D, 0x7DC8}, //10230 #CJK UNIFIED IDEOGRAPH + {0xBE6E, 0x7DC9}, //10231 #CJK UNIFIED IDEOGRAPH + {0xBE6F, 0x7DCA}, //10232 #CJK UNIFIED IDEOGRAPH + {0xBE70, 0x7DCB}, //10233 #CJK UNIFIED IDEOGRAPH + {0xBE71, 0x7DCC}, //10234 #CJK UNIFIED IDEOGRAPH + {0xBE72, 0x7DCD}, //10235 #CJK UNIFIED IDEOGRAPH + {0xBE73, 0x7DCE}, //10236 #CJK UNIFIED IDEOGRAPH + {0xBE74, 0x7DCF}, //10237 #CJK UNIFIED IDEOGRAPH + {0xBE75, 0x7DD0}, //10238 #CJK UNIFIED IDEOGRAPH + {0xBE76, 0x7DD1}, //10239 #CJK UNIFIED IDEOGRAPH + {0xBE77, 0x7DD2}, //10240 #CJK UNIFIED IDEOGRAPH + {0xBE78, 0x7DD3}, //10241 #CJK UNIFIED IDEOGRAPH + {0xBE79, 0x7DD4}, //10242 #CJK UNIFIED IDEOGRAPH + {0xBE7A, 0x7DD5}, //10243 #CJK UNIFIED IDEOGRAPH + {0xBE7B, 0x7DD6}, //10244 #CJK UNIFIED IDEOGRAPH + {0xBE7C, 0x7DD7}, //10245 #CJK UNIFIED IDEOGRAPH + {0xBE7D, 0x7DD8}, //10246 #CJK UNIFIED IDEOGRAPH + {0xBE7E, 0x7DD9}, //10247 #CJK UNIFIED IDEOGRAPH + {0xBE80, 0x7DDA}, //10248 #CJK UNIFIED IDEOGRAPH + {0xBE81, 0x7DDB}, //10249 #CJK UNIFIED IDEOGRAPH + {0xBE82, 0x7DDC}, //10250 #CJK UNIFIED IDEOGRAPH + {0xBE83, 0x7DDD}, //10251 #CJK UNIFIED IDEOGRAPH + {0xBE84, 0x7DDE}, //10252 #CJK UNIFIED IDEOGRAPH + {0xBE85, 0x7DDF}, //10253 #CJK UNIFIED IDEOGRAPH + {0xBE86, 0x7DE0}, //10254 #CJK UNIFIED IDEOGRAPH + {0xBE87, 0x7DE1}, //10255 #CJK UNIFIED IDEOGRAPH + {0xBE88, 0x7DE2}, //10256 #CJK UNIFIED IDEOGRAPH + {0xBE89, 0x7DE3}, //10257 #CJK UNIFIED IDEOGRAPH + {0xBE8A, 0x7DE4}, //10258 #CJK UNIFIED IDEOGRAPH + {0xBE8B, 0x7DE5}, //10259 #CJK UNIFIED IDEOGRAPH + {0xBE8C, 0x7DE6}, //10260 #CJK UNIFIED IDEOGRAPH + {0xBE8D, 0x7DE7}, //10261 #CJK UNIFIED IDEOGRAPH + {0xBE8E, 0x7DE8}, //10262 #CJK UNIFIED IDEOGRAPH + {0xBE8F, 0x7DE9}, //10263 #CJK UNIFIED IDEOGRAPH + {0xBE90, 0x7DEA}, //10264 #CJK UNIFIED IDEOGRAPH + {0xBE91, 0x7DEB}, //10265 #CJK UNIFIED IDEOGRAPH + {0xBE92, 0x7DEC}, //10266 #CJK UNIFIED IDEOGRAPH + {0xBE93, 0x7DED}, //10267 #CJK UNIFIED IDEOGRAPH + {0xBE94, 0x7DEE}, //10268 #CJK UNIFIED IDEOGRAPH + {0xBE95, 0x7DEF}, //10269 #CJK UNIFIED IDEOGRAPH + {0xBE96, 0x7DF0}, //10270 #CJK UNIFIED IDEOGRAPH + {0xBE97, 0x7DF1}, //10271 #CJK UNIFIED IDEOGRAPH + {0xBE98, 0x7DF2}, //10272 #CJK UNIFIED IDEOGRAPH + {0xBE99, 0x7DF3}, //10273 #CJK UNIFIED IDEOGRAPH + {0xBE9A, 0x7DF4}, //10274 #CJK UNIFIED IDEOGRAPH + {0xBE9B, 0x7DF5}, //10275 #CJK UNIFIED IDEOGRAPH + {0xBE9C, 0x7DF6}, //10276 #CJK UNIFIED IDEOGRAPH + {0xBE9D, 0x7DF7}, //10277 #CJK UNIFIED IDEOGRAPH + {0xBE9E, 0x7DF8}, //10278 #CJK UNIFIED IDEOGRAPH + {0xBE9F, 0x7DF9}, //10279 #CJK UNIFIED IDEOGRAPH + {0xBEA0, 0x7DFA}, //10280 #CJK UNIFIED IDEOGRAPH + {0xBEA1, 0x5C3D}, //10281 #CJK UNIFIED IDEOGRAPH + {0xBEA2, 0x52B2}, //10282 #CJK UNIFIED IDEOGRAPH + {0xBEA3, 0x8346}, //10283 #CJK UNIFIED IDEOGRAPH + {0xBEA4, 0x5162}, //10284 #CJK UNIFIED IDEOGRAPH + {0xBEA5, 0x830E}, //10285 #CJK UNIFIED IDEOGRAPH + {0xBEA6, 0x775B}, //10286 #CJK UNIFIED IDEOGRAPH + {0xBEA7, 0x6676}, //10287 #CJK UNIFIED IDEOGRAPH + {0xBEA8, 0x9CB8}, //10288 #CJK UNIFIED IDEOGRAPH + {0xBEA9, 0x4EAC}, //10289 #CJK UNIFIED IDEOGRAPH + {0xBEAA, 0x60CA}, //10290 #CJK UNIFIED IDEOGRAPH + {0xBEAB, 0x7CBE}, //10291 #CJK UNIFIED IDEOGRAPH + {0xBEAC, 0x7CB3}, //10292 #CJK UNIFIED IDEOGRAPH + {0xBEAD, 0x7ECF}, //10293 #CJK UNIFIED IDEOGRAPH + {0xBEAE, 0x4E95}, //10294 #CJK UNIFIED IDEOGRAPH + {0xBEAF, 0x8B66}, //10295 #CJK UNIFIED IDEOGRAPH + {0xBEB0, 0x666F}, //10296 #CJK UNIFIED IDEOGRAPH + {0xBEB1, 0x9888}, //10297 #CJK UNIFIED IDEOGRAPH + {0xBEB2, 0x9759}, //10298 #CJK UNIFIED IDEOGRAPH + {0xBEB3, 0x5883}, //10299 #CJK UNIFIED IDEOGRAPH + {0xBEB4, 0x656C}, //10300 #CJK UNIFIED IDEOGRAPH + {0xBEB5, 0x955C}, //10301 #CJK UNIFIED IDEOGRAPH + {0xBEB6, 0x5F84}, //10302 #CJK UNIFIED IDEOGRAPH + {0xBEB7, 0x75C9}, //10303 #CJK UNIFIED IDEOGRAPH + {0xBEB8, 0x9756}, //10304 #CJK UNIFIED IDEOGRAPH + {0xBEB9, 0x7ADF}, //10305 #CJK UNIFIED IDEOGRAPH + {0xBEBA, 0x7ADE}, //10306 #CJK UNIFIED IDEOGRAPH + {0xBEBB, 0x51C0}, //10307 #CJK UNIFIED IDEOGRAPH + {0xBEBC, 0x70AF}, //10308 #CJK UNIFIED IDEOGRAPH + {0xBEBD, 0x7A98}, //10309 #CJK UNIFIED IDEOGRAPH + {0xBEBE, 0x63EA}, //10310 #CJK UNIFIED IDEOGRAPH + {0xBEBF, 0x7A76}, //10311 #CJK UNIFIED IDEOGRAPH + {0xBEC0, 0x7EA0}, //10312 #CJK UNIFIED IDEOGRAPH + {0xBEC1, 0x7396}, //10313 #CJK UNIFIED IDEOGRAPH + {0xBEC2, 0x97ED}, //10314 #CJK UNIFIED IDEOGRAPH + {0xBEC3, 0x4E45}, //10315 #CJK UNIFIED IDEOGRAPH + {0xBEC4, 0x7078}, //10316 #CJK UNIFIED IDEOGRAPH + {0xBEC5, 0x4E5D}, //10317 #CJK UNIFIED IDEOGRAPH + {0xBEC6, 0x9152}, //10318 #CJK UNIFIED IDEOGRAPH + {0xBEC7, 0x53A9}, //10319 #CJK UNIFIED IDEOGRAPH + {0xBEC8, 0x6551}, //10320 #CJK UNIFIED IDEOGRAPH + {0xBEC9, 0x65E7}, //10321 #CJK UNIFIED IDEOGRAPH + {0xBECA, 0x81FC}, //10322 #CJK UNIFIED IDEOGRAPH + {0xBECB, 0x8205}, //10323 #CJK UNIFIED IDEOGRAPH + {0xBECC, 0x548E}, //10324 #CJK UNIFIED IDEOGRAPH + {0xBECD, 0x5C31}, //10325 #CJK UNIFIED IDEOGRAPH + {0xBECE, 0x759A}, //10326 #CJK UNIFIED IDEOGRAPH + {0xBECF, 0x97A0}, //10327 #CJK UNIFIED IDEOGRAPH + {0xBED0, 0x62D8}, //10328 #CJK UNIFIED IDEOGRAPH + {0xBED1, 0x72D9}, //10329 #CJK UNIFIED IDEOGRAPH + {0xBED2, 0x75BD}, //10330 #CJK UNIFIED IDEOGRAPH + {0xBED3, 0x5C45}, //10331 #CJK UNIFIED IDEOGRAPH + {0xBED4, 0x9A79}, //10332 #CJK UNIFIED IDEOGRAPH + {0xBED5, 0x83CA}, //10333 #CJK UNIFIED IDEOGRAPH + {0xBED6, 0x5C40}, //10334 #CJK UNIFIED IDEOGRAPH + {0xBED7, 0x5480}, //10335 #CJK UNIFIED IDEOGRAPH + {0xBED8, 0x77E9}, //10336 #CJK UNIFIED IDEOGRAPH + {0xBED9, 0x4E3E}, //10337 #CJK UNIFIED IDEOGRAPH + {0xBEDA, 0x6CAE}, //10338 #CJK UNIFIED IDEOGRAPH + {0xBEDB, 0x805A}, //10339 #CJK UNIFIED IDEOGRAPH + {0xBEDC, 0x62D2}, //10340 #CJK UNIFIED IDEOGRAPH + {0xBEDD, 0x636E}, //10341 #CJK UNIFIED IDEOGRAPH + {0xBEDE, 0x5DE8}, //10342 #CJK UNIFIED IDEOGRAPH + {0xBEDF, 0x5177}, //10343 #CJK UNIFIED IDEOGRAPH + {0xBEE0, 0x8DDD}, //10344 #CJK UNIFIED IDEOGRAPH + {0xBEE1, 0x8E1E}, //10345 #CJK UNIFIED IDEOGRAPH + {0xBEE2, 0x952F}, //10346 #CJK UNIFIED IDEOGRAPH + {0xBEE3, 0x4FF1}, //10347 #CJK UNIFIED IDEOGRAPH + {0xBEE4, 0x53E5}, //10348 #CJK UNIFIED IDEOGRAPH + {0xBEE5, 0x60E7}, //10349 #CJK UNIFIED IDEOGRAPH + {0xBEE6, 0x70AC}, //10350 #CJK UNIFIED IDEOGRAPH + {0xBEE7, 0x5267}, //10351 #CJK UNIFIED IDEOGRAPH + {0xBEE8, 0x6350}, //10352 #CJK UNIFIED IDEOGRAPH + {0xBEE9, 0x9E43}, //10353 #CJK UNIFIED IDEOGRAPH + {0xBEEA, 0x5A1F}, //10354 #CJK UNIFIED IDEOGRAPH + {0xBEEB, 0x5026}, //10355 #CJK UNIFIED IDEOGRAPH + {0xBEEC, 0x7737}, //10356 #CJK UNIFIED IDEOGRAPH + {0xBEED, 0x5377}, //10357 #CJK UNIFIED IDEOGRAPH + {0xBEEE, 0x7EE2}, //10358 #CJK UNIFIED IDEOGRAPH + {0xBEEF, 0x6485}, //10359 #CJK UNIFIED IDEOGRAPH + {0xBEF0, 0x652B}, //10360 #CJK UNIFIED IDEOGRAPH + {0xBEF1, 0x6289}, //10361 #CJK UNIFIED IDEOGRAPH + {0xBEF2, 0x6398}, //10362 #CJK UNIFIED IDEOGRAPH + {0xBEF3, 0x5014}, //10363 #CJK UNIFIED IDEOGRAPH + {0xBEF4, 0x7235}, //10364 #CJK UNIFIED IDEOGRAPH + {0xBEF5, 0x89C9}, //10365 #CJK UNIFIED IDEOGRAPH + {0xBEF6, 0x51B3}, //10366 #CJK UNIFIED IDEOGRAPH + {0xBEF7, 0x8BC0}, //10367 #CJK UNIFIED IDEOGRAPH + {0xBEF8, 0x7EDD}, //10368 #CJK UNIFIED IDEOGRAPH + {0xBEF9, 0x5747}, //10369 #CJK UNIFIED IDEOGRAPH + {0xBEFA, 0x83CC}, //10370 #CJK UNIFIED IDEOGRAPH + {0xBEFB, 0x94A7}, //10371 #CJK UNIFIED IDEOGRAPH + {0xBEFC, 0x519B}, //10372 #CJK UNIFIED IDEOGRAPH + {0xBEFD, 0x541B}, //10373 #CJK UNIFIED IDEOGRAPH + {0xBEFE, 0x5CFB}, //10374 #CJK UNIFIED IDEOGRAPH + {0xBF40, 0x7DFB}, //10375 #CJK UNIFIED IDEOGRAPH + {0xBF41, 0x7DFC}, //10376 #CJK UNIFIED IDEOGRAPH + {0xBF42, 0x7DFD}, //10377 #CJK UNIFIED IDEOGRAPH + {0xBF43, 0x7DFE}, //10378 #CJK UNIFIED IDEOGRAPH + {0xBF44, 0x7DFF}, //10379 #CJK UNIFIED IDEOGRAPH + {0xBF45, 0x7E00}, //10380 #CJK UNIFIED IDEOGRAPH + {0xBF46, 0x7E01}, //10381 #CJK UNIFIED IDEOGRAPH + {0xBF47, 0x7E02}, //10382 #CJK UNIFIED IDEOGRAPH + {0xBF48, 0x7E03}, //10383 #CJK UNIFIED IDEOGRAPH + {0xBF49, 0x7E04}, //10384 #CJK UNIFIED IDEOGRAPH + {0xBF4A, 0x7E05}, //10385 #CJK UNIFIED IDEOGRAPH + {0xBF4B, 0x7E06}, //10386 #CJK UNIFIED IDEOGRAPH + {0xBF4C, 0x7E07}, //10387 #CJK UNIFIED IDEOGRAPH + {0xBF4D, 0x7E08}, //10388 #CJK UNIFIED IDEOGRAPH + {0xBF4E, 0x7E09}, //10389 #CJK UNIFIED IDEOGRAPH + {0xBF4F, 0x7E0A}, //10390 #CJK UNIFIED IDEOGRAPH + {0xBF50, 0x7E0B}, //10391 #CJK UNIFIED IDEOGRAPH + {0xBF51, 0x7E0C}, //10392 #CJK UNIFIED IDEOGRAPH + {0xBF52, 0x7E0D}, //10393 #CJK UNIFIED IDEOGRAPH + {0xBF53, 0x7E0E}, //10394 #CJK UNIFIED IDEOGRAPH + {0xBF54, 0x7E0F}, //10395 #CJK UNIFIED IDEOGRAPH + {0xBF55, 0x7E10}, //10396 #CJK UNIFIED IDEOGRAPH + {0xBF56, 0x7E11}, //10397 #CJK UNIFIED IDEOGRAPH + {0xBF57, 0x7E12}, //10398 #CJK UNIFIED IDEOGRAPH + {0xBF58, 0x7E13}, //10399 #CJK UNIFIED IDEOGRAPH + {0xBF59, 0x7E14}, //10400 #CJK UNIFIED IDEOGRAPH + {0xBF5A, 0x7E15}, //10401 #CJK UNIFIED IDEOGRAPH + {0xBF5B, 0x7E16}, //10402 #CJK UNIFIED IDEOGRAPH + {0xBF5C, 0x7E17}, //10403 #CJK UNIFIED IDEOGRAPH + {0xBF5D, 0x7E18}, //10404 #CJK UNIFIED IDEOGRAPH + {0xBF5E, 0x7E19}, //10405 #CJK UNIFIED IDEOGRAPH + {0xBF5F, 0x7E1A}, //10406 #CJK UNIFIED IDEOGRAPH + {0xBF60, 0x7E1B}, //10407 #CJK UNIFIED IDEOGRAPH + {0xBF61, 0x7E1C}, //10408 #CJK UNIFIED IDEOGRAPH + {0xBF62, 0x7E1D}, //10409 #CJK UNIFIED IDEOGRAPH + {0xBF63, 0x7E1E}, //10410 #CJK UNIFIED IDEOGRAPH + {0xBF64, 0x7E1F}, //10411 #CJK UNIFIED IDEOGRAPH + {0xBF65, 0x7E20}, //10412 #CJK UNIFIED IDEOGRAPH + {0xBF66, 0x7E21}, //10413 #CJK UNIFIED IDEOGRAPH + {0xBF67, 0x7E22}, //10414 #CJK UNIFIED IDEOGRAPH + {0xBF68, 0x7E23}, //10415 #CJK UNIFIED IDEOGRAPH + {0xBF69, 0x7E24}, //10416 #CJK UNIFIED IDEOGRAPH + {0xBF6A, 0x7E25}, //10417 #CJK UNIFIED IDEOGRAPH + {0xBF6B, 0x7E26}, //10418 #CJK UNIFIED IDEOGRAPH + {0xBF6C, 0x7E27}, //10419 #CJK UNIFIED IDEOGRAPH + {0xBF6D, 0x7E28}, //10420 #CJK UNIFIED IDEOGRAPH + {0xBF6E, 0x7E29}, //10421 #CJK UNIFIED IDEOGRAPH + {0xBF6F, 0x7E2A}, //10422 #CJK UNIFIED IDEOGRAPH + {0xBF70, 0x7E2B}, //10423 #CJK UNIFIED IDEOGRAPH + {0xBF71, 0x7E2C}, //10424 #CJK UNIFIED IDEOGRAPH + {0xBF72, 0x7E2D}, //10425 #CJK UNIFIED IDEOGRAPH + {0xBF73, 0x7E2E}, //10426 #CJK UNIFIED IDEOGRAPH + {0xBF74, 0x7E2F}, //10427 #CJK UNIFIED IDEOGRAPH + {0xBF75, 0x7E30}, //10428 #CJK UNIFIED IDEOGRAPH + {0xBF76, 0x7E31}, //10429 #CJK UNIFIED IDEOGRAPH + {0xBF77, 0x7E32}, //10430 #CJK UNIFIED IDEOGRAPH + {0xBF78, 0x7E33}, //10431 #CJK UNIFIED IDEOGRAPH + {0xBF79, 0x7E34}, //10432 #CJK UNIFIED IDEOGRAPH + {0xBF7A, 0x7E35}, //10433 #CJK UNIFIED IDEOGRAPH + {0xBF7B, 0x7E36}, //10434 #CJK UNIFIED IDEOGRAPH + {0xBF7C, 0x7E37}, //10435 #CJK UNIFIED IDEOGRAPH + {0xBF7D, 0x7E38}, //10436 #CJK UNIFIED IDEOGRAPH + {0xBF7E, 0x7E39}, //10437 #CJK UNIFIED IDEOGRAPH + {0xBF80, 0x7E3A}, //10438 #CJK UNIFIED IDEOGRAPH + {0xBF81, 0x7E3C}, //10439 #CJK UNIFIED IDEOGRAPH + {0xBF82, 0x7E3D}, //10440 #CJK UNIFIED IDEOGRAPH + {0xBF83, 0x7E3E}, //10441 #CJK UNIFIED IDEOGRAPH + {0xBF84, 0x7E3F}, //10442 #CJK UNIFIED IDEOGRAPH + {0xBF85, 0x7E40}, //10443 #CJK UNIFIED IDEOGRAPH + {0xBF86, 0x7E42}, //10444 #CJK UNIFIED IDEOGRAPH + {0xBF87, 0x7E43}, //10445 #CJK UNIFIED IDEOGRAPH + {0xBF88, 0x7E44}, //10446 #CJK UNIFIED IDEOGRAPH + {0xBF89, 0x7E45}, //10447 #CJK UNIFIED IDEOGRAPH + {0xBF8A, 0x7E46}, //10448 #CJK UNIFIED IDEOGRAPH + {0xBF8B, 0x7E48}, //10449 #CJK UNIFIED IDEOGRAPH + {0xBF8C, 0x7E49}, //10450 #CJK UNIFIED IDEOGRAPH + {0xBF8D, 0x7E4A}, //10451 #CJK UNIFIED IDEOGRAPH + {0xBF8E, 0x7E4B}, //10452 #CJK UNIFIED IDEOGRAPH + {0xBF8F, 0x7E4C}, //10453 #CJK UNIFIED IDEOGRAPH + {0xBF90, 0x7E4D}, //10454 #CJK UNIFIED IDEOGRAPH + {0xBF91, 0x7E4E}, //10455 #CJK UNIFIED IDEOGRAPH + {0xBF92, 0x7E4F}, //10456 #CJK UNIFIED IDEOGRAPH + {0xBF93, 0x7E50}, //10457 #CJK UNIFIED IDEOGRAPH + {0xBF94, 0x7E51}, //10458 #CJK UNIFIED IDEOGRAPH + {0xBF95, 0x7E52}, //10459 #CJK UNIFIED IDEOGRAPH + {0xBF96, 0x7E53}, //10460 #CJK UNIFIED IDEOGRAPH + {0xBF97, 0x7E54}, //10461 #CJK UNIFIED IDEOGRAPH + {0xBF98, 0x7E55}, //10462 #CJK UNIFIED IDEOGRAPH + {0xBF99, 0x7E56}, //10463 #CJK UNIFIED IDEOGRAPH + {0xBF9A, 0x7E57}, //10464 #CJK UNIFIED IDEOGRAPH + {0xBF9B, 0x7E58}, //10465 #CJK UNIFIED IDEOGRAPH + {0xBF9C, 0x7E59}, //10466 #CJK UNIFIED IDEOGRAPH + {0xBF9D, 0x7E5A}, //10467 #CJK UNIFIED IDEOGRAPH + {0xBF9E, 0x7E5B}, //10468 #CJK UNIFIED IDEOGRAPH + {0xBF9F, 0x7E5C}, //10469 #CJK UNIFIED IDEOGRAPH + {0xBFA0, 0x7E5D}, //10470 #CJK UNIFIED IDEOGRAPH + {0xBFA1, 0x4FCA}, //10471 #CJK UNIFIED IDEOGRAPH + {0xBFA2, 0x7AE3}, //10472 #CJK UNIFIED IDEOGRAPH + {0xBFA3, 0x6D5A}, //10473 #CJK UNIFIED IDEOGRAPH + {0xBFA4, 0x90E1}, //10474 #CJK UNIFIED IDEOGRAPH + {0xBFA5, 0x9A8F}, //10475 #CJK UNIFIED IDEOGRAPH + {0xBFA6, 0x5580}, //10476 #CJK UNIFIED IDEOGRAPH + {0xBFA7, 0x5496}, //10477 #CJK UNIFIED IDEOGRAPH + {0xBFA8, 0x5361}, //10478 #CJK UNIFIED IDEOGRAPH + {0xBFA9, 0x54AF}, //10479 #CJK UNIFIED IDEOGRAPH + {0xBFAA, 0x5F00}, //10480 #CJK UNIFIED IDEOGRAPH + {0xBFAB, 0x63E9}, //10481 #CJK UNIFIED IDEOGRAPH + {0xBFAC, 0x6977}, //10482 #CJK UNIFIED IDEOGRAPH + {0xBFAD, 0x51EF}, //10483 #CJK UNIFIED IDEOGRAPH + {0xBFAE, 0x6168}, //10484 #CJK UNIFIED IDEOGRAPH + {0xBFAF, 0x520A}, //10485 #CJK UNIFIED IDEOGRAPH + {0xBFB0, 0x582A}, //10486 #CJK UNIFIED IDEOGRAPH + {0xBFB1, 0x52D8}, //10487 #CJK UNIFIED IDEOGRAPH + {0xBFB2, 0x574E}, //10488 #CJK UNIFIED IDEOGRAPH + {0xBFB3, 0x780D}, //10489 #CJK UNIFIED IDEOGRAPH + {0xBFB4, 0x770B}, //10490 #CJK UNIFIED IDEOGRAPH + {0xBFB5, 0x5EB7}, //10491 #CJK UNIFIED IDEOGRAPH + {0xBFB6, 0x6177}, //10492 #CJK UNIFIED IDEOGRAPH + {0xBFB7, 0x7CE0}, //10493 #CJK UNIFIED IDEOGRAPH + {0xBFB8, 0x625B}, //10494 #CJK UNIFIED IDEOGRAPH + {0xBFB9, 0x6297}, //10495 #CJK UNIFIED IDEOGRAPH + {0xBFBA, 0x4EA2}, //10496 #CJK UNIFIED IDEOGRAPH + {0xBFBB, 0x7095}, //10497 #CJK UNIFIED IDEOGRAPH + {0xBFBC, 0x8003}, //10498 #CJK UNIFIED IDEOGRAPH + {0xBFBD, 0x62F7}, //10499 #CJK UNIFIED IDEOGRAPH + {0xBFBE, 0x70E4}, //10500 #CJK UNIFIED IDEOGRAPH + {0xBFBF, 0x9760}, //10501 #CJK UNIFIED IDEOGRAPH + {0xBFC0, 0x5777}, //10502 #CJK UNIFIED IDEOGRAPH + {0xBFC1, 0x82DB}, //10503 #CJK UNIFIED IDEOGRAPH + {0xBFC2, 0x67EF}, //10504 #CJK UNIFIED IDEOGRAPH + {0xBFC3, 0x68F5}, //10505 #CJK UNIFIED IDEOGRAPH + {0xBFC4, 0x78D5}, //10506 #CJK UNIFIED IDEOGRAPH + {0xBFC5, 0x9897}, //10507 #CJK UNIFIED IDEOGRAPH + {0xBFC6, 0x79D1}, //10508 #CJK UNIFIED IDEOGRAPH + {0xBFC7, 0x58F3}, //10509 #CJK UNIFIED IDEOGRAPH + {0xBFC8, 0x54B3}, //10510 #CJK UNIFIED IDEOGRAPH + {0xBFC9, 0x53EF}, //10511 #CJK UNIFIED IDEOGRAPH + {0xBFCA, 0x6E34}, //10512 #CJK UNIFIED IDEOGRAPH + {0xBFCB, 0x514B}, //10513 #CJK UNIFIED IDEOGRAPH + {0xBFCC, 0x523B}, //10514 #CJK UNIFIED IDEOGRAPH + {0xBFCD, 0x5BA2}, //10515 #CJK UNIFIED IDEOGRAPH + {0xBFCE, 0x8BFE}, //10516 #CJK UNIFIED IDEOGRAPH + {0xBFCF, 0x80AF}, //10517 #CJK UNIFIED IDEOGRAPH + {0xBFD0, 0x5543}, //10518 #CJK UNIFIED IDEOGRAPH + {0xBFD1, 0x57A6}, //10519 #CJK UNIFIED IDEOGRAPH + {0xBFD2, 0x6073}, //10520 #CJK UNIFIED IDEOGRAPH + {0xBFD3, 0x5751}, //10521 #CJK UNIFIED IDEOGRAPH + {0xBFD4, 0x542D}, //10522 #CJK UNIFIED IDEOGRAPH + {0xBFD5, 0x7A7A}, //10523 #CJK UNIFIED IDEOGRAPH + {0xBFD6, 0x6050}, //10524 #CJK UNIFIED IDEOGRAPH + {0xBFD7, 0x5B54}, //10525 #CJK UNIFIED IDEOGRAPH + {0xBFD8, 0x63A7}, //10526 #CJK UNIFIED IDEOGRAPH + {0xBFD9, 0x62A0}, //10527 #CJK UNIFIED IDEOGRAPH + {0xBFDA, 0x53E3}, //10528 #CJK UNIFIED IDEOGRAPH + {0xBFDB, 0x6263}, //10529 #CJK UNIFIED IDEOGRAPH + {0xBFDC, 0x5BC7}, //10530 #CJK UNIFIED IDEOGRAPH + {0xBFDD, 0x67AF}, //10531 #CJK UNIFIED IDEOGRAPH + {0xBFDE, 0x54ED}, //10532 #CJK UNIFIED IDEOGRAPH + {0xBFDF, 0x7A9F}, //10533 #CJK UNIFIED IDEOGRAPH + {0xBFE0, 0x82E6}, //10534 #CJK UNIFIED IDEOGRAPH + {0xBFE1, 0x9177}, //10535 #CJK UNIFIED IDEOGRAPH + {0xBFE2, 0x5E93}, //10536 #CJK UNIFIED IDEOGRAPH + {0xBFE3, 0x88E4}, //10537 #CJK UNIFIED IDEOGRAPH + {0xBFE4, 0x5938}, //10538 #CJK UNIFIED IDEOGRAPH + {0xBFE5, 0x57AE}, //10539 #CJK UNIFIED IDEOGRAPH + {0xBFE6, 0x630E}, //10540 #CJK UNIFIED IDEOGRAPH + {0xBFE7, 0x8DE8}, //10541 #CJK UNIFIED IDEOGRAPH + {0xBFE8, 0x80EF}, //10542 #CJK UNIFIED IDEOGRAPH + {0xBFE9, 0x5757}, //10543 #CJK UNIFIED IDEOGRAPH + {0xBFEA, 0x7B77}, //10544 #CJK UNIFIED IDEOGRAPH + {0xBFEB, 0x4FA9}, //10545 #CJK UNIFIED IDEOGRAPH + {0xBFEC, 0x5FEB}, //10546 #CJK UNIFIED IDEOGRAPH + {0xBFED, 0x5BBD}, //10547 #CJK UNIFIED IDEOGRAPH + {0xBFEE, 0x6B3E}, //10548 #CJK UNIFIED IDEOGRAPH + {0xBFEF, 0x5321}, //10549 #CJK UNIFIED IDEOGRAPH + {0xBFF0, 0x7B50}, //10550 #CJK UNIFIED IDEOGRAPH + {0xBFF1, 0x72C2}, //10551 #CJK UNIFIED IDEOGRAPH + {0xBFF2, 0x6846}, //10552 #CJK UNIFIED IDEOGRAPH + {0xBFF3, 0x77FF}, //10553 #CJK UNIFIED IDEOGRAPH + {0xBFF4, 0x7736}, //10554 #CJK UNIFIED IDEOGRAPH + {0xBFF5, 0x65F7}, //10555 #CJK UNIFIED IDEOGRAPH + {0xBFF6, 0x51B5}, //10556 #CJK UNIFIED IDEOGRAPH + {0xBFF7, 0x4E8F}, //10557 #CJK UNIFIED IDEOGRAPH + {0xBFF8, 0x76D4}, //10558 #CJK UNIFIED IDEOGRAPH + {0xBFF9, 0x5CBF}, //10559 #CJK UNIFIED IDEOGRAPH + {0xBFFA, 0x7AA5}, //10560 #CJK UNIFIED IDEOGRAPH + {0xBFFB, 0x8475}, //10561 #CJK UNIFIED IDEOGRAPH + {0xBFFC, 0x594E}, //10562 #CJK UNIFIED IDEOGRAPH + {0xBFFD, 0x9B41}, //10563 #CJK UNIFIED IDEOGRAPH + {0xBFFE, 0x5080}, //10564 #CJK UNIFIED IDEOGRAPH + {0xC040, 0x7E5E}, //10565 #CJK UNIFIED IDEOGRAPH + {0xC041, 0x7E5F}, //10566 #CJK UNIFIED IDEOGRAPH + {0xC042, 0x7E60}, //10567 #CJK UNIFIED IDEOGRAPH + {0xC043, 0x7E61}, //10568 #CJK UNIFIED IDEOGRAPH + {0xC044, 0x7E62}, //10569 #CJK UNIFIED IDEOGRAPH + {0xC045, 0x7E63}, //10570 #CJK UNIFIED IDEOGRAPH + {0xC046, 0x7E64}, //10571 #CJK UNIFIED IDEOGRAPH + {0xC047, 0x7E65}, //10572 #CJK UNIFIED IDEOGRAPH + {0xC048, 0x7E66}, //10573 #CJK UNIFIED IDEOGRAPH + {0xC049, 0x7E67}, //10574 #CJK UNIFIED IDEOGRAPH + {0xC04A, 0x7E68}, //10575 #CJK UNIFIED IDEOGRAPH + {0xC04B, 0x7E69}, //10576 #CJK UNIFIED IDEOGRAPH + {0xC04C, 0x7E6A}, //10577 #CJK UNIFIED IDEOGRAPH + {0xC04D, 0x7E6B}, //10578 #CJK UNIFIED IDEOGRAPH + {0xC04E, 0x7E6C}, //10579 #CJK UNIFIED IDEOGRAPH + {0xC04F, 0x7E6D}, //10580 #CJK UNIFIED IDEOGRAPH + {0xC050, 0x7E6E}, //10581 #CJK UNIFIED IDEOGRAPH + {0xC051, 0x7E6F}, //10582 #CJK UNIFIED IDEOGRAPH + {0xC052, 0x7E70}, //10583 #CJK UNIFIED IDEOGRAPH + {0xC053, 0x7E71}, //10584 #CJK UNIFIED IDEOGRAPH + {0xC054, 0x7E72}, //10585 #CJK UNIFIED IDEOGRAPH + {0xC055, 0x7E73}, //10586 #CJK UNIFIED IDEOGRAPH + {0xC056, 0x7E74}, //10587 #CJK UNIFIED IDEOGRAPH + {0xC057, 0x7E75}, //10588 #CJK UNIFIED IDEOGRAPH + {0xC058, 0x7E76}, //10589 #CJK UNIFIED IDEOGRAPH + {0xC059, 0x7E77}, //10590 #CJK UNIFIED IDEOGRAPH + {0xC05A, 0x7E78}, //10591 #CJK UNIFIED IDEOGRAPH + {0xC05B, 0x7E79}, //10592 #CJK UNIFIED IDEOGRAPH + {0xC05C, 0x7E7A}, //10593 #CJK UNIFIED IDEOGRAPH + {0xC05D, 0x7E7B}, //10594 #CJK UNIFIED IDEOGRAPH + {0xC05E, 0x7E7C}, //10595 #CJK UNIFIED IDEOGRAPH + {0xC05F, 0x7E7D}, //10596 #CJK UNIFIED IDEOGRAPH + {0xC060, 0x7E7E}, //10597 #CJK UNIFIED IDEOGRAPH + {0xC061, 0x7E7F}, //10598 #CJK UNIFIED IDEOGRAPH + {0xC062, 0x7E80}, //10599 #CJK UNIFIED IDEOGRAPH + {0xC063, 0x7E81}, //10600 #CJK UNIFIED IDEOGRAPH + {0xC064, 0x7E83}, //10601 #CJK UNIFIED IDEOGRAPH + {0xC065, 0x7E84}, //10602 #CJK UNIFIED IDEOGRAPH + {0xC066, 0x7E85}, //10603 #CJK UNIFIED IDEOGRAPH + {0xC067, 0x7E86}, //10604 #CJK UNIFIED IDEOGRAPH + {0xC068, 0x7E87}, //10605 #CJK UNIFIED IDEOGRAPH + {0xC069, 0x7E88}, //10606 #CJK UNIFIED IDEOGRAPH + {0xC06A, 0x7E89}, //10607 #CJK UNIFIED IDEOGRAPH + {0xC06B, 0x7E8A}, //10608 #CJK UNIFIED IDEOGRAPH + {0xC06C, 0x7E8B}, //10609 #CJK UNIFIED IDEOGRAPH + {0xC06D, 0x7E8C}, //10610 #CJK UNIFIED IDEOGRAPH + {0xC06E, 0x7E8D}, //10611 #CJK UNIFIED IDEOGRAPH + {0xC06F, 0x7E8E}, //10612 #CJK UNIFIED IDEOGRAPH + {0xC070, 0x7E8F}, //10613 #CJK UNIFIED IDEOGRAPH + {0xC071, 0x7E90}, //10614 #CJK UNIFIED IDEOGRAPH + {0xC072, 0x7E91}, //10615 #CJK UNIFIED IDEOGRAPH + {0xC073, 0x7E92}, //10616 #CJK UNIFIED IDEOGRAPH + {0xC074, 0x7E93}, //10617 #CJK UNIFIED IDEOGRAPH + {0xC075, 0x7E94}, //10618 #CJK UNIFIED IDEOGRAPH + {0xC076, 0x7E95}, //10619 #CJK UNIFIED IDEOGRAPH + {0xC077, 0x7E96}, //10620 #CJK UNIFIED IDEOGRAPH + {0xC078, 0x7E97}, //10621 #CJK UNIFIED IDEOGRAPH + {0xC079, 0x7E98}, //10622 #CJK UNIFIED IDEOGRAPH + {0xC07A, 0x7E99}, //10623 #CJK UNIFIED IDEOGRAPH + {0xC07B, 0x7E9A}, //10624 #CJK UNIFIED IDEOGRAPH + {0xC07C, 0x7E9C}, //10625 #CJK UNIFIED IDEOGRAPH + {0xC07D, 0x7E9D}, //10626 #CJK UNIFIED IDEOGRAPH + {0xC07E, 0x7E9E}, //10627 #CJK UNIFIED IDEOGRAPH + {0xC080, 0x7EAE}, //10628 #CJK UNIFIED IDEOGRAPH + {0xC081, 0x7EB4}, //10629 #CJK UNIFIED IDEOGRAPH + {0xC082, 0x7EBB}, //10630 #CJK UNIFIED IDEOGRAPH + {0xC083, 0x7EBC}, //10631 #CJK UNIFIED IDEOGRAPH + {0xC084, 0x7ED6}, //10632 #CJK UNIFIED IDEOGRAPH + {0xC085, 0x7EE4}, //10633 #CJK UNIFIED IDEOGRAPH + {0xC086, 0x7EEC}, //10634 #CJK UNIFIED IDEOGRAPH + {0xC087, 0x7EF9}, //10635 #CJK UNIFIED IDEOGRAPH + {0xC088, 0x7F0A}, //10636 #CJK UNIFIED IDEOGRAPH + {0xC089, 0x7F10}, //10637 #CJK UNIFIED IDEOGRAPH + {0xC08A, 0x7F1E}, //10638 #CJK UNIFIED IDEOGRAPH + {0xC08B, 0x7F37}, //10639 #CJK UNIFIED IDEOGRAPH + {0xC08C, 0x7F39}, //10640 #CJK UNIFIED IDEOGRAPH + {0xC08D, 0x7F3B}, //10641 #CJK UNIFIED IDEOGRAPH + {0xC08E, 0x7F3C}, //10642 #CJK UNIFIED IDEOGRAPH + {0xC08F, 0x7F3D}, //10643 #CJK UNIFIED IDEOGRAPH + {0xC090, 0x7F3E}, //10644 #CJK UNIFIED IDEOGRAPH + {0xC091, 0x7F3F}, //10645 #CJK UNIFIED IDEOGRAPH + {0xC092, 0x7F40}, //10646 #CJK UNIFIED IDEOGRAPH + {0xC093, 0x7F41}, //10647 #CJK UNIFIED IDEOGRAPH + {0xC094, 0x7F43}, //10648 #CJK UNIFIED IDEOGRAPH + {0xC095, 0x7F46}, //10649 #CJK UNIFIED IDEOGRAPH + {0xC096, 0x7F47}, //10650 #CJK UNIFIED IDEOGRAPH + {0xC097, 0x7F48}, //10651 #CJK UNIFIED IDEOGRAPH + {0xC098, 0x7F49}, //10652 #CJK UNIFIED IDEOGRAPH + {0xC099, 0x7F4A}, //10653 #CJK UNIFIED IDEOGRAPH + {0xC09A, 0x7F4B}, //10654 #CJK UNIFIED IDEOGRAPH + {0xC09B, 0x7F4C}, //10655 #CJK UNIFIED IDEOGRAPH + {0xC09C, 0x7F4D}, //10656 #CJK UNIFIED IDEOGRAPH + {0xC09D, 0x7F4E}, //10657 #CJK UNIFIED IDEOGRAPH + {0xC09E, 0x7F4F}, //10658 #CJK UNIFIED IDEOGRAPH + {0xC09F, 0x7F52}, //10659 #CJK UNIFIED IDEOGRAPH + {0xC0A0, 0x7F53}, //10660 #CJK UNIFIED IDEOGRAPH + {0xC0A1, 0x9988}, //10661 #CJK UNIFIED IDEOGRAPH + {0xC0A2, 0x6127}, //10662 #CJK UNIFIED IDEOGRAPH + {0xC0A3, 0x6E83}, //10663 #CJK UNIFIED IDEOGRAPH + {0xC0A4, 0x5764}, //10664 #CJK UNIFIED IDEOGRAPH + {0xC0A5, 0x6606}, //10665 #CJK UNIFIED IDEOGRAPH + {0xC0A6, 0x6346}, //10666 #CJK UNIFIED IDEOGRAPH + {0xC0A7, 0x56F0}, //10667 #CJK UNIFIED IDEOGRAPH + {0xC0A8, 0x62EC}, //10668 #CJK UNIFIED IDEOGRAPH + {0xC0A9, 0x6269}, //10669 #CJK UNIFIED IDEOGRAPH + {0xC0AA, 0x5ED3}, //10670 #CJK UNIFIED IDEOGRAPH + {0xC0AB, 0x9614}, //10671 #CJK UNIFIED IDEOGRAPH + {0xC0AC, 0x5783}, //10672 #CJK UNIFIED IDEOGRAPH + {0xC0AD, 0x62C9}, //10673 #CJK UNIFIED IDEOGRAPH + {0xC0AE, 0x5587}, //10674 #CJK UNIFIED IDEOGRAPH + {0xC0AF, 0x8721}, //10675 #CJK UNIFIED IDEOGRAPH + {0xC0B0, 0x814A}, //10676 #CJK UNIFIED IDEOGRAPH + {0xC0B1, 0x8FA3}, //10677 #CJK UNIFIED IDEOGRAPH + {0xC0B2, 0x5566}, //10678 #CJK UNIFIED IDEOGRAPH + {0xC0B3, 0x83B1}, //10679 #CJK UNIFIED IDEOGRAPH + {0xC0B4, 0x6765}, //10680 #CJK UNIFIED IDEOGRAPH + {0xC0B5, 0x8D56}, //10681 #CJK UNIFIED IDEOGRAPH + {0xC0B6, 0x84DD}, //10682 #CJK UNIFIED IDEOGRAPH + {0xC0B7, 0x5A6A}, //10683 #CJK UNIFIED IDEOGRAPH + {0xC0B8, 0x680F}, //10684 #CJK UNIFIED IDEOGRAPH + {0xC0B9, 0x62E6}, //10685 #CJK UNIFIED IDEOGRAPH + {0xC0BA, 0x7BEE}, //10686 #CJK UNIFIED IDEOGRAPH + {0xC0BB, 0x9611}, //10687 #CJK UNIFIED IDEOGRAPH + {0xC0BC, 0x5170}, //10688 #CJK UNIFIED IDEOGRAPH + {0xC0BD, 0x6F9C}, //10689 #CJK UNIFIED IDEOGRAPH + {0xC0BE, 0x8C30}, //10690 #CJK UNIFIED IDEOGRAPH + {0xC0BF, 0x63FD}, //10691 #CJK UNIFIED IDEOGRAPH + {0xC0C0, 0x89C8}, //10692 #CJK UNIFIED IDEOGRAPH + {0xC0C1, 0x61D2}, //10693 #CJK UNIFIED IDEOGRAPH + {0xC0C2, 0x7F06}, //10694 #CJK UNIFIED IDEOGRAPH + {0xC0C3, 0x70C2}, //10695 #CJK UNIFIED IDEOGRAPH + {0xC0C4, 0x6EE5}, //10696 #CJK UNIFIED IDEOGRAPH + {0xC0C5, 0x7405}, //10697 #CJK UNIFIED IDEOGRAPH + {0xC0C6, 0x6994}, //10698 #CJK UNIFIED IDEOGRAPH + {0xC0C7, 0x72FC}, //10699 #CJK UNIFIED IDEOGRAPH + {0xC0C8, 0x5ECA}, //10700 #CJK UNIFIED IDEOGRAPH + {0xC0C9, 0x90CE}, //10701 #CJK UNIFIED IDEOGRAPH + {0xC0CA, 0x6717}, //10702 #CJK UNIFIED IDEOGRAPH + {0xC0CB, 0x6D6A}, //10703 #CJK UNIFIED IDEOGRAPH + {0xC0CC, 0x635E}, //10704 #CJK UNIFIED IDEOGRAPH + {0xC0CD, 0x52B3}, //10705 #CJK UNIFIED IDEOGRAPH + {0xC0CE, 0x7262}, //10706 #CJK UNIFIED IDEOGRAPH + {0xC0CF, 0x8001}, //10707 #CJK UNIFIED IDEOGRAPH + {0xC0D0, 0x4F6C}, //10708 #CJK UNIFIED IDEOGRAPH + {0xC0D1, 0x59E5}, //10709 #CJK UNIFIED IDEOGRAPH + {0xC0D2, 0x916A}, //10710 #CJK UNIFIED IDEOGRAPH + {0xC0D3, 0x70D9}, //10711 #CJK UNIFIED IDEOGRAPH + {0xC0D4, 0x6D9D}, //10712 #CJK UNIFIED IDEOGRAPH + {0xC0D5, 0x52D2}, //10713 #CJK UNIFIED IDEOGRAPH + {0xC0D6, 0x4E50}, //10714 #CJK UNIFIED IDEOGRAPH + {0xC0D7, 0x96F7}, //10715 #CJK UNIFIED IDEOGRAPH + {0xC0D8, 0x956D}, //10716 #CJK UNIFIED IDEOGRAPH + {0xC0D9, 0x857E}, //10717 #CJK UNIFIED IDEOGRAPH + {0xC0DA, 0x78CA}, //10718 #CJK UNIFIED IDEOGRAPH + {0xC0DB, 0x7D2F}, //10719 #CJK UNIFIED IDEOGRAPH + {0xC0DC, 0x5121}, //10720 #CJK UNIFIED IDEOGRAPH + {0xC0DD, 0x5792}, //10721 #CJK UNIFIED IDEOGRAPH + {0xC0DE, 0x64C2}, //10722 #CJK UNIFIED IDEOGRAPH + {0xC0DF, 0x808B}, //10723 #CJK UNIFIED IDEOGRAPH + {0xC0E0, 0x7C7B}, //10724 #CJK UNIFIED IDEOGRAPH + {0xC0E1, 0x6CEA}, //10725 #CJK UNIFIED IDEOGRAPH + {0xC0E2, 0x68F1}, //10726 #CJK UNIFIED IDEOGRAPH + {0xC0E3, 0x695E}, //10727 #CJK UNIFIED IDEOGRAPH + {0xC0E4, 0x51B7}, //10728 #CJK UNIFIED IDEOGRAPH + {0xC0E5, 0x5398}, //10729 #CJK UNIFIED IDEOGRAPH + {0xC0E6, 0x68A8}, //10730 #CJK UNIFIED IDEOGRAPH + {0xC0E7, 0x7281}, //10731 #CJK UNIFIED IDEOGRAPH + {0xC0E8, 0x9ECE}, //10732 #CJK UNIFIED IDEOGRAPH + {0xC0E9, 0x7BF1}, //10733 #CJK UNIFIED IDEOGRAPH + {0xC0EA, 0x72F8}, //10734 #CJK UNIFIED IDEOGRAPH + {0xC0EB, 0x79BB}, //10735 #CJK UNIFIED IDEOGRAPH + {0xC0EC, 0x6F13}, //10736 #CJK UNIFIED IDEOGRAPH + {0xC0ED, 0x7406}, //10737 #CJK UNIFIED IDEOGRAPH + {0xC0EE, 0x674E}, //10738 #CJK UNIFIED IDEOGRAPH + {0xC0EF, 0x91CC}, //10739 #CJK UNIFIED IDEOGRAPH + {0xC0F0, 0x9CA4}, //10740 #CJK UNIFIED IDEOGRAPH + {0xC0F1, 0x793C}, //10741 #CJK UNIFIED IDEOGRAPH + {0xC0F2, 0x8389}, //10742 #CJK UNIFIED IDEOGRAPH + {0xC0F3, 0x8354}, //10743 #CJK UNIFIED IDEOGRAPH + {0xC0F4, 0x540F}, //10744 #CJK UNIFIED IDEOGRAPH + {0xC0F5, 0x6817}, //10745 #CJK UNIFIED IDEOGRAPH + {0xC0F6, 0x4E3D}, //10746 #CJK UNIFIED IDEOGRAPH + {0xC0F7, 0x5389}, //10747 #CJK UNIFIED IDEOGRAPH + {0xC0F8, 0x52B1}, //10748 #CJK UNIFIED IDEOGRAPH + {0xC0F9, 0x783E}, //10749 #CJK UNIFIED IDEOGRAPH + {0xC0FA, 0x5386}, //10750 #CJK UNIFIED IDEOGRAPH + {0xC0FB, 0x5229}, //10751 #CJK UNIFIED IDEOGRAPH + {0xC0FC, 0x5088}, //10752 #CJK UNIFIED IDEOGRAPH + {0xC0FD, 0x4F8B}, //10753 #CJK UNIFIED IDEOGRAPH + {0xC0FE, 0x4FD0}, //10754 #CJK UNIFIED IDEOGRAPH + {0xC140, 0x7F56}, //10755 #CJK UNIFIED IDEOGRAPH + {0xC141, 0x7F59}, //10756 #CJK UNIFIED IDEOGRAPH + {0xC142, 0x7F5B}, //10757 #CJK UNIFIED IDEOGRAPH + {0xC143, 0x7F5C}, //10758 #CJK UNIFIED IDEOGRAPH + {0xC144, 0x7F5D}, //10759 #CJK UNIFIED IDEOGRAPH + {0xC145, 0x7F5E}, //10760 #CJK UNIFIED IDEOGRAPH + {0xC146, 0x7F60}, //10761 #CJK UNIFIED IDEOGRAPH + {0xC147, 0x7F63}, //10762 #CJK UNIFIED IDEOGRAPH + {0xC148, 0x7F64}, //10763 #CJK UNIFIED IDEOGRAPH + {0xC149, 0x7F65}, //10764 #CJK UNIFIED IDEOGRAPH + {0xC14A, 0x7F66}, //10765 #CJK UNIFIED IDEOGRAPH + {0xC14B, 0x7F67}, //10766 #CJK UNIFIED IDEOGRAPH + {0xC14C, 0x7F6B}, //10767 #CJK UNIFIED IDEOGRAPH + {0xC14D, 0x7F6C}, //10768 #CJK UNIFIED IDEOGRAPH + {0xC14E, 0x7F6D}, //10769 #CJK UNIFIED IDEOGRAPH + {0xC14F, 0x7F6F}, //10770 #CJK UNIFIED IDEOGRAPH + {0xC150, 0x7F70}, //10771 #CJK UNIFIED IDEOGRAPH + {0xC151, 0x7F73}, //10772 #CJK UNIFIED IDEOGRAPH + {0xC152, 0x7F75}, //10773 #CJK UNIFIED IDEOGRAPH + {0xC153, 0x7F76}, //10774 #CJK UNIFIED IDEOGRAPH + {0xC154, 0x7F77}, //10775 #CJK UNIFIED IDEOGRAPH + {0xC155, 0x7F78}, //10776 #CJK UNIFIED IDEOGRAPH + {0xC156, 0x7F7A}, //10777 #CJK UNIFIED IDEOGRAPH + {0xC157, 0x7F7B}, //10778 #CJK UNIFIED IDEOGRAPH + {0xC158, 0x7F7C}, //10779 #CJK UNIFIED IDEOGRAPH + {0xC159, 0x7F7D}, //10780 #CJK UNIFIED IDEOGRAPH + {0xC15A, 0x7F7F}, //10781 #CJK UNIFIED IDEOGRAPH + {0xC15B, 0x7F80}, //10782 #CJK UNIFIED IDEOGRAPH + {0xC15C, 0x7F82}, //10783 #CJK UNIFIED IDEOGRAPH + {0xC15D, 0x7F83}, //10784 #CJK UNIFIED IDEOGRAPH + {0xC15E, 0x7F84}, //10785 #CJK UNIFIED IDEOGRAPH + {0xC15F, 0x7F85}, //10786 #CJK UNIFIED IDEOGRAPH + {0xC160, 0x7F86}, //10787 #CJK UNIFIED IDEOGRAPH + {0xC161, 0x7F87}, //10788 #CJK UNIFIED IDEOGRAPH + {0xC162, 0x7F88}, //10789 #CJK UNIFIED IDEOGRAPH + {0xC163, 0x7F89}, //10790 #CJK UNIFIED IDEOGRAPH + {0xC164, 0x7F8B}, //10791 #CJK UNIFIED IDEOGRAPH + {0xC165, 0x7F8D}, //10792 #CJK UNIFIED IDEOGRAPH + {0xC166, 0x7F8F}, //10793 #CJK UNIFIED IDEOGRAPH + {0xC167, 0x7F90}, //10794 #CJK UNIFIED IDEOGRAPH + {0xC168, 0x7F91}, //10795 #CJK UNIFIED IDEOGRAPH + {0xC169, 0x7F92}, //10796 #CJK UNIFIED IDEOGRAPH + {0xC16A, 0x7F93}, //10797 #CJK UNIFIED IDEOGRAPH + {0xC16B, 0x7F95}, //10798 #CJK UNIFIED IDEOGRAPH + {0xC16C, 0x7F96}, //10799 #CJK UNIFIED IDEOGRAPH + {0xC16D, 0x7F97}, //10800 #CJK UNIFIED IDEOGRAPH + {0xC16E, 0x7F98}, //10801 #CJK UNIFIED IDEOGRAPH + {0xC16F, 0x7F99}, //10802 #CJK UNIFIED IDEOGRAPH + {0xC170, 0x7F9B}, //10803 #CJK UNIFIED IDEOGRAPH + {0xC171, 0x7F9C}, //10804 #CJK UNIFIED IDEOGRAPH + {0xC172, 0x7FA0}, //10805 #CJK UNIFIED IDEOGRAPH + {0xC173, 0x7FA2}, //10806 #CJK UNIFIED IDEOGRAPH + {0xC174, 0x7FA3}, //10807 #CJK UNIFIED IDEOGRAPH + {0xC175, 0x7FA5}, //10808 #CJK UNIFIED IDEOGRAPH + {0xC176, 0x7FA6}, //10809 #CJK UNIFIED IDEOGRAPH + {0xC177, 0x7FA8}, //10810 #CJK UNIFIED IDEOGRAPH + {0xC178, 0x7FA9}, //10811 #CJK UNIFIED IDEOGRAPH + {0xC179, 0x7FAA}, //10812 #CJK UNIFIED IDEOGRAPH + {0xC17A, 0x7FAB}, //10813 #CJK UNIFIED IDEOGRAPH + {0xC17B, 0x7FAC}, //10814 #CJK UNIFIED IDEOGRAPH + {0xC17C, 0x7FAD}, //10815 #CJK UNIFIED IDEOGRAPH + {0xC17D, 0x7FAE}, //10816 #CJK UNIFIED IDEOGRAPH + {0xC17E, 0x7FB1}, //10817 #CJK UNIFIED IDEOGRAPH + {0xC180, 0x7FB3}, //10818 #CJK UNIFIED IDEOGRAPH + {0xC181, 0x7FB4}, //10819 #CJK UNIFIED IDEOGRAPH + {0xC182, 0x7FB5}, //10820 #CJK UNIFIED IDEOGRAPH + {0xC183, 0x7FB6}, //10821 #CJK UNIFIED IDEOGRAPH + {0xC184, 0x7FB7}, //10822 #CJK UNIFIED IDEOGRAPH + {0xC185, 0x7FBA}, //10823 #CJK UNIFIED IDEOGRAPH + {0xC186, 0x7FBB}, //10824 #CJK UNIFIED IDEOGRAPH + {0xC187, 0x7FBE}, //10825 #CJK UNIFIED IDEOGRAPH + {0xC188, 0x7FC0}, //10826 #CJK UNIFIED IDEOGRAPH + {0xC189, 0x7FC2}, //10827 #CJK UNIFIED IDEOGRAPH + {0xC18A, 0x7FC3}, //10828 #CJK UNIFIED IDEOGRAPH + {0xC18B, 0x7FC4}, //10829 #CJK UNIFIED IDEOGRAPH + {0xC18C, 0x7FC6}, //10830 #CJK UNIFIED IDEOGRAPH + {0xC18D, 0x7FC7}, //10831 #CJK UNIFIED IDEOGRAPH + {0xC18E, 0x7FC8}, //10832 #CJK UNIFIED IDEOGRAPH + {0xC18F, 0x7FC9}, //10833 #CJK UNIFIED IDEOGRAPH + {0xC190, 0x7FCB}, //10834 #CJK UNIFIED IDEOGRAPH + {0xC191, 0x7FCD}, //10835 #CJK UNIFIED IDEOGRAPH + {0xC192, 0x7FCF}, //10836 #CJK UNIFIED IDEOGRAPH + {0xC193, 0x7FD0}, //10837 #CJK UNIFIED IDEOGRAPH + {0xC194, 0x7FD1}, //10838 #CJK UNIFIED IDEOGRAPH + {0xC195, 0x7FD2}, //10839 #CJK UNIFIED IDEOGRAPH + {0xC196, 0x7FD3}, //10840 #CJK UNIFIED IDEOGRAPH + {0xC197, 0x7FD6}, //10841 #CJK UNIFIED IDEOGRAPH + {0xC198, 0x7FD7}, //10842 #CJK UNIFIED IDEOGRAPH + {0xC199, 0x7FD9}, //10843 #CJK UNIFIED IDEOGRAPH + {0xC19A, 0x7FDA}, //10844 #CJK UNIFIED IDEOGRAPH + {0xC19B, 0x7FDB}, //10845 #CJK UNIFIED IDEOGRAPH + {0xC19C, 0x7FDC}, //10846 #CJK UNIFIED IDEOGRAPH + {0xC19D, 0x7FDD}, //10847 #CJK UNIFIED IDEOGRAPH + {0xC19E, 0x7FDE}, //10848 #CJK UNIFIED IDEOGRAPH + {0xC19F, 0x7FE2}, //10849 #CJK UNIFIED IDEOGRAPH + {0xC1A0, 0x7FE3}, //10850 #CJK UNIFIED IDEOGRAPH + {0xC1A1, 0x75E2}, //10851 #CJK UNIFIED IDEOGRAPH + {0xC1A2, 0x7ACB}, //10852 #CJK UNIFIED IDEOGRAPH + {0xC1A3, 0x7C92}, //10853 #CJK UNIFIED IDEOGRAPH + {0xC1A4, 0x6CA5}, //10854 #CJK UNIFIED IDEOGRAPH + {0xC1A5, 0x96B6}, //10855 #CJK UNIFIED IDEOGRAPH + {0xC1A6, 0x529B}, //10856 #CJK UNIFIED IDEOGRAPH + {0xC1A7, 0x7483}, //10857 #CJK UNIFIED IDEOGRAPH + {0xC1A8, 0x54E9}, //10858 #CJK UNIFIED IDEOGRAPH + {0xC1A9, 0x4FE9}, //10859 #CJK UNIFIED IDEOGRAPH + {0xC1AA, 0x8054}, //10860 #CJK UNIFIED IDEOGRAPH + {0xC1AB, 0x83B2}, //10861 #CJK UNIFIED IDEOGRAPH + {0xC1AC, 0x8FDE}, //10862 #CJK UNIFIED IDEOGRAPH + {0xC1AD, 0x9570}, //10863 #CJK UNIFIED IDEOGRAPH + {0xC1AE, 0x5EC9}, //10864 #CJK UNIFIED IDEOGRAPH + {0xC1AF, 0x601C}, //10865 #CJK UNIFIED IDEOGRAPH + {0xC1B0, 0x6D9F}, //10866 #CJK UNIFIED IDEOGRAPH + {0xC1B1, 0x5E18}, //10867 #CJK UNIFIED IDEOGRAPH + {0xC1B2, 0x655B}, //10868 #CJK UNIFIED IDEOGRAPH + {0xC1B3, 0x8138}, //10869 #CJK UNIFIED IDEOGRAPH + {0xC1B4, 0x94FE}, //10870 #CJK UNIFIED IDEOGRAPH + {0xC1B5, 0x604B}, //10871 #CJK UNIFIED IDEOGRAPH + {0xC1B6, 0x70BC}, //10872 #CJK UNIFIED IDEOGRAPH + {0xC1B7, 0x7EC3}, //10873 #CJK UNIFIED IDEOGRAPH + {0xC1B8, 0x7CAE}, //10874 #CJK UNIFIED IDEOGRAPH + {0xC1B9, 0x51C9}, //10875 #CJK UNIFIED IDEOGRAPH + {0xC1BA, 0x6881}, //10876 #CJK UNIFIED IDEOGRAPH + {0xC1BB, 0x7CB1}, //10877 #CJK UNIFIED IDEOGRAPH + {0xC1BC, 0x826F}, //10878 #CJK UNIFIED IDEOGRAPH + {0xC1BD, 0x4E24}, //10879 #CJK UNIFIED IDEOGRAPH + {0xC1BE, 0x8F86}, //10880 #CJK UNIFIED IDEOGRAPH + {0xC1BF, 0x91CF}, //10881 #CJK UNIFIED IDEOGRAPH + {0xC1C0, 0x667E}, //10882 #CJK UNIFIED IDEOGRAPH + {0xC1C1, 0x4EAE}, //10883 #CJK UNIFIED IDEOGRAPH + {0xC1C2, 0x8C05}, //10884 #CJK UNIFIED IDEOGRAPH + {0xC1C3, 0x64A9}, //10885 #CJK UNIFIED IDEOGRAPH + {0xC1C4, 0x804A}, //10886 #CJK UNIFIED IDEOGRAPH + {0xC1C5, 0x50DA}, //10887 #CJK UNIFIED IDEOGRAPH + {0xC1C6, 0x7597}, //10888 #CJK UNIFIED IDEOGRAPH + {0xC1C7, 0x71CE}, //10889 #CJK UNIFIED IDEOGRAPH + {0xC1C8, 0x5BE5}, //10890 #CJK UNIFIED IDEOGRAPH + {0xC1C9, 0x8FBD}, //10891 #CJK UNIFIED IDEOGRAPH + {0xC1CA, 0x6F66}, //10892 #CJK UNIFIED IDEOGRAPH + {0xC1CB, 0x4E86}, //10893 #CJK UNIFIED IDEOGRAPH + {0xC1CC, 0x6482}, //10894 #CJK UNIFIED IDEOGRAPH + {0xC1CD, 0x9563}, //10895 #CJK UNIFIED IDEOGRAPH + {0xC1CE, 0x5ED6}, //10896 #CJK UNIFIED IDEOGRAPH + {0xC1CF, 0x6599}, //10897 #CJK UNIFIED IDEOGRAPH + {0xC1D0, 0x5217}, //10898 #CJK UNIFIED IDEOGRAPH + {0xC1D1, 0x88C2}, //10899 #CJK UNIFIED IDEOGRAPH + {0xC1D2, 0x70C8}, //10900 #CJK UNIFIED IDEOGRAPH + {0xC1D3, 0x52A3}, //10901 #CJK UNIFIED IDEOGRAPH + {0xC1D4, 0x730E}, //10902 #CJK UNIFIED IDEOGRAPH + {0xC1D5, 0x7433}, //10903 #CJK UNIFIED IDEOGRAPH + {0xC1D6, 0x6797}, //10904 #CJK UNIFIED IDEOGRAPH + {0xC1D7, 0x78F7}, //10905 #CJK UNIFIED IDEOGRAPH + {0xC1D8, 0x9716}, //10906 #CJK UNIFIED IDEOGRAPH + {0xC1D9, 0x4E34}, //10907 #CJK UNIFIED IDEOGRAPH + {0xC1DA, 0x90BB}, //10908 #CJK UNIFIED IDEOGRAPH + {0xC1DB, 0x9CDE}, //10909 #CJK UNIFIED IDEOGRAPH + {0xC1DC, 0x6DCB}, //10910 #CJK UNIFIED IDEOGRAPH + {0xC1DD, 0x51DB}, //10911 #CJK UNIFIED IDEOGRAPH + {0xC1DE, 0x8D41}, //10912 #CJK UNIFIED IDEOGRAPH + {0xC1DF, 0x541D}, //10913 #CJK UNIFIED IDEOGRAPH + {0xC1E0, 0x62CE}, //10914 #CJK UNIFIED IDEOGRAPH + {0xC1E1, 0x73B2}, //10915 #CJK UNIFIED IDEOGRAPH + {0xC1E2, 0x83F1}, //10916 #CJK UNIFIED IDEOGRAPH + {0xC1E3, 0x96F6}, //10917 #CJK UNIFIED IDEOGRAPH + {0xC1E4, 0x9F84}, //10918 #CJK UNIFIED IDEOGRAPH + {0xC1E5, 0x94C3}, //10919 #CJK UNIFIED IDEOGRAPH + {0xC1E6, 0x4F36}, //10920 #CJK UNIFIED IDEOGRAPH + {0xC1E7, 0x7F9A}, //10921 #CJK UNIFIED IDEOGRAPH + {0xC1E8, 0x51CC}, //10922 #CJK UNIFIED IDEOGRAPH + {0xC1E9, 0x7075}, //10923 #CJK UNIFIED IDEOGRAPH + {0xC1EA, 0x9675}, //10924 #CJK UNIFIED IDEOGRAPH + {0xC1EB, 0x5CAD}, //10925 #CJK UNIFIED IDEOGRAPH + {0xC1EC, 0x9886}, //10926 #CJK UNIFIED IDEOGRAPH + {0xC1ED, 0x53E6}, //10927 #CJK UNIFIED IDEOGRAPH + {0xC1EE, 0x4EE4}, //10928 #CJK UNIFIED IDEOGRAPH + {0xC1EF, 0x6E9C}, //10929 #CJK UNIFIED IDEOGRAPH + {0xC1F0, 0x7409}, //10930 #CJK UNIFIED IDEOGRAPH + {0xC1F1, 0x69B4}, //10931 #CJK UNIFIED IDEOGRAPH + {0xC1F2, 0x786B}, //10932 #CJK UNIFIED IDEOGRAPH + {0xC1F3, 0x998F}, //10933 #CJK UNIFIED IDEOGRAPH + {0xC1F4, 0x7559}, //10934 #CJK UNIFIED IDEOGRAPH + {0xC1F5, 0x5218}, //10935 #CJK UNIFIED IDEOGRAPH + {0xC1F6, 0x7624}, //10936 #CJK UNIFIED IDEOGRAPH + {0xC1F7, 0x6D41}, //10937 #CJK UNIFIED IDEOGRAPH + {0xC1F8, 0x67F3}, //10938 #CJK UNIFIED IDEOGRAPH + {0xC1F9, 0x516D}, //10939 #CJK UNIFIED IDEOGRAPH + {0xC1FA, 0x9F99}, //10940 #CJK UNIFIED IDEOGRAPH + {0xC1FB, 0x804B}, //10941 #CJK UNIFIED IDEOGRAPH + {0xC1FC, 0x5499}, //10942 #CJK UNIFIED IDEOGRAPH + {0xC1FD, 0x7B3C}, //10943 #CJK UNIFIED IDEOGRAPH + {0xC1FE, 0x7ABF}, //10944 #CJK UNIFIED IDEOGRAPH + {0xC240, 0x7FE4}, //10945 #CJK UNIFIED IDEOGRAPH + {0xC241, 0x7FE7}, //10946 #CJK UNIFIED IDEOGRAPH + {0xC242, 0x7FE8}, //10947 #CJK UNIFIED IDEOGRAPH + {0xC243, 0x7FEA}, //10948 #CJK UNIFIED IDEOGRAPH + {0xC244, 0x7FEB}, //10949 #CJK UNIFIED IDEOGRAPH + {0xC245, 0x7FEC}, //10950 #CJK UNIFIED IDEOGRAPH + {0xC246, 0x7FED}, //10951 #CJK UNIFIED IDEOGRAPH + {0xC247, 0x7FEF}, //10952 #CJK UNIFIED IDEOGRAPH + {0xC248, 0x7FF2}, //10953 #CJK UNIFIED IDEOGRAPH + {0xC249, 0x7FF4}, //10954 #CJK UNIFIED IDEOGRAPH + {0xC24A, 0x7FF5}, //10955 #CJK UNIFIED IDEOGRAPH + {0xC24B, 0x7FF6}, //10956 #CJK UNIFIED IDEOGRAPH + {0xC24C, 0x7FF7}, //10957 #CJK UNIFIED IDEOGRAPH + {0xC24D, 0x7FF8}, //10958 #CJK UNIFIED IDEOGRAPH + {0xC24E, 0x7FF9}, //10959 #CJK UNIFIED IDEOGRAPH + {0xC24F, 0x7FFA}, //10960 #CJK UNIFIED IDEOGRAPH + {0xC250, 0x7FFD}, //10961 #CJK UNIFIED IDEOGRAPH + {0xC251, 0x7FFE}, //10962 #CJK UNIFIED IDEOGRAPH + {0xC252, 0x7FFF}, //10963 #CJK UNIFIED IDEOGRAPH + {0xC253, 0x8002}, //10964 #CJK UNIFIED IDEOGRAPH + {0xC254, 0x8007}, //10965 #CJK UNIFIED IDEOGRAPH + {0xC255, 0x8008}, //10966 #CJK UNIFIED IDEOGRAPH + {0xC256, 0x8009}, //10967 #CJK UNIFIED IDEOGRAPH + {0xC257, 0x800A}, //10968 #CJK UNIFIED IDEOGRAPH + {0xC258, 0x800E}, //10969 #CJK UNIFIED IDEOGRAPH + {0xC259, 0x800F}, //10970 #CJK UNIFIED IDEOGRAPH + {0xC25A, 0x8011}, //10971 #CJK UNIFIED IDEOGRAPH + {0xC25B, 0x8013}, //10972 #CJK UNIFIED IDEOGRAPH + {0xC25C, 0x801A}, //10973 #CJK UNIFIED IDEOGRAPH + {0xC25D, 0x801B}, //10974 #CJK UNIFIED IDEOGRAPH + {0xC25E, 0x801D}, //10975 #CJK UNIFIED IDEOGRAPH + {0xC25F, 0x801E}, //10976 #CJK UNIFIED IDEOGRAPH + {0xC260, 0x801F}, //10977 #CJK UNIFIED IDEOGRAPH + {0xC261, 0x8021}, //10978 #CJK UNIFIED IDEOGRAPH + {0xC262, 0x8023}, //10979 #CJK UNIFIED IDEOGRAPH + {0xC263, 0x8024}, //10980 #CJK UNIFIED IDEOGRAPH + {0xC264, 0x802B}, //10981 #CJK UNIFIED IDEOGRAPH + {0xC265, 0x802C}, //10982 #CJK UNIFIED IDEOGRAPH + {0xC266, 0x802D}, //10983 #CJK UNIFIED IDEOGRAPH + {0xC267, 0x802E}, //10984 #CJK UNIFIED IDEOGRAPH + {0xC268, 0x802F}, //10985 #CJK UNIFIED IDEOGRAPH + {0xC269, 0x8030}, //10986 #CJK UNIFIED IDEOGRAPH + {0xC26A, 0x8032}, //10987 #CJK UNIFIED IDEOGRAPH + {0xC26B, 0x8034}, //10988 #CJK UNIFIED IDEOGRAPH + {0xC26C, 0x8039}, //10989 #CJK UNIFIED IDEOGRAPH + {0xC26D, 0x803A}, //10990 #CJK UNIFIED IDEOGRAPH + {0xC26E, 0x803C}, //10991 #CJK UNIFIED IDEOGRAPH + {0xC26F, 0x803E}, //10992 #CJK UNIFIED IDEOGRAPH + {0xC270, 0x8040}, //10993 #CJK UNIFIED IDEOGRAPH + {0xC271, 0x8041}, //10994 #CJK UNIFIED IDEOGRAPH + {0xC272, 0x8044}, //10995 #CJK UNIFIED IDEOGRAPH + {0xC273, 0x8045}, //10996 #CJK UNIFIED IDEOGRAPH + {0xC274, 0x8047}, //10997 #CJK UNIFIED IDEOGRAPH + {0xC275, 0x8048}, //10998 #CJK UNIFIED IDEOGRAPH + {0xC276, 0x8049}, //10999 #CJK UNIFIED IDEOGRAPH + {0xC277, 0x804E}, //11000 #CJK UNIFIED IDEOGRAPH + {0xC278, 0x804F}, //11001 #CJK UNIFIED IDEOGRAPH + {0xC279, 0x8050}, //11002 #CJK UNIFIED IDEOGRAPH + {0xC27A, 0x8051}, //11003 #CJK UNIFIED IDEOGRAPH + {0xC27B, 0x8053}, //11004 #CJK UNIFIED IDEOGRAPH + {0xC27C, 0x8055}, //11005 #CJK UNIFIED IDEOGRAPH + {0xC27D, 0x8056}, //11006 #CJK UNIFIED IDEOGRAPH + {0xC27E, 0x8057}, //11007 #CJK UNIFIED IDEOGRAPH + {0xC280, 0x8059}, //11008 #CJK UNIFIED IDEOGRAPH + {0xC281, 0x805B}, //11009 #CJK UNIFIED IDEOGRAPH + {0xC282, 0x805C}, //11010 #CJK UNIFIED IDEOGRAPH + {0xC283, 0x805D}, //11011 #CJK UNIFIED IDEOGRAPH + {0xC284, 0x805E}, //11012 #CJK UNIFIED IDEOGRAPH + {0xC285, 0x805F}, //11013 #CJK UNIFIED IDEOGRAPH + {0xC286, 0x8060}, //11014 #CJK UNIFIED IDEOGRAPH + {0xC287, 0x8061}, //11015 #CJK UNIFIED IDEOGRAPH + {0xC288, 0x8062}, //11016 #CJK UNIFIED IDEOGRAPH + {0xC289, 0x8063}, //11017 #CJK UNIFIED IDEOGRAPH + {0xC28A, 0x8064}, //11018 #CJK UNIFIED IDEOGRAPH + {0xC28B, 0x8065}, //11019 #CJK UNIFIED IDEOGRAPH + {0xC28C, 0x8066}, //11020 #CJK UNIFIED IDEOGRAPH + {0xC28D, 0x8067}, //11021 #CJK UNIFIED IDEOGRAPH + {0xC28E, 0x8068}, //11022 #CJK UNIFIED IDEOGRAPH + {0xC28F, 0x806B}, //11023 #CJK UNIFIED IDEOGRAPH + {0xC290, 0x806C}, //11024 #CJK UNIFIED IDEOGRAPH + {0xC291, 0x806D}, //11025 #CJK UNIFIED IDEOGRAPH + {0xC292, 0x806E}, //11026 #CJK UNIFIED IDEOGRAPH + {0xC293, 0x806F}, //11027 #CJK UNIFIED IDEOGRAPH + {0xC294, 0x8070}, //11028 #CJK UNIFIED IDEOGRAPH + {0xC295, 0x8072}, //11029 #CJK UNIFIED IDEOGRAPH + {0xC296, 0x8073}, //11030 #CJK UNIFIED IDEOGRAPH + {0xC297, 0x8074}, //11031 #CJK UNIFIED IDEOGRAPH + {0xC298, 0x8075}, //11032 #CJK UNIFIED IDEOGRAPH + {0xC299, 0x8076}, //11033 #CJK UNIFIED IDEOGRAPH + {0xC29A, 0x8077}, //11034 #CJK UNIFIED IDEOGRAPH + {0xC29B, 0x8078}, //11035 #CJK UNIFIED IDEOGRAPH + {0xC29C, 0x8079}, //11036 #CJK UNIFIED IDEOGRAPH + {0xC29D, 0x807A}, //11037 #CJK UNIFIED IDEOGRAPH + {0xC29E, 0x807B}, //11038 #CJK UNIFIED IDEOGRAPH + {0xC29F, 0x807C}, //11039 #CJK UNIFIED IDEOGRAPH + {0xC2A0, 0x807D}, //11040 #CJK UNIFIED IDEOGRAPH + {0xC2A1, 0x9686}, //11041 #CJK UNIFIED IDEOGRAPH + {0xC2A2, 0x5784}, //11042 #CJK UNIFIED IDEOGRAPH + {0xC2A3, 0x62E2}, //11043 #CJK UNIFIED IDEOGRAPH + {0xC2A4, 0x9647}, //11044 #CJK UNIFIED IDEOGRAPH + {0xC2A5, 0x697C}, //11045 #CJK UNIFIED IDEOGRAPH + {0xC2A6, 0x5A04}, //11046 #CJK UNIFIED IDEOGRAPH + {0xC2A7, 0x6402}, //11047 #CJK UNIFIED IDEOGRAPH + {0xC2A8, 0x7BD3}, //11048 #CJK UNIFIED IDEOGRAPH + {0xC2A9, 0x6F0F}, //11049 #CJK UNIFIED IDEOGRAPH + {0xC2AA, 0x964B}, //11050 #CJK UNIFIED IDEOGRAPH + {0xC2AB, 0x82A6}, //11051 #CJK UNIFIED IDEOGRAPH + {0xC2AC, 0x5362}, //11052 #CJK UNIFIED IDEOGRAPH + {0xC2AD, 0x9885}, //11053 #CJK UNIFIED IDEOGRAPH + {0xC2AE, 0x5E90}, //11054 #CJK UNIFIED IDEOGRAPH + {0xC2AF, 0x7089}, //11055 #CJK UNIFIED IDEOGRAPH + {0xC2B0, 0x63B3}, //11056 #CJK UNIFIED IDEOGRAPH + {0xC2B1, 0x5364}, //11057 #CJK UNIFIED IDEOGRAPH + {0xC2B2, 0x864F}, //11058 #CJK UNIFIED IDEOGRAPH + {0xC2B3, 0x9C81}, //11059 #CJK UNIFIED IDEOGRAPH + {0xC2B4, 0x9E93}, //11060 #CJK UNIFIED IDEOGRAPH + {0xC2B5, 0x788C}, //11061 #CJK UNIFIED IDEOGRAPH + {0xC2B6, 0x9732}, //11062 #CJK UNIFIED IDEOGRAPH + {0xC2B7, 0x8DEF}, //11063 #CJK UNIFIED IDEOGRAPH + {0xC2B8, 0x8D42}, //11064 #CJK UNIFIED IDEOGRAPH + {0xC2B9, 0x9E7F}, //11065 #CJK UNIFIED IDEOGRAPH + {0xC2BA, 0x6F5E}, //11066 #CJK UNIFIED IDEOGRAPH + {0xC2BB, 0x7984}, //11067 #CJK UNIFIED IDEOGRAPH + {0xC2BC, 0x5F55}, //11068 #CJK UNIFIED IDEOGRAPH + {0xC2BD, 0x9646}, //11069 #CJK UNIFIED IDEOGRAPH + {0xC2BE, 0x622E}, //11070 #CJK UNIFIED IDEOGRAPH + {0xC2BF, 0x9A74}, //11071 #CJK UNIFIED IDEOGRAPH + {0xC2C0, 0x5415}, //11072 #CJK UNIFIED IDEOGRAPH + {0xC2C1, 0x94DD}, //11073 #CJK UNIFIED IDEOGRAPH + {0xC2C2, 0x4FA3}, //11074 #CJK UNIFIED IDEOGRAPH + {0xC2C3, 0x65C5}, //11075 #CJK UNIFIED IDEOGRAPH + {0xC2C4, 0x5C65}, //11076 #CJK UNIFIED IDEOGRAPH + {0xC2C5, 0x5C61}, //11077 #CJK UNIFIED IDEOGRAPH + {0xC2C6, 0x7F15}, //11078 #CJK UNIFIED IDEOGRAPH + {0xC2C7, 0x8651}, //11079 #CJK UNIFIED IDEOGRAPH + {0xC2C8, 0x6C2F}, //11080 #CJK UNIFIED IDEOGRAPH + {0xC2C9, 0x5F8B}, //11081 #CJK UNIFIED IDEOGRAPH + {0xC2CA, 0x7387}, //11082 #CJK UNIFIED IDEOGRAPH + {0xC2CB, 0x6EE4}, //11083 #CJK UNIFIED IDEOGRAPH + {0xC2CC, 0x7EFF}, //11084 #CJK UNIFIED IDEOGRAPH + {0xC2CD, 0x5CE6}, //11085 #CJK UNIFIED IDEOGRAPH + {0xC2CE, 0x631B}, //11086 #CJK UNIFIED IDEOGRAPH + {0xC2CF, 0x5B6A}, //11087 #CJK UNIFIED IDEOGRAPH + {0xC2D0, 0x6EE6}, //11088 #CJK UNIFIED IDEOGRAPH + {0xC2D1, 0x5375}, //11089 #CJK UNIFIED IDEOGRAPH + {0xC2D2, 0x4E71}, //11090 #CJK UNIFIED IDEOGRAPH + {0xC2D3, 0x63A0}, //11091 #CJK UNIFIED IDEOGRAPH + {0xC2D4, 0x7565}, //11092 #CJK UNIFIED IDEOGRAPH + {0xC2D5, 0x62A1}, //11093 #CJK UNIFIED IDEOGRAPH + {0xC2D6, 0x8F6E}, //11094 #CJK UNIFIED IDEOGRAPH + {0xC2D7, 0x4F26}, //11095 #CJK UNIFIED IDEOGRAPH + {0xC2D8, 0x4ED1}, //11096 #CJK UNIFIED IDEOGRAPH + {0xC2D9, 0x6CA6}, //11097 #CJK UNIFIED IDEOGRAPH + {0xC2DA, 0x7EB6}, //11098 #CJK UNIFIED IDEOGRAPH + {0xC2DB, 0x8BBA}, //11099 #CJK UNIFIED IDEOGRAPH + {0xC2DC, 0x841D}, //11100 #CJK UNIFIED IDEOGRAPH + {0xC2DD, 0x87BA}, //11101 #CJK UNIFIED IDEOGRAPH + {0xC2DE, 0x7F57}, //11102 #CJK UNIFIED IDEOGRAPH + {0xC2DF, 0x903B}, //11103 #CJK UNIFIED IDEOGRAPH + {0xC2E0, 0x9523}, //11104 #CJK UNIFIED IDEOGRAPH + {0xC2E1, 0x7BA9}, //11105 #CJK UNIFIED IDEOGRAPH + {0xC2E2, 0x9AA1}, //11106 #CJK UNIFIED IDEOGRAPH + {0xC2E3, 0x88F8}, //11107 #CJK UNIFIED IDEOGRAPH + {0xC2E4, 0x843D}, //11108 #CJK UNIFIED IDEOGRAPH + {0xC2E5, 0x6D1B}, //11109 #CJK UNIFIED IDEOGRAPH + {0xC2E6, 0x9A86}, //11110 #CJK UNIFIED IDEOGRAPH + {0xC2E7, 0x7EDC}, //11111 #CJK UNIFIED IDEOGRAPH + {0xC2E8, 0x5988}, //11112 #CJK UNIFIED IDEOGRAPH + {0xC2E9, 0x9EBB}, //11113 #CJK UNIFIED IDEOGRAPH + {0xC2EA, 0x739B}, //11114 #CJK UNIFIED IDEOGRAPH + {0xC2EB, 0x7801}, //11115 #CJK UNIFIED IDEOGRAPH + {0xC2EC, 0x8682}, //11116 #CJK UNIFIED IDEOGRAPH + {0xC2ED, 0x9A6C}, //11117 #CJK UNIFIED IDEOGRAPH + {0xC2EE, 0x9A82}, //11118 #CJK UNIFIED IDEOGRAPH + {0xC2EF, 0x561B}, //11119 #CJK UNIFIED IDEOGRAPH + {0xC2F0, 0x5417}, //11120 #CJK UNIFIED IDEOGRAPH + {0xC2F1, 0x57CB}, //11121 #CJK UNIFIED IDEOGRAPH + {0xC2F2, 0x4E70}, //11122 #CJK UNIFIED IDEOGRAPH + {0xC2F3, 0x9EA6}, //11123 #CJK UNIFIED IDEOGRAPH + {0xC2F4, 0x5356}, //11124 #CJK UNIFIED IDEOGRAPH + {0xC2F5, 0x8FC8}, //11125 #CJK UNIFIED IDEOGRAPH + {0xC2F6, 0x8109}, //11126 #CJK UNIFIED IDEOGRAPH + {0xC2F7, 0x7792}, //11127 #CJK UNIFIED IDEOGRAPH + {0xC2F8, 0x9992}, //11128 #CJK UNIFIED IDEOGRAPH + {0xC2F9, 0x86EE}, //11129 #CJK UNIFIED IDEOGRAPH + {0xC2FA, 0x6EE1}, //11130 #CJK UNIFIED IDEOGRAPH + {0xC2FB, 0x8513}, //11131 #CJK UNIFIED IDEOGRAPH + {0xC2FC, 0x66FC}, //11132 #CJK UNIFIED IDEOGRAPH + {0xC2FD, 0x6162}, //11133 #CJK UNIFIED IDEOGRAPH + {0xC2FE, 0x6F2B}, //11134 #CJK UNIFIED IDEOGRAPH + {0xC340, 0x807E}, //11135 #CJK UNIFIED IDEOGRAPH + {0xC341, 0x8081}, //11136 #CJK UNIFIED IDEOGRAPH + {0xC342, 0x8082}, //11137 #CJK UNIFIED IDEOGRAPH + {0xC343, 0x8085}, //11138 #CJK UNIFIED IDEOGRAPH + {0xC344, 0x8088}, //11139 #CJK UNIFIED IDEOGRAPH + {0xC345, 0x808A}, //11140 #CJK UNIFIED IDEOGRAPH + {0xC346, 0x808D}, //11141 #CJK UNIFIED IDEOGRAPH + {0xC347, 0x808E}, //11142 #CJK UNIFIED IDEOGRAPH + {0xC348, 0x808F}, //11143 #CJK UNIFIED IDEOGRAPH + {0xC349, 0x8090}, //11144 #CJK UNIFIED IDEOGRAPH + {0xC34A, 0x8091}, //11145 #CJK UNIFIED IDEOGRAPH + {0xC34B, 0x8092}, //11146 #CJK UNIFIED IDEOGRAPH + {0xC34C, 0x8094}, //11147 #CJK UNIFIED IDEOGRAPH + {0xC34D, 0x8095}, //11148 #CJK UNIFIED IDEOGRAPH + {0xC34E, 0x8097}, //11149 #CJK UNIFIED IDEOGRAPH + {0xC34F, 0x8099}, //11150 #CJK UNIFIED IDEOGRAPH + {0xC350, 0x809E}, //11151 #CJK UNIFIED IDEOGRAPH + {0xC351, 0x80A3}, //11152 #CJK UNIFIED IDEOGRAPH + {0xC352, 0x80A6}, //11153 #CJK UNIFIED IDEOGRAPH + {0xC353, 0x80A7}, //11154 #CJK UNIFIED IDEOGRAPH + {0xC354, 0x80A8}, //11155 #CJK UNIFIED IDEOGRAPH + {0xC355, 0x80AC}, //11156 #CJK UNIFIED IDEOGRAPH + {0xC356, 0x80B0}, //11157 #CJK UNIFIED IDEOGRAPH + {0xC357, 0x80B3}, //11158 #CJK UNIFIED IDEOGRAPH + {0xC358, 0x80B5}, //11159 #CJK UNIFIED IDEOGRAPH + {0xC359, 0x80B6}, //11160 #CJK UNIFIED IDEOGRAPH + {0xC35A, 0x80B8}, //11161 #CJK UNIFIED IDEOGRAPH + {0xC35B, 0x80B9}, //11162 #CJK UNIFIED IDEOGRAPH + {0xC35C, 0x80BB}, //11163 #CJK UNIFIED IDEOGRAPH + {0xC35D, 0x80C5}, //11164 #CJK UNIFIED IDEOGRAPH + {0xC35E, 0x80C7}, //11165 #CJK UNIFIED IDEOGRAPH + {0xC35F, 0x80C8}, //11166 #CJK UNIFIED IDEOGRAPH + {0xC360, 0x80C9}, //11167 #CJK UNIFIED IDEOGRAPH + {0xC361, 0x80CA}, //11168 #CJK UNIFIED IDEOGRAPH + {0xC362, 0x80CB}, //11169 #CJK UNIFIED IDEOGRAPH + {0xC363, 0x80CF}, //11170 #CJK UNIFIED IDEOGRAPH + {0xC364, 0x80D0}, //11171 #CJK UNIFIED IDEOGRAPH + {0xC365, 0x80D1}, //11172 #CJK UNIFIED IDEOGRAPH + {0xC366, 0x80D2}, //11173 #CJK UNIFIED IDEOGRAPH + {0xC367, 0x80D3}, //11174 #CJK UNIFIED IDEOGRAPH + {0xC368, 0x80D4}, //11175 #CJK UNIFIED IDEOGRAPH + {0xC369, 0x80D5}, //11176 #CJK UNIFIED IDEOGRAPH + {0xC36A, 0x80D8}, //11177 #CJK UNIFIED IDEOGRAPH + {0xC36B, 0x80DF}, //11178 #CJK UNIFIED IDEOGRAPH + {0xC36C, 0x80E0}, //11179 #CJK UNIFIED IDEOGRAPH + {0xC36D, 0x80E2}, //11180 #CJK UNIFIED IDEOGRAPH + {0xC36E, 0x80E3}, //11181 #CJK UNIFIED IDEOGRAPH + {0xC36F, 0x80E6}, //11182 #CJK UNIFIED IDEOGRAPH + {0xC370, 0x80EE}, //11183 #CJK UNIFIED IDEOGRAPH + {0xC371, 0x80F5}, //11184 #CJK UNIFIED IDEOGRAPH + {0xC372, 0x80F7}, //11185 #CJK UNIFIED IDEOGRAPH + {0xC373, 0x80F9}, //11186 #CJK UNIFIED IDEOGRAPH + {0xC374, 0x80FB}, //11187 #CJK UNIFIED IDEOGRAPH + {0xC375, 0x80FE}, //11188 #CJK UNIFIED IDEOGRAPH + {0xC376, 0x80FF}, //11189 #CJK UNIFIED IDEOGRAPH + {0xC377, 0x8100}, //11190 #CJK UNIFIED IDEOGRAPH + {0xC378, 0x8101}, //11191 #CJK UNIFIED IDEOGRAPH + {0xC379, 0x8103}, //11192 #CJK UNIFIED IDEOGRAPH + {0xC37A, 0x8104}, //11193 #CJK UNIFIED IDEOGRAPH + {0xC37B, 0x8105}, //11194 #CJK UNIFIED IDEOGRAPH + {0xC37C, 0x8107}, //11195 #CJK UNIFIED IDEOGRAPH + {0xC37D, 0x8108}, //11196 #CJK UNIFIED IDEOGRAPH + {0xC37E, 0x810B}, //11197 #CJK UNIFIED IDEOGRAPH + {0xC380, 0x810C}, //11198 #CJK UNIFIED IDEOGRAPH + {0xC381, 0x8115}, //11199 #CJK UNIFIED IDEOGRAPH + {0xC382, 0x8117}, //11200 #CJK UNIFIED IDEOGRAPH + {0xC383, 0x8119}, //11201 #CJK UNIFIED IDEOGRAPH + {0xC384, 0x811B}, //11202 #CJK UNIFIED IDEOGRAPH + {0xC385, 0x811C}, //11203 #CJK UNIFIED IDEOGRAPH + {0xC386, 0x811D}, //11204 #CJK UNIFIED IDEOGRAPH + {0xC387, 0x811F}, //11205 #CJK UNIFIED IDEOGRAPH + {0xC388, 0x8120}, //11206 #CJK UNIFIED IDEOGRAPH + {0xC389, 0x8121}, //11207 #CJK UNIFIED IDEOGRAPH + {0xC38A, 0x8122}, //11208 #CJK UNIFIED IDEOGRAPH + {0xC38B, 0x8123}, //11209 #CJK UNIFIED IDEOGRAPH + {0xC38C, 0x8124}, //11210 #CJK UNIFIED IDEOGRAPH + {0xC38D, 0x8125}, //11211 #CJK UNIFIED IDEOGRAPH + {0xC38E, 0x8126}, //11212 #CJK UNIFIED IDEOGRAPH + {0xC38F, 0x8127}, //11213 #CJK UNIFIED IDEOGRAPH + {0xC390, 0x8128}, //11214 #CJK UNIFIED IDEOGRAPH + {0xC391, 0x8129}, //11215 #CJK UNIFIED IDEOGRAPH + {0xC392, 0x812A}, //11216 #CJK UNIFIED IDEOGRAPH + {0xC393, 0x812B}, //11217 #CJK UNIFIED IDEOGRAPH + {0xC394, 0x812D}, //11218 #CJK UNIFIED IDEOGRAPH + {0xC395, 0x812E}, //11219 #CJK UNIFIED IDEOGRAPH + {0xC396, 0x8130}, //11220 #CJK UNIFIED IDEOGRAPH + {0xC397, 0x8133}, //11221 #CJK UNIFIED IDEOGRAPH + {0xC398, 0x8134}, //11222 #CJK UNIFIED IDEOGRAPH + {0xC399, 0x8135}, //11223 #CJK UNIFIED IDEOGRAPH + {0xC39A, 0x8137}, //11224 #CJK UNIFIED IDEOGRAPH + {0xC39B, 0x8139}, //11225 #CJK UNIFIED IDEOGRAPH + {0xC39C, 0x813A}, //11226 #CJK UNIFIED IDEOGRAPH + {0xC39D, 0x813B}, //11227 #CJK UNIFIED IDEOGRAPH + {0xC39E, 0x813C}, //11228 #CJK UNIFIED IDEOGRAPH + {0xC39F, 0x813D}, //11229 #CJK UNIFIED IDEOGRAPH + {0xC3A0, 0x813F}, //11230 #CJK UNIFIED IDEOGRAPH + {0xC3A1, 0x8C29}, //11231 #CJK UNIFIED IDEOGRAPH + {0xC3A2, 0x8292}, //11232 #CJK UNIFIED IDEOGRAPH + {0xC3A3, 0x832B}, //11233 #CJK UNIFIED IDEOGRAPH + {0xC3A4, 0x76F2}, //11234 #CJK UNIFIED IDEOGRAPH + {0xC3A5, 0x6C13}, //11235 #CJK UNIFIED IDEOGRAPH + {0xC3A6, 0x5FD9}, //11236 #CJK UNIFIED IDEOGRAPH + {0xC3A7, 0x83BD}, //11237 #CJK UNIFIED IDEOGRAPH + {0xC3A8, 0x732B}, //11238 #CJK UNIFIED IDEOGRAPH + {0xC3A9, 0x8305}, //11239 #CJK UNIFIED IDEOGRAPH + {0xC3AA, 0x951A}, //11240 #CJK UNIFIED IDEOGRAPH + {0xC3AB, 0x6BDB}, //11241 #CJK UNIFIED IDEOGRAPH + {0xC3AC, 0x77DB}, //11242 #CJK UNIFIED IDEOGRAPH + {0xC3AD, 0x94C6}, //11243 #CJK UNIFIED IDEOGRAPH + {0xC3AE, 0x536F}, //11244 #CJK UNIFIED IDEOGRAPH + {0xC3AF, 0x8302}, //11245 #CJK UNIFIED IDEOGRAPH + {0xC3B0, 0x5192}, //11246 #CJK UNIFIED IDEOGRAPH + {0xC3B1, 0x5E3D}, //11247 #CJK UNIFIED IDEOGRAPH + {0xC3B2, 0x8C8C}, //11248 #CJK UNIFIED IDEOGRAPH + {0xC3B3, 0x8D38}, //11249 #CJK UNIFIED IDEOGRAPH + {0xC3B4, 0x4E48}, //11250 #CJK UNIFIED IDEOGRAPH + {0xC3B5, 0x73AB}, //11251 #CJK UNIFIED IDEOGRAPH + {0xC3B6, 0x679A}, //11252 #CJK UNIFIED IDEOGRAPH + {0xC3B7, 0x6885}, //11253 #CJK UNIFIED IDEOGRAPH + {0xC3B8, 0x9176}, //11254 #CJK UNIFIED IDEOGRAPH + {0xC3B9, 0x9709}, //11255 #CJK UNIFIED IDEOGRAPH + {0xC3BA, 0x7164}, //11256 #CJK UNIFIED IDEOGRAPH + {0xC3BB, 0x6CA1}, //11257 #CJK UNIFIED IDEOGRAPH + {0xC3BC, 0x7709}, //11258 #CJK UNIFIED IDEOGRAPH + {0xC3BD, 0x5A92}, //11259 #CJK UNIFIED IDEOGRAPH + {0xC3BE, 0x9541}, //11260 #CJK UNIFIED IDEOGRAPH + {0xC3BF, 0x6BCF}, //11261 #CJK UNIFIED IDEOGRAPH + {0xC3C0, 0x7F8E}, //11262 #CJK UNIFIED IDEOGRAPH + {0xC3C1, 0x6627}, //11263 #CJK UNIFIED IDEOGRAPH + {0xC3C2, 0x5BD0}, //11264 #CJK UNIFIED IDEOGRAPH + {0xC3C3, 0x59B9}, //11265 #CJK UNIFIED IDEOGRAPH + {0xC3C4, 0x5A9A}, //11266 #CJK UNIFIED IDEOGRAPH + {0xC3C5, 0x95E8}, //11267 #CJK UNIFIED IDEOGRAPH + {0xC3C6, 0x95F7}, //11268 #CJK UNIFIED IDEOGRAPH + {0xC3C7, 0x4EEC}, //11269 #CJK UNIFIED IDEOGRAPH + {0xC3C8, 0x840C}, //11270 #CJK UNIFIED IDEOGRAPH + {0xC3C9, 0x8499}, //11271 #CJK UNIFIED IDEOGRAPH + {0xC3CA, 0x6AAC}, //11272 #CJK UNIFIED IDEOGRAPH + {0xC3CB, 0x76DF}, //11273 #CJK UNIFIED IDEOGRAPH + {0xC3CC, 0x9530}, //11274 #CJK UNIFIED IDEOGRAPH + {0xC3CD, 0x731B}, //11275 #CJK UNIFIED IDEOGRAPH + {0xC3CE, 0x68A6}, //11276 #CJK UNIFIED IDEOGRAPH + {0xC3CF, 0x5B5F}, //11277 #CJK UNIFIED IDEOGRAPH + {0xC3D0, 0x772F}, //11278 #CJK UNIFIED IDEOGRAPH + {0xC3D1, 0x919A}, //11279 #CJK UNIFIED IDEOGRAPH + {0xC3D2, 0x9761}, //11280 #CJK UNIFIED IDEOGRAPH + {0xC3D3, 0x7CDC}, //11281 #CJK UNIFIED IDEOGRAPH + {0xC3D4, 0x8FF7}, //11282 #CJK UNIFIED IDEOGRAPH + {0xC3D5, 0x8C1C}, //11283 #CJK UNIFIED IDEOGRAPH + {0xC3D6, 0x5F25}, //11284 #CJK UNIFIED IDEOGRAPH + {0xC3D7, 0x7C73}, //11285 #CJK UNIFIED IDEOGRAPH + {0xC3D8, 0x79D8}, //11286 #CJK UNIFIED IDEOGRAPH + {0xC3D9, 0x89C5}, //11287 #CJK UNIFIED IDEOGRAPH + {0xC3DA, 0x6CCC}, //11288 #CJK UNIFIED IDEOGRAPH + {0xC3DB, 0x871C}, //11289 #CJK UNIFIED IDEOGRAPH + {0xC3DC, 0x5BC6}, //11290 #CJK UNIFIED IDEOGRAPH + {0xC3DD, 0x5E42}, //11291 #CJK UNIFIED IDEOGRAPH + {0xC3DE, 0x68C9}, //11292 #CJK UNIFIED IDEOGRAPH + {0xC3DF, 0x7720}, //11293 #CJK UNIFIED IDEOGRAPH + {0xC3E0, 0x7EF5}, //11294 #CJK UNIFIED IDEOGRAPH + {0xC3E1, 0x5195}, //11295 #CJK UNIFIED IDEOGRAPH + {0xC3E2, 0x514D}, //11296 #CJK UNIFIED IDEOGRAPH + {0xC3E3, 0x52C9}, //11297 #CJK UNIFIED IDEOGRAPH + {0xC3E4, 0x5A29}, //11298 #CJK UNIFIED IDEOGRAPH + {0xC3E5, 0x7F05}, //11299 #CJK UNIFIED IDEOGRAPH + {0xC3E6, 0x9762}, //11300 #CJK UNIFIED IDEOGRAPH + {0xC3E7, 0x82D7}, //11301 #CJK UNIFIED IDEOGRAPH + {0xC3E8, 0x63CF}, //11302 #CJK UNIFIED IDEOGRAPH + {0xC3E9, 0x7784}, //11303 #CJK UNIFIED IDEOGRAPH + {0xC3EA, 0x85D0}, //11304 #CJK UNIFIED IDEOGRAPH + {0xC3EB, 0x79D2}, //11305 #CJK UNIFIED IDEOGRAPH + {0xC3EC, 0x6E3A}, //11306 #CJK UNIFIED IDEOGRAPH + {0xC3ED, 0x5E99}, //11307 #CJK UNIFIED IDEOGRAPH + {0xC3EE, 0x5999}, //11308 #CJK UNIFIED IDEOGRAPH + {0xC3EF, 0x8511}, //11309 #CJK UNIFIED IDEOGRAPH + {0xC3F0, 0x706D}, //11310 #CJK UNIFIED IDEOGRAPH + {0xC3F1, 0x6C11}, //11311 #CJK UNIFIED IDEOGRAPH + {0xC3F2, 0x62BF}, //11312 #CJK UNIFIED IDEOGRAPH + {0xC3F3, 0x76BF}, //11313 #CJK UNIFIED IDEOGRAPH + {0xC3F4, 0x654F}, //11314 #CJK UNIFIED IDEOGRAPH + {0xC3F5, 0x60AF}, //11315 #CJK UNIFIED IDEOGRAPH + {0xC3F6, 0x95FD}, //11316 #CJK UNIFIED IDEOGRAPH + {0xC3F7, 0x660E}, //11317 #CJK UNIFIED IDEOGRAPH + {0xC3F8, 0x879F}, //11318 #CJK UNIFIED IDEOGRAPH + {0xC3F9, 0x9E23}, //11319 #CJK UNIFIED IDEOGRAPH + {0xC3FA, 0x94ED}, //11320 #CJK UNIFIED IDEOGRAPH + {0xC3FB, 0x540D}, //11321 #CJK UNIFIED IDEOGRAPH + {0xC3FC, 0x547D}, //11322 #CJK UNIFIED IDEOGRAPH + {0xC3FD, 0x8C2C}, //11323 #CJK UNIFIED IDEOGRAPH + {0xC3FE, 0x6478}, //11324 #CJK UNIFIED IDEOGRAPH + {0xC440, 0x8140}, //11325 #CJK UNIFIED IDEOGRAPH + {0xC441, 0x8141}, //11326 #CJK UNIFIED IDEOGRAPH + {0xC442, 0x8142}, //11327 #CJK UNIFIED IDEOGRAPH + {0xC443, 0x8143}, //11328 #CJK UNIFIED IDEOGRAPH + {0xC444, 0x8144}, //11329 #CJK UNIFIED IDEOGRAPH + {0xC445, 0x8145}, //11330 #CJK UNIFIED IDEOGRAPH + {0xC446, 0x8147}, //11331 #CJK UNIFIED IDEOGRAPH + {0xC447, 0x8149}, //11332 #CJK UNIFIED IDEOGRAPH + {0xC448, 0x814D}, //11333 #CJK UNIFIED IDEOGRAPH + {0xC449, 0x814E}, //11334 #CJK UNIFIED IDEOGRAPH + {0xC44A, 0x814F}, //11335 #CJK UNIFIED IDEOGRAPH + {0xC44B, 0x8152}, //11336 #CJK UNIFIED IDEOGRAPH + {0xC44C, 0x8156}, //11337 #CJK UNIFIED IDEOGRAPH + {0xC44D, 0x8157}, //11338 #CJK UNIFIED IDEOGRAPH + {0xC44E, 0x8158}, //11339 #CJK UNIFIED IDEOGRAPH + {0xC44F, 0x815B}, //11340 #CJK UNIFIED IDEOGRAPH + {0xC450, 0x815C}, //11341 #CJK UNIFIED IDEOGRAPH + {0xC451, 0x815D}, //11342 #CJK UNIFIED IDEOGRAPH + {0xC452, 0x815E}, //11343 #CJK UNIFIED IDEOGRAPH + {0xC453, 0x815F}, //11344 #CJK UNIFIED IDEOGRAPH + {0xC454, 0x8161}, //11345 #CJK UNIFIED IDEOGRAPH + {0xC455, 0x8162}, //11346 #CJK UNIFIED IDEOGRAPH + {0xC456, 0x8163}, //11347 #CJK UNIFIED IDEOGRAPH + {0xC457, 0x8164}, //11348 #CJK UNIFIED IDEOGRAPH + {0xC458, 0x8166}, //11349 #CJK UNIFIED IDEOGRAPH + {0xC459, 0x8168}, //11350 #CJK UNIFIED IDEOGRAPH + {0xC45A, 0x816A}, //11351 #CJK UNIFIED IDEOGRAPH + {0xC45B, 0x816B}, //11352 #CJK UNIFIED IDEOGRAPH + {0xC45C, 0x816C}, //11353 #CJK UNIFIED IDEOGRAPH + {0xC45D, 0x816F}, //11354 #CJK UNIFIED IDEOGRAPH + {0xC45E, 0x8172}, //11355 #CJK UNIFIED IDEOGRAPH + {0xC45F, 0x8173}, //11356 #CJK UNIFIED IDEOGRAPH + {0xC460, 0x8175}, //11357 #CJK UNIFIED IDEOGRAPH + {0xC461, 0x8176}, //11358 #CJK UNIFIED IDEOGRAPH + {0xC462, 0x8177}, //11359 #CJK UNIFIED IDEOGRAPH + {0xC463, 0x8178}, //11360 #CJK UNIFIED IDEOGRAPH + {0xC464, 0x8181}, //11361 #CJK UNIFIED IDEOGRAPH + {0xC465, 0x8183}, //11362 #CJK UNIFIED IDEOGRAPH + {0xC466, 0x8184}, //11363 #CJK UNIFIED IDEOGRAPH + {0xC467, 0x8185}, //11364 #CJK UNIFIED IDEOGRAPH + {0xC468, 0x8186}, //11365 #CJK UNIFIED IDEOGRAPH + {0xC469, 0x8187}, //11366 #CJK UNIFIED IDEOGRAPH + {0xC46A, 0x8189}, //11367 #CJK UNIFIED IDEOGRAPH + {0xC46B, 0x818B}, //11368 #CJK UNIFIED IDEOGRAPH + {0xC46C, 0x818C}, //11369 #CJK UNIFIED IDEOGRAPH + {0xC46D, 0x818D}, //11370 #CJK UNIFIED IDEOGRAPH + {0xC46E, 0x818E}, //11371 #CJK UNIFIED IDEOGRAPH + {0xC46F, 0x8190}, //11372 #CJK UNIFIED IDEOGRAPH + {0xC470, 0x8192}, //11373 #CJK UNIFIED IDEOGRAPH + {0xC471, 0x8193}, //11374 #CJK UNIFIED IDEOGRAPH + {0xC472, 0x8194}, //11375 #CJK UNIFIED IDEOGRAPH + {0xC473, 0x8195}, //11376 #CJK UNIFIED IDEOGRAPH + {0xC474, 0x8196}, //11377 #CJK UNIFIED IDEOGRAPH + {0xC475, 0x8197}, //11378 #CJK UNIFIED IDEOGRAPH + {0xC476, 0x8199}, //11379 #CJK UNIFIED IDEOGRAPH + {0xC477, 0x819A}, //11380 #CJK UNIFIED IDEOGRAPH + {0xC478, 0x819E}, //11381 #CJK UNIFIED IDEOGRAPH + {0xC479, 0x819F}, //11382 #CJK UNIFIED IDEOGRAPH + {0xC47A, 0x81A0}, //11383 #CJK UNIFIED IDEOGRAPH + {0xC47B, 0x81A1}, //11384 #CJK UNIFIED IDEOGRAPH + {0xC47C, 0x81A2}, //11385 #CJK UNIFIED IDEOGRAPH + {0xC47D, 0x81A4}, //11386 #CJK UNIFIED IDEOGRAPH + {0xC47E, 0x81A5}, //11387 #CJK UNIFIED IDEOGRAPH + {0xC480, 0x81A7}, //11388 #CJK UNIFIED IDEOGRAPH + {0xC481, 0x81A9}, //11389 #CJK UNIFIED IDEOGRAPH + {0xC482, 0x81AB}, //11390 #CJK UNIFIED IDEOGRAPH + {0xC483, 0x81AC}, //11391 #CJK UNIFIED IDEOGRAPH + {0xC484, 0x81AD}, //11392 #CJK UNIFIED IDEOGRAPH + {0xC485, 0x81AE}, //11393 #CJK UNIFIED IDEOGRAPH + {0xC486, 0x81AF}, //11394 #CJK UNIFIED IDEOGRAPH + {0xC487, 0x81B0}, //11395 #CJK UNIFIED IDEOGRAPH + {0xC488, 0x81B1}, //11396 #CJK UNIFIED IDEOGRAPH + {0xC489, 0x81B2}, //11397 #CJK UNIFIED IDEOGRAPH + {0xC48A, 0x81B4}, //11398 #CJK UNIFIED IDEOGRAPH + {0xC48B, 0x81B5}, //11399 #CJK UNIFIED IDEOGRAPH + {0xC48C, 0x81B6}, //11400 #CJK UNIFIED IDEOGRAPH + {0xC48D, 0x81B7}, //11401 #CJK UNIFIED IDEOGRAPH + {0xC48E, 0x81B8}, //11402 #CJK UNIFIED IDEOGRAPH + {0xC48F, 0x81B9}, //11403 #CJK UNIFIED IDEOGRAPH + {0xC490, 0x81BC}, //11404 #CJK UNIFIED IDEOGRAPH + {0xC491, 0x81BD}, //11405 #CJK UNIFIED IDEOGRAPH + {0xC492, 0x81BE}, //11406 #CJK UNIFIED IDEOGRAPH + {0xC493, 0x81BF}, //11407 #CJK UNIFIED IDEOGRAPH + {0xC494, 0x81C4}, //11408 #CJK UNIFIED IDEOGRAPH + {0xC495, 0x81C5}, //11409 #CJK UNIFIED IDEOGRAPH + {0xC496, 0x81C7}, //11410 #CJK UNIFIED IDEOGRAPH + {0xC497, 0x81C8}, //11411 #CJK UNIFIED IDEOGRAPH + {0xC498, 0x81C9}, //11412 #CJK UNIFIED IDEOGRAPH + {0xC499, 0x81CB}, //11413 #CJK UNIFIED IDEOGRAPH + {0xC49A, 0x81CD}, //11414 #CJK UNIFIED IDEOGRAPH + {0xC49B, 0x81CE}, //11415 #CJK UNIFIED IDEOGRAPH + {0xC49C, 0x81CF}, //11416 #CJK UNIFIED IDEOGRAPH + {0xC49D, 0x81D0}, //11417 #CJK UNIFIED IDEOGRAPH + {0xC49E, 0x81D1}, //11418 #CJK UNIFIED IDEOGRAPH + {0xC49F, 0x81D2}, //11419 #CJK UNIFIED IDEOGRAPH + {0xC4A0, 0x81D3}, //11420 #CJK UNIFIED IDEOGRAPH + {0xC4A1, 0x6479}, //11421 #CJK UNIFIED IDEOGRAPH + {0xC4A2, 0x8611}, //11422 #CJK UNIFIED IDEOGRAPH + {0xC4A3, 0x6A21}, //11423 #CJK UNIFIED IDEOGRAPH + {0xC4A4, 0x819C}, //11424 #CJK UNIFIED IDEOGRAPH + {0xC4A5, 0x78E8}, //11425 #CJK UNIFIED IDEOGRAPH + {0xC4A6, 0x6469}, //11426 #CJK UNIFIED IDEOGRAPH + {0xC4A7, 0x9B54}, //11427 #CJK UNIFIED IDEOGRAPH + {0xC4A8, 0x62B9}, //11428 #CJK UNIFIED IDEOGRAPH + {0xC4A9, 0x672B}, //11429 #CJK UNIFIED IDEOGRAPH + {0xC4AA, 0x83AB}, //11430 #CJK UNIFIED IDEOGRAPH + {0xC4AB, 0x58A8}, //11431 #CJK UNIFIED IDEOGRAPH + {0xC4AC, 0x9ED8}, //11432 #CJK UNIFIED IDEOGRAPH + {0xC4AD, 0x6CAB}, //11433 #CJK UNIFIED IDEOGRAPH + {0xC4AE, 0x6F20}, //11434 #CJK UNIFIED IDEOGRAPH + {0xC4AF, 0x5BDE}, //11435 #CJK UNIFIED IDEOGRAPH + {0xC4B0, 0x964C}, //11436 #CJK UNIFIED IDEOGRAPH + {0xC4B1, 0x8C0B}, //11437 #CJK UNIFIED IDEOGRAPH + {0xC4B2, 0x725F}, //11438 #CJK UNIFIED IDEOGRAPH + {0xC4B3, 0x67D0}, //11439 #CJK UNIFIED IDEOGRAPH + {0xC4B4, 0x62C7}, //11440 #CJK UNIFIED IDEOGRAPH + {0xC4B5, 0x7261}, //11441 #CJK UNIFIED IDEOGRAPH + {0xC4B6, 0x4EA9}, //11442 #CJK UNIFIED IDEOGRAPH + {0xC4B7, 0x59C6}, //11443 #CJK UNIFIED IDEOGRAPH + {0xC4B8, 0x6BCD}, //11444 #CJK UNIFIED IDEOGRAPH + {0xC4B9, 0x5893}, //11445 #CJK UNIFIED IDEOGRAPH + {0xC4BA, 0x66AE}, //11446 #CJK UNIFIED IDEOGRAPH + {0xC4BB, 0x5E55}, //11447 #CJK UNIFIED IDEOGRAPH + {0xC4BC, 0x52DF}, //11448 #CJK UNIFIED IDEOGRAPH + {0xC4BD, 0x6155}, //11449 #CJK UNIFIED IDEOGRAPH + {0xC4BE, 0x6728}, //11450 #CJK UNIFIED IDEOGRAPH + {0xC4BF, 0x76EE}, //11451 #CJK UNIFIED IDEOGRAPH + {0xC4C0, 0x7766}, //11452 #CJK UNIFIED IDEOGRAPH + {0xC4C1, 0x7267}, //11453 #CJK UNIFIED IDEOGRAPH + {0xC4C2, 0x7A46}, //11454 #CJK UNIFIED IDEOGRAPH + {0xC4C3, 0x62FF}, //11455 #CJK UNIFIED IDEOGRAPH + {0xC4C4, 0x54EA}, //11456 #CJK UNIFIED IDEOGRAPH + {0xC4C5, 0x5450}, //11457 #CJK UNIFIED IDEOGRAPH + {0xC4C6, 0x94A0}, //11458 #CJK UNIFIED IDEOGRAPH + {0xC4C7, 0x90A3}, //11459 #CJK UNIFIED IDEOGRAPH + {0xC4C8, 0x5A1C}, //11460 #CJK UNIFIED IDEOGRAPH + {0xC4C9, 0x7EB3}, //11461 #CJK UNIFIED IDEOGRAPH + {0xC4CA, 0x6C16}, //11462 #CJK UNIFIED IDEOGRAPH + {0xC4CB, 0x4E43}, //11463 #CJK UNIFIED IDEOGRAPH + {0xC4CC, 0x5976}, //11464 #CJK UNIFIED IDEOGRAPH + {0xC4CD, 0x8010}, //11465 #CJK UNIFIED IDEOGRAPH + {0xC4CE, 0x5948}, //11466 #CJK UNIFIED IDEOGRAPH + {0xC4CF, 0x5357}, //11467 #CJK UNIFIED IDEOGRAPH + {0xC4D0, 0x7537}, //11468 #CJK UNIFIED IDEOGRAPH + {0xC4D1, 0x96BE}, //11469 #CJK UNIFIED IDEOGRAPH + {0xC4D2, 0x56CA}, //11470 #CJK UNIFIED IDEOGRAPH + {0xC4D3, 0x6320}, //11471 #CJK UNIFIED IDEOGRAPH + {0xC4D4, 0x8111}, //11472 #CJK UNIFIED IDEOGRAPH + {0xC4D5, 0x607C}, //11473 #CJK UNIFIED IDEOGRAPH + {0xC4D6, 0x95F9}, //11474 #CJK UNIFIED IDEOGRAPH + {0xC4D7, 0x6DD6}, //11475 #CJK UNIFIED IDEOGRAPH + {0xC4D8, 0x5462}, //11476 #CJK UNIFIED IDEOGRAPH + {0xC4D9, 0x9981}, //11477 #CJK UNIFIED IDEOGRAPH + {0xC4DA, 0x5185}, //11478 #CJK UNIFIED IDEOGRAPH + {0xC4DB, 0x5AE9}, //11479 #CJK UNIFIED IDEOGRAPH + {0xC4DC, 0x80FD}, //11480 #CJK UNIFIED IDEOGRAPH + {0xC4DD, 0x59AE}, //11481 #CJK UNIFIED IDEOGRAPH + {0xC4DE, 0x9713}, //11482 #CJK UNIFIED IDEOGRAPH + {0xC4DF, 0x502A}, //11483 #CJK UNIFIED IDEOGRAPH + {0xC4E0, 0x6CE5}, //11484 #CJK UNIFIED IDEOGRAPH + {0xC4E1, 0x5C3C}, //11485 #CJK UNIFIED IDEOGRAPH + {0xC4E2, 0x62DF}, //11486 #CJK UNIFIED IDEOGRAPH + {0xC4E3, 0x4F60}, //11487 #CJK UNIFIED IDEOGRAPH + {0xC4E4, 0x533F}, //11488 #CJK UNIFIED IDEOGRAPH + {0xC4E5, 0x817B}, //11489 #CJK UNIFIED IDEOGRAPH + {0xC4E6, 0x9006}, //11490 #CJK UNIFIED IDEOGRAPH + {0xC4E7, 0x6EBA}, //11491 #CJK UNIFIED IDEOGRAPH + {0xC4E8, 0x852B}, //11492 #CJK UNIFIED IDEOGRAPH + {0xC4E9, 0x62C8}, //11493 #CJK UNIFIED IDEOGRAPH + {0xC4EA, 0x5E74}, //11494 #CJK UNIFIED IDEOGRAPH + {0xC4EB, 0x78BE}, //11495 #CJK UNIFIED IDEOGRAPH + {0xC4EC, 0x64B5}, //11496 #CJK UNIFIED IDEOGRAPH + {0xC4ED, 0x637B}, //11497 #CJK UNIFIED IDEOGRAPH + {0xC4EE, 0x5FF5}, //11498 #CJK UNIFIED IDEOGRAPH + {0xC4EF, 0x5A18}, //11499 #CJK UNIFIED IDEOGRAPH + {0xC4F0, 0x917F}, //11500 #CJK UNIFIED IDEOGRAPH + {0xC4F1, 0x9E1F}, //11501 #CJK UNIFIED IDEOGRAPH + {0xC4F2, 0x5C3F}, //11502 #CJK UNIFIED IDEOGRAPH + {0xC4F3, 0x634F}, //11503 #CJK UNIFIED IDEOGRAPH + {0xC4F4, 0x8042}, //11504 #CJK UNIFIED IDEOGRAPH + {0xC4F5, 0x5B7D}, //11505 #CJK UNIFIED IDEOGRAPH + {0xC4F6, 0x556E}, //11506 #CJK UNIFIED IDEOGRAPH + {0xC4F7, 0x954A}, //11507 #CJK UNIFIED IDEOGRAPH + {0xC4F8, 0x954D}, //11508 #CJK UNIFIED IDEOGRAPH + {0xC4F9, 0x6D85}, //11509 #CJK UNIFIED IDEOGRAPH + {0xC4FA, 0x60A8}, //11510 #CJK UNIFIED IDEOGRAPH + {0xC4FB, 0x67E0}, //11511 #CJK UNIFIED IDEOGRAPH + {0xC4FC, 0x72DE}, //11512 #CJK UNIFIED IDEOGRAPH + {0xC4FD, 0x51DD}, //11513 #CJK UNIFIED IDEOGRAPH + {0xC4FE, 0x5B81}, //11514 #CJK UNIFIED IDEOGRAPH + {0xC540, 0x81D4}, //11515 #CJK UNIFIED IDEOGRAPH + {0xC541, 0x81D5}, //11516 #CJK UNIFIED IDEOGRAPH + {0xC542, 0x81D6}, //11517 #CJK UNIFIED IDEOGRAPH + {0xC543, 0x81D7}, //11518 #CJK UNIFIED IDEOGRAPH + {0xC544, 0x81D8}, //11519 #CJK UNIFIED IDEOGRAPH + {0xC545, 0x81D9}, //11520 #CJK UNIFIED IDEOGRAPH + {0xC546, 0x81DA}, //11521 #CJK UNIFIED IDEOGRAPH + {0xC547, 0x81DB}, //11522 #CJK UNIFIED IDEOGRAPH + {0xC548, 0x81DC}, //11523 #CJK UNIFIED IDEOGRAPH + {0xC549, 0x81DD}, //11524 #CJK UNIFIED IDEOGRAPH + {0xC54A, 0x81DE}, //11525 #CJK UNIFIED IDEOGRAPH + {0xC54B, 0x81DF}, //11526 #CJK UNIFIED IDEOGRAPH + {0xC54C, 0x81E0}, //11527 #CJK UNIFIED IDEOGRAPH + {0xC54D, 0x81E1}, //11528 #CJK UNIFIED IDEOGRAPH + {0xC54E, 0x81E2}, //11529 #CJK UNIFIED IDEOGRAPH + {0xC54F, 0x81E4}, //11530 #CJK UNIFIED IDEOGRAPH + {0xC550, 0x81E5}, //11531 #CJK UNIFIED IDEOGRAPH + {0xC551, 0x81E6}, //11532 #CJK UNIFIED IDEOGRAPH + {0xC552, 0x81E8}, //11533 #CJK UNIFIED IDEOGRAPH + {0xC553, 0x81E9}, //11534 #CJK UNIFIED IDEOGRAPH + {0xC554, 0x81EB}, //11535 #CJK UNIFIED IDEOGRAPH + {0xC555, 0x81EE}, //11536 #CJK UNIFIED IDEOGRAPH + {0xC556, 0x81EF}, //11537 #CJK UNIFIED IDEOGRAPH + {0xC557, 0x81F0}, //11538 #CJK UNIFIED IDEOGRAPH + {0xC558, 0x81F1}, //11539 #CJK UNIFIED IDEOGRAPH + {0xC559, 0x81F2}, //11540 #CJK UNIFIED IDEOGRAPH + {0xC55A, 0x81F5}, //11541 #CJK UNIFIED IDEOGRAPH + {0xC55B, 0x81F6}, //11542 #CJK UNIFIED IDEOGRAPH + {0xC55C, 0x81F7}, //11543 #CJK UNIFIED IDEOGRAPH + {0xC55D, 0x81F8}, //11544 #CJK UNIFIED IDEOGRAPH + {0xC55E, 0x81F9}, //11545 #CJK UNIFIED IDEOGRAPH + {0xC55F, 0x81FA}, //11546 #CJK UNIFIED IDEOGRAPH + {0xC560, 0x81FD}, //11547 #CJK UNIFIED IDEOGRAPH + {0xC561, 0x81FF}, //11548 #CJK UNIFIED IDEOGRAPH + {0xC562, 0x8203}, //11549 #CJK UNIFIED IDEOGRAPH + {0xC563, 0x8207}, //11550 #CJK UNIFIED IDEOGRAPH + {0xC564, 0x8208}, //11551 #CJK UNIFIED IDEOGRAPH + {0xC565, 0x8209}, //11552 #CJK UNIFIED IDEOGRAPH + {0xC566, 0x820A}, //11553 #CJK UNIFIED IDEOGRAPH + {0xC567, 0x820B}, //11554 #CJK UNIFIED IDEOGRAPH + {0xC568, 0x820E}, //11555 #CJK UNIFIED IDEOGRAPH + {0xC569, 0x820F}, //11556 #CJK UNIFIED IDEOGRAPH + {0xC56A, 0x8211}, //11557 #CJK UNIFIED IDEOGRAPH + {0xC56B, 0x8213}, //11558 #CJK UNIFIED IDEOGRAPH + {0xC56C, 0x8215}, //11559 #CJK UNIFIED IDEOGRAPH + {0xC56D, 0x8216}, //11560 #CJK UNIFIED IDEOGRAPH + {0xC56E, 0x8217}, //11561 #CJK UNIFIED IDEOGRAPH + {0xC56F, 0x8218}, //11562 #CJK UNIFIED IDEOGRAPH + {0xC570, 0x8219}, //11563 #CJK UNIFIED IDEOGRAPH + {0xC571, 0x821A}, //11564 #CJK UNIFIED IDEOGRAPH + {0xC572, 0x821D}, //11565 #CJK UNIFIED IDEOGRAPH + {0xC573, 0x8220}, //11566 #CJK UNIFIED IDEOGRAPH + {0xC574, 0x8224}, //11567 #CJK UNIFIED IDEOGRAPH + {0xC575, 0x8225}, //11568 #CJK UNIFIED IDEOGRAPH + {0xC576, 0x8226}, //11569 #CJK UNIFIED IDEOGRAPH + {0xC577, 0x8227}, //11570 #CJK UNIFIED IDEOGRAPH + {0xC578, 0x8229}, //11571 #CJK UNIFIED IDEOGRAPH + {0xC579, 0x822E}, //11572 #CJK UNIFIED IDEOGRAPH + {0xC57A, 0x8232}, //11573 #CJK UNIFIED IDEOGRAPH + {0xC57B, 0x823A}, //11574 #CJK UNIFIED IDEOGRAPH + {0xC57C, 0x823C}, //11575 #CJK UNIFIED IDEOGRAPH + {0xC57D, 0x823D}, //11576 #CJK UNIFIED IDEOGRAPH + {0xC57E, 0x823F}, //11577 #CJK UNIFIED IDEOGRAPH + {0xC580, 0x8240}, //11578 #CJK UNIFIED IDEOGRAPH + {0xC581, 0x8241}, //11579 #CJK UNIFIED IDEOGRAPH + {0xC582, 0x8242}, //11580 #CJK UNIFIED IDEOGRAPH + {0xC583, 0x8243}, //11581 #CJK UNIFIED IDEOGRAPH + {0xC584, 0x8245}, //11582 #CJK UNIFIED IDEOGRAPH + {0xC585, 0x8246}, //11583 #CJK UNIFIED IDEOGRAPH + {0xC586, 0x8248}, //11584 #CJK UNIFIED IDEOGRAPH + {0xC587, 0x824A}, //11585 #CJK UNIFIED IDEOGRAPH + {0xC588, 0x824C}, //11586 #CJK UNIFIED IDEOGRAPH + {0xC589, 0x824D}, //11587 #CJK UNIFIED IDEOGRAPH + {0xC58A, 0x824E}, //11588 #CJK UNIFIED IDEOGRAPH + {0xC58B, 0x8250}, //11589 #CJK UNIFIED IDEOGRAPH + {0xC58C, 0x8251}, //11590 #CJK UNIFIED IDEOGRAPH + {0xC58D, 0x8252}, //11591 #CJK UNIFIED IDEOGRAPH + {0xC58E, 0x8253}, //11592 #CJK UNIFIED IDEOGRAPH + {0xC58F, 0x8254}, //11593 #CJK UNIFIED IDEOGRAPH + {0xC590, 0x8255}, //11594 #CJK UNIFIED IDEOGRAPH + {0xC591, 0x8256}, //11595 #CJK UNIFIED IDEOGRAPH + {0xC592, 0x8257}, //11596 #CJK UNIFIED IDEOGRAPH + {0xC593, 0x8259}, //11597 #CJK UNIFIED IDEOGRAPH + {0xC594, 0x825B}, //11598 #CJK UNIFIED IDEOGRAPH + {0xC595, 0x825C}, //11599 #CJK UNIFIED IDEOGRAPH + {0xC596, 0x825D}, //11600 #CJK UNIFIED IDEOGRAPH + {0xC597, 0x825E}, //11601 #CJK UNIFIED IDEOGRAPH + {0xC598, 0x8260}, //11602 #CJK UNIFIED IDEOGRAPH + {0xC599, 0x8261}, //11603 #CJK UNIFIED IDEOGRAPH + {0xC59A, 0x8262}, //11604 #CJK UNIFIED IDEOGRAPH + {0xC59B, 0x8263}, //11605 #CJK UNIFIED IDEOGRAPH + {0xC59C, 0x8264}, //11606 #CJK UNIFIED IDEOGRAPH + {0xC59D, 0x8265}, //11607 #CJK UNIFIED IDEOGRAPH + {0xC59E, 0x8266}, //11608 #CJK UNIFIED IDEOGRAPH + {0xC59F, 0x8267}, //11609 #CJK UNIFIED IDEOGRAPH + {0xC5A0, 0x8269}, //11610 #CJK UNIFIED IDEOGRAPH + {0xC5A1, 0x62E7}, //11611 #CJK UNIFIED IDEOGRAPH + {0xC5A2, 0x6CDE}, //11612 #CJK UNIFIED IDEOGRAPH + {0xC5A3, 0x725B}, //11613 #CJK UNIFIED IDEOGRAPH + {0xC5A4, 0x626D}, //11614 #CJK UNIFIED IDEOGRAPH + {0xC5A5, 0x94AE}, //11615 #CJK UNIFIED IDEOGRAPH + {0xC5A6, 0x7EBD}, //11616 #CJK UNIFIED IDEOGRAPH + {0xC5A7, 0x8113}, //11617 #CJK UNIFIED IDEOGRAPH + {0xC5A8, 0x6D53}, //11618 #CJK UNIFIED IDEOGRAPH + {0xC5A9, 0x519C}, //11619 #CJK UNIFIED IDEOGRAPH + {0xC5AA, 0x5F04}, //11620 #CJK UNIFIED IDEOGRAPH + {0xC5AB, 0x5974}, //11621 #CJK UNIFIED IDEOGRAPH + {0xC5AC, 0x52AA}, //11622 #CJK UNIFIED IDEOGRAPH + {0xC5AD, 0x6012}, //11623 #CJK UNIFIED IDEOGRAPH + {0xC5AE, 0x5973}, //11624 #CJK UNIFIED IDEOGRAPH + {0xC5AF, 0x6696}, //11625 #CJK UNIFIED IDEOGRAPH + {0xC5B0, 0x8650}, //11626 #CJK UNIFIED IDEOGRAPH + {0xC5B1, 0x759F}, //11627 #CJK UNIFIED IDEOGRAPH + {0xC5B2, 0x632A}, //11628 #CJK UNIFIED IDEOGRAPH + {0xC5B3, 0x61E6}, //11629 #CJK UNIFIED IDEOGRAPH + {0xC5B4, 0x7CEF}, //11630 #CJK UNIFIED IDEOGRAPH + {0xC5B5, 0x8BFA}, //11631 #CJK UNIFIED IDEOGRAPH + {0xC5B6, 0x54E6}, //11632 #CJK UNIFIED IDEOGRAPH + {0xC5B7, 0x6B27}, //11633 #CJK UNIFIED IDEOGRAPH + {0xC5B8, 0x9E25}, //11634 #CJK UNIFIED IDEOGRAPH + {0xC5B9, 0x6BB4}, //11635 #CJK UNIFIED IDEOGRAPH + {0xC5BA, 0x85D5}, //11636 #CJK UNIFIED IDEOGRAPH + {0xC5BB, 0x5455}, //11637 #CJK UNIFIED IDEOGRAPH + {0xC5BC, 0x5076}, //11638 #CJK UNIFIED IDEOGRAPH + {0xC5BD, 0x6CA4}, //11639 #CJK UNIFIED IDEOGRAPH + {0xC5BE, 0x556A}, //11640 #CJK UNIFIED IDEOGRAPH + {0xC5BF, 0x8DB4}, //11641 #CJK UNIFIED IDEOGRAPH + {0xC5C0, 0x722C}, //11642 #CJK UNIFIED IDEOGRAPH + {0xC5C1, 0x5E15}, //11643 #CJK UNIFIED IDEOGRAPH + {0xC5C2, 0x6015}, //11644 #CJK UNIFIED IDEOGRAPH + {0xC5C3, 0x7436}, //11645 #CJK UNIFIED IDEOGRAPH + {0xC5C4, 0x62CD}, //11646 #CJK UNIFIED IDEOGRAPH + {0xC5C5, 0x6392}, //11647 #CJK UNIFIED IDEOGRAPH + {0xC5C6, 0x724C}, //11648 #CJK UNIFIED IDEOGRAPH + {0xC5C7, 0x5F98}, //11649 #CJK UNIFIED IDEOGRAPH + {0xC5C8, 0x6E43}, //11650 #CJK UNIFIED IDEOGRAPH + {0xC5C9, 0x6D3E}, //11651 #CJK UNIFIED IDEOGRAPH + {0xC5CA, 0x6500}, //11652 #CJK UNIFIED IDEOGRAPH + {0xC5CB, 0x6F58}, //11653 #CJK UNIFIED IDEOGRAPH + {0xC5CC, 0x76D8}, //11654 #CJK UNIFIED IDEOGRAPH + {0xC5CD, 0x78D0}, //11655 #CJK UNIFIED IDEOGRAPH + {0xC5CE, 0x76FC}, //11656 #CJK UNIFIED IDEOGRAPH + {0xC5CF, 0x7554}, //11657 #CJK UNIFIED IDEOGRAPH + {0xC5D0, 0x5224}, //11658 #CJK UNIFIED IDEOGRAPH + {0xC5D1, 0x53DB}, //11659 #CJK UNIFIED IDEOGRAPH + {0xC5D2, 0x4E53}, //11660 #CJK UNIFIED IDEOGRAPH + {0xC5D3, 0x5E9E}, //11661 #CJK UNIFIED IDEOGRAPH + {0xC5D4, 0x65C1}, //11662 #CJK UNIFIED IDEOGRAPH + {0xC5D5, 0x802A}, //11663 #CJK UNIFIED IDEOGRAPH + {0xC5D6, 0x80D6}, //11664 #CJK UNIFIED IDEOGRAPH + {0xC5D7, 0x629B}, //11665 #CJK UNIFIED IDEOGRAPH + {0xC5D8, 0x5486}, //11666 #CJK UNIFIED IDEOGRAPH + {0xC5D9, 0x5228}, //11667 #CJK UNIFIED IDEOGRAPH + {0xC5DA, 0x70AE}, //11668 #CJK UNIFIED IDEOGRAPH + {0xC5DB, 0x888D}, //11669 #CJK UNIFIED IDEOGRAPH + {0xC5DC, 0x8DD1}, //11670 #CJK UNIFIED IDEOGRAPH + {0xC5DD, 0x6CE1}, //11671 #CJK UNIFIED IDEOGRAPH + {0xC5DE, 0x5478}, //11672 #CJK UNIFIED IDEOGRAPH + {0xC5DF, 0x80DA}, //11673 #CJK UNIFIED IDEOGRAPH + {0xC5E0, 0x57F9}, //11674 #CJK UNIFIED IDEOGRAPH + {0xC5E1, 0x88F4}, //11675 #CJK UNIFIED IDEOGRAPH + {0xC5E2, 0x8D54}, //11676 #CJK UNIFIED IDEOGRAPH + {0xC5E3, 0x966A}, //11677 #CJK UNIFIED IDEOGRAPH + {0xC5E4, 0x914D}, //11678 #CJK UNIFIED IDEOGRAPH + {0xC5E5, 0x4F69}, //11679 #CJK UNIFIED IDEOGRAPH + {0xC5E6, 0x6C9B}, //11680 #CJK UNIFIED IDEOGRAPH + {0xC5E7, 0x55B7}, //11681 #CJK UNIFIED IDEOGRAPH + {0xC5E8, 0x76C6}, //11682 #CJK UNIFIED IDEOGRAPH + {0xC5E9, 0x7830}, //11683 #CJK UNIFIED IDEOGRAPH + {0xC5EA, 0x62A8}, //11684 #CJK UNIFIED IDEOGRAPH + {0xC5EB, 0x70F9}, //11685 #CJK UNIFIED IDEOGRAPH + {0xC5EC, 0x6F8E}, //11686 #CJK UNIFIED IDEOGRAPH + {0xC5ED, 0x5F6D}, //11687 #CJK UNIFIED IDEOGRAPH + {0xC5EE, 0x84EC}, //11688 #CJK UNIFIED IDEOGRAPH + {0xC5EF, 0x68DA}, //11689 #CJK UNIFIED IDEOGRAPH + {0xC5F0, 0x787C}, //11690 #CJK UNIFIED IDEOGRAPH + {0xC5F1, 0x7BF7}, //11691 #CJK UNIFIED IDEOGRAPH + {0xC5F2, 0x81A8}, //11692 #CJK UNIFIED IDEOGRAPH + {0xC5F3, 0x670B}, //11693 #CJK UNIFIED IDEOGRAPH + {0xC5F4, 0x9E4F}, //11694 #CJK UNIFIED IDEOGRAPH + {0xC5F5, 0x6367}, //11695 #CJK UNIFIED IDEOGRAPH + {0xC5F6, 0x78B0}, //11696 #CJK UNIFIED IDEOGRAPH + {0xC5F7, 0x576F}, //11697 #CJK UNIFIED IDEOGRAPH + {0xC5F8, 0x7812}, //11698 #CJK UNIFIED IDEOGRAPH + {0xC5F9, 0x9739}, //11699 #CJK UNIFIED IDEOGRAPH + {0xC5FA, 0x6279}, //11700 #CJK UNIFIED IDEOGRAPH + {0xC5FB, 0x62AB}, //11701 #CJK UNIFIED IDEOGRAPH + {0xC5FC, 0x5288}, //11702 #CJK UNIFIED IDEOGRAPH + {0xC5FD, 0x7435}, //11703 #CJK UNIFIED IDEOGRAPH + {0xC5FE, 0x6BD7}, //11704 #CJK UNIFIED IDEOGRAPH + {0xC640, 0x826A}, //11705 #CJK UNIFIED IDEOGRAPH + {0xC641, 0x826B}, //11706 #CJK UNIFIED IDEOGRAPH + {0xC642, 0x826C}, //11707 #CJK UNIFIED IDEOGRAPH + {0xC643, 0x826D}, //11708 #CJK UNIFIED IDEOGRAPH + {0xC644, 0x8271}, //11709 #CJK UNIFIED IDEOGRAPH + {0xC645, 0x8275}, //11710 #CJK UNIFIED IDEOGRAPH + {0xC646, 0x8276}, //11711 #CJK UNIFIED IDEOGRAPH + {0xC647, 0x8277}, //11712 #CJK UNIFIED IDEOGRAPH + {0xC648, 0x8278}, //11713 #CJK UNIFIED IDEOGRAPH + {0xC649, 0x827B}, //11714 #CJK UNIFIED IDEOGRAPH + {0xC64A, 0x827C}, //11715 #CJK UNIFIED IDEOGRAPH + {0xC64B, 0x8280}, //11716 #CJK UNIFIED IDEOGRAPH + {0xC64C, 0x8281}, //11717 #CJK UNIFIED IDEOGRAPH + {0xC64D, 0x8283}, //11718 #CJK UNIFIED IDEOGRAPH + {0xC64E, 0x8285}, //11719 #CJK UNIFIED IDEOGRAPH + {0xC64F, 0x8286}, //11720 #CJK UNIFIED IDEOGRAPH + {0xC650, 0x8287}, //11721 #CJK UNIFIED IDEOGRAPH + {0xC651, 0x8289}, //11722 #CJK UNIFIED IDEOGRAPH + {0xC652, 0x828C}, //11723 #CJK UNIFIED IDEOGRAPH + {0xC653, 0x8290}, //11724 #CJK UNIFIED IDEOGRAPH + {0xC654, 0x8293}, //11725 #CJK UNIFIED IDEOGRAPH + {0xC655, 0x8294}, //11726 #CJK UNIFIED IDEOGRAPH + {0xC656, 0x8295}, //11727 #CJK UNIFIED IDEOGRAPH + {0xC657, 0x8296}, //11728 #CJK UNIFIED IDEOGRAPH + {0xC658, 0x829A}, //11729 #CJK UNIFIED IDEOGRAPH + {0xC659, 0x829B}, //11730 #CJK UNIFIED IDEOGRAPH + {0xC65A, 0x829E}, //11731 #CJK UNIFIED IDEOGRAPH + {0xC65B, 0x82A0}, //11732 #CJK UNIFIED IDEOGRAPH + {0xC65C, 0x82A2}, //11733 #CJK UNIFIED IDEOGRAPH + {0xC65D, 0x82A3}, //11734 #CJK UNIFIED IDEOGRAPH + {0xC65E, 0x82A7}, //11735 #CJK UNIFIED IDEOGRAPH + {0xC65F, 0x82B2}, //11736 #CJK UNIFIED IDEOGRAPH + {0xC660, 0x82B5}, //11737 #CJK UNIFIED IDEOGRAPH + {0xC661, 0x82B6}, //11738 #CJK UNIFIED IDEOGRAPH + {0xC662, 0x82BA}, //11739 #CJK UNIFIED IDEOGRAPH + {0xC663, 0x82BB}, //11740 #CJK UNIFIED IDEOGRAPH + {0xC664, 0x82BC}, //11741 #CJK UNIFIED IDEOGRAPH + {0xC665, 0x82BF}, //11742 #CJK UNIFIED IDEOGRAPH + {0xC666, 0x82C0}, //11743 #CJK UNIFIED IDEOGRAPH + {0xC667, 0x82C2}, //11744 #CJK UNIFIED IDEOGRAPH + {0xC668, 0x82C3}, //11745 #CJK UNIFIED IDEOGRAPH + {0xC669, 0x82C5}, //11746 #CJK UNIFIED IDEOGRAPH + {0xC66A, 0x82C6}, //11747 #CJK UNIFIED IDEOGRAPH + {0xC66B, 0x82C9}, //11748 #CJK UNIFIED IDEOGRAPH + {0xC66C, 0x82D0}, //11749 #CJK UNIFIED IDEOGRAPH + {0xC66D, 0x82D6}, //11750 #CJK UNIFIED IDEOGRAPH + {0xC66E, 0x82D9}, //11751 #CJK UNIFIED IDEOGRAPH + {0xC66F, 0x82DA}, //11752 #CJK UNIFIED IDEOGRAPH + {0xC670, 0x82DD}, //11753 #CJK UNIFIED IDEOGRAPH + {0xC671, 0x82E2}, //11754 #CJK UNIFIED IDEOGRAPH + {0xC672, 0x82E7}, //11755 #CJK UNIFIED IDEOGRAPH + {0xC673, 0x82E8}, //11756 #CJK UNIFIED IDEOGRAPH + {0xC674, 0x82E9}, //11757 #CJK UNIFIED IDEOGRAPH + {0xC675, 0x82EA}, //11758 #CJK UNIFIED IDEOGRAPH + {0xC676, 0x82EC}, //11759 #CJK UNIFIED IDEOGRAPH + {0xC677, 0x82ED}, //11760 #CJK UNIFIED IDEOGRAPH + {0xC678, 0x82EE}, //11761 #CJK UNIFIED IDEOGRAPH + {0xC679, 0x82F0}, //11762 #CJK UNIFIED IDEOGRAPH + {0xC67A, 0x82F2}, //11763 #CJK UNIFIED IDEOGRAPH + {0xC67B, 0x82F3}, //11764 #CJK UNIFIED IDEOGRAPH + {0xC67C, 0x82F5}, //11765 #CJK UNIFIED IDEOGRAPH + {0xC67D, 0x82F6}, //11766 #CJK UNIFIED IDEOGRAPH + {0xC67E, 0x82F8}, //11767 #CJK UNIFIED IDEOGRAPH + {0xC680, 0x82FA}, //11768 #CJK UNIFIED IDEOGRAPH + {0xC681, 0x82FC}, //11769 #CJK UNIFIED IDEOGRAPH + {0xC682, 0x82FD}, //11770 #CJK UNIFIED IDEOGRAPH + {0xC683, 0x82FE}, //11771 #CJK UNIFIED IDEOGRAPH + {0xC684, 0x82FF}, //11772 #CJK UNIFIED IDEOGRAPH + {0xC685, 0x8300}, //11773 #CJK UNIFIED IDEOGRAPH + {0xC686, 0x830A}, //11774 #CJK UNIFIED IDEOGRAPH + {0xC687, 0x830B}, //11775 #CJK UNIFIED IDEOGRAPH + {0xC688, 0x830D}, //11776 #CJK UNIFIED IDEOGRAPH + {0xC689, 0x8310}, //11777 #CJK UNIFIED IDEOGRAPH + {0xC68A, 0x8312}, //11778 #CJK UNIFIED IDEOGRAPH + {0xC68B, 0x8313}, //11779 #CJK UNIFIED IDEOGRAPH + {0xC68C, 0x8316}, //11780 #CJK UNIFIED IDEOGRAPH + {0xC68D, 0x8318}, //11781 #CJK UNIFIED IDEOGRAPH + {0xC68E, 0x8319}, //11782 #CJK UNIFIED IDEOGRAPH + {0xC68F, 0x831D}, //11783 #CJK UNIFIED IDEOGRAPH + {0xC690, 0x831E}, //11784 #CJK UNIFIED IDEOGRAPH + {0xC691, 0x831F}, //11785 #CJK UNIFIED IDEOGRAPH + {0xC692, 0x8320}, //11786 #CJK UNIFIED IDEOGRAPH + {0xC693, 0x8321}, //11787 #CJK UNIFIED IDEOGRAPH + {0xC694, 0x8322}, //11788 #CJK UNIFIED IDEOGRAPH + {0xC695, 0x8323}, //11789 #CJK UNIFIED IDEOGRAPH + {0xC696, 0x8324}, //11790 #CJK UNIFIED IDEOGRAPH + {0xC697, 0x8325}, //11791 #CJK UNIFIED IDEOGRAPH + {0xC698, 0x8326}, //11792 #CJK UNIFIED IDEOGRAPH + {0xC699, 0x8329}, //11793 #CJK UNIFIED IDEOGRAPH + {0xC69A, 0x832A}, //11794 #CJK UNIFIED IDEOGRAPH + {0xC69B, 0x832E}, //11795 #CJK UNIFIED IDEOGRAPH + {0xC69C, 0x8330}, //11796 #CJK UNIFIED IDEOGRAPH + {0xC69D, 0x8332}, //11797 #CJK UNIFIED IDEOGRAPH + {0xC69E, 0x8337}, //11798 #CJK UNIFIED IDEOGRAPH + {0xC69F, 0x833B}, //11799 #CJK UNIFIED IDEOGRAPH + {0xC6A0, 0x833D}, //11800 #CJK UNIFIED IDEOGRAPH + {0xC6A1, 0x5564}, //11801 #CJK UNIFIED IDEOGRAPH + {0xC6A2, 0x813E}, //11802 #CJK UNIFIED IDEOGRAPH + {0xC6A3, 0x75B2}, //11803 #CJK UNIFIED IDEOGRAPH + {0xC6A4, 0x76AE}, //11804 #CJK UNIFIED IDEOGRAPH + {0xC6A5, 0x5339}, //11805 #CJK UNIFIED IDEOGRAPH + {0xC6A6, 0x75DE}, //11806 #CJK UNIFIED IDEOGRAPH + {0xC6A7, 0x50FB}, //11807 #CJK UNIFIED IDEOGRAPH + {0xC6A8, 0x5C41}, //11808 #CJK UNIFIED IDEOGRAPH + {0xC6A9, 0x8B6C}, //11809 #CJK UNIFIED IDEOGRAPH + {0xC6AA, 0x7BC7}, //11810 #CJK UNIFIED IDEOGRAPH + {0xC6AB, 0x504F}, //11811 #CJK UNIFIED IDEOGRAPH + {0xC6AC, 0x7247}, //11812 #CJK UNIFIED IDEOGRAPH + {0xC6AD, 0x9A97}, //11813 #CJK UNIFIED IDEOGRAPH + {0xC6AE, 0x98D8}, //11814 #CJK UNIFIED IDEOGRAPH + {0xC6AF, 0x6F02}, //11815 #CJK UNIFIED IDEOGRAPH + {0xC6B0, 0x74E2}, //11816 #CJK UNIFIED IDEOGRAPH + {0xC6B1, 0x7968}, //11817 #CJK UNIFIED IDEOGRAPH + {0xC6B2, 0x6487}, //11818 #CJK UNIFIED IDEOGRAPH + {0xC6B3, 0x77A5}, //11819 #CJK UNIFIED IDEOGRAPH + {0xC6B4, 0x62FC}, //11820 #CJK UNIFIED IDEOGRAPH + {0xC6B5, 0x9891}, //11821 #CJK UNIFIED IDEOGRAPH + {0xC6B6, 0x8D2B}, //11822 #CJK UNIFIED IDEOGRAPH + {0xC6B7, 0x54C1}, //11823 #CJK UNIFIED IDEOGRAPH + {0xC6B8, 0x8058}, //11824 #CJK UNIFIED IDEOGRAPH + {0xC6B9, 0x4E52}, //11825 #CJK UNIFIED IDEOGRAPH + {0xC6BA, 0x576A}, //11826 #CJK UNIFIED IDEOGRAPH + {0xC6BB, 0x82F9}, //11827 #CJK UNIFIED IDEOGRAPH + {0xC6BC, 0x840D}, //11828 #CJK UNIFIED IDEOGRAPH + {0xC6BD, 0x5E73}, //11829 #CJK UNIFIED IDEOGRAPH + {0xC6BE, 0x51ED}, //11830 #CJK UNIFIED IDEOGRAPH + {0xC6BF, 0x74F6}, //11831 #CJK UNIFIED IDEOGRAPH + {0xC6C0, 0x8BC4}, //11832 #CJK UNIFIED IDEOGRAPH + {0xC6C1, 0x5C4F}, //11833 #CJK UNIFIED IDEOGRAPH + {0xC6C2, 0x5761}, //11834 #CJK UNIFIED IDEOGRAPH + {0xC6C3, 0x6CFC}, //11835 #CJK UNIFIED IDEOGRAPH + {0xC6C4, 0x9887}, //11836 #CJK UNIFIED IDEOGRAPH + {0xC6C5, 0x5A46}, //11837 #CJK UNIFIED IDEOGRAPH + {0xC6C6, 0x7834}, //11838 #CJK UNIFIED IDEOGRAPH + {0xC6C7, 0x9B44}, //11839 #CJK UNIFIED IDEOGRAPH + {0xC6C8, 0x8FEB}, //11840 #CJK UNIFIED IDEOGRAPH + {0xC6C9, 0x7C95}, //11841 #CJK UNIFIED IDEOGRAPH + {0xC6CA, 0x5256}, //11842 #CJK UNIFIED IDEOGRAPH + {0xC6CB, 0x6251}, //11843 #CJK UNIFIED IDEOGRAPH + {0xC6CC, 0x94FA}, //11844 #CJK UNIFIED IDEOGRAPH + {0xC6CD, 0x4EC6}, //11845 #CJK UNIFIED IDEOGRAPH + {0xC6CE, 0x8386}, //11846 #CJK UNIFIED IDEOGRAPH + {0xC6CF, 0x8461}, //11847 #CJK UNIFIED IDEOGRAPH + {0xC6D0, 0x83E9}, //11848 #CJK UNIFIED IDEOGRAPH + {0xC6D1, 0x84B2}, //11849 #CJK UNIFIED IDEOGRAPH + {0xC6D2, 0x57D4}, //11850 #CJK UNIFIED IDEOGRAPH + {0xC6D3, 0x6734}, //11851 #CJK UNIFIED IDEOGRAPH + {0xC6D4, 0x5703}, //11852 #CJK UNIFIED IDEOGRAPH + {0xC6D5, 0x666E}, //11853 #CJK UNIFIED IDEOGRAPH + {0xC6D6, 0x6D66}, //11854 #CJK UNIFIED IDEOGRAPH + {0xC6D7, 0x8C31}, //11855 #CJK UNIFIED IDEOGRAPH + {0xC6D8, 0x66DD}, //11856 #CJK UNIFIED IDEOGRAPH + {0xC6D9, 0x7011}, //11857 #CJK UNIFIED IDEOGRAPH + {0xC6DA, 0x671F}, //11858 #CJK UNIFIED IDEOGRAPH + {0xC6DB, 0x6B3A}, //11859 #CJK UNIFIED IDEOGRAPH + {0xC6DC, 0x6816}, //11860 #CJK UNIFIED IDEOGRAPH + {0xC6DD, 0x621A}, //11861 #CJK UNIFIED IDEOGRAPH + {0xC6DE, 0x59BB}, //11862 #CJK UNIFIED IDEOGRAPH + {0xC6DF, 0x4E03}, //11863 #CJK UNIFIED IDEOGRAPH + {0xC6E0, 0x51C4}, //11864 #CJK UNIFIED IDEOGRAPH + {0xC6E1, 0x6F06}, //11865 #CJK UNIFIED IDEOGRAPH + {0xC6E2, 0x67D2}, //11866 #CJK UNIFIED IDEOGRAPH + {0xC6E3, 0x6C8F}, //11867 #CJK UNIFIED IDEOGRAPH + {0xC6E4, 0x5176}, //11868 #CJK UNIFIED IDEOGRAPH + {0xC6E5, 0x68CB}, //11869 #CJK UNIFIED IDEOGRAPH + {0xC6E6, 0x5947}, //11870 #CJK UNIFIED IDEOGRAPH + {0xC6E7, 0x6B67}, //11871 #CJK UNIFIED IDEOGRAPH + {0xC6E8, 0x7566}, //11872 #CJK UNIFIED IDEOGRAPH + {0xC6E9, 0x5D0E}, //11873 #CJK UNIFIED IDEOGRAPH + {0xC6EA, 0x8110}, //11874 #CJK UNIFIED IDEOGRAPH + {0xC6EB, 0x9F50}, //11875 #CJK UNIFIED IDEOGRAPH + {0xC6EC, 0x65D7}, //11876 #CJK UNIFIED IDEOGRAPH + {0xC6ED, 0x7948}, //11877 #CJK UNIFIED IDEOGRAPH + {0xC6EE, 0x7941}, //11878 #CJK UNIFIED IDEOGRAPH + {0xC6EF, 0x9A91}, //11879 #CJK UNIFIED IDEOGRAPH + {0xC6F0, 0x8D77}, //11880 #CJK UNIFIED IDEOGRAPH + {0xC6F1, 0x5C82}, //11881 #CJK UNIFIED IDEOGRAPH + {0xC6F2, 0x4E5E}, //11882 #CJK UNIFIED IDEOGRAPH + {0xC6F3, 0x4F01}, //11883 #CJK UNIFIED IDEOGRAPH + {0xC6F4, 0x542F}, //11884 #CJK UNIFIED IDEOGRAPH + {0xC6F5, 0x5951}, //11885 #CJK UNIFIED IDEOGRAPH + {0xC6F6, 0x780C}, //11886 #CJK UNIFIED IDEOGRAPH + {0xC6F7, 0x5668}, //11887 #CJK UNIFIED IDEOGRAPH + {0xC6F8, 0x6C14}, //11888 #CJK UNIFIED IDEOGRAPH + {0xC6F9, 0x8FC4}, //11889 #CJK UNIFIED IDEOGRAPH + {0xC6FA, 0x5F03}, //11890 #CJK UNIFIED IDEOGRAPH + {0xC6FB, 0x6C7D}, //11891 #CJK UNIFIED IDEOGRAPH + {0xC6FC, 0x6CE3}, //11892 #CJK UNIFIED IDEOGRAPH + {0xC6FD, 0x8BAB}, //11893 #CJK UNIFIED IDEOGRAPH + {0xC6FE, 0x6390}, //11894 #CJK UNIFIED IDEOGRAPH + {0xC740, 0x833E}, //11895 #CJK UNIFIED IDEOGRAPH + {0xC741, 0x833F}, //11896 #CJK UNIFIED IDEOGRAPH + {0xC742, 0x8341}, //11897 #CJK UNIFIED IDEOGRAPH + {0xC743, 0x8342}, //11898 #CJK UNIFIED IDEOGRAPH + {0xC744, 0x8344}, //11899 #CJK UNIFIED IDEOGRAPH + {0xC745, 0x8345}, //11900 #CJK UNIFIED IDEOGRAPH + {0xC746, 0x8348}, //11901 #CJK UNIFIED IDEOGRAPH + {0xC747, 0x834A}, //11902 #CJK UNIFIED IDEOGRAPH + {0xC748, 0x834B}, //11903 #CJK UNIFIED IDEOGRAPH + {0xC749, 0x834C}, //11904 #CJK UNIFIED IDEOGRAPH + {0xC74A, 0x834D}, //11905 #CJK UNIFIED IDEOGRAPH + {0xC74B, 0x834E}, //11906 #CJK UNIFIED IDEOGRAPH + {0xC74C, 0x8353}, //11907 #CJK UNIFIED IDEOGRAPH + {0xC74D, 0x8355}, //11908 #CJK UNIFIED IDEOGRAPH + {0xC74E, 0x8356}, //11909 #CJK UNIFIED IDEOGRAPH + {0xC74F, 0x8357}, //11910 #CJK UNIFIED IDEOGRAPH + {0xC750, 0x8358}, //11911 #CJK UNIFIED IDEOGRAPH + {0xC751, 0x8359}, //11912 #CJK UNIFIED IDEOGRAPH + {0xC752, 0x835D}, //11913 #CJK UNIFIED IDEOGRAPH + {0xC753, 0x8362}, //11914 #CJK UNIFIED IDEOGRAPH + {0xC754, 0x8370}, //11915 #CJK UNIFIED IDEOGRAPH + {0xC755, 0x8371}, //11916 #CJK UNIFIED IDEOGRAPH + {0xC756, 0x8372}, //11917 #CJK UNIFIED IDEOGRAPH + {0xC757, 0x8373}, //11918 #CJK UNIFIED IDEOGRAPH + {0xC758, 0x8374}, //11919 #CJK UNIFIED IDEOGRAPH + {0xC759, 0x8375}, //11920 #CJK UNIFIED IDEOGRAPH + {0xC75A, 0x8376}, //11921 #CJK UNIFIED IDEOGRAPH + {0xC75B, 0x8379}, //11922 #CJK UNIFIED IDEOGRAPH + {0xC75C, 0x837A}, //11923 #CJK UNIFIED IDEOGRAPH + {0xC75D, 0x837E}, //11924 #CJK UNIFIED IDEOGRAPH + {0xC75E, 0x837F}, //11925 #CJK UNIFIED IDEOGRAPH + {0xC75F, 0x8380}, //11926 #CJK UNIFIED IDEOGRAPH + {0xC760, 0x8381}, //11927 #CJK UNIFIED IDEOGRAPH + {0xC761, 0x8382}, //11928 #CJK UNIFIED IDEOGRAPH + {0xC762, 0x8383}, //11929 #CJK UNIFIED IDEOGRAPH + {0xC763, 0x8384}, //11930 #CJK UNIFIED IDEOGRAPH + {0xC764, 0x8387}, //11931 #CJK UNIFIED IDEOGRAPH + {0xC765, 0x8388}, //11932 #CJK UNIFIED IDEOGRAPH + {0xC766, 0x838A}, //11933 #CJK UNIFIED IDEOGRAPH + {0xC767, 0x838B}, //11934 #CJK UNIFIED IDEOGRAPH + {0xC768, 0x838C}, //11935 #CJK UNIFIED IDEOGRAPH + {0xC769, 0x838D}, //11936 #CJK UNIFIED IDEOGRAPH + {0xC76A, 0x838F}, //11937 #CJK UNIFIED IDEOGRAPH + {0xC76B, 0x8390}, //11938 #CJK UNIFIED IDEOGRAPH + {0xC76C, 0x8391}, //11939 #CJK UNIFIED IDEOGRAPH + {0xC76D, 0x8394}, //11940 #CJK UNIFIED IDEOGRAPH + {0xC76E, 0x8395}, //11941 #CJK UNIFIED IDEOGRAPH + {0xC76F, 0x8396}, //11942 #CJK UNIFIED IDEOGRAPH + {0xC770, 0x8397}, //11943 #CJK UNIFIED IDEOGRAPH + {0xC771, 0x8399}, //11944 #CJK UNIFIED IDEOGRAPH + {0xC772, 0x839A}, //11945 #CJK UNIFIED IDEOGRAPH + {0xC773, 0x839D}, //11946 #CJK UNIFIED IDEOGRAPH + {0xC774, 0x839F}, //11947 #CJK UNIFIED IDEOGRAPH + {0xC775, 0x83A1}, //11948 #CJK UNIFIED IDEOGRAPH + {0xC776, 0x83A2}, //11949 #CJK UNIFIED IDEOGRAPH + {0xC777, 0x83A3}, //11950 #CJK UNIFIED IDEOGRAPH + {0xC778, 0x83A4}, //11951 #CJK UNIFIED IDEOGRAPH + {0xC779, 0x83A5}, //11952 #CJK UNIFIED IDEOGRAPH + {0xC77A, 0x83A6}, //11953 #CJK UNIFIED IDEOGRAPH + {0xC77B, 0x83A7}, //11954 #CJK UNIFIED IDEOGRAPH + {0xC77C, 0x83AC}, //11955 #CJK UNIFIED IDEOGRAPH + {0xC77D, 0x83AD}, //11956 #CJK UNIFIED IDEOGRAPH + {0xC77E, 0x83AE}, //11957 #CJK UNIFIED IDEOGRAPH + {0xC780, 0x83AF}, //11958 #CJK UNIFIED IDEOGRAPH + {0xC781, 0x83B5}, //11959 #CJK UNIFIED IDEOGRAPH + {0xC782, 0x83BB}, //11960 #CJK UNIFIED IDEOGRAPH + {0xC783, 0x83BE}, //11961 #CJK UNIFIED IDEOGRAPH + {0xC784, 0x83BF}, //11962 #CJK UNIFIED IDEOGRAPH + {0xC785, 0x83C2}, //11963 #CJK UNIFIED IDEOGRAPH + {0xC786, 0x83C3}, //11964 #CJK UNIFIED IDEOGRAPH + {0xC787, 0x83C4}, //11965 #CJK UNIFIED IDEOGRAPH + {0xC788, 0x83C6}, //11966 #CJK UNIFIED IDEOGRAPH + {0xC789, 0x83C8}, //11967 #CJK UNIFIED IDEOGRAPH + {0xC78A, 0x83C9}, //11968 #CJK UNIFIED IDEOGRAPH + {0xC78B, 0x83CB}, //11969 #CJK UNIFIED IDEOGRAPH + {0xC78C, 0x83CD}, //11970 #CJK UNIFIED IDEOGRAPH + {0xC78D, 0x83CE}, //11971 #CJK UNIFIED IDEOGRAPH + {0xC78E, 0x83D0}, //11972 #CJK UNIFIED IDEOGRAPH + {0xC78F, 0x83D1}, //11973 #CJK UNIFIED IDEOGRAPH + {0xC790, 0x83D2}, //11974 #CJK UNIFIED IDEOGRAPH + {0xC791, 0x83D3}, //11975 #CJK UNIFIED IDEOGRAPH + {0xC792, 0x83D5}, //11976 #CJK UNIFIED IDEOGRAPH + {0xC793, 0x83D7}, //11977 #CJK UNIFIED IDEOGRAPH + {0xC794, 0x83D9}, //11978 #CJK UNIFIED IDEOGRAPH + {0xC795, 0x83DA}, //11979 #CJK UNIFIED IDEOGRAPH + {0xC796, 0x83DB}, //11980 #CJK UNIFIED IDEOGRAPH + {0xC797, 0x83DE}, //11981 #CJK UNIFIED IDEOGRAPH + {0xC798, 0x83E2}, //11982 #CJK UNIFIED IDEOGRAPH + {0xC799, 0x83E3}, //11983 #CJK UNIFIED IDEOGRAPH + {0xC79A, 0x83E4}, //11984 #CJK UNIFIED IDEOGRAPH + {0xC79B, 0x83E6}, //11985 #CJK UNIFIED IDEOGRAPH + {0xC79C, 0x83E7}, //11986 #CJK UNIFIED IDEOGRAPH + {0xC79D, 0x83E8}, //11987 #CJK UNIFIED IDEOGRAPH + {0xC79E, 0x83EB}, //11988 #CJK UNIFIED IDEOGRAPH + {0xC79F, 0x83EC}, //11989 #CJK UNIFIED IDEOGRAPH + {0xC7A0, 0x83ED}, //11990 #CJK UNIFIED IDEOGRAPH + {0xC7A1, 0x6070}, //11991 #CJK UNIFIED IDEOGRAPH + {0xC7A2, 0x6D3D}, //11992 #CJK UNIFIED IDEOGRAPH + {0xC7A3, 0x7275}, //11993 #CJK UNIFIED IDEOGRAPH + {0xC7A4, 0x6266}, //11994 #CJK UNIFIED IDEOGRAPH + {0xC7A5, 0x948E}, //11995 #CJK UNIFIED IDEOGRAPH + {0xC7A6, 0x94C5}, //11996 #CJK UNIFIED IDEOGRAPH + {0xC7A7, 0x5343}, //11997 #CJK UNIFIED IDEOGRAPH + {0xC7A8, 0x8FC1}, //11998 #CJK UNIFIED IDEOGRAPH + {0xC7A9, 0x7B7E}, //11999 #CJK UNIFIED IDEOGRAPH + {0xC7AA, 0x4EDF}, //12000 #CJK UNIFIED IDEOGRAPH + {0xC7AB, 0x8C26}, //12001 #CJK UNIFIED IDEOGRAPH + {0xC7AC, 0x4E7E}, //12002 #CJK UNIFIED IDEOGRAPH + {0xC7AD, 0x9ED4}, //12003 #CJK UNIFIED IDEOGRAPH + {0xC7AE, 0x94B1}, //12004 #CJK UNIFIED IDEOGRAPH + {0xC7AF, 0x94B3}, //12005 #CJK UNIFIED IDEOGRAPH + {0xC7B0, 0x524D}, //12006 #CJK UNIFIED IDEOGRAPH + {0xC7B1, 0x6F5C}, //12007 #CJK UNIFIED IDEOGRAPH + {0xC7B2, 0x9063}, //12008 #CJK UNIFIED IDEOGRAPH + {0xC7B3, 0x6D45}, //12009 #CJK UNIFIED IDEOGRAPH + {0xC7B4, 0x8C34}, //12010 #CJK UNIFIED IDEOGRAPH + {0xC7B5, 0x5811}, //12011 #CJK UNIFIED IDEOGRAPH + {0xC7B6, 0x5D4C}, //12012 #CJK UNIFIED IDEOGRAPH + {0xC7B7, 0x6B20}, //12013 #CJK UNIFIED IDEOGRAPH + {0xC7B8, 0x6B49}, //12014 #CJK UNIFIED IDEOGRAPH + {0xC7B9, 0x67AA}, //12015 #CJK UNIFIED IDEOGRAPH + {0xC7BA, 0x545B}, //12016 #CJK UNIFIED IDEOGRAPH + {0xC7BB, 0x8154}, //12017 #CJK UNIFIED IDEOGRAPH + {0xC7BC, 0x7F8C}, //12018 #CJK UNIFIED IDEOGRAPH + {0xC7BD, 0x5899}, //12019 #CJK UNIFIED IDEOGRAPH + {0xC7BE, 0x8537}, //12020 #CJK UNIFIED IDEOGRAPH + {0xC7BF, 0x5F3A}, //12021 #CJK UNIFIED IDEOGRAPH + {0xC7C0, 0x62A2}, //12022 #CJK UNIFIED IDEOGRAPH + {0xC7C1, 0x6A47}, //12023 #CJK UNIFIED IDEOGRAPH + {0xC7C2, 0x9539}, //12024 #CJK UNIFIED IDEOGRAPH + {0xC7C3, 0x6572}, //12025 #CJK UNIFIED IDEOGRAPH + {0xC7C4, 0x6084}, //12026 #CJK UNIFIED IDEOGRAPH + {0xC7C5, 0x6865}, //12027 #CJK UNIFIED IDEOGRAPH + {0xC7C6, 0x77A7}, //12028 #CJK UNIFIED IDEOGRAPH + {0xC7C7, 0x4E54}, //12029 #CJK UNIFIED IDEOGRAPH + {0xC7C8, 0x4FA8}, //12030 #CJK UNIFIED IDEOGRAPH + {0xC7C9, 0x5DE7}, //12031 #CJK UNIFIED IDEOGRAPH + {0xC7CA, 0x9798}, //12032 #CJK UNIFIED IDEOGRAPH + {0xC7CB, 0x64AC}, //12033 #CJK UNIFIED IDEOGRAPH + {0xC7CC, 0x7FD8}, //12034 #CJK UNIFIED IDEOGRAPH + {0xC7CD, 0x5CED}, //12035 #CJK UNIFIED IDEOGRAPH + {0xC7CE, 0x4FCF}, //12036 #CJK UNIFIED IDEOGRAPH + {0xC7CF, 0x7A8D}, //12037 #CJK UNIFIED IDEOGRAPH + {0xC7D0, 0x5207}, //12038 #CJK UNIFIED IDEOGRAPH + {0xC7D1, 0x8304}, //12039 #CJK UNIFIED IDEOGRAPH + {0xC7D2, 0x4E14}, //12040 #CJK UNIFIED IDEOGRAPH + {0xC7D3, 0x602F}, //12041 #CJK UNIFIED IDEOGRAPH + {0xC7D4, 0x7A83}, //12042 #CJK UNIFIED IDEOGRAPH + {0xC7D5, 0x94A6}, //12043 #CJK UNIFIED IDEOGRAPH + {0xC7D6, 0x4FB5}, //12044 #CJK UNIFIED IDEOGRAPH + {0xC7D7, 0x4EB2}, //12045 #CJK UNIFIED IDEOGRAPH + {0xC7D8, 0x79E6}, //12046 #CJK UNIFIED IDEOGRAPH + {0xC7D9, 0x7434}, //12047 #CJK UNIFIED IDEOGRAPH + {0xC7DA, 0x52E4}, //12048 #CJK UNIFIED IDEOGRAPH + {0xC7DB, 0x82B9}, //12049 #CJK UNIFIED IDEOGRAPH + {0xC7DC, 0x64D2}, //12050 #CJK UNIFIED IDEOGRAPH + {0xC7DD, 0x79BD}, //12051 #CJK UNIFIED IDEOGRAPH + {0xC7DE, 0x5BDD}, //12052 #CJK UNIFIED IDEOGRAPH + {0xC7DF, 0x6C81}, //12053 #CJK UNIFIED IDEOGRAPH + {0xC7E0, 0x9752}, //12054 #CJK UNIFIED IDEOGRAPH + {0xC7E1, 0x8F7B}, //12055 #CJK UNIFIED IDEOGRAPH + {0xC7E2, 0x6C22}, //12056 #CJK UNIFIED IDEOGRAPH + {0xC7E3, 0x503E}, //12057 #CJK UNIFIED IDEOGRAPH + {0xC7E4, 0x537F}, //12058 #CJK UNIFIED IDEOGRAPH + {0xC7E5, 0x6E05}, //12059 #CJK UNIFIED IDEOGRAPH + {0xC7E6, 0x64CE}, //12060 #CJK UNIFIED IDEOGRAPH + {0xC7E7, 0x6674}, //12061 #CJK UNIFIED IDEOGRAPH + {0xC7E8, 0x6C30}, //12062 #CJK UNIFIED IDEOGRAPH + {0xC7E9, 0x60C5}, //12063 #CJK UNIFIED IDEOGRAPH + {0xC7EA, 0x9877}, //12064 #CJK UNIFIED IDEOGRAPH + {0xC7EB, 0x8BF7}, //12065 #CJK UNIFIED IDEOGRAPH + {0xC7EC, 0x5E86}, //12066 #CJK UNIFIED IDEOGRAPH + {0xC7ED, 0x743C}, //12067 #CJK UNIFIED IDEOGRAPH + {0xC7EE, 0x7A77}, //12068 #CJK UNIFIED IDEOGRAPH + {0xC7EF, 0x79CB}, //12069 #CJK UNIFIED IDEOGRAPH + {0xC7F0, 0x4E18}, //12070 #CJK UNIFIED IDEOGRAPH + {0xC7F1, 0x90B1}, //12071 #CJK UNIFIED IDEOGRAPH + {0xC7F2, 0x7403}, //12072 #CJK UNIFIED IDEOGRAPH + {0xC7F3, 0x6C42}, //12073 #CJK UNIFIED IDEOGRAPH + {0xC7F4, 0x56DA}, //12074 #CJK UNIFIED IDEOGRAPH + {0xC7F5, 0x914B}, //12075 #CJK UNIFIED IDEOGRAPH + {0xC7F6, 0x6CC5}, //12076 #CJK UNIFIED IDEOGRAPH + {0xC7F7, 0x8D8B}, //12077 #CJK UNIFIED IDEOGRAPH + {0xC7F8, 0x533A}, //12078 #CJK UNIFIED IDEOGRAPH + {0xC7F9, 0x86C6}, //12079 #CJK UNIFIED IDEOGRAPH + {0xC7FA, 0x66F2}, //12080 #CJK UNIFIED IDEOGRAPH + {0xC7FB, 0x8EAF}, //12081 #CJK UNIFIED IDEOGRAPH + {0xC7FC, 0x5C48}, //12082 #CJK UNIFIED IDEOGRAPH + {0xC7FD, 0x9A71}, //12083 #CJK UNIFIED IDEOGRAPH + {0xC7FE, 0x6E20}, //12084 #CJK UNIFIED IDEOGRAPH + {0xC840, 0x83EE}, //12085 #CJK UNIFIED IDEOGRAPH + {0xC841, 0x83EF}, //12086 #CJK UNIFIED IDEOGRAPH + {0xC842, 0x83F3}, //12087 #CJK UNIFIED IDEOGRAPH + {0xC843, 0x83F4}, //12088 #CJK UNIFIED IDEOGRAPH + {0xC844, 0x83F5}, //12089 #CJK UNIFIED IDEOGRAPH + {0xC845, 0x83F6}, //12090 #CJK UNIFIED IDEOGRAPH + {0xC846, 0x83F7}, //12091 #CJK UNIFIED IDEOGRAPH + {0xC847, 0x83FA}, //12092 #CJK UNIFIED IDEOGRAPH + {0xC848, 0x83FB}, //12093 #CJK UNIFIED IDEOGRAPH + {0xC849, 0x83FC}, //12094 #CJK UNIFIED IDEOGRAPH + {0xC84A, 0x83FE}, //12095 #CJK UNIFIED IDEOGRAPH + {0xC84B, 0x83FF}, //12096 #CJK UNIFIED IDEOGRAPH + {0xC84C, 0x8400}, //12097 #CJK UNIFIED IDEOGRAPH + {0xC84D, 0x8402}, //12098 #CJK UNIFIED IDEOGRAPH + {0xC84E, 0x8405}, //12099 #CJK UNIFIED IDEOGRAPH + {0xC84F, 0x8407}, //12100 #CJK UNIFIED IDEOGRAPH + {0xC850, 0x8408}, //12101 #CJK UNIFIED IDEOGRAPH + {0xC851, 0x8409}, //12102 #CJK UNIFIED IDEOGRAPH + {0xC852, 0x840A}, //12103 #CJK UNIFIED IDEOGRAPH + {0xC853, 0x8410}, //12104 #CJK UNIFIED IDEOGRAPH + {0xC854, 0x8412}, //12105 #CJK UNIFIED IDEOGRAPH + {0xC855, 0x8413}, //12106 #CJK UNIFIED IDEOGRAPH + {0xC856, 0x8414}, //12107 #CJK UNIFIED IDEOGRAPH + {0xC857, 0x8415}, //12108 #CJK UNIFIED IDEOGRAPH + {0xC858, 0x8416}, //12109 #CJK UNIFIED IDEOGRAPH + {0xC859, 0x8417}, //12110 #CJK UNIFIED IDEOGRAPH + {0xC85A, 0x8419}, //12111 #CJK UNIFIED IDEOGRAPH + {0xC85B, 0x841A}, //12112 #CJK UNIFIED IDEOGRAPH + {0xC85C, 0x841B}, //12113 #CJK UNIFIED IDEOGRAPH + {0xC85D, 0x841E}, //12114 #CJK UNIFIED IDEOGRAPH + {0xC85E, 0x841F}, //12115 #CJK UNIFIED IDEOGRAPH + {0xC85F, 0x8420}, //12116 #CJK UNIFIED IDEOGRAPH + {0xC860, 0x8421}, //12117 #CJK UNIFIED IDEOGRAPH + {0xC861, 0x8422}, //12118 #CJK UNIFIED IDEOGRAPH + {0xC862, 0x8423}, //12119 #CJK UNIFIED IDEOGRAPH + {0xC863, 0x8429}, //12120 #CJK UNIFIED IDEOGRAPH + {0xC864, 0x842A}, //12121 #CJK UNIFIED IDEOGRAPH + {0xC865, 0x842B}, //12122 #CJK UNIFIED IDEOGRAPH + {0xC866, 0x842C}, //12123 #CJK UNIFIED IDEOGRAPH + {0xC867, 0x842D}, //12124 #CJK UNIFIED IDEOGRAPH + {0xC868, 0x842E}, //12125 #CJK UNIFIED IDEOGRAPH + {0xC869, 0x842F}, //12126 #CJK UNIFIED IDEOGRAPH + {0xC86A, 0x8430}, //12127 #CJK UNIFIED IDEOGRAPH + {0xC86B, 0x8432}, //12128 #CJK UNIFIED IDEOGRAPH + {0xC86C, 0x8433}, //12129 #CJK UNIFIED IDEOGRAPH + {0xC86D, 0x8434}, //12130 #CJK UNIFIED IDEOGRAPH + {0xC86E, 0x8435}, //12131 #CJK UNIFIED IDEOGRAPH + {0xC86F, 0x8436}, //12132 #CJK UNIFIED IDEOGRAPH + {0xC870, 0x8437}, //12133 #CJK UNIFIED IDEOGRAPH + {0xC871, 0x8439}, //12134 #CJK UNIFIED IDEOGRAPH + {0xC872, 0x843A}, //12135 #CJK UNIFIED IDEOGRAPH + {0xC873, 0x843B}, //12136 #CJK UNIFIED IDEOGRAPH + {0xC874, 0x843E}, //12137 #CJK UNIFIED IDEOGRAPH + {0xC875, 0x843F}, //12138 #CJK UNIFIED IDEOGRAPH + {0xC876, 0x8440}, //12139 #CJK UNIFIED IDEOGRAPH + {0xC877, 0x8441}, //12140 #CJK UNIFIED IDEOGRAPH + {0xC878, 0x8442}, //12141 #CJK UNIFIED IDEOGRAPH + {0xC879, 0x8443}, //12142 #CJK UNIFIED IDEOGRAPH + {0xC87A, 0x8444}, //12143 #CJK UNIFIED IDEOGRAPH + {0xC87B, 0x8445}, //12144 #CJK UNIFIED IDEOGRAPH + {0xC87C, 0x8447}, //12145 #CJK UNIFIED IDEOGRAPH + {0xC87D, 0x8448}, //12146 #CJK UNIFIED IDEOGRAPH + {0xC87E, 0x8449}, //12147 #CJK UNIFIED IDEOGRAPH + {0xC880, 0x844A}, //12148 #CJK UNIFIED IDEOGRAPH + {0xC881, 0x844B}, //12149 #CJK UNIFIED IDEOGRAPH + {0xC882, 0x844C}, //12150 #CJK UNIFIED IDEOGRAPH + {0xC883, 0x844D}, //12151 #CJK UNIFIED IDEOGRAPH + {0xC884, 0x844E}, //12152 #CJK UNIFIED IDEOGRAPH + {0xC885, 0x844F}, //12153 #CJK UNIFIED IDEOGRAPH + {0xC886, 0x8450}, //12154 #CJK UNIFIED IDEOGRAPH + {0xC887, 0x8452}, //12155 #CJK UNIFIED IDEOGRAPH + {0xC888, 0x8453}, //12156 #CJK UNIFIED IDEOGRAPH + {0xC889, 0x8454}, //12157 #CJK UNIFIED IDEOGRAPH + {0xC88A, 0x8455}, //12158 #CJK UNIFIED IDEOGRAPH + {0xC88B, 0x8456}, //12159 #CJK UNIFIED IDEOGRAPH + {0xC88C, 0x8458}, //12160 #CJK UNIFIED IDEOGRAPH + {0xC88D, 0x845D}, //12161 #CJK UNIFIED IDEOGRAPH + {0xC88E, 0x845E}, //12162 #CJK UNIFIED IDEOGRAPH + {0xC88F, 0x845F}, //12163 #CJK UNIFIED IDEOGRAPH + {0xC890, 0x8460}, //12164 #CJK UNIFIED IDEOGRAPH + {0xC891, 0x8462}, //12165 #CJK UNIFIED IDEOGRAPH + {0xC892, 0x8464}, //12166 #CJK UNIFIED IDEOGRAPH + {0xC893, 0x8465}, //12167 #CJK UNIFIED IDEOGRAPH + {0xC894, 0x8466}, //12168 #CJK UNIFIED IDEOGRAPH + {0xC895, 0x8467}, //12169 #CJK UNIFIED IDEOGRAPH + {0xC896, 0x8468}, //12170 #CJK UNIFIED IDEOGRAPH + {0xC897, 0x846A}, //12171 #CJK UNIFIED IDEOGRAPH + {0xC898, 0x846E}, //12172 #CJK UNIFIED IDEOGRAPH + {0xC899, 0x846F}, //12173 #CJK UNIFIED IDEOGRAPH + {0xC89A, 0x8470}, //12174 #CJK UNIFIED IDEOGRAPH + {0xC89B, 0x8472}, //12175 #CJK UNIFIED IDEOGRAPH + {0xC89C, 0x8474}, //12176 #CJK UNIFIED IDEOGRAPH + {0xC89D, 0x8477}, //12177 #CJK UNIFIED IDEOGRAPH + {0xC89E, 0x8479}, //12178 #CJK UNIFIED IDEOGRAPH + {0xC89F, 0x847B}, //12179 #CJK UNIFIED IDEOGRAPH + {0xC8A0, 0x847C}, //12180 #CJK UNIFIED IDEOGRAPH + {0xC8A1, 0x53D6}, //12181 #CJK UNIFIED IDEOGRAPH + {0xC8A2, 0x5A36}, //12182 #CJK UNIFIED IDEOGRAPH + {0xC8A3, 0x9F8B}, //12183 #CJK UNIFIED IDEOGRAPH + {0xC8A4, 0x8DA3}, //12184 #CJK UNIFIED IDEOGRAPH + {0xC8A5, 0x53BB}, //12185 #CJK UNIFIED IDEOGRAPH + {0xC8A6, 0x5708}, //12186 #CJK UNIFIED IDEOGRAPH + {0xC8A7, 0x98A7}, //12187 #CJK UNIFIED IDEOGRAPH + {0xC8A8, 0x6743}, //12188 #CJK UNIFIED IDEOGRAPH + {0xC8A9, 0x919B}, //12189 #CJK UNIFIED IDEOGRAPH + {0xC8AA, 0x6CC9}, //12190 #CJK UNIFIED IDEOGRAPH + {0xC8AB, 0x5168}, //12191 #CJK UNIFIED IDEOGRAPH + {0xC8AC, 0x75CA}, //12192 #CJK UNIFIED IDEOGRAPH + {0xC8AD, 0x62F3}, //12193 #CJK UNIFIED IDEOGRAPH + {0xC8AE, 0x72AC}, //12194 #CJK UNIFIED IDEOGRAPH + {0xC8AF, 0x5238}, //12195 #CJK UNIFIED IDEOGRAPH + {0xC8B0, 0x529D}, //12196 #CJK UNIFIED IDEOGRAPH + {0xC8B1, 0x7F3A}, //12197 #CJK UNIFIED IDEOGRAPH + {0xC8B2, 0x7094}, //12198 #CJK UNIFIED IDEOGRAPH + {0xC8B3, 0x7638}, //12199 #CJK UNIFIED IDEOGRAPH + {0xC8B4, 0x5374}, //12200 #CJK UNIFIED IDEOGRAPH + {0xC8B5, 0x9E4A}, //12201 #CJK UNIFIED IDEOGRAPH + {0xC8B6, 0x69B7}, //12202 #CJK UNIFIED IDEOGRAPH + {0xC8B7, 0x786E}, //12203 #CJK UNIFIED IDEOGRAPH + {0xC8B8, 0x96C0}, //12204 #CJK UNIFIED IDEOGRAPH + {0xC8B9, 0x88D9}, //12205 #CJK UNIFIED IDEOGRAPH + {0xC8BA, 0x7FA4}, //12206 #CJK UNIFIED IDEOGRAPH + {0xC8BB, 0x7136}, //12207 #CJK UNIFIED IDEOGRAPH + {0xC8BC, 0x71C3}, //12208 #CJK UNIFIED IDEOGRAPH + {0xC8BD, 0x5189}, //12209 #CJK UNIFIED IDEOGRAPH + {0xC8BE, 0x67D3}, //12210 #CJK UNIFIED IDEOGRAPH + {0xC8BF, 0x74E4}, //12211 #CJK UNIFIED IDEOGRAPH + {0xC8C0, 0x58E4}, //12212 #CJK UNIFIED IDEOGRAPH + {0xC8C1, 0x6518}, //12213 #CJK UNIFIED IDEOGRAPH + {0xC8C2, 0x56B7}, //12214 #CJK UNIFIED IDEOGRAPH + {0xC8C3, 0x8BA9}, //12215 #CJK UNIFIED IDEOGRAPH + {0xC8C4, 0x9976}, //12216 #CJK UNIFIED IDEOGRAPH + {0xC8C5, 0x6270}, //12217 #CJK UNIFIED IDEOGRAPH + {0xC8C6, 0x7ED5}, //12218 #CJK UNIFIED IDEOGRAPH + {0xC8C7, 0x60F9}, //12219 #CJK UNIFIED IDEOGRAPH + {0xC8C8, 0x70ED}, //12220 #CJK UNIFIED IDEOGRAPH + {0xC8C9, 0x58EC}, //12221 #CJK UNIFIED IDEOGRAPH + {0xC8CA, 0x4EC1}, //12222 #CJK UNIFIED IDEOGRAPH + {0xC8CB, 0x4EBA}, //12223 #CJK UNIFIED IDEOGRAPH + {0xC8CC, 0x5FCD}, //12224 #CJK UNIFIED IDEOGRAPH + {0xC8CD, 0x97E7}, //12225 #CJK UNIFIED IDEOGRAPH + {0xC8CE, 0x4EFB}, //12226 #CJK UNIFIED IDEOGRAPH + {0xC8CF, 0x8BA4}, //12227 #CJK UNIFIED IDEOGRAPH + {0xC8D0, 0x5203}, //12228 #CJK UNIFIED IDEOGRAPH + {0xC8D1, 0x598A}, //12229 #CJK UNIFIED IDEOGRAPH + {0xC8D2, 0x7EAB}, //12230 #CJK UNIFIED IDEOGRAPH + {0xC8D3, 0x6254}, //12231 #CJK UNIFIED IDEOGRAPH + {0xC8D4, 0x4ECD}, //12232 #CJK UNIFIED IDEOGRAPH + {0xC8D5, 0x65E5}, //12233 #CJK UNIFIED IDEOGRAPH + {0xC8D6, 0x620E}, //12234 #CJK UNIFIED IDEOGRAPH + {0xC8D7, 0x8338}, //12235 #CJK UNIFIED IDEOGRAPH + {0xC8D8, 0x84C9}, //12236 #CJK UNIFIED IDEOGRAPH + {0xC8D9, 0x8363}, //12237 #CJK UNIFIED IDEOGRAPH + {0xC8DA, 0x878D}, //12238 #CJK UNIFIED IDEOGRAPH + {0xC8DB, 0x7194}, //12239 #CJK UNIFIED IDEOGRAPH + {0xC8DC, 0x6EB6}, //12240 #CJK UNIFIED IDEOGRAPH + {0xC8DD, 0x5BB9}, //12241 #CJK UNIFIED IDEOGRAPH + {0xC8DE, 0x7ED2}, //12242 #CJK UNIFIED IDEOGRAPH + {0xC8DF, 0x5197}, //12243 #CJK UNIFIED IDEOGRAPH + {0xC8E0, 0x63C9}, //12244 #CJK UNIFIED IDEOGRAPH + {0xC8E1, 0x67D4}, //12245 #CJK UNIFIED IDEOGRAPH + {0xC8E2, 0x8089}, //12246 #CJK UNIFIED IDEOGRAPH + {0xC8E3, 0x8339}, //12247 #CJK UNIFIED IDEOGRAPH + {0xC8E4, 0x8815}, //12248 #CJK UNIFIED IDEOGRAPH + {0xC8E5, 0x5112}, //12249 #CJK UNIFIED IDEOGRAPH + {0xC8E6, 0x5B7A}, //12250 #CJK UNIFIED IDEOGRAPH + {0xC8E7, 0x5982}, //12251 #CJK UNIFIED IDEOGRAPH + {0xC8E8, 0x8FB1}, //12252 #CJK UNIFIED IDEOGRAPH + {0xC8E9, 0x4E73}, //12253 #CJK UNIFIED IDEOGRAPH + {0xC8EA, 0x6C5D}, //12254 #CJK UNIFIED IDEOGRAPH + {0xC8EB, 0x5165}, //12255 #CJK UNIFIED IDEOGRAPH + {0xC8EC, 0x8925}, //12256 #CJK UNIFIED IDEOGRAPH + {0xC8ED, 0x8F6F}, //12257 #CJK UNIFIED IDEOGRAPH + {0xC8EE, 0x962E}, //12258 #CJK UNIFIED IDEOGRAPH + {0xC8EF, 0x854A}, //12259 #CJK UNIFIED IDEOGRAPH + {0xC8F0, 0x745E}, //12260 #CJK UNIFIED IDEOGRAPH + {0xC8F1, 0x9510}, //12261 #CJK UNIFIED IDEOGRAPH + {0xC8F2, 0x95F0}, //12262 #CJK UNIFIED IDEOGRAPH + {0xC8F3, 0x6DA6}, //12263 #CJK UNIFIED IDEOGRAPH + {0xC8F4, 0x82E5}, //12264 #CJK UNIFIED IDEOGRAPH + {0xC8F5, 0x5F31}, //12265 #CJK UNIFIED IDEOGRAPH + {0xC8F6, 0x6492}, //12266 #CJK UNIFIED IDEOGRAPH + {0xC8F7, 0x6D12}, //12267 #CJK UNIFIED IDEOGRAPH + {0xC8F8, 0x8428}, //12268 #CJK UNIFIED IDEOGRAPH + {0xC8F9, 0x816E}, //12269 #CJK UNIFIED IDEOGRAPH + {0xC8FA, 0x9CC3}, //12270 #CJK UNIFIED IDEOGRAPH + {0xC8FB, 0x585E}, //12271 #CJK UNIFIED IDEOGRAPH + {0xC8FC, 0x8D5B}, //12272 #CJK UNIFIED IDEOGRAPH + {0xC8FD, 0x4E09}, //12273 #CJK UNIFIED IDEOGRAPH + {0xC8FE, 0x53C1}, //12274 #CJK UNIFIED IDEOGRAPH + {0xC940, 0x847D}, //12275 #CJK UNIFIED IDEOGRAPH + {0xC941, 0x847E}, //12276 #CJK UNIFIED IDEOGRAPH + {0xC942, 0x847F}, //12277 #CJK UNIFIED IDEOGRAPH + {0xC943, 0x8480}, //12278 #CJK UNIFIED IDEOGRAPH + {0xC944, 0x8481}, //12279 #CJK UNIFIED IDEOGRAPH + {0xC945, 0x8483}, //12280 #CJK UNIFIED IDEOGRAPH + {0xC946, 0x8484}, //12281 #CJK UNIFIED IDEOGRAPH + {0xC947, 0x8485}, //12282 #CJK UNIFIED IDEOGRAPH + {0xC948, 0x8486}, //12283 #CJK UNIFIED IDEOGRAPH + {0xC949, 0x848A}, //12284 #CJK UNIFIED IDEOGRAPH + {0xC94A, 0x848D}, //12285 #CJK UNIFIED IDEOGRAPH + {0xC94B, 0x848F}, //12286 #CJK UNIFIED IDEOGRAPH + {0xC94C, 0x8490}, //12287 #CJK UNIFIED IDEOGRAPH + {0xC94D, 0x8491}, //12288 #CJK UNIFIED IDEOGRAPH + {0xC94E, 0x8492}, //12289 #CJK UNIFIED IDEOGRAPH + {0xC94F, 0x8493}, //12290 #CJK UNIFIED IDEOGRAPH + {0xC950, 0x8494}, //12291 #CJK UNIFIED IDEOGRAPH + {0xC951, 0x8495}, //12292 #CJK UNIFIED IDEOGRAPH + {0xC952, 0x8496}, //12293 #CJK UNIFIED IDEOGRAPH + {0xC953, 0x8498}, //12294 #CJK UNIFIED IDEOGRAPH + {0xC954, 0x849A}, //12295 #CJK UNIFIED IDEOGRAPH + {0xC955, 0x849B}, //12296 #CJK UNIFIED IDEOGRAPH + {0xC956, 0x849D}, //12297 #CJK UNIFIED IDEOGRAPH + {0xC957, 0x849E}, //12298 #CJK UNIFIED IDEOGRAPH + {0xC958, 0x849F}, //12299 #CJK UNIFIED IDEOGRAPH + {0xC959, 0x84A0}, //12300 #CJK UNIFIED IDEOGRAPH + {0xC95A, 0x84A2}, //12301 #CJK UNIFIED IDEOGRAPH + {0xC95B, 0x84A3}, //12302 #CJK UNIFIED IDEOGRAPH + {0xC95C, 0x84A4}, //12303 #CJK UNIFIED IDEOGRAPH + {0xC95D, 0x84A5}, //12304 #CJK UNIFIED IDEOGRAPH + {0xC95E, 0x84A6}, //12305 #CJK UNIFIED IDEOGRAPH + {0xC95F, 0x84A7}, //12306 #CJK UNIFIED IDEOGRAPH + {0xC960, 0x84A8}, //12307 #CJK UNIFIED IDEOGRAPH + {0xC961, 0x84A9}, //12308 #CJK UNIFIED IDEOGRAPH + {0xC962, 0x84AA}, //12309 #CJK UNIFIED IDEOGRAPH + {0xC963, 0x84AB}, //12310 #CJK UNIFIED IDEOGRAPH + {0xC964, 0x84AC}, //12311 #CJK UNIFIED IDEOGRAPH + {0xC965, 0x84AD}, //12312 #CJK UNIFIED IDEOGRAPH + {0xC966, 0x84AE}, //12313 #CJK UNIFIED IDEOGRAPH + {0xC967, 0x84B0}, //12314 #CJK UNIFIED IDEOGRAPH + {0xC968, 0x84B1}, //12315 #CJK UNIFIED IDEOGRAPH + {0xC969, 0x84B3}, //12316 #CJK UNIFIED IDEOGRAPH + {0xC96A, 0x84B5}, //12317 #CJK UNIFIED IDEOGRAPH + {0xC96B, 0x84B6}, //12318 #CJK UNIFIED IDEOGRAPH + {0xC96C, 0x84B7}, //12319 #CJK UNIFIED IDEOGRAPH + {0xC96D, 0x84BB}, //12320 #CJK UNIFIED IDEOGRAPH + {0xC96E, 0x84BC}, //12321 #CJK UNIFIED IDEOGRAPH + {0xC96F, 0x84BE}, //12322 #CJK UNIFIED IDEOGRAPH + {0xC970, 0x84C0}, //12323 #CJK UNIFIED IDEOGRAPH + {0xC971, 0x84C2}, //12324 #CJK UNIFIED IDEOGRAPH + {0xC972, 0x84C3}, //12325 #CJK UNIFIED IDEOGRAPH + {0xC973, 0x84C5}, //12326 #CJK UNIFIED IDEOGRAPH + {0xC974, 0x84C6}, //12327 #CJK UNIFIED IDEOGRAPH + {0xC975, 0x84C7}, //12328 #CJK UNIFIED IDEOGRAPH + {0xC976, 0x84C8}, //12329 #CJK UNIFIED IDEOGRAPH + {0xC977, 0x84CB}, //12330 #CJK UNIFIED IDEOGRAPH + {0xC978, 0x84CC}, //12331 #CJK UNIFIED IDEOGRAPH + {0xC979, 0x84CE}, //12332 #CJK UNIFIED IDEOGRAPH + {0xC97A, 0x84CF}, //12333 #CJK UNIFIED IDEOGRAPH + {0xC97B, 0x84D2}, //12334 #CJK UNIFIED IDEOGRAPH + {0xC97C, 0x84D4}, //12335 #CJK UNIFIED IDEOGRAPH + {0xC97D, 0x84D5}, //12336 #CJK UNIFIED IDEOGRAPH + {0xC97E, 0x84D7}, //12337 #CJK UNIFIED IDEOGRAPH + {0xC980, 0x84D8}, //12338 #CJK UNIFIED IDEOGRAPH + {0xC981, 0x84D9}, //12339 #CJK UNIFIED IDEOGRAPH + {0xC982, 0x84DA}, //12340 #CJK UNIFIED IDEOGRAPH + {0xC983, 0x84DB}, //12341 #CJK UNIFIED IDEOGRAPH + {0xC984, 0x84DC}, //12342 #CJK UNIFIED IDEOGRAPH + {0xC985, 0x84DE}, //12343 #CJK UNIFIED IDEOGRAPH + {0xC986, 0x84E1}, //12344 #CJK UNIFIED IDEOGRAPH + {0xC987, 0x84E2}, //12345 #CJK UNIFIED IDEOGRAPH + {0xC988, 0x84E4}, //12346 #CJK UNIFIED IDEOGRAPH + {0xC989, 0x84E7}, //12347 #CJK UNIFIED IDEOGRAPH + {0xC98A, 0x84E8}, //12348 #CJK UNIFIED IDEOGRAPH + {0xC98B, 0x84E9}, //12349 #CJK UNIFIED IDEOGRAPH + {0xC98C, 0x84EA}, //12350 #CJK UNIFIED IDEOGRAPH + {0xC98D, 0x84EB}, //12351 #CJK UNIFIED IDEOGRAPH + {0xC98E, 0x84ED}, //12352 #CJK UNIFIED IDEOGRAPH + {0xC98F, 0x84EE}, //12353 #CJK UNIFIED IDEOGRAPH + {0xC990, 0x84EF}, //12354 #CJK UNIFIED IDEOGRAPH + {0xC991, 0x84F1}, //12355 #CJK UNIFIED IDEOGRAPH + {0xC992, 0x84F2}, //12356 #CJK UNIFIED IDEOGRAPH + {0xC993, 0x84F3}, //12357 #CJK UNIFIED IDEOGRAPH + {0xC994, 0x84F4}, //12358 #CJK UNIFIED IDEOGRAPH + {0xC995, 0x84F5}, //12359 #CJK UNIFIED IDEOGRAPH + {0xC996, 0x84F6}, //12360 #CJK UNIFIED IDEOGRAPH + {0xC997, 0x84F7}, //12361 #CJK UNIFIED IDEOGRAPH + {0xC998, 0x84F8}, //12362 #CJK UNIFIED IDEOGRAPH + {0xC999, 0x84F9}, //12363 #CJK UNIFIED IDEOGRAPH + {0xC99A, 0x84FA}, //12364 #CJK UNIFIED IDEOGRAPH + {0xC99B, 0x84FB}, //12365 #CJK UNIFIED IDEOGRAPH + {0xC99C, 0x84FD}, //12366 #CJK UNIFIED IDEOGRAPH + {0xC99D, 0x84FE}, //12367 #CJK UNIFIED IDEOGRAPH + {0xC99E, 0x8500}, //12368 #CJK UNIFIED IDEOGRAPH + {0xC99F, 0x8501}, //12369 #CJK UNIFIED IDEOGRAPH + {0xC9A0, 0x8502}, //12370 #CJK UNIFIED IDEOGRAPH + {0xC9A1, 0x4F1E}, //12371 #CJK UNIFIED IDEOGRAPH + {0xC9A2, 0x6563}, //12372 #CJK UNIFIED IDEOGRAPH + {0xC9A3, 0x6851}, //12373 #CJK UNIFIED IDEOGRAPH + {0xC9A4, 0x55D3}, //12374 #CJK UNIFIED IDEOGRAPH + {0xC9A5, 0x4E27}, //12375 #CJK UNIFIED IDEOGRAPH + {0xC9A6, 0x6414}, //12376 #CJK UNIFIED IDEOGRAPH + {0xC9A7, 0x9A9A}, //12377 #CJK UNIFIED IDEOGRAPH + {0xC9A8, 0x626B}, //12378 #CJK UNIFIED IDEOGRAPH + {0xC9A9, 0x5AC2}, //12379 #CJK UNIFIED IDEOGRAPH + {0xC9AA, 0x745F}, //12380 #CJK UNIFIED IDEOGRAPH + {0xC9AB, 0x8272}, //12381 #CJK UNIFIED IDEOGRAPH + {0xC9AC, 0x6DA9}, //12382 #CJK UNIFIED IDEOGRAPH + {0xC9AD, 0x68EE}, //12383 #CJK UNIFIED IDEOGRAPH + {0xC9AE, 0x50E7}, //12384 #CJK UNIFIED IDEOGRAPH + {0xC9AF, 0x838E}, //12385 #CJK UNIFIED IDEOGRAPH + {0xC9B0, 0x7802}, //12386 #CJK UNIFIED IDEOGRAPH + {0xC9B1, 0x6740}, //12387 #CJK UNIFIED IDEOGRAPH + {0xC9B2, 0x5239}, //12388 #CJK UNIFIED IDEOGRAPH + {0xC9B3, 0x6C99}, //12389 #CJK UNIFIED IDEOGRAPH + {0xC9B4, 0x7EB1}, //12390 #CJK UNIFIED IDEOGRAPH + {0xC9B5, 0x50BB}, //12391 #CJK UNIFIED IDEOGRAPH + {0xC9B6, 0x5565}, //12392 #CJK UNIFIED IDEOGRAPH + {0xC9B7, 0x715E}, //12393 #CJK UNIFIED IDEOGRAPH + {0xC9B8, 0x7B5B}, //12394 #CJK UNIFIED IDEOGRAPH + {0xC9B9, 0x6652}, //12395 #CJK UNIFIED IDEOGRAPH + {0xC9BA, 0x73CA}, //12396 #CJK UNIFIED IDEOGRAPH + {0xC9BB, 0x82EB}, //12397 #CJK UNIFIED IDEOGRAPH + {0xC9BC, 0x6749}, //12398 #CJK UNIFIED IDEOGRAPH + {0xC9BD, 0x5C71}, //12399 #CJK UNIFIED IDEOGRAPH + {0xC9BE, 0x5220}, //12400 #CJK UNIFIED IDEOGRAPH + {0xC9BF, 0x717D}, //12401 #CJK UNIFIED IDEOGRAPH + {0xC9C0, 0x886B}, //12402 #CJK UNIFIED IDEOGRAPH + {0xC9C1, 0x95EA}, //12403 #CJK UNIFIED IDEOGRAPH + {0xC9C2, 0x9655}, //12404 #CJK UNIFIED IDEOGRAPH + {0xC9C3, 0x64C5}, //12405 #CJK UNIFIED IDEOGRAPH + {0xC9C4, 0x8D61}, //12406 #CJK UNIFIED IDEOGRAPH + {0xC9C5, 0x81B3}, //12407 #CJK UNIFIED IDEOGRAPH + {0xC9C6, 0x5584}, //12408 #CJK UNIFIED IDEOGRAPH + {0xC9C7, 0x6C55}, //12409 #CJK UNIFIED IDEOGRAPH + {0xC9C8, 0x6247}, //12410 #CJK UNIFIED IDEOGRAPH + {0xC9C9, 0x7F2E}, //12411 #CJK UNIFIED IDEOGRAPH + {0xC9CA, 0x5892}, //12412 #CJK UNIFIED IDEOGRAPH + {0xC9CB, 0x4F24}, //12413 #CJK UNIFIED IDEOGRAPH + {0xC9CC, 0x5546}, //12414 #CJK UNIFIED IDEOGRAPH + {0xC9CD, 0x8D4F}, //12415 #CJK UNIFIED IDEOGRAPH + {0xC9CE, 0x664C}, //12416 #CJK UNIFIED IDEOGRAPH + {0xC9CF, 0x4E0A}, //12417 #CJK UNIFIED IDEOGRAPH + {0xC9D0, 0x5C1A}, //12418 #CJK UNIFIED IDEOGRAPH + {0xC9D1, 0x88F3}, //12419 #CJK UNIFIED IDEOGRAPH + {0xC9D2, 0x68A2}, //12420 #CJK UNIFIED IDEOGRAPH + {0xC9D3, 0x634E}, //12421 #CJK UNIFIED IDEOGRAPH + {0xC9D4, 0x7A0D}, //12422 #CJK UNIFIED IDEOGRAPH + {0xC9D5, 0x70E7}, //12423 #CJK UNIFIED IDEOGRAPH + {0xC9D6, 0x828D}, //12424 #CJK UNIFIED IDEOGRAPH + {0xC9D7, 0x52FA}, //12425 #CJK UNIFIED IDEOGRAPH + {0xC9D8, 0x97F6}, //12426 #CJK UNIFIED IDEOGRAPH + {0xC9D9, 0x5C11}, //12427 #CJK UNIFIED IDEOGRAPH + {0xC9DA, 0x54E8}, //12428 #CJK UNIFIED IDEOGRAPH + {0xC9DB, 0x90B5}, //12429 #CJK UNIFIED IDEOGRAPH + {0xC9DC, 0x7ECD}, //12430 #CJK UNIFIED IDEOGRAPH + {0xC9DD, 0x5962}, //12431 #CJK UNIFIED IDEOGRAPH + {0xC9DE, 0x8D4A}, //12432 #CJK UNIFIED IDEOGRAPH + {0xC9DF, 0x86C7}, //12433 #CJK UNIFIED IDEOGRAPH + {0xC9E0, 0x820C}, //12434 #CJK UNIFIED IDEOGRAPH + {0xC9E1, 0x820D}, //12435 #CJK UNIFIED IDEOGRAPH + {0xC9E2, 0x8D66}, //12436 #CJK UNIFIED IDEOGRAPH + {0xC9E3, 0x6444}, //12437 #CJK UNIFIED IDEOGRAPH + {0xC9E4, 0x5C04}, //12438 #CJK UNIFIED IDEOGRAPH + {0xC9E5, 0x6151}, //12439 #CJK UNIFIED IDEOGRAPH + {0xC9E6, 0x6D89}, //12440 #CJK UNIFIED IDEOGRAPH + {0xC9E7, 0x793E}, //12441 #CJK UNIFIED IDEOGRAPH + {0xC9E8, 0x8BBE}, //12442 #CJK UNIFIED IDEOGRAPH + {0xC9E9, 0x7837}, //12443 #CJK UNIFIED IDEOGRAPH + {0xC9EA, 0x7533}, //12444 #CJK UNIFIED IDEOGRAPH + {0xC9EB, 0x547B}, //12445 #CJK UNIFIED IDEOGRAPH + {0xC9EC, 0x4F38}, //12446 #CJK UNIFIED IDEOGRAPH + {0xC9ED, 0x8EAB}, //12447 #CJK UNIFIED IDEOGRAPH + {0xC9EE, 0x6DF1}, //12448 #CJK UNIFIED IDEOGRAPH + {0xC9EF, 0x5A20}, //12449 #CJK UNIFIED IDEOGRAPH + {0xC9F0, 0x7EC5}, //12450 #CJK UNIFIED IDEOGRAPH + {0xC9F1, 0x795E}, //12451 #CJK UNIFIED IDEOGRAPH + {0xC9F2, 0x6C88}, //12452 #CJK UNIFIED IDEOGRAPH + {0xC9F3, 0x5BA1}, //12453 #CJK UNIFIED IDEOGRAPH + {0xC9F4, 0x5A76}, //12454 #CJK UNIFIED IDEOGRAPH + {0xC9F5, 0x751A}, //12455 #CJK UNIFIED IDEOGRAPH + {0xC9F6, 0x80BE}, //12456 #CJK UNIFIED IDEOGRAPH + {0xC9F7, 0x614E}, //12457 #CJK UNIFIED IDEOGRAPH + {0xC9F8, 0x6E17}, //12458 #CJK UNIFIED IDEOGRAPH + {0xC9F9, 0x58F0}, //12459 #CJK UNIFIED IDEOGRAPH + {0xC9FA, 0x751F}, //12460 #CJK UNIFIED IDEOGRAPH + {0xC9FB, 0x7525}, //12461 #CJK UNIFIED IDEOGRAPH + {0xC9FC, 0x7272}, //12462 #CJK UNIFIED IDEOGRAPH + {0xC9FD, 0x5347}, //12463 #CJK UNIFIED IDEOGRAPH + {0xC9FE, 0x7EF3}, //12464 #CJK UNIFIED IDEOGRAPH + {0xCA40, 0x8503}, //12465 #CJK UNIFIED IDEOGRAPH + {0xCA41, 0x8504}, //12466 #CJK UNIFIED IDEOGRAPH + {0xCA42, 0x8505}, //12467 #CJK UNIFIED IDEOGRAPH + {0xCA43, 0x8506}, //12468 #CJK UNIFIED IDEOGRAPH + {0xCA44, 0x8507}, //12469 #CJK UNIFIED IDEOGRAPH + {0xCA45, 0x8508}, //12470 #CJK UNIFIED IDEOGRAPH + {0xCA46, 0x8509}, //12471 #CJK UNIFIED IDEOGRAPH + {0xCA47, 0x850A}, //12472 #CJK UNIFIED IDEOGRAPH + {0xCA48, 0x850B}, //12473 #CJK UNIFIED IDEOGRAPH + {0xCA49, 0x850D}, //12474 #CJK UNIFIED IDEOGRAPH + {0xCA4A, 0x850E}, //12475 #CJK UNIFIED IDEOGRAPH + {0xCA4B, 0x850F}, //12476 #CJK UNIFIED IDEOGRAPH + {0xCA4C, 0x8510}, //12477 #CJK UNIFIED IDEOGRAPH + {0xCA4D, 0x8512}, //12478 #CJK UNIFIED IDEOGRAPH + {0xCA4E, 0x8514}, //12479 #CJK UNIFIED IDEOGRAPH + {0xCA4F, 0x8515}, //12480 #CJK UNIFIED IDEOGRAPH + {0xCA50, 0x8516}, //12481 #CJK UNIFIED IDEOGRAPH + {0xCA51, 0x8518}, //12482 #CJK UNIFIED IDEOGRAPH + {0xCA52, 0x8519}, //12483 #CJK UNIFIED IDEOGRAPH + {0xCA53, 0x851B}, //12484 #CJK UNIFIED IDEOGRAPH + {0xCA54, 0x851C}, //12485 #CJK UNIFIED IDEOGRAPH + {0xCA55, 0x851D}, //12486 #CJK UNIFIED IDEOGRAPH + {0xCA56, 0x851E}, //12487 #CJK UNIFIED IDEOGRAPH + {0xCA57, 0x8520}, //12488 #CJK UNIFIED IDEOGRAPH + {0xCA58, 0x8522}, //12489 #CJK UNIFIED IDEOGRAPH + {0xCA59, 0x8523}, //12490 #CJK UNIFIED IDEOGRAPH + {0xCA5A, 0x8524}, //12491 #CJK UNIFIED IDEOGRAPH + {0xCA5B, 0x8525}, //12492 #CJK UNIFIED IDEOGRAPH + {0xCA5C, 0x8526}, //12493 #CJK UNIFIED IDEOGRAPH + {0xCA5D, 0x8527}, //12494 #CJK UNIFIED IDEOGRAPH + {0xCA5E, 0x8528}, //12495 #CJK UNIFIED IDEOGRAPH + {0xCA5F, 0x8529}, //12496 #CJK UNIFIED IDEOGRAPH + {0xCA60, 0x852A}, //12497 #CJK UNIFIED IDEOGRAPH + {0xCA61, 0x852D}, //12498 #CJK UNIFIED IDEOGRAPH + {0xCA62, 0x852E}, //12499 #CJK UNIFIED IDEOGRAPH + {0xCA63, 0x852F}, //12500 #CJK UNIFIED IDEOGRAPH + {0xCA64, 0x8530}, //12501 #CJK UNIFIED IDEOGRAPH + {0xCA65, 0x8531}, //12502 #CJK UNIFIED IDEOGRAPH + {0xCA66, 0x8532}, //12503 #CJK UNIFIED IDEOGRAPH + {0xCA67, 0x8533}, //12504 #CJK UNIFIED IDEOGRAPH + {0xCA68, 0x8534}, //12505 #CJK UNIFIED IDEOGRAPH + {0xCA69, 0x8535}, //12506 #CJK UNIFIED IDEOGRAPH + {0xCA6A, 0x8536}, //12507 #CJK UNIFIED IDEOGRAPH + {0xCA6B, 0x853E}, //12508 #CJK UNIFIED IDEOGRAPH + {0xCA6C, 0x853F}, //12509 #CJK UNIFIED IDEOGRAPH + {0xCA6D, 0x8540}, //12510 #CJK UNIFIED IDEOGRAPH + {0xCA6E, 0x8541}, //12511 #CJK UNIFIED IDEOGRAPH + {0xCA6F, 0x8542}, //12512 #CJK UNIFIED IDEOGRAPH + {0xCA70, 0x8544}, //12513 #CJK UNIFIED IDEOGRAPH + {0xCA71, 0x8545}, //12514 #CJK UNIFIED IDEOGRAPH + {0xCA72, 0x8546}, //12515 #CJK UNIFIED IDEOGRAPH + {0xCA73, 0x8547}, //12516 #CJK UNIFIED IDEOGRAPH + {0xCA74, 0x854B}, //12517 #CJK UNIFIED IDEOGRAPH + {0xCA75, 0x854C}, //12518 #CJK UNIFIED IDEOGRAPH + {0xCA76, 0x854D}, //12519 #CJK UNIFIED IDEOGRAPH + {0xCA77, 0x854E}, //12520 #CJK UNIFIED IDEOGRAPH + {0xCA78, 0x854F}, //12521 #CJK UNIFIED IDEOGRAPH + {0xCA79, 0x8550}, //12522 #CJK UNIFIED IDEOGRAPH + {0xCA7A, 0x8551}, //12523 #CJK UNIFIED IDEOGRAPH + {0xCA7B, 0x8552}, //12524 #CJK UNIFIED IDEOGRAPH + {0xCA7C, 0x8553}, //12525 #CJK UNIFIED IDEOGRAPH + {0xCA7D, 0x8554}, //12526 #CJK UNIFIED IDEOGRAPH + {0xCA7E, 0x8555}, //12527 #CJK UNIFIED IDEOGRAPH + {0xCA80, 0x8557}, //12528 #CJK UNIFIED IDEOGRAPH + {0xCA81, 0x8558}, //12529 #CJK UNIFIED IDEOGRAPH + {0xCA82, 0x855A}, //12530 #CJK UNIFIED IDEOGRAPH + {0xCA83, 0x855B}, //12531 #CJK UNIFIED IDEOGRAPH + {0xCA84, 0x855C}, //12532 #CJK UNIFIED IDEOGRAPH + {0xCA85, 0x855D}, //12533 #CJK UNIFIED IDEOGRAPH + {0xCA86, 0x855F}, //12534 #CJK UNIFIED IDEOGRAPH + {0xCA87, 0x8560}, //12535 #CJK UNIFIED IDEOGRAPH + {0xCA88, 0x8561}, //12536 #CJK UNIFIED IDEOGRAPH + {0xCA89, 0x8562}, //12537 #CJK UNIFIED IDEOGRAPH + {0xCA8A, 0x8563}, //12538 #CJK UNIFIED IDEOGRAPH + {0xCA8B, 0x8565}, //12539 #CJK UNIFIED IDEOGRAPH + {0xCA8C, 0x8566}, //12540 #CJK UNIFIED IDEOGRAPH + {0xCA8D, 0x8567}, //12541 #CJK UNIFIED IDEOGRAPH + {0xCA8E, 0x8569}, //12542 #CJK UNIFIED IDEOGRAPH + {0xCA8F, 0x856A}, //12543 #CJK UNIFIED IDEOGRAPH + {0xCA90, 0x856B}, //12544 #CJK UNIFIED IDEOGRAPH + {0xCA91, 0x856C}, //12545 #CJK UNIFIED IDEOGRAPH + {0xCA92, 0x856D}, //12546 #CJK UNIFIED IDEOGRAPH + {0xCA93, 0x856E}, //12547 #CJK UNIFIED IDEOGRAPH + {0xCA94, 0x856F}, //12548 #CJK UNIFIED IDEOGRAPH + {0xCA95, 0x8570}, //12549 #CJK UNIFIED IDEOGRAPH + {0xCA96, 0x8571}, //12550 #CJK UNIFIED IDEOGRAPH + {0xCA97, 0x8573}, //12551 #CJK UNIFIED IDEOGRAPH + {0xCA98, 0x8575}, //12552 #CJK UNIFIED IDEOGRAPH + {0xCA99, 0x8576}, //12553 #CJK UNIFIED IDEOGRAPH + {0xCA9A, 0x8577}, //12554 #CJK UNIFIED IDEOGRAPH + {0xCA9B, 0x8578}, //12555 #CJK UNIFIED IDEOGRAPH + {0xCA9C, 0x857C}, //12556 #CJK UNIFIED IDEOGRAPH + {0xCA9D, 0x857D}, //12557 #CJK UNIFIED IDEOGRAPH + {0xCA9E, 0x857F}, //12558 #CJK UNIFIED IDEOGRAPH + {0xCA9F, 0x8580}, //12559 #CJK UNIFIED IDEOGRAPH + {0xCAA0, 0x8581}, //12560 #CJK UNIFIED IDEOGRAPH + {0xCAA1, 0x7701}, //12561 #CJK UNIFIED IDEOGRAPH + {0xCAA2, 0x76DB}, //12562 #CJK UNIFIED IDEOGRAPH + {0xCAA3, 0x5269}, //12563 #CJK UNIFIED IDEOGRAPH + {0xCAA4, 0x80DC}, //12564 #CJK UNIFIED IDEOGRAPH + {0xCAA5, 0x5723}, //12565 #CJK UNIFIED IDEOGRAPH + {0xCAA6, 0x5E08}, //12566 #CJK UNIFIED IDEOGRAPH + {0xCAA7, 0x5931}, //12567 #CJK UNIFIED IDEOGRAPH + {0xCAA8, 0x72EE}, //12568 #CJK UNIFIED IDEOGRAPH + {0xCAA9, 0x65BD}, //12569 #CJK UNIFIED IDEOGRAPH + {0xCAAA, 0x6E7F}, //12570 #CJK UNIFIED IDEOGRAPH + {0xCAAB, 0x8BD7}, //12571 #CJK UNIFIED IDEOGRAPH + {0xCAAC, 0x5C38}, //12572 #CJK UNIFIED IDEOGRAPH + {0xCAAD, 0x8671}, //12573 #CJK UNIFIED IDEOGRAPH + {0xCAAE, 0x5341}, //12574 #CJK UNIFIED IDEOGRAPH + {0xCAAF, 0x77F3}, //12575 #CJK UNIFIED IDEOGRAPH + {0xCAB0, 0x62FE}, //12576 #CJK UNIFIED IDEOGRAPH + {0xCAB1, 0x65F6}, //12577 #CJK UNIFIED IDEOGRAPH + {0xCAB2, 0x4EC0}, //12578 #CJK UNIFIED IDEOGRAPH + {0xCAB3, 0x98DF}, //12579 #CJK UNIFIED IDEOGRAPH + {0xCAB4, 0x8680}, //12580 #CJK UNIFIED IDEOGRAPH + {0xCAB5, 0x5B9E}, //12581 #CJK UNIFIED IDEOGRAPH + {0xCAB6, 0x8BC6}, //12582 #CJK UNIFIED IDEOGRAPH + {0xCAB7, 0x53F2}, //12583 #CJK UNIFIED IDEOGRAPH + {0xCAB8, 0x77E2}, //12584 #CJK UNIFIED IDEOGRAPH + {0xCAB9, 0x4F7F}, //12585 #CJK UNIFIED IDEOGRAPH + {0xCABA, 0x5C4E}, //12586 #CJK UNIFIED IDEOGRAPH + {0xCABB, 0x9A76}, //12587 #CJK UNIFIED IDEOGRAPH + {0xCABC, 0x59CB}, //12588 #CJK UNIFIED IDEOGRAPH + {0xCABD, 0x5F0F}, //12589 #CJK UNIFIED IDEOGRAPH + {0xCABE, 0x793A}, //12590 #CJK UNIFIED IDEOGRAPH + {0xCABF, 0x58EB}, //12591 #CJK UNIFIED IDEOGRAPH + {0xCAC0, 0x4E16}, //12592 #CJK UNIFIED IDEOGRAPH + {0xCAC1, 0x67FF}, //12593 #CJK UNIFIED IDEOGRAPH + {0xCAC2, 0x4E8B}, //12594 #CJK UNIFIED IDEOGRAPH + {0xCAC3, 0x62ED}, //12595 #CJK UNIFIED IDEOGRAPH + {0xCAC4, 0x8A93}, //12596 #CJK UNIFIED IDEOGRAPH + {0xCAC5, 0x901D}, //12597 #CJK UNIFIED IDEOGRAPH + {0xCAC6, 0x52BF}, //12598 #CJK UNIFIED IDEOGRAPH + {0xCAC7, 0x662F}, //12599 #CJK UNIFIED IDEOGRAPH + {0xCAC8, 0x55DC}, //12600 #CJK UNIFIED IDEOGRAPH + {0xCAC9, 0x566C}, //12601 #CJK UNIFIED IDEOGRAPH + {0xCACA, 0x9002}, //12602 #CJK UNIFIED IDEOGRAPH + {0xCACB, 0x4ED5}, //12603 #CJK UNIFIED IDEOGRAPH + {0xCACC, 0x4F8D}, //12604 #CJK UNIFIED IDEOGRAPH + {0xCACD, 0x91CA}, //12605 #CJK UNIFIED IDEOGRAPH + {0xCACE, 0x9970}, //12606 #CJK UNIFIED IDEOGRAPH + {0xCACF, 0x6C0F}, //12607 #CJK UNIFIED IDEOGRAPH + {0xCAD0, 0x5E02}, //12608 #CJK UNIFIED IDEOGRAPH + {0xCAD1, 0x6043}, //12609 #CJK UNIFIED IDEOGRAPH + {0xCAD2, 0x5BA4}, //12610 #CJK UNIFIED IDEOGRAPH + {0xCAD3, 0x89C6}, //12611 #CJK UNIFIED IDEOGRAPH + {0xCAD4, 0x8BD5}, //12612 #CJK UNIFIED IDEOGRAPH + {0xCAD5, 0x6536}, //12613 #CJK UNIFIED IDEOGRAPH + {0xCAD6, 0x624B}, //12614 #CJK UNIFIED IDEOGRAPH + {0xCAD7, 0x9996}, //12615 #CJK UNIFIED IDEOGRAPH + {0xCAD8, 0x5B88}, //12616 #CJK UNIFIED IDEOGRAPH + {0xCAD9, 0x5BFF}, //12617 #CJK UNIFIED IDEOGRAPH + {0xCADA, 0x6388}, //12618 #CJK UNIFIED IDEOGRAPH + {0xCADB, 0x552E}, //12619 #CJK UNIFIED IDEOGRAPH + {0xCADC, 0x53D7}, //12620 #CJK UNIFIED IDEOGRAPH + {0xCADD, 0x7626}, //12621 #CJK UNIFIED IDEOGRAPH + {0xCADE, 0x517D}, //12622 #CJK UNIFIED IDEOGRAPH + {0xCADF, 0x852C}, //12623 #CJK UNIFIED IDEOGRAPH + {0xCAE0, 0x67A2}, //12624 #CJK UNIFIED IDEOGRAPH + {0xCAE1, 0x68B3}, //12625 #CJK UNIFIED IDEOGRAPH + {0xCAE2, 0x6B8A}, //12626 #CJK UNIFIED IDEOGRAPH + {0xCAE3, 0x6292}, //12627 #CJK UNIFIED IDEOGRAPH + {0xCAE4, 0x8F93}, //12628 #CJK UNIFIED IDEOGRAPH + {0xCAE5, 0x53D4}, //12629 #CJK UNIFIED IDEOGRAPH + {0xCAE6, 0x8212}, //12630 #CJK UNIFIED IDEOGRAPH + {0xCAE7, 0x6DD1}, //12631 #CJK UNIFIED IDEOGRAPH + {0xCAE8, 0x758F}, //12632 #CJK UNIFIED IDEOGRAPH + {0xCAE9, 0x4E66}, //12633 #CJK UNIFIED IDEOGRAPH + {0xCAEA, 0x8D4E}, //12634 #CJK UNIFIED IDEOGRAPH + {0xCAEB, 0x5B70}, //12635 #CJK UNIFIED IDEOGRAPH + {0xCAEC, 0x719F}, //12636 #CJK UNIFIED IDEOGRAPH + {0xCAED, 0x85AF}, //12637 #CJK UNIFIED IDEOGRAPH + {0xCAEE, 0x6691}, //12638 #CJK UNIFIED IDEOGRAPH + {0xCAEF, 0x66D9}, //12639 #CJK UNIFIED IDEOGRAPH + {0xCAF0, 0x7F72}, //12640 #CJK UNIFIED IDEOGRAPH + {0xCAF1, 0x8700}, //12641 #CJK UNIFIED IDEOGRAPH + {0xCAF2, 0x9ECD}, //12642 #CJK UNIFIED IDEOGRAPH + {0xCAF3, 0x9F20}, //12643 #CJK UNIFIED IDEOGRAPH + {0xCAF4, 0x5C5E}, //12644 #CJK UNIFIED IDEOGRAPH + {0xCAF5, 0x672F}, //12645 #CJK UNIFIED IDEOGRAPH + {0xCAF6, 0x8FF0}, //12646 #CJK UNIFIED IDEOGRAPH + {0xCAF7, 0x6811}, //12647 #CJK UNIFIED IDEOGRAPH + {0xCAF8, 0x675F}, //12648 #CJK UNIFIED IDEOGRAPH + {0xCAF9, 0x620D}, //12649 #CJK UNIFIED IDEOGRAPH + {0xCAFA, 0x7AD6}, //12650 #CJK UNIFIED IDEOGRAPH + {0xCAFB, 0x5885}, //12651 #CJK UNIFIED IDEOGRAPH + {0xCAFC, 0x5EB6}, //12652 #CJK UNIFIED IDEOGRAPH + {0xCAFD, 0x6570}, //12653 #CJK UNIFIED IDEOGRAPH + {0xCAFE, 0x6F31}, //12654 #CJK UNIFIED IDEOGRAPH + {0xCB40, 0x8582}, //12655 #CJK UNIFIED IDEOGRAPH + {0xCB41, 0x8583}, //12656 #CJK UNIFIED IDEOGRAPH + {0xCB42, 0x8586}, //12657 #CJK UNIFIED IDEOGRAPH + {0xCB43, 0x8588}, //12658 #CJK UNIFIED IDEOGRAPH + {0xCB44, 0x8589}, //12659 #CJK UNIFIED IDEOGRAPH + {0xCB45, 0x858A}, //12660 #CJK UNIFIED IDEOGRAPH + {0xCB46, 0x858B}, //12661 #CJK UNIFIED IDEOGRAPH + {0xCB47, 0x858C}, //12662 #CJK UNIFIED IDEOGRAPH + {0xCB48, 0x858D}, //12663 #CJK UNIFIED IDEOGRAPH + {0xCB49, 0x858E}, //12664 #CJK UNIFIED IDEOGRAPH + {0xCB4A, 0x8590}, //12665 #CJK UNIFIED IDEOGRAPH + {0xCB4B, 0x8591}, //12666 #CJK UNIFIED IDEOGRAPH + {0xCB4C, 0x8592}, //12667 #CJK UNIFIED IDEOGRAPH + {0xCB4D, 0x8593}, //12668 #CJK UNIFIED IDEOGRAPH + {0xCB4E, 0x8594}, //12669 #CJK UNIFIED IDEOGRAPH + {0xCB4F, 0x8595}, //12670 #CJK UNIFIED IDEOGRAPH + {0xCB50, 0x8596}, //12671 #CJK UNIFIED IDEOGRAPH + {0xCB51, 0x8597}, //12672 #CJK UNIFIED IDEOGRAPH + {0xCB52, 0x8598}, //12673 #CJK UNIFIED IDEOGRAPH + {0xCB53, 0x8599}, //12674 #CJK UNIFIED IDEOGRAPH + {0xCB54, 0x859A}, //12675 #CJK UNIFIED IDEOGRAPH + {0xCB55, 0x859D}, //12676 #CJK UNIFIED IDEOGRAPH + {0xCB56, 0x859E}, //12677 #CJK UNIFIED IDEOGRAPH + {0xCB57, 0x859F}, //12678 #CJK UNIFIED IDEOGRAPH + {0xCB58, 0x85A0}, //12679 #CJK UNIFIED IDEOGRAPH + {0xCB59, 0x85A1}, //12680 #CJK UNIFIED IDEOGRAPH + {0xCB5A, 0x85A2}, //12681 #CJK UNIFIED IDEOGRAPH + {0xCB5B, 0x85A3}, //12682 #CJK UNIFIED IDEOGRAPH + {0xCB5C, 0x85A5}, //12683 #CJK UNIFIED IDEOGRAPH + {0xCB5D, 0x85A6}, //12684 #CJK UNIFIED IDEOGRAPH + {0xCB5E, 0x85A7}, //12685 #CJK UNIFIED IDEOGRAPH + {0xCB5F, 0x85A9}, //12686 #CJK UNIFIED IDEOGRAPH + {0xCB60, 0x85AB}, //12687 #CJK UNIFIED IDEOGRAPH + {0xCB61, 0x85AC}, //12688 #CJK UNIFIED IDEOGRAPH + {0xCB62, 0x85AD}, //12689 #CJK UNIFIED IDEOGRAPH + {0xCB63, 0x85B1}, //12690 #CJK UNIFIED IDEOGRAPH + {0xCB64, 0x85B2}, //12691 #CJK UNIFIED IDEOGRAPH + {0xCB65, 0x85B3}, //12692 #CJK UNIFIED IDEOGRAPH + {0xCB66, 0x85B4}, //12693 #CJK UNIFIED IDEOGRAPH + {0xCB67, 0x85B5}, //12694 #CJK UNIFIED IDEOGRAPH + {0xCB68, 0x85B6}, //12695 #CJK UNIFIED IDEOGRAPH + {0xCB69, 0x85B8}, //12696 #CJK UNIFIED IDEOGRAPH + {0xCB6A, 0x85BA}, //12697 #CJK UNIFIED IDEOGRAPH + {0xCB6B, 0x85BB}, //12698 #CJK UNIFIED IDEOGRAPH + {0xCB6C, 0x85BC}, //12699 #CJK UNIFIED IDEOGRAPH + {0xCB6D, 0x85BD}, //12700 #CJK UNIFIED IDEOGRAPH + {0xCB6E, 0x85BE}, //12701 #CJK UNIFIED IDEOGRAPH + {0xCB6F, 0x85BF}, //12702 #CJK UNIFIED IDEOGRAPH + {0xCB70, 0x85C0}, //12703 #CJK UNIFIED IDEOGRAPH + {0xCB71, 0x85C2}, //12704 #CJK UNIFIED IDEOGRAPH + {0xCB72, 0x85C3}, //12705 #CJK UNIFIED IDEOGRAPH + {0xCB73, 0x85C4}, //12706 #CJK UNIFIED IDEOGRAPH + {0xCB74, 0x85C5}, //12707 #CJK UNIFIED IDEOGRAPH + {0xCB75, 0x85C6}, //12708 #CJK UNIFIED IDEOGRAPH + {0xCB76, 0x85C7}, //12709 #CJK UNIFIED IDEOGRAPH + {0xCB77, 0x85C8}, //12710 #CJK UNIFIED IDEOGRAPH + {0xCB78, 0x85CA}, //12711 #CJK UNIFIED IDEOGRAPH + {0xCB79, 0x85CB}, //12712 #CJK UNIFIED IDEOGRAPH + {0xCB7A, 0x85CC}, //12713 #CJK UNIFIED IDEOGRAPH + {0xCB7B, 0x85CD}, //12714 #CJK UNIFIED IDEOGRAPH + {0xCB7C, 0x85CE}, //12715 #CJK UNIFIED IDEOGRAPH + {0xCB7D, 0x85D1}, //12716 #CJK UNIFIED IDEOGRAPH + {0xCB7E, 0x85D2}, //12717 #CJK UNIFIED IDEOGRAPH + {0xCB80, 0x85D4}, //12718 #CJK UNIFIED IDEOGRAPH + {0xCB81, 0x85D6}, //12719 #CJK UNIFIED IDEOGRAPH + {0xCB82, 0x85D7}, //12720 #CJK UNIFIED IDEOGRAPH + {0xCB83, 0x85D8}, //12721 #CJK UNIFIED IDEOGRAPH + {0xCB84, 0x85D9}, //12722 #CJK UNIFIED IDEOGRAPH + {0xCB85, 0x85DA}, //12723 #CJK UNIFIED IDEOGRAPH + {0xCB86, 0x85DB}, //12724 #CJK UNIFIED IDEOGRAPH + {0xCB87, 0x85DD}, //12725 #CJK UNIFIED IDEOGRAPH + {0xCB88, 0x85DE}, //12726 #CJK UNIFIED IDEOGRAPH + {0xCB89, 0x85DF}, //12727 #CJK UNIFIED IDEOGRAPH + {0xCB8A, 0x85E0}, //12728 #CJK UNIFIED IDEOGRAPH + {0xCB8B, 0x85E1}, //12729 #CJK UNIFIED IDEOGRAPH + {0xCB8C, 0x85E2}, //12730 #CJK UNIFIED IDEOGRAPH + {0xCB8D, 0x85E3}, //12731 #CJK UNIFIED IDEOGRAPH + {0xCB8E, 0x85E5}, //12732 #CJK UNIFIED IDEOGRAPH + {0xCB8F, 0x85E6}, //12733 #CJK UNIFIED IDEOGRAPH + {0xCB90, 0x85E7}, //12734 #CJK UNIFIED IDEOGRAPH + {0xCB91, 0x85E8}, //12735 #CJK UNIFIED IDEOGRAPH + {0xCB92, 0x85EA}, //12736 #CJK UNIFIED IDEOGRAPH + {0xCB93, 0x85EB}, //12737 #CJK UNIFIED IDEOGRAPH + {0xCB94, 0x85EC}, //12738 #CJK UNIFIED IDEOGRAPH + {0xCB95, 0x85ED}, //12739 #CJK UNIFIED IDEOGRAPH + {0xCB96, 0x85EE}, //12740 #CJK UNIFIED IDEOGRAPH + {0xCB97, 0x85EF}, //12741 #CJK UNIFIED IDEOGRAPH + {0xCB98, 0x85F0}, //12742 #CJK UNIFIED IDEOGRAPH + {0xCB99, 0x85F1}, //12743 #CJK UNIFIED IDEOGRAPH + {0xCB9A, 0x85F2}, //12744 #CJK UNIFIED IDEOGRAPH + {0xCB9B, 0x85F3}, //12745 #CJK UNIFIED IDEOGRAPH + {0xCB9C, 0x85F4}, //12746 #CJK UNIFIED IDEOGRAPH + {0xCB9D, 0x85F5}, //12747 #CJK UNIFIED IDEOGRAPH + {0xCB9E, 0x85F6}, //12748 #CJK UNIFIED IDEOGRAPH + {0xCB9F, 0x85F7}, //12749 #CJK UNIFIED IDEOGRAPH + {0xCBA0, 0x85F8}, //12750 #CJK UNIFIED IDEOGRAPH + {0xCBA1, 0x6055}, //12751 #CJK UNIFIED IDEOGRAPH + {0xCBA2, 0x5237}, //12752 #CJK UNIFIED IDEOGRAPH + {0xCBA3, 0x800D}, //12753 #CJK UNIFIED IDEOGRAPH + {0xCBA4, 0x6454}, //12754 #CJK UNIFIED IDEOGRAPH + {0xCBA5, 0x8870}, //12755 #CJK UNIFIED IDEOGRAPH + {0xCBA6, 0x7529}, //12756 #CJK UNIFIED IDEOGRAPH + {0xCBA7, 0x5E05}, //12757 #CJK UNIFIED IDEOGRAPH + {0xCBA8, 0x6813}, //12758 #CJK UNIFIED IDEOGRAPH + {0xCBA9, 0x62F4}, //12759 #CJK UNIFIED IDEOGRAPH + {0xCBAA, 0x971C}, //12760 #CJK UNIFIED IDEOGRAPH + {0xCBAB, 0x53CC}, //12761 #CJK UNIFIED IDEOGRAPH + {0xCBAC, 0x723D}, //12762 #CJK UNIFIED IDEOGRAPH + {0xCBAD, 0x8C01}, //12763 #CJK UNIFIED IDEOGRAPH + {0xCBAE, 0x6C34}, //12764 #CJK UNIFIED IDEOGRAPH + {0xCBAF, 0x7761}, //12765 #CJK UNIFIED IDEOGRAPH + {0xCBB0, 0x7A0E}, //12766 #CJK UNIFIED IDEOGRAPH + {0xCBB1, 0x542E}, //12767 #CJK UNIFIED IDEOGRAPH + {0xCBB2, 0x77AC}, //12768 #CJK UNIFIED IDEOGRAPH + {0xCBB3, 0x987A}, //12769 #CJK UNIFIED IDEOGRAPH + {0xCBB4, 0x821C}, //12770 #CJK UNIFIED IDEOGRAPH + {0xCBB5, 0x8BF4}, //12771 #CJK UNIFIED IDEOGRAPH + {0xCBB6, 0x7855}, //12772 #CJK UNIFIED IDEOGRAPH + {0xCBB7, 0x6714}, //12773 #CJK UNIFIED IDEOGRAPH + {0xCBB8, 0x70C1}, //12774 #CJK UNIFIED IDEOGRAPH + {0xCBB9, 0x65AF}, //12775 #CJK UNIFIED IDEOGRAPH + {0xCBBA, 0x6495}, //12776 #CJK UNIFIED IDEOGRAPH + {0xCBBB, 0x5636}, //12777 #CJK UNIFIED IDEOGRAPH + {0xCBBC, 0x601D}, //12778 #CJK UNIFIED IDEOGRAPH + {0xCBBD, 0x79C1}, //12779 #CJK UNIFIED IDEOGRAPH + {0xCBBE, 0x53F8}, //12780 #CJK UNIFIED IDEOGRAPH + {0xCBBF, 0x4E1D}, //12781 #CJK UNIFIED IDEOGRAPH + {0xCBC0, 0x6B7B}, //12782 #CJK UNIFIED IDEOGRAPH + {0xCBC1, 0x8086}, //12783 #CJK UNIFIED IDEOGRAPH + {0xCBC2, 0x5BFA}, //12784 #CJK UNIFIED IDEOGRAPH + {0xCBC3, 0x55E3}, //12785 #CJK UNIFIED IDEOGRAPH + {0xCBC4, 0x56DB}, //12786 #CJK UNIFIED IDEOGRAPH + {0xCBC5, 0x4F3A}, //12787 #CJK UNIFIED IDEOGRAPH + {0xCBC6, 0x4F3C}, //12788 #CJK UNIFIED IDEOGRAPH + {0xCBC7, 0x9972}, //12789 #CJK UNIFIED IDEOGRAPH + {0xCBC8, 0x5DF3}, //12790 #CJK UNIFIED IDEOGRAPH + {0xCBC9, 0x677E}, //12791 #CJK UNIFIED IDEOGRAPH + {0xCBCA, 0x8038}, //12792 #CJK UNIFIED IDEOGRAPH + {0xCBCB, 0x6002}, //12793 #CJK UNIFIED IDEOGRAPH + {0xCBCC, 0x9882}, //12794 #CJK UNIFIED IDEOGRAPH + {0xCBCD, 0x9001}, //12795 #CJK UNIFIED IDEOGRAPH + {0xCBCE, 0x5B8B}, //12796 #CJK UNIFIED IDEOGRAPH + {0xCBCF, 0x8BBC}, //12797 #CJK UNIFIED IDEOGRAPH + {0xCBD0, 0x8BF5}, //12798 #CJK UNIFIED IDEOGRAPH + {0xCBD1, 0x641C}, //12799 #CJK UNIFIED IDEOGRAPH + {0xCBD2, 0x8258}, //12800 #CJK UNIFIED IDEOGRAPH + {0xCBD3, 0x64DE}, //12801 #CJK UNIFIED IDEOGRAPH + {0xCBD4, 0x55FD}, //12802 #CJK UNIFIED IDEOGRAPH + {0xCBD5, 0x82CF}, //12803 #CJK UNIFIED IDEOGRAPH + {0xCBD6, 0x9165}, //12804 #CJK UNIFIED IDEOGRAPH + {0xCBD7, 0x4FD7}, //12805 #CJK UNIFIED IDEOGRAPH + {0xCBD8, 0x7D20}, //12806 #CJK UNIFIED IDEOGRAPH + {0xCBD9, 0x901F}, //12807 #CJK UNIFIED IDEOGRAPH + {0xCBDA, 0x7C9F}, //12808 #CJK UNIFIED IDEOGRAPH + {0xCBDB, 0x50F3}, //12809 #CJK UNIFIED IDEOGRAPH + {0xCBDC, 0x5851}, //12810 #CJK UNIFIED IDEOGRAPH + {0xCBDD, 0x6EAF}, //12811 #CJK UNIFIED IDEOGRAPH + {0xCBDE, 0x5BBF}, //12812 #CJK UNIFIED IDEOGRAPH + {0xCBDF, 0x8BC9}, //12813 #CJK UNIFIED IDEOGRAPH + {0xCBE0, 0x8083}, //12814 #CJK UNIFIED IDEOGRAPH + {0xCBE1, 0x9178}, //12815 #CJK UNIFIED IDEOGRAPH + {0xCBE2, 0x849C}, //12816 #CJK UNIFIED IDEOGRAPH + {0xCBE3, 0x7B97}, //12817 #CJK UNIFIED IDEOGRAPH + {0xCBE4, 0x867D}, //12818 #CJK UNIFIED IDEOGRAPH + {0xCBE5, 0x968B}, //12819 #CJK UNIFIED IDEOGRAPH + {0xCBE6, 0x968F}, //12820 #CJK UNIFIED IDEOGRAPH + {0xCBE7, 0x7EE5}, //12821 #CJK UNIFIED IDEOGRAPH + {0xCBE8, 0x9AD3}, //12822 #CJK UNIFIED IDEOGRAPH + {0xCBE9, 0x788E}, //12823 #CJK UNIFIED IDEOGRAPH + {0xCBEA, 0x5C81}, //12824 #CJK UNIFIED IDEOGRAPH + {0xCBEB, 0x7A57}, //12825 #CJK UNIFIED IDEOGRAPH + {0xCBEC, 0x9042}, //12826 #CJK UNIFIED IDEOGRAPH + {0xCBED, 0x96A7}, //12827 #CJK UNIFIED IDEOGRAPH + {0xCBEE, 0x795F}, //12828 #CJK UNIFIED IDEOGRAPH + {0xCBEF, 0x5B59}, //12829 #CJK UNIFIED IDEOGRAPH + {0xCBF0, 0x635F}, //12830 #CJK UNIFIED IDEOGRAPH + {0xCBF1, 0x7B0B}, //12831 #CJK UNIFIED IDEOGRAPH + {0xCBF2, 0x84D1}, //12832 #CJK UNIFIED IDEOGRAPH + {0xCBF3, 0x68AD}, //12833 #CJK UNIFIED IDEOGRAPH + {0xCBF4, 0x5506}, //12834 #CJK UNIFIED IDEOGRAPH + {0xCBF5, 0x7F29}, //12835 #CJK UNIFIED IDEOGRAPH + {0xCBF6, 0x7410}, //12836 #CJK UNIFIED IDEOGRAPH + {0xCBF7, 0x7D22}, //12837 #CJK UNIFIED IDEOGRAPH + {0xCBF8, 0x9501}, //12838 #CJK UNIFIED IDEOGRAPH + {0xCBF9, 0x6240}, //12839 #CJK UNIFIED IDEOGRAPH + {0xCBFA, 0x584C}, //12840 #CJK UNIFIED IDEOGRAPH + {0xCBFB, 0x4ED6}, //12841 #CJK UNIFIED IDEOGRAPH + {0xCBFC, 0x5B83}, //12842 #CJK UNIFIED IDEOGRAPH + {0xCBFD, 0x5979}, //12843 #CJK UNIFIED IDEOGRAPH + {0xCBFE, 0x5854}, //12844 #CJK UNIFIED IDEOGRAPH + {0xCC40, 0x85F9}, //12845 #CJK UNIFIED IDEOGRAPH + {0xCC41, 0x85FA}, //12846 #CJK UNIFIED IDEOGRAPH + {0xCC42, 0x85FC}, //12847 #CJK UNIFIED IDEOGRAPH + {0xCC43, 0x85FD}, //12848 #CJK UNIFIED IDEOGRAPH + {0xCC44, 0x85FE}, //12849 #CJK UNIFIED IDEOGRAPH + {0xCC45, 0x8600}, //12850 #CJK UNIFIED IDEOGRAPH + {0xCC46, 0x8601}, //12851 #CJK UNIFIED IDEOGRAPH + {0xCC47, 0x8602}, //12852 #CJK UNIFIED IDEOGRAPH + {0xCC48, 0x8603}, //12853 #CJK UNIFIED IDEOGRAPH + {0xCC49, 0x8604}, //12854 #CJK UNIFIED IDEOGRAPH + {0xCC4A, 0x8606}, //12855 #CJK UNIFIED IDEOGRAPH + {0xCC4B, 0x8607}, //12856 #CJK UNIFIED IDEOGRAPH + {0xCC4C, 0x8608}, //12857 #CJK UNIFIED IDEOGRAPH + {0xCC4D, 0x8609}, //12858 #CJK UNIFIED IDEOGRAPH + {0xCC4E, 0x860A}, //12859 #CJK UNIFIED IDEOGRAPH + {0xCC4F, 0x860B}, //12860 #CJK UNIFIED IDEOGRAPH + {0xCC50, 0x860C}, //12861 #CJK UNIFIED IDEOGRAPH + {0xCC51, 0x860D}, //12862 #CJK UNIFIED IDEOGRAPH + {0xCC52, 0x860E}, //12863 #CJK UNIFIED IDEOGRAPH + {0xCC53, 0x860F}, //12864 #CJK UNIFIED IDEOGRAPH + {0xCC54, 0x8610}, //12865 #CJK UNIFIED IDEOGRAPH + {0xCC55, 0x8612}, //12866 #CJK UNIFIED IDEOGRAPH + {0xCC56, 0x8613}, //12867 #CJK UNIFIED IDEOGRAPH + {0xCC57, 0x8614}, //12868 #CJK UNIFIED IDEOGRAPH + {0xCC58, 0x8615}, //12869 #CJK UNIFIED IDEOGRAPH + {0xCC59, 0x8617}, //12870 #CJK UNIFIED IDEOGRAPH + {0xCC5A, 0x8618}, //12871 #CJK UNIFIED IDEOGRAPH + {0xCC5B, 0x8619}, //12872 #CJK UNIFIED IDEOGRAPH + {0xCC5C, 0x861A}, //12873 #CJK UNIFIED IDEOGRAPH + {0xCC5D, 0x861B}, //12874 #CJK UNIFIED IDEOGRAPH + {0xCC5E, 0x861C}, //12875 #CJK UNIFIED IDEOGRAPH + {0xCC5F, 0x861D}, //12876 #CJK UNIFIED IDEOGRAPH + {0xCC60, 0x861E}, //12877 #CJK UNIFIED IDEOGRAPH + {0xCC61, 0x861F}, //12878 #CJK UNIFIED IDEOGRAPH + {0xCC62, 0x8620}, //12879 #CJK UNIFIED IDEOGRAPH + {0xCC63, 0x8621}, //12880 #CJK UNIFIED IDEOGRAPH + {0xCC64, 0x8622}, //12881 #CJK UNIFIED IDEOGRAPH + {0xCC65, 0x8623}, //12882 #CJK UNIFIED IDEOGRAPH + {0xCC66, 0x8624}, //12883 #CJK UNIFIED IDEOGRAPH + {0xCC67, 0x8625}, //12884 #CJK UNIFIED IDEOGRAPH + {0xCC68, 0x8626}, //12885 #CJK UNIFIED IDEOGRAPH + {0xCC69, 0x8628}, //12886 #CJK UNIFIED IDEOGRAPH + {0xCC6A, 0x862A}, //12887 #CJK UNIFIED IDEOGRAPH + {0xCC6B, 0x862B}, //12888 #CJK UNIFIED IDEOGRAPH + {0xCC6C, 0x862C}, //12889 #CJK UNIFIED IDEOGRAPH + {0xCC6D, 0x862D}, //12890 #CJK UNIFIED IDEOGRAPH + {0xCC6E, 0x862E}, //12891 #CJK UNIFIED IDEOGRAPH + {0xCC6F, 0x862F}, //12892 #CJK UNIFIED IDEOGRAPH + {0xCC70, 0x8630}, //12893 #CJK UNIFIED IDEOGRAPH + {0xCC71, 0x8631}, //12894 #CJK UNIFIED IDEOGRAPH + {0xCC72, 0x8632}, //12895 #CJK UNIFIED IDEOGRAPH + {0xCC73, 0x8633}, //12896 #CJK UNIFIED IDEOGRAPH + {0xCC74, 0x8634}, //12897 #CJK UNIFIED IDEOGRAPH + {0xCC75, 0x8635}, //12898 #CJK UNIFIED IDEOGRAPH + {0xCC76, 0x8636}, //12899 #CJK UNIFIED IDEOGRAPH + {0xCC77, 0x8637}, //12900 #CJK UNIFIED IDEOGRAPH + {0xCC78, 0x8639}, //12901 #CJK UNIFIED IDEOGRAPH + {0xCC79, 0x863A}, //12902 #CJK UNIFIED IDEOGRAPH + {0xCC7A, 0x863B}, //12903 #CJK UNIFIED IDEOGRAPH + {0xCC7B, 0x863D}, //12904 #CJK UNIFIED IDEOGRAPH + {0xCC7C, 0x863E}, //12905 #CJK UNIFIED IDEOGRAPH + {0xCC7D, 0x863F}, //12906 #CJK UNIFIED IDEOGRAPH + {0xCC7E, 0x8640}, //12907 #CJK UNIFIED IDEOGRAPH + {0xCC80, 0x8641}, //12908 #CJK UNIFIED IDEOGRAPH + {0xCC81, 0x8642}, //12909 #CJK UNIFIED IDEOGRAPH + {0xCC82, 0x8643}, //12910 #CJK UNIFIED IDEOGRAPH + {0xCC83, 0x8644}, //12911 #CJK UNIFIED IDEOGRAPH + {0xCC84, 0x8645}, //12912 #CJK UNIFIED IDEOGRAPH + {0xCC85, 0x8646}, //12913 #CJK UNIFIED IDEOGRAPH + {0xCC86, 0x8647}, //12914 #CJK UNIFIED IDEOGRAPH + {0xCC87, 0x8648}, //12915 #CJK UNIFIED IDEOGRAPH + {0xCC88, 0x8649}, //12916 #CJK UNIFIED IDEOGRAPH + {0xCC89, 0x864A}, //12917 #CJK UNIFIED IDEOGRAPH + {0xCC8A, 0x864B}, //12918 #CJK UNIFIED IDEOGRAPH + {0xCC8B, 0x864C}, //12919 #CJK UNIFIED IDEOGRAPH + {0xCC8C, 0x8652}, //12920 #CJK UNIFIED IDEOGRAPH + {0xCC8D, 0x8653}, //12921 #CJK UNIFIED IDEOGRAPH + {0xCC8E, 0x8655}, //12922 #CJK UNIFIED IDEOGRAPH + {0xCC8F, 0x8656}, //12923 #CJK UNIFIED IDEOGRAPH + {0xCC90, 0x8657}, //12924 #CJK UNIFIED IDEOGRAPH + {0xCC91, 0x8658}, //12925 #CJK UNIFIED IDEOGRAPH + {0xCC92, 0x8659}, //12926 #CJK UNIFIED IDEOGRAPH + {0xCC93, 0x865B}, //12927 #CJK UNIFIED IDEOGRAPH + {0xCC94, 0x865C}, //12928 #CJK UNIFIED IDEOGRAPH + {0xCC95, 0x865D}, //12929 #CJK UNIFIED IDEOGRAPH + {0xCC96, 0x865F}, //12930 #CJK UNIFIED IDEOGRAPH + {0xCC97, 0x8660}, //12931 #CJK UNIFIED IDEOGRAPH + {0xCC98, 0x8661}, //12932 #CJK UNIFIED IDEOGRAPH + {0xCC99, 0x8663}, //12933 #CJK UNIFIED IDEOGRAPH + {0xCC9A, 0x8664}, //12934 #CJK UNIFIED IDEOGRAPH + {0xCC9B, 0x8665}, //12935 #CJK UNIFIED IDEOGRAPH + {0xCC9C, 0x8666}, //12936 #CJK UNIFIED IDEOGRAPH + {0xCC9D, 0x8667}, //12937 #CJK UNIFIED IDEOGRAPH + {0xCC9E, 0x8668}, //12938 #CJK UNIFIED IDEOGRAPH + {0xCC9F, 0x8669}, //12939 #CJK UNIFIED IDEOGRAPH + {0xCCA0, 0x866A}, //12940 #CJK UNIFIED IDEOGRAPH + {0xCCA1, 0x736D}, //12941 #CJK UNIFIED IDEOGRAPH + {0xCCA2, 0x631E}, //12942 #CJK UNIFIED IDEOGRAPH + {0xCCA3, 0x8E4B}, //12943 #CJK UNIFIED IDEOGRAPH + {0xCCA4, 0x8E0F}, //12944 #CJK UNIFIED IDEOGRAPH + {0xCCA5, 0x80CE}, //12945 #CJK UNIFIED IDEOGRAPH + {0xCCA6, 0x82D4}, //12946 #CJK UNIFIED IDEOGRAPH + {0xCCA7, 0x62AC}, //12947 #CJK UNIFIED IDEOGRAPH + {0xCCA8, 0x53F0}, //12948 #CJK UNIFIED IDEOGRAPH + {0xCCA9, 0x6CF0}, //12949 #CJK UNIFIED IDEOGRAPH + {0xCCAA, 0x915E}, //12950 #CJK UNIFIED IDEOGRAPH + {0xCCAB, 0x592A}, //12951 #CJK UNIFIED IDEOGRAPH + {0xCCAC, 0x6001}, //12952 #CJK UNIFIED IDEOGRAPH + {0xCCAD, 0x6C70}, //12953 #CJK UNIFIED IDEOGRAPH + {0xCCAE, 0x574D}, //12954 #CJK UNIFIED IDEOGRAPH + {0xCCAF, 0x644A}, //12955 #CJK UNIFIED IDEOGRAPH + {0xCCB0, 0x8D2A}, //12956 #CJK UNIFIED IDEOGRAPH + {0xCCB1, 0x762B}, //12957 #CJK UNIFIED IDEOGRAPH + {0xCCB2, 0x6EE9}, //12958 #CJK UNIFIED IDEOGRAPH + {0xCCB3, 0x575B}, //12959 #CJK UNIFIED IDEOGRAPH + {0xCCB4, 0x6A80}, //12960 #CJK UNIFIED IDEOGRAPH + {0xCCB5, 0x75F0}, //12961 #CJK UNIFIED IDEOGRAPH + {0xCCB6, 0x6F6D}, //12962 #CJK UNIFIED IDEOGRAPH + {0xCCB7, 0x8C2D}, //12963 #CJK UNIFIED IDEOGRAPH + {0xCCB8, 0x8C08}, //12964 #CJK UNIFIED IDEOGRAPH + {0xCCB9, 0x5766}, //12965 #CJK UNIFIED IDEOGRAPH + {0xCCBA, 0x6BEF}, //12966 #CJK UNIFIED IDEOGRAPH + {0xCCBB, 0x8892}, //12967 #CJK UNIFIED IDEOGRAPH + {0xCCBC, 0x78B3}, //12968 #CJK UNIFIED IDEOGRAPH + {0xCCBD, 0x63A2}, //12969 #CJK UNIFIED IDEOGRAPH + {0xCCBE, 0x53F9}, //12970 #CJK UNIFIED IDEOGRAPH + {0xCCBF, 0x70AD}, //12971 #CJK UNIFIED IDEOGRAPH + {0xCCC0, 0x6C64}, //12972 #CJK UNIFIED IDEOGRAPH + {0xCCC1, 0x5858}, //12973 #CJK UNIFIED IDEOGRAPH + {0xCCC2, 0x642A}, //12974 #CJK UNIFIED IDEOGRAPH + {0xCCC3, 0x5802}, //12975 #CJK UNIFIED IDEOGRAPH + {0xCCC4, 0x68E0}, //12976 #CJK UNIFIED IDEOGRAPH + {0xCCC5, 0x819B}, //12977 #CJK UNIFIED IDEOGRAPH + {0xCCC6, 0x5510}, //12978 #CJK UNIFIED IDEOGRAPH + {0xCCC7, 0x7CD6}, //12979 #CJK UNIFIED IDEOGRAPH + {0xCCC8, 0x5018}, //12980 #CJK UNIFIED IDEOGRAPH + {0xCCC9, 0x8EBA}, //12981 #CJK UNIFIED IDEOGRAPH + {0xCCCA, 0x6DCC}, //12982 #CJK UNIFIED IDEOGRAPH + {0xCCCB, 0x8D9F}, //12983 #CJK UNIFIED IDEOGRAPH + {0xCCCC, 0x70EB}, //12984 #CJK UNIFIED IDEOGRAPH + {0xCCCD, 0x638F}, //12985 #CJK UNIFIED IDEOGRAPH + {0xCCCE, 0x6D9B}, //12986 #CJK UNIFIED IDEOGRAPH + {0xCCCF, 0x6ED4}, //12987 #CJK UNIFIED IDEOGRAPH + {0xCCD0, 0x7EE6}, //12988 #CJK UNIFIED IDEOGRAPH + {0xCCD1, 0x8404}, //12989 #CJK UNIFIED IDEOGRAPH + {0xCCD2, 0x6843}, //12990 #CJK UNIFIED IDEOGRAPH + {0xCCD3, 0x9003}, //12991 #CJK UNIFIED IDEOGRAPH + {0xCCD4, 0x6DD8}, //12992 #CJK UNIFIED IDEOGRAPH + {0xCCD5, 0x9676}, //12993 #CJK UNIFIED IDEOGRAPH + {0xCCD6, 0x8BA8}, //12994 #CJK UNIFIED IDEOGRAPH + {0xCCD7, 0x5957}, //12995 #CJK UNIFIED IDEOGRAPH + {0xCCD8, 0x7279}, //12996 #CJK UNIFIED IDEOGRAPH + {0xCCD9, 0x85E4}, //12997 #CJK UNIFIED IDEOGRAPH + {0xCCDA, 0x817E}, //12998 #CJK UNIFIED IDEOGRAPH + {0xCCDB, 0x75BC}, //12999 #CJK UNIFIED IDEOGRAPH + {0xCCDC, 0x8A8A}, //13000 #CJK UNIFIED IDEOGRAPH + {0xCCDD, 0x68AF}, //13001 #CJK UNIFIED IDEOGRAPH + {0xCCDE, 0x5254}, //13002 #CJK UNIFIED IDEOGRAPH + {0xCCDF, 0x8E22}, //13003 #CJK UNIFIED IDEOGRAPH + {0xCCE0, 0x9511}, //13004 #CJK UNIFIED IDEOGRAPH + {0xCCE1, 0x63D0}, //13005 #CJK UNIFIED IDEOGRAPH + {0xCCE2, 0x9898}, //13006 #CJK UNIFIED IDEOGRAPH + {0xCCE3, 0x8E44}, //13007 #CJK UNIFIED IDEOGRAPH + {0xCCE4, 0x557C}, //13008 #CJK UNIFIED IDEOGRAPH + {0xCCE5, 0x4F53}, //13009 #CJK UNIFIED IDEOGRAPH + {0xCCE6, 0x66FF}, //13010 #CJK UNIFIED IDEOGRAPH + {0xCCE7, 0x568F}, //13011 #CJK UNIFIED IDEOGRAPH + {0xCCE8, 0x60D5}, //13012 #CJK UNIFIED IDEOGRAPH + {0xCCE9, 0x6D95}, //13013 #CJK UNIFIED IDEOGRAPH + {0xCCEA, 0x5243}, //13014 #CJK UNIFIED IDEOGRAPH + {0xCCEB, 0x5C49}, //13015 #CJK UNIFIED IDEOGRAPH + {0xCCEC, 0x5929}, //13016 #CJK UNIFIED IDEOGRAPH + {0xCCED, 0x6DFB}, //13017 #CJK UNIFIED IDEOGRAPH + {0xCCEE, 0x586B}, //13018 #CJK UNIFIED IDEOGRAPH + {0xCCEF, 0x7530}, //13019 #CJK UNIFIED IDEOGRAPH + {0xCCF0, 0x751C}, //13020 #CJK UNIFIED IDEOGRAPH + {0xCCF1, 0x606C}, //13021 #CJK UNIFIED IDEOGRAPH + {0xCCF2, 0x8214}, //13022 #CJK UNIFIED IDEOGRAPH + {0xCCF3, 0x8146}, //13023 #CJK UNIFIED IDEOGRAPH + {0xCCF4, 0x6311}, //13024 #CJK UNIFIED IDEOGRAPH + {0xCCF5, 0x6761}, //13025 #CJK UNIFIED IDEOGRAPH + {0xCCF6, 0x8FE2}, //13026 #CJK UNIFIED IDEOGRAPH + {0xCCF7, 0x773A}, //13027 #CJK UNIFIED IDEOGRAPH + {0xCCF8, 0x8DF3}, //13028 #CJK UNIFIED IDEOGRAPH + {0xCCF9, 0x8D34}, //13029 #CJK UNIFIED IDEOGRAPH + {0xCCFA, 0x94C1}, //13030 #CJK UNIFIED IDEOGRAPH + {0xCCFB, 0x5E16}, //13031 #CJK UNIFIED IDEOGRAPH + {0xCCFC, 0x5385}, //13032 #CJK UNIFIED IDEOGRAPH + {0xCCFD, 0x542C}, //13033 #CJK UNIFIED IDEOGRAPH + {0xCCFE, 0x70C3}, //13034 #CJK UNIFIED IDEOGRAPH + {0xCD40, 0x866D}, //13035 #CJK UNIFIED IDEOGRAPH + {0xCD41, 0x866F}, //13036 #CJK UNIFIED IDEOGRAPH + {0xCD42, 0x8670}, //13037 #CJK UNIFIED IDEOGRAPH + {0xCD43, 0x8672}, //13038 #CJK UNIFIED IDEOGRAPH + {0xCD44, 0x8673}, //13039 #CJK UNIFIED IDEOGRAPH + {0xCD45, 0x8674}, //13040 #CJK UNIFIED IDEOGRAPH + {0xCD46, 0x8675}, //13041 #CJK UNIFIED IDEOGRAPH + {0xCD47, 0x8676}, //13042 #CJK UNIFIED IDEOGRAPH + {0xCD48, 0x8677}, //13043 #CJK UNIFIED IDEOGRAPH + {0xCD49, 0x8678}, //13044 #CJK UNIFIED IDEOGRAPH + {0xCD4A, 0x8683}, //13045 #CJK UNIFIED IDEOGRAPH + {0xCD4B, 0x8684}, //13046 #CJK UNIFIED IDEOGRAPH + {0xCD4C, 0x8685}, //13047 #CJK UNIFIED IDEOGRAPH + {0xCD4D, 0x8686}, //13048 #CJK UNIFIED IDEOGRAPH + {0xCD4E, 0x8687}, //13049 #CJK UNIFIED IDEOGRAPH + {0xCD4F, 0x8688}, //13050 #CJK UNIFIED IDEOGRAPH + {0xCD50, 0x8689}, //13051 #CJK UNIFIED IDEOGRAPH + {0xCD51, 0x868E}, //13052 #CJK UNIFIED IDEOGRAPH + {0xCD52, 0x868F}, //13053 #CJK UNIFIED IDEOGRAPH + {0xCD53, 0x8690}, //13054 #CJK UNIFIED IDEOGRAPH + {0xCD54, 0x8691}, //13055 #CJK UNIFIED IDEOGRAPH + {0xCD55, 0x8692}, //13056 #CJK UNIFIED IDEOGRAPH + {0xCD56, 0x8694}, //13057 #CJK UNIFIED IDEOGRAPH + {0xCD57, 0x8696}, //13058 #CJK UNIFIED IDEOGRAPH + {0xCD58, 0x8697}, //13059 #CJK UNIFIED IDEOGRAPH + {0xCD59, 0x8698}, //13060 #CJK UNIFIED IDEOGRAPH + {0xCD5A, 0x8699}, //13061 #CJK UNIFIED IDEOGRAPH + {0xCD5B, 0x869A}, //13062 #CJK UNIFIED IDEOGRAPH + {0xCD5C, 0x869B}, //13063 #CJK UNIFIED IDEOGRAPH + {0xCD5D, 0x869E}, //13064 #CJK UNIFIED IDEOGRAPH + {0xCD5E, 0x869F}, //13065 #CJK UNIFIED IDEOGRAPH + {0xCD5F, 0x86A0}, //13066 #CJK UNIFIED IDEOGRAPH + {0xCD60, 0x86A1}, //13067 #CJK UNIFIED IDEOGRAPH + {0xCD61, 0x86A2}, //13068 #CJK UNIFIED IDEOGRAPH + {0xCD62, 0x86A5}, //13069 #CJK UNIFIED IDEOGRAPH + {0xCD63, 0x86A6}, //13070 #CJK UNIFIED IDEOGRAPH + {0xCD64, 0x86AB}, //13071 #CJK UNIFIED IDEOGRAPH + {0xCD65, 0x86AD}, //13072 #CJK UNIFIED IDEOGRAPH + {0xCD66, 0x86AE}, //13073 #CJK UNIFIED IDEOGRAPH + {0xCD67, 0x86B2}, //13074 #CJK UNIFIED IDEOGRAPH + {0xCD68, 0x86B3}, //13075 #CJK UNIFIED IDEOGRAPH + {0xCD69, 0x86B7}, //13076 #CJK UNIFIED IDEOGRAPH + {0xCD6A, 0x86B8}, //13077 #CJK UNIFIED IDEOGRAPH + {0xCD6B, 0x86B9}, //13078 #CJK UNIFIED IDEOGRAPH + {0xCD6C, 0x86BB}, //13079 #CJK UNIFIED IDEOGRAPH + {0xCD6D, 0x86BC}, //13080 #CJK UNIFIED IDEOGRAPH + {0xCD6E, 0x86BD}, //13081 #CJK UNIFIED IDEOGRAPH + {0xCD6F, 0x86BE}, //13082 #CJK UNIFIED IDEOGRAPH + {0xCD70, 0x86BF}, //13083 #CJK UNIFIED IDEOGRAPH + {0xCD71, 0x86C1}, //13084 #CJK UNIFIED IDEOGRAPH + {0xCD72, 0x86C2}, //13085 #CJK UNIFIED IDEOGRAPH + {0xCD73, 0x86C3}, //13086 #CJK UNIFIED IDEOGRAPH + {0xCD74, 0x86C5}, //13087 #CJK UNIFIED IDEOGRAPH + {0xCD75, 0x86C8}, //13088 #CJK UNIFIED IDEOGRAPH + {0xCD76, 0x86CC}, //13089 #CJK UNIFIED IDEOGRAPH + {0xCD77, 0x86CD}, //13090 #CJK UNIFIED IDEOGRAPH + {0xCD78, 0x86D2}, //13091 #CJK UNIFIED IDEOGRAPH + {0xCD79, 0x86D3}, //13092 #CJK UNIFIED IDEOGRAPH + {0xCD7A, 0x86D5}, //13093 #CJK UNIFIED IDEOGRAPH + {0xCD7B, 0x86D6}, //13094 #CJK UNIFIED IDEOGRAPH + {0xCD7C, 0x86D7}, //13095 #CJK UNIFIED IDEOGRAPH + {0xCD7D, 0x86DA}, //13096 #CJK UNIFIED IDEOGRAPH + {0xCD7E, 0x86DC}, //13097 #CJK UNIFIED IDEOGRAPH + {0xCD80, 0x86DD}, //13098 #CJK UNIFIED IDEOGRAPH + {0xCD81, 0x86E0}, //13099 #CJK UNIFIED IDEOGRAPH + {0xCD82, 0x86E1}, //13100 #CJK UNIFIED IDEOGRAPH + {0xCD83, 0x86E2}, //13101 #CJK UNIFIED IDEOGRAPH + {0xCD84, 0x86E3}, //13102 #CJK UNIFIED IDEOGRAPH + {0xCD85, 0x86E5}, //13103 #CJK UNIFIED IDEOGRAPH + {0xCD86, 0x86E6}, //13104 #CJK UNIFIED IDEOGRAPH + {0xCD87, 0x86E7}, //13105 #CJK UNIFIED IDEOGRAPH + {0xCD88, 0x86E8}, //13106 #CJK UNIFIED IDEOGRAPH + {0xCD89, 0x86EA}, //13107 #CJK UNIFIED IDEOGRAPH + {0xCD8A, 0x86EB}, //13108 #CJK UNIFIED IDEOGRAPH + {0xCD8B, 0x86EC}, //13109 #CJK UNIFIED IDEOGRAPH + {0xCD8C, 0x86EF}, //13110 #CJK UNIFIED IDEOGRAPH + {0xCD8D, 0x86F5}, //13111 #CJK UNIFIED IDEOGRAPH + {0xCD8E, 0x86F6}, //13112 #CJK UNIFIED IDEOGRAPH + {0xCD8F, 0x86F7}, //13113 #CJK UNIFIED IDEOGRAPH + {0xCD90, 0x86FA}, //13114 #CJK UNIFIED IDEOGRAPH + {0xCD91, 0x86FB}, //13115 #CJK UNIFIED IDEOGRAPH + {0xCD92, 0x86FC}, //13116 #CJK UNIFIED IDEOGRAPH + {0xCD93, 0x86FD}, //13117 #CJK UNIFIED IDEOGRAPH + {0xCD94, 0x86FF}, //13118 #CJK UNIFIED IDEOGRAPH + {0xCD95, 0x8701}, //13119 #CJK UNIFIED IDEOGRAPH + {0xCD96, 0x8704}, //13120 #CJK UNIFIED IDEOGRAPH + {0xCD97, 0x8705}, //13121 #CJK UNIFIED IDEOGRAPH + {0xCD98, 0x8706}, //13122 #CJK UNIFIED IDEOGRAPH + {0xCD99, 0x870B}, //13123 #CJK UNIFIED IDEOGRAPH + {0xCD9A, 0x870C}, //13124 #CJK UNIFIED IDEOGRAPH + {0xCD9B, 0x870E}, //13125 #CJK UNIFIED IDEOGRAPH + {0xCD9C, 0x870F}, //13126 #CJK UNIFIED IDEOGRAPH + {0xCD9D, 0x8710}, //13127 #CJK UNIFIED IDEOGRAPH + {0xCD9E, 0x8711}, //13128 #CJK UNIFIED IDEOGRAPH + {0xCD9F, 0x8714}, //13129 #CJK UNIFIED IDEOGRAPH + {0xCDA0, 0x8716}, //13130 #CJK UNIFIED IDEOGRAPH + {0xCDA1, 0x6C40}, //13131 #CJK UNIFIED IDEOGRAPH + {0xCDA2, 0x5EF7}, //13132 #CJK UNIFIED IDEOGRAPH + {0xCDA3, 0x505C}, //13133 #CJK UNIFIED IDEOGRAPH + {0xCDA4, 0x4EAD}, //13134 #CJK UNIFIED IDEOGRAPH + {0xCDA5, 0x5EAD}, //13135 #CJK UNIFIED IDEOGRAPH + {0xCDA6, 0x633A}, //13136 #CJK UNIFIED IDEOGRAPH + {0xCDA7, 0x8247}, //13137 #CJK UNIFIED IDEOGRAPH + {0xCDA8, 0x901A}, //13138 #CJK UNIFIED IDEOGRAPH + {0xCDA9, 0x6850}, //13139 #CJK UNIFIED IDEOGRAPH + {0xCDAA, 0x916E}, //13140 #CJK UNIFIED IDEOGRAPH + {0xCDAB, 0x77B3}, //13141 #CJK UNIFIED IDEOGRAPH + {0xCDAC, 0x540C}, //13142 #CJK UNIFIED IDEOGRAPH + {0xCDAD, 0x94DC}, //13143 #CJK UNIFIED IDEOGRAPH + {0xCDAE, 0x5F64}, //13144 #CJK UNIFIED IDEOGRAPH + {0xCDAF, 0x7AE5}, //13145 #CJK UNIFIED IDEOGRAPH + {0xCDB0, 0x6876}, //13146 #CJK UNIFIED IDEOGRAPH + {0xCDB1, 0x6345}, //13147 #CJK UNIFIED IDEOGRAPH + {0xCDB2, 0x7B52}, //13148 #CJK UNIFIED IDEOGRAPH + {0xCDB3, 0x7EDF}, //13149 #CJK UNIFIED IDEOGRAPH + {0xCDB4, 0x75DB}, //13150 #CJK UNIFIED IDEOGRAPH + {0xCDB5, 0x5077}, //13151 #CJK UNIFIED IDEOGRAPH + {0xCDB6, 0x6295}, //13152 #CJK UNIFIED IDEOGRAPH + {0xCDB7, 0x5934}, //13153 #CJK UNIFIED IDEOGRAPH + {0xCDB8, 0x900F}, //13154 #CJK UNIFIED IDEOGRAPH + {0xCDB9, 0x51F8}, //13155 #CJK UNIFIED IDEOGRAPH + {0xCDBA, 0x79C3}, //13156 #CJK UNIFIED IDEOGRAPH + {0xCDBB, 0x7A81}, //13157 #CJK UNIFIED IDEOGRAPH + {0xCDBC, 0x56FE}, //13158 #CJK UNIFIED IDEOGRAPH + {0xCDBD, 0x5F92}, //13159 #CJK UNIFIED IDEOGRAPH + {0xCDBE, 0x9014}, //13160 #CJK UNIFIED IDEOGRAPH + {0xCDBF, 0x6D82}, //13161 #CJK UNIFIED IDEOGRAPH + {0xCDC0, 0x5C60}, //13162 #CJK UNIFIED IDEOGRAPH + {0xCDC1, 0x571F}, //13163 #CJK UNIFIED IDEOGRAPH + {0xCDC2, 0x5410}, //13164 #CJK UNIFIED IDEOGRAPH + {0xCDC3, 0x5154}, //13165 #CJK UNIFIED IDEOGRAPH + {0xCDC4, 0x6E4D}, //13166 #CJK UNIFIED IDEOGRAPH + {0xCDC5, 0x56E2}, //13167 #CJK UNIFIED IDEOGRAPH + {0xCDC6, 0x63A8}, //13168 #CJK UNIFIED IDEOGRAPH + {0xCDC7, 0x9893}, //13169 #CJK UNIFIED IDEOGRAPH + {0xCDC8, 0x817F}, //13170 #CJK UNIFIED IDEOGRAPH + {0xCDC9, 0x8715}, //13171 #CJK UNIFIED IDEOGRAPH + {0xCDCA, 0x892A}, //13172 #CJK UNIFIED IDEOGRAPH + {0xCDCB, 0x9000}, //13173 #CJK UNIFIED IDEOGRAPH + {0xCDCC, 0x541E}, //13174 #CJK UNIFIED IDEOGRAPH + {0xCDCD, 0x5C6F}, //13175 #CJK UNIFIED IDEOGRAPH + {0xCDCE, 0x81C0}, //13176 #CJK UNIFIED IDEOGRAPH + {0xCDCF, 0x62D6}, //13177 #CJK UNIFIED IDEOGRAPH + {0xCDD0, 0x6258}, //13178 #CJK UNIFIED IDEOGRAPH + {0xCDD1, 0x8131}, //13179 #CJK UNIFIED IDEOGRAPH + {0xCDD2, 0x9E35}, //13180 #CJK UNIFIED IDEOGRAPH + {0xCDD3, 0x9640}, //13181 #CJK UNIFIED IDEOGRAPH + {0xCDD4, 0x9A6E}, //13182 #CJK UNIFIED IDEOGRAPH + {0xCDD5, 0x9A7C}, //13183 #CJK UNIFIED IDEOGRAPH + {0xCDD6, 0x692D}, //13184 #CJK UNIFIED IDEOGRAPH + {0xCDD7, 0x59A5}, //13185 #CJK UNIFIED IDEOGRAPH + {0xCDD8, 0x62D3}, //13186 #CJK UNIFIED IDEOGRAPH + {0xCDD9, 0x553E}, //13187 #CJK UNIFIED IDEOGRAPH + {0xCDDA, 0x6316}, //13188 #CJK UNIFIED IDEOGRAPH + {0xCDDB, 0x54C7}, //13189 #CJK UNIFIED IDEOGRAPH + {0xCDDC, 0x86D9}, //13190 #CJK UNIFIED IDEOGRAPH + {0xCDDD, 0x6D3C}, //13191 #CJK UNIFIED IDEOGRAPH + {0xCDDE, 0x5A03}, //13192 #CJK UNIFIED IDEOGRAPH + {0xCDDF, 0x74E6}, //13193 #CJK UNIFIED IDEOGRAPH + {0xCDE0, 0x889C}, //13194 #CJK UNIFIED IDEOGRAPH + {0xCDE1, 0x6B6A}, //13195 #CJK UNIFIED IDEOGRAPH + {0xCDE2, 0x5916}, //13196 #CJK UNIFIED IDEOGRAPH + {0xCDE3, 0x8C4C}, //13197 #CJK UNIFIED IDEOGRAPH + {0xCDE4, 0x5F2F}, //13198 #CJK UNIFIED IDEOGRAPH + {0xCDE5, 0x6E7E}, //13199 #CJK UNIFIED IDEOGRAPH + {0xCDE6, 0x73A9}, //13200 #CJK UNIFIED IDEOGRAPH + {0xCDE7, 0x987D}, //13201 #CJK UNIFIED IDEOGRAPH + {0xCDE8, 0x4E38}, //13202 #CJK UNIFIED IDEOGRAPH + {0xCDE9, 0x70F7}, //13203 #CJK UNIFIED IDEOGRAPH + {0xCDEA, 0x5B8C}, //13204 #CJK UNIFIED IDEOGRAPH + {0xCDEB, 0x7897}, //13205 #CJK UNIFIED IDEOGRAPH + {0xCDEC, 0x633D}, //13206 #CJK UNIFIED IDEOGRAPH + {0xCDED, 0x665A}, //13207 #CJK UNIFIED IDEOGRAPH + {0xCDEE, 0x7696}, //13208 #CJK UNIFIED IDEOGRAPH + {0xCDEF, 0x60CB}, //13209 #CJK UNIFIED IDEOGRAPH + {0xCDF0, 0x5B9B}, //13210 #CJK UNIFIED IDEOGRAPH + {0xCDF1, 0x5A49}, //13211 #CJK UNIFIED IDEOGRAPH + {0xCDF2, 0x4E07}, //13212 #CJK UNIFIED IDEOGRAPH + {0xCDF3, 0x8155}, //13213 #CJK UNIFIED IDEOGRAPH + {0xCDF4, 0x6C6A}, //13214 #CJK UNIFIED IDEOGRAPH + {0xCDF5, 0x738B}, //13215 #CJK UNIFIED IDEOGRAPH + {0xCDF6, 0x4EA1}, //13216 #CJK UNIFIED IDEOGRAPH + {0xCDF7, 0x6789}, //13217 #CJK UNIFIED IDEOGRAPH + {0xCDF8, 0x7F51}, //13218 #CJK UNIFIED IDEOGRAPH + {0xCDF9, 0x5F80}, //13219 #CJK UNIFIED IDEOGRAPH + {0xCDFA, 0x65FA}, //13220 #CJK UNIFIED IDEOGRAPH + {0xCDFB, 0x671B}, //13221 #CJK UNIFIED IDEOGRAPH + {0xCDFC, 0x5FD8}, //13222 #CJK UNIFIED IDEOGRAPH + {0xCDFD, 0x5984}, //13223 #CJK UNIFIED IDEOGRAPH + {0xCDFE, 0x5A01}, //13224 #CJK UNIFIED IDEOGRAPH + {0xCE40, 0x8719}, //13225 #CJK UNIFIED IDEOGRAPH + {0xCE41, 0x871B}, //13226 #CJK UNIFIED IDEOGRAPH + {0xCE42, 0x871D}, //13227 #CJK UNIFIED IDEOGRAPH + {0xCE43, 0x871F}, //13228 #CJK UNIFIED IDEOGRAPH + {0xCE44, 0x8720}, //13229 #CJK UNIFIED IDEOGRAPH + {0xCE45, 0x8724}, //13230 #CJK UNIFIED IDEOGRAPH + {0xCE46, 0x8726}, //13231 #CJK UNIFIED IDEOGRAPH + {0xCE47, 0x8727}, //13232 #CJK UNIFIED IDEOGRAPH + {0xCE48, 0x8728}, //13233 #CJK UNIFIED IDEOGRAPH + {0xCE49, 0x872A}, //13234 #CJK UNIFIED IDEOGRAPH + {0xCE4A, 0x872B}, //13235 #CJK UNIFIED IDEOGRAPH + {0xCE4B, 0x872C}, //13236 #CJK UNIFIED IDEOGRAPH + {0xCE4C, 0x872D}, //13237 #CJK UNIFIED IDEOGRAPH + {0xCE4D, 0x872F}, //13238 #CJK UNIFIED IDEOGRAPH + {0xCE4E, 0x8730}, //13239 #CJK UNIFIED IDEOGRAPH + {0xCE4F, 0x8732}, //13240 #CJK UNIFIED IDEOGRAPH + {0xCE50, 0x8733}, //13241 #CJK UNIFIED IDEOGRAPH + {0xCE51, 0x8735}, //13242 #CJK UNIFIED IDEOGRAPH + {0xCE52, 0x8736}, //13243 #CJK UNIFIED IDEOGRAPH + {0xCE53, 0x8738}, //13244 #CJK UNIFIED IDEOGRAPH + {0xCE54, 0x8739}, //13245 #CJK UNIFIED IDEOGRAPH + {0xCE55, 0x873A}, //13246 #CJK UNIFIED IDEOGRAPH + {0xCE56, 0x873C}, //13247 #CJK UNIFIED IDEOGRAPH + {0xCE57, 0x873D}, //13248 #CJK UNIFIED IDEOGRAPH + {0xCE58, 0x8740}, //13249 #CJK UNIFIED IDEOGRAPH + {0xCE59, 0x8741}, //13250 #CJK UNIFIED IDEOGRAPH + {0xCE5A, 0x8742}, //13251 #CJK UNIFIED IDEOGRAPH + {0xCE5B, 0x8743}, //13252 #CJK UNIFIED IDEOGRAPH + {0xCE5C, 0x8744}, //13253 #CJK UNIFIED IDEOGRAPH + {0xCE5D, 0x8745}, //13254 #CJK UNIFIED IDEOGRAPH + {0xCE5E, 0x8746}, //13255 #CJK UNIFIED IDEOGRAPH + {0xCE5F, 0x874A}, //13256 #CJK UNIFIED IDEOGRAPH + {0xCE60, 0x874B}, //13257 #CJK UNIFIED IDEOGRAPH + {0xCE61, 0x874D}, //13258 #CJK UNIFIED IDEOGRAPH + {0xCE62, 0x874F}, //13259 #CJK UNIFIED IDEOGRAPH + {0xCE63, 0x8750}, //13260 #CJK UNIFIED IDEOGRAPH + {0xCE64, 0x8751}, //13261 #CJK UNIFIED IDEOGRAPH + {0xCE65, 0x8752}, //13262 #CJK UNIFIED IDEOGRAPH + {0xCE66, 0x8754}, //13263 #CJK UNIFIED IDEOGRAPH + {0xCE67, 0x8755}, //13264 #CJK UNIFIED IDEOGRAPH + {0xCE68, 0x8756}, //13265 #CJK UNIFIED IDEOGRAPH + {0xCE69, 0x8758}, //13266 #CJK UNIFIED IDEOGRAPH + {0xCE6A, 0x875A}, //13267 #CJK UNIFIED IDEOGRAPH + {0xCE6B, 0x875B}, //13268 #CJK UNIFIED IDEOGRAPH + {0xCE6C, 0x875C}, //13269 #CJK UNIFIED IDEOGRAPH + {0xCE6D, 0x875D}, //13270 #CJK UNIFIED IDEOGRAPH + {0xCE6E, 0x875E}, //13271 #CJK UNIFIED IDEOGRAPH + {0xCE6F, 0x875F}, //13272 #CJK UNIFIED IDEOGRAPH + {0xCE70, 0x8761}, //13273 #CJK UNIFIED IDEOGRAPH + {0xCE71, 0x8762}, //13274 #CJK UNIFIED IDEOGRAPH + {0xCE72, 0x8766}, //13275 #CJK UNIFIED IDEOGRAPH + {0xCE73, 0x8767}, //13276 #CJK UNIFIED IDEOGRAPH + {0xCE74, 0x8768}, //13277 #CJK UNIFIED IDEOGRAPH + {0xCE75, 0x8769}, //13278 #CJK UNIFIED IDEOGRAPH + {0xCE76, 0x876A}, //13279 #CJK UNIFIED IDEOGRAPH + {0xCE77, 0x876B}, //13280 #CJK UNIFIED IDEOGRAPH + {0xCE78, 0x876C}, //13281 #CJK UNIFIED IDEOGRAPH + {0xCE79, 0x876D}, //13282 #CJK UNIFIED IDEOGRAPH + {0xCE7A, 0x876F}, //13283 #CJK UNIFIED IDEOGRAPH + {0xCE7B, 0x8771}, //13284 #CJK UNIFIED IDEOGRAPH + {0xCE7C, 0x8772}, //13285 #CJK UNIFIED IDEOGRAPH + {0xCE7D, 0x8773}, //13286 #CJK UNIFIED IDEOGRAPH + {0xCE7E, 0x8775}, //13287 #CJK UNIFIED IDEOGRAPH + {0xCE80, 0x8777}, //13288 #CJK UNIFIED IDEOGRAPH + {0xCE81, 0x8778}, //13289 #CJK UNIFIED IDEOGRAPH + {0xCE82, 0x8779}, //13290 #CJK UNIFIED IDEOGRAPH + {0xCE83, 0x877A}, //13291 #CJK UNIFIED IDEOGRAPH + {0xCE84, 0x877F}, //13292 #CJK UNIFIED IDEOGRAPH + {0xCE85, 0x8780}, //13293 #CJK UNIFIED IDEOGRAPH + {0xCE86, 0x8781}, //13294 #CJK UNIFIED IDEOGRAPH + {0xCE87, 0x8784}, //13295 #CJK UNIFIED IDEOGRAPH + {0xCE88, 0x8786}, //13296 #CJK UNIFIED IDEOGRAPH + {0xCE89, 0x8787}, //13297 #CJK UNIFIED IDEOGRAPH + {0xCE8A, 0x8789}, //13298 #CJK UNIFIED IDEOGRAPH + {0xCE8B, 0x878A}, //13299 #CJK UNIFIED IDEOGRAPH + {0xCE8C, 0x878C}, //13300 #CJK UNIFIED IDEOGRAPH + {0xCE8D, 0x878E}, //13301 #CJK UNIFIED IDEOGRAPH + {0xCE8E, 0x878F}, //13302 #CJK UNIFIED IDEOGRAPH + {0xCE8F, 0x8790}, //13303 #CJK UNIFIED IDEOGRAPH + {0xCE90, 0x8791}, //13304 #CJK UNIFIED IDEOGRAPH + {0xCE91, 0x8792}, //13305 #CJK UNIFIED IDEOGRAPH + {0xCE92, 0x8794}, //13306 #CJK UNIFIED IDEOGRAPH + {0xCE93, 0x8795}, //13307 #CJK UNIFIED IDEOGRAPH + {0xCE94, 0x8796}, //13308 #CJK UNIFIED IDEOGRAPH + {0xCE95, 0x8798}, //13309 #CJK UNIFIED IDEOGRAPH + {0xCE96, 0x8799}, //13310 #CJK UNIFIED IDEOGRAPH + {0xCE97, 0x879A}, //13311 #CJK UNIFIED IDEOGRAPH + {0xCE98, 0x879B}, //13312 #CJK UNIFIED IDEOGRAPH + {0xCE99, 0x879C}, //13313 #CJK UNIFIED IDEOGRAPH + {0xCE9A, 0x879D}, //13314 #CJK UNIFIED IDEOGRAPH + {0xCE9B, 0x879E}, //13315 #CJK UNIFIED IDEOGRAPH + {0xCE9C, 0x87A0}, //13316 #CJK UNIFIED IDEOGRAPH + {0xCE9D, 0x87A1}, //13317 #CJK UNIFIED IDEOGRAPH + {0xCE9E, 0x87A2}, //13318 #CJK UNIFIED IDEOGRAPH + {0xCE9F, 0x87A3}, //13319 #CJK UNIFIED IDEOGRAPH + {0xCEA0, 0x87A4}, //13320 #CJK UNIFIED IDEOGRAPH + {0xCEA1, 0x5DCD}, //13321 #CJK UNIFIED IDEOGRAPH + {0xCEA2, 0x5FAE}, //13322 #CJK UNIFIED IDEOGRAPH + {0xCEA3, 0x5371}, //13323 #CJK UNIFIED IDEOGRAPH + {0xCEA4, 0x97E6}, //13324 #CJK UNIFIED IDEOGRAPH + {0xCEA5, 0x8FDD}, //13325 #CJK UNIFIED IDEOGRAPH + {0xCEA6, 0x6845}, //13326 #CJK UNIFIED IDEOGRAPH + {0xCEA7, 0x56F4}, //13327 #CJK UNIFIED IDEOGRAPH + {0xCEA8, 0x552F}, //13328 #CJK UNIFIED IDEOGRAPH + {0xCEA9, 0x60DF}, //13329 #CJK UNIFIED IDEOGRAPH + {0xCEAA, 0x4E3A}, //13330 #CJK UNIFIED IDEOGRAPH + {0xCEAB, 0x6F4D}, //13331 #CJK UNIFIED IDEOGRAPH + {0xCEAC, 0x7EF4}, //13332 #CJK UNIFIED IDEOGRAPH + {0xCEAD, 0x82C7}, //13333 #CJK UNIFIED IDEOGRAPH + {0xCEAE, 0x840E}, //13334 #CJK UNIFIED IDEOGRAPH + {0xCEAF, 0x59D4}, //13335 #CJK UNIFIED IDEOGRAPH + {0xCEB0, 0x4F1F}, //13336 #CJK UNIFIED IDEOGRAPH + {0xCEB1, 0x4F2A}, //13337 #CJK UNIFIED IDEOGRAPH + {0xCEB2, 0x5C3E}, //13338 #CJK UNIFIED IDEOGRAPH + {0xCEB3, 0x7EAC}, //13339 #CJK UNIFIED IDEOGRAPH + {0xCEB4, 0x672A}, //13340 #CJK UNIFIED IDEOGRAPH + {0xCEB5, 0x851A}, //13341 #CJK UNIFIED IDEOGRAPH + {0xCEB6, 0x5473}, //13342 #CJK UNIFIED IDEOGRAPH + {0xCEB7, 0x754F}, //13343 #CJK UNIFIED IDEOGRAPH + {0xCEB8, 0x80C3}, //13344 #CJK UNIFIED IDEOGRAPH + {0xCEB9, 0x5582}, //13345 #CJK UNIFIED IDEOGRAPH + {0xCEBA, 0x9B4F}, //13346 #CJK UNIFIED IDEOGRAPH + {0xCEBB, 0x4F4D}, //13347 #CJK UNIFIED IDEOGRAPH + {0xCEBC, 0x6E2D}, //13348 #CJK UNIFIED IDEOGRAPH + {0xCEBD, 0x8C13}, //13349 #CJK UNIFIED IDEOGRAPH + {0xCEBE, 0x5C09}, //13350 #CJK UNIFIED IDEOGRAPH + {0xCEBF, 0x6170}, //13351 #CJK UNIFIED IDEOGRAPH + {0xCEC0, 0x536B}, //13352 #CJK UNIFIED IDEOGRAPH + {0xCEC1, 0x761F}, //13353 #CJK UNIFIED IDEOGRAPH + {0xCEC2, 0x6E29}, //13354 #CJK UNIFIED IDEOGRAPH + {0xCEC3, 0x868A}, //13355 #CJK UNIFIED IDEOGRAPH + {0xCEC4, 0x6587}, //13356 #CJK UNIFIED IDEOGRAPH + {0xCEC5, 0x95FB}, //13357 #CJK UNIFIED IDEOGRAPH + {0xCEC6, 0x7EB9}, //13358 #CJK UNIFIED IDEOGRAPH + {0xCEC7, 0x543B}, //13359 #CJK UNIFIED IDEOGRAPH + {0xCEC8, 0x7A33}, //13360 #CJK UNIFIED IDEOGRAPH + {0xCEC9, 0x7D0A}, //13361 #CJK UNIFIED IDEOGRAPH + {0xCECA, 0x95EE}, //13362 #CJK UNIFIED IDEOGRAPH + {0xCECB, 0x55E1}, //13363 #CJK UNIFIED IDEOGRAPH + {0xCECC, 0x7FC1}, //13364 #CJK UNIFIED IDEOGRAPH + {0xCECD, 0x74EE}, //13365 #CJK UNIFIED IDEOGRAPH + {0xCECE, 0x631D}, //13366 #CJK UNIFIED IDEOGRAPH + {0xCECF, 0x8717}, //13367 #CJK UNIFIED IDEOGRAPH + {0xCED0, 0x6DA1}, //13368 #CJK UNIFIED IDEOGRAPH + {0xCED1, 0x7A9D}, //13369 #CJK UNIFIED IDEOGRAPH + {0xCED2, 0x6211}, //13370 #CJK UNIFIED IDEOGRAPH + {0xCED3, 0x65A1}, //13371 #CJK UNIFIED IDEOGRAPH + {0xCED4, 0x5367}, //13372 #CJK UNIFIED IDEOGRAPH + {0xCED5, 0x63E1}, //13373 #CJK UNIFIED IDEOGRAPH + {0xCED6, 0x6C83}, //13374 #CJK UNIFIED IDEOGRAPH + {0xCED7, 0x5DEB}, //13375 #CJK UNIFIED IDEOGRAPH + {0xCED8, 0x545C}, //13376 #CJK UNIFIED IDEOGRAPH + {0xCED9, 0x94A8}, //13377 #CJK UNIFIED IDEOGRAPH + {0xCEDA, 0x4E4C}, //13378 #CJK UNIFIED IDEOGRAPH + {0xCEDB, 0x6C61}, //13379 #CJK UNIFIED IDEOGRAPH + {0xCEDC, 0x8BEC}, //13380 #CJK UNIFIED IDEOGRAPH + {0xCEDD, 0x5C4B}, //13381 #CJK UNIFIED IDEOGRAPH + {0xCEDE, 0x65E0}, //13382 #CJK UNIFIED IDEOGRAPH + {0xCEDF, 0x829C}, //13383 #CJK UNIFIED IDEOGRAPH + {0xCEE0, 0x68A7}, //13384 #CJK UNIFIED IDEOGRAPH + {0xCEE1, 0x543E}, //13385 #CJK UNIFIED IDEOGRAPH + {0xCEE2, 0x5434}, //13386 #CJK UNIFIED IDEOGRAPH + {0xCEE3, 0x6BCB}, //13387 #CJK UNIFIED IDEOGRAPH + {0xCEE4, 0x6B66}, //13388 #CJK UNIFIED IDEOGRAPH + {0xCEE5, 0x4E94}, //13389 #CJK UNIFIED IDEOGRAPH + {0xCEE6, 0x6342}, //13390 #CJK UNIFIED IDEOGRAPH + {0xCEE7, 0x5348}, //13391 #CJK UNIFIED IDEOGRAPH + {0xCEE8, 0x821E}, //13392 #CJK UNIFIED IDEOGRAPH + {0xCEE9, 0x4F0D}, //13393 #CJK UNIFIED IDEOGRAPH + {0xCEEA, 0x4FAE}, //13394 #CJK UNIFIED IDEOGRAPH + {0xCEEB, 0x575E}, //13395 #CJK UNIFIED IDEOGRAPH + {0xCEEC, 0x620A}, //13396 #CJK UNIFIED IDEOGRAPH + {0xCEED, 0x96FE}, //13397 #CJK UNIFIED IDEOGRAPH + {0xCEEE, 0x6664}, //13398 #CJK UNIFIED IDEOGRAPH + {0xCEEF, 0x7269}, //13399 #CJK UNIFIED IDEOGRAPH + {0xCEF0, 0x52FF}, //13400 #CJK UNIFIED IDEOGRAPH + {0xCEF1, 0x52A1}, //13401 #CJK UNIFIED IDEOGRAPH + {0xCEF2, 0x609F}, //13402 #CJK UNIFIED IDEOGRAPH + {0xCEF3, 0x8BEF}, //13403 #CJK UNIFIED IDEOGRAPH + {0xCEF4, 0x6614}, //13404 #CJK UNIFIED IDEOGRAPH + {0xCEF5, 0x7199}, //13405 #CJK UNIFIED IDEOGRAPH + {0xCEF6, 0x6790}, //13406 #CJK UNIFIED IDEOGRAPH + {0xCEF7, 0x897F}, //13407 #CJK UNIFIED IDEOGRAPH + {0xCEF8, 0x7852}, //13408 #CJK UNIFIED IDEOGRAPH + {0xCEF9, 0x77FD}, //13409 #CJK UNIFIED IDEOGRAPH + {0xCEFA, 0x6670}, //13410 #CJK UNIFIED IDEOGRAPH + {0xCEFB, 0x563B}, //13411 #CJK UNIFIED IDEOGRAPH + {0xCEFC, 0x5438}, //13412 #CJK UNIFIED IDEOGRAPH + {0xCEFD, 0x9521}, //13413 #CJK UNIFIED IDEOGRAPH + {0xCEFE, 0x727A}, //13414 #CJK UNIFIED IDEOGRAPH + {0xCF40, 0x87A5}, //13415 #CJK UNIFIED IDEOGRAPH + {0xCF41, 0x87A6}, //13416 #CJK UNIFIED IDEOGRAPH + {0xCF42, 0x87A7}, //13417 #CJK UNIFIED IDEOGRAPH + {0xCF43, 0x87A9}, //13418 #CJK UNIFIED IDEOGRAPH + {0xCF44, 0x87AA}, //13419 #CJK UNIFIED IDEOGRAPH + {0xCF45, 0x87AE}, //13420 #CJK UNIFIED IDEOGRAPH + {0xCF46, 0x87B0}, //13421 #CJK UNIFIED IDEOGRAPH + {0xCF47, 0x87B1}, //13422 #CJK UNIFIED IDEOGRAPH + {0xCF48, 0x87B2}, //13423 #CJK UNIFIED IDEOGRAPH + {0xCF49, 0x87B4}, //13424 #CJK UNIFIED IDEOGRAPH + {0xCF4A, 0x87B6}, //13425 #CJK UNIFIED IDEOGRAPH + {0xCF4B, 0x87B7}, //13426 #CJK UNIFIED IDEOGRAPH + {0xCF4C, 0x87B8}, //13427 #CJK UNIFIED IDEOGRAPH + {0xCF4D, 0x87B9}, //13428 #CJK UNIFIED IDEOGRAPH + {0xCF4E, 0x87BB}, //13429 #CJK UNIFIED IDEOGRAPH + {0xCF4F, 0x87BC}, //13430 #CJK UNIFIED IDEOGRAPH + {0xCF50, 0x87BE}, //13431 #CJK UNIFIED IDEOGRAPH + {0xCF51, 0x87BF}, //13432 #CJK UNIFIED IDEOGRAPH + {0xCF52, 0x87C1}, //13433 #CJK UNIFIED IDEOGRAPH + {0xCF53, 0x87C2}, //13434 #CJK UNIFIED IDEOGRAPH + {0xCF54, 0x87C3}, //13435 #CJK UNIFIED IDEOGRAPH + {0xCF55, 0x87C4}, //13436 #CJK UNIFIED IDEOGRAPH + {0xCF56, 0x87C5}, //13437 #CJK UNIFIED IDEOGRAPH + {0xCF57, 0x87C7}, //13438 #CJK UNIFIED IDEOGRAPH + {0xCF58, 0x87C8}, //13439 #CJK UNIFIED IDEOGRAPH + {0xCF59, 0x87C9}, //13440 #CJK UNIFIED IDEOGRAPH + {0xCF5A, 0x87CC}, //13441 #CJK UNIFIED IDEOGRAPH + {0xCF5B, 0x87CD}, //13442 #CJK UNIFIED IDEOGRAPH + {0xCF5C, 0x87CE}, //13443 #CJK UNIFIED IDEOGRAPH + {0xCF5D, 0x87CF}, //13444 #CJK UNIFIED IDEOGRAPH + {0xCF5E, 0x87D0}, //13445 #CJK UNIFIED IDEOGRAPH + {0xCF5F, 0x87D4}, //13446 #CJK UNIFIED IDEOGRAPH + {0xCF60, 0x87D5}, //13447 #CJK UNIFIED IDEOGRAPH + {0xCF61, 0x87D6}, //13448 #CJK UNIFIED IDEOGRAPH + {0xCF62, 0x87D7}, //13449 #CJK UNIFIED IDEOGRAPH + {0xCF63, 0x87D8}, //13450 #CJK UNIFIED IDEOGRAPH + {0xCF64, 0x87D9}, //13451 #CJK UNIFIED IDEOGRAPH + {0xCF65, 0x87DA}, //13452 #CJK UNIFIED IDEOGRAPH + {0xCF66, 0x87DC}, //13453 #CJK UNIFIED IDEOGRAPH + {0xCF67, 0x87DD}, //13454 #CJK UNIFIED IDEOGRAPH + {0xCF68, 0x87DE}, //13455 #CJK UNIFIED IDEOGRAPH + {0xCF69, 0x87DF}, //13456 #CJK UNIFIED IDEOGRAPH + {0xCF6A, 0x87E1}, //13457 #CJK UNIFIED IDEOGRAPH + {0xCF6B, 0x87E2}, //13458 #CJK UNIFIED IDEOGRAPH + {0xCF6C, 0x87E3}, //13459 #CJK UNIFIED IDEOGRAPH + {0xCF6D, 0x87E4}, //13460 #CJK UNIFIED IDEOGRAPH + {0xCF6E, 0x87E6}, //13461 #CJK UNIFIED IDEOGRAPH + {0xCF6F, 0x87E7}, //13462 #CJK UNIFIED IDEOGRAPH + {0xCF70, 0x87E8}, //13463 #CJK UNIFIED IDEOGRAPH + {0xCF71, 0x87E9}, //13464 #CJK UNIFIED IDEOGRAPH + {0xCF72, 0x87EB}, //13465 #CJK UNIFIED IDEOGRAPH + {0xCF73, 0x87EC}, //13466 #CJK UNIFIED IDEOGRAPH + {0xCF74, 0x87ED}, //13467 #CJK UNIFIED IDEOGRAPH + {0xCF75, 0x87EF}, //13468 #CJK UNIFIED IDEOGRAPH + {0xCF76, 0x87F0}, //13469 #CJK UNIFIED IDEOGRAPH + {0xCF77, 0x87F1}, //13470 #CJK UNIFIED IDEOGRAPH + {0xCF78, 0x87F2}, //13471 #CJK UNIFIED IDEOGRAPH + {0xCF79, 0x87F3}, //13472 #CJK UNIFIED IDEOGRAPH + {0xCF7A, 0x87F4}, //13473 #CJK UNIFIED IDEOGRAPH + {0xCF7B, 0x87F5}, //13474 #CJK UNIFIED IDEOGRAPH + {0xCF7C, 0x87F6}, //13475 #CJK UNIFIED IDEOGRAPH + {0xCF7D, 0x87F7}, //13476 #CJK UNIFIED IDEOGRAPH + {0xCF7E, 0x87F8}, //13477 #CJK UNIFIED IDEOGRAPH + {0xCF80, 0x87FA}, //13478 #CJK UNIFIED IDEOGRAPH + {0xCF81, 0x87FB}, //13479 #CJK UNIFIED IDEOGRAPH + {0xCF82, 0x87FC}, //13480 #CJK UNIFIED IDEOGRAPH + {0xCF83, 0x87FD}, //13481 #CJK UNIFIED IDEOGRAPH + {0xCF84, 0x87FF}, //13482 #CJK UNIFIED IDEOGRAPH + {0xCF85, 0x8800}, //13483 #CJK UNIFIED IDEOGRAPH + {0xCF86, 0x8801}, //13484 #CJK UNIFIED IDEOGRAPH + {0xCF87, 0x8802}, //13485 #CJK UNIFIED IDEOGRAPH + {0xCF88, 0x8804}, //13486 #CJK UNIFIED IDEOGRAPH + {0xCF89, 0x8805}, //13487 #CJK UNIFIED IDEOGRAPH + {0xCF8A, 0x8806}, //13488 #CJK UNIFIED IDEOGRAPH + {0xCF8B, 0x8807}, //13489 #CJK UNIFIED IDEOGRAPH + {0xCF8C, 0x8808}, //13490 #CJK UNIFIED IDEOGRAPH + {0xCF8D, 0x8809}, //13491 #CJK UNIFIED IDEOGRAPH + {0xCF8E, 0x880B}, //13492 #CJK UNIFIED IDEOGRAPH + {0xCF8F, 0x880C}, //13493 #CJK UNIFIED IDEOGRAPH + {0xCF90, 0x880D}, //13494 #CJK UNIFIED IDEOGRAPH + {0xCF91, 0x880E}, //13495 #CJK UNIFIED IDEOGRAPH + {0xCF92, 0x880F}, //13496 #CJK UNIFIED IDEOGRAPH + {0xCF93, 0x8810}, //13497 #CJK UNIFIED IDEOGRAPH + {0xCF94, 0x8811}, //13498 #CJK UNIFIED IDEOGRAPH + {0xCF95, 0x8812}, //13499 #CJK UNIFIED IDEOGRAPH + {0xCF96, 0x8814}, //13500 #CJK UNIFIED IDEOGRAPH + {0xCF97, 0x8817}, //13501 #CJK UNIFIED IDEOGRAPH + {0xCF98, 0x8818}, //13502 #CJK UNIFIED IDEOGRAPH + {0xCF99, 0x8819}, //13503 #CJK UNIFIED IDEOGRAPH + {0xCF9A, 0x881A}, //13504 #CJK UNIFIED IDEOGRAPH + {0xCF9B, 0x881C}, //13505 #CJK UNIFIED IDEOGRAPH + {0xCF9C, 0x881D}, //13506 #CJK UNIFIED IDEOGRAPH + {0xCF9D, 0x881E}, //13507 #CJK UNIFIED IDEOGRAPH + {0xCF9E, 0x881F}, //13508 #CJK UNIFIED IDEOGRAPH + {0xCF9F, 0x8820}, //13509 #CJK UNIFIED IDEOGRAPH + {0xCFA0, 0x8823}, //13510 #CJK UNIFIED IDEOGRAPH + {0xCFA1, 0x7A00}, //13511 #CJK UNIFIED IDEOGRAPH + {0xCFA2, 0x606F}, //13512 #CJK UNIFIED IDEOGRAPH + {0xCFA3, 0x5E0C}, //13513 #CJK UNIFIED IDEOGRAPH + {0xCFA4, 0x6089}, //13514 #CJK UNIFIED IDEOGRAPH + {0xCFA5, 0x819D}, //13515 #CJK UNIFIED IDEOGRAPH + {0xCFA6, 0x5915}, //13516 #CJK UNIFIED IDEOGRAPH + {0xCFA7, 0x60DC}, //13517 #CJK UNIFIED IDEOGRAPH + {0xCFA8, 0x7184}, //13518 #CJK UNIFIED IDEOGRAPH + {0xCFA9, 0x70EF}, //13519 #CJK UNIFIED IDEOGRAPH + {0xCFAA, 0x6EAA}, //13520 #CJK UNIFIED IDEOGRAPH + {0xCFAB, 0x6C50}, //13521 #CJK UNIFIED IDEOGRAPH + {0xCFAC, 0x7280}, //13522 #CJK UNIFIED IDEOGRAPH + {0xCFAD, 0x6A84}, //13523 #CJK UNIFIED IDEOGRAPH + {0xCFAE, 0x88AD}, //13524 #CJK UNIFIED IDEOGRAPH + {0xCFAF, 0x5E2D}, //13525 #CJK UNIFIED IDEOGRAPH + {0xCFB0, 0x4E60}, //13526 #CJK UNIFIED IDEOGRAPH + {0xCFB1, 0x5AB3}, //13527 #CJK UNIFIED IDEOGRAPH + {0xCFB2, 0x559C}, //13528 #CJK UNIFIED IDEOGRAPH + {0xCFB3, 0x94E3}, //13529 #CJK UNIFIED IDEOGRAPH + {0xCFB4, 0x6D17}, //13530 #CJK UNIFIED IDEOGRAPH + {0xCFB5, 0x7CFB}, //13531 #CJK UNIFIED IDEOGRAPH + {0xCFB6, 0x9699}, //13532 #CJK UNIFIED IDEOGRAPH + {0xCFB7, 0x620F}, //13533 #CJK UNIFIED IDEOGRAPH + {0xCFB8, 0x7EC6}, //13534 #CJK UNIFIED IDEOGRAPH + {0xCFB9, 0x778E}, //13535 #CJK UNIFIED IDEOGRAPH + {0xCFBA, 0x867E}, //13536 #CJK UNIFIED IDEOGRAPH + {0xCFBB, 0x5323}, //13537 #CJK UNIFIED IDEOGRAPH + {0xCFBC, 0x971E}, //13538 #CJK UNIFIED IDEOGRAPH + {0xCFBD, 0x8F96}, //13539 #CJK UNIFIED IDEOGRAPH + {0xCFBE, 0x6687}, //13540 #CJK UNIFIED IDEOGRAPH + {0xCFBF, 0x5CE1}, //13541 #CJK UNIFIED IDEOGRAPH + {0xCFC0, 0x4FA0}, //13542 #CJK UNIFIED IDEOGRAPH + {0xCFC1, 0x72ED}, //13543 #CJK UNIFIED IDEOGRAPH + {0xCFC2, 0x4E0B}, //13544 #CJK UNIFIED IDEOGRAPH + {0xCFC3, 0x53A6}, //13545 #CJK UNIFIED IDEOGRAPH + {0xCFC4, 0x590F}, //13546 #CJK UNIFIED IDEOGRAPH + {0xCFC5, 0x5413}, //13547 #CJK UNIFIED IDEOGRAPH + {0xCFC6, 0x6380}, //13548 #CJK UNIFIED IDEOGRAPH + {0xCFC7, 0x9528}, //13549 #CJK UNIFIED IDEOGRAPH + {0xCFC8, 0x5148}, //13550 #CJK UNIFIED IDEOGRAPH + {0xCFC9, 0x4ED9}, //13551 #CJK UNIFIED IDEOGRAPH + {0xCFCA, 0x9C9C}, //13552 #CJK UNIFIED IDEOGRAPH + {0xCFCB, 0x7EA4}, //13553 #CJK UNIFIED IDEOGRAPH + {0xCFCC, 0x54B8}, //13554 #CJK UNIFIED IDEOGRAPH + {0xCFCD, 0x8D24}, //13555 #CJK UNIFIED IDEOGRAPH + {0xCFCE, 0x8854}, //13556 #CJK UNIFIED IDEOGRAPH + {0xCFCF, 0x8237}, //13557 #CJK UNIFIED IDEOGRAPH + {0xCFD0, 0x95F2}, //13558 #CJK UNIFIED IDEOGRAPH + {0xCFD1, 0x6D8E}, //13559 #CJK UNIFIED IDEOGRAPH + {0xCFD2, 0x5F26}, //13560 #CJK UNIFIED IDEOGRAPH + {0xCFD3, 0x5ACC}, //13561 #CJK UNIFIED IDEOGRAPH + {0xCFD4, 0x663E}, //13562 #CJK UNIFIED IDEOGRAPH + {0xCFD5, 0x9669}, //13563 #CJK UNIFIED IDEOGRAPH + {0xCFD6, 0x73B0}, //13564 #CJK UNIFIED IDEOGRAPH + {0xCFD7, 0x732E}, //13565 #CJK UNIFIED IDEOGRAPH + {0xCFD8, 0x53BF}, //13566 #CJK UNIFIED IDEOGRAPH + {0xCFD9, 0x817A}, //13567 #CJK UNIFIED IDEOGRAPH + {0xCFDA, 0x9985}, //13568 #CJK UNIFIED IDEOGRAPH + {0xCFDB, 0x7FA1}, //13569 #CJK UNIFIED IDEOGRAPH + {0xCFDC, 0x5BAA}, //13570 #CJK UNIFIED IDEOGRAPH + {0xCFDD, 0x9677}, //13571 #CJK UNIFIED IDEOGRAPH + {0xCFDE, 0x9650}, //13572 #CJK UNIFIED IDEOGRAPH + {0xCFDF, 0x7EBF}, //13573 #CJK UNIFIED IDEOGRAPH + {0xCFE0, 0x76F8}, //13574 #CJK UNIFIED IDEOGRAPH + {0xCFE1, 0x53A2}, //13575 #CJK UNIFIED IDEOGRAPH + {0xCFE2, 0x9576}, //13576 #CJK UNIFIED IDEOGRAPH + {0xCFE3, 0x9999}, //13577 #CJK UNIFIED IDEOGRAPH + {0xCFE4, 0x7BB1}, //13578 #CJK UNIFIED IDEOGRAPH + {0xCFE5, 0x8944}, //13579 #CJK UNIFIED IDEOGRAPH + {0xCFE6, 0x6E58}, //13580 #CJK UNIFIED IDEOGRAPH + {0xCFE7, 0x4E61}, //13581 #CJK UNIFIED IDEOGRAPH + {0xCFE8, 0x7FD4}, //13582 #CJK UNIFIED IDEOGRAPH + {0xCFE9, 0x7965}, //13583 #CJK UNIFIED IDEOGRAPH + {0xCFEA, 0x8BE6}, //13584 #CJK UNIFIED IDEOGRAPH + {0xCFEB, 0x60F3}, //13585 #CJK UNIFIED IDEOGRAPH + {0xCFEC, 0x54CD}, //13586 #CJK UNIFIED IDEOGRAPH + {0xCFED, 0x4EAB}, //13587 #CJK UNIFIED IDEOGRAPH + {0xCFEE, 0x9879}, //13588 #CJK UNIFIED IDEOGRAPH + {0xCFEF, 0x5DF7}, //13589 #CJK UNIFIED IDEOGRAPH + {0xCFF0, 0x6A61}, //13590 #CJK UNIFIED IDEOGRAPH + {0xCFF1, 0x50CF}, //13591 #CJK UNIFIED IDEOGRAPH + {0xCFF2, 0x5411}, //13592 #CJK UNIFIED IDEOGRAPH + {0xCFF3, 0x8C61}, //13593 #CJK UNIFIED IDEOGRAPH + {0xCFF4, 0x8427}, //13594 #CJK UNIFIED IDEOGRAPH + {0xCFF5, 0x785D}, //13595 #CJK UNIFIED IDEOGRAPH + {0xCFF6, 0x9704}, //13596 #CJK UNIFIED IDEOGRAPH + {0xCFF7, 0x524A}, //13597 #CJK UNIFIED IDEOGRAPH + {0xCFF8, 0x54EE}, //13598 #CJK UNIFIED IDEOGRAPH + {0xCFF9, 0x56A3}, //13599 #CJK UNIFIED IDEOGRAPH + {0xCFFA, 0x9500}, //13600 #CJK UNIFIED IDEOGRAPH + {0xCFFB, 0x6D88}, //13601 #CJK UNIFIED IDEOGRAPH + {0xCFFC, 0x5BB5}, //13602 #CJK UNIFIED IDEOGRAPH + {0xCFFD, 0x6DC6}, //13603 #CJK UNIFIED IDEOGRAPH + {0xCFFE, 0x6653}, //13604 #CJK UNIFIED IDEOGRAPH + {0xD040, 0x8824}, //13605 #CJK UNIFIED IDEOGRAPH + {0xD041, 0x8825}, //13606 #CJK UNIFIED IDEOGRAPH + {0xD042, 0x8826}, //13607 #CJK UNIFIED IDEOGRAPH + {0xD043, 0x8827}, //13608 #CJK UNIFIED IDEOGRAPH + {0xD044, 0x8828}, //13609 #CJK UNIFIED IDEOGRAPH + {0xD045, 0x8829}, //13610 #CJK UNIFIED IDEOGRAPH + {0xD046, 0x882A}, //13611 #CJK UNIFIED IDEOGRAPH + {0xD047, 0x882B}, //13612 #CJK UNIFIED IDEOGRAPH + {0xD048, 0x882C}, //13613 #CJK UNIFIED IDEOGRAPH + {0xD049, 0x882D}, //13614 #CJK UNIFIED IDEOGRAPH + {0xD04A, 0x882E}, //13615 #CJK UNIFIED IDEOGRAPH + {0xD04B, 0x882F}, //13616 #CJK UNIFIED IDEOGRAPH + {0xD04C, 0x8830}, //13617 #CJK UNIFIED IDEOGRAPH + {0xD04D, 0x8831}, //13618 #CJK UNIFIED IDEOGRAPH + {0xD04E, 0x8833}, //13619 #CJK UNIFIED IDEOGRAPH + {0xD04F, 0x8834}, //13620 #CJK UNIFIED IDEOGRAPH + {0xD050, 0x8835}, //13621 #CJK UNIFIED IDEOGRAPH + {0xD051, 0x8836}, //13622 #CJK UNIFIED IDEOGRAPH + {0xD052, 0x8837}, //13623 #CJK UNIFIED IDEOGRAPH + {0xD053, 0x8838}, //13624 #CJK UNIFIED IDEOGRAPH + {0xD054, 0x883A}, //13625 #CJK UNIFIED IDEOGRAPH + {0xD055, 0x883B}, //13626 #CJK UNIFIED IDEOGRAPH + {0xD056, 0x883D}, //13627 #CJK UNIFIED IDEOGRAPH + {0xD057, 0x883E}, //13628 #CJK UNIFIED IDEOGRAPH + {0xD058, 0x883F}, //13629 #CJK UNIFIED IDEOGRAPH + {0xD059, 0x8841}, //13630 #CJK UNIFIED IDEOGRAPH + {0xD05A, 0x8842}, //13631 #CJK UNIFIED IDEOGRAPH + {0xD05B, 0x8843}, //13632 #CJK UNIFIED IDEOGRAPH + {0xD05C, 0x8846}, //13633 #CJK UNIFIED IDEOGRAPH + {0xD05D, 0x8847}, //13634 #CJK UNIFIED IDEOGRAPH + {0xD05E, 0x8848}, //13635 #CJK UNIFIED IDEOGRAPH + {0xD05F, 0x8849}, //13636 #CJK UNIFIED IDEOGRAPH + {0xD060, 0x884A}, //13637 #CJK UNIFIED IDEOGRAPH + {0xD061, 0x884B}, //13638 #CJK UNIFIED IDEOGRAPH + {0xD062, 0x884E}, //13639 #CJK UNIFIED IDEOGRAPH + {0xD063, 0x884F}, //13640 #CJK UNIFIED IDEOGRAPH + {0xD064, 0x8850}, //13641 #CJK UNIFIED IDEOGRAPH + {0xD065, 0x8851}, //13642 #CJK UNIFIED IDEOGRAPH + {0xD066, 0x8852}, //13643 #CJK UNIFIED IDEOGRAPH + {0xD067, 0x8853}, //13644 #CJK UNIFIED IDEOGRAPH + {0xD068, 0x8855}, //13645 #CJK UNIFIED IDEOGRAPH + {0xD069, 0x8856}, //13646 #CJK UNIFIED IDEOGRAPH + {0xD06A, 0x8858}, //13647 #CJK UNIFIED IDEOGRAPH + {0xD06B, 0x885A}, //13648 #CJK UNIFIED IDEOGRAPH + {0xD06C, 0x885B}, //13649 #CJK UNIFIED IDEOGRAPH + {0xD06D, 0x885C}, //13650 #CJK UNIFIED IDEOGRAPH + {0xD06E, 0x885D}, //13651 #CJK UNIFIED IDEOGRAPH + {0xD06F, 0x885E}, //13652 #CJK UNIFIED IDEOGRAPH + {0xD070, 0x885F}, //13653 #CJK UNIFIED IDEOGRAPH + {0xD071, 0x8860}, //13654 #CJK UNIFIED IDEOGRAPH + {0xD072, 0x8866}, //13655 #CJK UNIFIED IDEOGRAPH + {0xD073, 0x8867}, //13656 #CJK UNIFIED IDEOGRAPH + {0xD074, 0x886A}, //13657 #CJK UNIFIED IDEOGRAPH + {0xD075, 0x886D}, //13658 #CJK UNIFIED IDEOGRAPH + {0xD076, 0x886F}, //13659 #CJK UNIFIED IDEOGRAPH + {0xD077, 0x8871}, //13660 #CJK UNIFIED IDEOGRAPH + {0xD078, 0x8873}, //13661 #CJK UNIFIED IDEOGRAPH + {0xD079, 0x8874}, //13662 #CJK UNIFIED IDEOGRAPH + {0xD07A, 0x8875}, //13663 #CJK UNIFIED IDEOGRAPH + {0xD07B, 0x8876}, //13664 #CJK UNIFIED IDEOGRAPH + {0xD07C, 0x8878}, //13665 #CJK UNIFIED IDEOGRAPH + {0xD07D, 0x8879}, //13666 #CJK UNIFIED IDEOGRAPH + {0xD07E, 0x887A}, //13667 #CJK UNIFIED IDEOGRAPH + {0xD080, 0x887B}, //13668 #CJK UNIFIED IDEOGRAPH + {0xD081, 0x887C}, //13669 #CJK UNIFIED IDEOGRAPH + {0xD082, 0x8880}, //13670 #CJK UNIFIED IDEOGRAPH + {0xD083, 0x8883}, //13671 #CJK UNIFIED IDEOGRAPH + {0xD084, 0x8886}, //13672 #CJK UNIFIED IDEOGRAPH + {0xD085, 0x8887}, //13673 #CJK UNIFIED IDEOGRAPH + {0xD086, 0x8889}, //13674 #CJK UNIFIED IDEOGRAPH + {0xD087, 0x888A}, //13675 #CJK UNIFIED IDEOGRAPH + {0xD088, 0x888C}, //13676 #CJK UNIFIED IDEOGRAPH + {0xD089, 0x888E}, //13677 #CJK UNIFIED IDEOGRAPH + {0xD08A, 0x888F}, //13678 #CJK UNIFIED IDEOGRAPH + {0xD08B, 0x8890}, //13679 #CJK UNIFIED IDEOGRAPH + {0xD08C, 0x8891}, //13680 #CJK UNIFIED IDEOGRAPH + {0xD08D, 0x8893}, //13681 #CJK UNIFIED IDEOGRAPH + {0xD08E, 0x8894}, //13682 #CJK UNIFIED IDEOGRAPH + {0xD08F, 0x8895}, //13683 #CJK UNIFIED IDEOGRAPH + {0xD090, 0x8897}, //13684 #CJK UNIFIED IDEOGRAPH + {0xD091, 0x8898}, //13685 #CJK UNIFIED IDEOGRAPH + {0xD092, 0x8899}, //13686 #CJK UNIFIED IDEOGRAPH + {0xD093, 0x889A}, //13687 #CJK UNIFIED IDEOGRAPH + {0xD094, 0x889B}, //13688 #CJK UNIFIED IDEOGRAPH + {0xD095, 0x889D}, //13689 #CJK UNIFIED IDEOGRAPH + {0xD096, 0x889E}, //13690 #CJK UNIFIED IDEOGRAPH + {0xD097, 0x889F}, //13691 #CJK UNIFIED IDEOGRAPH + {0xD098, 0x88A0}, //13692 #CJK UNIFIED IDEOGRAPH + {0xD099, 0x88A1}, //13693 #CJK UNIFIED IDEOGRAPH + {0xD09A, 0x88A3}, //13694 #CJK UNIFIED IDEOGRAPH + {0xD09B, 0x88A5}, //13695 #CJK UNIFIED IDEOGRAPH + {0xD09C, 0x88A6}, //13696 #CJK UNIFIED IDEOGRAPH + {0xD09D, 0x88A7}, //13697 #CJK UNIFIED IDEOGRAPH + {0xD09E, 0x88A8}, //13698 #CJK UNIFIED IDEOGRAPH + {0xD09F, 0x88A9}, //13699 #CJK UNIFIED IDEOGRAPH + {0xD0A0, 0x88AA}, //13700 #CJK UNIFIED IDEOGRAPH + {0xD0A1, 0x5C0F}, //13701 #CJK UNIFIED IDEOGRAPH + {0xD0A2, 0x5B5D}, //13702 #CJK UNIFIED IDEOGRAPH + {0xD0A3, 0x6821}, //13703 #CJK UNIFIED IDEOGRAPH + {0xD0A4, 0x8096}, //13704 #CJK UNIFIED IDEOGRAPH + {0xD0A5, 0x5578}, //13705 #CJK UNIFIED IDEOGRAPH + {0xD0A6, 0x7B11}, //13706 #CJK UNIFIED IDEOGRAPH + {0xD0A7, 0x6548}, //13707 #CJK UNIFIED IDEOGRAPH + {0xD0A8, 0x6954}, //13708 #CJK UNIFIED IDEOGRAPH + {0xD0A9, 0x4E9B}, //13709 #CJK UNIFIED IDEOGRAPH + {0xD0AA, 0x6B47}, //13710 #CJK UNIFIED IDEOGRAPH + {0xD0AB, 0x874E}, //13711 #CJK UNIFIED IDEOGRAPH + {0xD0AC, 0x978B}, //13712 #CJK UNIFIED IDEOGRAPH + {0xD0AD, 0x534F}, //13713 #CJK UNIFIED IDEOGRAPH + {0xD0AE, 0x631F}, //13714 #CJK UNIFIED IDEOGRAPH + {0xD0AF, 0x643A}, //13715 #CJK UNIFIED IDEOGRAPH + {0xD0B0, 0x90AA}, //13716 #CJK UNIFIED IDEOGRAPH + {0xD0B1, 0x659C}, //13717 #CJK UNIFIED IDEOGRAPH + {0xD0B2, 0x80C1}, //13718 #CJK UNIFIED IDEOGRAPH + {0xD0B3, 0x8C10}, //13719 #CJK UNIFIED IDEOGRAPH + {0xD0B4, 0x5199}, //13720 #CJK UNIFIED IDEOGRAPH + {0xD0B5, 0x68B0}, //13721 #CJK UNIFIED IDEOGRAPH + {0xD0B6, 0x5378}, //13722 #CJK UNIFIED IDEOGRAPH + {0xD0B7, 0x87F9}, //13723 #CJK UNIFIED IDEOGRAPH + {0xD0B8, 0x61C8}, //13724 #CJK UNIFIED IDEOGRAPH + {0xD0B9, 0x6CC4}, //13725 #CJK UNIFIED IDEOGRAPH + {0xD0BA, 0x6CFB}, //13726 #CJK UNIFIED IDEOGRAPH + {0xD0BB, 0x8C22}, //13727 #CJK UNIFIED IDEOGRAPH + {0xD0BC, 0x5C51}, //13728 #CJK UNIFIED IDEOGRAPH + {0xD0BD, 0x85AA}, //13729 #CJK UNIFIED IDEOGRAPH + {0xD0BE, 0x82AF}, //13730 #CJK UNIFIED IDEOGRAPH + {0xD0BF, 0x950C}, //13731 #CJK UNIFIED IDEOGRAPH + {0xD0C0, 0x6B23}, //13732 #CJK UNIFIED IDEOGRAPH + {0xD0C1, 0x8F9B}, //13733 #CJK UNIFIED IDEOGRAPH + {0xD0C2, 0x65B0}, //13734 #CJK UNIFIED IDEOGRAPH + {0xD0C3, 0x5FFB}, //13735 #CJK UNIFIED IDEOGRAPH + {0xD0C4, 0x5FC3}, //13736 #CJK UNIFIED IDEOGRAPH + {0xD0C5, 0x4FE1}, //13737 #CJK UNIFIED IDEOGRAPH + {0xD0C6, 0x8845}, //13738 #CJK UNIFIED IDEOGRAPH + {0xD0C7, 0x661F}, //13739 #CJK UNIFIED IDEOGRAPH + {0xD0C8, 0x8165}, //13740 #CJK UNIFIED IDEOGRAPH + {0xD0C9, 0x7329}, //13741 #CJK UNIFIED IDEOGRAPH + {0xD0CA, 0x60FA}, //13742 #CJK UNIFIED IDEOGRAPH + {0xD0CB, 0x5174}, //13743 #CJK UNIFIED IDEOGRAPH + {0xD0CC, 0x5211}, //13744 #CJK UNIFIED IDEOGRAPH + {0xD0CD, 0x578B}, //13745 #CJK UNIFIED IDEOGRAPH + {0xD0CE, 0x5F62}, //13746 #CJK UNIFIED IDEOGRAPH + {0xD0CF, 0x90A2}, //13747 #CJK UNIFIED IDEOGRAPH + {0xD0D0, 0x884C}, //13748 #CJK UNIFIED IDEOGRAPH + {0xD0D1, 0x9192}, //13749 #CJK UNIFIED IDEOGRAPH + {0xD0D2, 0x5E78}, //13750 #CJK UNIFIED IDEOGRAPH + {0xD0D3, 0x674F}, //13751 #CJK UNIFIED IDEOGRAPH + {0xD0D4, 0x6027}, //13752 #CJK UNIFIED IDEOGRAPH + {0xD0D5, 0x59D3}, //13753 #CJK UNIFIED IDEOGRAPH + {0xD0D6, 0x5144}, //13754 #CJK UNIFIED IDEOGRAPH + {0xD0D7, 0x51F6}, //13755 #CJK UNIFIED IDEOGRAPH + {0xD0D8, 0x80F8}, //13756 #CJK UNIFIED IDEOGRAPH + {0xD0D9, 0x5308}, //13757 #CJK UNIFIED IDEOGRAPH + {0xD0DA, 0x6C79}, //13758 #CJK UNIFIED IDEOGRAPH + {0xD0DB, 0x96C4}, //13759 #CJK UNIFIED IDEOGRAPH + {0xD0DC, 0x718A}, //13760 #CJK UNIFIED IDEOGRAPH + {0xD0DD, 0x4F11}, //13761 #CJK UNIFIED IDEOGRAPH + {0xD0DE, 0x4FEE}, //13762 #CJK UNIFIED IDEOGRAPH + {0xD0DF, 0x7F9E}, //13763 #CJK UNIFIED IDEOGRAPH + {0xD0E0, 0x673D}, //13764 #CJK UNIFIED IDEOGRAPH + {0xD0E1, 0x55C5}, //13765 #CJK UNIFIED IDEOGRAPH + {0xD0E2, 0x9508}, //13766 #CJK UNIFIED IDEOGRAPH + {0xD0E3, 0x79C0}, //13767 #CJK UNIFIED IDEOGRAPH + {0xD0E4, 0x8896}, //13768 #CJK UNIFIED IDEOGRAPH + {0xD0E5, 0x7EE3}, //13769 #CJK UNIFIED IDEOGRAPH + {0xD0E6, 0x589F}, //13770 #CJK UNIFIED IDEOGRAPH + {0xD0E7, 0x620C}, //13771 #CJK UNIFIED IDEOGRAPH + {0xD0E8, 0x9700}, //13772 #CJK UNIFIED IDEOGRAPH + {0xD0E9, 0x865A}, //13773 #CJK UNIFIED IDEOGRAPH + {0xD0EA, 0x5618}, //13774 #CJK UNIFIED IDEOGRAPH + {0xD0EB, 0x987B}, //13775 #CJK UNIFIED IDEOGRAPH + {0xD0EC, 0x5F90}, //13776 #CJK UNIFIED IDEOGRAPH + {0xD0ED, 0x8BB8}, //13777 #CJK UNIFIED IDEOGRAPH + {0xD0EE, 0x84C4}, //13778 #CJK UNIFIED IDEOGRAPH + {0xD0EF, 0x9157}, //13779 #CJK UNIFIED IDEOGRAPH + {0xD0F0, 0x53D9}, //13780 #CJK UNIFIED IDEOGRAPH + {0xD0F1, 0x65ED}, //13781 #CJK UNIFIED IDEOGRAPH + {0xD0F2, 0x5E8F}, //13782 #CJK UNIFIED IDEOGRAPH + {0xD0F3, 0x755C}, //13783 #CJK UNIFIED IDEOGRAPH + {0xD0F4, 0x6064}, //13784 #CJK UNIFIED IDEOGRAPH + {0xD0F5, 0x7D6E}, //13785 #CJK UNIFIED IDEOGRAPH + {0xD0F6, 0x5A7F}, //13786 #CJK UNIFIED IDEOGRAPH + {0xD0F7, 0x7EEA}, //13787 #CJK UNIFIED IDEOGRAPH + {0xD0F8, 0x7EED}, //13788 #CJK UNIFIED IDEOGRAPH + {0xD0F9, 0x8F69}, //13789 #CJK UNIFIED IDEOGRAPH + {0xD0FA, 0x55A7}, //13790 #CJK UNIFIED IDEOGRAPH + {0xD0FB, 0x5BA3}, //13791 #CJK UNIFIED IDEOGRAPH + {0xD0FC, 0x60AC}, //13792 #CJK UNIFIED IDEOGRAPH + {0xD0FD, 0x65CB}, //13793 #CJK UNIFIED IDEOGRAPH + {0xD0FE, 0x7384}, //13794 #CJK UNIFIED IDEOGRAPH + {0xD140, 0x88AC}, //13795 #CJK UNIFIED IDEOGRAPH + {0xD141, 0x88AE}, //13796 #CJK UNIFIED IDEOGRAPH + {0xD142, 0x88AF}, //13797 #CJK UNIFIED IDEOGRAPH + {0xD143, 0x88B0}, //13798 #CJK UNIFIED IDEOGRAPH + {0xD144, 0x88B2}, //13799 #CJK UNIFIED IDEOGRAPH + {0xD145, 0x88B3}, //13800 #CJK UNIFIED IDEOGRAPH + {0xD146, 0x88B4}, //13801 #CJK UNIFIED IDEOGRAPH + {0xD147, 0x88B5}, //13802 #CJK UNIFIED IDEOGRAPH + {0xD148, 0x88B6}, //13803 #CJK UNIFIED IDEOGRAPH + {0xD149, 0x88B8}, //13804 #CJK UNIFIED IDEOGRAPH + {0xD14A, 0x88B9}, //13805 #CJK UNIFIED IDEOGRAPH + {0xD14B, 0x88BA}, //13806 #CJK UNIFIED IDEOGRAPH + {0xD14C, 0x88BB}, //13807 #CJK UNIFIED IDEOGRAPH + {0xD14D, 0x88BD}, //13808 #CJK UNIFIED IDEOGRAPH + {0xD14E, 0x88BE}, //13809 #CJK UNIFIED IDEOGRAPH + {0xD14F, 0x88BF}, //13810 #CJK UNIFIED IDEOGRAPH + {0xD150, 0x88C0}, //13811 #CJK UNIFIED IDEOGRAPH + {0xD151, 0x88C3}, //13812 #CJK UNIFIED IDEOGRAPH + {0xD152, 0x88C4}, //13813 #CJK UNIFIED IDEOGRAPH + {0xD153, 0x88C7}, //13814 #CJK UNIFIED IDEOGRAPH + {0xD154, 0x88C8}, //13815 #CJK UNIFIED IDEOGRAPH + {0xD155, 0x88CA}, //13816 #CJK UNIFIED IDEOGRAPH + {0xD156, 0x88CB}, //13817 #CJK UNIFIED IDEOGRAPH + {0xD157, 0x88CC}, //13818 #CJK UNIFIED IDEOGRAPH + {0xD158, 0x88CD}, //13819 #CJK UNIFIED IDEOGRAPH + {0xD159, 0x88CF}, //13820 #CJK UNIFIED IDEOGRAPH + {0xD15A, 0x88D0}, //13821 #CJK UNIFIED IDEOGRAPH + {0xD15B, 0x88D1}, //13822 #CJK UNIFIED IDEOGRAPH + {0xD15C, 0x88D3}, //13823 #CJK UNIFIED IDEOGRAPH + {0xD15D, 0x88D6}, //13824 #CJK UNIFIED IDEOGRAPH + {0xD15E, 0x88D7}, //13825 #CJK UNIFIED IDEOGRAPH + {0xD15F, 0x88DA}, //13826 #CJK UNIFIED IDEOGRAPH + {0xD160, 0x88DB}, //13827 #CJK UNIFIED IDEOGRAPH + {0xD161, 0x88DC}, //13828 #CJK UNIFIED IDEOGRAPH + {0xD162, 0x88DD}, //13829 #CJK UNIFIED IDEOGRAPH + {0xD163, 0x88DE}, //13830 #CJK UNIFIED IDEOGRAPH + {0xD164, 0x88E0}, //13831 #CJK UNIFIED IDEOGRAPH + {0xD165, 0x88E1}, //13832 #CJK UNIFIED IDEOGRAPH + {0xD166, 0x88E6}, //13833 #CJK UNIFIED IDEOGRAPH + {0xD167, 0x88E7}, //13834 #CJK UNIFIED IDEOGRAPH + {0xD168, 0x88E9}, //13835 #CJK UNIFIED IDEOGRAPH + {0xD169, 0x88EA}, //13836 #CJK UNIFIED IDEOGRAPH + {0xD16A, 0x88EB}, //13837 #CJK UNIFIED IDEOGRAPH + {0xD16B, 0x88EC}, //13838 #CJK UNIFIED IDEOGRAPH + {0xD16C, 0x88ED}, //13839 #CJK UNIFIED IDEOGRAPH + {0xD16D, 0x88EE}, //13840 #CJK UNIFIED IDEOGRAPH + {0xD16E, 0x88EF}, //13841 #CJK UNIFIED IDEOGRAPH + {0xD16F, 0x88F2}, //13842 #CJK UNIFIED IDEOGRAPH + {0xD170, 0x88F5}, //13843 #CJK UNIFIED IDEOGRAPH + {0xD171, 0x88F6}, //13844 #CJK UNIFIED IDEOGRAPH + {0xD172, 0x88F7}, //13845 #CJK UNIFIED IDEOGRAPH + {0xD173, 0x88FA}, //13846 #CJK UNIFIED IDEOGRAPH + {0xD174, 0x88FB}, //13847 #CJK UNIFIED IDEOGRAPH + {0xD175, 0x88FD}, //13848 #CJK UNIFIED IDEOGRAPH + {0xD176, 0x88FF}, //13849 #CJK UNIFIED IDEOGRAPH + {0xD177, 0x8900}, //13850 #CJK UNIFIED IDEOGRAPH + {0xD178, 0x8901}, //13851 #CJK UNIFIED IDEOGRAPH + {0xD179, 0x8903}, //13852 #CJK UNIFIED IDEOGRAPH + {0xD17A, 0x8904}, //13853 #CJK UNIFIED IDEOGRAPH + {0xD17B, 0x8905}, //13854 #CJK UNIFIED IDEOGRAPH + {0xD17C, 0x8906}, //13855 #CJK UNIFIED IDEOGRAPH + {0xD17D, 0x8907}, //13856 #CJK UNIFIED IDEOGRAPH + {0xD17E, 0x8908}, //13857 #CJK UNIFIED IDEOGRAPH + {0xD180, 0x8909}, //13858 #CJK UNIFIED IDEOGRAPH + {0xD181, 0x890B}, //13859 #CJK UNIFIED IDEOGRAPH + {0xD182, 0x890C}, //13860 #CJK UNIFIED IDEOGRAPH + {0xD183, 0x890D}, //13861 #CJK UNIFIED IDEOGRAPH + {0xD184, 0x890E}, //13862 #CJK UNIFIED IDEOGRAPH + {0xD185, 0x890F}, //13863 #CJK UNIFIED IDEOGRAPH + {0xD186, 0x8911}, //13864 #CJK UNIFIED IDEOGRAPH + {0xD187, 0x8914}, //13865 #CJK UNIFIED IDEOGRAPH + {0xD188, 0x8915}, //13866 #CJK UNIFIED IDEOGRAPH + {0xD189, 0x8916}, //13867 #CJK UNIFIED IDEOGRAPH + {0xD18A, 0x8917}, //13868 #CJK UNIFIED IDEOGRAPH + {0xD18B, 0x8918}, //13869 #CJK UNIFIED IDEOGRAPH + {0xD18C, 0x891C}, //13870 #CJK UNIFIED IDEOGRAPH + {0xD18D, 0x891D}, //13871 #CJK UNIFIED IDEOGRAPH + {0xD18E, 0x891E}, //13872 #CJK UNIFIED IDEOGRAPH + {0xD18F, 0x891F}, //13873 #CJK UNIFIED IDEOGRAPH + {0xD190, 0x8920}, //13874 #CJK UNIFIED IDEOGRAPH + {0xD191, 0x8922}, //13875 #CJK UNIFIED IDEOGRAPH + {0xD192, 0x8923}, //13876 #CJK UNIFIED IDEOGRAPH + {0xD193, 0x8924}, //13877 #CJK UNIFIED IDEOGRAPH + {0xD194, 0x8926}, //13878 #CJK UNIFIED IDEOGRAPH + {0xD195, 0x8927}, //13879 #CJK UNIFIED IDEOGRAPH + {0xD196, 0x8928}, //13880 #CJK UNIFIED IDEOGRAPH + {0xD197, 0x8929}, //13881 #CJK UNIFIED IDEOGRAPH + {0xD198, 0x892C}, //13882 #CJK UNIFIED IDEOGRAPH + {0xD199, 0x892D}, //13883 #CJK UNIFIED IDEOGRAPH + {0xD19A, 0x892E}, //13884 #CJK UNIFIED IDEOGRAPH + {0xD19B, 0x892F}, //13885 #CJK UNIFIED IDEOGRAPH + {0xD19C, 0x8931}, //13886 #CJK UNIFIED IDEOGRAPH + {0xD19D, 0x8932}, //13887 #CJK UNIFIED IDEOGRAPH + {0xD19E, 0x8933}, //13888 #CJK UNIFIED IDEOGRAPH + {0xD19F, 0x8935}, //13889 #CJK UNIFIED IDEOGRAPH + {0xD1A0, 0x8937}, //13890 #CJK UNIFIED IDEOGRAPH + {0xD1A1, 0x9009}, //13891 #CJK UNIFIED IDEOGRAPH + {0xD1A2, 0x7663}, //13892 #CJK UNIFIED IDEOGRAPH + {0xD1A3, 0x7729}, //13893 #CJK UNIFIED IDEOGRAPH + {0xD1A4, 0x7EDA}, //13894 #CJK UNIFIED IDEOGRAPH + {0xD1A5, 0x9774}, //13895 #CJK UNIFIED IDEOGRAPH + {0xD1A6, 0x859B}, //13896 #CJK UNIFIED IDEOGRAPH + {0xD1A7, 0x5B66}, //13897 #CJK UNIFIED IDEOGRAPH + {0xD1A8, 0x7A74}, //13898 #CJK UNIFIED IDEOGRAPH + {0xD1A9, 0x96EA}, //13899 #CJK UNIFIED IDEOGRAPH + {0xD1AA, 0x8840}, //13900 #CJK UNIFIED IDEOGRAPH + {0xD1AB, 0x52CB}, //13901 #CJK UNIFIED IDEOGRAPH + {0xD1AC, 0x718F}, //13902 #CJK UNIFIED IDEOGRAPH + {0xD1AD, 0x5FAA}, //13903 #CJK UNIFIED IDEOGRAPH + {0xD1AE, 0x65EC}, //13904 #CJK UNIFIED IDEOGRAPH + {0xD1AF, 0x8BE2}, //13905 #CJK UNIFIED IDEOGRAPH + {0xD1B0, 0x5BFB}, //13906 #CJK UNIFIED IDEOGRAPH + {0xD1B1, 0x9A6F}, //13907 #CJK UNIFIED IDEOGRAPH + {0xD1B2, 0x5DE1}, //13908 #CJK UNIFIED IDEOGRAPH + {0xD1B3, 0x6B89}, //13909 #CJK UNIFIED IDEOGRAPH + {0xD1B4, 0x6C5B}, //13910 #CJK UNIFIED IDEOGRAPH + {0xD1B5, 0x8BAD}, //13911 #CJK UNIFIED IDEOGRAPH + {0xD1B6, 0x8BAF}, //13912 #CJK UNIFIED IDEOGRAPH + {0xD1B7, 0x900A}, //13913 #CJK UNIFIED IDEOGRAPH + {0xD1B8, 0x8FC5}, //13914 #CJK UNIFIED IDEOGRAPH + {0xD1B9, 0x538B}, //13915 #CJK UNIFIED IDEOGRAPH + {0xD1BA, 0x62BC}, //13916 #CJK UNIFIED IDEOGRAPH + {0xD1BB, 0x9E26}, //13917 #CJK UNIFIED IDEOGRAPH + {0xD1BC, 0x9E2D}, //13918 #CJK UNIFIED IDEOGRAPH + {0xD1BD, 0x5440}, //13919 #CJK UNIFIED IDEOGRAPH + {0xD1BE, 0x4E2B}, //13920 #CJK UNIFIED IDEOGRAPH + {0xD1BF, 0x82BD}, //13921 #CJK UNIFIED IDEOGRAPH + {0xD1C0, 0x7259}, //13922 #CJK UNIFIED IDEOGRAPH + {0xD1C1, 0x869C}, //13923 #CJK UNIFIED IDEOGRAPH + {0xD1C2, 0x5D16}, //13924 #CJK UNIFIED IDEOGRAPH + {0xD1C3, 0x8859}, //13925 #CJK UNIFIED IDEOGRAPH + {0xD1C4, 0x6DAF}, //13926 #CJK UNIFIED IDEOGRAPH + {0xD1C5, 0x96C5}, //13927 #CJK UNIFIED IDEOGRAPH + {0xD1C6, 0x54D1}, //13928 #CJK UNIFIED IDEOGRAPH + {0xD1C7, 0x4E9A}, //13929 #CJK UNIFIED IDEOGRAPH + {0xD1C8, 0x8BB6}, //13930 #CJK UNIFIED IDEOGRAPH + {0xD1C9, 0x7109}, //13931 #CJK UNIFIED IDEOGRAPH + {0xD1CA, 0x54BD}, //13932 #CJK UNIFIED IDEOGRAPH + {0xD1CB, 0x9609}, //13933 #CJK UNIFIED IDEOGRAPH + {0xD1CC, 0x70DF}, //13934 #CJK UNIFIED IDEOGRAPH + {0xD1CD, 0x6DF9}, //13935 #CJK UNIFIED IDEOGRAPH + {0xD1CE, 0x76D0}, //13936 #CJK UNIFIED IDEOGRAPH + {0xD1CF, 0x4E25}, //13937 #CJK UNIFIED IDEOGRAPH + {0xD1D0, 0x7814}, //13938 #CJK UNIFIED IDEOGRAPH + {0xD1D1, 0x8712}, //13939 #CJK UNIFIED IDEOGRAPH + {0xD1D2, 0x5CA9}, //13940 #CJK UNIFIED IDEOGRAPH + {0xD1D3, 0x5EF6}, //13941 #CJK UNIFIED IDEOGRAPH + {0xD1D4, 0x8A00}, //13942 #CJK UNIFIED IDEOGRAPH + {0xD1D5, 0x989C}, //13943 #CJK UNIFIED IDEOGRAPH + {0xD1D6, 0x960E}, //13944 #CJK UNIFIED IDEOGRAPH + {0xD1D7, 0x708E}, //13945 #CJK UNIFIED IDEOGRAPH + {0xD1D8, 0x6CBF}, //13946 #CJK UNIFIED IDEOGRAPH + {0xD1D9, 0x5944}, //13947 #CJK UNIFIED IDEOGRAPH + {0xD1DA, 0x63A9}, //13948 #CJK UNIFIED IDEOGRAPH + {0xD1DB, 0x773C}, //13949 #CJK UNIFIED IDEOGRAPH + {0xD1DC, 0x884D}, //13950 #CJK UNIFIED IDEOGRAPH + {0xD1DD, 0x6F14}, //13951 #CJK UNIFIED IDEOGRAPH + {0xD1DE, 0x8273}, //13952 #CJK UNIFIED IDEOGRAPH + {0xD1DF, 0x5830}, //13953 #CJK UNIFIED IDEOGRAPH + {0xD1E0, 0x71D5}, //13954 #CJK UNIFIED IDEOGRAPH + {0xD1E1, 0x538C}, //13955 #CJK UNIFIED IDEOGRAPH + {0xD1E2, 0x781A}, //13956 #CJK UNIFIED IDEOGRAPH + {0xD1E3, 0x96C1}, //13957 #CJK UNIFIED IDEOGRAPH + {0xD1E4, 0x5501}, //13958 #CJK UNIFIED IDEOGRAPH + {0xD1E5, 0x5F66}, //13959 #CJK UNIFIED IDEOGRAPH + {0xD1E6, 0x7130}, //13960 #CJK UNIFIED IDEOGRAPH + {0xD1E7, 0x5BB4}, //13961 #CJK UNIFIED IDEOGRAPH + {0xD1E8, 0x8C1A}, //13962 #CJK UNIFIED IDEOGRAPH + {0xD1E9, 0x9A8C}, //13963 #CJK UNIFIED IDEOGRAPH + {0xD1EA, 0x6B83}, //13964 #CJK UNIFIED IDEOGRAPH + {0xD1EB, 0x592E}, //13965 #CJK UNIFIED IDEOGRAPH + {0xD1EC, 0x9E2F}, //13966 #CJK UNIFIED IDEOGRAPH + {0xD1ED, 0x79E7}, //13967 #CJK UNIFIED IDEOGRAPH + {0xD1EE, 0x6768}, //13968 #CJK UNIFIED IDEOGRAPH + {0xD1EF, 0x626C}, //13969 #CJK UNIFIED IDEOGRAPH + {0xD1F0, 0x4F6F}, //13970 #CJK UNIFIED IDEOGRAPH + {0xD1F1, 0x75A1}, //13971 #CJK UNIFIED IDEOGRAPH + {0xD1F2, 0x7F8A}, //13972 #CJK UNIFIED IDEOGRAPH + {0xD1F3, 0x6D0B}, //13973 #CJK UNIFIED IDEOGRAPH + {0xD1F4, 0x9633}, //13974 #CJK UNIFIED IDEOGRAPH + {0xD1F5, 0x6C27}, //13975 #CJK UNIFIED IDEOGRAPH + {0xD1F6, 0x4EF0}, //13976 #CJK UNIFIED IDEOGRAPH + {0xD1F7, 0x75D2}, //13977 #CJK UNIFIED IDEOGRAPH + {0xD1F8, 0x517B}, //13978 #CJK UNIFIED IDEOGRAPH + {0xD1F9, 0x6837}, //13979 #CJK UNIFIED IDEOGRAPH + {0xD1FA, 0x6F3E}, //13980 #CJK UNIFIED IDEOGRAPH + {0xD1FB, 0x9080}, //13981 #CJK UNIFIED IDEOGRAPH + {0xD1FC, 0x8170}, //13982 #CJK UNIFIED IDEOGRAPH + {0xD1FD, 0x5996}, //13983 #CJK UNIFIED IDEOGRAPH + {0xD1FE, 0x7476}, //13984 #CJK UNIFIED IDEOGRAPH + {0xD240, 0x8938}, //13985 #CJK UNIFIED IDEOGRAPH + {0xD241, 0x8939}, //13986 #CJK UNIFIED IDEOGRAPH + {0xD242, 0x893A}, //13987 #CJK UNIFIED IDEOGRAPH + {0xD243, 0x893B}, //13988 #CJK UNIFIED IDEOGRAPH + {0xD244, 0x893C}, //13989 #CJK UNIFIED IDEOGRAPH + {0xD245, 0x893D}, //13990 #CJK UNIFIED IDEOGRAPH + {0xD246, 0x893E}, //13991 #CJK UNIFIED IDEOGRAPH + {0xD247, 0x893F}, //13992 #CJK UNIFIED IDEOGRAPH + {0xD248, 0x8940}, //13993 #CJK UNIFIED IDEOGRAPH + {0xD249, 0x8942}, //13994 #CJK UNIFIED IDEOGRAPH + {0xD24A, 0x8943}, //13995 #CJK UNIFIED IDEOGRAPH + {0xD24B, 0x8945}, //13996 #CJK UNIFIED IDEOGRAPH + {0xD24C, 0x8946}, //13997 #CJK UNIFIED IDEOGRAPH + {0xD24D, 0x8947}, //13998 #CJK UNIFIED IDEOGRAPH + {0xD24E, 0x8948}, //13999 #CJK UNIFIED IDEOGRAPH + {0xD24F, 0x8949}, //14000 #CJK UNIFIED IDEOGRAPH + {0xD250, 0x894A}, //14001 #CJK UNIFIED IDEOGRAPH + {0xD251, 0x894B}, //14002 #CJK UNIFIED IDEOGRAPH + {0xD252, 0x894C}, //14003 #CJK UNIFIED IDEOGRAPH + {0xD253, 0x894D}, //14004 #CJK UNIFIED IDEOGRAPH + {0xD254, 0x894E}, //14005 #CJK UNIFIED IDEOGRAPH + {0xD255, 0x894F}, //14006 #CJK UNIFIED IDEOGRAPH + {0xD256, 0x8950}, //14007 #CJK UNIFIED IDEOGRAPH + {0xD257, 0x8951}, //14008 #CJK UNIFIED IDEOGRAPH + {0xD258, 0x8952}, //14009 #CJK UNIFIED IDEOGRAPH + {0xD259, 0x8953}, //14010 #CJK UNIFIED IDEOGRAPH + {0xD25A, 0x8954}, //14011 #CJK UNIFIED IDEOGRAPH + {0xD25B, 0x8955}, //14012 #CJK UNIFIED IDEOGRAPH + {0xD25C, 0x8956}, //14013 #CJK UNIFIED IDEOGRAPH + {0xD25D, 0x8957}, //14014 #CJK UNIFIED IDEOGRAPH + {0xD25E, 0x8958}, //14015 #CJK UNIFIED IDEOGRAPH + {0xD25F, 0x8959}, //14016 #CJK UNIFIED IDEOGRAPH + {0xD260, 0x895A}, //14017 #CJK UNIFIED IDEOGRAPH + {0xD261, 0x895B}, //14018 #CJK UNIFIED IDEOGRAPH + {0xD262, 0x895C}, //14019 #CJK UNIFIED IDEOGRAPH + {0xD263, 0x895D}, //14020 #CJK UNIFIED IDEOGRAPH + {0xD264, 0x8960}, //14021 #CJK UNIFIED IDEOGRAPH + {0xD265, 0x8961}, //14022 #CJK UNIFIED IDEOGRAPH + {0xD266, 0x8962}, //14023 #CJK UNIFIED IDEOGRAPH + {0xD267, 0x8963}, //14024 #CJK UNIFIED IDEOGRAPH + {0xD268, 0x8964}, //14025 #CJK UNIFIED IDEOGRAPH + {0xD269, 0x8965}, //14026 #CJK UNIFIED IDEOGRAPH + {0xD26A, 0x8967}, //14027 #CJK UNIFIED IDEOGRAPH + {0xD26B, 0x8968}, //14028 #CJK UNIFIED IDEOGRAPH + {0xD26C, 0x8969}, //14029 #CJK UNIFIED IDEOGRAPH + {0xD26D, 0x896A}, //14030 #CJK UNIFIED IDEOGRAPH + {0xD26E, 0x896B}, //14031 #CJK UNIFIED IDEOGRAPH + {0xD26F, 0x896C}, //14032 #CJK UNIFIED IDEOGRAPH + {0xD270, 0x896D}, //14033 #CJK UNIFIED IDEOGRAPH + {0xD271, 0x896E}, //14034 #CJK UNIFIED IDEOGRAPH + {0xD272, 0x896F}, //14035 #CJK UNIFIED IDEOGRAPH + {0xD273, 0x8970}, //14036 #CJK UNIFIED IDEOGRAPH + {0xD274, 0x8971}, //14037 #CJK UNIFIED IDEOGRAPH + {0xD275, 0x8972}, //14038 #CJK UNIFIED IDEOGRAPH + {0xD276, 0x8973}, //14039 #CJK UNIFIED IDEOGRAPH + {0xD277, 0x8974}, //14040 #CJK UNIFIED IDEOGRAPH + {0xD278, 0x8975}, //14041 #CJK UNIFIED IDEOGRAPH + {0xD279, 0x8976}, //14042 #CJK UNIFIED IDEOGRAPH + {0xD27A, 0x8977}, //14043 #CJK UNIFIED IDEOGRAPH + {0xD27B, 0x8978}, //14044 #CJK UNIFIED IDEOGRAPH + {0xD27C, 0x8979}, //14045 #CJK UNIFIED IDEOGRAPH + {0xD27D, 0x897A}, //14046 #CJK UNIFIED IDEOGRAPH + {0xD27E, 0x897C}, //14047 #CJK UNIFIED IDEOGRAPH + {0xD280, 0x897D}, //14048 #CJK UNIFIED IDEOGRAPH + {0xD281, 0x897E}, //14049 #CJK UNIFIED IDEOGRAPH + {0xD282, 0x8980}, //14050 #CJK UNIFIED IDEOGRAPH + {0xD283, 0x8982}, //14051 #CJK UNIFIED IDEOGRAPH + {0xD284, 0x8984}, //14052 #CJK UNIFIED IDEOGRAPH + {0xD285, 0x8985}, //14053 #CJK UNIFIED IDEOGRAPH + {0xD286, 0x8987}, //14054 #CJK UNIFIED IDEOGRAPH + {0xD287, 0x8988}, //14055 #CJK UNIFIED IDEOGRAPH + {0xD288, 0x8989}, //14056 #CJK UNIFIED IDEOGRAPH + {0xD289, 0x898A}, //14057 #CJK UNIFIED IDEOGRAPH + {0xD28A, 0x898B}, //14058 #CJK UNIFIED IDEOGRAPH + {0xD28B, 0x898C}, //14059 #CJK UNIFIED IDEOGRAPH + {0xD28C, 0x898D}, //14060 #CJK UNIFIED IDEOGRAPH + {0xD28D, 0x898E}, //14061 #CJK UNIFIED IDEOGRAPH + {0xD28E, 0x898F}, //14062 #CJK UNIFIED IDEOGRAPH + {0xD28F, 0x8990}, //14063 #CJK UNIFIED IDEOGRAPH + {0xD290, 0x8991}, //14064 #CJK UNIFIED IDEOGRAPH + {0xD291, 0x8992}, //14065 #CJK UNIFIED IDEOGRAPH + {0xD292, 0x8993}, //14066 #CJK UNIFIED IDEOGRAPH + {0xD293, 0x8994}, //14067 #CJK UNIFIED IDEOGRAPH + {0xD294, 0x8995}, //14068 #CJK UNIFIED IDEOGRAPH + {0xD295, 0x8996}, //14069 #CJK UNIFIED IDEOGRAPH + {0xD296, 0x8997}, //14070 #CJK UNIFIED IDEOGRAPH + {0xD297, 0x8998}, //14071 #CJK UNIFIED IDEOGRAPH + {0xD298, 0x8999}, //14072 #CJK UNIFIED IDEOGRAPH + {0xD299, 0x899A}, //14073 #CJK UNIFIED IDEOGRAPH + {0xD29A, 0x899B}, //14074 #CJK UNIFIED IDEOGRAPH + {0xD29B, 0x899C}, //14075 #CJK UNIFIED IDEOGRAPH + {0xD29C, 0x899D}, //14076 #CJK UNIFIED IDEOGRAPH + {0xD29D, 0x899E}, //14077 #CJK UNIFIED IDEOGRAPH + {0xD29E, 0x899F}, //14078 #CJK UNIFIED IDEOGRAPH + {0xD29F, 0x89A0}, //14079 #CJK UNIFIED IDEOGRAPH + {0xD2A0, 0x89A1}, //14080 #CJK UNIFIED IDEOGRAPH + {0xD2A1, 0x6447}, //14081 #CJK UNIFIED IDEOGRAPH + {0xD2A2, 0x5C27}, //14082 #CJK UNIFIED IDEOGRAPH + {0xD2A3, 0x9065}, //14083 #CJK UNIFIED IDEOGRAPH + {0xD2A4, 0x7A91}, //14084 #CJK UNIFIED IDEOGRAPH + {0xD2A5, 0x8C23}, //14085 #CJK UNIFIED IDEOGRAPH + {0xD2A6, 0x59DA}, //14086 #CJK UNIFIED IDEOGRAPH + {0xD2A7, 0x54AC}, //14087 #CJK UNIFIED IDEOGRAPH + {0xD2A8, 0x8200}, //14088 #CJK UNIFIED IDEOGRAPH + {0xD2A9, 0x836F}, //14089 #CJK UNIFIED IDEOGRAPH + {0xD2AA, 0x8981}, //14090 #CJK UNIFIED IDEOGRAPH + {0xD2AB, 0x8000}, //14091 #CJK UNIFIED IDEOGRAPH + {0xD2AC, 0x6930}, //14092 #CJK UNIFIED IDEOGRAPH + {0xD2AD, 0x564E}, //14093 #CJK UNIFIED IDEOGRAPH + {0xD2AE, 0x8036}, //14094 #CJK UNIFIED IDEOGRAPH + {0xD2AF, 0x7237}, //14095 #CJK UNIFIED IDEOGRAPH + {0xD2B0, 0x91CE}, //14096 #CJK UNIFIED IDEOGRAPH + {0xD2B1, 0x51B6}, //14097 #CJK UNIFIED IDEOGRAPH + {0xD2B2, 0x4E5F}, //14098 #CJK UNIFIED IDEOGRAPH + {0xD2B3, 0x9875}, //14099 #CJK UNIFIED IDEOGRAPH + {0xD2B4, 0x6396}, //14100 #CJK UNIFIED IDEOGRAPH + {0xD2B5, 0x4E1A}, //14101 #CJK UNIFIED IDEOGRAPH + {0xD2B6, 0x53F6}, //14102 #CJK UNIFIED IDEOGRAPH + {0xD2B7, 0x66F3}, //14103 #CJK UNIFIED IDEOGRAPH + {0xD2B8, 0x814B}, //14104 #CJK UNIFIED IDEOGRAPH + {0xD2B9, 0x591C}, //14105 #CJK UNIFIED IDEOGRAPH + {0xD2BA, 0x6DB2}, //14106 #CJK UNIFIED IDEOGRAPH + {0xD2BB, 0x4E00}, //14107 #CJK UNIFIED IDEOGRAPH + {0xD2BC, 0x58F9}, //14108 #CJK UNIFIED IDEOGRAPH + {0xD2BD, 0x533B}, //14109 #CJK UNIFIED IDEOGRAPH + {0xD2BE, 0x63D6}, //14110 #CJK UNIFIED IDEOGRAPH + {0xD2BF, 0x94F1}, //14111 #CJK UNIFIED IDEOGRAPH + {0xD2C0, 0x4F9D}, //14112 #CJK UNIFIED IDEOGRAPH + {0xD2C1, 0x4F0A}, //14113 #CJK UNIFIED IDEOGRAPH + {0xD2C2, 0x8863}, //14114 #CJK UNIFIED IDEOGRAPH + {0xD2C3, 0x9890}, //14115 #CJK UNIFIED IDEOGRAPH + {0xD2C4, 0x5937}, //14116 #CJK UNIFIED IDEOGRAPH + {0xD2C5, 0x9057}, //14117 #CJK UNIFIED IDEOGRAPH + {0xD2C6, 0x79FB}, //14118 #CJK UNIFIED IDEOGRAPH + {0xD2C7, 0x4EEA}, //14119 #CJK UNIFIED IDEOGRAPH + {0xD2C8, 0x80F0}, //14120 #CJK UNIFIED IDEOGRAPH + {0xD2C9, 0x7591}, //14121 #CJK UNIFIED IDEOGRAPH + {0xD2CA, 0x6C82}, //14122 #CJK UNIFIED IDEOGRAPH + {0xD2CB, 0x5B9C}, //14123 #CJK UNIFIED IDEOGRAPH + {0xD2CC, 0x59E8}, //14124 #CJK UNIFIED IDEOGRAPH + {0xD2CD, 0x5F5D}, //14125 #CJK UNIFIED IDEOGRAPH + {0xD2CE, 0x6905}, //14126 #CJK UNIFIED IDEOGRAPH + {0xD2CF, 0x8681}, //14127 #CJK UNIFIED IDEOGRAPH + {0xD2D0, 0x501A}, //14128 #CJK UNIFIED IDEOGRAPH + {0xD2D1, 0x5DF2}, //14129 #CJK UNIFIED IDEOGRAPH + {0xD2D2, 0x4E59}, //14130 #CJK UNIFIED IDEOGRAPH + {0xD2D3, 0x77E3}, //14131 #CJK UNIFIED IDEOGRAPH + {0xD2D4, 0x4EE5}, //14132 #CJK UNIFIED IDEOGRAPH + {0xD2D5, 0x827A}, //14133 #CJK UNIFIED IDEOGRAPH + {0xD2D6, 0x6291}, //14134 #CJK UNIFIED IDEOGRAPH + {0xD2D7, 0x6613}, //14135 #CJK UNIFIED IDEOGRAPH + {0xD2D8, 0x9091}, //14136 #CJK UNIFIED IDEOGRAPH + {0xD2D9, 0x5C79}, //14137 #CJK UNIFIED IDEOGRAPH + {0xD2DA, 0x4EBF}, //14138 #CJK UNIFIED IDEOGRAPH + {0xD2DB, 0x5F79}, //14139 #CJK UNIFIED IDEOGRAPH + {0xD2DC, 0x81C6}, //14140 #CJK UNIFIED IDEOGRAPH + {0xD2DD, 0x9038}, //14141 #CJK UNIFIED IDEOGRAPH + {0xD2DE, 0x8084}, //14142 #CJK UNIFIED IDEOGRAPH + {0xD2DF, 0x75AB}, //14143 #CJK UNIFIED IDEOGRAPH + {0xD2E0, 0x4EA6}, //14144 #CJK UNIFIED IDEOGRAPH + {0xD2E1, 0x88D4}, //14145 #CJK UNIFIED IDEOGRAPH + {0xD2E2, 0x610F}, //14146 #CJK UNIFIED IDEOGRAPH + {0xD2E3, 0x6BC5}, //14147 #CJK UNIFIED IDEOGRAPH + {0xD2E4, 0x5FC6}, //14148 #CJK UNIFIED IDEOGRAPH + {0xD2E5, 0x4E49}, //14149 #CJK UNIFIED IDEOGRAPH + {0xD2E6, 0x76CA}, //14150 #CJK UNIFIED IDEOGRAPH + {0xD2E7, 0x6EA2}, //14151 #CJK UNIFIED IDEOGRAPH + {0xD2E8, 0x8BE3}, //14152 #CJK UNIFIED IDEOGRAPH + {0xD2E9, 0x8BAE}, //14153 #CJK UNIFIED IDEOGRAPH + {0xD2EA, 0x8C0A}, //14154 #CJK UNIFIED IDEOGRAPH + {0xD2EB, 0x8BD1}, //14155 #CJK UNIFIED IDEOGRAPH + {0xD2EC, 0x5F02}, //14156 #CJK UNIFIED IDEOGRAPH + {0xD2ED, 0x7FFC}, //14157 #CJK UNIFIED IDEOGRAPH + {0xD2EE, 0x7FCC}, //14158 #CJK UNIFIED IDEOGRAPH + {0xD2EF, 0x7ECE}, //14159 #CJK UNIFIED IDEOGRAPH + {0xD2F0, 0x8335}, //14160 #CJK UNIFIED IDEOGRAPH + {0xD2F1, 0x836B}, //14161 #CJK UNIFIED IDEOGRAPH + {0xD2F2, 0x56E0}, //14162 #CJK UNIFIED IDEOGRAPH + {0xD2F3, 0x6BB7}, //14163 #CJK UNIFIED IDEOGRAPH + {0xD2F4, 0x97F3}, //14164 #CJK UNIFIED IDEOGRAPH + {0xD2F5, 0x9634}, //14165 #CJK UNIFIED IDEOGRAPH + {0xD2F6, 0x59FB}, //14166 #CJK UNIFIED IDEOGRAPH + {0xD2F7, 0x541F}, //14167 #CJK UNIFIED IDEOGRAPH + {0xD2F8, 0x94F6}, //14168 #CJK UNIFIED IDEOGRAPH + {0xD2F9, 0x6DEB}, //14169 #CJK UNIFIED IDEOGRAPH + {0xD2FA, 0x5BC5}, //14170 #CJK UNIFIED IDEOGRAPH + {0xD2FB, 0x996E}, //14171 #CJK UNIFIED IDEOGRAPH + {0xD2FC, 0x5C39}, //14172 #CJK UNIFIED IDEOGRAPH + {0xD2FD, 0x5F15}, //14173 #CJK UNIFIED IDEOGRAPH + {0xD2FE, 0x9690}, //14174 #CJK UNIFIED IDEOGRAPH + {0xD340, 0x89A2}, //14175 #CJK UNIFIED IDEOGRAPH + {0xD341, 0x89A3}, //14176 #CJK UNIFIED IDEOGRAPH + {0xD342, 0x89A4}, //14177 #CJK UNIFIED IDEOGRAPH + {0xD343, 0x89A5}, //14178 #CJK UNIFIED IDEOGRAPH + {0xD344, 0x89A6}, //14179 #CJK UNIFIED IDEOGRAPH + {0xD345, 0x89A7}, //14180 #CJK UNIFIED IDEOGRAPH + {0xD346, 0x89A8}, //14181 #CJK UNIFIED IDEOGRAPH + {0xD347, 0x89A9}, //14182 #CJK UNIFIED IDEOGRAPH + {0xD348, 0x89AA}, //14183 #CJK UNIFIED IDEOGRAPH + {0xD349, 0x89AB}, //14184 #CJK UNIFIED IDEOGRAPH + {0xD34A, 0x89AC}, //14185 #CJK UNIFIED IDEOGRAPH + {0xD34B, 0x89AD}, //14186 #CJK UNIFIED IDEOGRAPH + {0xD34C, 0x89AE}, //14187 #CJK UNIFIED IDEOGRAPH + {0xD34D, 0x89AF}, //14188 #CJK UNIFIED IDEOGRAPH + {0xD34E, 0x89B0}, //14189 #CJK UNIFIED IDEOGRAPH + {0xD34F, 0x89B1}, //14190 #CJK UNIFIED IDEOGRAPH + {0xD350, 0x89B2}, //14191 #CJK UNIFIED IDEOGRAPH + {0xD351, 0x89B3}, //14192 #CJK UNIFIED IDEOGRAPH + {0xD352, 0x89B4}, //14193 #CJK UNIFIED IDEOGRAPH + {0xD353, 0x89B5}, //14194 #CJK UNIFIED IDEOGRAPH + {0xD354, 0x89B6}, //14195 #CJK UNIFIED IDEOGRAPH + {0xD355, 0x89B7}, //14196 #CJK UNIFIED IDEOGRAPH + {0xD356, 0x89B8}, //14197 #CJK UNIFIED IDEOGRAPH + {0xD357, 0x89B9}, //14198 #CJK UNIFIED IDEOGRAPH + {0xD358, 0x89BA}, //14199 #CJK UNIFIED IDEOGRAPH + {0xD359, 0x89BB}, //14200 #CJK UNIFIED IDEOGRAPH + {0xD35A, 0x89BC}, //14201 #CJK UNIFIED IDEOGRAPH + {0xD35B, 0x89BD}, //14202 #CJK UNIFIED IDEOGRAPH + {0xD35C, 0x89BE}, //14203 #CJK UNIFIED IDEOGRAPH + {0xD35D, 0x89BF}, //14204 #CJK UNIFIED IDEOGRAPH + {0xD35E, 0x89C0}, //14205 #CJK UNIFIED IDEOGRAPH + {0xD35F, 0x89C3}, //14206 #CJK UNIFIED IDEOGRAPH + {0xD360, 0x89CD}, //14207 #CJK UNIFIED IDEOGRAPH + {0xD361, 0x89D3}, //14208 #CJK UNIFIED IDEOGRAPH + {0xD362, 0x89D4}, //14209 #CJK UNIFIED IDEOGRAPH + {0xD363, 0x89D5}, //14210 #CJK UNIFIED IDEOGRAPH + {0xD364, 0x89D7}, //14211 #CJK UNIFIED IDEOGRAPH + {0xD365, 0x89D8}, //14212 #CJK UNIFIED IDEOGRAPH + {0xD366, 0x89D9}, //14213 #CJK UNIFIED IDEOGRAPH + {0xD367, 0x89DB}, //14214 #CJK UNIFIED IDEOGRAPH + {0xD368, 0x89DD}, //14215 #CJK UNIFIED IDEOGRAPH + {0xD369, 0x89DF}, //14216 #CJK UNIFIED IDEOGRAPH + {0xD36A, 0x89E0}, //14217 #CJK UNIFIED IDEOGRAPH + {0xD36B, 0x89E1}, //14218 #CJK UNIFIED IDEOGRAPH + {0xD36C, 0x89E2}, //14219 #CJK UNIFIED IDEOGRAPH + {0xD36D, 0x89E4}, //14220 #CJK UNIFIED IDEOGRAPH + {0xD36E, 0x89E7}, //14221 #CJK UNIFIED IDEOGRAPH + {0xD36F, 0x89E8}, //14222 #CJK UNIFIED IDEOGRAPH + {0xD370, 0x89E9}, //14223 #CJK UNIFIED IDEOGRAPH + {0xD371, 0x89EA}, //14224 #CJK UNIFIED IDEOGRAPH + {0xD372, 0x89EC}, //14225 #CJK UNIFIED IDEOGRAPH + {0xD373, 0x89ED}, //14226 #CJK UNIFIED IDEOGRAPH + {0xD374, 0x89EE}, //14227 #CJK UNIFIED IDEOGRAPH + {0xD375, 0x89F0}, //14228 #CJK UNIFIED IDEOGRAPH + {0xD376, 0x89F1}, //14229 #CJK UNIFIED IDEOGRAPH + {0xD377, 0x89F2}, //14230 #CJK UNIFIED IDEOGRAPH + {0xD378, 0x89F4}, //14231 #CJK UNIFIED IDEOGRAPH + {0xD379, 0x89F5}, //14232 #CJK UNIFIED IDEOGRAPH + {0xD37A, 0x89F6}, //14233 #CJK UNIFIED IDEOGRAPH + {0xD37B, 0x89F7}, //14234 #CJK UNIFIED IDEOGRAPH + {0xD37C, 0x89F8}, //14235 #CJK UNIFIED IDEOGRAPH + {0xD37D, 0x89F9}, //14236 #CJK UNIFIED IDEOGRAPH + {0xD37E, 0x89FA}, //14237 #CJK UNIFIED IDEOGRAPH + {0xD380, 0x89FB}, //14238 #CJK UNIFIED IDEOGRAPH + {0xD381, 0x89FC}, //14239 #CJK UNIFIED IDEOGRAPH + {0xD382, 0x89FD}, //14240 #CJK UNIFIED IDEOGRAPH + {0xD383, 0x89FE}, //14241 #CJK UNIFIED IDEOGRAPH + {0xD384, 0x89FF}, //14242 #CJK UNIFIED IDEOGRAPH + {0xD385, 0x8A01}, //14243 #CJK UNIFIED IDEOGRAPH + {0xD386, 0x8A02}, //14244 #CJK UNIFIED IDEOGRAPH + {0xD387, 0x8A03}, //14245 #CJK UNIFIED IDEOGRAPH + {0xD388, 0x8A04}, //14246 #CJK UNIFIED IDEOGRAPH + {0xD389, 0x8A05}, //14247 #CJK UNIFIED IDEOGRAPH + {0xD38A, 0x8A06}, //14248 #CJK UNIFIED IDEOGRAPH + {0xD38B, 0x8A08}, //14249 #CJK UNIFIED IDEOGRAPH + {0xD38C, 0x8A09}, //14250 #CJK UNIFIED IDEOGRAPH + {0xD38D, 0x8A0A}, //14251 #CJK UNIFIED IDEOGRAPH + {0xD38E, 0x8A0B}, //14252 #CJK UNIFIED IDEOGRAPH + {0xD38F, 0x8A0C}, //14253 #CJK UNIFIED IDEOGRAPH + {0xD390, 0x8A0D}, //14254 #CJK UNIFIED IDEOGRAPH + {0xD391, 0x8A0E}, //14255 #CJK UNIFIED IDEOGRAPH + {0xD392, 0x8A0F}, //14256 #CJK UNIFIED IDEOGRAPH + {0xD393, 0x8A10}, //14257 #CJK UNIFIED IDEOGRAPH + {0xD394, 0x8A11}, //14258 #CJK UNIFIED IDEOGRAPH + {0xD395, 0x8A12}, //14259 #CJK UNIFIED IDEOGRAPH + {0xD396, 0x8A13}, //14260 #CJK UNIFIED IDEOGRAPH + {0xD397, 0x8A14}, //14261 #CJK UNIFIED IDEOGRAPH + {0xD398, 0x8A15}, //14262 #CJK UNIFIED IDEOGRAPH + {0xD399, 0x8A16}, //14263 #CJK UNIFIED IDEOGRAPH + {0xD39A, 0x8A17}, //14264 #CJK UNIFIED IDEOGRAPH + {0xD39B, 0x8A18}, //14265 #CJK UNIFIED IDEOGRAPH + {0xD39C, 0x8A19}, //14266 #CJK UNIFIED IDEOGRAPH + {0xD39D, 0x8A1A}, //14267 #CJK UNIFIED IDEOGRAPH + {0xD39E, 0x8A1B}, //14268 #CJK UNIFIED IDEOGRAPH + {0xD39F, 0x8A1C}, //14269 #CJK UNIFIED IDEOGRAPH + {0xD3A0, 0x8A1D}, //14270 #CJK UNIFIED IDEOGRAPH + {0xD3A1, 0x5370}, //14271 #CJK UNIFIED IDEOGRAPH + {0xD3A2, 0x82F1}, //14272 #CJK UNIFIED IDEOGRAPH + {0xD3A3, 0x6A31}, //14273 #CJK UNIFIED IDEOGRAPH + {0xD3A4, 0x5A74}, //14274 #CJK UNIFIED IDEOGRAPH + {0xD3A5, 0x9E70}, //14275 #CJK UNIFIED IDEOGRAPH + {0xD3A6, 0x5E94}, //14276 #CJK UNIFIED IDEOGRAPH + {0xD3A7, 0x7F28}, //14277 #CJK UNIFIED IDEOGRAPH + {0xD3A8, 0x83B9}, //14278 #CJK UNIFIED IDEOGRAPH + {0xD3A9, 0x8424}, //14279 #CJK UNIFIED IDEOGRAPH + {0xD3AA, 0x8425}, //14280 #CJK UNIFIED IDEOGRAPH + {0xD3AB, 0x8367}, //14281 #CJK UNIFIED IDEOGRAPH + {0xD3AC, 0x8747}, //14282 #CJK UNIFIED IDEOGRAPH + {0xD3AD, 0x8FCE}, //14283 #CJK UNIFIED IDEOGRAPH + {0xD3AE, 0x8D62}, //14284 #CJK UNIFIED IDEOGRAPH + {0xD3AF, 0x76C8}, //14285 #CJK UNIFIED IDEOGRAPH + {0xD3B0, 0x5F71}, //14286 #CJK UNIFIED IDEOGRAPH + {0xD3B1, 0x9896}, //14287 #CJK UNIFIED IDEOGRAPH + {0xD3B2, 0x786C}, //14288 #CJK UNIFIED IDEOGRAPH + {0xD3B3, 0x6620}, //14289 #CJK UNIFIED IDEOGRAPH + {0xD3B4, 0x54DF}, //14290 #CJK UNIFIED IDEOGRAPH + {0xD3B5, 0x62E5}, //14291 #CJK UNIFIED IDEOGRAPH + {0xD3B6, 0x4F63}, //14292 #CJK UNIFIED IDEOGRAPH + {0xD3B7, 0x81C3}, //14293 #CJK UNIFIED IDEOGRAPH + {0xD3B8, 0x75C8}, //14294 #CJK UNIFIED IDEOGRAPH + {0xD3B9, 0x5EB8}, //14295 #CJK UNIFIED IDEOGRAPH + {0xD3BA, 0x96CD}, //14296 #CJK UNIFIED IDEOGRAPH + {0xD3BB, 0x8E0A}, //14297 #CJK UNIFIED IDEOGRAPH + {0xD3BC, 0x86F9}, //14298 #CJK UNIFIED IDEOGRAPH + {0xD3BD, 0x548F}, //14299 #CJK UNIFIED IDEOGRAPH + {0xD3BE, 0x6CF3}, //14300 #CJK UNIFIED IDEOGRAPH + {0xD3BF, 0x6D8C}, //14301 #CJK UNIFIED IDEOGRAPH + {0xD3C0, 0x6C38}, //14302 #CJK UNIFIED IDEOGRAPH + {0xD3C1, 0x607F}, //14303 #CJK UNIFIED IDEOGRAPH + {0xD3C2, 0x52C7}, //14304 #CJK UNIFIED IDEOGRAPH + {0xD3C3, 0x7528}, //14305 #CJK UNIFIED IDEOGRAPH + {0xD3C4, 0x5E7D}, //14306 #CJK UNIFIED IDEOGRAPH + {0xD3C5, 0x4F18}, //14307 #CJK UNIFIED IDEOGRAPH + {0xD3C6, 0x60A0}, //14308 #CJK UNIFIED IDEOGRAPH + {0xD3C7, 0x5FE7}, //14309 #CJK UNIFIED IDEOGRAPH + {0xD3C8, 0x5C24}, //14310 #CJK UNIFIED IDEOGRAPH + {0xD3C9, 0x7531}, //14311 #CJK UNIFIED IDEOGRAPH + {0xD3CA, 0x90AE}, //14312 #CJK UNIFIED IDEOGRAPH + {0xD3CB, 0x94C0}, //14313 #CJK UNIFIED IDEOGRAPH + {0xD3CC, 0x72B9}, //14314 #CJK UNIFIED IDEOGRAPH + {0xD3CD, 0x6CB9}, //14315 #CJK UNIFIED IDEOGRAPH + {0xD3CE, 0x6E38}, //14316 #CJK UNIFIED IDEOGRAPH + {0xD3CF, 0x9149}, //14317 #CJK UNIFIED IDEOGRAPH + {0xD3D0, 0x6709}, //14318 #CJK UNIFIED IDEOGRAPH + {0xD3D1, 0x53CB}, //14319 #CJK UNIFIED IDEOGRAPH + {0xD3D2, 0x53F3}, //14320 #CJK UNIFIED IDEOGRAPH + {0xD3D3, 0x4F51}, //14321 #CJK UNIFIED IDEOGRAPH + {0xD3D4, 0x91C9}, //14322 #CJK UNIFIED IDEOGRAPH + {0xD3D5, 0x8BF1}, //14323 #CJK UNIFIED IDEOGRAPH + {0xD3D6, 0x53C8}, //14324 #CJK UNIFIED IDEOGRAPH + {0xD3D7, 0x5E7C}, //14325 #CJK UNIFIED IDEOGRAPH + {0xD3D8, 0x8FC2}, //14326 #CJK UNIFIED IDEOGRAPH + {0xD3D9, 0x6DE4}, //14327 #CJK UNIFIED IDEOGRAPH + {0xD3DA, 0x4E8E}, //14328 #CJK UNIFIED IDEOGRAPH + {0xD3DB, 0x76C2}, //14329 #CJK UNIFIED IDEOGRAPH + {0xD3DC, 0x6986}, //14330 #CJK UNIFIED IDEOGRAPH + {0xD3DD, 0x865E}, //14331 #CJK UNIFIED IDEOGRAPH + {0xD3DE, 0x611A}, //14332 #CJK UNIFIED IDEOGRAPH + {0xD3DF, 0x8206}, //14333 #CJK UNIFIED IDEOGRAPH + {0xD3E0, 0x4F59}, //14334 #CJK UNIFIED IDEOGRAPH + {0xD3E1, 0x4FDE}, //14335 #CJK UNIFIED IDEOGRAPH + {0xD3E2, 0x903E}, //14336 #CJK UNIFIED IDEOGRAPH + {0xD3E3, 0x9C7C}, //14337 #CJK UNIFIED IDEOGRAPH + {0xD3E4, 0x6109}, //14338 #CJK UNIFIED IDEOGRAPH + {0xD3E5, 0x6E1D}, //14339 #CJK UNIFIED IDEOGRAPH + {0xD3E6, 0x6E14}, //14340 #CJK UNIFIED IDEOGRAPH + {0xD3E7, 0x9685}, //14341 #CJK UNIFIED IDEOGRAPH + {0xD3E8, 0x4E88}, //14342 #CJK UNIFIED IDEOGRAPH + {0xD3E9, 0x5A31}, //14343 #CJK UNIFIED IDEOGRAPH + {0xD3EA, 0x96E8}, //14344 #CJK UNIFIED IDEOGRAPH + {0xD3EB, 0x4E0E}, //14345 #CJK UNIFIED IDEOGRAPH + {0xD3EC, 0x5C7F}, //14346 #CJK UNIFIED IDEOGRAPH + {0xD3ED, 0x79B9}, //14347 #CJK UNIFIED IDEOGRAPH + {0xD3EE, 0x5B87}, //14348 #CJK UNIFIED IDEOGRAPH + {0xD3EF, 0x8BED}, //14349 #CJK UNIFIED IDEOGRAPH + {0xD3F0, 0x7FBD}, //14350 #CJK UNIFIED IDEOGRAPH + {0xD3F1, 0x7389}, //14351 #CJK UNIFIED IDEOGRAPH + {0xD3F2, 0x57DF}, //14352 #CJK UNIFIED IDEOGRAPH + {0xD3F3, 0x828B}, //14353 #CJK UNIFIED IDEOGRAPH + {0xD3F4, 0x90C1}, //14354 #CJK UNIFIED IDEOGRAPH + {0xD3F5, 0x5401}, //14355 #CJK UNIFIED IDEOGRAPH + {0xD3F6, 0x9047}, //14356 #CJK UNIFIED IDEOGRAPH + {0xD3F7, 0x55BB}, //14357 #CJK UNIFIED IDEOGRAPH + {0xD3F8, 0x5CEA}, //14358 #CJK UNIFIED IDEOGRAPH + {0xD3F9, 0x5FA1}, //14359 #CJK UNIFIED IDEOGRAPH + {0xD3FA, 0x6108}, //14360 #CJK UNIFIED IDEOGRAPH + {0xD3FB, 0x6B32}, //14361 #CJK UNIFIED IDEOGRAPH + {0xD3FC, 0x72F1}, //14362 #CJK UNIFIED IDEOGRAPH + {0xD3FD, 0x80B2}, //14363 #CJK UNIFIED IDEOGRAPH + {0xD3FE, 0x8A89}, //14364 #CJK UNIFIED IDEOGRAPH + {0xD440, 0x8A1E}, //14365 #CJK UNIFIED IDEOGRAPH + {0xD441, 0x8A1F}, //14366 #CJK UNIFIED IDEOGRAPH + {0xD442, 0x8A20}, //14367 #CJK UNIFIED IDEOGRAPH + {0xD443, 0x8A21}, //14368 #CJK UNIFIED IDEOGRAPH + {0xD444, 0x8A22}, //14369 #CJK UNIFIED IDEOGRAPH + {0xD445, 0x8A23}, //14370 #CJK UNIFIED IDEOGRAPH + {0xD446, 0x8A24}, //14371 #CJK UNIFIED IDEOGRAPH + {0xD447, 0x8A25}, //14372 #CJK UNIFIED IDEOGRAPH + {0xD448, 0x8A26}, //14373 #CJK UNIFIED IDEOGRAPH + {0xD449, 0x8A27}, //14374 #CJK UNIFIED IDEOGRAPH + {0xD44A, 0x8A28}, //14375 #CJK UNIFIED IDEOGRAPH + {0xD44B, 0x8A29}, //14376 #CJK UNIFIED IDEOGRAPH + {0xD44C, 0x8A2A}, //14377 #CJK UNIFIED IDEOGRAPH + {0xD44D, 0x8A2B}, //14378 #CJK UNIFIED IDEOGRAPH + {0xD44E, 0x8A2C}, //14379 #CJK UNIFIED IDEOGRAPH + {0xD44F, 0x8A2D}, //14380 #CJK UNIFIED IDEOGRAPH + {0xD450, 0x8A2E}, //14381 #CJK UNIFIED IDEOGRAPH + {0xD451, 0x8A2F}, //14382 #CJK UNIFIED IDEOGRAPH + {0xD452, 0x8A30}, //14383 #CJK UNIFIED IDEOGRAPH + {0xD453, 0x8A31}, //14384 #CJK UNIFIED IDEOGRAPH + {0xD454, 0x8A32}, //14385 #CJK UNIFIED IDEOGRAPH + {0xD455, 0x8A33}, //14386 #CJK UNIFIED IDEOGRAPH + {0xD456, 0x8A34}, //14387 #CJK UNIFIED IDEOGRAPH + {0xD457, 0x8A35}, //14388 #CJK UNIFIED IDEOGRAPH + {0xD458, 0x8A36}, //14389 #CJK UNIFIED IDEOGRAPH + {0xD459, 0x8A37}, //14390 #CJK UNIFIED IDEOGRAPH + {0xD45A, 0x8A38}, //14391 #CJK UNIFIED IDEOGRAPH + {0xD45B, 0x8A39}, //14392 #CJK UNIFIED IDEOGRAPH + {0xD45C, 0x8A3A}, //14393 #CJK UNIFIED IDEOGRAPH + {0xD45D, 0x8A3B}, //14394 #CJK UNIFIED IDEOGRAPH + {0xD45E, 0x8A3C}, //14395 #CJK UNIFIED IDEOGRAPH + {0xD45F, 0x8A3D}, //14396 #CJK UNIFIED IDEOGRAPH + {0xD460, 0x8A3F}, //14397 #CJK UNIFIED IDEOGRAPH + {0xD461, 0x8A40}, //14398 #CJK UNIFIED IDEOGRAPH + {0xD462, 0x8A41}, //14399 #CJK UNIFIED IDEOGRAPH + {0xD463, 0x8A42}, //14400 #CJK UNIFIED IDEOGRAPH + {0xD464, 0x8A43}, //14401 #CJK UNIFIED IDEOGRAPH + {0xD465, 0x8A44}, //14402 #CJK UNIFIED IDEOGRAPH + {0xD466, 0x8A45}, //14403 #CJK UNIFIED IDEOGRAPH + {0xD467, 0x8A46}, //14404 #CJK UNIFIED IDEOGRAPH + {0xD468, 0x8A47}, //14405 #CJK UNIFIED IDEOGRAPH + {0xD469, 0x8A49}, //14406 #CJK UNIFIED IDEOGRAPH + {0xD46A, 0x8A4A}, //14407 #CJK UNIFIED IDEOGRAPH + {0xD46B, 0x8A4B}, //14408 #CJK UNIFIED IDEOGRAPH + {0xD46C, 0x8A4C}, //14409 #CJK UNIFIED IDEOGRAPH + {0xD46D, 0x8A4D}, //14410 #CJK UNIFIED IDEOGRAPH + {0xD46E, 0x8A4E}, //14411 #CJK UNIFIED IDEOGRAPH + {0xD46F, 0x8A4F}, //14412 #CJK UNIFIED IDEOGRAPH + {0xD470, 0x8A50}, //14413 #CJK UNIFIED IDEOGRAPH + {0xD471, 0x8A51}, //14414 #CJK UNIFIED IDEOGRAPH + {0xD472, 0x8A52}, //14415 #CJK UNIFIED IDEOGRAPH + {0xD473, 0x8A53}, //14416 #CJK UNIFIED IDEOGRAPH + {0xD474, 0x8A54}, //14417 #CJK UNIFIED IDEOGRAPH + {0xD475, 0x8A55}, //14418 #CJK UNIFIED IDEOGRAPH + {0xD476, 0x8A56}, //14419 #CJK UNIFIED IDEOGRAPH + {0xD477, 0x8A57}, //14420 #CJK UNIFIED IDEOGRAPH + {0xD478, 0x8A58}, //14421 #CJK UNIFIED IDEOGRAPH + {0xD479, 0x8A59}, //14422 #CJK UNIFIED IDEOGRAPH + {0xD47A, 0x8A5A}, //14423 #CJK UNIFIED IDEOGRAPH + {0xD47B, 0x8A5B}, //14424 #CJK UNIFIED IDEOGRAPH + {0xD47C, 0x8A5C}, //14425 #CJK UNIFIED IDEOGRAPH + {0xD47D, 0x8A5D}, //14426 #CJK UNIFIED IDEOGRAPH + {0xD47E, 0x8A5E}, //14427 #CJK UNIFIED IDEOGRAPH + {0xD480, 0x8A5F}, //14428 #CJK UNIFIED IDEOGRAPH + {0xD481, 0x8A60}, //14429 #CJK UNIFIED IDEOGRAPH + {0xD482, 0x8A61}, //14430 #CJK UNIFIED IDEOGRAPH + {0xD483, 0x8A62}, //14431 #CJK UNIFIED IDEOGRAPH + {0xD484, 0x8A63}, //14432 #CJK UNIFIED IDEOGRAPH + {0xD485, 0x8A64}, //14433 #CJK UNIFIED IDEOGRAPH + {0xD486, 0x8A65}, //14434 #CJK UNIFIED IDEOGRAPH + {0xD487, 0x8A66}, //14435 #CJK UNIFIED IDEOGRAPH + {0xD488, 0x8A67}, //14436 #CJK UNIFIED IDEOGRAPH + {0xD489, 0x8A68}, //14437 #CJK UNIFIED IDEOGRAPH + {0xD48A, 0x8A69}, //14438 #CJK UNIFIED IDEOGRAPH + {0xD48B, 0x8A6A}, //14439 #CJK UNIFIED IDEOGRAPH + {0xD48C, 0x8A6B}, //14440 #CJK UNIFIED IDEOGRAPH + {0xD48D, 0x8A6C}, //14441 #CJK UNIFIED IDEOGRAPH + {0xD48E, 0x8A6D}, //14442 #CJK UNIFIED IDEOGRAPH + {0xD48F, 0x8A6E}, //14443 #CJK UNIFIED IDEOGRAPH + {0xD490, 0x8A6F}, //14444 #CJK UNIFIED IDEOGRAPH + {0xD491, 0x8A70}, //14445 #CJK UNIFIED IDEOGRAPH + {0xD492, 0x8A71}, //14446 #CJK UNIFIED IDEOGRAPH + {0xD493, 0x8A72}, //14447 #CJK UNIFIED IDEOGRAPH + {0xD494, 0x8A73}, //14448 #CJK UNIFIED IDEOGRAPH + {0xD495, 0x8A74}, //14449 #CJK UNIFIED IDEOGRAPH + {0xD496, 0x8A75}, //14450 #CJK UNIFIED IDEOGRAPH + {0xD497, 0x8A76}, //14451 #CJK UNIFIED IDEOGRAPH + {0xD498, 0x8A77}, //14452 #CJK UNIFIED IDEOGRAPH + {0xD499, 0x8A78}, //14453 #CJK UNIFIED IDEOGRAPH + {0xD49A, 0x8A7A}, //14454 #CJK UNIFIED IDEOGRAPH + {0xD49B, 0x8A7B}, //14455 #CJK UNIFIED IDEOGRAPH + {0xD49C, 0x8A7C}, //14456 #CJK UNIFIED IDEOGRAPH + {0xD49D, 0x8A7D}, //14457 #CJK UNIFIED IDEOGRAPH + {0xD49E, 0x8A7E}, //14458 #CJK UNIFIED IDEOGRAPH + {0xD49F, 0x8A7F}, //14459 #CJK UNIFIED IDEOGRAPH + {0xD4A0, 0x8A80}, //14460 #CJK UNIFIED IDEOGRAPH + {0xD4A1, 0x6D74}, //14461 #CJK UNIFIED IDEOGRAPH + {0xD4A2, 0x5BD3}, //14462 #CJK UNIFIED IDEOGRAPH + {0xD4A3, 0x88D5}, //14463 #CJK UNIFIED IDEOGRAPH + {0xD4A4, 0x9884}, //14464 #CJK UNIFIED IDEOGRAPH + {0xD4A5, 0x8C6B}, //14465 #CJK UNIFIED IDEOGRAPH + {0xD4A6, 0x9A6D}, //14466 #CJK UNIFIED IDEOGRAPH + {0xD4A7, 0x9E33}, //14467 #CJK UNIFIED IDEOGRAPH + {0xD4A8, 0x6E0A}, //14468 #CJK UNIFIED IDEOGRAPH + {0xD4A9, 0x51A4}, //14469 #CJK UNIFIED IDEOGRAPH + {0xD4AA, 0x5143}, //14470 #CJK UNIFIED IDEOGRAPH + {0xD4AB, 0x57A3}, //14471 #CJK UNIFIED IDEOGRAPH + {0xD4AC, 0x8881}, //14472 #CJK UNIFIED IDEOGRAPH + {0xD4AD, 0x539F}, //14473 #CJK UNIFIED IDEOGRAPH + {0xD4AE, 0x63F4}, //14474 #CJK UNIFIED IDEOGRAPH + {0xD4AF, 0x8F95}, //14475 #CJK UNIFIED IDEOGRAPH + {0xD4B0, 0x56ED}, //14476 #CJK UNIFIED IDEOGRAPH + {0xD4B1, 0x5458}, //14477 #CJK UNIFIED IDEOGRAPH + {0xD4B2, 0x5706}, //14478 #CJK UNIFIED IDEOGRAPH + {0xD4B3, 0x733F}, //14479 #CJK UNIFIED IDEOGRAPH + {0xD4B4, 0x6E90}, //14480 #CJK UNIFIED IDEOGRAPH + {0xD4B5, 0x7F18}, //14481 #CJK UNIFIED IDEOGRAPH + {0xD4B6, 0x8FDC}, //14482 #CJK UNIFIED IDEOGRAPH + {0xD4B7, 0x82D1}, //14483 #CJK UNIFIED IDEOGRAPH + {0xD4B8, 0x613F}, //14484 #CJK UNIFIED IDEOGRAPH + {0xD4B9, 0x6028}, //14485 #CJK UNIFIED IDEOGRAPH + {0xD4BA, 0x9662}, //14486 #CJK UNIFIED IDEOGRAPH + {0xD4BB, 0x66F0}, //14487 #CJK UNIFIED IDEOGRAPH + {0xD4BC, 0x7EA6}, //14488 #CJK UNIFIED IDEOGRAPH + {0xD4BD, 0x8D8A}, //14489 #CJK UNIFIED IDEOGRAPH + {0xD4BE, 0x8DC3}, //14490 #CJK UNIFIED IDEOGRAPH + {0xD4BF, 0x94A5}, //14491 #CJK UNIFIED IDEOGRAPH + {0xD4C0, 0x5CB3}, //14492 #CJK UNIFIED IDEOGRAPH + {0xD4C1, 0x7CA4}, //14493 #CJK UNIFIED IDEOGRAPH + {0xD4C2, 0x6708}, //14494 #CJK UNIFIED IDEOGRAPH + {0xD4C3, 0x60A6}, //14495 #CJK UNIFIED IDEOGRAPH + {0xD4C4, 0x9605}, //14496 #CJK UNIFIED IDEOGRAPH + {0xD4C5, 0x8018}, //14497 #CJK UNIFIED IDEOGRAPH + {0xD4C6, 0x4E91}, //14498 #CJK UNIFIED IDEOGRAPH + {0xD4C7, 0x90E7}, //14499 #CJK UNIFIED IDEOGRAPH + {0xD4C8, 0x5300}, //14500 #CJK UNIFIED IDEOGRAPH + {0xD4C9, 0x9668}, //14501 #CJK UNIFIED IDEOGRAPH + {0xD4CA, 0x5141}, //14502 #CJK UNIFIED IDEOGRAPH + {0xD4CB, 0x8FD0}, //14503 #CJK UNIFIED IDEOGRAPH + {0xD4CC, 0x8574}, //14504 #CJK UNIFIED IDEOGRAPH + {0xD4CD, 0x915D}, //14505 #CJK UNIFIED IDEOGRAPH + {0xD4CE, 0x6655}, //14506 #CJK UNIFIED IDEOGRAPH + {0xD4CF, 0x97F5}, //14507 #CJK UNIFIED IDEOGRAPH + {0xD4D0, 0x5B55}, //14508 #CJK UNIFIED IDEOGRAPH + {0xD4D1, 0x531D}, //14509 #CJK UNIFIED IDEOGRAPH + {0xD4D2, 0x7838}, //14510 #CJK UNIFIED IDEOGRAPH + {0xD4D3, 0x6742}, //14511 #CJK UNIFIED IDEOGRAPH + {0xD4D4, 0x683D}, //14512 #CJK UNIFIED IDEOGRAPH + {0xD4D5, 0x54C9}, //14513 #CJK UNIFIED IDEOGRAPH + {0xD4D6, 0x707E}, //14514 #CJK UNIFIED IDEOGRAPH + {0xD4D7, 0x5BB0}, //14515 #CJK UNIFIED IDEOGRAPH + {0xD4D8, 0x8F7D}, //14516 #CJK UNIFIED IDEOGRAPH + {0xD4D9, 0x518D}, //14517 #CJK UNIFIED IDEOGRAPH + {0xD4DA, 0x5728}, //14518 #CJK UNIFIED IDEOGRAPH + {0xD4DB, 0x54B1}, //14519 #CJK UNIFIED IDEOGRAPH + {0xD4DC, 0x6512}, //14520 #CJK UNIFIED IDEOGRAPH + {0xD4DD, 0x6682}, //14521 #CJK UNIFIED IDEOGRAPH + {0xD4DE, 0x8D5E}, //14522 #CJK UNIFIED IDEOGRAPH + {0xD4DF, 0x8D43}, //14523 #CJK UNIFIED IDEOGRAPH + {0xD4E0, 0x810F}, //14524 #CJK UNIFIED IDEOGRAPH + {0xD4E1, 0x846C}, //14525 #CJK UNIFIED IDEOGRAPH + {0xD4E2, 0x906D}, //14526 #CJK UNIFIED IDEOGRAPH + {0xD4E3, 0x7CDF}, //14527 #CJK UNIFIED IDEOGRAPH + {0xD4E4, 0x51FF}, //14528 #CJK UNIFIED IDEOGRAPH + {0xD4E5, 0x85FB}, //14529 #CJK UNIFIED IDEOGRAPH + {0xD4E6, 0x67A3}, //14530 #CJK UNIFIED IDEOGRAPH + {0xD4E7, 0x65E9}, //14531 #CJK UNIFIED IDEOGRAPH + {0xD4E8, 0x6FA1}, //14532 #CJK UNIFIED IDEOGRAPH + {0xD4E9, 0x86A4}, //14533 #CJK UNIFIED IDEOGRAPH + {0xD4EA, 0x8E81}, //14534 #CJK UNIFIED IDEOGRAPH + {0xD4EB, 0x566A}, //14535 #CJK UNIFIED IDEOGRAPH + {0xD4EC, 0x9020}, //14536 #CJK UNIFIED IDEOGRAPH + {0xD4ED, 0x7682}, //14537 #CJK UNIFIED IDEOGRAPH + {0xD4EE, 0x7076}, //14538 #CJK UNIFIED IDEOGRAPH + {0xD4EF, 0x71E5}, //14539 #CJK UNIFIED IDEOGRAPH + {0xD4F0, 0x8D23}, //14540 #CJK UNIFIED IDEOGRAPH + {0xD4F1, 0x62E9}, //14541 #CJK UNIFIED IDEOGRAPH + {0xD4F2, 0x5219}, //14542 #CJK UNIFIED IDEOGRAPH + {0xD4F3, 0x6CFD}, //14543 #CJK UNIFIED IDEOGRAPH + {0xD4F4, 0x8D3C}, //14544 #CJK UNIFIED IDEOGRAPH + {0xD4F5, 0x600E}, //14545 #CJK UNIFIED IDEOGRAPH + {0xD4F6, 0x589E}, //14546 #CJK UNIFIED IDEOGRAPH + {0xD4F7, 0x618E}, //14547 #CJK UNIFIED IDEOGRAPH + {0xD4F8, 0x66FE}, //14548 #CJK UNIFIED IDEOGRAPH + {0xD4F9, 0x8D60}, //14549 #CJK UNIFIED IDEOGRAPH + {0xD4FA, 0x624E}, //14550 #CJK UNIFIED IDEOGRAPH + {0xD4FB, 0x55B3}, //14551 #CJK UNIFIED IDEOGRAPH + {0xD4FC, 0x6E23}, //14552 #CJK UNIFIED IDEOGRAPH + {0xD4FD, 0x672D}, //14553 #CJK UNIFIED IDEOGRAPH + {0xD4FE, 0x8F67}, //14554 #CJK UNIFIED IDEOGRAPH + {0xD540, 0x8A81}, //14555 #CJK UNIFIED IDEOGRAPH + {0xD541, 0x8A82}, //14556 #CJK UNIFIED IDEOGRAPH + {0xD542, 0x8A83}, //14557 #CJK UNIFIED IDEOGRAPH + {0xD543, 0x8A84}, //14558 #CJK UNIFIED IDEOGRAPH + {0xD544, 0x8A85}, //14559 #CJK UNIFIED IDEOGRAPH + {0xD545, 0x8A86}, //14560 #CJK UNIFIED IDEOGRAPH + {0xD546, 0x8A87}, //14561 #CJK UNIFIED IDEOGRAPH + {0xD547, 0x8A88}, //14562 #CJK UNIFIED IDEOGRAPH + {0xD548, 0x8A8B}, //14563 #CJK UNIFIED IDEOGRAPH + {0xD549, 0x8A8C}, //14564 #CJK UNIFIED IDEOGRAPH + {0xD54A, 0x8A8D}, //14565 #CJK UNIFIED IDEOGRAPH + {0xD54B, 0x8A8E}, //14566 #CJK UNIFIED IDEOGRAPH + {0xD54C, 0x8A8F}, //14567 #CJK UNIFIED IDEOGRAPH + {0xD54D, 0x8A90}, //14568 #CJK UNIFIED IDEOGRAPH + {0xD54E, 0x8A91}, //14569 #CJK UNIFIED IDEOGRAPH + {0xD54F, 0x8A92}, //14570 #CJK UNIFIED IDEOGRAPH + {0xD550, 0x8A94}, //14571 #CJK UNIFIED IDEOGRAPH + {0xD551, 0x8A95}, //14572 #CJK UNIFIED IDEOGRAPH + {0xD552, 0x8A96}, //14573 #CJK UNIFIED IDEOGRAPH + {0xD553, 0x8A97}, //14574 #CJK UNIFIED IDEOGRAPH + {0xD554, 0x8A98}, //14575 #CJK UNIFIED IDEOGRAPH + {0xD555, 0x8A99}, //14576 #CJK UNIFIED IDEOGRAPH + {0xD556, 0x8A9A}, //14577 #CJK UNIFIED IDEOGRAPH + {0xD557, 0x8A9B}, //14578 #CJK UNIFIED IDEOGRAPH + {0xD558, 0x8A9C}, //14579 #CJK UNIFIED IDEOGRAPH + {0xD559, 0x8A9D}, //14580 #CJK UNIFIED IDEOGRAPH + {0xD55A, 0x8A9E}, //14581 #CJK UNIFIED IDEOGRAPH + {0xD55B, 0x8A9F}, //14582 #CJK UNIFIED IDEOGRAPH + {0xD55C, 0x8AA0}, //14583 #CJK UNIFIED IDEOGRAPH + {0xD55D, 0x8AA1}, //14584 #CJK UNIFIED IDEOGRAPH + {0xD55E, 0x8AA2}, //14585 #CJK UNIFIED IDEOGRAPH + {0xD55F, 0x8AA3}, //14586 #CJK UNIFIED IDEOGRAPH + {0xD560, 0x8AA4}, //14587 #CJK UNIFIED IDEOGRAPH + {0xD561, 0x8AA5}, //14588 #CJK UNIFIED IDEOGRAPH + {0xD562, 0x8AA6}, //14589 #CJK UNIFIED IDEOGRAPH + {0xD563, 0x8AA7}, //14590 #CJK UNIFIED IDEOGRAPH + {0xD564, 0x8AA8}, //14591 #CJK UNIFIED IDEOGRAPH + {0xD565, 0x8AA9}, //14592 #CJK UNIFIED IDEOGRAPH + {0xD566, 0x8AAA}, //14593 #CJK UNIFIED IDEOGRAPH + {0xD567, 0x8AAB}, //14594 #CJK UNIFIED IDEOGRAPH + {0xD568, 0x8AAC}, //14595 #CJK UNIFIED IDEOGRAPH + {0xD569, 0x8AAD}, //14596 #CJK UNIFIED IDEOGRAPH + {0xD56A, 0x8AAE}, //14597 #CJK UNIFIED IDEOGRAPH + {0xD56B, 0x8AAF}, //14598 #CJK UNIFIED IDEOGRAPH + {0xD56C, 0x8AB0}, //14599 #CJK UNIFIED IDEOGRAPH + {0xD56D, 0x8AB1}, //14600 #CJK UNIFIED IDEOGRAPH + {0xD56E, 0x8AB2}, //14601 #CJK UNIFIED IDEOGRAPH + {0xD56F, 0x8AB3}, //14602 #CJK UNIFIED IDEOGRAPH + {0xD570, 0x8AB4}, //14603 #CJK UNIFIED IDEOGRAPH + {0xD571, 0x8AB5}, //14604 #CJK UNIFIED IDEOGRAPH + {0xD572, 0x8AB6}, //14605 #CJK UNIFIED IDEOGRAPH + {0xD573, 0x8AB7}, //14606 #CJK UNIFIED IDEOGRAPH + {0xD574, 0x8AB8}, //14607 #CJK UNIFIED IDEOGRAPH + {0xD575, 0x8AB9}, //14608 #CJK UNIFIED IDEOGRAPH + {0xD576, 0x8ABA}, //14609 #CJK UNIFIED IDEOGRAPH + {0xD577, 0x8ABB}, //14610 #CJK UNIFIED IDEOGRAPH + {0xD578, 0x8ABC}, //14611 #CJK UNIFIED IDEOGRAPH + {0xD579, 0x8ABD}, //14612 #CJK UNIFIED IDEOGRAPH + {0xD57A, 0x8ABE}, //14613 #CJK UNIFIED IDEOGRAPH + {0xD57B, 0x8ABF}, //14614 #CJK UNIFIED IDEOGRAPH + {0xD57C, 0x8AC0}, //14615 #CJK UNIFIED IDEOGRAPH + {0xD57D, 0x8AC1}, //14616 #CJK UNIFIED IDEOGRAPH + {0xD57E, 0x8AC2}, //14617 #CJK UNIFIED IDEOGRAPH + {0xD580, 0x8AC3}, //14618 #CJK UNIFIED IDEOGRAPH + {0xD581, 0x8AC4}, //14619 #CJK UNIFIED IDEOGRAPH + {0xD582, 0x8AC5}, //14620 #CJK UNIFIED IDEOGRAPH + {0xD583, 0x8AC6}, //14621 #CJK UNIFIED IDEOGRAPH + {0xD584, 0x8AC7}, //14622 #CJK UNIFIED IDEOGRAPH + {0xD585, 0x8AC8}, //14623 #CJK UNIFIED IDEOGRAPH + {0xD586, 0x8AC9}, //14624 #CJK UNIFIED IDEOGRAPH + {0xD587, 0x8ACA}, //14625 #CJK UNIFIED IDEOGRAPH + {0xD588, 0x8ACB}, //14626 #CJK UNIFIED IDEOGRAPH + {0xD589, 0x8ACC}, //14627 #CJK UNIFIED IDEOGRAPH + {0xD58A, 0x8ACD}, //14628 #CJK UNIFIED IDEOGRAPH + {0xD58B, 0x8ACE}, //14629 #CJK UNIFIED IDEOGRAPH + {0xD58C, 0x8ACF}, //14630 #CJK UNIFIED IDEOGRAPH + {0xD58D, 0x8AD0}, //14631 #CJK UNIFIED IDEOGRAPH + {0xD58E, 0x8AD1}, //14632 #CJK UNIFIED IDEOGRAPH + {0xD58F, 0x8AD2}, //14633 #CJK UNIFIED IDEOGRAPH + {0xD590, 0x8AD3}, //14634 #CJK UNIFIED IDEOGRAPH + {0xD591, 0x8AD4}, //14635 #CJK UNIFIED IDEOGRAPH + {0xD592, 0x8AD5}, //14636 #CJK UNIFIED IDEOGRAPH + {0xD593, 0x8AD6}, //14637 #CJK UNIFIED IDEOGRAPH + {0xD594, 0x8AD7}, //14638 #CJK UNIFIED IDEOGRAPH + {0xD595, 0x8AD8}, //14639 #CJK UNIFIED IDEOGRAPH + {0xD596, 0x8AD9}, //14640 #CJK UNIFIED IDEOGRAPH + {0xD597, 0x8ADA}, //14641 #CJK UNIFIED IDEOGRAPH + {0xD598, 0x8ADB}, //14642 #CJK UNIFIED IDEOGRAPH + {0xD599, 0x8ADC}, //14643 #CJK UNIFIED IDEOGRAPH + {0xD59A, 0x8ADD}, //14644 #CJK UNIFIED IDEOGRAPH + {0xD59B, 0x8ADE}, //14645 #CJK UNIFIED IDEOGRAPH + {0xD59C, 0x8ADF}, //14646 #CJK UNIFIED IDEOGRAPH + {0xD59D, 0x8AE0}, //14647 #CJK UNIFIED IDEOGRAPH + {0xD59E, 0x8AE1}, //14648 #CJK UNIFIED IDEOGRAPH + {0xD59F, 0x8AE2}, //14649 #CJK UNIFIED IDEOGRAPH + {0xD5A0, 0x8AE3}, //14650 #CJK UNIFIED IDEOGRAPH + {0xD5A1, 0x94E1}, //14651 #CJK UNIFIED IDEOGRAPH + {0xD5A2, 0x95F8}, //14652 #CJK UNIFIED IDEOGRAPH + {0xD5A3, 0x7728}, //14653 #CJK UNIFIED IDEOGRAPH + {0xD5A4, 0x6805}, //14654 #CJK UNIFIED IDEOGRAPH + {0xD5A5, 0x69A8}, //14655 #CJK UNIFIED IDEOGRAPH + {0xD5A6, 0x548B}, //14656 #CJK UNIFIED IDEOGRAPH + {0xD5A7, 0x4E4D}, //14657 #CJK UNIFIED IDEOGRAPH + {0xD5A8, 0x70B8}, //14658 #CJK UNIFIED IDEOGRAPH + {0xD5A9, 0x8BC8}, //14659 #CJK UNIFIED IDEOGRAPH + {0xD5AA, 0x6458}, //14660 #CJK UNIFIED IDEOGRAPH + {0xD5AB, 0x658B}, //14661 #CJK UNIFIED IDEOGRAPH + {0xD5AC, 0x5B85}, //14662 #CJK UNIFIED IDEOGRAPH + {0xD5AD, 0x7A84}, //14663 #CJK UNIFIED IDEOGRAPH + {0xD5AE, 0x503A}, //14664 #CJK UNIFIED IDEOGRAPH + {0xD5AF, 0x5BE8}, //14665 #CJK UNIFIED IDEOGRAPH + {0xD5B0, 0x77BB}, //14666 #CJK UNIFIED IDEOGRAPH + {0xD5B1, 0x6BE1}, //14667 #CJK UNIFIED IDEOGRAPH + {0xD5B2, 0x8A79}, //14668 #CJK UNIFIED IDEOGRAPH + {0xD5B3, 0x7C98}, //14669 #CJK UNIFIED IDEOGRAPH + {0xD5B4, 0x6CBE}, //14670 #CJK UNIFIED IDEOGRAPH + {0xD5B5, 0x76CF}, //14671 #CJK UNIFIED IDEOGRAPH + {0xD5B6, 0x65A9}, //14672 #CJK UNIFIED IDEOGRAPH + {0xD5B7, 0x8F97}, //14673 #CJK UNIFIED IDEOGRAPH + {0xD5B8, 0x5D2D}, //14674 #CJK UNIFIED IDEOGRAPH + {0xD5B9, 0x5C55}, //14675 #CJK UNIFIED IDEOGRAPH + {0xD5BA, 0x8638}, //14676 #CJK UNIFIED IDEOGRAPH + {0xD5BB, 0x6808}, //14677 #CJK UNIFIED IDEOGRAPH + {0xD5BC, 0x5360}, //14678 #CJK UNIFIED IDEOGRAPH + {0xD5BD, 0x6218}, //14679 #CJK UNIFIED IDEOGRAPH + {0xD5BE, 0x7AD9}, //14680 #CJK UNIFIED IDEOGRAPH + {0xD5BF, 0x6E5B}, //14681 #CJK UNIFIED IDEOGRAPH + {0xD5C0, 0x7EFD}, //14682 #CJK UNIFIED IDEOGRAPH + {0xD5C1, 0x6A1F}, //14683 #CJK UNIFIED IDEOGRAPH + {0xD5C2, 0x7AE0}, //14684 #CJK UNIFIED IDEOGRAPH + {0xD5C3, 0x5F70}, //14685 #CJK UNIFIED IDEOGRAPH + {0xD5C4, 0x6F33}, //14686 #CJK UNIFIED IDEOGRAPH + {0xD5C5, 0x5F20}, //14687 #CJK UNIFIED IDEOGRAPH + {0xD5C6, 0x638C}, //14688 #CJK UNIFIED IDEOGRAPH + {0xD5C7, 0x6DA8}, //14689 #CJK UNIFIED IDEOGRAPH + {0xD5C8, 0x6756}, //14690 #CJK UNIFIED IDEOGRAPH + {0xD5C9, 0x4E08}, //14691 #CJK UNIFIED IDEOGRAPH + {0xD5CA, 0x5E10}, //14692 #CJK UNIFIED IDEOGRAPH + {0xD5CB, 0x8D26}, //14693 #CJK UNIFIED IDEOGRAPH + {0xD5CC, 0x4ED7}, //14694 #CJK UNIFIED IDEOGRAPH + {0xD5CD, 0x80C0}, //14695 #CJK UNIFIED IDEOGRAPH + {0xD5CE, 0x7634}, //14696 #CJK UNIFIED IDEOGRAPH + {0xD5CF, 0x969C}, //14697 #CJK UNIFIED IDEOGRAPH + {0xD5D0, 0x62DB}, //14698 #CJK UNIFIED IDEOGRAPH + {0xD5D1, 0x662D}, //14699 #CJK UNIFIED IDEOGRAPH + {0xD5D2, 0x627E}, //14700 #CJK UNIFIED IDEOGRAPH + {0xD5D3, 0x6CBC}, //14701 #CJK UNIFIED IDEOGRAPH + {0xD5D4, 0x8D75}, //14702 #CJK UNIFIED IDEOGRAPH + {0xD5D5, 0x7167}, //14703 #CJK UNIFIED IDEOGRAPH + {0xD5D6, 0x7F69}, //14704 #CJK UNIFIED IDEOGRAPH + {0xD5D7, 0x5146}, //14705 #CJK UNIFIED IDEOGRAPH + {0xD5D8, 0x8087}, //14706 #CJK UNIFIED IDEOGRAPH + {0xD5D9, 0x53EC}, //14707 #CJK UNIFIED IDEOGRAPH + {0xD5DA, 0x906E}, //14708 #CJK UNIFIED IDEOGRAPH + {0xD5DB, 0x6298}, //14709 #CJK UNIFIED IDEOGRAPH + {0xD5DC, 0x54F2}, //14710 #CJK UNIFIED IDEOGRAPH + {0xD5DD, 0x86F0}, //14711 #CJK UNIFIED IDEOGRAPH + {0xD5DE, 0x8F99}, //14712 #CJK UNIFIED IDEOGRAPH + {0xD5DF, 0x8005}, //14713 #CJK UNIFIED IDEOGRAPH + {0xD5E0, 0x9517}, //14714 #CJK UNIFIED IDEOGRAPH + {0xD5E1, 0x8517}, //14715 #CJK UNIFIED IDEOGRAPH + {0xD5E2, 0x8FD9}, //14716 #CJK UNIFIED IDEOGRAPH + {0xD5E3, 0x6D59}, //14717 #CJK UNIFIED IDEOGRAPH + {0xD5E4, 0x73CD}, //14718 #CJK UNIFIED IDEOGRAPH + {0xD5E5, 0x659F}, //14719 #CJK UNIFIED IDEOGRAPH + {0xD5E6, 0x771F}, //14720 #CJK UNIFIED IDEOGRAPH + {0xD5E7, 0x7504}, //14721 #CJK UNIFIED IDEOGRAPH + {0xD5E8, 0x7827}, //14722 #CJK UNIFIED IDEOGRAPH + {0xD5E9, 0x81FB}, //14723 #CJK UNIFIED IDEOGRAPH + {0xD5EA, 0x8D1E}, //14724 #CJK UNIFIED IDEOGRAPH + {0xD5EB, 0x9488}, //14725 #CJK UNIFIED IDEOGRAPH + {0xD5EC, 0x4FA6}, //14726 #CJK UNIFIED IDEOGRAPH + {0xD5ED, 0x6795}, //14727 #CJK UNIFIED IDEOGRAPH + {0xD5EE, 0x75B9}, //14728 #CJK UNIFIED IDEOGRAPH + {0xD5EF, 0x8BCA}, //14729 #CJK UNIFIED IDEOGRAPH + {0xD5F0, 0x9707}, //14730 #CJK UNIFIED IDEOGRAPH + {0xD5F1, 0x632F}, //14731 #CJK UNIFIED IDEOGRAPH + {0xD5F2, 0x9547}, //14732 #CJK UNIFIED IDEOGRAPH + {0xD5F3, 0x9635}, //14733 #CJK UNIFIED IDEOGRAPH + {0xD5F4, 0x84B8}, //14734 #CJK UNIFIED IDEOGRAPH + {0xD5F5, 0x6323}, //14735 #CJK UNIFIED IDEOGRAPH + {0xD5F6, 0x7741}, //14736 #CJK UNIFIED IDEOGRAPH + {0xD5F7, 0x5F81}, //14737 #CJK UNIFIED IDEOGRAPH + {0xD5F8, 0x72F0}, //14738 #CJK UNIFIED IDEOGRAPH + {0xD5F9, 0x4E89}, //14739 #CJK UNIFIED IDEOGRAPH + {0xD5FA, 0x6014}, //14740 #CJK UNIFIED IDEOGRAPH + {0xD5FB, 0x6574}, //14741 #CJK UNIFIED IDEOGRAPH + {0xD5FC, 0x62EF}, //14742 #CJK UNIFIED IDEOGRAPH + {0xD5FD, 0x6B63}, //14743 #CJK UNIFIED IDEOGRAPH + {0xD5FE, 0x653F}, //14744 #CJK UNIFIED IDEOGRAPH + {0xD640, 0x8AE4}, //14745 #CJK UNIFIED IDEOGRAPH + {0xD641, 0x8AE5}, //14746 #CJK UNIFIED IDEOGRAPH + {0xD642, 0x8AE6}, //14747 #CJK UNIFIED IDEOGRAPH + {0xD643, 0x8AE7}, //14748 #CJK UNIFIED IDEOGRAPH + {0xD644, 0x8AE8}, //14749 #CJK UNIFIED IDEOGRAPH + {0xD645, 0x8AE9}, //14750 #CJK UNIFIED IDEOGRAPH + {0xD646, 0x8AEA}, //14751 #CJK UNIFIED IDEOGRAPH + {0xD647, 0x8AEB}, //14752 #CJK UNIFIED IDEOGRAPH + {0xD648, 0x8AEC}, //14753 #CJK UNIFIED IDEOGRAPH + {0xD649, 0x8AED}, //14754 #CJK UNIFIED IDEOGRAPH + {0xD64A, 0x8AEE}, //14755 #CJK UNIFIED IDEOGRAPH + {0xD64B, 0x8AEF}, //14756 #CJK UNIFIED IDEOGRAPH + {0xD64C, 0x8AF0}, //14757 #CJK UNIFIED IDEOGRAPH + {0xD64D, 0x8AF1}, //14758 #CJK UNIFIED IDEOGRAPH + {0xD64E, 0x8AF2}, //14759 #CJK UNIFIED IDEOGRAPH + {0xD64F, 0x8AF3}, //14760 #CJK UNIFIED IDEOGRAPH + {0xD650, 0x8AF4}, //14761 #CJK UNIFIED IDEOGRAPH + {0xD651, 0x8AF5}, //14762 #CJK UNIFIED IDEOGRAPH + {0xD652, 0x8AF6}, //14763 #CJK UNIFIED IDEOGRAPH + {0xD653, 0x8AF7}, //14764 #CJK UNIFIED IDEOGRAPH + {0xD654, 0x8AF8}, //14765 #CJK UNIFIED IDEOGRAPH + {0xD655, 0x8AF9}, //14766 #CJK UNIFIED IDEOGRAPH + {0xD656, 0x8AFA}, //14767 #CJK UNIFIED IDEOGRAPH + {0xD657, 0x8AFB}, //14768 #CJK UNIFIED IDEOGRAPH + {0xD658, 0x8AFC}, //14769 #CJK UNIFIED IDEOGRAPH + {0xD659, 0x8AFD}, //14770 #CJK UNIFIED IDEOGRAPH + {0xD65A, 0x8AFE}, //14771 #CJK UNIFIED IDEOGRAPH + {0xD65B, 0x8AFF}, //14772 #CJK UNIFIED IDEOGRAPH + {0xD65C, 0x8B00}, //14773 #CJK UNIFIED IDEOGRAPH + {0xD65D, 0x8B01}, //14774 #CJK UNIFIED IDEOGRAPH + {0xD65E, 0x8B02}, //14775 #CJK UNIFIED IDEOGRAPH + {0xD65F, 0x8B03}, //14776 #CJK UNIFIED IDEOGRAPH + {0xD660, 0x8B04}, //14777 #CJK UNIFIED IDEOGRAPH + {0xD661, 0x8B05}, //14778 #CJK UNIFIED IDEOGRAPH + {0xD662, 0x8B06}, //14779 #CJK UNIFIED IDEOGRAPH + {0xD663, 0x8B08}, //14780 #CJK UNIFIED IDEOGRAPH + {0xD664, 0x8B09}, //14781 #CJK UNIFIED IDEOGRAPH + {0xD665, 0x8B0A}, //14782 #CJK UNIFIED IDEOGRAPH + {0xD666, 0x8B0B}, //14783 #CJK UNIFIED IDEOGRAPH + {0xD667, 0x8B0C}, //14784 #CJK UNIFIED IDEOGRAPH + {0xD668, 0x8B0D}, //14785 #CJK UNIFIED IDEOGRAPH + {0xD669, 0x8B0E}, //14786 #CJK UNIFIED IDEOGRAPH + {0xD66A, 0x8B0F}, //14787 #CJK UNIFIED IDEOGRAPH + {0xD66B, 0x8B10}, //14788 #CJK UNIFIED IDEOGRAPH + {0xD66C, 0x8B11}, //14789 #CJK UNIFIED IDEOGRAPH + {0xD66D, 0x8B12}, //14790 #CJK UNIFIED IDEOGRAPH + {0xD66E, 0x8B13}, //14791 #CJK UNIFIED IDEOGRAPH + {0xD66F, 0x8B14}, //14792 #CJK UNIFIED IDEOGRAPH + {0xD670, 0x8B15}, //14793 #CJK UNIFIED IDEOGRAPH + {0xD671, 0x8B16}, //14794 #CJK UNIFIED IDEOGRAPH + {0xD672, 0x8B17}, //14795 #CJK UNIFIED IDEOGRAPH + {0xD673, 0x8B18}, //14796 #CJK UNIFIED IDEOGRAPH + {0xD674, 0x8B19}, //14797 #CJK UNIFIED IDEOGRAPH + {0xD675, 0x8B1A}, //14798 #CJK UNIFIED IDEOGRAPH + {0xD676, 0x8B1B}, //14799 #CJK UNIFIED IDEOGRAPH + {0xD677, 0x8B1C}, //14800 #CJK UNIFIED IDEOGRAPH + {0xD678, 0x8B1D}, //14801 #CJK UNIFIED IDEOGRAPH + {0xD679, 0x8B1E}, //14802 #CJK UNIFIED IDEOGRAPH + {0xD67A, 0x8B1F}, //14803 #CJK UNIFIED IDEOGRAPH + {0xD67B, 0x8B20}, //14804 #CJK UNIFIED IDEOGRAPH + {0xD67C, 0x8B21}, //14805 #CJK UNIFIED IDEOGRAPH + {0xD67D, 0x8B22}, //14806 #CJK UNIFIED IDEOGRAPH + {0xD67E, 0x8B23}, //14807 #CJK UNIFIED IDEOGRAPH + {0xD680, 0x8B24}, //14808 #CJK UNIFIED IDEOGRAPH + {0xD681, 0x8B25}, //14809 #CJK UNIFIED IDEOGRAPH + {0xD682, 0x8B27}, //14810 #CJK UNIFIED IDEOGRAPH + {0xD683, 0x8B28}, //14811 #CJK UNIFIED IDEOGRAPH + {0xD684, 0x8B29}, //14812 #CJK UNIFIED IDEOGRAPH + {0xD685, 0x8B2A}, //14813 #CJK UNIFIED IDEOGRAPH + {0xD686, 0x8B2B}, //14814 #CJK UNIFIED IDEOGRAPH + {0xD687, 0x8B2C}, //14815 #CJK UNIFIED IDEOGRAPH + {0xD688, 0x8B2D}, //14816 #CJK UNIFIED IDEOGRAPH + {0xD689, 0x8B2E}, //14817 #CJK UNIFIED IDEOGRAPH + {0xD68A, 0x8B2F}, //14818 #CJK UNIFIED IDEOGRAPH + {0xD68B, 0x8B30}, //14819 #CJK UNIFIED IDEOGRAPH + {0xD68C, 0x8B31}, //14820 #CJK UNIFIED IDEOGRAPH + {0xD68D, 0x8B32}, //14821 #CJK UNIFIED IDEOGRAPH + {0xD68E, 0x8B33}, //14822 #CJK UNIFIED IDEOGRAPH + {0xD68F, 0x8B34}, //14823 #CJK UNIFIED IDEOGRAPH + {0xD690, 0x8B35}, //14824 #CJK UNIFIED IDEOGRAPH + {0xD691, 0x8B36}, //14825 #CJK UNIFIED IDEOGRAPH + {0xD692, 0x8B37}, //14826 #CJK UNIFIED IDEOGRAPH + {0xD693, 0x8B38}, //14827 #CJK UNIFIED IDEOGRAPH + {0xD694, 0x8B39}, //14828 #CJK UNIFIED IDEOGRAPH + {0xD695, 0x8B3A}, //14829 #CJK UNIFIED IDEOGRAPH + {0xD696, 0x8B3B}, //14830 #CJK UNIFIED IDEOGRAPH + {0xD697, 0x8B3C}, //14831 #CJK UNIFIED IDEOGRAPH + {0xD698, 0x8B3D}, //14832 #CJK UNIFIED IDEOGRAPH + {0xD699, 0x8B3E}, //14833 #CJK UNIFIED IDEOGRAPH + {0xD69A, 0x8B3F}, //14834 #CJK UNIFIED IDEOGRAPH + {0xD69B, 0x8B40}, //14835 #CJK UNIFIED IDEOGRAPH + {0xD69C, 0x8B41}, //14836 #CJK UNIFIED IDEOGRAPH + {0xD69D, 0x8B42}, //14837 #CJK UNIFIED IDEOGRAPH + {0xD69E, 0x8B43}, //14838 #CJK UNIFIED IDEOGRAPH + {0xD69F, 0x8B44}, //14839 #CJK UNIFIED IDEOGRAPH + {0xD6A0, 0x8B45}, //14840 #CJK UNIFIED IDEOGRAPH + {0xD6A1, 0x5E27}, //14841 #CJK UNIFIED IDEOGRAPH + {0xD6A2, 0x75C7}, //14842 #CJK UNIFIED IDEOGRAPH + {0xD6A3, 0x90D1}, //14843 #CJK UNIFIED IDEOGRAPH + {0xD6A4, 0x8BC1}, //14844 #CJK UNIFIED IDEOGRAPH + {0xD6A5, 0x829D}, //14845 #CJK UNIFIED IDEOGRAPH + {0xD6A6, 0x679D}, //14846 #CJK UNIFIED IDEOGRAPH + {0xD6A7, 0x652F}, //14847 #CJK UNIFIED IDEOGRAPH + {0xD6A8, 0x5431}, //14848 #CJK UNIFIED IDEOGRAPH + {0xD6A9, 0x8718}, //14849 #CJK UNIFIED IDEOGRAPH + {0xD6AA, 0x77E5}, //14850 #CJK UNIFIED IDEOGRAPH + {0xD6AB, 0x80A2}, //14851 #CJK UNIFIED IDEOGRAPH + {0xD6AC, 0x8102}, //14852 #CJK UNIFIED IDEOGRAPH + {0xD6AD, 0x6C41}, //14853 #CJK UNIFIED IDEOGRAPH + {0xD6AE, 0x4E4B}, //14854 #CJK UNIFIED IDEOGRAPH + {0xD6AF, 0x7EC7}, //14855 #CJK UNIFIED IDEOGRAPH + {0xD6B0, 0x804C}, //14856 #CJK UNIFIED IDEOGRAPH + {0xD6B1, 0x76F4}, //14857 #CJK UNIFIED IDEOGRAPH + {0xD6B2, 0x690D}, //14858 #CJK UNIFIED IDEOGRAPH + {0xD6B3, 0x6B96}, //14859 #CJK UNIFIED IDEOGRAPH + {0xD6B4, 0x6267}, //14860 #CJK UNIFIED IDEOGRAPH + {0xD6B5, 0x503C}, //14861 #CJK UNIFIED IDEOGRAPH + {0xD6B6, 0x4F84}, //14862 #CJK UNIFIED IDEOGRAPH + {0xD6B7, 0x5740}, //14863 #CJK UNIFIED IDEOGRAPH + {0xD6B8, 0x6307}, //14864 #CJK UNIFIED IDEOGRAPH + {0xD6B9, 0x6B62}, //14865 #CJK UNIFIED IDEOGRAPH + {0xD6BA, 0x8DBE}, //14866 #CJK UNIFIED IDEOGRAPH + {0xD6BB, 0x53EA}, //14867 #CJK UNIFIED IDEOGRAPH + {0xD6BC, 0x65E8}, //14868 #CJK UNIFIED IDEOGRAPH + {0xD6BD, 0x7EB8}, //14869 #CJK UNIFIED IDEOGRAPH + {0xD6BE, 0x5FD7}, //14870 #CJK UNIFIED IDEOGRAPH + {0xD6BF, 0x631A}, //14871 #CJK UNIFIED IDEOGRAPH + {0xD6C0, 0x63B7}, //14872 #CJK UNIFIED IDEOGRAPH + {0xD6C1, 0x81F3}, //14873 #CJK UNIFIED IDEOGRAPH + {0xD6C2, 0x81F4}, //14874 #CJK UNIFIED IDEOGRAPH + {0xD6C3, 0x7F6E}, //14875 #CJK UNIFIED IDEOGRAPH + {0xD6C4, 0x5E1C}, //14876 #CJK UNIFIED IDEOGRAPH + {0xD6C5, 0x5CD9}, //14877 #CJK UNIFIED IDEOGRAPH + {0xD6C6, 0x5236}, //14878 #CJK UNIFIED IDEOGRAPH + {0xD6C7, 0x667A}, //14879 #CJK UNIFIED IDEOGRAPH + {0xD6C8, 0x79E9}, //14880 #CJK UNIFIED IDEOGRAPH + {0xD6C9, 0x7A1A}, //14881 #CJK UNIFIED IDEOGRAPH + {0xD6CA, 0x8D28}, //14882 #CJK UNIFIED IDEOGRAPH + {0xD6CB, 0x7099}, //14883 #CJK UNIFIED IDEOGRAPH + {0xD6CC, 0x75D4}, //14884 #CJK UNIFIED IDEOGRAPH + {0xD6CD, 0x6EDE}, //14885 #CJK UNIFIED IDEOGRAPH + {0xD6CE, 0x6CBB}, //14886 #CJK UNIFIED IDEOGRAPH + {0xD6CF, 0x7A92}, //14887 #CJK UNIFIED IDEOGRAPH + {0xD6D0, 0x4E2D}, //14888 #CJK UNIFIED IDEOGRAPH + {0xD6D1, 0x76C5}, //14889 #CJK UNIFIED IDEOGRAPH + {0xD6D2, 0x5FE0}, //14890 #CJK UNIFIED IDEOGRAPH + {0xD6D3, 0x949F}, //14891 #CJK UNIFIED IDEOGRAPH + {0xD6D4, 0x8877}, //14892 #CJK UNIFIED IDEOGRAPH + {0xD6D5, 0x7EC8}, //14893 #CJK UNIFIED IDEOGRAPH + {0xD6D6, 0x79CD}, //14894 #CJK UNIFIED IDEOGRAPH + {0xD6D7, 0x80BF}, //14895 #CJK UNIFIED IDEOGRAPH + {0xD6D8, 0x91CD}, //14896 #CJK UNIFIED IDEOGRAPH + {0xD6D9, 0x4EF2}, //14897 #CJK UNIFIED IDEOGRAPH + {0xD6DA, 0x4F17}, //14898 #CJK UNIFIED IDEOGRAPH + {0xD6DB, 0x821F}, //14899 #CJK UNIFIED IDEOGRAPH + {0xD6DC, 0x5468}, //14900 #CJK UNIFIED IDEOGRAPH + {0xD6DD, 0x5DDE}, //14901 #CJK UNIFIED IDEOGRAPH + {0xD6DE, 0x6D32}, //14902 #CJK UNIFIED IDEOGRAPH + {0xD6DF, 0x8BCC}, //14903 #CJK UNIFIED IDEOGRAPH + {0xD6E0, 0x7CA5}, //14904 #CJK UNIFIED IDEOGRAPH + {0xD6E1, 0x8F74}, //14905 #CJK UNIFIED IDEOGRAPH + {0xD6E2, 0x8098}, //14906 #CJK UNIFIED IDEOGRAPH + {0xD6E3, 0x5E1A}, //14907 #CJK UNIFIED IDEOGRAPH + {0xD6E4, 0x5492}, //14908 #CJK UNIFIED IDEOGRAPH + {0xD6E5, 0x76B1}, //14909 #CJK UNIFIED IDEOGRAPH + {0xD6E6, 0x5B99}, //14910 #CJK UNIFIED IDEOGRAPH + {0xD6E7, 0x663C}, //14911 #CJK UNIFIED IDEOGRAPH + {0xD6E8, 0x9AA4}, //14912 #CJK UNIFIED IDEOGRAPH + {0xD6E9, 0x73E0}, //14913 #CJK UNIFIED IDEOGRAPH + {0xD6EA, 0x682A}, //14914 #CJK UNIFIED IDEOGRAPH + {0xD6EB, 0x86DB}, //14915 #CJK UNIFIED IDEOGRAPH + {0xD6EC, 0x6731}, //14916 #CJK UNIFIED IDEOGRAPH + {0xD6ED, 0x732A}, //14917 #CJK UNIFIED IDEOGRAPH + {0xD6EE, 0x8BF8}, //14918 #CJK UNIFIED IDEOGRAPH + {0xD6EF, 0x8BDB}, //14919 #CJK UNIFIED IDEOGRAPH + {0xD6F0, 0x9010}, //14920 #CJK UNIFIED IDEOGRAPH + {0xD6F1, 0x7AF9}, //14921 #CJK UNIFIED IDEOGRAPH + {0xD6F2, 0x70DB}, //14922 #CJK UNIFIED IDEOGRAPH + {0xD6F3, 0x716E}, //14923 #CJK UNIFIED IDEOGRAPH + {0xD6F4, 0x62C4}, //14924 #CJK UNIFIED IDEOGRAPH + {0xD6F5, 0x77A9}, //14925 #CJK UNIFIED IDEOGRAPH + {0xD6F6, 0x5631}, //14926 #CJK UNIFIED IDEOGRAPH + {0xD6F7, 0x4E3B}, //14927 #CJK UNIFIED IDEOGRAPH + {0xD6F8, 0x8457}, //14928 #CJK UNIFIED IDEOGRAPH + {0xD6F9, 0x67F1}, //14929 #CJK UNIFIED IDEOGRAPH + {0xD6FA, 0x52A9}, //14930 #CJK UNIFIED IDEOGRAPH + {0xD6FB, 0x86C0}, //14931 #CJK UNIFIED IDEOGRAPH + {0xD6FC, 0x8D2E}, //14932 #CJK UNIFIED IDEOGRAPH + {0xD6FD, 0x94F8}, //14933 #CJK UNIFIED IDEOGRAPH + {0xD6FE, 0x7B51}, //14934 #CJK UNIFIED IDEOGRAPH + {0xD740, 0x8B46}, //14935 #CJK UNIFIED IDEOGRAPH + {0xD741, 0x8B47}, //14936 #CJK UNIFIED IDEOGRAPH + {0xD742, 0x8B48}, //14937 #CJK UNIFIED IDEOGRAPH + {0xD743, 0x8B49}, //14938 #CJK UNIFIED IDEOGRAPH + {0xD744, 0x8B4A}, //14939 #CJK UNIFIED IDEOGRAPH + {0xD745, 0x8B4B}, //14940 #CJK UNIFIED IDEOGRAPH + {0xD746, 0x8B4C}, //14941 #CJK UNIFIED IDEOGRAPH + {0xD747, 0x8B4D}, //14942 #CJK UNIFIED IDEOGRAPH + {0xD748, 0x8B4E}, //14943 #CJK UNIFIED IDEOGRAPH + {0xD749, 0x8B4F}, //14944 #CJK UNIFIED IDEOGRAPH + {0xD74A, 0x8B50}, //14945 #CJK UNIFIED IDEOGRAPH + {0xD74B, 0x8B51}, //14946 #CJK UNIFIED IDEOGRAPH + {0xD74C, 0x8B52}, //14947 #CJK UNIFIED IDEOGRAPH + {0xD74D, 0x8B53}, //14948 #CJK UNIFIED IDEOGRAPH + {0xD74E, 0x8B54}, //14949 #CJK UNIFIED IDEOGRAPH + {0xD74F, 0x8B55}, //14950 #CJK UNIFIED IDEOGRAPH + {0xD750, 0x8B56}, //14951 #CJK UNIFIED IDEOGRAPH + {0xD751, 0x8B57}, //14952 #CJK UNIFIED IDEOGRAPH + {0xD752, 0x8B58}, //14953 #CJK UNIFIED IDEOGRAPH + {0xD753, 0x8B59}, //14954 #CJK UNIFIED IDEOGRAPH + {0xD754, 0x8B5A}, //14955 #CJK UNIFIED IDEOGRAPH + {0xD755, 0x8B5B}, //14956 #CJK UNIFIED IDEOGRAPH + {0xD756, 0x8B5C}, //14957 #CJK UNIFIED IDEOGRAPH + {0xD757, 0x8B5D}, //14958 #CJK UNIFIED IDEOGRAPH + {0xD758, 0x8B5E}, //14959 #CJK UNIFIED IDEOGRAPH + {0xD759, 0x8B5F}, //14960 #CJK UNIFIED IDEOGRAPH + {0xD75A, 0x8B60}, //14961 #CJK UNIFIED IDEOGRAPH + {0xD75B, 0x8B61}, //14962 #CJK UNIFIED IDEOGRAPH + {0xD75C, 0x8B62}, //14963 #CJK UNIFIED IDEOGRAPH + {0xD75D, 0x8B63}, //14964 #CJK UNIFIED IDEOGRAPH + {0xD75E, 0x8B64}, //14965 #CJK UNIFIED IDEOGRAPH + {0xD75F, 0x8B65}, //14966 #CJK UNIFIED IDEOGRAPH + {0xD760, 0x8B67}, //14967 #CJK UNIFIED IDEOGRAPH + {0xD761, 0x8B68}, //14968 #CJK UNIFIED IDEOGRAPH + {0xD762, 0x8B69}, //14969 #CJK UNIFIED IDEOGRAPH + {0xD763, 0x8B6A}, //14970 #CJK UNIFIED IDEOGRAPH + {0xD764, 0x8B6B}, //14971 #CJK UNIFIED IDEOGRAPH + {0xD765, 0x8B6D}, //14972 #CJK UNIFIED IDEOGRAPH + {0xD766, 0x8B6E}, //14973 #CJK UNIFIED IDEOGRAPH + {0xD767, 0x8B6F}, //14974 #CJK UNIFIED IDEOGRAPH + {0xD768, 0x8B70}, //14975 #CJK UNIFIED IDEOGRAPH + {0xD769, 0x8B71}, //14976 #CJK UNIFIED IDEOGRAPH + {0xD76A, 0x8B72}, //14977 #CJK UNIFIED IDEOGRAPH + {0xD76B, 0x8B73}, //14978 #CJK UNIFIED IDEOGRAPH + {0xD76C, 0x8B74}, //14979 #CJK UNIFIED IDEOGRAPH + {0xD76D, 0x8B75}, //14980 #CJK UNIFIED IDEOGRAPH + {0xD76E, 0x8B76}, //14981 #CJK UNIFIED IDEOGRAPH + {0xD76F, 0x8B77}, //14982 #CJK UNIFIED IDEOGRAPH + {0xD770, 0x8B78}, //14983 #CJK UNIFIED IDEOGRAPH + {0xD771, 0x8B79}, //14984 #CJK UNIFIED IDEOGRAPH + {0xD772, 0x8B7A}, //14985 #CJK UNIFIED IDEOGRAPH + {0xD773, 0x8B7B}, //14986 #CJK UNIFIED IDEOGRAPH + {0xD774, 0x8B7C}, //14987 #CJK UNIFIED IDEOGRAPH + {0xD775, 0x8B7D}, //14988 #CJK UNIFIED IDEOGRAPH + {0xD776, 0x8B7E}, //14989 #CJK UNIFIED IDEOGRAPH + {0xD777, 0x8B7F}, //14990 #CJK UNIFIED IDEOGRAPH + {0xD778, 0x8B80}, //14991 #CJK UNIFIED IDEOGRAPH + {0xD779, 0x8B81}, //14992 #CJK UNIFIED IDEOGRAPH + {0xD77A, 0x8B82}, //14993 #CJK UNIFIED IDEOGRAPH + {0xD77B, 0x8B83}, //14994 #CJK UNIFIED IDEOGRAPH + {0xD77C, 0x8B84}, //14995 #CJK UNIFIED IDEOGRAPH + {0xD77D, 0x8B85}, //14996 #CJK UNIFIED IDEOGRAPH + {0xD77E, 0x8B86}, //14997 #CJK UNIFIED IDEOGRAPH + {0xD780, 0x8B87}, //14998 #CJK UNIFIED IDEOGRAPH + {0xD781, 0x8B88}, //14999 #CJK UNIFIED IDEOGRAPH + {0xD782, 0x8B89}, //15000 #CJK UNIFIED IDEOGRAPH + {0xD783, 0x8B8A}, //15001 #CJK UNIFIED IDEOGRAPH + {0xD784, 0x8B8B}, //15002 #CJK UNIFIED IDEOGRAPH + {0xD785, 0x8B8C}, //15003 #CJK UNIFIED IDEOGRAPH + {0xD786, 0x8B8D}, //15004 #CJK UNIFIED IDEOGRAPH + {0xD787, 0x8B8E}, //15005 #CJK UNIFIED IDEOGRAPH + {0xD788, 0x8B8F}, //15006 #CJK UNIFIED IDEOGRAPH + {0xD789, 0x8B90}, //15007 #CJK UNIFIED IDEOGRAPH + {0xD78A, 0x8B91}, //15008 #CJK UNIFIED IDEOGRAPH + {0xD78B, 0x8B92}, //15009 #CJK UNIFIED IDEOGRAPH + {0xD78C, 0x8B93}, //15010 #CJK UNIFIED IDEOGRAPH + {0xD78D, 0x8B94}, //15011 #CJK UNIFIED IDEOGRAPH + {0xD78E, 0x8B95}, //15012 #CJK UNIFIED IDEOGRAPH + {0xD78F, 0x8B96}, //15013 #CJK UNIFIED IDEOGRAPH + {0xD790, 0x8B97}, //15014 #CJK UNIFIED IDEOGRAPH + {0xD791, 0x8B98}, //15015 #CJK UNIFIED IDEOGRAPH + {0xD792, 0x8B99}, //15016 #CJK UNIFIED IDEOGRAPH + {0xD793, 0x8B9A}, //15017 #CJK UNIFIED IDEOGRAPH + {0xD794, 0x8B9B}, //15018 #CJK UNIFIED IDEOGRAPH + {0xD795, 0x8B9C}, //15019 #CJK UNIFIED IDEOGRAPH + {0xD796, 0x8B9D}, //15020 #CJK UNIFIED IDEOGRAPH + {0xD797, 0x8B9E}, //15021 #CJK UNIFIED IDEOGRAPH + {0xD798, 0x8B9F}, //15022 #CJK UNIFIED IDEOGRAPH + {0xD799, 0x8BAC}, //15023 #CJK UNIFIED IDEOGRAPH + {0xD79A, 0x8BB1}, //15024 #CJK UNIFIED IDEOGRAPH + {0xD79B, 0x8BBB}, //15025 #CJK UNIFIED IDEOGRAPH + {0xD79C, 0x8BC7}, //15026 #CJK UNIFIED IDEOGRAPH + {0xD79D, 0x8BD0}, //15027 #CJK UNIFIED IDEOGRAPH + {0xD79E, 0x8BEA}, //15028 #CJK UNIFIED IDEOGRAPH + {0xD79F, 0x8C09}, //15029 #CJK UNIFIED IDEOGRAPH + {0xD7A0, 0x8C1E}, //15030 #CJK UNIFIED IDEOGRAPH + {0xD7A1, 0x4F4F}, //15031 #CJK UNIFIED IDEOGRAPH + {0xD7A2, 0x6CE8}, //15032 #CJK UNIFIED IDEOGRAPH + {0xD7A3, 0x795D}, //15033 #CJK UNIFIED IDEOGRAPH + {0xD7A4, 0x9A7B}, //15034 #CJK UNIFIED IDEOGRAPH + {0xD7A5, 0x6293}, //15035 #CJK UNIFIED IDEOGRAPH + {0xD7A6, 0x722A}, //15036 #CJK UNIFIED IDEOGRAPH + {0xD7A7, 0x62FD}, //15037 #CJK UNIFIED IDEOGRAPH + {0xD7A8, 0x4E13}, //15038 #CJK UNIFIED IDEOGRAPH + {0xD7A9, 0x7816}, //15039 #CJK UNIFIED IDEOGRAPH + {0xD7AA, 0x8F6C}, //15040 #CJK UNIFIED IDEOGRAPH + {0xD7AB, 0x64B0}, //15041 #CJK UNIFIED IDEOGRAPH + {0xD7AC, 0x8D5A}, //15042 #CJK UNIFIED IDEOGRAPH + {0xD7AD, 0x7BC6}, //15043 #CJK UNIFIED IDEOGRAPH + {0xD7AE, 0x6869}, //15044 #CJK UNIFIED IDEOGRAPH + {0xD7AF, 0x5E84}, //15045 #CJK UNIFIED IDEOGRAPH + {0xD7B0, 0x88C5}, //15046 #CJK UNIFIED IDEOGRAPH + {0xD7B1, 0x5986}, //15047 #CJK UNIFIED IDEOGRAPH + {0xD7B2, 0x649E}, //15048 #CJK UNIFIED IDEOGRAPH + {0xD7B3, 0x58EE}, //15049 #CJK UNIFIED IDEOGRAPH + {0xD7B4, 0x72B6}, //15050 #CJK UNIFIED IDEOGRAPH + {0xD7B5, 0x690E}, //15051 #CJK UNIFIED IDEOGRAPH + {0xD7B6, 0x9525}, //15052 #CJK UNIFIED IDEOGRAPH + {0xD7B7, 0x8FFD}, //15053 #CJK UNIFIED IDEOGRAPH + {0xD7B8, 0x8D58}, //15054 #CJK UNIFIED IDEOGRAPH + {0xD7B9, 0x5760}, //15055 #CJK UNIFIED IDEOGRAPH + {0xD7BA, 0x7F00}, //15056 #CJK UNIFIED IDEOGRAPH + {0xD7BB, 0x8C06}, //15057 #CJK UNIFIED IDEOGRAPH + {0xD7BC, 0x51C6}, //15058 #CJK UNIFIED IDEOGRAPH + {0xD7BD, 0x6349}, //15059 #CJK UNIFIED IDEOGRAPH + {0xD7BE, 0x62D9}, //15060 #CJK UNIFIED IDEOGRAPH + {0xD7BF, 0x5353}, //15061 #CJK UNIFIED IDEOGRAPH + {0xD7C0, 0x684C}, //15062 #CJK UNIFIED IDEOGRAPH + {0xD7C1, 0x7422}, //15063 #CJK UNIFIED IDEOGRAPH + {0xD7C2, 0x8301}, //15064 #CJK UNIFIED IDEOGRAPH + {0xD7C3, 0x914C}, //15065 #CJK UNIFIED IDEOGRAPH + {0xD7C4, 0x5544}, //15066 #CJK UNIFIED IDEOGRAPH + {0xD7C5, 0x7740}, //15067 #CJK UNIFIED IDEOGRAPH + {0xD7C6, 0x707C}, //15068 #CJK UNIFIED IDEOGRAPH + {0xD7C7, 0x6D4A}, //15069 #CJK UNIFIED IDEOGRAPH + {0xD7C8, 0x5179}, //15070 #CJK UNIFIED IDEOGRAPH + {0xD7C9, 0x54A8}, //15071 #CJK UNIFIED IDEOGRAPH + {0xD7CA, 0x8D44}, //15072 #CJK UNIFIED IDEOGRAPH + {0xD7CB, 0x59FF}, //15073 #CJK UNIFIED IDEOGRAPH + {0xD7CC, 0x6ECB}, //15074 #CJK UNIFIED IDEOGRAPH + {0xD7CD, 0x6DC4}, //15075 #CJK UNIFIED IDEOGRAPH + {0xD7CE, 0x5B5C}, //15076 #CJK UNIFIED IDEOGRAPH + {0xD7CF, 0x7D2B}, //15077 #CJK UNIFIED IDEOGRAPH + {0xD7D0, 0x4ED4}, //15078 #CJK UNIFIED IDEOGRAPH + {0xD7D1, 0x7C7D}, //15079 #CJK UNIFIED IDEOGRAPH + {0xD7D2, 0x6ED3}, //15080 #CJK UNIFIED IDEOGRAPH + {0xD7D3, 0x5B50}, //15081 #CJK UNIFIED IDEOGRAPH + {0xD7D4, 0x81EA}, //15082 #CJK UNIFIED IDEOGRAPH + {0xD7D5, 0x6E0D}, //15083 #CJK UNIFIED IDEOGRAPH + {0xD7D6, 0x5B57}, //15084 #CJK UNIFIED IDEOGRAPH + {0xD7D7, 0x9B03}, //15085 #CJK UNIFIED IDEOGRAPH + {0xD7D8, 0x68D5}, //15086 #CJK UNIFIED IDEOGRAPH + {0xD7D9, 0x8E2A}, //15087 #CJK UNIFIED IDEOGRAPH + {0xD7DA, 0x5B97}, //15088 #CJK UNIFIED IDEOGRAPH + {0xD7DB, 0x7EFC}, //15089 #CJK UNIFIED IDEOGRAPH + {0xD7DC, 0x603B}, //15090 #CJK UNIFIED IDEOGRAPH + {0xD7DD, 0x7EB5}, //15091 #CJK UNIFIED IDEOGRAPH + {0xD7DE, 0x90B9}, //15092 #CJK UNIFIED IDEOGRAPH + {0xD7DF, 0x8D70}, //15093 #CJK UNIFIED IDEOGRAPH + {0xD7E0, 0x594F}, //15094 #CJK UNIFIED IDEOGRAPH + {0xD7E1, 0x63CD}, //15095 #CJK UNIFIED IDEOGRAPH + {0xD7E2, 0x79DF}, //15096 #CJK UNIFIED IDEOGRAPH + {0xD7E3, 0x8DB3}, //15097 #CJK UNIFIED IDEOGRAPH + {0xD7E4, 0x5352}, //15098 #CJK UNIFIED IDEOGRAPH + {0xD7E5, 0x65CF}, //15099 #CJK UNIFIED IDEOGRAPH + {0xD7E6, 0x7956}, //15100 #CJK UNIFIED IDEOGRAPH + {0xD7E7, 0x8BC5}, //15101 #CJK UNIFIED IDEOGRAPH + {0xD7E8, 0x963B}, //15102 #CJK UNIFIED IDEOGRAPH + {0xD7E9, 0x7EC4}, //15103 #CJK UNIFIED IDEOGRAPH + {0xD7EA, 0x94BB}, //15104 #CJK UNIFIED IDEOGRAPH + {0xD7EB, 0x7E82}, //15105 #CJK UNIFIED IDEOGRAPH + {0xD7EC, 0x5634}, //15106 #CJK UNIFIED IDEOGRAPH + {0xD7ED, 0x9189}, //15107 #CJK UNIFIED IDEOGRAPH + {0xD7EE, 0x6700}, //15108 #CJK UNIFIED IDEOGRAPH + {0xD7EF, 0x7F6A}, //15109 #CJK UNIFIED IDEOGRAPH + {0xD7F0, 0x5C0A}, //15110 #CJK UNIFIED IDEOGRAPH + {0xD7F1, 0x9075}, //15111 #CJK UNIFIED IDEOGRAPH + {0xD7F2, 0x6628}, //15112 #CJK UNIFIED IDEOGRAPH + {0xD7F3, 0x5DE6}, //15113 #CJK UNIFIED IDEOGRAPH + {0xD7F4, 0x4F50}, //15114 #CJK UNIFIED IDEOGRAPH + {0xD7F5, 0x67DE}, //15115 #CJK UNIFIED IDEOGRAPH + {0xD7F6, 0x505A}, //15116 #CJK UNIFIED IDEOGRAPH + {0xD7F7, 0x4F5C}, //15117 #CJK UNIFIED IDEOGRAPH + {0xD7F8, 0x5750}, //15118 #CJK UNIFIED IDEOGRAPH + {0xD7F9, 0x5EA7}, //15119 #CJK UNIFIED IDEOGRAPH + {0xD840, 0x8C38}, //15120 #CJK UNIFIED IDEOGRAPH + {0xD841, 0x8C39}, //15121 #CJK UNIFIED IDEOGRAPH + {0xD842, 0x8C3A}, //15122 #CJK UNIFIED IDEOGRAPH + {0xD843, 0x8C3B}, //15123 #CJK UNIFIED IDEOGRAPH + {0xD844, 0x8C3C}, //15124 #CJK UNIFIED IDEOGRAPH + {0xD845, 0x8C3D}, //15125 #CJK UNIFIED IDEOGRAPH + {0xD846, 0x8C3E}, //15126 #CJK UNIFIED IDEOGRAPH + {0xD847, 0x8C3F}, //15127 #CJK UNIFIED IDEOGRAPH + {0xD848, 0x8C40}, //15128 #CJK UNIFIED IDEOGRAPH + {0xD849, 0x8C42}, //15129 #CJK UNIFIED IDEOGRAPH + {0xD84A, 0x8C43}, //15130 #CJK UNIFIED IDEOGRAPH + {0xD84B, 0x8C44}, //15131 #CJK UNIFIED IDEOGRAPH + {0xD84C, 0x8C45}, //15132 #CJK UNIFIED IDEOGRAPH + {0xD84D, 0x8C48}, //15133 #CJK UNIFIED IDEOGRAPH + {0xD84E, 0x8C4A}, //15134 #CJK UNIFIED IDEOGRAPH + {0xD84F, 0x8C4B}, //15135 #CJK UNIFIED IDEOGRAPH + {0xD850, 0x8C4D}, //15136 #CJK UNIFIED IDEOGRAPH + {0xD851, 0x8C4E}, //15137 #CJK UNIFIED IDEOGRAPH + {0xD852, 0x8C4F}, //15138 #CJK UNIFIED IDEOGRAPH + {0xD853, 0x8C50}, //15139 #CJK UNIFIED IDEOGRAPH + {0xD854, 0x8C51}, //15140 #CJK UNIFIED IDEOGRAPH + {0xD855, 0x8C52}, //15141 #CJK UNIFIED IDEOGRAPH + {0xD856, 0x8C53}, //15142 #CJK UNIFIED IDEOGRAPH + {0xD857, 0x8C54}, //15143 #CJK UNIFIED IDEOGRAPH + {0xD858, 0x8C56}, //15144 #CJK UNIFIED IDEOGRAPH + {0xD859, 0x8C57}, //15145 #CJK UNIFIED IDEOGRAPH + {0xD85A, 0x8C58}, //15146 #CJK UNIFIED IDEOGRAPH + {0xD85B, 0x8C59}, //15147 #CJK UNIFIED IDEOGRAPH + {0xD85C, 0x8C5B}, //15148 #CJK UNIFIED IDEOGRAPH + {0xD85D, 0x8C5C}, //15149 #CJK UNIFIED IDEOGRAPH + {0xD85E, 0x8C5D}, //15150 #CJK UNIFIED IDEOGRAPH + {0xD85F, 0x8C5E}, //15151 #CJK UNIFIED IDEOGRAPH + {0xD860, 0x8C5F}, //15152 #CJK UNIFIED IDEOGRAPH + {0xD861, 0x8C60}, //15153 #CJK UNIFIED IDEOGRAPH + {0xD862, 0x8C63}, //15154 #CJK UNIFIED IDEOGRAPH + {0xD863, 0x8C64}, //15155 #CJK UNIFIED IDEOGRAPH + {0xD864, 0x8C65}, //15156 #CJK UNIFIED IDEOGRAPH + {0xD865, 0x8C66}, //15157 #CJK UNIFIED IDEOGRAPH + {0xD866, 0x8C67}, //15158 #CJK UNIFIED IDEOGRAPH + {0xD867, 0x8C68}, //15159 #CJK UNIFIED IDEOGRAPH + {0xD868, 0x8C69}, //15160 #CJK UNIFIED IDEOGRAPH + {0xD869, 0x8C6C}, //15161 #CJK UNIFIED IDEOGRAPH + {0xD86A, 0x8C6D}, //15162 #CJK UNIFIED IDEOGRAPH + {0xD86B, 0x8C6E}, //15163 #CJK UNIFIED IDEOGRAPH + {0xD86C, 0x8C6F}, //15164 #CJK UNIFIED IDEOGRAPH + {0xD86D, 0x8C70}, //15165 #CJK UNIFIED IDEOGRAPH + {0xD86E, 0x8C71}, //15166 #CJK UNIFIED IDEOGRAPH + {0xD86F, 0x8C72}, //15167 #CJK UNIFIED IDEOGRAPH + {0xD870, 0x8C74}, //15168 #CJK UNIFIED IDEOGRAPH + {0xD871, 0x8C75}, //15169 #CJK UNIFIED IDEOGRAPH + {0xD872, 0x8C76}, //15170 #CJK UNIFIED IDEOGRAPH + {0xD873, 0x8C77}, //15171 #CJK UNIFIED IDEOGRAPH + {0xD874, 0x8C7B}, //15172 #CJK UNIFIED IDEOGRAPH + {0xD875, 0x8C7C}, //15173 #CJK UNIFIED IDEOGRAPH + {0xD876, 0x8C7D}, //15174 #CJK UNIFIED IDEOGRAPH + {0xD877, 0x8C7E}, //15175 #CJK UNIFIED IDEOGRAPH + {0xD878, 0x8C7F}, //15176 #CJK UNIFIED IDEOGRAPH + {0xD879, 0x8C80}, //15177 #CJK UNIFIED IDEOGRAPH + {0xD87A, 0x8C81}, //15178 #CJK UNIFIED IDEOGRAPH + {0xD87B, 0x8C83}, //15179 #CJK UNIFIED IDEOGRAPH + {0xD87C, 0x8C84}, //15180 #CJK UNIFIED IDEOGRAPH + {0xD87D, 0x8C86}, //15181 #CJK UNIFIED IDEOGRAPH + {0xD87E, 0x8C87}, //15182 #CJK UNIFIED IDEOGRAPH + {0xD880, 0x8C88}, //15183 #CJK UNIFIED IDEOGRAPH + {0xD881, 0x8C8B}, //15184 #CJK UNIFIED IDEOGRAPH + {0xD882, 0x8C8D}, //15185 #CJK UNIFIED IDEOGRAPH + {0xD883, 0x8C8E}, //15186 #CJK UNIFIED IDEOGRAPH + {0xD884, 0x8C8F}, //15187 #CJK UNIFIED IDEOGRAPH + {0xD885, 0x8C90}, //15188 #CJK UNIFIED IDEOGRAPH + {0xD886, 0x8C91}, //15189 #CJK UNIFIED IDEOGRAPH + {0xD887, 0x8C92}, //15190 #CJK UNIFIED IDEOGRAPH + {0xD888, 0x8C93}, //15191 #CJK UNIFIED IDEOGRAPH + {0xD889, 0x8C95}, //15192 #CJK UNIFIED IDEOGRAPH + {0xD88A, 0x8C96}, //15193 #CJK UNIFIED IDEOGRAPH + {0xD88B, 0x8C97}, //15194 #CJK UNIFIED IDEOGRAPH + {0xD88C, 0x8C99}, //15195 #CJK UNIFIED IDEOGRAPH + {0xD88D, 0x8C9A}, //15196 #CJK UNIFIED IDEOGRAPH + {0xD88E, 0x8C9B}, //15197 #CJK UNIFIED IDEOGRAPH + {0xD88F, 0x8C9C}, //15198 #CJK UNIFIED IDEOGRAPH + {0xD890, 0x8C9D}, //15199 #CJK UNIFIED IDEOGRAPH + {0xD891, 0x8C9E}, //15200 #CJK UNIFIED IDEOGRAPH + {0xD892, 0x8C9F}, //15201 #CJK UNIFIED IDEOGRAPH + {0xD893, 0x8CA0}, //15202 #CJK UNIFIED IDEOGRAPH + {0xD894, 0x8CA1}, //15203 #CJK UNIFIED IDEOGRAPH + {0xD895, 0x8CA2}, //15204 #CJK UNIFIED IDEOGRAPH + {0xD896, 0x8CA3}, //15205 #CJK UNIFIED IDEOGRAPH + {0xD897, 0x8CA4}, //15206 #CJK UNIFIED IDEOGRAPH + {0xD898, 0x8CA5}, //15207 #CJK UNIFIED IDEOGRAPH + {0xD899, 0x8CA6}, //15208 #CJK UNIFIED IDEOGRAPH + {0xD89A, 0x8CA7}, //15209 #CJK UNIFIED IDEOGRAPH + {0xD89B, 0x8CA8}, //15210 #CJK UNIFIED IDEOGRAPH + {0xD89C, 0x8CA9}, //15211 #CJK UNIFIED IDEOGRAPH + {0xD89D, 0x8CAA}, //15212 #CJK UNIFIED IDEOGRAPH + {0xD89E, 0x8CAB}, //15213 #CJK UNIFIED IDEOGRAPH + {0xD89F, 0x8CAC}, //15214 #CJK UNIFIED IDEOGRAPH + {0xD8A0, 0x8CAD}, //15215 #CJK UNIFIED IDEOGRAPH + {0xD8A1, 0x4E8D}, //15216 #CJK UNIFIED IDEOGRAPH + {0xD8A2, 0x4E0C}, //15217 #CJK UNIFIED IDEOGRAPH + {0xD8A3, 0x5140}, //15218 #CJK UNIFIED IDEOGRAPH + {0xD8A4, 0x4E10}, //15219 #CJK UNIFIED IDEOGRAPH + {0xD8A5, 0x5EFF}, //15220 #CJK UNIFIED IDEOGRAPH + {0xD8A6, 0x5345}, //15221 #CJK UNIFIED IDEOGRAPH + {0xD8A7, 0x4E15}, //15222 #CJK UNIFIED IDEOGRAPH + {0xD8A8, 0x4E98}, //15223 #CJK UNIFIED IDEOGRAPH + {0xD8A9, 0x4E1E}, //15224 #CJK UNIFIED IDEOGRAPH + {0xD8AA, 0x9B32}, //15225 #CJK UNIFIED IDEOGRAPH + {0xD8AB, 0x5B6C}, //15226 #CJK UNIFIED IDEOGRAPH + {0xD8AC, 0x5669}, //15227 #CJK UNIFIED IDEOGRAPH + {0xD8AD, 0x4E28}, //15228 #CJK UNIFIED IDEOGRAPH + {0xD8AE, 0x79BA}, //15229 #CJK UNIFIED IDEOGRAPH + {0xD8AF, 0x4E3F}, //15230 #CJK UNIFIED IDEOGRAPH + {0xD8B0, 0x5315}, //15231 #CJK UNIFIED IDEOGRAPH + {0xD8B1, 0x4E47}, //15232 #CJK UNIFIED IDEOGRAPH + {0xD8B2, 0x592D}, //15233 #CJK UNIFIED IDEOGRAPH + {0xD8B3, 0x723B}, //15234 #CJK UNIFIED IDEOGRAPH + {0xD8B4, 0x536E}, //15235 #CJK UNIFIED IDEOGRAPH + {0xD8B5, 0x6C10}, //15236 #CJK UNIFIED IDEOGRAPH + {0xD8B6, 0x56DF}, //15237 #CJK UNIFIED IDEOGRAPH + {0xD8B7, 0x80E4}, //15238 #CJK UNIFIED IDEOGRAPH + {0xD8B8, 0x9997}, //15239 #CJK UNIFIED IDEOGRAPH + {0xD8B9, 0x6BD3}, //15240 #CJK UNIFIED IDEOGRAPH + {0xD8BA, 0x777E}, //15241 #CJK UNIFIED IDEOGRAPH + {0xD8BB, 0x9F17}, //15242 #CJK UNIFIED IDEOGRAPH + {0xD8BC, 0x4E36}, //15243 #CJK UNIFIED IDEOGRAPH + {0xD8BD, 0x4E9F}, //15244 #CJK UNIFIED IDEOGRAPH + {0xD8BE, 0x9F10}, //15245 #CJK UNIFIED IDEOGRAPH + {0xD8BF, 0x4E5C}, //15246 #CJK UNIFIED IDEOGRAPH + {0xD8C0, 0x4E69}, //15247 #CJK UNIFIED IDEOGRAPH + {0xD8C1, 0x4E93}, //15248 #CJK UNIFIED IDEOGRAPH + {0xD8C2, 0x8288}, //15249 #CJK UNIFIED IDEOGRAPH + {0xD8C3, 0x5B5B}, //15250 #CJK UNIFIED IDEOGRAPH + {0xD8C4, 0x556C}, //15251 #CJK UNIFIED IDEOGRAPH + {0xD8C5, 0x560F}, //15252 #CJK UNIFIED IDEOGRAPH + {0xD8C6, 0x4EC4}, //15253 #CJK UNIFIED IDEOGRAPH + {0xD8C7, 0x538D}, //15254 #CJK UNIFIED IDEOGRAPH + {0xD8C8, 0x539D}, //15255 #CJK UNIFIED IDEOGRAPH + {0xD8C9, 0x53A3}, //15256 #CJK UNIFIED IDEOGRAPH + {0xD8CA, 0x53A5}, //15257 #CJK UNIFIED IDEOGRAPH + {0xD8CB, 0x53AE}, //15258 #CJK UNIFIED IDEOGRAPH + {0xD8CC, 0x9765}, //15259 #CJK UNIFIED IDEOGRAPH + {0xD8CD, 0x8D5D}, //15260 #CJK UNIFIED IDEOGRAPH + {0xD8CE, 0x531A}, //15261 #CJK UNIFIED IDEOGRAPH + {0xD8CF, 0x53F5}, //15262 #CJK UNIFIED IDEOGRAPH + {0xD8D0, 0x5326}, //15263 #CJK UNIFIED IDEOGRAPH + {0xD8D1, 0x532E}, //15264 #CJK UNIFIED IDEOGRAPH + {0xD8D2, 0x533E}, //15265 #CJK UNIFIED IDEOGRAPH + {0xD8D3, 0x8D5C}, //15266 #CJK UNIFIED IDEOGRAPH + {0xD8D4, 0x5366}, //15267 #CJK UNIFIED IDEOGRAPH + {0xD8D5, 0x5363}, //15268 #CJK UNIFIED IDEOGRAPH + {0xD8D6, 0x5202}, //15269 #CJK UNIFIED IDEOGRAPH + {0xD8D7, 0x5208}, //15270 #CJK UNIFIED IDEOGRAPH + {0xD8D8, 0x520E}, //15271 #CJK UNIFIED IDEOGRAPH + {0xD8D9, 0x522D}, //15272 #CJK UNIFIED IDEOGRAPH + {0xD8DA, 0x5233}, //15273 #CJK UNIFIED IDEOGRAPH + {0xD8DB, 0x523F}, //15274 #CJK UNIFIED IDEOGRAPH + {0xD8DC, 0x5240}, //15275 #CJK UNIFIED IDEOGRAPH + {0xD8DD, 0x524C}, //15276 #CJK UNIFIED IDEOGRAPH + {0xD8DE, 0x525E}, //15277 #CJK UNIFIED IDEOGRAPH + {0xD8DF, 0x5261}, //15278 #CJK UNIFIED IDEOGRAPH + {0xD8E0, 0x525C}, //15279 #CJK UNIFIED IDEOGRAPH + {0xD8E1, 0x84AF}, //15280 #CJK UNIFIED IDEOGRAPH + {0xD8E2, 0x527D}, //15281 #CJK UNIFIED IDEOGRAPH + {0xD8E3, 0x5282}, //15282 #CJK UNIFIED IDEOGRAPH + {0xD8E4, 0x5281}, //15283 #CJK UNIFIED IDEOGRAPH + {0xD8E5, 0x5290}, //15284 #CJK UNIFIED IDEOGRAPH + {0xD8E6, 0x5293}, //15285 #CJK UNIFIED IDEOGRAPH + {0xD8E7, 0x5182}, //15286 #CJK UNIFIED IDEOGRAPH + {0xD8E8, 0x7F54}, //15287 #CJK UNIFIED IDEOGRAPH + {0xD8E9, 0x4EBB}, //15288 #CJK UNIFIED IDEOGRAPH + {0xD8EA, 0x4EC3}, //15289 #CJK UNIFIED IDEOGRAPH + {0xD8EB, 0x4EC9}, //15290 #CJK UNIFIED IDEOGRAPH + {0xD8EC, 0x4EC2}, //15291 #CJK UNIFIED IDEOGRAPH + {0xD8ED, 0x4EE8}, //15292 #CJK UNIFIED IDEOGRAPH + {0xD8EE, 0x4EE1}, //15293 #CJK UNIFIED IDEOGRAPH + {0xD8EF, 0x4EEB}, //15294 #CJK UNIFIED IDEOGRAPH + {0xD8F0, 0x4EDE}, //15295 #CJK UNIFIED IDEOGRAPH + {0xD8F1, 0x4F1B}, //15296 #CJK UNIFIED IDEOGRAPH + {0xD8F2, 0x4EF3}, //15297 #CJK UNIFIED IDEOGRAPH + {0xD8F3, 0x4F22}, //15298 #CJK UNIFIED IDEOGRAPH + {0xD8F4, 0x4F64}, //15299 #CJK UNIFIED IDEOGRAPH + {0xD8F5, 0x4EF5}, //15300 #CJK UNIFIED IDEOGRAPH + {0xD8F6, 0x4F25}, //15301 #CJK UNIFIED IDEOGRAPH + {0xD8F7, 0x4F27}, //15302 #CJK UNIFIED IDEOGRAPH + {0xD8F8, 0x4F09}, //15303 #CJK UNIFIED IDEOGRAPH + {0xD8F9, 0x4F2B}, //15304 #CJK UNIFIED IDEOGRAPH + {0xD8FA, 0x4F5E}, //15305 #CJK UNIFIED IDEOGRAPH + {0xD8FB, 0x4F67}, //15306 #CJK UNIFIED IDEOGRAPH + {0xD8FC, 0x6538}, //15307 #CJK UNIFIED IDEOGRAPH + {0xD8FD, 0x4F5A}, //15308 #CJK UNIFIED IDEOGRAPH + {0xD8FE, 0x4F5D}, //15309 #CJK UNIFIED IDEOGRAPH + {0xD940, 0x8CAE}, //15310 #CJK UNIFIED IDEOGRAPH + {0xD941, 0x8CAF}, //15311 #CJK UNIFIED IDEOGRAPH + {0xD942, 0x8CB0}, //15312 #CJK UNIFIED IDEOGRAPH + {0xD943, 0x8CB1}, //15313 #CJK UNIFIED IDEOGRAPH + {0xD944, 0x8CB2}, //15314 #CJK UNIFIED IDEOGRAPH + {0xD945, 0x8CB3}, //15315 #CJK UNIFIED IDEOGRAPH + {0xD946, 0x8CB4}, //15316 #CJK UNIFIED IDEOGRAPH + {0xD947, 0x8CB5}, //15317 #CJK UNIFIED IDEOGRAPH + {0xD948, 0x8CB6}, //15318 #CJK UNIFIED IDEOGRAPH + {0xD949, 0x8CB7}, //15319 #CJK UNIFIED IDEOGRAPH + {0xD94A, 0x8CB8}, //15320 #CJK UNIFIED IDEOGRAPH + {0xD94B, 0x8CB9}, //15321 #CJK UNIFIED IDEOGRAPH + {0xD94C, 0x8CBA}, //15322 #CJK UNIFIED IDEOGRAPH + {0xD94D, 0x8CBB}, //15323 #CJK UNIFIED IDEOGRAPH + {0xD94E, 0x8CBC}, //15324 #CJK UNIFIED IDEOGRAPH + {0xD94F, 0x8CBD}, //15325 #CJK UNIFIED IDEOGRAPH + {0xD950, 0x8CBE}, //15326 #CJK UNIFIED IDEOGRAPH + {0xD951, 0x8CBF}, //15327 #CJK UNIFIED IDEOGRAPH + {0xD952, 0x8CC0}, //15328 #CJK UNIFIED IDEOGRAPH + {0xD953, 0x8CC1}, //15329 #CJK UNIFIED IDEOGRAPH + {0xD954, 0x8CC2}, //15330 #CJK UNIFIED IDEOGRAPH + {0xD955, 0x8CC3}, //15331 #CJK UNIFIED IDEOGRAPH + {0xD956, 0x8CC4}, //15332 #CJK UNIFIED IDEOGRAPH + {0xD957, 0x8CC5}, //15333 #CJK UNIFIED IDEOGRAPH + {0xD958, 0x8CC6}, //15334 #CJK UNIFIED IDEOGRAPH + {0xD959, 0x8CC7}, //15335 #CJK UNIFIED IDEOGRAPH + {0xD95A, 0x8CC8}, //15336 #CJK UNIFIED IDEOGRAPH + {0xD95B, 0x8CC9}, //15337 #CJK UNIFIED IDEOGRAPH + {0xD95C, 0x8CCA}, //15338 #CJK UNIFIED IDEOGRAPH + {0xD95D, 0x8CCB}, //15339 #CJK UNIFIED IDEOGRAPH + {0xD95E, 0x8CCC}, //15340 #CJK UNIFIED IDEOGRAPH + {0xD95F, 0x8CCD}, //15341 #CJK UNIFIED IDEOGRAPH + {0xD960, 0x8CCE}, //15342 #CJK UNIFIED IDEOGRAPH + {0xD961, 0x8CCF}, //15343 #CJK UNIFIED IDEOGRAPH + {0xD962, 0x8CD0}, //15344 #CJK UNIFIED IDEOGRAPH + {0xD963, 0x8CD1}, //15345 #CJK UNIFIED IDEOGRAPH + {0xD964, 0x8CD2}, //15346 #CJK UNIFIED IDEOGRAPH + {0xD965, 0x8CD3}, //15347 #CJK UNIFIED IDEOGRAPH + {0xD966, 0x8CD4}, //15348 #CJK UNIFIED IDEOGRAPH + {0xD967, 0x8CD5}, //15349 #CJK UNIFIED IDEOGRAPH + {0xD968, 0x8CD6}, //15350 #CJK UNIFIED IDEOGRAPH + {0xD969, 0x8CD7}, //15351 #CJK UNIFIED IDEOGRAPH + {0xD96A, 0x8CD8}, //15352 #CJK UNIFIED IDEOGRAPH + {0xD96B, 0x8CD9}, //15353 #CJK UNIFIED IDEOGRAPH + {0xD96C, 0x8CDA}, //15354 #CJK UNIFIED IDEOGRAPH + {0xD96D, 0x8CDB}, //15355 #CJK UNIFIED IDEOGRAPH + {0xD96E, 0x8CDC}, //15356 #CJK UNIFIED IDEOGRAPH + {0xD96F, 0x8CDD}, //15357 #CJK UNIFIED IDEOGRAPH + {0xD970, 0x8CDE}, //15358 #CJK UNIFIED IDEOGRAPH + {0xD971, 0x8CDF}, //15359 #CJK UNIFIED IDEOGRAPH + {0xD972, 0x8CE0}, //15360 #CJK UNIFIED IDEOGRAPH + {0xD973, 0x8CE1}, //15361 #CJK UNIFIED IDEOGRAPH + {0xD974, 0x8CE2}, //15362 #CJK UNIFIED IDEOGRAPH + {0xD975, 0x8CE3}, //15363 #CJK UNIFIED IDEOGRAPH + {0xD976, 0x8CE4}, //15364 #CJK UNIFIED IDEOGRAPH + {0xD977, 0x8CE5}, //15365 #CJK UNIFIED IDEOGRAPH + {0xD978, 0x8CE6}, //15366 #CJK UNIFIED IDEOGRAPH + {0xD979, 0x8CE7}, //15367 #CJK UNIFIED IDEOGRAPH + {0xD97A, 0x8CE8}, //15368 #CJK UNIFIED IDEOGRAPH + {0xD97B, 0x8CE9}, //15369 #CJK UNIFIED IDEOGRAPH + {0xD97C, 0x8CEA}, //15370 #CJK UNIFIED IDEOGRAPH + {0xD97D, 0x8CEB}, //15371 #CJK UNIFIED IDEOGRAPH + {0xD97E, 0x8CEC}, //15372 #CJK UNIFIED IDEOGRAPH + {0xD980, 0x8CED}, //15373 #CJK UNIFIED IDEOGRAPH + {0xD981, 0x8CEE}, //15374 #CJK UNIFIED IDEOGRAPH + {0xD982, 0x8CEF}, //15375 #CJK UNIFIED IDEOGRAPH + {0xD983, 0x8CF0}, //15376 #CJK UNIFIED IDEOGRAPH + {0xD984, 0x8CF1}, //15377 #CJK UNIFIED IDEOGRAPH + {0xD985, 0x8CF2}, //15378 #CJK UNIFIED IDEOGRAPH + {0xD986, 0x8CF3}, //15379 #CJK UNIFIED IDEOGRAPH + {0xD987, 0x8CF4}, //15380 #CJK UNIFIED IDEOGRAPH + {0xD988, 0x8CF5}, //15381 #CJK UNIFIED IDEOGRAPH + {0xD989, 0x8CF6}, //15382 #CJK UNIFIED IDEOGRAPH + {0xD98A, 0x8CF7}, //15383 #CJK UNIFIED IDEOGRAPH + {0xD98B, 0x8CF8}, //15384 #CJK UNIFIED IDEOGRAPH + {0xD98C, 0x8CF9}, //15385 #CJK UNIFIED IDEOGRAPH + {0xD98D, 0x8CFA}, //15386 #CJK UNIFIED IDEOGRAPH + {0xD98E, 0x8CFB}, //15387 #CJK UNIFIED IDEOGRAPH + {0xD98F, 0x8CFC}, //15388 #CJK UNIFIED IDEOGRAPH + {0xD990, 0x8CFD}, //15389 #CJK UNIFIED IDEOGRAPH + {0xD991, 0x8CFE}, //15390 #CJK UNIFIED IDEOGRAPH + {0xD992, 0x8CFF}, //15391 #CJK UNIFIED IDEOGRAPH + {0xD993, 0x8D00}, //15392 #CJK UNIFIED IDEOGRAPH + {0xD994, 0x8D01}, //15393 #CJK UNIFIED IDEOGRAPH + {0xD995, 0x8D02}, //15394 #CJK UNIFIED IDEOGRAPH + {0xD996, 0x8D03}, //15395 #CJK UNIFIED IDEOGRAPH + {0xD997, 0x8D04}, //15396 #CJK UNIFIED IDEOGRAPH + {0xD998, 0x8D05}, //15397 #CJK UNIFIED IDEOGRAPH + {0xD999, 0x8D06}, //15398 #CJK UNIFIED IDEOGRAPH + {0xD99A, 0x8D07}, //15399 #CJK UNIFIED IDEOGRAPH + {0xD99B, 0x8D08}, //15400 #CJK UNIFIED IDEOGRAPH + {0xD99C, 0x8D09}, //15401 #CJK UNIFIED IDEOGRAPH + {0xD99D, 0x8D0A}, //15402 #CJK UNIFIED IDEOGRAPH + {0xD99E, 0x8D0B}, //15403 #CJK UNIFIED IDEOGRAPH + {0xD99F, 0x8D0C}, //15404 #CJK UNIFIED IDEOGRAPH + {0xD9A0, 0x8D0D}, //15405 #CJK UNIFIED IDEOGRAPH + {0xD9A1, 0x4F5F}, //15406 #CJK UNIFIED IDEOGRAPH + {0xD9A2, 0x4F57}, //15407 #CJK UNIFIED IDEOGRAPH + {0xD9A3, 0x4F32}, //15408 #CJK UNIFIED IDEOGRAPH + {0xD9A4, 0x4F3D}, //15409 #CJK UNIFIED IDEOGRAPH + {0xD9A5, 0x4F76}, //15410 #CJK UNIFIED IDEOGRAPH + {0xD9A6, 0x4F74}, //15411 #CJK UNIFIED IDEOGRAPH + {0xD9A7, 0x4F91}, //15412 #CJK UNIFIED IDEOGRAPH + {0xD9A8, 0x4F89}, //15413 #CJK UNIFIED IDEOGRAPH + {0xD9A9, 0x4F83}, //15414 #CJK UNIFIED IDEOGRAPH + {0xD9AA, 0x4F8F}, //15415 #CJK UNIFIED IDEOGRAPH + {0xD9AB, 0x4F7E}, //15416 #CJK UNIFIED IDEOGRAPH + {0xD9AC, 0x4F7B}, //15417 #CJK UNIFIED IDEOGRAPH + {0xD9AD, 0x4FAA}, //15418 #CJK UNIFIED IDEOGRAPH + {0xD9AE, 0x4F7C}, //15419 #CJK UNIFIED IDEOGRAPH + {0xD9AF, 0x4FAC}, //15420 #CJK UNIFIED IDEOGRAPH + {0xD9B0, 0x4F94}, //15421 #CJK UNIFIED IDEOGRAPH + {0xD9B1, 0x4FE6}, //15422 #CJK UNIFIED IDEOGRAPH + {0xD9B2, 0x4FE8}, //15423 #CJK UNIFIED IDEOGRAPH + {0xD9B3, 0x4FEA}, //15424 #CJK UNIFIED IDEOGRAPH + {0xD9B4, 0x4FC5}, //15425 #CJK UNIFIED IDEOGRAPH + {0xD9B5, 0x4FDA}, //15426 #CJK UNIFIED IDEOGRAPH + {0xD9B6, 0x4FE3}, //15427 #CJK UNIFIED IDEOGRAPH + {0xD9B7, 0x4FDC}, //15428 #CJK UNIFIED IDEOGRAPH + {0xD9B8, 0x4FD1}, //15429 #CJK UNIFIED IDEOGRAPH + {0xD9B9, 0x4FDF}, //15430 #CJK UNIFIED IDEOGRAPH + {0xD9BA, 0x4FF8}, //15431 #CJK UNIFIED IDEOGRAPH + {0xD9BB, 0x5029}, //15432 #CJK UNIFIED IDEOGRAPH + {0xD9BC, 0x504C}, //15433 #CJK UNIFIED IDEOGRAPH + {0xD9BD, 0x4FF3}, //15434 #CJK UNIFIED IDEOGRAPH + {0xD9BE, 0x502C}, //15435 #CJK UNIFIED IDEOGRAPH + {0xD9BF, 0x500F}, //15436 #CJK UNIFIED IDEOGRAPH + {0xD9C0, 0x502E}, //15437 #CJK UNIFIED IDEOGRAPH + {0xD9C1, 0x502D}, //15438 #CJK UNIFIED IDEOGRAPH + {0xD9C2, 0x4FFE}, //15439 #CJK UNIFIED IDEOGRAPH + {0xD9C3, 0x501C}, //15440 #CJK UNIFIED IDEOGRAPH + {0xD9C4, 0x500C}, //15441 #CJK UNIFIED IDEOGRAPH + {0xD9C5, 0x5025}, //15442 #CJK UNIFIED IDEOGRAPH + {0xD9C6, 0x5028}, //15443 #CJK UNIFIED IDEOGRAPH + {0xD9C7, 0x507E}, //15444 #CJK UNIFIED IDEOGRAPH + {0xD9C8, 0x5043}, //15445 #CJK UNIFIED IDEOGRAPH + {0xD9C9, 0x5055}, //15446 #CJK UNIFIED IDEOGRAPH + {0xD9CA, 0x5048}, //15447 #CJK UNIFIED IDEOGRAPH + {0xD9CB, 0x504E}, //15448 #CJK UNIFIED IDEOGRAPH + {0xD9CC, 0x506C}, //15449 #CJK UNIFIED IDEOGRAPH + {0xD9CD, 0x507B}, //15450 #CJK UNIFIED IDEOGRAPH + {0xD9CE, 0x50A5}, //15451 #CJK UNIFIED IDEOGRAPH + {0xD9CF, 0x50A7}, //15452 #CJK UNIFIED IDEOGRAPH + {0xD9D0, 0x50A9}, //15453 #CJK UNIFIED IDEOGRAPH + {0xD9D1, 0x50BA}, //15454 #CJK UNIFIED IDEOGRAPH + {0xD9D2, 0x50D6}, //15455 #CJK UNIFIED IDEOGRAPH + {0xD9D3, 0x5106}, //15456 #CJK UNIFIED IDEOGRAPH + {0xD9D4, 0x50ED}, //15457 #CJK UNIFIED IDEOGRAPH + {0xD9D5, 0x50EC}, //15458 #CJK UNIFIED IDEOGRAPH + {0xD9D6, 0x50E6}, //15459 #CJK UNIFIED IDEOGRAPH + {0xD9D7, 0x50EE}, //15460 #CJK UNIFIED IDEOGRAPH + {0xD9D8, 0x5107}, //15461 #CJK UNIFIED IDEOGRAPH + {0xD9D9, 0x510B}, //15462 #CJK UNIFIED IDEOGRAPH + {0xD9DA, 0x4EDD}, //15463 #CJK UNIFIED IDEOGRAPH + {0xD9DB, 0x6C3D}, //15464 #CJK UNIFIED IDEOGRAPH + {0xD9DC, 0x4F58}, //15465 #CJK UNIFIED IDEOGRAPH + {0xD9DD, 0x4F65}, //15466 #CJK UNIFIED IDEOGRAPH + {0xD9DE, 0x4FCE}, //15467 #CJK UNIFIED IDEOGRAPH + {0xD9DF, 0x9FA0}, //15468 #CJK UNIFIED IDEOGRAPH + {0xD9E0, 0x6C46}, //15469 #CJK UNIFIED IDEOGRAPH + {0xD9E1, 0x7C74}, //15470 #CJK UNIFIED IDEOGRAPH + {0xD9E2, 0x516E}, //15471 #CJK UNIFIED IDEOGRAPH + {0xD9E3, 0x5DFD}, //15472 #CJK UNIFIED IDEOGRAPH + {0xD9E4, 0x9EC9}, //15473 #CJK UNIFIED IDEOGRAPH + {0xD9E5, 0x9998}, //15474 #CJK UNIFIED IDEOGRAPH + {0xD9E6, 0x5181}, //15475 #CJK UNIFIED IDEOGRAPH + {0xD9E7, 0x5914}, //15476 #CJK UNIFIED IDEOGRAPH + {0xD9E8, 0x52F9}, //15477 #CJK UNIFIED IDEOGRAPH + {0xD9E9, 0x530D}, //15478 #CJK UNIFIED IDEOGRAPH + {0xD9EA, 0x8A07}, //15479 #CJK UNIFIED IDEOGRAPH + {0xD9EB, 0x5310}, //15480 #CJK UNIFIED IDEOGRAPH + {0xD9EC, 0x51EB}, //15481 #CJK UNIFIED IDEOGRAPH + {0xD9ED, 0x5919}, //15482 #CJK UNIFIED IDEOGRAPH + {0xD9EE, 0x5155}, //15483 #CJK UNIFIED IDEOGRAPH + {0xD9EF, 0x4EA0}, //15484 #CJK UNIFIED IDEOGRAPH + {0xD9F0, 0x5156}, //15485 #CJK UNIFIED IDEOGRAPH + {0xD9F1, 0x4EB3}, //15486 #CJK UNIFIED IDEOGRAPH + {0xD9F2, 0x886E}, //15487 #CJK UNIFIED IDEOGRAPH + {0xD9F3, 0x88A4}, //15488 #CJK UNIFIED IDEOGRAPH + {0xD9F4, 0x4EB5}, //15489 #CJK UNIFIED IDEOGRAPH + {0xD9F5, 0x8114}, //15490 #CJK UNIFIED IDEOGRAPH + {0xD9F6, 0x88D2}, //15491 #CJK UNIFIED IDEOGRAPH + {0xD9F7, 0x7980}, //15492 #CJK UNIFIED IDEOGRAPH + {0xD9F8, 0x5B34}, //15493 #CJK UNIFIED IDEOGRAPH + {0xD9F9, 0x8803}, //15494 #CJK UNIFIED IDEOGRAPH + {0xD9FA, 0x7FB8}, //15495 #CJK UNIFIED IDEOGRAPH + {0xD9FB, 0x51AB}, //15496 #CJK UNIFIED IDEOGRAPH + {0xD9FC, 0x51B1}, //15497 #CJK UNIFIED IDEOGRAPH + {0xD9FD, 0x51BD}, //15498 #CJK UNIFIED IDEOGRAPH + {0xD9FE, 0x51BC}, //15499 #CJK UNIFIED IDEOGRAPH + {0xDA40, 0x8D0E}, //15500 #CJK UNIFIED IDEOGRAPH + {0xDA41, 0x8D0F}, //15501 #CJK UNIFIED IDEOGRAPH + {0xDA42, 0x8D10}, //15502 #CJK UNIFIED IDEOGRAPH + {0xDA43, 0x8D11}, //15503 #CJK UNIFIED IDEOGRAPH + {0xDA44, 0x8D12}, //15504 #CJK UNIFIED IDEOGRAPH + {0xDA45, 0x8D13}, //15505 #CJK UNIFIED IDEOGRAPH + {0xDA46, 0x8D14}, //15506 #CJK UNIFIED IDEOGRAPH + {0xDA47, 0x8D15}, //15507 #CJK UNIFIED IDEOGRAPH + {0xDA48, 0x8D16}, //15508 #CJK UNIFIED IDEOGRAPH + {0xDA49, 0x8D17}, //15509 #CJK UNIFIED IDEOGRAPH + {0xDA4A, 0x8D18}, //15510 #CJK UNIFIED IDEOGRAPH + {0xDA4B, 0x8D19}, //15511 #CJK UNIFIED IDEOGRAPH + {0xDA4C, 0x8D1A}, //15512 #CJK UNIFIED IDEOGRAPH + {0xDA4D, 0x8D1B}, //15513 #CJK UNIFIED IDEOGRAPH + {0xDA4E, 0x8D1C}, //15514 #CJK UNIFIED IDEOGRAPH + {0xDA4F, 0x8D20}, //15515 #CJK UNIFIED IDEOGRAPH + {0xDA50, 0x8D51}, //15516 #CJK UNIFIED IDEOGRAPH + {0xDA51, 0x8D52}, //15517 #CJK UNIFIED IDEOGRAPH + {0xDA52, 0x8D57}, //15518 #CJK UNIFIED IDEOGRAPH + {0xDA53, 0x8D5F}, //15519 #CJK UNIFIED IDEOGRAPH + {0xDA54, 0x8D65}, //15520 #CJK UNIFIED IDEOGRAPH + {0xDA55, 0x8D68}, //15521 #CJK UNIFIED IDEOGRAPH + {0xDA56, 0x8D69}, //15522 #CJK UNIFIED IDEOGRAPH + {0xDA57, 0x8D6A}, //15523 #CJK UNIFIED IDEOGRAPH + {0xDA58, 0x8D6C}, //15524 #CJK UNIFIED IDEOGRAPH + {0xDA59, 0x8D6E}, //15525 #CJK UNIFIED IDEOGRAPH + {0xDA5A, 0x8D6F}, //15526 #CJK UNIFIED IDEOGRAPH + {0xDA5B, 0x8D71}, //15527 #CJK UNIFIED IDEOGRAPH + {0xDA5C, 0x8D72}, //15528 #CJK UNIFIED IDEOGRAPH + {0xDA5D, 0x8D78}, //15529 #CJK UNIFIED IDEOGRAPH + {0xDA5E, 0x8D79}, //15530 #CJK UNIFIED IDEOGRAPH + {0xDA5F, 0x8D7A}, //15531 #CJK UNIFIED IDEOGRAPH + {0xDA60, 0x8D7B}, //15532 #CJK UNIFIED IDEOGRAPH + {0xDA61, 0x8D7C}, //15533 #CJK UNIFIED IDEOGRAPH + {0xDA62, 0x8D7D}, //15534 #CJK UNIFIED IDEOGRAPH + {0xDA63, 0x8D7E}, //15535 #CJK UNIFIED IDEOGRAPH + {0xDA64, 0x8D7F}, //15536 #CJK UNIFIED IDEOGRAPH + {0xDA65, 0x8D80}, //15537 #CJK UNIFIED IDEOGRAPH + {0xDA66, 0x8D82}, //15538 #CJK UNIFIED IDEOGRAPH + {0xDA67, 0x8D83}, //15539 #CJK UNIFIED IDEOGRAPH + {0xDA68, 0x8D86}, //15540 #CJK UNIFIED IDEOGRAPH + {0xDA69, 0x8D87}, //15541 #CJK UNIFIED IDEOGRAPH + {0xDA6A, 0x8D88}, //15542 #CJK UNIFIED IDEOGRAPH + {0xDA6B, 0x8D89}, //15543 #CJK UNIFIED IDEOGRAPH + {0xDA6C, 0x8D8C}, //15544 #CJK UNIFIED IDEOGRAPH + {0xDA6D, 0x8D8D}, //15545 #CJK UNIFIED IDEOGRAPH + {0xDA6E, 0x8D8E}, //15546 #CJK UNIFIED IDEOGRAPH + {0xDA6F, 0x8D8F}, //15547 #CJK UNIFIED IDEOGRAPH + {0xDA70, 0x8D90}, //15548 #CJK UNIFIED IDEOGRAPH + {0xDA71, 0x8D92}, //15549 #CJK UNIFIED IDEOGRAPH + {0xDA72, 0x8D93}, //15550 #CJK UNIFIED IDEOGRAPH + {0xDA73, 0x8D95}, //15551 #CJK UNIFIED IDEOGRAPH + {0xDA74, 0x8D96}, //15552 #CJK UNIFIED IDEOGRAPH + {0xDA75, 0x8D97}, //15553 #CJK UNIFIED IDEOGRAPH + {0xDA76, 0x8D98}, //15554 #CJK UNIFIED IDEOGRAPH + {0xDA77, 0x8D99}, //15555 #CJK UNIFIED IDEOGRAPH + {0xDA78, 0x8D9A}, //15556 #CJK UNIFIED IDEOGRAPH + {0xDA79, 0x8D9B}, //15557 #CJK UNIFIED IDEOGRAPH + {0xDA7A, 0x8D9C}, //15558 #CJK UNIFIED IDEOGRAPH + {0xDA7B, 0x8D9D}, //15559 #CJK UNIFIED IDEOGRAPH + {0xDA7C, 0x8D9E}, //15560 #CJK UNIFIED IDEOGRAPH + {0xDA7D, 0x8DA0}, //15561 #CJK UNIFIED IDEOGRAPH + {0xDA7E, 0x8DA1}, //15562 #CJK UNIFIED IDEOGRAPH + {0xDA80, 0x8DA2}, //15563 #CJK UNIFIED IDEOGRAPH + {0xDA81, 0x8DA4}, //15564 #CJK UNIFIED IDEOGRAPH + {0xDA82, 0x8DA5}, //15565 #CJK UNIFIED IDEOGRAPH + {0xDA83, 0x8DA6}, //15566 #CJK UNIFIED IDEOGRAPH + {0xDA84, 0x8DA7}, //15567 #CJK UNIFIED IDEOGRAPH + {0xDA85, 0x8DA8}, //15568 #CJK UNIFIED IDEOGRAPH + {0xDA86, 0x8DA9}, //15569 #CJK UNIFIED IDEOGRAPH + {0xDA87, 0x8DAA}, //15570 #CJK UNIFIED IDEOGRAPH + {0xDA88, 0x8DAB}, //15571 #CJK UNIFIED IDEOGRAPH + {0xDA89, 0x8DAC}, //15572 #CJK UNIFIED IDEOGRAPH + {0xDA8A, 0x8DAD}, //15573 #CJK UNIFIED IDEOGRAPH + {0xDA8B, 0x8DAE}, //15574 #CJK UNIFIED IDEOGRAPH + {0xDA8C, 0x8DAF}, //15575 #CJK UNIFIED IDEOGRAPH + {0xDA8D, 0x8DB0}, //15576 #CJK UNIFIED IDEOGRAPH + {0xDA8E, 0x8DB2}, //15577 #CJK UNIFIED IDEOGRAPH + {0xDA8F, 0x8DB6}, //15578 #CJK UNIFIED IDEOGRAPH + {0xDA90, 0x8DB7}, //15579 #CJK UNIFIED IDEOGRAPH + {0xDA91, 0x8DB9}, //15580 #CJK UNIFIED IDEOGRAPH + {0xDA92, 0x8DBB}, //15581 #CJK UNIFIED IDEOGRAPH + {0xDA93, 0x8DBD}, //15582 #CJK UNIFIED IDEOGRAPH + {0xDA94, 0x8DC0}, //15583 #CJK UNIFIED IDEOGRAPH + {0xDA95, 0x8DC1}, //15584 #CJK UNIFIED IDEOGRAPH + {0xDA96, 0x8DC2}, //15585 #CJK UNIFIED IDEOGRAPH + {0xDA97, 0x8DC5}, //15586 #CJK UNIFIED IDEOGRAPH + {0xDA98, 0x8DC7}, //15587 #CJK UNIFIED IDEOGRAPH + {0xDA99, 0x8DC8}, //15588 #CJK UNIFIED IDEOGRAPH + {0xDA9A, 0x8DC9}, //15589 #CJK UNIFIED IDEOGRAPH + {0xDA9B, 0x8DCA}, //15590 #CJK UNIFIED IDEOGRAPH + {0xDA9C, 0x8DCD}, //15591 #CJK UNIFIED IDEOGRAPH + {0xDA9D, 0x8DD0}, //15592 #CJK UNIFIED IDEOGRAPH + {0xDA9E, 0x8DD2}, //15593 #CJK UNIFIED IDEOGRAPH + {0xDA9F, 0x8DD3}, //15594 #CJK UNIFIED IDEOGRAPH + {0xDAA0, 0x8DD4}, //15595 #CJK UNIFIED IDEOGRAPH + {0xDAA1, 0x51C7}, //15596 #CJK UNIFIED IDEOGRAPH + {0xDAA2, 0x5196}, //15597 #CJK UNIFIED IDEOGRAPH + {0xDAA3, 0x51A2}, //15598 #CJK UNIFIED IDEOGRAPH + {0xDAA4, 0x51A5}, //15599 #CJK UNIFIED IDEOGRAPH + {0xDAA5, 0x8BA0}, //15600 #CJK UNIFIED IDEOGRAPH + {0xDAA6, 0x8BA6}, //15601 #CJK UNIFIED IDEOGRAPH + {0xDAA7, 0x8BA7}, //15602 #CJK UNIFIED IDEOGRAPH + {0xDAA8, 0x8BAA}, //15603 #CJK UNIFIED IDEOGRAPH + {0xDAA9, 0x8BB4}, //15604 #CJK UNIFIED IDEOGRAPH + {0xDAAA, 0x8BB5}, //15605 #CJK UNIFIED IDEOGRAPH + {0xDAAB, 0x8BB7}, //15606 #CJK UNIFIED IDEOGRAPH + {0xDAAC, 0x8BC2}, //15607 #CJK UNIFIED IDEOGRAPH + {0xDAAD, 0x8BC3}, //15608 #CJK UNIFIED IDEOGRAPH + {0xDAAE, 0x8BCB}, //15609 #CJK UNIFIED IDEOGRAPH + {0xDAAF, 0x8BCF}, //15610 #CJK UNIFIED IDEOGRAPH + {0xDAB0, 0x8BCE}, //15611 #CJK UNIFIED IDEOGRAPH + {0xDAB1, 0x8BD2}, //15612 #CJK UNIFIED IDEOGRAPH + {0xDAB2, 0x8BD3}, //15613 #CJK UNIFIED IDEOGRAPH + {0xDAB3, 0x8BD4}, //15614 #CJK UNIFIED IDEOGRAPH + {0xDAB4, 0x8BD6}, //15615 #CJK UNIFIED IDEOGRAPH + {0xDAB5, 0x8BD8}, //15616 #CJK UNIFIED IDEOGRAPH + {0xDAB6, 0x8BD9}, //15617 #CJK UNIFIED IDEOGRAPH + {0xDAB7, 0x8BDC}, //15618 #CJK UNIFIED IDEOGRAPH + {0xDAB8, 0x8BDF}, //15619 #CJK UNIFIED IDEOGRAPH + {0xDAB9, 0x8BE0}, //15620 #CJK UNIFIED IDEOGRAPH + {0xDABA, 0x8BE4}, //15621 #CJK UNIFIED IDEOGRAPH + {0xDABB, 0x8BE8}, //15622 #CJK UNIFIED IDEOGRAPH + {0xDABC, 0x8BE9}, //15623 #CJK UNIFIED IDEOGRAPH + {0xDABD, 0x8BEE}, //15624 #CJK UNIFIED IDEOGRAPH + {0xDABE, 0x8BF0}, //15625 #CJK UNIFIED IDEOGRAPH + {0xDABF, 0x8BF3}, //15626 #CJK UNIFIED IDEOGRAPH + {0xDAC0, 0x8BF6}, //15627 #CJK UNIFIED IDEOGRAPH + {0xDAC1, 0x8BF9}, //15628 #CJK UNIFIED IDEOGRAPH + {0xDAC2, 0x8BFC}, //15629 #CJK UNIFIED IDEOGRAPH + {0xDAC3, 0x8BFF}, //15630 #CJK UNIFIED IDEOGRAPH + {0xDAC4, 0x8C00}, //15631 #CJK UNIFIED IDEOGRAPH + {0xDAC5, 0x8C02}, //15632 #CJK UNIFIED IDEOGRAPH + {0xDAC6, 0x8C04}, //15633 #CJK UNIFIED IDEOGRAPH + {0xDAC7, 0x8C07}, //15634 #CJK UNIFIED IDEOGRAPH + {0xDAC8, 0x8C0C}, //15635 #CJK UNIFIED IDEOGRAPH + {0xDAC9, 0x8C0F}, //15636 #CJK UNIFIED IDEOGRAPH + {0xDACA, 0x8C11}, //15637 #CJK UNIFIED IDEOGRAPH + {0xDACB, 0x8C12}, //15638 #CJK UNIFIED IDEOGRAPH + {0xDACC, 0x8C14}, //15639 #CJK UNIFIED IDEOGRAPH + {0xDACD, 0x8C15}, //15640 #CJK UNIFIED IDEOGRAPH + {0xDACE, 0x8C16}, //15641 #CJK UNIFIED IDEOGRAPH + {0xDACF, 0x8C19}, //15642 #CJK UNIFIED IDEOGRAPH + {0xDAD0, 0x8C1B}, //15643 #CJK UNIFIED IDEOGRAPH + {0xDAD1, 0x8C18}, //15644 #CJK UNIFIED IDEOGRAPH + {0xDAD2, 0x8C1D}, //15645 #CJK UNIFIED IDEOGRAPH + {0xDAD3, 0x8C1F}, //15646 #CJK UNIFIED IDEOGRAPH + {0xDAD4, 0x8C20}, //15647 #CJK UNIFIED IDEOGRAPH + {0xDAD5, 0x8C21}, //15648 #CJK UNIFIED IDEOGRAPH + {0xDAD6, 0x8C25}, //15649 #CJK UNIFIED IDEOGRAPH + {0xDAD7, 0x8C27}, //15650 #CJK UNIFIED IDEOGRAPH + {0xDAD8, 0x8C2A}, //15651 #CJK UNIFIED IDEOGRAPH + {0xDAD9, 0x8C2B}, //15652 #CJK UNIFIED IDEOGRAPH + {0xDADA, 0x8C2E}, //15653 #CJK UNIFIED IDEOGRAPH + {0xDADB, 0x8C2F}, //15654 #CJK UNIFIED IDEOGRAPH + {0xDADC, 0x8C32}, //15655 #CJK UNIFIED IDEOGRAPH + {0xDADD, 0x8C33}, //15656 #CJK UNIFIED IDEOGRAPH + {0xDADE, 0x8C35}, //15657 #CJK UNIFIED IDEOGRAPH + {0xDADF, 0x8C36}, //15658 #CJK UNIFIED IDEOGRAPH + {0xDAE0, 0x5369}, //15659 #CJK UNIFIED IDEOGRAPH + {0xDAE1, 0x537A}, //15660 #CJK UNIFIED IDEOGRAPH + {0xDAE2, 0x961D}, //15661 #CJK UNIFIED IDEOGRAPH + {0xDAE3, 0x9622}, //15662 #CJK UNIFIED IDEOGRAPH + {0xDAE4, 0x9621}, //15663 #CJK UNIFIED IDEOGRAPH + {0xDAE5, 0x9631}, //15664 #CJK UNIFIED IDEOGRAPH + {0xDAE6, 0x962A}, //15665 #CJK UNIFIED IDEOGRAPH + {0xDAE7, 0x963D}, //15666 #CJK UNIFIED IDEOGRAPH + {0xDAE8, 0x963C}, //15667 #CJK UNIFIED IDEOGRAPH + {0xDAE9, 0x9642}, //15668 #CJK UNIFIED IDEOGRAPH + {0xDAEA, 0x9649}, //15669 #CJK UNIFIED IDEOGRAPH + {0xDAEB, 0x9654}, //15670 #CJK UNIFIED IDEOGRAPH + {0xDAEC, 0x965F}, //15671 #CJK UNIFIED IDEOGRAPH + {0xDAED, 0x9667}, //15672 #CJK UNIFIED IDEOGRAPH + {0xDAEE, 0x966C}, //15673 #CJK UNIFIED IDEOGRAPH + {0xDAEF, 0x9672}, //15674 #CJK UNIFIED IDEOGRAPH + {0xDAF0, 0x9674}, //15675 #CJK UNIFIED IDEOGRAPH + {0xDAF1, 0x9688}, //15676 #CJK UNIFIED IDEOGRAPH + {0xDAF2, 0x968D}, //15677 #CJK UNIFIED IDEOGRAPH + {0xDAF3, 0x9697}, //15678 #CJK UNIFIED IDEOGRAPH + {0xDAF4, 0x96B0}, //15679 #CJK UNIFIED IDEOGRAPH + {0xDAF5, 0x9097}, //15680 #CJK UNIFIED IDEOGRAPH + {0xDAF6, 0x909B}, //15681 #CJK UNIFIED IDEOGRAPH + {0xDAF7, 0x909D}, //15682 #CJK UNIFIED IDEOGRAPH + {0xDAF8, 0x9099}, //15683 #CJK UNIFIED IDEOGRAPH + {0xDAF9, 0x90AC}, //15684 #CJK UNIFIED IDEOGRAPH + {0xDAFA, 0x90A1}, //15685 #CJK UNIFIED IDEOGRAPH + {0xDAFB, 0x90B4}, //15686 #CJK UNIFIED IDEOGRAPH + {0xDAFC, 0x90B3}, //15687 #CJK UNIFIED IDEOGRAPH + {0xDAFD, 0x90B6}, //15688 #CJK UNIFIED IDEOGRAPH + {0xDAFE, 0x90BA}, //15689 #CJK UNIFIED IDEOGRAPH + {0xDB40, 0x8DD5}, //15690 #CJK UNIFIED IDEOGRAPH + {0xDB41, 0x8DD8}, //15691 #CJK UNIFIED IDEOGRAPH + {0xDB42, 0x8DD9}, //15692 #CJK UNIFIED IDEOGRAPH + {0xDB43, 0x8DDC}, //15693 #CJK UNIFIED IDEOGRAPH + {0xDB44, 0x8DE0}, //15694 #CJK UNIFIED IDEOGRAPH + {0xDB45, 0x8DE1}, //15695 #CJK UNIFIED IDEOGRAPH + {0xDB46, 0x8DE2}, //15696 #CJK UNIFIED IDEOGRAPH + {0xDB47, 0x8DE5}, //15697 #CJK UNIFIED IDEOGRAPH + {0xDB48, 0x8DE6}, //15698 #CJK UNIFIED IDEOGRAPH + {0xDB49, 0x8DE7}, //15699 #CJK UNIFIED IDEOGRAPH + {0xDB4A, 0x8DE9}, //15700 #CJK UNIFIED IDEOGRAPH + {0xDB4B, 0x8DED}, //15701 #CJK UNIFIED IDEOGRAPH + {0xDB4C, 0x8DEE}, //15702 #CJK UNIFIED IDEOGRAPH + {0xDB4D, 0x8DF0}, //15703 #CJK UNIFIED IDEOGRAPH + {0xDB4E, 0x8DF1}, //15704 #CJK UNIFIED IDEOGRAPH + {0xDB4F, 0x8DF2}, //15705 #CJK UNIFIED IDEOGRAPH + {0xDB50, 0x8DF4}, //15706 #CJK UNIFIED IDEOGRAPH + {0xDB51, 0x8DF6}, //15707 #CJK UNIFIED IDEOGRAPH + {0xDB52, 0x8DFC}, //15708 #CJK UNIFIED IDEOGRAPH + {0xDB53, 0x8DFE}, //15709 #CJK UNIFIED IDEOGRAPH + {0xDB54, 0x8DFF}, //15710 #CJK UNIFIED IDEOGRAPH + {0xDB55, 0x8E00}, //15711 #CJK UNIFIED IDEOGRAPH + {0xDB56, 0x8E01}, //15712 #CJK UNIFIED IDEOGRAPH + {0xDB57, 0x8E02}, //15713 #CJK UNIFIED IDEOGRAPH + {0xDB58, 0x8E03}, //15714 #CJK UNIFIED IDEOGRAPH + {0xDB59, 0x8E04}, //15715 #CJK UNIFIED IDEOGRAPH + {0xDB5A, 0x8E06}, //15716 #CJK UNIFIED IDEOGRAPH + {0xDB5B, 0x8E07}, //15717 #CJK UNIFIED IDEOGRAPH + {0xDB5C, 0x8E08}, //15718 #CJK UNIFIED IDEOGRAPH + {0xDB5D, 0x8E0B}, //15719 #CJK UNIFIED IDEOGRAPH + {0xDB5E, 0x8E0D}, //15720 #CJK UNIFIED IDEOGRAPH + {0xDB5F, 0x8E0E}, //15721 #CJK UNIFIED IDEOGRAPH + {0xDB60, 0x8E10}, //15722 #CJK UNIFIED IDEOGRAPH + {0xDB61, 0x8E11}, //15723 #CJK UNIFIED IDEOGRAPH + {0xDB62, 0x8E12}, //15724 #CJK UNIFIED IDEOGRAPH + {0xDB63, 0x8E13}, //15725 #CJK UNIFIED IDEOGRAPH + {0xDB64, 0x8E15}, //15726 #CJK UNIFIED IDEOGRAPH + {0xDB65, 0x8E16}, //15727 #CJK UNIFIED IDEOGRAPH + {0xDB66, 0x8E17}, //15728 #CJK UNIFIED IDEOGRAPH + {0xDB67, 0x8E18}, //15729 #CJK UNIFIED IDEOGRAPH + {0xDB68, 0x8E19}, //15730 #CJK UNIFIED IDEOGRAPH + {0xDB69, 0x8E1A}, //15731 #CJK UNIFIED IDEOGRAPH + {0xDB6A, 0x8E1B}, //15732 #CJK UNIFIED IDEOGRAPH + {0xDB6B, 0x8E1C}, //15733 #CJK UNIFIED IDEOGRAPH + {0xDB6C, 0x8E20}, //15734 #CJK UNIFIED IDEOGRAPH + {0xDB6D, 0x8E21}, //15735 #CJK UNIFIED IDEOGRAPH + {0xDB6E, 0x8E24}, //15736 #CJK UNIFIED IDEOGRAPH + {0xDB6F, 0x8E25}, //15737 #CJK UNIFIED IDEOGRAPH + {0xDB70, 0x8E26}, //15738 #CJK UNIFIED IDEOGRAPH + {0xDB71, 0x8E27}, //15739 #CJK UNIFIED IDEOGRAPH + {0xDB72, 0x8E28}, //15740 #CJK UNIFIED IDEOGRAPH + {0xDB73, 0x8E2B}, //15741 #CJK UNIFIED IDEOGRAPH + {0xDB74, 0x8E2D}, //15742 #CJK UNIFIED IDEOGRAPH + {0xDB75, 0x8E30}, //15743 #CJK UNIFIED IDEOGRAPH + {0xDB76, 0x8E32}, //15744 #CJK UNIFIED IDEOGRAPH + {0xDB77, 0x8E33}, //15745 #CJK UNIFIED IDEOGRAPH + {0xDB78, 0x8E34}, //15746 #CJK UNIFIED IDEOGRAPH + {0xDB79, 0x8E36}, //15747 #CJK UNIFIED IDEOGRAPH + {0xDB7A, 0x8E37}, //15748 #CJK UNIFIED IDEOGRAPH + {0xDB7B, 0x8E38}, //15749 #CJK UNIFIED IDEOGRAPH + {0xDB7C, 0x8E3B}, //15750 #CJK UNIFIED IDEOGRAPH + {0xDB7D, 0x8E3C}, //15751 #CJK UNIFIED IDEOGRAPH + {0xDB7E, 0x8E3E}, //15752 #CJK UNIFIED IDEOGRAPH + {0xDB80, 0x8E3F}, //15753 #CJK UNIFIED IDEOGRAPH + {0xDB81, 0x8E43}, //15754 #CJK UNIFIED IDEOGRAPH + {0xDB82, 0x8E45}, //15755 #CJK UNIFIED IDEOGRAPH + {0xDB83, 0x8E46}, //15756 #CJK UNIFIED IDEOGRAPH + {0xDB84, 0x8E4C}, //15757 #CJK UNIFIED IDEOGRAPH + {0xDB85, 0x8E4D}, //15758 #CJK UNIFIED IDEOGRAPH + {0xDB86, 0x8E4E}, //15759 #CJK UNIFIED IDEOGRAPH + {0xDB87, 0x8E4F}, //15760 #CJK UNIFIED IDEOGRAPH + {0xDB88, 0x8E50}, //15761 #CJK UNIFIED IDEOGRAPH + {0xDB89, 0x8E53}, //15762 #CJK UNIFIED IDEOGRAPH + {0xDB8A, 0x8E54}, //15763 #CJK UNIFIED IDEOGRAPH + {0xDB8B, 0x8E55}, //15764 #CJK UNIFIED IDEOGRAPH + {0xDB8C, 0x8E56}, //15765 #CJK UNIFIED IDEOGRAPH + {0xDB8D, 0x8E57}, //15766 #CJK UNIFIED IDEOGRAPH + {0xDB8E, 0x8E58}, //15767 #CJK UNIFIED IDEOGRAPH + {0xDB8F, 0x8E5A}, //15768 #CJK UNIFIED IDEOGRAPH + {0xDB90, 0x8E5B}, //15769 #CJK UNIFIED IDEOGRAPH + {0xDB91, 0x8E5C}, //15770 #CJK UNIFIED IDEOGRAPH + {0xDB92, 0x8E5D}, //15771 #CJK UNIFIED IDEOGRAPH + {0xDB93, 0x8E5E}, //15772 #CJK UNIFIED IDEOGRAPH + {0xDB94, 0x8E5F}, //15773 #CJK UNIFIED IDEOGRAPH + {0xDB95, 0x8E60}, //15774 #CJK UNIFIED IDEOGRAPH + {0xDB96, 0x8E61}, //15775 #CJK UNIFIED IDEOGRAPH + {0xDB97, 0x8E62}, //15776 #CJK UNIFIED IDEOGRAPH + {0xDB98, 0x8E63}, //15777 #CJK UNIFIED IDEOGRAPH + {0xDB99, 0x8E64}, //15778 #CJK UNIFIED IDEOGRAPH + {0xDB9A, 0x8E65}, //15779 #CJK UNIFIED IDEOGRAPH + {0xDB9B, 0x8E67}, //15780 #CJK UNIFIED IDEOGRAPH + {0xDB9C, 0x8E68}, //15781 #CJK UNIFIED IDEOGRAPH + {0xDB9D, 0x8E6A}, //15782 #CJK UNIFIED IDEOGRAPH + {0xDB9E, 0x8E6B}, //15783 #CJK UNIFIED IDEOGRAPH + {0xDB9F, 0x8E6E}, //15784 #CJK UNIFIED IDEOGRAPH + {0xDBA0, 0x8E71}, //15785 #CJK UNIFIED IDEOGRAPH + {0xDBA1, 0x90B8}, //15786 #CJK UNIFIED IDEOGRAPH + {0xDBA2, 0x90B0}, //15787 #CJK UNIFIED IDEOGRAPH + {0xDBA3, 0x90CF}, //15788 #CJK UNIFIED IDEOGRAPH + {0xDBA4, 0x90C5}, //15789 #CJK UNIFIED IDEOGRAPH + {0xDBA5, 0x90BE}, //15790 #CJK UNIFIED IDEOGRAPH + {0xDBA6, 0x90D0}, //15791 #CJK UNIFIED IDEOGRAPH + {0xDBA7, 0x90C4}, //15792 #CJK UNIFIED IDEOGRAPH + {0xDBA8, 0x90C7}, //15793 #CJK UNIFIED IDEOGRAPH + {0xDBA9, 0x90D3}, //15794 #CJK UNIFIED IDEOGRAPH + {0xDBAA, 0x90E6}, //15795 #CJK UNIFIED IDEOGRAPH + {0xDBAB, 0x90E2}, //15796 #CJK UNIFIED IDEOGRAPH + {0xDBAC, 0x90DC}, //15797 #CJK UNIFIED IDEOGRAPH + {0xDBAD, 0x90D7}, //15798 #CJK UNIFIED IDEOGRAPH + {0xDBAE, 0x90DB}, //15799 #CJK UNIFIED IDEOGRAPH + {0xDBAF, 0x90EB}, //15800 #CJK UNIFIED IDEOGRAPH + {0xDBB0, 0x90EF}, //15801 #CJK UNIFIED IDEOGRAPH + {0xDBB1, 0x90FE}, //15802 #CJK UNIFIED IDEOGRAPH + {0xDBB2, 0x9104}, //15803 #CJK UNIFIED IDEOGRAPH + {0xDBB3, 0x9122}, //15804 #CJK UNIFIED IDEOGRAPH + {0xDBB4, 0x911E}, //15805 #CJK UNIFIED IDEOGRAPH + {0xDBB5, 0x9123}, //15806 #CJK UNIFIED IDEOGRAPH + {0xDBB6, 0x9131}, //15807 #CJK UNIFIED IDEOGRAPH + {0xDBB7, 0x912F}, //15808 #CJK UNIFIED IDEOGRAPH + {0xDBB8, 0x9139}, //15809 #CJK UNIFIED IDEOGRAPH + {0xDBB9, 0x9143}, //15810 #CJK UNIFIED IDEOGRAPH + {0xDBBA, 0x9146}, //15811 #CJK UNIFIED IDEOGRAPH + {0xDBBB, 0x520D}, //15812 #CJK UNIFIED IDEOGRAPH + {0xDBBC, 0x5942}, //15813 #CJK UNIFIED IDEOGRAPH + {0xDBBD, 0x52A2}, //15814 #CJK UNIFIED IDEOGRAPH + {0xDBBE, 0x52AC}, //15815 #CJK UNIFIED IDEOGRAPH + {0xDBBF, 0x52AD}, //15816 #CJK UNIFIED IDEOGRAPH + {0xDBC0, 0x52BE}, //15817 #CJK UNIFIED IDEOGRAPH + {0xDBC1, 0x54FF}, //15818 #CJK UNIFIED IDEOGRAPH + {0xDBC2, 0x52D0}, //15819 #CJK UNIFIED IDEOGRAPH + {0xDBC3, 0x52D6}, //15820 #CJK UNIFIED IDEOGRAPH + {0xDBC4, 0x52F0}, //15821 #CJK UNIFIED IDEOGRAPH + {0xDBC5, 0x53DF}, //15822 #CJK UNIFIED IDEOGRAPH + {0xDBC6, 0x71EE}, //15823 #CJK UNIFIED IDEOGRAPH + {0xDBC7, 0x77CD}, //15824 #CJK UNIFIED IDEOGRAPH + {0xDBC8, 0x5EF4}, //15825 #CJK UNIFIED IDEOGRAPH + {0xDBC9, 0x51F5}, //15826 #CJK UNIFIED IDEOGRAPH + {0xDBCA, 0x51FC}, //15827 #CJK UNIFIED IDEOGRAPH + {0xDBCB, 0x9B2F}, //15828 #CJK UNIFIED IDEOGRAPH + {0xDBCC, 0x53B6}, //15829 #CJK UNIFIED IDEOGRAPH + {0xDBCD, 0x5F01}, //15830 #CJK UNIFIED IDEOGRAPH + {0xDBCE, 0x755A}, //15831 #CJK UNIFIED IDEOGRAPH + {0xDBCF, 0x5DEF}, //15832 #CJK UNIFIED IDEOGRAPH + {0xDBD0, 0x574C}, //15833 #CJK UNIFIED IDEOGRAPH + {0xDBD1, 0x57A9}, //15834 #CJK UNIFIED IDEOGRAPH + {0xDBD2, 0x57A1}, //15835 #CJK UNIFIED IDEOGRAPH + {0xDBD3, 0x587E}, //15836 #CJK UNIFIED IDEOGRAPH + {0xDBD4, 0x58BC}, //15837 #CJK UNIFIED IDEOGRAPH + {0xDBD5, 0x58C5}, //15838 #CJK UNIFIED IDEOGRAPH + {0xDBD6, 0x58D1}, //15839 #CJK UNIFIED IDEOGRAPH + {0xDBD7, 0x5729}, //15840 #CJK UNIFIED IDEOGRAPH + {0xDBD8, 0x572C}, //15841 #CJK UNIFIED IDEOGRAPH + {0xDBD9, 0x572A}, //15842 #CJK UNIFIED IDEOGRAPH + {0xDBDA, 0x5733}, //15843 #CJK UNIFIED IDEOGRAPH + {0xDBDB, 0x5739}, //15844 #CJK UNIFIED IDEOGRAPH + {0xDBDC, 0x572E}, //15845 #CJK UNIFIED IDEOGRAPH + {0xDBDD, 0x572F}, //15846 #CJK UNIFIED IDEOGRAPH + {0xDBDE, 0x575C}, //15847 #CJK UNIFIED IDEOGRAPH + {0xDBDF, 0x573B}, //15848 #CJK UNIFIED IDEOGRAPH + {0xDBE0, 0x5742}, //15849 #CJK UNIFIED IDEOGRAPH + {0xDBE1, 0x5769}, //15850 #CJK UNIFIED IDEOGRAPH + {0xDBE2, 0x5785}, //15851 #CJK UNIFIED IDEOGRAPH + {0xDBE3, 0x576B}, //15852 #CJK UNIFIED IDEOGRAPH + {0xDBE4, 0x5786}, //15853 #CJK UNIFIED IDEOGRAPH + {0xDBE5, 0x577C}, //15854 #CJK UNIFIED IDEOGRAPH + {0xDBE6, 0x577B}, //15855 #CJK UNIFIED IDEOGRAPH + {0xDBE7, 0x5768}, //15856 #CJK UNIFIED IDEOGRAPH + {0xDBE8, 0x576D}, //15857 #CJK UNIFIED IDEOGRAPH + {0xDBE9, 0x5776}, //15858 #CJK UNIFIED IDEOGRAPH + {0xDBEA, 0x5773}, //15859 #CJK UNIFIED IDEOGRAPH + {0xDBEB, 0x57AD}, //15860 #CJK UNIFIED IDEOGRAPH + {0xDBEC, 0x57A4}, //15861 #CJK UNIFIED IDEOGRAPH + {0xDBED, 0x578C}, //15862 #CJK UNIFIED IDEOGRAPH + {0xDBEE, 0x57B2}, //15863 #CJK UNIFIED IDEOGRAPH + {0xDBEF, 0x57CF}, //15864 #CJK UNIFIED IDEOGRAPH + {0xDBF0, 0x57A7}, //15865 #CJK UNIFIED IDEOGRAPH + {0xDBF1, 0x57B4}, //15866 #CJK UNIFIED IDEOGRAPH + {0xDBF2, 0x5793}, //15867 #CJK UNIFIED IDEOGRAPH + {0xDBF3, 0x57A0}, //15868 #CJK UNIFIED IDEOGRAPH + {0xDBF4, 0x57D5}, //15869 #CJK UNIFIED IDEOGRAPH + {0xDBF5, 0x57D8}, //15870 #CJK UNIFIED IDEOGRAPH + {0xDBF6, 0x57DA}, //15871 #CJK UNIFIED IDEOGRAPH + {0xDBF7, 0x57D9}, //15872 #CJK UNIFIED IDEOGRAPH + {0xDBF8, 0x57D2}, //15873 #CJK UNIFIED IDEOGRAPH + {0xDBF9, 0x57B8}, //15874 #CJK UNIFIED IDEOGRAPH + {0xDBFA, 0x57F4}, //15875 #CJK UNIFIED IDEOGRAPH + {0xDBFB, 0x57EF}, //15876 #CJK UNIFIED IDEOGRAPH + {0xDBFC, 0x57F8}, //15877 #CJK UNIFIED IDEOGRAPH + {0xDBFD, 0x57E4}, //15878 #CJK UNIFIED IDEOGRAPH + {0xDBFE, 0x57DD}, //15879 #CJK UNIFIED IDEOGRAPH + {0xDC40, 0x8E73}, //15880 #CJK UNIFIED IDEOGRAPH + {0xDC41, 0x8E75}, //15881 #CJK UNIFIED IDEOGRAPH + {0xDC42, 0x8E77}, //15882 #CJK UNIFIED IDEOGRAPH + {0xDC43, 0x8E78}, //15883 #CJK UNIFIED IDEOGRAPH + {0xDC44, 0x8E79}, //15884 #CJK UNIFIED IDEOGRAPH + {0xDC45, 0x8E7A}, //15885 #CJK UNIFIED IDEOGRAPH + {0xDC46, 0x8E7B}, //15886 #CJK UNIFIED IDEOGRAPH + {0xDC47, 0x8E7D}, //15887 #CJK UNIFIED IDEOGRAPH + {0xDC48, 0x8E7E}, //15888 #CJK UNIFIED IDEOGRAPH + {0xDC49, 0x8E80}, //15889 #CJK UNIFIED IDEOGRAPH + {0xDC4A, 0x8E82}, //15890 #CJK UNIFIED IDEOGRAPH + {0xDC4B, 0x8E83}, //15891 #CJK UNIFIED IDEOGRAPH + {0xDC4C, 0x8E84}, //15892 #CJK UNIFIED IDEOGRAPH + {0xDC4D, 0x8E86}, //15893 #CJK UNIFIED IDEOGRAPH + {0xDC4E, 0x8E88}, //15894 #CJK UNIFIED IDEOGRAPH + {0xDC4F, 0x8E89}, //15895 #CJK UNIFIED IDEOGRAPH + {0xDC50, 0x8E8A}, //15896 #CJK UNIFIED IDEOGRAPH + {0xDC51, 0x8E8B}, //15897 #CJK UNIFIED IDEOGRAPH + {0xDC52, 0x8E8C}, //15898 #CJK UNIFIED IDEOGRAPH + {0xDC53, 0x8E8D}, //15899 #CJK UNIFIED IDEOGRAPH + {0xDC54, 0x8E8E}, //15900 #CJK UNIFIED IDEOGRAPH + {0xDC55, 0x8E91}, //15901 #CJK UNIFIED IDEOGRAPH + {0xDC56, 0x8E92}, //15902 #CJK UNIFIED IDEOGRAPH + {0xDC57, 0x8E93}, //15903 #CJK UNIFIED IDEOGRAPH + {0xDC58, 0x8E95}, //15904 #CJK UNIFIED IDEOGRAPH + {0xDC59, 0x8E96}, //15905 #CJK UNIFIED IDEOGRAPH + {0xDC5A, 0x8E97}, //15906 #CJK UNIFIED IDEOGRAPH + {0xDC5B, 0x8E98}, //15907 #CJK UNIFIED IDEOGRAPH + {0xDC5C, 0x8E99}, //15908 #CJK UNIFIED IDEOGRAPH + {0xDC5D, 0x8E9A}, //15909 #CJK UNIFIED IDEOGRAPH + {0xDC5E, 0x8E9B}, //15910 #CJK UNIFIED IDEOGRAPH + {0xDC5F, 0x8E9D}, //15911 #CJK UNIFIED IDEOGRAPH + {0xDC60, 0x8E9F}, //15912 #CJK UNIFIED IDEOGRAPH + {0xDC61, 0x8EA0}, //15913 #CJK UNIFIED IDEOGRAPH + {0xDC62, 0x8EA1}, //15914 #CJK UNIFIED IDEOGRAPH + {0xDC63, 0x8EA2}, //15915 #CJK UNIFIED IDEOGRAPH + {0xDC64, 0x8EA3}, //15916 #CJK UNIFIED IDEOGRAPH + {0xDC65, 0x8EA4}, //15917 #CJK UNIFIED IDEOGRAPH + {0xDC66, 0x8EA5}, //15918 #CJK UNIFIED IDEOGRAPH + {0xDC67, 0x8EA6}, //15919 #CJK UNIFIED IDEOGRAPH + {0xDC68, 0x8EA7}, //15920 #CJK UNIFIED IDEOGRAPH + {0xDC69, 0x8EA8}, //15921 #CJK UNIFIED IDEOGRAPH + {0xDC6A, 0x8EA9}, //15922 #CJK UNIFIED IDEOGRAPH + {0xDC6B, 0x8EAA}, //15923 #CJK UNIFIED IDEOGRAPH + {0xDC6C, 0x8EAD}, //15924 #CJK UNIFIED IDEOGRAPH + {0xDC6D, 0x8EAE}, //15925 #CJK UNIFIED IDEOGRAPH + {0xDC6E, 0x8EB0}, //15926 #CJK UNIFIED IDEOGRAPH + {0xDC6F, 0x8EB1}, //15927 #CJK UNIFIED IDEOGRAPH + {0xDC70, 0x8EB3}, //15928 #CJK UNIFIED IDEOGRAPH + {0xDC71, 0x8EB4}, //15929 #CJK UNIFIED IDEOGRAPH + {0xDC72, 0x8EB5}, //15930 #CJK UNIFIED IDEOGRAPH + {0xDC73, 0x8EB6}, //15931 #CJK UNIFIED IDEOGRAPH + {0xDC74, 0x8EB7}, //15932 #CJK UNIFIED IDEOGRAPH + {0xDC75, 0x8EB8}, //15933 #CJK UNIFIED IDEOGRAPH + {0xDC76, 0x8EB9}, //15934 #CJK UNIFIED IDEOGRAPH + {0xDC77, 0x8EBB}, //15935 #CJK UNIFIED IDEOGRAPH + {0xDC78, 0x8EBC}, //15936 #CJK UNIFIED IDEOGRAPH + {0xDC79, 0x8EBD}, //15937 #CJK UNIFIED IDEOGRAPH + {0xDC7A, 0x8EBE}, //15938 #CJK UNIFIED IDEOGRAPH + {0xDC7B, 0x8EBF}, //15939 #CJK UNIFIED IDEOGRAPH + {0xDC7C, 0x8EC0}, //15940 #CJK UNIFIED IDEOGRAPH + {0xDC7D, 0x8EC1}, //15941 #CJK UNIFIED IDEOGRAPH + {0xDC7E, 0x8EC2}, //15942 #CJK UNIFIED IDEOGRAPH + {0xDC80, 0x8EC3}, //15943 #CJK UNIFIED IDEOGRAPH + {0xDC81, 0x8EC4}, //15944 #CJK UNIFIED IDEOGRAPH + {0xDC82, 0x8EC5}, //15945 #CJK UNIFIED IDEOGRAPH + {0xDC83, 0x8EC6}, //15946 #CJK UNIFIED IDEOGRAPH + {0xDC84, 0x8EC7}, //15947 #CJK UNIFIED IDEOGRAPH + {0xDC85, 0x8EC8}, //15948 #CJK UNIFIED IDEOGRAPH + {0xDC86, 0x8EC9}, //15949 #CJK UNIFIED IDEOGRAPH + {0xDC87, 0x8ECA}, //15950 #CJK UNIFIED IDEOGRAPH + {0xDC88, 0x8ECB}, //15951 #CJK UNIFIED IDEOGRAPH + {0xDC89, 0x8ECC}, //15952 #CJK UNIFIED IDEOGRAPH + {0xDC8A, 0x8ECD}, //15953 #CJK UNIFIED IDEOGRAPH + {0xDC8B, 0x8ECF}, //15954 #CJK UNIFIED IDEOGRAPH + {0xDC8C, 0x8ED0}, //15955 #CJK UNIFIED IDEOGRAPH + {0xDC8D, 0x8ED1}, //15956 #CJK UNIFIED IDEOGRAPH + {0xDC8E, 0x8ED2}, //15957 #CJK UNIFIED IDEOGRAPH + {0xDC8F, 0x8ED3}, //15958 #CJK UNIFIED IDEOGRAPH + {0xDC90, 0x8ED4}, //15959 #CJK UNIFIED IDEOGRAPH + {0xDC91, 0x8ED5}, //15960 #CJK UNIFIED IDEOGRAPH + {0xDC92, 0x8ED6}, //15961 #CJK UNIFIED IDEOGRAPH + {0xDC93, 0x8ED7}, //15962 #CJK UNIFIED IDEOGRAPH + {0xDC94, 0x8ED8}, //15963 #CJK UNIFIED IDEOGRAPH + {0xDC95, 0x8ED9}, //15964 #CJK UNIFIED IDEOGRAPH + {0xDC96, 0x8EDA}, //15965 #CJK UNIFIED IDEOGRAPH + {0xDC97, 0x8EDB}, //15966 #CJK UNIFIED IDEOGRAPH + {0xDC98, 0x8EDC}, //15967 #CJK UNIFIED IDEOGRAPH + {0xDC99, 0x8EDD}, //15968 #CJK UNIFIED IDEOGRAPH + {0xDC9A, 0x8EDE}, //15969 #CJK UNIFIED IDEOGRAPH + {0xDC9B, 0x8EDF}, //15970 #CJK UNIFIED IDEOGRAPH + {0xDC9C, 0x8EE0}, //15971 #CJK UNIFIED IDEOGRAPH + {0xDC9D, 0x8EE1}, //15972 #CJK UNIFIED IDEOGRAPH + {0xDC9E, 0x8EE2}, //15973 #CJK UNIFIED IDEOGRAPH + {0xDC9F, 0x8EE3}, //15974 #CJK UNIFIED IDEOGRAPH + {0xDCA0, 0x8EE4}, //15975 #CJK UNIFIED IDEOGRAPH + {0xDCA1, 0x580B}, //15976 #CJK UNIFIED IDEOGRAPH + {0xDCA2, 0x580D}, //15977 #CJK UNIFIED IDEOGRAPH + {0xDCA3, 0x57FD}, //15978 #CJK UNIFIED IDEOGRAPH + {0xDCA4, 0x57ED}, //15979 #CJK UNIFIED IDEOGRAPH + {0xDCA5, 0x5800}, //15980 #CJK UNIFIED IDEOGRAPH + {0xDCA6, 0x581E}, //15981 #CJK UNIFIED IDEOGRAPH + {0xDCA7, 0x5819}, //15982 #CJK UNIFIED IDEOGRAPH + {0xDCA8, 0x5844}, //15983 #CJK UNIFIED IDEOGRAPH + {0xDCA9, 0x5820}, //15984 #CJK UNIFIED IDEOGRAPH + {0xDCAA, 0x5865}, //15985 #CJK UNIFIED IDEOGRAPH + {0xDCAB, 0x586C}, //15986 #CJK UNIFIED IDEOGRAPH + {0xDCAC, 0x5881}, //15987 #CJK UNIFIED IDEOGRAPH + {0xDCAD, 0x5889}, //15988 #CJK UNIFIED IDEOGRAPH + {0xDCAE, 0x589A}, //15989 #CJK UNIFIED IDEOGRAPH + {0xDCAF, 0x5880}, //15990 #CJK UNIFIED IDEOGRAPH + {0xDCB0, 0x99A8}, //15991 #CJK UNIFIED IDEOGRAPH + {0xDCB1, 0x9F19}, //15992 #CJK UNIFIED IDEOGRAPH + {0xDCB2, 0x61FF}, //15993 #CJK UNIFIED IDEOGRAPH + {0xDCB3, 0x8279}, //15994 #CJK UNIFIED IDEOGRAPH + {0xDCB4, 0x827D}, //15995 #CJK UNIFIED IDEOGRAPH + {0xDCB5, 0x827F}, //15996 #CJK UNIFIED IDEOGRAPH + {0xDCB6, 0x828F}, //15997 #CJK UNIFIED IDEOGRAPH + {0xDCB7, 0x828A}, //15998 #CJK UNIFIED IDEOGRAPH + {0xDCB8, 0x82A8}, //15999 #CJK UNIFIED IDEOGRAPH + {0xDCB9, 0x8284}, //16000 #CJK UNIFIED IDEOGRAPH + {0xDCBA, 0x828E}, //16001 #CJK UNIFIED IDEOGRAPH + {0xDCBB, 0x8291}, //16002 #CJK UNIFIED IDEOGRAPH + {0xDCBC, 0x8297}, //16003 #CJK UNIFIED IDEOGRAPH + {0xDCBD, 0x8299}, //16004 #CJK UNIFIED IDEOGRAPH + {0xDCBE, 0x82AB}, //16005 #CJK UNIFIED IDEOGRAPH + {0xDCBF, 0x82B8}, //16006 #CJK UNIFIED IDEOGRAPH + {0xDCC0, 0x82BE}, //16007 #CJK UNIFIED IDEOGRAPH + {0xDCC1, 0x82B0}, //16008 #CJK UNIFIED IDEOGRAPH + {0xDCC2, 0x82C8}, //16009 #CJK UNIFIED IDEOGRAPH + {0xDCC3, 0x82CA}, //16010 #CJK UNIFIED IDEOGRAPH + {0xDCC4, 0x82E3}, //16011 #CJK UNIFIED IDEOGRAPH + {0xDCC5, 0x8298}, //16012 #CJK UNIFIED IDEOGRAPH + {0xDCC6, 0x82B7}, //16013 #CJK UNIFIED IDEOGRAPH + {0xDCC7, 0x82AE}, //16014 #CJK UNIFIED IDEOGRAPH + {0xDCC8, 0x82CB}, //16015 #CJK UNIFIED IDEOGRAPH + {0xDCC9, 0x82CC}, //16016 #CJK UNIFIED IDEOGRAPH + {0xDCCA, 0x82C1}, //16017 #CJK UNIFIED IDEOGRAPH + {0xDCCB, 0x82A9}, //16018 #CJK UNIFIED IDEOGRAPH + {0xDCCC, 0x82B4}, //16019 #CJK UNIFIED IDEOGRAPH + {0xDCCD, 0x82A1}, //16020 #CJK UNIFIED IDEOGRAPH + {0xDCCE, 0x82AA}, //16021 #CJK UNIFIED IDEOGRAPH + {0xDCCF, 0x829F}, //16022 #CJK UNIFIED IDEOGRAPH + {0xDCD0, 0x82C4}, //16023 #CJK UNIFIED IDEOGRAPH + {0xDCD1, 0x82CE}, //16024 #CJK UNIFIED IDEOGRAPH + {0xDCD2, 0x82A4}, //16025 #CJK UNIFIED IDEOGRAPH + {0xDCD3, 0x82E1}, //16026 #CJK UNIFIED IDEOGRAPH + {0xDCD4, 0x8309}, //16027 #CJK UNIFIED IDEOGRAPH + {0xDCD5, 0x82F7}, //16028 #CJK UNIFIED IDEOGRAPH + {0xDCD6, 0x82E4}, //16029 #CJK UNIFIED IDEOGRAPH + {0xDCD7, 0x830F}, //16030 #CJK UNIFIED IDEOGRAPH + {0xDCD8, 0x8307}, //16031 #CJK UNIFIED IDEOGRAPH + {0xDCD9, 0x82DC}, //16032 #CJK UNIFIED IDEOGRAPH + {0xDCDA, 0x82F4}, //16033 #CJK UNIFIED IDEOGRAPH + {0xDCDB, 0x82D2}, //16034 #CJK UNIFIED IDEOGRAPH + {0xDCDC, 0x82D8}, //16035 #CJK UNIFIED IDEOGRAPH + {0xDCDD, 0x830C}, //16036 #CJK UNIFIED IDEOGRAPH + {0xDCDE, 0x82FB}, //16037 #CJK UNIFIED IDEOGRAPH + {0xDCDF, 0x82D3}, //16038 #CJK UNIFIED IDEOGRAPH + {0xDCE0, 0x8311}, //16039 #CJK UNIFIED IDEOGRAPH + {0xDCE1, 0x831A}, //16040 #CJK UNIFIED IDEOGRAPH + {0xDCE2, 0x8306}, //16041 #CJK UNIFIED IDEOGRAPH + {0xDCE3, 0x8314}, //16042 #CJK UNIFIED IDEOGRAPH + {0xDCE4, 0x8315}, //16043 #CJK UNIFIED IDEOGRAPH + {0xDCE5, 0x82E0}, //16044 #CJK UNIFIED IDEOGRAPH + {0xDCE6, 0x82D5}, //16045 #CJK UNIFIED IDEOGRAPH + {0xDCE7, 0x831C}, //16046 #CJK UNIFIED IDEOGRAPH + {0xDCE8, 0x8351}, //16047 #CJK UNIFIED IDEOGRAPH + {0xDCE9, 0x835B}, //16048 #CJK UNIFIED IDEOGRAPH + {0xDCEA, 0x835C}, //16049 #CJK UNIFIED IDEOGRAPH + {0xDCEB, 0x8308}, //16050 #CJK UNIFIED IDEOGRAPH + {0xDCEC, 0x8392}, //16051 #CJK UNIFIED IDEOGRAPH + {0xDCED, 0x833C}, //16052 #CJK UNIFIED IDEOGRAPH + {0xDCEE, 0x8334}, //16053 #CJK UNIFIED IDEOGRAPH + {0xDCEF, 0x8331}, //16054 #CJK UNIFIED IDEOGRAPH + {0xDCF0, 0x839B}, //16055 #CJK UNIFIED IDEOGRAPH + {0xDCF1, 0x835E}, //16056 #CJK UNIFIED IDEOGRAPH + {0xDCF2, 0x832F}, //16057 #CJK UNIFIED IDEOGRAPH + {0xDCF3, 0x834F}, //16058 #CJK UNIFIED IDEOGRAPH + {0xDCF4, 0x8347}, //16059 #CJK UNIFIED IDEOGRAPH + {0xDCF5, 0x8343}, //16060 #CJK UNIFIED IDEOGRAPH + {0xDCF6, 0x835F}, //16061 #CJK UNIFIED IDEOGRAPH + {0xDCF7, 0x8340}, //16062 #CJK UNIFIED IDEOGRAPH + {0xDCF8, 0x8317}, //16063 #CJK UNIFIED IDEOGRAPH + {0xDCF9, 0x8360}, //16064 #CJK UNIFIED IDEOGRAPH + {0xDCFA, 0x832D}, //16065 #CJK UNIFIED IDEOGRAPH + {0xDCFB, 0x833A}, //16066 #CJK UNIFIED IDEOGRAPH + {0xDCFC, 0x8333}, //16067 #CJK UNIFIED IDEOGRAPH + {0xDCFD, 0x8366}, //16068 #CJK UNIFIED IDEOGRAPH + {0xDCFE, 0x8365}, //16069 #CJK UNIFIED IDEOGRAPH + {0xDD40, 0x8EE5}, //16070 #CJK UNIFIED IDEOGRAPH + {0xDD41, 0x8EE6}, //16071 #CJK UNIFIED IDEOGRAPH + {0xDD42, 0x8EE7}, //16072 #CJK UNIFIED IDEOGRAPH + {0xDD43, 0x8EE8}, //16073 #CJK UNIFIED IDEOGRAPH + {0xDD44, 0x8EE9}, //16074 #CJK UNIFIED IDEOGRAPH + {0xDD45, 0x8EEA}, //16075 #CJK UNIFIED IDEOGRAPH + {0xDD46, 0x8EEB}, //16076 #CJK UNIFIED IDEOGRAPH + {0xDD47, 0x8EEC}, //16077 #CJK UNIFIED IDEOGRAPH + {0xDD48, 0x8EED}, //16078 #CJK UNIFIED IDEOGRAPH + {0xDD49, 0x8EEE}, //16079 #CJK UNIFIED IDEOGRAPH + {0xDD4A, 0x8EEF}, //16080 #CJK UNIFIED IDEOGRAPH + {0xDD4B, 0x8EF0}, //16081 #CJK UNIFIED IDEOGRAPH + {0xDD4C, 0x8EF1}, //16082 #CJK UNIFIED IDEOGRAPH + {0xDD4D, 0x8EF2}, //16083 #CJK UNIFIED IDEOGRAPH + {0xDD4E, 0x8EF3}, //16084 #CJK UNIFIED IDEOGRAPH + {0xDD4F, 0x8EF4}, //16085 #CJK UNIFIED IDEOGRAPH + {0xDD50, 0x8EF5}, //16086 #CJK UNIFIED IDEOGRAPH + {0xDD51, 0x8EF6}, //16087 #CJK UNIFIED IDEOGRAPH + {0xDD52, 0x8EF7}, //16088 #CJK UNIFIED IDEOGRAPH + {0xDD53, 0x8EF8}, //16089 #CJK UNIFIED IDEOGRAPH + {0xDD54, 0x8EF9}, //16090 #CJK UNIFIED IDEOGRAPH + {0xDD55, 0x8EFA}, //16091 #CJK UNIFIED IDEOGRAPH + {0xDD56, 0x8EFB}, //16092 #CJK UNIFIED IDEOGRAPH + {0xDD57, 0x8EFC}, //16093 #CJK UNIFIED IDEOGRAPH + {0xDD58, 0x8EFD}, //16094 #CJK UNIFIED IDEOGRAPH + {0xDD59, 0x8EFE}, //16095 #CJK UNIFIED IDEOGRAPH + {0xDD5A, 0x8EFF}, //16096 #CJK UNIFIED IDEOGRAPH + {0xDD5B, 0x8F00}, //16097 #CJK UNIFIED IDEOGRAPH + {0xDD5C, 0x8F01}, //16098 #CJK UNIFIED IDEOGRAPH + {0xDD5D, 0x8F02}, //16099 #CJK UNIFIED IDEOGRAPH + {0xDD5E, 0x8F03}, //16100 #CJK UNIFIED IDEOGRAPH + {0xDD5F, 0x8F04}, //16101 #CJK UNIFIED IDEOGRAPH + {0xDD60, 0x8F05}, //16102 #CJK UNIFIED IDEOGRAPH + {0xDD61, 0x8F06}, //16103 #CJK UNIFIED IDEOGRAPH + {0xDD62, 0x8F07}, //16104 #CJK UNIFIED IDEOGRAPH + {0xDD63, 0x8F08}, //16105 #CJK UNIFIED IDEOGRAPH + {0xDD64, 0x8F09}, //16106 #CJK UNIFIED IDEOGRAPH + {0xDD65, 0x8F0A}, //16107 #CJK UNIFIED IDEOGRAPH + {0xDD66, 0x8F0B}, //16108 #CJK UNIFIED IDEOGRAPH + {0xDD67, 0x8F0C}, //16109 #CJK UNIFIED IDEOGRAPH + {0xDD68, 0x8F0D}, //16110 #CJK UNIFIED IDEOGRAPH + {0xDD69, 0x8F0E}, //16111 #CJK UNIFIED IDEOGRAPH + {0xDD6A, 0x8F0F}, //16112 #CJK UNIFIED IDEOGRAPH + {0xDD6B, 0x8F10}, //16113 #CJK UNIFIED IDEOGRAPH + {0xDD6C, 0x8F11}, //16114 #CJK UNIFIED IDEOGRAPH + {0xDD6D, 0x8F12}, //16115 #CJK UNIFIED IDEOGRAPH + {0xDD6E, 0x8F13}, //16116 #CJK UNIFIED IDEOGRAPH + {0xDD6F, 0x8F14}, //16117 #CJK UNIFIED IDEOGRAPH + {0xDD70, 0x8F15}, //16118 #CJK UNIFIED IDEOGRAPH + {0xDD71, 0x8F16}, //16119 #CJK UNIFIED IDEOGRAPH + {0xDD72, 0x8F17}, //16120 #CJK UNIFIED IDEOGRAPH + {0xDD73, 0x8F18}, //16121 #CJK UNIFIED IDEOGRAPH + {0xDD74, 0x8F19}, //16122 #CJK UNIFIED IDEOGRAPH + {0xDD75, 0x8F1A}, //16123 #CJK UNIFIED IDEOGRAPH + {0xDD76, 0x8F1B}, //16124 #CJK UNIFIED IDEOGRAPH + {0xDD77, 0x8F1C}, //16125 #CJK UNIFIED IDEOGRAPH + {0xDD78, 0x8F1D}, //16126 #CJK UNIFIED IDEOGRAPH + {0xDD79, 0x8F1E}, //16127 #CJK UNIFIED IDEOGRAPH + {0xDD7A, 0x8F1F}, //16128 #CJK UNIFIED IDEOGRAPH + {0xDD7B, 0x8F20}, //16129 #CJK UNIFIED IDEOGRAPH + {0xDD7C, 0x8F21}, //16130 #CJK UNIFIED IDEOGRAPH + {0xDD7D, 0x8F22}, //16131 #CJK UNIFIED IDEOGRAPH + {0xDD7E, 0x8F23}, //16132 #CJK UNIFIED IDEOGRAPH + {0xDD80, 0x8F24}, //16133 #CJK UNIFIED IDEOGRAPH + {0xDD81, 0x8F25}, //16134 #CJK UNIFIED IDEOGRAPH + {0xDD82, 0x8F26}, //16135 #CJK UNIFIED IDEOGRAPH + {0xDD83, 0x8F27}, //16136 #CJK UNIFIED IDEOGRAPH + {0xDD84, 0x8F28}, //16137 #CJK UNIFIED IDEOGRAPH + {0xDD85, 0x8F29}, //16138 #CJK UNIFIED IDEOGRAPH + {0xDD86, 0x8F2A}, //16139 #CJK UNIFIED IDEOGRAPH + {0xDD87, 0x8F2B}, //16140 #CJK UNIFIED IDEOGRAPH + {0xDD88, 0x8F2C}, //16141 #CJK UNIFIED IDEOGRAPH + {0xDD89, 0x8F2D}, //16142 #CJK UNIFIED IDEOGRAPH + {0xDD8A, 0x8F2E}, //16143 #CJK UNIFIED IDEOGRAPH + {0xDD8B, 0x8F2F}, //16144 #CJK UNIFIED IDEOGRAPH + {0xDD8C, 0x8F30}, //16145 #CJK UNIFIED IDEOGRAPH + {0xDD8D, 0x8F31}, //16146 #CJK UNIFIED IDEOGRAPH + {0xDD8E, 0x8F32}, //16147 #CJK UNIFIED IDEOGRAPH + {0xDD8F, 0x8F33}, //16148 #CJK UNIFIED IDEOGRAPH + {0xDD90, 0x8F34}, //16149 #CJK UNIFIED IDEOGRAPH + {0xDD91, 0x8F35}, //16150 #CJK UNIFIED IDEOGRAPH + {0xDD92, 0x8F36}, //16151 #CJK UNIFIED IDEOGRAPH + {0xDD93, 0x8F37}, //16152 #CJK UNIFIED IDEOGRAPH + {0xDD94, 0x8F38}, //16153 #CJK UNIFIED IDEOGRAPH + {0xDD95, 0x8F39}, //16154 #CJK UNIFIED IDEOGRAPH + {0xDD96, 0x8F3A}, //16155 #CJK UNIFIED IDEOGRAPH + {0xDD97, 0x8F3B}, //16156 #CJK UNIFIED IDEOGRAPH + {0xDD98, 0x8F3C}, //16157 #CJK UNIFIED IDEOGRAPH + {0xDD99, 0x8F3D}, //16158 #CJK UNIFIED IDEOGRAPH + {0xDD9A, 0x8F3E}, //16159 #CJK UNIFIED IDEOGRAPH + {0xDD9B, 0x8F3F}, //16160 #CJK UNIFIED IDEOGRAPH + {0xDD9C, 0x8F40}, //16161 #CJK UNIFIED IDEOGRAPH + {0xDD9D, 0x8F41}, //16162 #CJK UNIFIED IDEOGRAPH + {0xDD9E, 0x8F42}, //16163 #CJK UNIFIED IDEOGRAPH + {0xDD9F, 0x8F43}, //16164 #CJK UNIFIED IDEOGRAPH + {0xDDA0, 0x8F44}, //16165 #CJK UNIFIED IDEOGRAPH + {0xDDA1, 0x8368}, //16166 #CJK UNIFIED IDEOGRAPH + {0xDDA2, 0x831B}, //16167 #CJK UNIFIED IDEOGRAPH + {0xDDA3, 0x8369}, //16168 #CJK UNIFIED IDEOGRAPH + {0xDDA4, 0x836C}, //16169 #CJK UNIFIED IDEOGRAPH + {0xDDA5, 0x836A}, //16170 #CJK UNIFIED IDEOGRAPH + {0xDDA6, 0x836D}, //16171 #CJK UNIFIED IDEOGRAPH + {0xDDA7, 0x836E}, //16172 #CJK UNIFIED IDEOGRAPH + {0xDDA8, 0x83B0}, //16173 #CJK UNIFIED IDEOGRAPH + {0xDDA9, 0x8378}, //16174 #CJK UNIFIED IDEOGRAPH + {0xDDAA, 0x83B3}, //16175 #CJK UNIFIED IDEOGRAPH + {0xDDAB, 0x83B4}, //16176 #CJK UNIFIED IDEOGRAPH + {0xDDAC, 0x83A0}, //16177 #CJK UNIFIED IDEOGRAPH + {0xDDAD, 0x83AA}, //16178 #CJK UNIFIED IDEOGRAPH + {0xDDAE, 0x8393}, //16179 #CJK UNIFIED IDEOGRAPH + {0xDDAF, 0x839C}, //16180 #CJK UNIFIED IDEOGRAPH + {0xDDB0, 0x8385}, //16181 #CJK UNIFIED IDEOGRAPH + {0xDDB1, 0x837C}, //16182 #CJK UNIFIED IDEOGRAPH + {0xDDB2, 0x83B6}, //16183 #CJK UNIFIED IDEOGRAPH + {0xDDB3, 0x83A9}, //16184 #CJK UNIFIED IDEOGRAPH + {0xDDB4, 0x837D}, //16185 #CJK UNIFIED IDEOGRAPH + {0xDDB5, 0x83B8}, //16186 #CJK UNIFIED IDEOGRAPH + {0xDDB6, 0x837B}, //16187 #CJK UNIFIED IDEOGRAPH + {0xDDB7, 0x8398}, //16188 #CJK UNIFIED IDEOGRAPH + {0xDDB8, 0x839E}, //16189 #CJK UNIFIED IDEOGRAPH + {0xDDB9, 0x83A8}, //16190 #CJK UNIFIED IDEOGRAPH + {0xDDBA, 0x83BA}, //16191 #CJK UNIFIED IDEOGRAPH + {0xDDBB, 0x83BC}, //16192 #CJK UNIFIED IDEOGRAPH + {0xDDBC, 0x83C1}, //16193 #CJK UNIFIED IDEOGRAPH + {0xDDBD, 0x8401}, //16194 #CJK UNIFIED IDEOGRAPH + {0xDDBE, 0x83E5}, //16195 #CJK UNIFIED IDEOGRAPH + {0xDDBF, 0x83D8}, //16196 #CJK UNIFIED IDEOGRAPH + {0xDDC0, 0x5807}, //16197 #CJK UNIFIED IDEOGRAPH + {0xDDC1, 0x8418}, //16198 #CJK UNIFIED IDEOGRAPH + {0xDDC2, 0x840B}, //16199 #CJK UNIFIED IDEOGRAPH + {0xDDC3, 0x83DD}, //16200 #CJK UNIFIED IDEOGRAPH + {0xDDC4, 0x83FD}, //16201 #CJK UNIFIED IDEOGRAPH + {0xDDC5, 0x83D6}, //16202 #CJK UNIFIED IDEOGRAPH + {0xDDC6, 0x841C}, //16203 #CJK UNIFIED IDEOGRAPH + {0xDDC7, 0x8438}, //16204 #CJK UNIFIED IDEOGRAPH + {0xDDC8, 0x8411}, //16205 #CJK UNIFIED IDEOGRAPH + {0xDDC9, 0x8406}, //16206 #CJK UNIFIED IDEOGRAPH + {0xDDCA, 0x83D4}, //16207 #CJK UNIFIED IDEOGRAPH + {0xDDCB, 0x83DF}, //16208 #CJK UNIFIED IDEOGRAPH + {0xDDCC, 0x840F}, //16209 #CJK UNIFIED IDEOGRAPH + {0xDDCD, 0x8403}, //16210 #CJK UNIFIED IDEOGRAPH + {0xDDCE, 0x83F8}, //16211 #CJK UNIFIED IDEOGRAPH + {0xDDCF, 0x83F9}, //16212 #CJK UNIFIED IDEOGRAPH + {0xDDD0, 0x83EA}, //16213 #CJK UNIFIED IDEOGRAPH + {0xDDD1, 0x83C5}, //16214 #CJK UNIFIED IDEOGRAPH + {0xDDD2, 0x83C0}, //16215 #CJK UNIFIED IDEOGRAPH + {0xDDD3, 0x8426}, //16216 #CJK UNIFIED IDEOGRAPH + {0xDDD4, 0x83F0}, //16217 #CJK UNIFIED IDEOGRAPH + {0xDDD5, 0x83E1}, //16218 #CJK UNIFIED IDEOGRAPH + {0xDDD6, 0x845C}, //16219 #CJK UNIFIED IDEOGRAPH + {0xDDD7, 0x8451}, //16220 #CJK UNIFIED IDEOGRAPH + {0xDDD8, 0x845A}, //16221 #CJK UNIFIED IDEOGRAPH + {0xDDD9, 0x8459}, //16222 #CJK UNIFIED IDEOGRAPH + {0xDDDA, 0x8473}, //16223 #CJK UNIFIED IDEOGRAPH + {0xDDDB, 0x8487}, //16224 #CJK UNIFIED IDEOGRAPH + {0xDDDC, 0x8488}, //16225 #CJK UNIFIED IDEOGRAPH + {0xDDDD, 0x847A}, //16226 #CJK UNIFIED IDEOGRAPH + {0xDDDE, 0x8489}, //16227 #CJK UNIFIED IDEOGRAPH + {0xDDDF, 0x8478}, //16228 #CJK UNIFIED IDEOGRAPH + {0xDDE0, 0x843C}, //16229 #CJK UNIFIED IDEOGRAPH + {0xDDE1, 0x8446}, //16230 #CJK UNIFIED IDEOGRAPH + {0xDDE2, 0x8469}, //16231 #CJK UNIFIED IDEOGRAPH + {0xDDE3, 0x8476}, //16232 #CJK UNIFIED IDEOGRAPH + {0xDDE4, 0x848C}, //16233 #CJK UNIFIED IDEOGRAPH + {0xDDE5, 0x848E}, //16234 #CJK UNIFIED IDEOGRAPH + {0xDDE6, 0x8431}, //16235 #CJK UNIFIED IDEOGRAPH + {0xDDE7, 0x846D}, //16236 #CJK UNIFIED IDEOGRAPH + {0xDDE8, 0x84C1}, //16237 #CJK UNIFIED IDEOGRAPH + {0xDDE9, 0x84CD}, //16238 #CJK UNIFIED IDEOGRAPH + {0xDDEA, 0x84D0}, //16239 #CJK UNIFIED IDEOGRAPH + {0xDDEB, 0x84E6}, //16240 #CJK UNIFIED IDEOGRAPH + {0xDDEC, 0x84BD}, //16241 #CJK UNIFIED IDEOGRAPH + {0xDDED, 0x84D3}, //16242 #CJK UNIFIED IDEOGRAPH + {0xDDEE, 0x84CA}, //16243 #CJK UNIFIED IDEOGRAPH + {0xDDEF, 0x84BF}, //16244 #CJK UNIFIED IDEOGRAPH + {0xDDF0, 0x84BA}, //16245 #CJK UNIFIED IDEOGRAPH + {0xDDF1, 0x84E0}, //16246 #CJK UNIFIED IDEOGRAPH + {0xDDF2, 0x84A1}, //16247 #CJK UNIFIED IDEOGRAPH + {0xDDF3, 0x84B9}, //16248 #CJK UNIFIED IDEOGRAPH + {0xDDF4, 0x84B4}, //16249 #CJK UNIFIED IDEOGRAPH + {0xDDF5, 0x8497}, //16250 #CJK UNIFIED IDEOGRAPH + {0xDDF6, 0x84E5}, //16251 #CJK UNIFIED IDEOGRAPH + {0xDDF7, 0x84E3}, //16252 #CJK UNIFIED IDEOGRAPH + {0xDDF8, 0x850C}, //16253 #CJK UNIFIED IDEOGRAPH + {0xDDF9, 0x750D}, //16254 #CJK UNIFIED IDEOGRAPH + {0xDDFA, 0x8538}, //16255 #CJK UNIFIED IDEOGRAPH + {0xDDFB, 0x84F0}, //16256 #CJK UNIFIED IDEOGRAPH + {0xDDFC, 0x8539}, //16257 #CJK UNIFIED IDEOGRAPH + {0xDDFD, 0x851F}, //16258 #CJK UNIFIED IDEOGRAPH + {0xDDFE, 0x853A}, //16259 #CJK UNIFIED IDEOGRAPH + {0xDE40, 0x8F45}, //16260 #CJK UNIFIED IDEOGRAPH + {0xDE41, 0x8F46}, //16261 #CJK UNIFIED IDEOGRAPH + {0xDE42, 0x8F47}, //16262 #CJK UNIFIED IDEOGRAPH + {0xDE43, 0x8F48}, //16263 #CJK UNIFIED IDEOGRAPH + {0xDE44, 0x8F49}, //16264 #CJK UNIFIED IDEOGRAPH + {0xDE45, 0x8F4A}, //16265 #CJK UNIFIED IDEOGRAPH + {0xDE46, 0x8F4B}, //16266 #CJK UNIFIED IDEOGRAPH + {0xDE47, 0x8F4C}, //16267 #CJK UNIFIED IDEOGRAPH + {0xDE48, 0x8F4D}, //16268 #CJK UNIFIED IDEOGRAPH + {0xDE49, 0x8F4E}, //16269 #CJK UNIFIED IDEOGRAPH + {0xDE4A, 0x8F4F}, //16270 #CJK UNIFIED IDEOGRAPH + {0xDE4B, 0x8F50}, //16271 #CJK UNIFIED IDEOGRAPH + {0xDE4C, 0x8F51}, //16272 #CJK UNIFIED IDEOGRAPH + {0xDE4D, 0x8F52}, //16273 #CJK UNIFIED IDEOGRAPH + {0xDE4E, 0x8F53}, //16274 #CJK UNIFIED IDEOGRAPH + {0xDE4F, 0x8F54}, //16275 #CJK UNIFIED IDEOGRAPH + {0xDE50, 0x8F55}, //16276 #CJK UNIFIED IDEOGRAPH + {0xDE51, 0x8F56}, //16277 #CJK UNIFIED IDEOGRAPH + {0xDE52, 0x8F57}, //16278 #CJK UNIFIED IDEOGRAPH + {0xDE53, 0x8F58}, //16279 #CJK UNIFIED IDEOGRAPH + {0xDE54, 0x8F59}, //16280 #CJK UNIFIED IDEOGRAPH + {0xDE55, 0x8F5A}, //16281 #CJK UNIFIED IDEOGRAPH + {0xDE56, 0x8F5B}, //16282 #CJK UNIFIED IDEOGRAPH + {0xDE57, 0x8F5C}, //16283 #CJK UNIFIED IDEOGRAPH + {0xDE58, 0x8F5D}, //16284 #CJK UNIFIED IDEOGRAPH + {0xDE59, 0x8F5E}, //16285 #CJK UNIFIED IDEOGRAPH + {0xDE5A, 0x8F5F}, //16286 #CJK UNIFIED IDEOGRAPH + {0xDE5B, 0x8F60}, //16287 #CJK UNIFIED IDEOGRAPH + {0xDE5C, 0x8F61}, //16288 #CJK UNIFIED IDEOGRAPH + {0xDE5D, 0x8F62}, //16289 #CJK UNIFIED IDEOGRAPH + {0xDE5E, 0x8F63}, //16290 #CJK UNIFIED IDEOGRAPH + {0xDE5F, 0x8F64}, //16291 #CJK UNIFIED IDEOGRAPH + {0xDE60, 0x8F65}, //16292 #CJK UNIFIED IDEOGRAPH + {0xDE61, 0x8F6A}, //16293 #CJK UNIFIED IDEOGRAPH + {0xDE62, 0x8F80}, //16294 #CJK UNIFIED IDEOGRAPH + {0xDE63, 0x8F8C}, //16295 #CJK UNIFIED IDEOGRAPH + {0xDE64, 0x8F92}, //16296 #CJK UNIFIED IDEOGRAPH + {0xDE65, 0x8F9D}, //16297 #CJK UNIFIED IDEOGRAPH + {0xDE66, 0x8FA0}, //16298 #CJK UNIFIED IDEOGRAPH + {0xDE67, 0x8FA1}, //16299 #CJK UNIFIED IDEOGRAPH + {0xDE68, 0x8FA2}, //16300 #CJK UNIFIED IDEOGRAPH + {0xDE69, 0x8FA4}, //16301 #CJK UNIFIED IDEOGRAPH + {0xDE6A, 0x8FA5}, //16302 #CJK UNIFIED IDEOGRAPH + {0xDE6B, 0x8FA6}, //16303 #CJK UNIFIED IDEOGRAPH + {0xDE6C, 0x8FA7}, //16304 #CJK UNIFIED IDEOGRAPH + {0xDE6D, 0x8FAA}, //16305 #CJK UNIFIED IDEOGRAPH + {0xDE6E, 0x8FAC}, //16306 #CJK UNIFIED IDEOGRAPH + {0xDE6F, 0x8FAD}, //16307 #CJK UNIFIED IDEOGRAPH + {0xDE70, 0x8FAE}, //16308 #CJK UNIFIED IDEOGRAPH + {0xDE71, 0x8FAF}, //16309 #CJK UNIFIED IDEOGRAPH + {0xDE72, 0x8FB2}, //16310 #CJK UNIFIED IDEOGRAPH + {0xDE73, 0x8FB3}, //16311 #CJK UNIFIED IDEOGRAPH + {0xDE74, 0x8FB4}, //16312 #CJK UNIFIED IDEOGRAPH + {0xDE75, 0x8FB5}, //16313 #CJK UNIFIED IDEOGRAPH + {0xDE76, 0x8FB7}, //16314 #CJK UNIFIED IDEOGRAPH + {0xDE77, 0x8FB8}, //16315 #CJK UNIFIED IDEOGRAPH + {0xDE78, 0x8FBA}, //16316 #CJK UNIFIED IDEOGRAPH + {0xDE79, 0x8FBB}, //16317 #CJK UNIFIED IDEOGRAPH + {0xDE7A, 0x8FBC}, //16318 #CJK UNIFIED IDEOGRAPH + {0xDE7B, 0x8FBF}, //16319 #CJK UNIFIED IDEOGRAPH + {0xDE7C, 0x8FC0}, //16320 #CJK UNIFIED IDEOGRAPH + {0xDE7D, 0x8FC3}, //16321 #CJK UNIFIED IDEOGRAPH + {0xDE7E, 0x8FC6}, //16322 #CJK UNIFIED IDEOGRAPH + {0xDE80, 0x8FC9}, //16323 #CJK UNIFIED IDEOGRAPH + {0xDE81, 0x8FCA}, //16324 #CJK UNIFIED IDEOGRAPH + {0xDE82, 0x8FCB}, //16325 #CJK UNIFIED IDEOGRAPH + {0xDE83, 0x8FCC}, //16326 #CJK UNIFIED IDEOGRAPH + {0xDE84, 0x8FCD}, //16327 #CJK UNIFIED IDEOGRAPH + {0xDE85, 0x8FCF}, //16328 #CJK UNIFIED IDEOGRAPH + {0xDE86, 0x8FD2}, //16329 #CJK UNIFIED IDEOGRAPH + {0xDE87, 0x8FD6}, //16330 #CJK UNIFIED IDEOGRAPH + {0xDE88, 0x8FD7}, //16331 #CJK UNIFIED IDEOGRAPH + {0xDE89, 0x8FDA}, //16332 #CJK UNIFIED IDEOGRAPH + {0xDE8A, 0x8FE0}, //16333 #CJK UNIFIED IDEOGRAPH + {0xDE8B, 0x8FE1}, //16334 #CJK UNIFIED IDEOGRAPH + {0xDE8C, 0x8FE3}, //16335 #CJK UNIFIED IDEOGRAPH + {0xDE8D, 0x8FE7}, //16336 #CJK UNIFIED IDEOGRAPH + {0xDE8E, 0x8FEC}, //16337 #CJK UNIFIED IDEOGRAPH + {0xDE8F, 0x8FEF}, //16338 #CJK UNIFIED IDEOGRAPH + {0xDE90, 0x8FF1}, //16339 #CJK UNIFIED IDEOGRAPH + {0xDE91, 0x8FF2}, //16340 #CJK UNIFIED IDEOGRAPH + {0xDE92, 0x8FF4}, //16341 #CJK UNIFIED IDEOGRAPH + {0xDE93, 0x8FF5}, //16342 #CJK UNIFIED IDEOGRAPH + {0xDE94, 0x8FF6}, //16343 #CJK UNIFIED IDEOGRAPH + {0xDE95, 0x8FFA}, //16344 #CJK UNIFIED IDEOGRAPH + {0xDE96, 0x8FFB}, //16345 #CJK UNIFIED IDEOGRAPH + {0xDE97, 0x8FFC}, //16346 #CJK UNIFIED IDEOGRAPH + {0xDE98, 0x8FFE}, //16347 #CJK UNIFIED IDEOGRAPH + {0xDE99, 0x8FFF}, //16348 #CJK UNIFIED IDEOGRAPH + {0xDE9A, 0x9007}, //16349 #CJK UNIFIED IDEOGRAPH + {0xDE9B, 0x9008}, //16350 #CJK UNIFIED IDEOGRAPH + {0xDE9C, 0x900C}, //16351 #CJK UNIFIED IDEOGRAPH + {0xDE9D, 0x900E}, //16352 #CJK UNIFIED IDEOGRAPH + {0xDE9E, 0x9013}, //16353 #CJK UNIFIED IDEOGRAPH + {0xDE9F, 0x9015}, //16354 #CJK UNIFIED IDEOGRAPH + {0xDEA0, 0x9018}, //16355 #CJK UNIFIED IDEOGRAPH + {0xDEA1, 0x8556}, //16356 #CJK UNIFIED IDEOGRAPH + {0xDEA2, 0x853B}, //16357 #CJK UNIFIED IDEOGRAPH + {0xDEA3, 0x84FF}, //16358 #CJK UNIFIED IDEOGRAPH + {0xDEA4, 0x84FC}, //16359 #CJK UNIFIED IDEOGRAPH + {0xDEA5, 0x8559}, //16360 #CJK UNIFIED IDEOGRAPH + {0xDEA6, 0x8548}, //16361 #CJK UNIFIED IDEOGRAPH + {0xDEA7, 0x8568}, //16362 #CJK UNIFIED IDEOGRAPH + {0xDEA8, 0x8564}, //16363 #CJK UNIFIED IDEOGRAPH + {0xDEA9, 0x855E}, //16364 #CJK UNIFIED IDEOGRAPH + {0xDEAA, 0x857A}, //16365 #CJK UNIFIED IDEOGRAPH + {0xDEAB, 0x77A2}, //16366 #CJK UNIFIED IDEOGRAPH + {0xDEAC, 0x8543}, //16367 #CJK UNIFIED IDEOGRAPH + {0xDEAD, 0x8572}, //16368 #CJK UNIFIED IDEOGRAPH + {0xDEAE, 0x857B}, //16369 #CJK UNIFIED IDEOGRAPH + {0xDEAF, 0x85A4}, //16370 #CJK UNIFIED IDEOGRAPH + {0xDEB0, 0x85A8}, //16371 #CJK UNIFIED IDEOGRAPH + {0xDEB1, 0x8587}, //16372 #CJK UNIFIED IDEOGRAPH + {0xDEB2, 0x858F}, //16373 #CJK UNIFIED IDEOGRAPH + {0xDEB3, 0x8579}, //16374 #CJK UNIFIED IDEOGRAPH + {0xDEB4, 0x85AE}, //16375 #CJK UNIFIED IDEOGRAPH + {0xDEB5, 0x859C}, //16376 #CJK UNIFIED IDEOGRAPH + {0xDEB6, 0x8585}, //16377 #CJK UNIFIED IDEOGRAPH + {0xDEB7, 0x85B9}, //16378 #CJK UNIFIED IDEOGRAPH + {0xDEB8, 0x85B7}, //16379 #CJK UNIFIED IDEOGRAPH + {0xDEB9, 0x85B0}, //16380 #CJK UNIFIED IDEOGRAPH + {0xDEBA, 0x85D3}, //16381 #CJK UNIFIED IDEOGRAPH + {0xDEBB, 0x85C1}, //16382 #CJK UNIFIED IDEOGRAPH + {0xDEBC, 0x85DC}, //16383 #CJK UNIFIED IDEOGRAPH + {0xDEBD, 0x85FF}, //16384 #CJK UNIFIED IDEOGRAPH + {0xDEBE, 0x8627}, //16385 #CJK UNIFIED IDEOGRAPH + {0xDEBF, 0x8605}, //16386 #CJK UNIFIED IDEOGRAPH + {0xDEC0, 0x8629}, //16387 #CJK UNIFIED IDEOGRAPH + {0xDEC1, 0x8616}, //16388 #CJK UNIFIED IDEOGRAPH + {0xDEC2, 0x863C}, //16389 #CJK UNIFIED IDEOGRAPH + {0xDEC3, 0x5EFE}, //16390 #CJK UNIFIED IDEOGRAPH + {0xDEC4, 0x5F08}, //16391 #CJK UNIFIED IDEOGRAPH + {0xDEC5, 0x593C}, //16392 #CJK UNIFIED IDEOGRAPH + {0xDEC6, 0x5941}, //16393 #CJK UNIFIED IDEOGRAPH + {0xDEC7, 0x8037}, //16394 #CJK UNIFIED IDEOGRAPH + {0xDEC8, 0x5955}, //16395 #CJK UNIFIED IDEOGRAPH + {0xDEC9, 0x595A}, //16396 #CJK UNIFIED IDEOGRAPH + {0xDECA, 0x5958}, //16397 #CJK UNIFIED IDEOGRAPH + {0xDECB, 0x530F}, //16398 #CJK UNIFIED IDEOGRAPH + {0xDECC, 0x5C22}, //16399 #CJK UNIFIED IDEOGRAPH + {0xDECD, 0x5C25}, //16400 #CJK UNIFIED IDEOGRAPH + {0xDECE, 0x5C2C}, //16401 #CJK UNIFIED IDEOGRAPH + {0xDECF, 0x5C34}, //16402 #CJK UNIFIED IDEOGRAPH + {0xDED0, 0x624C}, //16403 #CJK UNIFIED IDEOGRAPH + {0xDED1, 0x626A}, //16404 #CJK UNIFIED IDEOGRAPH + {0xDED2, 0x629F}, //16405 #CJK UNIFIED IDEOGRAPH + {0xDED3, 0x62BB}, //16406 #CJK UNIFIED IDEOGRAPH + {0xDED4, 0x62CA}, //16407 #CJK UNIFIED IDEOGRAPH + {0xDED5, 0x62DA}, //16408 #CJK UNIFIED IDEOGRAPH + {0xDED6, 0x62D7}, //16409 #CJK UNIFIED IDEOGRAPH + {0xDED7, 0x62EE}, //16410 #CJK UNIFIED IDEOGRAPH + {0xDED8, 0x6322}, //16411 #CJK UNIFIED IDEOGRAPH + {0xDED9, 0x62F6}, //16412 #CJK UNIFIED IDEOGRAPH + {0xDEDA, 0x6339}, //16413 #CJK UNIFIED IDEOGRAPH + {0xDEDB, 0x634B}, //16414 #CJK UNIFIED IDEOGRAPH + {0xDEDC, 0x6343}, //16415 #CJK UNIFIED IDEOGRAPH + {0xDEDD, 0x63AD}, //16416 #CJK UNIFIED IDEOGRAPH + {0xDEDE, 0x63F6}, //16417 #CJK UNIFIED IDEOGRAPH + {0xDEDF, 0x6371}, //16418 #CJK UNIFIED IDEOGRAPH + {0xDEE0, 0x637A}, //16419 #CJK UNIFIED IDEOGRAPH + {0xDEE1, 0x638E}, //16420 #CJK UNIFIED IDEOGRAPH + {0xDEE2, 0x63B4}, //16421 #CJK UNIFIED IDEOGRAPH + {0xDEE3, 0x636D}, //16422 #CJK UNIFIED IDEOGRAPH + {0xDEE4, 0x63AC}, //16423 #CJK UNIFIED IDEOGRAPH + {0xDEE5, 0x638A}, //16424 #CJK UNIFIED IDEOGRAPH + {0xDEE6, 0x6369}, //16425 #CJK UNIFIED IDEOGRAPH + {0xDEE7, 0x63AE}, //16426 #CJK UNIFIED IDEOGRAPH + {0xDEE8, 0x63BC}, //16427 #CJK UNIFIED IDEOGRAPH + {0xDEE9, 0x63F2}, //16428 #CJK UNIFIED IDEOGRAPH + {0xDEEA, 0x63F8}, //16429 #CJK UNIFIED IDEOGRAPH + {0xDEEB, 0x63E0}, //16430 #CJK UNIFIED IDEOGRAPH + {0xDEEC, 0x63FF}, //16431 #CJK UNIFIED IDEOGRAPH + {0xDEED, 0x63C4}, //16432 #CJK UNIFIED IDEOGRAPH + {0xDEEE, 0x63DE}, //16433 #CJK UNIFIED IDEOGRAPH + {0xDEEF, 0x63CE}, //16434 #CJK UNIFIED IDEOGRAPH + {0xDEF0, 0x6452}, //16435 #CJK UNIFIED IDEOGRAPH + {0xDEF1, 0x63C6}, //16436 #CJK UNIFIED IDEOGRAPH + {0xDEF2, 0x63BE}, //16437 #CJK UNIFIED IDEOGRAPH + {0xDEF3, 0x6445}, //16438 #CJK UNIFIED IDEOGRAPH + {0xDEF4, 0x6441}, //16439 #CJK UNIFIED IDEOGRAPH + {0xDEF5, 0x640B}, //16440 #CJK UNIFIED IDEOGRAPH + {0xDEF6, 0x641B}, //16441 #CJK UNIFIED IDEOGRAPH + {0xDEF7, 0x6420}, //16442 #CJK UNIFIED IDEOGRAPH + {0xDEF8, 0x640C}, //16443 #CJK UNIFIED IDEOGRAPH + {0xDEF9, 0x6426}, //16444 #CJK UNIFIED IDEOGRAPH + {0xDEFA, 0x6421}, //16445 #CJK UNIFIED IDEOGRAPH + {0xDEFB, 0x645E}, //16446 #CJK UNIFIED IDEOGRAPH + {0xDEFC, 0x6484}, //16447 #CJK UNIFIED IDEOGRAPH + {0xDEFD, 0x646D}, //16448 #CJK UNIFIED IDEOGRAPH + {0xDEFE, 0x6496}, //16449 #CJK UNIFIED IDEOGRAPH + {0xDF40, 0x9019}, //16450 #CJK UNIFIED IDEOGRAPH + {0xDF41, 0x901C}, //16451 #CJK UNIFIED IDEOGRAPH + {0xDF42, 0x9023}, //16452 #CJK UNIFIED IDEOGRAPH + {0xDF43, 0x9024}, //16453 #CJK UNIFIED IDEOGRAPH + {0xDF44, 0x9025}, //16454 #CJK UNIFIED IDEOGRAPH + {0xDF45, 0x9027}, //16455 #CJK UNIFIED IDEOGRAPH + {0xDF46, 0x9028}, //16456 #CJK UNIFIED IDEOGRAPH + {0xDF47, 0x9029}, //16457 #CJK UNIFIED IDEOGRAPH + {0xDF48, 0x902A}, //16458 #CJK UNIFIED IDEOGRAPH + {0xDF49, 0x902B}, //16459 #CJK UNIFIED IDEOGRAPH + {0xDF4A, 0x902C}, //16460 #CJK UNIFIED IDEOGRAPH + {0xDF4B, 0x9030}, //16461 #CJK UNIFIED IDEOGRAPH + {0xDF4C, 0x9031}, //16462 #CJK UNIFIED IDEOGRAPH + {0xDF4D, 0x9032}, //16463 #CJK UNIFIED IDEOGRAPH + {0xDF4E, 0x9033}, //16464 #CJK UNIFIED IDEOGRAPH + {0xDF4F, 0x9034}, //16465 #CJK UNIFIED IDEOGRAPH + {0xDF50, 0x9037}, //16466 #CJK UNIFIED IDEOGRAPH + {0xDF51, 0x9039}, //16467 #CJK UNIFIED IDEOGRAPH + {0xDF52, 0x903A}, //16468 #CJK UNIFIED IDEOGRAPH + {0xDF53, 0x903D}, //16469 #CJK UNIFIED IDEOGRAPH + {0xDF54, 0x903F}, //16470 #CJK UNIFIED IDEOGRAPH + {0xDF55, 0x9040}, //16471 #CJK UNIFIED IDEOGRAPH + {0xDF56, 0x9043}, //16472 #CJK UNIFIED IDEOGRAPH + {0xDF57, 0x9045}, //16473 #CJK UNIFIED IDEOGRAPH + {0xDF58, 0x9046}, //16474 #CJK UNIFIED IDEOGRAPH + {0xDF59, 0x9048}, //16475 #CJK UNIFIED IDEOGRAPH + {0xDF5A, 0x9049}, //16476 #CJK UNIFIED IDEOGRAPH + {0xDF5B, 0x904A}, //16477 #CJK UNIFIED IDEOGRAPH + {0xDF5C, 0x904B}, //16478 #CJK UNIFIED IDEOGRAPH + {0xDF5D, 0x904C}, //16479 #CJK UNIFIED IDEOGRAPH + {0xDF5E, 0x904E}, //16480 #CJK UNIFIED IDEOGRAPH + {0xDF5F, 0x9054}, //16481 #CJK UNIFIED IDEOGRAPH + {0xDF60, 0x9055}, //16482 #CJK UNIFIED IDEOGRAPH + {0xDF61, 0x9056}, //16483 #CJK UNIFIED IDEOGRAPH + {0xDF62, 0x9059}, //16484 #CJK UNIFIED IDEOGRAPH + {0xDF63, 0x905A}, //16485 #CJK UNIFIED IDEOGRAPH + {0xDF64, 0x905C}, //16486 #CJK UNIFIED IDEOGRAPH + {0xDF65, 0x905D}, //16487 #CJK UNIFIED IDEOGRAPH + {0xDF66, 0x905E}, //16488 #CJK UNIFIED IDEOGRAPH + {0xDF67, 0x905F}, //16489 #CJK UNIFIED IDEOGRAPH + {0xDF68, 0x9060}, //16490 #CJK UNIFIED IDEOGRAPH + {0xDF69, 0x9061}, //16491 #CJK UNIFIED IDEOGRAPH + {0xDF6A, 0x9064}, //16492 #CJK UNIFIED IDEOGRAPH + {0xDF6B, 0x9066}, //16493 #CJK UNIFIED IDEOGRAPH + {0xDF6C, 0x9067}, //16494 #CJK UNIFIED IDEOGRAPH + {0xDF6D, 0x9069}, //16495 #CJK UNIFIED IDEOGRAPH + {0xDF6E, 0x906A}, //16496 #CJK UNIFIED IDEOGRAPH + {0xDF6F, 0x906B}, //16497 #CJK UNIFIED IDEOGRAPH + {0xDF70, 0x906C}, //16498 #CJK UNIFIED IDEOGRAPH + {0xDF71, 0x906F}, //16499 #CJK UNIFIED IDEOGRAPH + {0xDF72, 0x9070}, //16500 #CJK UNIFIED IDEOGRAPH + {0xDF73, 0x9071}, //16501 #CJK UNIFIED IDEOGRAPH + {0xDF74, 0x9072}, //16502 #CJK UNIFIED IDEOGRAPH + {0xDF75, 0x9073}, //16503 #CJK UNIFIED IDEOGRAPH + {0xDF76, 0x9076}, //16504 #CJK UNIFIED IDEOGRAPH + {0xDF77, 0x9077}, //16505 #CJK UNIFIED IDEOGRAPH + {0xDF78, 0x9078}, //16506 #CJK UNIFIED IDEOGRAPH + {0xDF79, 0x9079}, //16507 #CJK UNIFIED IDEOGRAPH + {0xDF7A, 0x907A}, //16508 #CJK UNIFIED IDEOGRAPH + {0xDF7B, 0x907B}, //16509 #CJK UNIFIED IDEOGRAPH + {0xDF7C, 0x907C}, //16510 #CJK UNIFIED IDEOGRAPH + {0xDF7D, 0x907E}, //16511 #CJK UNIFIED IDEOGRAPH + {0xDF7E, 0x9081}, //16512 #CJK UNIFIED IDEOGRAPH + {0xDF80, 0x9084}, //16513 #CJK UNIFIED IDEOGRAPH + {0xDF81, 0x9085}, //16514 #CJK UNIFIED IDEOGRAPH + {0xDF82, 0x9086}, //16515 #CJK UNIFIED IDEOGRAPH + {0xDF83, 0x9087}, //16516 #CJK UNIFIED IDEOGRAPH + {0xDF84, 0x9089}, //16517 #CJK UNIFIED IDEOGRAPH + {0xDF85, 0x908A}, //16518 #CJK UNIFIED IDEOGRAPH + {0xDF86, 0x908C}, //16519 #CJK UNIFIED IDEOGRAPH + {0xDF87, 0x908D}, //16520 #CJK UNIFIED IDEOGRAPH + {0xDF88, 0x908E}, //16521 #CJK UNIFIED IDEOGRAPH + {0xDF89, 0x908F}, //16522 #CJK UNIFIED IDEOGRAPH + {0xDF8A, 0x9090}, //16523 #CJK UNIFIED IDEOGRAPH + {0xDF8B, 0x9092}, //16524 #CJK UNIFIED IDEOGRAPH + {0xDF8C, 0x9094}, //16525 #CJK UNIFIED IDEOGRAPH + {0xDF8D, 0x9096}, //16526 #CJK UNIFIED IDEOGRAPH + {0xDF8E, 0x9098}, //16527 #CJK UNIFIED IDEOGRAPH + {0xDF8F, 0x909A}, //16528 #CJK UNIFIED IDEOGRAPH + {0xDF90, 0x909C}, //16529 #CJK UNIFIED IDEOGRAPH + {0xDF91, 0x909E}, //16530 #CJK UNIFIED IDEOGRAPH + {0xDF92, 0x909F}, //16531 #CJK UNIFIED IDEOGRAPH + {0xDF93, 0x90A0}, //16532 #CJK UNIFIED IDEOGRAPH + {0xDF94, 0x90A4}, //16533 #CJK UNIFIED IDEOGRAPH + {0xDF95, 0x90A5}, //16534 #CJK UNIFIED IDEOGRAPH + {0xDF96, 0x90A7}, //16535 #CJK UNIFIED IDEOGRAPH + {0xDF97, 0x90A8}, //16536 #CJK UNIFIED IDEOGRAPH + {0xDF98, 0x90A9}, //16537 #CJK UNIFIED IDEOGRAPH + {0xDF99, 0x90AB}, //16538 #CJK UNIFIED IDEOGRAPH + {0xDF9A, 0x90AD}, //16539 #CJK UNIFIED IDEOGRAPH + {0xDF9B, 0x90B2}, //16540 #CJK UNIFIED IDEOGRAPH + {0xDF9C, 0x90B7}, //16541 #CJK UNIFIED IDEOGRAPH + {0xDF9D, 0x90BC}, //16542 #CJK UNIFIED IDEOGRAPH + {0xDF9E, 0x90BD}, //16543 #CJK UNIFIED IDEOGRAPH + {0xDF9F, 0x90BF}, //16544 #CJK UNIFIED IDEOGRAPH + {0xDFA0, 0x90C0}, //16545 #CJK UNIFIED IDEOGRAPH + {0xDFA1, 0x647A}, //16546 #CJK UNIFIED IDEOGRAPH + {0xDFA2, 0x64B7}, //16547 #CJK UNIFIED IDEOGRAPH + {0xDFA3, 0x64B8}, //16548 #CJK UNIFIED IDEOGRAPH + {0xDFA4, 0x6499}, //16549 #CJK UNIFIED IDEOGRAPH + {0xDFA5, 0x64BA}, //16550 #CJK UNIFIED IDEOGRAPH + {0xDFA6, 0x64C0}, //16551 #CJK UNIFIED IDEOGRAPH + {0xDFA7, 0x64D0}, //16552 #CJK UNIFIED IDEOGRAPH + {0xDFA8, 0x64D7}, //16553 #CJK UNIFIED IDEOGRAPH + {0xDFA9, 0x64E4}, //16554 #CJK UNIFIED IDEOGRAPH + {0xDFAA, 0x64E2}, //16555 #CJK UNIFIED IDEOGRAPH + {0xDFAB, 0x6509}, //16556 #CJK UNIFIED IDEOGRAPH + {0xDFAC, 0x6525}, //16557 #CJK UNIFIED IDEOGRAPH + {0xDFAD, 0x652E}, //16558 #CJK UNIFIED IDEOGRAPH + {0xDFAE, 0x5F0B}, //16559 #CJK UNIFIED IDEOGRAPH + {0xDFAF, 0x5FD2}, //16560 #CJK UNIFIED IDEOGRAPH + {0xDFB0, 0x7519}, //16561 #CJK UNIFIED IDEOGRAPH + {0xDFB1, 0x5F11}, //16562 #CJK UNIFIED IDEOGRAPH + {0xDFB2, 0x535F}, //16563 #CJK UNIFIED IDEOGRAPH + {0xDFB3, 0x53F1}, //16564 #CJK UNIFIED IDEOGRAPH + {0xDFB4, 0x53FD}, //16565 #CJK UNIFIED IDEOGRAPH + {0xDFB5, 0x53E9}, //16566 #CJK UNIFIED IDEOGRAPH + {0xDFB6, 0x53E8}, //16567 #CJK UNIFIED IDEOGRAPH + {0xDFB7, 0x53FB}, //16568 #CJK UNIFIED IDEOGRAPH + {0xDFB8, 0x5412}, //16569 #CJK UNIFIED IDEOGRAPH + {0xDFB9, 0x5416}, //16570 #CJK UNIFIED IDEOGRAPH + {0xDFBA, 0x5406}, //16571 #CJK UNIFIED IDEOGRAPH + {0xDFBB, 0x544B}, //16572 #CJK UNIFIED IDEOGRAPH + {0xDFBC, 0x5452}, //16573 #CJK UNIFIED IDEOGRAPH + {0xDFBD, 0x5453}, //16574 #CJK UNIFIED IDEOGRAPH + {0xDFBE, 0x5454}, //16575 #CJK UNIFIED IDEOGRAPH + {0xDFBF, 0x5456}, //16576 #CJK UNIFIED IDEOGRAPH + {0xDFC0, 0x5443}, //16577 #CJK UNIFIED IDEOGRAPH + {0xDFC1, 0x5421}, //16578 #CJK UNIFIED IDEOGRAPH + {0xDFC2, 0x5457}, //16579 #CJK UNIFIED IDEOGRAPH + {0xDFC3, 0x5459}, //16580 #CJK UNIFIED IDEOGRAPH + {0xDFC4, 0x5423}, //16581 #CJK UNIFIED IDEOGRAPH + {0xDFC5, 0x5432}, //16582 #CJK UNIFIED IDEOGRAPH + {0xDFC6, 0x5482}, //16583 #CJK UNIFIED IDEOGRAPH + {0xDFC7, 0x5494}, //16584 #CJK UNIFIED IDEOGRAPH + {0xDFC8, 0x5477}, //16585 #CJK UNIFIED IDEOGRAPH + {0xDFC9, 0x5471}, //16586 #CJK UNIFIED IDEOGRAPH + {0xDFCA, 0x5464}, //16587 #CJK UNIFIED IDEOGRAPH + {0xDFCB, 0x549A}, //16588 #CJK UNIFIED IDEOGRAPH + {0xDFCC, 0x549B}, //16589 #CJK UNIFIED IDEOGRAPH + {0xDFCD, 0x5484}, //16590 #CJK UNIFIED IDEOGRAPH + {0xDFCE, 0x5476}, //16591 #CJK UNIFIED IDEOGRAPH + {0xDFCF, 0x5466}, //16592 #CJK UNIFIED IDEOGRAPH + {0xDFD0, 0x549D}, //16593 #CJK UNIFIED IDEOGRAPH + {0xDFD1, 0x54D0}, //16594 #CJK UNIFIED IDEOGRAPH + {0xDFD2, 0x54AD}, //16595 #CJK UNIFIED IDEOGRAPH + {0xDFD3, 0x54C2}, //16596 #CJK UNIFIED IDEOGRAPH + {0xDFD4, 0x54B4}, //16597 #CJK UNIFIED IDEOGRAPH + {0xDFD5, 0x54D2}, //16598 #CJK UNIFIED IDEOGRAPH + {0xDFD6, 0x54A7}, //16599 #CJK UNIFIED IDEOGRAPH + {0xDFD7, 0x54A6}, //16600 #CJK UNIFIED IDEOGRAPH + {0xDFD8, 0x54D3}, //16601 #CJK UNIFIED IDEOGRAPH + {0xDFD9, 0x54D4}, //16602 #CJK UNIFIED IDEOGRAPH + {0xDFDA, 0x5472}, //16603 #CJK UNIFIED IDEOGRAPH + {0xDFDB, 0x54A3}, //16604 #CJK UNIFIED IDEOGRAPH + {0xDFDC, 0x54D5}, //16605 #CJK UNIFIED IDEOGRAPH + {0xDFDD, 0x54BB}, //16606 #CJK UNIFIED IDEOGRAPH + {0xDFDE, 0x54BF}, //16607 #CJK UNIFIED IDEOGRAPH + {0xDFDF, 0x54CC}, //16608 #CJK UNIFIED IDEOGRAPH + {0xDFE0, 0x54D9}, //16609 #CJK UNIFIED IDEOGRAPH + {0xDFE1, 0x54DA}, //16610 #CJK UNIFIED IDEOGRAPH + {0xDFE2, 0x54DC}, //16611 #CJK UNIFIED IDEOGRAPH + {0xDFE3, 0x54A9}, //16612 #CJK UNIFIED IDEOGRAPH + {0xDFE4, 0x54AA}, //16613 #CJK UNIFIED IDEOGRAPH + {0xDFE5, 0x54A4}, //16614 #CJK UNIFIED IDEOGRAPH + {0xDFE6, 0x54DD}, //16615 #CJK UNIFIED IDEOGRAPH + {0xDFE7, 0x54CF}, //16616 #CJK UNIFIED IDEOGRAPH + {0xDFE8, 0x54DE}, //16617 #CJK UNIFIED IDEOGRAPH + {0xDFE9, 0x551B}, //16618 #CJK UNIFIED IDEOGRAPH + {0xDFEA, 0x54E7}, //16619 #CJK UNIFIED IDEOGRAPH + {0xDFEB, 0x5520}, //16620 #CJK UNIFIED IDEOGRAPH + {0xDFEC, 0x54FD}, //16621 #CJK UNIFIED IDEOGRAPH + {0xDFED, 0x5514}, //16622 #CJK UNIFIED IDEOGRAPH + {0xDFEE, 0x54F3}, //16623 #CJK UNIFIED IDEOGRAPH + {0xDFEF, 0x5522}, //16624 #CJK UNIFIED IDEOGRAPH + {0xDFF0, 0x5523}, //16625 #CJK UNIFIED IDEOGRAPH + {0xDFF1, 0x550F}, //16626 #CJK UNIFIED IDEOGRAPH + {0xDFF2, 0x5511}, //16627 #CJK UNIFIED IDEOGRAPH + {0xDFF3, 0x5527}, //16628 #CJK UNIFIED IDEOGRAPH + {0xDFF4, 0x552A}, //16629 #CJK UNIFIED IDEOGRAPH + {0xDFF5, 0x5567}, //16630 #CJK UNIFIED IDEOGRAPH + {0xDFF6, 0x558F}, //16631 #CJK UNIFIED IDEOGRAPH + {0xDFF7, 0x55B5}, //16632 #CJK UNIFIED IDEOGRAPH + {0xDFF8, 0x5549}, //16633 #CJK UNIFIED IDEOGRAPH + {0xDFF9, 0x556D}, //16634 #CJK UNIFIED IDEOGRAPH + {0xDFFA, 0x5541}, //16635 #CJK UNIFIED IDEOGRAPH + {0xDFFB, 0x5555}, //16636 #CJK UNIFIED IDEOGRAPH + {0xDFFC, 0x553F}, //16637 #CJK UNIFIED IDEOGRAPH + {0xDFFD, 0x5550}, //16638 #CJK UNIFIED IDEOGRAPH + {0xDFFE, 0x553C}, //16639 #CJK UNIFIED IDEOGRAPH + {0xE040, 0x90C2}, //16640 #CJK UNIFIED IDEOGRAPH + {0xE041, 0x90C3}, //16641 #CJK UNIFIED IDEOGRAPH + {0xE042, 0x90C6}, //16642 #CJK UNIFIED IDEOGRAPH + {0xE043, 0x90C8}, //16643 #CJK UNIFIED IDEOGRAPH + {0xE044, 0x90C9}, //16644 #CJK UNIFIED IDEOGRAPH + {0xE045, 0x90CB}, //16645 #CJK UNIFIED IDEOGRAPH + {0xE046, 0x90CC}, //16646 #CJK UNIFIED IDEOGRAPH + {0xE047, 0x90CD}, //16647 #CJK UNIFIED IDEOGRAPH + {0xE048, 0x90D2}, //16648 #CJK UNIFIED IDEOGRAPH + {0xE049, 0x90D4}, //16649 #CJK UNIFIED IDEOGRAPH + {0xE04A, 0x90D5}, //16650 #CJK UNIFIED IDEOGRAPH + {0xE04B, 0x90D6}, //16651 #CJK UNIFIED IDEOGRAPH + {0xE04C, 0x90D8}, //16652 #CJK UNIFIED IDEOGRAPH + {0xE04D, 0x90D9}, //16653 #CJK UNIFIED IDEOGRAPH + {0xE04E, 0x90DA}, //16654 #CJK UNIFIED IDEOGRAPH + {0xE04F, 0x90DE}, //16655 #CJK UNIFIED IDEOGRAPH + {0xE050, 0x90DF}, //16656 #CJK UNIFIED IDEOGRAPH + {0xE051, 0x90E0}, //16657 #CJK UNIFIED IDEOGRAPH + {0xE052, 0x90E3}, //16658 #CJK UNIFIED IDEOGRAPH + {0xE053, 0x90E4}, //16659 #CJK UNIFIED IDEOGRAPH + {0xE054, 0x90E5}, //16660 #CJK UNIFIED IDEOGRAPH + {0xE055, 0x90E9}, //16661 #CJK UNIFIED IDEOGRAPH + {0xE056, 0x90EA}, //16662 #CJK UNIFIED IDEOGRAPH + {0xE057, 0x90EC}, //16663 #CJK UNIFIED IDEOGRAPH + {0xE058, 0x90EE}, //16664 #CJK UNIFIED IDEOGRAPH + {0xE059, 0x90F0}, //16665 #CJK UNIFIED IDEOGRAPH + {0xE05A, 0x90F1}, //16666 #CJK UNIFIED IDEOGRAPH + {0xE05B, 0x90F2}, //16667 #CJK UNIFIED IDEOGRAPH + {0xE05C, 0x90F3}, //16668 #CJK UNIFIED IDEOGRAPH + {0xE05D, 0x90F5}, //16669 #CJK UNIFIED IDEOGRAPH + {0xE05E, 0x90F6}, //16670 #CJK UNIFIED IDEOGRAPH + {0xE05F, 0x90F7}, //16671 #CJK UNIFIED IDEOGRAPH + {0xE060, 0x90F9}, //16672 #CJK UNIFIED IDEOGRAPH + {0xE061, 0x90FA}, //16673 #CJK UNIFIED IDEOGRAPH + {0xE062, 0x90FB}, //16674 #CJK UNIFIED IDEOGRAPH + {0xE063, 0x90FC}, //16675 #CJK UNIFIED IDEOGRAPH + {0xE064, 0x90FF}, //16676 #CJK UNIFIED IDEOGRAPH + {0xE065, 0x9100}, //16677 #CJK UNIFIED IDEOGRAPH + {0xE066, 0x9101}, //16678 #CJK UNIFIED IDEOGRAPH + {0xE067, 0x9103}, //16679 #CJK UNIFIED IDEOGRAPH + {0xE068, 0x9105}, //16680 #CJK UNIFIED IDEOGRAPH + {0xE069, 0x9106}, //16681 #CJK UNIFIED IDEOGRAPH + {0xE06A, 0x9107}, //16682 #CJK UNIFIED IDEOGRAPH + {0xE06B, 0x9108}, //16683 #CJK UNIFIED IDEOGRAPH + {0xE06C, 0x9109}, //16684 #CJK UNIFIED IDEOGRAPH + {0xE06D, 0x910A}, //16685 #CJK UNIFIED IDEOGRAPH + {0xE06E, 0x910B}, //16686 #CJK UNIFIED IDEOGRAPH + {0xE06F, 0x910C}, //16687 #CJK UNIFIED IDEOGRAPH + {0xE070, 0x910D}, //16688 #CJK UNIFIED IDEOGRAPH + {0xE071, 0x910E}, //16689 #CJK UNIFIED IDEOGRAPH + {0xE072, 0x910F}, //16690 #CJK UNIFIED IDEOGRAPH + {0xE073, 0x9110}, //16691 #CJK UNIFIED IDEOGRAPH + {0xE074, 0x9111}, //16692 #CJK UNIFIED IDEOGRAPH + {0xE075, 0x9112}, //16693 #CJK UNIFIED IDEOGRAPH + {0xE076, 0x9113}, //16694 #CJK UNIFIED IDEOGRAPH + {0xE077, 0x9114}, //16695 #CJK UNIFIED IDEOGRAPH + {0xE078, 0x9115}, //16696 #CJK UNIFIED IDEOGRAPH + {0xE079, 0x9116}, //16697 #CJK UNIFIED IDEOGRAPH + {0xE07A, 0x9117}, //16698 #CJK UNIFIED IDEOGRAPH + {0xE07B, 0x9118}, //16699 #CJK UNIFIED IDEOGRAPH + {0xE07C, 0x911A}, //16700 #CJK UNIFIED IDEOGRAPH + {0xE07D, 0x911B}, //16701 #CJK UNIFIED IDEOGRAPH + {0xE07E, 0x911C}, //16702 #CJK UNIFIED IDEOGRAPH + {0xE080, 0x911D}, //16703 #CJK UNIFIED IDEOGRAPH + {0xE081, 0x911F}, //16704 #CJK UNIFIED IDEOGRAPH + {0xE082, 0x9120}, //16705 #CJK UNIFIED IDEOGRAPH + {0xE083, 0x9121}, //16706 #CJK UNIFIED IDEOGRAPH + {0xE084, 0x9124}, //16707 #CJK UNIFIED IDEOGRAPH + {0xE085, 0x9125}, //16708 #CJK UNIFIED IDEOGRAPH + {0xE086, 0x9126}, //16709 #CJK UNIFIED IDEOGRAPH + {0xE087, 0x9127}, //16710 #CJK UNIFIED IDEOGRAPH + {0xE088, 0x9128}, //16711 #CJK UNIFIED IDEOGRAPH + {0xE089, 0x9129}, //16712 #CJK UNIFIED IDEOGRAPH + {0xE08A, 0x912A}, //16713 #CJK UNIFIED IDEOGRAPH + {0xE08B, 0x912B}, //16714 #CJK UNIFIED IDEOGRAPH + {0xE08C, 0x912C}, //16715 #CJK UNIFIED IDEOGRAPH + {0xE08D, 0x912D}, //16716 #CJK UNIFIED IDEOGRAPH + {0xE08E, 0x912E}, //16717 #CJK UNIFIED IDEOGRAPH + {0xE08F, 0x9130}, //16718 #CJK UNIFIED IDEOGRAPH + {0xE090, 0x9132}, //16719 #CJK UNIFIED IDEOGRAPH + {0xE091, 0x9133}, //16720 #CJK UNIFIED IDEOGRAPH + {0xE092, 0x9134}, //16721 #CJK UNIFIED IDEOGRAPH + {0xE093, 0x9135}, //16722 #CJK UNIFIED IDEOGRAPH + {0xE094, 0x9136}, //16723 #CJK UNIFIED IDEOGRAPH + {0xE095, 0x9137}, //16724 #CJK UNIFIED IDEOGRAPH + {0xE096, 0x9138}, //16725 #CJK UNIFIED IDEOGRAPH + {0xE097, 0x913A}, //16726 #CJK UNIFIED IDEOGRAPH + {0xE098, 0x913B}, //16727 #CJK UNIFIED IDEOGRAPH + {0xE099, 0x913C}, //16728 #CJK UNIFIED IDEOGRAPH + {0xE09A, 0x913D}, //16729 #CJK UNIFIED IDEOGRAPH + {0xE09B, 0x913E}, //16730 #CJK UNIFIED IDEOGRAPH + {0xE09C, 0x913F}, //16731 #CJK UNIFIED IDEOGRAPH + {0xE09D, 0x9140}, //16732 #CJK UNIFIED IDEOGRAPH + {0xE09E, 0x9141}, //16733 #CJK UNIFIED IDEOGRAPH + {0xE09F, 0x9142}, //16734 #CJK UNIFIED IDEOGRAPH + {0xE0A0, 0x9144}, //16735 #CJK UNIFIED IDEOGRAPH + {0xE0A1, 0x5537}, //16736 #CJK UNIFIED IDEOGRAPH + {0xE0A2, 0x5556}, //16737 #CJK UNIFIED IDEOGRAPH + {0xE0A3, 0x5575}, //16738 #CJK UNIFIED IDEOGRAPH + {0xE0A4, 0x5576}, //16739 #CJK UNIFIED IDEOGRAPH + {0xE0A5, 0x5577}, //16740 #CJK UNIFIED IDEOGRAPH + {0xE0A6, 0x5533}, //16741 #CJK UNIFIED IDEOGRAPH + {0xE0A7, 0x5530}, //16742 #CJK UNIFIED IDEOGRAPH + {0xE0A8, 0x555C}, //16743 #CJK UNIFIED IDEOGRAPH + {0xE0A9, 0x558B}, //16744 #CJK UNIFIED IDEOGRAPH + {0xE0AA, 0x55D2}, //16745 #CJK UNIFIED IDEOGRAPH + {0xE0AB, 0x5583}, //16746 #CJK UNIFIED IDEOGRAPH + {0xE0AC, 0x55B1}, //16747 #CJK UNIFIED IDEOGRAPH + {0xE0AD, 0x55B9}, //16748 #CJK UNIFIED IDEOGRAPH + {0xE0AE, 0x5588}, //16749 #CJK UNIFIED IDEOGRAPH + {0xE0AF, 0x5581}, //16750 #CJK UNIFIED IDEOGRAPH + {0xE0B0, 0x559F}, //16751 #CJK UNIFIED IDEOGRAPH + {0xE0B1, 0x557E}, //16752 #CJK UNIFIED IDEOGRAPH + {0xE0B2, 0x55D6}, //16753 #CJK UNIFIED IDEOGRAPH + {0xE0B3, 0x5591}, //16754 #CJK UNIFIED IDEOGRAPH + {0xE0B4, 0x557B}, //16755 #CJK UNIFIED IDEOGRAPH + {0xE0B5, 0x55DF}, //16756 #CJK UNIFIED IDEOGRAPH + {0xE0B6, 0x55BD}, //16757 #CJK UNIFIED IDEOGRAPH + {0xE0B7, 0x55BE}, //16758 #CJK UNIFIED IDEOGRAPH + {0xE0B8, 0x5594}, //16759 #CJK UNIFIED IDEOGRAPH + {0xE0B9, 0x5599}, //16760 #CJK UNIFIED IDEOGRAPH + {0xE0BA, 0x55EA}, //16761 #CJK UNIFIED IDEOGRAPH + {0xE0BB, 0x55F7}, //16762 #CJK UNIFIED IDEOGRAPH + {0xE0BC, 0x55C9}, //16763 #CJK UNIFIED IDEOGRAPH + {0xE0BD, 0x561F}, //16764 #CJK UNIFIED IDEOGRAPH + {0xE0BE, 0x55D1}, //16765 #CJK UNIFIED IDEOGRAPH + {0xE0BF, 0x55EB}, //16766 #CJK UNIFIED IDEOGRAPH + {0xE0C0, 0x55EC}, //16767 #CJK UNIFIED IDEOGRAPH + {0xE0C1, 0x55D4}, //16768 #CJK UNIFIED IDEOGRAPH + {0xE0C2, 0x55E6}, //16769 #CJK UNIFIED IDEOGRAPH + {0xE0C3, 0x55DD}, //16770 #CJK UNIFIED IDEOGRAPH + {0xE0C4, 0x55C4}, //16771 #CJK UNIFIED IDEOGRAPH + {0xE0C5, 0x55EF}, //16772 #CJK UNIFIED IDEOGRAPH + {0xE0C6, 0x55E5}, //16773 #CJK UNIFIED IDEOGRAPH + {0xE0C7, 0x55F2}, //16774 #CJK UNIFIED IDEOGRAPH + {0xE0C8, 0x55F3}, //16775 #CJK UNIFIED IDEOGRAPH + {0xE0C9, 0x55CC}, //16776 #CJK UNIFIED IDEOGRAPH + {0xE0CA, 0x55CD}, //16777 #CJK UNIFIED IDEOGRAPH + {0xE0CB, 0x55E8}, //16778 #CJK UNIFIED IDEOGRAPH + {0xE0CC, 0x55F5}, //16779 #CJK UNIFIED IDEOGRAPH + {0xE0CD, 0x55E4}, //16780 #CJK UNIFIED IDEOGRAPH + {0xE0CE, 0x8F94}, //16781 #CJK UNIFIED IDEOGRAPH + {0xE0CF, 0x561E}, //16782 #CJK UNIFIED IDEOGRAPH + {0xE0D0, 0x5608}, //16783 #CJK UNIFIED IDEOGRAPH + {0xE0D1, 0x560C}, //16784 #CJK UNIFIED IDEOGRAPH + {0xE0D2, 0x5601}, //16785 #CJK UNIFIED IDEOGRAPH + {0xE0D3, 0x5624}, //16786 #CJK UNIFIED IDEOGRAPH + {0xE0D4, 0x5623}, //16787 #CJK UNIFIED IDEOGRAPH + {0xE0D5, 0x55FE}, //16788 #CJK UNIFIED IDEOGRAPH + {0xE0D6, 0x5600}, //16789 #CJK UNIFIED IDEOGRAPH + {0xE0D7, 0x5627}, //16790 #CJK UNIFIED IDEOGRAPH + {0xE0D8, 0x562D}, //16791 #CJK UNIFIED IDEOGRAPH + {0xE0D9, 0x5658}, //16792 #CJK UNIFIED IDEOGRAPH + {0xE0DA, 0x5639}, //16793 #CJK UNIFIED IDEOGRAPH + {0xE0DB, 0x5657}, //16794 #CJK UNIFIED IDEOGRAPH + {0xE0DC, 0x562C}, //16795 #CJK UNIFIED IDEOGRAPH + {0xE0DD, 0x564D}, //16796 #CJK UNIFIED IDEOGRAPH + {0xE0DE, 0x5662}, //16797 #CJK UNIFIED IDEOGRAPH + {0xE0DF, 0x5659}, //16798 #CJK UNIFIED IDEOGRAPH + {0xE0E0, 0x565C}, //16799 #CJK UNIFIED IDEOGRAPH + {0xE0E1, 0x564C}, //16800 #CJK UNIFIED IDEOGRAPH + {0xE0E2, 0x5654}, //16801 #CJK UNIFIED IDEOGRAPH + {0xE0E3, 0x5686}, //16802 #CJK UNIFIED IDEOGRAPH + {0xE0E4, 0x5664}, //16803 #CJK UNIFIED IDEOGRAPH + {0xE0E5, 0x5671}, //16804 #CJK UNIFIED IDEOGRAPH + {0xE0E6, 0x566B}, //16805 #CJK UNIFIED IDEOGRAPH + {0xE0E7, 0x567B}, //16806 #CJK UNIFIED IDEOGRAPH + {0xE0E8, 0x567C}, //16807 #CJK UNIFIED IDEOGRAPH + {0xE0E9, 0x5685}, //16808 #CJK UNIFIED IDEOGRAPH + {0xE0EA, 0x5693}, //16809 #CJK UNIFIED IDEOGRAPH + {0xE0EB, 0x56AF}, //16810 #CJK UNIFIED IDEOGRAPH + {0xE0EC, 0x56D4}, //16811 #CJK UNIFIED IDEOGRAPH + {0xE0ED, 0x56D7}, //16812 #CJK UNIFIED IDEOGRAPH + {0xE0EE, 0x56DD}, //16813 #CJK UNIFIED IDEOGRAPH + {0xE0EF, 0x56E1}, //16814 #CJK UNIFIED IDEOGRAPH + {0xE0F0, 0x56F5}, //16815 #CJK UNIFIED IDEOGRAPH + {0xE0F1, 0x56EB}, //16816 #CJK UNIFIED IDEOGRAPH + {0xE0F2, 0x56F9}, //16817 #CJK UNIFIED IDEOGRAPH + {0xE0F3, 0x56FF}, //16818 #CJK UNIFIED IDEOGRAPH + {0xE0F4, 0x5704}, //16819 #CJK UNIFIED IDEOGRAPH + {0xE0F5, 0x570A}, //16820 #CJK UNIFIED IDEOGRAPH + {0xE0F6, 0x5709}, //16821 #CJK UNIFIED IDEOGRAPH + {0xE0F7, 0x571C}, //16822 #CJK UNIFIED IDEOGRAPH + {0xE0F8, 0x5E0F}, //16823 #CJK UNIFIED IDEOGRAPH + {0xE0F9, 0x5E19}, //16824 #CJK UNIFIED IDEOGRAPH + {0xE0FA, 0x5E14}, //16825 #CJK UNIFIED IDEOGRAPH + {0xE0FB, 0x5E11}, //16826 #CJK UNIFIED IDEOGRAPH + {0xE0FC, 0x5E31}, //16827 #CJK UNIFIED IDEOGRAPH + {0xE0FD, 0x5E3B}, //16828 #CJK UNIFIED IDEOGRAPH + {0xE0FE, 0x5E3C}, //16829 #CJK UNIFIED IDEOGRAPH + {0xE140, 0x9145}, //16830 #CJK UNIFIED IDEOGRAPH + {0xE141, 0x9147}, //16831 #CJK UNIFIED IDEOGRAPH + {0xE142, 0x9148}, //16832 #CJK UNIFIED IDEOGRAPH + {0xE143, 0x9151}, //16833 #CJK UNIFIED IDEOGRAPH + {0xE144, 0x9153}, //16834 #CJK UNIFIED IDEOGRAPH + {0xE145, 0x9154}, //16835 #CJK UNIFIED IDEOGRAPH + {0xE146, 0x9155}, //16836 #CJK UNIFIED IDEOGRAPH + {0xE147, 0x9156}, //16837 #CJK UNIFIED IDEOGRAPH + {0xE148, 0x9158}, //16838 #CJK UNIFIED IDEOGRAPH + {0xE149, 0x9159}, //16839 #CJK UNIFIED IDEOGRAPH + {0xE14A, 0x915B}, //16840 #CJK UNIFIED IDEOGRAPH + {0xE14B, 0x915C}, //16841 #CJK UNIFIED IDEOGRAPH + {0xE14C, 0x915F}, //16842 #CJK UNIFIED IDEOGRAPH + {0xE14D, 0x9160}, //16843 #CJK UNIFIED IDEOGRAPH + {0xE14E, 0x9166}, //16844 #CJK UNIFIED IDEOGRAPH + {0xE14F, 0x9167}, //16845 #CJK UNIFIED IDEOGRAPH + {0xE150, 0x9168}, //16846 #CJK UNIFIED IDEOGRAPH + {0xE151, 0x916B}, //16847 #CJK UNIFIED IDEOGRAPH + {0xE152, 0x916D}, //16848 #CJK UNIFIED IDEOGRAPH + {0xE153, 0x9173}, //16849 #CJK UNIFIED IDEOGRAPH + {0xE154, 0x917A}, //16850 #CJK UNIFIED IDEOGRAPH + {0xE155, 0x917B}, //16851 #CJK UNIFIED IDEOGRAPH + {0xE156, 0x917C}, //16852 #CJK UNIFIED IDEOGRAPH + {0xE157, 0x9180}, //16853 #CJK UNIFIED IDEOGRAPH + {0xE158, 0x9181}, //16854 #CJK UNIFIED IDEOGRAPH + {0xE159, 0x9182}, //16855 #CJK UNIFIED IDEOGRAPH + {0xE15A, 0x9183}, //16856 #CJK UNIFIED IDEOGRAPH + {0xE15B, 0x9184}, //16857 #CJK UNIFIED IDEOGRAPH + {0xE15C, 0x9186}, //16858 #CJK UNIFIED IDEOGRAPH + {0xE15D, 0x9188}, //16859 #CJK UNIFIED IDEOGRAPH + {0xE15E, 0x918A}, //16860 #CJK UNIFIED IDEOGRAPH + {0xE15F, 0x918E}, //16861 #CJK UNIFIED IDEOGRAPH + {0xE160, 0x918F}, //16862 #CJK UNIFIED IDEOGRAPH + {0xE161, 0x9193}, //16863 #CJK UNIFIED IDEOGRAPH + {0xE162, 0x9194}, //16864 #CJK UNIFIED IDEOGRAPH + {0xE163, 0x9195}, //16865 #CJK UNIFIED IDEOGRAPH + {0xE164, 0x9196}, //16866 #CJK UNIFIED IDEOGRAPH + {0xE165, 0x9197}, //16867 #CJK UNIFIED IDEOGRAPH + {0xE166, 0x9198}, //16868 #CJK UNIFIED IDEOGRAPH + {0xE167, 0x9199}, //16869 #CJK UNIFIED IDEOGRAPH + {0xE168, 0x919C}, //16870 #CJK UNIFIED IDEOGRAPH + {0xE169, 0x919D}, //16871 #CJK UNIFIED IDEOGRAPH + {0xE16A, 0x919E}, //16872 #CJK UNIFIED IDEOGRAPH + {0xE16B, 0x919F}, //16873 #CJK UNIFIED IDEOGRAPH + {0xE16C, 0x91A0}, //16874 #CJK UNIFIED IDEOGRAPH + {0xE16D, 0x91A1}, //16875 #CJK UNIFIED IDEOGRAPH + {0xE16E, 0x91A4}, //16876 #CJK UNIFIED IDEOGRAPH + {0xE16F, 0x91A5}, //16877 #CJK UNIFIED IDEOGRAPH + {0xE170, 0x91A6}, //16878 #CJK UNIFIED IDEOGRAPH + {0xE171, 0x91A7}, //16879 #CJK UNIFIED IDEOGRAPH + {0xE172, 0x91A8}, //16880 #CJK UNIFIED IDEOGRAPH + {0xE173, 0x91A9}, //16881 #CJK UNIFIED IDEOGRAPH + {0xE174, 0x91AB}, //16882 #CJK UNIFIED IDEOGRAPH + {0xE175, 0x91AC}, //16883 #CJK UNIFIED IDEOGRAPH + {0xE176, 0x91B0}, //16884 #CJK UNIFIED IDEOGRAPH + {0xE177, 0x91B1}, //16885 #CJK UNIFIED IDEOGRAPH + {0xE178, 0x91B2}, //16886 #CJK UNIFIED IDEOGRAPH + {0xE179, 0x91B3}, //16887 #CJK UNIFIED IDEOGRAPH + {0xE17A, 0x91B6}, //16888 #CJK UNIFIED IDEOGRAPH + {0xE17B, 0x91B7}, //16889 #CJK UNIFIED IDEOGRAPH + {0xE17C, 0x91B8}, //16890 #CJK UNIFIED IDEOGRAPH + {0xE17D, 0x91B9}, //16891 #CJK UNIFIED IDEOGRAPH + {0xE17E, 0x91BB}, //16892 #CJK UNIFIED IDEOGRAPH + {0xE180, 0x91BC}, //16893 #CJK UNIFIED IDEOGRAPH + {0xE181, 0x91BD}, //16894 #CJK UNIFIED IDEOGRAPH + {0xE182, 0x91BE}, //16895 #CJK UNIFIED IDEOGRAPH + {0xE183, 0x91BF}, //16896 #CJK UNIFIED IDEOGRAPH + {0xE184, 0x91C0}, //16897 #CJK UNIFIED IDEOGRAPH + {0xE185, 0x91C1}, //16898 #CJK UNIFIED IDEOGRAPH + {0xE186, 0x91C2}, //16899 #CJK UNIFIED IDEOGRAPH + {0xE187, 0x91C3}, //16900 #CJK UNIFIED IDEOGRAPH + {0xE188, 0x91C4}, //16901 #CJK UNIFIED IDEOGRAPH + {0xE189, 0x91C5}, //16902 #CJK UNIFIED IDEOGRAPH + {0xE18A, 0x91C6}, //16903 #CJK UNIFIED IDEOGRAPH + {0xE18B, 0x91C8}, //16904 #CJK UNIFIED IDEOGRAPH + {0xE18C, 0x91CB}, //16905 #CJK UNIFIED IDEOGRAPH + {0xE18D, 0x91D0}, //16906 #CJK UNIFIED IDEOGRAPH + {0xE18E, 0x91D2}, //16907 #CJK UNIFIED IDEOGRAPH + {0xE18F, 0x91D3}, //16908 #CJK UNIFIED IDEOGRAPH + {0xE190, 0x91D4}, //16909 #CJK UNIFIED IDEOGRAPH + {0xE191, 0x91D5}, //16910 #CJK UNIFIED IDEOGRAPH + {0xE192, 0x91D6}, //16911 #CJK UNIFIED IDEOGRAPH + {0xE193, 0x91D7}, //16912 #CJK UNIFIED IDEOGRAPH + {0xE194, 0x91D8}, //16913 #CJK UNIFIED IDEOGRAPH + {0xE195, 0x91D9}, //16914 #CJK UNIFIED IDEOGRAPH + {0xE196, 0x91DA}, //16915 #CJK UNIFIED IDEOGRAPH + {0xE197, 0x91DB}, //16916 #CJK UNIFIED IDEOGRAPH + {0xE198, 0x91DD}, //16917 #CJK UNIFIED IDEOGRAPH + {0xE199, 0x91DE}, //16918 #CJK UNIFIED IDEOGRAPH + {0xE19A, 0x91DF}, //16919 #CJK UNIFIED IDEOGRAPH + {0xE19B, 0x91E0}, //16920 #CJK UNIFIED IDEOGRAPH + {0xE19C, 0x91E1}, //16921 #CJK UNIFIED IDEOGRAPH + {0xE19D, 0x91E2}, //16922 #CJK UNIFIED IDEOGRAPH + {0xE19E, 0x91E3}, //16923 #CJK UNIFIED IDEOGRAPH + {0xE19F, 0x91E4}, //16924 #CJK UNIFIED IDEOGRAPH + {0xE1A0, 0x91E5}, //16925 #CJK UNIFIED IDEOGRAPH + {0xE1A1, 0x5E37}, //16926 #CJK UNIFIED IDEOGRAPH + {0xE1A2, 0x5E44}, //16927 #CJK UNIFIED IDEOGRAPH + {0xE1A3, 0x5E54}, //16928 #CJK UNIFIED IDEOGRAPH + {0xE1A4, 0x5E5B}, //16929 #CJK UNIFIED IDEOGRAPH + {0xE1A5, 0x5E5E}, //16930 #CJK UNIFIED IDEOGRAPH + {0xE1A6, 0x5E61}, //16931 #CJK UNIFIED IDEOGRAPH + {0xE1A7, 0x5C8C}, //16932 #CJK UNIFIED IDEOGRAPH + {0xE1A8, 0x5C7A}, //16933 #CJK UNIFIED IDEOGRAPH + {0xE1A9, 0x5C8D}, //16934 #CJK UNIFIED IDEOGRAPH + {0xE1AA, 0x5C90}, //16935 #CJK UNIFIED IDEOGRAPH + {0xE1AB, 0x5C96}, //16936 #CJK UNIFIED IDEOGRAPH + {0xE1AC, 0x5C88}, //16937 #CJK UNIFIED IDEOGRAPH + {0xE1AD, 0x5C98}, //16938 #CJK UNIFIED IDEOGRAPH + {0xE1AE, 0x5C99}, //16939 #CJK UNIFIED IDEOGRAPH + {0xE1AF, 0x5C91}, //16940 #CJK UNIFIED IDEOGRAPH + {0xE1B0, 0x5C9A}, //16941 #CJK UNIFIED IDEOGRAPH + {0xE1B1, 0x5C9C}, //16942 #CJK UNIFIED IDEOGRAPH + {0xE1B2, 0x5CB5}, //16943 #CJK UNIFIED IDEOGRAPH + {0xE1B3, 0x5CA2}, //16944 #CJK UNIFIED IDEOGRAPH + {0xE1B4, 0x5CBD}, //16945 #CJK UNIFIED IDEOGRAPH + {0xE1B5, 0x5CAC}, //16946 #CJK UNIFIED IDEOGRAPH + {0xE1B6, 0x5CAB}, //16947 #CJK UNIFIED IDEOGRAPH + {0xE1B7, 0x5CB1}, //16948 #CJK UNIFIED IDEOGRAPH + {0xE1B8, 0x5CA3}, //16949 #CJK UNIFIED IDEOGRAPH + {0xE1B9, 0x5CC1}, //16950 #CJK UNIFIED IDEOGRAPH + {0xE1BA, 0x5CB7}, //16951 #CJK UNIFIED IDEOGRAPH + {0xE1BB, 0x5CC4}, //16952 #CJK UNIFIED IDEOGRAPH + {0xE1BC, 0x5CD2}, //16953 #CJK UNIFIED IDEOGRAPH + {0xE1BD, 0x5CE4}, //16954 #CJK UNIFIED IDEOGRAPH + {0xE1BE, 0x5CCB}, //16955 #CJK UNIFIED IDEOGRAPH + {0xE1BF, 0x5CE5}, //16956 #CJK UNIFIED IDEOGRAPH + {0xE1C0, 0x5D02}, //16957 #CJK UNIFIED IDEOGRAPH + {0xE1C1, 0x5D03}, //16958 #CJK UNIFIED IDEOGRAPH + {0xE1C2, 0x5D27}, //16959 #CJK UNIFIED IDEOGRAPH + {0xE1C3, 0x5D26}, //16960 #CJK UNIFIED IDEOGRAPH + {0xE1C4, 0x5D2E}, //16961 #CJK UNIFIED IDEOGRAPH + {0xE1C5, 0x5D24}, //16962 #CJK UNIFIED IDEOGRAPH + {0xE1C6, 0x5D1E}, //16963 #CJK UNIFIED IDEOGRAPH + {0xE1C7, 0x5D06}, //16964 #CJK UNIFIED IDEOGRAPH + {0xE1C8, 0x5D1B}, //16965 #CJK UNIFIED IDEOGRAPH + {0xE1C9, 0x5D58}, //16966 #CJK UNIFIED IDEOGRAPH + {0xE1CA, 0x5D3E}, //16967 #CJK UNIFIED IDEOGRAPH + {0xE1CB, 0x5D34}, //16968 #CJK UNIFIED IDEOGRAPH + {0xE1CC, 0x5D3D}, //16969 #CJK UNIFIED IDEOGRAPH + {0xE1CD, 0x5D6C}, //16970 #CJK UNIFIED IDEOGRAPH + {0xE1CE, 0x5D5B}, //16971 #CJK UNIFIED IDEOGRAPH + {0xE1CF, 0x5D6F}, //16972 #CJK UNIFIED IDEOGRAPH + {0xE1D0, 0x5D5D}, //16973 #CJK UNIFIED IDEOGRAPH + {0xE1D1, 0x5D6B}, //16974 #CJK UNIFIED IDEOGRAPH + {0xE1D2, 0x5D4B}, //16975 #CJK UNIFIED IDEOGRAPH + {0xE1D3, 0x5D4A}, //16976 #CJK UNIFIED IDEOGRAPH + {0xE1D4, 0x5D69}, //16977 #CJK UNIFIED IDEOGRAPH + {0xE1D5, 0x5D74}, //16978 #CJK UNIFIED IDEOGRAPH + {0xE1D6, 0x5D82}, //16979 #CJK UNIFIED IDEOGRAPH + {0xE1D7, 0x5D99}, //16980 #CJK UNIFIED IDEOGRAPH + {0xE1D8, 0x5D9D}, //16981 #CJK UNIFIED IDEOGRAPH + {0xE1D9, 0x8C73}, //16982 #CJK UNIFIED IDEOGRAPH + {0xE1DA, 0x5DB7}, //16983 #CJK UNIFIED IDEOGRAPH + {0xE1DB, 0x5DC5}, //16984 #CJK UNIFIED IDEOGRAPH + {0xE1DC, 0x5F73}, //16985 #CJK UNIFIED IDEOGRAPH + {0xE1DD, 0x5F77}, //16986 #CJK UNIFIED IDEOGRAPH + {0xE1DE, 0x5F82}, //16987 #CJK UNIFIED IDEOGRAPH + {0xE1DF, 0x5F87}, //16988 #CJK UNIFIED IDEOGRAPH + {0xE1E0, 0x5F89}, //16989 #CJK UNIFIED IDEOGRAPH + {0xE1E1, 0x5F8C}, //16990 #CJK UNIFIED IDEOGRAPH + {0xE1E2, 0x5F95}, //16991 #CJK UNIFIED IDEOGRAPH + {0xE1E3, 0x5F99}, //16992 #CJK UNIFIED IDEOGRAPH + {0xE1E4, 0x5F9C}, //16993 #CJK UNIFIED IDEOGRAPH + {0xE1E5, 0x5FA8}, //16994 #CJK UNIFIED IDEOGRAPH + {0xE1E6, 0x5FAD}, //16995 #CJK UNIFIED IDEOGRAPH + {0xE1E7, 0x5FB5}, //16996 #CJK UNIFIED IDEOGRAPH + {0xE1E8, 0x5FBC}, //16997 #CJK UNIFIED IDEOGRAPH + {0xE1E9, 0x8862}, //16998 #CJK UNIFIED IDEOGRAPH + {0xE1EA, 0x5F61}, //16999 #CJK UNIFIED IDEOGRAPH + {0xE1EB, 0x72AD}, //17000 #CJK UNIFIED IDEOGRAPH + {0xE1EC, 0x72B0}, //17001 #CJK UNIFIED IDEOGRAPH + {0xE1ED, 0x72B4}, //17002 #CJK UNIFIED IDEOGRAPH + {0xE1EE, 0x72B7}, //17003 #CJK UNIFIED IDEOGRAPH + {0xE1EF, 0x72B8}, //17004 #CJK UNIFIED IDEOGRAPH + {0xE1F0, 0x72C3}, //17005 #CJK UNIFIED IDEOGRAPH + {0xE1F1, 0x72C1}, //17006 #CJK UNIFIED IDEOGRAPH + {0xE1F2, 0x72CE}, //17007 #CJK UNIFIED IDEOGRAPH + {0xE1F3, 0x72CD}, //17008 #CJK UNIFIED IDEOGRAPH + {0xE1F4, 0x72D2}, //17009 #CJK UNIFIED IDEOGRAPH + {0xE1F5, 0x72E8}, //17010 #CJK UNIFIED IDEOGRAPH + {0xE1F6, 0x72EF}, //17011 #CJK UNIFIED IDEOGRAPH + {0xE1F7, 0x72E9}, //17012 #CJK UNIFIED IDEOGRAPH + {0xE1F8, 0x72F2}, //17013 #CJK UNIFIED IDEOGRAPH + {0xE1F9, 0x72F4}, //17014 #CJK UNIFIED IDEOGRAPH + {0xE1FA, 0x72F7}, //17015 #CJK UNIFIED IDEOGRAPH + {0xE1FB, 0x7301}, //17016 #CJK UNIFIED IDEOGRAPH + {0xE1FC, 0x72F3}, //17017 #CJK UNIFIED IDEOGRAPH + {0xE1FD, 0x7303}, //17018 #CJK UNIFIED IDEOGRAPH + {0xE1FE, 0x72FA}, //17019 #CJK UNIFIED IDEOGRAPH + {0xE240, 0x91E6}, //17020 #CJK UNIFIED IDEOGRAPH + {0xE241, 0x91E7}, //17021 #CJK UNIFIED IDEOGRAPH + {0xE242, 0x91E8}, //17022 #CJK UNIFIED IDEOGRAPH + {0xE243, 0x91E9}, //17023 #CJK UNIFIED IDEOGRAPH + {0xE244, 0x91EA}, //17024 #CJK UNIFIED IDEOGRAPH + {0xE245, 0x91EB}, //17025 #CJK UNIFIED IDEOGRAPH + {0xE246, 0x91EC}, //17026 #CJK UNIFIED IDEOGRAPH + {0xE247, 0x91ED}, //17027 #CJK UNIFIED IDEOGRAPH + {0xE248, 0x91EE}, //17028 #CJK UNIFIED IDEOGRAPH + {0xE249, 0x91EF}, //17029 #CJK UNIFIED IDEOGRAPH + {0xE24A, 0x91F0}, //17030 #CJK UNIFIED IDEOGRAPH + {0xE24B, 0x91F1}, //17031 #CJK UNIFIED IDEOGRAPH + {0xE24C, 0x91F2}, //17032 #CJK UNIFIED IDEOGRAPH + {0xE24D, 0x91F3}, //17033 #CJK UNIFIED IDEOGRAPH + {0xE24E, 0x91F4}, //17034 #CJK UNIFIED IDEOGRAPH + {0xE24F, 0x91F5}, //17035 #CJK UNIFIED IDEOGRAPH + {0xE250, 0x91F6}, //17036 #CJK UNIFIED IDEOGRAPH + {0xE251, 0x91F7}, //17037 #CJK UNIFIED IDEOGRAPH + {0xE252, 0x91F8}, //17038 #CJK UNIFIED IDEOGRAPH + {0xE253, 0x91F9}, //17039 #CJK UNIFIED IDEOGRAPH + {0xE254, 0x91FA}, //17040 #CJK UNIFIED IDEOGRAPH + {0xE255, 0x91FB}, //17041 #CJK UNIFIED IDEOGRAPH + {0xE256, 0x91FC}, //17042 #CJK UNIFIED IDEOGRAPH + {0xE257, 0x91FD}, //17043 #CJK UNIFIED IDEOGRAPH + {0xE258, 0x91FE}, //17044 #CJK UNIFIED IDEOGRAPH + {0xE259, 0x91FF}, //17045 #CJK UNIFIED IDEOGRAPH + {0xE25A, 0x9200}, //17046 #CJK UNIFIED IDEOGRAPH + {0xE25B, 0x9201}, //17047 #CJK UNIFIED IDEOGRAPH + {0xE25C, 0x9202}, //17048 #CJK UNIFIED IDEOGRAPH + {0xE25D, 0x9203}, //17049 #CJK UNIFIED IDEOGRAPH + {0xE25E, 0x9204}, //17050 #CJK UNIFIED IDEOGRAPH + {0xE25F, 0x9205}, //17051 #CJK UNIFIED IDEOGRAPH + {0xE260, 0x9206}, //17052 #CJK UNIFIED IDEOGRAPH + {0xE261, 0x9207}, //17053 #CJK UNIFIED IDEOGRAPH + {0xE262, 0x9208}, //17054 #CJK UNIFIED IDEOGRAPH + {0xE263, 0x9209}, //17055 #CJK UNIFIED IDEOGRAPH + {0xE264, 0x920A}, //17056 #CJK UNIFIED IDEOGRAPH + {0xE265, 0x920B}, //17057 #CJK UNIFIED IDEOGRAPH + {0xE266, 0x920C}, //17058 #CJK UNIFIED IDEOGRAPH + {0xE267, 0x920D}, //17059 #CJK UNIFIED IDEOGRAPH + {0xE268, 0x920E}, //17060 #CJK UNIFIED IDEOGRAPH + {0xE269, 0x920F}, //17061 #CJK UNIFIED IDEOGRAPH + {0xE26A, 0x9210}, //17062 #CJK UNIFIED IDEOGRAPH + {0xE26B, 0x9211}, //17063 #CJK UNIFIED IDEOGRAPH + {0xE26C, 0x9212}, //17064 #CJK UNIFIED IDEOGRAPH + {0xE26D, 0x9213}, //17065 #CJK UNIFIED IDEOGRAPH + {0xE26E, 0x9214}, //17066 #CJK UNIFIED IDEOGRAPH + {0xE26F, 0x9215}, //17067 #CJK UNIFIED IDEOGRAPH + {0xE270, 0x9216}, //17068 #CJK UNIFIED IDEOGRAPH + {0xE271, 0x9217}, //17069 #CJK UNIFIED IDEOGRAPH + {0xE272, 0x9218}, //17070 #CJK UNIFIED IDEOGRAPH + {0xE273, 0x9219}, //17071 #CJK UNIFIED IDEOGRAPH + {0xE274, 0x921A}, //17072 #CJK UNIFIED IDEOGRAPH + {0xE275, 0x921B}, //17073 #CJK UNIFIED IDEOGRAPH + {0xE276, 0x921C}, //17074 #CJK UNIFIED IDEOGRAPH + {0xE277, 0x921D}, //17075 #CJK UNIFIED IDEOGRAPH + {0xE278, 0x921E}, //17076 #CJK UNIFIED IDEOGRAPH + {0xE279, 0x921F}, //17077 #CJK UNIFIED IDEOGRAPH + {0xE27A, 0x9220}, //17078 #CJK UNIFIED IDEOGRAPH + {0xE27B, 0x9221}, //17079 #CJK UNIFIED IDEOGRAPH + {0xE27C, 0x9222}, //17080 #CJK UNIFIED IDEOGRAPH + {0xE27D, 0x9223}, //17081 #CJK UNIFIED IDEOGRAPH + {0xE27E, 0x9224}, //17082 #CJK UNIFIED IDEOGRAPH + {0xE280, 0x9225}, //17083 #CJK UNIFIED IDEOGRAPH + {0xE281, 0x9226}, //17084 #CJK UNIFIED IDEOGRAPH + {0xE282, 0x9227}, //17085 #CJK UNIFIED IDEOGRAPH + {0xE283, 0x9228}, //17086 #CJK UNIFIED IDEOGRAPH + {0xE284, 0x9229}, //17087 #CJK UNIFIED IDEOGRAPH + {0xE285, 0x922A}, //17088 #CJK UNIFIED IDEOGRAPH + {0xE286, 0x922B}, //17089 #CJK UNIFIED IDEOGRAPH + {0xE287, 0x922C}, //17090 #CJK UNIFIED IDEOGRAPH + {0xE288, 0x922D}, //17091 #CJK UNIFIED IDEOGRAPH + {0xE289, 0x922E}, //17092 #CJK UNIFIED IDEOGRAPH + {0xE28A, 0x922F}, //17093 #CJK UNIFIED IDEOGRAPH + {0xE28B, 0x9230}, //17094 #CJK UNIFIED IDEOGRAPH + {0xE28C, 0x9231}, //17095 #CJK UNIFIED IDEOGRAPH + {0xE28D, 0x9232}, //17096 #CJK UNIFIED IDEOGRAPH + {0xE28E, 0x9233}, //17097 #CJK UNIFIED IDEOGRAPH + {0xE28F, 0x9234}, //17098 #CJK UNIFIED IDEOGRAPH + {0xE290, 0x9235}, //17099 #CJK UNIFIED IDEOGRAPH + {0xE291, 0x9236}, //17100 #CJK UNIFIED IDEOGRAPH + {0xE292, 0x9237}, //17101 #CJK UNIFIED IDEOGRAPH + {0xE293, 0x9238}, //17102 #CJK UNIFIED IDEOGRAPH + {0xE294, 0x9239}, //17103 #CJK UNIFIED IDEOGRAPH + {0xE295, 0x923A}, //17104 #CJK UNIFIED IDEOGRAPH + {0xE296, 0x923B}, //17105 #CJK UNIFIED IDEOGRAPH + {0xE297, 0x923C}, //17106 #CJK UNIFIED IDEOGRAPH + {0xE298, 0x923D}, //17107 #CJK UNIFIED IDEOGRAPH + {0xE299, 0x923E}, //17108 #CJK UNIFIED IDEOGRAPH + {0xE29A, 0x923F}, //17109 #CJK UNIFIED IDEOGRAPH + {0xE29B, 0x9240}, //17110 #CJK UNIFIED IDEOGRAPH + {0xE29C, 0x9241}, //17111 #CJK UNIFIED IDEOGRAPH + {0xE29D, 0x9242}, //17112 #CJK UNIFIED IDEOGRAPH + {0xE29E, 0x9243}, //17113 #CJK UNIFIED IDEOGRAPH + {0xE29F, 0x9244}, //17114 #CJK UNIFIED IDEOGRAPH + {0xE2A0, 0x9245}, //17115 #CJK UNIFIED IDEOGRAPH + {0xE2A1, 0x72FB}, //17116 #CJK UNIFIED IDEOGRAPH + {0xE2A2, 0x7317}, //17117 #CJK UNIFIED IDEOGRAPH + {0xE2A3, 0x7313}, //17118 #CJK UNIFIED IDEOGRAPH + {0xE2A4, 0x7321}, //17119 #CJK UNIFIED IDEOGRAPH + {0xE2A5, 0x730A}, //17120 #CJK UNIFIED IDEOGRAPH + {0xE2A6, 0x731E}, //17121 #CJK UNIFIED IDEOGRAPH + {0xE2A7, 0x731D}, //17122 #CJK UNIFIED IDEOGRAPH + {0xE2A8, 0x7315}, //17123 #CJK UNIFIED IDEOGRAPH + {0xE2A9, 0x7322}, //17124 #CJK UNIFIED IDEOGRAPH + {0xE2AA, 0x7339}, //17125 #CJK UNIFIED IDEOGRAPH + {0xE2AB, 0x7325}, //17126 #CJK UNIFIED IDEOGRAPH + {0xE2AC, 0x732C}, //17127 #CJK UNIFIED IDEOGRAPH + {0xE2AD, 0x7338}, //17128 #CJK UNIFIED IDEOGRAPH + {0xE2AE, 0x7331}, //17129 #CJK UNIFIED IDEOGRAPH + {0xE2AF, 0x7350}, //17130 #CJK UNIFIED IDEOGRAPH + {0xE2B0, 0x734D}, //17131 #CJK UNIFIED IDEOGRAPH + {0xE2B1, 0x7357}, //17132 #CJK UNIFIED IDEOGRAPH + {0xE2B2, 0x7360}, //17133 #CJK UNIFIED IDEOGRAPH + {0xE2B3, 0x736C}, //17134 #CJK UNIFIED IDEOGRAPH + {0xE2B4, 0x736F}, //17135 #CJK UNIFIED IDEOGRAPH + {0xE2B5, 0x737E}, //17136 #CJK UNIFIED IDEOGRAPH + {0xE2B6, 0x821B}, //17137 #CJK UNIFIED IDEOGRAPH + {0xE2B7, 0x5925}, //17138 #CJK UNIFIED IDEOGRAPH + {0xE2B8, 0x98E7}, //17139 #CJK UNIFIED IDEOGRAPH + {0xE2B9, 0x5924}, //17140 #CJK UNIFIED IDEOGRAPH + {0xE2BA, 0x5902}, //17141 #CJK UNIFIED IDEOGRAPH + {0xE2BB, 0x9963}, //17142 #CJK UNIFIED IDEOGRAPH + {0xE2BC, 0x9967}, //17143 #CJK UNIFIED IDEOGRAPH + {0xE2BD, 0x9968}, //17144 #CJK UNIFIED IDEOGRAPH + {0xE2BE, 0x9969}, //17145 #CJK UNIFIED IDEOGRAPH + {0xE2BF, 0x996A}, //17146 #CJK UNIFIED IDEOGRAPH + {0xE2C0, 0x996B}, //17147 #CJK UNIFIED IDEOGRAPH + {0xE2C1, 0x996C}, //17148 #CJK UNIFIED IDEOGRAPH + {0xE2C2, 0x9974}, //17149 #CJK UNIFIED IDEOGRAPH + {0xE2C3, 0x9977}, //17150 #CJK UNIFIED IDEOGRAPH + {0xE2C4, 0x997D}, //17151 #CJK UNIFIED IDEOGRAPH + {0xE2C5, 0x9980}, //17152 #CJK UNIFIED IDEOGRAPH + {0xE2C6, 0x9984}, //17153 #CJK UNIFIED IDEOGRAPH + {0xE2C7, 0x9987}, //17154 #CJK UNIFIED IDEOGRAPH + {0xE2C8, 0x998A}, //17155 #CJK UNIFIED IDEOGRAPH + {0xE2C9, 0x998D}, //17156 #CJK UNIFIED IDEOGRAPH + {0xE2CA, 0x9990}, //17157 #CJK UNIFIED IDEOGRAPH + {0xE2CB, 0x9991}, //17158 #CJK UNIFIED IDEOGRAPH + {0xE2CC, 0x9993}, //17159 #CJK UNIFIED IDEOGRAPH + {0xE2CD, 0x9994}, //17160 #CJK UNIFIED IDEOGRAPH + {0xE2CE, 0x9995}, //17161 #CJK UNIFIED IDEOGRAPH + {0xE2CF, 0x5E80}, //17162 #CJK UNIFIED IDEOGRAPH + {0xE2D0, 0x5E91}, //17163 #CJK UNIFIED IDEOGRAPH + {0xE2D1, 0x5E8B}, //17164 #CJK UNIFIED IDEOGRAPH + {0xE2D2, 0x5E96}, //17165 #CJK UNIFIED IDEOGRAPH + {0xE2D3, 0x5EA5}, //17166 #CJK UNIFIED IDEOGRAPH + {0xE2D4, 0x5EA0}, //17167 #CJK UNIFIED IDEOGRAPH + {0xE2D5, 0x5EB9}, //17168 #CJK UNIFIED IDEOGRAPH + {0xE2D6, 0x5EB5}, //17169 #CJK UNIFIED IDEOGRAPH + {0xE2D7, 0x5EBE}, //17170 #CJK UNIFIED IDEOGRAPH + {0xE2D8, 0x5EB3}, //17171 #CJK UNIFIED IDEOGRAPH + {0xE2D9, 0x8D53}, //17172 #CJK UNIFIED IDEOGRAPH + {0xE2DA, 0x5ED2}, //17173 #CJK UNIFIED IDEOGRAPH + {0xE2DB, 0x5ED1}, //17174 #CJK UNIFIED IDEOGRAPH + {0xE2DC, 0x5EDB}, //17175 #CJK UNIFIED IDEOGRAPH + {0xE2DD, 0x5EE8}, //17176 #CJK UNIFIED IDEOGRAPH + {0xE2DE, 0x5EEA}, //17177 #CJK UNIFIED IDEOGRAPH + {0xE2DF, 0x81BA}, //17178 #CJK UNIFIED IDEOGRAPH + {0xE2E0, 0x5FC4}, //17179 #CJK UNIFIED IDEOGRAPH + {0xE2E1, 0x5FC9}, //17180 #CJK UNIFIED IDEOGRAPH + {0xE2E2, 0x5FD6}, //17181 #CJK UNIFIED IDEOGRAPH + {0xE2E3, 0x5FCF}, //17182 #CJK UNIFIED IDEOGRAPH + {0xE2E4, 0x6003}, //17183 #CJK UNIFIED IDEOGRAPH + {0xE2E5, 0x5FEE}, //17184 #CJK UNIFIED IDEOGRAPH + {0xE2E6, 0x6004}, //17185 #CJK UNIFIED IDEOGRAPH + {0xE2E7, 0x5FE1}, //17186 #CJK UNIFIED IDEOGRAPH + {0xE2E8, 0x5FE4}, //17187 #CJK UNIFIED IDEOGRAPH + {0xE2E9, 0x5FFE}, //17188 #CJK UNIFIED IDEOGRAPH + {0xE2EA, 0x6005}, //17189 #CJK UNIFIED IDEOGRAPH + {0xE2EB, 0x6006}, //17190 #CJK UNIFIED IDEOGRAPH + {0xE2EC, 0x5FEA}, //17191 #CJK UNIFIED IDEOGRAPH + {0xE2ED, 0x5FED}, //17192 #CJK UNIFIED IDEOGRAPH + {0xE2EE, 0x5FF8}, //17193 #CJK UNIFIED IDEOGRAPH + {0xE2EF, 0x6019}, //17194 #CJK UNIFIED IDEOGRAPH + {0xE2F0, 0x6035}, //17195 #CJK UNIFIED IDEOGRAPH + {0xE2F1, 0x6026}, //17196 #CJK UNIFIED IDEOGRAPH + {0xE2F2, 0x601B}, //17197 #CJK UNIFIED IDEOGRAPH + {0xE2F3, 0x600F}, //17198 #CJK UNIFIED IDEOGRAPH + {0xE2F4, 0x600D}, //17199 #CJK UNIFIED IDEOGRAPH + {0xE2F5, 0x6029}, //17200 #CJK UNIFIED IDEOGRAPH + {0xE2F6, 0x602B}, //17201 #CJK UNIFIED IDEOGRAPH + {0xE2F7, 0x600A}, //17202 #CJK UNIFIED IDEOGRAPH + {0xE2F8, 0x603F}, //17203 #CJK UNIFIED IDEOGRAPH + {0xE2F9, 0x6021}, //17204 #CJK UNIFIED IDEOGRAPH + {0xE2FA, 0x6078}, //17205 #CJK UNIFIED IDEOGRAPH + {0xE2FB, 0x6079}, //17206 #CJK UNIFIED IDEOGRAPH + {0xE2FC, 0x607B}, //17207 #CJK UNIFIED IDEOGRAPH + {0xE2FD, 0x607A}, //17208 #CJK UNIFIED IDEOGRAPH + {0xE2FE, 0x6042}, //17209 #CJK UNIFIED IDEOGRAPH + {0xE340, 0x9246}, //17210 #CJK UNIFIED IDEOGRAPH + {0xE341, 0x9247}, //17211 #CJK UNIFIED IDEOGRAPH + {0xE342, 0x9248}, //17212 #CJK UNIFIED IDEOGRAPH + {0xE343, 0x9249}, //17213 #CJK UNIFIED IDEOGRAPH + {0xE344, 0x924A}, //17214 #CJK UNIFIED IDEOGRAPH + {0xE345, 0x924B}, //17215 #CJK UNIFIED IDEOGRAPH + {0xE346, 0x924C}, //17216 #CJK UNIFIED IDEOGRAPH + {0xE347, 0x924D}, //17217 #CJK UNIFIED IDEOGRAPH + {0xE348, 0x924E}, //17218 #CJK UNIFIED IDEOGRAPH + {0xE349, 0x924F}, //17219 #CJK UNIFIED IDEOGRAPH + {0xE34A, 0x9250}, //17220 #CJK UNIFIED IDEOGRAPH + {0xE34B, 0x9251}, //17221 #CJK UNIFIED IDEOGRAPH + {0xE34C, 0x9252}, //17222 #CJK UNIFIED IDEOGRAPH + {0xE34D, 0x9253}, //17223 #CJK UNIFIED IDEOGRAPH + {0xE34E, 0x9254}, //17224 #CJK UNIFIED IDEOGRAPH + {0xE34F, 0x9255}, //17225 #CJK UNIFIED IDEOGRAPH + {0xE350, 0x9256}, //17226 #CJK UNIFIED IDEOGRAPH + {0xE351, 0x9257}, //17227 #CJK UNIFIED IDEOGRAPH + {0xE352, 0x9258}, //17228 #CJK UNIFIED IDEOGRAPH + {0xE353, 0x9259}, //17229 #CJK UNIFIED IDEOGRAPH + {0xE354, 0x925A}, //17230 #CJK UNIFIED IDEOGRAPH + {0xE355, 0x925B}, //17231 #CJK UNIFIED IDEOGRAPH + {0xE356, 0x925C}, //17232 #CJK UNIFIED IDEOGRAPH + {0xE357, 0x925D}, //17233 #CJK UNIFIED IDEOGRAPH + {0xE358, 0x925E}, //17234 #CJK UNIFIED IDEOGRAPH + {0xE359, 0x925F}, //17235 #CJK UNIFIED IDEOGRAPH + {0xE35A, 0x9260}, //17236 #CJK UNIFIED IDEOGRAPH + {0xE35B, 0x9261}, //17237 #CJK UNIFIED IDEOGRAPH + {0xE35C, 0x9262}, //17238 #CJK UNIFIED IDEOGRAPH + {0xE35D, 0x9263}, //17239 #CJK UNIFIED IDEOGRAPH + {0xE35E, 0x9264}, //17240 #CJK UNIFIED IDEOGRAPH + {0xE35F, 0x9265}, //17241 #CJK UNIFIED IDEOGRAPH + {0xE360, 0x9266}, //17242 #CJK UNIFIED IDEOGRAPH + {0xE361, 0x9267}, //17243 #CJK UNIFIED IDEOGRAPH + {0xE362, 0x9268}, //17244 #CJK UNIFIED IDEOGRAPH + {0xE363, 0x9269}, //17245 #CJK UNIFIED IDEOGRAPH + {0xE364, 0x926A}, //17246 #CJK UNIFIED IDEOGRAPH + {0xE365, 0x926B}, //17247 #CJK UNIFIED IDEOGRAPH + {0xE366, 0x926C}, //17248 #CJK UNIFIED IDEOGRAPH + {0xE367, 0x926D}, //17249 #CJK UNIFIED IDEOGRAPH + {0xE368, 0x926E}, //17250 #CJK UNIFIED IDEOGRAPH + {0xE369, 0x926F}, //17251 #CJK UNIFIED IDEOGRAPH + {0xE36A, 0x9270}, //17252 #CJK UNIFIED IDEOGRAPH + {0xE36B, 0x9271}, //17253 #CJK UNIFIED IDEOGRAPH + {0xE36C, 0x9272}, //17254 #CJK UNIFIED IDEOGRAPH + {0xE36D, 0x9273}, //17255 #CJK UNIFIED IDEOGRAPH + {0xE36E, 0x9275}, //17256 #CJK UNIFIED IDEOGRAPH + {0xE36F, 0x9276}, //17257 #CJK UNIFIED IDEOGRAPH + {0xE370, 0x9277}, //17258 #CJK UNIFIED IDEOGRAPH + {0xE371, 0x9278}, //17259 #CJK UNIFIED IDEOGRAPH + {0xE372, 0x9279}, //17260 #CJK UNIFIED IDEOGRAPH + {0xE373, 0x927A}, //17261 #CJK UNIFIED IDEOGRAPH + {0xE374, 0x927B}, //17262 #CJK UNIFIED IDEOGRAPH + {0xE375, 0x927C}, //17263 #CJK UNIFIED IDEOGRAPH + {0xE376, 0x927D}, //17264 #CJK UNIFIED IDEOGRAPH + {0xE377, 0x927E}, //17265 #CJK UNIFIED IDEOGRAPH + {0xE378, 0x927F}, //17266 #CJK UNIFIED IDEOGRAPH + {0xE379, 0x9280}, //17267 #CJK UNIFIED IDEOGRAPH + {0xE37A, 0x9281}, //17268 #CJK UNIFIED IDEOGRAPH + {0xE37B, 0x9282}, //17269 #CJK UNIFIED IDEOGRAPH + {0xE37C, 0x9283}, //17270 #CJK UNIFIED IDEOGRAPH + {0xE37D, 0x9284}, //17271 #CJK UNIFIED IDEOGRAPH + {0xE37E, 0x9285}, //17272 #CJK UNIFIED IDEOGRAPH + {0xE380, 0x9286}, //17273 #CJK UNIFIED IDEOGRAPH + {0xE381, 0x9287}, //17274 #CJK UNIFIED IDEOGRAPH + {0xE382, 0x9288}, //17275 #CJK UNIFIED IDEOGRAPH + {0xE383, 0x9289}, //17276 #CJK UNIFIED IDEOGRAPH + {0xE384, 0x928A}, //17277 #CJK UNIFIED IDEOGRAPH + {0xE385, 0x928B}, //17278 #CJK UNIFIED IDEOGRAPH + {0xE386, 0x928C}, //17279 #CJK UNIFIED IDEOGRAPH + {0xE387, 0x928D}, //17280 #CJK UNIFIED IDEOGRAPH + {0xE388, 0x928F}, //17281 #CJK UNIFIED IDEOGRAPH + {0xE389, 0x9290}, //17282 #CJK UNIFIED IDEOGRAPH + {0xE38A, 0x9291}, //17283 #CJK UNIFIED IDEOGRAPH + {0xE38B, 0x9292}, //17284 #CJK UNIFIED IDEOGRAPH + {0xE38C, 0x9293}, //17285 #CJK UNIFIED IDEOGRAPH + {0xE38D, 0x9294}, //17286 #CJK UNIFIED IDEOGRAPH + {0xE38E, 0x9295}, //17287 #CJK UNIFIED IDEOGRAPH + {0xE38F, 0x9296}, //17288 #CJK UNIFIED IDEOGRAPH + {0xE390, 0x9297}, //17289 #CJK UNIFIED IDEOGRAPH + {0xE391, 0x9298}, //17290 #CJK UNIFIED IDEOGRAPH + {0xE392, 0x9299}, //17291 #CJK UNIFIED IDEOGRAPH + {0xE393, 0x929A}, //17292 #CJK UNIFIED IDEOGRAPH + {0xE394, 0x929B}, //17293 #CJK UNIFIED IDEOGRAPH + {0xE395, 0x929C}, //17294 #CJK UNIFIED IDEOGRAPH + {0xE396, 0x929D}, //17295 #CJK UNIFIED IDEOGRAPH + {0xE397, 0x929E}, //17296 #CJK UNIFIED IDEOGRAPH + {0xE398, 0x929F}, //17297 #CJK UNIFIED IDEOGRAPH + {0xE399, 0x92A0}, //17298 #CJK UNIFIED IDEOGRAPH + {0xE39A, 0x92A1}, //17299 #CJK UNIFIED IDEOGRAPH + {0xE39B, 0x92A2}, //17300 #CJK UNIFIED IDEOGRAPH + {0xE39C, 0x92A3}, //17301 #CJK UNIFIED IDEOGRAPH + {0xE39D, 0x92A4}, //17302 #CJK UNIFIED IDEOGRAPH + {0xE39E, 0x92A5}, //17303 #CJK UNIFIED IDEOGRAPH + {0xE39F, 0x92A6}, //17304 #CJK UNIFIED IDEOGRAPH + {0xE3A0, 0x92A7}, //17305 #CJK UNIFIED IDEOGRAPH + {0xE3A1, 0x606A}, //17306 #CJK UNIFIED IDEOGRAPH + {0xE3A2, 0x607D}, //17307 #CJK UNIFIED IDEOGRAPH + {0xE3A3, 0x6096}, //17308 #CJK UNIFIED IDEOGRAPH + {0xE3A4, 0x609A}, //17309 #CJK UNIFIED IDEOGRAPH + {0xE3A5, 0x60AD}, //17310 #CJK UNIFIED IDEOGRAPH + {0xE3A6, 0x609D}, //17311 #CJK UNIFIED IDEOGRAPH + {0xE3A7, 0x6083}, //17312 #CJK UNIFIED IDEOGRAPH + {0xE3A8, 0x6092}, //17313 #CJK UNIFIED IDEOGRAPH + {0xE3A9, 0x608C}, //17314 #CJK UNIFIED IDEOGRAPH + {0xE3AA, 0x609B}, //17315 #CJK UNIFIED IDEOGRAPH + {0xE3AB, 0x60EC}, //17316 #CJK UNIFIED IDEOGRAPH + {0xE3AC, 0x60BB}, //17317 #CJK UNIFIED IDEOGRAPH + {0xE3AD, 0x60B1}, //17318 #CJK UNIFIED IDEOGRAPH + {0xE3AE, 0x60DD}, //17319 #CJK UNIFIED IDEOGRAPH + {0xE3AF, 0x60D8}, //17320 #CJK UNIFIED IDEOGRAPH + {0xE3B0, 0x60C6}, //17321 #CJK UNIFIED IDEOGRAPH + {0xE3B1, 0x60DA}, //17322 #CJK UNIFIED IDEOGRAPH + {0xE3B2, 0x60B4}, //17323 #CJK UNIFIED IDEOGRAPH + {0xE3B3, 0x6120}, //17324 #CJK UNIFIED IDEOGRAPH + {0xE3B4, 0x6126}, //17325 #CJK UNIFIED IDEOGRAPH + {0xE3B5, 0x6115}, //17326 #CJK UNIFIED IDEOGRAPH + {0xE3B6, 0x6123}, //17327 #CJK UNIFIED IDEOGRAPH + {0xE3B7, 0x60F4}, //17328 #CJK UNIFIED IDEOGRAPH + {0xE3B8, 0x6100}, //17329 #CJK UNIFIED IDEOGRAPH + {0xE3B9, 0x610E}, //17330 #CJK UNIFIED IDEOGRAPH + {0xE3BA, 0x612B}, //17331 #CJK UNIFIED IDEOGRAPH + {0xE3BB, 0x614A}, //17332 #CJK UNIFIED IDEOGRAPH + {0xE3BC, 0x6175}, //17333 #CJK UNIFIED IDEOGRAPH + {0xE3BD, 0x61AC}, //17334 #CJK UNIFIED IDEOGRAPH + {0xE3BE, 0x6194}, //17335 #CJK UNIFIED IDEOGRAPH + {0xE3BF, 0x61A7}, //17336 #CJK UNIFIED IDEOGRAPH + {0xE3C0, 0x61B7}, //17337 #CJK UNIFIED IDEOGRAPH + {0xE3C1, 0x61D4}, //17338 #CJK UNIFIED IDEOGRAPH + {0xE3C2, 0x61F5}, //17339 #CJK UNIFIED IDEOGRAPH + {0xE3C3, 0x5FDD}, //17340 #CJK UNIFIED IDEOGRAPH + {0xE3C4, 0x96B3}, //17341 #CJK UNIFIED IDEOGRAPH + {0xE3C5, 0x95E9}, //17342 #CJK UNIFIED IDEOGRAPH + {0xE3C6, 0x95EB}, //17343 #CJK UNIFIED IDEOGRAPH + {0xE3C7, 0x95F1}, //17344 #CJK UNIFIED IDEOGRAPH + {0xE3C8, 0x95F3}, //17345 #CJK UNIFIED IDEOGRAPH + {0xE3C9, 0x95F5}, //17346 #CJK UNIFIED IDEOGRAPH + {0xE3CA, 0x95F6}, //17347 #CJK UNIFIED IDEOGRAPH + {0xE3CB, 0x95FC}, //17348 #CJK UNIFIED IDEOGRAPH + {0xE3CC, 0x95FE}, //17349 #CJK UNIFIED IDEOGRAPH + {0xE3CD, 0x9603}, //17350 #CJK UNIFIED IDEOGRAPH + {0xE3CE, 0x9604}, //17351 #CJK UNIFIED IDEOGRAPH + {0xE3CF, 0x9606}, //17352 #CJK UNIFIED IDEOGRAPH + {0xE3D0, 0x9608}, //17353 #CJK UNIFIED IDEOGRAPH + {0xE3D1, 0x960A}, //17354 #CJK UNIFIED IDEOGRAPH + {0xE3D2, 0x960B}, //17355 #CJK UNIFIED IDEOGRAPH + {0xE3D3, 0x960C}, //17356 #CJK UNIFIED IDEOGRAPH + {0xE3D4, 0x960D}, //17357 #CJK UNIFIED IDEOGRAPH + {0xE3D5, 0x960F}, //17358 #CJK UNIFIED IDEOGRAPH + {0xE3D6, 0x9612}, //17359 #CJK UNIFIED IDEOGRAPH + {0xE3D7, 0x9615}, //17360 #CJK UNIFIED IDEOGRAPH + {0xE3D8, 0x9616}, //17361 #CJK UNIFIED IDEOGRAPH + {0xE3D9, 0x9617}, //17362 #CJK UNIFIED IDEOGRAPH + {0xE3DA, 0x9619}, //17363 #CJK UNIFIED IDEOGRAPH + {0xE3DB, 0x961A}, //17364 #CJK UNIFIED IDEOGRAPH + {0xE3DC, 0x4E2C}, //17365 #CJK UNIFIED IDEOGRAPH + {0xE3DD, 0x723F}, //17366 #CJK UNIFIED IDEOGRAPH + {0xE3DE, 0x6215}, //17367 #CJK UNIFIED IDEOGRAPH + {0xE3DF, 0x6C35}, //17368 #CJK UNIFIED IDEOGRAPH + {0xE3E0, 0x6C54}, //17369 #CJK UNIFIED IDEOGRAPH + {0xE3E1, 0x6C5C}, //17370 #CJK UNIFIED IDEOGRAPH + {0xE3E2, 0x6C4A}, //17371 #CJK UNIFIED IDEOGRAPH + {0xE3E3, 0x6CA3}, //17372 #CJK UNIFIED IDEOGRAPH + {0xE3E4, 0x6C85}, //17373 #CJK UNIFIED IDEOGRAPH + {0xE3E5, 0x6C90}, //17374 #CJK UNIFIED IDEOGRAPH + {0xE3E6, 0x6C94}, //17375 #CJK UNIFIED IDEOGRAPH + {0xE3E7, 0x6C8C}, //17376 #CJK UNIFIED IDEOGRAPH + {0xE3E8, 0x6C68}, //17377 #CJK UNIFIED IDEOGRAPH + {0xE3E9, 0x6C69}, //17378 #CJK UNIFIED IDEOGRAPH + {0xE3EA, 0x6C74}, //17379 #CJK UNIFIED IDEOGRAPH + {0xE3EB, 0x6C76}, //17380 #CJK UNIFIED IDEOGRAPH + {0xE3EC, 0x6C86}, //17381 #CJK UNIFIED IDEOGRAPH + {0xE3ED, 0x6CA9}, //17382 #CJK UNIFIED IDEOGRAPH + {0xE3EE, 0x6CD0}, //17383 #CJK UNIFIED IDEOGRAPH + {0xE3EF, 0x6CD4}, //17384 #CJK UNIFIED IDEOGRAPH + {0xE3F0, 0x6CAD}, //17385 #CJK UNIFIED IDEOGRAPH + {0xE3F1, 0x6CF7}, //17386 #CJK UNIFIED IDEOGRAPH + {0xE3F2, 0x6CF8}, //17387 #CJK UNIFIED IDEOGRAPH + {0xE3F3, 0x6CF1}, //17388 #CJK UNIFIED IDEOGRAPH + {0xE3F4, 0x6CD7}, //17389 #CJK UNIFIED IDEOGRAPH + {0xE3F5, 0x6CB2}, //17390 #CJK UNIFIED IDEOGRAPH + {0xE3F6, 0x6CE0}, //17391 #CJK UNIFIED IDEOGRAPH + {0xE3F7, 0x6CD6}, //17392 #CJK UNIFIED IDEOGRAPH + {0xE3F8, 0x6CFA}, //17393 #CJK UNIFIED IDEOGRAPH + {0xE3F9, 0x6CEB}, //17394 #CJK UNIFIED IDEOGRAPH + {0xE3FA, 0x6CEE}, //17395 #CJK UNIFIED IDEOGRAPH + {0xE3FB, 0x6CB1}, //17396 #CJK UNIFIED IDEOGRAPH + {0xE3FC, 0x6CD3}, //17397 #CJK UNIFIED IDEOGRAPH + {0xE3FD, 0x6CEF}, //17398 #CJK UNIFIED IDEOGRAPH + {0xE3FE, 0x6CFE}, //17399 #CJK UNIFIED IDEOGRAPH + {0xE440, 0x92A8}, //17400 #CJK UNIFIED IDEOGRAPH + {0xE441, 0x92A9}, //17401 #CJK UNIFIED IDEOGRAPH + {0xE442, 0x92AA}, //17402 #CJK UNIFIED IDEOGRAPH + {0xE443, 0x92AB}, //17403 #CJK UNIFIED IDEOGRAPH + {0xE444, 0x92AC}, //17404 #CJK UNIFIED IDEOGRAPH + {0xE445, 0x92AD}, //17405 #CJK UNIFIED IDEOGRAPH + {0xE446, 0x92AF}, //17406 #CJK UNIFIED IDEOGRAPH + {0xE447, 0x92B0}, //17407 #CJK UNIFIED IDEOGRAPH + {0xE448, 0x92B1}, //17408 #CJK UNIFIED IDEOGRAPH + {0xE449, 0x92B2}, //17409 #CJK UNIFIED IDEOGRAPH + {0xE44A, 0x92B3}, //17410 #CJK UNIFIED IDEOGRAPH + {0xE44B, 0x92B4}, //17411 #CJK UNIFIED IDEOGRAPH + {0xE44C, 0x92B5}, //17412 #CJK UNIFIED IDEOGRAPH + {0xE44D, 0x92B6}, //17413 #CJK UNIFIED IDEOGRAPH + {0xE44E, 0x92B7}, //17414 #CJK UNIFIED IDEOGRAPH + {0xE44F, 0x92B8}, //17415 #CJK UNIFIED IDEOGRAPH + {0xE450, 0x92B9}, //17416 #CJK UNIFIED IDEOGRAPH + {0xE451, 0x92BA}, //17417 #CJK UNIFIED IDEOGRAPH + {0xE452, 0x92BB}, //17418 #CJK UNIFIED IDEOGRAPH + {0xE453, 0x92BC}, //17419 #CJK UNIFIED IDEOGRAPH + {0xE454, 0x92BD}, //17420 #CJK UNIFIED IDEOGRAPH + {0xE455, 0x92BE}, //17421 #CJK UNIFIED IDEOGRAPH + {0xE456, 0x92BF}, //17422 #CJK UNIFIED IDEOGRAPH + {0xE457, 0x92C0}, //17423 #CJK UNIFIED IDEOGRAPH + {0xE458, 0x92C1}, //17424 #CJK UNIFIED IDEOGRAPH + {0xE459, 0x92C2}, //17425 #CJK UNIFIED IDEOGRAPH + {0xE45A, 0x92C3}, //17426 #CJK UNIFIED IDEOGRAPH + {0xE45B, 0x92C4}, //17427 #CJK UNIFIED IDEOGRAPH + {0xE45C, 0x92C5}, //17428 #CJK UNIFIED IDEOGRAPH + {0xE45D, 0x92C6}, //17429 #CJK UNIFIED IDEOGRAPH + {0xE45E, 0x92C7}, //17430 #CJK UNIFIED IDEOGRAPH + {0xE45F, 0x92C9}, //17431 #CJK UNIFIED IDEOGRAPH + {0xE460, 0x92CA}, //17432 #CJK UNIFIED IDEOGRAPH + {0xE461, 0x92CB}, //17433 #CJK UNIFIED IDEOGRAPH + {0xE462, 0x92CC}, //17434 #CJK UNIFIED IDEOGRAPH + {0xE463, 0x92CD}, //17435 #CJK UNIFIED IDEOGRAPH + {0xE464, 0x92CE}, //17436 #CJK UNIFIED IDEOGRAPH + {0xE465, 0x92CF}, //17437 #CJK UNIFIED IDEOGRAPH + {0xE466, 0x92D0}, //17438 #CJK UNIFIED IDEOGRAPH + {0xE467, 0x92D1}, //17439 #CJK UNIFIED IDEOGRAPH + {0xE468, 0x92D2}, //17440 #CJK UNIFIED IDEOGRAPH + {0xE469, 0x92D3}, //17441 #CJK UNIFIED IDEOGRAPH + {0xE46A, 0x92D4}, //17442 #CJK UNIFIED IDEOGRAPH + {0xE46B, 0x92D5}, //17443 #CJK UNIFIED IDEOGRAPH + {0xE46C, 0x92D6}, //17444 #CJK UNIFIED IDEOGRAPH + {0xE46D, 0x92D7}, //17445 #CJK UNIFIED IDEOGRAPH + {0xE46E, 0x92D8}, //17446 #CJK UNIFIED IDEOGRAPH + {0xE46F, 0x92D9}, //17447 #CJK UNIFIED IDEOGRAPH + {0xE470, 0x92DA}, //17448 #CJK UNIFIED IDEOGRAPH + {0xE471, 0x92DB}, //17449 #CJK UNIFIED IDEOGRAPH + {0xE472, 0x92DC}, //17450 #CJK UNIFIED IDEOGRAPH + {0xE473, 0x92DD}, //17451 #CJK UNIFIED IDEOGRAPH + {0xE474, 0x92DE}, //17452 #CJK UNIFIED IDEOGRAPH + {0xE475, 0x92DF}, //17453 #CJK UNIFIED IDEOGRAPH + {0xE476, 0x92E0}, //17454 #CJK UNIFIED IDEOGRAPH + {0xE477, 0x92E1}, //17455 #CJK UNIFIED IDEOGRAPH + {0xE478, 0x92E2}, //17456 #CJK UNIFIED IDEOGRAPH + {0xE479, 0x92E3}, //17457 #CJK UNIFIED IDEOGRAPH + {0xE47A, 0x92E4}, //17458 #CJK UNIFIED IDEOGRAPH + {0xE47B, 0x92E5}, //17459 #CJK UNIFIED IDEOGRAPH + {0xE47C, 0x92E6}, //17460 #CJK UNIFIED IDEOGRAPH + {0xE47D, 0x92E7}, //17461 #CJK UNIFIED IDEOGRAPH + {0xE47E, 0x92E8}, //17462 #CJK UNIFIED IDEOGRAPH + {0xE480, 0x92E9}, //17463 #CJK UNIFIED IDEOGRAPH + {0xE481, 0x92EA}, //17464 #CJK UNIFIED IDEOGRAPH + {0xE482, 0x92EB}, //17465 #CJK UNIFIED IDEOGRAPH + {0xE483, 0x92EC}, //17466 #CJK UNIFIED IDEOGRAPH + {0xE484, 0x92ED}, //17467 #CJK UNIFIED IDEOGRAPH + {0xE485, 0x92EE}, //17468 #CJK UNIFIED IDEOGRAPH + {0xE486, 0x92EF}, //17469 #CJK UNIFIED IDEOGRAPH + {0xE487, 0x92F0}, //17470 #CJK UNIFIED IDEOGRAPH + {0xE488, 0x92F1}, //17471 #CJK UNIFIED IDEOGRAPH + {0xE489, 0x92F2}, //17472 #CJK UNIFIED IDEOGRAPH + {0xE48A, 0x92F3}, //17473 #CJK UNIFIED IDEOGRAPH + {0xE48B, 0x92F4}, //17474 #CJK UNIFIED IDEOGRAPH + {0xE48C, 0x92F5}, //17475 #CJK UNIFIED IDEOGRAPH + {0xE48D, 0x92F6}, //17476 #CJK UNIFIED IDEOGRAPH + {0xE48E, 0x92F7}, //17477 #CJK UNIFIED IDEOGRAPH + {0xE48F, 0x92F8}, //17478 #CJK UNIFIED IDEOGRAPH + {0xE490, 0x92F9}, //17479 #CJK UNIFIED IDEOGRAPH + {0xE491, 0x92FA}, //17480 #CJK UNIFIED IDEOGRAPH + {0xE492, 0x92FB}, //17481 #CJK UNIFIED IDEOGRAPH + {0xE493, 0x92FC}, //17482 #CJK UNIFIED IDEOGRAPH + {0xE494, 0x92FD}, //17483 #CJK UNIFIED IDEOGRAPH + {0xE495, 0x92FE}, //17484 #CJK UNIFIED IDEOGRAPH + {0xE496, 0x92FF}, //17485 #CJK UNIFIED IDEOGRAPH + {0xE497, 0x9300}, //17486 #CJK UNIFIED IDEOGRAPH + {0xE498, 0x9301}, //17487 #CJK UNIFIED IDEOGRAPH + {0xE499, 0x9302}, //17488 #CJK UNIFIED IDEOGRAPH + {0xE49A, 0x9303}, //17489 #CJK UNIFIED IDEOGRAPH + {0xE49B, 0x9304}, //17490 #CJK UNIFIED IDEOGRAPH + {0xE49C, 0x9305}, //17491 #CJK UNIFIED IDEOGRAPH + {0xE49D, 0x9306}, //17492 #CJK UNIFIED IDEOGRAPH + {0xE49E, 0x9307}, //17493 #CJK UNIFIED IDEOGRAPH + {0xE49F, 0x9308}, //17494 #CJK UNIFIED IDEOGRAPH + {0xE4A0, 0x9309}, //17495 #CJK UNIFIED IDEOGRAPH + {0xE4A1, 0x6D39}, //17496 #CJK UNIFIED IDEOGRAPH + {0xE4A2, 0x6D27}, //17497 #CJK UNIFIED IDEOGRAPH + {0xE4A3, 0x6D0C}, //17498 #CJK UNIFIED IDEOGRAPH + {0xE4A4, 0x6D43}, //17499 #CJK UNIFIED IDEOGRAPH + {0xE4A5, 0x6D48}, //17500 #CJK UNIFIED IDEOGRAPH + {0xE4A6, 0x6D07}, //17501 #CJK UNIFIED IDEOGRAPH + {0xE4A7, 0x6D04}, //17502 #CJK UNIFIED IDEOGRAPH + {0xE4A8, 0x6D19}, //17503 #CJK UNIFIED IDEOGRAPH + {0xE4A9, 0x6D0E}, //17504 #CJK UNIFIED IDEOGRAPH + {0xE4AA, 0x6D2B}, //17505 #CJK UNIFIED IDEOGRAPH + {0xE4AB, 0x6D4D}, //17506 #CJK UNIFIED IDEOGRAPH + {0xE4AC, 0x6D2E}, //17507 #CJK UNIFIED IDEOGRAPH + {0xE4AD, 0x6D35}, //17508 #CJK UNIFIED IDEOGRAPH + {0xE4AE, 0x6D1A}, //17509 #CJK UNIFIED IDEOGRAPH + {0xE4AF, 0x6D4F}, //17510 #CJK UNIFIED IDEOGRAPH + {0xE4B0, 0x6D52}, //17511 #CJK UNIFIED IDEOGRAPH + {0xE4B1, 0x6D54}, //17512 #CJK UNIFIED IDEOGRAPH + {0xE4B2, 0x6D33}, //17513 #CJK UNIFIED IDEOGRAPH + {0xE4B3, 0x6D91}, //17514 #CJK UNIFIED IDEOGRAPH + {0xE4B4, 0x6D6F}, //17515 #CJK UNIFIED IDEOGRAPH + {0xE4B5, 0x6D9E}, //17516 #CJK UNIFIED IDEOGRAPH + {0xE4B6, 0x6DA0}, //17517 #CJK UNIFIED IDEOGRAPH + {0xE4B7, 0x6D5E}, //17518 #CJK UNIFIED IDEOGRAPH + {0xE4B8, 0x6D93}, //17519 #CJK UNIFIED IDEOGRAPH + {0xE4B9, 0x6D94}, //17520 #CJK UNIFIED IDEOGRAPH + {0xE4BA, 0x6D5C}, //17521 #CJK UNIFIED IDEOGRAPH + {0xE4BB, 0x6D60}, //17522 #CJK UNIFIED IDEOGRAPH + {0xE4BC, 0x6D7C}, //17523 #CJK UNIFIED IDEOGRAPH + {0xE4BD, 0x6D63}, //17524 #CJK UNIFIED IDEOGRAPH + {0xE4BE, 0x6E1A}, //17525 #CJK UNIFIED IDEOGRAPH + {0xE4BF, 0x6DC7}, //17526 #CJK UNIFIED IDEOGRAPH + {0xE4C0, 0x6DC5}, //17527 #CJK UNIFIED IDEOGRAPH + {0xE4C1, 0x6DDE}, //17528 #CJK UNIFIED IDEOGRAPH + {0xE4C2, 0x6E0E}, //17529 #CJK UNIFIED IDEOGRAPH + {0xE4C3, 0x6DBF}, //17530 #CJK UNIFIED IDEOGRAPH + {0xE4C4, 0x6DE0}, //17531 #CJK UNIFIED IDEOGRAPH + {0xE4C5, 0x6E11}, //17532 #CJK UNIFIED IDEOGRAPH + {0xE4C6, 0x6DE6}, //17533 #CJK UNIFIED IDEOGRAPH + {0xE4C7, 0x6DDD}, //17534 #CJK UNIFIED IDEOGRAPH + {0xE4C8, 0x6DD9}, //17535 #CJK UNIFIED IDEOGRAPH + {0xE4C9, 0x6E16}, //17536 #CJK UNIFIED IDEOGRAPH + {0xE4CA, 0x6DAB}, //17537 #CJK UNIFIED IDEOGRAPH + {0xE4CB, 0x6E0C}, //17538 #CJK UNIFIED IDEOGRAPH + {0xE4CC, 0x6DAE}, //17539 #CJK UNIFIED IDEOGRAPH + {0xE4CD, 0x6E2B}, //17540 #CJK UNIFIED IDEOGRAPH + {0xE4CE, 0x6E6E}, //17541 #CJK UNIFIED IDEOGRAPH + {0xE4CF, 0x6E4E}, //17542 #CJK UNIFIED IDEOGRAPH + {0xE4D0, 0x6E6B}, //17543 #CJK UNIFIED IDEOGRAPH + {0xE4D1, 0x6EB2}, //17544 #CJK UNIFIED IDEOGRAPH + {0xE4D2, 0x6E5F}, //17545 #CJK UNIFIED IDEOGRAPH + {0xE4D3, 0x6E86}, //17546 #CJK UNIFIED IDEOGRAPH + {0xE4D4, 0x6E53}, //17547 #CJK UNIFIED IDEOGRAPH + {0xE4D5, 0x6E54}, //17548 #CJK UNIFIED IDEOGRAPH + {0xE4D6, 0x6E32}, //17549 #CJK UNIFIED IDEOGRAPH + {0xE4D7, 0x6E25}, //17550 #CJK UNIFIED IDEOGRAPH + {0xE4D8, 0x6E44}, //17551 #CJK UNIFIED IDEOGRAPH + {0xE4D9, 0x6EDF}, //17552 #CJK UNIFIED IDEOGRAPH + {0xE4DA, 0x6EB1}, //17553 #CJK UNIFIED IDEOGRAPH + {0xE4DB, 0x6E98}, //17554 #CJK UNIFIED IDEOGRAPH + {0xE4DC, 0x6EE0}, //17555 #CJK UNIFIED IDEOGRAPH + {0xE4DD, 0x6F2D}, //17556 #CJK UNIFIED IDEOGRAPH + {0xE4DE, 0x6EE2}, //17557 #CJK UNIFIED IDEOGRAPH + {0xE4DF, 0x6EA5}, //17558 #CJK UNIFIED IDEOGRAPH + {0xE4E0, 0x6EA7}, //17559 #CJK UNIFIED IDEOGRAPH + {0xE4E1, 0x6EBD}, //17560 #CJK UNIFIED IDEOGRAPH + {0xE4E2, 0x6EBB}, //17561 #CJK UNIFIED IDEOGRAPH + {0xE4E3, 0x6EB7}, //17562 #CJK UNIFIED IDEOGRAPH + {0xE4E4, 0x6ED7}, //17563 #CJK UNIFIED IDEOGRAPH + {0xE4E5, 0x6EB4}, //17564 #CJK UNIFIED IDEOGRAPH + {0xE4E6, 0x6ECF}, //17565 #CJK UNIFIED IDEOGRAPH + {0xE4E7, 0x6E8F}, //17566 #CJK UNIFIED IDEOGRAPH + {0xE4E8, 0x6EC2}, //17567 #CJK UNIFIED IDEOGRAPH + {0xE4E9, 0x6E9F}, //17568 #CJK UNIFIED IDEOGRAPH + {0xE4EA, 0x6F62}, //17569 #CJK UNIFIED IDEOGRAPH + {0xE4EB, 0x6F46}, //17570 #CJK UNIFIED IDEOGRAPH + {0xE4EC, 0x6F47}, //17571 #CJK UNIFIED IDEOGRAPH + {0xE4ED, 0x6F24}, //17572 #CJK UNIFIED IDEOGRAPH + {0xE4EE, 0x6F15}, //17573 #CJK UNIFIED IDEOGRAPH + {0xE4EF, 0x6EF9}, //17574 #CJK UNIFIED IDEOGRAPH + {0xE4F0, 0x6F2F}, //17575 #CJK UNIFIED IDEOGRAPH + {0xE4F1, 0x6F36}, //17576 #CJK UNIFIED IDEOGRAPH + {0xE4F2, 0x6F4B}, //17577 #CJK UNIFIED IDEOGRAPH + {0xE4F3, 0x6F74}, //17578 #CJK UNIFIED IDEOGRAPH + {0xE4F4, 0x6F2A}, //17579 #CJK UNIFIED IDEOGRAPH + {0xE4F5, 0x6F09}, //17580 #CJK UNIFIED IDEOGRAPH + {0xE4F6, 0x6F29}, //17581 #CJK UNIFIED IDEOGRAPH + {0xE4F7, 0x6F89}, //17582 #CJK UNIFIED IDEOGRAPH + {0xE4F8, 0x6F8D}, //17583 #CJK UNIFIED IDEOGRAPH + {0xE4F9, 0x6F8C}, //17584 #CJK UNIFIED IDEOGRAPH + {0xE4FA, 0x6F78}, //17585 #CJK UNIFIED IDEOGRAPH + {0xE4FB, 0x6F72}, //17586 #CJK UNIFIED IDEOGRAPH + {0xE4FC, 0x6F7C}, //17587 #CJK UNIFIED IDEOGRAPH + {0xE4FD, 0x6F7A}, //17588 #CJK UNIFIED IDEOGRAPH + {0xE4FE, 0x6FD1}, //17589 #CJK UNIFIED IDEOGRAPH + {0xE540, 0x930A}, //17590 #CJK UNIFIED IDEOGRAPH + {0xE541, 0x930B}, //17591 #CJK UNIFIED IDEOGRAPH + {0xE542, 0x930C}, //17592 #CJK UNIFIED IDEOGRAPH + {0xE543, 0x930D}, //17593 #CJK UNIFIED IDEOGRAPH + {0xE544, 0x930E}, //17594 #CJK UNIFIED IDEOGRAPH + {0xE545, 0x930F}, //17595 #CJK UNIFIED IDEOGRAPH + {0xE546, 0x9310}, //17596 #CJK UNIFIED IDEOGRAPH + {0xE547, 0x9311}, //17597 #CJK UNIFIED IDEOGRAPH + {0xE548, 0x9312}, //17598 #CJK UNIFIED IDEOGRAPH + {0xE549, 0x9313}, //17599 #CJK UNIFIED IDEOGRAPH + {0xE54A, 0x9314}, //17600 #CJK UNIFIED IDEOGRAPH + {0xE54B, 0x9315}, //17601 #CJK UNIFIED IDEOGRAPH + {0xE54C, 0x9316}, //17602 #CJK UNIFIED IDEOGRAPH + {0xE54D, 0x9317}, //17603 #CJK UNIFIED IDEOGRAPH + {0xE54E, 0x9318}, //17604 #CJK UNIFIED IDEOGRAPH + {0xE54F, 0x9319}, //17605 #CJK UNIFIED IDEOGRAPH + {0xE550, 0x931A}, //17606 #CJK UNIFIED IDEOGRAPH + {0xE551, 0x931B}, //17607 #CJK UNIFIED IDEOGRAPH + {0xE552, 0x931C}, //17608 #CJK UNIFIED IDEOGRAPH + {0xE553, 0x931D}, //17609 #CJK UNIFIED IDEOGRAPH + {0xE554, 0x931E}, //17610 #CJK UNIFIED IDEOGRAPH + {0xE555, 0x931F}, //17611 #CJK UNIFIED IDEOGRAPH + {0xE556, 0x9320}, //17612 #CJK UNIFIED IDEOGRAPH + {0xE557, 0x9321}, //17613 #CJK UNIFIED IDEOGRAPH + {0xE558, 0x9322}, //17614 #CJK UNIFIED IDEOGRAPH + {0xE559, 0x9323}, //17615 #CJK UNIFIED IDEOGRAPH + {0xE55A, 0x9324}, //17616 #CJK UNIFIED IDEOGRAPH + {0xE55B, 0x9325}, //17617 #CJK UNIFIED IDEOGRAPH + {0xE55C, 0x9326}, //17618 #CJK UNIFIED IDEOGRAPH + {0xE55D, 0x9327}, //17619 #CJK UNIFIED IDEOGRAPH + {0xE55E, 0x9328}, //17620 #CJK UNIFIED IDEOGRAPH + {0xE55F, 0x9329}, //17621 #CJK UNIFIED IDEOGRAPH + {0xE560, 0x932A}, //17622 #CJK UNIFIED IDEOGRAPH + {0xE561, 0x932B}, //17623 #CJK UNIFIED IDEOGRAPH + {0xE562, 0x932C}, //17624 #CJK UNIFIED IDEOGRAPH + {0xE563, 0x932D}, //17625 #CJK UNIFIED IDEOGRAPH + {0xE564, 0x932E}, //17626 #CJK UNIFIED IDEOGRAPH + {0xE565, 0x932F}, //17627 #CJK UNIFIED IDEOGRAPH + {0xE566, 0x9330}, //17628 #CJK UNIFIED IDEOGRAPH + {0xE567, 0x9331}, //17629 #CJK UNIFIED IDEOGRAPH + {0xE568, 0x9332}, //17630 #CJK UNIFIED IDEOGRAPH + {0xE569, 0x9333}, //17631 #CJK UNIFIED IDEOGRAPH + {0xE56A, 0x9334}, //17632 #CJK UNIFIED IDEOGRAPH + {0xE56B, 0x9335}, //17633 #CJK UNIFIED IDEOGRAPH + {0xE56C, 0x9336}, //17634 #CJK UNIFIED IDEOGRAPH + {0xE56D, 0x9337}, //17635 #CJK UNIFIED IDEOGRAPH + {0xE56E, 0x9338}, //17636 #CJK UNIFIED IDEOGRAPH + {0xE56F, 0x9339}, //17637 #CJK UNIFIED IDEOGRAPH + {0xE570, 0x933A}, //17638 #CJK UNIFIED IDEOGRAPH + {0xE571, 0x933B}, //17639 #CJK UNIFIED IDEOGRAPH + {0xE572, 0x933C}, //17640 #CJK UNIFIED IDEOGRAPH + {0xE573, 0x933D}, //17641 #CJK UNIFIED IDEOGRAPH + {0xE574, 0x933F}, //17642 #CJK UNIFIED IDEOGRAPH + {0xE575, 0x9340}, //17643 #CJK UNIFIED IDEOGRAPH + {0xE576, 0x9341}, //17644 #CJK UNIFIED IDEOGRAPH + {0xE577, 0x9342}, //17645 #CJK UNIFIED IDEOGRAPH + {0xE578, 0x9343}, //17646 #CJK UNIFIED IDEOGRAPH + {0xE579, 0x9344}, //17647 #CJK UNIFIED IDEOGRAPH + {0xE57A, 0x9345}, //17648 #CJK UNIFIED IDEOGRAPH + {0xE57B, 0x9346}, //17649 #CJK UNIFIED IDEOGRAPH + {0xE57C, 0x9347}, //17650 #CJK UNIFIED IDEOGRAPH + {0xE57D, 0x9348}, //17651 #CJK UNIFIED IDEOGRAPH + {0xE57E, 0x9349}, //17652 #CJK UNIFIED IDEOGRAPH + {0xE580, 0x934A}, //17653 #CJK UNIFIED IDEOGRAPH + {0xE581, 0x934B}, //17654 #CJK UNIFIED IDEOGRAPH + {0xE582, 0x934C}, //17655 #CJK UNIFIED IDEOGRAPH + {0xE583, 0x934D}, //17656 #CJK UNIFIED IDEOGRAPH + {0xE584, 0x934E}, //17657 #CJK UNIFIED IDEOGRAPH + {0xE585, 0x934F}, //17658 #CJK UNIFIED IDEOGRAPH + {0xE586, 0x9350}, //17659 #CJK UNIFIED IDEOGRAPH + {0xE587, 0x9351}, //17660 #CJK UNIFIED IDEOGRAPH + {0xE588, 0x9352}, //17661 #CJK UNIFIED IDEOGRAPH + {0xE589, 0x9353}, //17662 #CJK UNIFIED IDEOGRAPH + {0xE58A, 0x9354}, //17663 #CJK UNIFIED IDEOGRAPH + {0xE58B, 0x9355}, //17664 #CJK UNIFIED IDEOGRAPH + {0xE58C, 0x9356}, //17665 #CJK UNIFIED IDEOGRAPH + {0xE58D, 0x9357}, //17666 #CJK UNIFIED IDEOGRAPH + {0xE58E, 0x9358}, //17667 #CJK UNIFIED IDEOGRAPH + {0xE58F, 0x9359}, //17668 #CJK UNIFIED IDEOGRAPH + {0xE590, 0x935A}, //17669 #CJK UNIFIED IDEOGRAPH + {0xE591, 0x935B}, //17670 #CJK UNIFIED IDEOGRAPH + {0xE592, 0x935C}, //17671 #CJK UNIFIED IDEOGRAPH + {0xE593, 0x935D}, //17672 #CJK UNIFIED IDEOGRAPH + {0xE594, 0x935E}, //17673 #CJK UNIFIED IDEOGRAPH + {0xE595, 0x935F}, //17674 #CJK UNIFIED IDEOGRAPH + {0xE596, 0x9360}, //17675 #CJK UNIFIED IDEOGRAPH + {0xE597, 0x9361}, //17676 #CJK UNIFIED IDEOGRAPH + {0xE598, 0x9362}, //17677 #CJK UNIFIED IDEOGRAPH + {0xE599, 0x9363}, //17678 #CJK UNIFIED IDEOGRAPH + {0xE59A, 0x9364}, //17679 #CJK UNIFIED IDEOGRAPH + {0xE59B, 0x9365}, //17680 #CJK UNIFIED IDEOGRAPH + {0xE59C, 0x9366}, //17681 #CJK UNIFIED IDEOGRAPH + {0xE59D, 0x9367}, //17682 #CJK UNIFIED IDEOGRAPH + {0xE59E, 0x9368}, //17683 #CJK UNIFIED IDEOGRAPH + {0xE59F, 0x9369}, //17684 #CJK UNIFIED IDEOGRAPH + {0xE5A0, 0x936B}, //17685 #CJK UNIFIED IDEOGRAPH + {0xE5A1, 0x6FC9}, //17686 #CJK UNIFIED IDEOGRAPH + {0xE5A2, 0x6FA7}, //17687 #CJK UNIFIED IDEOGRAPH + {0xE5A3, 0x6FB9}, //17688 #CJK UNIFIED IDEOGRAPH + {0xE5A4, 0x6FB6}, //17689 #CJK UNIFIED IDEOGRAPH + {0xE5A5, 0x6FC2}, //17690 #CJK UNIFIED IDEOGRAPH + {0xE5A6, 0x6FE1}, //17691 #CJK UNIFIED IDEOGRAPH + {0xE5A7, 0x6FEE}, //17692 #CJK UNIFIED IDEOGRAPH + {0xE5A8, 0x6FDE}, //17693 #CJK UNIFIED IDEOGRAPH + {0xE5A9, 0x6FE0}, //17694 #CJK UNIFIED IDEOGRAPH + {0xE5AA, 0x6FEF}, //17695 #CJK UNIFIED IDEOGRAPH + {0xE5AB, 0x701A}, //17696 #CJK UNIFIED IDEOGRAPH + {0xE5AC, 0x7023}, //17697 #CJK UNIFIED IDEOGRAPH + {0xE5AD, 0x701B}, //17698 #CJK UNIFIED IDEOGRAPH + {0xE5AE, 0x7039}, //17699 #CJK UNIFIED IDEOGRAPH + {0xE5AF, 0x7035}, //17700 #CJK UNIFIED IDEOGRAPH + {0xE5B0, 0x704F}, //17701 #CJK UNIFIED IDEOGRAPH + {0xE5B1, 0x705E}, //17702 #CJK UNIFIED IDEOGRAPH + {0xE5B2, 0x5B80}, //17703 #CJK UNIFIED IDEOGRAPH + {0xE5B3, 0x5B84}, //17704 #CJK UNIFIED IDEOGRAPH + {0xE5B4, 0x5B95}, //17705 #CJK UNIFIED IDEOGRAPH + {0xE5B5, 0x5B93}, //17706 #CJK UNIFIED IDEOGRAPH + {0xE5B6, 0x5BA5}, //17707 #CJK UNIFIED IDEOGRAPH + {0xE5B7, 0x5BB8}, //17708 #CJK UNIFIED IDEOGRAPH + {0xE5B8, 0x752F}, //17709 #CJK UNIFIED IDEOGRAPH + {0xE5B9, 0x9A9E}, //17710 #CJK UNIFIED IDEOGRAPH + {0xE5BA, 0x6434}, //17711 #CJK UNIFIED IDEOGRAPH + {0xE5BB, 0x5BE4}, //17712 #CJK UNIFIED IDEOGRAPH + {0xE5BC, 0x5BEE}, //17713 #CJK UNIFIED IDEOGRAPH + {0xE5BD, 0x8930}, //17714 #CJK UNIFIED IDEOGRAPH + {0xE5BE, 0x5BF0}, //17715 #CJK UNIFIED IDEOGRAPH + {0xE5BF, 0x8E47}, //17716 #CJK UNIFIED IDEOGRAPH + {0xE5C0, 0x8B07}, //17717 #CJK UNIFIED IDEOGRAPH + {0xE5C1, 0x8FB6}, //17718 #CJK UNIFIED IDEOGRAPH + {0xE5C2, 0x8FD3}, //17719 #CJK UNIFIED IDEOGRAPH + {0xE5C3, 0x8FD5}, //17720 #CJK UNIFIED IDEOGRAPH + {0xE5C4, 0x8FE5}, //17721 #CJK UNIFIED IDEOGRAPH + {0xE5C5, 0x8FEE}, //17722 #CJK UNIFIED IDEOGRAPH + {0xE5C6, 0x8FE4}, //17723 #CJK UNIFIED IDEOGRAPH + {0xE5C7, 0x8FE9}, //17724 #CJK UNIFIED IDEOGRAPH + {0xE5C8, 0x8FE6}, //17725 #CJK UNIFIED IDEOGRAPH + {0xE5C9, 0x8FF3}, //17726 #CJK UNIFIED IDEOGRAPH + {0xE5CA, 0x8FE8}, //17727 #CJK UNIFIED IDEOGRAPH + {0xE5CB, 0x9005}, //17728 #CJK UNIFIED IDEOGRAPH + {0xE5CC, 0x9004}, //17729 #CJK UNIFIED IDEOGRAPH + {0xE5CD, 0x900B}, //17730 #CJK UNIFIED IDEOGRAPH + {0xE5CE, 0x9026}, //17731 #CJK UNIFIED IDEOGRAPH + {0xE5CF, 0x9011}, //17732 #CJK UNIFIED IDEOGRAPH + {0xE5D0, 0x900D}, //17733 #CJK UNIFIED IDEOGRAPH + {0xE5D1, 0x9016}, //17734 #CJK UNIFIED IDEOGRAPH + {0xE5D2, 0x9021}, //17735 #CJK UNIFIED IDEOGRAPH + {0xE5D3, 0x9035}, //17736 #CJK UNIFIED IDEOGRAPH + {0xE5D4, 0x9036}, //17737 #CJK UNIFIED IDEOGRAPH + {0xE5D5, 0x902D}, //17738 #CJK UNIFIED IDEOGRAPH + {0xE5D6, 0x902F}, //17739 #CJK UNIFIED IDEOGRAPH + {0xE5D7, 0x9044}, //17740 #CJK UNIFIED IDEOGRAPH + {0xE5D8, 0x9051}, //17741 #CJK UNIFIED IDEOGRAPH + {0xE5D9, 0x9052}, //17742 #CJK UNIFIED IDEOGRAPH + {0xE5DA, 0x9050}, //17743 #CJK UNIFIED IDEOGRAPH + {0xE5DB, 0x9068}, //17744 #CJK UNIFIED IDEOGRAPH + {0xE5DC, 0x9058}, //17745 #CJK UNIFIED IDEOGRAPH + {0xE5DD, 0x9062}, //17746 #CJK UNIFIED IDEOGRAPH + {0xE5DE, 0x905B}, //17747 #CJK UNIFIED IDEOGRAPH + {0xE5DF, 0x66B9}, //17748 #CJK UNIFIED IDEOGRAPH + {0xE5E0, 0x9074}, //17749 #CJK UNIFIED IDEOGRAPH + {0xE5E1, 0x907D}, //17750 #CJK UNIFIED IDEOGRAPH + {0xE5E2, 0x9082}, //17751 #CJK UNIFIED IDEOGRAPH + {0xE5E3, 0x9088}, //17752 #CJK UNIFIED IDEOGRAPH + {0xE5E4, 0x9083}, //17753 #CJK UNIFIED IDEOGRAPH + {0xE5E5, 0x908B}, //17754 #CJK UNIFIED IDEOGRAPH + {0xE5E6, 0x5F50}, //17755 #CJK UNIFIED IDEOGRAPH + {0xE5E7, 0x5F57}, //17756 #CJK UNIFIED IDEOGRAPH + {0xE5E8, 0x5F56}, //17757 #CJK UNIFIED IDEOGRAPH + {0xE5E9, 0x5F58}, //17758 #CJK UNIFIED IDEOGRAPH + {0xE5EA, 0x5C3B}, //17759 #CJK UNIFIED IDEOGRAPH + {0xE5EB, 0x54AB}, //17760 #CJK UNIFIED IDEOGRAPH + {0xE5EC, 0x5C50}, //17761 #CJK UNIFIED IDEOGRAPH + {0xE5ED, 0x5C59}, //17762 #CJK UNIFIED IDEOGRAPH + {0xE5EE, 0x5B71}, //17763 #CJK UNIFIED IDEOGRAPH + {0xE5EF, 0x5C63}, //17764 #CJK UNIFIED IDEOGRAPH + {0xE5F0, 0x5C66}, //17765 #CJK UNIFIED IDEOGRAPH + {0xE5F1, 0x7FBC}, //17766 #CJK UNIFIED IDEOGRAPH + {0xE5F2, 0x5F2A}, //17767 #CJK UNIFIED IDEOGRAPH + {0xE5F3, 0x5F29}, //17768 #CJK UNIFIED IDEOGRAPH + {0xE5F4, 0x5F2D}, //17769 #CJK UNIFIED IDEOGRAPH + {0xE5F5, 0x8274}, //17770 #CJK UNIFIED IDEOGRAPH + {0xE5F6, 0x5F3C}, //17771 #CJK UNIFIED IDEOGRAPH + {0xE5F7, 0x9B3B}, //17772 #CJK UNIFIED IDEOGRAPH + {0xE5F8, 0x5C6E}, //17773 #CJK UNIFIED IDEOGRAPH + {0xE5F9, 0x5981}, //17774 #CJK UNIFIED IDEOGRAPH + {0xE5FA, 0x5983}, //17775 #CJK UNIFIED IDEOGRAPH + {0xE5FB, 0x598D}, //17776 #CJK UNIFIED IDEOGRAPH + {0xE5FC, 0x59A9}, //17777 #CJK UNIFIED IDEOGRAPH + {0xE5FD, 0x59AA}, //17778 #CJK UNIFIED IDEOGRAPH + {0xE5FE, 0x59A3}, //17779 #CJK UNIFIED IDEOGRAPH + {0xE640, 0x936C}, //17780 #CJK UNIFIED IDEOGRAPH + {0xE641, 0x936D}, //17781 #CJK UNIFIED IDEOGRAPH + {0xE642, 0x936E}, //17782 #CJK UNIFIED IDEOGRAPH + {0xE643, 0x936F}, //17783 #CJK UNIFIED IDEOGRAPH + {0xE644, 0x9370}, //17784 #CJK UNIFIED IDEOGRAPH + {0xE645, 0x9371}, //17785 #CJK UNIFIED IDEOGRAPH + {0xE646, 0x9372}, //17786 #CJK UNIFIED IDEOGRAPH + {0xE647, 0x9373}, //17787 #CJK UNIFIED IDEOGRAPH + {0xE648, 0x9374}, //17788 #CJK UNIFIED IDEOGRAPH + {0xE649, 0x9375}, //17789 #CJK UNIFIED IDEOGRAPH + {0xE64A, 0x9376}, //17790 #CJK UNIFIED IDEOGRAPH + {0xE64B, 0x9377}, //17791 #CJK UNIFIED IDEOGRAPH + {0xE64C, 0x9378}, //17792 #CJK UNIFIED IDEOGRAPH + {0xE64D, 0x9379}, //17793 #CJK UNIFIED IDEOGRAPH + {0xE64E, 0x937A}, //17794 #CJK UNIFIED IDEOGRAPH + {0xE64F, 0x937B}, //17795 #CJK UNIFIED IDEOGRAPH + {0xE650, 0x937C}, //17796 #CJK UNIFIED IDEOGRAPH + {0xE651, 0x937D}, //17797 #CJK UNIFIED IDEOGRAPH + {0xE652, 0x937E}, //17798 #CJK UNIFIED IDEOGRAPH + {0xE653, 0x937F}, //17799 #CJK UNIFIED IDEOGRAPH + {0xE654, 0x9380}, //17800 #CJK UNIFIED IDEOGRAPH + {0xE655, 0x9381}, //17801 #CJK UNIFIED IDEOGRAPH + {0xE656, 0x9382}, //17802 #CJK UNIFIED IDEOGRAPH + {0xE657, 0x9383}, //17803 #CJK UNIFIED IDEOGRAPH + {0xE658, 0x9384}, //17804 #CJK UNIFIED IDEOGRAPH + {0xE659, 0x9385}, //17805 #CJK UNIFIED IDEOGRAPH + {0xE65A, 0x9386}, //17806 #CJK UNIFIED IDEOGRAPH + {0xE65B, 0x9387}, //17807 #CJK UNIFIED IDEOGRAPH + {0xE65C, 0x9388}, //17808 #CJK UNIFIED IDEOGRAPH + {0xE65D, 0x9389}, //17809 #CJK UNIFIED IDEOGRAPH + {0xE65E, 0x938A}, //17810 #CJK UNIFIED IDEOGRAPH + {0xE65F, 0x938B}, //17811 #CJK UNIFIED IDEOGRAPH + {0xE660, 0x938C}, //17812 #CJK UNIFIED IDEOGRAPH + {0xE661, 0x938D}, //17813 #CJK UNIFIED IDEOGRAPH + {0xE662, 0x938E}, //17814 #CJK UNIFIED IDEOGRAPH + {0xE663, 0x9390}, //17815 #CJK UNIFIED IDEOGRAPH + {0xE664, 0x9391}, //17816 #CJK UNIFIED IDEOGRAPH + {0xE665, 0x9392}, //17817 #CJK UNIFIED IDEOGRAPH + {0xE666, 0x9393}, //17818 #CJK UNIFIED IDEOGRAPH + {0xE667, 0x9394}, //17819 #CJK UNIFIED IDEOGRAPH + {0xE668, 0x9395}, //17820 #CJK UNIFIED IDEOGRAPH + {0xE669, 0x9396}, //17821 #CJK UNIFIED IDEOGRAPH + {0xE66A, 0x9397}, //17822 #CJK UNIFIED IDEOGRAPH + {0xE66B, 0x9398}, //17823 #CJK UNIFIED IDEOGRAPH + {0xE66C, 0x9399}, //17824 #CJK UNIFIED IDEOGRAPH + {0xE66D, 0x939A}, //17825 #CJK UNIFIED IDEOGRAPH + {0xE66E, 0x939B}, //17826 #CJK UNIFIED IDEOGRAPH + {0xE66F, 0x939C}, //17827 #CJK UNIFIED IDEOGRAPH + {0xE670, 0x939D}, //17828 #CJK UNIFIED IDEOGRAPH + {0xE671, 0x939E}, //17829 #CJK UNIFIED IDEOGRAPH + {0xE672, 0x939F}, //17830 #CJK UNIFIED IDEOGRAPH + {0xE673, 0x93A0}, //17831 #CJK UNIFIED IDEOGRAPH + {0xE674, 0x93A1}, //17832 #CJK UNIFIED IDEOGRAPH + {0xE675, 0x93A2}, //17833 #CJK UNIFIED IDEOGRAPH + {0xE676, 0x93A3}, //17834 #CJK UNIFIED IDEOGRAPH + {0xE677, 0x93A4}, //17835 #CJK UNIFIED IDEOGRAPH + {0xE678, 0x93A5}, //17836 #CJK UNIFIED IDEOGRAPH + {0xE679, 0x93A6}, //17837 #CJK UNIFIED IDEOGRAPH + {0xE67A, 0x93A7}, //17838 #CJK UNIFIED IDEOGRAPH + {0xE67B, 0x93A8}, //17839 #CJK UNIFIED IDEOGRAPH + {0xE67C, 0x93A9}, //17840 #CJK UNIFIED IDEOGRAPH + {0xE67D, 0x93AA}, //17841 #CJK UNIFIED IDEOGRAPH + {0xE67E, 0x93AB}, //17842 #CJK UNIFIED IDEOGRAPH + {0xE680, 0x93AC}, //17843 #CJK UNIFIED IDEOGRAPH + {0xE681, 0x93AD}, //17844 #CJK UNIFIED IDEOGRAPH + {0xE682, 0x93AE}, //17845 #CJK UNIFIED IDEOGRAPH + {0xE683, 0x93AF}, //17846 #CJK UNIFIED IDEOGRAPH + {0xE684, 0x93B0}, //17847 #CJK UNIFIED IDEOGRAPH + {0xE685, 0x93B1}, //17848 #CJK UNIFIED IDEOGRAPH + {0xE686, 0x93B2}, //17849 #CJK UNIFIED IDEOGRAPH + {0xE687, 0x93B3}, //17850 #CJK UNIFIED IDEOGRAPH + {0xE688, 0x93B4}, //17851 #CJK UNIFIED IDEOGRAPH + {0xE689, 0x93B5}, //17852 #CJK UNIFIED IDEOGRAPH + {0xE68A, 0x93B6}, //17853 #CJK UNIFIED IDEOGRAPH + {0xE68B, 0x93B7}, //17854 #CJK UNIFIED IDEOGRAPH + {0xE68C, 0x93B8}, //17855 #CJK UNIFIED IDEOGRAPH + {0xE68D, 0x93B9}, //17856 #CJK UNIFIED IDEOGRAPH + {0xE68E, 0x93BA}, //17857 #CJK UNIFIED IDEOGRAPH + {0xE68F, 0x93BB}, //17858 #CJK UNIFIED IDEOGRAPH + {0xE690, 0x93BC}, //17859 #CJK UNIFIED IDEOGRAPH + {0xE691, 0x93BD}, //17860 #CJK UNIFIED IDEOGRAPH + {0xE692, 0x93BE}, //17861 #CJK UNIFIED IDEOGRAPH + {0xE693, 0x93BF}, //17862 #CJK UNIFIED IDEOGRAPH + {0xE694, 0x93C0}, //17863 #CJK UNIFIED IDEOGRAPH + {0xE695, 0x93C1}, //17864 #CJK UNIFIED IDEOGRAPH + {0xE696, 0x93C2}, //17865 #CJK UNIFIED IDEOGRAPH + {0xE697, 0x93C3}, //17866 #CJK UNIFIED IDEOGRAPH + {0xE698, 0x93C4}, //17867 #CJK UNIFIED IDEOGRAPH + {0xE699, 0x93C5}, //17868 #CJK UNIFIED IDEOGRAPH + {0xE69A, 0x93C6}, //17869 #CJK UNIFIED IDEOGRAPH + {0xE69B, 0x93C7}, //17870 #CJK UNIFIED IDEOGRAPH + {0xE69C, 0x93C8}, //17871 #CJK UNIFIED IDEOGRAPH + {0xE69D, 0x93C9}, //17872 #CJK UNIFIED IDEOGRAPH + {0xE69E, 0x93CB}, //17873 #CJK UNIFIED IDEOGRAPH + {0xE69F, 0x93CC}, //17874 #CJK UNIFIED IDEOGRAPH + {0xE6A0, 0x93CD}, //17875 #CJK UNIFIED IDEOGRAPH + {0xE6A1, 0x5997}, //17876 #CJK UNIFIED IDEOGRAPH + {0xE6A2, 0x59CA}, //17877 #CJK UNIFIED IDEOGRAPH + {0xE6A3, 0x59AB}, //17878 #CJK UNIFIED IDEOGRAPH + {0xE6A4, 0x599E}, //17879 #CJK UNIFIED IDEOGRAPH + {0xE6A5, 0x59A4}, //17880 #CJK UNIFIED IDEOGRAPH + {0xE6A6, 0x59D2}, //17881 #CJK UNIFIED IDEOGRAPH + {0xE6A7, 0x59B2}, //17882 #CJK UNIFIED IDEOGRAPH + {0xE6A8, 0x59AF}, //17883 #CJK UNIFIED IDEOGRAPH + {0xE6A9, 0x59D7}, //17884 #CJK UNIFIED IDEOGRAPH + {0xE6AA, 0x59BE}, //17885 #CJK UNIFIED IDEOGRAPH + {0xE6AB, 0x5A05}, //17886 #CJK UNIFIED IDEOGRAPH + {0xE6AC, 0x5A06}, //17887 #CJK UNIFIED IDEOGRAPH + {0xE6AD, 0x59DD}, //17888 #CJK UNIFIED IDEOGRAPH + {0xE6AE, 0x5A08}, //17889 #CJK UNIFIED IDEOGRAPH + {0xE6AF, 0x59E3}, //17890 #CJK UNIFIED IDEOGRAPH + {0xE6B0, 0x59D8}, //17891 #CJK UNIFIED IDEOGRAPH + {0xE6B1, 0x59F9}, //17892 #CJK UNIFIED IDEOGRAPH + {0xE6B2, 0x5A0C}, //17893 #CJK UNIFIED IDEOGRAPH + {0xE6B3, 0x5A09}, //17894 #CJK UNIFIED IDEOGRAPH + {0xE6B4, 0x5A32}, //17895 #CJK UNIFIED IDEOGRAPH + {0xE6B5, 0x5A34}, //17896 #CJK UNIFIED IDEOGRAPH + {0xE6B6, 0x5A11}, //17897 #CJK UNIFIED IDEOGRAPH + {0xE6B7, 0x5A23}, //17898 #CJK UNIFIED IDEOGRAPH + {0xE6B8, 0x5A13}, //17899 #CJK UNIFIED IDEOGRAPH + {0xE6B9, 0x5A40}, //17900 #CJK UNIFIED IDEOGRAPH + {0xE6BA, 0x5A67}, //17901 #CJK UNIFIED IDEOGRAPH + {0xE6BB, 0x5A4A}, //17902 #CJK UNIFIED IDEOGRAPH + {0xE6BC, 0x5A55}, //17903 #CJK UNIFIED IDEOGRAPH + {0xE6BD, 0x5A3C}, //17904 #CJK UNIFIED IDEOGRAPH + {0xE6BE, 0x5A62}, //17905 #CJK UNIFIED IDEOGRAPH + {0xE6BF, 0x5A75}, //17906 #CJK UNIFIED IDEOGRAPH + {0xE6C0, 0x80EC}, //17907 #CJK UNIFIED IDEOGRAPH + {0xE6C1, 0x5AAA}, //17908 #CJK UNIFIED IDEOGRAPH + {0xE6C2, 0x5A9B}, //17909 #CJK UNIFIED IDEOGRAPH + {0xE6C3, 0x5A77}, //17910 #CJK UNIFIED IDEOGRAPH + {0xE6C4, 0x5A7A}, //17911 #CJK UNIFIED IDEOGRAPH + {0xE6C5, 0x5ABE}, //17912 #CJK UNIFIED IDEOGRAPH + {0xE6C6, 0x5AEB}, //17913 #CJK UNIFIED IDEOGRAPH + {0xE6C7, 0x5AB2}, //17914 #CJK UNIFIED IDEOGRAPH + {0xE6C8, 0x5AD2}, //17915 #CJK UNIFIED IDEOGRAPH + {0xE6C9, 0x5AD4}, //17916 #CJK UNIFIED IDEOGRAPH + {0xE6CA, 0x5AB8}, //17917 #CJK UNIFIED IDEOGRAPH + {0xE6CB, 0x5AE0}, //17918 #CJK UNIFIED IDEOGRAPH + {0xE6CC, 0x5AE3}, //17919 #CJK UNIFIED IDEOGRAPH + {0xE6CD, 0x5AF1}, //17920 #CJK UNIFIED IDEOGRAPH + {0xE6CE, 0x5AD6}, //17921 #CJK UNIFIED IDEOGRAPH + {0xE6CF, 0x5AE6}, //17922 #CJK UNIFIED IDEOGRAPH + {0xE6D0, 0x5AD8}, //17923 #CJK UNIFIED IDEOGRAPH + {0xE6D1, 0x5ADC}, //17924 #CJK UNIFIED IDEOGRAPH + {0xE6D2, 0x5B09}, //17925 #CJK UNIFIED IDEOGRAPH + {0xE6D3, 0x5B17}, //17926 #CJK UNIFIED IDEOGRAPH + {0xE6D4, 0x5B16}, //17927 #CJK UNIFIED IDEOGRAPH + {0xE6D5, 0x5B32}, //17928 #CJK UNIFIED IDEOGRAPH + {0xE6D6, 0x5B37}, //17929 #CJK UNIFIED IDEOGRAPH + {0xE6D7, 0x5B40}, //17930 #CJK UNIFIED IDEOGRAPH + {0xE6D8, 0x5C15}, //17931 #CJK UNIFIED IDEOGRAPH + {0xE6D9, 0x5C1C}, //17932 #CJK UNIFIED IDEOGRAPH + {0xE6DA, 0x5B5A}, //17933 #CJK UNIFIED IDEOGRAPH + {0xE6DB, 0x5B65}, //17934 #CJK UNIFIED IDEOGRAPH + {0xE6DC, 0x5B73}, //17935 #CJK UNIFIED IDEOGRAPH + {0xE6DD, 0x5B51}, //17936 #CJK UNIFIED IDEOGRAPH + {0xE6DE, 0x5B53}, //17937 #CJK UNIFIED IDEOGRAPH + {0xE6DF, 0x5B62}, //17938 #CJK UNIFIED IDEOGRAPH + {0xE6E0, 0x9A75}, //17939 #CJK UNIFIED IDEOGRAPH + {0xE6E1, 0x9A77}, //17940 #CJK UNIFIED IDEOGRAPH + {0xE6E2, 0x9A78}, //17941 #CJK UNIFIED IDEOGRAPH + {0xE6E3, 0x9A7A}, //17942 #CJK UNIFIED IDEOGRAPH + {0xE6E4, 0x9A7F}, //17943 #CJK UNIFIED IDEOGRAPH + {0xE6E5, 0x9A7D}, //17944 #CJK UNIFIED IDEOGRAPH + {0xE6E6, 0x9A80}, //17945 #CJK UNIFIED IDEOGRAPH + {0xE6E7, 0x9A81}, //17946 #CJK UNIFIED IDEOGRAPH + {0xE6E8, 0x9A85}, //17947 #CJK UNIFIED IDEOGRAPH + {0xE6E9, 0x9A88}, //17948 #CJK UNIFIED IDEOGRAPH + {0xE6EA, 0x9A8A}, //17949 #CJK UNIFIED IDEOGRAPH + {0xE6EB, 0x9A90}, //17950 #CJK UNIFIED IDEOGRAPH + {0xE6EC, 0x9A92}, //17951 #CJK UNIFIED IDEOGRAPH + {0xE6ED, 0x9A93}, //17952 #CJK UNIFIED IDEOGRAPH + {0xE6EE, 0x9A96}, //17953 #CJK UNIFIED IDEOGRAPH + {0xE6EF, 0x9A98}, //17954 #CJK UNIFIED IDEOGRAPH + {0xE6F0, 0x9A9B}, //17955 #CJK UNIFIED IDEOGRAPH + {0xE6F1, 0x9A9C}, //17956 #CJK UNIFIED IDEOGRAPH + {0xE6F2, 0x9A9D}, //17957 #CJK UNIFIED IDEOGRAPH + {0xE6F3, 0x9A9F}, //17958 #CJK UNIFIED IDEOGRAPH + {0xE6F4, 0x9AA0}, //17959 #CJK UNIFIED IDEOGRAPH + {0xE6F5, 0x9AA2}, //17960 #CJK UNIFIED IDEOGRAPH + {0xE6F6, 0x9AA3}, //17961 #CJK UNIFIED IDEOGRAPH + {0xE6F7, 0x9AA5}, //17962 #CJK UNIFIED IDEOGRAPH + {0xE6F8, 0x9AA7}, //17963 #CJK UNIFIED IDEOGRAPH + {0xE6F9, 0x7E9F}, //17964 #CJK UNIFIED IDEOGRAPH + {0xE6FA, 0x7EA1}, //17965 #CJK UNIFIED IDEOGRAPH + {0xE6FB, 0x7EA3}, //17966 #CJK UNIFIED IDEOGRAPH + {0xE6FC, 0x7EA5}, //17967 #CJK UNIFIED IDEOGRAPH + {0xE6FD, 0x7EA8}, //17968 #CJK UNIFIED IDEOGRAPH + {0xE6FE, 0x7EA9}, //17969 #CJK UNIFIED IDEOGRAPH + {0xE740, 0x93CE}, //17970 #CJK UNIFIED IDEOGRAPH + {0xE741, 0x93CF}, //17971 #CJK UNIFIED IDEOGRAPH + {0xE742, 0x93D0}, //17972 #CJK UNIFIED IDEOGRAPH + {0xE743, 0x93D1}, //17973 #CJK UNIFIED IDEOGRAPH + {0xE744, 0x93D2}, //17974 #CJK UNIFIED IDEOGRAPH + {0xE745, 0x93D3}, //17975 #CJK UNIFIED IDEOGRAPH + {0xE746, 0x93D4}, //17976 #CJK UNIFIED IDEOGRAPH + {0xE747, 0x93D5}, //17977 #CJK UNIFIED IDEOGRAPH + {0xE748, 0x93D7}, //17978 #CJK UNIFIED IDEOGRAPH + {0xE749, 0x93D8}, //17979 #CJK UNIFIED IDEOGRAPH + {0xE74A, 0x93D9}, //17980 #CJK UNIFIED IDEOGRAPH + {0xE74B, 0x93DA}, //17981 #CJK UNIFIED IDEOGRAPH + {0xE74C, 0x93DB}, //17982 #CJK UNIFIED IDEOGRAPH + {0xE74D, 0x93DC}, //17983 #CJK UNIFIED IDEOGRAPH + {0xE74E, 0x93DD}, //17984 #CJK UNIFIED IDEOGRAPH + {0xE74F, 0x93DE}, //17985 #CJK UNIFIED IDEOGRAPH + {0xE750, 0x93DF}, //17986 #CJK UNIFIED IDEOGRAPH + {0xE751, 0x93E0}, //17987 #CJK UNIFIED IDEOGRAPH + {0xE752, 0x93E1}, //17988 #CJK UNIFIED IDEOGRAPH + {0xE753, 0x93E2}, //17989 #CJK UNIFIED IDEOGRAPH + {0xE754, 0x93E3}, //17990 #CJK UNIFIED IDEOGRAPH + {0xE755, 0x93E4}, //17991 #CJK UNIFIED IDEOGRAPH + {0xE756, 0x93E5}, //17992 #CJK UNIFIED IDEOGRAPH + {0xE757, 0x93E6}, //17993 #CJK UNIFIED IDEOGRAPH + {0xE758, 0x93E7}, //17994 #CJK UNIFIED IDEOGRAPH + {0xE759, 0x93E8}, //17995 #CJK UNIFIED IDEOGRAPH + {0xE75A, 0x93E9}, //17996 #CJK UNIFIED IDEOGRAPH + {0xE75B, 0x93EA}, //17997 #CJK UNIFIED IDEOGRAPH + {0xE75C, 0x93EB}, //17998 #CJK UNIFIED IDEOGRAPH + {0xE75D, 0x93EC}, //17999 #CJK UNIFIED IDEOGRAPH + {0xE75E, 0x93ED}, //18000 #CJK UNIFIED IDEOGRAPH + {0xE75F, 0x93EE}, //18001 #CJK UNIFIED IDEOGRAPH + {0xE760, 0x93EF}, //18002 #CJK UNIFIED IDEOGRAPH + {0xE761, 0x93F0}, //18003 #CJK UNIFIED IDEOGRAPH + {0xE762, 0x93F1}, //18004 #CJK UNIFIED IDEOGRAPH + {0xE763, 0x93F2}, //18005 #CJK UNIFIED IDEOGRAPH + {0xE764, 0x93F3}, //18006 #CJK UNIFIED IDEOGRAPH + {0xE765, 0x93F4}, //18007 #CJK UNIFIED IDEOGRAPH + {0xE766, 0x93F5}, //18008 #CJK UNIFIED IDEOGRAPH + {0xE767, 0x93F6}, //18009 #CJK UNIFIED IDEOGRAPH + {0xE768, 0x93F7}, //18010 #CJK UNIFIED IDEOGRAPH + {0xE769, 0x93F8}, //18011 #CJK UNIFIED IDEOGRAPH + {0xE76A, 0x93F9}, //18012 #CJK UNIFIED IDEOGRAPH + {0xE76B, 0x93FA}, //18013 #CJK UNIFIED IDEOGRAPH + {0xE76C, 0x93FB}, //18014 #CJK UNIFIED IDEOGRAPH + {0xE76D, 0x93FC}, //18015 #CJK UNIFIED IDEOGRAPH + {0xE76E, 0x93FD}, //18016 #CJK UNIFIED IDEOGRAPH + {0xE76F, 0x93FE}, //18017 #CJK UNIFIED IDEOGRAPH + {0xE770, 0x93FF}, //18018 #CJK UNIFIED IDEOGRAPH + {0xE771, 0x9400}, //18019 #CJK UNIFIED IDEOGRAPH + {0xE772, 0x9401}, //18020 #CJK UNIFIED IDEOGRAPH + {0xE773, 0x9402}, //18021 #CJK UNIFIED IDEOGRAPH + {0xE774, 0x9403}, //18022 #CJK UNIFIED IDEOGRAPH + {0xE775, 0x9404}, //18023 #CJK UNIFIED IDEOGRAPH + {0xE776, 0x9405}, //18024 #CJK UNIFIED IDEOGRAPH + {0xE777, 0x9406}, //18025 #CJK UNIFIED IDEOGRAPH + {0xE778, 0x9407}, //18026 #CJK UNIFIED IDEOGRAPH + {0xE779, 0x9408}, //18027 #CJK UNIFIED IDEOGRAPH + {0xE77A, 0x9409}, //18028 #CJK UNIFIED IDEOGRAPH + {0xE77B, 0x940A}, //18029 #CJK UNIFIED IDEOGRAPH + {0xE77C, 0x940B}, //18030 #CJK UNIFIED IDEOGRAPH + {0xE77D, 0x940C}, //18031 #CJK UNIFIED IDEOGRAPH + {0xE77E, 0x940D}, //18032 #CJK UNIFIED IDEOGRAPH + {0xE780, 0x940E}, //18033 #CJK UNIFIED IDEOGRAPH + {0xE781, 0x940F}, //18034 #CJK UNIFIED IDEOGRAPH + {0xE782, 0x9410}, //18035 #CJK UNIFIED IDEOGRAPH + {0xE783, 0x9411}, //18036 #CJK UNIFIED IDEOGRAPH + {0xE784, 0x9412}, //18037 #CJK UNIFIED IDEOGRAPH + {0xE785, 0x9413}, //18038 #CJK UNIFIED IDEOGRAPH + {0xE786, 0x9414}, //18039 #CJK UNIFIED IDEOGRAPH + {0xE787, 0x9415}, //18040 #CJK UNIFIED IDEOGRAPH + {0xE788, 0x9416}, //18041 #CJK UNIFIED IDEOGRAPH + {0xE789, 0x9417}, //18042 #CJK UNIFIED IDEOGRAPH + {0xE78A, 0x9418}, //18043 #CJK UNIFIED IDEOGRAPH + {0xE78B, 0x9419}, //18044 #CJK UNIFIED IDEOGRAPH + {0xE78C, 0x941A}, //18045 #CJK UNIFIED IDEOGRAPH + {0xE78D, 0x941B}, //18046 #CJK UNIFIED IDEOGRAPH + {0xE78E, 0x941C}, //18047 #CJK UNIFIED IDEOGRAPH + {0xE78F, 0x941D}, //18048 #CJK UNIFIED IDEOGRAPH + {0xE790, 0x941E}, //18049 #CJK UNIFIED IDEOGRAPH + {0xE791, 0x941F}, //18050 #CJK UNIFIED IDEOGRAPH + {0xE792, 0x9420}, //18051 #CJK UNIFIED IDEOGRAPH + {0xE793, 0x9421}, //18052 #CJK UNIFIED IDEOGRAPH + {0xE794, 0x9422}, //18053 #CJK UNIFIED IDEOGRAPH + {0xE795, 0x9423}, //18054 #CJK UNIFIED IDEOGRAPH + {0xE796, 0x9424}, //18055 #CJK UNIFIED IDEOGRAPH + {0xE797, 0x9425}, //18056 #CJK UNIFIED IDEOGRAPH + {0xE798, 0x9426}, //18057 #CJK UNIFIED IDEOGRAPH + {0xE799, 0x9427}, //18058 #CJK UNIFIED IDEOGRAPH + {0xE79A, 0x9428}, //18059 #CJK UNIFIED IDEOGRAPH + {0xE79B, 0x9429}, //18060 #CJK UNIFIED IDEOGRAPH + {0xE79C, 0x942A}, //18061 #CJK UNIFIED IDEOGRAPH + {0xE79D, 0x942B}, //18062 #CJK UNIFIED IDEOGRAPH + {0xE79E, 0x942C}, //18063 #CJK UNIFIED IDEOGRAPH + {0xE79F, 0x942D}, //18064 #CJK UNIFIED IDEOGRAPH + {0xE7A0, 0x942E}, //18065 #CJK UNIFIED IDEOGRAPH + {0xE7A1, 0x7EAD}, //18066 #CJK UNIFIED IDEOGRAPH + {0xE7A2, 0x7EB0}, //18067 #CJK UNIFIED IDEOGRAPH + {0xE7A3, 0x7EBE}, //18068 #CJK UNIFIED IDEOGRAPH + {0xE7A4, 0x7EC0}, //18069 #CJK UNIFIED IDEOGRAPH + {0xE7A5, 0x7EC1}, //18070 #CJK UNIFIED IDEOGRAPH + {0xE7A6, 0x7EC2}, //18071 #CJK UNIFIED IDEOGRAPH + {0xE7A7, 0x7EC9}, //18072 #CJK UNIFIED IDEOGRAPH + {0xE7A8, 0x7ECB}, //18073 #CJK UNIFIED IDEOGRAPH + {0xE7A9, 0x7ECC}, //18074 #CJK UNIFIED IDEOGRAPH + {0xE7AA, 0x7ED0}, //18075 #CJK UNIFIED IDEOGRAPH + {0xE7AB, 0x7ED4}, //18076 #CJK UNIFIED IDEOGRAPH + {0xE7AC, 0x7ED7}, //18077 #CJK UNIFIED IDEOGRAPH + {0xE7AD, 0x7EDB}, //18078 #CJK UNIFIED IDEOGRAPH + {0xE7AE, 0x7EE0}, //18079 #CJK UNIFIED IDEOGRAPH + {0xE7AF, 0x7EE1}, //18080 #CJK UNIFIED IDEOGRAPH + {0xE7B0, 0x7EE8}, //18081 #CJK UNIFIED IDEOGRAPH + {0xE7B1, 0x7EEB}, //18082 #CJK UNIFIED IDEOGRAPH + {0xE7B2, 0x7EEE}, //18083 #CJK UNIFIED IDEOGRAPH + {0xE7B3, 0x7EEF}, //18084 #CJK UNIFIED IDEOGRAPH + {0xE7B4, 0x7EF1}, //18085 #CJK UNIFIED IDEOGRAPH + {0xE7B5, 0x7EF2}, //18086 #CJK UNIFIED IDEOGRAPH + {0xE7B6, 0x7F0D}, //18087 #CJK UNIFIED IDEOGRAPH + {0xE7B7, 0x7EF6}, //18088 #CJK UNIFIED IDEOGRAPH + {0xE7B8, 0x7EFA}, //18089 #CJK UNIFIED IDEOGRAPH + {0xE7B9, 0x7EFB}, //18090 #CJK UNIFIED IDEOGRAPH + {0xE7BA, 0x7EFE}, //18091 #CJK UNIFIED IDEOGRAPH + {0xE7BB, 0x7F01}, //18092 #CJK UNIFIED IDEOGRAPH + {0xE7BC, 0x7F02}, //18093 #CJK UNIFIED IDEOGRAPH + {0xE7BD, 0x7F03}, //18094 #CJK UNIFIED IDEOGRAPH + {0xE7BE, 0x7F07}, //18095 #CJK UNIFIED IDEOGRAPH + {0xE7BF, 0x7F08}, //18096 #CJK UNIFIED IDEOGRAPH + {0xE7C0, 0x7F0B}, //18097 #CJK UNIFIED IDEOGRAPH + {0xE7C1, 0x7F0C}, //18098 #CJK UNIFIED IDEOGRAPH + {0xE7C2, 0x7F0F}, //18099 #CJK UNIFIED IDEOGRAPH + {0xE7C3, 0x7F11}, //18100 #CJK UNIFIED IDEOGRAPH + {0xE7C4, 0x7F12}, //18101 #CJK UNIFIED IDEOGRAPH + {0xE7C5, 0x7F17}, //18102 #CJK UNIFIED IDEOGRAPH + {0xE7C6, 0x7F19}, //18103 #CJK UNIFIED IDEOGRAPH + {0xE7C7, 0x7F1C}, //18104 #CJK UNIFIED IDEOGRAPH + {0xE7C8, 0x7F1B}, //18105 #CJK UNIFIED IDEOGRAPH + {0xE7C9, 0x7F1F}, //18106 #CJK UNIFIED IDEOGRAPH + {0xE7CA, 0x7F21}, //18107 #CJK UNIFIED IDEOGRAPH + {0xE7CB, 0x7F22}, //18108 #CJK UNIFIED IDEOGRAPH + {0xE7CC, 0x7F23}, //18109 #CJK UNIFIED IDEOGRAPH + {0xE7CD, 0x7F24}, //18110 #CJK UNIFIED IDEOGRAPH + {0xE7CE, 0x7F25}, //18111 #CJK UNIFIED IDEOGRAPH + {0xE7CF, 0x7F26}, //18112 #CJK UNIFIED IDEOGRAPH + {0xE7D0, 0x7F27}, //18113 #CJK UNIFIED IDEOGRAPH + {0xE7D1, 0x7F2A}, //18114 #CJK UNIFIED IDEOGRAPH + {0xE7D2, 0x7F2B}, //18115 #CJK UNIFIED IDEOGRAPH + {0xE7D3, 0x7F2C}, //18116 #CJK UNIFIED IDEOGRAPH + {0xE7D4, 0x7F2D}, //18117 #CJK UNIFIED IDEOGRAPH + {0xE7D5, 0x7F2F}, //18118 #CJK UNIFIED IDEOGRAPH + {0xE7D6, 0x7F30}, //18119 #CJK UNIFIED IDEOGRAPH + {0xE7D7, 0x7F31}, //18120 #CJK UNIFIED IDEOGRAPH + {0xE7D8, 0x7F32}, //18121 #CJK UNIFIED IDEOGRAPH + {0xE7D9, 0x7F33}, //18122 #CJK UNIFIED IDEOGRAPH + {0xE7DA, 0x7F35}, //18123 #CJK UNIFIED IDEOGRAPH + {0xE7DB, 0x5E7A}, //18124 #CJK UNIFIED IDEOGRAPH + {0xE7DC, 0x757F}, //18125 #CJK UNIFIED IDEOGRAPH + {0xE7DD, 0x5DDB}, //18126 #CJK UNIFIED IDEOGRAPH + {0xE7DE, 0x753E}, //18127 #CJK UNIFIED IDEOGRAPH + {0xE7DF, 0x9095}, //18128 #CJK UNIFIED IDEOGRAPH + {0xE7E0, 0x738E}, //18129 #CJK UNIFIED IDEOGRAPH + {0xE7E1, 0x7391}, //18130 #CJK UNIFIED IDEOGRAPH + {0xE7E2, 0x73AE}, //18131 #CJK UNIFIED IDEOGRAPH + {0xE7E3, 0x73A2}, //18132 #CJK UNIFIED IDEOGRAPH + {0xE7E4, 0x739F}, //18133 #CJK UNIFIED IDEOGRAPH + {0xE7E5, 0x73CF}, //18134 #CJK UNIFIED IDEOGRAPH + {0xE7E6, 0x73C2}, //18135 #CJK UNIFIED IDEOGRAPH + {0xE7E7, 0x73D1}, //18136 #CJK UNIFIED IDEOGRAPH + {0xE7E8, 0x73B7}, //18137 #CJK UNIFIED IDEOGRAPH + {0xE7E9, 0x73B3}, //18138 #CJK UNIFIED IDEOGRAPH + {0xE7EA, 0x73C0}, //18139 #CJK UNIFIED IDEOGRAPH + {0xE7EB, 0x73C9}, //18140 #CJK UNIFIED IDEOGRAPH + {0xE7EC, 0x73C8}, //18141 #CJK UNIFIED IDEOGRAPH + {0xE7ED, 0x73E5}, //18142 #CJK UNIFIED IDEOGRAPH + {0xE7EE, 0x73D9}, //18143 #CJK UNIFIED IDEOGRAPH + {0xE7EF, 0x987C}, //18144 #CJK UNIFIED IDEOGRAPH + {0xE7F0, 0x740A}, //18145 #CJK UNIFIED IDEOGRAPH + {0xE7F1, 0x73E9}, //18146 #CJK UNIFIED IDEOGRAPH + {0xE7F2, 0x73E7}, //18147 #CJK UNIFIED IDEOGRAPH + {0xE7F3, 0x73DE}, //18148 #CJK UNIFIED IDEOGRAPH + {0xE7F4, 0x73BA}, //18149 #CJK UNIFIED IDEOGRAPH + {0xE7F5, 0x73F2}, //18150 #CJK UNIFIED IDEOGRAPH + {0xE7F6, 0x740F}, //18151 #CJK UNIFIED IDEOGRAPH + {0xE7F7, 0x742A}, //18152 #CJK UNIFIED IDEOGRAPH + {0xE7F8, 0x745B}, //18153 #CJK UNIFIED IDEOGRAPH + {0xE7F9, 0x7426}, //18154 #CJK UNIFIED IDEOGRAPH + {0xE7FA, 0x7425}, //18155 #CJK UNIFIED IDEOGRAPH + {0xE7FB, 0x7428}, //18156 #CJK UNIFIED IDEOGRAPH + {0xE7FC, 0x7430}, //18157 #CJK UNIFIED IDEOGRAPH + {0xE7FD, 0x742E}, //18158 #CJK UNIFIED IDEOGRAPH + {0xE7FE, 0x742C}, //18159 #CJK UNIFIED IDEOGRAPH + {0xE840, 0x942F}, //18160 #CJK UNIFIED IDEOGRAPH + {0xE841, 0x9430}, //18161 #CJK UNIFIED IDEOGRAPH + {0xE842, 0x9431}, //18162 #CJK UNIFIED IDEOGRAPH + {0xE843, 0x9432}, //18163 #CJK UNIFIED IDEOGRAPH + {0xE844, 0x9433}, //18164 #CJK UNIFIED IDEOGRAPH + {0xE845, 0x9434}, //18165 #CJK UNIFIED IDEOGRAPH + {0xE846, 0x9435}, //18166 #CJK UNIFIED IDEOGRAPH + {0xE847, 0x9436}, //18167 #CJK UNIFIED IDEOGRAPH + {0xE848, 0x9437}, //18168 #CJK UNIFIED IDEOGRAPH + {0xE849, 0x9438}, //18169 #CJK UNIFIED IDEOGRAPH + {0xE84A, 0x9439}, //18170 #CJK UNIFIED IDEOGRAPH + {0xE84B, 0x943A}, //18171 #CJK UNIFIED IDEOGRAPH + {0xE84C, 0x943B}, //18172 #CJK UNIFIED IDEOGRAPH + {0xE84D, 0x943C}, //18173 #CJK UNIFIED IDEOGRAPH + {0xE84E, 0x943D}, //18174 #CJK UNIFIED IDEOGRAPH + {0xE84F, 0x943F}, //18175 #CJK UNIFIED IDEOGRAPH + {0xE850, 0x9440}, //18176 #CJK UNIFIED IDEOGRAPH + {0xE851, 0x9441}, //18177 #CJK UNIFIED IDEOGRAPH + {0xE852, 0x9442}, //18178 #CJK UNIFIED IDEOGRAPH + {0xE853, 0x9443}, //18179 #CJK UNIFIED IDEOGRAPH + {0xE854, 0x9444}, //18180 #CJK UNIFIED IDEOGRAPH + {0xE855, 0x9445}, //18181 #CJK UNIFIED IDEOGRAPH + {0xE856, 0x9446}, //18182 #CJK UNIFIED IDEOGRAPH + {0xE857, 0x9447}, //18183 #CJK UNIFIED IDEOGRAPH + {0xE858, 0x9448}, //18184 #CJK UNIFIED IDEOGRAPH + {0xE859, 0x9449}, //18185 #CJK UNIFIED IDEOGRAPH + {0xE85A, 0x944A}, //18186 #CJK UNIFIED IDEOGRAPH + {0xE85B, 0x944B}, //18187 #CJK UNIFIED IDEOGRAPH + {0xE85C, 0x944C}, //18188 #CJK UNIFIED IDEOGRAPH + {0xE85D, 0x944D}, //18189 #CJK UNIFIED IDEOGRAPH + {0xE85E, 0x944E}, //18190 #CJK UNIFIED IDEOGRAPH + {0xE85F, 0x944F}, //18191 #CJK UNIFIED IDEOGRAPH + {0xE860, 0x9450}, //18192 #CJK UNIFIED IDEOGRAPH + {0xE861, 0x9451}, //18193 #CJK UNIFIED IDEOGRAPH + {0xE862, 0x9452}, //18194 #CJK UNIFIED IDEOGRAPH + {0xE863, 0x9453}, //18195 #CJK UNIFIED IDEOGRAPH + {0xE864, 0x9454}, //18196 #CJK UNIFIED IDEOGRAPH + {0xE865, 0x9455}, //18197 #CJK UNIFIED IDEOGRAPH + {0xE866, 0x9456}, //18198 #CJK UNIFIED IDEOGRAPH + {0xE867, 0x9457}, //18199 #CJK UNIFIED IDEOGRAPH + {0xE868, 0x9458}, //18200 #CJK UNIFIED IDEOGRAPH + {0xE869, 0x9459}, //18201 #CJK UNIFIED IDEOGRAPH + {0xE86A, 0x945A}, //18202 #CJK UNIFIED IDEOGRAPH + {0xE86B, 0x945B}, //18203 #CJK UNIFIED IDEOGRAPH + {0xE86C, 0x945C}, //18204 #CJK UNIFIED IDEOGRAPH + {0xE86D, 0x945D}, //18205 #CJK UNIFIED IDEOGRAPH + {0xE86E, 0x945E}, //18206 #CJK UNIFIED IDEOGRAPH + {0xE86F, 0x945F}, //18207 #CJK UNIFIED IDEOGRAPH + {0xE870, 0x9460}, //18208 #CJK UNIFIED IDEOGRAPH + {0xE871, 0x9461}, //18209 #CJK UNIFIED IDEOGRAPH + {0xE872, 0x9462}, //18210 #CJK UNIFIED IDEOGRAPH + {0xE873, 0x9463}, //18211 #CJK UNIFIED IDEOGRAPH + {0xE874, 0x9464}, //18212 #CJK UNIFIED IDEOGRAPH + {0xE875, 0x9465}, //18213 #CJK UNIFIED IDEOGRAPH + {0xE876, 0x9466}, //18214 #CJK UNIFIED IDEOGRAPH + {0xE877, 0x9467}, //18215 #CJK UNIFIED IDEOGRAPH + {0xE878, 0x9468}, //18216 #CJK UNIFIED IDEOGRAPH + {0xE879, 0x9469}, //18217 #CJK UNIFIED IDEOGRAPH + {0xE87A, 0x946A}, //18218 #CJK UNIFIED IDEOGRAPH + {0xE87B, 0x946C}, //18219 #CJK UNIFIED IDEOGRAPH + {0xE87C, 0x946D}, //18220 #CJK UNIFIED IDEOGRAPH + {0xE87D, 0x946E}, //18221 #CJK UNIFIED IDEOGRAPH + {0xE87E, 0x946F}, //18222 #CJK UNIFIED IDEOGRAPH + {0xE880, 0x9470}, //18223 #CJK UNIFIED IDEOGRAPH + {0xE881, 0x9471}, //18224 #CJK UNIFIED IDEOGRAPH + {0xE882, 0x9472}, //18225 #CJK UNIFIED IDEOGRAPH + {0xE883, 0x9473}, //18226 #CJK UNIFIED IDEOGRAPH + {0xE884, 0x9474}, //18227 #CJK UNIFIED IDEOGRAPH + {0xE885, 0x9475}, //18228 #CJK UNIFIED IDEOGRAPH + {0xE886, 0x9476}, //18229 #CJK UNIFIED IDEOGRAPH + {0xE887, 0x9477}, //18230 #CJK UNIFIED IDEOGRAPH + {0xE888, 0x9478}, //18231 #CJK UNIFIED IDEOGRAPH + {0xE889, 0x9479}, //18232 #CJK UNIFIED IDEOGRAPH + {0xE88A, 0x947A}, //18233 #CJK UNIFIED IDEOGRAPH + {0xE88B, 0x947B}, //18234 #CJK UNIFIED IDEOGRAPH + {0xE88C, 0x947C}, //18235 #CJK UNIFIED IDEOGRAPH + {0xE88D, 0x947D}, //18236 #CJK UNIFIED IDEOGRAPH + {0xE88E, 0x947E}, //18237 #CJK UNIFIED IDEOGRAPH + {0xE88F, 0x947F}, //18238 #CJK UNIFIED IDEOGRAPH + {0xE890, 0x9480}, //18239 #CJK UNIFIED IDEOGRAPH + {0xE891, 0x9481}, //18240 #CJK UNIFIED IDEOGRAPH + {0xE892, 0x9482}, //18241 #CJK UNIFIED IDEOGRAPH + {0xE893, 0x9483}, //18242 #CJK UNIFIED IDEOGRAPH + {0xE894, 0x9484}, //18243 #CJK UNIFIED IDEOGRAPH + {0xE895, 0x9491}, //18244 #CJK UNIFIED IDEOGRAPH + {0xE896, 0x9496}, //18245 #CJK UNIFIED IDEOGRAPH + {0xE897, 0x9498}, //18246 #CJK UNIFIED IDEOGRAPH + {0xE898, 0x94C7}, //18247 #CJK UNIFIED IDEOGRAPH + {0xE899, 0x94CF}, //18248 #CJK UNIFIED IDEOGRAPH + {0xE89A, 0x94D3}, //18249 #CJK UNIFIED IDEOGRAPH + {0xE89B, 0x94D4}, //18250 #CJK UNIFIED IDEOGRAPH + {0xE89C, 0x94DA}, //18251 #CJK UNIFIED IDEOGRAPH + {0xE89D, 0x94E6}, //18252 #CJK UNIFIED IDEOGRAPH + {0xE89E, 0x94FB}, //18253 #CJK UNIFIED IDEOGRAPH + {0xE89F, 0x951C}, //18254 #CJK UNIFIED IDEOGRAPH + {0xE8A0, 0x9520}, //18255 #CJK UNIFIED IDEOGRAPH + {0xE8A1, 0x741B}, //18256 #CJK UNIFIED IDEOGRAPH + {0xE8A2, 0x741A}, //18257 #CJK UNIFIED IDEOGRAPH + {0xE8A3, 0x7441}, //18258 #CJK UNIFIED IDEOGRAPH + {0xE8A4, 0x745C}, //18259 #CJK UNIFIED IDEOGRAPH + {0xE8A5, 0x7457}, //18260 #CJK UNIFIED IDEOGRAPH + {0xE8A6, 0x7455}, //18261 #CJK UNIFIED IDEOGRAPH + {0xE8A7, 0x7459}, //18262 #CJK UNIFIED IDEOGRAPH + {0xE8A8, 0x7477}, //18263 #CJK UNIFIED IDEOGRAPH + {0xE8A9, 0x746D}, //18264 #CJK UNIFIED IDEOGRAPH + {0xE8AA, 0x747E}, //18265 #CJK UNIFIED IDEOGRAPH + {0xE8AB, 0x749C}, //18266 #CJK UNIFIED IDEOGRAPH + {0xE8AC, 0x748E}, //18267 #CJK UNIFIED IDEOGRAPH + {0xE8AD, 0x7480}, //18268 #CJK UNIFIED IDEOGRAPH + {0xE8AE, 0x7481}, //18269 #CJK UNIFIED IDEOGRAPH + {0xE8AF, 0x7487}, //18270 #CJK UNIFIED IDEOGRAPH + {0xE8B0, 0x748B}, //18271 #CJK UNIFIED IDEOGRAPH + {0xE8B1, 0x749E}, //18272 #CJK UNIFIED IDEOGRAPH + {0xE8B2, 0x74A8}, //18273 #CJK UNIFIED IDEOGRAPH + {0xE8B3, 0x74A9}, //18274 #CJK UNIFIED IDEOGRAPH + {0xE8B4, 0x7490}, //18275 #CJK UNIFIED IDEOGRAPH + {0xE8B5, 0x74A7}, //18276 #CJK UNIFIED IDEOGRAPH + {0xE8B6, 0x74D2}, //18277 #CJK UNIFIED IDEOGRAPH + {0xE8B7, 0x74BA}, //18278 #CJK UNIFIED IDEOGRAPH + {0xE8B8, 0x97EA}, //18279 #CJK UNIFIED IDEOGRAPH + {0xE8B9, 0x97EB}, //18280 #CJK UNIFIED IDEOGRAPH + {0xE8BA, 0x97EC}, //18281 #CJK UNIFIED IDEOGRAPH + {0xE8BB, 0x674C}, //18282 #CJK UNIFIED IDEOGRAPH + {0xE8BC, 0x6753}, //18283 #CJK UNIFIED IDEOGRAPH + {0xE8BD, 0x675E}, //18284 #CJK UNIFIED IDEOGRAPH + {0xE8BE, 0x6748}, //18285 #CJK UNIFIED IDEOGRAPH + {0xE8BF, 0x6769}, //18286 #CJK UNIFIED IDEOGRAPH + {0xE8C0, 0x67A5}, //18287 #CJK UNIFIED IDEOGRAPH + {0xE8C1, 0x6787}, //18288 #CJK UNIFIED IDEOGRAPH + {0xE8C2, 0x676A}, //18289 #CJK UNIFIED IDEOGRAPH + {0xE8C3, 0x6773}, //18290 #CJK UNIFIED IDEOGRAPH + {0xE8C4, 0x6798}, //18291 #CJK UNIFIED IDEOGRAPH + {0xE8C5, 0x67A7}, //18292 #CJK UNIFIED IDEOGRAPH + {0xE8C6, 0x6775}, //18293 #CJK UNIFIED IDEOGRAPH + {0xE8C7, 0x67A8}, //18294 #CJK UNIFIED IDEOGRAPH + {0xE8C8, 0x679E}, //18295 #CJK UNIFIED IDEOGRAPH + {0xE8C9, 0x67AD}, //18296 #CJK UNIFIED IDEOGRAPH + {0xE8CA, 0x678B}, //18297 #CJK UNIFIED IDEOGRAPH + {0xE8CB, 0x6777}, //18298 #CJK UNIFIED IDEOGRAPH + {0xE8CC, 0x677C}, //18299 #CJK UNIFIED IDEOGRAPH + {0xE8CD, 0x67F0}, //18300 #CJK UNIFIED IDEOGRAPH + {0xE8CE, 0x6809}, //18301 #CJK UNIFIED IDEOGRAPH + {0xE8CF, 0x67D8}, //18302 #CJK UNIFIED IDEOGRAPH + {0xE8D0, 0x680A}, //18303 #CJK UNIFIED IDEOGRAPH + {0xE8D1, 0x67E9}, //18304 #CJK UNIFIED IDEOGRAPH + {0xE8D2, 0x67B0}, //18305 #CJK UNIFIED IDEOGRAPH + {0xE8D3, 0x680C}, //18306 #CJK UNIFIED IDEOGRAPH + {0xE8D4, 0x67D9}, //18307 #CJK UNIFIED IDEOGRAPH + {0xE8D5, 0x67B5}, //18308 #CJK UNIFIED IDEOGRAPH + {0xE8D6, 0x67DA}, //18309 #CJK UNIFIED IDEOGRAPH + {0xE8D7, 0x67B3}, //18310 #CJK UNIFIED IDEOGRAPH + {0xE8D8, 0x67DD}, //18311 #CJK UNIFIED IDEOGRAPH + {0xE8D9, 0x6800}, //18312 #CJK UNIFIED IDEOGRAPH + {0xE8DA, 0x67C3}, //18313 #CJK UNIFIED IDEOGRAPH + {0xE8DB, 0x67B8}, //18314 #CJK UNIFIED IDEOGRAPH + {0xE8DC, 0x67E2}, //18315 #CJK UNIFIED IDEOGRAPH + {0xE8DD, 0x680E}, //18316 #CJK UNIFIED IDEOGRAPH + {0xE8DE, 0x67C1}, //18317 #CJK UNIFIED IDEOGRAPH + {0xE8DF, 0x67FD}, //18318 #CJK UNIFIED IDEOGRAPH + {0xE8E0, 0x6832}, //18319 #CJK UNIFIED IDEOGRAPH + {0xE8E1, 0x6833}, //18320 #CJK UNIFIED IDEOGRAPH + {0xE8E2, 0x6860}, //18321 #CJK UNIFIED IDEOGRAPH + {0xE8E3, 0x6861}, //18322 #CJK UNIFIED IDEOGRAPH + {0xE8E4, 0x684E}, //18323 #CJK UNIFIED IDEOGRAPH + {0xE8E5, 0x6862}, //18324 #CJK UNIFIED IDEOGRAPH + {0xE8E6, 0x6844}, //18325 #CJK UNIFIED IDEOGRAPH + {0xE8E7, 0x6864}, //18326 #CJK UNIFIED IDEOGRAPH + {0xE8E8, 0x6883}, //18327 #CJK UNIFIED IDEOGRAPH + {0xE8E9, 0x681D}, //18328 #CJK UNIFIED IDEOGRAPH + {0xE8EA, 0x6855}, //18329 #CJK UNIFIED IDEOGRAPH + {0xE8EB, 0x6866}, //18330 #CJK UNIFIED IDEOGRAPH + {0xE8EC, 0x6841}, //18331 #CJK UNIFIED IDEOGRAPH + {0xE8ED, 0x6867}, //18332 #CJK UNIFIED IDEOGRAPH + {0xE8EE, 0x6840}, //18333 #CJK UNIFIED IDEOGRAPH + {0xE8EF, 0x683E}, //18334 #CJK UNIFIED IDEOGRAPH + {0xE8F0, 0x684A}, //18335 #CJK UNIFIED IDEOGRAPH + {0xE8F1, 0x6849}, //18336 #CJK UNIFIED IDEOGRAPH + {0xE8F2, 0x6829}, //18337 #CJK UNIFIED IDEOGRAPH + {0xE8F3, 0x68B5}, //18338 #CJK UNIFIED IDEOGRAPH + {0xE8F4, 0x688F}, //18339 #CJK UNIFIED IDEOGRAPH + {0xE8F5, 0x6874}, //18340 #CJK UNIFIED IDEOGRAPH + {0xE8F6, 0x6877}, //18341 #CJK UNIFIED IDEOGRAPH + {0xE8F7, 0x6893}, //18342 #CJK UNIFIED IDEOGRAPH + {0xE8F8, 0x686B}, //18343 #CJK UNIFIED IDEOGRAPH + {0xE8F9, 0x68C2}, //18344 #CJK UNIFIED IDEOGRAPH + {0xE8FA, 0x696E}, //18345 #CJK UNIFIED IDEOGRAPH + {0xE8FB, 0x68FC}, //18346 #CJK UNIFIED IDEOGRAPH + {0xE8FC, 0x691F}, //18347 #CJK UNIFIED IDEOGRAPH + {0xE8FD, 0x6920}, //18348 #CJK UNIFIED IDEOGRAPH + {0xE8FE, 0x68F9}, //18349 #CJK UNIFIED IDEOGRAPH + {0xE940, 0x9527}, //18350 #CJK UNIFIED IDEOGRAPH + {0xE941, 0x9533}, //18351 #CJK UNIFIED IDEOGRAPH + {0xE942, 0x953D}, //18352 #CJK UNIFIED IDEOGRAPH + {0xE943, 0x9543}, //18353 #CJK UNIFIED IDEOGRAPH + {0xE944, 0x9548}, //18354 #CJK UNIFIED IDEOGRAPH + {0xE945, 0x954B}, //18355 #CJK UNIFIED IDEOGRAPH + {0xE946, 0x9555}, //18356 #CJK UNIFIED IDEOGRAPH + {0xE947, 0x955A}, //18357 #CJK UNIFIED IDEOGRAPH + {0xE948, 0x9560}, //18358 #CJK UNIFIED IDEOGRAPH + {0xE949, 0x956E}, //18359 #CJK UNIFIED IDEOGRAPH + {0xE94A, 0x9574}, //18360 #CJK UNIFIED IDEOGRAPH + {0xE94B, 0x9575}, //18361 #CJK UNIFIED IDEOGRAPH + {0xE94C, 0x9577}, //18362 #CJK UNIFIED IDEOGRAPH + {0xE94D, 0x9578}, //18363 #CJK UNIFIED IDEOGRAPH + {0xE94E, 0x9579}, //18364 #CJK UNIFIED IDEOGRAPH + {0xE94F, 0x957A}, //18365 #CJK UNIFIED IDEOGRAPH + {0xE950, 0x957B}, //18366 #CJK UNIFIED IDEOGRAPH + {0xE951, 0x957C}, //18367 #CJK UNIFIED IDEOGRAPH + {0xE952, 0x957D}, //18368 #CJK UNIFIED IDEOGRAPH + {0xE953, 0x957E}, //18369 #CJK UNIFIED IDEOGRAPH + {0xE954, 0x9580}, //18370 #CJK UNIFIED IDEOGRAPH + {0xE955, 0x9581}, //18371 #CJK UNIFIED IDEOGRAPH + {0xE956, 0x9582}, //18372 #CJK UNIFIED IDEOGRAPH + {0xE957, 0x9583}, //18373 #CJK UNIFIED IDEOGRAPH + {0xE958, 0x9584}, //18374 #CJK UNIFIED IDEOGRAPH + {0xE959, 0x9585}, //18375 #CJK UNIFIED IDEOGRAPH + {0xE95A, 0x9586}, //18376 #CJK UNIFIED IDEOGRAPH + {0xE95B, 0x9587}, //18377 #CJK UNIFIED IDEOGRAPH + {0xE95C, 0x9588}, //18378 #CJK UNIFIED IDEOGRAPH + {0xE95D, 0x9589}, //18379 #CJK UNIFIED IDEOGRAPH + {0xE95E, 0x958A}, //18380 #CJK UNIFIED IDEOGRAPH + {0xE95F, 0x958B}, //18381 #CJK UNIFIED IDEOGRAPH + {0xE960, 0x958C}, //18382 #CJK UNIFIED IDEOGRAPH + {0xE961, 0x958D}, //18383 #CJK UNIFIED IDEOGRAPH + {0xE962, 0x958E}, //18384 #CJK UNIFIED IDEOGRAPH + {0xE963, 0x958F}, //18385 #CJK UNIFIED IDEOGRAPH + {0xE964, 0x9590}, //18386 #CJK UNIFIED IDEOGRAPH + {0xE965, 0x9591}, //18387 #CJK UNIFIED IDEOGRAPH + {0xE966, 0x9592}, //18388 #CJK UNIFIED IDEOGRAPH + {0xE967, 0x9593}, //18389 #CJK UNIFIED IDEOGRAPH + {0xE968, 0x9594}, //18390 #CJK UNIFIED IDEOGRAPH + {0xE969, 0x9595}, //18391 #CJK UNIFIED IDEOGRAPH + {0xE96A, 0x9596}, //18392 #CJK UNIFIED IDEOGRAPH + {0xE96B, 0x9597}, //18393 #CJK UNIFIED IDEOGRAPH + {0xE96C, 0x9598}, //18394 #CJK UNIFIED IDEOGRAPH + {0xE96D, 0x9599}, //18395 #CJK UNIFIED IDEOGRAPH + {0xE96E, 0x959A}, //18396 #CJK UNIFIED IDEOGRAPH + {0xE96F, 0x959B}, //18397 #CJK UNIFIED IDEOGRAPH + {0xE970, 0x959C}, //18398 #CJK UNIFIED IDEOGRAPH + {0xE971, 0x959D}, //18399 #CJK UNIFIED IDEOGRAPH + {0xE972, 0x959E}, //18400 #CJK UNIFIED IDEOGRAPH + {0xE973, 0x959F}, //18401 #CJK UNIFIED IDEOGRAPH + {0xE974, 0x95A0}, //18402 #CJK UNIFIED IDEOGRAPH + {0xE975, 0x95A1}, //18403 #CJK UNIFIED IDEOGRAPH + {0xE976, 0x95A2}, //18404 #CJK UNIFIED IDEOGRAPH + {0xE977, 0x95A3}, //18405 #CJK UNIFIED IDEOGRAPH + {0xE978, 0x95A4}, //18406 #CJK UNIFIED IDEOGRAPH + {0xE979, 0x95A5}, //18407 #CJK UNIFIED IDEOGRAPH + {0xE97A, 0x95A6}, //18408 #CJK UNIFIED IDEOGRAPH + {0xE97B, 0x95A7}, //18409 #CJK UNIFIED IDEOGRAPH + {0xE97C, 0x95A8}, //18410 #CJK UNIFIED IDEOGRAPH + {0xE97D, 0x95A9}, //18411 #CJK UNIFIED IDEOGRAPH + {0xE97E, 0x95AA}, //18412 #CJK UNIFIED IDEOGRAPH + {0xE980, 0x95AB}, //18413 #CJK UNIFIED IDEOGRAPH + {0xE981, 0x95AC}, //18414 #CJK UNIFIED IDEOGRAPH + {0xE982, 0x95AD}, //18415 #CJK UNIFIED IDEOGRAPH + {0xE983, 0x95AE}, //18416 #CJK UNIFIED IDEOGRAPH + {0xE984, 0x95AF}, //18417 #CJK UNIFIED IDEOGRAPH + {0xE985, 0x95B0}, //18418 #CJK UNIFIED IDEOGRAPH + {0xE986, 0x95B1}, //18419 #CJK UNIFIED IDEOGRAPH + {0xE987, 0x95B2}, //18420 #CJK UNIFIED IDEOGRAPH + {0xE988, 0x95B3}, //18421 #CJK UNIFIED IDEOGRAPH + {0xE989, 0x95B4}, //18422 #CJK UNIFIED IDEOGRAPH + {0xE98A, 0x95B5}, //18423 #CJK UNIFIED IDEOGRAPH + {0xE98B, 0x95B6}, //18424 #CJK UNIFIED IDEOGRAPH + {0xE98C, 0x95B7}, //18425 #CJK UNIFIED IDEOGRAPH + {0xE98D, 0x95B8}, //18426 #CJK UNIFIED IDEOGRAPH + {0xE98E, 0x95B9}, //18427 #CJK UNIFIED IDEOGRAPH + {0xE98F, 0x95BA}, //18428 #CJK UNIFIED IDEOGRAPH + {0xE990, 0x95BB}, //18429 #CJK UNIFIED IDEOGRAPH + {0xE991, 0x95BC}, //18430 #CJK UNIFIED IDEOGRAPH + {0xE992, 0x95BD}, //18431 #CJK UNIFIED IDEOGRAPH + {0xE993, 0x95BE}, //18432 #CJK UNIFIED IDEOGRAPH + {0xE994, 0x95BF}, //18433 #CJK UNIFIED IDEOGRAPH + {0xE995, 0x95C0}, //18434 #CJK UNIFIED IDEOGRAPH + {0xE996, 0x95C1}, //18435 #CJK UNIFIED IDEOGRAPH + {0xE997, 0x95C2}, //18436 #CJK UNIFIED IDEOGRAPH + {0xE998, 0x95C3}, //18437 #CJK UNIFIED IDEOGRAPH + {0xE999, 0x95C4}, //18438 #CJK UNIFIED IDEOGRAPH + {0xE99A, 0x95C5}, //18439 #CJK UNIFIED IDEOGRAPH + {0xE99B, 0x95C6}, //18440 #CJK UNIFIED IDEOGRAPH + {0xE99C, 0x95C7}, //18441 #CJK UNIFIED IDEOGRAPH + {0xE99D, 0x95C8}, //18442 #CJK UNIFIED IDEOGRAPH + {0xE99E, 0x95C9}, //18443 #CJK UNIFIED IDEOGRAPH + {0xE99F, 0x95CA}, //18444 #CJK UNIFIED IDEOGRAPH + {0xE9A0, 0x95CB}, //18445 #CJK UNIFIED IDEOGRAPH + {0xE9A1, 0x6924}, //18446 #CJK UNIFIED IDEOGRAPH + {0xE9A2, 0x68F0}, //18447 #CJK UNIFIED IDEOGRAPH + {0xE9A3, 0x690B}, //18448 #CJK UNIFIED IDEOGRAPH + {0xE9A4, 0x6901}, //18449 #CJK UNIFIED IDEOGRAPH + {0xE9A5, 0x6957}, //18450 #CJK UNIFIED IDEOGRAPH + {0xE9A6, 0x68E3}, //18451 #CJK UNIFIED IDEOGRAPH + {0xE9A7, 0x6910}, //18452 #CJK UNIFIED IDEOGRAPH + {0xE9A8, 0x6971}, //18453 #CJK UNIFIED IDEOGRAPH + {0xE9A9, 0x6939}, //18454 #CJK UNIFIED IDEOGRAPH + {0xE9AA, 0x6960}, //18455 #CJK UNIFIED IDEOGRAPH + {0xE9AB, 0x6942}, //18456 #CJK UNIFIED IDEOGRAPH + {0xE9AC, 0x695D}, //18457 #CJK UNIFIED IDEOGRAPH + {0xE9AD, 0x6984}, //18458 #CJK UNIFIED IDEOGRAPH + {0xE9AE, 0x696B}, //18459 #CJK UNIFIED IDEOGRAPH + {0xE9AF, 0x6980}, //18460 #CJK UNIFIED IDEOGRAPH + {0xE9B0, 0x6998}, //18461 #CJK UNIFIED IDEOGRAPH + {0xE9B1, 0x6978}, //18462 #CJK UNIFIED IDEOGRAPH + {0xE9B2, 0x6934}, //18463 #CJK UNIFIED IDEOGRAPH + {0xE9B3, 0x69CC}, //18464 #CJK UNIFIED IDEOGRAPH + {0xE9B4, 0x6987}, //18465 #CJK UNIFIED IDEOGRAPH + {0xE9B5, 0x6988}, //18466 #CJK UNIFIED IDEOGRAPH + {0xE9B6, 0x69CE}, //18467 #CJK UNIFIED IDEOGRAPH + {0xE9B7, 0x6989}, //18468 #CJK UNIFIED IDEOGRAPH + {0xE9B8, 0x6966}, //18469 #CJK UNIFIED IDEOGRAPH + {0xE9B9, 0x6963}, //18470 #CJK UNIFIED IDEOGRAPH + {0xE9BA, 0x6979}, //18471 #CJK UNIFIED IDEOGRAPH + {0xE9BB, 0x699B}, //18472 #CJK UNIFIED IDEOGRAPH + {0xE9BC, 0x69A7}, //18473 #CJK UNIFIED IDEOGRAPH + {0xE9BD, 0x69BB}, //18474 #CJK UNIFIED IDEOGRAPH + {0xE9BE, 0x69AB}, //18475 #CJK UNIFIED IDEOGRAPH + {0xE9BF, 0x69AD}, //18476 #CJK UNIFIED IDEOGRAPH + {0xE9C0, 0x69D4}, //18477 #CJK UNIFIED IDEOGRAPH + {0xE9C1, 0x69B1}, //18478 #CJK UNIFIED IDEOGRAPH + {0xE9C2, 0x69C1}, //18479 #CJK UNIFIED IDEOGRAPH + {0xE9C3, 0x69CA}, //18480 #CJK UNIFIED IDEOGRAPH + {0xE9C4, 0x69DF}, //18481 #CJK UNIFIED IDEOGRAPH + {0xE9C5, 0x6995}, //18482 #CJK UNIFIED IDEOGRAPH + {0xE9C6, 0x69E0}, //18483 #CJK UNIFIED IDEOGRAPH + {0xE9C7, 0x698D}, //18484 #CJK UNIFIED IDEOGRAPH + {0xE9C8, 0x69FF}, //18485 #CJK UNIFIED IDEOGRAPH + {0xE9C9, 0x6A2F}, //18486 #CJK UNIFIED IDEOGRAPH + {0xE9CA, 0x69ED}, //18487 #CJK UNIFIED IDEOGRAPH + {0xE9CB, 0x6A17}, //18488 #CJK UNIFIED IDEOGRAPH + {0xE9CC, 0x6A18}, //18489 #CJK UNIFIED IDEOGRAPH + {0xE9CD, 0x6A65}, //18490 #CJK UNIFIED IDEOGRAPH + {0xE9CE, 0x69F2}, //18491 #CJK UNIFIED IDEOGRAPH + {0xE9CF, 0x6A44}, //18492 #CJK UNIFIED IDEOGRAPH + {0xE9D0, 0x6A3E}, //18493 #CJK UNIFIED IDEOGRAPH + {0xE9D1, 0x6AA0}, //18494 #CJK UNIFIED IDEOGRAPH + {0xE9D2, 0x6A50}, //18495 #CJK UNIFIED IDEOGRAPH + {0xE9D3, 0x6A5B}, //18496 #CJK UNIFIED IDEOGRAPH + {0xE9D4, 0x6A35}, //18497 #CJK UNIFIED IDEOGRAPH + {0xE9D5, 0x6A8E}, //18498 #CJK UNIFIED IDEOGRAPH + {0xE9D6, 0x6A79}, //18499 #CJK UNIFIED IDEOGRAPH + {0xE9D7, 0x6A3D}, //18500 #CJK UNIFIED IDEOGRAPH + {0xE9D8, 0x6A28}, //18501 #CJK UNIFIED IDEOGRAPH + {0xE9D9, 0x6A58}, //18502 #CJK UNIFIED IDEOGRAPH + {0xE9DA, 0x6A7C}, //18503 #CJK UNIFIED IDEOGRAPH + {0xE9DB, 0x6A91}, //18504 #CJK UNIFIED IDEOGRAPH + {0xE9DC, 0x6A90}, //18505 #CJK UNIFIED IDEOGRAPH + {0xE9DD, 0x6AA9}, //18506 #CJK UNIFIED IDEOGRAPH + {0xE9DE, 0x6A97}, //18507 #CJK UNIFIED IDEOGRAPH + {0xE9DF, 0x6AAB}, //18508 #CJK UNIFIED IDEOGRAPH + {0xE9E0, 0x7337}, //18509 #CJK UNIFIED IDEOGRAPH + {0xE9E1, 0x7352}, //18510 #CJK UNIFIED IDEOGRAPH + {0xE9E2, 0x6B81}, //18511 #CJK UNIFIED IDEOGRAPH + {0xE9E3, 0x6B82}, //18512 #CJK UNIFIED IDEOGRAPH + {0xE9E4, 0x6B87}, //18513 #CJK UNIFIED IDEOGRAPH + {0xE9E5, 0x6B84}, //18514 #CJK UNIFIED IDEOGRAPH + {0xE9E6, 0x6B92}, //18515 #CJK UNIFIED IDEOGRAPH + {0xE9E7, 0x6B93}, //18516 #CJK UNIFIED IDEOGRAPH + {0xE9E8, 0x6B8D}, //18517 #CJK UNIFIED IDEOGRAPH + {0xE9E9, 0x6B9A}, //18518 #CJK UNIFIED IDEOGRAPH + {0xE9EA, 0x6B9B}, //18519 #CJK UNIFIED IDEOGRAPH + {0xE9EB, 0x6BA1}, //18520 #CJK UNIFIED IDEOGRAPH + {0xE9EC, 0x6BAA}, //18521 #CJK UNIFIED IDEOGRAPH + {0xE9ED, 0x8F6B}, //18522 #CJK UNIFIED IDEOGRAPH + {0xE9EE, 0x8F6D}, //18523 #CJK UNIFIED IDEOGRAPH + {0xE9EF, 0x8F71}, //18524 #CJK UNIFIED IDEOGRAPH + {0xE9F0, 0x8F72}, //18525 #CJK UNIFIED IDEOGRAPH + {0xE9F1, 0x8F73}, //18526 #CJK UNIFIED IDEOGRAPH + {0xE9F2, 0x8F75}, //18527 #CJK UNIFIED IDEOGRAPH + {0xE9F3, 0x8F76}, //18528 #CJK UNIFIED IDEOGRAPH + {0xE9F4, 0x8F78}, //18529 #CJK UNIFIED IDEOGRAPH + {0xE9F5, 0x8F77}, //18530 #CJK UNIFIED IDEOGRAPH + {0xE9F6, 0x8F79}, //18531 #CJK UNIFIED IDEOGRAPH + {0xE9F7, 0x8F7A}, //18532 #CJK UNIFIED IDEOGRAPH + {0xE9F8, 0x8F7C}, //18533 #CJK UNIFIED IDEOGRAPH + {0xE9F9, 0x8F7E}, //18534 #CJK UNIFIED IDEOGRAPH + {0xE9FA, 0x8F81}, //18535 #CJK UNIFIED IDEOGRAPH + {0xE9FB, 0x8F82}, //18536 #CJK UNIFIED IDEOGRAPH + {0xE9FC, 0x8F84}, //18537 #CJK UNIFIED IDEOGRAPH + {0xE9FD, 0x8F87}, //18538 #CJK UNIFIED IDEOGRAPH + {0xE9FE, 0x8F8B}, //18539 #CJK UNIFIED IDEOGRAPH + {0xEA40, 0x95CC}, //18540 #CJK UNIFIED IDEOGRAPH + {0xEA41, 0x95CD}, //18541 #CJK UNIFIED IDEOGRAPH + {0xEA42, 0x95CE}, //18542 #CJK UNIFIED IDEOGRAPH + {0xEA43, 0x95CF}, //18543 #CJK UNIFIED IDEOGRAPH + {0xEA44, 0x95D0}, //18544 #CJK UNIFIED IDEOGRAPH + {0xEA45, 0x95D1}, //18545 #CJK UNIFIED IDEOGRAPH + {0xEA46, 0x95D2}, //18546 #CJK UNIFIED IDEOGRAPH + {0xEA47, 0x95D3}, //18547 #CJK UNIFIED IDEOGRAPH + {0xEA48, 0x95D4}, //18548 #CJK UNIFIED IDEOGRAPH + {0xEA49, 0x95D5}, //18549 #CJK UNIFIED IDEOGRAPH + {0xEA4A, 0x95D6}, //18550 #CJK UNIFIED IDEOGRAPH + {0xEA4B, 0x95D7}, //18551 #CJK UNIFIED IDEOGRAPH + {0xEA4C, 0x95D8}, //18552 #CJK UNIFIED IDEOGRAPH + {0xEA4D, 0x95D9}, //18553 #CJK UNIFIED IDEOGRAPH + {0xEA4E, 0x95DA}, //18554 #CJK UNIFIED IDEOGRAPH + {0xEA4F, 0x95DB}, //18555 #CJK UNIFIED IDEOGRAPH + {0xEA50, 0x95DC}, //18556 #CJK UNIFIED IDEOGRAPH + {0xEA51, 0x95DD}, //18557 #CJK UNIFIED IDEOGRAPH + {0xEA52, 0x95DE}, //18558 #CJK UNIFIED IDEOGRAPH + {0xEA53, 0x95DF}, //18559 #CJK UNIFIED IDEOGRAPH + {0xEA54, 0x95E0}, //18560 #CJK UNIFIED IDEOGRAPH + {0xEA55, 0x95E1}, //18561 #CJK UNIFIED IDEOGRAPH + {0xEA56, 0x95E2}, //18562 #CJK UNIFIED IDEOGRAPH + {0xEA57, 0x95E3}, //18563 #CJK UNIFIED IDEOGRAPH + {0xEA58, 0x95E4}, //18564 #CJK UNIFIED IDEOGRAPH + {0xEA59, 0x95E5}, //18565 #CJK UNIFIED IDEOGRAPH + {0xEA5A, 0x95E6}, //18566 #CJK UNIFIED IDEOGRAPH + {0xEA5B, 0x95E7}, //18567 #CJK UNIFIED IDEOGRAPH + {0xEA5C, 0x95EC}, //18568 #CJK UNIFIED IDEOGRAPH + {0xEA5D, 0x95FF}, //18569 #CJK UNIFIED IDEOGRAPH + {0xEA5E, 0x9607}, //18570 #CJK UNIFIED IDEOGRAPH + {0xEA5F, 0x9613}, //18571 #CJK UNIFIED IDEOGRAPH + {0xEA60, 0x9618}, //18572 #CJK UNIFIED IDEOGRAPH + {0xEA61, 0x961B}, //18573 #CJK UNIFIED IDEOGRAPH + {0xEA62, 0x961E}, //18574 #CJK UNIFIED IDEOGRAPH + {0xEA63, 0x9620}, //18575 #CJK UNIFIED IDEOGRAPH + {0xEA64, 0x9623}, //18576 #CJK UNIFIED IDEOGRAPH + {0xEA65, 0x9624}, //18577 #CJK UNIFIED IDEOGRAPH + {0xEA66, 0x9625}, //18578 #CJK UNIFIED IDEOGRAPH + {0xEA67, 0x9626}, //18579 #CJK UNIFIED IDEOGRAPH + {0xEA68, 0x9627}, //18580 #CJK UNIFIED IDEOGRAPH + {0xEA69, 0x9628}, //18581 #CJK UNIFIED IDEOGRAPH + {0xEA6A, 0x9629}, //18582 #CJK UNIFIED IDEOGRAPH + {0xEA6B, 0x962B}, //18583 #CJK UNIFIED IDEOGRAPH + {0xEA6C, 0x962C}, //18584 #CJK UNIFIED IDEOGRAPH + {0xEA6D, 0x962D}, //18585 #CJK UNIFIED IDEOGRAPH + {0xEA6E, 0x962F}, //18586 #CJK UNIFIED IDEOGRAPH + {0xEA6F, 0x9630}, //18587 #CJK UNIFIED IDEOGRAPH + {0xEA70, 0x9637}, //18588 #CJK UNIFIED IDEOGRAPH + {0xEA71, 0x9638}, //18589 #CJK UNIFIED IDEOGRAPH + {0xEA72, 0x9639}, //18590 #CJK UNIFIED IDEOGRAPH + {0xEA73, 0x963A}, //18591 #CJK UNIFIED IDEOGRAPH + {0xEA74, 0x963E}, //18592 #CJK UNIFIED IDEOGRAPH + {0xEA75, 0x9641}, //18593 #CJK UNIFIED IDEOGRAPH + {0xEA76, 0x9643}, //18594 #CJK UNIFIED IDEOGRAPH + {0xEA77, 0x964A}, //18595 #CJK UNIFIED IDEOGRAPH + {0xEA78, 0x964E}, //18596 #CJK UNIFIED IDEOGRAPH + {0xEA79, 0x964F}, //18597 #CJK UNIFIED IDEOGRAPH + {0xEA7A, 0x9651}, //18598 #CJK UNIFIED IDEOGRAPH + {0xEA7B, 0x9652}, //18599 #CJK UNIFIED IDEOGRAPH + {0xEA7C, 0x9653}, //18600 #CJK UNIFIED IDEOGRAPH + {0xEA7D, 0x9656}, //18601 #CJK UNIFIED IDEOGRAPH + {0xEA7E, 0x9657}, //18602 #CJK UNIFIED IDEOGRAPH + {0xEA80, 0x9658}, //18603 #CJK UNIFIED IDEOGRAPH + {0xEA81, 0x9659}, //18604 #CJK UNIFIED IDEOGRAPH + {0xEA82, 0x965A}, //18605 #CJK UNIFIED IDEOGRAPH + {0xEA83, 0x965C}, //18606 #CJK UNIFIED IDEOGRAPH + {0xEA84, 0x965D}, //18607 #CJK UNIFIED IDEOGRAPH + {0xEA85, 0x965E}, //18608 #CJK UNIFIED IDEOGRAPH + {0xEA86, 0x9660}, //18609 #CJK UNIFIED IDEOGRAPH + {0xEA87, 0x9663}, //18610 #CJK UNIFIED IDEOGRAPH + {0xEA88, 0x9665}, //18611 #CJK UNIFIED IDEOGRAPH + {0xEA89, 0x9666}, //18612 #CJK UNIFIED IDEOGRAPH + {0xEA8A, 0x966B}, //18613 #CJK UNIFIED IDEOGRAPH + {0xEA8B, 0x966D}, //18614 #CJK UNIFIED IDEOGRAPH + {0xEA8C, 0x966E}, //18615 #CJK UNIFIED IDEOGRAPH + {0xEA8D, 0x966F}, //18616 #CJK UNIFIED IDEOGRAPH + {0xEA8E, 0x9670}, //18617 #CJK UNIFIED IDEOGRAPH + {0xEA8F, 0x9671}, //18618 #CJK UNIFIED IDEOGRAPH + {0xEA90, 0x9673}, //18619 #CJK UNIFIED IDEOGRAPH + {0xEA91, 0x9678}, //18620 #CJK UNIFIED IDEOGRAPH + {0xEA92, 0x9679}, //18621 #CJK UNIFIED IDEOGRAPH + {0xEA93, 0x967A}, //18622 #CJK UNIFIED IDEOGRAPH + {0xEA94, 0x967B}, //18623 #CJK UNIFIED IDEOGRAPH + {0xEA95, 0x967C}, //18624 #CJK UNIFIED IDEOGRAPH + {0xEA96, 0x967D}, //18625 #CJK UNIFIED IDEOGRAPH + {0xEA97, 0x967E}, //18626 #CJK UNIFIED IDEOGRAPH + {0xEA98, 0x967F}, //18627 #CJK UNIFIED IDEOGRAPH + {0xEA99, 0x9680}, //18628 #CJK UNIFIED IDEOGRAPH + {0xEA9A, 0x9681}, //18629 #CJK UNIFIED IDEOGRAPH + {0xEA9B, 0x9682}, //18630 #CJK UNIFIED IDEOGRAPH + {0xEA9C, 0x9683}, //18631 #CJK UNIFIED IDEOGRAPH + {0xEA9D, 0x9684}, //18632 #CJK UNIFIED IDEOGRAPH + {0xEA9E, 0x9687}, //18633 #CJK UNIFIED IDEOGRAPH + {0xEA9F, 0x9689}, //18634 #CJK UNIFIED IDEOGRAPH + {0xEAA0, 0x968A}, //18635 #CJK UNIFIED IDEOGRAPH + {0xEAA1, 0x8F8D}, //18636 #CJK UNIFIED IDEOGRAPH + {0xEAA2, 0x8F8E}, //18637 #CJK UNIFIED IDEOGRAPH + {0xEAA3, 0x8F8F}, //18638 #CJK UNIFIED IDEOGRAPH + {0xEAA4, 0x8F98}, //18639 #CJK UNIFIED IDEOGRAPH + {0xEAA5, 0x8F9A}, //18640 #CJK UNIFIED IDEOGRAPH + {0xEAA6, 0x8ECE}, //18641 #CJK UNIFIED IDEOGRAPH + {0xEAA7, 0x620B}, //18642 #CJK UNIFIED IDEOGRAPH + {0xEAA8, 0x6217}, //18643 #CJK UNIFIED IDEOGRAPH + {0xEAA9, 0x621B}, //18644 #CJK UNIFIED IDEOGRAPH + {0xEAAA, 0x621F}, //18645 #CJK UNIFIED IDEOGRAPH + {0xEAAB, 0x6222}, //18646 #CJK UNIFIED IDEOGRAPH + {0xEAAC, 0x6221}, //18647 #CJK UNIFIED IDEOGRAPH + {0xEAAD, 0x6225}, //18648 #CJK UNIFIED IDEOGRAPH + {0xEAAE, 0x6224}, //18649 #CJK UNIFIED IDEOGRAPH + {0xEAAF, 0x622C}, //18650 #CJK UNIFIED IDEOGRAPH + {0xEAB0, 0x81E7}, //18651 #CJK UNIFIED IDEOGRAPH + {0xEAB1, 0x74EF}, //18652 #CJK UNIFIED IDEOGRAPH + {0xEAB2, 0x74F4}, //18653 #CJK UNIFIED IDEOGRAPH + {0xEAB3, 0x74FF}, //18654 #CJK UNIFIED IDEOGRAPH + {0xEAB4, 0x750F}, //18655 #CJK UNIFIED IDEOGRAPH + {0xEAB5, 0x7511}, //18656 #CJK UNIFIED IDEOGRAPH + {0xEAB6, 0x7513}, //18657 #CJK UNIFIED IDEOGRAPH + {0xEAB7, 0x6534}, //18658 #CJK UNIFIED IDEOGRAPH + {0xEAB8, 0x65EE}, //18659 #CJK UNIFIED IDEOGRAPH + {0xEAB9, 0x65EF}, //18660 #CJK UNIFIED IDEOGRAPH + {0xEABA, 0x65F0}, //18661 #CJK UNIFIED IDEOGRAPH + {0xEABB, 0x660A}, //18662 #CJK UNIFIED IDEOGRAPH + {0xEABC, 0x6619}, //18663 #CJK UNIFIED IDEOGRAPH + {0xEABD, 0x6772}, //18664 #CJK UNIFIED IDEOGRAPH + {0xEABE, 0x6603}, //18665 #CJK UNIFIED IDEOGRAPH + {0xEABF, 0x6615}, //18666 #CJK UNIFIED IDEOGRAPH + {0xEAC0, 0x6600}, //18667 #CJK UNIFIED IDEOGRAPH + {0xEAC1, 0x7085}, //18668 #CJK UNIFIED IDEOGRAPH + {0xEAC2, 0x66F7}, //18669 #CJK UNIFIED IDEOGRAPH + {0xEAC3, 0x661D}, //18670 #CJK UNIFIED IDEOGRAPH + {0xEAC4, 0x6634}, //18671 #CJK UNIFIED IDEOGRAPH + {0xEAC5, 0x6631}, //18672 #CJK UNIFIED IDEOGRAPH + {0xEAC6, 0x6636}, //18673 #CJK UNIFIED IDEOGRAPH + {0xEAC7, 0x6635}, //18674 #CJK UNIFIED IDEOGRAPH + {0xEAC8, 0x8006}, //18675 #CJK UNIFIED IDEOGRAPH + {0xEAC9, 0x665F}, //18676 #CJK UNIFIED IDEOGRAPH + {0xEACA, 0x6654}, //18677 #CJK UNIFIED IDEOGRAPH + {0xEACB, 0x6641}, //18678 #CJK UNIFIED IDEOGRAPH + {0xEACC, 0x664F}, //18679 #CJK UNIFIED IDEOGRAPH + {0xEACD, 0x6656}, //18680 #CJK UNIFIED IDEOGRAPH + {0xEACE, 0x6661}, //18681 #CJK UNIFIED IDEOGRAPH + {0xEACF, 0x6657}, //18682 #CJK UNIFIED IDEOGRAPH + {0xEAD0, 0x6677}, //18683 #CJK UNIFIED IDEOGRAPH + {0xEAD1, 0x6684}, //18684 #CJK UNIFIED IDEOGRAPH + {0xEAD2, 0x668C}, //18685 #CJK UNIFIED IDEOGRAPH + {0xEAD3, 0x66A7}, //18686 #CJK UNIFIED IDEOGRAPH + {0xEAD4, 0x669D}, //18687 #CJK UNIFIED IDEOGRAPH + {0xEAD5, 0x66BE}, //18688 #CJK UNIFIED IDEOGRAPH + {0xEAD6, 0x66DB}, //18689 #CJK UNIFIED IDEOGRAPH + {0xEAD7, 0x66DC}, //18690 #CJK UNIFIED IDEOGRAPH + {0xEAD8, 0x66E6}, //18691 #CJK UNIFIED IDEOGRAPH + {0xEAD9, 0x66E9}, //18692 #CJK UNIFIED IDEOGRAPH + {0xEADA, 0x8D32}, //18693 #CJK UNIFIED IDEOGRAPH + {0xEADB, 0x8D33}, //18694 #CJK UNIFIED IDEOGRAPH + {0xEADC, 0x8D36}, //18695 #CJK UNIFIED IDEOGRAPH + {0xEADD, 0x8D3B}, //18696 #CJK UNIFIED IDEOGRAPH + {0xEADE, 0x8D3D}, //18697 #CJK UNIFIED IDEOGRAPH + {0xEADF, 0x8D40}, //18698 #CJK UNIFIED IDEOGRAPH + {0xEAE0, 0x8D45}, //18699 #CJK UNIFIED IDEOGRAPH + {0xEAE1, 0x8D46}, //18700 #CJK UNIFIED IDEOGRAPH + {0xEAE2, 0x8D48}, //18701 #CJK UNIFIED IDEOGRAPH + {0xEAE3, 0x8D49}, //18702 #CJK UNIFIED IDEOGRAPH + {0xEAE4, 0x8D47}, //18703 #CJK UNIFIED IDEOGRAPH + {0xEAE5, 0x8D4D}, //18704 #CJK UNIFIED IDEOGRAPH + {0xEAE6, 0x8D55}, //18705 #CJK UNIFIED IDEOGRAPH + {0xEAE7, 0x8D59}, //18706 #CJK UNIFIED IDEOGRAPH + {0xEAE8, 0x89C7}, //18707 #CJK UNIFIED IDEOGRAPH + {0xEAE9, 0x89CA}, //18708 #CJK UNIFIED IDEOGRAPH + {0xEAEA, 0x89CB}, //18709 #CJK UNIFIED IDEOGRAPH + {0xEAEB, 0x89CC}, //18710 #CJK UNIFIED IDEOGRAPH + {0xEAEC, 0x89CE}, //18711 #CJK UNIFIED IDEOGRAPH + {0xEAED, 0x89CF}, //18712 #CJK UNIFIED IDEOGRAPH + {0xEAEE, 0x89D0}, //18713 #CJK UNIFIED IDEOGRAPH + {0xEAEF, 0x89D1}, //18714 #CJK UNIFIED IDEOGRAPH + {0xEAF0, 0x726E}, //18715 #CJK UNIFIED IDEOGRAPH + {0xEAF1, 0x729F}, //18716 #CJK UNIFIED IDEOGRAPH + {0xEAF2, 0x725D}, //18717 #CJK UNIFIED IDEOGRAPH + {0xEAF3, 0x7266}, //18718 #CJK UNIFIED IDEOGRAPH + {0xEAF4, 0x726F}, //18719 #CJK UNIFIED IDEOGRAPH + {0xEAF5, 0x727E}, //18720 #CJK UNIFIED IDEOGRAPH + {0xEAF6, 0x727F}, //18721 #CJK UNIFIED IDEOGRAPH + {0xEAF7, 0x7284}, //18722 #CJK UNIFIED IDEOGRAPH + {0xEAF8, 0x728B}, //18723 #CJK UNIFIED IDEOGRAPH + {0xEAF9, 0x728D}, //18724 #CJK UNIFIED IDEOGRAPH + {0xEAFA, 0x728F}, //18725 #CJK UNIFIED IDEOGRAPH + {0xEAFB, 0x7292}, //18726 #CJK UNIFIED IDEOGRAPH + {0xEAFC, 0x6308}, //18727 #CJK UNIFIED IDEOGRAPH + {0xEAFD, 0x6332}, //18728 #CJK UNIFIED IDEOGRAPH + {0xEAFE, 0x63B0}, //18729 #CJK UNIFIED IDEOGRAPH + {0xEB40, 0x968C}, //18730 #CJK UNIFIED IDEOGRAPH + {0xEB41, 0x968E}, //18731 #CJK UNIFIED IDEOGRAPH + {0xEB42, 0x9691}, //18732 #CJK UNIFIED IDEOGRAPH + {0xEB43, 0x9692}, //18733 #CJK UNIFIED IDEOGRAPH + {0xEB44, 0x9693}, //18734 #CJK UNIFIED IDEOGRAPH + {0xEB45, 0x9695}, //18735 #CJK UNIFIED IDEOGRAPH + {0xEB46, 0x9696}, //18736 #CJK UNIFIED IDEOGRAPH + {0xEB47, 0x969A}, //18737 #CJK UNIFIED IDEOGRAPH + {0xEB48, 0x969B}, //18738 #CJK UNIFIED IDEOGRAPH + {0xEB49, 0x969D}, //18739 #CJK UNIFIED IDEOGRAPH + {0xEB4A, 0x969E}, //18740 #CJK UNIFIED IDEOGRAPH + {0xEB4B, 0x969F}, //18741 #CJK UNIFIED IDEOGRAPH + {0xEB4C, 0x96A0}, //18742 #CJK UNIFIED IDEOGRAPH + {0xEB4D, 0x96A1}, //18743 #CJK UNIFIED IDEOGRAPH + {0xEB4E, 0x96A2}, //18744 #CJK UNIFIED IDEOGRAPH + {0xEB4F, 0x96A3}, //18745 #CJK UNIFIED IDEOGRAPH + {0xEB50, 0x96A4}, //18746 #CJK UNIFIED IDEOGRAPH + {0xEB51, 0x96A5}, //18747 #CJK UNIFIED IDEOGRAPH + {0xEB52, 0x96A6}, //18748 #CJK UNIFIED IDEOGRAPH + {0xEB53, 0x96A8}, //18749 #CJK UNIFIED IDEOGRAPH + {0xEB54, 0x96A9}, //18750 #CJK UNIFIED IDEOGRAPH + {0xEB55, 0x96AA}, //18751 #CJK UNIFIED IDEOGRAPH + {0xEB56, 0x96AB}, //18752 #CJK UNIFIED IDEOGRAPH + {0xEB57, 0x96AC}, //18753 #CJK UNIFIED IDEOGRAPH + {0xEB58, 0x96AD}, //18754 #CJK UNIFIED IDEOGRAPH + {0xEB59, 0x96AE}, //18755 #CJK UNIFIED IDEOGRAPH + {0xEB5A, 0x96AF}, //18756 #CJK UNIFIED IDEOGRAPH + {0xEB5B, 0x96B1}, //18757 #CJK UNIFIED IDEOGRAPH + {0xEB5C, 0x96B2}, //18758 #CJK UNIFIED IDEOGRAPH + {0xEB5D, 0x96B4}, //18759 #CJK UNIFIED IDEOGRAPH + {0xEB5E, 0x96B5}, //18760 #CJK UNIFIED IDEOGRAPH + {0xEB5F, 0x96B7}, //18761 #CJK UNIFIED IDEOGRAPH + {0xEB60, 0x96B8}, //18762 #CJK UNIFIED IDEOGRAPH + {0xEB61, 0x96BA}, //18763 #CJK UNIFIED IDEOGRAPH + {0xEB62, 0x96BB}, //18764 #CJK UNIFIED IDEOGRAPH + {0xEB63, 0x96BF}, //18765 #CJK UNIFIED IDEOGRAPH + {0xEB64, 0x96C2}, //18766 #CJK UNIFIED IDEOGRAPH + {0xEB65, 0x96C3}, //18767 #CJK UNIFIED IDEOGRAPH + {0xEB66, 0x96C8}, //18768 #CJK UNIFIED IDEOGRAPH + {0xEB67, 0x96CA}, //18769 #CJK UNIFIED IDEOGRAPH + {0xEB68, 0x96CB}, //18770 #CJK UNIFIED IDEOGRAPH + {0xEB69, 0x96D0}, //18771 #CJK UNIFIED IDEOGRAPH + {0xEB6A, 0x96D1}, //18772 #CJK UNIFIED IDEOGRAPH + {0xEB6B, 0x96D3}, //18773 #CJK UNIFIED IDEOGRAPH + {0xEB6C, 0x96D4}, //18774 #CJK UNIFIED IDEOGRAPH + {0xEB6D, 0x96D6}, //18775 #CJK UNIFIED IDEOGRAPH + {0xEB6E, 0x96D7}, //18776 #CJK UNIFIED IDEOGRAPH + {0xEB6F, 0x96D8}, //18777 #CJK UNIFIED IDEOGRAPH + {0xEB70, 0x96D9}, //18778 #CJK UNIFIED IDEOGRAPH + {0xEB71, 0x96DA}, //18779 #CJK UNIFIED IDEOGRAPH + {0xEB72, 0x96DB}, //18780 #CJK UNIFIED IDEOGRAPH + {0xEB73, 0x96DC}, //18781 #CJK UNIFIED IDEOGRAPH + {0xEB74, 0x96DD}, //18782 #CJK UNIFIED IDEOGRAPH + {0xEB75, 0x96DE}, //18783 #CJK UNIFIED IDEOGRAPH + {0xEB76, 0x96DF}, //18784 #CJK UNIFIED IDEOGRAPH + {0xEB77, 0x96E1}, //18785 #CJK UNIFIED IDEOGRAPH + {0xEB78, 0x96E2}, //18786 #CJK UNIFIED IDEOGRAPH + {0xEB79, 0x96E3}, //18787 #CJK UNIFIED IDEOGRAPH + {0xEB7A, 0x96E4}, //18788 #CJK UNIFIED IDEOGRAPH + {0xEB7B, 0x96E5}, //18789 #CJK UNIFIED IDEOGRAPH + {0xEB7C, 0x96E6}, //18790 #CJK UNIFIED IDEOGRAPH + {0xEB7D, 0x96E7}, //18791 #CJK UNIFIED IDEOGRAPH + {0xEB7E, 0x96EB}, //18792 #CJK UNIFIED IDEOGRAPH + {0xEB80, 0x96EC}, //18793 #CJK UNIFIED IDEOGRAPH + {0xEB81, 0x96ED}, //18794 #CJK UNIFIED IDEOGRAPH + {0xEB82, 0x96EE}, //18795 #CJK UNIFIED IDEOGRAPH + {0xEB83, 0x96F0}, //18796 #CJK UNIFIED IDEOGRAPH + {0xEB84, 0x96F1}, //18797 #CJK UNIFIED IDEOGRAPH + {0xEB85, 0x96F2}, //18798 #CJK UNIFIED IDEOGRAPH + {0xEB86, 0x96F4}, //18799 #CJK UNIFIED IDEOGRAPH + {0xEB87, 0x96F5}, //18800 #CJK UNIFIED IDEOGRAPH + {0xEB88, 0x96F8}, //18801 #CJK UNIFIED IDEOGRAPH + {0xEB89, 0x96FA}, //18802 #CJK UNIFIED IDEOGRAPH + {0xEB8A, 0x96FB}, //18803 #CJK UNIFIED IDEOGRAPH + {0xEB8B, 0x96FC}, //18804 #CJK UNIFIED IDEOGRAPH + {0xEB8C, 0x96FD}, //18805 #CJK UNIFIED IDEOGRAPH + {0xEB8D, 0x96FF}, //18806 #CJK UNIFIED IDEOGRAPH + {0xEB8E, 0x9702}, //18807 #CJK UNIFIED IDEOGRAPH + {0xEB8F, 0x9703}, //18808 #CJK UNIFIED IDEOGRAPH + {0xEB90, 0x9705}, //18809 #CJK UNIFIED IDEOGRAPH + {0xEB91, 0x970A}, //18810 #CJK UNIFIED IDEOGRAPH + {0xEB92, 0x970B}, //18811 #CJK UNIFIED IDEOGRAPH + {0xEB93, 0x970C}, //18812 #CJK UNIFIED IDEOGRAPH + {0xEB94, 0x9710}, //18813 #CJK UNIFIED IDEOGRAPH + {0xEB95, 0x9711}, //18814 #CJK UNIFIED IDEOGRAPH + {0xEB96, 0x9712}, //18815 #CJK UNIFIED IDEOGRAPH + {0xEB97, 0x9714}, //18816 #CJK UNIFIED IDEOGRAPH + {0xEB98, 0x9715}, //18817 #CJK UNIFIED IDEOGRAPH + {0xEB99, 0x9717}, //18818 #CJK UNIFIED IDEOGRAPH + {0xEB9A, 0x9718}, //18819 #CJK UNIFIED IDEOGRAPH + {0xEB9B, 0x9719}, //18820 #CJK UNIFIED IDEOGRAPH + {0xEB9C, 0x971A}, //18821 #CJK UNIFIED IDEOGRAPH + {0xEB9D, 0x971B}, //18822 #CJK UNIFIED IDEOGRAPH + {0xEB9E, 0x971D}, //18823 #CJK UNIFIED IDEOGRAPH + {0xEB9F, 0x971F}, //18824 #CJK UNIFIED IDEOGRAPH + {0xEBA0, 0x9720}, //18825 #CJK UNIFIED IDEOGRAPH + {0xEBA1, 0x643F}, //18826 #CJK UNIFIED IDEOGRAPH + {0xEBA2, 0x64D8}, //18827 #CJK UNIFIED IDEOGRAPH + {0xEBA3, 0x8004}, //18828 #CJK UNIFIED IDEOGRAPH + {0xEBA4, 0x6BEA}, //18829 #CJK UNIFIED IDEOGRAPH + {0xEBA5, 0x6BF3}, //18830 #CJK UNIFIED IDEOGRAPH + {0xEBA6, 0x6BFD}, //18831 #CJK UNIFIED IDEOGRAPH + {0xEBA7, 0x6BF5}, //18832 #CJK UNIFIED IDEOGRAPH + {0xEBA8, 0x6BF9}, //18833 #CJK UNIFIED IDEOGRAPH + {0xEBA9, 0x6C05}, //18834 #CJK UNIFIED IDEOGRAPH + {0xEBAA, 0x6C07}, //18835 #CJK UNIFIED IDEOGRAPH + {0xEBAB, 0x6C06}, //18836 #CJK UNIFIED IDEOGRAPH + {0xEBAC, 0x6C0D}, //18837 #CJK UNIFIED IDEOGRAPH + {0xEBAD, 0x6C15}, //18838 #CJK UNIFIED IDEOGRAPH + {0xEBAE, 0x6C18}, //18839 #CJK UNIFIED IDEOGRAPH + {0xEBAF, 0x6C19}, //18840 #CJK UNIFIED IDEOGRAPH + {0xEBB0, 0x6C1A}, //18841 #CJK UNIFIED IDEOGRAPH + {0xEBB1, 0x6C21}, //18842 #CJK UNIFIED IDEOGRAPH + {0xEBB2, 0x6C29}, //18843 #CJK UNIFIED IDEOGRAPH + {0xEBB3, 0x6C24}, //18844 #CJK UNIFIED IDEOGRAPH + {0xEBB4, 0x6C2A}, //18845 #CJK UNIFIED IDEOGRAPH + {0xEBB5, 0x6C32}, //18846 #CJK UNIFIED IDEOGRAPH + {0xEBB6, 0x6535}, //18847 #CJK UNIFIED IDEOGRAPH + {0xEBB7, 0x6555}, //18848 #CJK UNIFIED IDEOGRAPH + {0xEBB8, 0x656B}, //18849 #CJK UNIFIED IDEOGRAPH + {0xEBB9, 0x724D}, //18850 #CJK UNIFIED IDEOGRAPH + {0xEBBA, 0x7252}, //18851 #CJK UNIFIED IDEOGRAPH + {0xEBBB, 0x7256}, //18852 #CJK UNIFIED IDEOGRAPH + {0xEBBC, 0x7230}, //18853 #CJK UNIFIED IDEOGRAPH + {0xEBBD, 0x8662}, //18854 #CJK UNIFIED IDEOGRAPH + {0xEBBE, 0x5216}, //18855 #CJK UNIFIED IDEOGRAPH + {0xEBBF, 0x809F}, //18856 #CJK UNIFIED IDEOGRAPH + {0xEBC0, 0x809C}, //18857 #CJK UNIFIED IDEOGRAPH + {0xEBC1, 0x8093}, //18858 #CJK UNIFIED IDEOGRAPH + {0xEBC2, 0x80BC}, //18859 #CJK UNIFIED IDEOGRAPH + {0xEBC3, 0x670A}, //18860 #CJK UNIFIED IDEOGRAPH + {0xEBC4, 0x80BD}, //18861 #CJK UNIFIED IDEOGRAPH + {0xEBC5, 0x80B1}, //18862 #CJK UNIFIED IDEOGRAPH + {0xEBC6, 0x80AB}, //18863 #CJK UNIFIED IDEOGRAPH + {0xEBC7, 0x80AD}, //18864 #CJK UNIFIED IDEOGRAPH + {0xEBC8, 0x80B4}, //18865 #CJK UNIFIED IDEOGRAPH + {0xEBC9, 0x80B7}, //18866 #CJK UNIFIED IDEOGRAPH + {0xEBCA, 0x80E7}, //18867 #CJK UNIFIED IDEOGRAPH + {0xEBCB, 0x80E8}, //18868 #CJK UNIFIED IDEOGRAPH + {0xEBCC, 0x80E9}, //18869 #CJK UNIFIED IDEOGRAPH + {0xEBCD, 0x80EA}, //18870 #CJK UNIFIED IDEOGRAPH + {0xEBCE, 0x80DB}, //18871 #CJK UNIFIED IDEOGRAPH + {0xEBCF, 0x80C2}, //18872 #CJK UNIFIED IDEOGRAPH + {0xEBD0, 0x80C4}, //18873 #CJK UNIFIED IDEOGRAPH + {0xEBD1, 0x80D9}, //18874 #CJK UNIFIED IDEOGRAPH + {0xEBD2, 0x80CD}, //18875 #CJK UNIFIED IDEOGRAPH + {0xEBD3, 0x80D7}, //18876 #CJK UNIFIED IDEOGRAPH + {0xEBD4, 0x6710}, //18877 #CJK UNIFIED IDEOGRAPH + {0xEBD5, 0x80DD}, //18878 #CJK UNIFIED IDEOGRAPH + {0xEBD6, 0x80EB}, //18879 #CJK UNIFIED IDEOGRAPH + {0xEBD7, 0x80F1}, //18880 #CJK UNIFIED IDEOGRAPH + {0xEBD8, 0x80F4}, //18881 #CJK UNIFIED IDEOGRAPH + {0xEBD9, 0x80ED}, //18882 #CJK UNIFIED IDEOGRAPH + {0xEBDA, 0x810D}, //18883 #CJK UNIFIED IDEOGRAPH + {0xEBDB, 0x810E}, //18884 #CJK UNIFIED IDEOGRAPH + {0xEBDC, 0x80F2}, //18885 #CJK UNIFIED IDEOGRAPH + {0xEBDD, 0x80FC}, //18886 #CJK UNIFIED IDEOGRAPH + {0xEBDE, 0x6715}, //18887 #CJK UNIFIED IDEOGRAPH + {0xEBDF, 0x8112}, //18888 #CJK UNIFIED IDEOGRAPH + {0xEBE0, 0x8C5A}, //18889 #CJK UNIFIED IDEOGRAPH + {0xEBE1, 0x8136}, //18890 #CJK UNIFIED IDEOGRAPH + {0xEBE2, 0x811E}, //18891 #CJK UNIFIED IDEOGRAPH + {0xEBE3, 0x812C}, //18892 #CJK UNIFIED IDEOGRAPH + {0xEBE4, 0x8118}, //18893 #CJK UNIFIED IDEOGRAPH + {0xEBE5, 0x8132}, //18894 #CJK UNIFIED IDEOGRAPH + {0xEBE6, 0x8148}, //18895 #CJK UNIFIED IDEOGRAPH + {0xEBE7, 0x814C}, //18896 #CJK UNIFIED IDEOGRAPH + {0xEBE8, 0x8153}, //18897 #CJK UNIFIED IDEOGRAPH + {0xEBE9, 0x8174}, //18898 #CJK UNIFIED IDEOGRAPH + {0xEBEA, 0x8159}, //18899 #CJK UNIFIED IDEOGRAPH + {0xEBEB, 0x815A}, //18900 #CJK UNIFIED IDEOGRAPH + {0xEBEC, 0x8171}, //18901 #CJK UNIFIED IDEOGRAPH + {0xEBED, 0x8160}, //18902 #CJK UNIFIED IDEOGRAPH + {0xEBEE, 0x8169}, //18903 #CJK UNIFIED IDEOGRAPH + {0xEBEF, 0x817C}, //18904 #CJK UNIFIED IDEOGRAPH + {0xEBF0, 0x817D}, //18905 #CJK UNIFIED IDEOGRAPH + {0xEBF1, 0x816D}, //18906 #CJK UNIFIED IDEOGRAPH + {0xEBF2, 0x8167}, //18907 #CJK UNIFIED IDEOGRAPH + {0xEBF3, 0x584D}, //18908 #CJK UNIFIED IDEOGRAPH + {0xEBF4, 0x5AB5}, //18909 #CJK UNIFIED IDEOGRAPH + {0xEBF5, 0x8188}, //18910 #CJK UNIFIED IDEOGRAPH + {0xEBF6, 0x8182}, //18911 #CJK UNIFIED IDEOGRAPH + {0xEBF7, 0x8191}, //18912 #CJK UNIFIED IDEOGRAPH + {0xEBF8, 0x6ED5}, //18913 #CJK UNIFIED IDEOGRAPH + {0xEBF9, 0x81A3}, //18914 #CJK UNIFIED IDEOGRAPH + {0xEBFA, 0x81AA}, //18915 #CJK UNIFIED IDEOGRAPH + {0xEBFB, 0x81CC}, //18916 #CJK UNIFIED IDEOGRAPH + {0xEBFC, 0x6726}, //18917 #CJK UNIFIED IDEOGRAPH + {0xEBFD, 0x81CA}, //18918 #CJK UNIFIED IDEOGRAPH + {0xEBFE, 0x81BB}, //18919 #CJK UNIFIED IDEOGRAPH + {0xEC40, 0x9721}, //18920 #CJK UNIFIED IDEOGRAPH + {0xEC41, 0x9722}, //18921 #CJK UNIFIED IDEOGRAPH + {0xEC42, 0x9723}, //18922 #CJK UNIFIED IDEOGRAPH + {0xEC43, 0x9724}, //18923 #CJK UNIFIED IDEOGRAPH + {0xEC44, 0x9725}, //18924 #CJK UNIFIED IDEOGRAPH + {0xEC45, 0x9726}, //18925 #CJK UNIFIED IDEOGRAPH + {0xEC46, 0x9727}, //18926 #CJK UNIFIED IDEOGRAPH + {0xEC47, 0x9728}, //18927 #CJK UNIFIED IDEOGRAPH + {0xEC48, 0x9729}, //18928 #CJK UNIFIED IDEOGRAPH + {0xEC49, 0x972B}, //18929 #CJK UNIFIED IDEOGRAPH + {0xEC4A, 0x972C}, //18930 #CJK UNIFIED IDEOGRAPH + {0xEC4B, 0x972E}, //18931 #CJK UNIFIED IDEOGRAPH + {0xEC4C, 0x972F}, //18932 #CJK UNIFIED IDEOGRAPH + {0xEC4D, 0x9731}, //18933 #CJK UNIFIED IDEOGRAPH + {0xEC4E, 0x9733}, //18934 #CJK UNIFIED IDEOGRAPH + {0xEC4F, 0x9734}, //18935 #CJK UNIFIED IDEOGRAPH + {0xEC50, 0x9735}, //18936 #CJK UNIFIED IDEOGRAPH + {0xEC51, 0x9736}, //18937 #CJK UNIFIED IDEOGRAPH + {0xEC52, 0x9737}, //18938 #CJK UNIFIED IDEOGRAPH + {0xEC53, 0x973A}, //18939 #CJK UNIFIED IDEOGRAPH + {0xEC54, 0x973B}, //18940 #CJK UNIFIED IDEOGRAPH + {0xEC55, 0x973C}, //18941 #CJK UNIFIED IDEOGRAPH + {0xEC56, 0x973D}, //18942 #CJK UNIFIED IDEOGRAPH + {0xEC57, 0x973F}, //18943 #CJK UNIFIED IDEOGRAPH + {0xEC58, 0x9740}, //18944 #CJK UNIFIED IDEOGRAPH + {0xEC59, 0x9741}, //18945 #CJK UNIFIED IDEOGRAPH + {0xEC5A, 0x9742}, //18946 #CJK UNIFIED IDEOGRAPH + {0xEC5B, 0x9743}, //18947 #CJK UNIFIED IDEOGRAPH + {0xEC5C, 0x9744}, //18948 #CJK UNIFIED IDEOGRAPH + {0xEC5D, 0x9745}, //18949 #CJK UNIFIED IDEOGRAPH + {0xEC5E, 0x9746}, //18950 #CJK UNIFIED IDEOGRAPH + {0xEC5F, 0x9747}, //18951 #CJK UNIFIED IDEOGRAPH + {0xEC60, 0x9748}, //18952 #CJK UNIFIED IDEOGRAPH + {0xEC61, 0x9749}, //18953 #CJK UNIFIED IDEOGRAPH + {0xEC62, 0x974A}, //18954 #CJK UNIFIED IDEOGRAPH + {0xEC63, 0x974B}, //18955 #CJK UNIFIED IDEOGRAPH + {0xEC64, 0x974C}, //18956 #CJK UNIFIED IDEOGRAPH + {0xEC65, 0x974D}, //18957 #CJK UNIFIED IDEOGRAPH + {0xEC66, 0x974E}, //18958 #CJK UNIFIED IDEOGRAPH + {0xEC67, 0x974F}, //18959 #CJK UNIFIED IDEOGRAPH + {0xEC68, 0x9750}, //18960 #CJK UNIFIED IDEOGRAPH + {0xEC69, 0x9751}, //18961 #CJK UNIFIED IDEOGRAPH + {0xEC6A, 0x9754}, //18962 #CJK UNIFIED IDEOGRAPH + {0xEC6B, 0x9755}, //18963 #CJK UNIFIED IDEOGRAPH + {0xEC6C, 0x9757}, //18964 #CJK UNIFIED IDEOGRAPH + {0xEC6D, 0x9758}, //18965 #CJK UNIFIED IDEOGRAPH + {0xEC6E, 0x975A}, //18966 #CJK UNIFIED IDEOGRAPH + {0xEC6F, 0x975C}, //18967 #CJK UNIFIED IDEOGRAPH + {0xEC70, 0x975D}, //18968 #CJK UNIFIED IDEOGRAPH + {0xEC71, 0x975F}, //18969 #CJK UNIFIED IDEOGRAPH + {0xEC72, 0x9763}, //18970 #CJK UNIFIED IDEOGRAPH + {0xEC73, 0x9764}, //18971 #CJK UNIFIED IDEOGRAPH + {0xEC74, 0x9766}, //18972 #CJK UNIFIED IDEOGRAPH + {0xEC75, 0x9767}, //18973 #CJK UNIFIED IDEOGRAPH + {0xEC76, 0x9768}, //18974 #CJK UNIFIED IDEOGRAPH + {0xEC77, 0x976A}, //18975 #CJK UNIFIED IDEOGRAPH + {0xEC78, 0x976B}, //18976 #CJK UNIFIED IDEOGRAPH + {0xEC79, 0x976C}, //18977 #CJK UNIFIED IDEOGRAPH + {0xEC7A, 0x976D}, //18978 #CJK UNIFIED IDEOGRAPH + {0xEC7B, 0x976E}, //18979 #CJK UNIFIED IDEOGRAPH + {0xEC7C, 0x976F}, //18980 #CJK UNIFIED IDEOGRAPH + {0xEC7D, 0x9770}, //18981 #CJK UNIFIED IDEOGRAPH + {0xEC7E, 0x9771}, //18982 #CJK UNIFIED IDEOGRAPH + {0xEC80, 0x9772}, //18983 #CJK UNIFIED IDEOGRAPH + {0xEC81, 0x9775}, //18984 #CJK UNIFIED IDEOGRAPH + {0xEC82, 0x9777}, //18985 #CJK UNIFIED IDEOGRAPH + {0xEC83, 0x9778}, //18986 #CJK UNIFIED IDEOGRAPH + {0xEC84, 0x9779}, //18987 #CJK UNIFIED IDEOGRAPH + {0xEC85, 0x977A}, //18988 #CJK UNIFIED IDEOGRAPH + {0xEC86, 0x977B}, //18989 #CJK UNIFIED IDEOGRAPH + {0xEC87, 0x977D}, //18990 #CJK UNIFIED IDEOGRAPH + {0xEC88, 0x977E}, //18991 #CJK UNIFIED IDEOGRAPH + {0xEC89, 0x977F}, //18992 #CJK UNIFIED IDEOGRAPH + {0xEC8A, 0x9780}, //18993 #CJK UNIFIED IDEOGRAPH + {0xEC8B, 0x9781}, //18994 #CJK UNIFIED IDEOGRAPH + {0xEC8C, 0x9782}, //18995 #CJK UNIFIED IDEOGRAPH + {0xEC8D, 0x9783}, //18996 #CJK UNIFIED IDEOGRAPH + {0xEC8E, 0x9784}, //18997 #CJK UNIFIED IDEOGRAPH + {0xEC8F, 0x9786}, //18998 #CJK UNIFIED IDEOGRAPH + {0xEC90, 0x9787}, //18999 #CJK UNIFIED IDEOGRAPH + {0xEC91, 0x9788}, //19000 #CJK UNIFIED IDEOGRAPH + {0xEC92, 0x9789}, //19001 #CJK UNIFIED IDEOGRAPH + {0xEC93, 0x978A}, //19002 #CJK UNIFIED IDEOGRAPH + {0xEC94, 0x978C}, //19003 #CJK UNIFIED IDEOGRAPH + {0xEC95, 0x978E}, //19004 #CJK UNIFIED IDEOGRAPH + {0xEC96, 0x978F}, //19005 #CJK UNIFIED IDEOGRAPH + {0xEC97, 0x9790}, //19006 #CJK UNIFIED IDEOGRAPH + {0xEC98, 0x9793}, //19007 #CJK UNIFIED IDEOGRAPH + {0xEC99, 0x9795}, //19008 #CJK UNIFIED IDEOGRAPH + {0xEC9A, 0x9796}, //19009 #CJK UNIFIED IDEOGRAPH + {0xEC9B, 0x9797}, //19010 #CJK UNIFIED IDEOGRAPH + {0xEC9C, 0x9799}, //19011 #CJK UNIFIED IDEOGRAPH + {0xEC9D, 0x979A}, //19012 #CJK UNIFIED IDEOGRAPH + {0xEC9E, 0x979B}, //19013 #CJK UNIFIED IDEOGRAPH + {0xEC9F, 0x979C}, //19014 #CJK UNIFIED IDEOGRAPH + {0xECA0, 0x979D}, //19015 #CJK UNIFIED IDEOGRAPH + {0xECA1, 0x81C1}, //19016 #CJK UNIFIED IDEOGRAPH + {0xECA2, 0x81A6}, //19017 #CJK UNIFIED IDEOGRAPH + {0xECA3, 0x6B24}, //19018 #CJK UNIFIED IDEOGRAPH + {0xECA4, 0x6B37}, //19019 #CJK UNIFIED IDEOGRAPH + {0xECA5, 0x6B39}, //19020 #CJK UNIFIED IDEOGRAPH + {0xECA6, 0x6B43}, //19021 #CJK UNIFIED IDEOGRAPH + {0xECA7, 0x6B46}, //19022 #CJK UNIFIED IDEOGRAPH + {0xECA8, 0x6B59}, //19023 #CJK UNIFIED IDEOGRAPH + {0xECA9, 0x98D1}, //19024 #CJK UNIFIED IDEOGRAPH + {0xECAA, 0x98D2}, //19025 #CJK UNIFIED IDEOGRAPH + {0xECAB, 0x98D3}, //19026 #CJK UNIFIED IDEOGRAPH + {0xECAC, 0x98D5}, //19027 #CJK UNIFIED IDEOGRAPH + {0xECAD, 0x98D9}, //19028 #CJK UNIFIED IDEOGRAPH + {0xECAE, 0x98DA}, //19029 #CJK UNIFIED IDEOGRAPH + {0xECAF, 0x6BB3}, //19030 #CJK UNIFIED IDEOGRAPH + {0xECB0, 0x5F40}, //19031 #CJK UNIFIED IDEOGRAPH + {0xECB1, 0x6BC2}, //19032 #CJK UNIFIED IDEOGRAPH + {0xECB2, 0x89F3}, //19033 #CJK UNIFIED IDEOGRAPH + {0xECB3, 0x6590}, //19034 #CJK UNIFIED IDEOGRAPH + {0xECB4, 0x9F51}, //19035 #CJK UNIFIED IDEOGRAPH + {0xECB5, 0x6593}, //19036 #CJK UNIFIED IDEOGRAPH + {0xECB6, 0x65BC}, //19037 #CJK UNIFIED IDEOGRAPH + {0xECB7, 0x65C6}, //19038 #CJK UNIFIED IDEOGRAPH + {0xECB8, 0x65C4}, //19039 #CJK UNIFIED IDEOGRAPH + {0xECB9, 0x65C3}, //19040 #CJK UNIFIED IDEOGRAPH + {0xECBA, 0x65CC}, //19041 #CJK UNIFIED IDEOGRAPH + {0xECBB, 0x65CE}, //19042 #CJK UNIFIED IDEOGRAPH + {0xECBC, 0x65D2}, //19043 #CJK UNIFIED IDEOGRAPH + {0xECBD, 0x65D6}, //19044 #CJK UNIFIED IDEOGRAPH + {0xECBE, 0x7080}, //19045 #CJK UNIFIED IDEOGRAPH + {0xECBF, 0x709C}, //19046 #CJK UNIFIED IDEOGRAPH + {0xECC0, 0x7096}, //19047 #CJK UNIFIED IDEOGRAPH + {0xECC1, 0x709D}, //19048 #CJK UNIFIED IDEOGRAPH + {0xECC2, 0x70BB}, //19049 #CJK UNIFIED IDEOGRAPH + {0xECC3, 0x70C0}, //19050 #CJK UNIFIED IDEOGRAPH + {0xECC4, 0x70B7}, //19051 #CJK UNIFIED IDEOGRAPH + {0xECC5, 0x70AB}, //19052 #CJK UNIFIED IDEOGRAPH + {0xECC6, 0x70B1}, //19053 #CJK UNIFIED IDEOGRAPH + {0xECC7, 0x70E8}, //19054 #CJK UNIFIED IDEOGRAPH + {0xECC8, 0x70CA}, //19055 #CJK UNIFIED IDEOGRAPH + {0xECC9, 0x7110}, //19056 #CJK UNIFIED IDEOGRAPH + {0xECCA, 0x7113}, //19057 #CJK UNIFIED IDEOGRAPH + {0xECCB, 0x7116}, //19058 #CJK UNIFIED IDEOGRAPH + {0xECCC, 0x712F}, //19059 #CJK UNIFIED IDEOGRAPH + {0xECCD, 0x7131}, //19060 #CJK UNIFIED IDEOGRAPH + {0xECCE, 0x7173}, //19061 #CJK UNIFIED IDEOGRAPH + {0xECCF, 0x715C}, //19062 #CJK UNIFIED IDEOGRAPH + {0xECD0, 0x7168}, //19063 #CJK UNIFIED IDEOGRAPH + {0xECD1, 0x7145}, //19064 #CJK UNIFIED IDEOGRAPH + {0xECD2, 0x7172}, //19065 #CJK UNIFIED IDEOGRAPH + {0xECD3, 0x714A}, //19066 #CJK UNIFIED IDEOGRAPH + {0xECD4, 0x7178}, //19067 #CJK UNIFIED IDEOGRAPH + {0xECD5, 0x717A}, //19068 #CJK UNIFIED IDEOGRAPH + {0xECD6, 0x7198}, //19069 #CJK UNIFIED IDEOGRAPH + {0xECD7, 0x71B3}, //19070 #CJK UNIFIED IDEOGRAPH + {0xECD8, 0x71B5}, //19071 #CJK UNIFIED IDEOGRAPH + {0xECD9, 0x71A8}, //19072 #CJK UNIFIED IDEOGRAPH + {0xECDA, 0x71A0}, //19073 #CJK UNIFIED IDEOGRAPH + {0xECDB, 0x71E0}, //19074 #CJK UNIFIED IDEOGRAPH + {0xECDC, 0x71D4}, //19075 #CJK UNIFIED IDEOGRAPH + {0xECDD, 0x71E7}, //19076 #CJK UNIFIED IDEOGRAPH + {0xECDE, 0x71F9}, //19077 #CJK UNIFIED IDEOGRAPH + {0xECDF, 0x721D}, //19078 #CJK UNIFIED IDEOGRAPH + {0xECE0, 0x7228}, //19079 #CJK UNIFIED IDEOGRAPH + {0xECE1, 0x706C}, //19080 #CJK UNIFIED IDEOGRAPH + {0xECE2, 0x7118}, //19081 #CJK UNIFIED IDEOGRAPH + {0xECE3, 0x7166}, //19082 #CJK UNIFIED IDEOGRAPH + {0xECE4, 0x71B9}, //19083 #CJK UNIFIED IDEOGRAPH + {0xECE5, 0x623E}, //19084 #CJK UNIFIED IDEOGRAPH + {0xECE6, 0x623D}, //19085 #CJK UNIFIED IDEOGRAPH + {0xECE7, 0x6243}, //19086 #CJK UNIFIED IDEOGRAPH + {0xECE8, 0x6248}, //19087 #CJK UNIFIED IDEOGRAPH + {0xECE9, 0x6249}, //19088 #CJK UNIFIED IDEOGRAPH + {0xECEA, 0x793B}, //19089 #CJK UNIFIED IDEOGRAPH + {0xECEB, 0x7940}, //19090 #CJK UNIFIED IDEOGRAPH + {0xECEC, 0x7946}, //19091 #CJK UNIFIED IDEOGRAPH + {0xECED, 0x7949}, //19092 #CJK UNIFIED IDEOGRAPH + {0xECEE, 0x795B}, //19093 #CJK UNIFIED IDEOGRAPH + {0xECEF, 0x795C}, //19094 #CJK UNIFIED IDEOGRAPH + {0xECF0, 0x7953}, //19095 #CJK UNIFIED IDEOGRAPH + {0xECF1, 0x795A}, //19096 #CJK UNIFIED IDEOGRAPH + {0xECF2, 0x7962}, //19097 #CJK UNIFIED IDEOGRAPH + {0xECF3, 0x7957}, //19098 #CJK UNIFIED IDEOGRAPH + {0xECF4, 0x7960}, //19099 #CJK UNIFIED IDEOGRAPH + {0xECF5, 0x796F}, //19100 #CJK UNIFIED IDEOGRAPH + {0xECF6, 0x7967}, //19101 #CJK UNIFIED IDEOGRAPH + {0xECF7, 0x797A}, //19102 #CJK UNIFIED IDEOGRAPH + {0xECF8, 0x7985}, //19103 #CJK UNIFIED IDEOGRAPH + {0xECF9, 0x798A}, //19104 #CJK UNIFIED IDEOGRAPH + {0xECFA, 0x799A}, //19105 #CJK UNIFIED IDEOGRAPH + {0xECFB, 0x79A7}, //19106 #CJK UNIFIED IDEOGRAPH + {0xECFC, 0x79B3}, //19107 #CJK UNIFIED IDEOGRAPH + {0xECFD, 0x5FD1}, //19108 #CJK UNIFIED IDEOGRAPH + {0xECFE, 0x5FD0}, //19109 #CJK UNIFIED IDEOGRAPH + {0xED40, 0x979E}, //19110 #CJK UNIFIED IDEOGRAPH + {0xED41, 0x979F}, //19111 #CJK UNIFIED IDEOGRAPH + {0xED42, 0x97A1}, //19112 #CJK UNIFIED IDEOGRAPH + {0xED43, 0x97A2}, //19113 #CJK UNIFIED IDEOGRAPH + {0xED44, 0x97A4}, //19114 #CJK UNIFIED IDEOGRAPH + {0xED45, 0x97A5}, //19115 #CJK UNIFIED IDEOGRAPH + {0xED46, 0x97A6}, //19116 #CJK UNIFIED IDEOGRAPH + {0xED47, 0x97A7}, //19117 #CJK UNIFIED IDEOGRAPH + {0xED48, 0x97A8}, //19118 #CJK UNIFIED IDEOGRAPH + {0xED49, 0x97A9}, //19119 #CJK UNIFIED IDEOGRAPH + {0xED4A, 0x97AA}, //19120 #CJK UNIFIED IDEOGRAPH + {0xED4B, 0x97AC}, //19121 #CJK UNIFIED IDEOGRAPH + {0xED4C, 0x97AE}, //19122 #CJK UNIFIED IDEOGRAPH + {0xED4D, 0x97B0}, //19123 #CJK UNIFIED IDEOGRAPH + {0xED4E, 0x97B1}, //19124 #CJK UNIFIED IDEOGRAPH + {0xED4F, 0x97B3}, //19125 #CJK UNIFIED IDEOGRAPH + {0xED50, 0x97B5}, //19126 #CJK UNIFIED IDEOGRAPH + {0xED51, 0x97B6}, //19127 #CJK UNIFIED IDEOGRAPH + {0xED52, 0x97B7}, //19128 #CJK UNIFIED IDEOGRAPH + {0xED53, 0x97B8}, //19129 #CJK UNIFIED IDEOGRAPH + {0xED54, 0x97B9}, //19130 #CJK UNIFIED IDEOGRAPH + {0xED55, 0x97BA}, //19131 #CJK UNIFIED IDEOGRAPH + {0xED56, 0x97BB}, //19132 #CJK UNIFIED IDEOGRAPH + {0xED57, 0x97BC}, //19133 #CJK UNIFIED IDEOGRAPH + {0xED58, 0x97BD}, //19134 #CJK UNIFIED IDEOGRAPH + {0xED59, 0x97BE}, //19135 #CJK UNIFIED IDEOGRAPH + {0xED5A, 0x97BF}, //19136 #CJK UNIFIED IDEOGRAPH + {0xED5B, 0x97C0}, //19137 #CJK UNIFIED IDEOGRAPH + {0xED5C, 0x97C1}, //19138 #CJK UNIFIED IDEOGRAPH + {0xED5D, 0x97C2}, //19139 #CJK UNIFIED IDEOGRAPH + {0xED5E, 0x97C3}, //19140 #CJK UNIFIED IDEOGRAPH + {0xED5F, 0x97C4}, //19141 #CJK UNIFIED IDEOGRAPH + {0xED60, 0x97C5}, //19142 #CJK UNIFIED IDEOGRAPH + {0xED61, 0x97C6}, //19143 #CJK UNIFIED IDEOGRAPH + {0xED62, 0x97C7}, //19144 #CJK UNIFIED IDEOGRAPH + {0xED63, 0x97C8}, //19145 #CJK UNIFIED IDEOGRAPH + {0xED64, 0x97C9}, //19146 #CJK UNIFIED IDEOGRAPH + {0xED65, 0x97CA}, //19147 #CJK UNIFIED IDEOGRAPH + {0xED66, 0x97CB}, //19148 #CJK UNIFIED IDEOGRAPH + {0xED67, 0x97CC}, //19149 #CJK UNIFIED IDEOGRAPH + {0xED68, 0x97CD}, //19150 #CJK UNIFIED IDEOGRAPH + {0xED69, 0x97CE}, //19151 #CJK UNIFIED IDEOGRAPH + {0xED6A, 0x97CF}, //19152 #CJK UNIFIED IDEOGRAPH + {0xED6B, 0x97D0}, //19153 #CJK UNIFIED IDEOGRAPH + {0xED6C, 0x97D1}, //19154 #CJK UNIFIED IDEOGRAPH + {0xED6D, 0x97D2}, //19155 #CJK UNIFIED IDEOGRAPH + {0xED6E, 0x97D3}, //19156 #CJK UNIFIED IDEOGRAPH + {0xED6F, 0x97D4}, //19157 #CJK UNIFIED IDEOGRAPH + {0xED70, 0x97D5}, //19158 #CJK UNIFIED IDEOGRAPH + {0xED71, 0x97D6}, //19159 #CJK UNIFIED IDEOGRAPH + {0xED72, 0x97D7}, //19160 #CJK UNIFIED IDEOGRAPH + {0xED73, 0x97D8}, //19161 #CJK UNIFIED IDEOGRAPH + {0xED74, 0x97D9}, //19162 #CJK UNIFIED IDEOGRAPH + {0xED75, 0x97DA}, //19163 #CJK UNIFIED IDEOGRAPH + {0xED76, 0x97DB}, //19164 #CJK UNIFIED IDEOGRAPH + {0xED77, 0x97DC}, //19165 #CJK UNIFIED IDEOGRAPH + {0xED78, 0x97DD}, //19166 #CJK UNIFIED IDEOGRAPH + {0xED79, 0x97DE}, //19167 #CJK UNIFIED IDEOGRAPH + {0xED7A, 0x97DF}, //19168 #CJK UNIFIED IDEOGRAPH + {0xED7B, 0x97E0}, //19169 #CJK UNIFIED IDEOGRAPH + {0xED7C, 0x97E1}, //19170 #CJK UNIFIED IDEOGRAPH + {0xED7D, 0x97E2}, //19171 #CJK UNIFIED IDEOGRAPH + {0xED7E, 0x97E3}, //19172 #CJK UNIFIED IDEOGRAPH + {0xED80, 0x97E4}, //19173 #CJK UNIFIED IDEOGRAPH + {0xED81, 0x97E5}, //19174 #CJK UNIFIED IDEOGRAPH + {0xED82, 0x97E8}, //19175 #CJK UNIFIED IDEOGRAPH + {0xED83, 0x97EE}, //19176 #CJK UNIFIED IDEOGRAPH + {0xED84, 0x97EF}, //19177 #CJK UNIFIED IDEOGRAPH + {0xED85, 0x97F0}, //19178 #CJK UNIFIED IDEOGRAPH + {0xED86, 0x97F1}, //19179 #CJK UNIFIED IDEOGRAPH + {0xED87, 0x97F2}, //19180 #CJK UNIFIED IDEOGRAPH + {0xED88, 0x97F4}, //19181 #CJK UNIFIED IDEOGRAPH + {0xED89, 0x97F7}, //19182 #CJK UNIFIED IDEOGRAPH + {0xED8A, 0x97F8}, //19183 #CJK UNIFIED IDEOGRAPH + {0xED8B, 0x97F9}, //19184 #CJK UNIFIED IDEOGRAPH + {0xED8C, 0x97FA}, //19185 #CJK UNIFIED IDEOGRAPH + {0xED8D, 0x97FB}, //19186 #CJK UNIFIED IDEOGRAPH + {0xED8E, 0x97FC}, //19187 #CJK UNIFIED IDEOGRAPH + {0xED8F, 0x97FD}, //19188 #CJK UNIFIED IDEOGRAPH + {0xED90, 0x97FE}, //19189 #CJK UNIFIED IDEOGRAPH + {0xED91, 0x97FF}, //19190 #CJK UNIFIED IDEOGRAPH + {0xED92, 0x9800}, //19191 #CJK UNIFIED IDEOGRAPH + {0xED93, 0x9801}, //19192 #CJK UNIFIED IDEOGRAPH + {0xED94, 0x9802}, //19193 #CJK UNIFIED IDEOGRAPH + {0xED95, 0x9803}, //19194 #CJK UNIFIED IDEOGRAPH + {0xED96, 0x9804}, //19195 #CJK UNIFIED IDEOGRAPH + {0xED97, 0x9805}, //19196 #CJK UNIFIED IDEOGRAPH + {0xED98, 0x9806}, //19197 #CJK UNIFIED IDEOGRAPH + {0xED99, 0x9807}, //19198 #CJK UNIFIED IDEOGRAPH + {0xED9A, 0x9808}, //19199 #CJK UNIFIED IDEOGRAPH + {0xED9B, 0x9809}, //19200 #CJK UNIFIED IDEOGRAPH + {0xED9C, 0x980A}, //19201 #CJK UNIFIED IDEOGRAPH + {0xED9D, 0x980B}, //19202 #CJK UNIFIED IDEOGRAPH + {0xED9E, 0x980C}, //19203 #CJK UNIFIED IDEOGRAPH + {0xED9F, 0x980D}, //19204 #CJK UNIFIED IDEOGRAPH + {0xEDA0, 0x980E}, //19205 #CJK UNIFIED IDEOGRAPH + {0xEDA1, 0x603C}, //19206 #CJK UNIFIED IDEOGRAPH + {0xEDA2, 0x605D}, //19207 #CJK UNIFIED IDEOGRAPH + {0xEDA3, 0x605A}, //19208 #CJK UNIFIED IDEOGRAPH + {0xEDA4, 0x6067}, //19209 #CJK UNIFIED IDEOGRAPH + {0xEDA5, 0x6041}, //19210 #CJK UNIFIED IDEOGRAPH + {0xEDA6, 0x6059}, //19211 #CJK UNIFIED IDEOGRAPH + {0xEDA7, 0x6063}, //19212 #CJK UNIFIED IDEOGRAPH + {0xEDA8, 0x60AB}, //19213 #CJK UNIFIED IDEOGRAPH + {0xEDA9, 0x6106}, //19214 #CJK UNIFIED IDEOGRAPH + {0xEDAA, 0x610D}, //19215 #CJK UNIFIED IDEOGRAPH + {0xEDAB, 0x615D}, //19216 #CJK UNIFIED IDEOGRAPH + {0xEDAC, 0x61A9}, //19217 #CJK UNIFIED IDEOGRAPH + {0xEDAD, 0x619D}, //19218 #CJK UNIFIED IDEOGRAPH + {0xEDAE, 0x61CB}, //19219 #CJK UNIFIED IDEOGRAPH + {0xEDAF, 0x61D1}, //19220 #CJK UNIFIED IDEOGRAPH + {0xEDB0, 0x6206}, //19221 #CJK UNIFIED IDEOGRAPH + {0xEDB1, 0x8080}, //19222 #CJK UNIFIED IDEOGRAPH + {0xEDB2, 0x807F}, //19223 #CJK UNIFIED IDEOGRAPH + {0xEDB3, 0x6C93}, //19224 #CJK UNIFIED IDEOGRAPH + {0xEDB4, 0x6CF6}, //19225 #CJK UNIFIED IDEOGRAPH + {0xEDB5, 0x6DFC}, //19226 #CJK UNIFIED IDEOGRAPH + {0xEDB6, 0x77F6}, //19227 #CJK UNIFIED IDEOGRAPH + {0xEDB7, 0x77F8}, //19228 #CJK UNIFIED IDEOGRAPH + {0xEDB8, 0x7800}, //19229 #CJK UNIFIED IDEOGRAPH + {0xEDB9, 0x7809}, //19230 #CJK UNIFIED IDEOGRAPH + {0xEDBA, 0x7817}, //19231 #CJK UNIFIED IDEOGRAPH + {0xEDBB, 0x7818}, //19232 #CJK UNIFIED IDEOGRAPH + {0xEDBC, 0x7811}, //19233 #CJK UNIFIED IDEOGRAPH + {0xEDBD, 0x65AB}, //19234 #CJK UNIFIED IDEOGRAPH + {0xEDBE, 0x782D}, //19235 #CJK UNIFIED IDEOGRAPH + {0xEDBF, 0x781C}, //19236 #CJK UNIFIED IDEOGRAPH + {0xEDC0, 0x781D}, //19237 #CJK UNIFIED IDEOGRAPH + {0xEDC1, 0x7839}, //19238 #CJK UNIFIED IDEOGRAPH + {0xEDC2, 0x783A}, //19239 #CJK UNIFIED IDEOGRAPH + {0xEDC3, 0x783B}, //19240 #CJK UNIFIED IDEOGRAPH + {0xEDC4, 0x781F}, //19241 #CJK UNIFIED IDEOGRAPH + {0xEDC5, 0x783C}, //19242 #CJK UNIFIED IDEOGRAPH + {0xEDC6, 0x7825}, //19243 #CJK UNIFIED IDEOGRAPH + {0xEDC7, 0x782C}, //19244 #CJK UNIFIED IDEOGRAPH + {0xEDC8, 0x7823}, //19245 #CJK UNIFIED IDEOGRAPH + {0xEDC9, 0x7829}, //19246 #CJK UNIFIED IDEOGRAPH + {0xEDCA, 0x784E}, //19247 #CJK UNIFIED IDEOGRAPH + {0xEDCB, 0x786D}, //19248 #CJK UNIFIED IDEOGRAPH + {0xEDCC, 0x7856}, //19249 #CJK UNIFIED IDEOGRAPH + {0xEDCD, 0x7857}, //19250 #CJK UNIFIED IDEOGRAPH + {0xEDCE, 0x7826}, //19251 #CJK UNIFIED IDEOGRAPH + {0xEDCF, 0x7850}, //19252 #CJK UNIFIED IDEOGRAPH + {0xEDD0, 0x7847}, //19253 #CJK UNIFIED IDEOGRAPH + {0xEDD1, 0x784C}, //19254 #CJK UNIFIED IDEOGRAPH + {0xEDD2, 0x786A}, //19255 #CJK UNIFIED IDEOGRAPH + {0xEDD3, 0x789B}, //19256 #CJK UNIFIED IDEOGRAPH + {0xEDD4, 0x7893}, //19257 #CJK UNIFIED IDEOGRAPH + {0xEDD5, 0x789A}, //19258 #CJK UNIFIED IDEOGRAPH + {0xEDD6, 0x7887}, //19259 #CJK UNIFIED IDEOGRAPH + {0xEDD7, 0x789C}, //19260 #CJK UNIFIED IDEOGRAPH + {0xEDD8, 0x78A1}, //19261 #CJK UNIFIED IDEOGRAPH + {0xEDD9, 0x78A3}, //19262 #CJK UNIFIED IDEOGRAPH + {0xEDDA, 0x78B2}, //19263 #CJK UNIFIED IDEOGRAPH + {0xEDDB, 0x78B9}, //19264 #CJK UNIFIED IDEOGRAPH + {0xEDDC, 0x78A5}, //19265 #CJK UNIFIED IDEOGRAPH + {0xEDDD, 0x78D4}, //19266 #CJK UNIFIED IDEOGRAPH + {0xEDDE, 0x78D9}, //19267 #CJK UNIFIED IDEOGRAPH + {0xEDDF, 0x78C9}, //19268 #CJK UNIFIED IDEOGRAPH + {0xEDE0, 0x78EC}, //19269 #CJK UNIFIED IDEOGRAPH + {0xEDE1, 0x78F2}, //19270 #CJK UNIFIED IDEOGRAPH + {0xEDE2, 0x7905}, //19271 #CJK UNIFIED IDEOGRAPH + {0xEDE3, 0x78F4}, //19272 #CJK UNIFIED IDEOGRAPH + {0xEDE4, 0x7913}, //19273 #CJK UNIFIED IDEOGRAPH + {0xEDE5, 0x7924}, //19274 #CJK UNIFIED IDEOGRAPH + {0xEDE6, 0x791E}, //19275 #CJK UNIFIED IDEOGRAPH + {0xEDE7, 0x7934}, //19276 #CJK UNIFIED IDEOGRAPH + {0xEDE8, 0x9F9B}, //19277 #CJK UNIFIED IDEOGRAPH + {0xEDE9, 0x9EF9}, //19278 #CJK UNIFIED IDEOGRAPH + {0xEDEA, 0x9EFB}, //19279 #CJK UNIFIED IDEOGRAPH + {0xEDEB, 0x9EFC}, //19280 #CJK UNIFIED IDEOGRAPH + {0xEDEC, 0x76F1}, //19281 #CJK UNIFIED IDEOGRAPH + {0xEDED, 0x7704}, //19282 #CJK UNIFIED IDEOGRAPH + {0xEDEE, 0x770D}, //19283 #CJK UNIFIED IDEOGRAPH + {0xEDEF, 0x76F9}, //19284 #CJK UNIFIED IDEOGRAPH + {0xEDF0, 0x7707}, //19285 #CJK UNIFIED IDEOGRAPH + {0xEDF1, 0x7708}, //19286 #CJK UNIFIED IDEOGRAPH + {0xEDF2, 0x771A}, //19287 #CJK UNIFIED IDEOGRAPH + {0xEDF3, 0x7722}, //19288 #CJK UNIFIED IDEOGRAPH + {0xEDF4, 0x7719}, //19289 #CJK UNIFIED IDEOGRAPH + {0xEDF5, 0x772D}, //19290 #CJK UNIFIED IDEOGRAPH + {0xEDF6, 0x7726}, //19291 #CJK UNIFIED IDEOGRAPH + {0xEDF7, 0x7735}, //19292 #CJK UNIFIED IDEOGRAPH + {0xEDF8, 0x7738}, //19293 #CJK UNIFIED IDEOGRAPH + {0xEDF9, 0x7750}, //19294 #CJK UNIFIED IDEOGRAPH + {0xEDFA, 0x7751}, //19295 #CJK UNIFIED IDEOGRAPH + {0xEDFB, 0x7747}, //19296 #CJK UNIFIED IDEOGRAPH + {0xEDFC, 0x7743}, //19297 #CJK UNIFIED IDEOGRAPH + {0xEDFD, 0x775A}, //19298 #CJK UNIFIED IDEOGRAPH + {0xEDFE, 0x7768}, //19299 #CJK UNIFIED IDEOGRAPH + {0xEE40, 0x980F}, //19300 #CJK UNIFIED IDEOGRAPH + {0xEE41, 0x9810}, //19301 #CJK UNIFIED IDEOGRAPH + {0xEE42, 0x9811}, //19302 #CJK UNIFIED IDEOGRAPH + {0xEE43, 0x9812}, //19303 #CJK UNIFIED IDEOGRAPH + {0xEE44, 0x9813}, //19304 #CJK UNIFIED IDEOGRAPH + {0xEE45, 0x9814}, //19305 #CJK UNIFIED IDEOGRAPH + {0xEE46, 0x9815}, //19306 #CJK UNIFIED IDEOGRAPH + {0xEE47, 0x9816}, //19307 #CJK UNIFIED IDEOGRAPH + {0xEE48, 0x9817}, //19308 #CJK UNIFIED IDEOGRAPH + {0xEE49, 0x9818}, //19309 #CJK UNIFIED IDEOGRAPH + {0xEE4A, 0x9819}, //19310 #CJK UNIFIED IDEOGRAPH + {0xEE4B, 0x981A}, //19311 #CJK UNIFIED IDEOGRAPH + {0xEE4C, 0x981B}, //19312 #CJK UNIFIED IDEOGRAPH + {0xEE4D, 0x981C}, //19313 #CJK UNIFIED IDEOGRAPH + {0xEE4E, 0x981D}, //19314 #CJK UNIFIED IDEOGRAPH + {0xEE4F, 0x981E}, //19315 #CJK UNIFIED IDEOGRAPH + {0xEE50, 0x981F}, //19316 #CJK UNIFIED IDEOGRAPH + {0xEE51, 0x9820}, //19317 #CJK UNIFIED IDEOGRAPH + {0xEE52, 0x9821}, //19318 #CJK UNIFIED IDEOGRAPH + {0xEE53, 0x9822}, //19319 #CJK UNIFIED IDEOGRAPH + {0xEE54, 0x9823}, //19320 #CJK UNIFIED IDEOGRAPH + {0xEE55, 0x9824}, //19321 #CJK UNIFIED IDEOGRAPH + {0xEE56, 0x9825}, //19322 #CJK UNIFIED IDEOGRAPH + {0xEE57, 0x9826}, //19323 #CJK UNIFIED IDEOGRAPH + {0xEE58, 0x9827}, //19324 #CJK UNIFIED IDEOGRAPH + {0xEE59, 0x9828}, //19325 #CJK UNIFIED IDEOGRAPH + {0xEE5A, 0x9829}, //19326 #CJK UNIFIED IDEOGRAPH + {0xEE5B, 0x982A}, //19327 #CJK UNIFIED IDEOGRAPH + {0xEE5C, 0x982B}, //19328 #CJK UNIFIED IDEOGRAPH + {0xEE5D, 0x982C}, //19329 #CJK UNIFIED IDEOGRAPH + {0xEE5E, 0x982D}, //19330 #CJK UNIFIED IDEOGRAPH + {0xEE5F, 0x982E}, //19331 #CJK UNIFIED IDEOGRAPH + {0xEE60, 0x982F}, //19332 #CJK UNIFIED IDEOGRAPH + {0xEE61, 0x9830}, //19333 #CJK UNIFIED IDEOGRAPH + {0xEE62, 0x9831}, //19334 #CJK UNIFIED IDEOGRAPH + {0xEE63, 0x9832}, //19335 #CJK UNIFIED IDEOGRAPH + {0xEE64, 0x9833}, //19336 #CJK UNIFIED IDEOGRAPH + {0xEE65, 0x9834}, //19337 #CJK UNIFIED IDEOGRAPH + {0xEE66, 0x9835}, //19338 #CJK UNIFIED IDEOGRAPH + {0xEE67, 0x9836}, //19339 #CJK UNIFIED IDEOGRAPH + {0xEE68, 0x9837}, //19340 #CJK UNIFIED IDEOGRAPH + {0xEE69, 0x9838}, //19341 #CJK UNIFIED IDEOGRAPH + {0xEE6A, 0x9839}, //19342 #CJK UNIFIED IDEOGRAPH + {0xEE6B, 0x983A}, //19343 #CJK UNIFIED IDEOGRAPH + {0xEE6C, 0x983B}, //19344 #CJK UNIFIED IDEOGRAPH + {0xEE6D, 0x983C}, //19345 #CJK UNIFIED IDEOGRAPH + {0xEE6E, 0x983D}, //19346 #CJK UNIFIED IDEOGRAPH + {0xEE6F, 0x983E}, //19347 #CJK UNIFIED IDEOGRAPH + {0xEE70, 0x983F}, //19348 #CJK UNIFIED IDEOGRAPH + {0xEE71, 0x9840}, //19349 #CJK UNIFIED IDEOGRAPH + {0xEE72, 0x9841}, //19350 #CJK UNIFIED IDEOGRAPH + {0xEE73, 0x9842}, //19351 #CJK UNIFIED IDEOGRAPH + {0xEE74, 0x9843}, //19352 #CJK UNIFIED IDEOGRAPH + {0xEE75, 0x9844}, //19353 #CJK UNIFIED IDEOGRAPH + {0xEE76, 0x9845}, //19354 #CJK UNIFIED IDEOGRAPH + {0xEE77, 0x9846}, //19355 #CJK UNIFIED IDEOGRAPH + {0xEE78, 0x9847}, //19356 #CJK UNIFIED IDEOGRAPH + {0xEE79, 0x9848}, //19357 #CJK UNIFIED IDEOGRAPH + {0xEE7A, 0x9849}, //19358 #CJK UNIFIED IDEOGRAPH + {0xEE7B, 0x984A}, //19359 #CJK UNIFIED IDEOGRAPH + {0xEE7C, 0x984B}, //19360 #CJK UNIFIED IDEOGRAPH + {0xEE7D, 0x984C}, //19361 #CJK UNIFIED IDEOGRAPH + {0xEE7E, 0x984D}, //19362 #CJK UNIFIED IDEOGRAPH + {0xEE80, 0x984E}, //19363 #CJK UNIFIED IDEOGRAPH + {0xEE81, 0x984F}, //19364 #CJK UNIFIED IDEOGRAPH + {0xEE82, 0x9850}, //19365 #CJK UNIFIED IDEOGRAPH + {0xEE83, 0x9851}, //19366 #CJK UNIFIED IDEOGRAPH + {0xEE84, 0x9852}, //19367 #CJK UNIFIED IDEOGRAPH + {0xEE85, 0x9853}, //19368 #CJK UNIFIED IDEOGRAPH + {0xEE86, 0x9854}, //19369 #CJK UNIFIED IDEOGRAPH + {0xEE87, 0x9855}, //19370 #CJK UNIFIED IDEOGRAPH + {0xEE88, 0x9856}, //19371 #CJK UNIFIED IDEOGRAPH + {0xEE89, 0x9857}, //19372 #CJK UNIFIED IDEOGRAPH + {0xEE8A, 0x9858}, //19373 #CJK UNIFIED IDEOGRAPH + {0xEE8B, 0x9859}, //19374 #CJK UNIFIED IDEOGRAPH + {0xEE8C, 0x985A}, //19375 #CJK UNIFIED IDEOGRAPH + {0xEE8D, 0x985B}, //19376 #CJK UNIFIED IDEOGRAPH + {0xEE8E, 0x985C}, //19377 #CJK UNIFIED IDEOGRAPH + {0xEE8F, 0x985D}, //19378 #CJK UNIFIED IDEOGRAPH + {0xEE90, 0x985E}, //19379 #CJK UNIFIED IDEOGRAPH + {0xEE91, 0x985F}, //19380 #CJK UNIFIED IDEOGRAPH + {0xEE92, 0x9860}, //19381 #CJK UNIFIED IDEOGRAPH + {0xEE93, 0x9861}, //19382 #CJK UNIFIED IDEOGRAPH + {0xEE94, 0x9862}, //19383 #CJK UNIFIED IDEOGRAPH + {0xEE95, 0x9863}, //19384 #CJK UNIFIED IDEOGRAPH + {0xEE96, 0x9864}, //19385 #CJK UNIFIED IDEOGRAPH + {0xEE97, 0x9865}, //19386 #CJK UNIFIED IDEOGRAPH + {0xEE98, 0x9866}, //19387 #CJK UNIFIED IDEOGRAPH + {0xEE99, 0x9867}, //19388 #CJK UNIFIED IDEOGRAPH + {0xEE9A, 0x9868}, //19389 #CJK UNIFIED IDEOGRAPH + {0xEE9B, 0x9869}, //19390 #CJK UNIFIED IDEOGRAPH + {0xEE9C, 0x986A}, //19391 #CJK UNIFIED IDEOGRAPH + {0xEE9D, 0x986B}, //19392 #CJK UNIFIED IDEOGRAPH + {0xEE9E, 0x986C}, //19393 #CJK UNIFIED IDEOGRAPH + {0xEE9F, 0x986D}, //19394 #CJK UNIFIED IDEOGRAPH + {0xEEA0, 0x986E}, //19395 #CJK UNIFIED IDEOGRAPH + {0xEEA1, 0x7762}, //19396 #CJK UNIFIED IDEOGRAPH + {0xEEA2, 0x7765}, //19397 #CJK UNIFIED IDEOGRAPH + {0xEEA3, 0x777F}, //19398 #CJK UNIFIED IDEOGRAPH + {0xEEA4, 0x778D}, //19399 #CJK UNIFIED IDEOGRAPH + {0xEEA5, 0x777D}, //19400 #CJK UNIFIED IDEOGRAPH + {0xEEA6, 0x7780}, //19401 #CJK UNIFIED IDEOGRAPH + {0xEEA7, 0x778C}, //19402 #CJK UNIFIED IDEOGRAPH + {0xEEA8, 0x7791}, //19403 #CJK UNIFIED IDEOGRAPH + {0xEEA9, 0x779F}, //19404 #CJK UNIFIED IDEOGRAPH + {0xEEAA, 0x77A0}, //19405 #CJK UNIFIED IDEOGRAPH + {0xEEAB, 0x77B0}, //19406 #CJK UNIFIED IDEOGRAPH + {0xEEAC, 0x77B5}, //19407 #CJK UNIFIED IDEOGRAPH + {0xEEAD, 0x77BD}, //19408 #CJK UNIFIED IDEOGRAPH + {0xEEAE, 0x753A}, //19409 #CJK UNIFIED IDEOGRAPH + {0xEEAF, 0x7540}, //19410 #CJK UNIFIED IDEOGRAPH + {0xEEB0, 0x754E}, //19411 #CJK UNIFIED IDEOGRAPH + {0xEEB1, 0x754B}, //19412 #CJK UNIFIED IDEOGRAPH + {0xEEB2, 0x7548}, //19413 #CJK UNIFIED IDEOGRAPH + {0xEEB3, 0x755B}, //19414 #CJK UNIFIED IDEOGRAPH + {0xEEB4, 0x7572}, //19415 #CJK UNIFIED IDEOGRAPH + {0xEEB5, 0x7579}, //19416 #CJK UNIFIED IDEOGRAPH + {0xEEB6, 0x7583}, //19417 #CJK UNIFIED IDEOGRAPH + {0xEEB7, 0x7F58}, //19418 #CJK UNIFIED IDEOGRAPH + {0xEEB8, 0x7F61}, //19419 #CJK UNIFIED IDEOGRAPH + {0xEEB9, 0x7F5F}, //19420 #CJK UNIFIED IDEOGRAPH + {0xEEBA, 0x8A48}, //19421 #CJK UNIFIED IDEOGRAPH + {0xEEBB, 0x7F68}, //19422 #CJK UNIFIED IDEOGRAPH + {0xEEBC, 0x7F74}, //19423 #CJK UNIFIED IDEOGRAPH + {0xEEBD, 0x7F71}, //19424 #CJK UNIFIED IDEOGRAPH + {0xEEBE, 0x7F79}, //19425 #CJK UNIFIED IDEOGRAPH + {0xEEBF, 0x7F81}, //19426 #CJK UNIFIED IDEOGRAPH + {0xEEC0, 0x7F7E}, //19427 #CJK UNIFIED IDEOGRAPH + {0xEEC1, 0x76CD}, //19428 #CJK UNIFIED IDEOGRAPH + {0xEEC2, 0x76E5}, //19429 #CJK UNIFIED IDEOGRAPH + {0xEEC3, 0x8832}, //19430 #CJK UNIFIED IDEOGRAPH + {0xEEC4, 0x9485}, //19431 #CJK UNIFIED IDEOGRAPH + {0xEEC5, 0x9486}, //19432 #CJK UNIFIED IDEOGRAPH + {0xEEC6, 0x9487}, //19433 #CJK UNIFIED IDEOGRAPH + {0xEEC7, 0x948B}, //19434 #CJK UNIFIED IDEOGRAPH + {0xEEC8, 0x948A}, //19435 #CJK UNIFIED IDEOGRAPH + {0xEEC9, 0x948C}, //19436 #CJK UNIFIED IDEOGRAPH + {0xEECA, 0x948D}, //19437 #CJK UNIFIED IDEOGRAPH + {0xEECB, 0x948F}, //19438 #CJK UNIFIED IDEOGRAPH + {0xEECC, 0x9490}, //19439 #CJK UNIFIED IDEOGRAPH + {0xEECD, 0x9494}, //19440 #CJK UNIFIED IDEOGRAPH + {0xEECE, 0x9497}, //19441 #CJK UNIFIED IDEOGRAPH + {0xEECF, 0x9495}, //19442 #CJK UNIFIED IDEOGRAPH + {0xEED0, 0x949A}, //19443 #CJK UNIFIED IDEOGRAPH + {0xEED1, 0x949B}, //19444 #CJK UNIFIED IDEOGRAPH + {0xEED2, 0x949C}, //19445 #CJK UNIFIED IDEOGRAPH + {0xEED3, 0x94A3}, //19446 #CJK UNIFIED IDEOGRAPH + {0xEED4, 0x94A4}, //19447 #CJK UNIFIED IDEOGRAPH + {0xEED5, 0x94AB}, //19448 #CJK UNIFIED IDEOGRAPH + {0xEED6, 0x94AA}, //19449 #CJK UNIFIED IDEOGRAPH + {0xEED7, 0x94AD}, //19450 #CJK UNIFIED IDEOGRAPH + {0xEED8, 0x94AC}, //19451 #CJK UNIFIED IDEOGRAPH + {0xEED9, 0x94AF}, //19452 #CJK UNIFIED IDEOGRAPH + {0xEEDA, 0x94B0}, //19453 #CJK UNIFIED IDEOGRAPH + {0xEEDB, 0x94B2}, //19454 #CJK UNIFIED IDEOGRAPH + {0xEEDC, 0x94B4}, //19455 #CJK UNIFIED IDEOGRAPH + {0xEEDD, 0x94B6}, //19456 #CJK UNIFIED IDEOGRAPH + {0xEEDE, 0x94B7}, //19457 #CJK UNIFIED IDEOGRAPH + {0xEEDF, 0x94B8}, //19458 #CJK UNIFIED IDEOGRAPH + {0xEEE0, 0x94B9}, //19459 #CJK UNIFIED IDEOGRAPH + {0xEEE1, 0x94BA}, //19460 #CJK UNIFIED IDEOGRAPH + {0xEEE2, 0x94BC}, //19461 #CJK UNIFIED IDEOGRAPH + {0xEEE3, 0x94BD}, //19462 #CJK UNIFIED IDEOGRAPH + {0xEEE4, 0x94BF}, //19463 #CJK UNIFIED IDEOGRAPH + {0xEEE5, 0x94C4}, //19464 #CJK UNIFIED IDEOGRAPH + {0xEEE6, 0x94C8}, //19465 #CJK UNIFIED IDEOGRAPH + {0xEEE7, 0x94C9}, //19466 #CJK UNIFIED IDEOGRAPH + {0xEEE8, 0x94CA}, //19467 #CJK UNIFIED IDEOGRAPH + {0xEEE9, 0x94CB}, //19468 #CJK UNIFIED IDEOGRAPH + {0xEEEA, 0x94CC}, //19469 #CJK UNIFIED IDEOGRAPH + {0xEEEB, 0x94CD}, //19470 #CJK UNIFIED IDEOGRAPH + {0xEEEC, 0x94CE}, //19471 #CJK UNIFIED IDEOGRAPH + {0xEEED, 0x94D0}, //19472 #CJK UNIFIED IDEOGRAPH + {0xEEEE, 0x94D1}, //19473 #CJK UNIFIED IDEOGRAPH + {0xEEEF, 0x94D2}, //19474 #CJK UNIFIED IDEOGRAPH + {0xEEF0, 0x94D5}, //19475 #CJK UNIFIED IDEOGRAPH + {0xEEF1, 0x94D6}, //19476 #CJK UNIFIED IDEOGRAPH + {0xEEF2, 0x94D7}, //19477 #CJK UNIFIED IDEOGRAPH + {0xEEF3, 0x94D9}, //19478 #CJK UNIFIED IDEOGRAPH + {0xEEF4, 0x94D8}, //19479 #CJK UNIFIED IDEOGRAPH + {0xEEF5, 0x94DB}, //19480 #CJK UNIFIED IDEOGRAPH + {0xEEF6, 0x94DE}, //19481 #CJK UNIFIED IDEOGRAPH + {0xEEF7, 0x94DF}, //19482 #CJK UNIFIED IDEOGRAPH + {0xEEF8, 0x94E0}, //19483 #CJK UNIFIED IDEOGRAPH + {0xEEF9, 0x94E2}, //19484 #CJK UNIFIED IDEOGRAPH + {0xEEFA, 0x94E4}, //19485 #CJK UNIFIED IDEOGRAPH + {0xEEFB, 0x94E5}, //19486 #CJK UNIFIED IDEOGRAPH + {0xEEFC, 0x94E7}, //19487 #CJK UNIFIED IDEOGRAPH + {0xEEFD, 0x94E8}, //19488 #CJK UNIFIED IDEOGRAPH + {0xEEFE, 0x94EA}, //19489 #CJK UNIFIED IDEOGRAPH + {0xEF40, 0x986F}, //19490 #CJK UNIFIED IDEOGRAPH + {0xEF41, 0x9870}, //19491 #CJK UNIFIED IDEOGRAPH + {0xEF42, 0x9871}, //19492 #CJK UNIFIED IDEOGRAPH + {0xEF43, 0x9872}, //19493 #CJK UNIFIED IDEOGRAPH + {0xEF44, 0x9873}, //19494 #CJK UNIFIED IDEOGRAPH + {0xEF45, 0x9874}, //19495 #CJK UNIFIED IDEOGRAPH + {0xEF46, 0x988B}, //19496 #CJK UNIFIED IDEOGRAPH + {0xEF47, 0x988E}, //19497 #CJK UNIFIED IDEOGRAPH + {0xEF48, 0x9892}, //19498 #CJK UNIFIED IDEOGRAPH + {0xEF49, 0x9895}, //19499 #CJK UNIFIED IDEOGRAPH + {0xEF4A, 0x9899}, //19500 #CJK UNIFIED IDEOGRAPH + {0xEF4B, 0x98A3}, //19501 #CJK UNIFIED IDEOGRAPH + {0xEF4C, 0x98A8}, //19502 #CJK UNIFIED IDEOGRAPH + {0xEF4D, 0x98A9}, //19503 #CJK UNIFIED IDEOGRAPH + {0xEF4E, 0x98AA}, //19504 #CJK UNIFIED IDEOGRAPH + {0xEF4F, 0x98AB}, //19505 #CJK UNIFIED IDEOGRAPH + {0xEF50, 0x98AC}, //19506 #CJK UNIFIED IDEOGRAPH + {0xEF51, 0x98AD}, //19507 #CJK UNIFIED IDEOGRAPH + {0xEF52, 0x98AE}, //19508 #CJK UNIFIED IDEOGRAPH + {0xEF53, 0x98AF}, //19509 #CJK UNIFIED IDEOGRAPH + {0xEF54, 0x98B0}, //19510 #CJK UNIFIED IDEOGRAPH + {0xEF55, 0x98B1}, //19511 #CJK UNIFIED IDEOGRAPH + {0xEF56, 0x98B2}, //19512 #CJK UNIFIED IDEOGRAPH + {0xEF57, 0x98B3}, //19513 #CJK UNIFIED IDEOGRAPH + {0xEF58, 0x98B4}, //19514 #CJK UNIFIED IDEOGRAPH + {0xEF59, 0x98B5}, //19515 #CJK UNIFIED IDEOGRAPH + {0xEF5A, 0x98B6}, //19516 #CJK UNIFIED IDEOGRAPH + {0xEF5B, 0x98B7}, //19517 #CJK UNIFIED IDEOGRAPH + {0xEF5C, 0x98B8}, //19518 #CJK UNIFIED IDEOGRAPH + {0xEF5D, 0x98B9}, //19519 #CJK UNIFIED IDEOGRAPH + {0xEF5E, 0x98BA}, //19520 #CJK UNIFIED IDEOGRAPH + {0xEF5F, 0x98BB}, //19521 #CJK UNIFIED IDEOGRAPH + {0xEF60, 0x98BC}, //19522 #CJK UNIFIED IDEOGRAPH + {0xEF61, 0x98BD}, //19523 #CJK UNIFIED IDEOGRAPH + {0xEF62, 0x98BE}, //19524 #CJK UNIFIED IDEOGRAPH + {0xEF63, 0x98BF}, //19525 #CJK UNIFIED IDEOGRAPH + {0xEF64, 0x98C0}, //19526 #CJK UNIFIED IDEOGRAPH + {0xEF65, 0x98C1}, //19527 #CJK UNIFIED IDEOGRAPH + {0xEF66, 0x98C2}, //19528 #CJK UNIFIED IDEOGRAPH + {0xEF67, 0x98C3}, //19529 #CJK UNIFIED IDEOGRAPH + {0xEF68, 0x98C4}, //19530 #CJK UNIFIED IDEOGRAPH + {0xEF69, 0x98C5}, //19531 #CJK UNIFIED IDEOGRAPH + {0xEF6A, 0x98C6}, //19532 #CJK UNIFIED IDEOGRAPH + {0xEF6B, 0x98C7}, //19533 #CJK UNIFIED IDEOGRAPH + {0xEF6C, 0x98C8}, //19534 #CJK UNIFIED IDEOGRAPH + {0xEF6D, 0x98C9}, //19535 #CJK UNIFIED IDEOGRAPH + {0xEF6E, 0x98CA}, //19536 #CJK UNIFIED IDEOGRAPH + {0xEF6F, 0x98CB}, //19537 #CJK UNIFIED IDEOGRAPH + {0xEF70, 0x98CC}, //19538 #CJK UNIFIED IDEOGRAPH + {0xEF71, 0x98CD}, //19539 #CJK UNIFIED IDEOGRAPH + {0xEF72, 0x98CF}, //19540 #CJK UNIFIED IDEOGRAPH + {0xEF73, 0x98D0}, //19541 #CJK UNIFIED IDEOGRAPH + {0xEF74, 0x98D4}, //19542 #CJK UNIFIED IDEOGRAPH + {0xEF75, 0x98D6}, //19543 #CJK UNIFIED IDEOGRAPH + {0xEF76, 0x98D7}, //19544 #CJK UNIFIED IDEOGRAPH + {0xEF77, 0x98DB}, //19545 #CJK UNIFIED IDEOGRAPH + {0xEF78, 0x98DC}, //19546 #CJK UNIFIED IDEOGRAPH + {0xEF79, 0x98DD}, //19547 #CJK UNIFIED IDEOGRAPH + {0xEF7A, 0x98E0}, //19548 #CJK UNIFIED IDEOGRAPH + {0xEF7B, 0x98E1}, //19549 #CJK UNIFIED IDEOGRAPH + {0xEF7C, 0x98E2}, //19550 #CJK UNIFIED IDEOGRAPH + {0xEF7D, 0x98E3}, //19551 #CJK UNIFIED IDEOGRAPH + {0xEF7E, 0x98E4}, //19552 #CJK UNIFIED IDEOGRAPH + {0xEF80, 0x98E5}, //19553 #CJK UNIFIED IDEOGRAPH + {0xEF81, 0x98E6}, //19554 #CJK UNIFIED IDEOGRAPH + {0xEF82, 0x98E9}, //19555 #CJK UNIFIED IDEOGRAPH + {0xEF83, 0x98EA}, //19556 #CJK UNIFIED IDEOGRAPH + {0xEF84, 0x98EB}, //19557 #CJK UNIFIED IDEOGRAPH + {0xEF85, 0x98EC}, //19558 #CJK UNIFIED IDEOGRAPH + {0xEF86, 0x98ED}, //19559 #CJK UNIFIED IDEOGRAPH + {0xEF87, 0x98EE}, //19560 #CJK UNIFIED IDEOGRAPH + {0xEF88, 0x98EF}, //19561 #CJK UNIFIED IDEOGRAPH + {0xEF89, 0x98F0}, //19562 #CJK UNIFIED IDEOGRAPH + {0xEF8A, 0x98F1}, //19563 #CJK UNIFIED IDEOGRAPH + {0xEF8B, 0x98F2}, //19564 #CJK UNIFIED IDEOGRAPH + {0xEF8C, 0x98F3}, //19565 #CJK UNIFIED IDEOGRAPH + {0xEF8D, 0x98F4}, //19566 #CJK UNIFIED IDEOGRAPH + {0xEF8E, 0x98F5}, //19567 #CJK UNIFIED IDEOGRAPH + {0xEF8F, 0x98F6}, //19568 #CJK UNIFIED IDEOGRAPH + {0xEF90, 0x98F7}, //19569 #CJK UNIFIED IDEOGRAPH + {0xEF91, 0x98F8}, //19570 #CJK UNIFIED IDEOGRAPH + {0xEF92, 0x98F9}, //19571 #CJK UNIFIED IDEOGRAPH + {0xEF93, 0x98FA}, //19572 #CJK UNIFIED IDEOGRAPH + {0xEF94, 0x98FB}, //19573 #CJK UNIFIED IDEOGRAPH + {0xEF95, 0x98FC}, //19574 #CJK UNIFIED IDEOGRAPH + {0xEF96, 0x98FD}, //19575 #CJK UNIFIED IDEOGRAPH + {0xEF97, 0x98FE}, //19576 #CJK UNIFIED IDEOGRAPH + {0xEF98, 0x98FF}, //19577 #CJK UNIFIED IDEOGRAPH + {0xEF99, 0x9900}, //19578 #CJK UNIFIED IDEOGRAPH + {0xEF9A, 0x9901}, //19579 #CJK UNIFIED IDEOGRAPH + {0xEF9B, 0x9902}, //19580 #CJK UNIFIED IDEOGRAPH + {0xEF9C, 0x9903}, //19581 #CJK UNIFIED IDEOGRAPH + {0xEF9D, 0x9904}, //19582 #CJK UNIFIED IDEOGRAPH + {0xEF9E, 0x9905}, //19583 #CJK UNIFIED IDEOGRAPH + {0xEF9F, 0x9906}, //19584 #CJK UNIFIED IDEOGRAPH + {0xEFA0, 0x9907}, //19585 #CJK UNIFIED IDEOGRAPH + {0xEFA1, 0x94E9}, //19586 #CJK UNIFIED IDEOGRAPH + {0xEFA2, 0x94EB}, //19587 #CJK UNIFIED IDEOGRAPH + {0xEFA3, 0x94EE}, //19588 #CJK UNIFIED IDEOGRAPH + {0xEFA4, 0x94EF}, //19589 #CJK UNIFIED IDEOGRAPH + {0xEFA5, 0x94F3}, //19590 #CJK UNIFIED IDEOGRAPH + {0xEFA6, 0x94F4}, //19591 #CJK UNIFIED IDEOGRAPH + {0xEFA7, 0x94F5}, //19592 #CJK UNIFIED IDEOGRAPH + {0xEFA8, 0x94F7}, //19593 #CJK UNIFIED IDEOGRAPH + {0xEFA9, 0x94F9}, //19594 #CJK UNIFIED IDEOGRAPH + {0xEFAA, 0x94FC}, //19595 #CJK UNIFIED IDEOGRAPH + {0xEFAB, 0x94FD}, //19596 #CJK UNIFIED IDEOGRAPH + {0xEFAC, 0x94FF}, //19597 #CJK UNIFIED IDEOGRAPH + {0xEFAD, 0x9503}, //19598 #CJK UNIFIED IDEOGRAPH + {0xEFAE, 0x9502}, //19599 #CJK UNIFIED IDEOGRAPH + {0xEFAF, 0x9506}, //19600 #CJK UNIFIED IDEOGRAPH + {0xEFB0, 0x9507}, //19601 #CJK UNIFIED IDEOGRAPH + {0xEFB1, 0x9509}, //19602 #CJK UNIFIED IDEOGRAPH + {0xEFB2, 0x950A}, //19603 #CJK UNIFIED IDEOGRAPH + {0xEFB3, 0x950D}, //19604 #CJK UNIFIED IDEOGRAPH + {0xEFB4, 0x950E}, //19605 #CJK UNIFIED IDEOGRAPH + {0xEFB5, 0x950F}, //19606 #CJK UNIFIED IDEOGRAPH + {0xEFB6, 0x9512}, //19607 #CJK UNIFIED IDEOGRAPH + {0xEFB7, 0x9513}, //19608 #CJK UNIFIED IDEOGRAPH + {0xEFB8, 0x9514}, //19609 #CJK UNIFIED IDEOGRAPH + {0xEFB9, 0x9515}, //19610 #CJK UNIFIED IDEOGRAPH + {0xEFBA, 0x9516}, //19611 #CJK UNIFIED IDEOGRAPH + {0xEFBB, 0x9518}, //19612 #CJK UNIFIED IDEOGRAPH + {0xEFBC, 0x951B}, //19613 #CJK UNIFIED IDEOGRAPH + {0xEFBD, 0x951D}, //19614 #CJK UNIFIED IDEOGRAPH + {0xEFBE, 0x951E}, //19615 #CJK UNIFIED IDEOGRAPH + {0xEFBF, 0x951F}, //19616 #CJK UNIFIED IDEOGRAPH + {0xEFC0, 0x9522}, //19617 #CJK UNIFIED IDEOGRAPH + {0xEFC1, 0x952A}, //19618 #CJK UNIFIED IDEOGRAPH + {0xEFC2, 0x952B}, //19619 #CJK UNIFIED IDEOGRAPH + {0xEFC3, 0x9529}, //19620 #CJK UNIFIED IDEOGRAPH + {0xEFC4, 0x952C}, //19621 #CJK UNIFIED IDEOGRAPH + {0xEFC5, 0x9531}, //19622 #CJK UNIFIED IDEOGRAPH + {0xEFC6, 0x9532}, //19623 #CJK UNIFIED IDEOGRAPH + {0xEFC7, 0x9534}, //19624 #CJK UNIFIED IDEOGRAPH + {0xEFC8, 0x9536}, //19625 #CJK UNIFIED IDEOGRAPH + {0xEFC9, 0x9537}, //19626 #CJK UNIFIED IDEOGRAPH + {0xEFCA, 0x9538}, //19627 #CJK UNIFIED IDEOGRAPH + {0xEFCB, 0x953C}, //19628 #CJK UNIFIED IDEOGRAPH + {0xEFCC, 0x953E}, //19629 #CJK UNIFIED IDEOGRAPH + {0xEFCD, 0x953F}, //19630 #CJK UNIFIED IDEOGRAPH + {0xEFCE, 0x9542}, //19631 #CJK UNIFIED IDEOGRAPH + {0xEFCF, 0x9535}, //19632 #CJK UNIFIED IDEOGRAPH + {0xEFD0, 0x9544}, //19633 #CJK UNIFIED IDEOGRAPH + {0xEFD1, 0x9545}, //19634 #CJK UNIFIED IDEOGRAPH + {0xEFD2, 0x9546}, //19635 #CJK UNIFIED IDEOGRAPH + {0xEFD3, 0x9549}, //19636 #CJK UNIFIED IDEOGRAPH + {0xEFD4, 0x954C}, //19637 #CJK UNIFIED IDEOGRAPH + {0xEFD5, 0x954E}, //19638 #CJK UNIFIED IDEOGRAPH + {0xEFD6, 0x954F}, //19639 #CJK UNIFIED IDEOGRAPH + {0xEFD7, 0x9552}, //19640 #CJK UNIFIED IDEOGRAPH + {0xEFD8, 0x9553}, //19641 #CJK UNIFIED IDEOGRAPH + {0xEFD9, 0x9554}, //19642 #CJK UNIFIED IDEOGRAPH + {0xEFDA, 0x9556}, //19643 #CJK UNIFIED IDEOGRAPH + {0xEFDB, 0x9557}, //19644 #CJK UNIFIED IDEOGRAPH + {0xEFDC, 0x9558}, //19645 #CJK UNIFIED IDEOGRAPH + {0xEFDD, 0x9559}, //19646 #CJK UNIFIED IDEOGRAPH + {0xEFDE, 0x955B}, //19647 #CJK UNIFIED IDEOGRAPH + {0xEFDF, 0x955E}, //19648 #CJK UNIFIED IDEOGRAPH + {0xEFE0, 0x955F}, //19649 #CJK UNIFIED IDEOGRAPH + {0xEFE1, 0x955D}, //19650 #CJK UNIFIED IDEOGRAPH + {0xEFE2, 0x9561}, //19651 #CJK UNIFIED IDEOGRAPH + {0xEFE3, 0x9562}, //19652 #CJK UNIFIED IDEOGRAPH + {0xEFE4, 0x9564}, //19653 #CJK UNIFIED IDEOGRAPH + {0xEFE5, 0x9565}, //19654 #CJK UNIFIED IDEOGRAPH + {0xEFE6, 0x9566}, //19655 #CJK UNIFIED IDEOGRAPH + {0xEFE7, 0x9567}, //19656 #CJK UNIFIED IDEOGRAPH + {0xEFE8, 0x9568}, //19657 #CJK UNIFIED IDEOGRAPH + {0xEFE9, 0x9569}, //19658 #CJK UNIFIED IDEOGRAPH + {0xEFEA, 0x956A}, //19659 #CJK UNIFIED IDEOGRAPH + {0xEFEB, 0x956B}, //19660 #CJK UNIFIED IDEOGRAPH + {0xEFEC, 0x956C}, //19661 #CJK UNIFIED IDEOGRAPH + {0xEFED, 0x956F}, //19662 #CJK UNIFIED IDEOGRAPH + {0xEFEE, 0x9571}, //19663 #CJK UNIFIED IDEOGRAPH + {0xEFEF, 0x9572}, //19664 #CJK UNIFIED IDEOGRAPH + {0xEFF0, 0x9573}, //19665 #CJK UNIFIED IDEOGRAPH + {0xEFF1, 0x953A}, //19666 #CJK UNIFIED IDEOGRAPH + {0xEFF2, 0x77E7}, //19667 #CJK UNIFIED IDEOGRAPH + {0xEFF3, 0x77EC}, //19668 #CJK UNIFIED IDEOGRAPH + {0xEFF4, 0x96C9}, //19669 #CJK UNIFIED IDEOGRAPH + {0xEFF5, 0x79D5}, //19670 #CJK UNIFIED IDEOGRAPH + {0xEFF6, 0x79ED}, //19671 #CJK UNIFIED IDEOGRAPH + {0xEFF7, 0x79E3}, //19672 #CJK UNIFIED IDEOGRAPH + {0xEFF8, 0x79EB}, //19673 #CJK UNIFIED IDEOGRAPH + {0xEFF9, 0x7A06}, //19674 #CJK UNIFIED IDEOGRAPH + {0xEFFA, 0x5D47}, //19675 #CJK UNIFIED IDEOGRAPH + {0xEFFB, 0x7A03}, //19676 #CJK UNIFIED IDEOGRAPH + {0xEFFC, 0x7A02}, //19677 #CJK UNIFIED IDEOGRAPH + {0xEFFD, 0x7A1E}, //19678 #CJK UNIFIED IDEOGRAPH + {0xEFFE, 0x7A14}, //19679 #CJK UNIFIED IDEOGRAPH + {0xF040, 0x9908}, //19680 #CJK UNIFIED IDEOGRAPH + {0xF041, 0x9909}, //19681 #CJK UNIFIED IDEOGRAPH + {0xF042, 0x990A}, //19682 #CJK UNIFIED IDEOGRAPH + {0xF043, 0x990B}, //19683 #CJK UNIFIED IDEOGRAPH + {0xF044, 0x990C}, //19684 #CJK UNIFIED IDEOGRAPH + {0xF045, 0x990E}, //19685 #CJK UNIFIED IDEOGRAPH + {0xF046, 0x990F}, //19686 #CJK UNIFIED IDEOGRAPH + {0xF047, 0x9911}, //19687 #CJK UNIFIED IDEOGRAPH + {0xF048, 0x9912}, //19688 #CJK UNIFIED IDEOGRAPH + {0xF049, 0x9913}, //19689 #CJK UNIFIED IDEOGRAPH + {0xF04A, 0x9914}, //19690 #CJK UNIFIED IDEOGRAPH + {0xF04B, 0x9915}, //19691 #CJK UNIFIED IDEOGRAPH + {0xF04C, 0x9916}, //19692 #CJK UNIFIED IDEOGRAPH + {0xF04D, 0x9917}, //19693 #CJK UNIFIED IDEOGRAPH + {0xF04E, 0x9918}, //19694 #CJK UNIFIED IDEOGRAPH + {0xF04F, 0x9919}, //19695 #CJK UNIFIED IDEOGRAPH + {0xF050, 0x991A}, //19696 #CJK UNIFIED IDEOGRAPH + {0xF051, 0x991B}, //19697 #CJK UNIFIED IDEOGRAPH + {0xF052, 0x991C}, //19698 #CJK UNIFIED IDEOGRAPH + {0xF053, 0x991D}, //19699 #CJK UNIFIED IDEOGRAPH + {0xF054, 0x991E}, //19700 #CJK UNIFIED IDEOGRAPH + {0xF055, 0x991F}, //19701 #CJK UNIFIED IDEOGRAPH + {0xF056, 0x9920}, //19702 #CJK UNIFIED IDEOGRAPH + {0xF057, 0x9921}, //19703 #CJK UNIFIED IDEOGRAPH + {0xF058, 0x9922}, //19704 #CJK UNIFIED IDEOGRAPH + {0xF059, 0x9923}, //19705 #CJK UNIFIED IDEOGRAPH + {0xF05A, 0x9924}, //19706 #CJK UNIFIED IDEOGRAPH + {0xF05B, 0x9925}, //19707 #CJK UNIFIED IDEOGRAPH + {0xF05C, 0x9926}, //19708 #CJK UNIFIED IDEOGRAPH + {0xF05D, 0x9927}, //19709 #CJK UNIFIED IDEOGRAPH + {0xF05E, 0x9928}, //19710 #CJK UNIFIED IDEOGRAPH + {0xF05F, 0x9929}, //19711 #CJK UNIFIED IDEOGRAPH + {0xF060, 0x992A}, //19712 #CJK UNIFIED IDEOGRAPH + {0xF061, 0x992B}, //19713 #CJK UNIFIED IDEOGRAPH + {0xF062, 0x992C}, //19714 #CJK UNIFIED IDEOGRAPH + {0xF063, 0x992D}, //19715 #CJK UNIFIED IDEOGRAPH + {0xF064, 0x992F}, //19716 #CJK UNIFIED IDEOGRAPH + {0xF065, 0x9930}, //19717 #CJK UNIFIED IDEOGRAPH + {0xF066, 0x9931}, //19718 #CJK UNIFIED IDEOGRAPH + {0xF067, 0x9932}, //19719 #CJK UNIFIED IDEOGRAPH + {0xF068, 0x9933}, //19720 #CJK UNIFIED IDEOGRAPH + {0xF069, 0x9934}, //19721 #CJK UNIFIED IDEOGRAPH + {0xF06A, 0x9935}, //19722 #CJK UNIFIED IDEOGRAPH + {0xF06B, 0x9936}, //19723 #CJK UNIFIED IDEOGRAPH + {0xF06C, 0x9937}, //19724 #CJK UNIFIED IDEOGRAPH + {0xF06D, 0x9938}, //19725 #CJK UNIFIED IDEOGRAPH + {0xF06E, 0x9939}, //19726 #CJK UNIFIED IDEOGRAPH + {0xF06F, 0x993A}, //19727 #CJK UNIFIED IDEOGRAPH + {0xF070, 0x993B}, //19728 #CJK UNIFIED IDEOGRAPH + {0xF071, 0x993C}, //19729 #CJK UNIFIED IDEOGRAPH + {0xF072, 0x993D}, //19730 #CJK UNIFIED IDEOGRAPH + {0xF073, 0x993E}, //19731 #CJK UNIFIED IDEOGRAPH + {0xF074, 0x993F}, //19732 #CJK UNIFIED IDEOGRAPH + {0xF075, 0x9940}, //19733 #CJK UNIFIED IDEOGRAPH + {0xF076, 0x9941}, //19734 #CJK UNIFIED IDEOGRAPH + {0xF077, 0x9942}, //19735 #CJK UNIFIED IDEOGRAPH + {0xF078, 0x9943}, //19736 #CJK UNIFIED IDEOGRAPH + {0xF079, 0x9944}, //19737 #CJK UNIFIED IDEOGRAPH + {0xF07A, 0x9945}, //19738 #CJK UNIFIED IDEOGRAPH + {0xF07B, 0x9946}, //19739 #CJK UNIFIED IDEOGRAPH + {0xF07C, 0x9947}, //19740 #CJK UNIFIED IDEOGRAPH + {0xF07D, 0x9948}, //19741 #CJK UNIFIED IDEOGRAPH + {0xF07E, 0x9949}, //19742 #CJK UNIFIED IDEOGRAPH + {0xF080, 0x994A}, //19743 #CJK UNIFIED IDEOGRAPH + {0xF081, 0x994B}, //19744 #CJK UNIFIED IDEOGRAPH + {0xF082, 0x994C}, //19745 #CJK UNIFIED IDEOGRAPH + {0xF083, 0x994D}, //19746 #CJK UNIFIED IDEOGRAPH + {0xF084, 0x994E}, //19747 #CJK UNIFIED IDEOGRAPH + {0xF085, 0x994F}, //19748 #CJK UNIFIED IDEOGRAPH + {0xF086, 0x9950}, //19749 #CJK UNIFIED IDEOGRAPH + {0xF087, 0x9951}, //19750 #CJK UNIFIED IDEOGRAPH + {0xF088, 0x9952}, //19751 #CJK UNIFIED IDEOGRAPH + {0xF089, 0x9953}, //19752 #CJK UNIFIED IDEOGRAPH + {0xF08A, 0x9956}, //19753 #CJK UNIFIED IDEOGRAPH + {0xF08B, 0x9957}, //19754 #CJK UNIFIED IDEOGRAPH + {0xF08C, 0x9958}, //19755 #CJK UNIFIED IDEOGRAPH + {0xF08D, 0x9959}, //19756 #CJK UNIFIED IDEOGRAPH + {0xF08E, 0x995A}, //19757 #CJK UNIFIED IDEOGRAPH + {0xF08F, 0x995B}, //19758 #CJK UNIFIED IDEOGRAPH + {0xF090, 0x995C}, //19759 #CJK UNIFIED IDEOGRAPH + {0xF091, 0x995D}, //19760 #CJK UNIFIED IDEOGRAPH + {0xF092, 0x995E}, //19761 #CJK UNIFIED IDEOGRAPH + {0xF093, 0x995F}, //19762 #CJK UNIFIED IDEOGRAPH + {0xF094, 0x9960}, //19763 #CJK UNIFIED IDEOGRAPH + {0xF095, 0x9961}, //19764 #CJK UNIFIED IDEOGRAPH + {0xF096, 0x9962}, //19765 #CJK UNIFIED IDEOGRAPH + {0xF097, 0x9964}, //19766 #CJK UNIFIED IDEOGRAPH + {0xF098, 0x9966}, //19767 #CJK UNIFIED IDEOGRAPH + {0xF099, 0x9973}, //19768 #CJK UNIFIED IDEOGRAPH + {0xF09A, 0x9978}, //19769 #CJK UNIFIED IDEOGRAPH + {0xF09B, 0x9979}, //19770 #CJK UNIFIED IDEOGRAPH + {0xF09C, 0x997B}, //19771 #CJK UNIFIED IDEOGRAPH + {0xF09D, 0x997E}, //19772 #CJK UNIFIED IDEOGRAPH + {0xF09E, 0x9982}, //19773 #CJK UNIFIED IDEOGRAPH + {0xF09F, 0x9983}, //19774 #CJK UNIFIED IDEOGRAPH + {0xF0A0, 0x9989}, //19775 #CJK UNIFIED IDEOGRAPH + {0xF0A1, 0x7A39}, //19776 #CJK UNIFIED IDEOGRAPH + {0xF0A2, 0x7A37}, //19777 #CJK UNIFIED IDEOGRAPH + {0xF0A3, 0x7A51}, //19778 #CJK UNIFIED IDEOGRAPH + {0xF0A4, 0x9ECF}, //19779 #CJK UNIFIED IDEOGRAPH + {0xF0A5, 0x99A5}, //19780 #CJK UNIFIED IDEOGRAPH + {0xF0A6, 0x7A70}, //19781 #CJK UNIFIED IDEOGRAPH + {0xF0A7, 0x7688}, //19782 #CJK UNIFIED IDEOGRAPH + {0xF0A8, 0x768E}, //19783 #CJK UNIFIED IDEOGRAPH + {0xF0A9, 0x7693}, //19784 #CJK UNIFIED IDEOGRAPH + {0xF0AA, 0x7699}, //19785 #CJK UNIFIED IDEOGRAPH + {0xF0AB, 0x76A4}, //19786 #CJK UNIFIED IDEOGRAPH + {0xF0AC, 0x74DE}, //19787 #CJK UNIFIED IDEOGRAPH + {0xF0AD, 0x74E0}, //19788 #CJK UNIFIED IDEOGRAPH + {0xF0AE, 0x752C}, //19789 #CJK UNIFIED IDEOGRAPH + {0xF0AF, 0x9E20}, //19790 #CJK UNIFIED IDEOGRAPH + {0xF0B0, 0x9E22}, //19791 #CJK UNIFIED IDEOGRAPH + {0xF0B1, 0x9E28}, //19792 #CJK UNIFIED IDEOGRAPH + {0xF0B2, 0x9E29}, //19793 #CJK UNIFIED IDEOGRAPH + {0xF0B3, 0x9E2A}, //19794 #CJK UNIFIED IDEOGRAPH + {0xF0B4, 0x9E2B}, //19795 #CJK UNIFIED IDEOGRAPH + {0xF0B5, 0x9E2C}, //19796 #CJK UNIFIED IDEOGRAPH + {0xF0B6, 0x9E32}, //19797 #CJK UNIFIED IDEOGRAPH + {0xF0B7, 0x9E31}, //19798 #CJK UNIFIED IDEOGRAPH + {0xF0B8, 0x9E36}, //19799 #CJK UNIFIED IDEOGRAPH + {0xF0B9, 0x9E38}, //19800 #CJK UNIFIED IDEOGRAPH + {0xF0BA, 0x9E37}, //19801 #CJK UNIFIED IDEOGRAPH + {0xF0BB, 0x9E39}, //19802 #CJK UNIFIED IDEOGRAPH + {0xF0BC, 0x9E3A}, //19803 #CJK UNIFIED IDEOGRAPH + {0xF0BD, 0x9E3E}, //19804 #CJK UNIFIED IDEOGRAPH + {0xF0BE, 0x9E41}, //19805 #CJK UNIFIED IDEOGRAPH + {0xF0BF, 0x9E42}, //19806 #CJK UNIFIED IDEOGRAPH + {0xF0C0, 0x9E44}, //19807 #CJK UNIFIED IDEOGRAPH + {0xF0C1, 0x9E46}, //19808 #CJK UNIFIED IDEOGRAPH + {0xF0C2, 0x9E47}, //19809 #CJK UNIFIED IDEOGRAPH + {0xF0C3, 0x9E48}, //19810 #CJK UNIFIED IDEOGRAPH + {0xF0C4, 0x9E49}, //19811 #CJK UNIFIED IDEOGRAPH + {0xF0C5, 0x9E4B}, //19812 #CJK UNIFIED IDEOGRAPH + {0xF0C6, 0x9E4C}, //19813 #CJK UNIFIED IDEOGRAPH + {0xF0C7, 0x9E4E}, //19814 #CJK UNIFIED IDEOGRAPH + {0xF0C8, 0x9E51}, //19815 #CJK UNIFIED IDEOGRAPH + {0xF0C9, 0x9E55}, //19816 #CJK UNIFIED IDEOGRAPH + {0xF0CA, 0x9E57}, //19817 #CJK UNIFIED IDEOGRAPH + {0xF0CB, 0x9E5A}, //19818 #CJK UNIFIED IDEOGRAPH + {0xF0CC, 0x9E5B}, //19819 #CJK UNIFIED IDEOGRAPH + {0xF0CD, 0x9E5C}, //19820 #CJK UNIFIED IDEOGRAPH + {0xF0CE, 0x9E5E}, //19821 #CJK UNIFIED IDEOGRAPH + {0xF0CF, 0x9E63}, //19822 #CJK UNIFIED IDEOGRAPH + {0xF0D0, 0x9E66}, //19823 #CJK UNIFIED IDEOGRAPH + {0xF0D1, 0x9E67}, //19824 #CJK UNIFIED IDEOGRAPH + {0xF0D2, 0x9E68}, //19825 #CJK UNIFIED IDEOGRAPH + {0xF0D3, 0x9E69}, //19826 #CJK UNIFIED IDEOGRAPH + {0xF0D4, 0x9E6A}, //19827 #CJK UNIFIED IDEOGRAPH + {0xF0D5, 0x9E6B}, //19828 #CJK UNIFIED IDEOGRAPH + {0xF0D6, 0x9E6C}, //19829 #CJK UNIFIED IDEOGRAPH + {0xF0D7, 0x9E71}, //19830 #CJK UNIFIED IDEOGRAPH + {0xF0D8, 0x9E6D}, //19831 #CJK UNIFIED IDEOGRAPH + {0xF0D9, 0x9E73}, //19832 #CJK UNIFIED IDEOGRAPH + {0xF0DA, 0x7592}, //19833 #CJK UNIFIED IDEOGRAPH + {0xF0DB, 0x7594}, //19834 #CJK UNIFIED IDEOGRAPH + {0xF0DC, 0x7596}, //19835 #CJK UNIFIED IDEOGRAPH + {0xF0DD, 0x75A0}, //19836 #CJK UNIFIED IDEOGRAPH + {0xF0DE, 0x759D}, //19837 #CJK UNIFIED IDEOGRAPH + {0xF0DF, 0x75AC}, //19838 #CJK UNIFIED IDEOGRAPH + {0xF0E0, 0x75A3}, //19839 #CJK UNIFIED IDEOGRAPH + {0xF0E1, 0x75B3}, //19840 #CJK UNIFIED IDEOGRAPH + {0xF0E2, 0x75B4}, //19841 #CJK UNIFIED IDEOGRAPH + {0xF0E3, 0x75B8}, //19842 #CJK UNIFIED IDEOGRAPH + {0xF0E4, 0x75C4}, //19843 #CJK UNIFIED IDEOGRAPH + {0xF0E5, 0x75B1}, //19844 #CJK UNIFIED IDEOGRAPH + {0xF0E6, 0x75B0}, //19845 #CJK UNIFIED IDEOGRAPH + {0xF0E7, 0x75C3}, //19846 #CJK UNIFIED IDEOGRAPH + {0xF0E8, 0x75C2}, //19847 #CJK UNIFIED IDEOGRAPH + {0xF0E9, 0x75D6}, //19848 #CJK UNIFIED IDEOGRAPH + {0xF0EA, 0x75CD}, //19849 #CJK UNIFIED IDEOGRAPH + {0xF0EB, 0x75E3}, //19850 #CJK UNIFIED IDEOGRAPH + {0xF0EC, 0x75E8}, //19851 #CJK UNIFIED IDEOGRAPH + {0xF0ED, 0x75E6}, //19852 #CJK UNIFIED IDEOGRAPH + {0xF0EE, 0x75E4}, //19853 #CJK UNIFIED IDEOGRAPH + {0xF0EF, 0x75EB}, //19854 #CJK UNIFIED IDEOGRAPH + {0xF0F0, 0x75E7}, //19855 #CJK UNIFIED IDEOGRAPH + {0xF0F1, 0x7603}, //19856 #CJK UNIFIED IDEOGRAPH + {0xF0F2, 0x75F1}, //19857 #CJK UNIFIED IDEOGRAPH + {0xF0F3, 0x75FC}, //19858 #CJK UNIFIED IDEOGRAPH + {0xF0F4, 0x75FF}, //19859 #CJK UNIFIED IDEOGRAPH + {0xF0F5, 0x7610}, //19860 #CJK UNIFIED IDEOGRAPH + {0xF0F6, 0x7600}, //19861 #CJK UNIFIED IDEOGRAPH + {0xF0F7, 0x7605}, //19862 #CJK UNIFIED IDEOGRAPH + {0xF0F8, 0x760C}, //19863 #CJK UNIFIED IDEOGRAPH + {0xF0F9, 0x7617}, //19864 #CJK UNIFIED IDEOGRAPH + {0xF0FA, 0x760A}, //19865 #CJK UNIFIED IDEOGRAPH + {0xF0FB, 0x7625}, //19866 #CJK UNIFIED IDEOGRAPH + {0xF0FC, 0x7618}, //19867 #CJK UNIFIED IDEOGRAPH + {0xF0FD, 0x7615}, //19868 #CJK UNIFIED IDEOGRAPH + {0xF0FE, 0x7619}, //19869 #CJK UNIFIED IDEOGRAPH + {0xF140, 0x998C}, //19870 #CJK UNIFIED IDEOGRAPH + {0xF141, 0x998E}, //19871 #CJK UNIFIED IDEOGRAPH + {0xF142, 0x999A}, //19872 #CJK UNIFIED IDEOGRAPH + {0xF143, 0x999B}, //19873 #CJK UNIFIED IDEOGRAPH + {0xF144, 0x999C}, //19874 #CJK UNIFIED IDEOGRAPH + {0xF145, 0x999D}, //19875 #CJK UNIFIED IDEOGRAPH + {0xF146, 0x999E}, //19876 #CJK UNIFIED IDEOGRAPH + {0xF147, 0x999F}, //19877 #CJK UNIFIED IDEOGRAPH + {0xF148, 0x99A0}, //19878 #CJK UNIFIED IDEOGRAPH + {0xF149, 0x99A1}, //19879 #CJK UNIFIED IDEOGRAPH + {0xF14A, 0x99A2}, //19880 #CJK UNIFIED IDEOGRAPH + {0xF14B, 0x99A3}, //19881 #CJK UNIFIED IDEOGRAPH + {0xF14C, 0x99A4}, //19882 #CJK UNIFIED IDEOGRAPH + {0xF14D, 0x99A6}, //19883 #CJK UNIFIED IDEOGRAPH + {0xF14E, 0x99A7}, //19884 #CJK UNIFIED IDEOGRAPH + {0xF14F, 0x99A9}, //19885 #CJK UNIFIED IDEOGRAPH + {0xF150, 0x99AA}, //19886 #CJK UNIFIED IDEOGRAPH + {0xF151, 0x99AB}, //19887 #CJK UNIFIED IDEOGRAPH + {0xF152, 0x99AC}, //19888 #CJK UNIFIED IDEOGRAPH + {0xF153, 0x99AD}, //19889 #CJK UNIFIED IDEOGRAPH + {0xF154, 0x99AE}, //19890 #CJK UNIFIED IDEOGRAPH + {0xF155, 0x99AF}, //19891 #CJK UNIFIED IDEOGRAPH + {0xF156, 0x99B0}, //19892 #CJK UNIFIED IDEOGRAPH + {0xF157, 0x99B1}, //19893 #CJK UNIFIED IDEOGRAPH + {0xF158, 0x99B2}, //19894 #CJK UNIFIED IDEOGRAPH + {0xF159, 0x99B3}, //19895 #CJK UNIFIED IDEOGRAPH + {0xF15A, 0x99B4}, //19896 #CJK UNIFIED IDEOGRAPH + {0xF15B, 0x99B5}, //19897 #CJK UNIFIED IDEOGRAPH + {0xF15C, 0x99B6}, //19898 #CJK UNIFIED IDEOGRAPH + {0xF15D, 0x99B7}, //19899 #CJK UNIFIED IDEOGRAPH + {0xF15E, 0x99B8}, //19900 #CJK UNIFIED IDEOGRAPH + {0xF15F, 0x99B9}, //19901 #CJK UNIFIED IDEOGRAPH + {0xF160, 0x99BA}, //19902 #CJK UNIFIED IDEOGRAPH + {0xF161, 0x99BB}, //19903 #CJK UNIFIED IDEOGRAPH + {0xF162, 0x99BC}, //19904 #CJK UNIFIED IDEOGRAPH + {0xF163, 0x99BD}, //19905 #CJK UNIFIED IDEOGRAPH + {0xF164, 0x99BE}, //19906 #CJK UNIFIED IDEOGRAPH + {0xF165, 0x99BF}, //19907 #CJK UNIFIED IDEOGRAPH + {0xF166, 0x99C0}, //19908 #CJK UNIFIED IDEOGRAPH + {0xF167, 0x99C1}, //19909 #CJK UNIFIED IDEOGRAPH + {0xF168, 0x99C2}, //19910 #CJK UNIFIED IDEOGRAPH + {0xF169, 0x99C3}, //19911 #CJK UNIFIED IDEOGRAPH + {0xF16A, 0x99C4}, //19912 #CJK UNIFIED IDEOGRAPH + {0xF16B, 0x99C5}, //19913 #CJK UNIFIED IDEOGRAPH + {0xF16C, 0x99C6}, //19914 #CJK UNIFIED IDEOGRAPH + {0xF16D, 0x99C7}, //19915 #CJK UNIFIED IDEOGRAPH + {0xF16E, 0x99C8}, //19916 #CJK UNIFIED IDEOGRAPH + {0xF16F, 0x99C9}, //19917 #CJK UNIFIED IDEOGRAPH + {0xF170, 0x99CA}, //19918 #CJK UNIFIED IDEOGRAPH + {0xF171, 0x99CB}, //19919 #CJK UNIFIED IDEOGRAPH + {0xF172, 0x99CC}, //19920 #CJK UNIFIED IDEOGRAPH + {0xF173, 0x99CD}, //19921 #CJK UNIFIED IDEOGRAPH + {0xF174, 0x99CE}, //19922 #CJK UNIFIED IDEOGRAPH + {0xF175, 0x99CF}, //19923 #CJK UNIFIED IDEOGRAPH + {0xF176, 0x99D0}, //19924 #CJK UNIFIED IDEOGRAPH + {0xF177, 0x99D1}, //19925 #CJK UNIFIED IDEOGRAPH + {0xF178, 0x99D2}, //19926 #CJK UNIFIED IDEOGRAPH + {0xF179, 0x99D3}, //19927 #CJK UNIFIED IDEOGRAPH + {0xF17A, 0x99D4}, //19928 #CJK UNIFIED IDEOGRAPH + {0xF17B, 0x99D5}, //19929 #CJK UNIFIED IDEOGRAPH + {0xF17C, 0x99D6}, //19930 #CJK UNIFIED IDEOGRAPH + {0xF17D, 0x99D7}, //19931 #CJK UNIFIED IDEOGRAPH + {0xF17E, 0x99D8}, //19932 #CJK UNIFIED IDEOGRAPH + {0xF180, 0x99D9}, //19933 #CJK UNIFIED IDEOGRAPH + {0xF181, 0x99DA}, //19934 #CJK UNIFIED IDEOGRAPH + {0xF182, 0x99DB}, //19935 #CJK UNIFIED IDEOGRAPH + {0xF183, 0x99DC}, //19936 #CJK UNIFIED IDEOGRAPH + {0xF184, 0x99DD}, //19937 #CJK UNIFIED IDEOGRAPH + {0xF185, 0x99DE}, //19938 #CJK UNIFIED IDEOGRAPH + {0xF186, 0x99DF}, //19939 #CJK UNIFIED IDEOGRAPH + {0xF187, 0x99E0}, //19940 #CJK UNIFIED IDEOGRAPH + {0xF188, 0x99E1}, //19941 #CJK UNIFIED IDEOGRAPH + {0xF189, 0x99E2}, //19942 #CJK UNIFIED IDEOGRAPH + {0xF18A, 0x99E3}, //19943 #CJK UNIFIED IDEOGRAPH + {0xF18B, 0x99E4}, //19944 #CJK UNIFIED IDEOGRAPH + {0xF18C, 0x99E5}, //19945 #CJK UNIFIED IDEOGRAPH + {0xF18D, 0x99E6}, //19946 #CJK UNIFIED IDEOGRAPH + {0xF18E, 0x99E7}, //19947 #CJK UNIFIED IDEOGRAPH + {0xF18F, 0x99E8}, //19948 #CJK UNIFIED IDEOGRAPH + {0xF190, 0x99E9}, //19949 #CJK UNIFIED IDEOGRAPH + {0xF191, 0x99EA}, //19950 #CJK UNIFIED IDEOGRAPH + {0xF192, 0x99EB}, //19951 #CJK UNIFIED IDEOGRAPH + {0xF193, 0x99EC}, //19952 #CJK UNIFIED IDEOGRAPH + {0xF194, 0x99ED}, //19953 #CJK UNIFIED IDEOGRAPH + {0xF195, 0x99EE}, //19954 #CJK UNIFIED IDEOGRAPH + {0xF196, 0x99EF}, //19955 #CJK UNIFIED IDEOGRAPH + {0xF197, 0x99F0}, //19956 #CJK UNIFIED IDEOGRAPH + {0xF198, 0x99F1}, //19957 #CJK UNIFIED IDEOGRAPH + {0xF199, 0x99F2}, //19958 #CJK UNIFIED IDEOGRAPH + {0xF19A, 0x99F3}, //19959 #CJK UNIFIED IDEOGRAPH + {0xF19B, 0x99F4}, //19960 #CJK UNIFIED IDEOGRAPH + {0xF19C, 0x99F5}, //19961 #CJK UNIFIED IDEOGRAPH + {0xF19D, 0x99F6}, //19962 #CJK UNIFIED IDEOGRAPH + {0xF19E, 0x99F7}, //19963 #CJK UNIFIED IDEOGRAPH + {0xF19F, 0x99F8}, //19964 #CJK UNIFIED IDEOGRAPH + {0xF1A0, 0x99F9}, //19965 #CJK UNIFIED IDEOGRAPH + {0xF1A1, 0x761B}, //19966 #CJK UNIFIED IDEOGRAPH + {0xF1A2, 0x763C}, //19967 #CJK UNIFIED IDEOGRAPH + {0xF1A3, 0x7622}, //19968 #CJK UNIFIED IDEOGRAPH + {0xF1A4, 0x7620}, //19969 #CJK UNIFIED IDEOGRAPH + {0xF1A5, 0x7640}, //19970 #CJK UNIFIED IDEOGRAPH + {0xF1A6, 0x762D}, //19971 #CJK UNIFIED IDEOGRAPH + {0xF1A7, 0x7630}, //19972 #CJK UNIFIED IDEOGRAPH + {0xF1A8, 0x763F}, //19973 #CJK UNIFIED IDEOGRAPH + {0xF1A9, 0x7635}, //19974 #CJK UNIFIED IDEOGRAPH + {0xF1AA, 0x7643}, //19975 #CJK UNIFIED IDEOGRAPH + {0xF1AB, 0x763E}, //19976 #CJK UNIFIED IDEOGRAPH + {0xF1AC, 0x7633}, //19977 #CJK UNIFIED IDEOGRAPH + {0xF1AD, 0x764D}, //19978 #CJK UNIFIED IDEOGRAPH + {0xF1AE, 0x765E}, //19979 #CJK UNIFIED IDEOGRAPH + {0xF1AF, 0x7654}, //19980 #CJK UNIFIED IDEOGRAPH + {0xF1B0, 0x765C}, //19981 #CJK UNIFIED IDEOGRAPH + {0xF1B1, 0x7656}, //19982 #CJK UNIFIED IDEOGRAPH + {0xF1B2, 0x766B}, //19983 #CJK UNIFIED IDEOGRAPH + {0xF1B3, 0x766F}, //19984 #CJK UNIFIED IDEOGRAPH + {0xF1B4, 0x7FCA}, //19985 #CJK UNIFIED IDEOGRAPH + {0xF1B5, 0x7AE6}, //19986 #CJK UNIFIED IDEOGRAPH + {0xF1B6, 0x7A78}, //19987 #CJK UNIFIED IDEOGRAPH + {0xF1B7, 0x7A79}, //19988 #CJK UNIFIED IDEOGRAPH + {0xF1B8, 0x7A80}, //19989 #CJK UNIFIED IDEOGRAPH + {0xF1B9, 0x7A86}, //19990 #CJK UNIFIED IDEOGRAPH + {0xF1BA, 0x7A88}, //19991 #CJK UNIFIED IDEOGRAPH + {0xF1BB, 0x7A95}, //19992 #CJK UNIFIED IDEOGRAPH + {0xF1BC, 0x7AA6}, //19993 #CJK UNIFIED IDEOGRAPH + {0xF1BD, 0x7AA0}, //19994 #CJK UNIFIED IDEOGRAPH + {0xF1BE, 0x7AAC}, //19995 #CJK UNIFIED IDEOGRAPH + {0xF1BF, 0x7AA8}, //19996 #CJK UNIFIED IDEOGRAPH + {0xF1C0, 0x7AAD}, //19997 #CJK UNIFIED IDEOGRAPH + {0xF1C1, 0x7AB3}, //19998 #CJK UNIFIED IDEOGRAPH + {0xF1C2, 0x8864}, //19999 #CJK UNIFIED IDEOGRAPH + {0xF1C3, 0x8869}, //20000 #CJK UNIFIED IDEOGRAPH + {0xF1C4, 0x8872}, //20001 #CJK UNIFIED IDEOGRAPH + {0xF1C5, 0x887D}, //20002 #CJK UNIFIED IDEOGRAPH + {0xF1C6, 0x887F}, //20003 #CJK UNIFIED IDEOGRAPH + {0xF1C7, 0x8882}, //20004 #CJK UNIFIED IDEOGRAPH + {0xF1C8, 0x88A2}, //20005 #CJK UNIFIED IDEOGRAPH + {0xF1C9, 0x88C6}, //20006 #CJK UNIFIED IDEOGRAPH + {0xF1CA, 0x88B7}, //20007 #CJK UNIFIED IDEOGRAPH + {0xF1CB, 0x88BC}, //20008 #CJK UNIFIED IDEOGRAPH + {0xF1CC, 0x88C9}, //20009 #CJK UNIFIED IDEOGRAPH + {0xF1CD, 0x88E2}, //20010 #CJK UNIFIED IDEOGRAPH + {0xF1CE, 0x88CE}, //20011 #CJK UNIFIED IDEOGRAPH + {0xF1CF, 0x88E3}, //20012 #CJK UNIFIED IDEOGRAPH + {0xF1D0, 0x88E5}, //20013 #CJK UNIFIED IDEOGRAPH + {0xF1D1, 0x88F1}, //20014 #CJK UNIFIED IDEOGRAPH + {0xF1D2, 0x891A}, //20015 #CJK UNIFIED IDEOGRAPH + {0xF1D3, 0x88FC}, //20016 #CJK UNIFIED IDEOGRAPH + {0xF1D4, 0x88E8}, //20017 #CJK UNIFIED IDEOGRAPH + {0xF1D5, 0x88FE}, //20018 #CJK UNIFIED IDEOGRAPH + {0xF1D6, 0x88F0}, //20019 #CJK UNIFIED IDEOGRAPH + {0xF1D7, 0x8921}, //20020 #CJK UNIFIED IDEOGRAPH + {0xF1D8, 0x8919}, //20021 #CJK UNIFIED IDEOGRAPH + {0xF1D9, 0x8913}, //20022 #CJK UNIFIED IDEOGRAPH + {0xF1DA, 0x891B}, //20023 #CJK UNIFIED IDEOGRAPH + {0xF1DB, 0x890A}, //20024 #CJK UNIFIED IDEOGRAPH + {0xF1DC, 0x8934}, //20025 #CJK UNIFIED IDEOGRAPH + {0xF1DD, 0x892B}, //20026 #CJK UNIFIED IDEOGRAPH + {0xF1DE, 0x8936}, //20027 #CJK UNIFIED IDEOGRAPH + {0xF1DF, 0x8941}, //20028 #CJK UNIFIED IDEOGRAPH + {0xF1E0, 0x8966}, //20029 #CJK UNIFIED IDEOGRAPH + {0xF1E1, 0x897B}, //20030 #CJK UNIFIED IDEOGRAPH + {0xF1E2, 0x758B}, //20031 #CJK UNIFIED IDEOGRAPH + {0xF1E3, 0x80E5}, //20032 #CJK UNIFIED IDEOGRAPH + {0xF1E4, 0x76B2}, //20033 #CJK UNIFIED IDEOGRAPH + {0xF1E5, 0x76B4}, //20034 #CJK UNIFIED IDEOGRAPH + {0xF1E6, 0x77DC}, //20035 #CJK UNIFIED IDEOGRAPH + {0xF1E7, 0x8012}, //20036 #CJK UNIFIED IDEOGRAPH + {0xF1E8, 0x8014}, //20037 #CJK UNIFIED IDEOGRAPH + {0xF1E9, 0x8016}, //20038 #CJK UNIFIED IDEOGRAPH + {0xF1EA, 0x801C}, //20039 #CJK UNIFIED IDEOGRAPH + {0xF1EB, 0x8020}, //20040 #CJK UNIFIED IDEOGRAPH + {0xF1EC, 0x8022}, //20041 #CJK UNIFIED IDEOGRAPH + {0xF1ED, 0x8025}, //20042 #CJK UNIFIED IDEOGRAPH + {0xF1EE, 0x8026}, //20043 #CJK UNIFIED IDEOGRAPH + {0xF1EF, 0x8027}, //20044 #CJK UNIFIED IDEOGRAPH + {0xF1F0, 0x8029}, //20045 #CJK UNIFIED IDEOGRAPH + {0xF1F1, 0x8028}, //20046 #CJK UNIFIED IDEOGRAPH + {0xF1F2, 0x8031}, //20047 #CJK UNIFIED IDEOGRAPH + {0xF1F3, 0x800B}, //20048 #CJK UNIFIED IDEOGRAPH + {0xF1F4, 0x8035}, //20049 #CJK UNIFIED IDEOGRAPH + {0xF1F5, 0x8043}, //20050 #CJK UNIFIED IDEOGRAPH + {0xF1F6, 0x8046}, //20051 #CJK UNIFIED IDEOGRAPH + {0xF1F7, 0x804D}, //20052 #CJK UNIFIED IDEOGRAPH + {0xF1F8, 0x8052}, //20053 #CJK UNIFIED IDEOGRAPH + {0xF1F9, 0x8069}, //20054 #CJK UNIFIED IDEOGRAPH + {0xF1FA, 0x8071}, //20055 #CJK UNIFIED IDEOGRAPH + {0xF1FB, 0x8983}, //20056 #CJK UNIFIED IDEOGRAPH + {0xF1FC, 0x9878}, //20057 #CJK UNIFIED IDEOGRAPH + {0xF1FD, 0x9880}, //20058 #CJK UNIFIED IDEOGRAPH + {0xF1FE, 0x9883}, //20059 #CJK UNIFIED IDEOGRAPH + {0xF240, 0x99FA}, //20060 #CJK UNIFIED IDEOGRAPH + {0xF241, 0x99FB}, //20061 #CJK UNIFIED IDEOGRAPH + {0xF242, 0x99FC}, //20062 #CJK UNIFIED IDEOGRAPH + {0xF243, 0x99FD}, //20063 #CJK UNIFIED IDEOGRAPH + {0xF244, 0x99FE}, //20064 #CJK UNIFIED IDEOGRAPH + {0xF245, 0x99FF}, //20065 #CJK UNIFIED IDEOGRAPH + {0xF246, 0x9A00}, //20066 #CJK UNIFIED IDEOGRAPH + {0xF247, 0x9A01}, //20067 #CJK UNIFIED IDEOGRAPH + {0xF248, 0x9A02}, //20068 #CJK UNIFIED IDEOGRAPH + {0xF249, 0x9A03}, //20069 #CJK UNIFIED IDEOGRAPH + {0xF24A, 0x9A04}, //20070 #CJK UNIFIED IDEOGRAPH + {0xF24B, 0x9A05}, //20071 #CJK UNIFIED IDEOGRAPH + {0xF24C, 0x9A06}, //20072 #CJK UNIFIED IDEOGRAPH + {0xF24D, 0x9A07}, //20073 #CJK UNIFIED IDEOGRAPH + {0xF24E, 0x9A08}, //20074 #CJK UNIFIED IDEOGRAPH + {0xF24F, 0x9A09}, //20075 #CJK UNIFIED IDEOGRAPH + {0xF250, 0x9A0A}, //20076 #CJK UNIFIED IDEOGRAPH + {0xF251, 0x9A0B}, //20077 #CJK UNIFIED IDEOGRAPH + {0xF252, 0x9A0C}, //20078 #CJK UNIFIED IDEOGRAPH + {0xF253, 0x9A0D}, //20079 #CJK UNIFIED IDEOGRAPH + {0xF254, 0x9A0E}, //20080 #CJK UNIFIED IDEOGRAPH + {0xF255, 0x9A0F}, //20081 #CJK UNIFIED IDEOGRAPH + {0xF256, 0x9A10}, //20082 #CJK UNIFIED IDEOGRAPH + {0xF257, 0x9A11}, //20083 #CJK UNIFIED IDEOGRAPH + {0xF258, 0x9A12}, //20084 #CJK UNIFIED IDEOGRAPH + {0xF259, 0x9A13}, //20085 #CJK UNIFIED IDEOGRAPH + {0xF25A, 0x9A14}, //20086 #CJK UNIFIED IDEOGRAPH + {0xF25B, 0x9A15}, //20087 #CJK UNIFIED IDEOGRAPH + {0xF25C, 0x9A16}, //20088 #CJK UNIFIED IDEOGRAPH + {0xF25D, 0x9A17}, //20089 #CJK UNIFIED IDEOGRAPH + {0xF25E, 0x9A18}, //20090 #CJK UNIFIED IDEOGRAPH + {0xF25F, 0x9A19}, //20091 #CJK UNIFIED IDEOGRAPH + {0xF260, 0x9A1A}, //20092 #CJK UNIFIED IDEOGRAPH + {0xF261, 0x9A1B}, //20093 #CJK UNIFIED IDEOGRAPH + {0xF262, 0x9A1C}, //20094 #CJK UNIFIED IDEOGRAPH + {0xF263, 0x9A1D}, //20095 #CJK UNIFIED IDEOGRAPH + {0xF264, 0x9A1E}, //20096 #CJK UNIFIED IDEOGRAPH + {0xF265, 0x9A1F}, //20097 #CJK UNIFIED IDEOGRAPH + {0xF266, 0x9A20}, //20098 #CJK UNIFIED IDEOGRAPH + {0xF267, 0x9A21}, //20099 #CJK UNIFIED IDEOGRAPH + {0xF268, 0x9A22}, //20100 #CJK UNIFIED IDEOGRAPH + {0xF269, 0x9A23}, //20101 #CJK UNIFIED IDEOGRAPH + {0xF26A, 0x9A24}, //20102 #CJK UNIFIED IDEOGRAPH + {0xF26B, 0x9A25}, //20103 #CJK UNIFIED IDEOGRAPH + {0xF26C, 0x9A26}, //20104 #CJK UNIFIED IDEOGRAPH + {0xF26D, 0x9A27}, //20105 #CJK UNIFIED IDEOGRAPH + {0xF26E, 0x9A28}, //20106 #CJK UNIFIED IDEOGRAPH + {0xF26F, 0x9A29}, //20107 #CJK UNIFIED IDEOGRAPH + {0xF270, 0x9A2A}, //20108 #CJK UNIFIED IDEOGRAPH + {0xF271, 0x9A2B}, //20109 #CJK UNIFIED IDEOGRAPH + {0xF272, 0x9A2C}, //20110 #CJK UNIFIED IDEOGRAPH + {0xF273, 0x9A2D}, //20111 #CJK UNIFIED IDEOGRAPH + {0xF274, 0x9A2E}, //20112 #CJK UNIFIED IDEOGRAPH + {0xF275, 0x9A2F}, //20113 #CJK UNIFIED IDEOGRAPH + {0xF276, 0x9A30}, //20114 #CJK UNIFIED IDEOGRAPH + {0xF277, 0x9A31}, //20115 #CJK UNIFIED IDEOGRAPH + {0xF278, 0x9A32}, //20116 #CJK UNIFIED IDEOGRAPH + {0xF279, 0x9A33}, //20117 #CJK UNIFIED IDEOGRAPH + {0xF27A, 0x9A34}, //20118 #CJK UNIFIED IDEOGRAPH + {0xF27B, 0x9A35}, //20119 #CJK UNIFIED IDEOGRAPH + {0xF27C, 0x9A36}, //20120 #CJK UNIFIED IDEOGRAPH + {0xF27D, 0x9A37}, //20121 #CJK UNIFIED IDEOGRAPH + {0xF27E, 0x9A38}, //20122 #CJK UNIFIED IDEOGRAPH + {0xF280, 0x9A39}, //20123 #CJK UNIFIED IDEOGRAPH + {0xF281, 0x9A3A}, //20124 #CJK UNIFIED IDEOGRAPH + {0xF282, 0x9A3B}, //20125 #CJK UNIFIED IDEOGRAPH + {0xF283, 0x9A3C}, //20126 #CJK UNIFIED IDEOGRAPH + {0xF284, 0x9A3D}, //20127 #CJK UNIFIED IDEOGRAPH + {0xF285, 0x9A3E}, //20128 #CJK UNIFIED IDEOGRAPH + {0xF286, 0x9A3F}, //20129 #CJK UNIFIED IDEOGRAPH + {0xF287, 0x9A40}, //20130 #CJK UNIFIED IDEOGRAPH + {0xF288, 0x9A41}, //20131 #CJK UNIFIED IDEOGRAPH + {0xF289, 0x9A42}, //20132 #CJK UNIFIED IDEOGRAPH + {0xF28A, 0x9A43}, //20133 #CJK UNIFIED IDEOGRAPH + {0xF28B, 0x9A44}, //20134 #CJK UNIFIED IDEOGRAPH + {0xF28C, 0x9A45}, //20135 #CJK UNIFIED IDEOGRAPH + {0xF28D, 0x9A46}, //20136 #CJK UNIFIED IDEOGRAPH + {0xF28E, 0x9A47}, //20137 #CJK UNIFIED IDEOGRAPH + {0xF28F, 0x9A48}, //20138 #CJK UNIFIED IDEOGRAPH + {0xF290, 0x9A49}, //20139 #CJK UNIFIED IDEOGRAPH + {0xF291, 0x9A4A}, //20140 #CJK UNIFIED IDEOGRAPH + {0xF292, 0x9A4B}, //20141 #CJK UNIFIED IDEOGRAPH + {0xF293, 0x9A4C}, //20142 #CJK UNIFIED IDEOGRAPH + {0xF294, 0x9A4D}, //20143 #CJK UNIFIED IDEOGRAPH + {0xF295, 0x9A4E}, //20144 #CJK UNIFIED IDEOGRAPH + {0xF296, 0x9A4F}, //20145 #CJK UNIFIED IDEOGRAPH + {0xF297, 0x9A50}, //20146 #CJK UNIFIED IDEOGRAPH + {0xF298, 0x9A51}, //20147 #CJK UNIFIED IDEOGRAPH + {0xF299, 0x9A52}, //20148 #CJK UNIFIED IDEOGRAPH + {0xF29A, 0x9A53}, //20149 #CJK UNIFIED IDEOGRAPH + {0xF29B, 0x9A54}, //20150 #CJK UNIFIED IDEOGRAPH + {0xF29C, 0x9A55}, //20151 #CJK UNIFIED IDEOGRAPH + {0xF29D, 0x9A56}, //20152 #CJK UNIFIED IDEOGRAPH + {0xF29E, 0x9A57}, //20153 #CJK UNIFIED IDEOGRAPH + {0xF29F, 0x9A58}, //20154 #CJK UNIFIED IDEOGRAPH + {0xF2A0, 0x9A59}, //20155 #CJK UNIFIED IDEOGRAPH + {0xF2A1, 0x9889}, //20156 #CJK UNIFIED IDEOGRAPH + {0xF2A2, 0x988C}, //20157 #CJK UNIFIED IDEOGRAPH + {0xF2A3, 0x988D}, //20158 #CJK UNIFIED IDEOGRAPH + {0xF2A4, 0x988F}, //20159 #CJK UNIFIED IDEOGRAPH + {0xF2A5, 0x9894}, //20160 #CJK UNIFIED IDEOGRAPH + {0xF2A6, 0x989A}, //20161 #CJK UNIFIED IDEOGRAPH + {0xF2A7, 0x989B}, //20162 #CJK UNIFIED IDEOGRAPH + {0xF2A8, 0x989E}, //20163 #CJK UNIFIED IDEOGRAPH + {0xF2A9, 0x989F}, //20164 #CJK UNIFIED IDEOGRAPH + {0xF2AA, 0x98A1}, //20165 #CJK UNIFIED IDEOGRAPH + {0xF2AB, 0x98A2}, //20166 #CJK UNIFIED IDEOGRAPH + {0xF2AC, 0x98A5}, //20167 #CJK UNIFIED IDEOGRAPH + {0xF2AD, 0x98A6}, //20168 #CJK UNIFIED IDEOGRAPH + {0xF2AE, 0x864D}, //20169 #CJK UNIFIED IDEOGRAPH + {0xF2AF, 0x8654}, //20170 #CJK UNIFIED IDEOGRAPH + {0xF2B0, 0x866C}, //20171 #CJK UNIFIED IDEOGRAPH + {0xF2B1, 0x866E}, //20172 #CJK UNIFIED IDEOGRAPH + {0xF2B2, 0x867F}, //20173 #CJK UNIFIED IDEOGRAPH + {0xF2B3, 0x867A}, //20174 #CJK UNIFIED IDEOGRAPH + {0xF2B4, 0x867C}, //20175 #CJK UNIFIED IDEOGRAPH + {0xF2B5, 0x867B}, //20176 #CJK UNIFIED IDEOGRAPH + {0xF2B6, 0x86A8}, //20177 #CJK UNIFIED IDEOGRAPH + {0xF2B7, 0x868D}, //20178 #CJK UNIFIED IDEOGRAPH + {0xF2B8, 0x868B}, //20179 #CJK UNIFIED IDEOGRAPH + {0xF2B9, 0x86AC}, //20180 #CJK UNIFIED IDEOGRAPH + {0xF2BA, 0x869D}, //20181 #CJK UNIFIED IDEOGRAPH + {0xF2BB, 0x86A7}, //20182 #CJK UNIFIED IDEOGRAPH + {0xF2BC, 0x86A3}, //20183 #CJK UNIFIED IDEOGRAPH + {0xF2BD, 0x86AA}, //20184 #CJK UNIFIED IDEOGRAPH + {0xF2BE, 0x8693}, //20185 #CJK UNIFIED IDEOGRAPH + {0xF2BF, 0x86A9}, //20186 #CJK UNIFIED IDEOGRAPH + {0xF2C0, 0x86B6}, //20187 #CJK UNIFIED IDEOGRAPH + {0xF2C1, 0x86C4}, //20188 #CJK UNIFIED IDEOGRAPH + {0xF2C2, 0x86B5}, //20189 #CJK UNIFIED IDEOGRAPH + {0xF2C3, 0x86CE}, //20190 #CJK UNIFIED IDEOGRAPH + {0xF2C4, 0x86B0}, //20191 #CJK UNIFIED IDEOGRAPH + {0xF2C5, 0x86BA}, //20192 #CJK UNIFIED IDEOGRAPH + {0xF2C6, 0x86B1}, //20193 #CJK UNIFIED IDEOGRAPH + {0xF2C7, 0x86AF}, //20194 #CJK UNIFIED IDEOGRAPH + {0xF2C8, 0x86C9}, //20195 #CJK UNIFIED IDEOGRAPH + {0xF2C9, 0x86CF}, //20196 #CJK UNIFIED IDEOGRAPH + {0xF2CA, 0x86B4}, //20197 #CJK UNIFIED IDEOGRAPH + {0xF2CB, 0x86E9}, //20198 #CJK UNIFIED IDEOGRAPH + {0xF2CC, 0x86F1}, //20199 #CJK UNIFIED IDEOGRAPH + {0xF2CD, 0x86F2}, //20200 #CJK UNIFIED IDEOGRAPH + {0xF2CE, 0x86ED}, //20201 #CJK UNIFIED IDEOGRAPH + {0xF2CF, 0x86F3}, //20202 #CJK UNIFIED IDEOGRAPH + {0xF2D0, 0x86D0}, //20203 #CJK UNIFIED IDEOGRAPH + {0xF2D1, 0x8713}, //20204 #CJK UNIFIED IDEOGRAPH + {0xF2D2, 0x86DE}, //20205 #CJK UNIFIED IDEOGRAPH + {0xF2D3, 0x86F4}, //20206 #CJK UNIFIED IDEOGRAPH + {0xF2D4, 0x86DF}, //20207 #CJK UNIFIED IDEOGRAPH + {0xF2D5, 0x86D8}, //20208 #CJK UNIFIED IDEOGRAPH + {0xF2D6, 0x86D1}, //20209 #CJK UNIFIED IDEOGRAPH + {0xF2D7, 0x8703}, //20210 #CJK UNIFIED IDEOGRAPH + {0xF2D8, 0x8707}, //20211 #CJK UNIFIED IDEOGRAPH + {0xF2D9, 0x86F8}, //20212 #CJK UNIFIED IDEOGRAPH + {0xF2DA, 0x8708}, //20213 #CJK UNIFIED IDEOGRAPH + {0xF2DB, 0x870A}, //20214 #CJK UNIFIED IDEOGRAPH + {0xF2DC, 0x870D}, //20215 #CJK UNIFIED IDEOGRAPH + {0xF2DD, 0x8709}, //20216 #CJK UNIFIED IDEOGRAPH + {0xF2DE, 0x8723}, //20217 #CJK UNIFIED IDEOGRAPH + {0xF2DF, 0x873B}, //20218 #CJK UNIFIED IDEOGRAPH + {0xF2E0, 0x871E}, //20219 #CJK UNIFIED IDEOGRAPH + {0xF2E1, 0x8725}, //20220 #CJK UNIFIED IDEOGRAPH + {0xF2E2, 0x872E}, //20221 #CJK UNIFIED IDEOGRAPH + {0xF2E3, 0x871A}, //20222 #CJK UNIFIED IDEOGRAPH + {0xF2E4, 0x873E}, //20223 #CJK UNIFIED IDEOGRAPH + {0xF2E5, 0x8748}, //20224 #CJK UNIFIED IDEOGRAPH + {0xF2E6, 0x8734}, //20225 #CJK UNIFIED IDEOGRAPH + {0xF2E7, 0x8731}, //20226 #CJK UNIFIED IDEOGRAPH + {0xF2E8, 0x8729}, //20227 #CJK UNIFIED IDEOGRAPH + {0xF2E9, 0x8737}, //20228 #CJK UNIFIED IDEOGRAPH + {0xF2EA, 0x873F}, //20229 #CJK UNIFIED IDEOGRAPH + {0xF2EB, 0x8782}, //20230 #CJK UNIFIED IDEOGRAPH + {0xF2EC, 0x8722}, //20231 #CJK UNIFIED IDEOGRAPH + {0xF2ED, 0x877D}, //20232 #CJK UNIFIED IDEOGRAPH + {0xF2EE, 0x877E}, //20233 #CJK UNIFIED IDEOGRAPH + {0xF2EF, 0x877B}, //20234 #CJK UNIFIED IDEOGRAPH + {0xF2F0, 0x8760}, //20235 #CJK UNIFIED IDEOGRAPH + {0xF2F1, 0x8770}, //20236 #CJK UNIFIED IDEOGRAPH + {0xF2F2, 0x874C}, //20237 #CJK UNIFIED IDEOGRAPH + {0xF2F3, 0x876E}, //20238 #CJK UNIFIED IDEOGRAPH + {0xF2F4, 0x878B}, //20239 #CJK UNIFIED IDEOGRAPH + {0xF2F5, 0x8753}, //20240 #CJK UNIFIED IDEOGRAPH + {0xF2F6, 0x8763}, //20241 #CJK UNIFIED IDEOGRAPH + {0xF2F7, 0x877C}, //20242 #CJK UNIFIED IDEOGRAPH + {0xF2F8, 0x8764}, //20243 #CJK UNIFIED IDEOGRAPH + {0xF2F9, 0x8759}, //20244 #CJK UNIFIED IDEOGRAPH + {0xF2FA, 0x8765}, //20245 #CJK UNIFIED IDEOGRAPH + {0xF2FB, 0x8793}, //20246 #CJK UNIFIED IDEOGRAPH + {0xF2FC, 0x87AF}, //20247 #CJK UNIFIED IDEOGRAPH + {0xF2FD, 0x87A8}, //20248 #CJK UNIFIED IDEOGRAPH + {0xF2FE, 0x87D2}, //20249 #CJK UNIFIED IDEOGRAPH + {0xF340, 0x9A5A}, //20250 #CJK UNIFIED IDEOGRAPH + {0xF341, 0x9A5B}, //20251 #CJK UNIFIED IDEOGRAPH + {0xF342, 0x9A5C}, //20252 #CJK UNIFIED IDEOGRAPH + {0xF343, 0x9A5D}, //20253 #CJK UNIFIED IDEOGRAPH + {0xF344, 0x9A5E}, //20254 #CJK UNIFIED IDEOGRAPH + {0xF345, 0x9A5F}, //20255 #CJK UNIFIED IDEOGRAPH + {0xF346, 0x9A60}, //20256 #CJK UNIFIED IDEOGRAPH + {0xF347, 0x9A61}, //20257 #CJK UNIFIED IDEOGRAPH + {0xF348, 0x9A62}, //20258 #CJK UNIFIED IDEOGRAPH + {0xF349, 0x9A63}, //20259 #CJK UNIFIED IDEOGRAPH + {0xF34A, 0x9A64}, //20260 #CJK UNIFIED IDEOGRAPH + {0xF34B, 0x9A65}, //20261 #CJK UNIFIED IDEOGRAPH + {0xF34C, 0x9A66}, //20262 #CJK UNIFIED IDEOGRAPH + {0xF34D, 0x9A67}, //20263 #CJK UNIFIED IDEOGRAPH + {0xF34E, 0x9A68}, //20264 #CJK UNIFIED IDEOGRAPH + {0xF34F, 0x9A69}, //20265 #CJK UNIFIED IDEOGRAPH + {0xF350, 0x9A6A}, //20266 #CJK UNIFIED IDEOGRAPH + {0xF351, 0x9A6B}, //20267 #CJK UNIFIED IDEOGRAPH + {0xF352, 0x9A72}, //20268 #CJK UNIFIED IDEOGRAPH + {0xF353, 0x9A83}, //20269 #CJK UNIFIED IDEOGRAPH + {0xF354, 0x9A89}, //20270 #CJK UNIFIED IDEOGRAPH + {0xF355, 0x9A8D}, //20271 #CJK UNIFIED IDEOGRAPH + {0xF356, 0x9A8E}, //20272 #CJK UNIFIED IDEOGRAPH + {0xF357, 0x9A94}, //20273 #CJK UNIFIED IDEOGRAPH + {0xF358, 0x9A95}, //20274 #CJK UNIFIED IDEOGRAPH + {0xF359, 0x9A99}, //20275 #CJK UNIFIED IDEOGRAPH + {0xF35A, 0x9AA6}, //20276 #CJK UNIFIED IDEOGRAPH + {0xF35B, 0x9AA9}, //20277 #CJK UNIFIED IDEOGRAPH + {0xF35C, 0x9AAA}, //20278 #CJK UNIFIED IDEOGRAPH + {0xF35D, 0x9AAB}, //20279 #CJK UNIFIED IDEOGRAPH + {0xF35E, 0x9AAC}, //20280 #CJK UNIFIED IDEOGRAPH + {0xF35F, 0x9AAD}, //20281 #CJK UNIFIED IDEOGRAPH + {0xF360, 0x9AAE}, //20282 #CJK UNIFIED IDEOGRAPH + {0xF361, 0x9AAF}, //20283 #CJK UNIFIED IDEOGRAPH + {0xF362, 0x9AB2}, //20284 #CJK UNIFIED IDEOGRAPH + {0xF363, 0x9AB3}, //20285 #CJK UNIFIED IDEOGRAPH + {0xF364, 0x9AB4}, //20286 #CJK UNIFIED IDEOGRAPH + {0xF365, 0x9AB5}, //20287 #CJK UNIFIED IDEOGRAPH + {0xF366, 0x9AB9}, //20288 #CJK UNIFIED IDEOGRAPH + {0xF367, 0x9ABB}, //20289 #CJK UNIFIED IDEOGRAPH + {0xF368, 0x9ABD}, //20290 #CJK UNIFIED IDEOGRAPH + {0xF369, 0x9ABE}, //20291 #CJK UNIFIED IDEOGRAPH + {0xF36A, 0x9ABF}, //20292 #CJK UNIFIED IDEOGRAPH + {0xF36B, 0x9AC3}, //20293 #CJK UNIFIED IDEOGRAPH + {0xF36C, 0x9AC4}, //20294 #CJK UNIFIED IDEOGRAPH + {0xF36D, 0x9AC6}, //20295 #CJK UNIFIED IDEOGRAPH + {0xF36E, 0x9AC7}, //20296 #CJK UNIFIED IDEOGRAPH + {0xF36F, 0x9AC8}, //20297 #CJK UNIFIED IDEOGRAPH + {0xF370, 0x9AC9}, //20298 #CJK UNIFIED IDEOGRAPH + {0xF371, 0x9ACA}, //20299 #CJK UNIFIED IDEOGRAPH + {0xF372, 0x9ACD}, //20300 #CJK UNIFIED IDEOGRAPH + {0xF373, 0x9ACE}, //20301 #CJK UNIFIED IDEOGRAPH + {0xF374, 0x9ACF}, //20302 #CJK UNIFIED IDEOGRAPH + {0xF375, 0x9AD0}, //20303 #CJK UNIFIED IDEOGRAPH + {0xF376, 0x9AD2}, //20304 #CJK UNIFIED IDEOGRAPH + {0xF377, 0x9AD4}, //20305 #CJK UNIFIED IDEOGRAPH + {0xF378, 0x9AD5}, //20306 #CJK UNIFIED IDEOGRAPH + {0xF379, 0x9AD6}, //20307 #CJK UNIFIED IDEOGRAPH + {0xF37A, 0x9AD7}, //20308 #CJK UNIFIED IDEOGRAPH + {0xF37B, 0x9AD9}, //20309 #CJK UNIFIED IDEOGRAPH + {0xF37C, 0x9ADA}, //20310 #CJK UNIFIED IDEOGRAPH + {0xF37D, 0x9ADB}, //20311 #CJK UNIFIED IDEOGRAPH + {0xF37E, 0x9ADC}, //20312 #CJK UNIFIED IDEOGRAPH + {0xF380, 0x9ADD}, //20313 #CJK UNIFIED IDEOGRAPH + {0xF381, 0x9ADE}, //20314 #CJK UNIFIED IDEOGRAPH + {0xF382, 0x9AE0}, //20315 #CJK UNIFIED IDEOGRAPH + {0xF383, 0x9AE2}, //20316 #CJK UNIFIED IDEOGRAPH + {0xF384, 0x9AE3}, //20317 #CJK UNIFIED IDEOGRAPH + {0xF385, 0x9AE4}, //20318 #CJK UNIFIED IDEOGRAPH + {0xF386, 0x9AE5}, //20319 #CJK UNIFIED IDEOGRAPH + {0xF387, 0x9AE7}, //20320 #CJK UNIFIED IDEOGRAPH + {0xF388, 0x9AE8}, //20321 #CJK UNIFIED IDEOGRAPH + {0xF389, 0x9AE9}, //20322 #CJK UNIFIED IDEOGRAPH + {0xF38A, 0x9AEA}, //20323 #CJK UNIFIED IDEOGRAPH + {0xF38B, 0x9AEC}, //20324 #CJK UNIFIED IDEOGRAPH + {0xF38C, 0x9AEE}, //20325 #CJK UNIFIED IDEOGRAPH + {0xF38D, 0x9AF0}, //20326 #CJK UNIFIED IDEOGRAPH + {0xF38E, 0x9AF1}, //20327 #CJK UNIFIED IDEOGRAPH + {0xF38F, 0x9AF2}, //20328 #CJK UNIFIED IDEOGRAPH + {0xF390, 0x9AF3}, //20329 #CJK UNIFIED IDEOGRAPH + {0xF391, 0x9AF4}, //20330 #CJK UNIFIED IDEOGRAPH + {0xF392, 0x9AF5}, //20331 #CJK UNIFIED IDEOGRAPH + {0xF393, 0x9AF6}, //20332 #CJK UNIFIED IDEOGRAPH + {0xF394, 0x9AF7}, //20333 #CJK UNIFIED IDEOGRAPH + {0xF395, 0x9AF8}, //20334 #CJK UNIFIED IDEOGRAPH + {0xF396, 0x9AFA}, //20335 #CJK UNIFIED IDEOGRAPH + {0xF397, 0x9AFC}, //20336 #CJK UNIFIED IDEOGRAPH + {0xF398, 0x9AFD}, //20337 #CJK UNIFIED IDEOGRAPH + {0xF399, 0x9AFE}, //20338 #CJK UNIFIED IDEOGRAPH + {0xF39A, 0x9AFF}, //20339 #CJK UNIFIED IDEOGRAPH + {0xF39B, 0x9B00}, //20340 #CJK UNIFIED IDEOGRAPH + {0xF39C, 0x9B01}, //20341 #CJK UNIFIED IDEOGRAPH + {0xF39D, 0x9B02}, //20342 #CJK UNIFIED IDEOGRAPH + {0xF39E, 0x9B04}, //20343 #CJK UNIFIED IDEOGRAPH + {0xF39F, 0x9B05}, //20344 #CJK UNIFIED IDEOGRAPH + {0xF3A0, 0x9B06}, //20345 #CJK UNIFIED IDEOGRAPH + {0xF3A1, 0x87C6}, //20346 #CJK UNIFIED IDEOGRAPH + {0xF3A2, 0x8788}, //20347 #CJK UNIFIED IDEOGRAPH + {0xF3A3, 0x8785}, //20348 #CJK UNIFIED IDEOGRAPH + {0xF3A4, 0x87AD}, //20349 #CJK UNIFIED IDEOGRAPH + {0xF3A5, 0x8797}, //20350 #CJK UNIFIED IDEOGRAPH + {0xF3A6, 0x8783}, //20351 #CJK UNIFIED IDEOGRAPH + {0xF3A7, 0x87AB}, //20352 #CJK UNIFIED IDEOGRAPH + {0xF3A8, 0x87E5}, //20353 #CJK UNIFIED IDEOGRAPH + {0xF3A9, 0x87AC}, //20354 #CJK UNIFIED IDEOGRAPH + {0xF3AA, 0x87B5}, //20355 #CJK UNIFIED IDEOGRAPH + {0xF3AB, 0x87B3}, //20356 #CJK UNIFIED IDEOGRAPH + {0xF3AC, 0x87CB}, //20357 #CJK UNIFIED IDEOGRAPH + {0xF3AD, 0x87D3}, //20358 #CJK UNIFIED IDEOGRAPH + {0xF3AE, 0x87BD}, //20359 #CJK UNIFIED IDEOGRAPH + {0xF3AF, 0x87D1}, //20360 #CJK UNIFIED IDEOGRAPH + {0xF3B0, 0x87C0}, //20361 #CJK UNIFIED IDEOGRAPH + {0xF3B1, 0x87CA}, //20362 #CJK UNIFIED IDEOGRAPH + {0xF3B2, 0x87DB}, //20363 #CJK UNIFIED IDEOGRAPH + {0xF3B3, 0x87EA}, //20364 #CJK UNIFIED IDEOGRAPH + {0xF3B4, 0x87E0}, //20365 #CJK UNIFIED IDEOGRAPH + {0xF3B5, 0x87EE}, //20366 #CJK UNIFIED IDEOGRAPH + {0xF3B6, 0x8816}, //20367 #CJK UNIFIED IDEOGRAPH + {0xF3B7, 0x8813}, //20368 #CJK UNIFIED IDEOGRAPH + {0xF3B8, 0x87FE}, //20369 #CJK UNIFIED IDEOGRAPH + {0xF3B9, 0x880A}, //20370 #CJK UNIFIED IDEOGRAPH + {0xF3BA, 0x881B}, //20371 #CJK UNIFIED IDEOGRAPH + {0xF3BB, 0x8821}, //20372 #CJK UNIFIED IDEOGRAPH + {0xF3BC, 0x8839}, //20373 #CJK UNIFIED IDEOGRAPH + {0xF3BD, 0x883C}, //20374 #CJK UNIFIED IDEOGRAPH + {0xF3BE, 0x7F36}, //20375 #CJK UNIFIED IDEOGRAPH + {0xF3BF, 0x7F42}, //20376 #CJK UNIFIED IDEOGRAPH + {0xF3C0, 0x7F44}, //20377 #CJK UNIFIED IDEOGRAPH + {0xF3C1, 0x7F45}, //20378 #CJK UNIFIED IDEOGRAPH + {0xF3C2, 0x8210}, //20379 #CJK UNIFIED IDEOGRAPH + {0xF3C3, 0x7AFA}, //20380 #CJK UNIFIED IDEOGRAPH + {0xF3C4, 0x7AFD}, //20381 #CJK UNIFIED IDEOGRAPH + {0xF3C5, 0x7B08}, //20382 #CJK UNIFIED IDEOGRAPH + {0xF3C6, 0x7B03}, //20383 #CJK UNIFIED IDEOGRAPH + {0xF3C7, 0x7B04}, //20384 #CJK UNIFIED IDEOGRAPH + {0xF3C8, 0x7B15}, //20385 #CJK UNIFIED IDEOGRAPH + {0xF3C9, 0x7B0A}, //20386 #CJK UNIFIED IDEOGRAPH + {0xF3CA, 0x7B2B}, //20387 #CJK UNIFIED IDEOGRAPH + {0xF3CB, 0x7B0F}, //20388 #CJK UNIFIED IDEOGRAPH + {0xF3CC, 0x7B47}, //20389 #CJK UNIFIED IDEOGRAPH + {0xF3CD, 0x7B38}, //20390 #CJK UNIFIED IDEOGRAPH + {0xF3CE, 0x7B2A}, //20391 #CJK UNIFIED IDEOGRAPH + {0xF3CF, 0x7B19}, //20392 #CJK UNIFIED IDEOGRAPH + {0xF3D0, 0x7B2E}, //20393 #CJK UNIFIED IDEOGRAPH + {0xF3D1, 0x7B31}, //20394 #CJK UNIFIED IDEOGRAPH + {0xF3D2, 0x7B20}, //20395 #CJK UNIFIED IDEOGRAPH + {0xF3D3, 0x7B25}, //20396 #CJK UNIFIED IDEOGRAPH + {0xF3D4, 0x7B24}, //20397 #CJK UNIFIED IDEOGRAPH + {0xF3D5, 0x7B33}, //20398 #CJK UNIFIED IDEOGRAPH + {0xF3D6, 0x7B3E}, //20399 #CJK UNIFIED IDEOGRAPH + {0xF3D7, 0x7B1E}, //20400 #CJK UNIFIED IDEOGRAPH + {0xF3D8, 0x7B58}, //20401 #CJK UNIFIED IDEOGRAPH + {0xF3D9, 0x7B5A}, //20402 #CJK UNIFIED IDEOGRAPH + {0xF3DA, 0x7B45}, //20403 #CJK UNIFIED IDEOGRAPH + {0xF3DB, 0x7B75}, //20404 #CJK UNIFIED IDEOGRAPH + {0xF3DC, 0x7B4C}, //20405 #CJK UNIFIED IDEOGRAPH + {0xF3DD, 0x7B5D}, //20406 #CJK UNIFIED IDEOGRAPH + {0xF3DE, 0x7B60}, //20407 #CJK UNIFIED IDEOGRAPH + {0xF3DF, 0x7B6E}, //20408 #CJK UNIFIED IDEOGRAPH + {0xF3E0, 0x7B7B}, //20409 #CJK UNIFIED IDEOGRAPH + {0xF3E1, 0x7B62}, //20410 #CJK UNIFIED IDEOGRAPH + {0xF3E2, 0x7B72}, //20411 #CJK UNIFIED IDEOGRAPH + {0xF3E3, 0x7B71}, //20412 #CJK UNIFIED IDEOGRAPH + {0xF3E4, 0x7B90}, //20413 #CJK UNIFIED IDEOGRAPH + {0xF3E5, 0x7BA6}, //20414 #CJK UNIFIED IDEOGRAPH + {0xF3E6, 0x7BA7}, //20415 #CJK UNIFIED IDEOGRAPH + {0xF3E7, 0x7BB8}, //20416 #CJK UNIFIED IDEOGRAPH + {0xF3E8, 0x7BAC}, //20417 #CJK UNIFIED IDEOGRAPH + {0xF3E9, 0x7B9D}, //20418 #CJK UNIFIED IDEOGRAPH + {0xF3EA, 0x7BA8}, //20419 #CJK UNIFIED IDEOGRAPH + {0xF3EB, 0x7B85}, //20420 #CJK UNIFIED IDEOGRAPH + {0xF3EC, 0x7BAA}, //20421 #CJK UNIFIED IDEOGRAPH + {0xF3ED, 0x7B9C}, //20422 #CJK UNIFIED IDEOGRAPH + {0xF3EE, 0x7BA2}, //20423 #CJK UNIFIED IDEOGRAPH + {0xF3EF, 0x7BAB}, //20424 #CJK UNIFIED IDEOGRAPH + {0xF3F0, 0x7BB4}, //20425 #CJK UNIFIED IDEOGRAPH + {0xF3F1, 0x7BD1}, //20426 #CJK UNIFIED IDEOGRAPH + {0xF3F2, 0x7BC1}, //20427 #CJK UNIFIED IDEOGRAPH + {0xF3F3, 0x7BCC}, //20428 #CJK UNIFIED IDEOGRAPH + {0xF3F4, 0x7BDD}, //20429 #CJK UNIFIED IDEOGRAPH + {0xF3F5, 0x7BDA}, //20430 #CJK UNIFIED IDEOGRAPH + {0xF3F6, 0x7BE5}, //20431 #CJK UNIFIED IDEOGRAPH + {0xF3F7, 0x7BE6}, //20432 #CJK UNIFIED IDEOGRAPH + {0xF3F8, 0x7BEA}, //20433 #CJK UNIFIED IDEOGRAPH + {0xF3F9, 0x7C0C}, //20434 #CJK UNIFIED IDEOGRAPH + {0xF3FA, 0x7BFE}, //20435 #CJK UNIFIED IDEOGRAPH + {0xF3FB, 0x7BFC}, //20436 #CJK UNIFIED IDEOGRAPH + {0xF3FC, 0x7C0F}, //20437 #CJK UNIFIED IDEOGRAPH + {0xF3FD, 0x7C16}, //20438 #CJK UNIFIED IDEOGRAPH + {0xF3FE, 0x7C0B}, //20439 #CJK UNIFIED IDEOGRAPH + {0xF440, 0x9B07}, //20440 #CJK UNIFIED IDEOGRAPH + {0xF441, 0x9B09}, //20441 #CJK UNIFIED IDEOGRAPH + {0xF442, 0x9B0A}, //20442 #CJK UNIFIED IDEOGRAPH + {0xF443, 0x9B0B}, //20443 #CJK UNIFIED IDEOGRAPH + {0xF444, 0x9B0C}, //20444 #CJK UNIFIED IDEOGRAPH + {0xF445, 0x9B0D}, //20445 #CJK UNIFIED IDEOGRAPH + {0xF446, 0x9B0E}, //20446 #CJK UNIFIED IDEOGRAPH + {0xF447, 0x9B10}, //20447 #CJK UNIFIED IDEOGRAPH + {0xF448, 0x9B11}, //20448 #CJK UNIFIED IDEOGRAPH + {0xF449, 0x9B12}, //20449 #CJK UNIFIED IDEOGRAPH + {0xF44A, 0x9B14}, //20450 #CJK UNIFIED IDEOGRAPH + {0xF44B, 0x9B15}, //20451 #CJK UNIFIED IDEOGRAPH + {0xF44C, 0x9B16}, //20452 #CJK UNIFIED IDEOGRAPH + {0xF44D, 0x9B17}, //20453 #CJK UNIFIED IDEOGRAPH + {0xF44E, 0x9B18}, //20454 #CJK UNIFIED IDEOGRAPH + {0xF44F, 0x9B19}, //20455 #CJK UNIFIED IDEOGRAPH + {0xF450, 0x9B1A}, //20456 #CJK UNIFIED IDEOGRAPH + {0xF451, 0x9B1B}, //20457 #CJK UNIFIED IDEOGRAPH + {0xF452, 0x9B1C}, //20458 #CJK UNIFIED IDEOGRAPH + {0xF453, 0x9B1D}, //20459 #CJK UNIFIED IDEOGRAPH + {0xF454, 0x9B1E}, //20460 #CJK UNIFIED IDEOGRAPH + {0xF455, 0x9B20}, //20461 #CJK UNIFIED IDEOGRAPH + {0xF456, 0x9B21}, //20462 #CJK UNIFIED IDEOGRAPH + {0xF457, 0x9B22}, //20463 #CJK UNIFIED IDEOGRAPH + {0xF458, 0x9B24}, //20464 #CJK UNIFIED IDEOGRAPH + {0xF459, 0x9B25}, //20465 #CJK UNIFIED IDEOGRAPH + {0xF45A, 0x9B26}, //20466 #CJK UNIFIED IDEOGRAPH + {0xF45B, 0x9B27}, //20467 #CJK UNIFIED IDEOGRAPH + {0xF45C, 0x9B28}, //20468 #CJK UNIFIED IDEOGRAPH + {0xF45D, 0x9B29}, //20469 #CJK UNIFIED IDEOGRAPH + {0xF45E, 0x9B2A}, //20470 #CJK UNIFIED IDEOGRAPH + {0xF45F, 0x9B2B}, //20471 #CJK UNIFIED IDEOGRAPH + {0xF460, 0x9B2C}, //20472 #CJK UNIFIED IDEOGRAPH + {0xF461, 0x9B2D}, //20473 #CJK UNIFIED IDEOGRAPH + {0xF462, 0x9B2E}, //20474 #CJK UNIFIED IDEOGRAPH + {0xF463, 0x9B30}, //20475 #CJK UNIFIED IDEOGRAPH + {0xF464, 0x9B31}, //20476 #CJK UNIFIED IDEOGRAPH + {0xF465, 0x9B33}, //20477 #CJK UNIFIED IDEOGRAPH + {0xF466, 0x9B34}, //20478 #CJK UNIFIED IDEOGRAPH + {0xF467, 0x9B35}, //20479 #CJK UNIFIED IDEOGRAPH + {0xF468, 0x9B36}, //20480 #CJK UNIFIED IDEOGRAPH + {0xF469, 0x9B37}, //20481 #CJK UNIFIED IDEOGRAPH + {0xF46A, 0x9B38}, //20482 #CJK UNIFIED IDEOGRAPH + {0xF46B, 0x9B39}, //20483 #CJK UNIFIED IDEOGRAPH + {0xF46C, 0x9B3A}, //20484 #CJK UNIFIED IDEOGRAPH + {0xF46D, 0x9B3D}, //20485 #CJK UNIFIED IDEOGRAPH + {0xF46E, 0x9B3E}, //20486 #CJK UNIFIED IDEOGRAPH + {0xF46F, 0x9B3F}, //20487 #CJK UNIFIED IDEOGRAPH + {0xF470, 0x9B40}, //20488 #CJK UNIFIED IDEOGRAPH + {0xF471, 0x9B46}, //20489 #CJK UNIFIED IDEOGRAPH + {0xF472, 0x9B4A}, //20490 #CJK UNIFIED IDEOGRAPH + {0xF473, 0x9B4B}, //20491 #CJK UNIFIED IDEOGRAPH + {0xF474, 0x9B4C}, //20492 #CJK UNIFIED IDEOGRAPH + {0xF475, 0x9B4E}, //20493 #CJK UNIFIED IDEOGRAPH + {0xF476, 0x9B50}, //20494 #CJK UNIFIED IDEOGRAPH + {0xF477, 0x9B52}, //20495 #CJK UNIFIED IDEOGRAPH + {0xF478, 0x9B53}, //20496 #CJK UNIFIED IDEOGRAPH + {0xF479, 0x9B55}, //20497 #CJK UNIFIED IDEOGRAPH + {0xF47A, 0x9B56}, //20498 #CJK UNIFIED IDEOGRAPH + {0xF47B, 0x9B57}, //20499 #CJK UNIFIED IDEOGRAPH + {0xF47C, 0x9B58}, //20500 #CJK UNIFIED IDEOGRAPH + {0xF47D, 0x9B59}, //20501 #CJK UNIFIED IDEOGRAPH + {0xF47E, 0x9B5A}, //20502 #CJK UNIFIED IDEOGRAPH + {0xF480, 0x9B5B}, //20503 #CJK UNIFIED IDEOGRAPH + {0xF481, 0x9B5C}, //20504 #CJK UNIFIED IDEOGRAPH + {0xF482, 0x9B5D}, //20505 #CJK UNIFIED IDEOGRAPH + {0xF483, 0x9B5E}, //20506 #CJK UNIFIED IDEOGRAPH + {0xF484, 0x9B5F}, //20507 #CJK UNIFIED IDEOGRAPH + {0xF485, 0x9B60}, //20508 #CJK UNIFIED IDEOGRAPH + {0xF486, 0x9B61}, //20509 #CJK UNIFIED IDEOGRAPH + {0xF487, 0x9B62}, //20510 #CJK UNIFIED IDEOGRAPH + {0xF488, 0x9B63}, //20511 #CJK UNIFIED IDEOGRAPH + {0xF489, 0x9B64}, //20512 #CJK UNIFIED IDEOGRAPH + {0xF48A, 0x9B65}, //20513 #CJK UNIFIED IDEOGRAPH + {0xF48B, 0x9B66}, //20514 #CJK UNIFIED IDEOGRAPH + {0xF48C, 0x9B67}, //20515 #CJK UNIFIED IDEOGRAPH + {0xF48D, 0x9B68}, //20516 #CJK UNIFIED IDEOGRAPH + {0xF48E, 0x9B69}, //20517 #CJK UNIFIED IDEOGRAPH + {0xF48F, 0x9B6A}, //20518 #CJK UNIFIED IDEOGRAPH + {0xF490, 0x9B6B}, //20519 #CJK UNIFIED IDEOGRAPH + {0xF491, 0x9B6C}, //20520 #CJK UNIFIED IDEOGRAPH + {0xF492, 0x9B6D}, //20521 #CJK UNIFIED IDEOGRAPH + {0xF493, 0x9B6E}, //20522 #CJK UNIFIED IDEOGRAPH + {0xF494, 0x9B6F}, //20523 #CJK UNIFIED IDEOGRAPH + {0xF495, 0x9B70}, //20524 #CJK UNIFIED IDEOGRAPH + {0xF496, 0x9B71}, //20525 #CJK UNIFIED IDEOGRAPH + {0xF497, 0x9B72}, //20526 #CJK UNIFIED IDEOGRAPH + {0xF498, 0x9B73}, //20527 #CJK UNIFIED IDEOGRAPH + {0xF499, 0x9B74}, //20528 #CJK UNIFIED IDEOGRAPH + {0xF49A, 0x9B75}, //20529 #CJK UNIFIED IDEOGRAPH + {0xF49B, 0x9B76}, //20530 #CJK UNIFIED IDEOGRAPH + {0xF49C, 0x9B77}, //20531 #CJK UNIFIED IDEOGRAPH + {0xF49D, 0x9B78}, //20532 #CJK UNIFIED IDEOGRAPH + {0xF49E, 0x9B79}, //20533 #CJK UNIFIED IDEOGRAPH + {0xF49F, 0x9B7A}, //20534 #CJK UNIFIED IDEOGRAPH + {0xF4A0, 0x9B7B}, //20535 #CJK UNIFIED IDEOGRAPH + {0xF4A1, 0x7C1F}, //20536 #CJK UNIFIED IDEOGRAPH + {0xF4A2, 0x7C2A}, //20537 #CJK UNIFIED IDEOGRAPH + {0xF4A3, 0x7C26}, //20538 #CJK UNIFIED IDEOGRAPH + {0xF4A4, 0x7C38}, //20539 #CJK UNIFIED IDEOGRAPH + {0xF4A5, 0x7C41}, //20540 #CJK UNIFIED IDEOGRAPH + {0xF4A6, 0x7C40}, //20541 #CJK UNIFIED IDEOGRAPH + {0xF4A7, 0x81FE}, //20542 #CJK UNIFIED IDEOGRAPH + {0xF4A8, 0x8201}, //20543 #CJK UNIFIED IDEOGRAPH + {0xF4A9, 0x8202}, //20544 #CJK UNIFIED IDEOGRAPH + {0xF4AA, 0x8204}, //20545 #CJK UNIFIED IDEOGRAPH + {0xF4AB, 0x81EC}, //20546 #CJK UNIFIED IDEOGRAPH + {0xF4AC, 0x8844}, //20547 #CJK UNIFIED IDEOGRAPH + {0xF4AD, 0x8221}, //20548 #CJK UNIFIED IDEOGRAPH + {0xF4AE, 0x8222}, //20549 #CJK UNIFIED IDEOGRAPH + {0xF4AF, 0x8223}, //20550 #CJK UNIFIED IDEOGRAPH + {0xF4B0, 0x822D}, //20551 #CJK UNIFIED IDEOGRAPH + {0xF4B1, 0x822F}, //20552 #CJK UNIFIED IDEOGRAPH + {0xF4B2, 0x8228}, //20553 #CJK UNIFIED IDEOGRAPH + {0xF4B3, 0x822B}, //20554 #CJK UNIFIED IDEOGRAPH + {0xF4B4, 0x8238}, //20555 #CJK UNIFIED IDEOGRAPH + {0xF4B5, 0x823B}, //20556 #CJK UNIFIED IDEOGRAPH + {0xF4B6, 0x8233}, //20557 #CJK UNIFIED IDEOGRAPH + {0xF4B7, 0x8234}, //20558 #CJK UNIFIED IDEOGRAPH + {0xF4B8, 0x823E}, //20559 #CJK UNIFIED IDEOGRAPH + {0xF4B9, 0x8244}, //20560 #CJK UNIFIED IDEOGRAPH + {0xF4BA, 0x8249}, //20561 #CJK UNIFIED IDEOGRAPH + {0xF4BB, 0x824B}, //20562 #CJK UNIFIED IDEOGRAPH + {0xF4BC, 0x824F}, //20563 #CJK UNIFIED IDEOGRAPH + {0xF4BD, 0x825A}, //20564 #CJK UNIFIED IDEOGRAPH + {0xF4BE, 0x825F}, //20565 #CJK UNIFIED IDEOGRAPH + {0xF4BF, 0x8268}, //20566 #CJK UNIFIED IDEOGRAPH + {0xF4C0, 0x887E}, //20567 #CJK UNIFIED IDEOGRAPH + {0xF4C1, 0x8885}, //20568 #CJK UNIFIED IDEOGRAPH + {0xF4C2, 0x8888}, //20569 #CJK UNIFIED IDEOGRAPH + {0xF4C3, 0x88D8}, //20570 #CJK UNIFIED IDEOGRAPH + {0xF4C4, 0x88DF}, //20571 #CJK UNIFIED IDEOGRAPH + {0xF4C5, 0x895E}, //20572 #CJK UNIFIED IDEOGRAPH + {0xF4C6, 0x7F9D}, //20573 #CJK UNIFIED IDEOGRAPH + {0xF4C7, 0x7F9F}, //20574 #CJK UNIFIED IDEOGRAPH + {0xF4C8, 0x7FA7}, //20575 #CJK UNIFIED IDEOGRAPH + {0xF4C9, 0x7FAF}, //20576 #CJK UNIFIED IDEOGRAPH + {0xF4CA, 0x7FB0}, //20577 #CJK UNIFIED IDEOGRAPH + {0xF4CB, 0x7FB2}, //20578 #CJK UNIFIED IDEOGRAPH + {0xF4CC, 0x7C7C}, //20579 #CJK UNIFIED IDEOGRAPH + {0xF4CD, 0x6549}, //20580 #CJK UNIFIED IDEOGRAPH + {0xF4CE, 0x7C91}, //20581 #CJK UNIFIED IDEOGRAPH + {0xF4CF, 0x7C9D}, //20582 #CJK UNIFIED IDEOGRAPH + {0xF4D0, 0x7C9C}, //20583 #CJK UNIFIED IDEOGRAPH + {0xF4D1, 0x7C9E}, //20584 #CJK UNIFIED IDEOGRAPH + {0xF4D2, 0x7CA2}, //20585 #CJK UNIFIED IDEOGRAPH + {0xF4D3, 0x7CB2}, //20586 #CJK UNIFIED IDEOGRAPH + {0xF4D4, 0x7CBC}, //20587 #CJK UNIFIED IDEOGRAPH + {0xF4D5, 0x7CBD}, //20588 #CJK UNIFIED IDEOGRAPH + {0xF4D6, 0x7CC1}, //20589 #CJK UNIFIED IDEOGRAPH + {0xF4D7, 0x7CC7}, //20590 #CJK UNIFIED IDEOGRAPH + {0xF4D8, 0x7CCC}, //20591 #CJK UNIFIED IDEOGRAPH + {0xF4D9, 0x7CCD}, //20592 #CJK UNIFIED IDEOGRAPH + {0xF4DA, 0x7CC8}, //20593 #CJK UNIFIED IDEOGRAPH + {0xF4DB, 0x7CC5}, //20594 #CJK UNIFIED IDEOGRAPH + {0xF4DC, 0x7CD7}, //20595 #CJK UNIFIED IDEOGRAPH + {0xF4DD, 0x7CE8}, //20596 #CJK UNIFIED IDEOGRAPH + {0xF4DE, 0x826E}, //20597 #CJK UNIFIED IDEOGRAPH + {0xF4DF, 0x66A8}, //20598 #CJK UNIFIED IDEOGRAPH + {0xF4E0, 0x7FBF}, //20599 #CJK UNIFIED IDEOGRAPH + {0xF4E1, 0x7FCE}, //20600 #CJK UNIFIED IDEOGRAPH + {0xF4E2, 0x7FD5}, //20601 #CJK UNIFIED IDEOGRAPH + {0xF4E3, 0x7FE5}, //20602 #CJK UNIFIED IDEOGRAPH + {0xF4E4, 0x7FE1}, //20603 #CJK UNIFIED IDEOGRAPH + {0xF4E5, 0x7FE6}, //20604 #CJK UNIFIED IDEOGRAPH + {0xF4E6, 0x7FE9}, //20605 #CJK UNIFIED IDEOGRAPH + {0xF4E7, 0x7FEE}, //20606 #CJK UNIFIED IDEOGRAPH + {0xF4E8, 0x7FF3}, //20607 #CJK UNIFIED IDEOGRAPH + {0xF4E9, 0x7CF8}, //20608 #CJK UNIFIED IDEOGRAPH + {0xF4EA, 0x7D77}, //20609 #CJK UNIFIED IDEOGRAPH + {0xF4EB, 0x7DA6}, //20610 #CJK UNIFIED IDEOGRAPH + {0xF4EC, 0x7DAE}, //20611 #CJK UNIFIED IDEOGRAPH + {0xF4ED, 0x7E47}, //20612 #CJK UNIFIED IDEOGRAPH + {0xF4EE, 0x7E9B}, //20613 #CJK UNIFIED IDEOGRAPH + {0xF4EF, 0x9EB8}, //20614 #CJK UNIFIED IDEOGRAPH + {0xF4F0, 0x9EB4}, //20615 #CJK UNIFIED IDEOGRAPH + {0xF4F1, 0x8D73}, //20616 #CJK UNIFIED IDEOGRAPH + {0xF4F2, 0x8D84}, //20617 #CJK UNIFIED IDEOGRAPH + {0xF4F3, 0x8D94}, //20618 #CJK UNIFIED IDEOGRAPH + {0xF4F4, 0x8D91}, //20619 #CJK UNIFIED IDEOGRAPH + {0xF4F5, 0x8DB1}, //20620 #CJK UNIFIED IDEOGRAPH + {0xF4F6, 0x8D67}, //20621 #CJK UNIFIED IDEOGRAPH + {0xF4F7, 0x8D6D}, //20622 #CJK UNIFIED IDEOGRAPH + {0xF4F8, 0x8C47}, //20623 #CJK UNIFIED IDEOGRAPH + {0xF4F9, 0x8C49}, //20624 #CJK UNIFIED IDEOGRAPH + {0xF4FA, 0x914A}, //20625 #CJK UNIFIED IDEOGRAPH + {0xF4FB, 0x9150}, //20626 #CJK UNIFIED IDEOGRAPH + {0xF4FC, 0x914E}, //20627 #CJK UNIFIED IDEOGRAPH + {0xF4FD, 0x914F}, //20628 #CJK UNIFIED IDEOGRAPH + {0xF4FE, 0x9164}, //20629 #CJK UNIFIED IDEOGRAPH + {0xF540, 0x9B7C}, //20630 #CJK UNIFIED IDEOGRAPH + {0xF541, 0x9B7D}, //20631 #CJK UNIFIED IDEOGRAPH + {0xF542, 0x9B7E}, //20632 #CJK UNIFIED IDEOGRAPH + {0xF543, 0x9B7F}, //20633 #CJK UNIFIED IDEOGRAPH + {0xF544, 0x9B80}, //20634 #CJK UNIFIED IDEOGRAPH + {0xF545, 0x9B81}, //20635 #CJK UNIFIED IDEOGRAPH + {0xF546, 0x9B82}, //20636 #CJK UNIFIED IDEOGRAPH + {0xF547, 0x9B83}, //20637 #CJK UNIFIED IDEOGRAPH + {0xF548, 0x9B84}, //20638 #CJK UNIFIED IDEOGRAPH + {0xF549, 0x9B85}, //20639 #CJK UNIFIED IDEOGRAPH + {0xF54A, 0x9B86}, //20640 #CJK UNIFIED IDEOGRAPH + {0xF54B, 0x9B87}, //20641 #CJK UNIFIED IDEOGRAPH + {0xF54C, 0x9B88}, //20642 #CJK UNIFIED IDEOGRAPH + {0xF54D, 0x9B89}, //20643 #CJK UNIFIED IDEOGRAPH + {0xF54E, 0x9B8A}, //20644 #CJK UNIFIED IDEOGRAPH + {0xF54F, 0x9B8B}, //20645 #CJK UNIFIED IDEOGRAPH + {0xF550, 0x9B8C}, //20646 #CJK UNIFIED IDEOGRAPH + {0xF551, 0x9B8D}, //20647 #CJK UNIFIED IDEOGRAPH + {0xF552, 0x9B8E}, //20648 #CJK UNIFIED IDEOGRAPH + {0xF553, 0x9B8F}, //20649 #CJK UNIFIED IDEOGRAPH + {0xF554, 0x9B90}, //20650 #CJK UNIFIED IDEOGRAPH + {0xF555, 0x9B91}, //20651 #CJK UNIFIED IDEOGRAPH + {0xF556, 0x9B92}, //20652 #CJK UNIFIED IDEOGRAPH + {0xF557, 0x9B93}, //20653 #CJK UNIFIED IDEOGRAPH + {0xF558, 0x9B94}, //20654 #CJK UNIFIED IDEOGRAPH + {0xF559, 0x9B95}, //20655 #CJK UNIFIED IDEOGRAPH + {0xF55A, 0x9B96}, //20656 #CJK UNIFIED IDEOGRAPH + {0xF55B, 0x9B97}, //20657 #CJK UNIFIED IDEOGRAPH + {0xF55C, 0x9B98}, //20658 #CJK UNIFIED IDEOGRAPH + {0xF55D, 0x9B99}, //20659 #CJK UNIFIED IDEOGRAPH + {0xF55E, 0x9B9A}, //20660 #CJK UNIFIED IDEOGRAPH + {0xF55F, 0x9B9B}, //20661 #CJK UNIFIED IDEOGRAPH + {0xF560, 0x9B9C}, //20662 #CJK UNIFIED IDEOGRAPH + {0xF561, 0x9B9D}, //20663 #CJK UNIFIED IDEOGRAPH + {0xF562, 0x9B9E}, //20664 #CJK UNIFIED IDEOGRAPH + {0xF563, 0x9B9F}, //20665 #CJK UNIFIED IDEOGRAPH + {0xF564, 0x9BA0}, //20666 #CJK UNIFIED IDEOGRAPH + {0xF565, 0x9BA1}, //20667 #CJK UNIFIED IDEOGRAPH + {0xF566, 0x9BA2}, //20668 #CJK UNIFIED IDEOGRAPH + {0xF567, 0x9BA3}, //20669 #CJK UNIFIED IDEOGRAPH + {0xF568, 0x9BA4}, //20670 #CJK UNIFIED IDEOGRAPH + {0xF569, 0x9BA5}, //20671 #CJK UNIFIED IDEOGRAPH + {0xF56A, 0x9BA6}, //20672 #CJK UNIFIED IDEOGRAPH + {0xF56B, 0x9BA7}, //20673 #CJK UNIFIED IDEOGRAPH + {0xF56C, 0x9BA8}, //20674 #CJK UNIFIED IDEOGRAPH + {0xF56D, 0x9BA9}, //20675 #CJK UNIFIED IDEOGRAPH + {0xF56E, 0x9BAA}, //20676 #CJK UNIFIED IDEOGRAPH + {0xF56F, 0x9BAB}, //20677 #CJK UNIFIED IDEOGRAPH + {0xF570, 0x9BAC}, //20678 #CJK UNIFIED IDEOGRAPH + {0xF571, 0x9BAD}, //20679 #CJK UNIFIED IDEOGRAPH + {0xF572, 0x9BAE}, //20680 #CJK UNIFIED IDEOGRAPH + {0xF573, 0x9BAF}, //20681 #CJK UNIFIED IDEOGRAPH + {0xF574, 0x9BB0}, //20682 #CJK UNIFIED IDEOGRAPH + {0xF575, 0x9BB1}, //20683 #CJK UNIFIED IDEOGRAPH + {0xF576, 0x9BB2}, //20684 #CJK UNIFIED IDEOGRAPH + {0xF577, 0x9BB3}, //20685 #CJK UNIFIED IDEOGRAPH + {0xF578, 0x9BB4}, //20686 #CJK UNIFIED IDEOGRAPH + {0xF579, 0x9BB5}, //20687 #CJK UNIFIED IDEOGRAPH + {0xF57A, 0x9BB6}, //20688 #CJK UNIFIED IDEOGRAPH + {0xF57B, 0x9BB7}, //20689 #CJK UNIFIED IDEOGRAPH + {0xF57C, 0x9BB8}, //20690 #CJK UNIFIED IDEOGRAPH + {0xF57D, 0x9BB9}, //20691 #CJK UNIFIED IDEOGRAPH + {0xF57E, 0x9BBA}, //20692 #CJK UNIFIED IDEOGRAPH + {0xF580, 0x9BBB}, //20693 #CJK UNIFIED IDEOGRAPH + {0xF581, 0x9BBC}, //20694 #CJK UNIFIED IDEOGRAPH + {0xF582, 0x9BBD}, //20695 #CJK UNIFIED IDEOGRAPH + {0xF583, 0x9BBE}, //20696 #CJK UNIFIED IDEOGRAPH + {0xF584, 0x9BBF}, //20697 #CJK UNIFIED IDEOGRAPH + {0xF585, 0x9BC0}, //20698 #CJK UNIFIED IDEOGRAPH + {0xF586, 0x9BC1}, //20699 #CJK UNIFIED IDEOGRAPH + {0xF587, 0x9BC2}, //20700 #CJK UNIFIED IDEOGRAPH + {0xF588, 0x9BC3}, //20701 #CJK UNIFIED IDEOGRAPH + {0xF589, 0x9BC4}, //20702 #CJK UNIFIED IDEOGRAPH + {0xF58A, 0x9BC5}, //20703 #CJK UNIFIED IDEOGRAPH + {0xF58B, 0x9BC6}, //20704 #CJK UNIFIED IDEOGRAPH + {0xF58C, 0x9BC7}, //20705 #CJK UNIFIED IDEOGRAPH + {0xF58D, 0x9BC8}, //20706 #CJK UNIFIED IDEOGRAPH + {0xF58E, 0x9BC9}, //20707 #CJK UNIFIED IDEOGRAPH + {0xF58F, 0x9BCA}, //20708 #CJK UNIFIED IDEOGRAPH + {0xF590, 0x9BCB}, //20709 #CJK UNIFIED IDEOGRAPH + {0xF591, 0x9BCC}, //20710 #CJK UNIFIED IDEOGRAPH + {0xF592, 0x9BCD}, //20711 #CJK UNIFIED IDEOGRAPH + {0xF593, 0x9BCE}, //20712 #CJK UNIFIED IDEOGRAPH + {0xF594, 0x9BCF}, //20713 #CJK UNIFIED IDEOGRAPH + {0xF595, 0x9BD0}, //20714 #CJK UNIFIED IDEOGRAPH + {0xF596, 0x9BD1}, //20715 #CJK UNIFIED IDEOGRAPH + {0xF597, 0x9BD2}, //20716 #CJK UNIFIED IDEOGRAPH + {0xF598, 0x9BD3}, //20717 #CJK UNIFIED IDEOGRAPH + {0xF599, 0x9BD4}, //20718 #CJK UNIFIED IDEOGRAPH + {0xF59A, 0x9BD5}, //20719 #CJK UNIFIED IDEOGRAPH + {0xF59B, 0x9BD6}, //20720 #CJK UNIFIED IDEOGRAPH + {0xF59C, 0x9BD7}, //20721 #CJK UNIFIED IDEOGRAPH + {0xF59D, 0x9BD8}, //20722 #CJK UNIFIED IDEOGRAPH + {0xF59E, 0x9BD9}, //20723 #CJK UNIFIED IDEOGRAPH + {0xF59F, 0x9BDA}, //20724 #CJK UNIFIED IDEOGRAPH + {0xF5A0, 0x9BDB}, //20725 #CJK UNIFIED IDEOGRAPH + {0xF5A1, 0x9162}, //20726 #CJK UNIFIED IDEOGRAPH + {0xF5A2, 0x9161}, //20727 #CJK UNIFIED IDEOGRAPH + {0xF5A3, 0x9170}, //20728 #CJK UNIFIED IDEOGRAPH + {0xF5A4, 0x9169}, //20729 #CJK UNIFIED IDEOGRAPH + {0xF5A5, 0x916F}, //20730 #CJK UNIFIED IDEOGRAPH + {0xF5A6, 0x917D}, //20731 #CJK UNIFIED IDEOGRAPH + {0xF5A7, 0x917E}, //20732 #CJK UNIFIED IDEOGRAPH + {0xF5A8, 0x9172}, //20733 #CJK UNIFIED IDEOGRAPH + {0xF5A9, 0x9174}, //20734 #CJK UNIFIED IDEOGRAPH + {0xF5AA, 0x9179}, //20735 #CJK UNIFIED IDEOGRAPH + {0xF5AB, 0x918C}, //20736 #CJK UNIFIED IDEOGRAPH + {0xF5AC, 0x9185}, //20737 #CJK UNIFIED IDEOGRAPH + {0xF5AD, 0x9190}, //20738 #CJK UNIFIED IDEOGRAPH + {0xF5AE, 0x918D}, //20739 #CJK UNIFIED IDEOGRAPH + {0xF5AF, 0x9191}, //20740 #CJK UNIFIED IDEOGRAPH + {0xF5B0, 0x91A2}, //20741 #CJK UNIFIED IDEOGRAPH + {0xF5B1, 0x91A3}, //20742 #CJK UNIFIED IDEOGRAPH + {0xF5B2, 0x91AA}, //20743 #CJK UNIFIED IDEOGRAPH + {0xF5B3, 0x91AD}, //20744 #CJK UNIFIED IDEOGRAPH + {0xF5B4, 0x91AE}, //20745 #CJK UNIFIED IDEOGRAPH + {0xF5B5, 0x91AF}, //20746 #CJK UNIFIED IDEOGRAPH + {0xF5B6, 0x91B5}, //20747 #CJK UNIFIED IDEOGRAPH + {0xF5B7, 0x91B4}, //20748 #CJK UNIFIED IDEOGRAPH + {0xF5B8, 0x91BA}, //20749 #CJK UNIFIED IDEOGRAPH + {0xF5B9, 0x8C55}, //20750 #CJK UNIFIED IDEOGRAPH + {0xF5BA, 0x9E7E}, //20751 #CJK UNIFIED IDEOGRAPH + {0xF5BB, 0x8DB8}, //20752 #CJK UNIFIED IDEOGRAPH + {0xF5BC, 0x8DEB}, //20753 #CJK UNIFIED IDEOGRAPH + {0xF5BD, 0x8E05}, //20754 #CJK UNIFIED IDEOGRAPH + {0xF5BE, 0x8E59}, //20755 #CJK UNIFIED IDEOGRAPH + {0xF5BF, 0x8E69}, //20756 #CJK UNIFIED IDEOGRAPH + {0xF5C0, 0x8DB5}, //20757 #CJK UNIFIED IDEOGRAPH + {0xF5C1, 0x8DBF}, //20758 #CJK UNIFIED IDEOGRAPH + {0xF5C2, 0x8DBC}, //20759 #CJK UNIFIED IDEOGRAPH + {0xF5C3, 0x8DBA}, //20760 #CJK UNIFIED IDEOGRAPH + {0xF5C4, 0x8DC4}, //20761 #CJK UNIFIED IDEOGRAPH + {0xF5C5, 0x8DD6}, //20762 #CJK UNIFIED IDEOGRAPH + {0xF5C6, 0x8DD7}, //20763 #CJK UNIFIED IDEOGRAPH + {0xF5C7, 0x8DDA}, //20764 #CJK UNIFIED IDEOGRAPH + {0xF5C8, 0x8DDE}, //20765 #CJK UNIFIED IDEOGRAPH + {0xF5C9, 0x8DCE}, //20766 #CJK UNIFIED IDEOGRAPH + {0xF5CA, 0x8DCF}, //20767 #CJK UNIFIED IDEOGRAPH + {0xF5CB, 0x8DDB}, //20768 #CJK UNIFIED IDEOGRAPH + {0xF5CC, 0x8DC6}, //20769 #CJK UNIFIED IDEOGRAPH + {0xF5CD, 0x8DEC}, //20770 #CJK UNIFIED IDEOGRAPH + {0xF5CE, 0x8DF7}, //20771 #CJK UNIFIED IDEOGRAPH + {0xF5CF, 0x8DF8}, //20772 #CJK UNIFIED IDEOGRAPH + {0xF5D0, 0x8DE3}, //20773 #CJK UNIFIED IDEOGRAPH + {0xF5D1, 0x8DF9}, //20774 #CJK UNIFIED IDEOGRAPH + {0xF5D2, 0x8DFB}, //20775 #CJK UNIFIED IDEOGRAPH + {0xF5D3, 0x8DE4}, //20776 #CJK UNIFIED IDEOGRAPH + {0xF5D4, 0x8E09}, //20777 #CJK UNIFIED IDEOGRAPH + {0xF5D5, 0x8DFD}, //20778 #CJK UNIFIED IDEOGRAPH + {0xF5D6, 0x8E14}, //20779 #CJK UNIFIED IDEOGRAPH + {0xF5D7, 0x8E1D}, //20780 #CJK UNIFIED IDEOGRAPH + {0xF5D8, 0x8E1F}, //20781 #CJK UNIFIED IDEOGRAPH + {0xF5D9, 0x8E2C}, //20782 #CJK UNIFIED IDEOGRAPH + {0xF5DA, 0x8E2E}, //20783 #CJK UNIFIED IDEOGRAPH + {0xF5DB, 0x8E23}, //20784 #CJK UNIFIED IDEOGRAPH + {0xF5DC, 0x8E2F}, //20785 #CJK UNIFIED IDEOGRAPH + {0xF5DD, 0x8E3A}, //20786 #CJK UNIFIED IDEOGRAPH + {0xF5DE, 0x8E40}, //20787 #CJK UNIFIED IDEOGRAPH + {0xF5DF, 0x8E39}, //20788 #CJK UNIFIED IDEOGRAPH + {0xF5E0, 0x8E35}, //20789 #CJK UNIFIED IDEOGRAPH + {0xF5E1, 0x8E3D}, //20790 #CJK UNIFIED IDEOGRAPH + {0xF5E2, 0x8E31}, //20791 #CJK UNIFIED IDEOGRAPH + {0xF5E3, 0x8E49}, //20792 #CJK UNIFIED IDEOGRAPH + {0xF5E4, 0x8E41}, //20793 #CJK UNIFIED IDEOGRAPH + {0xF5E5, 0x8E42}, //20794 #CJK UNIFIED IDEOGRAPH + {0xF5E6, 0x8E51}, //20795 #CJK UNIFIED IDEOGRAPH + {0xF5E7, 0x8E52}, //20796 #CJK UNIFIED IDEOGRAPH + {0xF5E8, 0x8E4A}, //20797 #CJK UNIFIED IDEOGRAPH + {0xF5E9, 0x8E70}, //20798 #CJK UNIFIED IDEOGRAPH + {0xF5EA, 0x8E76}, //20799 #CJK UNIFIED IDEOGRAPH + {0xF5EB, 0x8E7C}, //20800 #CJK UNIFIED IDEOGRAPH + {0xF5EC, 0x8E6F}, //20801 #CJK UNIFIED IDEOGRAPH + {0xF5ED, 0x8E74}, //20802 #CJK UNIFIED IDEOGRAPH + {0xF5EE, 0x8E85}, //20803 #CJK UNIFIED IDEOGRAPH + {0xF5EF, 0x8E8F}, //20804 #CJK UNIFIED IDEOGRAPH + {0xF5F0, 0x8E94}, //20805 #CJK UNIFIED IDEOGRAPH + {0xF5F1, 0x8E90}, //20806 #CJK UNIFIED IDEOGRAPH + {0xF5F2, 0x8E9C}, //20807 #CJK UNIFIED IDEOGRAPH + {0xF5F3, 0x8E9E}, //20808 #CJK UNIFIED IDEOGRAPH + {0xF5F4, 0x8C78}, //20809 #CJK UNIFIED IDEOGRAPH + {0xF5F5, 0x8C82}, //20810 #CJK UNIFIED IDEOGRAPH + {0xF5F6, 0x8C8A}, //20811 #CJK UNIFIED IDEOGRAPH + {0xF5F7, 0x8C85}, //20812 #CJK UNIFIED IDEOGRAPH + {0xF5F8, 0x8C98}, //20813 #CJK UNIFIED IDEOGRAPH + {0xF5F9, 0x8C94}, //20814 #CJK UNIFIED IDEOGRAPH + {0xF5FA, 0x659B}, //20815 #CJK UNIFIED IDEOGRAPH + {0xF5FB, 0x89D6}, //20816 #CJK UNIFIED IDEOGRAPH + {0xF5FC, 0x89DE}, //20817 #CJK UNIFIED IDEOGRAPH + {0xF5FD, 0x89DA}, //20818 #CJK UNIFIED IDEOGRAPH + {0xF5FE, 0x89DC}, //20819 #CJK UNIFIED IDEOGRAPH + {0xF640, 0x9BDC}, //20820 #CJK UNIFIED IDEOGRAPH + {0xF641, 0x9BDD}, //20821 #CJK UNIFIED IDEOGRAPH + {0xF642, 0x9BDE}, //20822 #CJK UNIFIED IDEOGRAPH + {0xF643, 0x9BDF}, //20823 #CJK UNIFIED IDEOGRAPH + {0xF644, 0x9BE0}, //20824 #CJK UNIFIED IDEOGRAPH + {0xF645, 0x9BE1}, //20825 #CJK UNIFIED IDEOGRAPH + {0xF646, 0x9BE2}, //20826 #CJK UNIFIED IDEOGRAPH + {0xF647, 0x9BE3}, //20827 #CJK UNIFIED IDEOGRAPH + {0xF648, 0x9BE4}, //20828 #CJK UNIFIED IDEOGRAPH + {0xF649, 0x9BE5}, //20829 #CJK UNIFIED IDEOGRAPH + {0xF64A, 0x9BE6}, //20830 #CJK UNIFIED IDEOGRAPH + {0xF64B, 0x9BE7}, //20831 #CJK UNIFIED IDEOGRAPH + {0xF64C, 0x9BE8}, //20832 #CJK UNIFIED IDEOGRAPH + {0xF64D, 0x9BE9}, //20833 #CJK UNIFIED IDEOGRAPH + {0xF64E, 0x9BEA}, //20834 #CJK UNIFIED IDEOGRAPH + {0xF64F, 0x9BEB}, //20835 #CJK UNIFIED IDEOGRAPH + {0xF650, 0x9BEC}, //20836 #CJK UNIFIED IDEOGRAPH + {0xF651, 0x9BED}, //20837 #CJK UNIFIED IDEOGRAPH + {0xF652, 0x9BEE}, //20838 #CJK UNIFIED IDEOGRAPH + {0xF653, 0x9BEF}, //20839 #CJK UNIFIED IDEOGRAPH + {0xF654, 0x9BF0}, //20840 #CJK UNIFIED IDEOGRAPH + {0xF655, 0x9BF1}, //20841 #CJK UNIFIED IDEOGRAPH + {0xF656, 0x9BF2}, //20842 #CJK UNIFIED IDEOGRAPH + {0xF657, 0x9BF3}, //20843 #CJK UNIFIED IDEOGRAPH + {0xF658, 0x9BF4}, //20844 #CJK UNIFIED IDEOGRAPH + {0xF659, 0x9BF5}, //20845 #CJK UNIFIED IDEOGRAPH + {0xF65A, 0x9BF6}, //20846 #CJK UNIFIED IDEOGRAPH + {0xF65B, 0x9BF7}, //20847 #CJK UNIFIED IDEOGRAPH + {0xF65C, 0x9BF8}, //20848 #CJK UNIFIED IDEOGRAPH + {0xF65D, 0x9BF9}, //20849 #CJK UNIFIED IDEOGRAPH + {0xF65E, 0x9BFA}, //20850 #CJK UNIFIED IDEOGRAPH + {0xF65F, 0x9BFB}, //20851 #CJK UNIFIED IDEOGRAPH + {0xF660, 0x9BFC}, //20852 #CJK UNIFIED IDEOGRAPH + {0xF661, 0x9BFD}, //20853 #CJK UNIFIED IDEOGRAPH + {0xF662, 0x9BFE}, //20854 #CJK UNIFIED IDEOGRAPH + {0xF663, 0x9BFF}, //20855 #CJK UNIFIED IDEOGRAPH + {0xF664, 0x9C00}, //20856 #CJK UNIFIED IDEOGRAPH + {0xF665, 0x9C01}, //20857 #CJK UNIFIED IDEOGRAPH + {0xF666, 0x9C02}, //20858 #CJK UNIFIED IDEOGRAPH + {0xF667, 0x9C03}, //20859 #CJK UNIFIED IDEOGRAPH + {0xF668, 0x9C04}, //20860 #CJK UNIFIED IDEOGRAPH + {0xF669, 0x9C05}, //20861 #CJK UNIFIED IDEOGRAPH + {0xF66A, 0x9C06}, //20862 #CJK UNIFIED IDEOGRAPH + {0xF66B, 0x9C07}, //20863 #CJK UNIFIED IDEOGRAPH + {0xF66C, 0x9C08}, //20864 #CJK UNIFIED IDEOGRAPH + {0xF66D, 0x9C09}, //20865 #CJK UNIFIED IDEOGRAPH + {0xF66E, 0x9C0A}, //20866 #CJK UNIFIED IDEOGRAPH + {0xF66F, 0x9C0B}, //20867 #CJK UNIFIED IDEOGRAPH + {0xF670, 0x9C0C}, //20868 #CJK UNIFIED IDEOGRAPH + {0xF671, 0x9C0D}, //20869 #CJK UNIFIED IDEOGRAPH + {0xF672, 0x9C0E}, //20870 #CJK UNIFIED IDEOGRAPH + {0xF673, 0x9C0F}, //20871 #CJK UNIFIED IDEOGRAPH + {0xF674, 0x9C10}, //20872 #CJK UNIFIED IDEOGRAPH + {0xF675, 0x9C11}, //20873 #CJK UNIFIED IDEOGRAPH + {0xF676, 0x9C12}, //20874 #CJK UNIFIED IDEOGRAPH + {0xF677, 0x9C13}, //20875 #CJK UNIFIED IDEOGRAPH + {0xF678, 0x9C14}, //20876 #CJK UNIFIED IDEOGRAPH + {0xF679, 0x9C15}, //20877 #CJK UNIFIED IDEOGRAPH + {0xF67A, 0x9C16}, //20878 #CJK UNIFIED IDEOGRAPH + {0xF67B, 0x9C17}, //20879 #CJK UNIFIED IDEOGRAPH + {0xF67C, 0x9C18}, //20880 #CJK UNIFIED IDEOGRAPH + {0xF67D, 0x9C19}, //20881 #CJK UNIFIED IDEOGRAPH + {0xF67E, 0x9C1A}, //20882 #CJK UNIFIED IDEOGRAPH + {0xF680, 0x9C1B}, //20883 #CJK UNIFIED IDEOGRAPH + {0xF681, 0x9C1C}, //20884 #CJK UNIFIED IDEOGRAPH + {0xF682, 0x9C1D}, //20885 #CJK UNIFIED IDEOGRAPH + {0xF683, 0x9C1E}, //20886 #CJK UNIFIED IDEOGRAPH + {0xF684, 0x9C1F}, //20887 #CJK UNIFIED IDEOGRAPH + {0xF685, 0x9C20}, //20888 #CJK UNIFIED IDEOGRAPH + {0xF686, 0x9C21}, //20889 #CJK UNIFIED IDEOGRAPH + {0xF687, 0x9C22}, //20890 #CJK UNIFIED IDEOGRAPH + {0xF688, 0x9C23}, //20891 #CJK UNIFIED IDEOGRAPH + {0xF689, 0x9C24}, //20892 #CJK UNIFIED IDEOGRAPH + {0xF68A, 0x9C25}, //20893 #CJK UNIFIED IDEOGRAPH + {0xF68B, 0x9C26}, //20894 #CJK UNIFIED IDEOGRAPH + {0xF68C, 0x9C27}, //20895 #CJK UNIFIED IDEOGRAPH + {0xF68D, 0x9C28}, //20896 #CJK UNIFIED IDEOGRAPH + {0xF68E, 0x9C29}, //20897 #CJK UNIFIED IDEOGRAPH + {0xF68F, 0x9C2A}, //20898 #CJK UNIFIED IDEOGRAPH + {0xF690, 0x9C2B}, //20899 #CJK UNIFIED IDEOGRAPH + {0xF691, 0x9C2C}, //20900 #CJK UNIFIED IDEOGRAPH + {0xF692, 0x9C2D}, //20901 #CJK UNIFIED IDEOGRAPH + {0xF693, 0x9C2E}, //20902 #CJK UNIFIED IDEOGRAPH + {0xF694, 0x9C2F}, //20903 #CJK UNIFIED IDEOGRAPH + {0xF695, 0x9C30}, //20904 #CJK UNIFIED IDEOGRAPH + {0xF696, 0x9C31}, //20905 #CJK UNIFIED IDEOGRAPH + {0xF697, 0x9C32}, //20906 #CJK UNIFIED IDEOGRAPH + {0xF698, 0x9C33}, //20907 #CJK UNIFIED IDEOGRAPH + {0xF699, 0x9C34}, //20908 #CJK UNIFIED IDEOGRAPH + {0xF69A, 0x9C35}, //20909 #CJK UNIFIED IDEOGRAPH + {0xF69B, 0x9C36}, //20910 #CJK UNIFIED IDEOGRAPH + {0xF69C, 0x9C37}, //20911 #CJK UNIFIED IDEOGRAPH + {0xF69D, 0x9C38}, //20912 #CJK UNIFIED IDEOGRAPH + {0xF69E, 0x9C39}, //20913 #CJK UNIFIED IDEOGRAPH + {0xF69F, 0x9C3A}, //20914 #CJK UNIFIED IDEOGRAPH + {0xF6A0, 0x9C3B}, //20915 #CJK UNIFIED IDEOGRAPH + {0xF6A1, 0x89E5}, //20916 #CJK UNIFIED IDEOGRAPH + {0xF6A2, 0x89EB}, //20917 #CJK UNIFIED IDEOGRAPH + {0xF6A3, 0x89EF}, //20918 #CJK UNIFIED IDEOGRAPH + {0xF6A4, 0x8A3E}, //20919 #CJK UNIFIED IDEOGRAPH + {0xF6A5, 0x8B26}, //20920 #CJK UNIFIED IDEOGRAPH + {0xF6A6, 0x9753}, //20921 #CJK UNIFIED IDEOGRAPH + {0xF6A7, 0x96E9}, //20922 #CJK UNIFIED IDEOGRAPH + {0xF6A8, 0x96F3}, //20923 #CJK UNIFIED IDEOGRAPH + {0xF6A9, 0x96EF}, //20924 #CJK UNIFIED IDEOGRAPH + {0xF6AA, 0x9706}, //20925 #CJK UNIFIED IDEOGRAPH + {0xF6AB, 0x9701}, //20926 #CJK UNIFIED IDEOGRAPH + {0xF6AC, 0x9708}, //20927 #CJK UNIFIED IDEOGRAPH + {0xF6AD, 0x970F}, //20928 #CJK UNIFIED IDEOGRAPH + {0xF6AE, 0x970E}, //20929 #CJK UNIFIED IDEOGRAPH + {0xF6AF, 0x972A}, //20930 #CJK UNIFIED IDEOGRAPH + {0xF6B0, 0x972D}, //20931 #CJK UNIFIED IDEOGRAPH + {0xF6B1, 0x9730}, //20932 #CJK UNIFIED IDEOGRAPH + {0xF6B2, 0x973E}, //20933 #CJK UNIFIED IDEOGRAPH + {0xF6B3, 0x9F80}, //20934 #CJK UNIFIED IDEOGRAPH + {0xF6B4, 0x9F83}, //20935 #CJK UNIFIED IDEOGRAPH + {0xF6B5, 0x9F85}, //20936 #CJK UNIFIED IDEOGRAPH + {0xF6B6, 0x9F86}, //20937 #CJK UNIFIED IDEOGRAPH + {0xF6B7, 0x9F87}, //20938 #CJK UNIFIED IDEOGRAPH + {0xF6B8, 0x9F88}, //20939 #CJK UNIFIED IDEOGRAPH + {0xF6B9, 0x9F89}, //20940 #CJK UNIFIED IDEOGRAPH + {0xF6BA, 0x9F8A}, //20941 #CJK UNIFIED IDEOGRAPH + {0xF6BB, 0x9F8C}, //20942 #CJK UNIFIED IDEOGRAPH + {0xF6BC, 0x9EFE}, //20943 #CJK UNIFIED IDEOGRAPH + {0xF6BD, 0x9F0B}, //20944 #CJK UNIFIED IDEOGRAPH + {0xF6BE, 0x9F0D}, //20945 #CJK UNIFIED IDEOGRAPH + {0xF6BF, 0x96B9}, //20946 #CJK UNIFIED IDEOGRAPH + {0xF6C0, 0x96BC}, //20947 #CJK UNIFIED IDEOGRAPH + {0xF6C1, 0x96BD}, //20948 #CJK UNIFIED IDEOGRAPH + {0xF6C2, 0x96CE}, //20949 #CJK UNIFIED IDEOGRAPH + {0xF6C3, 0x96D2}, //20950 #CJK UNIFIED IDEOGRAPH + {0xF6C4, 0x77BF}, //20951 #CJK UNIFIED IDEOGRAPH + {0xF6C5, 0x96E0}, //20952 #CJK UNIFIED IDEOGRAPH + {0xF6C6, 0x928E}, //20953 #CJK UNIFIED IDEOGRAPH + {0xF6C7, 0x92AE}, //20954 #CJK UNIFIED IDEOGRAPH + {0xF6C8, 0x92C8}, //20955 #CJK UNIFIED IDEOGRAPH + {0xF6C9, 0x933E}, //20956 #CJK UNIFIED IDEOGRAPH + {0xF6CA, 0x936A}, //20957 #CJK UNIFIED IDEOGRAPH + {0xF6CB, 0x93CA}, //20958 #CJK UNIFIED IDEOGRAPH + {0xF6CC, 0x938F}, //20959 #CJK UNIFIED IDEOGRAPH + {0xF6CD, 0x943E}, //20960 #CJK UNIFIED IDEOGRAPH + {0xF6CE, 0x946B}, //20961 #CJK UNIFIED IDEOGRAPH + {0xF6CF, 0x9C7F}, //20962 #CJK UNIFIED IDEOGRAPH + {0xF6D0, 0x9C82}, //20963 #CJK UNIFIED IDEOGRAPH + {0xF6D1, 0x9C85}, //20964 #CJK UNIFIED IDEOGRAPH + {0xF6D2, 0x9C86}, //20965 #CJK UNIFIED IDEOGRAPH + {0xF6D3, 0x9C87}, //20966 #CJK UNIFIED IDEOGRAPH + {0xF6D4, 0x9C88}, //20967 #CJK UNIFIED IDEOGRAPH + {0xF6D5, 0x7A23}, //20968 #CJK UNIFIED IDEOGRAPH + {0xF6D6, 0x9C8B}, //20969 #CJK UNIFIED IDEOGRAPH + {0xF6D7, 0x9C8E}, //20970 #CJK UNIFIED IDEOGRAPH + {0xF6D8, 0x9C90}, //20971 #CJK UNIFIED IDEOGRAPH + {0xF6D9, 0x9C91}, //20972 #CJK UNIFIED IDEOGRAPH + {0xF6DA, 0x9C92}, //20973 #CJK UNIFIED IDEOGRAPH + {0xF6DB, 0x9C94}, //20974 #CJK UNIFIED IDEOGRAPH + {0xF6DC, 0x9C95}, //20975 #CJK UNIFIED IDEOGRAPH + {0xF6DD, 0x9C9A}, //20976 #CJK UNIFIED IDEOGRAPH + {0xF6DE, 0x9C9B}, //20977 #CJK UNIFIED IDEOGRAPH + {0xF6DF, 0x9C9E}, //20978 #CJK UNIFIED IDEOGRAPH + {0xF6E0, 0x9C9F}, //20979 #CJK UNIFIED IDEOGRAPH + {0xF6E1, 0x9CA0}, //20980 #CJK UNIFIED IDEOGRAPH + {0xF6E2, 0x9CA1}, //20981 #CJK UNIFIED IDEOGRAPH + {0xF6E3, 0x9CA2}, //20982 #CJK UNIFIED IDEOGRAPH + {0xF6E4, 0x9CA3}, //20983 #CJK UNIFIED IDEOGRAPH + {0xF6E5, 0x9CA5}, //20984 #CJK UNIFIED IDEOGRAPH + {0xF6E6, 0x9CA6}, //20985 #CJK UNIFIED IDEOGRAPH + {0xF6E7, 0x9CA7}, //20986 #CJK UNIFIED IDEOGRAPH + {0xF6E8, 0x9CA8}, //20987 #CJK UNIFIED IDEOGRAPH + {0xF6E9, 0x9CA9}, //20988 #CJK UNIFIED IDEOGRAPH + {0xF6EA, 0x9CAB}, //20989 #CJK UNIFIED IDEOGRAPH + {0xF6EB, 0x9CAD}, //20990 #CJK UNIFIED IDEOGRAPH + {0xF6EC, 0x9CAE}, //20991 #CJK UNIFIED IDEOGRAPH + {0xF6ED, 0x9CB0}, //20992 #CJK UNIFIED IDEOGRAPH + {0xF6EE, 0x9CB1}, //20993 #CJK UNIFIED IDEOGRAPH + {0xF6EF, 0x9CB2}, //20994 #CJK UNIFIED IDEOGRAPH + {0xF6F0, 0x9CB3}, //20995 #CJK UNIFIED IDEOGRAPH + {0xF6F1, 0x9CB4}, //20996 #CJK UNIFIED IDEOGRAPH + {0xF6F2, 0x9CB5}, //20997 #CJK UNIFIED IDEOGRAPH + {0xF6F3, 0x9CB6}, //20998 #CJK UNIFIED IDEOGRAPH + {0xF6F4, 0x9CB7}, //20999 #CJK UNIFIED IDEOGRAPH + {0xF6F5, 0x9CBA}, //21000 #CJK UNIFIED IDEOGRAPH + {0xF6F6, 0x9CBB}, //21001 #CJK UNIFIED IDEOGRAPH + {0xF6F7, 0x9CBC}, //21002 #CJK UNIFIED IDEOGRAPH + {0xF6F8, 0x9CBD}, //21003 #CJK UNIFIED IDEOGRAPH + {0xF6F9, 0x9CC4}, //21004 #CJK UNIFIED IDEOGRAPH + {0xF6FA, 0x9CC5}, //21005 #CJK UNIFIED IDEOGRAPH + {0xF6FB, 0x9CC6}, //21006 #CJK UNIFIED IDEOGRAPH + {0xF6FC, 0x9CC7}, //21007 #CJK UNIFIED IDEOGRAPH + {0xF6FD, 0x9CCA}, //21008 #CJK UNIFIED IDEOGRAPH + {0xF6FE, 0x9CCB}, //21009 #CJK UNIFIED IDEOGRAPH + {0xF740, 0x9C3C}, //21010 #CJK UNIFIED IDEOGRAPH + {0xF741, 0x9C3D}, //21011 #CJK UNIFIED IDEOGRAPH + {0xF742, 0x9C3E}, //21012 #CJK UNIFIED IDEOGRAPH + {0xF743, 0x9C3F}, //21013 #CJK UNIFIED IDEOGRAPH + {0xF744, 0x9C40}, //21014 #CJK UNIFIED IDEOGRAPH + {0xF745, 0x9C41}, //21015 #CJK UNIFIED IDEOGRAPH + {0xF746, 0x9C42}, //21016 #CJK UNIFIED IDEOGRAPH + {0xF747, 0x9C43}, //21017 #CJK UNIFIED IDEOGRAPH + {0xF748, 0x9C44}, //21018 #CJK UNIFIED IDEOGRAPH + {0xF749, 0x9C45}, //21019 #CJK UNIFIED IDEOGRAPH + {0xF74A, 0x9C46}, //21020 #CJK UNIFIED IDEOGRAPH + {0xF74B, 0x9C47}, //21021 #CJK UNIFIED IDEOGRAPH + {0xF74C, 0x9C48}, //21022 #CJK UNIFIED IDEOGRAPH + {0xF74D, 0x9C49}, //21023 #CJK UNIFIED IDEOGRAPH + {0xF74E, 0x9C4A}, //21024 #CJK UNIFIED IDEOGRAPH + {0xF74F, 0x9C4B}, //21025 #CJK UNIFIED IDEOGRAPH + {0xF750, 0x9C4C}, //21026 #CJK UNIFIED IDEOGRAPH + {0xF751, 0x9C4D}, //21027 #CJK UNIFIED IDEOGRAPH + {0xF752, 0x9C4E}, //21028 #CJK UNIFIED IDEOGRAPH + {0xF753, 0x9C4F}, //21029 #CJK UNIFIED IDEOGRAPH + {0xF754, 0x9C50}, //21030 #CJK UNIFIED IDEOGRAPH + {0xF755, 0x9C51}, //21031 #CJK UNIFIED IDEOGRAPH + {0xF756, 0x9C52}, //21032 #CJK UNIFIED IDEOGRAPH + {0xF757, 0x9C53}, //21033 #CJK UNIFIED IDEOGRAPH + {0xF758, 0x9C54}, //21034 #CJK UNIFIED IDEOGRAPH + {0xF759, 0x9C55}, //21035 #CJK UNIFIED IDEOGRAPH + {0xF75A, 0x9C56}, //21036 #CJK UNIFIED IDEOGRAPH + {0xF75B, 0x9C57}, //21037 #CJK UNIFIED IDEOGRAPH + {0xF75C, 0x9C58}, //21038 #CJK UNIFIED IDEOGRAPH + {0xF75D, 0x9C59}, //21039 #CJK UNIFIED IDEOGRAPH + {0xF75E, 0x9C5A}, //21040 #CJK UNIFIED IDEOGRAPH + {0xF75F, 0x9C5B}, //21041 #CJK UNIFIED IDEOGRAPH + {0xF760, 0x9C5C}, //21042 #CJK UNIFIED IDEOGRAPH + {0xF761, 0x9C5D}, //21043 #CJK UNIFIED IDEOGRAPH + {0xF762, 0x9C5E}, //21044 #CJK UNIFIED IDEOGRAPH + {0xF763, 0x9C5F}, //21045 #CJK UNIFIED IDEOGRAPH + {0xF764, 0x9C60}, //21046 #CJK UNIFIED IDEOGRAPH + {0xF765, 0x9C61}, //21047 #CJK UNIFIED IDEOGRAPH + {0xF766, 0x9C62}, //21048 #CJK UNIFIED IDEOGRAPH + {0xF767, 0x9C63}, //21049 #CJK UNIFIED IDEOGRAPH + {0xF768, 0x9C64}, //21050 #CJK UNIFIED IDEOGRAPH + {0xF769, 0x9C65}, //21051 #CJK UNIFIED IDEOGRAPH + {0xF76A, 0x9C66}, //21052 #CJK UNIFIED IDEOGRAPH + {0xF76B, 0x9C67}, //21053 #CJK UNIFIED IDEOGRAPH + {0xF76C, 0x9C68}, //21054 #CJK UNIFIED IDEOGRAPH + {0xF76D, 0x9C69}, //21055 #CJK UNIFIED IDEOGRAPH + {0xF76E, 0x9C6A}, //21056 #CJK UNIFIED IDEOGRAPH + {0xF76F, 0x9C6B}, //21057 #CJK UNIFIED IDEOGRAPH + {0xF770, 0x9C6C}, //21058 #CJK UNIFIED IDEOGRAPH + {0xF771, 0x9C6D}, //21059 #CJK UNIFIED IDEOGRAPH + {0xF772, 0x9C6E}, //21060 #CJK UNIFIED IDEOGRAPH + {0xF773, 0x9C6F}, //21061 #CJK UNIFIED IDEOGRAPH + {0xF774, 0x9C70}, //21062 #CJK UNIFIED IDEOGRAPH + {0xF775, 0x9C71}, //21063 #CJK UNIFIED IDEOGRAPH + {0xF776, 0x9C72}, //21064 #CJK UNIFIED IDEOGRAPH + {0xF777, 0x9C73}, //21065 #CJK UNIFIED IDEOGRAPH + {0xF778, 0x9C74}, //21066 #CJK UNIFIED IDEOGRAPH + {0xF779, 0x9C75}, //21067 #CJK UNIFIED IDEOGRAPH + {0xF77A, 0x9C76}, //21068 #CJK UNIFIED IDEOGRAPH + {0xF77B, 0x9C77}, //21069 #CJK UNIFIED IDEOGRAPH + {0xF77C, 0x9C78}, //21070 #CJK UNIFIED IDEOGRAPH + {0xF77D, 0x9C79}, //21071 #CJK UNIFIED IDEOGRAPH + {0xF77E, 0x9C7A}, //21072 #CJK UNIFIED IDEOGRAPH + {0xF780, 0x9C7B}, //21073 #CJK UNIFIED IDEOGRAPH + {0xF781, 0x9C7D}, //21074 #CJK UNIFIED IDEOGRAPH + {0xF782, 0x9C7E}, //21075 #CJK UNIFIED IDEOGRAPH + {0xF783, 0x9C80}, //21076 #CJK UNIFIED IDEOGRAPH + {0xF784, 0x9C83}, //21077 #CJK UNIFIED IDEOGRAPH + {0xF785, 0x9C84}, //21078 #CJK UNIFIED IDEOGRAPH + {0xF786, 0x9C89}, //21079 #CJK UNIFIED IDEOGRAPH + {0xF787, 0x9C8A}, //21080 #CJK UNIFIED IDEOGRAPH + {0xF788, 0x9C8C}, //21081 #CJK UNIFIED IDEOGRAPH + {0xF789, 0x9C8F}, //21082 #CJK UNIFIED IDEOGRAPH + {0xF78A, 0x9C93}, //21083 #CJK UNIFIED IDEOGRAPH + {0xF78B, 0x9C96}, //21084 #CJK UNIFIED IDEOGRAPH + {0xF78C, 0x9C97}, //21085 #CJK UNIFIED IDEOGRAPH + {0xF78D, 0x9C98}, //21086 #CJK UNIFIED IDEOGRAPH + {0xF78E, 0x9C99}, //21087 #CJK UNIFIED IDEOGRAPH + {0xF78F, 0x9C9D}, //21088 #CJK UNIFIED IDEOGRAPH + {0xF790, 0x9CAA}, //21089 #CJK UNIFIED IDEOGRAPH + {0xF791, 0x9CAC}, //21090 #CJK UNIFIED IDEOGRAPH + {0xF792, 0x9CAF}, //21091 #CJK UNIFIED IDEOGRAPH + {0xF793, 0x9CB9}, //21092 #CJK UNIFIED IDEOGRAPH + {0xF794, 0x9CBE}, //21093 #CJK UNIFIED IDEOGRAPH + {0xF795, 0x9CBF}, //21094 #CJK UNIFIED IDEOGRAPH + {0xF796, 0x9CC0}, //21095 #CJK UNIFIED IDEOGRAPH + {0xF797, 0x9CC1}, //21096 #CJK UNIFIED IDEOGRAPH + {0xF798, 0x9CC2}, //21097 #CJK UNIFIED IDEOGRAPH + {0xF799, 0x9CC8}, //21098 #CJK UNIFIED IDEOGRAPH + {0xF79A, 0x9CC9}, //21099 #CJK UNIFIED IDEOGRAPH + {0xF79B, 0x9CD1}, //21100 #CJK UNIFIED IDEOGRAPH + {0xF79C, 0x9CD2}, //21101 #CJK UNIFIED IDEOGRAPH + {0xF79D, 0x9CDA}, //21102 #CJK UNIFIED IDEOGRAPH + {0xF79E, 0x9CDB}, //21103 #CJK UNIFIED IDEOGRAPH + {0xF79F, 0x9CE0}, //21104 #CJK UNIFIED IDEOGRAPH + {0xF7A0, 0x9CE1}, //21105 #CJK UNIFIED IDEOGRAPH + {0xF7A1, 0x9CCC}, //21106 #CJK UNIFIED IDEOGRAPH + {0xF7A2, 0x9CCD}, //21107 #CJK UNIFIED IDEOGRAPH + {0xF7A3, 0x9CCE}, //21108 #CJK UNIFIED IDEOGRAPH + {0xF7A4, 0x9CCF}, //21109 #CJK UNIFIED IDEOGRAPH + {0xF7A5, 0x9CD0}, //21110 #CJK UNIFIED IDEOGRAPH + {0xF7A6, 0x9CD3}, //21111 #CJK UNIFIED IDEOGRAPH + {0xF7A7, 0x9CD4}, //21112 #CJK UNIFIED IDEOGRAPH + {0xF7A8, 0x9CD5}, //21113 #CJK UNIFIED IDEOGRAPH + {0xF7A9, 0x9CD7}, //21114 #CJK UNIFIED IDEOGRAPH + {0xF7AA, 0x9CD8}, //21115 #CJK UNIFIED IDEOGRAPH + {0xF7AB, 0x9CD9}, //21116 #CJK UNIFIED IDEOGRAPH + {0xF7AC, 0x9CDC}, //21117 #CJK UNIFIED IDEOGRAPH + {0xF7AD, 0x9CDD}, //21118 #CJK UNIFIED IDEOGRAPH + {0xF7AE, 0x9CDF}, //21119 #CJK UNIFIED IDEOGRAPH + {0xF7AF, 0x9CE2}, //21120 #CJK UNIFIED IDEOGRAPH + {0xF7B0, 0x977C}, //21121 #CJK UNIFIED IDEOGRAPH + {0xF7B1, 0x9785}, //21122 #CJK UNIFIED IDEOGRAPH + {0xF7B2, 0x9791}, //21123 #CJK UNIFIED IDEOGRAPH + {0xF7B3, 0x9792}, //21124 #CJK UNIFIED IDEOGRAPH + {0xF7B4, 0x9794}, //21125 #CJK UNIFIED IDEOGRAPH + {0xF7B5, 0x97AF}, //21126 #CJK UNIFIED IDEOGRAPH + {0xF7B6, 0x97AB}, //21127 #CJK UNIFIED IDEOGRAPH + {0xF7B7, 0x97A3}, //21128 #CJK UNIFIED IDEOGRAPH + {0xF7B8, 0x97B2}, //21129 #CJK UNIFIED IDEOGRAPH + {0xF7B9, 0x97B4}, //21130 #CJK UNIFIED IDEOGRAPH + {0xF7BA, 0x9AB1}, //21131 #CJK UNIFIED IDEOGRAPH + {0xF7BB, 0x9AB0}, //21132 #CJK UNIFIED IDEOGRAPH + {0xF7BC, 0x9AB7}, //21133 #CJK UNIFIED IDEOGRAPH + {0xF7BD, 0x9E58}, //21134 #CJK UNIFIED IDEOGRAPH + {0xF7BE, 0x9AB6}, //21135 #CJK UNIFIED IDEOGRAPH + {0xF7BF, 0x9ABA}, //21136 #CJK UNIFIED IDEOGRAPH + {0xF7C0, 0x9ABC}, //21137 #CJK UNIFIED IDEOGRAPH + {0xF7C1, 0x9AC1}, //21138 #CJK UNIFIED IDEOGRAPH + {0xF7C2, 0x9AC0}, //21139 #CJK UNIFIED IDEOGRAPH + {0xF7C3, 0x9AC5}, //21140 #CJK UNIFIED IDEOGRAPH + {0xF7C4, 0x9AC2}, //21141 #CJK UNIFIED IDEOGRAPH + {0xF7C5, 0x9ACB}, //21142 #CJK UNIFIED IDEOGRAPH + {0xF7C6, 0x9ACC}, //21143 #CJK UNIFIED IDEOGRAPH + {0xF7C7, 0x9AD1}, //21144 #CJK UNIFIED IDEOGRAPH + {0xF7C8, 0x9B45}, //21145 #CJK UNIFIED IDEOGRAPH + {0xF7C9, 0x9B43}, //21146 #CJK UNIFIED IDEOGRAPH + {0xF7CA, 0x9B47}, //21147 #CJK UNIFIED IDEOGRAPH + {0xF7CB, 0x9B49}, //21148 #CJK UNIFIED IDEOGRAPH + {0xF7CC, 0x9B48}, //21149 #CJK UNIFIED IDEOGRAPH + {0xF7CD, 0x9B4D}, //21150 #CJK UNIFIED IDEOGRAPH + {0xF7CE, 0x9B51}, //21151 #CJK UNIFIED IDEOGRAPH + {0xF7CF, 0x98E8}, //21152 #CJK UNIFIED IDEOGRAPH + {0xF7D0, 0x990D}, //21153 #CJK UNIFIED IDEOGRAPH + {0xF7D1, 0x992E}, //21154 #CJK UNIFIED IDEOGRAPH + {0xF7D2, 0x9955}, //21155 #CJK UNIFIED IDEOGRAPH + {0xF7D3, 0x9954}, //21156 #CJK UNIFIED IDEOGRAPH + {0xF7D4, 0x9ADF}, //21157 #CJK UNIFIED IDEOGRAPH + {0xF7D5, 0x9AE1}, //21158 #CJK UNIFIED IDEOGRAPH + {0xF7D6, 0x9AE6}, //21159 #CJK UNIFIED IDEOGRAPH + {0xF7D7, 0x9AEF}, //21160 #CJK UNIFIED IDEOGRAPH + {0xF7D8, 0x9AEB}, //21161 #CJK UNIFIED IDEOGRAPH + {0xF7D9, 0x9AFB}, //21162 #CJK UNIFIED IDEOGRAPH + {0xF7DA, 0x9AED}, //21163 #CJK UNIFIED IDEOGRAPH + {0xF7DB, 0x9AF9}, //21164 #CJK UNIFIED IDEOGRAPH + {0xF7DC, 0x9B08}, //21165 #CJK UNIFIED IDEOGRAPH + {0xF7DD, 0x9B0F}, //21166 #CJK UNIFIED IDEOGRAPH + {0xF7DE, 0x9B13}, //21167 #CJK UNIFIED IDEOGRAPH + {0xF7DF, 0x9B1F}, //21168 #CJK UNIFIED IDEOGRAPH + {0xF7E0, 0x9B23}, //21169 #CJK UNIFIED IDEOGRAPH + {0xF7E1, 0x9EBD}, //21170 #CJK UNIFIED IDEOGRAPH + {0xF7E2, 0x9EBE}, //21171 #CJK UNIFIED IDEOGRAPH + {0xF7E3, 0x7E3B}, //21172 #CJK UNIFIED IDEOGRAPH + {0xF7E4, 0x9E82}, //21173 #CJK UNIFIED IDEOGRAPH + {0xF7E5, 0x9E87}, //21174 #CJK UNIFIED IDEOGRAPH + {0xF7E6, 0x9E88}, //21175 #CJK UNIFIED IDEOGRAPH + {0xF7E7, 0x9E8B}, //21176 #CJK UNIFIED IDEOGRAPH + {0xF7E8, 0x9E92}, //21177 #CJK UNIFIED IDEOGRAPH + {0xF7E9, 0x93D6}, //21178 #CJK UNIFIED IDEOGRAPH + {0xF7EA, 0x9E9D}, //21179 #CJK UNIFIED IDEOGRAPH + {0xF7EB, 0x9E9F}, //21180 #CJK UNIFIED IDEOGRAPH + {0xF7EC, 0x9EDB}, //21181 #CJK UNIFIED IDEOGRAPH + {0xF7ED, 0x9EDC}, //21182 #CJK UNIFIED IDEOGRAPH + {0xF7EE, 0x9EDD}, //21183 #CJK UNIFIED IDEOGRAPH + {0xF7EF, 0x9EE0}, //21184 #CJK UNIFIED IDEOGRAPH + {0xF7F0, 0x9EDF}, //21185 #CJK UNIFIED IDEOGRAPH + {0xF7F1, 0x9EE2}, //21186 #CJK UNIFIED IDEOGRAPH + {0xF7F2, 0x9EE9}, //21187 #CJK UNIFIED IDEOGRAPH + {0xF7F3, 0x9EE7}, //21188 #CJK UNIFIED IDEOGRAPH + {0xF7F4, 0x9EE5}, //21189 #CJK UNIFIED IDEOGRAPH + {0xF7F5, 0x9EEA}, //21190 #CJK UNIFIED IDEOGRAPH + {0xF7F6, 0x9EEF}, //21191 #CJK UNIFIED IDEOGRAPH + {0xF7F7, 0x9F22}, //21192 #CJK UNIFIED IDEOGRAPH + {0xF7F8, 0x9F2C}, //21193 #CJK UNIFIED IDEOGRAPH + {0xF7F9, 0x9F2F}, //21194 #CJK UNIFIED IDEOGRAPH + {0xF7FA, 0x9F39}, //21195 #CJK UNIFIED IDEOGRAPH + {0xF7FB, 0x9F37}, //21196 #CJK UNIFIED IDEOGRAPH + {0xF7FC, 0x9F3D}, //21197 #CJK UNIFIED IDEOGRAPH + {0xF7FD, 0x9F3E}, //21198 #CJK UNIFIED IDEOGRAPH + {0xF7FE, 0x9F44}, //21199 #CJK UNIFIED IDEOGRAPH + {0xF840, 0x9CE3}, //21200 #CJK UNIFIED IDEOGRAPH + {0xF841, 0x9CE4}, //21201 #CJK UNIFIED IDEOGRAPH + {0xF842, 0x9CE5}, //21202 #CJK UNIFIED IDEOGRAPH + {0xF843, 0x9CE6}, //21203 #CJK UNIFIED IDEOGRAPH + {0xF844, 0x9CE7}, //21204 #CJK UNIFIED IDEOGRAPH + {0xF845, 0x9CE8}, //21205 #CJK UNIFIED IDEOGRAPH + {0xF846, 0x9CE9}, //21206 #CJK UNIFIED IDEOGRAPH + {0xF847, 0x9CEA}, //21207 #CJK UNIFIED IDEOGRAPH + {0xF848, 0x9CEB}, //21208 #CJK UNIFIED IDEOGRAPH + {0xF849, 0x9CEC}, //21209 #CJK UNIFIED IDEOGRAPH + {0xF84A, 0x9CED}, //21210 #CJK UNIFIED IDEOGRAPH + {0xF84B, 0x9CEE}, //21211 #CJK UNIFIED IDEOGRAPH + {0xF84C, 0x9CEF}, //21212 #CJK UNIFIED IDEOGRAPH + {0xF84D, 0x9CF0}, //21213 #CJK UNIFIED IDEOGRAPH + {0xF84E, 0x9CF1}, //21214 #CJK UNIFIED IDEOGRAPH + {0xF84F, 0x9CF2}, //21215 #CJK UNIFIED IDEOGRAPH + {0xF850, 0x9CF3}, //21216 #CJK UNIFIED IDEOGRAPH + {0xF851, 0x9CF4}, //21217 #CJK UNIFIED IDEOGRAPH + {0xF852, 0x9CF5}, //21218 #CJK UNIFIED IDEOGRAPH + {0xF853, 0x9CF6}, //21219 #CJK UNIFIED IDEOGRAPH + {0xF854, 0x9CF7}, //21220 #CJK UNIFIED IDEOGRAPH + {0xF855, 0x9CF8}, //21221 #CJK UNIFIED IDEOGRAPH + {0xF856, 0x9CF9}, //21222 #CJK UNIFIED IDEOGRAPH + {0xF857, 0x9CFA}, //21223 #CJK UNIFIED IDEOGRAPH + {0xF858, 0x9CFB}, //21224 #CJK UNIFIED IDEOGRAPH + {0xF859, 0x9CFC}, //21225 #CJK UNIFIED IDEOGRAPH + {0xF85A, 0x9CFD}, //21226 #CJK UNIFIED IDEOGRAPH + {0xF85B, 0x9CFE}, //21227 #CJK UNIFIED IDEOGRAPH + {0xF85C, 0x9CFF}, //21228 #CJK UNIFIED IDEOGRAPH + {0xF85D, 0x9D00}, //21229 #CJK UNIFIED IDEOGRAPH + {0xF85E, 0x9D01}, //21230 #CJK UNIFIED IDEOGRAPH + {0xF85F, 0x9D02}, //21231 #CJK UNIFIED IDEOGRAPH + {0xF860, 0x9D03}, //21232 #CJK UNIFIED IDEOGRAPH + {0xF861, 0x9D04}, //21233 #CJK UNIFIED IDEOGRAPH + {0xF862, 0x9D05}, //21234 #CJK UNIFIED IDEOGRAPH + {0xF863, 0x9D06}, //21235 #CJK UNIFIED IDEOGRAPH + {0xF864, 0x9D07}, //21236 #CJK UNIFIED IDEOGRAPH + {0xF865, 0x9D08}, //21237 #CJK UNIFIED IDEOGRAPH + {0xF866, 0x9D09}, //21238 #CJK UNIFIED IDEOGRAPH + {0xF867, 0x9D0A}, //21239 #CJK UNIFIED IDEOGRAPH + {0xF868, 0x9D0B}, //21240 #CJK UNIFIED IDEOGRAPH + {0xF869, 0x9D0C}, //21241 #CJK UNIFIED IDEOGRAPH + {0xF86A, 0x9D0D}, //21242 #CJK UNIFIED IDEOGRAPH + {0xF86B, 0x9D0E}, //21243 #CJK UNIFIED IDEOGRAPH + {0xF86C, 0x9D0F}, //21244 #CJK UNIFIED IDEOGRAPH + {0xF86D, 0x9D10}, //21245 #CJK UNIFIED IDEOGRAPH + {0xF86E, 0x9D11}, //21246 #CJK UNIFIED IDEOGRAPH + {0xF86F, 0x9D12}, //21247 #CJK UNIFIED IDEOGRAPH + {0xF870, 0x9D13}, //21248 #CJK UNIFIED IDEOGRAPH + {0xF871, 0x9D14}, //21249 #CJK UNIFIED IDEOGRAPH + {0xF872, 0x9D15}, //21250 #CJK UNIFIED IDEOGRAPH + {0xF873, 0x9D16}, //21251 #CJK UNIFIED IDEOGRAPH + {0xF874, 0x9D17}, //21252 #CJK UNIFIED IDEOGRAPH + {0xF875, 0x9D18}, //21253 #CJK UNIFIED IDEOGRAPH + {0xF876, 0x9D19}, //21254 #CJK UNIFIED IDEOGRAPH + {0xF877, 0x9D1A}, //21255 #CJK UNIFIED IDEOGRAPH + {0xF878, 0x9D1B}, //21256 #CJK UNIFIED IDEOGRAPH + {0xF879, 0x9D1C}, //21257 #CJK UNIFIED IDEOGRAPH + {0xF87A, 0x9D1D}, //21258 #CJK UNIFIED IDEOGRAPH + {0xF87B, 0x9D1E}, //21259 #CJK UNIFIED IDEOGRAPH + {0xF87C, 0x9D1F}, //21260 #CJK UNIFIED IDEOGRAPH + {0xF87D, 0x9D20}, //21261 #CJK UNIFIED IDEOGRAPH + {0xF87E, 0x9D21}, //21262 #CJK UNIFIED IDEOGRAPH + {0xF880, 0x9D22}, //21263 #CJK UNIFIED IDEOGRAPH + {0xF881, 0x9D23}, //21264 #CJK UNIFIED IDEOGRAPH + {0xF882, 0x9D24}, //21265 #CJK UNIFIED IDEOGRAPH + {0xF883, 0x9D25}, //21266 #CJK UNIFIED IDEOGRAPH + {0xF884, 0x9D26}, //21267 #CJK UNIFIED IDEOGRAPH + {0xF885, 0x9D27}, //21268 #CJK UNIFIED IDEOGRAPH + {0xF886, 0x9D28}, //21269 #CJK UNIFIED IDEOGRAPH + {0xF887, 0x9D29}, //21270 #CJK UNIFIED IDEOGRAPH + {0xF888, 0x9D2A}, //21271 #CJK UNIFIED IDEOGRAPH + {0xF889, 0x9D2B}, //21272 #CJK UNIFIED IDEOGRAPH + {0xF88A, 0x9D2C}, //21273 #CJK UNIFIED IDEOGRAPH + {0xF88B, 0x9D2D}, //21274 #CJK UNIFIED IDEOGRAPH + {0xF88C, 0x9D2E}, //21275 #CJK UNIFIED IDEOGRAPH + {0xF88D, 0x9D2F}, //21276 #CJK UNIFIED IDEOGRAPH + {0xF88E, 0x9D30}, //21277 #CJK UNIFIED IDEOGRAPH + {0xF88F, 0x9D31}, //21278 #CJK UNIFIED IDEOGRAPH + {0xF890, 0x9D32}, //21279 #CJK UNIFIED IDEOGRAPH + {0xF891, 0x9D33}, //21280 #CJK UNIFIED IDEOGRAPH + {0xF892, 0x9D34}, //21281 #CJK UNIFIED IDEOGRAPH + {0xF893, 0x9D35}, //21282 #CJK UNIFIED IDEOGRAPH + {0xF894, 0x9D36}, //21283 #CJK UNIFIED IDEOGRAPH + {0xF895, 0x9D37}, //21284 #CJK UNIFIED IDEOGRAPH + {0xF896, 0x9D38}, //21285 #CJK UNIFIED IDEOGRAPH + {0xF897, 0x9D39}, //21286 #CJK UNIFIED IDEOGRAPH + {0xF898, 0x9D3A}, //21287 #CJK UNIFIED IDEOGRAPH + {0xF899, 0x9D3B}, //21288 #CJK UNIFIED IDEOGRAPH + {0xF89A, 0x9D3C}, //21289 #CJK UNIFIED IDEOGRAPH + {0xF89B, 0x9D3D}, //21290 #CJK UNIFIED IDEOGRAPH + {0xF89C, 0x9D3E}, //21291 #CJK UNIFIED IDEOGRAPH + {0xF89D, 0x9D3F}, //21292 #CJK UNIFIED IDEOGRAPH + {0xF89E, 0x9D40}, //21293 #CJK UNIFIED IDEOGRAPH + {0xF89F, 0x9D41}, //21294 #CJK UNIFIED IDEOGRAPH + {0xF8A0, 0x9D42}, //21295 #CJK UNIFIED IDEOGRAPH + {0xF940, 0x9D43}, //21296 #CJK UNIFIED IDEOGRAPH + {0xF941, 0x9D44}, //21297 #CJK UNIFIED IDEOGRAPH + {0xF942, 0x9D45}, //21298 #CJK UNIFIED IDEOGRAPH + {0xF943, 0x9D46}, //21299 #CJK UNIFIED IDEOGRAPH + {0xF944, 0x9D47}, //21300 #CJK UNIFIED IDEOGRAPH + {0xF945, 0x9D48}, //21301 #CJK UNIFIED IDEOGRAPH + {0xF946, 0x9D49}, //21302 #CJK UNIFIED IDEOGRAPH + {0xF947, 0x9D4A}, //21303 #CJK UNIFIED IDEOGRAPH + {0xF948, 0x9D4B}, //21304 #CJK UNIFIED IDEOGRAPH + {0xF949, 0x9D4C}, //21305 #CJK UNIFIED IDEOGRAPH + {0xF94A, 0x9D4D}, //21306 #CJK UNIFIED IDEOGRAPH + {0xF94B, 0x9D4E}, //21307 #CJK UNIFIED IDEOGRAPH + {0xF94C, 0x9D4F}, //21308 #CJK UNIFIED IDEOGRAPH + {0xF94D, 0x9D50}, //21309 #CJK UNIFIED IDEOGRAPH + {0xF94E, 0x9D51}, //21310 #CJK UNIFIED IDEOGRAPH + {0xF94F, 0x9D52}, //21311 #CJK UNIFIED IDEOGRAPH + {0xF950, 0x9D53}, //21312 #CJK UNIFIED IDEOGRAPH + {0xF951, 0x9D54}, //21313 #CJK UNIFIED IDEOGRAPH + {0xF952, 0x9D55}, //21314 #CJK UNIFIED IDEOGRAPH + {0xF953, 0x9D56}, //21315 #CJK UNIFIED IDEOGRAPH + {0xF954, 0x9D57}, //21316 #CJK UNIFIED IDEOGRAPH + {0xF955, 0x9D58}, //21317 #CJK UNIFIED IDEOGRAPH + {0xF956, 0x9D59}, //21318 #CJK UNIFIED IDEOGRAPH + {0xF957, 0x9D5A}, //21319 #CJK UNIFIED IDEOGRAPH + {0xF958, 0x9D5B}, //21320 #CJK UNIFIED IDEOGRAPH + {0xF959, 0x9D5C}, //21321 #CJK UNIFIED IDEOGRAPH + {0xF95A, 0x9D5D}, //21322 #CJK UNIFIED IDEOGRAPH + {0xF95B, 0x9D5E}, //21323 #CJK UNIFIED IDEOGRAPH + {0xF95C, 0x9D5F}, //21324 #CJK UNIFIED IDEOGRAPH + {0xF95D, 0x9D60}, //21325 #CJK UNIFIED IDEOGRAPH + {0xF95E, 0x9D61}, //21326 #CJK UNIFIED IDEOGRAPH + {0xF95F, 0x9D62}, //21327 #CJK UNIFIED IDEOGRAPH + {0xF960, 0x9D63}, //21328 #CJK UNIFIED IDEOGRAPH + {0xF961, 0x9D64}, //21329 #CJK UNIFIED IDEOGRAPH + {0xF962, 0x9D65}, //21330 #CJK UNIFIED IDEOGRAPH + {0xF963, 0x9D66}, //21331 #CJK UNIFIED IDEOGRAPH + {0xF964, 0x9D67}, //21332 #CJK UNIFIED IDEOGRAPH + {0xF965, 0x9D68}, //21333 #CJK UNIFIED IDEOGRAPH + {0xF966, 0x9D69}, //21334 #CJK UNIFIED IDEOGRAPH + {0xF967, 0x9D6A}, //21335 #CJK UNIFIED IDEOGRAPH + {0xF968, 0x9D6B}, //21336 #CJK UNIFIED IDEOGRAPH + {0xF969, 0x9D6C}, //21337 #CJK UNIFIED IDEOGRAPH + {0xF96A, 0x9D6D}, //21338 #CJK UNIFIED IDEOGRAPH + {0xF96B, 0x9D6E}, //21339 #CJK UNIFIED IDEOGRAPH + {0xF96C, 0x9D6F}, //21340 #CJK UNIFIED IDEOGRAPH + {0xF96D, 0x9D70}, //21341 #CJK UNIFIED IDEOGRAPH + {0xF96E, 0x9D71}, //21342 #CJK UNIFIED IDEOGRAPH + {0xF96F, 0x9D72}, //21343 #CJK UNIFIED IDEOGRAPH + {0xF970, 0x9D73}, //21344 #CJK UNIFIED IDEOGRAPH + {0xF971, 0x9D74}, //21345 #CJK UNIFIED IDEOGRAPH + {0xF972, 0x9D75}, //21346 #CJK UNIFIED IDEOGRAPH + {0xF973, 0x9D76}, //21347 #CJK UNIFIED IDEOGRAPH + {0xF974, 0x9D77}, //21348 #CJK UNIFIED IDEOGRAPH + {0xF975, 0x9D78}, //21349 #CJK UNIFIED IDEOGRAPH + {0xF976, 0x9D79}, //21350 #CJK UNIFIED IDEOGRAPH + {0xF977, 0x9D7A}, //21351 #CJK UNIFIED IDEOGRAPH + {0xF978, 0x9D7B}, //21352 #CJK UNIFIED IDEOGRAPH + {0xF979, 0x9D7C}, //21353 #CJK UNIFIED IDEOGRAPH + {0xF97A, 0x9D7D}, //21354 #CJK UNIFIED IDEOGRAPH + {0xF97B, 0x9D7E}, //21355 #CJK UNIFIED IDEOGRAPH + {0xF97C, 0x9D7F}, //21356 #CJK UNIFIED IDEOGRAPH + {0xF97D, 0x9D80}, //21357 #CJK UNIFIED IDEOGRAPH + {0xF97E, 0x9D81}, //21358 #CJK UNIFIED IDEOGRAPH + {0xF980, 0x9D82}, //21359 #CJK UNIFIED IDEOGRAPH + {0xF981, 0x9D83}, //21360 #CJK UNIFIED IDEOGRAPH + {0xF982, 0x9D84}, //21361 #CJK UNIFIED IDEOGRAPH + {0xF983, 0x9D85}, //21362 #CJK UNIFIED IDEOGRAPH + {0xF984, 0x9D86}, //21363 #CJK UNIFIED IDEOGRAPH + {0xF985, 0x9D87}, //21364 #CJK UNIFIED IDEOGRAPH + {0xF986, 0x9D88}, //21365 #CJK UNIFIED IDEOGRAPH + {0xF987, 0x9D89}, //21366 #CJK UNIFIED IDEOGRAPH + {0xF988, 0x9D8A}, //21367 #CJK UNIFIED IDEOGRAPH + {0xF989, 0x9D8B}, //21368 #CJK UNIFIED IDEOGRAPH + {0xF98A, 0x9D8C}, //21369 #CJK UNIFIED IDEOGRAPH + {0xF98B, 0x9D8D}, //21370 #CJK UNIFIED IDEOGRAPH + {0xF98C, 0x9D8E}, //21371 #CJK UNIFIED IDEOGRAPH + {0xF98D, 0x9D8F}, //21372 #CJK UNIFIED IDEOGRAPH + {0xF98E, 0x9D90}, //21373 #CJK UNIFIED IDEOGRAPH + {0xF98F, 0x9D91}, //21374 #CJK UNIFIED IDEOGRAPH + {0xF990, 0x9D92}, //21375 #CJK UNIFIED IDEOGRAPH + {0xF991, 0x9D93}, //21376 #CJK UNIFIED IDEOGRAPH + {0xF992, 0x9D94}, //21377 #CJK UNIFIED IDEOGRAPH + {0xF993, 0x9D95}, //21378 #CJK UNIFIED IDEOGRAPH + {0xF994, 0x9D96}, //21379 #CJK UNIFIED IDEOGRAPH + {0xF995, 0x9D97}, //21380 #CJK UNIFIED IDEOGRAPH + {0xF996, 0x9D98}, //21381 #CJK UNIFIED IDEOGRAPH + {0xF997, 0x9D99}, //21382 #CJK UNIFIED IDEOGRAPH + {0xF998, 0x9D9A}, //21383 #CJK UNIFIED IDEOGRAPH + {0xF999, 0x9D9B}, //21384 #CJK UNIFIED IDEOGRAPH + {0xF99A, 0x9D9C}, //21385 #CJK UNIFIED IDEOGRAPH + {0xF99B, 0x9D9D}, //21386 #CJK UNIFIED IDEOGRAPH + {0xF99C, 0x9D9E}, //21387 #CJK UNIFIED IDEOGRAPH + {0xF99D, 0x9D9F}, //21388 #CJK UNIFIED IDEOGRAPH + {0xF99E, 0x9DA0}, //21389 #CJK UNIFIED IDEOGRAPH + {0xF99F, 0x9DA1}, //21390 #CJK UNIFIED IDEOGRAPH + {0xF9A0, 0x9DA2}, //21391 #CJK UNIFIED IDEOGRAPH + {0xFA40, 0x9DA3}, //21392 #CJK UNIFIED IDEOGRAPH + {0xFA41, 0x9DA4}, //21393 #CJK UNIFIED IDEOGRAPH + {0xFA42, 0x9DA5}, //21394 #CJK UNIFIED IDEOGRAPH + {0xFA43, 0x9DA6}, //21395 #CJK UNIFIED IDEOGRAPH + {0xFA44, 0x9DA7}, //21396 #CJK UNIFIED IDEOGRAPH + {0xFA45, 0x9DA8}, //21397 #CJK UNIFIED IDEOGRAPH + {0xFA46, 0x9DA9}, //21398 #CJK UNIFIED IDEOGRAPH + {0xFA47, 0x9DAA}, //21399 #CJK UNIFIED IDEOGRAPH + {0xFA48, 0x9DAB}, //21400 #CJK UNIFIED IDEOGRAPH + {0xFA49, 0x9DAC}, //21401 #CJK UNIFIED IDEOGRAPH + {0xFA4A, 0x9DAD}, //21402 #CJK UNIFIED IDEOGRAPH + {0xFA4B, 0x9DAE}, //21403 #CJK UNIFIED IDEOGRAPH + {0xFA4C, 0x9DAF}, //21404 #CJK UNIFIED IDEOGRAPH + {0xFA4D, 0x9DB0}, //21405 #CJK UNIFIED IDEOGRAPH + {0xFA4E, 0x9DB1}, //21406 #CJK UNIFIED IDEOGRAPH + {0xFA4F, 0x9DB2}, //21407 #CJK UNIFIED IDEOGRAPH + {0xFA50, 0x9DB3}, //21408 #CJK UNIFIED IDEOGRAPH + {0xFA51, 0x9DB4}, //21409 #CJK UNIFIED IDEOGRAPH + {0xFA52, 0x9DB5}, //21410 #CJK UNIFIED IDEOGRAPH + {0xFA53, 0x9DB6}, //21411 #CJK UNIFIED IDEOGRAPH + {0xFA54, 0x9DB7}, //21412 #CJK UNIFIED IDEOGRAPH + {0xFA55, 0x9DB8}, //21413 #CJK UNIFIED IDEOGRAPH + {0xFA56, 0x9DB9}, //21414 #CJK UNIFIED IDEOGRAPH + {0xFA57, 0x9DBA}, //21415 #CJK UNIFIED IDEOGRAPH + {0xFA58, 0x9DBB}, //21416 #CJK UNIFIED IDEOGRAPH + {0xFA59, 0x9DBC}, //21417 #CJK UNIFIED IDEOGRAPH + {0xFA5A, 0x9DBD}, //21418 #CJK UNIFIED IDEOGRAPH + {0xFA5B, 0x9DBE}, //21419 #CJK UNIFIED IDEOGRAPH + {0xFA5C, 0x9DBF}, //21420 #CJK UNIFIED IDEOGRAPH + {0xFA5D, 0x9DC0}, //21421 #CJK UNIFIED IDEOGRAPH + {0xFA5E, 0x9DC1}, //21422 #CJK UNIFIED IDEOGRAPH + {0xFA5F, 0x9DC2}, //21423 #CJK UNIFIED IDEOGRAPH + {0xFA60, 0x9DC3}, //21424 #CJK UNIFIED IDEOGRAPH + {0xFA61, 0x9DC4}, //21425 #CJK UNIFIED IDEOGRAPH + {0xFA62, 0x9DC5}, //21426 #CJK UNIFIED IDEOGRAPH + {0xFA63, 0x9DC6}, //21427 #CJK UNIFIED IDEOGRAPH + {0xFA64, 0x9DC7}, //21428 #CJK UNIFIED IDEOGRAPH + {0xFA65, 0x9DC8}, //21429 #CJK UNIFIED IDEOGRAPH + {0xFA66, 0x9DC9}, //21430 #CJK UNIFIED IDEOGRAPH + {0xFA67, 0x9DCA}, //21431 #CJK UNIFIED IDEOGRAPH + {0xFA68, 0x9DCB}, //21432 #CJK UNIFIED IDEOGRAPH + {0xFA69, 0x9DCC}, //21433 #CJK UNIFIED IDEOGRAPH + {0xFA6A, 0x9DCD}, //21434 #CJK UNIFIED IDEOGRAPH + {0xFA6B, 0x9DCE}, //21435 #CJK UNIFIED IDEOGRAPH + {0xFA6C, 0x9DCF}, //21436 #CJK UNIFIED IDEOGRAPH + {0xFA6D, 0x9DD0}, //21437 #CJK UNIFIED IDEOGRAPH + {0xFA6E, 0x9DD1}, //21438 #CJK UNIFIED IDEOGRAPH + {0xFA6F, 0x9DD2}, //21439 #CJK UNIFIED IDEOGRAPH + {0xFA70, 0x9DD3}, //21440 #CJK UNIFIED IDEOGRAPH + {0xFA71, 0x9DD4}, //21441 #CJK UNIFIED IDEOGRAPH + {0xFA72, 0x9DD5}, //21442 #CJK UNIFIED IDEOGRAPH + {0xFA73, 0x9DD6}, //21443 #CJK UNIFIED IDEOGRAPH + {0xFA74, 0x9DD7}, //21444 #CJK UNIFIED IDEOGRAPH + {0xFA75, 0x9DD8}, //21445 #CJK UNIFIED IDEOGRAPH + {0xFA76, 0x9DD9}, //21446 #CJK UNIFIED IDEOGRAPH + {0xFA77, 0x9DDA}, //21447 #CJK UNIFIED IDEOGRAPH + {0xFA78, 0x9DDB}, //21448 #CJK UNIFIED IDEOGRAPH + {0xFA79, 0x9DDC}, //21449 #CJK UNIFIED IDEOGRAPH + {0xFA7A, 0x9DDD}, //21450 #CJK UNIFIED IDEOGRAPH + {0xFA7B, 0x9DDE}, //21451 #CJK UNIFIED IDEOGRAPH + {0xFA7C, 0x9DDF}, //21452 #CJK UNIFIED IDEOGRAPH + {0xFA7D, 0x9DE0}, //21453 #CJK UNIFIED IDEOGRAPH + {0xFA7E, 0x9DE1}, //21454 #CJK UNIFIED IDEOGRAPH + {0xFA80, 0x9DE2}, //21455 #CJK UNIFIED IDEOGRAPH + {0xFA81, 0x9DE3}, //21456 #CJK UNIFIED IDEOGRAPH + {0xFA82, 0x9DE4}, //21457 #CJK UNIFIED IDEOGRAPH + {0xFA83, 0x9DE5}, //21458 #CJK UNIFIED IDEOGRAPH + {0xFA84, 0x9DE6}, //21459 #CJK UNIFIED IDEOGRAPH + {0xFA85, 0x9DE7}, //21460 #CJK UNIFIED IDEOGRAPH + {0xFA86, 0x9DE8}, //21461 #CJK UNIFIED IDEOGRAPH + {0xFA87, 0x9DE9}, //21462 #CJK UNIFIED IDEOGRAPH + {0xFA88, 0x9DEA}, //21463 #CJK UNIFIED IDEOGRAPH + {0xFA89, 0x9DEB}, //21464 #CJK UNIFIED IDEOGRAPH + {0xFA8A, 0x9DEC}, //21465 #CJK UNIFIED IDEOGRAPH + {0xFA8B, 0x9DED}, //21466 #CJK UNIFIED IDEOGRAPH + {0xFA8C, 0x9DEE}, //21467 #CJK UNIFIED IDEOGRAPH + {0xFA8D, 0x9DEF}, //21468 #CJK UNIFIED IDEOGRAPH + {0xFA8E, 0x9DF0}, //21469 #CJK UNIFIED IDEOGRAPH + {0xFA8F, 0x9DF1}, //21470 #CJK UNIFIED IDEOGRAPH + {0xFA90, 0x9DF2}, //21471 #CJK UNIFIED IDEOGRAPH + {0xFA91, 0x9DF3}, //21472 #CJK UNIFIED IDEOGRAPH + {0xFA92, 0x9DF4}, //21473 #CJK UNIFIED IDEOGRAPH + {0xFA93, 0x9DF5}, //21474 #CJK UNIFIED IDEOGRAPH + {0xFA94, 0x9DF6}, //21475 #CJK UNIFIED IDEOGRAPH + {0xFA95, 0x9DF7}, //21476 #CJK UNIFIED IDEOGRAPH + {0xFA96, 0x9DF8}, //21477 #CJK UNIFIED IDEOGRAPH + {0xFA97, 0x9DF9}, //21478 #CJK UNIFIED IDEOGRAPH + {0xFA98, 0x9DFA}, //21479 #CJK UNIFIED IDEOGRAPH + {0xFA99, 0x9DFB}, //21480 #CJK UNIFIED IDEOGRAPH + {0xFA9A, 0x9DFC}, //21481 #CJK UNIFIED IDEOGRAPH + {0xFA9B, 0x9DFD}, //21482 #CJK UNIFIED IDEOGRAPH + {0xFA9C, 0x9DFE}, //21483 #CJK UNIFIED IDEOGRAPH + {0xFA9D, 0x9DFF}, //21484 #CJK UNIFIED IDEOGRAPH + {0xFA9E, 0x9E00}, //21485 #CJK UNIFIED IDEOGRAPH + {0xFA9F, 0x9E01}, //21486 #CJK UNIFIED IDEOGRAPH + {0xFAA0, 0x9E02}, //21487 #CJK UNIFIED IDEOGRAPH + {0xFB40, 0x9E03}, //21488 #CJK UNIFIED IDEOGRAPH + {0xFB41, 0x9E04}, //21489 #CJK UNIFIED IDEOGRAPH + {0xFB42, 0x9E05}, //21490 #CJK UNIFIED IDEOGRAPH + {0xFB43, 0x9E06}, //21491 #CJK UNIFIED IDEOGRAPH + {0xFB44, 0x9E07}, //21492 #CJK UNIFIED IDEOGRAPH + {0xFB45, 0x9E08}, //21493 #CJK UNIFIED IDEOGRAPH + {0xFB46, 0x9E09}, //21494 #CJK UNIFIED IDEOGRAPH + {0xFB47, 0x9E0A}, //21495 #CJK UNIFIED IDEOGRAPH + {0xFB48, 0x9E0B}, //21496 #CJK UNIFIED IDEOGRAPH + {0xFB49, 0x9E0C}, //21497 #CJK UNIFIED IDEOGRAPH + {0xFB4A, 0x9E0D}, //21498 #CJK UNIFIED IDEOGRAPH + {0xFB4B, 0x9E0E}, //21499 #CJK UNIFIED IDEOGRAPH + {0xFB4C, 0x9E0F}, //21500 #CJK UNIFIED IDEOGRAPH + {0xFB4D, 0x9E10}, //21501 #CJK UNIFIED IDEOGRAPH + {0xFB4E, 0x9E11}, //21502 #CJK UNIFIED IDEOGRAPH + {0xFB4F, 0x9E12}, //21503 #CJK UNIFIED IDEOGRAPH + {0xFB50, 0x9E13}, //21504 #CJK UNIFIED IDEOGRAPH + {0xFB51, 0x9E14}, //21505 #CJK UNIFIED IDEOGRAPH + {0xFB52, 0x9E15}, //21506 #CJK UNIFIED IDEOGRAPH + {0xFB53, 0x9E16}, //21507 #CJK UNIFIED IDEOGRAPH + {0xFB54, 0x9E17}, //21508 #CJK UNIFIED IDEOGRAPH + {0xFB55, 0x9E18}, //21509 #CJK UNIFIED IDEOGRAPH + {0xFB56, 0x9E19}, //21510 #CJK UNIFIED IDEOGRAPH + {0xFB57, 0x9E1A}, //21511 #CJK UNIFIED IDEOGRAPH + {0xFB58, 0x9E1B}, //21512 #CJK UNIFIED IDEOGRAPH + {0xFB59, 0x9E1C}, //21513 #CJK UNIFIED IDEOGRAPH + {0xFB5A, 0x9E1D}, //21514 #CJK UNIFIED IDEOGRAPH + {0xFB5B, 0x9E1E}, //21515 #CJK UNIFIED IDEOGRAPH + {0xFB5C, 0x9E24}, //21516 #CJK UNIFIED IDEOGRAPH + {0xFB5D, 0x9E27}, //21517 #CJK UNIFIED IDEOGRAPH + {0xFB5E, 0x9E2E}, //21518 #CJK UNIFIED IDEOGRAPH + {0xFB5F, 0x9E30}, //21519 #CJK UNIFIED IDEOGRAPH + {0xFB60, 0x9E34}, //21520 #CJK UNIFIED IDEOGRAPH + {0xFB61, 0x9E3B}, //21521 #CJK UNIFIED IDEOGRAPH + {0xFB62, 0x9E3C}, //21522 #CJK UNIFIED IDEOGRAPH + {0xFB63, 0x9E40}, //21523 #CJK UNIFIED IDEOGRAPH + {0xFB64, 0x9E4D}, //21524 #CJK UNIFIED IDEOGRAPH + {0xFB65, 0x9E50}, //21525 #CJK UNIFIED IDEOGRAPH + {0xFB66, 0x9E52}, //21526 #CJK UNIFIED IDEOGRAPH + {0xFB67, 0x9E53}, //21527 #CJK UNIFIED IDEOGRAPH + {0xFB68, 0x9E54}, //21528 #CJK UNIFIED IDEOGRAPH + {0xFB69, 0x9E56}, //21529 #CJK UNIFIED IDEOGRAPH + {0xFB6A, 0x9E59}, //21530 #CJK UNIFIED IDEOGRAPH + {0xFB6B, 0x9E5D}, //21531 #CJK UNIFIED IDEOGRAPH + {0xFB6C, 0x9E5F}, //21532 #CJK UNIFIED IDEOGRAPH + {0xFB6D, 0x9E60}, //21533 #CJK UNIFIED IDEOGRAPH + {0xFB6E, 0x9E61}, //21534 #CJK UNIFIED IDEOGRAPH + {0xFB6F, 0x9E62}, //21535 #CJK UNIFIED IDEOGRAPH + {0xFB70, 0x9E65}, //21536 #CJK UNIFIED IDEOGRAPH + {0xFB71, 0x9E6E}, //21537 #CJK UNIFIED IDEOGRAPH + {0xFB72, 0x9E6F}, //21538 #CJK UNIFIED IDEOGRAPH + {0xFB73, 0x9E72}, //21539 #CJK UNIFIED IDEOGRAPH + {0xFB74, 0x9E74}, //21540 #CJK UNIFIED IDEOGRAPH + {0xFB75, 0x9E75}, //21541 #CJK UNIFIED IDEOGRAPH + {0xFB76, 0x9E76}, //21542 #CJK UNIFIED IDEOGRAPH + {0xFB77, 0x9E77}, //21543 #CJK UNIFIED IDEOGRAPH + {0xFB78, 0x9E78}, //21544 #CJK UNIFIED IDEOGRAPH + {0xFB79, 0x9E79}, //21545 #CJK UNIFIED IDEOGRAPH + {0xFB7A, 0x9E7A}, //21546 #CJK UNIFIED IDEOGRAPH + {0xFB7B, 0x9E7B}, //21547 #CJK UNIFIED IDEOGRAPH + {0xFB7C, 0x9E7C}, //21548 #CJK UNIFIED IDEOGRAPH + {0xFB7D, 0x9E7D}, //21549 #CJK UNIFIED IDEOGRAPH + {0xFB7E, 0x9E80}, //21550 #CJK UNIFIED IDEOGRAPH + {0xFB80, 0x9E81}, //21551 #CJK UNIFIED IDEOGRAPH + {0xFB81, 0x9E83}, //21552 #CJK UNIFIED IDEOGRAPH + {0xFB82, 0x9E84}, //21553 #CJK UNIFIED IDEOGRAPH + {0xFB83, 0x9E85}, //21554 #CJK UNIFIED IDEOGRAPH + {0xFB84, 0x9E86}, //21555 #CJK UNIFIED IDEOGRAPH + {0xFB85, 0x9E89}, //21556 #CJK UNIFIED IDEOGRAPH + {0xFB86, 0x9E8A}, //21557 #CJK UNIFIED IDEOGRAPH + {0xFB87, 0x9E8C}, //21558 #CJK UNIFIED IDEOGRAPH + {0xFB88, 0x9E8D}, //21559 #CJK UNIFIED IDEOGRAPH + {0xFB89, 0x9E8E}, //21560 #CJK UNIFIED IDEOGRAPH + {0xFB8A, 0x9E8F}, //21561 #CJK UNIFIED IDEOGRAPH + {0xFB8B, 0x9E90}, //21562 #CJK UNIFIED IDEOGRAPH + {0xFB8C, 0x9E91}, //21563 #CJK UNIFIED IDEOGRAPH + {0xFB8D, 0x9E94}, //21564 #CJK UNIFIED IDEOGRAPH + {0xFB8E, 0x9E95}, //21565 #CJK UNIFIED IDEOGRAPH + {0xFB8F, 0x9E96}, //21566 #CJK UNIFIED IDEOGRAPH + {0xFB90, 0x9E97}, //21567 #CJK UNIFIED IDEOGRAPH + {0xFB91, 0x9E98}, //21568 #CJK UNIFIED IDEOGRAPH + {0xFB92, 0x9E99}, //21569 #CJK UNIFIED IDEOGRAPH + {0xFB93, 0x9E9A}, //21570 #CJK UNIFIED IDEOGRAPH + {0xFB94, 0x9E9B}, //21571 #CJK UNIFIED IDEOGRAPH + {0xFB95, 0x9E9C}, //21572 #CJK UNIFIED IDEOGRAPH + {0xFB96, 0x9E9E}, //21573 #CJK UNIFIED IDEOGRAPH + {0xFB97, 0x9EA0}, //21574 #CJK UNIFIED IDEOGRAPH + {0xFB98, 0x9EA1}, //21575 #CJK UNIFIED IDEOGRAPH + {0xFB99, 0x9EA2}, //21576 #CJK UNIFIED IDEOGRAPH + {0xFB9A, 0x9EA3}, //21577 #CJK UNIFIED IDEOGRAPH + {0xFB9B, 0x9EA4}, //21578 #CJK UNIFIED IDEOGRAPH + {0xFB9C, 0x9EA5}, //21579 #CJK UNIFIED IDEOGRAPH + {0xFB9D, 0x9EA7}, //21580 #CJK UNIFIED IDEOGRAPH + {0xFB9E, 0x9EA8}, //21581 #CJK UNIFIED IDEOGRAPH + {0xFB9F, 0x9EA9}, //21582 #CJK UNIFIED IDEOGRAPH + {0xFBA0, 0x9EAA}, //21583 #CJK UNIFIED IDEOGRAPH + {0xFC40, 0x9EAB}, //21584 #CJK UNIFIED IDEOGRAPH + {0xFC41, 0x9EAC}, //21585 #CJK UNIFIED IDEOGRAPH + {0xFC42, 0x9EAD}, //21586 #CJK UNIFIED IDEOGRAPH + {0xFC43, 0x9EAE}, //21587 #CJK UNIFIED IDEOGRAPH + {0xFC44, 0x9EAF}, //21588 #CJK UNIFIED IDEOGRAPH + {0xFC45, 0x9EB0}, //21589 #CJK UNIFIED IDEOGRAPH + {0xFC46, 0x9EB1}, //21590 #CJK UNIFIED IDEOGRAPH + {0xFC47, 0x9EB2}, //21591 #CJK UNIFIED IDEOGRAPH + {0xFC48, 0x9EB3}, //21592 #CJK UNIFIED IDEOGRAPH + {0xFC49, 0x9EB5}, //21593 #CJK UNIFIED IDEOGRAPH + {0xFC4A, 0x9EB6}, //21594 #CJK UNIFIED IDEOGRAPH + {0xFC4B, 0x9EB7}, //21595 #CJK UNIFIED IDEOGRAPH + {0xFC4C, 0x9EB9}, //21596 #CJK UNIFIED IDEOGRAPH + {0xFC4D, 0x9EBA}, //21597 #CJK UNIFIED IDEOGRAPH + {0xFC4E, 0x9EBC}, //21598 #CJK UNIFIED IDEOGRAPH + {0xFC4F, 0x9EBF}, //21599 #CJK UNIFIED IDEOGRAPH + {0xFC50, 0x9EC0}, //21600 #CJK UNIFIED IDEOGRAPH + {0xFC51, 0x9EC1}, //21601 #CJK UNIFIED IDEOGRAPH + {0xFC52, 0x9EC2}, //21602 #CJK UNIFIED IDEOGRAPH + {0xFC53, 0x9EC3}, //21603 #CJK UNIFIED IDEOGRAPH + {0xFC54, 0x9EC5}, //21604 #CJK UNIFIED IDEOGRAPH + {0xFC55, 0x9EC6}, //21605 #CJK UNIFIED IDEOGRAPH + {0xFC56, 0x9EC7}, //21606 #CJK UNIFIED IDEOGRAPH + {0xFC57, 0x9EC8}, //21607 #CJK UNIFIED IDEOGRAPH + {0xFC58, 0x9ECA}, //21608 #CJK UNIFIED IDEOGRAPH + {0xFC59, 0x9ECB}, //21609 #CJK UNIFIED IDEOGRAPH + {0xFC5A, 0x9ECC}, //21610 #CJK UNIFIED IDEOGRAPH + {0xFC5B, 0x9ED0}, //21611 #CJK UNIFIED IDEOGRAPH + {0xFC5C, 0x9ED2}, //21612 #CJK UNIFIED IDEOGRAPH + {0xFC5D, 0x9ED3}, //21613 #CJK UNIFIED IDEOGRAPH + {0xFC5E, 0x9ED5}, //21614 #CJK UNIFIED IDEOGRAPH + {0xFC5F, 0x9ED6}, //21615 #CJK UNIFIED IDEOGRAPH + {0xFC60, 0x9ED7}, //21616 #CJK UNIFIED IDEOGRAPH + {0xFC61, 0x9ED9}, //21617 #CJK UNIFIED IDEOGRAPH + {0xFC62, 0x9EDA}, //21618 #CJK UNIFIED IDEOGRAPH + {0xFC63, 0x9EDE}, //21619 #CJK UNIFIED IDEOGRAPH + {0xFC64, 0x9EE1}, //21620 #CJK UNIFIED IDEOGRAPH + {0xFC65, 0x9EE3}, //21621 #CJK UNIFIED IDEOGRAPH + {0xFC66, 0x9EE4}, //21622 #CJK UNIFIED IDEOGRAPH + {0xFC67, 0x9EE6}, //21623 #CJK UNIFIED IDEOGRAPH + {0xFC68, 0x9EE8}, //21624 #CJK UNIFIED IDEOGRAPH + {0xFC69, 0x9EEB}, //21625 #CJK UNIFIED IDEOGRAPH + {0xFC6A, 0x9EEC}, //21626 #CJK UNIFIED IDEOGRAPH + {0xFC6B, 0x9EED}, //21627 #CJK UNIFIED IDEOGRAPH + {0xFC6C, 0x9EEE}, //21628 #CJK UNIFIED IDEOGRAPH + {0xFC6D, 0x9EF0}, //21629 #CJK UNIFIED IDEOGRAPH + {0xFC6E, 0x9EF1}, //21630 #CJK UNIFIED IDEOGRAPH + {0xFC6F, 0x9EF2}, //21631 #CJK UNIFIED IDEOGRAPH + {0xFC70, 0x9EF3}, //21632 #CJK UNIFIED IDEOGRAPH + {0xFC71, 0x9EF4}, //21633 #CJK UNIFIED IDEOGRAPH + {0xFC72, 0x9EF5}, //21634 #CJK UNIFIED IDEOGRAPH + {0xFC73, 0x9EF6}, //21635 #CJK UNIFIED IDEOGRAPH + {0xFC74, 0x9EF7}, //21636 #CJK UNIFIED IDEOGRAPH + {0xFC75, 0x9EF8}, //21637 #CJK UNIFIED IDEOGRAPH + {0xFC76, 0x9EFA}, //21638 #CJK UNIFIED IDEOGRAPH + {0xFC77, 0x9EFD}, //21639 #CJK UNIFIED IDEOGRAPH + {0xFC78, 0x9EFF}, //21640 #CJK UNIFIED IDEOGRAPH + {0xFC79, 0x9F00}, //21641 #CJK UNIFIED IDEOGRAPH + {0xFC7A, 0x9F01}, //21642 #CJK UNIFIED IDEOGRAPH + {0xFC7B, 0x9F02}, //21643 #CJK UNIFIED IDEOGRAPH + {0xFC7C, 0x9F03}, //21644 #CJK UNIFIED IDEOGRAPH + {0xFC7D, 0x9F04}, //21645 #CJK UNIFIED IDEOGRAPH + {0xFC7E, 0x9F05}, //21646 #CJK UNIFIED IDEOGRAPH + {0xFC80, 0x9F06}, //21647 #CJK UNIFIED IDEOGRAPH + {0xFC81, 0x9F07}, //21648 #CJK UNIFIED IDEOGRAPH + {0xFC82, 0x9F08}, //21649 #CJK UNIFIED IDEOGRAPH + {0xFC83, 0x9F09}, //21650 #CJK UNIFIED IDEOGRAPH + {0xFC84, 0x9F0A}, //21651 #CJK UNIFIED IDEOGRAPH + {0xFC85, 0x9F0C}, //21652 #CJK UNIFIED IDEOGRAPH + {0xFC86, 0x9F0F}, //21653 #CJK UNIFIED IDEOGRAPH + {0xFC87, 0x9F11}, //21654 #CJK UNIFIED IDEOGRAPH + {0xFC88, 0x9F12}, //21655 #CJK UNIFIED IDEOGRAPH + {0xFC89, 0x9F14}, //21656 #CJK UNIFIED IDEOGRAPH + {0xFC8A, 0x9F15}, //21657 #CJK UNIFIED IDEOGRAPH + {0xFC8B, 0x9F16}, //21658 #CJK UNIFIED IDEOGRAPH + {0xFC8C, 0x9F18}, //21659 #CJK UNIFIED IDEOGRAPH + {0xFC8D, 0x9F1A}, //21660 #CJK UNIFIED IDEOGRAPH + {0xFC8E, 0x9F1B}, //21661 #CJK UNIFIED IDEOGRAPH + {0xFC8F, 0x9F1C}, //21662 #CJK UNIFIED IDEOGRAPH + {0xFC90, 0x9F1D}, //21663 #CJK UNIFIED IDEOGRAPH + {0xFC91, 0x9F1E}, //21664 #CJK UNIFIED IDEOGRAPH + {0xFC92, 0x9F1F}, //21665 #CJK UNIFIED IDEOGRAPH + {0xFC93, 0x9F21}, //21666 #CJK UNIFIED IDEOGRAPH + {0xFC94, 0x9F23}, //21667 #CJK UNIFIED IDEOGRAPH + {0xFC95, 0x9F24}, //21668 #CJK UNIFIED IDEOGRAPH + {0xFC96, 0x9F25}, //21669 #CJK UNIFIED IDEOGRAPH + {0xFC97, 0x9F26}, //21670 #CJK UNIFIED IDEOGRAPH + {0xFC98, 0x9F27}, //21671 #CJK UNIFIED IDEOGRAPH + {0xFC99, 0x9F28}, //21672 #CJK UNIFIED IDEOGRAPH + {0xFC9A, 0x9F29}, //21673 #CJK UNIFIED IDEOGRAPH + {0xFC9B, 0x9F2A}, //21674 #CJK UNIFIED IDEOGRAPH + {0xFC9C, 0x9F2B}, //21675 #CJK UNIFIED IDEOGRAPH + {0xFC9D, 0x9F2D}, //21676 #CJK UNIFIED IDEOGRAPH + {0xFC9E, 0x9F2E}, //21677 #CJK UNIFIED IDEOGRAPH + {0xFC9F, 0x9F30}, //21678 #CJK UNIFIED IDEOGRAPH + {0xFCA0, 0x9F31}, //21679 #CJK UNIFIED IDEOGRAPH + {0xFD40, 0x9F32}, //21680 #CJK UNIFIED IDEOGRAPH + {0xFD41, 0x9F33}, //21681 #CJK UNIFIED IDEOGRAPH + {0xFD42, 0x9F34}, //21682 #CJK UNIFIED IDEOGRAPH + {0xFD43, 0x9F35}, //21683 #CJK UNIFIED IDEOGRAPH + {0xFD44, 0x9F36}, //21684 #CJK UNIFIED IDEOGRAPH + {0xFD45, 0x9F38}, //21685 #CJK UNIFIED IDEOGRAPH + {0xFD46, 0x9F3A}, //21686 #CJK UNIFIED IDEOGRAPH + {0xFD47, 0x9F3C}, //21687 #CJK UNIFIED IDEOGRAPH + {0xFD48, 0x9F3F}, //21688 #CJK UNIFIED IDEOGRAPH + {0xFD49, 0x9F40}, //21689 #CJK UNIFIED IDEOGRAPH + {0xFD4A, 0x9F41}, //21690 #CJK UNIFIED IDEOGRAPH + {0xFD4B, 0x9F42}, //21691 #CJK UNIFIED IDEOGRAPH + {0xFD4C, 0x9F43}, //21692 #CJK UNIFIED IDEOGRAPH + {0xFD4D, 0x9F45}, //21693 #CJK UNIFIED IDEOGRAPH + {0xFD4E, 0x9F46}, //21694 #CJK UNIFIED IDEOGRAPH + {0xFD4F, 0x9F47}, //21695 #CJK UNIFIED IDEOGRAPH + {0xFD50, 0x9F48}, //21696 #CJK UNIFIED IDEOGRAPH + {0xFD51, 0x9F49}, //21697 #CJK UNIFIED IDEOGRAPH + {0xFD52, 0x9F4A}, //21698 #CJK UNIFIED IDEOGRAPH + {0xFD53, 0x9F4B}, //21699 #CJK UNIFIED IDEOGRAPH + {0xFD54, 0x9F4C}, //21700 #CJK UNIFIED IDEOGRAPH + {0xFD55, 0x9F4D}, //21701 #CJK UNIFIED IDEOGRAPH + {0xFD56, 0x9F4E}, //21702 #CJK UNIFIED IDEOGRAPH + {0xFD57, 0x9F4F}, //21703 #CJK UNIFIED IDEOGRAPH + {0xFD58, 0x9F52}, //21704 #CJK UNIFIED IDEOGRAPH + {0xFD59, 0x9F53}, //21705 #CJK UNIFIED IDEOGRAPH + {0xFD5A, 0x9F54}, //21706 #CJK UNIFIED IDEOGRAPH + {0xFD5B, 0x9F55}, //21707 #CJK UNIFIED IDEOGRAPH + {0xFD5C, 0x9F56}, //21708 #CJK UNIFIED IDEOGRAPH + {0xFD5D, 0x9F57}, //21709 #CJK UNIFIED IDEOGRAPH + {0xFD5E, 0x9F58}, //21710 #CJK UNIFIED IDEOGRAPH + {0xFD5F, 0x9F59}, //21711 #CJK UNIFIED IDEOGRAPH + {0xFD60, 0x9F5A}, //21712 #CJK UNIFIED IDEOGRAPH + {0xFD61, 0x9F5B}, //21713 #CJK UNIFIED IDEOGRAPH + {0xFD62, 0x9F5C}, //21714 #CJK UNIFIED IDEOGRAPH + {0xFD63, 0x9F5D}, //21715 #CJK UNIFIED IDEOGRAPH + {0xFD64, 0x9F5E}, //21716 #CJK UNIFIED IDEOGRAPH + {0xFD65, 0x9F5F}, //21717 #CJK UNIFIED IDEOGRAPH + {0xFD66, 0x9F60}, //21718 #CJK UNIFIED IDEOGRAPH + {0xFD67, 0x9F61}, //21719 #CJK UNIFIED IDEOGRAPH + {0xFD68, 0x9F62}, //21720 #CJK UNIFIED IDEOGRAPH + {0xFD69, 0x9F63}, //21721 #CJK UNIFIED IDEOGRAPH + {0xFD6A, 0x9F64}, //21722 #CJK UNIFIED IDEOGRAPH + {0xFD6B, 0x9F65}, //21723 #CJK UNIFIED IDEOGRAPH + {0xFD6C, 0x9F66}, //21724 #CJK UNIFIED IDEOGRAPH + {0xFD6D, 0x9F67}, //21725 #CJK UNIFIED IDEOGRAPH + {0xFD6E, 0x9F68}, //21726 #CJK UNIFIED IDEOGRAPH + {0xFD6F, 0x9F69}, //21727 #CJK UNIFIED IDEOGRAPH + {0xFD70, 0x9F6A}, //21728 #CJK UNIFIED IDEOGRAPH + {0xFD71, 0x9F6B}, //21729 #CJK UNIFIED IDEOGRAPH + {0xFD72, 0x9F6C}, //21730 #CJK UNIFIED IDEOGRAPH + {0xFD73, 0x9F6D}, //21731 #CJK UNIFIED IDEOGRAPH + {0xFD74, 0x9F6E}, //21732 #CJK UNIFIED IDEOGRAPH + {0xFD75, 0x9F6F}, //21733 #CJK UNIFIED IDEOGRAPH + {0xFD76, 0x9F70}, //21734 #CJK UNIFIED IDEOGRAPH + {0xFD77, 0x9F71}, //21735 #CJK UNIFIED IDEOGRAPH + {0xFD78, 0x9F72}, //21736 #CJK UNIFIED IDEOGRAPH + {0xFD79, 0x9F73}, //21737 #CJK UNIFIED IDEOGRAPH + {0xFD7A, 0x9F74}, //21738 #CJK UNIFIED IDEOGRAPH + {0xFD7B, 0x9F75}, //21739 #CJK UNIFIED IDEOGRAPH + {0xFD7C, 0x9F76}, //21740 #CJK UNIFIED IDEOGRAPH + {0xFD7D, 0x9F77}, //21741 #CJK UNIFIED IDEOGRAPH + {0xFD7E, 0x9F78}, //21742 #CJK UNIFIED IDEOGRAPH + {0xFD80, 0x9F79}, //21743 #CJK UNIFIED IDEOGRAPH + {0xFD81, 0x9F7A}, //21744 #CJK UNIFIED IDEOGRAPH + {0xFD82, 0x9F7B}, //21745 #CJK UNIFIED IDEOGRAPH + {0xFD83, 0x9F7C}, //21746 #CJK UNIFIED IDEOGRAPH + {0xFD84, 0x9F7D}, //21747 #CJK UNIFIED IDEOGRAPH + {0xFD85, 0x9F7E}, //21748 #CJK UNIFIED IDEOGRAPH + {0xFD86, 0x9F81}, //21749 #CJK UNIFIED IDEOGRAPH + {0xFD87, 0x9F82}, //21750 #CJK UNIFIED IDEOGRAPH + {0xFD88, 0x9F8D}, //21751 #CJK UNIFIED IDEOGRAPH + {0xFD89, 0x9F8E}, //21752 #CJK UNIFIED IDEOGRAPH + {0xFD8A, 0x9F8F}, //21753 #CJK UNIFIED IDEOGRAPH + {0xFD8B, 0x9F90}, //21754 #CJK UNIFIED IDEOGRAPH + {0xFD8C, 0x9F91}, //21755 #CJK UNIFIED IDEOGRAPH + {0xFD8D, 0x9F92}, //21756 #CJK UNIFIED IDEOGRAPH + {0xFD8E, 0x9F93}, //21757 #CJK UNIFIED IDEOGRAPH + {0xFD8F, 0x9F94}, //21758 #CJK UNIFIED IDEOGRAPH + {0xFD90, 0x9F95}, //21759 #CJK UNIFIED IDEOGRAPH + {0xFD91, 0x9F96}, //21760 #CJK UNIFIED IDEOGRAPH + {0xFD92, 0x9F97}, //21761 #CJK UNIFIED IDEOGRAPH + {0xFD93, 0x9F98}, //21762 #CJK UNIFIED IDEOGRAPH + {0xFD94, 0x9F9C}, //21763 #CJK UNIFIED IDEOGRAPH + {0xFD95, 0x9F9D}, //21764 #CJK UNIFIED IDEOGRAPH + {0xFD96, 0x9F9E}, //21765 #CJK UNIFIED IDEOGRAPH + {0xFD97, 0x9FA1}, //21766 #CJK UNIFIED IDEOGRAPH + {0xFD98, 0x9FA2}, //21767 #CJK UNIFIED IDEOGRAPH + {0xFD99, 0x9FA3}, //21768 #CJK UNIFIED IDEOGRAPH + {0xFD9A, 0x9FA4}, //21769 #CJK UNIFIED IDEOGRAPH + {0xFD9B, 0x9FA5}, //21770 #CJK UNIFIED IDEOGRAPH + {0xFD9C, 0xF92C}, //21771 #CJK COMPATIBILITY IDEOGRAPH + {0xFD9D, 0xF979}, //21772 #CJK COMPATIBILITY IDEOGRAPH + {0xFD9E, 0xF995}, //21773 #CJK COMPATIBILITY IDEOGRAPH + {0xFD9F, 0xF9E7}, //21774 #CJK COMPATIBILITY IDEOGRAPH + {0xFDA0, 0xF9F1}, //21775 #CJK COMPATIBILITY IDEOGRAPH + {0xFE40, 0xFA0C}, //21776 #CJK COMPATIBILITY IDEOGRAPH + {0xFE41, 0xFA0D}, //21777 #CJK COMPATIBILITY IDEOGRAPH + {0xFE42, 0xFA0E}, //21778 #CJK COMPATIBILITY IDEOGRAPH + {0xFE43, 0xFA0F}, //21779 #CJK COMPATIBILITY IDEOGRAPH + {0xFE44, 0xFA11}, //21780 #CJK COMPATIBILITY IDEOGRAPH + {0xFE45, 0xFA13}, //21781 #CJK COMPATIBILITY IDEOGRAPH + {0xFE46, 0xFA14}, //21782 #CJK COMPATIBILITY IDEOGRAPH + {0xFE47, 0xFA18}, //21783 #CJK COMPATIBILITY IDEOGRAPH + {0xFE48, 0xFA1F}, //21784 #CJK COMPATIBILITY IDEOGRAPH + {0xFE49, 0xFA20}, //21785 #CJK COMPATIBILITY IDEOGRAPH + {0xFE4A, 0xFA21}, //21786 #CJK COMPATIBILITY IDEOGRAPH + {0xFE4B, 0xFA23}, //21787 #CJK COMPATIBILITY IDEOGRAPH + {0xFE4C, 0xFA24}, //21788 #CJK COMPATIBILITY IDEOGRAPH + {0xFE4D, 0xFA27}, //21789 #CJK COMPATIBILITY IDEOGRAPH + {0xFE4E, 0xFA28}, //21790 #CJK COMPATIBILITY IDEOGRAPH + {0xFE4F, 0xFA29} //21791 #CJK COMPATIBILITY IDEOGRAPH +}; + +#endif // DRW_CPTABLE936_H diff --git a/extlib/libdxfrw/intern/drw_cptable949.h b/extlib/libdxfrw/intern/drw_cptable949.h new file mode 100644 index 0000000..3276b60 --- /dev/null +++ b/extlib/libdxfrw/intern/drw_cptable949.h @@ -0,0 +1,17199 @@ +#ifndef DRW_CPTABLE949_H +#define DRW_CPTABLE949_H + +//Korean Extended Wansung + +//first entry in this table are 0x80 +#define CPOFFSET949 0x80 +#define CPLENGHT949 17048 +#define NOTFOUND949 0x003F + +//Table 949 one byte +static const int DRW_Table949[1] = { +}; + +//Table 949 lead byte +//pairs of start/end in DRW_DoubleTable949 +static const int DRW_LeadTable949[] = { + 0, //1#DBCS LEAD BYTE 0x81 + 178, //2#DBCS LEAD BYTE 0x82 + 356, //3#DBCS LEAD BYTE 0x83 + 564, //4#DBCS LEAD BYTE 0x84 + 712, //5#DBCS LEAD BYTE 0x85 + 890, //6#DBCS LEAD BYTE 0x86 + 1068, //7#DBCS LEAD BYTE 0x87 + 1246, //8#DBCS LEAD BYTE 0x88 + 1424, //9#DBCS LEAD BYTE 0x89 + 1602, //10#DBCS LEAD BYTE 0x8A + 1780, //11#DBCS LEAD BYTE 0x8B + 1958, //12#DBCS LEAD BYTE 0x8C + 2136, //13#DBCS LEAD BYTE 0x8D + 2314, //14#DBCS LEAD BYTE 0x8E + 2492, //15#DBCS LEAD BYTE 0x8F + 2670, //16#DBCS LEAD BYTE 0x90 + 2848, //17#DBCS LEAD BYTE 0x91 + 3026, //18#DBCS LEAD BYTE 0x92 + 3204, //19#DBCS LEAD BYTE 0x93 + 3382, //20#DBCS LEAD BYTE 0x94 + 3560, //21#DBCS LEAD BYTE 0x95 + 3738, //22#DBCS LEAD BYTE 0x96 + 3916, //23#DBCS LEAD BYTE 0x97 + 4094, //24#DBCS LEAD BYTE 0x98 + 4272, //25#DBCS LEAD BYTE 0x99 + 4450, //26#DBCS LEAD BYTE 0x9A + 4628, //27#DBCS LEAD BYTE 0x9B + 4806, //28#DBCS LEAD BYTE 0x9C + 4984, //29#DBCS LEAD BYTE 0x9D + 5162, //30#DBCS LEAD BYTE 0x9E + 5340, //31#DBCS LEAD BYTE 0x9F + 5518, //32#DBCS LEAD BYTE 0xA0 + 5696, //33#DBCS LEAD BYTE 0xA1 + 5874, //34#DBCS LEAD BYTE 0xA2 + 6029, //35#DBCS LEAD BYTE 0xA3 + 6207, //36#DBCS LEAD BYTE 0xA4 + 6385, //37#DBCS LEAD BYTE 0xA5 + 6537, //38#DBCS LEAD BYTE 0xA6 + 6689, //39#DBCS LEAD BYTE 0xA7 + 6852, //40#DBCS LEAD BYTE 0xA8 + 7027, //41#DBCS LEAD BYTE 0xA9 + 7205, //42#DBCS LEAD BYTE 0xAA + 7372, //43#DBCS LEAD BYTE 0xAB + 7542, //44#DBCS LEAD BYTE 0xAC + 7692, //45#DBCS LEAD BYTE 0xAD + 7776, //46#DBCS LEAD BYTE 0xAE + 7860, //47#DBCS LEAD BYTE 0xAF + 7944, //48#DBCS LEAD BYTE 0xB0 + 8122, //49#DBCS LEAD BYTE 0xB1 + 8300, //50#DBCS LEAD BYTE 0xB2 + 8478, //51#DBCS LEAD BYTE 0xB3 + 8656, //52#DBCS LEAD BYTE 0xB4 + 8834, //53#DBCS LEAD BYTE 0xB5 + 9012, //54#DBCS LEAD BYTE 0xB6 + 9190, //55#DBCS LEAD BYTE 0xB7 + 9368, //56#DBCS LEAD BYTE 0xB8 + 9546, //57#DBCS LEAD BYTE 0xB9 + 9724, //58#DBCS LEAD BYTE 0xBA + 9902, //59#DBCS LEAD BYTE 0xBB + 10080, //60#DBCS LEAD BYTE 0xBC + 10258, //61#DBCS LEAD BYTE 0xBD + 10436, //62#DBCS LEAD BYTE 0xBE + 10614, //63#DBCS LEAD BYTE 0xBF + 10792, //64#DBCS LEAD BYTE 0xC0 + 10970, //65#DBCS LEAD BYTE 0xC1 + 11148, //66#DBCS LEAD BYTE 0xC2 + 11326, //67#DBCS LEAD BYTE 0xC3 + 11504, //68#DBCS LEAD BYTE 0xC4 + 11682, //69#DBCS LEAD BYTE 0xC5 + 11860, //70#DBCS LEAD BYTE 0xC6 + 11972, //71#DBCS LEAD BYTE 0xC7 + 12066, //72#DBCS LEAD BYTE 0xC8 + 12160, //73#DBCS LEAD BYTE 0xC9, empty + 12160, //74#DBCS LEAD BYTE 0xCA + 12254, //75#DBCS LEAD BYTE 0xCB + 12348, //76#DBCS LEAD BYTE 0xCC + 12442, //77#DBCS LEAD BYTE 0xCD + 12536, //78#DBCS LEAD BYTE 0xCE + 12630, //79#DBCS LEAD BYTE 0xCF + 12724, //80#DBCS LEAD BYTE 0xD0 + 12818, //81#DBCS LEAD BYTE 0xD1 + 12912, //82#DBCS LEAD BYTE 0xD2 + 13006, //83#DBCS LEAD BYTE 0xD3 + 13100, //84#DBCS LEAD BYTE 0xD4 + 13194, //85#DBCS LEAD BYTE 0xD5 + 13288, //86#DBCS LEAD BYTE 0xD6 + 13382, //87#DBCS LEAD BYTE 0xD7 + 13476, //88#DBCS LEAD BYTE 0xD8 + 13570, //89#DBCS LEAD BYTE 0xD9 + 13664, //90#DBCS LEAD BYTE 0xDA + 13758, //91#DBCS LEAD BYTE 0xDB + 13852, //92#DBCS LEAD BYTE 0xDC + 13946, //93#DBCS LEAD BYTE 0xDD + 14040, //94#DBCS LEAD BYTE 0xDE + 14134, //95#DBCS LEAD BYTE 0xDF + 14228, //96#DBCS LEAD BYTE 0xE0 + 14322, //97#DBCS LEAD BYTE 0xE1 + 14416, //98#DBCS LEAD BYTE 0xE2 + 14510, //99#DBCS LEAD BYTE 0xE3 + 14604, //100#DBCS LEAD BYTE 0xE4 + 14698, //101#DBCS LEAD BYTE 0xE5 + 14792, //102#DBCS LEAD BYTE 0xE6 + 14886, //103#DBCS LEAD BYTE 0xE7 + 14980, //104#DBCS LEAD BYTE 0xE8 + 15074, //105#DBCS LEAD BYTE 0xE9 + 15168, //106#DBCS LEAD BYTE 0xEA + 15262, //107#DBCS LEAD BYTE 0xEB + 15356, //108#DBCS LEAD BYTE 0xEC + 15450, //109#DBCS LEAD BYTE 0xED + 15544, //110#DBCS LEAD BYTE 0xEE + 15638, //111#DBCS LEAD BYTE 0xEF + 15732, //112#DBCS LEAD BYTE 0xF0 + 15826, //113#DBCS LEAD BYTE 0xF1 + 15920, //114#DBCS LEAD BYTE 0xF2 + 16014, //115#DBCS LEAD BYTE 0xF3 + 16108, //116#DBCS LEAD BYTE 0xF4 + 16202, //117#DBCS LEAD BYTE 0xF5 + 16296, //118#DBCS LEAD BYTE 0xF6 + 16390, //119#DBCS LEAD BYTE 0xF7 + 16484, //120#DBCS LEAD BYTE 0xF8 + 16578, //121#DBCS LEAD BYTE 0xF9 + 16672, //122#DBCS LEAD BYTE 0xFA + 16766, //123#DBCS LEAD BYTE 0xFB + 16860, //124#DBCS LEAD BYTE 0xFC + 16954, //125#DBCS LEAD BYTE 0xFD + 17047, //126#DBCS LEAD BYTE 0xFE, empty + 17047, //127#UNDEFINED 0xFF, END OF TABLE +}; + +//Table 949 tail byte +static const int DRW_DoubleTable949[][2] = { + {0x8141, 0xAC02}, //1 #HANGUL SYLLABLE KIYEOK A SSANGKIYEOK + {0x8142, 0xAC03}, //2 #HANGUL SYLLABLE KIYEOK A KIYEOKSIOS + {0x8143, 0xAC05}, //3 #HANGUL SYLLABLE KIYEOK A NIEUNCIEUC + {0x8144, 0xAC06}, //4 #HANGUL SYLLABLE KIYEOK A NIEUNHIEUH + {0x8145, 0xAC0B}, //5 #HANGUL SYLLABLE KIYEOK A RIEULPIEUP + {0x8146, 0xAC0C}, //6 #HANGUL SYLLABLE KIYEOK A RIEULSIOS + {0x8147, 0xAC0D}, //7 #HANGUL SYLLABLE KIYEOK A RIEULTHIEUTH + {0x8148, 0xAC0E}, //8 #HANGUL SYLLABLE KIYEOK A RIEULPHIEUPH + {0x8149, 0xAC0F}, //9 #HANGUL SYLLABLE KIYEOK A RIEULHIEUH + {0x814A, 0xAC18}, //10 #HANGUL SYLLABLE KIYEOK A KHIEUKH + {0x814B, 0xAC1E}, //11 #HANGUL SYLLABLE KIYEOK AE SSANGKIYEOK + {0x814C, 0xAC1F}, //12 #HANGUL SYLLABLE KIYEOK AE KIYEOKSIOS + {0x814D, 0xAC21}, //13 #HANGUL SYLLABLE KIYEOK AE NIEUNCIEUC + {0x814E, 0xAC22}, //14 #HANGUL SYLLABLE KIYEOK AE NIEUNHIEUH + {0x814F, 0xAC23}, //15 #HANGUL SYLLABLE KIYEOK AE TIKEUT + {0x8150, 0xAC25}, //16 #HANGUL SYLLABLE KIYEOK AE RIEULKIYEOK + {0x8151, 0xAC26}, //17 #HANGUL SYLLABLE KIYEOK AE RIEULMIEUM + {0x8152, 0xAC27}, //18 #HANGUL SYLLABLE KIYEOK AE RIEULPIEUP + {0x8153, 0xAC28}, //19 #HANGUL SYLLABLE KIYEOK AE RIEULSIOS + {0x8154, 0xAC29}, //20 #HANGUL SYLLABLE KIYEOK AE RIEULTHIEUTH + {0x8155, 0xAC2A}, //21 #HANGUL SYLLABLE KIYEOK AE RIEULPHIEUPH + {0x8156, 0xAC2B}, //22 #HANGUL SYLLABLE KIYEOK AE RIEULHIEUH + {0x8157, 0xAC2E}, //23 #HANGUL SYLLABLE KIYEOK AE PIEUPSIOS + {0x8158, 0xAC32}, //24 #HANGUL SYLLABLE KIYEOK AE CIEUC + {0x8159, 0xAC33}, //25 #HANGUL SYLLABLE KIYEOK AE CHIEUCH + {0x815A, 0xAC34}, //26 #HANGUL SYLLABLE KIYEOK AE KHIEUKH + {0x8161, 0xAC35}, //27 #HANGUL SYLLABLE KIYEOK AE THIEUTH + {0x8162, 0xAC36}, //28 #HANGUL SYLLABLE KIYEOK AE PHIEUPH + {0x8163, 0xAC37}, //29 #HANGUL SYLLABLE KIYEOK AE HIEUH + {0x8164, 0xAC3A}, //30 #HANGUL SYLLABLE KIYEOK YA SSANGKIYEOK + {0x8165, 0xAC3B}, //31 #HANGUL SYLLABLE KIYEOK YA KIYEOKSIOS + {0x8166, 0xAC3D}, //32 #HANGUL SYLLABLE KIYEOK YA NIEUNCIEUC + {0x8167, 0xAC3E}, //33 #HANGUL SYLLABLE KIYEOK YA NIEUNHIEUH + {0x8168, 0xAC3F}, //34 #HANGUL SYLLABLE KIYEOK YA TIKEUT + {0x8169, 0xAC41}, //35 #HANGUL SYLLABLE KIYEOK YA RIEULKIYEOK + {0x816A, 0xAC42}, //36 #HANGUL SYLLABLE KIYEOK YA RIEULMIEUM + {0x816B, 0xAC43}, //37 #HANGUL SYLLABLE KIYEOK YA RIEULPIEUP + {0x816C, 0xAC44}, //38 #HANGUL SYLLABLE KIYEOK YA RIEULSIOS + {0x816D, 0xAC45}, //39 #HANGUL SYLLABLE KIYEOK YA RIEULTHIEUTH + {0x816E, 0xAC46}, //40 #HANGUL SYLLABLE KIYEOK YA RIEULPHIEUPH + {0x816F, 0xAC47}, //41 #HANGUL SYLLABLE KIYEOK YA RIEULHIEUH + {0x8170, 0xAC48}, //42 #HANGUL SYLLABLE KIYEOK YA MIEUM + {0x8171, 0xAC49}, //43 #HANGUL SYLLABLE KIYEOK YA PIEUP + {0x8172, 0xAC4A}, //44 #HANGUL SYLLABLE KIYEOK YA PIEUPSIOS + {0x8173, 0xAC4C}, //45 #HANGUL SYLLABLE KIYEOK YA SSANGSIOS + {0x8174, 0xAC4E}, //46 #HANGUL SYLLABLE KIYEOK YA CIEUC + {0x8175, 0xAC4F}, //47 #HANGUL SYLLABLE KIYEOK YA CHIEUCH + {0x8176, 0xAC50}, //48 #HANGUL SYLLABLE KIYEOK YA KHIEUKH + {0x8177, 0xAC51}, //49 #HANGUL SYLLABLE KIYEOK YA THIEUTH + {0x8178, 0xAC52}, //50 #HANGUL SYLLABLE KIYEOK YA PHIEUPH + {0x8179, 0xAC53}, //51 #HANGUL SYLLABLE KIYEOK YA HIEUH + {0x817A, 0xAC55}, //52 #HANGUL SYLLABLE KIYEOK YAE KIYEOK + {0x8181, 0xAC56}, //53 #HANGUL SYLLABLE KIYEOK YAE SSANGKIYEOK + {0x8182, 0xAC57}, //54 #HANGUL SYLLABLE KIYEOK YAE KIYEOKSIOS + {0x8183, 0xAC59}, //55 #HANGUL SYLLABLE KIYEOK YAE NIEUNCIEUC + {0x8184, 0xAC5A}, //56 #HANGUL SYLLABLE KIYEOK YAE NIEUNHIEUH + {0x8185, 0xAC5B}, //57 #HANGUL SYLLABLE KIYEOK YAE TIKEUT + {0x8186, 0xAC5D}, //58 #HANGUL SYLLABLE KIYEOK YAE RIEULKIYEOK + {0x8187, 0xAC5E}, //59 #HANGUL SYLLABLE KIYEOK YAE RIEULMIEUM + {0x8188, 0xAC5F}, //60 #HANGUL SYLLABLE KIYEOK YAE RIEULPIEUP + {0x8189, 0xAC60}, //61 #HANGUL SYLLABLE KIYEOK YAE RIEULSIOS + {0x818A, 0xAC61}, //62 #HANGUL SYLLABLE KIYEOK YAE RIEULTHIEUTH + {0x818B, 0xAC62}, //63 #HANGUL SYLLABLE KIYEOK YAE RIEULPHIEUPH + {0x818C, 0xAC63}, //64 #HANGUL SYLLABLE KIYEOK YAE RIEULHIEUH + {0x818D, 0xAC64}, //65 #HANGUL SYLLABLE KIYEOK YAE MIEUM + {0x818E, 0xAC65}, //66 #HANGUL SYLLABLE KIYEOK YAE PIEUP + {0x818F, 0xAC66}, //67 #HANGUL SYLLABLE KIYEOK YAE PIEUPSIOS + {0x8190, 0xAC67}, //68 #HANGUL SYLLABLE KIYEOK YAE SIOS + {0x8191, 0xAC68}, //69 #HANGUL SYLLABLE KIYEOK YAE SSANGSIOS + {0x8192, 0xAC69}, //70 #HANGUL SYLLABLE KIYEOK YAE IEUNG + {0x8193, 0xAC6A}, //71 #HANGUL SYLLABLE KIYEOK YAE CIEUC + {0x8194, 0xAC6B}, //72 #HANGUL SYLLABLE KIYEOK YAE CHIEUCH + {0x8195, 0xAC6C}, //73 #HANGUL SYLLABLE KIYEOK YAE KHIEUKH + {0x8196, 0xAC6D}, //74 #HANGUL SYLLABLE KIYEOK YAE THIEUTH + {0x8197, 0xAC6E}, //75 #HANGUL SYLLABLE KIYEOK YAE PHIEUPH + {0x8198, 0xAC6F}, //76 #HANGUL SYLLABLE KIYEOK YAE HIEUH + {0x8199, 0xAC72}, //77 #HANGUL SYLLABLE KIYEOK EO SSANGKIYEOK + {0x819A, 0xAC73}, //78 #HANGUL SYLLABLE KIYEOK EO KIYEOKSIOS + {0x819B, 0xAC75}, //79 #HANGUL SYLLABLE KIYEOK EO NIEUNCIEUC + {0x819C, 0xAC76}, //80 #HANGUL SYLLABLE KIYEOK EO NIEUNHIEUH + {0x819D, 0xAC79}, //81 #HANGUL SYLLABLE KIYEOK EO RIEULKIYEOK + {0x819E, 0xAC7B}, //82 #HANGUL SYLLABLE KIYEOK EO RIEULPIEUP + {0x819F, 0xAC7C}, //83 #HANGUL SYLLABLE KIYEOK EO RIEULSIOS + {0x81A0, 0xAC7D}, //84 #HANGUL SYLLABLE KIYEOK EO RIEULTHIEUTH + {0x81A1, 0xAC7E}, //85 #HANGUL SYLLABLE KIYEOK EO RIEULPHIEUPH + {0x81A2, 0xAC7F}, //86 #HANGUL SYLLABLE KIYEOK EO RIEULHIEUH + {0x81A3, 0xAC82}, //87 #HANGUL SYLLABLE KIYEOK EO PIEUPSIOS + {0x81A4, 0xAC87}, //88 #HANGUL SYLLABLE KIYEOK EO CHIEUCH + {0x81A5, 0xAC88}, //89 #HANGUL SYLLABLE KIYEOK EO KHIEUKH + {0x81A6, 0xAC8D}, //90 #HANGUL SYLLABLE KIYEOK E KIYEOK + {0x81A7, 0xAC8E}, //91 #HANGUL SYLLABLE KIYEOK E SSANGKIYEOK + {0x81A8, 0xAC8F}, //92 #HANGUL SYLLABLE KIYEOK E KIYEOKSIOS + {0x81A9, 0xAC91}, //93 #HANGUL SYLLABLE KIYEOK E NIEUNCIEUC + {0x81AA, 0xAC92}, //94 #HANGUL SYLLABLE KIYEOK E NIEUNHIEUH + {0x81AB, 0xAC93}, //95 #HANGUL SYLLABLE KIYEOK E TIKEUT + {0x81AC, 0xAC95}, //96 #HANGUL SYLLABLE KIYEOK E RIEULKIYEOK + {0x81AD, 0xAC96}, //97 #HANGUL SYLLABLE KIYEOK E RIEULMIEUM + {0x81AE, 0xAC97}, //98 #HANGUL SYLLABLE KIYEOK E RIEULPIEUP + {0x81AF, 0xAC98}, //99 #HANGUL SYLLABLE KIYEOK E RIEULSIOS + {0x81B0, 0xAC99}, //100 #HANGUL SYLLABLE KIYEOK E RIEULTHIEUTH + {0x81B1, 0xAC9A}, //101 #HANGUL SYLLABLE KIYEOK E RIEULPHIEUPH + {0x81B2, 0xAC9B}, //102 #HANGUL SYLLABLE KIYEOK E RIEULHIEUH + {0x81B3, 0xAC9E}, //103 #HANGUL SYLLABLE KIYEOK E PIEUPSIOS + {0x81B4, 0xACA2}, //104 #HANGUL SYLLABLE KIYEOK E CIEUC + {0x81B5, 0xACA3}, //105 #HANGUL SYLLABLE KIYEOK E CHIEUCH + {0x81B6, 0xACA4}, //106 #HANGUL SYLLABLE KIYEOK E KHIEUKH + {0x81B7, 0xACA5}, //107 #HANGUL SYLLABLE KIYEOK E THIEUTH + {0x81B8, 0xACA6}, //108 #HANGUL SYLLABLE KIYEOK E PHIEUPH + {0x81B9, 0xACA7}, //109 #HANGUL SYLLABLE KIYEOK E HIEUH + {0x81BA, 0xACAB}, //110 #HANGUL SYLLABLE KIYEOK YEO KIYEOKSIOS + {0x81BB, 0xACAD}, //111 #HANGUL SYLLABLE KIYEOK YEO NIEUNCIEUC + {0x81BC, 0xACAE}, //112 #HANGUL SYLLABLE KIYEOK YEO NIEUNHIEUH + {0x81BD, 0xACB1}, //113 #HANGUL SYLLABLE KIYEOK YEO RIEULKIYEOK + {0x81BE, 0xACB2}, //114 #HANGUL SYLLABLE KIYEOK YEO RIEULMIEUM + {0x81BF, 0xACB3}, //115 #HANGUL SYLLABLE KIYEOK YEO RIEULPIEUP + {0x81C0, 0xACB4}, //116 #HANGUL SYLLABLE KIYEOK YEO RIEULSIOS + {0x81C1, 0xACB5}, //117 #HANGUL SYLLABLE KIYEOK YEO RIEULTHIEUTH + {0x81C2, 0xACB6}, //118 #HANGUL SYLLABLE KIYEOK YEO RIEULPHIEUPH + {0x81C3, 0xACB7}, //119 #HANGUL SYLLABLE KIYEOK YEO RIEULHIEUH + {0x81C4, 0xACBA}, //120 #HANGUL SYLLABLE KIYEOK YEO PIEUPSIOS + {0x81C5, 0xACBE}, //121 #HANGUL SYLLABLE KIYEOK YEO CIEUC + {0x81C6, 0xACBF}, //122 #HANGUL SYLLABLE KIYEOK YEO CHIEUCH + {0x81C7, 0xACC0}, //123 #HANGUL SYLLABLE KIYEOK YEO KHIEUKH + {0x81C8, 0xACC2}, //124 #HANGUL SYLLABLE KIYEOK YEO PHIEUPH + {0x81C9, 0xACC3}, //125 #HANGUL SYLLABLE KIYEOK YEO HIEUH + {0x81CA, 0xACC5}, //126 #HANGUL SYLLABLE KIYEOK YE KIYEOK + {0x81CB, 0xACC6}, //127 #HANGUL SYLLABLE KIYEOK YE SSANGKIYEOK + {0x81CC, 0xACC7}, //128 #HANGUL SYLLABLE KIYEOK YE KIYEOKSIOS + {0x81CD, 0xACC9}, //129 #HANGUL SYLLABLE KIYEOK YE NIEUNCIEUC + {0x81CE, 0xACCA}, //130 #HANGUL SYLLABLE KIYEOK YE NIEUNHIEUH + {0x81CF, 0xACCB}, //131 #HANGUL SYLLABLE KIYEOK YE TIKEUT + {0x81D0, 0xACCD}, //132 #HANGUL SYLLABLE KIYEOK YE RIEULKIYEOK + {0x81D1, 0xACCE}, //133 #HANGUL SYLLABLE KIYEOK YE RIEULMIEUM + {0x81D2, 0xACCF}, //134 #HANGUL SYLLABLE KIYEOK YE RIEULPIEUP + {0x81D3, 0xACD0}, //135 #HANGUL SYLLABLE KIYEOK YE RIEULSIOS + {0x81D4, 0xACD1}, //136 #HANGUL SYLLABLE KIYEOK YE RIEULTHIEUTH + {0x81D5, 0xACD2}, //137 #HANGUL SYLLABLE KIYEOK YE RIEULPHIEUPH + {0x81D6, 0xACD3}, //138 #HANGUL SYLLABLE KIYEOK YE RIEULHIEUH + {0x81D7, 0xACD4}, //139 #HANGUL SYLLABLE KIYEOK YE MIEUM + {0x81D8, 0xACD6}, //140 #HANGUL SYLLABLE KIYEOK YE PIEUPSIOS + {0x81D9, 0xACD8}, //141 #HANGUL SYLLABLE KIYEOK YE SSANGSIOS + {0x81DA, 0xACD9}, //142 #HANGUL SYLLABLE KIYEOK YE IEUNG + {0x81DB, 0xACDA}, //143 #HANGUL SYLLABLE KIYEOK YE CIEUC + {0x81DC, 0xACDB}, //144 #HANGUL SYLLABLE KIYEOK YE CHIEUCH + {0x81DD, 0xACDC}, //145 #HANGUL SYLLABLE KIYEOK YE KHIEUKH + {0x81DE, 0xACDD}, //146 #HANGUL SYLLABLE KIYEOK YE THIEUTH + {0x81DF, 0xACDE}, //147 #HANGUL SYLLABLE KIYEOK YE PHIEUPH + {0x81E0, 0xACDF}, //148 #HANGUL SYLLABLE KIYEOK YE HIEUH + {0x81E1, 0xACE2}, //149 #HANGUL SYLLABLE KIYEOK O SSANGKIYEOK + {0x81E2, 0xACE3}, //150 #HANGUL SYLLABLE KIYEOK O KIYEOKSIOS + {0x81E3, 0xACE5}, //151 #HANGUL SYLLABLE KIYEOK O NIEUNCIEUC + {0x81E4, 0xACE6}, //152 #HANGUL SYLLABLE KIYEOK O NIEUNHIEUH + {0x81E5, 0xACE9}, //153 #HANGUL SYLLABLE KIYEOK O RIEULKIYEOK + {0x81E6, 0xACEB}, //154 #HANGUL SYLLABLE KIYEOK O RIEULPIEUP + {0x81E7, 0xACED}, //155 #HANGUL SYLLABLE KIYEOK O RIEULTHIEUTH + {0x81E8, 0xACEE}, //156 #HANGUL SYLLABLE KIYEOK O RIEULPHIEUPH + {0x81E9, 0xACF2}, //157 #HANGUL SYLLABLE KIYEOK O PIEUPSIOS + {0x81EA, 0xACF4}, //158 #HANGUL SYLLABLE KIYEOK O SSANGSIOS + {0x81EB, 0xACF7}, //159 #HANGUL SYLLABLE KIYEOK O CHIEUCH + {0x81EC, 0xACF8}, //160 #HANGUL SYLLABLE KIYEOK O KHIEUKH + {0x81ED, 0xACF9}, //161 #HANGUL SYLLABLE KIYEOK O THIEUTH + {0x81EE, 0xACFA}, //162 #HANGUL SYLLABLE KIYEOK O PHIEUPH + {0x81EF, 0xACFB}, //163 #HANGUL SYLLABLE KIYEOK O HIEUH + {0x81F0, 0xACFE}, //164 #HANGUL SYLLABLE KIYEOK WA SSANGKIYEOK + {0x81F1, 0xACFF}, //165 #HANGUL SYLLABLE KIYEOK WA KIYEOKSIOS + {0x81F2, 0xAD01}, //166 #HANGUL SYLLABLE KIYEOK WA NIEUNCIEUC + {0x81F3, 0xAD02}, //167 #HANGUL SYLLABLE KIYEOK WA NIEUNHIEUH + {0x81F4, 0xAD03}, //168 #HANGUL SYLLABLE KIYEOK WA TIKEUT + {0x81F5, 0xAD05}, //169 #HANGUL SYLLABLE KIYEOK WA RIEULKIYEOK + {0x81F6, 0xAD07}, //170 #HANGUL SYLLABLE KIYEOK WA RIEULPIEUP + {0x81F7, 0xAD08}, //171 #HANGUL SYLLABLE KIYEOK WA RIEULSIOS + {0x81F8, 0xAD09}, //172 #HANGUL SYLLABLE KIYEOK WA RIEULTHIEUTH + {0x81F9, 0xAD0A}, //173 #HANGUL SYLLABLE KIYEOK WA RIEULPHIEUPH + {0x81FA, 0xAD0B}, //174 #HANGUL SYLLABLE KIYEOK WA RIEULHIEUH + {0x81FB, 0xAD0E}, //175 #HANGUL SYLLABLE KIYEOK WA PIEUPSIOS + {0x81FC, 0xAD10}, //176 #HANGUL SYLLABLE KIYEOK WA SSANGSIOS + {0x81FD, 0xAD12}, //177 #HANGUL SYLLABLE KIYEOK WA CIEUC + {0x81FE, 0xAD13}, //178 #HANGUL SYLLABLE KIYEOK WA CHIEUCH + {0x8241, 0xAD14}, //179 #HANGUL SYLLABLE KIYEOK WA KHIEUKH + {0x8242, 0xAD15}, //180 #HANGUL SYLLABLE KIYEOK WA THIEUTH + {0x8243, 0xAD16}, //181 #HANGUL SYLLABLE KIYEOK WA PHIEUPH + {0x8244, 0xAD17}, //182 #HANGUL SYLLABLE KIYEOK WA HIEUH + {0x8245, 0xAD19}, //183 #HANGUL SYLLABLE KIYEOK WAE KIYEOK + {0x8246, 0xAD1A}, //184 #HANGUL SYLLABLE KIYEOK WAE SSANGKIYEOK + {0x8247, 0xAD1B}, //185 #HANGUL SYLLABLE KIYEOK WAE KIYEOKSIOS + {0x8248, 0xAD1D}, //186 #HANGUL SYLLABLE KIYEOK WAE NIEUNCIEUC + {0x8249, 0xAD1E}, //187 #HANGUL SYLLABLE KIYEOK WAE NIEUNHIEUH + {0x824A, 0xAD1F}, //188 #HANGUL SYLLABLE KIYEOK WAE TIKEUT + {0x824B, 0xAD21}, //189 #HANGUL SYLLABLE KIYEOK WAE RIEULKIYEOK + {0x824C, 0xAD22}, //190 #HANGUL SYLLABLE KIYEOK WAE RIEULMIEUM + {0x824D, 0xAD23}, //191 #HANGUL SYLLABLE KIYEOK WAE RIEULPIEUP + {0x824E, 0xAD24}, //192 #HANGUL SYLLABLE KIYEOK WAE RIEULSIOS + {0x824F, 0xAD25}, //193 #HANGUL SYLLABLE KIYEOK WAE RIEULTHIEUTH + {0x8250, 0xAD26}, //194 #HANGUL SYLLABLE KIYEOK WAE RIEULPHIEUPH + {0x8251, 0xAD27}, //195 #HANGUL SYLLABLE KIYEOK WAE RIEULHIEUH + {0x8252, 0xAD28}, //196 #HANGUL SYLLABLE KIYEOK WAE MIEUM + {0x8253, 0xAD2A}, //197 #HANGUL SYLLABLE KIYEOK WAE PIEUPSIOS + {0x8254, 0xAD2B}, //198 #HANGUL SYLLABLE KIYEOK WAE SIOS + {0x8255, 0xAD2E}, //199 #HANGUL SYLLABLE KIYEOK WAE CIEUC + {0x8256, 0xAD2F}, //200 #HANGUL SYLLABLE KIYEOK WAE CHIEUCH + {0x8257, 0xAD30}, //201 #HANGUL SYLLABLE KIYEOK WAE KHIEUKH + {0x8258, 0xAD31}, //202 #HANGUL SYLLABLE KIYEOK WAE THIEUTH + {0x8259, 0xAD32}, //203 #HANGUL SYLLABLE KIYEOK WAE PHIEUPH + {0x825A, 0xAD33}, //204 #HANGUL SYLLABLE KIYEOK WAE HIEUH + {0x8261, 0xAD36}, //205 #HANGUL SYLLABLE KIYEOK OE SSANGKIYEOK + {0x8262, 0xAD37}, //206 #HANGUL SYLLABLE KIYEOK OE KIYEOKSIOS + {0x8263, 0xAD39}, //207 #HANGUL SYLLABLE KIYEOK OE NIEUNCIEUC + {0x8264, 0xAD3A}, //208 #HANGUL SYLLABLE KIYEOK OE NIEUNHIEUH + {0x8265, 0xAD3B}, //209 #HANGUL SYLLABLE KIYEOK OE TIKEUT + {0x8266, 0xAD3D}, //210 #HANGUL SYLLABLE KIYEOK OE RIEULKIYEOK + {0x8267, 0xAD3E}, //211 #HANGUL SYLLABLE KIYEOK OE RIEULMIEUM + {0x8268, 0xAD3F}, //212 #HANGUL SYLLABLE KIYEOK OE RIEULPIEUP + {0x8269, 0xAD40}, //213 #HANGUL SYLLABLE KIYEOK OE RIEULSIOS + {0x826A, 0xAD41}, //214 #HANGUL SYLLABLE KIYEOK OE RIEULTHIEUTH + {0x826B, 0xAD42}, //215 #HANGUL SYLLABLE KIYEOK OE RIEULPHIEUPH + {0x826C, 0xAD43}, //216 #HANGUL SYLLABLE KIYEOK OE RIEULHIEUH + {0x826D, 0xAD46}, //217 #HANGUL SYLLABLE KIYEOK OE PIEUPSIOS + {0x826E, 0xAD48}, //218 #HANGUL SYLLABLE KIYEOK OE SSANGSIOS + {0x826F, 0xAD4A}, //219 #HANGUL SYLLABLE KIYEOK OE CIEUC + {0x8270, 0xAD4B}, //220 #HANGUL SYLLABLE KIYEOK OE CHIEUCH + {0x8271, 0xAD4C}, //221 #HANGUL SYLLABLE KIYEOK OE KHIEUKH + {0x8272, 0xAD4D}, //222 #HANGUL SYLLABLE KIYEOK OE THIEUTH + {0x8273, 0xAD4E}, //223 #HANGUL SYLLABLE KIYEOK OE PHIEUPH + {0x8274, 0xAD4F}, //224 #HANGUL SYLLABLE KIYEOK OE HIEUH + {0x8275, 0xAD51}, //225 #HANGUL SYLLABLE KIYEOK YO KIYEOK + {0x8276, 0xAD52}, //226 #HANGUL SYLLABLE KIYEOK YO SSANGKIYEOK + {0x8277, 0xAD53}, //227 #HANGUL SYLLABLE KIYEOK YO KIYEOKSIOS + {0x8278, 0xAD55}, //228 #HANGUL SYLLABLE KIYEOK YO NIEUNCIEUC + {0x8279, 0xAD56}, //229 #HANGUL SYLLABLE KIYEOK YO NIEUNHIEUH + {0x827A, 0xAD57}, //230 #HANGUL SYLLABLE KIYEOK YO TIKEUT + {0x8281, 0xAD59}, //231 #HANGUL SYLLABLE KIYEOK YO RIEULKIYEOK + {0x8282, 0xAD5A}, //232 #HANGUL SYLLABLE KIYEOK YO RIEULMIEUM + {0x8283, 0xAD5B}, //233 #HANGUL SYLLABLE KIYEOK YO RIEULPIEUP + {0x8284, 0xAD5C}, //234 #HANGUL SYLLABLE KIYEOK YO RIEULSIOS + {0x8285, 0xAD5D}, //235 #HANGUL SYLLABLE KIYEOK YO RIEULTHIEUTH + {0x8286, 0xAD5E}, //236 #HANGUL SYLLABLE KIYEOK YO RIEULPHIEUPH + {0x8287, 0xAD5F}, //237 #HANGUL SYLLABLE KIYEOK YO RIEULHIEUH + {0x8288, 0xAD60}, //238 #HANGUL SYLLABLE KIYEOK YO MIEUM + {0x8289, 0xAD62}, //239 #HANGUL SYLLABLE KIYEOK YO PIEUPSIOS + {0x828A, 0xAD64}, //240 #HANGUL SYLLABLE KIYEOK YO SSANGSIOS + {0x828B, 0xAD65}, //241 #HANGUL SYLLABLE KIYEOK YO IEUNG + {0x828C, 0xAD66}, //242 #HANGUL SYLLABLE KIYEOK YO CIEUC + {0x828D, 0xAD67}, //243 #HANGUL SYLLABLE KIYEOK YO CHIEUCH + {0x828E, 0xAD68}, //244 #HANGUL SYLLABLE KIYEOK YO KHIEUKH + {0x828F, 0xAD69}, //245 #HANGUL SYLLABLE KIYEOK YO THIEUTH + {0x8290, 0xAD6A}, //246 #HANGUL SYLLABLE KIYEOK YO PHIEUPH + {0x8291, 0xAD6B}, //247 #HANGUL SYLLABLE KIYEOK YO HIEUH + {0x8292, 0xAD6E}, //248 #HANGUL SYLLABLE KIYEOK U SSANGKIYEOK + {0x8293, 0xAD6F}, //249 #HANGUL SYLLABLE KIYEOK U KIYEOKSIOS + {0x8294, 0xAD71}, //250 #HANGUL SYLLABLE KIYEOK U NIEUNCIEUC + {0x8295, 0xAD72}, //251 #HANGUL SYLLABLE KIYEOK U NIEUNHIEUH + {0x8296, 0xAD77}, //252 #HANGUL SYLLABLE KIYEOK U RIEULPIEUP + {0x8297, 0xAD78}, //253 #HANGUL SYLLABLE KIYEOK U RIEULSIOS + {0x8298, 0xAD79}, //254 #HANGUL SYLLABLE KIYEOK U RIEULTHIEUTH + {0x8299, 0xAD7A}, //255 #HANGUL SYLLABLE KIYEOK U RIEULPHIEUPH + {0x829A, 0xAD7E}, //256 #HANGUL SYLLABLE KIYEOK U PIEUPSIOS + {0x829B, 0xAD80}, //257 #HANGUL SYLLABLE KIYEOK U SSANGSIOS + {0x829C, 0xAD83}, //258 #HANGUL SYLLABLE KIYEOK U CHIEUCH + {0x829D, 0xAD84}, //259 #HANGUL SYLLABLE KIYEOK U KHIEUKH + {0x829E, 0xAD85}, //260 #HANGUL SYLLABLE KIYEOK U THIEUTH + {0x829F, 0xAD86}, //261 #HANGUL SYLLABLE KIYEOK U PHIEUPH + {0x82A0, 0xAD87}, //262 #HANGUL SYLLABLE KIYEOK U HIEUH + {0x82A1, 0xAD8A}, //263 #HANGUL SYLLABLE KIYEOK WEO SSANGKIYEOK + {0x82A2, 0xAD8B}, //264 #HANGUL SYLLABLE KIYEOK WEO KIYEOKSIOS + {0x82A3, 0xAD8D}, //265 #HANGUL SYLLABLE KIYEOK WEO NIEUNCIEUC + {0x82A4, 0xAD8E}, //266 #HANGUL SYLLABLE KIYEOK WEO NIEUNHIEUH + {0x82A5, 0xAD8F}, //267 #HANGUL SYLLABLE KIYEOK WEO TIKEUT + {0x82A6, 0xAD91}, //268 #HANGUL SYLLABLE KIYEOK WEO RIEULKIYEOK + {0x82A7, 0xAD92}, //269 #HANGUL SYLLABLE KIYEOK WEO RIEULMIEUM + {0x82A8, 0xAD93}, //270 #HANGUL SYLLABLE KIYEOK WEO RIEULPIEUP + {0x82A9, 0xAD94}, //271 #HANGUL SYLLABLE KIYEOK WEO RIEULSIOS + {0x82AA, 0xAD95}, //272 #HANGUL SYLLABLE KIYEOK WEO RIEULTHIEUTH + {0x82AB, 0xAD96}, //273 #HANGUL SYLLABLE KIYEOK WEO RIEULPHIEUPH + {0x82AC, 0xAD97}, //274 #HANGUL SYLLABLE KIYEOK WEO RIEULHIEUH + {0x82AD, 0xAD98}, //275 #HANGUL SYLLABLE KIYEOK WEO MIEUM + {0x82AE, 0xAD99}, //276 #HANGUL SYLLABLE KIYEOK WEO PIEUP + {0x82AF, 0xAD9A}, //277 #HANGUL SYLLABLE KIYEOK WEO PIEUPSIOS + {0x82B0, 0xAD9B}, //278 #HANGUL SYLLABLE KIYEOK WEO SIOS + {0x82B1, 0xAD9E}, //279 #HANGUL SYLLABLE KIYEOK WEO CIEUC + {0x82B2, 0xAD9F}, //280 #HANGUL SYLLABLE KIYEOK WEO CHIEUCH + {0x82B3, 0xADA0}, //281 #HANGUL SYLLABLE KIYEOK WEO KHIEUKH + {0x82B4, 0xADA1}, //282 #HANGUL SYLLABLE KIYEOK WEO THIEUTH + {0x82B5, 0xADA2}, //283 #HANGUL SYLLABLE KIYEOK WEO PHIEUPH + {0x82B6, 0xADA3}, //284 #HANGUL SYLLABLE KIYEOK WEO HIEUH + {0x82B7, 0xADA5}, //285 #HANGUL SYLLABLE KIYEOK WE KIYEOK + {0x82B8, 0xADA6}, //286 #HANGUL SYLLABLE KIYEOK WE SSANGKIYEOK + {0x82B9, 0xADA7}, //287 #HANGUL SYLLABLE KIYEOK WE KIYEOKSIOS + {0x82BA, 0xADA8}, //288 #HANGUL SYLLABLE KIYEOK WE NIEUN + {0x82BB, 0xADA9}, //289 #HANGUL SYLLABLE KIYEOK WE NIEUNCIEUC + {0x82BC, 0xADAA}, //290 #HANGUL SYLLABLE KIYEOK WE NIEUNHIEUH + {0x82BD, 0xADAB}, //291 #HANGUL SYLLABLE KIYEOK WE TIKEUT + {0x82BE, 0xADAC}, //292 #HANGUL SYLLABLE KIYEOK WE RIEUL + {0x82BF, 0xADAD}, //293 #HANGUL SYLLABLE KIYEOK WE RIEULKIYEOK + {0x82C0, 0xADAE}, //294 #HANGUL SYLLABLE KIYEOK WE RIEULMIEUM + {0x82C1, 0xADAF}, //295 #HANGUL SYLLABLE KIYEOK WE RIEULPIEUP + {0x82C2, 0xADB0}, //296 #HANGUL SYLLABLE KIYEOK WE RIEULSIOS + {0x82C3, 0xADB1}, //297 #HANGUL SYLLABLE KIYEOK WE RIEULTHIEUTH + {0x82C4, 0xADB2}, //298 #HANGUL SYLLABLE KIYEOK WE RIEULPHIEUPH + {0x82C5, 0xADB3}, //299 #HANGUL SYLLABLE KIYEOK WE RIEULHIEUH + {0x82C6, 0xADB4}, //300 #HANGUL SYLLABLE KIYEOK WE MIEUM + {0x82C7, 0xADB5}, //301 #HANGUL SYLLABLE KIYEOK WE PIEUP + {0x82C8, 0xADB6}, //302 #HANGUL SYLLABLE KIYEOK WE PIEUPSIOS + {0x82C9, 0xADB8}, //303 #HANGUL SYLLABLE KIYEOK WE SSANGSIOS + {0x82CA, 0xADB9}, //304 #HANGUL SYLLABLE KIYEOK WE IEUNG + {0x82CB, 0xADBA}, //305 #HANGUL SYLLABLE KIYEOK WE CIEUC + {0x82CC, 0xADBB}, //306 #HANGUL SYLLABLE KIYEOK WE CHIEUCH + {0x82CD, 0xADBC}, //307 #HANGUL SYLLABLE KIYEOK WE KHIEUKH + {0x82CE, 0xADBD}, //308 #HANGUL SYLLABLE KIYEOK WE THIEUTH + {0x82CF, 0xADBE}, //309 #HANGUL SYLLABLE KIYEOK WE PHIEUPH + {0x82D0, 0xADBF}, //310 #HANGUL SYLLABLE KIYEOK WE HIEUH + {0x82D1, 0xADC2}, //311 #HANGUL SYLLABLE KIYEOK WI SSANGKIYEOK + {0x82D2, 0xADC3}, //312 #HANGUL SYLLABLE KIYEOK WI KIYEOKSIOS + {0x82D3, 0xADC5}, //313 #HANGUL SYLLABLE KIYEOK WI NIEUNCIEUC + {0x82D4, 0xADC6}, //314 #HANGUL SYLLABLE KIYEOK WI NIEUNHIEUH + {0x82D5, 0xADC7}, //315 #HANGUL SYLLABLE KIYEOK WI TIKEUT + {0x82D6, 0xADC9}, //316 #HANGUL SYLLABLE KIYEOK WI RIEULKIYEOK + {0x82D7, 0xADCA}, //317 #HANGUL SYLLABLE KIYEOK WI RIEULMIEUM + {0x82D8, 0xADCB}, //318 #HANGUL SYLLABLE KIYEOK WI RIEULPIEUP + {0x82D9, 0xADCC}, //319 #HANGUL SYLLABLE KIYEOK WI RIEULSIOS + {0x82DA, 0xADCD}, //320 #HANGUL SYLLABLE KIYEOK WI RIEULTHIEUTH + {0x82DB, 0xADCE}, //321 #HANGUL SYLLABLE KIYEOK WI RIEULPHIEUPH + {0x82DC, 0xADCF}, //322 #HANGUL SYLLABLE KIYEOK WI RIEULHIEUH + {0x82DD, 0xADD2}, //323 #HANGUL SYLLABLE KIYEOK WI PIEUPSIOS + {0x82DE, 0xADD4}, //324 #HANGUL SYLLABLE KIYEOK WI SSANGSIOS + {0x82DF, 0xADD5}, //325 #HANGUL SYLLABLE KIYEOK WI IEUNG + {0x82E0, 0xADD6}, //326 #HANGUL SYLLABLE KIYEOK WI CIEUC + {0x82E1, 0xADD7}, //327 #HANGUL SYLLABLE KIYEOK WI CHIEUCH + {0x82E2, 0xADD8}, //328 #HANGUL SYLLABLE KIYEOK WI KHIEUKH + {0x82E3, 0xADD9}, //329 #HANGUL SYLLABLE KIYEOK WI THIEUTH + {0x82E4, 0xADDA}, //330 #HANGUL SYLLABLE KIYEOK WI PHIEUPH + {0x82E5, 0xADDB}, //331 #HANGUL SYLLABLE KIYEOK WI HIEUH + {0x82E6, 0xADDD}, //332 #HANGUL SYLLABLE KIYEOK YU KIYEOK + {0x82E7, 0xADDE}, //333 #HANGUL SYLLABLE KIYEOK YU SSANGKIYEOK + {0x82E8, 0xADDF}, //334 #HANGUL SYLLABLE KIYEOK YU KIYEOKSIOS + {0x82E9, 0xADE1}, //335 #HANGUL SYLLABLE KIYEOK YU NIEUNCIEUC + {0x82EA, 0xADE2}, //336 #HANGUL SYLLABLE KIYEOK YU NIEUNHIEUH + {0x82EB, 0xADE3}, //337 #HANGUL SYLLABLE KIYEOK YU TIKEUT + {0x82EC, 0xADE5}, //338 #HANGUL SYLLABLE KIYEOK YU RIEULKIYEOK + {0x82ED, 0xADE6}, //339 #HANGUL SYLLABLE KIYEOK YU RIEULMIEUM + {0x82EE, 0xADE7}, //340 #HANGUL SYLLABLE KIYEOK YU RIEULPIEUP + {0x82EF, 0xADE8}, //341 #HANGUL SYLLABLE KIYEOK YU RIEULSIOS + {0x82F0, 0xADE9}, //342 #HANGUL SYLLABLE KIYEOK YU RIEULTHIEUTH + {0x82F1, 0xADEA}, //343 #HANGUL SYLLABLE KIYEOK YU RIEULPHIEUPH + {0x82F2, 0xADEB}, //344 #HANGUL SYLLABLE KIYEOK YU RIEULHIEUH + {0x82F3, 0xADEC}, //345 #HANGUL SYLLABLE KIYEOK YU MIEUM + {0x82F4, 0xADED}, //346 #HANGUL SYLLABLE KIYEOK YU PIEUP + {0x82F5, 0xADEE}, //347 #HANGUL SYLLABLE KIYEOK YU PIEUPSIOS + {0x82F6, 0xADEF}, //348 #HANGUL SYLLABLE KIYEOK YU SIOS + {0x82F7, 0xADF0}, //349 #HANGUL SYLLABLE KIYEOK YU SSANGSIOS + {0x82F8, 0xADF1}, //350 #HANGUL SYLLABLE KIYEOK YU IEUNG + {0x82F9, 0xADF2}, //351 #HANGUL SYLLABLE KIYEOK YU CIEUC + {0x82FA, 0xADF3}, //352 #HANGUL SYLLABLE KIYEOK YU CHIEUCH + {0x82FB, 0xADF4}, //353 #HANGUL SYLLABLE KIYEOK YU KHIEUKH + {0x82FC, 0xADF5}, //354 #HANGUL SYLLABLE KIYEOK YU THIEUTH + {0x82FD, 0xADF6}, //355 #HANGUL SYLLABLE KIYEOK YU PHIEUPH + {0x82FE, 0xADF7}, //356 #HANGUL SYLLABLE KIYEOK YU HIEUH + {0x8341, 0xADFA}, //357 #HANGUL SYLLABLE KIYEOK EU SSANGKIYEOK + {0x8342, 0xADFB}, //358 #HANGUL SYLLABLE KIYEOK EU KIYEOKSIOS + {0x8343, 0xADFD}, //359 #HANGUL SYLLABLE KIYEOK EU NIEUNCIEUC + {0x8344, 0xADFE}, //360 #HANGUL SYLLABLE KIYEOK EU NIEUNHIEUH + {0x8345, 0xAE02}, //361 #HANGUL SYLLABLE KIYEOK EU RIEULMIEUM + {0x8346, 0xAE03}, //362 #HANGUL SYLLABLE KIYEOK EU RIEULPIEUP + {0x8347, 0xAE04}, //363 #HANGUL SYLLABLE KIYEOK EU RIEULSIOS + {0x8348, 0xAE05}, //364 #HANGUL SYLLABLE KIYEOK EU RIEULTHIEUTH + {0x8349, 0xAE06}, //365 #HANGUL SYLLABLE KIYEOK EU RIEULPHIEUPH + {0x834A, 0xAE07}, //366 #HANGUL SYLLABLE KIYEOK EU RIEULHIEUH + {0x834B, 0xAE0A}, //367 #HANGUL SYLLABLE KIYEOK EU PIEUPSIOS + {0x834C, 0xAE0C}, //368 #HANGUL SYLLABLE KIYEOK EU SSANGSIOS + {0x834D, 0xAE0E}, //369 #HANGUL SYLLABLE KIYEOK EU CIEUC + {0x834E, 0xAE0F}, //370 #HANGUL SYLLABLE KIYEOK EU CHIEUCH + {0x834F, 0xAE10}, //371 #HANGUL SYLLABLE KIYEOK EU KHIEUKH + {0x8350, 0xAE11}, //372 #HANGUL SYLLABLE KIYEOK EU THIEUTH + {0x8351, 0xAE12}, //373 #HANGUL SYLLABLE KIYEOK EU PHIEUPH + {0x8352, 0xAE13}, //374 #HANGUL SYLLABLE KIYEOK EU HIEUH + {0x8353, 0xAE15}, //375 #HANGUL SYLLABLE KIYEOK YI KIYEOK + {0x8354, 0xAE16}, //376 #HANGUL SYLLABLE KIYEOK YI SSANGKIYEOK + {0x8355, 0xAE17}, //377 #HANGUL SYLLABLE KIYEOK YI KIYEOKSIOS + {0x8356, 0xAE18}, //378 #HANGUL SYLLABLE KIYEOK YI NIEUN + {0x8357, 0xAE19}, //379 #HANGUL SYLLABLE KIYEOK YI NIEUNCIEUC + {0x8358, 0xAE1A}, //380 #HANGUL SYLLABLE KIYEOK YI NIEUNHIEUH + {0x8359, 0xAE1B}, //381 #HANGUL SYLLABLE KIYEOK YI TIKEUT + {0x835A, 0xAE1C}, //382 #HANGUL SYLLABLE KIYEOK YI RIEUL + {0x8361, 0xAE1D}, //383 #HANGUL SYLLABLE KIYEOK YI RIEULKIYEOK + {0x8362, 0xAE1E}, //384 #HANGUL SYLLABLE KIYEOK YI RIEULMIEUM + {0x8363, 0xAE1F}, //385 #HANGUL SYLLABLE KIYEOK YI RIEULPIEUP + {0x8364, 0xAE20}, //386 #HANGUL SYLLABLE KIYEOK YI RIEULSIOS + {0x8365, 0xAE21}, //387 #HANGUL SYLLABLE KIYEOK YI RIEULTHIEUTH + {0x8366, 0xAE22}, //388 #HANGUL SYLLABLE KIYEOK YI RIEULPHIEUPH + {0x8367, 0xAE23}, //389 #HANGUL SYLLABLE KIYEOK YI RIEULHIEUH + {0x8368, 0xAE24}, //390 #HANGUL SYLLABLE KIYEOK YI MIEUM + {0x8369, 0xAE25}, //391 #HANGUL SYLLABLE KIYEOK YI PIEUP + {0x836A, 0xAE26}, //392 #HANGUL SYLLABLE KIYEOK YI PIEUPSIOS + {0x836B, 0xAE27}, //393 #HANGUL SYLLABLE KIYEOK YI SIOS + {0x836C, 0xAE28}, //394 #HANGUL SYLLABLE KIYEOK YI SSANGSIOS + {0x836D, 0xAE29}, //395 #HANGUL SYLLABLE KIYEOK YI IEUNG + {0x836E, 0xAE2A}, //396 #HANGUL SYLLABLE KIYEOK YI CIEUC + {0x836F, 0xAE2B}, //397 #HANGUL SYLLABLE KIYEOK YI CHIEUCH + {0x8370, 0xAE2C}, //398 #HANGUL SYLLABLE KIYEOK YI KHIEUKH + {0x8371, 0xAE2D}, //399 #HANGUL SYLLABLE KIYEOK YI THIEUTH + {0x8372, 0xAE2E}, //400 #HANGUL SYLLABLE KIYEOK YI PHIEUPH + {0x8373, 0xAE2F}, //401 #HANGUL SYLLABLE KIYEOK YI HIEUH + {0x8374, 0xAE32}, //402 #HANGUL SYLLABLE KIYEOK I SSANGKIYEOK + {0x8375, 0xAE33}, //403 #HANGUL SYLLABLE KIYEOK I KIYEOKSIOS + {0x8376, 0xAE35}, //404 #HANGUL SYLLABLE KIYEOK I NIEUNCIEUC + {0x8377, 0xAE36}, //405 #HANGUL SYLLABLE KIYEOK I NIEUNHIEUH + {0x8378, 0xAE39}, //406 #HANGUL SYLLABLE KIYEOK I RIEULKIYEOK + {0x8379, 0xAE3B}, //407 #HANGUL SYLLABLE KIYEOK I RIEULPIEUP + {0x837A, 0xAE3C}, //408 #HANGUL SYLLABLE KIYEOK I RIEULSIOS + {0x8381, 0xAE3D}, //409 #HANGUL SYLLABLE KIYEOK I RIEULTHIEUTH + {0x8382, 0xAE3E}, //410 #HANGUL SYLLABLE KIYEOK I RIEULPHIEUPH + {0x8383, 0xAE3F}, //411 #HANGUL SYLLABLE KIYEOK I RIEULHIEUH + {0x8384, 0xAE42}, //412 #HANGUL SYLLABLE KIYEOK I PIEUPSIOS + {0x8385, 0xAE44}, //413 #HANGUL SYLLABLE KIYEOK I SSANGSIOS + {0x8386, 0xAE47}, //414 #HANGUL SYLLABLE KIYEOK I CHIEUCH + {0x8387, 0xAE48}, //415 #HANGUL SYLLABLE KIYEOK I KHIEUKH + {0x8388, 0xAE49}, //416 #HANGUL SYLLABLE KIYEOK I THIEUTH + {0x8389, 0xAE4B}, //417 #HANGUL SYLLABLE KIYEOK I HIEUH + {0x838A, 0xAE4F}, //418 #HANGUL SYLLABLE SSANGKIYEOK A KIYEOKSIOS + {0x838B, 0xAE51}, //419 #HANGUL SYLLABLE SSANGKIYEOK A NIEUNCIEUC + {0x838C, 0xAE52}, //420 #HANGUL SYLLABLE SSANGKIYEOK A NIEUNHIEUH + {0x838D, 0xAE53}, //421 #HANGUL SYLLABLE SSANGKIYEOK A TIKEUT + {0x838E, 0xAE55}, //422 #HANGUL SYLLABLE SSANGKIYEOK A RIEULKIYEOK + {0x838F, 0xAE57}, //423 #HANGUL SYLLABLE SSANGKIYEOK A RIEULPIEUP + {0x8390, 0xAE58}, //424 #HANGUL SYLLABLE SSANGKIYEOK A RIEULSIOS + {0x8391, 0xAE59}, //425 #HANGUL SYLLABLE SSANGKIYEOK A RIEULTHIEUTH + {0x8392, 0xAE5A}, //426 #HANGUL SYLLABLE SSANGKIYEOK A RIEULPHIEUPH + {0x8393, 0xAE5B}, //427 #HANGUL SYLLABLE SSANGKIYEOK A RIEULHIEUH + {0x8394, 0xAE5E}, //428 #HANGUL SYLLABLE SSANGKIYEOK A PIEUPSIOS + {0x8395, 0xAE62}, //429 #HANGUL SYLLABLE SSANGKIYEOK A CIEUC + {0x8396, 0xAE63}, //430 #HANGUL SYLLABLE SSANGKIYEOK A CHIEUCH + {0x8397, 0xAE64}, //431 #HANGUL SYLLABLE SSANGKIYEOK A KHIEUKH + {0x8398, 0xAE66}, //432 #HANGUL SYLLABLE SSANGKIYEOK A PHIEUPH + {0x8399, 0xAE67}, //433 #HANGUL SYLLABLE SSANGKIYEOK A HIEUH + {0x839A, 0xAE6A}, //434 #HANGUL SYLLABLE SSANGKIYEOK AE SSANGKIYEOK + {0x839B, 0xAE6B}, //435 #HANGUL SYLLABLE SSANGKIYEOK AE KIYEOKSIOS + {0x839C, 0xAE6D}, //436 #HANGUL SYLLABLE SSANGKIYEOK AE NIEUNCIEUC + {0x839D, 0xAE6E}, //437 #HANGUL SYLLABLE SSANGKIYEOK AE NIEUNHIEUH + {0x839E, 0xAE6F}, //438 #HANGUL SYLLABLE SSANGKIYEOK AE TIKEUT + {0x839F, 0xAE71}, //439 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULKIYEOK + {0x83A0, 0xAE72}, //440 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULMIEUM + {0x83A1, 0xAE73}, //441 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULPIEUP + {0x83A2, 0xAE74}, //442 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULSIOS + {0x83A3, 0xAE75}, //443 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULTHIEUTH + {0x83A4, 0xAE76}, //444 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULPHIEUPH + {0x83A5, 0xAE77}, //445 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULHIEUH + {0x83A6, 0xAE7A}, //446 #HANGUL SYLLABLE SSANGKIYEOK AE PIEUPSIOS + {0x83A7, 0xAE7E}, //447 #HANGUL SYLLABLE SSANGKIYEOK AE CIEUC + {0x83A8, 0xAE7F}, //448 #HANGUL SYLLABLE SSANGKIYEOK AE CHIEUCH + {0x83A9, 0xAE80}, //449 #HANGUL SYLLABLE SSANGKIYEOK AE KHIEUKH + {0x83AA, 0xAE81}, //450 #HANGUL SYLLABLE SSANGKIYEOK AE THIEUTH + {0x83AB, 0xAE82}, //451 #HANGUL SYLLABLE SSANGKIYEOK AE PHIEUPH + {0x83AC, 0xAE83}, //452 #HANGUL SYLLABLE SSANGKIYEOK AE HIEUH + {0x83AD, 0xAE86}, //453 #HANGUL SYLLABLE SSANGKIYEOK YA SSANGKIYEOK + {0x83AE, 0xAE87}, //454 #HANGUL SYLLABLE SSANGKIYEOK YA KIYEOKSIOS + {0x83AF, 0xAE88}, //455 #HANGUL SYLLABLE SSANGKIYEOK YA NIEUN + {0x83B0, 0xAE89}, //456 #HANGUL SYLLABLE SSANGKIYEOK YA NIEUNCIEUC + {0x83B1, 0xAE8A}, //457 #HANGUL SYLLABLE SSANGKIYEOK YA NIEUNHIEUH + {0x83B2, 0xAE8B}, //458 #HANGUL SYLLABLE SSANGKIYEOK YA TIKEUT + {0x83B3, 0xAE8D}, //459 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULKIYEOK + {0x83B4, 0xAE8E}, //460 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULMIEUM + {0x83B5, 0xAE8F}, //461 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULPIEUP + {0x83B6, 0xAE90}, //462 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULSIOS + {0x83B7, 0xAE91}, //463 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULTHIEUTH + {0x83B8, 0xAE92}, //464 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULPHIEUPH + {0x83B9, 0xAE93}, //465 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULHIEUH + {0x83BA, 0xAE94}, //466 #HANGUL SYLLABLE SSANGKIYEOK YA MIEUM + {0x83BB, 0xAE95}, //467 #HANGUL SYLLABLE SSANGKIYEOK YA PIEUP + {0x83BC, 0xAE96}, //468 #HANGUL SYLLABLE SSANGKIYEOK YA PIEUPSIOS + {0x83BD, 0xAE97}, //469 #HANGUL SYLLABLE SSANGKIYEOK YA SIOS + {0x83BE, 0xAE98}, //470 #HANGUL SYLLABLE SSANGKIYEOK YA SSANGSIOS + {0x83BF, 0xAE99}, //471 #HANGUL SYLLABLE SSANGKIYEOK YA IEUNG + {0x83C0, 0xAE9A}, //472 #HANGUL SYLLABLE SSANGKIYEOK YA CIEUC + {0x83C1, 0xAE9B}, //473 #HANGUL SYLLABLE SSANGKIYEOK YA CHIEUCH + {0x83C2, 0xAE9C}, //474 #HANGUL SYLLABLE SSANGKIYEOK YA KHIEUKH + {0x83C3, 0xAE9D}, //475 #HANGUL SYLLABLE SSANGKIYEOK YA THIEUTH + {0x83C4, 0xAE9E}, //476 #HANGUL SYLLABLE SSANGKIYEOK YA PHIEUPH + {0x83C5, 0xAE9F}, //477 #HANGUL SYLLABLE SSANGKIYEOK YA HIEUH + {0x83C6, 0xAEA0}, //478 #HANGUL SYLLABLE SSANGKIYEOK YAE + {0x83C7, 0xAEA1}, //479 #HANGUL SYLLABLE SSANGKIYEOK YAE KIYEOK + {0x83C8, 0xAEA2}, //480 #HANGUL SYLLABLE SSANGKIYEOK YAE SSANGKIYEOK + {0x83C9, 0xAEA3}, //481 #HANGUL SYLLABLE SSANGKIYEOK YAE KIYEOKSIOS + {0x83CA, 0xAEA4}, //482 #HANGUL SYLLABLE SSANGKIYEOK YAE NIEUN + {0x83CB, 0xAEA5}, //483 #HANGUL SYLLABLE SSANGKIYEOK YAE NIEUNCIEUC + {0x83CC, 0xAEA6}, //484 #HANGUL SYLLABLE SSANGKIYEOK YAE NIEUNHIEUH + {0x83CD, 0xAEA7}, //485 #HANGUL SYLLABLE SSANGKIYEOK YAE TIKEUT + {0x83CE, 0xAEA8}, //486 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEUL + {0x83CF, 0xAEA9}, //487 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULKIYEOK + {0x83D0, 0xAEAA}, //488 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULMIEUM + {0x83D1, 0xAEAB}, //489 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULPIEUP + {0x83D2, 0xAEAC}, //490 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULSIOS + {0x83D3, 0xAEAD}, //491 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULTHIEUTH + {0x83D4, 0xAEAE}, //492 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULPHIEUPH + {0x83D5, 0xAEAF}, //493 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULHIEUH + {0x83D6, 0xAEB0}, //494 #HANGUL SYLLABLE SSANGKIYEOK YAE MIEUM + {0x83D7, 0xAEB1}, //495 #HANGUL SYLLABLE SSANGKIYEOK YAE PIEUP + {0x83D8, 0xAEB2}, //496 #HANGUL SYLLABLE SSANGKIYEOK YAE PIEUPSIOS + {0x83D9, 0xAEB3}, //497 #HANGUL SYLLABLE SSANGKIYEOK YAE SIOS + {0x83DA, 0xAEB4}, //498 #HANGUL SYLLABLE SSANGKIYEOK YAE SSANGSIOS + {0x83DB, 0xAEB5}, //499 #HANGUL SYLLABLE SSANGKIYEOK YAE IEUNG + {0x83DC, 0xAEB6}, //500 #HANGUL SYLLABLE SSANGKIYEOK YAE CIEUC + {0x83DD, 0xAEB7}, //501 #HANGUL SYLLABLE SSANGKIYEOK YAE CHIEUCH + {0x83DE, 0xAEB8}, //502 #HANGUL SYLLABLE SSANGKIYEOK YAE KHIEUKH + {0x83DF, 0xAEB9}, //503 #HANGUL SYLLABLE SSANGKIYEOK YAE THIEUTH + {0x83E0, 0xAEBA}, //504 #HANGUL SYLLABLE SSANGKIYEOK YAE PHIEUPH + {0x83E1, 0xAEBB}, //505 #HANGUL SYLLABLE SSANGKIYEOK YAE HIEUH + {0x83E2, 0xAEBF}, //506 #HANGUL SYLLABLE SSANGKIYEOK EO KIYEOKSIOS + {0x83E3, 0xAEC1}, //507 #HANGUL SYLLABLE SSANGKIYEOK EO NIEUNCIEUC + {0x83E4, 0xAEC2}, //508 #HANGUL SYLLABLE SSANGKIYEOK EO NIEUNHIEUH + {0x83E5, 0xAEC3}, //509 #HANGUL SYLLABLE SSANGKIYEOK EO TIKEUT + {0x83E6, 0xAEC5}, //510 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULKIYEOK + {0x83E7, 0xAEC6}, //511 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULMIEUM + {0x83E8, 0xAEC7}, //512 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULPIEUP + {0x83E9, 0xAEC8}, //513 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULSIOS + {0x83EA, 0xAEC9}, //514 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULTHIEUTH + {0x83EB, 0xAECA}, //515 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULPHIEUPH + {0x83EC, 0xAECB}, //516 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULHIEUH + {0x83ED, 0xAECE}, //517 #HANGUL SYLLABLE SSANGKIYEOK EO PIEUPSIOS + {0x83EE, 0xAED2}, //518 #HANGUL SYLLABLE SSANGKIYEOK EO CIEUC + {0x83EF, 0xAED3}, //519 #HANGUL SYLLABLE SSANGKIYEOK EO CHIEUCH + {0x83F0, 0xAED4}, //520 #HANGUL SYLLABLE SSANGKIYEOK EO KHIEUKH + {0x83F1, 0xAED5}, //521 #HANGUL SYLLABLE SSANGKIYEOK EO THIEUTH + {0x83F2, 0xAED6}, //522 #HANGUL SYLLABLE SSANGKIYEOK EO PHIEUPH + {0x83F3, 0xAED7}, //523 #HANGUL SYLLABLE SSANGKIYEOK EO HIEUH + {0x83F4, 0xAEDA}, //524 #HANGUL SYLLABLE SSANGKIYEOK E SSANGKIYEOK + {0x83F5, 0xAEDB}, //525 #HANGUL SYLLABLE SSANGKIYEOK E KIYEOKSIOS + {0x83F6, 0xAEDD}, //526 #HANGUL SYLLABLE SSANGKIYEOK E NIEUNCIEUC + {0x83F7, 0xAEDE}, //527 #HANGUL SYLLABLE SSANGKIYEOK E NIEUNHIEUH + {0x83F8, 0xAEDF}, //528 #HANGUL SYLLABLE SSANGKIYEOK E TIKEUT + {0x83F9, 0xAEE0}, //529 #HANGUL SYLLABLE SSANGKIYEOK E RIEUL + {0x83FA, 0xAEE1}, //530 #HANGUL SYLLABLE SSANGKIYEOK E RIEULKIYEOK + {0x83FB, 0xAEE2}, //531 #HANGUL SYLLABLE SSANGKIYEOK E RIEULMIEUM + {0x83FC, 0xAEE3}, //532 #HANGUL SYLLABLE SSANGKIYEOK E RIEULPIEUP + {0x83FD, 0xAEE4}, //533 #HANGUL SYLLABLE SSANGKIYEOK E RIEULSIOS + {0x83FE, 0xAEE5}, //534 #HANGUL SYLLABLE SSANGKIYEOK E RIEULTHIEUTH + {0x8441, 0xAEE6}, //535 #HANGUL SYLLABLE SSANGKIYEOK E RIEULPHIEUPH + {0x8442, 0xAEE7}, //536 #HANGUL SYLLABLE SSANGKIYEOK E RIEULHIEUH + {0x8443, 0xAEE9}, //537 #HANGUL SYLLABLE SSANGKIYEOK E PIEUP + {0x8444, 0xAEEA}, //538 #HANGUL SYLLABLE SSANGKIYEOK E PIEUPSIOS + {0x8445, 0xAEEC}, //539 #HANGUL SYLLABLE SSANGKIYEOK E SSANGSIOS + {0x8446, 0xAEEE}, //540 #HANGUL SYLLABLE SSANGKIYEOK E CIEUC + {0x8447, 0xAEEF}, //541 #HANGUL SYLLABLE SSANGKIYEOK E CHIEUCH + {0x8448, 0xAEF0}, //542 #HANGUL SYLLABLE SSANGKIYEOK E KHIEUKH + {0x8449, 0xAEF1}, //543 #HANGUL SYLLABLE SSANGKIYEOK E THIEUTH + {0x844A, 0xAEF2}, //544 #HANGUL SYLLABLE SSANGKIYEOK E PHIEUPH + {0x844B, 0xAEF3}, //545 #HANGUL SYLLABLE SSANGKIYEOK E HIEUH + {0x844C, 0xAEF5}, //546 #HANGUL SYLLABLE SSANGKIYEOK YEO KIYEOK + {0x844D, 0xAEF6}, //547 #HANGUL SYLLABLE SSANGKIYEOK YEO SSANGKIYEOK + {0x844E, 0xAEF7}, //548 #HANGUL SYLLABLE SSANGKIYEOK YEO KIYEOKSIOS + {0x844F, 0xAEF9}, //549 #HANGUL SYLLABLE SSANGKIYEOK YEO NIEUNCIEUC + {0x8450, 0xAEFA}, //550 #HANGUL SYLLABLE SSANGKIYEOK YEO NIEUNHIEUH + {0x8451, 0xAEFB}, //551 #HANGUL SYLLABLE SSANGKIYEOK YEO TIKEUT + {0x8452, 0xAEFD}, //552 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULKIYEOK + {0x8453, 0xAEFE}, //553 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULMIEUM + {0x8454, 0xAEFF}, //554 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULPIEUP + {0x8455, 0xAF00}, //555 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULSIOS + {0x8456, 0xAF01}, //556 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULTHIEUTH + {0x8457, 0xAF02}, //557 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULPHIEUPH + {0x8458, 0xAF03}, //558 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULHIEUH + {0x8459, 0xAF04}, //559 #HANGUL SYLLABLE SSANGKIYEOK YEO MIEUM + {0x845A, 0xAF05}, //560 #HANGUL SYLLABLE SSANGKIYEOK YEO PIEUP + {0x8461, 0xAF06}, //561 #HANGUL SYLLABLE SSANGKIYEOK YEO PIEUPSIOS + {0x8462, 0xAF09}, //562 #HANGUL SYLLABLE SSANGKIYEOK YEO IEUNG + {0x8463, 0xAF0A}, //563 #HANGUL SYLLABLE SSANGKIYEOK YEO CIEUC + {0x8464, 0xAF0B}, //564 #HANGUL SYLLABLE SSANGKIYEOK YEO CHIEUCH + {0x8465, 0xAF0C}, //565 #HANGUL SYLLABLE SSANGKIYEOK YEO KHIEUKH + {0x8466, 0xAF0E}, //566 #HANGUL SYLLABLE SSANGKIYEOK YEO PHIEUPH + {0x8467, 0xAF0F}, //567 #HANGUL SYLLABLE SSANGKIYEOK YEO HIEUH + {0x8468, 0xAF11}, //568 #HANGUL SYLLABLE SSANGKIYEOK YE KIYEOK + {0x8469, 0xAF12}, //569 #HANGUL SYLLABLE SSANGKIYEOK YE SSANGKIYEOK + {0x846A, 0xAF13}, //570 #HANGUL SYLLABLE SSANGKIYEOK YE KIYEOKSIOS + {0x846B, 0xAF14}, //571 #HANGUL SYLLABLE SSANGKIYEOK YE NIEUN + {0x846C, 0xAF15}, //572 #HANGUL SYLLABLE SSANGKIYEOK YE NIEUNCIEUC + {0x846D, 0xAF16}, //573 #HANGUL SYLLABLE SSANGKIYEOK YE NIEUNHIEUH + {0x846E, 0xAF17}, //574 #HANGUL SYLLABLE SSANGKIYEOK YE TIKEUT + {0x846F, 0xAF18}, //575 #HANGUL SYLLABLE SSANGKIYEOK YE RIEUL + {0x8470, 0xAF19}, //576 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULKIYEOK + {0x8471, 0xAF1A}, //577 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULMIEUM + {0x8472, 0xAF1B}, //578 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULPIEUP + {0x8473, 0xAF1C}, //579 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULSIOS + {0x8474, 0xAF1D}, //580 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULTHIEUTH + {0x8475, 0xAF1E}, //581 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULPHIEUPH + {0x8476, 0xAF1F}, //582 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULHIEUH + {0x8477, 0xAF20}, //583 #HANGUL SYLLABLE SSANGKIYEOK YE MIEUM + {0x8478, 0xAF21}, //584 #HANGUL SYLLABLE SSANGKIYEOK YE PIEUP + {0x8479, 0xAF22}, //585 #HANGUL SYLLABLE SSANGKIYEOK YE PIEUPSIOS + {0x847A, 0xAF23}, //586 #HANGUL SYLLABLE SSANGKIYEOK YE SIOS + {0x8481, 0xAF24}, //587 #HANGUL SYLLABLE SSANGKIYEOK YE SSANGSIOS + {0x8482, 0xAF25}, //588 #HANGUL SYLLABLE SSANGKIYEOK YE IEUNG + {0x8483, 0xAF26}, //589 #HANGUL SYLLABLE SSANGKIYEOK YE CIEUC + {0x8484, 0xAF27}, //590 #HANGUL SYLLABLE SSANGKIYEOK YE CHIEUCH + {0x8485, 0xAF28}, //591 #HANGUL SYLLABLE SSANGKIYEOK YE KHIEUKH + {0x8486, 0xAF29}, //592 #HANGUL SYLLABLE SSANGKIYEOK YE THIEUTH + {0x8487, 0xAF2A}, //593 #HANGUL SYLLABLE SSANGKIYEOK YE PHIEUPH + {0x8488, 0xAF2B}, //594 #HANGUL SYLLABLE SSANGKIYEOK YE HIEUH + {0x8489, 0xAF2E}, //595 #HANGUL SYLLABLE SSANGKIYEOK O SSANGKIYEOK + {0x848A, 0xAF2F}, //596 #HANGUL SYLLABLE SSANGKIYEOK O KIYEOKSIOS + {0x848B, 0xAF31}, //597 #HANGUL SYLLABLE SSANGKIYEOK O NIEUNCIEUC + {0x848C, 0xAF33}, //598 #HANGUL SYLLABLE SSANGKIYEOK O TIKEUT + {0x848D, 0xAF35}, //599 #HANGUL SYLLABLE SSANGKIYEOK O RIEULKIYEOK + {0x848E, 0xAF36}, //600 #HANGUL SYLLABLE SSANGKIYEOK O RIEULMIEUM + {0x848F, 0xAF37}, //601 #HANGUL SYLLABLE SSANGKIYEOK O RIEULPIEUP + {0x8490, 0xAF38}, //602 #HANGUL SYLLABLE SSANGKIYEOK O RIEULSIOS + {0x8491, 0xAF39}, //603 #HANGUL SYLLABLE SSANGKIYEOK O RIEULTHIEUTH + {0x8492, 0xAF3A}, //604 #HANGUL SYLLABLE SSANGKIYEOK O RIEULPHIEUPH + {0x8493, 0xAF3B}, //605 #HANGUL SYLLABLE SSANGKIYEOK O RIEULHIEUH + {0x8494, 0xAF3E}, //606 #HANGUL SYLLABLE SSANGKIYEOK O PIEUPSIOS + {0x8495, 0xAF40}, //607 #HANGUL SYLLABLE SSANGKIYEOK O SSANGSIOS + {0x8496, 0xAF44}, //608 #HANGUL SYLLABLE SSANGKIYEOK O KHIEUKH + {0x8497, 0xAF45}, //609 #HANGUL SYLLABLE SSANGKIYEOK O THIEUTH + {0x8498, 0xAF46}, //610 #HANGUL SYLLABLE SSANGKIYEOK O PHIEUPH + {0x8499, 0xAF47}, //611 #HANGUL SYLLABLE SSANGKIYEOK O HIEUH + {0x849A, 0xAF4A}, //612 #HANGUL SYLLABLE SSANGKIYEOK WA SSANGKIYEOK + {0x849B, 0xAF4B}, //613 #HANGUL SYLLABLE SSANGKIYEOK WA KIYEOKSIOS + {0x849C, 0xAF4C}, //614 #HANGUL SYLLABLE SSANGKIYEOK WA NIEUN + {0x849D, 0xAF4D}, //615 #HANGUL SYLLABLE SSANGKIYEOK WA NIEUNCIEUC + {0x849E, 0xAF4E}, //616 #HANGUL SYLLABLE SSANGKIYEOK WA NIEUNHIEUH + {0x849F, 0xAF4F}, //617 #HANGUL SYLLABLE SSANGKIYEOK WA TIKEUT + {0x84A0, 0xAF51}, //618 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULKIYEOK + {0x84A1, 0xAF52}, //619 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULMIEUM + {0x84A2, 0xAF53}, //620 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULPIEUP + {0x84A3, 0xAF54}, //621 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULSIOS + {0x84A4, 0xAF55}, //622 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULTHIEUTH + {0x84A5, 0xAF56}, //623 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULPHIEUPH + {0x84A6, 0xAF57}, //624 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULHIEUH + {0x84A7, 0xAF58}, //625 #HANGUL SYLLABLE SSANGKIYEOK WA MIEUM + {0x84A8, 0xAF59}, //626 #HANGUL SYLLABLE SSANGKIYEOK WA PIEUP + {0x84A9, 0xAF5A}, //627 #HANGUL SYLLABLE SSANGKIYEOK WA PIEUPSIOS + {0x84AA, 0xAF5B}, //628 #HANGUL SYLLABLE SSANGKIYEOK WA SIOS + {0x84AB, 0xAF5E}, //629 #HANGUL SYLLABLE SSANGKIYEOK WA CIEUC + {0x84AC, 0xAF5F}, //630 #HANGUL SYLLABLE SSANGKIYEOK WA CHIEUCH + {0x84AD, 0xAF60}, //631 #HANGUL SYLLABLE SSANGKIYEOK WA KHIEUKH + {0x84AE, 0xAF61}, //632 #HANGUL SYLLABLE SSANGKIYEOK WA THIEUTH + {0x84AF, 0xAF62}, //633 #HANGUL SYLLABLE SSANGKIYEOK WA PHIEUPH + {0x84B0, 0xAF63}, //634 #HANGUL SYLLABLE SSANGKIYEOK WA HIEUH + {0x84B1, 0xAF66}, //635 #HANGUL SYLLABLE SSANGKIYEOK WAE SSANGKIYEOK + {0x84B2, 0xAF67}, //636 #HANGUL SYLLABLE SSANGKIYEOK WAE KIYEOKSIOS + {0x84B3, 0xAF68}, //637 #HANGUL SYLLABLE SSANGKIYEOK WAE NIEUN + {0x84B4, 0xAF69}, //638 #HANGUL SYLLABLE SSANGKIYEOK WAE NIEUNCIEUC + {0x84B5, 0xAF6A}, //639 #HANGUL SYLLABLE SSANGKIYEOK WAE NIEUNHIEUH + {0x84B6, 0xAF6B}, //640 #HANGUL SYLLABLE SSANGKIYEOK WAE TIKEUT + {0x84B7, 0xAF6C}, //641 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEUL + {0x84B8, 0xAF6D}, //642 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULKIYEOK + {0x84B9, 0xAF6E}, //643 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULMIEUM + {0x84BA, 0xAF6F}, //644 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULPIEUP + {0x84BB, 0xAF70}, //645 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULSIOS + {0x84BC, 0xAF71}, //646 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULTHIEUTH + {0x84BD, 0xAF72}, //647 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULPHIEUPH + {0x84BE, 0xAF73}, //648 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULHIEUH + {0x84BF, 0xAF74}, //649 #HANGUL SYLLABLE SSANGKIYEOK WAE MIEUM + {0x84C0, 0xAF75}, //650 #HANGUL SYLLABLE SSANGKIYEOK WAE PIEUP + {0x84C1, 0xAF76}, //651 #HANGUL SYLLABLE SSANGKIYEOK WAE PIEUPSIOS + {0x84C2, 0xAF77}, //652 #HANGUL SYLLABLE SSANGKIYEOK WAE SIOS + {0x84C3, 0xAF78}, //653 #HANGUL SYLLABLE SSANGKIYEOK WAE SSANGSIOS + {0x84C4, 0xAF7A}, //654 #HANGUL SYLLABLE SSANGKIYEOK WAE CIEUC + {0x84C5, 0xAF7B}, //655 #HANGUL SYLLABLE SSANGKIYEOK WAE CHIEUCH + {0x84C6, 0xAF7C}, //656 #HANGUL SYLLABLE SSANGKIYEOK WAE KHIEUKH + {0x84C7, 0xAF7D}, //657 #HANGUL SYLLABLE SSANGKIYEOK WAE THIEUTH + {0x84C8, 0xAF7E}, //658 #HANGUL SYLLABLE SSANGKIYEOK WAE PHIEUPH + {0x84C9, 0xAF7F}, //659 #HANGUL SYLLABLE SSANGKIYEOK WAE HIEUH + {0x84CA, 0xAF81}, //660 #HANGUL SYLLABLE SSANGKIYEOK OE KIYEOK + {0x84CB, 0xAF82}, //661 #HANGUL SYLLABLE SSANGKIYEOK OE SSANGKIYEOK + {0x84CC, 0xAF83}, //662 #HANGUL SYLLABLE SSANGKIYEOK OE KIYEOKSIOS + {0x84CD, 0xAF85}, //663 #HANGUL SYLLABLE SSANGKIYEOK OE NIEUNCIEUC + {0x84CE, 0xAF86}, //664 #HANGUL SYLLABLE SSANGKIYEOK OE NIEUNHIEUH + {0x84CF, 0xAF87}, //665 #HANGUL SYLLABLE SSANGKIYEOK OE TIKEUT + {0x84D0, 0xAF89}, //666 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULKIYEOK + {0x84D1, 0xAF8A}, //667 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULMIEUM + {0x84D2, 0xAF8B}, //668 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULPIEUP + {0x84D3, 0xAF8C}, //669 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULSIOS + {0x84D4, 0xAF8D}, //670 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULTHIEUTH + {0x84D5, 0xAF8E}, //671 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULPHIEUPH + {0x84D6, 0xAF8F}, //672 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULHIEUH + {0x84D7, 0xAF92}, //673 #HANGUL SYLLABLE SSANGKIYEOK OE PIEUPSIOS + {0x84D8, 0xAF93}, //674 #HANGUL SYLLABLE SSANGKIYEOK OE SIOS + {0x84D9, 0xAF94}, //675 #HANGUL SYLLABLE SSANGKIYEOK OE SSANGSIOS + {0x84DA, 0xAF96}, //676 #HANGUL SYLLABLE SSANGKIYEOK OE CIEUC + {0x84DB, 0xAF97}, //677 #HANGUL SYLLABLE SSANGKIYEOK OE CHIEUCH + {0x84DC, 0xAF98}, //678 #HANGUL SYLLABLE SSANGKIYEOK OE KHIEUKH + {0x84DD, 0xAF99}, //679 #HANGUL SYLLABLE SSANGKIYEOK OE THIEUTH + {0x84DE, 0xAF9A}, //680 #HANGUL SYLLABLE SSANGKIYEOK OE PHIEUPH + {0x84DF, 0xAF9B}, //681 #HANGUL SYLLABLE SSANGKIYEOK OE HIEUH + {0x84E0, 0xAF9D}, //682 #HANGUL SYLLABLE SSANGKIYEOK YO KIYEOK + {0x84E1, 0xAF9E}, //683 #HANGUL SYLLABLE SSANGKIYEOK YO SSANGKIYEOK + {0x84E2, 0xAF9F}, //684 #HANGUL SYLLABLE SSANGKIYEOK YO KIYEOKSIOS + {0x84E3, 0xAFA0}, //685 #HANGUL SYLLABLE SSANGKIYEOK YO NIEUN + {0x84E4, 0xAFA1}, //686 #HANGUL SYLLABLE SSANGKIYEOK YO NIEUNCIEUC + {0x84E5, 0xAFA2}, //687 #HANGUL SYLLABLE SSANGKIYEOK YO NIEUNHIEUH + {0x84E6, 0xAFA3}, //688 #HANGUL SYLLABLE SSANGKIYEOK YO TIKEUT + {0x84E7, 0xAFA4}, //689 #HANGUL SYLLABLE SSANGKIYEOK YO RIEUL + {0x84E8, 0xAFA5}, //690 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULKIYEOK + {0x84E9, 0xAFA6}, //691 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULMIEUM + {0x84EA, 0xAFA7}, //692 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULPIEUP + {0x84EB, 0xAFA8}, //693 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULSIOS + {0x84EC, 0xAFA9}, //694 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULTHIEUTH + {0x84ED, 0xAFAA}, //695 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULPHIEUPH + {0x84EE, 0xAFAB}, //696 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULHIEUH + {0x84EF, 0xAFAC}, //697 #HANGUL SYLLABLE SSANGKIYEOK YO MIEUM + {0x84F0, 0xAFAD}, //698 #HANGUL SYLLABLE SSANGKIYEOK YO PIEUP + {0x84F1, 0xAFAE}, //699 #HANGUL SYLLABLE SSANGKIYEOK YO PIEUPSIOS + {0x84F2, 0xAFAF}, //700 #HANGUL SYLLABLE SSANGKIYEOK YO SIOS + {0x84F3, 0xAFB0}, //701 #HANGUL SYLLABLE SSANGKIYEOK YO SSANGSIOS + {0x84F4, 0xAFB1}, //702 #HANGUL SYLLABLE SSANGKIYEOK YO IEUNG + {0x84F5, 0xAFB2}, //703 #HANGUL SYLLABLE SSANGKIYEOK YO CIEUC + {0x84F6, 0xAFB3}, //704 #HANGUL SYLLABLE SSANGKIYEOK YO CHIEUCH + {0x84F7, 0xAFB4}, //705 #HANGUL SYLLABLE SSANGKIYEOK YO KHIEUKH + {0x84F8, 0xAFB5}, //706 #HANGUL SYLLABLE SSANGKIYEOK YO THIEUTH + {0x84F9, 0xAFB6}, //707 #HANGUL SYLLABLE SSANGKIYEOK YO PHIEUPH + {0x84FA, 0xAFB7}, //708 #HANGUL SYLLABLE SSANGKIYEOK YO HIEUH + {0x84FB, 0xAFBA}, //709 #HANGUL SYLLABLE SSANGKIYEOK U SSANGKIYEOK + {0x84FC, 0xAFBB}, //710 #HANGUL SYLLABLE SSANGKIYEOK U KIYEOKSIOS + {0x84FD, 0xAFBD}, //711 #HANGUL SYLLABLE SSANGKIYEOK U NIEUNCIEUC + {0x84FE, 0xAFBE}, //712 #HANGUL SYLLABLE SSANGKIYEOK U NIEUNHIEUH + {0x8541, 0xAFBF}, //713 #HANGUL SYLLABLE SSANGKIYEOK U TIKEUT + {0x8542, 0xAFC1}, //714 #HANGUL SYLLABLE SSANGKIYEOK U RIEULKIYEOK + {0x8543, 0xAFC2}, //715 #HANGUL SYLLABLE SSANGKIYEOK U RIEULMIEUM + {0x8544, 0xAFC3}, //716 #HANGUL SYLLABLE SSANGKIYEOK U RIEULPIEUP + {0x8545, 0xAFC4}, //717 #HANGUL SYLLABLE SSANGKIYEOK U RIEULSIOS + {0x8546, 0xAFC5}, //718 #HANGUL SYLLABLE SSANGKIYEOK U RIEULTHIEUTH + {0x8547, 0xAFC6}, //719 #HANGUL SYLLABLE SSANGKIYEOK U RIEULPHIEUPH + {0x8548, 0xAFCA}, //720 #HANGUL SYLLABLE SSANGKIYEOK U PIEUPSIOS + {0x8549, 0xAFCC}, //721 #HANGUL SYLLABLE SSANGKIYEOK U SSANGSIOS + {0x854A, 0xAFCF}, //722 #HANGUL SYLLABLE SSANGKIYEOK U CHIEUCH + {0x854B, 0xAFD0}, //723 #HANGUL SYLLABLE SSANGKIYEOK U KHIEUKH + {0x854C, 0xAFD1}, //724 #HANGUL SYLLABLE SSANGKIYEOK U THIEUTH + {0x854D, 0xAFD2}, //725 #HANGUL SYLLABLE SSANGKIYEOK U PHIEUPH + {0x854E, 0xAFD3}, //726 #HANGUL SYLLABLE SSANGKIYEOK U HIEUH + {0x854F, 0xAFD5}, //727 #HANGUL SYLLABLE SSANGKIYEOK WEO KIYEOK + {0x8550, 0xAFD6}, //728 #HANGUL SYLLABLE SSANGKIYEOK WEO SSANGKIYEOK + {0x8551, 0xAFD7}, //729 #HANGUL SYLLABLE SSANGKIYEOK WEO KIYEOKSIOS + {0x8552, 0xAFD8}, //730 #HANGUL SYLLABLE SSANGKIYEOK WEO NIEUN + {0x8553, 0xAFD9}, //731 #HANGUL SYLLABLE SSANGKIYEOK WEO NIEUNCIEUC + {0x8554, 0xAFDA}, //732 #HANGUL SYLLABLE SSANGKIYEOK WEO NIEUNHIEUH + {0x8555, 0xAFDB}, //733 #HANGUL SYLLABLE SSANGKIYEOK WEO TIKEUT + {0x8556, 0xAFDD}, //734 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULKIYEOK + {0x8557, 0xAFDE}, //735 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULMIEUM + {0x8558, 0xAFDF}, //736 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULPIEUP + {0x8559, 0xAFE0}, //737 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULSIOS + {0x855A, 0xAFE1}, //738 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULTHIEUTH + {0x8561, 0xAFE2}, //739 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULPHIEUPH + {0x8562, 0xAFE3}, //740 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULHIEUH + {0x8563, 0xAFE4}, //741 #HANGUL SYLLABLE SSANGKIYEOK WEO MIEUM + {0x8564, 0xAFE5}, //742 #HANGUL SYLLABLE SSANGKIYEOK WEO PIEUP + {0x8565, 0xAFE6}, //743 #HANGUL SYLLABLE SSANGKIYEOK WEO PIEUPSIOS + {0x8566, 0xAFE7}, //744 #HANGUL SYLLABLE SSANGKIYEOK WEO SIOS + {0x8567, 0xAFEA}, //745 #HANGUL SYLLABLE SSANGKIYEOK WEO CIEUC + {0x8568, 0xAFEB}, //746 #HANGUL SYLLABLE SSANGKIYEOK WEO CHIEUCH + {0x8569, 0xAFEC}, //747 #HANGUL SYLLABLE SSANGKIYEOK WEO KHIEUKH + {0x856A, 0xAFED}, //748 #HANGUL SYLLABLE SSANGKIYEOK WEO THIEUTH + {0x856B, 0xAFEE}, //749 #HANGUL SYLLABLE SSANGKIYEOK WEO PHIEUPH + {0x856C, 0xAFEF}, //750 #HANGUL SYLLABLE SSANGKIYEOK WEO HIEUH + {0x856D, 0xAFF2}, //751 #HANGUL SYLLABLE SSANGKIYEOK WE SSANGKIYEOK + {0x856E, 0xAFF3}, //752 #HANGUL SYLLABLE SSANGKIYEOK WE KIYEOKSIOS + {0x856F, 0xAFF5}, //753 #HANGUL SYLLABLE SSANGKIYEOK WE NIEUNCIEUC + {0x8570, 0xAFF6}, //754 #HANGUL SYLLABLE SSANGKIYEOK WE NIEUNHIEUH + {0x8571, 0xAFF7}, //755 #HANGUL SYLLABLE SSANGKIYEOK WE TIKEUT + {0x8572, 0xAFF9}, //756 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULKIYEOK + {0x8573, 0xAFFA}, //757 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULMIEUM + {0x8574, 0xAFFB}, //758 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULPIEUP + {0x8575, 0xAFFC}, //759 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULSIOS + {0x8576, 0xAFFD}, //760 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULTHIEUTH + {0x8577, 0xAFFE}, //761 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULPHIEUPH + {0x8578, 0xAFFF}, //762 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULHIEUH + {0x8579, 0xB002}, //763 #HANGUL SYLLABLE SSANGKIYEOK WE PIEUPSIOS + {0x857A, 0xB003}, //764 #HANGUL SYLLABLE SSANGKIYEOK WE SIOS + {0x8581, 0xB005}, //765 #HANGUL SYLLABLE SSANGKIYEOK WE IEUNG + {0x8582, 0xB006}, //766 #HANGUL SYLLABLE SSANGKIYEOK WE CIEUC + {0x8583, 0xB007}, //767 #HANGUL SYLLABLE SSANGKIYEOK WE CHIEUCH + {0x8584, 0xB008}, //768 #HANGUL SYLLABLE SSANGKIYEOK WE KHIEUKH + {0x8585, 0xB009}, //769 #HANGUL SYLLABLE SSANGKIYEOK WE THIEUTH + {0x8586, 0xB00A}, //770 #HANGUL SYLLABLE SSANGKIYEOK WE PHIEUPH + {0x8587, 0xB00B}, //771 #HANGUL SYLLABLE SSANGKIYEOK WE HIEUH + {0x8588, 0xB00D}, //772 #HANGUL SYLLABLE SSANGKIYEOK WI KIYEOK + {0x8589, 0xB00E}, //773 #HANGUL SYLLABLE SSANGKIYEOK WI SSANGKIYEOK + {0x858A, 0xB00F}, //774 #HANGUL SYLLABLE SSANGKIYEOK WI KIYEOKSIOS + {0x858B, 0xB011}, //775 #HANGUL SYLLABLE SSANGKIYEOK WI NIEUNCIEUC + {0x858C, 0xB012}, //776 #HANGUL SYLLABLE SSANGKIYEOK WI NIEUNHIEUH + {0x858D, 0xB013}, //777 #HANGUL SYLLABLE SSANGKIYEOK WI TIKEUT + {0x858E, 0xB015}, //778 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULKIYEOK + {0x858F, 0xB016}, //779 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULMIEUM + {0x8590, 0xB017}, //780 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULPIEUP + {0x8591, 0xB018}, //781 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULSIOS + {0x8592, 0xB019}, //782 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULTHIEUTH + {0x8593, 0xB01A}, //783 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULPHIEUPH + {0x8594, 0xB01B}, //784 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULHIEUH + {0x8595, 0xB01E}, //785 #HANGUL SYLLABLE SSANGKIYEOK WI PIEUPSIOS + {0x8596, 0xB01F}, //786 #HANGUL SYLLABLE SSANGKIYEOK WI SIOS + {0x8597, 0xB020}, //787 #HANGUL SYLLABLE SSANGKIYEOK WI SSANGSIOS + {0x8598, 0xB021}, //788 #HANGUL SYLLABLE SSANGKIYEOK WI IEUNG + {0x8599, 0xB022}, //789 #HANGUL SYLLABLE SSANGKIYEOK WI CIEUC + {0x859A, 0xB023}, //790 #HANGUL SYLLABLE SSANGKIYEOK WI CHIEUCH + {0x859B, 0xB024}, //791 #HANGUL SYLLABLE SSANGKIYEOK WI KHIEUKH + {0x859C, 0xB025}, //792 #HANGUL SYLLABLE SSANGKIYEOK WI THIEUTH + {0x859D, 0xB026}, //793 #HANGUL SYLLABLE SSANGKIYEOK WI PHIEUPH + {0x859E, 0xB027}, //794 #HANGUL SYLLABLE SSANGKIYEOK WI HIEUH + {0x859F, 0xB029}, //795 #HANGUL SYLLABLE SSANGKIYEOK YU KIYEOK + {0x85A0, 0xB02A}, //796 #HANGUL SYLLABLE SSANGKIYEOK YU SSANGKIYEOK + {0x85A1, 0xB02B}, //797 #HANGUL SYLLABLE SSANGKIYEOK YU KIYEOKSIOS + {0x85A2, 0xB02C}, //798 #HANGUL SYLLABLE SSANGKIYEOK YU NIEUN + {0x85A3, 0xB02D}, //799 #HANGUL SYLLABLE SSANGKIYEOK YU NIEUNCIEUC + {0x85A4, 0xB02E}, //800 #HANGUL SYLLABLE SSANGKIYEOK YU NIEUNHIEUH + {0x85A5, 0xB02F}, //801 #HANGUL SYLLABLE SSANGKIYEOK YU TIKEUT + {0x85A6, 0xB030}, //802 #HANGUL SYLLABLE SSANGKIYEOK YU RIEUL + {0x85A7, 0xB031}, //803 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULKIYEOK + {0x85A8, 0xB032}, //804 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULMIEUM + {0x85A9, 0xB033}, //805 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULPIEUP + {0x85AA, 0xB034}, //806 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULSIOS + {0x85AB, 0xB035}, //807 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULTHIEUTH + {0x85AC, 0xB036}, //808 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULPHIEUPH + {0x85AD, 0xB037}, //809 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULHIEUH + {0x85AE, 0xB038}, //810 #HANGUL SYLLABLE SSANGKIYEOK YU MIEUM + {0x85AF, 0xB039}, //811 #HANGUL SYLLABLE SSANGKIYEOK YU PIEUP + {0x85B0, 0xB03A}, //812 #HANGUL SYLLABLE SSANGKIYEOK YU PIEUPSIOS + {0x85B1, 0xB03B}, //813 #HANGUL SYLLABLE SSANGKIYEOK YU SIOS + {0x85B2, 0xB03C}, //814 #HANGUL SYLLABLE SSANGKIYEOK YU SSANGSIOS + {0x85B3, 0xB03D}, //815 #HANGUL SYLLABLE SSANGKIYEOK YU IEUNG + {0x85B4, 0xB03E}, //816 #HANGUL SYLLABLE SSANGKIYEOK YU CIEUC + {0x85B5, 0xB03F}, //817 #HANGUL SYLLABLE SSANGKIYEOK YU CHIEUCH + {0x85B6, 0xB040}, //818 #HANGUL SYLLABLE SSANGKIYEOK YU KHIEUKH + {0x85B7, 0xB041}, //819 #HANGUL SYLLABLE SSANGKIYEOK YU THIEUTH + {0x85B8, 0xB042}, //820 #HANGUL SYLLABLE SSANGKIYEOK YU PHIEUPH + {0x85B9, 0xB043}, //821 #HANGUL SYLLABLE SSANGKIYEOK YU HIEUH + {0x85BA, 0xB046}, //822 #HANGUL SYLLABLE SSANGKIYEOK EU SSANGKIYEOK + {0x85BB, 0xB047}, //823 #HANGUL SYLLABLE SSANGKIYEOK EU KIYEOKSIOS + {0x85BC, 0xB049}, //824 #HANGUL SYLLABLE SSANGKIYEOK EU NIEUNCIEUC + {0x85BD, 0xB04B}, //825 #HANGUL SYLLABLE SSANGKIYEOK EU TIKEUT + {0x85BE, 0xB04D}, //826 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULKIYEOK + {0x85BF, 0xB04F}, //827 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULPIEUP + {0x85C0, 0xB050}, //828 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULSIOS + {0x85C1, 0xB051}, //829 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULTHIEUTH + {0x85C2, 0xB052}, //830 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULPHIEUPH + {0x85C3, 0xB056}, //831 #HANGUL SYLLABLE SSANGKIYEOK EU PIEUPSIOS + {0x85C4, 0xB058}, //832 #HANGUL SYLLABLE SSANGKIYEOK EU SSANGSIOS + {0x85C5, 0xB05A}, //833 #HANGUL SYLLABLE SSANGKIYEOK EU CIEUC + {0x85C6, 0xB05B}, //834 #HANGUL SYLLABLE SSANGKIYEOK EU CHIEUCH + {0x85C7, 0xB05C}, //835 #HANGUL SYLLABLE SSANGKIYEOK EU KHIEUKH + {0x85C8, 0xB05E}, //836 #HANGUL SYLLABLE SSANGKIYEOK EU PHIEUPH + {0x85C9, 0xB05F}, //837 #HANGUL SYLLABLE SSANGKIYEOK EU HIEUH + {0x85CA, 0xB060}, //838 #HANGUL SYLLABLE SSANGKIYEOK YI + {0x85CB, 0xB061}, //839 #HANGUL SYLLABLE SSANGKIYEOK YI KIYEOK + {0x85CC, 0xB062}, //840 #HANGUL SYLLABLE SSANGKIYEOK YI SSANGKIYEOK + {0x85CD, 0xB063}, //841 #HANGUL SYLLABLE SSANGKIYEOK YI KIYEOKSIOS + {0x85CE, 0xB064}, //842 #HANGUL SYLLABLE SSANGKIYEOK YI NIEUN + {0x85CF, 0xB065}, //843 #HANGUL SYLLABLE SSANGKIYEOK YI NIEUNCIEUC + {0x85D0, 0xB066}, //844 #HANGUL SYLLABLE SSANGKIYEOK YI NIEUNHIEUH + {0x85D1, 0xB067}, //845 #HANGUL SYLLABLE SSANGKIYEOK YI TIKEUT + {0x85D2, 0xB068}, //846 #HANGUL SYLLABLE SSANGKIYEOK YI RIEUL + {0x85D3, 0xB069}, //847 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULKIYEOK + {0x85D4, 0xB06A}, //848 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULMIEUM + {0x85D5, 0xB06B}, //849 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULPIEUP + {0x85D6, 0xB06C}, //850 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULSIOS + {0x85D7, 0xB06D}, //851 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULTHIEUTH + {0x85D8, 0xB06E}, //852 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULPHIEUPH + {0x85D9, 0xB06F}, //853 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULHIEUH + {0x85DA, 0xB070}, //854 #HANGUL SYLLABLE SSANGKIYEOK YI MIEUM + {0x85DB, 0xB071}, //855 #HANGUL SYLLABLE SSANGKIYEOK YI PIEUP + {0x85DC, 0xB072}, //856 #HANGUL SYLLABLE SSANGKIYEOK YI PIEUPSIOS + {0x85DD, 0xB073}, //857 #HANGUL SYLLABLE SSANGKIYEOK YI SIOS + {0x85DE, 0xB074}, //858 #HANGUL SYLLABLE SSANGKIYEOK YI SSANGSIOS + {0x85DF, 0xB075}, //859 #HANGUL SYLLABLE SSANGKIYEOK YI IEUNG + {0x85E0, 0xB076}, //860 #HANGUL SYLLABLE SSANGKIYEOK YI CIEUC + {0x85E1, 0xB077}, //861 #HANGUL SYLLABLE SSANGKIYEOK YI CHIEUCH + {0x85E2, 0xB078}, //862 #HANGUL SYLLABLE SSANGKIYEOK YI KHIEUKH + {0x85E3, 0xB079}, //863 #HANGUL SYLLABLE SSANGKIYEOK YI THIEUTH + {0x85E4, 0xB07A}, //864 #HANGUL SYLLABLE SSANGKIYEOK YI PHIEUPH + {0x85E5, 0xB07B}, //865 #HANGUL SYLLABLE SSANGKIYEOK YI HIEUH + {0x85E6, 0xB07E}, //866 #HANGUL SYLLABLE SSANGKIYEOK I SSANGKIYEOK + {0x85E7, 0xB07F}, //867 #HANGUL SYLLABLE SSANGKIYEOK I KIYEOKSIOS + {0x85E8, 0xB081}, //868 #HANGUL SYLLABLE SSANGKIYEOK I NIEUNCIEUC + {0x85E9, 0xB082}, //869 #HANGUL SYLLABLE SSANGKIYEOK I NIEUNHIEUH + {0x85EA, 0xB083}, //870 #HANGUL SYLLABLE SSANGKIYEOK I TIKEUT + {0x85EB, 0xB085}, //871 #HANGUL SYLLABLE SSANGKIYEOK I RIEULKIYEOK + {0x85EC, 0xB086}, //872 #HANGUL SYLLABLE SSANGKIYEOK I RIEULMIEUM + {0x85ED, 0xB087}, //873 #HANGUL SYLLABLE SSANGKIYEOK I RIEULPIEUP + {0x85EE, 0xB088}, //874 #HANGUL SYLLABLE SSANGKIYEOK I RIEULSIOS + {0x85EF, 0xB089}, //875 #HANGUL SYLLABLE SSANGKIYEOK I RIEULTHIEUTH + {0x85F0, 0xB08A}, //876 #HANGUL SYLLABLE SSANGKIYEOK I RIEULPHIEUPH + {0x85F1, 0xB08B}, //877 #HANGUL SYLLABLE SSANGKIYEOK I RIEULHIEUH + {0x85F2, 0xB08E}, //878 #HANGUL SYLLABLE SSANGKIYEOK I PIEUPSIOS + {0x85F3, 0xB090}, //879 #HANGUL SYLLABLE SSANGKIYEOK I SSANGSIOS + {0x85F4, 0xB092}, //880 #HANGUL SYLLABLE SSANGKIYEOK I CIEUC + {0x85F5, 0xB093}, //881 #HANGUL SYLLABLE SSANGKIYEOK I CHIEUCH + {0x85F6, 0xB094}, //882 #HANGUL SYLLABLE SSANGKIYEOK I KHIEUKH + {0x85F7, 0xB095}, //883 #HANGUL SYLLABLE SSANGKIYEOK I THIEUTH + {0x85F8, 0xB096}, //884 #HANGUL SYLLABLE SSANGKIYEOK I PHIEUPH + {0x85F9, 0xB097}, //885 #HANGUL SYLLABLE SSANGKIYEOK I HIEUH + {0x85FA, 0xB09B}, //886 #HANGUL SYLLABLE NIEUN A KIYEOKSIOS + {0x85FB, 0xB09D}, //887 #HANGUL SYLLABLE NIEUN A NIEUNCIEUC + {0x85FC, 0xB09E}, //888 #HANGUL SYLLABLE NIEUN A NIEUNHIEUH + {0x85FD, 0xB0A3}, //889 #HANGUL SYLLABLE NIEUN A RIEULPIEUP + {0x85FE, 0xB0A4}, //890 #HANGUL SYLLABLE NIEUN A RIEULSIOS + {0x8641, 0xB0A5}, //891 #HANGUL SYLLABLE NIEUN A RIEULTHIEUTH + {0x8642, 0xB0A6}, //892 #HANGUL SYLLABLE NIEUN A RIEULPHIEUPH + {0x8643, 0xB0A7}, //893 #HANGUL SYLLABLE NIEUN A RIEULHIEUH + {0x8644, 0xB0AA}, //894 #HANGUL SYLLABLE NIEUN A PIEUPSIOS + {0x8645, 0xB0B0}, //895 #HANGUL SYLLABLE NIEUN A KHIEUKH + {0x8646, 0xB0B2}, //896 #HANGUL SYLLABLE NIEUN A PHIEUPH + {0x8647, 0xB0B6}, //897 #HANGUL SYLLABLE NIEUN AE SSANGKIYEOK + {0x8648, 0xB0B7}, //898 #HANGUL SYLLABLE NIEUN AE KIYEOKSIOS + {0x8649, 0xB0B9}, //899 #HANGUL SYLLABLE NIEUN AE NIEUNCIEUC + {0x864A, 0xB0BA}, //900 #HANGUL SYLLABLE NIEUN AE NIEUNHIEUH + {0x864B, 0xB0BB}, //901 #HANGUL SYLLABLE NIEUN AE TIKEUT + {0x864C, 0xB0BD}, //902 #HANGUL SYLLABLE NIEUN AE RIEULKIYEOK + {0x864D, 0xB0BE}, //903 #HANGUL SYLLABLE NIEUN AE RIEULMIEUM + {0x864E, 0xB0BF}, //904 #HANGUL SYLLABLE NIEUN AE RIEULPIEUP + {0x864F, 0xB0C0}, //905 #HANGUL SYLLABLE NIEUN AE RIEULSIOS + {0x8650, 0xB0C1}, //906 #HANGUL SYLLABLE NIEUN AE RIEULTHIEUTH + {0x8651, 0xB0C2}, //907 #HANGUL SYLLABLE NIEUN AE RIEULPHIEUPH + {0x8652, 0xB0C3}, //908 #HANGUL SYLLABLE NIEUN AE RIEULHIEUH + {0x8653, 0xB0C6}, //909 #HANGUL SYLLABLE NIEUN AE PIEUPSIOS + {0x8654, 0xB0CA}, //910 #HANGUL SYLLABLE NIEUN AE CIEUC + {0x8655, 0xB0CB}, //911 #HANGUL SYLLABLE NIEUN AE CHIEUCH + {0x8656, 0xB0CC}, //912 #HANGUL SYLLABLE NIEUN AE KHIEUKH + {0x8657, 0xB0CD}, //913 #HANGUL SYLLABLE NIEUN AE THIEUTH + {0x8658, 0xB0CE}, //914 #HANGUL SYLLABLE NIEUN AE PHIEUPH + {0x8659, 0xB0CF}, //915 #HANGUL SYLLABLE NIEUN AE HIEUH + {0x865A, 0xB0D2}, //916 #HANGUL SYLLABLE NIEUN YA SSANGKIYEOK + {0x8661, 0xB0D3}, //917 #HANGUL SYLLABLE NIEUN YA KIYEOKSIOS + {0x8662, 0xB0D5}, //918 #HANGUL SYLLABLE NIEUN YA NIEUNCIEUC + {0x8663, 0xB0D6}, //919 #HANGUL SYLLABLE NIEUN YA NIEUNHIEUH + {0x8664, 0xB0D7}, //920 #HANGUL SYLLABLE NIEUN YA TIKEUT + {0x8665, 0xB0D9}, //921 #HANGUL SYLLABLE NIEUN YA RIEULKIYEOK + {0x8666, 0xB0DA}, //922 #HANGUL SYLLABLE NIEUN YA RIEULMIEUM + {0x8667, 0xB0DB}, //923 #HANGUL SYLLABLE NIEUN YA RIEULPIEUP + {0x8668, 0xB0DC}, //924 #HANGUL SYLLABLE NIEUN YA RIEULSIOS + {0x8669, 0xB0DD}, //925 #HANGUL SYLLABLE NIEUN YA RIEULTHIEUTH + {0x866A, 0xB0DE}, //926 #HANGUL SYLLABLE NIEUN YA RIEULPHIEUPH + {0x866B, 0xB0DF}, //927 #HANGUL SYLLABLE NIEUN YA RIEULHIEUH + {0x866C, 0xB0E1}, //928 #HANGUL SYLLABLE NIEUN YA PIEUP + {0x866D, 0xB0E2}, //929 #HANGUL SYLLABLE NIEUN YA PIEUPSIOS + {0x866E, 0xB0E3}, //930 #HANGUL SYLLABLE NIEUN YA SIOS + {0x866F, 0xB0E4}, //931 #HANGUL SYLLABLE NIEUN YA SSANGSIOS + {0x8670, 0xB0E6}, //932 #HANGUL SYLLABLE NIEUN YA CIEUC + {0x8671, 0xB0E7}, //933 #HANGUL SYLLABLE NIEUN YA CHIEUCH + {0x8672, 0xB0E8}, //934 #HANGUL SYLLABLE NIEUN YA KHIEUKH + {0x8673, 0xB0E9}, //935 #HANGUL SYLLABLE NIEUN YA THIEUTH + {0x8674, 0xB0EA}, //936 #HANGUL SYLLABLE NIEUN YA PHIEUPH + {0x8675, 0xB0EB}, //937 #HANGUL SYLLABLE NIEUN YA HIEUH + {0x8676, 0xB0EC}, //938 #HANGUL SYLLABLE NIEUN YAE + {0x8677, 0xB0ED}, //939 #HANGUL SYLLABLE NIEUN YAE KIYEOK + {0x8678, 0xB0EE}, //940 #HANGUL SYLLABLE NIEUN YAE SSANGKIYEOK + {0x8679, 0xB0EF}, //941 #HANGUL SYLLABLE NIEUN YAE KIYEOKSIOS + {0x867A, 0xB0F0}, //942 #HANGUL SYLLABLE NIEUN YAE NIEUN + {0x8681, 0xB0F1}, //943 #HANGUL SYLLABLE NIEUN YAE NIEUNCIEUC + {0x8682, 0xB0F2}, //944 #HANGUL SYLLABLE NIEUN YAE NIEUNHIEUH + {0x8683, 0xB0F3}, //945 #HANGUL SYLLABLE NIEUN YAE TIKEUT + {0x8684, 0xB0F4}, //946 #HANGUL SYLLABLE NIEUN YAE RIEUL + {0x8685, 0xB0F5}, //947 #HANGUL SYLLABLE NIEUN YAE RIEULKIYEOK + {0x8686, 0xB0F6}, //948 #HANGUL SYLLABLE NIEUN YAE RIEULMIEUM + {0x8687, 0xB0F7}, //949 #HANGUL SYLLABLE NIEUN YAE RIEULPIEUP + {0x8688, 0xB0F8}, //950 #HANGUL SYLLABLE NIEUN YAE RIEULSIOS + {0x8689, 0xB0F9}, //951 #HANGUL SYLLABLE NIEUN YAE RIEULTHIEUTH + {0x868A, 0xB0FA}, //952 #HANGUL SYLLABLE NIEUN YAE RIEULPHIEUPH + {0x868B, 0xB0FB}, //953 #HANGUL SYLLABLE NIEUN YAE RIEULHIEUH + {0x868C, 0xB0FC}, //954 #HANGUL SYLLABLE NIEUN YAE MIEUM + {0x868D, 0xB0FD}, //955 #HANGUL SYLLABLE NIEUN YAE PIEUP + {0x868E, 0xB0FE}, //956 #HANGUL SYLLABLE NIEUN YAE PIEUPSIOS + {0x868F, 0xB0FF}, //957 #HANGUL SYLLABLE NIEUN YAE SIOS + {0x8690, 0xB100}, //958 #HANGUL SYLLABLE NIEUN YAE SSANGSIOS + {0x8691, 0xB101}, //959 #HANGUL SYLLABLE NIEUN YAE IEUNG + {0x8692, 0xB102}, //960 #HANGUL SYLLABLE NIEUN YAE CIEUC + {0x8693, 0xB103}, //961 #HANGUL SYLLABLE NIEUN YAE CHIEUCH + {0x8694, 0xB104}, //962 #HANGUL SYLLABLE NIEUN YAE KHIEUKH + {0x8695, 0xB105}, //963 #HANGUL SYLLABLE NIEUN YAE THIEUTH + {0x8696, 0xB106}, //964 #HANGUL SYLLABLE NIEUN YAE PHIEUPH + {0x8697, 0xB107}, //965 #HANGUL SYLLABLE NIEUN YAE HIEUH + {0x8698, 0xB10A}, //966 #HANGUL SYLLABLE NIEUN EO SSANGKIYEOK + {0x8699, 0xB10D}, //967 #HANGUL SYLLABLE NIEUN EO NIEUNCIEUC + {0x869A, 0xB10E}, //968 #HANGUL SYLLABLE NIEUN EO NIEUNHIEUH + {0x869B, 0xB10F}, //969 #HANGUL SYLLABLE NIEUN EO TIKEUT + {0x869C, 0xB111}, //970 #HANGUL SYLLABLE NIEUN EO RIEULKIYEOK + {0x869D, 0xB114}, //971 #HANGUL SYLLABLE NIEUN EO RIEULSIOS + {0x869E, 0xB115}, //972 #HANGUL SYLLABLE NIEUN EO RIEULTHIEUTH + {0x869F, 0xB116}, //973 #HANGUL SYLLABLE NIEUN EO RIEULPHIEUPH + {0x86A0, 0xB117}, //974 #HANGUL SYLLABLE NIEUN EO RIEULHIEUH + {0x86A1, 0xB11A}, //975 #HANGUL SYLLABLE NIEUN EO PIEUPSIOS + {0x86A2, 0xB11E}, //976 #HANGUL SYLLABLE NIEUN EO CIEUC + {0x86A3, 0xB11F}, //977 #HANGUL SYLLABLE NIEUN EO CHIEUCH + {0x86A4, 0xB120}, //978 #HANGUL SYLLABLE NIEUN EO KHIEUKH + {0x86A5, 0xB121}, //979 #HANGUL SYLLABLE NIEUN EO THIEUTH + {0x86A6, 0xB122}, //980 #HANGUL SYLLABLE NIEUN EO PHIEUPH + {0x86A7, 0xB126}, //981 #HANGUL SYLLABLE NIEUN E SSANGKIYEOK + {0x86A8, 0xB127}, //982 #HANGUL SYLLABLE NIEUN E KIYEOKSIOS + {0x86A9, 0xB129}, //983 #HANGUL SYLLABLE NIEUN E NIEUNCIEUC + {0x86AA, 0xB12A}, //984 #HANGUL SYLLABLE NIEUN E NIEUNHIEUH + {0x86AB, 0xB12B}, //985 #HANGUL SYLLABLE NIEUN E TIKEUT + {0x86AC, 0xB12D}, //986 #HANGUL SYLLABLE NIEUN E RIEULKIYEOK + {0x86AD, 0xB12E}, //987 #HANGUL SYLLABLE NIEUN E RIEULMIEUM + {0x86AE, 0xB12F}, //988 #HANGUL SYLLABLE NIEUN E RIEULPIEUP + {0x86AF, 0xB130}, //989 #HANGUL SYLLABLE NIEUN E RIEULSIOS + {0x86B0, 0xB131}, //990 #HANGUL SYLLABLE NIEUN E RIEULTHIEUTH + {0x86B1, 0xB132}, //991 #HANGUL SYLLABLE NIEUN E RIEULPHIEUPH + {0x86B2, 0xB133}, //992 #HANGUL SYLLABLE NIEUN E RIEULHIEUH + {0x86B3, 0xB136}, //993 #HANGUL SYLLABLE NIEUN E PIEUPSIOS + {0x86B4, 0xB13A}, //994 #HANGUL SYLLABLE NIEUN E CIEUC + {0x86B5, 0xB13B}, //995 #HANGUL SYLLABLE NIEUN E CHIEUCH + {0x86B6, 0xB13C}, //996 #HANGUL SYLLABLE NIEUN E KHIEUKH + {0x86B7, 0xB13D}, //997 #HANGUL SYLLABLE NIEUN E THIEUTH + {0x86B8, 0xB13E}, //998 #HANGUL SYLLABLE NIEUN E PHIEUPH + {0x86B9, 0xB13F}, //999 #HANGUL SYLLABLE NIEUN E HIEUH + {0x86BA, 0xB142}, //1000 #HANGUL SYLLABLE NIEUN YEO SSANGKIYEOK + {0x86BB, 0xB143}, //1001 #HANGUL SYLLABLE NIEUN YEO KIYEOKSIOS + {0x86BC, 0xB145}, //1002 #HANGUL SYLLABLE NIEUN YEO NIEUNCIEUC + {0x86BD, 0xB146}, //1003 #HANGUL SYLLABLE NIEUN YEO NIEUNHIEUH + {0x86BE, 0xB147}, //1004 #HANGUL SYLLABLE NIEUN YEO TIKEUT + {0x86BF, 0xB149}, //1005 #HANGUL SYLLABLE NIEUN YEO RIEULKIYEOK + {0x86C0, 0xB14A}, //1006 #HANGUL SYLLABLE NIEUN YEO RIEULMIEUM + {0x86C1, 0xB14B}, //1007 #HANGUL SYLLABLE NIEUN YEO RIEULPIEUP + {0x86C2, 0xB14C}, //1008 #HANGUL SYLLABLE NIEUN YEO RIEULSIOS + {0x86C3, 0xB14D}, //1009 #HANGUL SYLLABLE NIEUN YEO RIEULTHIEUTH + {0x86C4, 0xB14E}, //1010 #HANGUL SYLLABLE NIEUN YEO RIEULPHIEUPH + {0x86C5, 0xB14F}, //1011 #HANGUL SYLLABLE NIEUN YEO RIEULHIEUH + {0x86C6, 0xB152}, //1012 #HANGUL SYLLABLE NIEUN YEO PIEUPSIOS + {0x86C7, 0xB153}, //1013 #HANGUL SYLLABLE NIEUN YEO SIOS + {0x86C8, 0xB156}, //1014 #HANGUL SYLLABLE NIEUN YEO CIEUC + {0x86C9, 0xB157}, //1015 #HANGUL SYLLABLE NIEUN YEO CHIEUCH + {0x86CA, 0xB159}, //1016 #HANGUL SYLLABLE NIEUN YEO THIEUTH + {0x86CB, 0xB15A}, //1017 #HANGUL SYLLABLE NIEUN YEO PHIEUPH + {0x86CC, 0xB15B}, //1018 #HANGUL SYLLABLE NIEUN YEO HIEUH + {0x86CD, 0xB15D}, //1019 #HANGUL SYLLABLE NIEUN YE KIYEOK + {0x86CE, 0xB15E}, //1020 #HANGUL SYLLABLE NIEUN YE SSANGKIYEOK + {0x86CF, 0xB15F}, //1021 #HANGUL SYLLABLE NIEUN YE KIYEOKSIOS + {0x86D0, 0xB161}, //1022 #HANGUL SYLLABLE NIEUN YE NIEUNCIEUC + {0x86D1, 0xB162}, //1023 #HANGUL SYLLABLE NIEUN YE NIEUNHIEUH + {0x86D2, 0xB163}, //1024 #HANGUL SYLLABLE NIEUN YE TIKEUT + {0x86D3, 0xB164}, //1025 #HANGUL SYLLABLE NIEUN YE RIEUL + {0x86D4, 0xB165}, //1026 #HANGUL SYLLABLE NIEUN YE RIEULKIYEOK + {0x86D5, 0xB166}, //1027 #HANGUL SYLLABLE NIEUN YE RIEULMIEUM + {0x86D6, 0xB167}, //1028 #HANGUL SYLLABLE NIEUN YE RIEULPIEUP + {0x86D7, 0xB168}, //1029 #HANGUL SYLLABLE NIEUN YE RIEULSIOS + {0x86D8, 0xB169}, //1030 #HANGUL SYLLABLE NIEUN YE RIEULTHIEUTH + {0x86D9, 0xB16A}, //1031 #HANGUL SYLLABLE NIEUN YE RIEULPHIEUPH + {0x86DA, 0xB16B}, //1032 #HANGUL SYLLABLE NIEUN YE RIEULHIEUH + {0x86DB, 0xB16C}, //1033 #HANGUL SYLLABLE NIEUN YE MIEUM + {0x86DC, 0xB16D}, //1034 #HANGUL SYLLABLE NIEUN YE PIEUP + {0x86DD, 0xB16E}, //1035 #HANGUL SYLLABLE NIEUN YE PIEUPSIOS + {0x86DE, 0xB16F}, //1036 #HANGUL SYLLABLE NIEUN YE SIOS + {0x86DF, 0xB170}, //1037 #HANGUL SYLLABLE NIEUN YE SSANGSIOS + {0x86E0, 0xB171}, //1038 #HANGUL SYLLABLE NIEUN YE IEUNG + {0x86E1, 0xB172}, //1039 #HANGUL SYLLABLE NIEUN YE CIEUC + {0x86E2, 0xB173}, //1040 #HANGUL SYLLABLE NIEUN YE CHIEUCH + {0x86E3, 0xB174}, //1041 #HANGUL SYLLABLE NIEUN YE KHIEUKH + {0x86E4, 0xB175}, //1042 #HANGUL SYLLABLE NIEUN YE THIEUTH + {0x86E5, 0xB176}, //1043 #HANGUL SYLLABLE NIEUN YE PHIEUPH + {0x86E6, 0xB177}, //1044 #HANGUL SYLLABLE NIEUN YE HIEUH + {0x86E7, 0xB17A}, //1045 #HANGUL SYLLABLE NIEUN O SSANGKIYEOK + {0x86E8, 0xB17B}, //1046 #HANGUL SYLLABLE NIEUN O KIYEOKSIOS + {0x86E9, 0xB17D}, //1047 #HANGUL SYLLABLE NIEUN O NIEUNCIEUC + {0x86EA, 0xB17E}, //1048 #HANGUL SYLLABLE NIEUN O NIEUNHIEUH + {0x86EB, 0xB17F}, //1049 #HANGUL SYLLABLE NIEUN O TIKEUT + {0x86EC, 0xB181}, //1050 #HANGUL SYLLABLE NIEUN O RIEULKIYEOK + {0x86ED, 0xB183}, //1051 #HANGUL SYLLABLE NIEUN O RIEULPIEUP + {0x86EE, 0xB184}, //1052 #HANGUL SYLLABLE NIEUN O RIEULSIOS + {0x86EF, 0xB185}, //1053 #HANGUL SYLLABLE NIEUN O RIEULTHIEUTH + {0x86F0, 0xB186}, //1054 #HANGUL SYLLABLE NIEUN O RIEULPHIEUPH + {0x86F1, 0xB187}, //1055 #HANGUL SYLLABLE NIEUN O RIEULHIEUH + {0x86F2, 0xB18A}, //1056 #HANGUL SYLLABLE NIEUN O PIEUPSIOS + {0x86F3, 0xB18C}, //1057 #HANGUL SYLLABLE NIEUN O SSANGSIOS + {0x86F4, 0xB18E}, //1058 #HANGUL SYLLABLE NIEUN O CIEUC + {0x86F5, 0xB18F}, //1059 #HANGUL SYLLABLE NIEUN O CHIEUCH + {0x86F6, 0xB190}, //1060 #HANGUL SYLLABLE NIEUN O KHIEUKH + {0x86F7, 0xB191}, //1061 #HANGUL SYLLABLE NIEUN O THIEUTH + {0x86F8, 0xB195}, //1062 #HANGUL SYLLABLE NIEUN WA KIYEOK + {0x86F9, 0xB196}, //1063 #HANGUL SYLLABLE NIEUN WA SSANGKIYEOK + {0x86FA, 0xB197}, //1064 #HANGUL SYLLABLE NIEUN WA KIYEOKSIOS + {0x86FB, 0xB199}, //1065 #HANGUL SYLLABLE NIEUN WA NIEUNCIEUC + {0x86FC, 0xB19A}, //1066 #HANGUL SYLLABLE NIEUN WA NIEUNHIEUH + {0x86FD, 0xB19B}, //1067 #HANGUL SYLLABLE NIEUN WA TIKEUT + {0x86FE, 0xB19D}, //1068 #HANGUL SYLLABLE NIEUN WA RIEULKIYEOK + {0x8741, 0xB19E}, //1069 #HANGUL SYLLABLE NIEUN WA RIEULMIEUM + {0x8742, 0xB19F}, //1070 #HANGUL SYLLABLE NIEUN WA RIEULPIEUP + {0x8743, 0xB1A0}, //1071 #HANGUL SYLLABLE NIEUN WA RIEULSIOS + {0x8744, 0xB1A1}, //1072 #HANGUL SYLLABLE NIEUN WA RIEULTHIEUTH + {0x8745, 0xB1A2}, //1073 #HANGUL SYLLABLE NIEUN WA RIEULPHIEUPH + {0x8746, 0xB1A3}, //1074 #HANGUL SYLLABLE NIEUN WA RIEULHIEUH + {0x8747, 0xB1A4}, //1075 #HANGUL SYLLABLE NIEUN WA MIEUM + {0x8748, 0xB1A5}, //1076 #HANGUL SYLLABLE NIEUN WA PIEUP + {0x8749, 0xB1A6}, //1077 #HANGUL SYLLABLE NIEUN WA PIEUPSIOS + {0x874A, 0xB1A7}, //1078 #HANGUL SYLLABLE NIEUN WA SIOS + {0x874B, 0xB1A9}, //1079 #HANGUL SYLLABLE NIEUN WA IEUNG + {0x874C, 0xB1AA}, //1080 #HANGUL SYLLABLE NIEUN WA CIEUC + {0x874D, 0xB1AB}, //1081 #HANGUL SYLLABLE NIEUN WA CHIEUCH + {0x874E, 0xB1AC}, //1082 #HANGUL SYLLABLE NIEUN WA KHIEUKH + {0x874F, 0xB1AD}, //1083 #HANGUL SYLLABLE NIEUN WA THIEUTH + {0x8750, 0xB1AE}, //1084 #HANGUL SYLLABLE NIEUN WA PHIEUPH + {0x8751, 0xB1AF}, //1085 #HANGUL SYLLABLE NIEUN WA HIEUH + {0x8752, 0xB1B0}, //1086 #HANGUL SYLLABLE NIEUN WAE + {0x8753, 0xB1B1}, //1087 #HANGUL SYLLABLE NIEUN WAE KIYEOK + {0x8754, 0xB1B2}, //1088 #HANGUL SYLLABLE NIEUN WAE SSANGKIYEOK + {0x8755, 0xB1B3}, //1089 #HANGUL SYLLABLE NIEUN WAE KIYEOKSIOS + {0x8756, 0xB1B4}, //1090 #HANGUL SYLLABLE NIEUN WAE NIEUN + {0x8757, 0xB1B5}, //1091 #HANGUL SYLLABLE NIEUN WAE NIEUNCIEUC + {0x8758, 0xB1B6}, //1092 #HANGUL SYLLABLE NIEUN WAE NIEUNHIEUH + {0x8759, 0xB1B7}, //1093 #HANGUL SYLLABLE NIEUN WAE TIKEUT + {0x875A, 0xB1B8}, //1094 #HANGUL SYLLABLE NIEUN WAE RIEUL + {0x8761, 0xB1B9}, //1095 #HANGUL SYLLABLE NIEUN WAE RIEULKIYEOK + {0x8762, 0xB1BA}, //1096 #HANGUL SYLLABLE NIEUN WAE RIEULMIEUM + {0x8763, 0xB1BB}, //1097 #HANGUL SYLLABLE NIEUN WAE RIEULPIEUP + {0x8764, 0xB1BC}, //1098 #HANGUL SYLLABLE NIEUN WAE RIEULSIOS + {0x8765, 0xB1BD}, //1099 #HANGUL SYLLABLE NIEUN WAE RIEULTHIEUTH + {0x8766, 0xB1BE}, //1100 #HANGUL SYLLABLE NIEUN WAE RIEULPHIEUPH + {0x8767, 0xB1BF}, //1101 #HANGUL SYLLABLE NIEUN WAE RIEULHIEUH + {0x8768, 0xB1C0}, //1102 #HANGUL SYLLABLE NIEUN WAE MIEUM + {0x8769, 0xB1C1}, //1103 #HANGUL SYLLABLE NIEUN WAE PIEUP + {0x876A, 0xB1C2}, //1104 #HANGUL SYLLABLE NIEUN WAE PIEUPSIOS + {0x876B, 0xB1C3}, //1105 #HANGUL SYLLABLE NIEUN WAE SIOS + {0x876C, 0xB1C4}, //1106 #HANGUL SYLLABLE NIEUN WAE SSANGSIOS + {0x876D, 0xB1C5}, //1107 #HANGUL SYLLABLE NIEUN WAE IEUNG + {0x876E, 0xB1C6}, //1108 #HANGUL SYLLABLE NIEUN WAE CIEUC + {0x876F, 0xB1C7}, //1109 #HANGUL SYLLABLE NIEUN WAE CHIEUCH + {0x8770, 0xB1C8}, //1110 #HANGUL SYLLABLE NIEUN WAE KHIEUKH + {0x8771, 0xB1C9}, //1111 #HANGUL SYLLABLE NIEUN WAE THIEUTH + {0x8772, 0xB1CA}, //1112 #HANGUL SYLLABLE NIEUN WAE PHIEUPH + {0x8773, 0xB1CB}, //1113 #HANGUL SYLLABLE NIEUN WAE HIEUH + {0x8774, 0xB1CD}, //1114 #HANGUL SYLLABLE NIEUN OE KIYEOK + {0x8775, 0xB1CE}, //1115 #HANGUL SYLLABLE NIEUN OE SSANGKIYEOK + {0x8776, 0xB1CF}, //1116 #HANGUL SYLLABLE NIEUN OE KIYEOKSIOS + {0x8777, 0xB1D1}, //1117 #HANGUL SYLLABLE NIEUN OE NIEUNCIEUC + {0x8778, 0xB1D2}, //1118 #HANGUL SYLLABLE NIEUN OE NIEUNHIEUH + {0x8779, 0xB1D3}, //1119 #HANGUL SYLLABLE NIEUN OE TIKEUT + {0x877A, 0xB1D5}, //1120 #HANGUL SYLLABLE NIEUN OE RIEULKIYEOK + {0x8781, 0xB1D6}, //1121 #HANGUL SYLLABLE NIEUN OE RIEULMIEUM + {0x8782, 0xB1D7}, //1122 #HANGUL SYLLABLE NIEUN OE RIEULPIEUP + {0x8783, 0xB1D8}, //1123 #HANGUL SYLLABLE NIEUN OE RIEULSIOS + {0x8784, 0xB1D9}, //1124 #HANGUL SYLLABLE NIEUN OE RIEULTHIEUTH + {0x8785, 0xB1DA}, //1125 #HANGUL SYLLABLE NIEUN OE RIEULPHIEUPH + {0x8786, 0xB1DB}, //1126 #HANGUL SYLLABLE NIEUN OE RIEULHIEUH + {0x8787, 0xB1DE}, //1127 #HANGUL SYLLABLE NIEUN OE PIEUPSIOS + {0x8788, 0xB1E0}, //1128 #HANGUL SYLLABLE NIEUN OE SSANGSIOS + {0x8789, 0xB1E1}, //1129 #HANGUL SYLLABLE NIEUN OE IEUNG + {0x878A, 0xB1E2}, //1130 #HANGUL SYLLABLE NIEUN OE CIEUC + {0x878B, 0xB1E3}, //1131 #HANGUL SYLLABLE NIEUN OE CHIEUCH + {0x878C, 0xB1E4}, //1132 #HANGUL SYLLABLE NIEUN OE KHIEUKH + {0x878D, 0xB1E5}, //1133 #HANGUL SYLLABLE NIEUN OE THIEUTH + {0x878E, 0xB1E6}, //1134 #HANGUL SYLLABLE NIEUN OE PHIEUPH + {0x878F, 0xB1E7}, //1135 #HANGUL SYLLABLE NIEUN OE HIEUH + {0x8790, 0xB1EA}, //1136 #HANGUL SYLLABLE NIEUN YO SSANGKIYEOK + {0x8791, 0xB1EB}, //1137 #HANGUL SYLLABLE NIEUN YO KIYEOKSIOS + {0x8792, 0xB1ED}, //1138 #HANGUL SYLLABLE NIEUN YO NIEUNCIEUC + {0x8793, 0xB1EE}, //1139 #HANGUL SYLLABLE NIEUN YO NIEUNHIEUH + {0x8794, 0xB1EF}, //1140 #HANGUL SYLLABLE NIEUN YO TIKEUT + {0x8795, 0xB1F1}, //1141 #HANGUL SYLLABLE NIEUN YO RIEULKIYEOK + {0x8796, 0xB1F2}, //1142 #HANGUL SYLLABLE NIEUN YO RIEULMIEUM + {0x8797, 0xB1F3}, //1143 #HANGUL SYLLABLE NIEUN YO RIEULPIEUP + {0x8798, 0xB1F4}, //1144 #HANGUL SYLLABLE NIEUN YO RIEULSIOS + {0x8799, 0xB1F5}, //1145 #HANGUL SYLLABLE NIEUN YO RIEULTHIEUTH + {0x879A, 0xB1F6}, //1146 #HANGUL SYLLABLE NIEUN YO RIEULPHIEUPH + {0x879B, 0xB1F7}, //1147 #HANGUL SYLLABLE NIEUN YO RIEULHIEUH + {0x879C, 0xB1F8}, //1148 #HANGUL SYLLABLE NIEUN YO MIEUM + {0x879D, 0xB1FA}, //1149 #HANGUL SYLLABLE NIEUN YO PIEUPSIOS + {0x879E, 0xB1FC}, //1150 #HANGUL SYLLABLE NIEUN YO SSANGSIOS + {0x879F, 0xB1FE}, //1151 #HANGUL SYLLABLE NIEUN YO CIEUC + {0x87A0, 0xB1FF}, //1152 #HANGUL SYLLABLE NIEUN YO CHIEUCH + {0x87A1, 0xB200}, //1153 #HANGUL SYLLABLE NIEUN YO KHIEUKH + {0x87A2, 0xB201}, //1154 #HANGUL SYLLABLE NIEUN YO THIEUTH + {0x87A3, 0xB202}, //1155 #HANGUL SYLLABLE NIEUN YO PHIEUPH + {0x87A4, 0xB203}, //1156 #HANGUL SYLLABLE NIEUN YO HIEUH + {0x87A5, 0xB206}, //1157 #HANGUL SYLLABLE NIEUN U SSANGKIYEOK + {0x87A6, 0xB207}, //1158 #HANGUL SYLLABLE NIEUN U KIYEOKSIOS + {0x87A7, 0xB209}, //1159 #HANGUL SYLLABLE NIEUN U NIEUNCIEUC + {0x87A8, 0xB20A}, //1160 #HANGUL SYLLABLE NIEUN U NIEUNHIEUH + {0x87A9, 0xB20D}, //1161 #HANGUL SYLLABLE NIEUN U RIEULKIYEOK + {0x87AA, 0xB20E}, //1162 #HANGUL SYLLABLE NIEUN U RIEULMIEUM + {0x87AB, 0xB20F}, //1163 #HANGUL SYLLABLE NIEUN U RIEULPIEUP + {0x87AC, 0xB210}, //1164 #HANGUL SYLLABLE NIEUN U RIEULSIOS + {0x87AD, 0xB211}, //1165 #HANGUL SYLLABLE NIEUN U RIEULTHIEUTH + {0x87AE, 0xB212}, //1166 #HANGUL SYLLABLE NIEUN U RIEULPHIEUPH + {0x87AF, 0xB213}, //1167 #HANGUL SYLLABLE NIEUN U RIEULHIEUH + {0x87B0, 0xB216}, //1168 #HANGUL SYLLABLE NIEUN U PIEUPSIOS + {0x87B1, 0xB218}, //1169 #HANGUL SYLLABLE NIEUN U SSANGSIOS + {0x87B2, 0xB21A}, //1170 #HANGUL SYLLABLE NIEUN U CIEUC + {0x87B3, 0xB21B}, //1171 #HANGUL SYLLABLE NIEUN U CHIEUCH + {0x87B4, 0xB21C}, //1172 #HANGUL SYLLABLE NIEUN U KHIEUKH + {0x87B5, 0xB21D}, //1173 #HANGUL SYLLABLE NIEUN U THIEUTH + {0x87B6, 0xB21E}, //1174 #HANGUL SYLLABLE NIEUN U PHIEUPH + {0x87B7, 0xB21F}, //1175 #HANGUL SYLLABLE NIEUN U HIEUH + {0x87B8, 0xB221}, //1176 #HANGUL SYLLABLE NIEUN WEO KIYEOK + {0x87B9, 0xB222}, //1177 #HANGUL SYLLABLE NIEUN WEO SSANGKIYEOK + {0x87BA, 0xB223}, //1178 #HANGUL SYLLABLE NIEUN WEO KIYEOKSIOS + {0x87BB, 0xB224}, //1179 #HANGUL SYLLABLE NIEUN WEO NIEUN + {0x87BC, 0xB225}, //1180 #HANGUL SYLLABLE NIEUN WEO NIEUNCIEUC + {0x87BD, 0xB226}, //1181 #HANGUL SYLLABLE NIEUN WEO NIEUNHIEUH + {0x87BE, 0xB227}, //1182 #HANGUL SYLLABLE NIEUN WEO TIKEUT + {0x87BF, 0xB228}, //1183 #HANGUL SYLLABLE NIEUN WEO RIEUL + {0x87C0, 0xB229}, //1184 #HANGUL SYLLABLE NIEUN WEO RIEULKIYEOK + {0x87C1, 0xB22A}, //1185 #HANGUL SYLLABLE NIEUN WEO RIEULMIEUM + {0x87C2, 0xB22B}, //1186 #HANGUL SYLLABLE NIEUN WEO RIEULPIEUP + {0x87C3, 0xB22C}, //1187 #HANGUL SYLLABLE NIEUN WEO RIEULSIOS + {0x87C4, 0xB22D}, //1188 #HANGUL SYLLABLE NIEUN WEO RIEULTHIEUTH + {0x87C5, 0xB22E}, //1189 #HANGUL SYLLABLE NIEUN WEO RIEULPHIEUPH + {0x87C6, 0xB22F}, //1190 #HANGUL SYLLABLE NIEUN WEO RIEULHIEUH + {0x87C7, 0xB230}, //1191 #HANGUL SYLLABLE NIEUN WEO MIEUM + {0x87C8, 0xB231}, //1192 #HANGUL SYLLABLE NIEUN WEO PIEUP + {0x87C9, 0xB232}, //1193 #HANGUL SYLLABLE NIEUN WEO PIEUPSIOS + {0x87CA, 0xB233}, //1194 #HANGUL SYLLABLE NIEUN WEO SIOS + {0x87CB, 0xB235}, //1195 #HANGUL SYLLABLE NIEUN WEO IEUNG + {0x87CC, 0xB236}, //1196 #HANGUL SYLLABLE NIEUN WEO CIEUC + {0x87CD, 0xB237}, //1197 #HANGUL SYLLABLE NIEUN WEO CHIEUCH + {0x87CE, 0xB238}, //1198 #HANGUL SYLLABLE NIEUN WEO KHIEUKH + {0x87CF, 0xB239}, //1199 #HANGUL SYLLABLE NIEUN WEO THIEUTH + {0x87D0, 0xB23A}, //1200 #HANGUL SYLLABLE NIEUN WEO PHIEUPH + {0x87D1, 0xB23B}, //1201 #HANGUL SYLLABLE NIEUN WEO HIEUH + {0x87D2, 0xB23D}, //1202 #HANGUL SYLLABLE NIEUN WE KIYEOK + {0x87D3, 0xB23E}, //1203 #HANGUL SYLLABLE NIEUN WE SSANGKIYEOK + {0x87D4, 0xB23F}, //1204 #HANGUL SYLLABLE NIEUN WE KIYEOKSIOS + {0x87D5, 0xB240}, //1205 #HANGUL SYLLABLE NIEUN WE NIEUN + {0x87D6, 0xB241}, //1206 #HANGUL SYLLABLE NIEUN WE NIEUNCIEUC + {0x87D7, 0xB242}, //1207 #HANGUL SYLLABLE NIEUN WE NIEUNHIEUH + {0x87D8, 0xB243}, //1208 #HANGUL SYLLABLE NIEUN WE TIKEUT + {0x87D9, 0xB244}, //1209 #HANGUL SYLLABLE NIEUN WE RIEUL + {0x87DA, 0xB245}, //1210 #HANGUL SYLLABLE NIEUN WE RIEULKIYEOK + {0x87DB, 0xB246}, //1211 #HANGUL SYLLABLE NIEUN WE RIEULMIEUM + {0x87DC, 0xB247}, //1212 #HANGUL SYLLABLE NIEUN WE RIEULPIEUP + {0x87DD, 0xB248}, //1213 #HANGUL SYLLABLE NIEUN WE RIEULSIOS + {0x87DE, 0xB249}, //1214 #HANGUL SYLLABLE NIEUN WE RIEULTHIEUTH + {0x87DF, 0xB24A}, //1215 #HANGUL SYLLABLE NIEUN WE RIEULPHIEUPH + {0x87E0, 0xB24B}, //1216 #HANGUL SYLLABLE NIEUN WE RIEULHIEUH + {0x87E1, 0xB24C}, //1217 #HANGUL SYLLABLE NIEUN WE MIEUM + {0x87E2, 0xB24D}, //1218 #HANGUL SYLLABLE NIEUN WE PIEUP + {0x87E3, 0xB24E}, //1219 #HANGUL SYLLABLE NIEUN WE PIEUPSIOS + {0x87E4, 0xB24F}, //1220 #HANGUL SYLLABLE NIEUN WE SIOS + {0x87E5, 0xB250}, //1221 #HANGUL SYLLABLE NIEUN WE SSANGSIOS + {0x87E6, 0xB251}, //1222 #HANGUL SYLLABLE NIEUN WE IEUNG + {0x87E7, 0xB252}, //1223 #HANGUL SYLLABLE NIEUN WE CIEUC + {0x87E8, 0xB253}, //1224 #HANGUL SYLLABLE NIEUN WE CHIEUCH + {0x87E9, 0xB254}, //1225 #HANGUL SYLLABLE NIEUN WE KHIEUKH + {0x87EA, 0xB255}, //1226 #HANGUL SYLLABLE NIEUN WE THIEUTH + {0x87EB, 0xB256}, //1227 #HANGUL SYLLABLE NIEUN WE PHIEUPH + {0x87EC, 0xB257}, //1228 #HANGUL SYLLABLE NIEUN WE HIEUH + {0x87ED, 0xB259}, //1229 #HANGUL SYLLABLE NIEUN WI KIYEOK + {0x87EE, 0xB25A}, //1230 #HANGUL SYLLABLE NIEUN WI SSANGKIYEOK + {0x87EF, 0xB25B}, //1231 #HANGUL SYLLABLE NIEUN WI KIYEOKSIOS + {0x87F0, 0xB25D}, //1232 #HANGUL SYLLABLE NIEUN WI NIEUNCIEUC + {0x87F1, 0xB25E}, //1233 #HANGUL SYLLABLE NIEUN WI NIEUNHIEUH + {0x87F2, 0xB25F}, //1234 #HANGUL SYLLABLE NIEUN WI TIKEUT + {0x87F3, 0xB261}, //1235 #HANGUL SYLLABLE NIEUN WI RIEULKIYEOK + {0x87F4, 0xB262}, //1236 #HANGUL SYLLABLE NIEUN WI RIEULMIEUM + {0x87F5, 0xB263}, //1237 #HANGUL SYLLABLE NIEUN WI RIEULPIEUP + {0x87F6, 0xB264}, //1238 #HANGUL SYLLABLE NIEUN WI RIEULSIOS + {0x87F7, 0xB265}, //1239 #HANGUL SYLLABLE NIEUN WI RIEULTHIEUTH + {0x87F8, 0xB266}, //1240 #HANGUL SYLLABLE NIEUN WI RIEULPHIEUPH + {0x87F9, 0xB267}, //1241 #HANGUL SYLLABLE NIEUN WI RIEULHIEUH + {0x87FA, 0xB26A}, //1242 #HANGUL SYLLABLE NIEUN WI PIEUPSIOS + {0x87FB, 0xB26B}, //1243 #HANGUL SYLLABLE NIEUN WI SIOS + {0x87FC, 0xB26C}, //1244 #HANGUL SYLLABLE NIEUN WI SSANGSIOS + {0x87FD, 0xB26D}, //1245 #HANGUL SYLLABLE NIEUN WI IEUNG + {0x87FE, 0xB26E}, //1246 #HANGUL SYLLABLE NIEUN WI CIEUC + {0x8841, 0xB26F}, //1247 #HANGUL SYLLABLE NIEUN WI CHIEUCH + {0x8842, 0xB270}, //1248 #HANGUL SYLLABLE NIEUN WI KHIEUKH + {0x8843, 0xB271}, //1249 #HANGUL SYLLABLE NIEUN WI THIEUTH + {0x8844, 0xB272}, //1250 #HANGUL SYLLABLE NIEUN WI PHIEUPH + {0x8845, 0xB273}, //1251 #HANGUL SYLLABLE NIEUN WI HIEUH + {0x8846, 0xB276}, //1252 #HANGUL SYLLABLE NIEUN YU SSANGKIYEOK + {0x8847, 0xB277}, //1253 #HANGUL SYLLABLE NIEUN YU KIYEOKSIOS + {0x8848, 0xB278}, //1254 #HANGUL SYLLABLE NIEUN YU NIEUN + {0x8849, 0xB279}, //1255 #HANGUL SYLLABLE NIEUN YU NIEUNCIEUC + {0x884A, 0xB27A}, //1256 #HANGUL SYLLABLE NIEUN YU NIEUNHIEUH + {0x884B, 0xB27B}, //1257 #HANGUL SYLLABLE NIEUN YU TIKEUT + {0x884C, 0xB27D}, //1258 #HANGUL SYLLABLE NIEUN YU RIEULKIYEOK + {0x884D, 0xB27E}, //1259 #HANGUL SYLLABLE NIEUN YU RIEULMIEUM + {0x884E, 0xB27F}, //1260 #HANGUL SYLLABLE NIEUN YU RIEULPIEUP + {0x884F, 0xB280}, //1261 #HANGUL SYLLABLE NIEUN YU RIEULSIOS + {0x8850, 0xB281}, //1262 #HANGUL SYLLABLE NIEUN YU RIEULTHIEUTH + {0x8851, 0xB282}, //1263 #HANGUL SYLLABLE NIEUN YU RIEULPHIEUPH + {0x8852, 0xB283}, //1264 #HANGUL SYLLABLE NIEUN YU RIEULHIEUH + {0x8853, 0xB286}, //1265 #HANGUL SYLLABLE NIEUN YU PIEUPSIOS + {0x8854, 0xB287}, //1266 #HANGUL SYLLABLE NIEUN YU SIOS + {0x8855, 0xB288}, //1267 #HANGUL SYLLABLE NIEUN YU SSANGSIOS + {0x8856, 0xB28A}, //1268 #HANGUL SYLLABLE NIEUN YU CIEUC + {0x8857, 0xB28B}, //1269 #HANGUL SYLLABLE NIEUN YU CHIEUCH + {0x8858, 0xB28C}, //1270 #HANGUL SYLLABLE NIEUN YU KHIEUKH + {0x8859, 0xB28D}, //1271 #HANGUL SYLLABLE NIEUN YU THIEUTH + {0x885A, 0xB28E}, //1272 #HANGUL SYLLABLE NIEUN YU PHIEUPH + {0x8861, 0xB28F}, //1273 #HANGUL SYLLABLE NIEUN YU HIEUH + {0x8862, 0xB292}, //1274 #HANGUL SYLLABLE NIEUN EU SSANGKIYEOK + {0x8863, 0xB293}, //1275 #HANGUL SYLLABLE NIEUN EU KIYEOKSIOS + {0x8864, 0xB295}, //1276 #HANGUL SYLLABLE NIEUN EU NIEUNCIEUC + {0x8865, 0xB296}, //1277 #HANGUL SYLLABLE NIEUN EU NIEUNHIEUH + {0x8866, 0xB297}, //1278 #HANGUL SYLLABLE NIEUN EU TIKEUT + {0x8867, 0xB29B}, //1279 #HANGUL SYLLABLE NIEUN EU RIEULPIEUP + {0x8868, 0xB29C}, //1280 #HANGUL SYLLABLE NIEUN EU RIEULSIOS + {0x8869, 0xB29D}, //1281 #HANGUL SYLLABLE NIEUN EU RIEULTHIEUTH + {0x886A, 0xB29E}, //1282 #HANGUL SYLLABLE NIEUN EU RIEULPHIEUPH + {0x886B, 0xB29F}, //1283 #HANGUL SYLLABLE NIEUN EU RIEULHIEUH + {0x886C, 0xB2A2}, //1284 #HANGUL SYLLABLE NIEUN EU PIEUPSIOS + {0x886D, 0xB2A4}, //1285 #HANGUL SYLLABLE NIEUN EU SSANGSIOS + {0x886E, 0xB2A7}, //1286 #HANGUL SYLLABLE NIEUN EU CHIEUCH + {0x886F, 0xB2A8}, //1287 #HANGUL SYLLABLE NIEUN EU KHIEUKH + {0x8870, 0xB2A9}, //1288 #HANGUL SYLLABLE NIEUN EU THIEUTH + {0x8871, 0xB2AB}, //1289 #HANGUL SYLLABLE NIEUN EU HIEUH + {0x8872, 0xB2AD}, //1290 #HANGUL SYLLABLE NIEUN YI KIYEOK + {0x8873, 0xB2AE}, //1291 #HANGUL SYLLABLE NIEUN YI SSANGKIYEOK + {0x8874, 0xB2AF}, //1292 #HANGUL SYLLABLE NIEUN YI KIYEOKSIOS + {0x8875, 0xB2B1}, //1293 #HANGUL SYLLABLE NIEUN YI NIEUNCIEUC + {0x8876, 0xB2B2}, //1294 #HANGUL SYLLABLE NIEUN YI NIEUNHIEUH + {0x8877, 0xB2B3}, //1295 #HANGUL SYLLABLE NIEUN YI TIKEUT + {0x8878, 0xB2B5}, //1296 #HANGUL SYLLABLE NIEUN YI RIEULKIYEOK + {0x8879, 0xB2B6}, //1297 #HANGUL SYLLABLE NIEUN YI RIEULMIEUM + {0x887A, 0xB2B7}, //1298 #HANGUL SYLLABLE NIEUN YI RIEULPIEUP + {0x8881, 0xB2B8}, //1299 #HANGUL SYLLABLE NIEUN YI RIEULSIOS + {0x8882, 0xB2B9}, //1300 #HANGUL SYLLABLE NIEUN YI RIEULTHIEUTH + {0x8883, 0xB2BA}, //1301 #HANGUL SYLLABLE NIEUN YI RIEULPHIEUPH + {0x8884, 0xB2BB}, //1302 #HANGUL SYLLABLE NIEUN YI RIEULHIEUH + {0x8885, 0xB2BC}, //1303 #HANGUL SYLLABLE NIEUN YI MIEUM + {0x8886, 0xB2BD}, //1304 #HANGUL SYLLABLE NIEUN YI PIEUP + {0x8887, 0xB2BE}, //1305 #HANGUL SYLLABLE NIEUN YI PIEUPSIOS + {0x8888, 0xB2BF}, //1306 #HANGUL SYLLABLE NIEUN YI SIOS + {0x8889, 0xB2C0}, //1307 #HANGUL SYLLABLE NIEUN YI SSANGSIOS + {0x888A, 0xB2C1}, //1308 #HANGUL SYLLABLE NIEUN YI IEUNG + {0x888B, 0xB2C2}, //1309 #HANGUL SYLLABLE NIEUN YI CIEUC + {0x888C, 0xB2C3}, //1310 #HANGUL SYLLABLE NIEUN YI CHIEUCH + {0x888D, 0xB2C4}, //1311 #HANGUL SYLLABLE NIEUN YI KHIEUKH + {0x888E, 0xB2C5}, //1312 #HANGUL SYLLABLE NIEUN YI THIEUTH + {0x888F, 0xB2C6}, //1313 #HANGUL SYLLABLE NIEUN YI PHIEUPH + {0x8890, 0xB2C7}, //1314 #HANGUL SYLLABLE NIEUN YI HIEUH + {0x8891, 0xB2CA}, //1315 #HANGUL SYLLABLE NIEUN I SSANGKIYEOK + {0x8892, 0xB2CB}, //1316 #HANGUL SYLLABLE NIEUN I KIYEOKSIOS + {0x8893, 0xB2CD}, //1317 #HANGUL SYLLABLE NIEUN I NIEUNCIEUC + {0x8894, 0xB2CE}, //1318 #HANGUL SYLLABLE NIEUN I NIEUNHIEUH + {0x8895, 0xB2CF}, //1319 #HANGUL SYLLABLE NIEUN I TIKEUT + {0x8896, 0xB2D1}, //1320 #HANGUL SYLLABLE NIEUN I RIEULKIYEOK + {0x8897, 0xB2D3}, //1321 #HANGUL SYLLABLE NIEUN I RIEULPIEUP + {0x8898, 0xB2D4}, //1322 #HANGUL SYLLABLE NIEUN I RIEULSIOS + {0x8899, 0xB2D5}, //1323 #HANGUL SYLLABLE NIEUN I RIEULTHIEUTH + {0x889A, 0xB2D6}, //1324 #HANGUL SYLLABLE NIEUN I RIEULPHIEUPH + {0x889B, 0xB2D7}, //1325 #HANGUL SYLLABLE NIEUN I RIEULHIEUH + {0x889C, 0xB2DA}, //1326 #HANGUL SYLLABLE NIEUN I PIEUPSIOS + {0x889D, 0xB2DC}, //1327 #HANGUL SYLLABLE NIEUN I SSANGSIOS + {0x889E, 0xB2DE}, //1328 #HANGUL SYLLABLE NIEUN I CIEUC + {0x889F, 0xB2DF}, //1329 #HANGUL SYLLABLE NIEUN I CHIEUCH + {0x88A0, 0xB2E0}, //1330 #HANGUL SYLLABLE NIEUN I KHIEUKH + {0x88A1, 0xB2E1}, //1331 #HANGUL SYLLABLE NIEUN I THIEUTH + {0x88A2, 0xB2E3}, //1332 #HANGUL SYLLABLE NIEUN I HIEUH + {0x88A3, 0xB2E7}, //1333 #HANGUL SYLLABLE TIKEUT A KIYEOKSIOS + {0x88A4, 0xB2E9}, //1334 #HANGUL SYLLABLE TIKEUT A NIEUNCIEUC + {0x88A5, 0xB2EA}, //1335 #HANGUL SYLLABLE TIKEUT A NIEUNHIEUH + {0x88A6, 0xB2F0}, //1336 #HANGUL SYLLABLE TIKEUT A RIEULSIOS + {0x88A7, 0xB2F1}, //1337 #HANGUL SYLLABLE TIKEUT A RIEULTHIEUTH + {0x88A8, 0xB2F2}, //1338 #HANGUL SYLLABLE TIKEUT A RIEULPHIEUPH + {0x88A9, 0xB2F6}, //1339 #HANGUL SYLLABLE TIKEUT A PIEUPSIOS + {0x88AA, 0xB2FC}, //1340 #HANGUL SYLLABLE TIKEUT A KHIEUKH + {0x88AB, 0xB2FD}, //1341 #HANGUL SYLLABLE TIKEUT A THIEUTH + {0x88AC, 0xB2FE}, //1342 #HANGUL SYLLABLE TIKEUT A PHIEUPH + {0x88AD, 0xB302}, //1343 #HANGUL SYLLABLE TIKEUT AE SSANGKIYEOK + {0x88AE, 0xB303}, //1344 #HANGUL SYLLABLE TIKEUT AE KIYEOKSIOS + {0x88AF, 0xB305}, //1345 #HANGUL SYLLABLE TIKEUT AE NIEUNCIEUC + {0x88B0, 0xB306}, //1346 #HANGUL SYLLABLE TIKEUT AE NIEUNHIEUH + {0x88B1, 0xB307}, //1347 #HANGUL SYLLABLE TIKEUT AE TIKEUT + {0x88B2, 0xB309}, //1348 #HANGUL SYLLABLE TIKEUT AE RIEULKIYEOK + {0x88B3, 0xB30A}, //1349 #HANGUL SYLLABLE TIKEUT AE RIEULMIEUM + {0x88B4, 0xB30B}, //1350 #HANGUL SYLLABLE TIKEUT AE RIEULPIEUP + {0x88B5, 0xB30C}, //1351 #HANGUL SYLLABLE TIKEUT AE RIEULSIOS + {0x88B6, 0xB30D}, //1352 #HANGUL SYLLABLE TIKEUT AE RIEULTHIEUTH + {0x88B7, 0xB30E}, //1353 #HANGUL SYLLABLE TIKEUT AE RIEULPHIEUPH + {0x88B8, 0xB30F}, //1354 #HANGUL SYLLABLE TIKEUT AE RIEULHIEUH + {0x88B9, 0xB312}, //1355 #HANGUL SYLLABLE TIKEUT AE PIEUPSIOS + {0x88BA, 0xB316}, //1356 #HANGUL SYLLABLE TIKEUT AE CIEUC + {0x88BB, 0xB317}, //1357 #HANGUL SYLLABLE TIKEUT AE CHIEUCH + {0x88BC, 0xB318}, //1358 #HANGUL SYLLABLE TIKEUT AE KHIEUKH + {0x88BD, 0xB319}, //1359 #HANGUL SYLLABLE TIKEUT AE THIEUTH + {0x88BE, 0xB31A}, //1360 #HANGUL SYLLABLE TIKEUT AE PHIEUPH + {0x88BF, 0xB31B}, //1361 #HANGUL SYLLABLE TIKEUT AE HIEUH + {0x88C0, 0xB31D}, //1362 #HANGUL SYLLABLE TIKEUT YA KIYEOK + {0x88C1, 0xB31E}, //1363 #HANGUL SYLLABLE TIKEUT YA SSANGKIYEOK + {0x88C2, 0xB31F}, //1364 #HANGUL SYLLABLE TIKEUT YA KIYEOKSIOS + {0x88C3, 0xB320}, //1365 #HANGUL SYLLABLE TIKEUT YA NIEUN + {0x88C4, 0xB321}, //1366 #HANGUL SYLLABLE TIKEUT YA NIEUNCIEUC + {0x88C5, 0xB322}, //1367 #HANGUL SYLLABLE TIKEUT YA NIEUNHIEUH + {0x88C6, 0xB323}, //1368 #HANGUL SYLLABLE TIKEUT YA TIKEUT + {0x88C7, 0xB324}, //1369 #HANGUL SYLLABLE TIKEUT YA RIEUL + {0x88C8, 0xB325}, //1370 #HANGUL SYLLABLE TIKEUT YA RIEULKIYEOK + {0x88C9, 0xB326}, //1371 #HANGUL SYLLABLE TIKEUT YA RIEULMIEUM + {0x88CA, 0xB327}, //1372 #HANGUL SYLLABLE TIKEUT YA RIEULPIEUP + {0x88CB, 0xB328}, //1373 #HANGUL SYLLABLE TIKEUT YA RIEULSIOS + {0x88CC, 0xB329}, //1374 #HANGUL SYLLABLE TIKEUT YA RIEULTHIEUTH + {0x88CD, 0xB32A}, //1375 #HANGUL SYLLABLE TIKEUT YA RIEULPHIEUPH + {0x88CE, 0xB32B}, //1376 #HANGUL SYLLABLE TIKEUT YA RIEULHIEUH + {0x88CF, 0xB32C}, //1377 #HANGUL SYLLABLE TIKEUT YA MIEUM + {0x88D0, 0xB32D}, //1378 #HANGUL SYLLABLE TIKEUT YA PIEUP + {0x88D1, 0xB32E}, //1379 #HANGUL SYLLABLE TIKEUT YA PIEUPSIOS + {0x88D2, 0xB32F}, //1380 #HANGUL SYLLABLE TIKEUT YA SIOS + {0x88D3, 0xB330}, //1381 #HANGUL SYLLABLE TIKEUT YA SSANGSIOS + {0x88D4, 0xB331}, //1382 #HANGUL SYLLABLE TIKEUT YA IEUNG + {0x88D5, 0xB332}, //1383 #HANGUL SYLLABLE TIKEUT YA CIEUC + {0x88D6, 0xB333}, //1384 #HANGUL SYLLABLE TIKEUT YA CHIEUCH + {0x88D7, 0xB334}, //1385 #HANGUL SYLLABLE TIKEUT YA KHIEUKH + {0x88D8, 0xB335}, //1386 #HANGUL SYLLABLE TIKEUT YA THIEUTH + {0x88D9, 0xB336}, //1387 #HANGUL SYLLABLE TIKEUT YA PHIEUPH + {0x88DA, 0xB337}, //1388 #HANGUL SYLLABLE TIKEUT YA HIEUH + {0x88DB, 0xB338}, //1389 #HANGUL SYLLABLE TIKEUT YAE + {0x88DC, 0xB339}, //1390 #HANGUL SYLLABLE TIKEUT YAE KIYEOK + {0x88DD, 0xB33A}, //1391 #HANGUL SYLLABLE TIKEUT YAE SSANGKIYEOK + {0x88DE, 0xB33B}, //1392 #HANGUL SYLLABLE TIKEUT YAE KIYEOKSIOS + {0x88DF, 0xB33C}, //1393 #HANGUL SYLLABLE TIKEUT YAE NIEUN + {0x88E0, 0xB33D}, //1394 #HANGUL SYLLABLE TIKEUT YAE NIEUNCIEUC + {0x88E1, 0xB33E}, //1395 #HANGUL SYLLABLE TIKEUT YAE NIEUNHIEUH + {0x88E2, 0xB33F}, //1396 #HANGUL SYLLABLE TIKEUT YAE TIKEUT + {0x88E3, 0xB340}, //1397 #HANGUL SYLLABLE TIKEUT YAE RIEUL + {0x88E4, 0xB341}, //1398 #HANGUL SYLLABLE TIKEUT YAE RIEULKIYEOK + {0x88E5, 0xB342}, //1399 #HANGUL SYLLABLE TIKEUT YAE RIEULMIEUM + {0x88E6, 0xB343}, //1400 #HANGUL SYLLABLE TIKEUT YAE RIEULPIEUP + {0x88E7, 0xB344}, //1401 #HANGUL SYLLABLE TIKEUT YAE RIEULSIOS + {0x88E8, 0xB345}, //1402 #HANGUL SYLLABLE TIKEUT YAE RIEULTHIEUTH + {0x88E9, 0xB346}, //1403 #HANGUL SYLLABLE TIKEUT YAE RIEULPHIEUPH + {0x88EA, 0xB347}, //1404 #HANGUL SYLLABLE TIKEUT YAE RIEULHIEUH + {0x88EB, 0xB348}, //1405 #HANGUL SYLLABLE TIKEUT YAE MIEUM + {0x88EC, 0xB349}, //1406 #HANGUL SYLLABLE TIKEUT YAE PIEUP + {0x88ED, 0xB34A}, //1407 #HANGUL SYLLABLE TIKEUT YAE PIEUPSIOS + {0x88EE, 0xB34B}, //1408 #HANGUL SYLLABLE TIKEUT YAE SIOS + {0x88EF, 0xB34C}, //1409 #HANGUL SYLLABLE TIKEUT YAE SSANGSIOS + {0x88F0, 0xB34D}, //1410 #HANGUL SYLLABLE TIKEUT YAE IEUNG + {0x88F1, 0xB34E}, //1411 #HANGUL SYLLABLE TIKEUT YAE CIEUC + {0x88F2, 0xB34F}, //1412 #HANGUL SYLLABLE TIKEUT YAE CHIEUCH + {0x88F3, 0xB350}, //1413 #HANGUL SYLLABLE TIKEUT YAE KHIEUKH + {0x88F4, 0xB351}, //1414 #HANGUL SYLLABLE TIKEUT YAE THIEUTH + {0x88F5, 0xB352}, //1415 #HANGUL SYLLABLE TIKEUT YAE PHIEUPH + {0x88F6, 0xB353}, //1416 #HANGUL SYLLABLE TIKEUT YAE HIEUH + {0x88F7, 0xB357}, //1417 #HANGUL SYLLABLE TIKEUT EO KIYEOKSIOS + {0x88F8, 0xB359}, //1418 #HANGUL SYLLABLE TIKEUT EO NIEUNCIEUC + {0x88F9, 0xB35A}, //1419 #HANGUL SYLLABLE TIKEUT EO NIEUNHIEUH + {0x88FA, 0xB35D}, //1420 #HANGUL SYLLABLE TIKEUT EO RIEULKIYEOK + {0x88FB, 0xB360}, //1421 #HANGUL SYLLABLE TIKEUT EO RIEULSIOS + {0x88FC, 0xB361}, //1422 #HANGUL SYLLABLE TIKEUT EO RIEULTHIEUTH + {0x88FD, 0xB362}, //1423 #HANGUL SYLLABLE TIKEUT EO RIEULPHIEUPH + {0x88FE, 0xB363}, //1424 #HANGUL SYLLABLE TIKEUT EO RIEULHIEUH + {0x8941, 0xB366}, //1425 #HANGUL SYLLABLE TIKEUT EO PIEUPSIOS + {0x8942, 0xB368}, //1426 #HANGUL SYLLABLE TIKEUT EO SSANGSIOS + {0x8943, 0xB36A}, //1427 #HANGUL SYLLABLE TIKEUT EO CIEUC + {0x8944, 0xB36C}, //1428 #HANGUL SYLLABLE TIKEUT EO KHIEUKH + {0x8945, 0xB36D}, //1429 #HANGUL SYLLABLE TIKEUT EO THIEUTH + {0x8946, 0xB36F}, //1430 #HANGUL SYLLABLE TIKEUT EO HIEUH + {0x8947, 0xB372}, //1431 #HANGUL SYLLABLE TIKEUT E SSANGKIYEOK + {0x8948, 0xB373}, //1432 #HANGUL SYLLABLE TIKEUT E KIYEOKSIOS + {0x8949, 0xB375}, //1433 #HANGUL SYLLABLE TIKEUT E NIEUNCIEUC + {0x894A, 0xB376}, //1434 #HANGUL SYLLABLE TIKEUT E NIEUNHIEUH + {0x894B, 0xB377}, //1435 #HANGUL SYLLABLE TIKEUT E TIKEUT + {0x894C, 0xB379}, //1436 #HANGUL SYLLABLE TIKEUT E RIEULKIYEOK + {0x894D, 0xB37A}, //1437 #HANGUL SYLLABLE TIKEUT E RIEULMIEUM + {0x894E, 0xB37B}, //1438 #HANGUL SYLLABLE TIKEUT E RIEULPIEUP + {0x894F, 0xB37C}, //1439 #HANGUL SYLLABLE TIKEUT E RIEULSIOS + {0x8950, 0xB37D}, //1440 #HANGUL SYLLABLE TIKEUT E RIEULTHIEUTH + {0x8951, 0xB37E}, //1441 #HANGUL SYLLABLE TIKEUT E RIEULPHIEUPH + {0x8952, 0xB37F}, //1442 #HANGUL SYLLABLE TIKEUT E RIEULHIEUH + {0x8953, 0xB382}, //1443 #HANGUL SYLLABLE TIKEUT E PIEUPSIOS + {0x8954, 0xB386}, //1444 #HANGUL SYLLABLE TIKEUT E CIEUC + {0x8955, 0xB387}, //1445 #HANGUL SYLLABLE TIKEUT E CHIEUCH + {0x8956, 0xB388}, //1446 #HANGUL SYLLABLE TIKEUT E KHIEUKH + {0x8957, 0xB389}, //1447 #HANGUL SYLLABLE TIKEUT E THIEUTH + {0x8958, 0xB38A}, //1448 #HANGUL SYLLABLE TIKEUT E PHIEUPH + {0x8959, 0xB38B}, //1449 #HANGUL SYLLABLE TIKEUT E HIEUH + {0x895A, 0xB38D}, //1450 #HANGUL SYLLABLE TIKEUT YEO KIYEOK + {0x8961, 0xB38E}, //1451 #HANGUL SYLLABLE TIKEUT YEO SSANGKIYEOK + {0x8962, 0xB38F}, //1452 #HANGUL SYLLABLE TIKEUT YEO KIYEOKSIOS + {0x8963, 0xB391}, //1453 #HANGUL SYLLABLE TIKEUT YEO NIEUNCIEUC + {0x8964, 0xB392}, //1454 #HANGUL SYLLABLE TIKEUT YEO NIEUNHIEUH + {0x8965, 0xB393}, //1455 #HANGUL SYLLABLE TIKEUT YEO TIKEUT + {0x8966, 0xB395}, //1456 #HANGUL SYLLABLE TIKEUT YEO RIEULKIYEOK + {0x8967, 0xB396}, //1457 #HANGUL SYLLABLE TIKEUT YEO RIEULMIEUM + {0x8968, 0xB397}, //1458 #HANGUL SYLLABLE TIKEUT YEO RIEULPIEUP + {0x8969, 0xB398}, //1459 #HANGUL SYLLABLE TIKEUT YEO RIEULSIOS + {0x896A, 0xB399}, //1460 #HANGUL SYLLABLE TIKEUT YEO RIEULTHIEUTH + {0x896B, 0xB39A}, //1461 #HANGUL SYLLABLE TIKEUT YEO RIEULPHIEUPH + {0x896C, 0xB39B}, //1462 #HANGUL SYLLABLE TIKEUT YEO RIEULHIEUH + {0x896D, 0xB39C}, //1463 #HANGUL SYLLABLE TIKEUT YEO MIEUM + {0x896E, 0xB39D}, //1464 #HANGUL SYLLABLE TIKEUT YEO PIEUP + {0x896F, 0xB39E}, //1465 #HANGUL SYLLABLE TIKEUT YEO PIEUPSIOS + {0x8970, 0xB39F}, //1466 #HANGUL SYLLABLE TIKEUT YEO SIOS + {0x8971, 0xB3A2}, //1467 #HANGUL SYLLABLE TIKEUT YEO CIEUC + {0x8972, 0xB3A3}, //1468 #HANGUL SYLLABLE TIKEUT YEO CHIEUCH + {0x8973, 0xB3A4}, //1469 #HANGUL SYLLABLE TIKEUT YEO KHIEUKH + {0x8974, 0xB3A5}, //1470 #HANGUL SYLLABLE TIKEUT YEO THIEUTH + {0x8975, 0xB3A6}, //1471 #HANGUL SYLLABLE TIKEUT YEO PHIEUPH + {0x8976, 0xB3A7}, //1472 #HANGUL SYLLABLE TIKEUT YEO HIEUH + {0x8977, 0xB3A9}, //1473 #HANGUL SYLLABLE TIKEUT YE KIYEOK + {0x8978, 0xB3AA}, //1474 #HANGUL SYLLABLE TIKEUT YE SSANGKIYEOK + {0x8979, 0xB3AB}, //1475 #HANGUL SYLLABLE TIKEUT YE KIYEOKSIOS + {0x897A, 0xB3AD}, //1476 #HANGUL SYLLABLE TIKEUT YE NIEUNCIEUC + {0x8981, 0xB3AE}, //1477 #HANGUL SYLLABLE TIKEUT YE NIEUNHIEUH + {0x8982, 0xB3AF}, //1478 #HANGUL SYLLABLE TIKEUT YE TIKEUT + {0x8983, 0xB3B0}, //1479 #HANGUL SYLLABLE TIKEUT YE RIEUL + {0x8984, 0xB3B1}, //1480 #HANGUL SYLLABLE TIKEUT YE RIEULKIYEOK + {0x8985, 0xB3B2}, //1481 #HANGUL SYLLABLE TIKEUT YE RIEULMIEUM + {0x8986, 0xB3B3}, //1482 #HANGUL SYLLABLE TIKEUT YE RIEULPIEUP + {0x8987, 0xB3B4}, //1483 #HANGUL SYLLABLE TIKEUT YE RIEULSIOS + {0x8988, 0xB3B5}, //1484 #HANGUL SYLLABLE TIKEUT YE RIEULTHIEUTH + {0x8989, 0xB3B6}, //1485 #HANGUL SYLLABLE TIKEUT YE RIEULPHIEUPH + {0x898A, 0xB3B7}, //1486 #HANGUL SYLLABLE TIKEUT YE RIEULHIEUH + {0x898B, 0xB3B8}, //1487 #HANGUL SYLLABLE TIKEUT YE MIEUM + {0x898C, 0xB3B9}, //1488 #HANGUL SYLLABLE TIKEUT YE PIEUP + {0x898D, 0xB3BA}, //1489 #HANGUL SYLLABLE TIKEUT YE PIEUPSIOS + {0x898E, 0xB3BB}, //1490 #HANGUL SYLLABLE TIKEUT YE SIOS + {0x898F, 0xB3BC}, //1491 #HANGUL SYLLABLE TIKEUT YE SSANGSIOS + {0x8990, 0xB3BD}, //1492 #HANGUL SYLLABLE TIKEUT YE IEUNG + {0x8991, 0xB3BE}, //1493 #HANGUL SYLLABLE TIKEUT YE CIEUC + {0x8992, 0xB3BF}, //1494 #HANGUL SYLLABLE TIKEUT YE CHIEUCH + {0x8993, 0xB3C0}, //1495 #HANGUL SYLLABLE TIKEUT YE KHIEUKH + {0x8994, 0xB3C1}, //1496 #HANGUL SYLLABLE TIKEUT YE THIEUTH + {0x8995, 0xB3C2}, //1497 #HANGUL SYLLABLE TIKEUT YE PHIEUPH + {0x8996, 0xB3C3}, //1498 #HANGUL SYLLABLE TIKEUT YE HIEUH + {0x8997, 0xB3C6}, //1499 #HANGUL SYLLABLE TIKEUT O SSANGKIYEOK + {0x8998, 0xB3C7}, //1500 #HANGUL SYLLABLE TIKEUT O KIYEOKSIOS + {0x8999, 0xB3C9}, //1501 #HANGUL SYLLABLE TIKEUT O NIEUNCIEUC + {0x899A, 0xB3CA}, //1502 #HANGUL SYLLABLE TIKEUT O NIEUNHIEUH + {0x899B, 0xB3CD}, //1503 #HANGUL SYLLABLE TIKEUT O RIEULKIYEOK + {0x899C, 0xB3CF}, //1504 #HANGUL SYLLABLE TIKEUT O RIEULPIEUP + {0x899D, 0xB3D1}, //1505 #HANGUL SYLLABLE TIKEUT O RIEULTHIEUTH + {0x899E, 0xB3D2}, //1506 #HANGUL SYLLABLE TIKEUT O RIEULPHIEUPH + {0x899F, 0xB3D3}, //1507 #HANGUL SYLLABLE TIKEUT O RIEULHIEUH + {0x89A0, 0xB3D6}, //1508 #HANGUL SYLLABLE TIKEUT O PIEUPSIOS + {0x89A1, 0xB3D8}, //1509 #HANGUL SYLLABLE TIKEUT O SSANGSIOS + {0x89A2, 0xB3DA}, //1510 #HANGUL SYLLABLE TIKEUT O CIEUC + {0x89A3, 0xB3DC}, //1511 #HANGUL SYLLABLE TIKEUT O KHIEUKH + {0x89A4, 0xB3DE}, //1512 #HANGUL SYLLABLE TIKEUT O PHIEUPH + {0x89A5, 0xB3DF}, //1513 #HANGUL SYLLABLE TIKEUT O HIEUH + {0x89A6, 0xB3E1}, //1514 #HANGUL SYLLABLE TIKEUT WA KIYEOK + {0x89A7, 0xB3E2}, //1515 #HANGUL SYLLABLE TIKEUT WA SSANGKIYEOK + {0x89A8, 0xB3E3}, //1516 #HANGUL SYLLABLE TIKEUT WA KIYEOKSIOS + {0x89A9, 0xB3E5}, //1517 #HANGUL SYLLABLE TIKEUT WA NIEUNCIEUC + {0x89AA, 0xB3E6}, //1518 #HANGUL SYLLABLE TIKEUT WA NIEUNHIEUH + {0x89AB, 0xB3E7}, //1519 #HANGUL SYLLABLE TIKEUT WA TIKEUT + {0x89AC, 0xB3E9}, //1520 #HANGUL SYLLABLE TIKEUT WA RIEULKIYEOK + {0x89AD, 0xB3EA}, //1521 #HANGUL SYLLABLE TIKEUT WA RIEULMIEUM + {0x89AE, 0xB3EB}, //1522 #HANGUL SYLLABLE TIKEUT WA RIEULPIEUP + {0x89AF, 0xB3EC}, //1523 #HANGUL SYLLABLE TIKEUT WA RIEULSIOS + {0x89B0, 0xB3ED}, //1524 #HANGUL SYLLABLE TIKEUT WA RIEULTHIEUTH + {0x89B1, 0xB3EE}, //1525 #HANGUL SYLLABLE TIKEUT WA RIEULPHIEUPH + {0x89B2, 0xB3EF}, //1526 #HANGUL SYLLABLE TIKEUT WA RIEULHIEUH + {0x89B3, 0xB3F0}, //1527 #HANGUL SYLLABLE TIKEUT WA MIEUM + {0x89B4, 0xB3F1}, //1528 #HANGUL SYLLABLE TIKEUT WA PIEUP + {0x89B5, 0xB3F2}, //1529 #HANGUL SYLLABLE TIKEUT WA PIEUPSIOS + {0x89B6, 0xB3F3}, //1530 #HANGUL SYLLABLE TIKEUT WA SIOS + {0x89B7, 0xB3F4}, //1531 #HANGUL SYLLABLE TIKEUT WA SSANGSIOS + {0x89B8, 0xB3F5}, //1532 #HANGUL SYLLABLE TIKEUT WA IEUNG + {0x89B9, 0xB3F6}, //1533 #HANGUL SYLLABLE TIKEUT WA CIEUC + {0x89BA, 0xB3F7}, //1534 #HANGUL SYLLABLE TIKEUT WA CHIEUCH + {0x89BB, 0xB3F8}, //1535 #HANGUL SYLLABLE TIKEUT WA KHIEUKH + {0x89BC, 0xB3F9}, //1536 #HANGUL SYLLABLE TIKEUT WA THIEUTH + {0x89BD, 0xB3FA}, //1537 #HANGUL SYLLABLE TIKEUT WA PHIEUPH + {0x89BE, 0xB3FB}, //1538 #HANGUL SYLLABLE TIKEUT WA HIEUH + {0x89BF, 0xB3FD}, //1539 #HANGUL SYLLABLE TIKEUT WAE KIYEOK + {0x89C0, 0xB3FE}, //1540 #HANGUL SYLLABLE TIKEUT WAE SSANGKIYEOK + {0x89C1, 0xB3FF}, //1541 #HANGUL SYLLABLE TIKEUT WAE KIYEOKSIOS + {0x89C2, 0xB400}, //1542 #HANGUL SYLLABLE TIKEUT WAE NIEUN + {0x89C3, 0xB401}, //1543 #HANGUL SYLLABLE TIKEUT WAE NIEUNCIEUC + {0x89C4, 0xB402}, //1544 #HANGUL SYLLABLE TIKEUT WAE NIEUNHIEUH + {0x89C5, 0xB403}, //1545 #HANGUL SYLLABLE TIKEUT WAE TIKEUT + {0x89C6, 0xB404}, //1546 #HANGUL SYLLABLE TIKEUT WAE RIEUL + {0x89C7, 0xB405}, //1547 #HANGUL SYLLABLE TIKEUT WAE RIEULKIYEOK + {0x89C8, 0xB406}, //1548 #HANGUL SYLLABLE TIKEUT WAE RIEULMIEUM + {0x89C9, 0xB407}, //1549 #HANGUL SYLLABLE TIKEUT WAE RIEULPIEUP + {0x89CA, 0xB408}, //1550 #HANGUL SYLLABLE TIKEUT WAE RIEULSIOS + {0x89CB, 0xB409}, //1551 #HANGUL SYLLABLE TIKEUT WAE RIEULTHIEUTH + {0x89CC, 0xB40A}, //1552 #HANGUL SYLLABLE TIKEUT WAE RIEULPHIEUPH + {0x89CD, 0xB40B}, //1553 #HANGUL SYLLABLE TIKEUT WAE RIEULHIEUH + {0x89CE, 0xB40C}, //1554 #HANGUL SYLLABLE TIKEUT WAE MIEUM + {0x89CF, 0xB40D}, //1555 #HANGUL SYLLABLE TIKEUT WAE PIEUP + {0x89D0, 0xB40E}, //1556 #HANGUL SYLLABLE TIKEUT WAE PIEUPSIOS + {0x89D1, 0xB40F}, //1557 #HANGUL SYLLABLE TIKEUT WAE SIOS + {0x89D2, 0xB411}, //1558 #HANGUL SYLLABLE TIKEUT WAE IEUNG + {0x89D3, 0xB412}, //1559 #HANGUL SYLLABLE TIKEUT WAE CIEUC + {0x89D4, 0xB413}, //1560 #HANGUL SYLLABLE TIKEUT WAE CHIEUCH + {0x89D5, 0xB414}, //1561 #HANGUL SYLLABLE TIKEUT WAE KHIEUKH + {0x89D6, 0xB415}, //1562 #HANGUL SYLLABLE TIKEUT WAE THIEUTH + {0x89D7, 0xB416}, //1563 #HANGUL SYLLABLE TIKEUT WAE PHIEUPH + {0x89D8, 0xB417}, //1564 #HANGUL SYLLABLE TIKEUT WAE HIEUH + {0x89D9, 0xB419}, //1565 #HANGUL SYLLABLE TIKEUT OE KIYEOK + {0x89DA, 0xB41A}, //1566 #HANGUL SYLLABLE TIKEUT OE SSANGKIYEOK + {0x89DB, 0xB41B}, //1567 #HANGUL SYLLABLE TIKEUT OE KIYEOKSIOS + {0x89DC, 0xB41D}, //1568 #HANGUL SYLLABLE TIKEUT OE NIEUNCIEUC + {0x89DD, 0xB41E}, //1569 #HANGUL SYLLABLE TIKEUT OE NIEUNHIEUH + {0x89DE, 0xB41F}, //1570 #HANGUL SYLLABLE TIKEUT OE TIKEUT + {0x89DF, 0xB421}, //1571 #HANGUL SYLLABLE TIKEUT OE RIEULKIYEOK + {0x89E0, 0xB422}, //1572 #HANGUL SYLLABLE TIKEUT OE RIEULMIEUM + {0x89E1, 0xB423}, //1573 #HANGUL SYLLABLE TIKEUT OE RIEULPIEUP + {0x89E2, 0xB424}, //1574 #HANGUL SYLLABLE TIKEUT OE RIEULSIOS + {0x89E3, 0xB425}, //1575 #HANGUL SYLLABLE TIKEUT OE RIEULTHIEUTH + {0x89E4, 0xB426}, //1576 #HANGUL SYLLABLE TIKEUT OE RIEULPHIEUPH + {0x89E5, 0xB427}, //1577 #HANGUL SYLLABLE TIKEUT OE RIEULHIEUH + {0x89E6, 0xB42A}, //1578 #HANGUL SYLLABLE TIKEUT OE PIEUPSIOS + {0x89E7, 0xB42C}, //1579 #HANGUL SYLLABLE TIKEUT OE SSANGSIOS + {0x89E8, 0xB42D}, //1580 #HANGUL SYLLABLE TIKEUT OE IEUNG + {0x89E9, 0xB42E}, //1581 #HANGUL SYLLABLE TIKEUT OE CIEUC + {0x89EA, 0xB42F}, //1582 #HANGUL SYLLABLE TIKEUT OE CHIEUCH + {0x89EB, 0xB430}, //1583 #HANGUL SYLLABLE TIKEUT OE KHIEUKH + {0x89EC, 0xB431}, //1584 #HANGUL SYLLABLE TIKEUT OE THIEUTH + {0x89ED, 0xB432}, //1585 #HANGUL SYLLABLE TIKEUT OE PHIEUPH + {0x89EE, 0xB433}, //1586 #HANGUL SYLLABLE TIKEUT OE HIEUH + {0x89EF, 0xB435}, //1587 #HANGUL SYLLABLE TIKEUT YO KIYEOK + {0x89F0, 0xB436}, //1588 #HANGUL SYLLABLE TIKEUT YO SSANGKIYEOK + {0x89F1, 0xB437}, //1589 #HANGUL SYLLABLE TIKEUT YO KIYEOKSIOS + {0x89F2, 0xB438}, //1590 #HANGUL SYLLABLE TIKEUT YO NIEUN + {0x89F3, 0xB439}, //1591 #HANGUL SYLLABLE TIKEUT YO NIEUNCIEUC + {0x89F4, 0xB43A}, //1592 #HANGUL SYLLABLE TIKEUT YO NIEUNHIEUH + {0x89F5, 0xB43B}, //1593 #HANGUL SYLLABLE TIKEUT YO TIKEUT + {0x89F6, 0xB43C}, //1594 #HANGUL SYLLABLE TIKEUT YO RIEUL + {0x89F7, 0xB43D}, //1595 #HANGUL SYLLABLE TIKEUT YO RIEULKIYEOK + {0x89F8, 0xB43E}, //1596 #HANGUL SYLLABLE TIKEUT YO RIEULMIEUM + {0x89F9, 0xB43F}, //1597 #HANGUL SYLLABLE TIKEUT YO RIEULPIEUP + {0x89FA, 0xB440}, //1598 #HANGUL SYLLABLE TIKEUT YO RIEULSIOS + {0x89FB, 0xB441}, //1599 #HANGUL SYLLABLE TIKEUT YO RIEULTHIEUTH + {0x89FC, 0xB442}, //1600 #HANGUL SYLLABLE TIKEUT YO RIEULPHIEUPH + {0x89FD, 0xB443}, //1601 #HANGUL SYLLABLE TIKEUT YO RIEULHIEUH + {0x89FE, 0xB444}, //1602 #HANGUL SYLLABLE TIKEUT YO MIEUM + {0x8A41, 0xB445}, //1603 #HANGUL SYLLABLE TIKEUT YO PIEUP + {0x8A42, 0xB446}, //1604 #HANGUL SYLLABLE TIKEUT YO PIEUPSIOS + {0x8A43, 0xB447}, //1605 #HANGUL SYLLABLE TIKEUT YO SIOS + {0x8A44, 0xB448}, //1606 #HANGUL SYLLABLE TIKEUT YO SSANGSIOS + {0x8A45, 0xB449}, //1607 #HANGUL SYLLABLE TIKEUT YO IEUNG + {0x8A46, 0xB44A}, //1608 #HANGUL SYLLABLE TIKEUT YO CIEUC + {0x8A47, 0xB44B}, //1609 #HANGUL SYLLABLE TIKEUT YO CHIEUCH + {0x8A48, 0xB44C}, //1610 #HANGUL SYLLABLE TIKEUT YO KHIEUKH + {0x8A49, 0xB44D}, //1611 #HANGUL SYLLABLE TIKEUT YO THIEUTH + {0x8A4A, 0xB44E}, //1612 #HANGUL SYLLABLE TIKEUT YO PHIEUPH + {0x8A4B, 0xB44F}, //1613 #HANGUL SYLLABLE TIKEUT YO HIEUH + {0x8A4C, 0xB452}, //1614 #HANGUL SYLLABLE TIKEUT U SSANGKIYEOK + {0x8A4D, 0xB453}, //1615 #HANGUL SYLLABLE TIKEUT U KIYEOKSIOS + {0x8A4E, 0xB455}, //1616 #HANGUL SYLLABLE TIKEUT U NIEUNCIEUC + {0x8A4F, 0xB456}, //1617 #HANGUL SYLLABLE TIKEUT U NIEUNHIEUH + {0x8A50, 0xB457}, //1618 #HANGUL SYLLABLE TIKEUT U TIKEUT + {0x8A51, 0xB459}, //1619 #HANGUL SYLLABLE TIKEUT U RIEULKIYEOK + {0x8A52, 0xB45A}, //1620 #HANGUL SYLLABLE TIKEUT U RIEULMIEUM + {0x8A53, 0xB45B}, //1621 #HANGUL SYLLABLE TIKEUT U RIEULPIEUP + {0x8A54, 0xB45C}, //1622 #HANGUL SYLLABLE TIKEUT U RIEULSIOS + {0x8A55, 0xB45D}, //1623 #HANGUL SYLLABLE TIKEUT U RIEULTHIEUTH + {0x8A56, 0xB45E}, //1624 #HANGUL SYLLABLE TIKEUT U RIEULPHIEUPH + {0x8A57, 0xB45F}, //1625 #HANGUL SYLLABLE TIKEUT U RIEULHIEUH + {0x8A58, 0xB462}, //1626 #HANGUL SYLLABLE TIKEUT U PIEUPSIOS + {0x8A59, 0xB464}, //1627 #HANGUL SYLLABLE TIKEUT U SSANGSIOS + {0x8A5A, 0xB466}, //1628 #HANGUL SYLLABLE TIKEUT U CIEUC + {0x8A61, 0xB467}, //1629 #HANGUL SYLLABLE TIKEUT U CHIEUCH + {0x8A62, 0xB468}, //1630 #HANGUL SYLLABLE TIKEUT U KHIEUKH + {0x8A63, 0xB469}, //1631 #HANGUL SYLLABLE TIKEUT U THIEUTH + {0x8A64, 0xB46A}, //1632 #HANGUL SYLLABLE TIKEUT U PHIEUPH + {0x8A65, 0xB46B}, //1633 #HANGUL SYLLABLE TIKEUT U HIEUH + {0x8A66, 0xB46D}, //1634 #HANGUL SYLLABLE TIKEUT WEO KIYEOK + {0x8A67, 0xB46E}, //1635 #HANGUL SYLLABLE TIKEUT WEO SSANGKIYEOK + {0x8A68, 0xB46F}, //1636 #HANGUL SYLLABLE TIKEUT WEO KIYEOKSIOS + {0x8A69, 0xB470}, //1637 #HANGUL SYLLABLE TIKEUT WEO NIEUN + {0x8A6A, 0xB471}, //1638 #HANGUL SYLLABLE TIKEUT WEO NIEUNCIEUC + {0x8A6B, 0xB472}, //1639 #HANGUL SYLLABLE TIKEUT WEO NIEUNHIEUH + {0x8A6C, 0xB473}, //1640 #HANGUL SYLLABLE TIKEUT WEO TIKEUT + {0x8A6D, 0xB474}, //1641 #HANGUL SYLLABLE TIKEUT WEO RIEUL + {0x8A6E, 0xB475}, //1642 #HANGUL SYLLABLE TIKEUT WEO RIEULKIYEOK + {0x8A6F, 0xB476}, //1643 #HANGUL SYLLABLE TIKEUT WEO RIEULMIEUM + {0x8A70, 0xB477}, //1644 #HANGUL SYLLABLE TIKEUT WEO RIEULPIEUP + {0x8A71, 0xB478}, //1645 #HANGUL SYLLABLE TIKEUT WEO RIEULSIOS + {0x8A72, 0xB479}, //1646 #HANGUL SYLLABLE TIKEUT WEO RIEULTHIEUTH + {0x8A73, 0xB47A}, //1647 #HANGUL SYLLABLE TIKEUT WEO RIEULPHIEUPH + {0x8A74, 0xB47B}, //1648 #HANGUL SYLLABLE TIKEUT WEO RIEULHIEUH + {0x8A75, 0xB47C}, //1649 #HANGUL SYLLABLE TIKEUT WEO MIEUM + {0x8A76, 0xB47D}, //1650 #HANGUL SYLLABLE TIKEUT WEO PIEUP + {0x8A77, 0xB47E}, //1651 #HANGUL SYLLABLE TIKEUT WEO PIEUPSIOS + {0x8A78, 0xB47F}, //1652 #HANGUL SYLLABLE TIKEUT WEO SIOS + {0x8A79, 0xB481}, //1653 #HANGUL SYLLABLE TIKEUT WEO IEUNG + {0x8A7A, 0xB482}, //1654 #HANGUL SYLLABLE TIKEUT WEO CIEUC + {0x8A81, 0xB483}, //1655 #HANGUL SYLLABLE TIKEUT WEO CHIEUCH + {0x8A82, 0xB484}, //1656 #HANGUL SYLLABLE TIKEUT WEO KHIEUKH + {0x8A83, 0xB485}, //1657 #HANGUL SYLLABLE TIKEUT WEO THIEUTH + {0x8A84, 0xB486}, //1658 #HANGUL SYLLABLE TIKEUT WEO PHIEUPH + {0x8A85, 0xB487}, //1659 #HANGUL SYLLABLE TIKEUT WEO HIEUH + {0x8A86, 0xB489}, //1660 #HANGUL SYLLABLE TIKEUT WE KIYEOK + {0x8A87, 0xB48A}, //1661 #HANGUL SYLLABLE TIKEUT WE SSANGKIYEOK + {0x8A88, 0xB48B}, //1662 #HANGUL SYLLABLE TIKEUT WE KIYEOKSIOS + {0x8A89, 0xB48C}, //1663 #HANGUL SYLLABLE TIKEUT WE NIEUN + {0x8A8A, 0xB48D}, //1664 #HANGUL SYLLABLE TIKEUT WE NIEUNCIEUC + {0x8A8B, 0xB48E}, //1665 #HANGUL SYLLABLE TIKEUT WE NIEUNHIEUH + {0x8A8C, 0xB48F}, //1666 #HANGUL SYLLABLE TIKEUT WE TIKEUT + {0x8A8D, 0xB490}, //1667 #HANGUL SYLLABLE TIKEUT WE RIEUL + {0x8A8E, 0xB491}, //1668 #HANGUL SYLLABLE TIKEUT WE RIEULKIYEOK + {0x8A8F, 0xB492}, //1669 #HANGUL SYLLABLE TIKEUT WE RIEULMIEUM + {0x8A90, 0xB493}, //1670 #HANGUL SYLLABLE TIKEUT WE RIEULPIEUP + {0x8A91, 0xB494}, //1671 #HANGUL SYLLABLE TIKEUT WE RIEULSIOS + {0x8A92, 0xB495}, //1672 #HANGUL SYLLABLE TIKEUT WE RIEULTHIEUTH + {0x8A93, 0xB496}, //1673 #HANGUL SYLLABLE TIKEUT WE RIEULPHIEUPH + {0x8A94, 0xB497}, //1674 #HANGUL SYLLABLE TIKEUT WE RIEULHIEUH + {0x8A95, 0xB498}, //1675 #HANGUL SYLLABLE TIKEUT WE MIEUM + {0x8A96, 0xB499}, //1676 #HANGUL SYLLABLE TIKEUT WE PIEUP + {0x8A97, 0xB49A}, //1677 #HANGUL SYLLABLE TIKEUT WE PIEUPSIOS + {0x8A98, 0xB49B}, //1678 #HANGUL SYLLABLE TIKEUT WE SIOS + {0x8A99, 0xB49C}, //1679 #HANGUL SYLLABLE TIKEUT WE SSANGSIOS + {0x8A9A, 0xB49E}, //1680 #HANGUL SYLLABLE TIKEUT WE CIEUC + {0x8A9B, 0xB49F}, //1681 #HANGUL SYLLABLE TIKEUT WE CHIEUCH + {0x8A9C, 0xB4A0}, //1682 #HANGUL SYLLABLE TIKEUT WE KHIEUKH + {0x8A9D, 0xB4A1}, //1683 #HANGUL SYLLABLE TIKEUT WE THIEUTH + {0x8A9E, 0xB4A2}, //1684 #HANGUL SYLLABLE TIKEUT WE PHIEUPH + {0x8A9F, 0xB4A3}, //1685 #HANGUL SYLLABLE TIKEUT WE HIEUH + {0x8AA0, 0xB4A5}, //1686 #HANGUL SYLLABLE TIKEUT WI KIYEOK + {0x8AA1, 0xB4A6}, //1687 #HANGUL SYLLABLE TIKEUT WI SSANGKIYEOK + {0x8AA2, 0xB4A7}, //1688 #HANGUL SYLLABLE TIKEUT WI KIYEOKSIOS + {0x8AA3, 0xB4A9}, //1689 #HANGUL SYLLABLE TIKEUT WI NIEUNCIEUC + {0x8AA4, 0xB4AA}, //1690 #HANGUL SYLLABLE TIKEUT WI NIEUNHIEUH + {0x8AA5, 0xB4AB}, //1691 #HANGUL SYLLABLE TIKEUT WI TIKEUT + {0x8AA6, 0xB4AD}, //1692 #HANGUL SYLLABLE TIKEUT WI RIEULKIYEOK + {0x8AA7, 0xB4AE}, //1693 #HANGUL SYLLABLE TIKEUT WI RIEULMIEUM + {0x8AA8, 0xB4AF}, //1694 #HANGUL SYLLABLE TIKEUT WI RIEULPIEUP + {0x8AA9, 0xB4B0}, //1695 #HANGUL SYLLABLE TIKEUT WI RIEULSIOS + {0x8AAA, 0xB4B1}, //1696 #HANGUL SYLLABLE TIKEUT WI RIEULTHIEUTH + {0x8AAB, 0xB4B2}, //1697 #HANGUL SYLLABLE TIKEUT WI RIEULPHIEUPH + {0x8AAC, 0xB4B3}, //1698 #HANGUL SYLLABLE TIKEUT WI RIEULHIEUH + {0x8AAD, 0xB4B4}, //1699 #HANGUL SYLLABLE TIKEUT WI MIEUM + {0x8AAE, 0xB4B6}, //1700 #HANGUL SYLLABLE TIKEUT WI PIEUPSIOS + {0x8AAF, 0xB4B8}, //1701 #HANGUL SYLLABLE TIKEUT WI SSANGSIOS + {0x8AB0, 0xB4BA}, //1702 #HANGUL SYLLABLE TIKEUT WI CIEUC + {0x8AB1, 0xB4BB}, //1703 #HANGUL SYLLABLE TIKEUT WI CHIEUCH + {0x8AB2, 0xB4BC}, //1704 #HANGUL SYLLABLE TIKEUT WI KHIEUKH + {0x8AB3, 0xB4BD}, //1705 #HANGUL SYLLABLE TIKEUT WI THIEUTH + {0x8AB4, 0xB4BE}, //1706 #HANGUL SYLLABLE TIKEUT WI PHIEUPH + {0x8AB5, 0xB4BF}, //1707 #HANGUL SYLLABLE TIKEUT WI HIEUH + {0x8AB6, 0xB4C1}, //1708 #HANGUL SYLLABLE TIKEUT YU KIYEOK + {0x8AB7, 0xB4C2}, //1709 #HANGUL SYLLABLE TIKEUT YU SSANGKIYEOK + {0x8AB8, 0xB4C3}, //1710 #HANGUL SYLLABLE TIKEUT YU KIYEOKSIOS + {0x8AB9, 0xB4C5}, //1711 #HANGUL SYLLABLE TIKEUT YU NIEUNCIEUC + {0x8ABA, 0xB4C6}, //1712 #HANGUL SYLLABLE TIKEUT YU NIEUNHIEUH + {0x8ABB, 0xB4C7}, //1713 #HANGUL SYLLABLE TIKEUT YU TIKEUT + {0x8ABC, 0xB4C9}, //1714 #HANGUL SYLLABLE TIKEUT YU RIEULKIYEOK + {0x8ABD, 0xB4CA}, //1715 #HANGUL SYLLABLE TIKEUT YU RIEULMIEUM + {0x8ABE, 0xB4CB}, //1716 #HANGUL SYLLABLE TIKEUT YU RIEULPIEUP + {0x8ABF, 0xB4CC}, //1717 #HANGUL SYLLABLE TIKEUT YU RIEULSIOS + {0x8AC0, 0xB4CD}, //1718 #HANGUL SYLLABLE TIKEUT YU RIEULTHIEUTH + {0x8AC1, 0xB4CE}, //1719 #HANGUL SYLLABLE TIKEUT YU RIEULPHIEUPH + {0x8AC2, 0xB4CF}, //1720 #HANGUL SYLLABLE TIKEUT YU RIEULHIEUH + {0x8AC3, 0xB4D1}, //1721 #HANGUL SYLLABLE TIKEUT YU PIEUP + {0x8AC4, 0xB4D2}, //1722 #HANGUL SYLLABLE TIKEUT YU PIEUPSIOS + {0x8AC5, 0xB4D3}, //1723 #HANGUL SYLLABLE TIKEUT YU SIOS + {0x8AC6, 0xB4D4}, //1724 #HANGUL SYLLABLE TIKEUT YU SSANGSIOS + {0x8AC7, 0xB4D6}, //1725 #HANGUL SYLLABLE TIKEUT YU CIEUC + {0x8AC8, 0xB4D7}, //1726 #HANGUL SYLLABLE TIKEUT YU CHIEUCH + {0x8AC9, 0xB4D8}, //1727 #HANGUL SYLLABLE TIKEUT YU KHIEUKH + {0x8ACA, 0xB4D9}, //1728 #HANGUL SYLLABLE TIKEUT YU THIEUTH + {0x8ACB, 0xB4DA}, //1729 #HANGUL SYLLABLE TIKEUT YU PHIEUPH + {0x8ACC, 0xB4DB}, //1730 #HANGUL SYLLABLE TIKEUT YU HIEUH + {0x8ACD, 0xB4DE}, //1731 #HANGUL SYLLABLE TIKEUT EU SSANGKIYEOK + {0x8ACE, 0xB4DF}, //1732 #HANGUL SYLLABLE TIKEUT EU KIYEOKSIOS + {0x8ACF, 0xB4E1}, //1733 #HANGUL SYLLABLE TIKEUT EU NIEUNCIEUC + {0x8AD0, 0xB4E2}, //1734 #HANGUL SYLLABLE TIKEUT EU NIEUNHIEUH + {0x8AD1, 0xB4E5}, //1735 #HANGUL SYLLABLE TIKEUT EU RIEULKIYEOK + {0x8AD2, 0xB4E7}, //1736 #HANGUL SYLLABLE TIKEUT EU RIEULPIEUP + {0x8AD3, 0xB4E8}, //1737 #HANGUL SYLLABLE TIKEUT EU RIEULSIOS + {0x8AD4, 0xB4E9}, //1738 #HANGUL SYLLABLE TIKEUT EU RIEULTHIEUTH + {0x8AD5, 0xB4EA}, //1739 #HANGUL SYLLABLE TIKEUT EU RIEULPHIEUPH + {0x8AD6, 0xB4EB}, //1740 #HANGUL SYLLABLE TIKEUT EU RIEULHIEUH + {0x8AD7, 0xB4EE}, //1741 #HANGUL SYLLABLE TIKEUT EU PIEUPSIOS + {0x8AD8, 0xB4F0}, //1742 #HANGUL SYLLABLE TIKEUT EU SSANGSIOS + {0x8AD9, 0xB4F2}, //1743 #HANGUL SYLLABLE TIKEUT EU CIEUC + {0x8ADA, 0xB4F3}, //1744 #HANGUL SYLLABLE TIKEUT EU CHIEUCH + {0x8ADB, 0xB4F4}, //1745 #HANGUL SYLLABLE TIKEUT EU KHIEUKH + {0x8ADC, 0xB4F5}, //1746 #HANGUL SYLLABLE TIKEUT EU THIEUTH + {0x8ADD, 0xB4F6}, //1747 #HANGUL SYLLABLE TIKEUT EU PHIEUPH + {0x8ADE, 0xB4F7}, //1748 #HANGUL SYLLABLE TIKEUT EU HIEUH + {0x8ADF, 0xB4F9}, //1749 #HANGUL SYLLABLE TIKEUT YI KIYEOK + {0x8AE0, 0xB4FA}, //1750 #HANGUL SYLLABLE TIKEUT YI SSANGKIYEOK + {0x8AE1, 0xB4FB}, //1751 #HANGUL SYLLABLE TIKEUT YI KIYEOKSIOS + {0x8AE2, 0xB4FC}, //1752 #HANGUL SYLLABLE TIKEUT YI NIEUN + {0x8AE3, 0xB4FD}, //1753 #HANGUL SYLLABLE TIKEUT YI NIEUNCIEUC + {0x8AE4, 0xB4FE}, //1754 #HANGUL SYLLABLE TIKEUT YI NIEUNHIEUH + {0x8AE5, 0xB4FF}, //1755 #HANGUL SYLLABLE TIKEUT YI TIKEUT + {0x8AE6, 0xB500}, //1756 #HANGUL SYLLABLE TIKEUT YI RIEUL + {0x8AE7, 0xB501}, //1757 #HANGUL SYLLABLE TIKEUT YI RIEULKIYEOK + {0x8AE8, 0xB502}, //1758 #HANGUL SYLLABLE TIKEUT YI RIEULMIEUM + {0x8AE9, 0xB503}, //1759 #HANGUL SYLLABLE TIKEUT YI RIEULPIEUP + {0x8AEA, 0xB504}, //1760 #HANGUL SYLLABLE TIKEUT YI RIEULSIOS + {0x8AEB, 0xB505}, //1761 #HANGUL SYLLABLE TIKEUT YI RIEULTHIEUTH + {0x8AEC, 0xB506}, //1762 #HANGUL SYLLABLE TIKEUT YI RIEULPHIEUPH + {0x8AED, 0xB507}, //1763 #HANGUL SYLLABLE TIKEUT YI RIEULHIEUH + {0x8AEE, 0xB508}, //1764 #HANGUL SYLLABLE TIKEUT YI MIEUM + {0x8AEF, 0xB509}, //1765 #HANGUL SYLLABLE TIKEUT YI PIEUP + {0x8AF0, 0xB50A}, //1766 #HANGUL SYLLABLE TIKEUT YI PIEUPSIOS + {0x8AF1, 0xB50B}, //1767 #HANGUL SYLLABLE TIKEUT YI SIOS + {0x8AF2, 0xB50C}, //1768 #HANGUL SYLLABLE TIKEUT YI SSANGSIOS + {0x8AF3, 0xB50D}, //1769 #HANGUL SYLLABLE TIKEUT YI IEUNG + {0x8AF4, 0xB50E}, //1770 #HANGUL SYLLABLE TIKEUT YI CIEUC + {0x8AF5, 0xB50F}, //1771 #HANGUL SYLLABLE TIKEUT YI CHIEUCH + {0x8AF6, 0xB510}, //1772 #HANGUL SYLLABLE TIKEUT YI KHIEUKH + {0x8AF7, 0xB511}, //1773 #HANGUL SYLLABLE TIKEUT YI THIEUTH + {0x8AF8, 0xB512}, //1774 #HANGUL SYLLABLE TIKEUT YI PHIEUPH + {0x8AF9, 0xB513}, //1775 #HANGUL SYLLABLE TIKEUT YI HIEUH + {0x8AFA, 0xB516}, //1776 #HANGUL SYLLABLE TIKEUT I SSANGKIYEOK + {0x8AFB, 0xB517}, //1777 #HANGUL SYLLABLE TIKEUT I KIYEOKSIOS + {0x8AFC, 0xB519}, //1778 #HANGUL SYLLABLE TIKEUT I NIEUNCIEUC + {0x8AFD, 0xB51A}, //1779 #HANGUL SYLLABLE TIKEUT I NIEUNHIEUH + {0x8AFE, 0xB51D}, //1780 #HANGUL SYLLABLE TIKEUT I RIEULKIYEOK + {0x8B41, 0xB51E}, //1781 #HANGUL SYLLABLE TIKEUT I RIEULMIEUM + {0x8B42, 0xB51F}, //1782 #HANGUL SYLLABLE TIKEUT I RIEULPIEUP + {0x8B43, 0xB520}, //1783 #HANGUL SYLLABLE TIKEUT I RIEULSIOS + {0x8B44, 0xB521}, //1784 #HANGUL SYLLABLE TIKEUT I RIEULTHIEUTH + {0x8B45, 0xB522}, //1785 #HANGUL SYLLABLE TIKEUT I RIEULPHIEUPH + {0x8B46, 0xB523}, //1786 #HANGUL SYLLABLE TIKEUT I RIEULHIEUH + {0x8B47, 0xB526}, //1787 #HANGUL SYLLABLE TIKEUT I PIEUPSIOS + {0x8B48, 0xB52B}, //1788 #HANGUL SYLLABLE TIKEUT I CHIEUCH + {0x8B49, 0xB52C}, //1789 #HANGUL SYLLABLE TIKEUT I KHIEUKH + {0x8B4A, 0xB52D}, //1790 #HANGUL SYLLABLE TIKEUT I THIEUTH + {0x8B4B, 0xB52E}, //1791 #HANGUL SYLLABLE TIKEUT I PHIEUPH + {0x8B4C, 0xB52F}, //1792 #HANGUL SYLLABLE TIKEUT I HIEUH + {0x8B4D, 0xB532}, //1793 #HANGUL SYLLABLE SSANGTIKEUT A SSANGKIYEOK + {0x8B4E, 0xB533}, //1794 #HANGUL SYLLABLE SSANGTIKEUT A KIYEOKSIOS + {0x8B4F, 0xB535}, //1795 #HANGUL SYLLABLE SSANGTIKEUT A NIEUNCIEUC + {0x8B50, 0xB536}, //1796 #HANGUL SYLLABLE SSANGTIKEUT A NIEUNHIEUH + {0x8B51, 0xB537}, //1797 #HANGUL SYLLABLE SSANGTIKEUT A TIKEUT + {0x8B52, 0xB539}, //1798 #HANGUL SYLLABLE SSANGTIKEUT A RIEULKIYEOK + {0x8B53, 0xB53A}, //1799 #HANGUL SYLLABLE SSANGTIKEUT A RIEULMIEUM + {0x8B54, 0xB53B}, //1800 #HANGUL SYLLABLE SSANGTIKEUT A RIEULPIEUP + {0x8B55, 0xB53C}, //1801 #HANGUL SYLLABLE SSANGTIKEUT A RIEULSIOS + {0x8B56, 0xB53D}, //1802 #HANGUL SYLLABLE SSANGTIKEUT A RIEULTHIEUTH + {0x8B57, 0xB53E}, //1803 #HANGUL SYLLABLE SSANGTIKEUT A RIEULPHIEUPH + {0x8B58, 0xB53F}, //1804 #HANGUL SYLLABLE SSANGTIKEUT A RIEULHIEUH + {0x8B59, 0xB542}, //1805 #HANGUL SYLLABLE SSANGTIKEUT A PIEUPSIOS + {0x8B5A, 0xB546}, //1806 #HANGUL SYLLABLE SSANGTIKEUT A CIEUC + {0x8B61, 0xB547}, //1807 #HANGUL SYLLABLE SSANGTIKEUT A CHIEUCH + {0x8B62, 0xB548}, //1808 #HANGUL SYLLABLE SSANGTIKEUT A KHIEUKH + {0x8B63, 0xB549}, //1809 #HANGUL SYLLABLE SSANGTIKEUT A THIEUTH + {0x8B64, 0xB54A}, //1810 #HANGUL SYLLABLE SSANGTIKEUT A PHIEUPH + {0x8B65, 0xB54E}, //1811 #HANGUL SYLLABLE SSANGTIKEUT AE SSANGKIYEOK + {0x8B66, 0xB54F}, //1812 #HANGUL SYLLABLE SSANGTIKEUT AE KIYEOKSIOS + {0x8B67, 0xB551}, //1813 #HANGUL SYLLABLE SSANGTIKEUT AE NIEUNCIEUC + {0x8B68, 0xB552}, //1814 #HANGUL SYLLABLE SSANGTIKEUT AE NIEUNHIEUH + {0x8B69, 0xB553}, //1815 #HANGUL SYLLABLE SSANGTIKEUT AE TIKEUT + {0x8B6A, 0xB555}, //1816 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULKIYEOK + {0x8B6B, 0xB556}, //1817 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULMIEUM + {0x8B6C, 0xB557}, //1818 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULPIEUP + {0x8B6D, 0xB558}, //1819 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULSIOS + {0x8B6E, 0xB559}, //1820 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULTHIEUTH + {0x8B6F, 0xB55A}, //1821 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULPHIEUPH + {0x8B70, 0xB55B}, //1822 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULHIEUH + {0x8B71, 0xB55E}, //1823 #HANGUL SYLLABLE SSANGTIKEUT AE PIEUPSIOS + {0x8B72, 0xB562}, //1824 #HANGUL SYLLABLE SSANGTIKEUT AE CIEUC + {0x8B73, 0xB563}, //1825 #HANGUL SYLLABLE SSANGTIKEUT AE CHIEUCH + {0x8B74, 0xB564}, //1826 #HANGUL SYLLABLE SSANGTIKEUT AE KHIEUKH + {0x8B75, 0xB565}, //1827 #HANGUL SYLLABLE SSANGTIKEUT AE THIEUTH + {0x8B76, 0xB566}, //1828 #HANGUL SYLLABLE SSANGTIKEUT AE PHIEUPH + {0x8B77, 0xB567}, //1829 #HANGUL SYLLABLE SSANGTIKEUT AE HIEUH + {0x8B78, 0xB568}, //1830 #HANGUL SYLLABLE SSANGTIKEUT YA + {0x8B79, 0xB569}, //1831 #HANGUL SYLLABLE SSANGTIKEUT YA KIYEOK + {0x8B7A, 0xB56A}, //1832 #HANGUL SYLLABLE SSANGTIKEUT YA SSANGKIYEOK + {0x8B81, 0xB56B}, //1833 #HANGUL SYLLABLE SSANGTIKEUT YA KIYEOKSIOS + {0x8B82, 0xB56C}, //1834 #HANGUL SYLLABLE SSANGTIKEUT YA NIEUN + {0x8B83, 0xB56D}, //1835 #HANGUL SYLLABLE SSANGTIKEUT YA NIEUNCIEUC + {0x8B84, 0xB56E}, //1836 #HANGUL SYLLABLE SSANGTIKEUT YA NIEUNHIEUH + {0x8B85, 0xB56F}, //1837 #HANGUL SYLLABLE SSANGTIKEUT YA TIKEUT + {0x8B86, 0xB570}, //1838 #HANGUL SYLLABLE SSANGTIKEUT YA RIEUL + {0x8B87, 0xB571}, //1839 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULKIYEOK + {0x8B88, 0xB572}, //1840 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULMIEUM + {0x8B89, 0xB573}, //1841 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULPIEUP + {0x8B8A, 0xB574}, //1842 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULSIOS + {0x8B8B, 0xB575}, //1843 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULTHIEUTH + {0x8B8C, 0xB576}, //1844 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULPHIEUPH + {0x8B8D, 0xB577}, //1845 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULHIEUH + {0x8B8E, 0xB578}, //1846 #HANGUL SYLLABLE SSANGTIKEUT YA MIEUM + {0x8B8F, 0xB579}, //1847 #HANGUL SYLLABLE SSANGTIKEUT YA PIEUP + {0x8B90, 0xB57A}, //1848 #HANGUL SYLLABLE SSANGTIKEUT YA PIEUPSIOS + {0x8B91, 0xB57B}, //1849 #HANGUL SYLLABLE SSANGTIKEUT YA SIOS + {0x8B92, 0xB57C}, //1850 #HANGUL SYLLABLE SSANGTIKEUT YA SSANGSIOS + {0x8B93, 0xB57D}, //1851 #HANGUL SYLLABLE SSANGTIKEUT YA IEUNG + {0x8B94, 0xB57E}, //1852 #HANGUL SYLLABLE SSANGTIKEUT YA CIEUC + {0x8B95, 0xB57F}, //1853 #HANGUL SYLLABLE SSANGTIKEUT YA CHIEUCH + {0x8B96, 0xB580}, //1854 #HANGUL SYLLABLE SSANGTIKEUT YA KHIEUKH + {0x8B97, 0xB581}, //1855 #HANGUL SYLLABLE SSANGTIKEUT YA THIEUTH + {0x8B98, 0xB582}, //1856 #HANGUL SYLLABLE SSANGTIKEUT YA PHIEUPH + {0x8B99, 0xB583}, //1857 #HANGUL SYLLABLE SSANGTIKEUT YA HIEUH + {0x8B9A, 0xB584}, //1858 #HANGUL SYLLABLE SSANGTIKEUT YAE + {0x8B9B, 0xB585}, //1859 #HANGUL SYLLABLE SSANGTIKEUT YAE KIYEOK + {0x8B9C, 0xB586}, //1860 #HANGUL SYLLABLE SSANGTIKEUT YAE SSANGKIYEOK + {0x8B9D, 0xB587}, //1861 #HANGUL SYLLABLE SSANGTIKEUT YAE KIYEOKSIOS + {0x8B9E, 0xB588}, //1862 #HANGUL SYLLABLE SSANGTIKEUT YAE NIEUN + {0x8B9F, 0xB589}, //1863 #HANGUL SYLLABLE SSANGTIKEUT YAE NIEUNCIEUC + {0x8BA0, 0xB58A}, //1864 #HANGUL SYLLABLE SSANGTIKEUT YAE NIEUNHIEUH + {0x8BA1, 0xB58B}, //1865 #HANGUL SYLLABLE SSANGTIKEUT YAE TIKEUT + {0x8BA2, 0xB58C}, //1866 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEUL + {0x8BA3, 0xB58D}, //1867 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULKIYEOK + {0x8BA4, 0xB58E}, //1868 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULMIEUM + {0x8BA5, 0xB58F}, //1869 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULPIEUP + {0x8BA6, 0xB590}, //1870 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULSIOS + {0x8BA7, 0xB591}, //1871 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULTHIEUTH + {0x8BA8, 0xB592}, //1872 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULPHIEUPH + {0x8BA9, 0xB593}, //1873 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULHIEUH + {0x8BAA, 0xB594}, //1874 #HANGUL SYLLABLE SSANGTIKEUT YAE MIEUM + {0x8BAB, 0xB595}, //1875 #HANGUL SYLLABLE SSANGTIKEUT YAE PIEUP + {0x8BAC, 0xB596}, //1876 #HANGUL SYLLABLE SSANGTIKEUT YAE PIEUPSIOS + {0x8BAD, 0xB597}, //1877 #HANGUL SYLLABLE SSANGTIKEUT YAE SIOS + {0x8BAE, 0xB598}, //1878 #HANGUL SYLLABLE SSANGTIKEUT YAE SSANGSIOS + {0x8BAF, 0xB599}, //1879 #HANGUL SYLLABLE SSANGTIKEUT YAE IEUNG + {0x8BB0, 0xB59A}, //1880 #HANGUL SYLLABLE SSANGTIKEUT YAE CIEUC + {0x8BB1, 0xB59B}, //1881 #HANGUL SYLLABLE SSANGTIKEUT YAE CHIEUCH + {0x8BB2, 0xB59C}, //1882 #HANGUL SYLLABLE SSANGTIKEUT YAE KHIEUKH + {0x8BB3, 0xB59D}, //1883 #HANGUL SYLLABLE SSANGTIKEUT YAE THIEUTH + {0x8BB4, 0xB59E}, //1884 #HANGUL SYLLABLE SSANGTIKEUT YAE PHIEUPH + {0x8BB5, 0xB59F}, //1885 #HANGUL SYLLABLE SSANGTIKEUT YAE HIEUH + {0x8BB6, 0xB5A2}, //1886 #HANGUL SYLLABLE SSANGTIKEUT EO SSANGKIYEOK + {0x8BB7, 0xB5A3}, //1887 #HANGUL SYLLABLE SSANGTIKEUT EO KIYEOKSIOS + {0x8BB8, 0xB5A5}, //1888 #HANGUL SYLLABLE SSANGTIKEUT EO NIEUNCIEUC + {0x8BB9, 0xB5A6}, //1889 #HANGUL SYLLABLE SSANGTIKEUT EO NIEUNHIEUH + {0x8BBA, 0xB5A7}, //1890 #HANGUL SYLLABLE SSANGTIKEUT EO TIKEUT + {0x8BBB, 0xB5A9}, //1891 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULKIYEOK + {0x8BBC, 0xB5AC}, //1892 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULSIOS + {0x8BBD, 0xB5AD}, //1893 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULTHIEUTH + {0x8BBE, 0xB5AE}, //1894 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULPHIEUPH + {0x8BBF, 0xB5AF}, //1895 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULHIEUH + {0x8BC0, 0xB5B2}, //1896 #HANGUL SYLLABLE SSANGTIKEUT EO PIEUPSIOS + {0x8BC1, 0xB5B6}, //1897 #HANGUL SYLLABLE SSANGTIKEUT EO CIEUC + {0x8BC2, 0xB5B7}, //1898 #HANGUL SYLLABLE SSANGTIKEUT EO CHIEUCH + {0x8BC3, 0xB5B8}, //1899 #HANGUL SYLLABLE SSANGTIKEUT EO KHIEUKH + {0x8BC4, 0xB5B9}, //1900 #HANGUL SYLLABLE SSANGTIKEUT EO THIEUTH + {0x8BC5, 0xB5BA}, //1901 #HANGUL SYLLABLE SSANGTIKEUT EO PHIEUPH + {0x8BC6, 0xB5BE}, //1902 #HANGUL SYLLABLE SSANGTIKEUT E SSANGKIYEOK + {0x8BC7, 0xB5BF}, //1903 #HANGUL SYLLABLE SSANGTIKEUT E KIYEOKSIOS + {0x8BC8, 0xB5C1}, //1904 #HANGUL SYLLABLE SSANGTIKEUT E NIEUNCIEUC + {0x8BC9, 0xB5C2}, //1905 #HANGUL SYLLABLE SSANGTIKEUT E NIEUNHIEUH + {0x8BCA, 0xB5C3}, //1906 #HANGUL SYLLABLE SSANGTIKEUT E TIKEUT + {0x8BCB, 0xB5C5}, //1907 #HANGUL SYLLABLE SSANGTIKEUT E RIEULKIYEOK + {0x8BCC, 0xB5C6}, //1908 #HANGUL SYLLABLE SSANGTIKEUT E RIEULMIEUM + {0x8BCD, 0xB5C7}, //1909 #HANGUL SYLLABLE SSANGTIKEUT E RIEULPIEUP + {0x8BCE, 0xB5C8}, //1910 #HANGUL SYLLABLE SSANGTIKEUT E RIEULSIOS + {0x8BCF, 0xB5C9}, //1911 #HANGUL SYLLABLE SSANGTIKEUT E RIEULTHIEUTH + {0x8BD0, 0xB5CA}, //1912 #HANGUL SYLLABLE SSANGTIKEUT E RIEULPHIEUPH + {0x8BD1, 0xB5CB}, //1913 #HANGUL SYLLABLE SSANGTIKEUT E RIEULHIEUH + {0x8BD2, 0xB5CE}, //1914 #HANGUL SYLLABLE SSANGTIKEUT E PIEUPSIOS + {0x8BD3, 0xB5D2}, //1915 #HANGUL SYLLABLE SSANGTIKEUT E CIEUC + {0x8BD4, 0xB5D3}, //1916 #HANGUL SYLLABLE SSANGTIKEUT E CHIEUCH + {0x8BD5, 0xB5D4}, //1917 #HANGUL SYLLABLE SSANGTIKEUT E KHIEUKH + {0x8BD6, 0xB5D5}, //1918 #HANGUL SYLLABLE SSANGTIKEUT E THIEUTH + {0x8BD7, 0xB5D6}, //1919 #HANGUL SYLLABLE SSANGTIKEUT E PHIEUPH + {0x8BD8, 0xB5D7}, //1920 #HANGUL SYLLABLE SSANGTIKEUT E HIEUH + {0x8BD9, 0xB5D9}, //1921 #HANGUL SYLLABLE SSANGTIKEUT YEO KIYEOK + {0x8BDA, 0xB5DA}, //1922 #HANGUL SYLLABLE SSANGTIKEUT YEO SSANGKIYEOK + {0x8BDB, 0xB5DB}, //1923 #HANGUL SYLLABLE SSANGTIKEUT YEO KIYEOKSIOS + {0x8BDC, 0xB5DC}, //1924 #HANGUL SYLLABLE SSANGTIKEUT YEO NIEUN + {0x8BDD, 0xB5DD}, //1925 #HANGUL SYLLABLE SSANGTIKEUT YEO NIEUNCIEUC + {0x8BDE, 0xB5DE}, //1926 #HANGUL SYLLABLE SSANGTIKEUT YEO NIEUNHIEUH + {0x8BDF, 0xB5DF}, //1927 #HANGUL SYLLABLE SSANGTIKEUT YEO TIKEUT + {0x8BE0, 0xB5E0}, //1928 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEUL + {0x8BE1, 0xB5E1}, //1929 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULKIYEOK + {0x8BE2, 0xB5E2}, //1930 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULMIEUM + {0x8BE3, 0xB5E3}, //1931 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULPIEUP + {0x8BE4, 0xB5E4}, //1932 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULSIOS + {0x8BE5, 0xB5E5}, //1933 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULTHIEUTH + {0x8BE6, 0xB5E6}, //1934 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULPHIEUPH + {0x8BE7, 0xB5E7}, //1935 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULHIEUH + {0x8BE8, 0xB5E8}, //1936 #HANGUL SYLLABLE SSANGTIKEUT YEO MIEUM + {0x8BE9, 0xB5E9}, //1937 #HANGUL SYLLABLE SSANGTIKEUT YEO PIEUP + {0x8BEA, 0xB5EA}, //1938 #HANGUL SYLLABLE SSANGTIKEUT YEO PIEUPSIOS + {0x8BEB, 0xB5EB}, //1939 #HANGUL SYLLABLE SSANGTIKEUT YEO SIOS + {0x8BEC, 0xB5ED}, //1940 #HANGUL SYLLABLE SSANGTIKEUT YEO IEUNG + {0x8BED, 0xB5EE}, //1941 #HANGUL SYLLABLE SSANGTIKEUT YEO CIEUC + {0x8BEE, 0xB5EF}, //1942 #HANGUL SYLLABLE SSANGTIKEUT YEO CHIEUCH + {0x8BEF, 0xB5F0}, //1943 #HANGUL SYLLABLE SSANGTIKEUT YEO KHIEUKH + {0x8BF0, 0xB5F1}, //1944 #HANGUL SYLLABLE SSANGTIKEUT YEO THIEUTH + {0x8BF1, 0xB5F2}, //1945 #HANGUL SYLLABLE SSANGTIKEUT YEO PHIEUPH + {0x8BF2, 0xB5F3}, //1946 #HANGUL SYLLABLE SSANGTIKEUT YEO HIEUH + {0x8BF3, 0xB5F4}, //1947 #HANGUL SYLLABLE SSANGTIKEUT YE + {0x8BF4, 0xB5F5}, //1948 #HANGUL SYLLABLE SSANGTIKEUT YE KIYEOK + {0x8BF5, 0xB5F6}, //1949 #HANGUL SYLLABLE SSANGTIKEUT YE SSANGKIYEOK + {0x8BF6, 0xB5F7}, //1950 #HANGUL SYLLABLE SSANGTIKEUT YE KIYEOKSIOS + {0x8BF7, 0xB5F8}, //1951 #HANGUL SYLLABLE SSANGTIKEUT YE NIEUN + {0x8BF8, 0xB5F9}, //1952 #HANGUL SYLLABLE SSANGTIKEUT YE NIEUNCIEUC + {0x8BF9, 0xB5FA}, //1953 #HANGUL SYLLABLE SSANGTIKEUT YE NIEUNHIEUH + {0x8BFA, 0xB5FB}, //1954 #HANGUL SYLLABLE SSANGTIKEUT YE TIKEUT + {0x8BFB, 0xB5FC}, //1955 #HANGUL SYLLABLE SSANGTIKEUT YE RIEUL + {0x8BFC, 0xB5FD}, //1956 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULKIYEOK + {0x8BFD, 0xB5FE}, //1957 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULMIEUM + {0x8BFE, 0xB5FF}, //1958 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULPIEUP + {0x8C41, 0xB600}, //1959 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULSIOS + {0x8C42, 0xB601}, //1960 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULTHIEUTH + {0x8C43, 0xB602}, //1961 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULPHIEUPH + {0x8C44, 0xB603}, //1962 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULHIEUH + {0x8C45, 0xB604}, //1963 #HANGUL SYLLABLE SSANGTIKEUT YE MIEUM + {0x8C46, 0xB605}, //1964 #HANGUL SYLLABLE SSANGTIKEUT YE PIEUP + {0x8C47, 0xB606}, //1965 #HANGUL SYLLABLE SSANGTIKEUT YE PIEUPSIOS + {0x8C48, 0xB607}, //1966 #HANGUL SYLLABLE SSANGTIKEUT YE SIOS + {0x8C49, 0xB608}, //1967 #HANGUL SYLLABLE SSANGTIKEUT YE SSANGSIOS + {0x8C4A, 0xB609}, //1968 #HANGUL SYLLABLE SSANGTIKEUT YE IEUNG + {0x8C4B, 0xB60A}, //1969 #HANGUL SYLLABLE SSANGTIKEUT YE CIEUC + {0x8C4C, 0xB60B}, //1970 #HANGUL SYLLABLE SSANGTIKEUT YE CHIEUCH + {0x8C4D, 0xB60C}, //1971 #HANGUL SYLLABLE SSANGTIKEUT YE KHIEUKH + {0x8C4E, 0xB60D}, //1972 #HANGUL SYLLABLE SSANGTIKEUT YE THIEUTH + {0x8C4F, 0xB60E}, //1973 #HANGUL SYLLABLE SSANGTIKEUT YE PHIEUPH + {0x8C50, 0xB60F}, //1974 #HANGUL SYLLABLE SSANGTIKEUT YE HIEUH + {0x8C51, 0xB612}, //1975 #HANGUL SYLLABLE SSANGTIKEUT O SSANGKIYEOK + {0x8C52, 0xB613}, //1976 #HANGUL SYLLABLE SSANGTIKEUT O KIYEOKSIOS + {0x8C53, 0xB615}, //1977 #HANGUL SYLLABLE SSANGTIKEUT O NIEUNCIEUC + {0x8C54, 0xB616}, //1978 #HANGUL SYLLABLE SSANGTIKEUT O NIEUNHIEUH + {0x8C55, 0xB617}, //1979 #HANGUL SYLLABLE SSANGTIKEUT O TIKEUT + {0x8C56, 0xB619}, //1980 #HANGUL SYLLABLE SSANGTIKEUT O RIEULKIYEOK + {0x8C57, 0xB61A}, //1981 #HANGUL SYLLABLE SSANGTIKEUT O RIEULMIEUM + {0x8C58, 0xB61B}, //1982 #HANGUL SYLLABLE SSANGTIKEUT O RIEULPIEUP + {0x8C59, 0xB61C}, //1983 #HANGUL SYLLABLE SSANGTIKEUT O RIEULSIOS + {0x8C5A, 0xB61D}, //1984 #HANGUL SYLLABLE SSANGTIKEUT O RIEULTHIEUTH + {0x8C61, 0xB61E}, //1985 #HANGUL SYLLABLE SSANGTIKEUT O RIEULPHIEUPH + {0x8C62, 0xB61F}, //1986 #HANGUL SYLLABLE SSANGTIKEUT O RIEULHIEUH + {0x8C63, 0xB620}, //1987 #HANGUL SYLLABLE SSANGTIKEUT O MIEUM + {0x8C64, 0xB621}, //1988 #HANGUL SYLLABLE SSANGTIKEUT O PIEUP + {0x8C65, 0xB622}, //1989 #HANGUL SYLLABLE SSANGTIKEUT O PIEUPSIOS + {0x8C66, 0xB623}, //1990 #HANGUL SYLLABLE SSANGTIKEUT O SIOS + {0x8C67, 0xB624}, //1991 #HANGUL SYLLABLE SSANGTIKEUT O SSANGSIOS + {0x8C68, 0xB626}, //1992 #HANGUL SYLLABLE SSANGTIKEUT O CIEUC + {0x8C69, 0xB627}, //1993 #HANGUL SYLLABLE SSANGTIKEUT O CHIEUCH + {0x8C6A, 0xB628}, //1994 #HANGUL SYLLABLE SSANGTIKEUT O KHIEUKH + {0x8C6B, 0xB629}, //1995 #HANGUL SYLLABLE SSANGTIKEUT O THIEUTH + {0x8C6C, 0xB62A}, //1996 #HANGUL SYLLABLE SSANGTIKEUT O PHIEUPH + {0x8C6D, 0xB62B}, //1997 #HANGUL SYLLABLE SSANGTIKEUT O HIEUH + {0x8C6E, 0xB62D}, //1998 #HANGUL SYLLABLE SSANGTIKEUT WA KIYEOK + {0x8C6F, 0xB62E}, //1999 #HANGUL SYLLABLE SSANGTIKEUT WA SSANGKIYEOK + {0x8C70, 0xB62F}, //2000 #HANGUL SYLLABLE SSANGTIKEUT WA KIYEOKSIOS + {0x8C71, 0xB630}, //2001 #HANGUL SYLLABLE SSANGTIKEUT WA NIEUN + {0x8C72, 0xB631}, //2002 #HANGUL SYLLABLE SSANGTIKEUT WA NIEUNCIEUC + {0x8C73, 0xB632}, //2003 #HANGUL SYLLABLE SSANGTIKEUT WA NIEUNHIEUH + {0x8C74, 0xB633}, //2004 #HANGUL SYLLABLE SSANGTIKEUT WA TIKEUT + {0x8C75, 0xB635}, //2005 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULKIYEOK + {0x8C76, 0xB636}, //2006 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULMIEUM + {0x8C77, 0xB637}, //2007 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULPIEUP + {0x8C78, 0xB638}, //2008 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULSIOS + {0x8C79, 0xB639}, //2009 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULTHIEUTH + {0x8C7A, 0xB63A}, //2010 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULPHIEUPH + {0x8C81, 0xB63B}, //2011 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULHIEUH + {0x8C82, 0xB63C}, //2012 #HANGUL SYLLABLE SSANGTIKEUT WA MIEUM + {0x8C83, 0xB63D}, //2013 #HANGUL SYLLABLE SSANGTIKEUT WA PIEUP + {0x8C84, 0xB63E}, //2014 #HANGUL SYLLABLE SSANGTIKEUT WA PIEUPSIOS + {0x8C85, 0xB63F}, //2015 #HANGUL SYLLABLE SSANGTIKEUT WA SIOS + {0x8C86, 0xB640}, //2016 #HANGUL SYLLABLE SSANGTIKEUT WA SSANGSIOS + {0x8C87, 0xB641}, //2017 #HANGUL SYLLABLE SSANGTIKEUT WA IEUNG + {0x8C88, 0xB642}, //2018 #HANGUL SYLLABLE SSANGTIKEUT WA CIEUC + {0x8C89, 0xB643}, //2019 #HANGUL SYLLABLE SSANGTIKEUT WA CHIEUCH + {0x8C8A, 0xB644}, //2020 #HANGUL SYLLABLE SSANGTIKEUT WA KHIEUKH + {0x8C8B, 0xB645}, //2021 #HANGUL SYLLABLE SSANGTIKEUT WA THIEUTH + {0x8C8C, 0xB646}, //2022 #HANGUL SYLLABLE SSANGTIKEUT WA PHIEUPH + {0x8C8D, 0xB647}, //2023 #HANGUL SYLLABLE SSANGTIKEUT WA HIEUH + {0x8C8E, 0xB649}, //2024 #HANGUL SYLLABLE SSANGTIKEUT WAE KIYEOK + {0x8C8F, 0xB64A}, //2025 #HANGUL SYLLABLE SSANGTIKEUT WAE SSANGKIYEOK + {0x8C90, 0xB64B}, //2026 #HANGUL SYLLABLE SSANGTIKEUT WAE KIYEOKSIOS + {0x8C91, 0xB64C}, //2027 #HANGUL SYLLABLE SSANGTIKEUT WAE NIEUN + {0x8C92, 0xB64D}, //2028 #HANGUL SYLLABLE SSANGTIKEUT WAE NIEUNCIEUC + {0x8C93, 0xB64E}, //2029 #HANGUL SYLLABLE SSANGTIKEUT WAE NIEUNHIEUH + {0x8C94, 0xB64F}, //2030 #HANGUL SYLLABLE SSANGTIKEUT WAE TIKEUT + {0x8C95, 0xB650}, //2031 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEUL + {0x8C96, 0xB651}, //2032 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULKIYEOK + {0x8C97, 0xB652}, //2033 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULMIEUM + {0x8C98, 0xB653}, //2034 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULPIEUP + {0x8C99, 0xB654}, //2035 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULSIOS + {0x8C9A, 0xB655}, //2036 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULTHIEUTH + {0x8C9B, 0xB656}, //2037 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULPHIEUPH + {0x8C9C, 0xB657}, //2038 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULHIEUH + {0x8C9D, 0xB658}, //2039 #HANGUL SYLLABLE SSANGTIKEUT WAE MIEUM + {0x8C9E, 0xB659}, //2040 #HANGUL SYLLABLE SSANGTIKEUT WAE PIEUP + {0x8C9F, 0xB65A}, //2041 #HANGUL SYLLABLE SSANGTIKEUT WAE PIEUPSIOS + {0x8CA0, 0xB65B}, //2042 #HANGUL SYLLABLE SSANGTIKEUT WAE SIOS + {0x8CA1, 0xB65C}, //2043 #HANGUL SYLLABLE SSANGTIKEUT WAE SSANGSIOS + {0x8CA2, 0xB65D}, //2044 #HANGUL SYLLABLE SSANGTIKEUT WAE IEUNG + {0x8CA3, 0xB65E}, //2045 #HANGUL SYLLABLE SSANGTIKEUT WAE CIEUC + {0x8CA4, 0xB65F}, //2046 #HANGUL SYLLABLE SSANGTIKEUT WAE CHIEUCH + {0x8CA5, 0xB660}, //2047 #HANGUL SYLLABLE SSANGTIKEUT WAE KHIEUKH + {0x8CA6, 0xB661}, //2048 #HANGUL SYLLABLE SSANGTIKEUT WAE THIEUTH + {0x8CA7, 0xB662}, //2049 #HANGUL SYLLABLE SSANGTIKEUT WAE PHIEUPH + {0x8CA8, 0xB663}, //2050 #HANGUL SYLLABLE SSANGTIKEUT WAE HIEUH + {0x8CA9, 0xB665}, //2051 #HANGUL SYLLABLE SSANGTIKEUT OE KIYEOK + {0x8CAA, 0xB666}, //2052 #HANGUL SYLLABLE SSANGTIKEUT OE SSANGKIYEOK + {0x8CAB, 0xB667}, //2053 #HANGUL SYLLABLE SSANGTIKEUT OE KIYEOKSIOS + {0x8CAC, 0xB669}, //2054 #HANGUL SYLLABLE SSANGTIKEUT OE NIEUNCIEUC + {0x8CAD, 0xB66A}, //2055 #HANGUL SYLLABLE SSANGTIKEUT OE NIEUNHIEUH + {0x8CAE, 0xB66B}, //2056 #HANGUL SYLLABLE SSANGTIKEUT OE TIKEUT + {0x8CAF, 0xB66C}, //2057 #HANGUL SYLLABLE SSANGTIKEUT OE RIEUL + {0x8CB0, 0xB66D}, //2058 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULKIYEOK + {0x8CB1, 0xB66E}, //2059 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULMIEUM + {0x8CB2, 0xB66F}, //2060 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULPIEUP + {0x8CB3, 0xB670}, //2061 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULSIOS + {0x8CB4, 0xB671}, //2062 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULTHIEUTH + {0x8CB5, 0xB672}, //2063 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULPHIEUPH + {0x8CB6, 0xB673}, //2064 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULHIEUH + {0x8CB7, 0xB674}, //2065 #HANGUL SYLLABLE SSANGTIKEUT OE MIEUM + {0x8CB8, 0xB675}, //2066 #HANGUL SYLLABLE SSANGTIKEUT OE PIEUP + {0x8CB9, 0xB676}, //2067 #HANGUL SYLLABLE SSANGTIKEUT OE PIEUPSIOS + {0x8CBA, 0xB677}, //2068 #HANGUL SYLLABLE SSANGTIKEUT OE SIOS + {0x8CBB, 0xB678}, //2069 #HANGUL SYLLABLE SSANGTIKEUT OE SSANGSIOS + {0x8CBC, 0xB679}, //2070 #HANGUL SYLLABLE SSANGTIKEUT OE IEUNG + {0x8CBD, 0xB67A}, //2071 #HANGUL SYLLABLE SSANGTIKEUT OE CIEUC + {0x8CBE, 0xB67B}, //2072 #HANGUL SYLLABLE SSANGTIKEUT OE CHIEUCH + {0x8CBF, 0xB67C}, //2073 #HANGUL SYLLABLE SSANGTIKEUT OE KHIEUKH + {0x8CC0, 0xB67D}, //2074 #HANGUL SYLLABLE SSANGTIKEUT OE THIEUTH + {0x8CC1, 0xB67E}, //2075 #HANGUL SYLLABLE SSANGTIKEUT OE PHIEUPH + {0x8CC2, 0xB67F}, //2076 #HANGUL SYLLABLE SSANGTIKEUT OE HIEUH + {0x8CC3, 0xB680}, //2077 #HANGUL SYLLABLE SSANGTIKEUT YO + {0x8CC4, 0xB681}, //2078 #HANGUL SYLLABLE SSANGTIKEUT YO KIYEOK + {0x8CC5, 0xB682}, //2079 #HANGUL SYLLABLE SSANGTIKEUT YO SSANGKIYEOK + {0x8CC6, 0xB683}, //2080 #HANGUL SYLLABLE SSANGTIKEUT YO KIYEOKSIOS + {0x8CC7, 0xB684}, //2081 #HANGUL SYLLABLE SSANGTIKEUT YO NIEUN + {0x8CC8, 0xB685}, //2082 #HANGUL SYLLABLE SSANGTIKEUT YO NIEUNCIEUC + {0x8CC9, 0xB686}, //2083 #HANGUL SYLLABLE SSANGTIKEUT YO NIEUNHIEUH + {0x8CCA, 0xB687}, //2084 #HANGUL SYLLABLE SSANGTIKEUT YO TIKEUT + {0x8CCB, 0xB688}, //2085 #HANGUL SYLLABLE SSANGTIKEUT YO RIEUL + {0x8CCC, 0xB689}, //2086 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULKIYEOK + {0x8CCD, 0xB68A}, //2087 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULMIEUM + {0x8CCE, 0xB68B}, //2088 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULPIEUP + {0x8CCF, 0xB68C}, //2089 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULSIOS + {0x8CD0, 0xB68D}, //2090 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULTHIEUTH + {0x8CD1, 0xB68E}, //2091 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULPHIEUPH + {0x8CD2, 0xB68F}, //2092 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULHIEUH + {0x8CD3, 0xB690}, //2093 #HANGUL SYLLABLE SSANGTIKEUT YO MIEUM + {0x8CD4, 0xB691}, //2094 #HANGUL SYLLABLE SSANGTIKEUT YO PIEUP + {0x8CD5, 0xB692}, //2095 #HANGUL SYLLABLE SSANGTIKEUT YO PIEUPSIOS + {0x8CD6, 0xB693}, //2096 #HANGUL SYLLABLE SSANGTIKEUT YO SIOS + {0x8CD7, 0xB694}, //2097 #HANGUL SYLLABLE SSANGTIKEUT YO SSANGSIOS + {0x8CD8, 0xB695}, //2098 #HANGUL SYLLABLE SSANGTIKEUT YO IEUNG + {0x8CD9, 0xB696}, //2099 #HANGUL SYLLABLE SSANGTIKEUT YO CIEUC + {0x8CDA, 0xB697}, //2100 #HANGUL SYLLABLE SSANGTIKEUT YO CHIEUCH + {0x8CDB, 0xB698}, //2101 #HANGUL SYLLABLE SSANGTIKEUT YO KHIEUKH + {0x8CDC, 0xB699}, //2102 #HANGUL SYLLABLE SSANGTIKEUT YO THIEUTH + {0x8CDD, 0xB69A}, //2103 #HANGUL SYLLABLE SSANGTIKEUT YO PHIEUPH + {0x8CDE, 0xB69B}, //2104 #HANGUL SYLLABLE SSANGTIKEUT YO HIEUH + {0x8CDF, 0xB69E}, //2105 #HANGUL SYLLABLE SSANGTIKEUT U SSANGKIYEOK + {0x8CE0, 0xB69F}, //2106 #HANGUL SYLLABLE SSANGTIKEUT U KIYEOKSIOS + {0x8CE1, 0xB6A1}, //2107 #HANGUL SYLLABLE SSANGTIKEUT U NIEUNCIEUC + {0x8CE2, 0xB6A2}, //2108 #HANGUL SYLLABLE SSANGTIKEUT U NIEUNHIEUH + {0x8CE3, 0xB6A3}, //2109 #HANGUL SYLLABLE SSANGTIKEUT U TIKEUT + {0x8CE4, 0xB6A5}, //2110 #HANGUL SYLLABLE SSANGTIKEUT U RIEULKIYEOK + {0x8CE5, 0xB6A6}, //2111 #HANGUL SYLLABLE SSANGTIKEUT U RIEULMIEUM + {0x8CE6, 0xB6A7}, //2112 #HANGUL SYLLABLE SSANGTIKEUT U RIEULPIEUP + {0x8CE7, 0xB6A8}, //2113 #HANGUL SYLLABLE SSANGTIKEUT U RIEULSIOS + {0x8CE8, 0xB6A9}, //2114 #HANGUL SYLLABLE SSANGTIKEUT U RIEULTHIEUTH + {0x8CE9, 0xB6AA}, //2115 #HANGUL SYLLABLE SSANGTIKEUT U RIEULPHIEUPH + {0x8CEA, 0xB6AD}, //2116 #HANGUL SYLLABLE SSANGTIKEUT U PIEUP + {0x8CEB, 0xB6AE}, //2117 #HANGUL SYLLABLE SSANGTIKEUT U PIEUPSIOS + {0x8CEC, 0xB6AF}, //2118 #HANGUL SYLLABLE SSANGTIKEUT U SIOS + {0x8CED, 0xB6B0}, //2119 #HANGUL SYLLABLE SSANGTIKEUT U SSANGSIOS + {0x8CEE, 0xB6B2}, //2120 #HANGUL SYLLABLE SSANGTIKEUT U CIEUC + {0x8CEF, 0xB6B3}, //2121 #HANGUL SYLLABLE SSANGTIKEUT U CHIEUCH + {0x8CF0, 0xB6B4}, //2122 #HANGUL SYLLABLE SSANGTIKEUT U KHIEUKH + {0x8CF1, 0xB6B5}, //2123 #HANGUL SYLLABLE SSANGTIKEUT U THIEUTH + {0x8CF2, 0xB6B6}, //2124 #HANGUL SYLLABLE SSANGTIKEUT U PHIEUPH + {0x8CF3, 0xB6B7}, //2125 #HANGUL SYLLABLE SSANGTIKEUT U HIEUH + {0x8CF4, 0xB6B8}, //2126 #HANGUL SYLLABLE SSANGTIKEUT WEO + {0x8CF5, 0xB6B9}, //2127 #HANGUL SYLLABLE SSANGTIKEUT WEO KIYEOK + {0x8CF6, 0xB6BA}, //2128 #HANGUL SYLLABLE SSANGTIKEUT WEO SSANGKIYEOK + {0x8CF7, 0xB6BB}, //2129 #HANGUL SYLLABLE SSANGTIKEUT WEO KIYEOKSIOS + {0x8CF8, 0xB6BC}, //2130 #HANGUL SYLLABLE SSANGTIKEUT WEO NIEUN + {0x8CF9, 0xB6BD}, //2131 #HANGUL SYLLABLE SSANGTIKEUT WEO NIEUNCIEUC + {0x8CFA, 0xB6BE}, //2132 #HANGUL SYLLABLE SSANGTIKEUT WEO NIEUNHIEUH + {0x8CFB, 0xB6BF}, //2133 #HANGUL SYLLABLE SSANGTIKEUT WEO TIKEUT + {0x8CFC, 0xB6C0}, //2134 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEUL + {0x8CFD, 0xB6C1}, //2135 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULKIYEOK + {0x8CFE, 0xB6C2}, //2136 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULMIEUM + {0x8D41, 0xB6C3}, //2137 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULPIEUP + {0x8D42, 0xB6C4}, //2138 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULSIOS + {0x8D43, 0xB6C5}, //2139 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULTHIEUTH + {0x8D44, 0xB6C6}, //2140 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULPHIEUPH + {0x8D45, 0xB6C7}, //2141 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULHIEUH + {0x8D46, 0xB6C8}, //2142 #HANGUL SYLLABLE SSANGTIKEUT WEO MIEUM + {0x8D47, 0xB6C9}, //2143 #HANGUL SYLLABLE SSANGTIKEUT WEO PIEUP + {0x8D48, 0xB6CA}, //2144 #HANGUL SYLLABLE SSANGTIKEUT WEO PIEUPSIOS + {0x8D49, 0xB6CB}, //2145 #HANGUL SYLLABLE SSANGTIKEUT WEO SIOS + {0x8D4A, 0xB6CC}, //2146 #HANGUL SYLLABLE SSANGTIKEUT WEO SSANGSIOS + {0x8D4B, 0xB6CD}, //2147 #HANGUL SYLLABLE SSANGTIKEUT WEO IEUNG + {0x8D4C, 0xB6CE}, //2148 #HANGUL SYLLABLE SSANGTIKEUT WEO CIEUC + {0x8D4D, 0xB6CF}, //2149 #HANGUL SYLLABLE SSANGTIKEUT WEO CHIEUCH + {0x8D4E, 0xB6D0}, //2150 #HANGUL SYLLABLE SSANGTIKEUT WEO KHIEUKH + {0x8D4F, 0xB6D1}, //2151 #HANGUL SYLLABLE SSANGTIKEUT WEO THIEUTH + {0x8D50, 0xB6D2}, //2152 #HANGUL SYLLABLE SSANGTIKEUT WEO PHIEUPH + {0x8D51, 0xB6D3}, //2153 #HANGUL SYLLABLE SSANGTIKEUT WEO HIEUH + {0x8D52, 0xB6D5}, //2154 #HANGUL SYLLABLE SSANGTIKEUT WE KIYEOK + {0x8D53, 0xB6D6}, //2155 #HANGUL SYLLABLE SSANGTIKEUT WE SSANGKIYEOK + {0x8D54, 0xB6D7}, //2156 #HANGUL SYLLABLE SSANGTIKEUT WE KIYEOKSIOS + {0x8D55, 0xB6D8}, //2157 #HANGUL SYLLABLE SSANGTIKEUT WE NIEUN + {0x8D56, 0xB6D9}, //2158 #HANGUL SYLLABLE SSANGTIKEUT WE NIEUNCIEUC + {0x8D57, 0xB6DA}, //2159 #HANGUL SYLLABLE SSANGTIKEUT WE NIEUNHIEUH + {0x8D58, 0xB6DB}, //2160 #HANGUL SYLLABLE SSANGTIKEUT WE TIKEUT + {0x8D59, 0xB6DC}, //2161 #HANGUL SYLLABLE SSANGTIKEUT WE RIEUL + {0x8D5A, 0xB6DD}, //2162 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULKIYEOK + {0x8D61, 0xB6DE}, //2163 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULMIEUM + {0x8D62, 0xB6DF}, //2164 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULPIEUP + {0x8D63, 0xB6E0}, //2165 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULSIOS + {0x8D64, 0xB6E1}, //2166 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULTHIEUTH + {0x8D65, 0xB6E2}, //2167 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULPHIEUPH + {0x8D66, 0xB6E3}, //2168 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULHIEUH + {0x8D67, 0xB6E4}, //2169 #HANGUL SYLLABLE SSANGTIKEUT WE MIEUM + {0x8D68, 0xB6E5}, //2170 #HANGUL SYLLABLE SSANGTIKEUT WE PIEUP + {0x8D69, 0xB6E6}, //2171 #HANGUL SYLLABLE SSANGTIKEUT WE PIEUPSIOS + {0x8D6A, 0xB6E7}, //2172 #HANGUL SYLLABLE SSANGTIKEUT WE SIOS + {0x8D6B, 0xB6E8}, //2173 #HANGUL SYLLABLE SSANGTIKEUT WE SSANGSIOS + {0x8D6C, 0xB6E9}, //2174 #HANGUL SYLLABLE SSANGTIKEUT WE IEUNG + {0x8D6D, 0xB6EA}, //2175 #HANGUL SYLLABLE SSANGTIKEUT WE CIEUC + {0x8D6E, 0xB6EB}, //2176 #HANGUL SYLLABLE SSANGTIKEUT WE CHIEUCH + {0x8D6F, 0xB6EC}, //2177 #HANGUL SYLLABLE SSANGTIKEUT WE KHIEUKH + {0x8D70, 0xB6ED}, //2178 #HANGUL SYLLABLE SSANGTIKEUT WE THIEUTH + {0x8D71, 0xB6EE}, //2179 #HANGUL SYLLABLE SSANGTIKEUT WE PHIEUPH + {0x8D72, 0xB6EF}, //2180 #HANGUL SYLLABLE SSANGTIKEUT WE HIEUH + {0x8D73, 0xB6F1}, //2181 #HANGUL SYLLABLE SSANGTIKEUT WI KIYEOK + {0x8D74, 0xB6F2}, //2182 #HANGUL SYLLABLE SSANGTIKEUT WI SSANGKIYEOK + {0x8D75, 0xB6F3}, //2183 #HANGUL SYLLABLE SSANGTIKEUT WI KIYEOKSIOS + {0x8D76, 0xB6F5}, //2184 #HANGUL SYLLABLE SSANGTIKEUT WI NIEUNCIEUC + {0x8D77, 0xB6F6}, //2185 #HANGUL SYLLABLE SSANGTIKEUT WI NIEUNHIEUH + {0x8D78, 0xB6F7}, //2186 #HANGUL SYLLABLE SSANGTIKEUT WI TIKEUT + {0x8D79, 0xB6F9}, //2187 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULKIYEOK + {0x8D7A, 0xB6FA}, //2188 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULMIEUM + {0x8D81, 0xB6FB}, //2189 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULPIEUP + {0x8D82, 0xB6FC}, //2190 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULSIOS + {0x8D83, 0xB6FD}, //2191 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULTHIEUTH + {0x8D84, 0xB6FE}, //2192 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULPHIEUPH + {0x8D85, 0xB6FF}, //2193 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULHIEUH + {0x8D86, 0xB702}, //2194 #HANGUL SYLLABLE SSANGTIKEUT WI PIEUPSIOS + {0x8D87, 0xB703}, //2195 #HANGUL SYLLABLE SSANGTIKEUT WI SIOS + {0x8D88, 0xB704}, //2196 #HANGUL SYLLABLE SSANGTIKEUT WI SSANGSIOS + {0x8D89, 0xB706}, //2197 #HANGUL SYLLABLE SSANGTIKEUT WI CIEUC + {0x8D8A, 0xB707}, //2198 #HANGUL SYLLABLE SSANGTIKEUT WI CHIEUCH + {0x8D8B, 0xB708}, //2199 #HANGUL SYLLABLE SSANGTIKEUT WI KHIEUKH + {0x8D8C, 0xB709}, //2200 #HANGUL SYLLABLE SSANGTIKEUT WI THIEUTH + {0x8D8D, 0xB70A}, //2201 #HANGUL SYLLABLE SSANGTIKEUT WI PHIEUPH + {0x8D8E, 0xB70B}, //2202 #HANGUL SYLLABLE SSANGTIKEUT WI HIEUH + {0x8D8F, 0xB70C}, //2203 #HANGUL SYLLABLE SSANGTIKEUT YU + {0x8D90, 0xB70D}, //2204 #HANGUL SYLLABLE SSANGTIKEUT YU KIYEOK + {0x8D91, 0xB70E}, //2205 #HANGUL SYLLABLE SSANGTIKEUT YU SSANGKIYEOK + {0x8D92, 0xB70F}, //2206 #HANGUL SYLLABLE SSANGTIKEUT YU KIYEOKSIOS + {0x8D93, 0xB710}, //2207 #HANGUL SYLLABLE SSANGTIKEUT YU NIEUN + {0x8D94, 0xB711}, //2208 #HANGUL SYLLABLE SSANGTIKEUT YU NIEUNCIEUC + {0x8D95, 0xB712}, //2209 #HANGUL SYLLABLE SSANGTIKEUT YU NIEUNHIEUH + {0x8D96, 0xB713}, //2210 #HANGUL SYLLABLE SSANGTIKEUT YU TIKEUT + {0x8D97, 0xB714}, //2211 #HANGUL SYLLABLE SSANGTIKEUT YU RIEUL + {0x8D98, 0xB715}, //2212 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULKIYEOK + {0x8D99, 0xB716}, //2213 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULMIEUM + {0x8D9A, 0xB717}, //2214 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULPIEUP + {0x8D9B, 0xB718}, //2215 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULSIOS + {0x8D9C, 0xB719}, //2216 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULTHIEUTH + {0x8D9D, 0xB71A}, //2217 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULPHIEUPH + {0x8D9E, 0xB71B}, //2218 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULHIEUH + {0x8D9F, 0xB71C}, //2219 #HANGUL SYLLABLE SSANGTIKEUT YU MIEUM + {0x8DA0, 0xB71D}, //2220 #HANGUL SYLLABLE SSANGTIKEUT YU PIEUP + {0x8DA1, 0xB71E}, //2221 #HANGUL SYLLABLE SSANGTIKEUT YU PIEUPSIOS + {0x8DA2, 0xB71F}, //2222 #HANGUL SYLLABLE SSANGTIKEUT YU SIOS + {0x8DA3, 0xB720}, //2223 #HANGUL SYLLABLE SSANGTIKEUT YU SSANGSIOS + {0x8DA4, 0xB721}, //2224 #HANGUL SYLLABLE SSANGTIKEUT YU IEUNG + {0x8DA5, 0xB722}, //2225 #HANGUL SYLLABLE SSANGTIKEUT YU CIEUC + {0x8DA6, 0xB723}, //2226 #HANGUL SYLLABLE SSANGTIKEUT YU CHIEUCH + {0x8DA7, 0xB724}, //2227 #HANGUL SYLLABLE SSANGTIKEUT YU KHIEUKH + {0x8DA8, 0xB725}, //2228 #HANGUL SYLLABLE SSANGTIKEUT YU THIEUTH + {0x8DA9, 0xB726}, //2229 #HANGUL SYLLABLE SSANGTIKEUT YU PHIEUPH + {0x8DAA, 0xB727}, //2230 #HANGUL SYLLABLE SSANGTIKEUT YU HIEUH + {0x8DAB, 0xB72A}, //2231 #HANGUL SYLLABLE SSANGTIKEUT EU SSANGKIYEOK + {0x8DAC, 0xB72B}, //2232 #HANGUL SYLLABLE SSANGTIKEUT EU KIYEOKSIOS + {0x8DAD, 0xB72D}, //2233 #HANGUL SYLLABLE SSANGTIKEUT EU NIEUNCIEUC + {0x8DAE, 0xB72E}, //2234 #HANGUL SYLLABLE SSANGTIKEUT EU NIEUNHIEUH + {0x8DAF, 0xB731}, //2235 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULKIYEOK + {0x8DB0, 0xB732}, //2236 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULMIEUM + {0x8DB1, 0xB733}, //2237 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULPIEUP + {0x8DB2, 0xB734}, //2238 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULSIOS + {0x8DB3, 0xB735}, //2239 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULTHIEUTH + {0x8DB4, 0xB736}, //2240 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULPHIEUPH + {0x8DB5, 0xB737}, //2241 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULHIEUH + {0x8DB6, 0xB73A}, //2242 #HANGUL SYLLABLE SSANGTIKEUT EU PIEUPSIOS + {0x8DB7, 0xB73C}, //2243 #HANGUL SYLLABLE SSANGTIKEUT EU SSANGSIOS + {0x8DB8, 0xB73D}, //2244 #HANGUL SYLLABLE SSANGTIKEUT EU IEUNG + {0x8DB9, 0xB73E}, //2245 #HANGUL SYLLABLE SSANGTIKEUT EU CIEUC + {0x8DBA, 0xB73F}, //2246 #HANGUL SYLLABLE SSANGTIKEUT EU CHIEUCH + {0x8DBB, 0xB740}, //2247 #HANGUL SYLLABLE SSANGTIKEUT EU KHIEUKH + {0x8DBC, 0xB741}, //2248 #HANGUL SYLLABLE SSANGTIKEUT EU THIEUTH + {0x8DBD, 0xB742}, //2249 #HANGUL SYLLABLE SSANGTIKEUT EU PHIEUPH + {0x8DBE, 0xB743}, //2250 #HANGUL SYLLABLE SSANGTIKEUT EU HIEUH + {0x8DBF, 0xB745}, //2251 #HANGUL SYLLABLE SSANGTIKEUT YI KIYEOK + {0x8DC0, 0xB746}, //2252 #HANGUL SYLLABLE SSANGTIKEUT YI SSANGKIYEOK + {0x8DC1, 0xB747}, //2253 #HANGUL SYLLABLE SSANGTIKEUT YI KIYEOKSIOS + {0x8DC2, 0xB749}, //2254 #HANGUL SYLLABLE SSANGTIKEUT YI NIEUNCIEUC + {0x8DC3, 0xB74A}, //2255 #HANGUL SYLLABLE SSANGTIKEUT YI NIEUNHIEUH + {0x8DC4, 0xB74B}, //2256 #HANGUL SYLLABLE SSANGTIKEUT YI TIKEUT + {0x8DC5, 0xB74D}, //2257 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULKIYEOK + {0x8DC6, 0xB74E}, //2258 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULMIEUM + {0x8DC7, 0xB74F}, //2259 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULPIEUP + {0x8DC8, 0xB750}, //2260 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULSIOS + {0x8DC9, 0xB751}, //2261 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULTHIEUTH + {0x8DCA, 0xB752}, //2262 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULPHIEUPH + {0x8DCB, 0xB753}, //2263 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULHIEUH + {0x8DCC, 0xB756}, //2264 #HANGUL SYLLABLE SSANGTIKEUT YI PIEUPSIOS + {0x8DCD, 0xB757}, //2265 #HANGUL SYLLABLE SSANGTIKEUT YI SIOS + {0x8DCE, 0xB758}, //2266 #HANGUL SYLLABLE SSANGTIKEUT YI SSANGSIOS + {0x8DCF, 0xB759}, //2267 #HANGUL SYLLABLE SSANGTIKEUT YI IEUNG + {0x8DD0, 0xB75A}, //2268 #HANGUL SYLLABLE SSANGTIKEUT YI CIEUC + {0x8DD1, 0xB75B}, //2269 #HANGUL SYLLABLE SSANGTIKEUT YI CHIEUCH + {0x8DD2, 0xB75C}, //2270 #HANGUL SYLLABLE SSANGTIKEUT YI KHIEUKH + {0x8DD3, 0xB75D}, //2271 #HANGUL SYLLABLE SSANGTIKEUT YI THIEUTH + {0x8DD4, 0xB75E}, //2272 #HANGUL SYLLABLE SSANGTIKEUT YI PHIEUPH + {0x8DD5, 0xB75F}, //2273 #HANGUL SYLLABLE SSANGTIKEUT YI HIEUH + {0x8DD6, 0xB761}, //2274 #HANGUL SYLLABLE SSANGTIKEUT I KIYEOK + {0x8DD7, 0xB762}, //2275 #HANGUL SYLLABLE SSANGTIKEUT I SSANGKIYEOK + {0x8DD8, 0xB763}, //2276 #HANGUL SYLLABLE SSANGTIKEUT I KIYEOKSIOS + {0x8DD9, 0xB765}, //2277 #HANGUL SYLLABLE SSANGTIKEUT I NIEUNCIEUC + {0x8DDA, 0xB766}, //2278 #HANGUL SYLLABLE SSANGTIKEUT I NIEUNHIEUH + {0x8DDB, 0xB767}, //2279 #HANGUL SYLLABLE SSANGTIKEUT I TIKEUT + {0x8DDC, 0xB769}, //2280 #HANGUL SYLLABLE SSANGTIKEUT I RIEULKIYEOK + {0x8DDD, 0xB76A}, //2281 #HANGUL SYLLABLE SSANGTIKEUT I RIEULMIEUM + {0x8DDE, 0xB76B}, //2282 #HANGUL SYLLABLE SSANGTIKEUT I RIEULPIEUP + {0x8DDF, 0xB76C}, //2283 #HANGUL SYLLABLE SSANGTIKEUT I RIEULSIOS + {0x8DE0, 0xB76D}, //2284 #HANGUL SYLLABLE SSANGTIKEUT I RIEULTHIEUTH + {0x8DE1, 0xB76E}, //2285 #HANGUL SYLLABLE SSANGTIKEUT I RIEULPHIEUPH + {0x8DE2, 0xB76F}, //2286 #HANGUL SYLLABLE SSANGTIKEUT I RIEULHIEUH + {0x8DE3, 0xB772}, //2287 #HANGUL SYLLABLE SSANGTIKEUT I PIEUPSIOS + {0x8DE4, 0xB774}, //2288 #HANGUL SYLLABLE SSANGTIKEUT I SSANGSIOS + {0x8DE5, 0xB776}, //2289 #HANGUL SYLLABLE SSANGTIKEUT I CIEUC + {0x8DE6, 0xB777}, //2290 #HANGUL SYLLABLE SSANGTIKEUT I CHIEUCH + {0x8DE7, 0xB778}, //2291 #HANGUL SYLLABLE SSANGTIKEUT I KHIEUKH + {0x8DE8, 0xB779}, //2292 #HANGUL SYLLABLE SSANGTIKEUT I THIEUTH + {0x8DE9, 0xB77A}, //2293 #HANGUL SYLLABLE SSANGTIKEUT I PHIEUPH + {0x8DEA, 0xB77B}, //2294 #HANGUL SYLLABLE SSANGTIKEUT I HIEUH + {0x8DEB, 0xB77E}, //2295 #HANGUL SYLLABLE RIEUL A SSANGKIYEOK + {0x8DEC, 0xB77F}, //2296 #HANGUL SYLLABLE RIEUL A KIYEOKSIOS + {0x8DED, 0xB781}, //2297 #HANGUL SYLLABLE RIEUL A NIEUNCIEUC + {0x8DEE, 0xB782}, //2298 #HANGUL SYLLABLE RIEUL A NIEUNHIEUH + {0x8DEF, 0xB783}, //2299 #HANGUL SYLLABLE RIEUL A TIKEUT + {0x8DF0, 0xB785}, //2300 #HANGUL SYLLABLE RIEUL A RIEULKIYEOK + {0x8DF1, 0xB786}, //2301 #HANGUL SYLLABLE RIEUL A RIEULMIEUM + {0x8DF2, 0xB787}, //2302 #HANGUL SYLLABLE RIEUL A RIEULPIEUP + {0x8DF3, 0xB788}, //2303 #HANGUL SYLLABLE RIEUL A RIEULSIOS + {0x8DF4, 0xB789}, //2304 #HANGUL SYLLABLE RIEUL A RIEULTHIEUTH + {0x8DF5, 0xB78A}, //2305 #HANGUL SYLLABLE RIEUL A RIEULPHIEUPH + {0x8DF6, 0xB78B}, //2306 #HANGUL SYLLABLE RIEUL A RIEULHIEUH + {0x8DF7, 0xB78E}, //2307 #HANGUL SYLLABLE RIEUL A PIEUPSIOS + {0x8DF8, 0xB793}, //2308 #HANGUL SYLLABLE RIEUL A CHIEUCH + {0x8DF9, 0xB794}, //2309 #HANGUL SYLLABLE RIEUL A KHIEUKH + {0x8DFA, 0xB795}, //2310 #HANGUL SYLLABLE RIEUL A THIEUTH + {0x8DFB, 0xB79A}, //2311 #HANGUL SYLLABLE RIEUL AE SSANGKIYEOK + {0x8DFC, 0xB79B}, //2312 #HANGUL SYLLABLE RIEUL AE KIYEOKSIOS + {0x8DFD, 0xB79D}, //2313 #HANGUL SYLLABLE RIEUL AE NIEUNCIEUC + {0x8DFE, 0xB79E}, //2314 #HANGUL SYLLABLE RIEUL AE NIEUNHIEUH + {0x8E41, 0xB79F}, //2315 #HANGUL SYLLABLE RIEUL AE TIKEUT + {0x8E42, 0xB7A1}, //2316 #HANGUL SYLLABLE RIEUL AE RIEULKIYEOK + {0x8E43, 0xB7A2}, //2317 #HANGUL SYLLABLE RIEUL AE RIEULMIEUM + {0x8E44, 0xB7A3}, //2318 #HANGUL SYLLABLE RIEUL AE RIEULPIEUP + {0x8E45, 0xB7A4}, //2319 #HANGUL SYLLABLE RIEUL AE RIEULSIOS + {0x8E46, 0xB7A5}, //2320 #HANGUL SYLLABLE RIEUL AE RIEULTHIEUTH + {0x8E47, 0xB7A6}, //2321 #HANGUL SYLLABLE RIEUL AE RIEULPHIEUPH + {0x8E48, 0xB7A7}, //2322 #HANGUL SYLLABLE RIEUL AE RIEULHIEUH + {0x8E49, 0xB7AA}, //2323 #HANGUL SYLLABLE RIEUL AE PIEUPSIOS + {0x8E4A, 0xB7AE}, //2324 #HANGUL SYLLABLE RIEUL AE CIEUC + {0x8E4B, 0xB7AF}, //2325 #HANGUL SYLLABLE RIEUL AE CHIEUCH + {0x8E4C, 0xB7B0}, //2326 #HANGUL SYLLABLE RIEUL AE KHIEUKH + {0x8E4D, 0xB7B1}, //2327 #HANGUL SYLLABLE RIEUL AE THIEUTH + {0x8E4E, 0xB7B2}, //2328 #HANGUL SYLLABLE RIEUL AE PHIEUPH + {0x8E4F, 0xB7B3}, //2329 #HANGUL SYLLABLE RIEUL AE HIEUH + {0x8E50, 0xB7B6}, //2330 #HANGUL SYLLABLE RIEUL YA SSANGKIYEOK + {0x8E51, 0xB7B7}, //2331 #HANGUL SYLLABLE RIEUL YA KIYEOKSIOS + {0x8E52, 0xB7B9}, //2332 #HANGUL SYLLABLE RIEUL YA NIEUNCIEUC + {0x8E53, 0xB7BA}, //2333 #HANGUL SYLLABLE RIEUL YA NIEUNHIEUH + {0x8E54, 0xB7BB}, //2334 #HANGUL SYLLABLE RIEUL YA TIKEUT + {0x8E55, 0xB7BC}, //2335 #HANGUL SYLLABLE RIEUL YA RIEUL + {0x8E56, 0xB7BD}, //2336 #HANGUL SYLLABLE RIEUL YA RIEULKIYEOK + {0x8E57, 0xB7BE}, //2337 #HANGUL SYLLABLE RIEUL YA RIEULMIEUM + {0x8E58, 0xB7BF}, //2338 #HANGUL SYLLABLE RIEUL YA RIEULPIEUP + {0x8E59, 0xB7C0}, //2339 #HANGUL SYLLABLE RIEUL YA RIEULSIOS + {0x8E5A, 0xB7C1}, //2340 #HANGUL SYLLABLE RIEUL YA RIEULTHIEUTH + {0x8E61, 0xB7C2}, //2341 #HANGUL SYLLABLE RIEUL YA RIEULPHIEUPH + {0x8E62, 0xB7C3}, //2342 #HANGUL SYLLABLE RIEUL YA RIEULHIEUH + {0x8E63, 0xB7C4}, //2343 #HANGUL SYLLABLE RIEUL YA MIEUM + {0x8E64, 0xB7C5}, //2344 #HANGUL SYLLABLE RIEUL YA PIEUP + {0x8E65, 0xB7C6}, //2345 #HANGUL SYLLABLE RIEUL YA PIEUPSIOS + {0x8E66, 0xB7C8}, //2346 #HANGUL SYLLABLE RIEUL YA SSANGSIOS + {0x8E67, 0xB7CA}, //2347 #HANGUL SYLLABLE RIEUL YA CIEUC + {0x8E68, 0xB7CB}, //2348 #HANGUL SYLLABLE RIEUL YA CHIEUCH + {0x8E69, 0xB7CC}, //2349 #HANGUL SYLLABLE RIEUL YA KHIEUKH + {0x8E6A, 0xB7CD}, //2350 #HANGUL SYLLABLE RIEUL YA THIEUTH + {0x8E6B, 0xB7CE}, //2351 #HANGUL SYLLABLE RIEUL YA PHIEUPH + {0x8E6C, 0xB7CF}, //2352 #HANGUL SYLLABLE RIEUL YA HIEUH + {0x8E6D, 0xB7D0}, //2353 #HANGUL SYLLABLE RIEUL YAE + {0x8E6E, 0xB7D1}, //2354 #HANGUL SYLLABLE RIEUL YAE KIYEOK + {0x8E6F, 0xB7D2}, //2355 #HANGUL SYLLABLE RIEUL YAE SSANGKIYEOK + {0x8E70, 0xB7D3}, //2356 #HANGUL SYLLABLE RIEUL YAE KIYEOKSIOS + {0x8E71, 0xB7D4}, //2357 #HANGUL SYLLABLE RIEUL YAE NIEUN + {0x8E72, 0xB7D5}, //2358 #HANGUL SYLLABLE RIEUL YAE NIEUNCIEUC + {0x8E73, 0xB7D6}, //2359 #HANGUL SYLLABLE RIEUL YAE NIEUNHIEUH + {0x8E74, 0xB7D7}, //2360 #HANGUL SYLLABLE RIEUL YAE TIKEUT + {0x8E75, 0xB7D8}, //2361 #HANGUL SYLLABLE RIEUL YAE RIEUL + {0x8E76, 0xB7D9}, //2362 #HANGUL SYLLABLE RIEUL YAE RIEULKIYEOK + {0x8E77, 0xB7DA}, //2363 #HANGUL SYLLABLE RIEUL YAE RIEULMIEUM + {0x8E78, 0xB7DB}, //2364 #HANGUL SYLLABLE RIEUL YAE RIEULPIEUP + {0x8E79, 0xB7DC}, //2365 #HANGUL SYLLABLE RIEUL YAE RIEULSIOS + {0x8E7A, 0xB7DD}, //2366 #HANGUL SYLLABLE RIEUL YAE RIEULTHIEUTH + {0x8E81, 0xB7DE}, //2367 #HANGUL SYLLABLE RIEUL YAE RIEULPHIEUPH + {0x8E82, 0xB7DF}, //2368 #HANGUL SYLLABLE RIEUL YAE RIEULHIEUH + {0x8E83, 0xB7E0}, //2369 #HANGUL SYLLABLE RIEUL YAE MIEUM + {0x8E84, 0xB7E1}, //2370 #HANGUL SYLLABLE RIEUL YAE PIEUP + {0x8E85, 0xB7E2}, //2371 #HANGUL SYLLABLE RIEUL YAE PIEUPSIOS + {0x8E86, 0xB7E3}, //2372 #HANGUL SYLLABLE RIEUL YAE SIOS + {0x8E87, 0xB7E4}, //2373 #HANGUL SYLLABLE RIEUL YAE SSANGSIOS + {0x8E88, 0xB7E5}, //2374 #HANGUL SYLLABLE RIEUL YAE IEUNG + {0x8E89, 0xB7E6}, //2375 #HANGUL SYLLABLE RIEUL YAE CIEUC + {0x8E8A, 0xB7E7}, //2376 #HANGUL SYLLABLE RIEUL YAE CHIEUCH + {0x8E8B, 0xB7E8}, //2377 #HANGUL SYLLABLE RIEUL YAE KHIEUKH + {0x8E8C, 0xB7E9}, //2378 #HANGUL SYLLABLE RIEUL YAE THIEUTH + {0x8E8D, 0xB7EA}, //2379 #HANGUL SYLLABLE RIEUL YAE PHIEUPH + {0x8E8E, 0xB7EB}, //2380 #HANGUL SYLLABLE RIEUL YAE HIEUH + {0x8E8F, 0xB7EE}, //2381 #HANGUL SYLLABLE RIEUL EO SSANGKIYEOK + {0x8E90, 0xB7EF}, //2382 #HANGUL SYLLABLE RIEUL EO KIYEOKSIOS + {0x8E91, 0xB7F1}, //2383 #HANGUL SYLLABLE RIEUL EO NIEUNCIEUC + {0x8E92, 0xB7F2}, //2384 #HANGUL SYLLABLE RIEUL EO NIEUNHIEUH + {0x8E93, 0xB7F3}, //2385 #HANGUL SYLLABLE RIEUL EO TIKEUT + {0x8E94, 0xB7F5}, //2386 #HANGUL SYLLABLE RIEUL EO RIEULKIYEOK + {0x8E95, 0xB7F6}, //2387 #HANGUL SYLLABLE RIEUL EO RIEULMIEUM + {0x8E96, 0xB7F7}, //2388 #HANGUL SYLLABLE RIEUL EO RIEULPIEUP + {0x8E97, 0xB7F8}, //2389 #HANGUL SYLLABLE RIEUL EO RIEULSIOS + {0x8E98, 0xB7F9}, //2390 #HANGUL SYLLABLE RIEUL EO RIEULTHIEUTH + {0x8E99, 0xB7FA}, //2391 #HANGUL SYLLABLE RIEUL EO RIEULPHIEUPH + {0x8E9A, 0xB7FB}, //2392 #HANGUL SYLLABLE RIEUL EO RIEULHIEUH + {0x8E9B, 0xB7FE}, //2393 #HANGUL SYLLABLE RIEUL EO PIEUPSIOS + {0x8E9C, 0xB802}, //2394 #HANGUL SYLLABLE RIEUL EO CIEUC + {0x8E9D, 0xB803}, //2395 #HANGUL SYLLABLE RIEUL EO CHIEUCH + {0x8E9E, 0xB804}, //2396 #HANGUL SYLLABLE RIEUL EO KHIEUKH + {0x8E9F, 0xB805}, //2397 #HANGUL SYLLABLE RIEUL EO THIEUTH + {0x8EA0, 0xB806}, //2398 #HANGUL SYLLABLE RIEUL EO PHIEUPH + {0x8EA1, 0xB80A}, //2399 #HANGUL SYLLABLE RIEUL E SSANGKIYEOK + {0x8EA2, 0xB80B}, //2400 #HANGUL SYLLABLE RIEUL E KIYEOKSIOS + {0x8EA3, 0xB80D}, //2401 #HANGUL SYLLABLE RIEUL E NIEUNCIEUC + {0x8EA4, 0xB80E}, //2402 #HANGUL SYLLABLE RIEUL E NIEUNHIEUH + {0x8EA5, 0xB80F}, //2403 #HANGUL SYLLABLE RIEUL E TIKEUT + {0x8EA6, 0xB811}, //2404 #HANGUL SYLLABLE RIEUL E RIEULKIYEOK + {0x8EA7, 0xB812}, //2405 #HANGUL SYLLABLE RIEUL E RIEULMIEUM + {0x8EA8, 0xB813}, //2406 #HANGUL SYLLABLE RIEUL E RIEULPIEUP + {0x8EA9, 0xB814}, //2407 #HANGUL SYLLABLE RIEUL E RIEULSIOS + {0x8EAA, 0xB815}, //2408 #HANGUL SYLLABLE RIEUL E RIEULTHIEUTH + {0x8EAB, 0xB816}, //2409 #HANGUL SYLLABLE RIEUL E RIEULPHIEUPH + {0x8EAC, 0xB817}, //2410 #HANGUL SYLLABLE RIEUL E RIEULHIEUH + {0x8EAD, 0xB81A}, //2411 #HANGUL SYLLABLE RIEUL E PIEUPSIOS + {0x8EAE, 0xB81C}, //2412 #HANGUL SYLLABLE RIEUL E SSANGSIOS + {0x8EAF, 0xB81E}, //2413 #HANGUL SYLLABLE RIEUL E CIEUC + {0x8EB0, 0xB81F}, //2414 #HANGUL SYLLABLE RIEUL E CHIEUCH + {0x8EB1, 0xB820}, //2415 #HANGUL SYLLABLE RIEUL E KHIEUKH + {0x8EB2, 0xB821}, //2416 #HANGUL SYLLABLE RIEUL E THIEUTH + {0x8EB3, 0xB822}, //2417 #HANGUL SYLLABLE RIEUL E PHIEUPH + {0x8EB4, 0xB823}, //2418 #HANGUL SYLLABLE RIEUL E HIEUH + {0x8EB5, 0xB826}, //2419 #HANGUL SYLLABLE RIEUL YEO SSANGKIYEOK + {0x8EB6, 0xB827}, //2420 #HANGUL SYLLABLE RIEUL YEO KIYEOKSIOS + {0x8EB7, 0xB829}, //2421 #HANGUL SYLLABLE RIEUL YEO NIEUNCIEUC + {0x8EB8, 0xB82A}, //2422 #HANGUL SYLLABLE RIEUL YEO NIEUNHIEUH + {0x8EB9, 0xB82B}, //2423 #HANGUL SYLLABLE RIEUL YEO TIKEUT + {0x8EBA, 0xB82D}, //2424 #HANGUL SYLLABLE RIEUL YEO RIEULKIYEOK + {0x8EBB, 0xB82E}, //2425 #HANGUL SYLLABLE RIEUL YEO RIEULMIEUM + {0x8EBC, 0xB82F}, //2426 #HANGUL SYLLABLE RIEUL YEO RIEULPIEUP + {0x8EBD, 0xB830}, //2427 #HANGUL SYLLABLE RIEUL YEO RIEULSIOS + {0x8EBE, 0xB831}, //2428 #HANGUL SYLLABLE RIEUL YEO RIEULTHIEUTH + {0x8EBF, 0xB832}, //2429 #HANGUL SYLLABLE RIEUL YEO RIEULPHIEUPH + {0x8EC0, 0xB833}, //2430 #HANGUL SYLLABLE RIEUL YEO RIEULHIEUH + {0x8EC1, 0xB836}, //2431 #HANGUL SYLLABLE RIEUL YEO PIEUPSIOS + {0x8EC2, 0xB83A}, //2432 #HANGUL SYLLABLE RIEUL YEO CIEUC + {0x8EC3, 0xB83B}, //2433 #HANGUL SYLLABLE RIEUL YEO CHIEUCH + {0x8EC4, 0xB83C}, //2434 #HANGUL SYLLABLE RIEUL YEO KHIEUKH + {0x8EC5, 0xB83D}, //2435 #HANGUL SYLLABLE RIEUL YEO THIEUTH + {0x8EC6, 0xB83E}, //2436 #HANGUL SYLLABLE RIEUL YEO PHIEUPH + {0x8EC7, 0xB83F}, //2437 #HANGUL SYLLABLE RIEUL YEO HIEUH + {0x8EC8, 0xB841}, //2438 #HANGUL SYLLABLE RIEUL YE KIYEOK + {0x8EC9, 0xB842}, //2439 #HANGUL SYLLABLE RIEUL YE SSANGKIYEOK + {0x8ECA, 0xB843}, //2440 #HANGUL SYLLABLE RIEUL YE KIYEOKSIOS + {0x8ECB, 0xB845}, //2441 #HANGUL SYLLABLE RIEUL YE NIEUNCIEUC + {0x8ECC, 0xB846}, //2442 #HANGUL SYLLABLE RIEUL YE NIEUNHIEUH + {0x8ECD, 0xB847}, //2443 #HANGUL SYLLABLE RIEUL YE TIKEUT + {0x8ECE, 0xB848}, //2444 #HANGUL SYLLABLE RIEUL YE RIEUL + {0x8ECF, 0xB849}, //2445 #HANGUL SYLLABLE RIEUL YE RIEULKIYEOK + {0x8ED0, 0xB84A}, //2446 #HANGUL SYLLABLE RIEUL YE RIEULMIEUM + {0x8ED1, 0xB84B}, //2447 #HANGUL SYLLABLE RIEUL YE RIEULPIEUP + {0x8ED2, 0xB84C}, //2448 #HANGUL SYLLABLE RIEUL YE RIEULSIOS + {0x8ED3, 0xB84D}, //2449 #HANGUL SYLLABLE RIEUL YE RIEULTHIEUTH + {0x8ED4, 0xB84E}, //2450 #HANGUL SYLLABLE RIEUL YE RIEULPHIEUPH + {0x8ED5, 0xB84F}, //2451 #HANGUL SYLLABLE RIEUL YE RIEULHIEUH + {0x8ED6, 0xB850}, //2452 #HANGUL SYLLABLE RIEUL YE MIEUM + {0x8ED7, 0xB852}, //2453 #HANGUL SYLLABLE RIEUL YE PIEUPSIOS + {0x8ED8, 0xB854}, //2454 #HANGUL SYLLABLE RIEUL YE SSANGSIOS + {0x8ED9, 0xB855}, //2455 #HANGUL SYLLABLE RIEUL YE IEUNG + {0x8EDA, 0xB856}, //2456 #HANGUL SYLLABLE RIEUL YE CIEUC + {0x8EDB, 0xB857}, //2457 #HANGUL SYLLABLE RIEUL YE CHIEUCH + {0x8EDC, 0xB858}, //2458 #HANGUL SYLLABLE RIEUL YE KHIEUKH + {0x8EDD, 0xB859}, //2459 #HANGUL SYLLABLE RIEUL YE THIEUTH + {0x8EDE, 0xB85A}, //2460 #HANGUL SYLLABLE RIEUL YE PHIEUPH + {0x8EDF, 0xB85B}, //2461 #HANGUL SYLLABLE RIEUL YE HIEUH + {0x8EE0, 0xB85E}, //2462 #HANGUL SYLLABLE RIEUL O SSANGKIYEOK + {0x8EE1, 0xB85F}, //2463 #HANGUL SYLLABLE RIEUL O KIYEOKSIOS + {0x8EE2, 0xB861}, //2464 #HANGUL SYLLABLE RIEUL O NIEUNCIEUC + {0x8EE3, 0xB862}, //2465 #HANGUL SYLLABLE RIEUL O NIEUNHIEUH + {0x8EE4, 0xB863}, //2466 #HANGUL SYLLABLE RIEUL O TIKEUT + {0x8EE5, 0xB865}, //2467 #HANGUL SYLLABLE RIEUL O RIEULKIYEOK + {0x8EE6, 0xB866}, //2468 #HANGUL SYLLABLE RIEUL O RIEULMIEUM + {0x8EE7, 0xB867}, //2469 #HANGUL SYLLABLE RIEUL O RIEULPIEUP + {0x8EE8, 0xB868}, //2470 #HANGUL SYLLABLE RIEUL O RIEULSIOS + {0x8EE9, 0xB869}, //2471 #HANGUL SYLLABLE RIEUL O RIEULTHIEUTH + {0x8EEA, 0xB86A}, //2472 #HANGUL SYLLABLE RIEUL O RIEULPHIEUPH + {0x8EEB, 0xB86B}, //2473 #HANGUL SYLLABLE RIEUL O RIEULHIEUH + {0x8EEC, 0xB86E}, //2474 #HANGUL SYLLABLE RIEUL O PIEUPSIOS + {0x8EED, 0xB870}, //2475 #HANGUL SYLLABLE RIEUL O SSANGSIOS + {0x8EEE, 0xB872}, //2476 #HANGUL SYLLABLE RIEUL O CIEUC + {0x8EEF, 0xB873}, //2477 #HANGUL SYLLABLE RIEUL O CHIEUCH + {0x8EF0, 0xB874}, //2478 #HANGUL SYLLABLE RIEUL O KHIEUKH + {0x8EF1, 0xB875}, //2479 #HANGUL SYLLABLE RIEUL O THIEUTH + {0x8EF2, 0xB876}, //2480 #HANGUL SYLLABLE RIEUL O PHIEUPH + {0x8EF3, 0xB877}, //2481 #HANGUL SYLLABLE RIEUL O HIEUH + {0x8EF4, 0xB879}, //2482 #HANGUL SYLLABLE RIEUL WA KIYEOK + {0x8EF5, 0xB87A}, //2483 #HANGUL SYLLABLE RIEUL WA SSANGKIYEOK + {0x8EF6, 0xB87B}, //2484 #HANGUL SYLLABLE RIEUL WA KIYEOKSIOS + {0x8EF7, 0xB87D}, //2485 #HANGUL SYLLABLE RIEUL WA NIEUNCIEUC + {0x8EF8, 0xB87E}, //2486 #HANGUL SYLLABLE RIEUL WA NIEUNHIEUH + {0x8EF9, 0xB87F}, //2487 #HANGUL SYLLABLE RIEUL WA TIKEUT + {0x8EFA, 0xB880}, //2488 #HANGUL SYLLABLE RIEUL WA RIEUL + {0x8EFB, 0xB881}, //2489 #HANGUL SYLLABLE RIEUL WA RIEULKIYEOK + {0x8EFC, 0xB882}, //2490 #HANGUL SYLLABLE RIEUL WA RIEULMIEUM + {0x8EFD, 0xB883}, //2491 #HANGUL SYLLABLE RIEUL WA RIEULPIEUP + {0x8EFE, 0xB884}, //2492 #HANGUL SYLLABLE RIEUL WA RIEULSIOS + {0x8F41, 0xB885}, //2493 #HANGUL SYLLABLE RIEUL WA RIEULTHIEUTH + {0x8F42, 0xB886}, //2494 #HANGUL SYLLABLE RIEUL WA RIEULPHIEUPH + {0x8F43, 0xB887}, //2495 #HANGUL SYLLABLE RIEUL WA RIEULHIEUH + {0x8F44, 0xB888}, //2496 #HANGUL SYLLABLE RIEUL WA MIEUM + {0x8F45, 0xB889}, //2497 #HANGUL SYLLABLE RIEUL WA PIEUP + {0x8F46, 0xB88A}, //2498 #HANGUL SYLLABLE RIEUL WA PIEUPSIOS + {0x8F47, 0xB88B}, //2499 #HANGUL SYLLABLE RIEUL WA SIOS + {0x8F48, 0xB88C}, //2500 #HANGUL SYLLABLE RIEUL WA SSANGSIOS + {0x8F49, 0xB88E}, //2501 #HANGUL SYLLABLE RIEUL WA CIEUC + {0x8F4A, 0xB88F}, //2502 #HANGUL SYLLABLE RIEUL WA CHIEUCH + {0x8F4B, 0xB890}, //2503 #HANGUL SYLLABLE RIEUL WA KHIEUKH + {0x8F4C, 0xB891}, //2504 #HANGUL SYLLABLE RIEUL WA THIEUTH + {0x8F4D, 0xB892}, //2505 #HANGUL SYLLABLE RIEUL WA PHIEUPH + {0x8F4E, 0xB893}, //2506 #HANGUL SYLLABLE RIEUL WA HIEUH + {0x8F4F, 0xB894}, //2507 #HANGUL SYLLABLE RIEUL WAE + {0x8F50, 0xB895}, //2508 #HANGUL SYLLABLE RIEUL WAE KIYEOK + {0x8F51, 0xB896}, //2509 #HANGUL SYLLABLE RIEUL WAE SSANGKIYEOK + {0x8F52, 0xB897}, //2510 #HANGUL SYLLABLE RIEUL WAE KIYEOKSIOS + {0x8F53, 0xB898}, //2511 #HANGUL SYLLABLE RIEUL WAE NIEUN + {0x8F54, 0xB899}, //2512 #HANGUL SYLLABLE RIEUL WAE NIEUNCIEUC + {0x8F55, 0xB89A}, //2513 #HANGUL SYLLABLE RIEUL WAE NIEUNHIEUH + {0x8F56, 0xB89B}, //2514 #HANGUL SYLLABLE RIEUL WAE TIKEUT + {0x8F57, 0xB89C}, //2515 #HANGUL SYLLABLE RIEUL WAE RIEUL + {0x8F58, 0xB89D}, //2516 #HANGUL SYLLABLE RIEUL WAE RIEULKIYEOK + {0x8F59, 0xB89E}, //2517 #HANGUL SYLLABLE RIEUL WAE RIEULMIEUM + {0x8F5A, 0xB89F}, //2518 #HANGUL SYLLABLE RIEUL WAE RIEULPIEUP + {0x8F61, 0xB8A0}, //2519 #HANGUL SYLLABLE RIEUL WAE RIEULSIOS + {0x8F62, 0xB8A1}, //2520 #HANGUL SYLLABLE RIEUL WAE RIEULTHIEUTH + {0x8F63, 0xB8A2}, //2521 #HANGUL SYLLABLE RIEUL WAE RIEULPHIEUPH + {0x8F64, 0xB8A3}, //2522 #HANGUL SYLLABLE RIEUL WAE RIEULHIEUH + {0x8F65, 0xB8A4}, //2523 #HANGUL SYLLABLE RIEUL WAE MIEUM + {0x8F66, 0xB8A5}, //2524 #HANGUL SYLLABLE RIEUL WAE PIEUP + {0x8F67, 0xB8A6}, //2525 #HANGUL SYLLABLE RIEUL WAE PIEUPSIOS + {0x8F68, 0xB8A7}, //2526 #HANGUL SYLLABLE RIEUL WAE SIOS + {0x8F69, 0xB8A9}, //2527 #HANGUL SYLLABLE RIEUL WAE IEUNG + {0x8F6A, 0xB8AA}, //2528 #HANGUL SYLLABLE RIEUL WAE CIEUC + {0x8F6B, 0xB8AB}, //2529 #HANGUL SYLLABLE RIEUL WAE CHIEUCH + {0x8F6C, 0xB8AC}, //2530 #HANGUL SYLLABLE RIEUL WAE KHIEUKH + {0x8F6D, 0xB8AD}, //2531 #HANGUL SYLLABLE RIEUL WAE THIEUTH + {0x8F6E, 0xB8AE}, //2532 #HANGUL SYLLABLE RIEUL WAE PHIEUPH + {0x8F6F, 0xB8AF}, //2533 #HANGUL SYLLABLE RIEUL WAE HIEUH + {0x8F70, 0xB8B1}, //2534 #HANGUL SYLLABLE RIEUL OE KIYEOK + {0x8F71, 0xB8B2}, //2535 #HANGUL SYLLABLE RIEUL OE SSANGKIYEOK + {0x8F72, 0xB8B3}, //2536 #HANGUL SYLLABLE RIEUL OE KIYEOKSIOS + {0x8F73, 0xB8B5}, //2537 #HANGUL SYLLABLE RIEUL OE NIEUNCIEUC + {0x8F74, 0xB8B6}, //2538 #HANGUL SYLLABLE RIEUL OE NIEUNHIEUH + {0x8F75, 0xB8B7}, //2539 #HANGUL SYLLABLE RIEUL OE TIKEUT + {0x8F76, 0xB8B9}, //2540 #HANGUL SYLLABLE RIEUL OE RIEULKIYEOK + {0x8F77, 0xB8BA}, //2541 #HANGUL SYLLABLE RIEUL OE RIEULMIEUM + {0x8F78, 0xB8BB}, //2542 #HANGUL SYLLABLE RIEUL OE RIEULPIEUP + {0x8F79, 0xB8BC}, //2543 #HANGUL SYLLABLE RIEUL OE RIEULSIOS + {0x8F7A, 0xB8BD}, //2544 #HANGUL SYLLABLE RIEUL OE RIEULTHIEUTH + {0x8F81, 0xB8BE}, //2545 #HANGUL SYLLABLE RIEUL OE RIEULPHIEUPH + {0x8F82, 0xB8BF}, //2546 #HANGUL SYLLABLE RIEUL OE RIEULHIEUH + {0x8F83, 0xB8C2}, //2547 #HANGUL SYLLABLE RIEUL OE PIEUPSIOS + {0x8F84, 0xB8C4}, //2548 #HANGUL SYLLABLE RIEUL OE SSANGSIOS + {0x8F85, 0xB8C6}, //2549 #HANGUL SYLLABLE RIEUL OE CIEUC + {0x8F86, 0xB8C7}, //2550 #HANGUL SYLLABLE RIEUL OE CHIEUCH + {0x8F87, 0xB8C8}, //2551 #HANGUL SYLLABLE RIEUL OE KHIEUKH + {0x8F88, 0xB8C9}, //2552 #HANGUL SYLLABLE RIEUL OE THIEUTH + {0x8F89, 0xB8CA}, //2553 #HANGUL SYLLABLE RIEUL OE PHIEUPH + {0x8F8A, 0xB8CB}, //2554 #HANGUL SYLLABLE RIEUL OE HIEUH + {0x8F8B, 0xB8CD}, //2555 #HANGUL SYLLABLE RIEUL YO KIYEOK + {0x8F8C, 0xB8CE}, //2556 #HANGUL SYLLABLE RIEUL YO SSANGKIYEOK + {0x8F8D, 0xB8CF}, //2557 #HANGUL SYLLABLE RIEUL YO KIYEOKSIOS + {0x8F8E, 0xB8D1}, //2558 #HANGUL SYLLABLE RIEUL YO NIEUNCIEUC + {0x8F8F, 0xB8D2}, //2559 #HANGUL SYLLABLE RIEUL YO NIEUNHIEUH + {0x8F90, 0xB8D3}, //2560 #HANGUL SYLLABLE RIEUL YO TIKEUT + {0x8F91, 0xB8D5}, //2561 #HANGUL SYLLABLE RIEUL YO RIEULKIYEOK + {0x8F92, 0xB8D6}, //2562 #HANGUL SYLLABLE RIEUL YO RIEULMIEUM + {0x8F93, 0xB8D7}, //2563 #HANGUL SYLLABLE RIEUL YO RIEULPIEUP + {0x8F94, 0xB8D8}, //2564 #HANGUL SYLLABLE RIEUL YO RIEULSIOS + {0x8F95, 0xB8D9}, //2565 #HANGUL SYLLABLE RIEUL YO RIEULTHIEUTH + {0x8F96, 0xB8DA}, //2566 #HANGUL SYLLABLE RIEUL YO RIEULPHIEUPH + {0x8F97, 0xB8DB}, //2567 #HANGUL SYLLABLE RIEUL YO RIEULHIEUH + {0x8F98, 0xB8DC}, //2568 #HANGUL SYLLABLE RIEUL YO MIEUM + {0x8F99, 0xB8DE}, //2569 #HANGUL SYLLABLE RIEUL YO PIEUPSIOS + {0x8F9A, 0xB8E0}, //2570 #HANGUL SYLLABLE RIEUL YO SSANGSIOS + {0x8F9B, 0xB8E2}, //2571 #HANGUL SYLLABLE RIEUL YO CIEUC + {0x8F9C, 0xB8E3}, //2572 #HANGUL SYLLABLE RIEUL YO CHIEUCH + {0x8F9D, 0xB8E4}, //2573 #HANGUL SYLLABLE RIEUL YO KHIEUKH + {0x8F9E, 0xB8E5}, //2574 #HANGUL SYLLABLE RIEUL YO THIEUTH + {0x8F9F, 0xB8E6}, //2575 #HANGUL SYLLABLE RIEUL YO PHIEUPH + {0x8FA0, 0xB8E7}, //2576 #HANGUL SYLLABLE RIEUL YO HIEUH + {0x8FA1, 0xB8EA}, //2577 #HANGUL SYLLABLE RIEUL U SSANGKIYEOK + {0x8FA2, 0xB8EB}, //2578 #HANGUL SYLLABLE RIEUL U KIYEOKSIOS + {0x8FA3, 0xB8ED}, //2579 #HANGUL SYLLABLE RIEUL U NIEUNCIEUC + {0x8FA4, 0xB8EE}, //2580 #HANGUL SYLLABLE RIEUL U NIEUNHIEUH + {0x8FA5, 0xB8EF}, //2581 #HANGUL SYLLABLE RIEUL U TIKEUT + {0x8FA6, 0xB8F1}, //2582 #HANGUL SYLLABLE RIEUL U RIEULKIYEOK + {0x8FA7, 0xB8F2}, //2583 #HANGUL SYLLABLE RIEUL U RIEULMIEUM + {0x8FA8, 0xB8F3}, //2584 #HANGUL SYLLABLE RIEUL U RIEULPIEUP + {0x8FA9, 0xB8F4}, //2585 #HANGUL SYLLABLE RIEUL U RIEULSIOS + {0x8FAA, 0xB8F5}, //2586 #HANGUL SYLLABLE RIEUL U RIEULTHIEUTH + {0x8FAB, 0xB8F6}, //2587 #HANGUL SYLLABLE RIEUL U RIEULPHIEUPH + {0x8FAC, 0xB8F7}, //2588 #HANGUL SYLLABLE RIEUL U RIEULHIEUH + {0x8FAD, 0xB8FA}, //2589 #HANGUL SYLLABLE RIEUL U PIEUPSIOS + {0x8FAE, 0xB8FC}, //2590 #HANGUL SYLLABLE RIEUL U SSANGSIOS + {0x8FAF, 0xB8FE}, //2591 #HANGUL SYLLABLE RIEUL U CIEUC + {0x8FB0, 0xB8FF}, //2592 #HANGUL SYLLABLE RIEUL U CHIEUCH + {0x8FB1, 0xB900}, //2593 #HANGUL SYLLABLE RIEUL U KHIEUKH + {0x8FB2, 0xB901}, //2594 #HANGUL SYLLABLE RIEUL U THIEUTH + {0x8FB3, 0xB902}, //2595 #HANGUL SYLLABLE RIEUL U PHIEUPH + {0x8FB4, 0xB903}, //2596 #HANGUL SYLLABLE RIEUL U HIEUH + {0x8FB5, 0xB905}, //2597 #HANGUL SYLLABLE RIEUL WEO KIYEOK + {0x8FB6, 0xB906}, //2598 #HANGUL SYLLABLE RIEUL WEO SSANGKIYEOK + {0x8FB7, 0xB907}, //2599 #HANGUL SYLLABLE RIEUL WEO KIYEOKSIOS + {0x8FB8, 0xB908}, //2600 #HANGUL SYLLABLE RIEUL WEO NIEUN + {0x8FB9, 0xB909}, //2601 #HANGUL SYLLABLE RIEUL WEO NIEUNCIEUC + {0x8FBA, 0xB90A}, //2602 #HANGUL SYLLABLE RIEUL WEO NIEUNHIEUH + {0x8FBB, 0xB90B}, //2603 #HANGUL SYLLABLE RIEUL WEO TIKEUT + {0x8FBC, 0xB90C}, //2604 #HANGUL SYLLABLE RIEUL WEO RIEUL + {0x8FBD, 0xB90D}, //2605 #HANGUL SYLLABLE RIEUL WEO RIEULKIYEOK + {0x8FBE, 0xB90E}, //2606 #HANGUL SYLLABLE RIEUL WEO RIEULMIEUM + {0x8FBF, 0xB90F}, //2607 #HANGUL SYLLABLE RIEUL WEO RIEULPIEUP + {0x8FC0, 0xB910}, //2608 #HANGUL SYLLABLE RIEUL WEO RIEULSIOS + {0x8FC1, 0xB911}, //2609 #HANGUL SYLLABLE RIEUL WEO RIEULTHIEUTH + {0x8FC2, 0xB912}, //2610 #HANGUL SYLLABLE RIEUL WEO RIEULPHIEUPH + {0x8FC3, 0xB913}, //2611 #HANGUL SYLLABLE RIEUL WEO RIEULHIEUH + {0x8FC4, 0xB914}, //2612 #HANGUL SYLLABLE RIEUL WEO MIEUM + {0x8FC5, 0xB915}, //2613 #HANGUL SYLLABLE RIEUL WEO PIEUP + {0x8FC6, 0xB916}, //2614 #HANGUL SYLLABLE RIEUL WEO PIEUPSIOS + {0x8FC7, 0xB917}, //2615 #HANGUL SYLLABLE RIEUL WEO SIOS + {0x8FC8, 0xB919}, //2616 #HANGUL SYLLABLE RIEUL WEO IEUNG + {0x8FC9, 0xB91A}, //2617 #HANGUL SYLLABLE RIEUL WEO CIEUC + {0x8FCA, 0xB91B}, //2618 #HANGUL SYLLABLE RIEUL WEO CHIEUCH + {0x8FCB, 0xB91C}, //2619 #HANGUL SYLLABLE RIEUL WEO KHIEUKH + {0x8FCC, 0xB91D}, //2620 #HANGUL SYLLABLE RIEUL WEO THIEUTH + {0x8FCD, 0xB91E}, //2621 #HANGUL SYLLABLE RIEUL WEO PHIEUPH + {0x8FCE, 0xB91F}, //2622 #HANGUL SYLLABLE RIEUL WEO HIEUH + {0x8FCF, 0xB921}, //2623 #HANGUL SYLLABLE RIEUL WE KIYEOK + {0x8FD0, 0xB922}, //2624 #HANGUL SYLLABLE RIEUL WE SSANGKIYEOK + {0x8FD1, 0xB923}, //2625 #HANGUL SYLLABLE RIEUL WE KIYEOKSIOS + {0x8FD2, 0xB924}, //2626 #HANGUL SYLLABLE RIEUL WE NIEUN + {0x8FD3, 0xB925}, //2627 #HANGUL SYLLABLE RIEUL WE NIEUNCIEUC + {0x8FD4, 0xB926}, //2628 #HANGUL SYLLABLE RIEUL WE NIEUNHIEUH + {0x8FD5, 0xB927}, //2629 #HANGUL SYLLABLE RIEUL WE TIKEUT + {0x8FD6, 0xB928}, //2630 #HANGUL SYLLABLE RIEUL WE RIEUL + {0x8FD7, 0xB929}, //2631 #HANGUL SYLLABLE RIEUL WE RIEULKIYEOK + {0x8FD8, 0xB92A}, //2632 #HANGUL SYLLABLE RIEUL WE RIEULMIEUM + {0x8FD9, 0xB92B}, //2633 #HANGUL SYLLABLE RIEUL WE RIEULPIEUP + {0x8FDA, 0xB92C}, //2634 #HANGUL SYLLABLE RIEUL WE RIEULSIOS + {0x8FDB, 0xB92D}, //2635 #HANGUL SYLLABLE RIEUL WE RIEULTHIEUTH + {0x8FDC, 0xB92E}, //2636 #HANGUL SYLLABLE RIEUL WE RIEULPHIEUPH + {0x8FDD, 0xB92F}, //2637 #HANGUL SYLLABLE RIEUL WE RIEULHIEUH + {0x8FDE, 0xB930}, //2638 #HANGUL SYLLABLE RIEUL WE MIEUM + {0x8FDF, 0xB931}, //2639 #HANGUL SYLLABLE RIEUL WE PIEUP + {0x8FE0, 0xB932}, //2640 #HANGUL SYLLABLE RIEUL WE PIEUPSIOS + {0x8FE1, 0xB933}, //2641 #HANGUL SYLLABLE RIEUL WE SIOS + {0x8FE2, 0xB934}, //2642 #HANGUL SYLLABLE RIEUL WE SSANGSIOS + {0x8FE3, 0xB935}, //2643 #HANGUL SYLLABLE RIEUL WE IEUNG + {0x8FE4, 0xB936}, //2644 #HANGUL SYLLABLE RIEUL WE CIEUC + {0x8FE5, 0xB937}, //2645 #HANGUL SYLLABLE RIEUL WE CHIEUCH + {0x8FE6, 0xB938}, //2646 #HANGUL SYLLABLE RIEUL WE KHIEUKH + {0x8FE7, 0xB939}, //2647 #HANGUL SYLLABLE RIEUL WE THIEUTH + {0x8FE8, 0xB93A}, //2648 #HANGUL SYLLABLE RIEUL WE PHIEUPH + {0x8FE9, 0xB93B}, //2649 #HANGUL SYLLABLE RIEUL WE HIEUH + {0x8FEA, 0xB93E}, //2650 #HANGUL SYLLABLE RIEUL WI SSANGKIYEOK + {0x8FEB, 0xB93F}, //2651 #HANGUL SYLLABLE RIEUL WI KIYEOKSIOS + {0x8FEC, 0xB941}, //2652 #HANGUL SYLLABLE RIEUL WI NIEUNCIEUC + {0x8FED, 0xB942}, //2653 #HANGUL SYLLABLE RIEUL WI NIEUNHIEUH + {0x8FEE, 0xB943}, //2654 #HANGUL SYLLABLE RIEUL WI TIKEUT + {0x8FEF, 0xB945}, //2655 #HANGUL SYLLABLE RIEUL WI RIEULKIYEOK + {0x8FF0, 0xB946}, //2656 #HANGUL SYLLABLE RIEUL WI RIEULMIEUM + {0x8FF1, 0xB947}, //2657 #HANGUL SYLLABLE RIEUL WI RIEULPIEUP + {0x8FF2, 0xB948}, //2658 #HANGUL SYLLABLE RIEUL WI RIEULSIOS + {0x8FF3, 0xB949}, //2659 #HANGUL SYLLABLE RIEUL WI RIEULTHIEUTH + {0x8FF4, 0xB94A}, //2660 #HANGUL SYLLABLE RIEUL WI RIEULPHIEUPH + {0x8FF5, 0xB94B}, //2661 #HANGUL SYLLABLE RIEUL WI RIEULHIEUH + {0x8FF6, 0xB94D}, //2662 #HANGUL SYLLABLE RIEUL WI PIEUP + {0x8FF7, 0xB94E}, //2663 #HANGUL SYLLABLE RIEUL WI PIEUPSIOS + {0x8FF8, 0xB950}, //2664 #HANGUL SYLLABLE RIEUL WI SSANGSIOS + {0x8FF9, 0xB952}, //2665 #HANGUL SYLLABLE RIEUL WI CIEUC + {0x8FFA, 0xB953}, //2666 #HANGUL SYLLABLE RIEUL WI CHIEUCH + {0x8FFB, 0xB954}, //2667 #HANGUL SYLLABLE RIEUL WI KHIEUKH + {0x8FFC, 0xB955}, //2668 #HANGUL SYLLABLE RIEUL WI THIEUTH + {0x8FFD, 0xB956}, //2669 #HANGUL SYLLABLE RIEUL WI PHIEUPH + {0x8FFE, 0xB957}, //2670 #HANGUL SYLLABLE RIEUL WI HIEUH + {0x9041, 0xB95A}, //2671 #HANGUL SYLLABLE RIEUL YU SSANGKIYEOK + {0x9042, 0xB95B}, //2672 #HANGUL SYLLABLE RIEUL YU KIYEOKSIOS + {0x9043, 0xB95D}, //2673 #HANGUL SYLLABLE RIEUL YU NIEUNCIEUC + {0x9044, 0xB95E}, //2674 #HANGUL SYLLABLE RIEUL YU NIEUNHIEUH + {0x9045, 0xB95F}, //2675 #HANGUL SYLLABLE RIEUL YU TIKEUT + {0x9046, 0xB961}, //2676 #HANGUL SYLLABLE RIEUL YU RIEULKIYEOK + {0x9047, 0xB962}, //2677 #HANGUL SYLLABLE RIEUL YU RIEULMIEUM + {0x9048, 0xB963}, //2678 #HANGUL SYLLABLE RIEUL YU RIEULPIEUP + {0x9049, 0xB964}, //2679 #HANGUL SYLLABLE RIEUL YU RIEULSIOS + {0x904A, 0xB965}, //2680 #HANGUL SYLLABLE RIEUL YU RIEULTHIEUTH + {0x904B, 0xB966}, //2681 #HANGUL SYLLABLE RIEUL YU RIEULPHIEUPH + {0x904C, 0xB967}, //2682 #HANGUL SYLLABLE RIEUL YU RIEULHIEUH + {0x904D, 0xB96A}, //2683 #HANGUL SYLLABLE RIEUL YU PIEUPSIOS + {0x904E, 0xB96C}, //2684 #HANGUL SYLLABLE RIEUL YU SSANGSIOS + {0x904F, 0xB96E}, //2685 #HANGUL SYLLABLE RIEUL YU CIEUC + {0x9050, 0xB96F}, //2686 #HANGUL SYLLABLE RIEUL YU CHIEUCH + {0x9051, 0xB970}, //2687 #HANGUL SYLLABLE RIEUL YU KHIEUKH + {0x9052, 0xB971}, //2688 #HANGUL SYLLABLE RIEUL YU THIEUTH + {0x9053, 0xB972}, //2689 #HANGUL SYLLABLE RIEUL YU PHIEUPH + {0x9054, 0xB973}, //2690 #HANGUL SYLLABLE RIEUL YU HIEUH + {0x9055, 0xB976}, //2691 #HANGUL SYLLABLE RIEUL EU SSANGKIYEOK + {0x9056, 0xB977}, //2692 #HANGUL SYLLABLE RIEUL EU KIYEOKSIOS + {0x9057, 0xB979}, //2693 #HANGUL SYLLABLE RIEUL EU NIEUNCIEUC + {0x9058, 0xB97A}, //2694 #HANGUL SYLLABLE RIEUL EU NIEUNHIEUH + {0x9059, 0xB97B}, //2695 #HANGUL SYLLABLE RIEUL EU TIKEUT + {0x905A, 0xB97D}, //2696 #HANGUL SYLLABLE RIEUL EU RIEULKIYEOK + {0x9061, 0xB97E}, //2697 #HANGUL SYLLABLE RIEUL EU RIEULMIEUM + {0x9062, 0xB97F}, //2698 #HANGUL SYLLABLE RIEUL EU RIEULPIEUP + {0x9063, 0xB980}, //2699 #HANGUL SYLLABLE RIEUL EU RIEULSIOS + {0x9064, 0xB981}, //2700 #HANGUL SYLLABLE RIEUL EU RIEULTHIEUTH + {0x9065, 0xB982}, //2701 #HANGUL SYLLABLE RIEUL EU RIEULPHIEUPH + {0x9066, 0xB983}, //2702 #HANGUL SYLLABLE RIEUL EU RIEULHIEUH + {0x9067, 0xB986}, //2703 #HANGUL SYLLABLE RIEUL EU PIEUPSIOS + {0x9068, 0xB988}, //2704 #HANGUL SYLLABLE RIEUL EU SSANGSIOS + {0x9069, 0xB98B}, //2705 #HANGUL SYLLABLE RIEUL EU CHIEUCH + {0x906A, 0xB98C}, //2706 #HANGUL SYLLABLE RIEUL EU KHIEUKH + {0x906B, 0xB98F}, //2707 #HANGUL SYLLABLE RIEUL EU HIEUH + {0x906C, 0xB990}, //2708 #HANGUL SYLLABLE RIEUL YI + {0x906D, 0xB991}, //2709 #HANGUL SYLLABLE RIEUL YI KIYEOK + {0x906E, 0xB992}, //2710 #HANGUL SYLLABLE RIEUL YI SSANGKIYEOK + {0x906F, 0xB993}, //2711 #HANGUL SYLLABLE RIEUL YI KIYEOKSIOS + {0x9070, 0xB994}, //2712 #HANGUL SYLLABLE RIEUL YI NIEUN + {0x9071, 0xB995}, //2713 #HANGUL SYLLABLE RIEUL YI NIEUNCIEUC + {0x9072, 0xB996}, //2714 #HANGUL SYLLABLE RIEUL YI NIEUNHIEUH + {0x9073, 0xB997}, //2715 #HANGUL SYLLABLE RIEUL YI TIKEUT + {0x9074, 0xB998}, //2716 #HANGUL SYLLABLE RIEUL YI RIEUL + {0x9075, 0xB999}, //2717 #HANGUL SYLLABLE RIEUL YI RIEULKIYEOK + {0x9076, 0xB99A}, //2718 #HANGUL SYLLABLE RIEUL YI RIEULMIEUM + {0x9077, 0xB99B}, //2719 #HANGUL SYLLABLE RIEUL YI RIEULPIEUP + {0x9078, 0xB99C}, //2720 #HANGUL SYLLABLE RIEUL YI RIEULSIOS + {0x9079, 0xB99D}, //2721 #HANGUL SYLLABLE RIEUL YI RIEULTHIEUTH + {0x907A, 0xB99E}, //2722 #HANGUL SYLLABLE RIEUL YI RIEULPHIEUPH + {0x9081, 0xB99F}, //2723 #HANGUL SYLLABLE RIEUL YI RIEULHIEUH + {0x9082, 0xB9A0}, //2724 #HANGUL SYLLABLE RIEUL YI MIEUM + {0x9083, 0xB9A1}, //2725 #HANGUL SYLLABLE RIEUL YI PIEUP + {0x9084, 0xB9A2}, //2726 #HANGUL SYLLABLE RIEUL YI PIEUPSIOS + {0x9085, 0xB9A3}, //2727 #HANGUL SYLLABLE RIEUL YI SIOS + {0x9086, 0xB9A4}, //2728 #HANGUL SYLLABLE RIEUL YI SSANGSIOS + {0x9087, 0xB9A5}, //2729 #HANGUL SYLLABLE RIEUL YI IEUNG + {0x9088, 0xB9A6}, //2730 #HANGUL SYLLABLE RIEUL YI CIEUC + {0x9089, 0xB9A7}, //2731 #HANGUL SYLLABLE RIEUL YI CHIEUCH + {0x908A, 0xB9A8}, //2732 #HANGUL SYLLABLE RIEUL YI KHIEUKH + {0x908B, 0xB9A9}, //2733 #HANGUL SYLLABLE RIEUL YI THIEUTH + {0x908C, 0xB9AA}, //2734 #HANGUL SYLLABLE RIEUL YI PHIEUPH + {0x908D, 0xB9AB}, //2735 #HANGUL SYLLABLE RIEUL YI HIEUH + {0x908E, 0xB9AE}, //2736 #HANGUL SYLLABLE RIEUL I SSANGKIYEOK + {0x908F, 0xB9AF}, //2737 #HANGUL SYLLABLE RIEUL I KIYEOKSIOS + {0x9090, 0xB9B1}, //2738 #HANGUL SYLLABLE RIEUL I NIEUNCIEUC + {0x9091, 0xB9B2}, //2739 #HANGUL SYLLABLE RIEUL I NIEUNHIEUH + {0x9092, 0xB9B3}, //2740 #HANGUL SYLLABLE RIEUL I TIKEUT + {0x9093, 0xB9B5}, //2741 #HANGUL SYLLABLE RIEUL I RIEULKIYEOK + {0x9094, 0xB9B6}, //2742 #HANGUL SYLLABLE RIEUL I RIEULMIEUM + {0x9095, 0xB9B7}, //2743 #HANGUL SYLLABLE RIEUL I RIEULPIEUP + {0x9096, 0xB9B8}, //2744 #HANGUL SYLLABLE RIEUL I RIEULSIOS + {0x9097, 0xB9B9}, //2745 #HANGUL SYLLABLE RIEUL I RIEULTHIEUTH + {0x9098, 0xB9BA}, //2746 #HANGUL SYLLABLE RIEUL I RIEULPHIEUPH + {0x9099, 0xB9BB}, //2747 #HANGUL SYLLABLE RIEUL I RIEULHIEUH + {0x909A, 0xB9BE}, //2748 #HANGUL SYLLABLE RIEUL I PIEUPSIOS + {0x909B, 0xB9C0}, //2749 #HANGUL SYLLABLE RIEUL I SSANGSIOS + {0x909C, 0xB9C2}, //2750 #HANGUL SYLLABLE RIEUL I CIEUC + {0x909D, 0xB9C3}, //2751 #HANGUL SYLLABLE RIEUL I CHIEUCH + {0x909E, 0xB9C4}, //2752 #HANGUL SYLLABLE RIEUL I KHIEUKH + {0x909F, 0xB9C5}, //2753 #HANGUL SYLLABLE RIEUL I THIEUTH + {0x90A0, 0xB9C6}, //2754 #HANGUL SYLLABLE RIEUL I PHIEUPH + {0x90A1, 0xB9C7}, //2755 #HANGUL SYLLABLE RIEUL I HIEUH + {0x90A2, 0xB9CA}, //2756 #HANGUL SYLLABLE MIEUM A SSANGKIYEOK + {0x90A3, 0xB9CB}, //2757 #HANGUL SYLLABLE MIEUM A KIYEOKSIOS + {0x90A4, 0xB9CD}, //2758 #HANGUL SYLLABLE MIEUM A NIEUNCIEUC + {0x90A5, 0xB9D3}, //2759 #HANGUL SYLLABLE MIEUM A RIEULPIEUP + {0x90A6, 0xB9D4}, //2760 #HANGUL SYLLABLE MIEUM A RIEULSIOS + {0x90A7, 0xB9D5}, //2761 #HANGUL SYLLABLE MIEUM A RIEULTHIEUTH + {0x90A8, 0xB9D6}, //2762 #HANGUL SYLLABLE MIEUM A RIEULPHIEUPH + {0x90A9, 0xB9D7}, //2763 #HANGUL SYLLABLE MIEUM A RIEULHIEUH + {0x90AA, 0xB9DA}, //2764 #HANGUL SYLLABLE MIEUM A PIEUPSIOS + {0x90AB, 0xB9DC}, //2765 #HANGUL SYLLABLE MIEUM A SSANGSIOS + {0x90AC, 0xB9DF}, //2766 #HANGUL SYLLABLE MIEUM A CHIEUCH + {0x90AD, 0xB9E0}, //2767 #HANGUL SYLLABLE MIEUM A KHIEUKH + {0x90AE, 0xB9E2}, //2768 #HANGUL SYLLABLE MIEUM A PHIEUPH + {0x90AF, 0xB9E6}, //2769 #HANGUL SYLLABLE MIEUM AE SSANGKIYEOK + {0x90B0, 0xB9E7}, //2770 #HANGUL SYLLABLE MIEUM AE KIYEOKSIOS + {0x90B1, 0xB9E9}, //2771 #HANGUL SYLLABLE MIEUM AE NIEUNCIEUC + {0x90B2, 0xB9EA}, //2772 #HANGUL SYLLABLE MIEUM AE NIEUNHIEUH + {0x90B3, 0xB9EB}, //2773 #HANGUL SYLLABLE MIEUM AE TIKEUT + {0x90B4, 0xB9ED}, //2774 #HANGUL SYLLABLE MIEUM AE RIEULKIYEOK + {0x90B5, 0xB9EE}, //2775 #HANGUL SYLLABLE MIEUM AE RIEULMIEUM + {0x90B6, 0xB9EF}, //2776 #HANGUL SYLLABLE MIEUM AE RIEULPIEUP + {0x90B7, 0xB9F0}, //2777 #HANGUL SYLLABLE MIEUM AE RIEULSIOS + {0x90B8, 0xB9F1}, //2778 #HANGUL SYLLABLE MIEUM AE RIEULTHIEUTH + {0x90B9, 0xB9F2}, //2779 #HANGUL SYLLABLE MIEUM AE RIEULPHIEUPH + {0x90BA, 0xB9F3}, //2780 #HANGUL SYLLABLE MIEUM AE RIEULHIEUH + {0x90BB, 0xB9F6}, //2781 #HANGUL SYLLABLE MIEUM AE PIEUPSIOS + {0x90BC, 0xB9FB}, //2782 #HANGUL SYLLABLE MIEUM AE CHIEUCH + {0x90BD, 0xB9FC}, //2783 #HANGUL SYLLABLE MIEUM AE KHIEUKH + {0x90BE, 0xB9FD}, //2784 #HANGUL SYLLABLE MIEUM AE THIEUTH + {0x90BF, 0xB9FE}, //2785 #HANGUL SYLLABLE MIEUM AE PHIEUPH + {0x90C0, 0xB9FF}, //2786 #HANGUL SYLLABLE MIEUM AE HIEUH + {0x90C1, 0xBA02}, //2787 #HANGUL SYLLABLE MIEUM YA SSANGKIYEOK + {0x90C2, 0xBA03}, //2788 #HANGUL SYLLABLE MIEUM YA KIYEOKSIOS + {0x90C3, 0xBA04}, //2789 #HANGUL SYLLABLE MIEUM YA NIEUN + {0x90C4, 0xBA05}, //2790 #HANGUL SYLLABLE MIEUM YA NIEUNCIEUC + {0x90C5, 0xBA06}, //2791 #HANGUL SYLLABLE MIEUM YA NIEUNHIEUH + {0x90C6, 0xBA07}, //2792 #HANGUL SYLLABLE MIEUM YA TIKEUT + {0x90C7, 0xBA09}, //2793 #HANGUL SYLLABLE MIEUM YA RIEULKIYEOK + {0x90C8, 0xBA0A}, //2794 #HANGUL SYLLABLE MIEUM YA RIEULMIEUM + {0x90C9, 0xBA0B}, //2795 #HANGUL SYLLABLE MIEUM YA RIEULPIEUP + {0x90CA, 0xBA0C}, //2796 #HANGUL SYLLABLE MIEUM YA RIEULSIOS + {0x90CB, 0xBA0D}, //2797 #HANGUL SYLLABLE MIEUM YA RIEULTHIEUTH + {0x90CC, 0xBA0E}, //2798 #HANGUL SYLLABLE MIEUM YA RIEULPHIEUPH + {0x90CD, 0xBA0F}, //2799 #HANGUL SYLLABLE MIEUM YA RIEULHIEUH + {0x90CE, 0xBA10}, //2800 #HANGUL SYLLABLE MIEUM YA MIEUM + {0x90CF, 0xBA11}, //2801 #HANGUL SYLLABLE MIEUM YA PIEUP + {0x90D0, 0xBA12}, //2802 #HANGUL SYLLABLE MIEUM YA PIEUPSIOS + {0x90D1, 0xBA13}, //2803 #HANGUL SYLLABLE MIEUM YA SIOS + {0x90D2, 0xBA14}, //2804 #HANGUL SYLLABLE MIEUM YA SSANGSIOS + {0x90D3, 0xBA16}, //2805 #HANGUL SYLLABLE MIEUM YA CIEUC + {0x90D4, 0xBA17}, //2806 #HANGUL SYLLABLE MIEUM YA CHIEUCH + {0x90D5, 0xBA18}, //2807 #HANGUL SYLLABLE MIEUM YA KHIEUKH + {0x90D6, 0xBA19}, //2808 #HANGUL SYLLABLE MIEUM YA THIEUTH + {0x90D7, 0xBA1A}, //2809 #HANGUL SYLLABLE MIEUM YA PHIEUPH + {0x90D8, 0xBA1B}, //2810 #HANGUL SYLLABLE MIEUM YA HIEUH + {0x90D9, 0xBA1C}, //2811 #HANGUL SYLLABLE MIEUM YAE + {0x90DA, 0xBA1D}, //2812 #HANGUL SYLLABLE MIEUM YAE KIYEOK + {0x90DB, 0xBA1E}, //2813 #HANGUL SYLLABLE MIEUM YAE SSANGKIYEOK + {0x90DC, 0xBA1F}, //2814 #HANGUL SYLLABLE MIEUM YAE KIYEOKSIOS + {0x90DD, 0xBA20}, //2815 #HANGUL SYLLABLE MIEUM YAE NIEUN + {0x90DE, 0xBA21}, //2816 #HANGUL SYLLABLE MIEUM YAE NIEUNCIEUC + {0x90DF, 0xBA22}, //2817 #HANGUL SYLLABLE MIEUM YAE NIEUNHIEUH + {0x90E0, 0xBA23}, //2818 #HANGUL SYLLABLE MIEUM YAE TIKEUT + {0x90E1, 0xBA24}, //2819 #HANGUL SYLLABLE MIEUM YAE RIEUL + {0x90E2, 0xBA25}, //2820 #HANGUL SYLLABLE MIEUM YAE RIEULKIYEOK + {0x90E3, 0xBA26}, //2821 #HANGUL SYLLABLE MIEUM YAE RIEULMIEUM + {0x90E4, 0xBA27}, //2822 #HANGUL SYLLABLE MIEUM YAE RIEULPIEUP + {0x90E5, 0xBA28}, //2823 #HANGUL SYLLABLE MIEUM YAE RIEULSIOS + {0x90E6, 0xBA29}, //2824 #HANGUL SYLLABLE MIEUM YAE RIEULTHIEUTH + {0x90E7, 0xBA2A}, //2825 #HANGUL SYLLABLE MIEUM YAE RIEULPHIEUPH + {0x90E8, 0xBA2B}, //2826 #HANGUL SYLLABLE MIEUM YAE RIEULHIEUH + {0x90E9, 0xBA2C}, //2827 #HANGUL SYLLABLE MIEUM YAE MIEUM + {0x90EA, 0xBA2D}, //2828 #HANGUL SYLLABLE MIEUM YAE PIEUP + {0x90EB, 0xBA2E}, //2829 #HANGUL SYLLABLE MIEUM YAE PIEUPSIOS + {0x90EC, 0xBA2F}, //2830 #HANGUL SYLLABLE MIEUM YAE SIOS + {0x90ED, 0xBA30}, //2831 #HANGUL SYLLABLE MIEUM YAE SSANGSIOS + {0x90EE, 0xBA31}, //2832 #HANGUL SYLLABLE MIEUM YAE IEUNG + {0x90EF, 0xBA32}, //2833 #HANGUL SYLLABLE MIEUM YAE CIEUC + {0x90F0, 0xBA33}, //2834 #HANGUL SYLLABLE MIEUM YAE CHIEUCH + {0x90F1, 0xBA34}, //2835 #HANGUL SYLLABLE MIEUM YAE KHIEUKH + {0x90F2, 0xBA35}, //2836 #HANGUL SYLLABLE MIEUM YAE THIEUTH + {0x90F3, 0xBA36}, //2837 #HANGUL SYLLABLE MIEUM YAE PHIEUPH + {0x90F4, 0xBA37}, //2838 #HANGUL SYLLABLE MIEUM YAE HIEUH + {0x90F5, 0xBA3A}, //2839 #HANGUL SYLLABLE MIEUM EO SSANGKIYEOK + {0x90F6, 0xBA3B}, //2840 #HANGUL SYLLABLE MIEUM EO KIYEOKSIOS + {0x90F7, 0xBA3D}, //2841 #HANGUL SYLLABLE MIEUM EO NIEUNCIEUC + {0x90F8, 0xBA3E}, //2842 #HANGUL SYLLABLE MIEUM EO NIEUNHIEUH + {0x90F9, 0xBA3F}, //2843 #HANGUL SYLLABLE MIEUM EO TIKEUT + {0x90FA, 0xBA41}, //2844 #HANGUL SYLLABLE MIEUM EO RIEULKIYEOK + {0x90FB, 0xBA43}, //2845 #HANGUL SYLLABLE MIEUM EO RIEULPIEUP + {0x90FC, 0xBA44}, //2846 #HANGUL SYLLABLE MIEUM EO RIEULSIOS + {0x90FD, 0xBA45}, //2847 #HANGUL SYLLABLE MIEUM EO RIEULTHIEUTH + {0x90FE, 0xBA46}, //2848 #HANGUL SYLLABLE MIEUM EO RIEULPHIEUPH + {0x9141, 0xBA47}, //2849 #HANGUL SYLLABLE MIEUM EO RIEULHIEUH + {0x9142, 0xBA4A}, //2850 #HANGUL SYLLABLE MIEUM EO PIEUPSIOS + {0x9143, 0xBA4C}, //2851 #HANGUL SYLLABLE MIEUM EO SSANGSIOS + {0x9144, 0xBA4F}, //2852 #HANGUL SYLLABLE MIEUM EO CHIEUCH + {0x9145, 0xBA50}, //2853 #HANGUL SYLLABLE MIEUM EO KHIEUKH + {0x9146, 0xBA51}, //2854 #HANGUL SYLLABLE MIEUM EO THIEUTH + {0x9147, 0xBA52}, //2855 #HANGUL SYLLABLE MIEUM EO PHIEUPH + {0x9148, 0xBA56}, //2856 #HANGUL SYLLABLE MIEUM E SSANGKIYEOK + {0x9149, 0xBA57}, //2857 #HANGUL SYLLABLE MIEUM E KIYEOKSIOS + {0x914A, 0xBA59}, //2858 #HANGUL SYLLABLE MIEUM E NIEUNCIEUC + {0x914B, 0xBA5A}, //2859 #HANGUL SYLLABLE MIEUM E NIEUNHIEUH + {0x914C, 0xBA5B}, //2860 #HANGUL SYLLABLE MIEUM E TIKEUT + {0x914D, 0xBA5D}, //2861 #HANGUL SYLLABLE MIEUM E RIEULKIYEOK + {0x914E, 0xBA5E}, //2862 #HANGUL SYLLABLE MIEUM E RIEULMIEUM + {0x914F, 0xBA5F}, //2863 #HANGUL SYLLABLE MIEUM E RIEULPIEUP + {0x9150, 0xBA60}, //2864 #HANGUL SYLLABLE MIEUM E RIEULSIOS + {0x9151, 0xBA61}, //2865 #HANGUL SYLLABLE MIEUM E RIEULTHIEUTH + {0x9152, 0xBA62}, //2866 #HANGUL SYLLABLE MIEUM E RIEULPHIEUPH + {0x9153, 0xBA63}, //2867 #HANGUL SYLLABLE MIEUM E RIEULHIEUH + {0x9154, 0xBA66}, //2868 #HANGUL SYLLABLE MIEUM E PIEUPSIOS + {0x9155, 0xBA6A}, //2869 #HANGUL SYLLABLE MIEUM E CIEUC + {0x9156, 0xBA6B}, //2870 #HANGUL SYLLABLE MIEUM E CHIEUCH + {0x9157, 0xBA6C}, //2871 #HANGUL SYLLABLE MIEUM E KHIEUKH + {0x9158, 0xBA6D}, //2872 #HANGUL SYLLABLE MIEUM E THIEUTH + {0x9159, 0xBA6E}, //2873 #HANGUL SYLLABLE MIEUM E PHIEUPH + {0x915A, 0xBA6F}, //2874 #HANGUL SYLLABLE MIEUM E HIEUH + {0x9161, 0xBA72}, //2875 #HANGUL SYLLABLE MIEUM YEO SSANGKIYEOK + {0x9162, 0xBA73}, //2876 #HANGUL SYLLABLE MIEUM YEO KIYEOKSIOS + {0x9163, 0xBA75}, //2877 #HANGUL SYLLABLE MIEUM YEO NIEUNCIEUC + {0x9164, 0xBA76}, //2878 #HANGUL SYLLABLE MIEUM YEO NIEUNHIEUH + {0x9165, 0xBA77}, //2879 #HANGUL SYLLABLE MIEUM YEO TIKEUT + {0x9166, 0xBA79}, //2880 #HANGUL SYLLABLE MIEUM YEO RIEULKIYEOK + {0x9167, 0xBA7A}, //2881 #HANGUL SYLLABLE MIEUM YEO RIEULMIEUM + {0x9168, 0xBA7B}, //2882 #HANGUL SYLLABLE MIEUM YEO RIEULPIEUP + {0x9169, 0xBA7C}, //2883 #HANGUL SYLLABLE MIEUM YEO RIEULSIOS + {0x916A, 0xBA7D}, //2884 #HANGUL SYLLABLE MIEUM YEO RIEULTHIEUTH + {0x916B, 0xBA7E}, //2885 #HANGUL SYLLABLE MIEUM YEO RIEULPHIEUPH + {0x916C, 0xBA7F}, //2886 #HANGUL SYLLABLE MIEUM YEO RIEULHIEUH + {0x916D, 0xBA80}, //2887 #HANGUL SYLLABLE MIEUM YEO MIEUM + {0x916E, 0xBA81}, //2888 #HANGUL SYLLABLE MIEUM YEO PIEUP + {0x916F, 0xBA82}, //2889 #HANGUL SYLLABLE MIEUM YEO PIEUPSIOS + {0x9170, 0xBA86}, //2890 #HANGUL SYLLABLE MIEUM YEO CIEUC + {0x9171, 0xBA88}, //2891 #HANGUL SYLLABLE MIEUM YEO KHIEUKH + {0x9172, 0xBA89}, //2892 #HANGUL SYLLABLE MIEUM YEO THIEUTH + {0x9173, 0xBA8A}, //2893 #HANGUL SYLLABLE MIEUM YEO PHIEUPH + {0x9174, 0xBA8B}, //2894 #HANGUL SYLLABLE MIEUM YEO HIEUH + {0x9175, 0xBA8D}, //2895 #HANGUL SYLLABLE MIEUM YE KIYEOK + {0x9176, 0xBA8E}, //2896 #HANGUL SYLLABLE MIEUM YE SSANGKIYEOK + {0x9177, 0xBA8F}, //2897 #HANGUL SYLLABLE MIEUM YE KIYEOKSIOS + {0x9178, 0xBA90}, //2898 #HANGUL SYLLABLE MIEUM YE NIEUN + {0x9179, 0xBA91}, //2899 #HANGUL SYLLABLE MIEUM YE NIEUNCIEUC + {0x917A, 0xBA92}, //2900 #HANGUL SYLLABLE MIEUM YE NIEUNHIEUH + {0x9181, 0xBA93}, //2901 #HANGUL SYLLABLE MIEUM YE TIKEUT + {0x9182, 0xBA94}, //2902 #HANGUL SYLLABLE MIEUM YE RIEUL + {0x9183, 0xBA95}, //2903 #HANGUL SYLLABLE MIEUM YE RIEULKIYEOK + {0x9184, 0xBA96}, //2904 #HANGUL SYLLABLE MIEUM YE RIEULMIEUM + {0x9185, 0xBA97}, //2905 #HANGUL SYLLABLE MIEUM YE RIEULPIEUP + {0x9186, 0xBA98}, //2906 #HANGUL SYLLABLE MIEUM YE RIEULSIOS + {0x9187, 0xBA99}, //2907 #HANGUL SYLLABLE MIEUM YE RIEULTHIEUTH + {0x9188, 0xBA9A}, //2908 #HANGUL SYLLABLE MIEUM YE RIEULPHIEUPH + {0x9189, 0xBA9B}, //2909 #HANGUL SYLLABLE MIEUM YE RIEULHIEUH + {0x918A, 0xBA9C}, //2910 #HANGUL SYLLABLE MIEUM YE MIEUM + {0x918B, 0xBA9D}, //2911 #HANGUL SYLLABLE MIEUM YE PIEUP + {0x918C, 0xBA9E}, //2912 #HANGUL SYLLABLE MIEUM YE PIEUPSIOS + {0x918D, 0xBA9F}, //2913 #HANGUL SYLLABLE MIEUM YE SIOS + {0x918E, 0xBAA0}, //2914 #HANGUL SYLLABLE MIEUM YE SSANGSIOS + {0x918F, 0xBAA1}, //2915 #HANGUL SYLLABLE MIEUM YE IEUNG + {0x9190, 0xBAA2}, //2916 #HANGUL SYLLABLE MIEUM YE CIEUC + {0x9191, 0xBAA3}, //2917 #HANGUL SYLLABLE MIEUM YE CHIEUCH + {0x9192, 0xBAA4}, //2918 #HANGUL SYLLABLE MIEUM YE KHIEUKH + {0x9193, 0xBAA5}, //2919 #HANGUL SYLLABLE MIEUM YE THIEUTH + {0x9194, 0xBAA6}, //2920 #HANGUL SYLLABLE MIEUM YE PHIEUPH + {0x9195, 0xBAA7}, //2921 #HANGUL SYLLABLE MIEUM YE HIEUH + {0x9196, 0xBAAA}, //2922 #HANGUL SYLLABLE MIEUM O SSANGKIYEOK + {0x9197, 0xBAAD}, //2923 #HANGUL SYLLABLE MIEUM O NIEUNCIEUC + {0x9198, 0xBAAE}, //2924 #HANGUL SYLLABLE MIEUM O NIEUNHIEUH + {0x9199, 0xBAAF}, //2925 #HANGUL SYLLABLE MIEUM O TIKEUT + {0x919A, 0xBAB1}, //2926 #HANGUL SYLLABLE MIEUM O RIEULKIYEOK + {0x919B, 0xBAB3}, //2927 #HANGUL SYLLABLE MIEUM O RIEULPIEUP + {0x919C, 0xBAB4}, //2928 #HANGUL SYLLABLE MIEUM O RIEULSIOS + {0x919D, 0xBAB5}, //2929 #HANGUL SYLLABLE MIEUM O RIEULTHIEUTH + {0x919E, 0xBAB6}, //2930 #HANGUL SYLLABLE MIEUM O RIEULPHIEUPH + {0x919F, 0xBAB7}, //2931 #HANGUL SYLLABLE MIEUM O RIEULHIEUH + {0x91A0, 0xBABA}, //2932 #HANGUL SYLLABLE MIEUM O PIEUPSIOS + {0x91A1, 0xBABC}, //2933 #HANGUL SYLLABLE MIEUM O SSANGSIOS + {0x91A2, 0xBABE}, //2934 #HANGUL SYLLABLE MIEUM O CIEUC + {0x91A3, 0xBABF}, //2935 #HANGUL SYLLABLE MIEUM O CHIEUCH + {0x91A4, 0xBAC0}, //2936 #HANGUL SYLLABLE MIEUM O KHIEUKH + {0x91A5, 0xBAC1}, //2937 #HANGUL SYLLABLE MIEUM O THIEUTH + {0x91A6, 0xBAC2}, //2938 #HANGUL SYLLABLE MIEUM O PHIEUPH + {0x91A7, 0xBAC3}, //2939 #HANGUL SYLLABLE MIEUM O HIEUH + {0x91A8, 0xBAC5}, //2940 #HANGUL SYLLABLE MIEUM WA KIYEOK + {0x91A9, 0xBAC6}, //2941 #HANGUL SYLLABLE MIEUM WA SSANGKIYEOK + {0x91AA, 0xBAC7}, //2942 #HANGUL SYLLABLE MIEUM WA KIYEOKSIOS + {0x91AB, 0xBAC9}, //2943 #HANGUL SYLLABLE MIEUM WA NIEUNCIEUC + {0x91AC, 0xBACA}, //2944 #HANGUL SYLLABLE MIEUM WA NIEUNHIEUH + {0x91AD, 0xBACB}, //2945 #HANGUL SYLLABLE MIEUM WA TIKEUT + {0x91AE, 0xBACC}, //2946 #HANGUL SYLLABLE MIEUM WA RIEUL + {0x91AF, 0xBACD}, //2947 #HANGUL SYLLABLE MIEUM WA RIEULKIYEOK + {0x91B0, 0xBACE}, //2948 #HANGUL SYLLABLE MIEUM WA RIEULMIEUM + {0x91B1, 0xBACF}, //2949 #HANGUL SYLLABLE MIEUM WA RIEULPIEUP + {0x91B2, 0xBAD0}, //2950 #HANGUL SYLLABLE MIEUM WA RIEULSIOS + {0x91B3, 0xBAD1}, //2951 #HANGUL SYLLABLE MIEUM WA RIEULTHIEUTH + {0x91B4, 0xBAD2}, //2952 #HANGUL SYLLABLE MIEUM WA RIEULPHIEUPH + {0x91B5, 0xBAD3}, //2953 #HANGUL SYLLABLE MIEUM WA RIEULHIEUH + {0x91B6, 0xBAD4}, //2954 #HANGUL SYLLABLE MIEUM WA MIEUM + {0x91B7, 0xBAD5}, //2955 #HANGUL SYLLABLE MIEUM WA PIEUP + {0x91B8, 0xBAD6}, //2956 #HANGUL SYLLABLE MIEUM WA PIEUPSIOS + {0x91B9, 0xBAD7}, //2957 #HANGUL SYLLABLE MIEUM WA SIOS + {0x91BA, 0xBADA}, //2958 #HANGUL SYLLABLE MIEUM WA CIEUC + {0x91BB, 0xBADB}, //2959 #HANGUL SYLLABLE MIEUM WA CHIEUCH + {0x91BC, 0xBADC}, //2960 #HANGUL SYLLABLE MIEUM WA KHIEUKH + {0x91BD, 0xBADD}, //2961 #HANGUL SYLLABLE MIEUM WA THIEUTH + {0x91BE, 0xBADE}, //2962 #HANGUL SYLLABLE MIEUM WA PHIEUPH + {0x91BF, 0xBADF}, //2963 #HANGUL SYLLABLE MIEUM WA HIEUH + {0x91C0, 0xBAE0}, //2964 #HANGUL SYLLABLE MIEUM WAE + {0x91C1, 0xBAE1}, //2965 #HANGUL SYLLABLE MIEUM WAE KIYEOK + {0x91C2, 0xBAE2}, //2966 #HANGUL SYLLABLE MIEUM WAE SSANGKIYEOK + {0x91C3, 0xBAE3}, //2967 #HANGUL SYLLABLE MIEUM WAE KIYEOKSIOS + {0x91C4, 0xBAE4}, //2968 #HANGUL SYLLABLE MIEUM WAE NIEUN + {0x91C5, 0xBAE5}, //2969 #HANGUL SYLLABLE MIEUM WAE NIEUNCIEUC + {0x91C6, 0xBAE6}, //2970 #HANGUL SYLLABLE MIEUM WAE NIEUNHIEUH + {0x91C7, 0xBAE7}, //2971 #HANGUL SYLLABLE MIEUM WAE TIKEUT + {0x91C8, 0xBAE8}, //2972 #HANGUL SYLLABLE MIEUM WAE RIEUL + {0x91C9, 0xBAE9}, //2973 #HANGUL SYLLABLE MIEUM WAE RIEULKIYEOK + {0x91CA, 0xBAEA}, //2974 #HANGUL SYLLABLE MIEUM WAE RIEULMIEUM + {0x91CB, 0xBAEB}, //2975 #HANGUL SYLLABLE MIEUM WAE RIEULPIEUP + {0x91CC, 0xBAEC}, //2976 #HANGUL SYLLABLE MIEUM WAE RIEULSIOS + {0x91CD, 0xBAED}, //2977 #HANGUL SYLLABLE MIEUM WAE RIEULTHIEUTH + {0x91CE, 0xBAEE}, //2978 #HANGUL SYLLABLE MIEUM WAE RIEULPHIEUPH + {0x91CF, 0xBAEF}, //2979 #HANGUL SYLLABLE MIEUM WAE RIEULHIEUH + {0x91D0, 0xBAF0}, //2980 #HANGUL SYLLABLE MIEUM WAE MIEUM + {0x91D1, 0xBAF1}, //2981 #HANGUL SYLLABLE MIEUM WAE PIEUP + {0x91D2, 0xBAF2}, //2982 #HANGUL SYLLABLE MIEUM WAE PIEUPSIOS + {0x91D3, 0xBAF3}, //2983 #HANGUL SYLLABLE MIEUM WAE SIOS + {0x91D4, 0xBAF4}, //2984 #HANGUL SYLLABLE MIEUM WAE SSANGSIOS + {0x91D5, 0xBAF5}, //2985 #HANGUL SYLLABLE MIEUM WAE IEUNG + {0x91D6, 0xBAF6}, //2986 #HANGUL SYLLABLE MIEUM WAE CIEUC + {0x91D7, 0xBAF7}, //2987 #HANGUL SYLLABLE MIEUM WAE CHIEUCH + {0x91D8, 0xBAF8}, //2988 #HANGUL SYLLABLE MIEUM WAE KHIEUKH + {0x91D9, 0xBAF9}, //2989 #HANGUL SYLLABLE MIEUM WAE THIEUTH + {0x91DA, 0xBAFA}, //2990 #HANGUL SYLLABLE MIEUM WAE PHIEUPH + {0x91DB, 0xBAFB}, //2991 #HANGUL SYLLABLE MIEUM WAE HIEUH + {0x91DC, 0xBAFD}, //2992 #HANGUL SYLLABLE MIEUM OE KIYEOK + {0x91DD, 0xBAFE}, //2993 #HANGUL SYLLABLE MIEUM OE SSANGKIYEOK + {0x91DE, 0xBAFF}, //2994 #HANGUL SYLLABLE MIEUM OE KIYEOKSIOS + {0x91DF, 0xBB01}, //2995 #HANGUL SYLLABLE MIEUM OE NIEUNCIEUC + {0x91E0, 0xBB02}, //2996 #HANGUL SYLLABLE MIEUM OE NIEUNHIEUH + {0x91E1, 0xBB03}, //2997 #HANGUL SYLLABLE MIEUM OE TIKEUT + {0x91E2, 0xBB05}, //2998 #HANGUL SYLLABLE MIEUM OE RIEULKIYEOK + {0x91E3, 0xBB06}, //2999 #HANGUL SYLLABLE MIEUM OE RIEULMIEUM + {0x91E4, 0xBB07}, //3000 #HANGUL SYLLABLE MIEUM OE RIEULPIEUP + {0x91E5, 0xBB08}, //3001 #HANGUL SYLLABLE MIEUM OE RIEULSIOS + {0x91E6, 0xBB09}, //3002 #HANGUL SYLLABLE MIEUM OE RIEULTHIEUTH + {0x91E7, 0xBB0A}, //3003 #HANGUL SYLLABLE MIEUM OE RIEULPHIEUPH + {0x91E8, 0xBB0B}, //3004 #HANGUL SYLLABLE MIEUM OE RIEULHIEUH + {0x91E9, 0xBB0C}, //3005 #HANGUL SYLLABLE MIEUM OE MIEUM + {0x91EA, 0xBB0E}, //3006 #HANGUL SYLLABLE MIEUM OE PIEUPSIOS + {0x91EB, 0xBB10}, //3007 #HANGUL SYLLABLE MIEUM OE SSANGSIOS + {0x91EC, 0xBB12}, //3008 #HANGUL SYLLABLE MIEUM OE CIEUC + {0x91ED, 0xBB13}, //3009 #HANGUL SYLLABLE MIEUM OE CHIEUCH + {0x91EE, 0xBB14}, //3010 #HANGUL SYLLABLE MIEUM OE KHIEUKH + {0x91EF, 0xBB15}, //3011 #HANGUL SYLLABLE MIEUM OE THIEUTH + {0x91F0, 0xBB16}, //3012 #HANGUL SYLLABLE MIEUM OE PHIEUPH + {0x91F1, 0xBB17}, //3013 #HANGUL SYLLABLE MIEUM OE HIEUH + {0x91F2, 0xBB19}, //3014 #HANGUL SYLLABLE MIEUM YO KIYEOK + {0x91F3, 0xBB1A}, //3015 #HANGUL SYLLABLE MIEUM YO SSANGKIYEOK + {0x91F4, 0xBB1B}, //3016 #HANGUL SYLLABLE MIEUM YO KIYEOKSIOS + {0x91F5, 0xBB1D}, //3017 #HANGUL SYLLABLE MIEUM YO NIEUNCIEUC + {0x91F6, 0xBB1E}, //3018 #HANGUL SYLLABLE MIEUM YO NIEUNHIEUH + {0x91F7, 0xBB1F}, //3019 #HANGUL SYLLABLE MIEUM YO TIKEUT + {0x91F8, 0xBB21}, //3020 #HANGUL SYLLABLE MIEUM YO RIEULKIYEOK + {0x91F9, 0xBB22}, //3021 #HANGUL SYLLABLE MIEUM YO RIEULMIEUM + {0x91FA, 0xBB23}, //3022 #HANGUL SYLLABLE MIEUM YO RIEULPIEUP + {0x91FB, 0xBB24}, //3023 #HANGUL SYLLABLE MIEUM YO RIEULSIOS + {0x91FC, 0xBB25}, //3024 #HANGUL SYLLABLE MIEUM YO RIEULTHIEUTH + {0x91FD, 0xBB26}, //3025 #HANGUL SYLLABLE MIEUM YO RIEULPHIEUPH + {0x91FE, 0xBB27}, //3026 #HANGUL SYLLABLE MIEUM YO RIEULHIEUH + {0x9241, 0xBB28}, //3027 #HANGUL SYLLABLE MIEUM YO MIEUM + {0x9242, 0xBB2A}, //3028 #HANGUL SYLLABLE MIEUM YO PIEUPSIOS + {0x9243, 0xBB2C}, //3029 #HANGUL SYLLABLE MIEUM YO SSANGSIOS + {0x9244, 0xBB2D}, //3030 #HANGUL SYLLABLE MIEUM YO IEUNG + {0x9245, 0xBB2E}, //3031 #HANGUL SYLLABLE MIEUM YO CIEUC + {0x9246, 0xBB2F}, //3032 #HANGUL SYLLABLE MIEUM YO CHIEUCH + {0x9247, 0xBB30}, //3033 #HANGUL SYLLABLE MIEUM YO KHIEUKH + {0x9248, 0xBB31}, //3034 #HANGUL SYLLABLE MIEUM YO THIEUTH + {0x9249, 0xBB32}, //3035 #HANGUL SYLLABLE MIEUM YO PHIEUPH + {0x924A, 0xBB33}, //3036 #HANGUL SYLLABLE MIEUM YO HIEUH + {0x924B, 0xBB37}, //3037 #HANGUL SYLLABLE MIEUM U KIYEOKSIOS + {0x924C, 0xBB39}, //3038 #HANGUL SYLLABLE MIEUM U NIEUNCIEUC + {0x924D, 0xBB3A}, //3039 #HANGUL SYLLABLE MIEUM U NIEUNHIEUH + {0x924E, 0xBB3F}, //3040 #HANGUL SYLLABLE MIEUM U RIEULPIEUP + {0x924F, 0xBB40}, //3041 #HANGUL SYLLABLE MIEUM U RIEULSIOS + {0x9250, 0xBB41}, //3042 #HANGUL SYLLABLE MIEUM U RIEULTHIEUTH + {0x9251, 0xBB42}, //3043 #HANGUL SYLLABLE MIEUM U RIEULPHIEUPH + {0x9252, 0xBB43}, //3044 #HANGUL SYLLABLE MIEUM U RIEULHIEUH + {0x9253, 0xBB46}, //3045 #HANGUL SYLLABLE MIEUM U PIEUPSIOS + {0x9254, 0xBB48}, //3046 #HANGUL SYLLABLE MIEUM U SSANGSIOS + {0x9255, 0xBB4A}, //3047 #HANGUL SYLLABLE MIEUM U CIEUC + {0x9256, 0xBB4B}, //3048 #HANGUL SYLLABLE MIEUM U CHIEUCH + {0x9257, 0xBB4C}, //3049 #HANGUL SYLLABLE MIEUM U KHIEUKH + {0x9258, 0xBB4E}, //3050 #HANGUL SYLLABLE MIEUM U PHIEUPH + {0x9259, 0xBB51}, //3051 #HANGUL SYLLABLE MIEUM WEO KIYEOK + {0x925A, 0xBB52}, //3052 #HANGUL SYLLABLE MIEUM WEO SSANGKIYEOK + {0x9261, 0xBB53}, //3053 #HANGUL SYLLABLE MIEUM WEO KIYEOKSIOS + {0x9262, 0xBB55}, //3054 #HANGUL SYLLABLE MIEUM WEO NIEUNCIEUC + {0x9263, 0xBB56}, //3055 #HANGUL SYLLABLE MIEUM WEO NIEUNHIEUH + {0x9264, 0xBB57}, //3056 #HANGUL SYLLABLE MIEUM WEO TIKEUT + {0x9265, 0xBB59}, //3057 #HANGUL SYLLABLE MIEUM WEO RIEULKIYEOK + {0x9266, 0xBB5A}, //3058 #HANGUL SYLLABLE MIEUM WEO RIEULMIEUM + {0x9267, 0xBB5B}, //3059 #HANGUL SYLLABLE MIEUM WEO RIEULPIEUP + {0x9268, 0xBB5C}, //3060 #HANGUL SYLLABLE MIEUM WEO RIEULSIOS + {0x9269, 0xBB5D}, //3061 #HANGUL SYLLABLE MIEUM WEO RIEULTHIEUTH + {0x926A, 0xBB5E}, //3062 #HANGUL SYLLABLE MIEUM WEO RIEULPHIEUPH + {0x926B, 0xBB5F}, //3063 #HANGUL SYLLABLE MIEUM WEO RIEULHIEUH + {0x926C, 0xBB60}, //3064 #HANGUL SYLLABLE MIEUM WEO MIEUM + {0x926D, 0xBB62}, //3065 #HANGUL SYLLABLE MIEUM WEO PIEUPSIOS + {0x926E, 0xBB64}, //3066 #HANGUL SYLLABLE MIEUM WEO SSANGSIOS + {0x926F, 0xBB65}, //3067 #HANGUL SYLLABLE MIEUM WEO IEUNG + {0x9270, 0xBB66}, //3068 #HANGUL SYLLABLE MIEUM WEO CIEUC + {0x9271, 0xBB67}, //3069 #HANGUL SYLLABLE MIEUM WEO CHIEUCH + {0x9272, 0xBB68}, //3070 #HANGUL SYLLABLE MIEUM WEO KHIEUKH + {0x9273, 0xBB69}, //3071 #HANGUL SYLLABLE MIEUM WEO THIEUTH + {0x9274, 0xBB6A}, //3072 #HANGUL SYLLABLE MIEUM WEO PHIEUPH + {0x9275, 0xBB6B}, //3073 #HANGUL SYLLABLE MIEUM WEO HIEUH + {0x9276, 0xBB6D}, //3074 #HANGUL SYLLABLE MIEUM WE KIYEOK + {0x9277, 0xBB6E}, //3075 #HANGUL SYLLABLE MIEUM WE SSANGKIYEOK + {0x9278, 0xBB6F}, //3076 #HANGUL SYLLABLE MIEUM WE KIYEOKSIOS + {0x9279, 0xBB70}, //3077 #HANGUL SYLLABLE MIEUM WE NIEUN + {0x927A, 0xBB71}, //3078 #HANGUL SYLLABLE MIEUM WE NIEUNCIEUC + {0x9281, 0xBB72}, //3079 #HANGUL SYLLABLE MIEUM WE NIEUNHIEUH + {0x9282, 0xBB73}, //3080 #HANGUL SYLLABLE MIEUM WE TIKEUT + {0x9283, 0xBB74}, //3081 #HANGUL SYLLABLE MIEUM WE RIEUL + {0x9284, 0xBB75}, //3082 #HANGUL SYLLABLE MIEUM WE RIEULKIYEOK + {0x9285, 0xBB76}, //3083 #HANGUL SYLLABLE MIEUM WE RIEULMIEUM + {0x9286, 0xBB77}, //3084 #HANGUL SYLLABLE MIEUM WE RIEULPIEUP + {0x9287, 0xBB78}, //3085 #HANGUL SYLLABLE MIEUM WE RIEULSIOS + {0x9288, 0xBB79}, //3086 #HANGUL SYLLABLE MIEUM WE RIEULTHIEUTH + {0x9289, 0xBB7A}, //3087 #HANGUL SYLLABLE MIEUM WE RIEULPHIEUPH + {0x928A, 0xBB7B}, //3088 #HANGUL SYLLABLE MIEUM WE RIEULHIEUH + {0x928B, 0xBB7C}, //3089 #HANGUL SYLLABLE MIEUM WE MIEUM + {0x928C, 0xBB7D}, //3090 #HANGUL SYLLABLE MIEUM WE PIEUP + {0x928D, 0xBB7E}, //3091 #HANGUL SYLLABLE MIEUM WE PIEUPSIOS + {0x928E, 0xBB7F}, //3092 #HANGUL SYLLABLE MIEUM WE SIOS + {0x928F, 0xBB80}, //3093 #HANGUL SYLLABLE MIEUM WE SSANGSIOS + {0x9290, 0xBB81}, //3094 #HANGUL SYLLABLE MIEUM WE IEUNG + {0x9291, 0xBB82}, //3095 #HANGUL SYLLABLE MIEUM WE CIEUC + {0x9292, 0xBB83}, //3096 #HANGUL SYLLABLE MIEUM WE CHIEUCH + {0x9293, 0xBB84}, //3097 #HANGUL SYLLABLE MIEUM WE KHIEUKH + {0x9294, 0xBB85}, //3098 #HANGUL SYLLABLE MIEUM WE THIEUTH + {0x9295, 0xBB86}, //3099 #HANGUL SYLLABLE MIEUM WE PHIEUPH + {0x9296, 0xBB87}, //3100 #HANGUL SYLLABLE MIEUM WE HIEUH + {0x9297, 0xBB89}, //3101 #HANGUL SYLLABLE MIEUM WI KIYEOK + {0x9298, 0xBB8A}, //3102 #HANGUL SYLLABLE MIEUM WI SSANGKIYEOK + {0x9299, 0xBB8B}, //3103 #HANGUL SYLLABLE MIEUM WI KIYEOKSIOS + {0x929A, 0xBB8D}, //3104 #HANGUL SYLLABLE MIEUM WI NIEUNCIEUC + {0x929B, 0xBB8E}, //3105 #HANGUL SYLLABLE MIEUM WI NIEUNHIEUH + {0x929C, 0xBB8F}, //3106 #HANGUL SYLLABLE MIEUM WI TIKEUT + {0x929D, 0xBB91}, //3107 #HANGUL SYLLABLE MIEUM WI RIEULKIYEOK + {0x929E, 0xBB92}, //3108 #HANGUL SYLLABLE MIEUM WI RIEULMIEUM + {0x929F, 0xBB93}, //3109 #HANGUL SYLLABLE MIEUM WI RIEULPIEUP + {0x92A0, 0xBB94}, //3110 #HANGUL SYLLABLE MIEUM WI RIEULSIOS + {0x92A1, 0xBB95}, //3111 #HANGUL SYLLABLE MIEUM WI RIEULTHIEUTH + {0x92A2, 0xBB96}, //3112 #HANGUL SYLLABLE MIEUM WI RIEULPHIEUPH + {0x92A3, 0xBB97}, //3113 #HANGUL SYLLABLE MIEUM WI RIEULHIEUH + {0x92A4, 0xBB98}, //3114 #HANGUL SYLLABLE MIEUM WI MIEUM + {0x92A5, 0xBB99}, //3115 #HANGUL SYLLABLE MIEUM WI PIEUP + {0x92A6, 0xBB9A}, //3116 #HANGUL SYLLABLE MIEUM WI PIEUPSIOS + {0x92A7, 0xBB9B}, //3117 #HANGUL SYLLABLE MIEUM WI SIOS + {0x92A8, 0xBB9C}, //3118 #HANGUL SYLLABLE MIEUM WI SSANGSIOS + {0x92A9, 0xBB9D}, //3119 #HANGUL SYLLABLE MIEUM WI IEUNG + {0x92AA, 0xBB9E}, //3120 #HANGUL SYLLABLE MIEUM WI CIEUC + {0x92AB, 0xBB9F}, //3121 #HANGUL SYLLABLE MIEUM WI CHIEUCH + {0x92AC, 0xBBA0}, //3122 #HANGUL SYLLABLE MIEUM WI KHIEUKH + {0x92AD, 0xBBA1}, //3123 #HANGUL SYLLABLE MIEUM WI THIEUTH + {0x92AE, 0xBBA2}, //3124 #HANGUL SYLLABLE MIEUM WI PHIEUPH + {0x92AF, 0xBBA3}, //3125 #HANGUL SYLLABLE MIEUM WI HIEUH + {0x92B0, 0xBBA5}, //3126 #HANGUL SYLLABLE MIEUM YU KIYEOK + {0x92B1, 0xBBA6}, //3127 #HANGUL SYLLABLE MIEUM YU SSANGKIYEOK + {0x92B2, 0xBBA7}, //3128 #HANGUL SYLLABLE MIEUM YU KIYEOKSIOS + {0x92B3, 0xBBA9}, //3129 #HANGUL SYLLABLE MIEUM YU NIEUNCIEUC + {0x92B4, 0xBBAA}, //3130 #HANGUL SYLLABLE MIEUM YU NIEUNHIEUH + {0x92B5, 0xBBAB}, //3131 #HANGUL SYLLABLE MIEUM YU TIKEUT + {0x92B6, 0xBBAD}, //3132 #HANGUL SYLLABLE MIEUM YU RIEULKIYEOK + {0x92B7, 0xBBAE}, //3133 #HANGUL SYLLABLE MIEUM YU RIEULMIEUM + {0x92B8, 0xBBAF}, //3134 #HANGUL SYLLABLE MIEUM YU RIEULPIEUP + {0x92B9, 0xBBB0}, //3135 #HANGUL SYLLABLE MIEUM YU RIEULSIOS + {0x92BA, 0xBBB1}, //3136 #HANGUL SYLLABLE MIEUM YU RIEULTHIEUTH + {0x92BB, 0xBBB2}, //3137 #HANGUL SYLLABLE MIEUM YU RIEULPHIEUPH + {0x92BC, 0xBBB3}, //3138 #HANGUL SYLLABLE MIEUM YU RIEULHIEUH + {0x92BD, 0xBBB5}, //3139 #HANGUL SYLLABLE MIEUM YU PIEUP + {0x92BE, 0xBBB6}, //3140 #HANGUL SYLLABLE MIEUM YU PIEUPSIOS + {0x92BF, 0xBBB8}, //3141 #HANGUL SYLLABLE MIEUM YU SSANGSIOS + {0x92C0, 0xBBB9}, //3142 #HANGUL SYLLABLE MIEUM YU IEUNG + {0x92C1, 0xBBBA}, //3143 #HANGUL SYLLABLE MIEUM YU CIEUC + {0x92C2, 0xBBBB}, //3144 #HANGUL SYLLABLE MIEUM YU CHIEUCH + {0x92C3, 0xBBBC}, //3145 #HANGUL SYLLABLE MIEUM YU KHIEUKH + {0x92C4, 0xBBBD}, //3146 #HANGUL SYLLABLE MIEUM YU THIEUTH + {0x92C5, 0xBBBE}, //3147 #HANGUL SYLLABLE MIEUM YU PHIEUPH + {0x92C6, 0xBBBF}, //3148 #HANGUL SYLLABLE MIEUM YU HIEUH + {0x92C7, 0xBBC1}, //3149 #HANGUL SYLLABLE MIEUM EU KIYEOK + {0x92C8, 0xBBC2}, //3150 #HANGUL SYLLABLE MIEUM EU SSANGKIYEOK + {0x92C9, 0xBBC3}, //3151 #HANGUL SYLLABLE MIEUM EU KIYEOKSIOS + {0x92CA, 0xBBC5}, //3152 #HANGUL SYLLABLE MIEUM EU NIEUNCIEUC + {0x92CB, 0xBBC6}, //3153 #HANGUL SYLLABLE MIEUM EU NIEUNHIEUH + {0x92CC, 0xBBC7}, //3154 #HANGUL SYLLABLE MIEUM EU TIKEUT + {0x92CD, 0xBBC9}, //3155 #HANGUL SYLLABLE MIEUM EU RIEULKIYEOK + {0x92CE, 0xBBCA}, //3156 #HANGUL SYLLABLE MIEUM EU RIEULMIEUM + {0x92CF, 0xBBCB}, //3157 #HANGUL SYLLABLE MIEUM EU RIEULPIEUP + {0x92D0, 0xBBCC}, //3158 #HANGUL SYLLABLE MIEUM EU RIEULSIOS + {0x92D1, 0xBBCD}, //3159 #HANGUL SYLLABLE MIEUM EU RIEULTHIEUTH + {0x92D2, 0xBBCE}, //3160 #HANGUL SYLLABLE MIEUM EU RIEULPHIEUPH + {0x92D3, 0xBBCF}, //3161 #HANGUL SYLLABLE MIEUM EU RIEULHIEUH + {0x92D4, 0xBBD1}, //3162 #HANGUL SYLLABLE MIEUM EU PIEUP + {0x92D5, 0xBBD2}, //3163 #HANGUL SYLLABLE MIEUM EU PIEUPSIOS + {0x92D6, 0xBBD4}, //3164 #HANGUL SYLLABLE MIEUM EU SSANGSIOS + {0x92D7, 0xBBD5}, //3165 #HANGUL SYLLABLE MIEUM EU IEUNG + {0x92D8, 0xBBD6}, //3166 #HANGUL SYLLABLE MIEUM EU CIEUC + {0x92D9, 0xBBD7}, //3167 #HANGUL SYLLABLE MIEUM EU CHIEUCH + {0x92DA, 0xBBD8}, //3168 #HANGUL SYLLABLE MIEUM EU KHIEUKH + {0x92DB, 0xBBD9}, //3169 #HANGUL SYLLABLE MIEUM EU THIEUTH + {0x92DC, 0xBBDA}, //3170 #HANGUL SYLLABLE MIEUM EU PHIEUPH + {0x92DD, 0xBBDB}, //3171 #HANGUL SYLLABLE MIEUM EU HIEUH + {0x92DE, 0xBBDC}, //3172 #HANGUL SYLLABLE MIEUM YI + {0x92DF, 0xBBDD}, //3173 #HANGUL SYLLABLE MIEUM YI KIYEOK + {0x92E0, 0xBBDE}, //3174 #HANGUL SYLLABLE MIEUM YI SSANGKIYEOK + {0x92E1, 0xBBDF}, //3175 #HANGUL SYLLABLE MIEUM YI KIYEOKSIOS + {0x92E2, 0xBBE0}, //3176 #HANGUL SYLLABLE MIEUM YI NIEUN + {0x92E3, 0xBBE1}, //3177 #HANGUL SYLLABLE MIEUM YI NIEUNCIEUC + {0x92E4, 0xBBE2}, //3178 #HANGUL SYLLABLE MIEUM YI NIEUNHIEUH + {0x92E5, 0xBBE3}, //3179 #HANGUL SYLLABLE MIEUM YI TIKEUT + {0x92E6, 0xBBE4}, //3180 #HANGUL SYLLABLE MIEUM YI RIEUL + {0x92E7, 0xBBE5}, //3181 #HANGUL SYLLABLE MIEUM YI RIEULKIYEOK + {0x92E8, 0xBBE6}, //3182 #HANGUL SYLLABLE MIEUM YI RIEULMIEUM + {0x92E9, 0xBBE7}, //3183 #HANGUL SYLLABLE MIEUM YI RIEULPIEUP + {0x92EA, 0xBBE8}, //3184 #HANGUL SYLLABLE MIEUM YI RIEULSIOS + {0x92EB, 0xBBE9}, //3185 #HANGUL SYLLABLE MIEUM YI RIEULTHIEUTH + {0x92EC, 0xBBEA}, //3186 #HANGUL SYLLABLE MIEUM YI RIEULPHIEUPH + {0x92ED, 0xBBEB}, //3187 #HANGUL SYLLABLE MIEUM YI RIEULHIEUH + {0x92EE, 0xBBEC}, //3188 #HANGUL SYLLABLE MIEUM YI MIEUM + {0x92EF, 0xBBED}, //3189 #HANGUL SYLLABLE MIEUM YI PIEUP + {0x92F0, 0xBBEE}, //3190 #HANGUL SYLLABLE MIEUM YI PIEUPSIOS + {0x92F1, 0xBBEF}, //3191 #HANGUL SYLLABLE MIEUM YI SIOS + {0x92F2, 0xBBF0}, //3192 #HANGUL SYLLABLE MIEUM YI SSANGSIOS + {0x92F3, 0xBBF1}, //3193 #HANGUL SYLLABLE MIEUM YI IEUNG + {0x92F4, 0xBBF2}, //3194 #HANGUL SYLLABLE MIEUM YI CIEUC + {0x92F5, 0xBBF3}, //3195 #HANGUL SYLLABLE MIEUM YI CHIEUCH + {0x92F6, 0xBBF4}, //3196 #HANGUL SYLLABLE MIEUM YI KHIEUKH + {0x92F7, 0xBBF5}, //3197 #HANGUL SYLLABLE MIEUM YI THIEUTH + {0x92F8, 0xBBF6}, //3198 #HANGUL SYLLABLE MIEUM YI PHIEUPH + {0x92F9, 0xBBF7}, //3199 #HANGUL SYLLABLE MIEUM YI HIEUH + {0x92FA, 0xBBFA}, //3200 #HANGUL SYLLABLE MIEUM I SSANGKIYEOK + {0x92FB, 0xBBFB}, //3201 #HANGUL SYLLABLE MIEUM I KIYEOKSIOS + {0x92FC, 0xBBFD}, //3202 #HANGUL SYLLABLE MIEUM I NIEUNCIEUC + {0x92FD, 0xBBFE}, //3203 #HANGUL SYLLABLE MIEUM I NIEUNHIEUH + {0x92FE, 0xBC01}, //3204 #HANGUL SYLLABLE MIEUM I RIEULKIYEOK + {0x9341, 0xBC03}, //3205 #HANGUL SYLLABLE MIEUM I RIEULPIEUP + {0x9342, 0xBC04}, //3206 #HANGUL SYLLABLE MIEUM I RIEULSIOS + {0x9343, 0xBC05}, //3207 #HANGUL SYLLABLE MIEUM I RIEULTHIEUTH + {0x9344, 0xBC06}, //3208 #HANGUL SYLLABLE MIEUM I RIEULPHIEUPH + {0x9345, 0xBC07}, //3209 #HANGUL SYLLABLE MIEUM I RIEULHIEUH + {0x9346, 0xBC0A}, //3210 #HANGUL SYLLABLE MIEUM I PIEUPSIOS + {0x9347, 0xBC0E}, //3211 #HANGUL SYLLABLE MIEUM I CIEUC + {0x9348, 0xBC10}, //3212 #HANGUL SYLLABLE MIEUM I KHIEUKH + {0x9349, 0xBC12}, //3213 #HANGUL SYLLABLE MIEUM I PHIEUPH + {0x934A, 0xBC13}, //3214 #HANGUL SYLLABLE MIEUM I HIEUH + {0x934B, 0xBC19}, //3215 #HANGUL SYLLABLE PIEUP A NIEUNCIEUC + {0x934C, 0xBC1A}, //3216 #HANGUL SYLLABLE PIEUP A NIEUNHIEUH + {0x934D, 0xBC20}, //3217 #HANGUL SYLLABLE PIEUP A RIEULSIOS + {0x934E, 0xBC21}, //3218 #HANGUL SYLLABLE PIEUP A RIEULTHIEUTH + {0x934F, 0xBC22}, //3219 #HANGUL SYLLABLE PIEUP A RIEULPHIEUPH + {0x9350, 0xBC23}, //3220 #HANGUL SYLLABLE PIEUP A RIEULHIEUH + {0x9351, 0xBC26}, //3221 #HANGUL SYLLABLE PIEUP A PIEUPSIOS + {0x9352, 0xBC28}, //3222 #HANGUL SYLLABLE PIEUP A SSANGSIOS + {0x9353, 0xBC2A}, //3223 #HANGUL SYLLABLE PIEUP A CIEUC + {0x9354, 0xBC2B}, //3224 #HANGUL SYLLABLE PIEUP A CHIEUCH + {0x9355, 0xBC2C}, //3225 #HANGUL SYLLABLE PIEUP A KHIEUKH + {0x9356, 0xBC2E}, //3226 #HANGUL SYLLABLE PIEUP A PHIEUPH + {0x9357, 0xBC2F}, //3227 #HANGUL SYLLABLE PIEUP A HIEUH + {0x9358, 0xBC32}, //3228 #HANGUL SYLLABLE PIEUP AE SSANGKIYEOK + {0x9359, 0xBC33}, //3229 #HANGUL SYLLABLE PIEUP AE KIYEOKSIOS + {0x935A, 0xBC35}, //3230 #HANGUL SYLLABLE PIEUP AE NIEUNCIEUC + {0x9361, 0xBC36}, //3231 #HANGUL SYLLABLE PIEUP AE NIEUNHIEUH + {0x9362, 0xBC37}, //3232 #HANGUL SYLLABLE PIEUP AE TIKEUT + {0x9363, 0xBC39}, //3233 #HANGUL SYLLABLE PIEUP AE RIEULKIYEOK + {0x9364, 0xBC3A}, //3234 #HANGUL SYLLABLE PIEUP AE RIEULMIEUM + {0x9365, 0xBC3B}, //3235 #HANGUL SYLLABLE PIEUP AE RIEULPIEUP + {0x9366, 0xBC3C}, //3236 #HANGUL SYLLABLE PIEUP AE RIEULSIOS + {0x9367, 0xBC3D}, //3237 #HANGUL SYLLABLE PIEUP AE RIEULTHIEUTH + {0x9368, 0xBC3E}, //3238 #HANGUL SYLLABLE PIEUP AE RIEULPHIEUPH + {0x9369, 0xBC3F}, //3239 #HANGUL SYLLABLE PIEUP AE RIEULHIEUH + {0x936A, 0xBC42}, //3240 #HANGUL SYLLABLE PIEUP AE PIEUPSIOS + {0x936B, 0xBC46}, //3241 #HANGUL SYLLABLE PIEUP AE CIEUC + {0x936C, 0xBC47}, //3242 #HANGUL SYLLABLE PIEUP AE CHIEUCH + {0x936D, 0xBC48}, //3243 #HANGUL SYLLABLE PIEUP AE KHIEUKH + {0x936E, 0xBC4A}, //3244 #HANGUL SYLLABLE PIEUP AE PHIEUPH + {0x936F, 0xBC4B}, //3245 #HANGUL SYLLABLE PIEUP AE HIEUH + {0x9370, 0xBC4E}, //3246 #HANGUL SYLLABLE PIEUP YA SSANGKIYEOK + {0x9371, 0xBC4F}, //3247 #HANGUL SYLLABLE PIEUP YA KIYEOKSIOS + {0x9372, 0xBC51}, //3248 #HANGUL SYLLABLE PIEUP YA NIEUNCIEUC + {0x9373, 0xBC52}, //3249 #HANGUL SYLLABLE PIEUP YA NIEUNHIEUH + {0x9374, 0xBC53}, //3250 #HANGUL SYLLABLE PIEUP YA TIKEUT + {0x9375, 0xBC54}, //3251 #HANGUL SYLLABLE PIEUP YA RIEUL + {0x9376, 0xBC55}, //3252 #HANGUL SYLLABLE PIEUP YA RIEULKIYEOK + {0x9377, 0xBC56}, //3253 #HANGUL SYLLABLE PIEUP YA RIEULMIEUM + {0x9378, 0xBC57}, //3254 #HANGUL SYLLABLE PIEUP YA RIEULPIEUP + {0x9379, 0xBC58}, //3255 #HANGUL SYLLABLE PIEUP YA RIEULSIOS + {0x937A, 0xBC59}, //3256 #HANGUL SYLLABLE PIEUP YA RIEULTHIEUTH + {0x9381, 0xBC5A}, //3257 #HANGUL SYLLABLE PIEUP YA RIEULPHIEUPH + {0x9382, 0xBC5B}, //3258 #HANGUL SYLLABLE PIEUP YA RIEULHIEUH + {0x9383, 0xBC5C}, //3259 #HANGUL SYLLABLE PIEUP YA MIEUM + {0x9384, 0xBC5E}, //3260 #HANGUL SYLLABLE PIEUP YA PIEUPSIOS + {0x9385, 0xBC5F}, //3261 #HANGUL SYLLABLE PIEUP YA SIOS + {0x9386, 0xBC60}, //3262 #HANGUL SYLLABLE PIEUP YA SSANGSIOS + {0x9387, 0xBC61}, //3263 #HANGUL SYLLABLE PIEUP YA IEUNG + {0x9388, 0xBC62}, //3264 #HANGUL SYLLABLE PIEUP YA CIEUC + {0x9389, 0xBC63}, //3265 #HANGUL SYLLABLE PIEUP YA CHIEUCH + {0x938A, 0xBC64}, //3266 #HANGUL SYLLABLE PIEUP YA KHIEUKH + {0x938B, 0xBC65}, //3267 #HANGUL SYLLABLE PIEUP YA THIEUTH + {0x938C, 0xBC66}, //3268 #HANGUL SYLLABLE PIEUP YA PHIEUPH + {0x938D, 0xBC67}, //3269 #HANGUL SYLLABLE PIEUP YA HIEUH + {0x938E, 0xBC68}, //3270 #HANGUL SYLLABLE PIEUP YAE + {0x938F, 0xBC69}, //3271 #HANGUL SYLLABLE PIEUP YAE KIYEOK + {0x9390, 0xBC6A}, //3272 #HANGUL SYLLABLE PIEUP YAE SSANGKIYEOK + {0x9391, 0xBC6B}, //3273 #HANGUL SYLLABLE PIEUP YAE KIYEOKSIOS + {0x9392, 0xBC6C}, //3274 #HANGUL SYLLABLE PIEUP YAE NIEUN + {0x9393, 0xBC6D}, //3275 #HANGUL SYLLABLE PIEUP YAE NIEUNCIEUC + {0x9394, 0xBC6E}, //3276 #HANGUL SYLLABLE PIEUP YAE NIEUNHIEUH + {0x9395, 0xBC6F}, //3277 #HANGUL SYLLABLE PIEUP YAE TIKEUT + {0x9396, 0xBC70}, //3278 #HANGUL SYLLABLE PIEUP YAE RIEUL + {0x9397, 0xBC71}, //3279 #HANGUL SYLLABLE PIEUP YAE RIEULKIYEOK + {0x9398, 0xBC72}, //3280 #HANGUL SYLLABLE PIEUP YAE RIEULMIEUM + {0x9399, 0xBC73}, //3281 #HANGUL SYLLABLE PIEUP YAE RIEULPIEUP + {0x939A, 0xBC74}, //3282 #HANGUL SYLLABLE PIEUP YAE RIEULSIOS + {0x939B, 0xBC75}, //3283 #HANGUL SYLLABLE PIEUP YAE RIEULTHIEUTH + {0x939C, 0xBC76}, //3284 #HANGUL SYLLABLE PIEUP YAE RIEULPHIEUPH + {0x939D, 0xBC77}, //3285 #HANGUL SYLLABLE PIEUP YAE RIEULHIEUH + {0x939E, 0xBC78}, //3286 #HANGUL SYLLABLE PIEUP YAE MIEUM + {0x939F, 0xBC79}, //3287 #HANGUL SYLLABLE PIEUP YAE PIEUP + {0x93A0, 0xBC7A}, //3288 #HANGUL SYLLABLE PIEUP YAE PIEUPSIOS + {0x93A1, 0xBC7B}, //3289 #HANGUL SYLLABLE PIEUP YAE SIOS + {0x93A2, 0xBC7C}, //3290 #HANGUL SYLLABLE PIEUP YAE SSANGSIOS + {0x93A3, 0xBC7D}, //3291 #HANGUL SYLLABLE PIEUP YAE IEUNG + {0x93A4, 0xBC7E}, //3292 #HANGUL SYLLABLE PIEUP YAE CIEUC + {0x93A5, 0xBC7F}, //3293 #HANGUL SYLLABLE PIEUP YAE CHIEUCH + {0x93A6, 0xBC80}, //3294 #HANGUL SYLLABLE PIEUP YAE KHIEUKH + {0x93A7, 0xBC81}, //3295 #HANGUL SYLLABLE PIEUP YAE THIEUTH + {0x93A8, 0xBC82}, //3296 #HANGUL SYLLABLE PIEUP YAE PHIEUPH + {0x93A9, 0xBC83}, //3297 #HANGUL SYLLABLE PIEUP YAE HIEUH + {0x93AA, 0xBC86}, //3298 #HANGUL SYLLABLE PIEUP EO SSANGKIYEOK + {0x93AB, 0xBC87}, //3299 #HANGUL SYLLABLE PIEUP EO KIYEOKSIOS + {0x93AC, 0xBC89}, //3300 #HANGUL SYLLABLE PIEUP EO NIEUNCIEUC + {0x93AD, 0xBC8A}, //3301 #HANGUL SYLLABLE PIEUP EO NIEUNHIEUH + {0x93AE, 0xBC8D}, //3302 #HANGUL SYLLABLE PIEUP EO RIEULKIYEOK + {0x93AF, 0xBC8F}, //3303 #HANGUL SYLLABLE PIEUP EO RIEULPIEUP + {0x93B0, 0xBC90}, //3304 #HANGUL SYLLABLE PIEUP EO RIEULSIOS + {0x93B1, 0xBC91}, //3305 #HANGUL SYLLABLE PIEUP EO RIEULTHIEUTH + {0x93B2, 0xBC92}, //3306 #HANGUL SYLLABLE PIEUP EO RIEULPHIEUPH + {0x93B3, 0xBC93}, //3307 #HANGUL SYLLABLE PIEUP EO RIEULHIEUH + {0x93B4, 0xBC96}, //3308 #HANGUL SYLLABLE PIEUP EO PIEUPSIOS + {0x93B5, 0xBC98}, //3309 #HANGUL SYLLABLE PIEUP EO SSANGSIOS + {0x93B6, 0xBC9B}, //3310 #HANGUL SYLLABLE PIEUP EO CHIEUCH + {0x93B7, 0xBC9C}, //3311 #HANGUL SYLLABLE PIEUP EO KHIEUKH + {0x93B8, 0xBC9D}, //3312 #HANGUL SYLLABLE PIEUP EO THIEUTH + {0x93B9, 0xBC9E}, //3313 #HANGUL SYLLABLE PIEUP EO PHIEUPH + {0x93BA, 0xBC9F}, //3314 #HANGUL SYLLABLE PIEUP EO HIEUH + {0x93BB, 0xBCA2}, //3315 #HANGUL SYLLABLE PIEUP E SSANGKIYEOK + {0x93BC, 0xBCA3}, //3316 #HANGUL SYLLABLE PIEUP E KIYEOKSIOS + {0x93BD, 0xBCA5}, //3317 #HANGUL SYLLABLE PIEUP E NIEUNCIEUC + {0x93BE, 0xBCA6}, //3318 #HANGUL SYLLABLE PIEUP E NIEUNHIEUH + {0x93BF, 0xBCA9}, //3319 #HANGUL SYLLABLE PIEUP E RIEULKIYEOK + {0x93C0, 0xBCAA}, //3320 #HANGUL SYLLABLE PIEUP E RIEULMIEUM + {0x93C1, 0xBCAB}, //3321 #HANGUL SYLLABLE PIEUP E RIEULPIEUP + {0x93C2, 0xBCAC}, //3322 #HANGUL SYLLABLE PIEUP E RIEULSIOS + {0x93C3, 0xBCAD}, //3323 #HANGUL SYLLABLE PIEUP E RIEULTHIEUTH + {0x93C4, 0xBCAE}, //3324 #HANGUL SYLLABLE PIEUP E RIEULPHIEUPH + {0x93C5, 0xBCAF}, //3325 #HANGUL SYLLABLE PIEUP E RIEULHIEUH + {0x93C6, 0xBCB2}, //3326 #HANGUL SYLLABLE PIEUP E PIEUPSIOS + {0x93C7, 0xBCB6}, //3327 #HANGUL SYLLABLE PIEUP E CIEUC + {0x93C8, 0xBCB7}, //3328 #HANGUL SYLLABLE PIEUP E CHIEUCH + {0x93C9, 0xBCB8}, //3329 #HANGUL SYLLABLE PIEUP E KHIEUKH + {0x93CA, 0xBCB9}, //3330 #HANGUL SYLLABLE PIEUP E THIEUTH + {0x93CB, 0xBCBA}, //3331 #HANGUL SYLLABLE PIEUP E PHIEUPH + {0x93CC, 0xBCBB}, //3332 #HANGUL SYLLABLE PIEUP E HIEUH + {0x93CD, 0xBCBE}, //3333 #HANGUL SYLLABLE PIEUP YEO SSANGKIYEOK + {0x93CE, 0xBCBF}, //3334 #HANGUL SYLLABLE PIEUP YEO KIYEOKSIOS + {0x93CF, 0xBCC1}, //3335 #HANGUL SYLLABLE PIEUP YEO NIEUNCIEUC + {0x93D0, 0xBCC2}, //3336 #HANGUL SYLLABLE PIEUP YEO NIEUNHIEUH + {0x93D1, 0xBCC3}, //3337 #HANGUL SYLLABLE PIEUP YEO TIKEUT + {0x93D2, 0xBCC5}, //3338 #HANGUL SYLLABLE PIEUP YEO RIEULKIYEOK + {0x93D3, 0xBCC6}, //3339 #HANGUL SYLLABLE PIEUP YEO RIEULMIEUM + {0x93D4, 0xBCC7}, //3340 #HANGUL SYLLABLE PIEUP YEO RIEULPIEUP + {0x93D5, 0xBCC8}, //3341 #HANGUL SYLLABLE PIEUP YEO RIEULSIOS + {0x93D6, 0xBCC9}, //3342 #HANGUL SYLLABLE PIEUP YEO RIEULTHIEUTH + {0x93D7, 0xBCCA}, //3343 #HANGUL SYLLABLE PIEUP YEO RIEULPHIEUPH + {0x93D8, 0xBCCB}, //3344 #HANGUL SYLLABLE PIEUP YEO RIEULHIEUH + {0x93D9, 0xBCCC}, //3345 #HANGUL SYLLABLE PIEUP YEO MIEUM + {0x93DA, 0xBCCE}, //3346 #HANGUL SYLLABLE PIEUP YEO PIEUPSIOS + {0x93DB, 0xBCD2}, //3347 #HANGUL SYLLABLE PIEUP YEO CIEUC + {0x93DC, 0xBCD3}, //3348 #HANGUL SYLLABLE PIEUP YEO CHIEUCH + {0x93DD, 0xBCD4}, //3349 #HANGUL SYLLABLE PIEUP YEO KHIEUKH + {0x93DE, 0xBCD6}, //3350 #HANGUL SYLLABLE PIEUP YEO PHIEUPH + {0x93DF, 0xBCD7}, //3351 #HANGUL SYLLABLE PIEUP YEO HIEUH + {0x93E0, 0xBCD9}, //3352 #HANGUL SYLLABLE PIEUP YE KIYEOK + {0x93E1, 0xBCDA}, //3353 #HANGUL SYLLABLE PIEUP YE SSANGKIYEOK + {0x93E2, 0xBCDB}, //3354 #HANGUL SYLLABLE PIEUP YE KIYEOKSIOS + {0x93E3, 0xBCDD}, //3355 #HANGUL SYLLABLE PIEUP YE NIEUNCIEUC + {0x93E4, 0xBCDE}, //3356 #HANGUL SYLLABLE PIEUP YE NIEUNHIEUH + {0x93E5, 0xBCDF}, //3357 #HANGUL SYLLABLE PIEUP YE TIKEUT + {0x93E6, 0xBCE0}, //3358 #HANGUL SYLLABLE PIEUP YE RIEUL + {0x93E7, 0xBCE1}, //3359 #HANGUL SYLLABLE PIEUP YE RIEULKIYEOK + {0x93E8, 0xBCE2}, //3360 #HANGUL SYLLABLE PIEUP YE RIEULMIEUM + {0x93E9, 0xBCE3}, //3361 #HANGUL SYLLABLE PIEUP YE RIEULPIEUP + {0x93EA, 0xBCE4}, //3362 #HANGUL SYLLABLE PIEUP YE RIEULSIOS + {0x93EB, 0xBCE5}, //3363 #HANGUL SYLLABLE PIEUP YE RIEULTHIEUTH + {0x93EC, 0xBCE6}, //3364 #HANGUL SYLLABLE PIEUP YE RIEULPHIEUPH + {0x93ED, 0xBCE7}, //3365 #HANGUL SYLLABLE PIEUP YE RIEULHIEUH + {0x93EE, 0xBCE8}, //3366 #HANGUL SYLLABLE PIEUP YE MIEUM + {0x93EF, 0xBCE9}, //3367 #HANGUL SYLLABLE PIEUP YE PIEUP + {0x93F0, 0xBCEA}, //3368 #HANGUL SYLLABLE PIEUP YE PIEUPSIOS + {0x93F1, 0xBCEB}, //3369 #HANGUL SYLLABLE PIEUP YE SIOS + {0x93F2, 0xBCEC}, //3370 #HANGUL SYLLABLE PIEUP YE SSANGSIOS + {0x93F3, 0xBCED}, //3371 #HANGUL SYLLABLE PIEUP YE IEUNG + {0x93F4, 0xBCEE}, //3372 #HANGUL SYLLABLE PIEUP YE CIEUC + {0x93F5, 0xBCEF}, //3373 #HANGUL SYLLABLE PIEUP YE CHIEUCH + {0x93F6, 0xBCF0}, //3374 #HANGUL SYLLABLE PIEUP YE KHIEUKH + {0x93F7, 0xBCF1}, //3375 #HANGUL SYLLABLE PIEUP YE THIEUTH + {0x93F8, 0xBCF2}, //3376 #HANGUL SYLLABLE PIEUP YE PHIEUPH + {0x93F9, 0xBCF3}, //3377 #HANGUL SYLLABLE PIEUP YE HIEUH + {0x93FA, 0xBCF7}, //3378 #HANGUL SYLLABLE PIEUP O KIYEOKSIOS + {0x93FB, 0xBCF9}, //3379 #HANGUL SYLLABLE PIEUP O NIEUNCIEUC + {0x93FC, 0xBCFA}, //3380 #HANGUL SYLLABLE PIEUP O NIEUNHIEUH + {0x93FD, 0xBCFB}, //3381 #HANGUL SYLLABLE PIEUP O TIKEUT + {0x93FE, 0xBCFD}, //3382 #HANGUL SYLLABLE PIEUP O RIEULKIYEOK + {0x9441, 0xBCFE}, //3383 #HANGUL SYLLABLE PIEUP O RIEULMIEUM + {0x9442, 0xBCFF}, //3384 #HANGUL SYLLABLE PIEUP O RIEULPIEUP + {0x9443, 0xBD00}, //3385 #HANGUL SYLLABLE PIEUP O RIEULSIOS + {0x9444, 0xBD01}, //3386 #HANGUL SYLLABLE PIEUP O RIEULTHIEUTH + {0x9445, 0xBD02}, //3387 #HANGUL SYLLABLE PIEUP O RIEULPHIEUPH + {0x9446, 0xBD03}, //3388 #HANGUL SYLLABLE PIEUP O RIEULHIEUH + {0x9447, 0xBD06}, //3389 #HANGUL SYLLABLE PIEUP O PIEUPSIOS + {0x9448, 0xBD08}, //3390 #HANGUL SYLLABLE PIEUP O SSANGSIOS + {0x9449, 0xBD0A}, //3391 #HANGUL SYLLABLE PIEUP O CIEUC + {0x944A, 0xBD0B}, //3392 #HANGUL SYLLABLE PIEUP O CHIEUCH + {0x944B, 0xBD0C}, //3393 #HANGUL SYLLABLE PIEUP O KHIEUKH + {0x944C, 0xBD0D}, //3394 #HANGUL SYLLABLE PIEUP O THIEUTH + {0x944D, 0xBD0E}, //3395 #HANGUL SYLLABLE PIEUP O PHIEUPH + {0x944E, 0xBD0F}, //3396 #HANGUL SYLLABLE PIEUP O HIEUH + {0x944F, 0xBD11}, //3397 #HANGUL SYLLABLE PIEUP WA KIYEOK + {0x9450, 0xBD12}, //3398 #HANGUL SYLLABLE PIEUP WA SSANGKIYEOK + {0x9451, 0xBD13}, //3399 #HANGUL SYLLABLE PIEUP WA KIYEOKSIOS + {0x9452, 0xBD15}, //3400 #HANGUL SYLLABLE PIEUP WA NIEUNCIEUC + {0x9453, 0xBD16}, //3401 #HANGUL SYLLABLE PIEUP WA NIEUNHIEUH + {0x9454, 0xBD17}, //3402 #HANGUL SYLLABLE PIEUP WA TIKEUT + {0x9455, 0xBD18}, //3403 #HANGUL SYLLABLE PIEUP WA RIEUL + {0x9456, 0xBD19}, //3404 #HANGUL SYLLABLE PIEUP WA RIEULKIYEOK + {0x9457, 0xBD1A}, //3405 #HANGUL SYLLABLE PIEUP WA RIEULMIEUM + {0x9458, 0xBD1B}, //3406 #HANGUL SYLLABLE PIEUP WA RIEULPIEUP + {0x9459, 0xBD1C}, //3407 #HANGUL SYLLABLE PIEUP WA RIEULSIOS + {0x945A, 0xBD1D}, //3408 #HANGUL SYLLABLE PIEUP WA RIEULTHIEUTH + {0x9461, 0xBD1E}, //3409 #HANGUL SYLLABLE PIEUP WA RIEULPHIEUPH + {0x9462, 0xBD1F}, //3410 #HANGUL SYLLABLE PIEUP WA RIEULHIEUH + {0x9463, 0xBD20}, //3411 #HANGUL SYLLABLE PIEUP WA MIEUM + {0x9464, 0xBD21}, //3412 #HANGUL SYLLABLE PIEUP WA PIEUP + {0x9465, 0xBD22}, //3413 #HANGUL SYLLABLE PIEUP WA PIEUPSIOS + {0x9466, 0xBD23}, //3414 #HANGUL SYLLABLE PIEUP WA SIOS + {0x9467, 0xBD25}, //3415 #HANGUL SYLLABLE PIEUP WA IEUNG + {0x9468, 0xBD26}, //3416 #HANGUL SYLLABLE PIEUP WA CIEUC + {0x9469, 0xBD27}, //3417 #HANGUL SYLLABLE PIEUP WA CHIEUCH + {0x946A, 0xBD28}, //3418 #HANGUL SYLLABLE PIEUP WA KHIEUKH + {0x946B, 0xBD29}, //3419 #HANGUL SYLLABLE PIEUP WA THIEUTH + {0x946C, 0xBD2A}, //3420 #HANGUL SYLLABLE PIEUP WA PHIEUPH + {0x946D, 0xBD2B}, //3421 #HANGUL SYLLABLE PIEUP WA HIEUH + {0x946E, 0xBD2D}, //3422 #HANGUL SYLLABLE PIEUP WAE KIYEOK + {0x946F, 0xBD2E}, //3423 #HANGUL SYLLABLE PIEUP WAE SSANGKIYEOK + {0x9470, 0xBD2F}, //3424 #HANGUL SYLLABLE PIEUP WAE KIYEOKSIOS + {0x9471, 0xBD30}, //3425 #HANGUL SYLLABLE PIEUP WAE NIEUN + {0x9472, 0xBD31}, //3426 #HANGUL SYLLABLE PIEUP WAE NIEUNCIEUC + {0x9473, 0xBD32}, //3427 #HANGUL SYLLABLE PIEUP WAE NIEUNHIEUH + {0x9474, 0xBD33}, //3428 #HANGUL SYLLABLE PIEUP WAE TIKEUT + {0x9475, 0xBD34}, //3429 #HANGUL SYLLABLE PIEUP WAE RIEUL + {0x9476, 0xBD35}, //3430 #HANGUL SYLLABLE PIEUP WAE RIEULKIYEOK + {0x9477, 0xBD36}, //3431 #HANGUL SYLLABLE PIEUP WAE RIEULMIEUM + {0x9478, 0xBD37}, //3432 #HANGUL SYLLABLE PIEUP WAE RIEULPIEUP + {0x9479, 0xBD38}, //3433 #HANGUL SYLLABLE PIEUP WAE RIEULSIOS + {0x947A, 0xBD39}, //3434 #HANGUL SYLLABLE PIEUP WAE RIEULTHIEUTH + {0x9481, 0xBD3A}, //3435 #HANGUL SYLLABLE PIEUP WAE RIEULPHIEUPH + {0x9482, 0xBD3B}, //3436 #HANGUL SYLLABLE PIEUP WAE RIEULHIEUH + {0x9483, 0xBD3C}, //3437 #HANGUL SYLLABLE PIEUP WAE MIEUM + {0x9484, 0xBD3D}, //3438 #HANGUL SYLLABLE PIEUP WAE PIEUP + {0x9485, 0xBD3E}, //3439 #HANGUL SYLLABLE PIEUP WAE PIEUPSIOS + {0x9486, 0xBD3F}, //3440 #HANGUL SYLLABLE PIEUP WAE SIOS + {0x9487, 0xBD41}, //3441 #HANGUL SYLLABLE PIEUP WAE IEUNG + {0x9488, 0xBD42}, //3442 #HANGUL SYLLABLE PIEUP WAE CIEUC + {0x9489, 0xBD43}, //3443 #HANGUL SYLLABLE PIEUP WAE CHIEUCH + {0x948A, 0xBD44}, //3444 #HANGUL SYLLABLE PIEUP WAE KHIEUKH + {0x948B, 0xBD45}, //3445 #HANGUL SYLLABLE PIEUP WAE THIEUTH + {0x948C, 0xBD46}, //3446 #HANGUL SYLLABLE PIEUP WAE PHIEUPH + {0x948D, 0xBD47}, //3447 #HANGUL SYLLABLE PIEUP WAE HIEUH + {0x948E, 0xBD4A}, //3448 #HANGUL SYLLABLE PIEUP OE SSANGKIYEOK + {0x948F, 0xBD4B}, //3449 #HANGUL SYLLABLE PIEUP OE KIYEOKSIOS + {0x9490, 0xBD4D}, //3450 #HANGUL SYLLABLE PIEUP OE NIEUNCIEUC + {0x9491, 0xBD4E}, //3451 #HANGUL SYLLABLE PIEUP OE NIEUNHIEUH + {0x9492, 0xBD4F}, //3452 #HANGUL SYLLABLE PIEUP OE TIKEUT + {0x9493, 0xBD51}, //3453 #HANGUL SYLLABLE PIEUP OE RIEULKIYEOK + {0x9494, 0xBD52}, //3454 #HANGUL SYLLABLE PIEUP OE RIEULMIEUM + {0x9495, 0xBD53}, //3455 #HANGUL SYLLABLE PIEUP OE RIEULPIEUP + {0x9496, 0xBD54}, //3456 #HANGUL SYLLABLE PIEUP OE RIEULSIOS + {0x9497, 0xBD55}, //3457 #HANGUL SYLLABLE PIEUP OE RIEULTHIEUTH + {0x9498, 0xBD56}, //3458 #HANGUL SYLLABLE PIEUP OE RIEULPHIEUPH + {0x9499, 0xBD57}, //3459 #HANGUL SYLLABLE PIEUP OE RIEULHIEUH + {0x949A, 0xBD5A}, //3460 #HANGUL SYLLABLE PIEUP OE PIEUPSIOS + {0x949B, 0xBD5B}, //3461 #HANGUL SYLLABLE PIEUP OE SIOS + {0x949C, 0xBD5C}, //3462 #HANGUL SYLLABLE PIEUP OE SSANGSIOS + {0x949D, 0xBD5D}, //3463 #HANGUL SYLLABLE PIEUP OE IEUNG + {0x949E, 0xBD5E}, //3464 #HANGUL SYLLABLE PIEUP OE CIEUC + {0x949F, 0xBD5F}, //3465 #HANGUL SYLLABLE PIEUP OE CHIEUCH + {0x94A0, 0xBD60}, //3466 #HANGUL SYLLABLE PIEUP OE KHIEUKH + {0x94A1, 0xBD61}, //3467 #HANGUL SYLLABLE PIEUP OE THIEUTH + {0x94A2, 0xBD62}, //3468 #HANGUL SYLLABLE PIEUP OE PHIEUPH + {0x94A3, 0xBD63}, //3469 #HANGUL SYLLABLE PIEUP OE HIEUH + {0x94A4, 0xBD65}, //3470 #HANGUL SYLLABLE PIEUP YO KIYEOK + {0x94A5, 0xBD66}, //3471 #HANGUL SYLLABLE PIEUP YO SSANGKIYEOK + {0x94A6, 0xBD67}, //3472 #HANGUL SYLLABLE PIEUP YO KIYEOKSIOS + {0x94A7, 0xBD69}, //3473 #HANGUL SYLLABLE PIEUP YO NIEUNCIEUC + {0x94A8, 0xBD6A}, //3474 #HANGUL SYLLABLE PIEUP YO NIEUNHIEUH + {0x94A9, 0xBD6B}, //3475 #HANGUL SYLLABLE PIEUP YO TIKEUT + {0x94AA, 0xBD6C}, //3476 #HANGUL SYLLABLE PIEUP YO RIEUL + {0x94AB, 0xBD6D}, //3477 #HANGUL SYLLABLE PIEUP YO RIEULKIYEOK + {0x94AC, 0xBD6E}, //3478 #HANGUL SYLLABLE PIEUP YO RIEULMIEUM + {0x94AD, 0xBD6F}, //3479 #HANGUL SYLLABLE PIEUP YO RIEULPIEUP + {0x94AE, 0xBD70}, //3480 #HANGUL SYLLABLE PIEUP YO RIEULSIOS + {0x94AF, 0xBD71}, //3481 #HANGUL SYLLABLE PIEUP YO RIEULTHIEUTH + {0x94B0, 0xBD72}, //3482 #HANGUL SYLLABLE PIEUP YO RIEULPHIEUPH + {0x94B1, 0xBD73}, //3483 #HANGUL SYLLABLE PIEUP YO RIEULHIEUH + {0x94B2, 0xBD74}, //3484 #HANGUL SYLLABLE PIEUP YO MIEUM + {0x94B3, 0xBD75}, //3485 #HANGUL SYLLABLE PIEUP YO PIEUP + {0x94B4, 0xBD76}, //3486 #HANGUL SYLLABLE PIEUP YO PIEUPSIOS + {0x94B5, 0xBD77}, //3487 #HANGUL SYLLABLE PIEUP YO SIOS + {0x94B6, 0xBD78}, //3488 #HANGUL SYLLABLE PIEUP YO SSANGSIOS + {0x94B7, 0xBD79}, //3489 #HANGUL SYLLABLE PIEUP YO IEUNG + {0x94B8, 0xBD7A}, //3490 #HANGUL SYLLABLE PIEUP YO CIEUC + {0x94B9, 0xBD7B}, //3491 #HANGUL SYLLABLE PIEUP YO CHIEUCH + {0x94BA, 0xBD7C}, //3492 #HANGUL SYLLABLE PIEUP YO KHIEUKH + {0x94BB, 0xBD7D}, //3493 #HANGUL SYLLABLE PIEUP YO THIEUTH + {0x94BC, 0xBD7E}, //3494 #HANGUL SYLLABLE PIEUP YO PHIEUPH + {0x94BD, 0xBD7F}, //3495 #HANGUL SYLLABLE PIEUP YO HIEUH + {0x94BE, 0xBD82}, //3496 #HANGUL SYLLABLE PIEUP U SSANGKIYEOK + {0x94BF, 0xBD83}, //3497 #HANGUL SYLLABLE PIEUP U KIYEOKSIOS + {0x94C0, 0xBD85}, //3498 #HANGUL SYLLABLE PIEUP U NIEUNCIEUC + {0x94C1, 0xBD86}, //3499 #HANGUL SYLLABLE PIEUP U NIEUNHIEUH + {0x94C2, 0xBD8B}, //3500 #HANGUL SYLLABLE PIEUP U RIEULPIEUP + {0x94C3, 0xBD8C}, //3501 #HANGUL SYLLABLE PIEUP U RIEULSIOS + {0x94C4, 0xBD8D}, //3502 #HANGUL SYLLABLE PIEUP U RIEULTHIEUTH + {0x94C5, 0xBD8E}, //3503 #HANGUL SYLLABLE PIEUP U RIEULPHIEUPH + {0x94C6, 0xBD8F}, //3504 #HANGUL SYLLABLE PIEUP U RIEULHIEUH + {0x94C7, 0xBD92}, //3505 #HANGUL SYLLABLE PIEUP U PIEUPSIOS + {0x94C8, 0xBD94}, //3506 #HANGUL SYLLABLE PIEUP U SSANGSIOS + {0x94C9, 0xBD96}, //3507 #HANGUL SYLLABLE PIEUP U CIEUC + {0x94CA, 0xBD97}, //3508 #HANGUL SYLLABLE PIEUP U CHIEUCH + {0x94CB, 0xBD98}, //3509 #HANGUL SYLLABLE PIEUP U KHIEUKH + {0x94CC, 0xBD9B}, //3510 #HANGUL SYLLABLE PIEUP U HIEUH + {0x94CD, 0xBD9D}, //3511 #HANGUL SYLLABLE PIEUP WEO KIYEOK + {0x94CE, 0xBD9E}, //3512 #HANGUL SYLLABLE PIEUP WEO SSANGKIYEOK + {0x94CF, 0xBD9F}, //3513 #HANGUL SYLLABLE PIEUP WEO KIYEOKSIOS + {0x94D0, 0xBDA0}, //3514 #HANGUL SYLLABLE PIEUP WEO NIEUN + {0x94D1, 0xBDA1}, //3515 #HANGUL SYLLABLE PIEUP WEO NIEUNCIEUC + {0x94D2, 0xBDA2}, //3516 #HANGUL SYLLABLE PIEUP WEO NIEUNHIEUH + {0x94D3, 0xBDA3}, //3517 #HANGUL SYLLABLE PIEUP WEO TIKEUT + {0x94D4, 0xBDA5}, //3518 #HANGUL SYLLABLE PIEUP WEO RIEULKIYEOK + {0x94D5, 0xBDA6}, //3519 #HANGUL SYLLABLE PIEUP WEO RIEULMIEUM + {0x94D6, 0xBDA7}, //3520 #HANGUL SYLLABLE PIEUP WEO RIEULPIEUP + {0x94D7, 0xBDA8}, //3521 #HANGUL SYLLABLE PIEUP WEO RIEULSIOS + {0x94D8, 0xBDA9}, //3522 #HANGUL SYLLABLE PIEUP WEO RIEULTHIEUTH + {0x94D9, 0xBDAA}, //3523 #HANGUL SYLLABLE PIEUP WEO RIEULPHIEUPH + {0x94DA, 0xBDAB}, //3524 #HANGUL SYLLABLE PIEUP WEO RIEULHIEUH + {0x94DB, 0xBDAC}, //3525 #HANGUL SYLLABLE PIEUP WEO MIEUM + {0x94DC, 0xBDAD}, //3526 #HANGUL SYLLABLE PIEUP WEO PIEUP + {0x94DD, 0xBDAE}, //3527 #HANGUL SYLLABLE PIEUP WEO PIEUPSIOS + {0x94DE, 0xBDAF}, //3528 #HANGUL SYLLABLE PIEUP WEO SIOS + {0x94DF, 0xBDB1}, //3529 #HANGUL SYLLABLE PIEUP WEO IEUNG + {0x94E0, 0xBDB2}, //3530 #HANGUL SYLLABLE PIEUP WEO CIEUC + {0x94E1, 0xBDB3}, //3531 #HANGUL SYLLABLE PIEUP WEO CHIEUCH + {0x94E2, 0xBDB4}, //3532 #HANGUL SYLLABLE PIEUP WEO KHIEUKH + {0x94E3, 0xBDB5}, //3533 #HANGUL SYLLABLE PIEUP WEO THIEUTH + {0x94E4, 0xBDB6}, //3534 #HANGUL SYLLABLE PIEUP WEO PHIEUPH + {0x94E5, 0xBDB7}, //3535 #HANGUL SYLLABLE PIEUP WEO HIEUH + {0x94E6, 0xBDB9}, //3536 #HANGUL SYLLABLE PIEUP WE KIYEOK + {0x94E7, 0xBDBA}, //3537 #HANGUL SYLLABLE PIEUP WE SSANGKIYEOK + {0x94E8, 0xBDBB}, //3538 #HANGUL SYLLABLE PIEUP WE KIYEOKSIOS + {0x94E9, 0xBDBC}, //3539 #HANGUL SYLLABLE PIEUP WE NIEUN + {0x94EA, 0xBDBD}, //3540 #HANGUL SYLLABLE PIEUP WE NIEUNCIEUC + {0x94EB, 0xBDBE}, //3541 #HANGUL SYLLABLE PIEUP WE NIEUNHIEUH + {0x94EC, 0xBDBF}, //3542 #HANGUL SYLLABLE PIEUP WE TIKEUT + {0x94ED, 0xBDC0}, //3543 #HANGUL SYLLABLE PIEUP WE RIEUL + {0x94EE, 0xBDC1}, //3544 #HANGUL SYLLABLE PIEUP WE RIEULKIYEOK + {0x94EF, 0xBDC2}, //3545 #HANGUL SYLLABLE PIEUP WE RIEULMIEUM + {0x94F0, 0xBDC3}, //3546 #HANGUL SYLLABLE PIEUP WE RIEULPIEUP + {0x94F1, 0xBDC4}, //3547 #HANGUL SYLLABLE PIEUP WE RIEULSIOS + {0x94F2, 0xBDC5}, //3548 #HANGUL SYLLABLE PIEUP WE RIEULTHIEUTH + {0x94F3, 0xBDC6}, //3549 #HANGUL SYLLABLE PIEUP WE RIEULPHIEUPH + {0x94F4, 0xBDC7}, //3550 #HANGUL SYLLABLE PIEUP WE RIEULHIEUH + {0x94F5, 0xBDC8}, //3551 #HANGUL SYLLABLE PIEUP WE MIEUM + {0x94F6, 0xBDC9}, //3552 #HANGUL SYLLABLE PIEUP WE PIEUP + {0x94F7, 0xBDCA}, //3553 #HANGUL SYLLABLE PIEUP WE PIEUPSIOS + {0x94F8, 0xBDCB}, //3554 #HANGUL SYLLABLE PIEUP WE SIOS + {0x94F9, 0xBDCC}, //3555 #HANGUL SYLLABLE PIEUP WE SSANGSIOS + {0x94FA, 0xBDCD}, //3556 #HANGUL SYLLABLE PIEUP WE IEUNG + {0x94FB, 0xBDCE}, //3557 #HANGUL SYLLABLE PIEUP WE CIEUC + {0x94FC, 0xBDCF}, //3558 #HANGUL SYLLABLE PIEUP WE CHIEUCH + {0x94FD, 0xBDD0}, //3559 #HANGUL SYLLABLE PIEUP WE KHIEUKH + {0x94FE, 0xBDD1}, //3560 #HANGUL SYLLABLE PIEUP WE THIEUTH + {0x9541, 0xBDD2}, //3561 #HANGUL SYLLABLE PIEUP WE PHIEUPH + {0x9542, 0xBDD3}, //3562 #HANGUL SYLLABLE PIEUP WE HIEUH + {0x9543, 0xBDD6}, //3563 #HANGUL SYLLABLE PIEUP WI SSANGKIYEOK + {0x9544, 0xBDD7}, //3564 #HANGUL SYLLABLE PIEUP WI KIYEOKSIOS + {0x9545, 0xBDD9}, //3565 #HANGUL SYLLABLE PIEUP WI NIEUNCIEUC + {0x9546, 0xBDDA}, //3566 #HANGUL SYLLABLE PIEUP WI NIEUNHIEUH + {0x9547, 0xBDDB}, //3567 #HANGUL SYLLABLE PIEUP WI TIKEUT + {0x9548, 0xBDDD}, //3568 #HANGUL SYLLABLE PIEUP WI RIEULKIYEOK + {0x9549, 0xBDDE}, //3569 #HANGUL SYLLABLE PIEUP WI RIEULMIEUM + {0x954A, 0xBDDF}, //3570 #HANGUL SYLLABLE PIEUP WI RIEULPIEUP + {0x954B, 0xBDE0}, //3571 #HANGUL SYLLABLE PIEUP WI RIEULSIOS + {0x954C, 0xBDE1}, //3572 #HANGUL SYLLABLE PIEUP WI RIEULTHIEUTH + {0x954D, 0xBDE2}, //3573 #HANGUL SYLLABLE PIEUP WI RIEULPHIEUPH + {0x954E, 0xBDE3}, //3574 #HANGUL SYLLABLE PIEUP WI RIEULHIEUH + {0x954F, 0xBDE4}, //3575 #HANGUL SYLLABLE PIEUP WI MIEUM + {0x9550, 0xBDE5}, //3576 #HANGUL SYLLABLE PIEUP WI PIEUP + {0x9551, 0xBDE6}, //3577 #HANGUL SYLLABLE PIEUP WI PIEUPSIOS + {0x9552, 0xBDE7}, //3578 #HANGUL SYLLABLE PIEUP WI SIOS + {0x9553, 0xBDE8}, //3579 #HANGUL SYLLABLE PIEUP WI SSANGSIOS + {0x9554, 0xBDEA}, //3580 #HANGUL SYLLABLE PIEUP WI CIEUC + {0x9555, 0xBDEB}, //3581 #HANGUL SYLLABLE PIEUP WI CHIEUCH + {0x9556, 0xBDEC}, //3582 #HANGUL SYLLABLE PIEUP WI KHIEUKH + {0x9557, 0xBDED}, //3583 #HANGUL SYLLABLE PIEUP WI THIEUTH + {0x9558, 0xBDEE}, //3584 #HANGUL SYLLABLE PIEUP WI PHIEUPH + {0x9559, 0xBDEF}, //3585 #HANGUL SYLLABLE PIEUP WI HIEUH + {0x955A, 0xBDF1}, //3586 #HANGUL SYLLABLE PIEUP YU KIYEOK + {0x9561, 0xBDF2}, //3587 #HANGUL SYLLABLE PIEUP YU SSANGKIYEOK + {0x9562, 0xBDF3}, //3588 #HANGUL SYLLABLE PIEUP YU KIYEOKSIOS + {0x9563, 0xBDF5}, //3589 #HANGUL SYLLABLE PIEUP YU NIEUNCIEUC + {0x9564, 0xBDF6}, //3590 #HANGUL SYLLABLE PIEUP YU NIEUNHIEUH + {0x9565, 0xBDF7}, //3591 #HANGUL SYLLABLE PIEUP YU TIKEUT + {0x9566, 0xBDF9}, //3592 #HANGUL SYLLABLE PIEUP YU RIEULKIYEOK + {0x9567, 0xBDFA}, //3593 #HANGUL SYLLABLE PIEUP YU RIEULMIEUM + {0x9568, 0xBDFB}, //3594 #HANGUL SYLLABLE PIEUP YU RIEULPIEUP + {0x9569, 0xBDFC}, //3595 #HANGUL SYLLABLE PIEUP YU RIEULSIOS + {0x956A, 0xBDFD}, //3596 #HANGUL SYLLABLE PIEUP YU RIEULTHIEUTH + {0x956B, 0xBDFE}, //3597 #HANGUL SYLLABLE PIEUP YU RIEULPHIEUPH + {0x956C, 0xBDFF}, //3598 #HANGUL SYLLABLE PIEUP YU RIEULHIEUH + {0x956D, 0xBE01}, //3599 #HANGUL SYLLABLE PIEUP YU PIEUP + {0x956E, 0xBE02}, //3600 #HANGUL SYLLABLE PIEUP YU PIEUPSIOS + {0x956F, 0xBE04}, //3601 #HANGUL SYLLABLE PIEUP YU SSANGSIOS + {0x9570, 0xBE06}, //3602 #HANGUL SYLLABLE PIEUP YU CIEUC + {0x9571, 0xBE07}, //3603 #HANGUL SYLLABLE PIEUP YU CHIEUCH + {0x9572, 0xBE08}, //3604 #HANGUL SYLLABLE PIEUP YU KHIEUKH + {0x9573, 0xBE09}, //3605 #HANGUL SYLLABLE PIEUP YU THIEUTH + {0x9574, 0xBE0A}, //3606 #HANGUL SYLLABLE PIEUP YU PHIEUPH + {0x9575, 0xBE0B}, //3607 #HANGUL SYLLABLE PIEUP YU HIEUH + {0x9576, 0xBE0E}, //3608 #HANGUL SYLLABLE PIEUP EU SSANGKIYEOK + {0x9577, 0xBE0F}, //3609 #HANGUL SYLLABLE PIEUP EU KIYEOKSIOS + {0x9578, 0xBE11}, //3610 #HANGUL SYLLABLE PIEUP EU NIEUNCIEUC + {0x9579, 0xBE12}, //3611 #HANGUL SYLLABLE PIEUP EU NIEUNHIEUH + {0x957A, 0xBE13}, //3612 #HANGUL SYLLABLE PIEUP EU TIKEUT + {0x9581, 0xBE15}, //3613 #HANGUL SYLLABLE PIEUP EU RIEULKIYEOK + {0x9582, 0xBE16}, //3614 #HANGUL SYLLABLE PIEUP EU RIEULMIEUM + {0x9583, 0xBE17}, //3615 #HANGUL SYLLABLE PIEUP EU RIEULPIEUP + {0x9584, 0xBE18}, //3616 #HANGUL SYLLABLE PIEUP EU RIEULSIOS + {0x9585, 0xBE19}, //3617 #HANGUL SYLLABLE PIEUP EU RIEULTHIEUTH + {0x9586, 0xBE1A}, //3618 #HANGUL SYLLABLE PIEUP EU RIEULPHIEUPH + {0x9587, 0xBE1B}, //3619 #HANGUL SYLLABLE PIEUP EU RIEULHIEUH + {0x9588, 0xBE1E}, //3620 #HANGUL SYLLABLE PIEUP EU PIEUPSIOS + {0x9589, 0xBE20}, //3621 #HANGUL SYLLABLE PIEUP EU SSANGSIOS + {0x958A, 0xBE21}, //3622 #HANGUL SYLLABLE PIEUP EU IEUNG + {0x958B, 0xBE22}, //3623 #HANGUL SYLLABLE PIEUP EU CIEUC + {0x958C, 0xBE23}, //3624 #HANGUL SYLLABLE PIEUP EU CHIEUCH + {0x958D, 0xBE24}, //3625 #HANGUL SYLLABLE PIEUP EU KHIEUKH + {0x958E, 0xBE25}, //3626 #HANGUL SYLLABLE PIEUP EU THIEUTH + {0x958F, 0xBE26}, //3627 #HANGUL SYLLABLE PIEUP EU PHIEUPH + {0x9590, 0xBE27}, //3628 #HANGUL SYLLABLE PIEUP EU HIEUH + {0x9591, 0xBE28}, //3629 #HANGUL SYLLABLE PIEUP YI + {0x9592, 0xBE29}, //3630 #HANGUL SYLLABLE PIEUP YI KIYEOK + {0x9593, 0xBE2A}, //3631 #HANGUL SYLLABLE PIEUP YI SSANGKIYEOK + {0x9594, 0xBE2B}, //3632 #HANGUL SYLLABLE PIEUP YI KIYEOKSIOS + {0x9595, 0xBE2C}, //3633 #HANGUL SYLLABLE PIEUP YI NIEUN + {0x9596, 0xBE2D}, //3634 #HANGUL SYLLABLE PIEUP YI NIEUNCIEUC + {0x9597, 0xBE2E}, //3635 #HANGUL SYLLABLE PIEUP YI NIEUNHIEUH + {0x9598, 0xBE2F}, //3636 #HANGUL SYLLABLE PIEUP YI TIKEUT + {0x9599, 0xBE30}, //3637 #HANGUL SYLLABLE PIEUP YI RIEUL + {0x959A, 0xBE31}, //3638 #HANGUL SYLLABLE PIEUP YI RIEULKIYEOK + {0x959B, 0xBE32}, //3639 #HANGUL SYLLABLE PIEUP YI RIEULMIEUM + {0x959C, 0xBE33}, //3640 #HANGUL SYLLABLE PIEUP YI RIEULPIEUP + {0x959D, 0xBE34}, //3641 #HANGUL SYLLABLE PIEUP YI RIEULSIOS + {0x959E, 0xBE35}, //3642 #HANGUL SYLLABLE PIEUP YI RIEULTHIEUTH + {0x959F, 0xBE36}, //3643 #HANGUL SYLLABLE PIEUP YI RIEULPHIEUPH + {0x95A0, 0xBE37}, //3644 #HANGUL SYLLABLE PIEUP YI RIEULHIEUH + {0x95A1, 0xBE38}, //3645 #HANGUL SYLLABLE PIEUP YI MIEUM + {0x95A2, 0xBE39}, //3646 #HANGUL SYLLABLE PIEUP YI PIEUP + {0x95A3, 0xBE3A}, //3647 #HANGUL SYLLABLE PIEUP YI PIEUPSIOS + {0x95A4, 0xBE3B}, //3648 #HANGUL SYLLABLE PIEUP YI SIOS + {0x95A5, 0xBE3C}, //3649 #HANGUL SYLLABLE PIEUP YI SSANGSIOS + {0x95A6, 0xBE3D}, //3650 #HANGUL SYLLABLE PIEUP YI IEUNG + {0x95A7, 0xBE3E}, //3651 #HANGUL SYLLABLE PIEUP YI CIEUC + {0x95A8, 0xBE3F}, //3652 #HANGUL SYLLABLE PIEUP YI CHIEUCH + {0x95A9, 0xBE40}, //3653 #HANGUL SYLLABLE PIEUP YI KHIEUKH + {0x95AA, 0xBE41}, //3654 #HANGUL SYLLABLE PIEUP YI THIEUTH + {0x95AB, 0xBE42}, //3655 #HANGUL SYLLABLE PIEUP YI PHIEUPH + {0x95AC, 0xBE43}, //3656 #HANGUL SYLLABLE PIEUP YI HIEUH + {0x95AD, 0xBE46}, //3657 #HANGUL SYLLABLE PIEUP I SSANGKIYEOK + {0x95AE, 0xBE47}, //3658 #HANGUL SYLLABLE PIEUP I KIYEOKSIOS + {0x95AF, 0xBE49}, //3659 #HANGUL SYLLABLE PIEUP I NIEUNCIEUC + {0x95B0, 0xBE4A}, //3660 #HANGUL SYLLABLE PIEUP I NIEUNHIEUH + {0x95B1, 0xBE4B}, //3661 #HANGUL SYLLABLE PIEUP I TIKEUT + {0x95B2, 0xBE4D}, //3662 #HANGUL SYLLABLE PIEUP I RIEULKIYEOK + {0x95B3, 0xBE4F}, //3663 #HANGUL SYLLABLE PIEUP I RIEULPIEUP + {0x95B4, 0xBE50}, //3664 #HANGUL SYLLABLE PIEUP I RIEULSIOS + {0x95B5, 0xBE51}, //3665 #HANGUL SYLLABLE PIEUP I RIEULTHIEUTH + {0x95B6, 0xBE52}, //3666 #HANGUL SYLLABLE PIEUP I RIEULPHIEUPH + {0x95B7, 0xBE53}, //3667 #HANGUL SYLLABLE PIEUP I RIEULHIEUH + {0x95B8, 0xBE56}, //3668 #HANGUL SYLLABLE PIEUP I PIEUPSIOS + {0x95B9, 0xBE58}, //3669 #HANGUL SYLLABLE PIEUP I SSANGSIOS + {0x95BA, 0xBE5C}, //3670 #HANGUL SYLLABLE PIEUP I KHIEUKH + {0x95BB, 0xBE5D}, //3671 #HANGUL SYLLABLE PIEUP I THIEUTH + {0x95BC, 0xBE5E}, //3672 #HANGUL SYLLABLE PIEUP I PHIEUPH + {0x95BD, 0xBE5F}, //3673 #HANGUL SYLLABLE PIEUP I HIEUH + {0x95BE, 0xBE62}, //3674 #HANGUL SYLLABLE SSANGPIEUP A SSANGKIYEOK + {0x95BF, 0xBE63}, //3675 #HANGUL SYLLABLE SSANGPIEUP A KIYEOKSIOS + {0x95C0, 0xBE65}, //3676 #HANGUL SYLLABLE SSANGPIEUP A NIEUNCIEUC + {0x95C1, 0xBE66}, //3677 #HANGUL SYLLABLE SSANGPIEUP A NIEUNHIEUH + {0x95C2, 0xBE67}, //3678 #HANGUL SYLLABLE SSANGPIEUP A TIKEUT + {0x95C3, 0xBE69}, //3679 #HANGUL SYLLABLE SSANGPIEUP A RIEULKIYEOK + {0x95C4, 0xBE6B}, //3680 #HANGUL SYLLABLE SSANGPIEUP A RIEULPIEUP + {0x95C5, 0xBE6C}, //3681 #HANGUL SYLLABLE SSANGPIEUP A RIEULSIOS + {0x95C6, 0xBE6D}, //3682 #HANGUL SYLLABLE SSANGPIEUP A RIEULTHIEUTH + {0x95C7, 0xBE6E}, //3683 #HANGUL SYLLABLE SSANGPIEUP A RIEULPHIEUPH + {0x95C8, 0xBE6F}, //3684 #HANGUL SYLLABLE SSANGPIEUP A RIEULHIEUH + {0x95C9, 0xBE72}, //3685 #HANGUL SYLLABLE SSANGPIEUP A PIEUPSIOS + {0x95CA, 0xBE76}, //3686 #HANGUL SYLLABLE SSANGPIEUP A CIEUC + {0x95CB, 0xBE77}, //3687 #HANGUL SYLLABLE SSANGPIEUP A CHIEUCH + {0x95CC, 0xBE78}, //3688 #HANGUL SYLLABLE SSANGPIEUP A KHIEUKH + {0x95CD, 0xBE79}, //3689 #HANGUL SYLLABLE SSANGPIEUP A THIEUTH + {0x95CE, 0xBE7A}, //3690 #HANGUL SYLLABLE SSANGPIEUP A PHIEUPH + {0x95CF, 0xBE7E}, //3691 #HANGUL SYLLABLE SSANGPIEUP AE SSANGKIYEOK + {0x95D0, 0xBE7F}, //3692 #HANGUL SYLLABLE SSANGPIEUP AE KIYEOKSIOS + {0x95D1, 0xBE81}, //3693 #HANGUL SYLLABLE SSANGPIEUP AE NIEUNCIEUC + {0x95D2, 0xBE82}, //3694 #HANGUL SYLLABLE SSANGPIEUP AE NIEUNHIEUH + {0x95D3, 0xBE83}, //3695 #HANGUL SYLLABLE SSANGPIEUP AE TIKEUT + {0x95D4, 0xBE85}, //3696 #HANGUL SYLLABLE SSANGPIEUP AE RIEULKIYEOK + {0x95D5, 0xBE86}, //3697 #HANGUL SYLLABLE SSANGPIEUP AE RIEULMIEUM + {0x95D6, 0xBE87}, //3698 #HANGUL SYLLABLE SSANGPIEUP AE RIEULPIEUP + {0x95D7, 0xBE88}, //3699 #HANGUL SYLLABLE SSANGPIEUP AE RIEULSIOS + {0x95D8, 0xBE89}, //3700 #HANGUL SYLLABLE SSANGPIEUP AE RIEULTHIEUTH + {0x95D9, 0xBE8A}, //3701 #HANGUL SYLLABLE SSANGPIEUP AE RIEULPHIEUPH + {0x95DA, 0xBE8B}, //3702 #HANGUL SYLLABLE SSANGPIEUP AE RIEULHIEUH + {0x95DB, 0xBE8E}, //3703 #HANGUL SYLLABLE SSANGPIEUP AE PIEUPSIOS + {0x95DC, 0xBE92}, //3704 #HANGUL SYLLABLE SSANGPIEUP AE CIEUC + {0x95DD, 0xBE93}, //3705 #HANGUL SYLLABLE SSANGPIEUP AE CHIEUCH + {0x95DE, 0xBE94}, //3706 #HANGUL SYLLABLE SSANGPIEUP AE KHIEUKH + {0x95DF, 0xBE95}, //3707 #HANGUL SYLLABLE SSANGPIEUP AE THIEUTH + {0x95E0, 0xBE96}, //3708 #HANGUL SYLLABLE SSANGPIEUP AE PHIEUPH + {0x95E1, 0xBE97}, //3709 #HANGUL SYLLABLE SSANGPIEUP AE HIEUH + {0x95E2, 0xBE9A}, //3710 #HANGUL SYLLABLE SSANGPIEUP YA SSANGKIYEOK + {0x95E3, 0xBE9B}, //3711 #HANGUL SYLLABLE SSANGPIEUP YA KIYEOKSIOS + {0x95E4, 0xBE9C}, //3712 #HANGUL SYLLABLE SSANGPIEUP YA NIEUN + {0x95E5, 0xBE9D}, //3713 #HANGUL SYLLABLE SSANGPIEUP YA NIEUNCIEUC + {0x95E6, 0xBE9E}, //3714 #HANGUL SYLLABLE SSANGPIEUP YA NIEUNHIEUH + {0x95E7, 0xBE9F}, //3715 #HANGUL SYLLABLE SSANGPIEUP YA TIKEUT + {0x95E8, 0xBEA0}, //3716 #HANGUL SYLLABLE SSANGPIEUP YA RIEUL + {0x95E9, 0xBEA1}, //3717 #HANGUL SYLLABLE SSANGPIEUP YA RIEULKIYEOK + {0x95EA, 0xBEA2}, //3718 #HANGUL SYLLABLE SSANGPIEUP YA RIEULMIEUM + {0x95EB, 0xBEA3}, //3719 #HANGUL SYLLABLE SSANGPIEUP YA RIEULPIEUP + {0x95EC, 0xBEA4}, //3720 #HANGUL SYLLABLE SSANGPIEUP YA RIEULSIOS + {0x95ED, 0xBEA5}, //3721 #HANGUL SYLLABLE SSANGPIEUP YA RIEULTHIEUTH + {0x95EE, 0xBEA6}, //3722 #HANGUL SYLLABLE SSANGPIEUP YA RIEULPHIEUPH + {0x95EF, 0xBEA7}, //3723 #HANGUL SYLLABLE SSANGPIEUP YA RIEULHIEUH + {0x95F0, 0xBEA9}, //3724 #HANGUL SYLLABLE SSANGPIEUP YA PIEUP + {0x95F1, 0xBEAA}, //3725 #HANGUL SYLLABLE SSANGPIEUP YA PIEUPSIOS + {0x95F2, 0xBEAB}, //3726 #HANGUL SYLLABLE SSANGPIEUP YA SIOS + {0x95F3, 0xBEAC}, //3727 #HANGUL SYLLABLE SSANGPIEUP YA SSANGSIOS + {0x95F4, 0xBEAD}, //3728 #HANGUL SYLLABLE SSANGPIEUP YA IEUNG + {0x95F5, 0xBEAE}, //3729 #HANGUL SYLLABLE SSANGPIEUP YA CIEUC + {0x95F6, 0xBEAF}, //3730 #HANGUL SYLLABLE SSANGPIEUP YA CHIEUCH + {0x95F7, 0xBEB0}, //3731 #HANGUL SYLLABLE SSANGPIEUP YA KHIEUKH + {0x95F8, 0xBEB1}, //3732 #HANGUL SYLLABLE SSANGPIEUP YA THIEUTH + {0x95F9, 0xBEB2}, //3733 #HANGUL SYLLABLE SSANGPIEUP YA PHIEUPH + {0x95FA, 0xBEB3}, //3734 #HANGUL SYLLABLE SSANGPIEUP YA HIEUH + {0x95FB, 0xBEB4}, //3735 #HANGUL SYLLABLE SSANGPIEUP YAE + {0x95FC, 0xBEB5}, //3736 #HANGUL SYLLABLE SSANGPIEUP YAE KIYEOK + {0x95FD, 0xBEB6}, //3737 #HANGUL SYLLABLE SSANGPIEUP YAE SSANGKIYEOK + {0x95FE, 0xBEB7}, //3738 #HANGUL SYLLABLE SSANGPIEUP YAE KIYEOKSIOS + {0x9641, 0xBEB8}, //3739 #HANGUL SYLLABLE SSANGPIEUP YAE NIEUN + {0x9642, 0xBEB9}, //3740 #HANGUL SYLLABLE SSANGPIEUP YAE NIEUNCIEUC + {0x9643, 0xBEBA}, //3741 #HANGUL SYLLABLE SSANGPIEUP YAE NIEUNHIEUH + {0x9644, 0xBEBB}, //3742 #HANGUL SYLLABLE SSANGPIEUP YAE TIKEUT + {0x9645, 0xBEBC}, //3743 #HANGUL SYLLABLE SSANGPIEUP YAE RIEUL + {0x9646, 0xBEBD}, //3744 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULKIYEOK + {0x9647, 0xBEBE}, //3745 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULMIEUM + {0x9648, 0xBEBF}, //3746 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULPIEUP + {0x9649, 0xBEC0}, //3747 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULSIOS + {0x964A, 0xBEC1}, //3748 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULTHIEUTH + {0x964B, 0xBEC2}, //3749 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULPHIEUPH + {0x964C, 0xBEC3}, //3750 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULHIEUH + {0x964D, 0xBEC4}, //3751 #HANGUL SYLLABLE SSANGPIEUP YAE MIEUM + {0x964E, 0xBEC5}, //3752 #HANGUL SYLLABLE SSANGPIEUP YAE PIEUP + {0x964F, 0xBEC6}, //3753 #HANGUL SYLLABLE SSANGPIEUP YAE PIEUPSIOS + {0x9650, 0xBEC7}, //3754 #HANGUL SYLLABLE SSANGPIEUP YAE SIOS + {0x9651, 0xBEC8}, //3755 #HANGUL SYLLABLE SSANGPIEUP YAE SSANGSIOS + {0x9652, 0xBEC9}, //3756 #HANGUL SYLLABLE SSANGPIEUP YAE IEUNG + {0x9653, 0xBECA}, //3757 #HANGUL SYLLABLE SSANGPIEUP YAE CIEUC + {0x9654, 0xBECB}, //3758 #HANGUL SYLLABLE SSANGPIEUP YAE CHIEUCH + {0x9655, 0xBECC}, //3759 #HANGUL SYLLABLE SSANGPIEUP YAE KHIEUKH + {0x9656, 0xBECD}, //3760 #HANGUL SYLLABLE SSANGPIEUP YAE THIEUTH + {0x9657, 0xBECE}, //3761 #HANGUL SYLLABLE SSANGPIEUP YAE PHIEUPH + {0x9658, 0xBECF}, //3762 #HANGUL SYLLABLE SSANGPIEUP YAE HIEUH + {0x9659, 0xBED2}, //3763 #HANGUL SYLLABLE SSANGPIEUP EO SSANGKIYEOK + {0x965A, 0xBED3}, //3764 #HANGUL SYLLABLE SSANGPIEUP EO KIYEOKSIOS + {0x9661, 0xBED5}, //3765 #HANGUL SYLLABLE SSANGPIEUP EO NIEUNCIEUC + {0x9662, 0xBED6}, //3766 #HANGUL SYLLABLE SSANGPIEUP EO NIEUNHIEUH + {0x9663, 0xBED9}, //3767 #HANGUL SYLLABLE SSANGPIEUP EO RIEULKIYEOK + {0x9664, 0xBEDA}, //3768 #HANGUL SYLLABLE SSANGPIEUP EO RIEULMIEUM + {0x9665, 0xBEDB}, //3769 #HANGUL SYLLABLE SSANGPIEUP EO RIEULPIEUP + {0x9666, 0xBEDC}, //3770 #HANGUL SYLLABLE SSANGPIEUP EO RIEULSIOS + {0x9667, 0xBEDD}, //3771 #HANGUL SYLLABLE SSANGPIEUP EO RIEULTHIEUTH + {0x9668, 0xBEDE}, //3772 #HANGUL SYLLABLE SSANGPIEUP EO RIEULPHIEUPH + {0x9669, 0xBEDF}, //3773 #HANGUL SYLLABLE SSANGPIEUP EO RIEULHIEUH + {0x966A, 0xBEE1}, //3774 #HANGUL SYLLABLE SSANGPIEUP EO PIEUP + {0x966B, 0xBEE2}, //3775 #HANGUL SYLLABLE SSANGPIEUP EO PIEUPSIOS + {0x966C, 0xBEE6}, //3776 #HANGUL SYLLABLE SSANGPIEUP EO CIEUC + {0x966D, 0xBEE7}, //3777 #HANGUL SYLLABLE SSANGPIEUP EO CHIEUCH + {0x966E, 0xBEE8}, //3778 #HANGUL SYLLABLE SSANGPIEUP EO KHIEUKH + {0x966F, 0xBEE9}, //3779 #HANGUL SYLLABLE SSANGPIEUP EO THIEUTH + {0x9670, 0xBEEA}, //3780 #HANGUL SYLLABLE SSANGPIEUP EO PHIEUPH + {0x9671, 0xBEEB}, //3781 #HANGUL SYLLABLE SSANGPIEUP EO HIEUH + {0x9672, 0xBEED}, //3782 #HANGUL SYLLABLE SSANGPIEUP E KIYEOK + {0x9673, 0xBEEE}, //3783 #HANGUL SYLLABLE SSANGPIEUP E SSANGKIYEOK + {0x9674, 0xBEEF}, //3784 #HANGUL SYLLABLE SSANGPIEUP E KIYEOKSIOS + {0x9675, 0xBEF0}, //3785 #HANGUL SYLLABLE SSANGPIEUP E NIEUN + {0x9676, 0xBEF1}, //3786 #HANGUL SYLLABLE SSANGPIEUP E NIEUNCIEUC + {0x9677, 0xBEF2}, //3787 #HANGUL SYLLABLE SSANGPIEUP E NIEUNHIEUH + {0x9678, 0xBEF3}, //3788 #HANGUL SYLLABLE SSANGPIEUP E TIKEUT + {0x9679, 0xBEF4}, //3789 #HANGUL SYLLABLE SSANGPIEUP E RIEUL + {0x967A, 0xBEF5}, //3790 #HANGUL SYLLABLE SSANGPIEUP E RIEULKIYEOK + {0x9681, 0xBEF6}, //3791 #HANGUL SYLLABLE SSANGPIEUP E RIEULMIEUM + {0x9682, 0xBEF7}, //3792 #HANGUL SYLLABLE SSANGPIEUP E RIEULPIEUP + {0x9683, 0xBEF8}, //3793 #HANGUL SYLLABLE SSANGPIEUP E RIEULSIOS + {0x9684, 0xBEF9}, //3794 #HANGUL SYLLABLE SSANGPIEUP E RIEULTHIEUTH + {0x9685, 0xBEFA}, //3795 #HANGUL SYLLABLE SSANGPIEUP E RIEULPHIEUPH + {0x9686, 0xBEFB}, //3796 #HANGUL SYLLABLE SSANGPIEUP E RIEULHIEUH + {0x9687, 0xBEFC}, //3797 #HANGUL SYLLABLE SSANGPIEUP E MIEUM + {0x9688, 0xBEFD}, //3798 #HANGUL SYLLABLE SSANGPIEUP E PIEUP + {0x9689, 0xBEFE}, //3799 #HANGUL SYLLABLE SSANGPIEUP E PIEUPSIOS + {0x968A, 0xBEFF}, //3800 #HANGUL SYLLABLE SSANGPIEUP E SIOS + {0x968B, 0xBF00}, //3801 #HANGUL SYLLABLE SSANGPIEUP E SSANGSIOS + {0x968C, 0xBF02}, //3802 #HANGUL SYLLABLE SSANGPIEUP E CIEUC + {0x968D, 0xBF03}, //3803 #HANGUL SYLLABLE SSANGPIEUP E CHIEUCH + {0x968E, 0xBF04}, //3804 #HANGUL SYLLABLE SSANGPIEUP E KHIEUKH + {0x968F, 0xBF05}, //3805 #HANGUL SYLLABLE SSANGPIEUP E THIEUTH + {0x9690, 0xBF06}, //3806 #HANGUL SYLLABLE SSANGPIEUP E PHIEUPH + {0x9691, 0xBF07}, //3807 #HANGUL SYLLABLE SSANGPIEUP E HIEUH + {0x9692, 0xBF0A}, //3808 #HANGUL SYLLABLE SSANGPIEUP YEO SSANGKIYEOK + {0x9693, 0xBF0B}, //3809 #HANGUL SYLLABLE SSANGPIEUP YEO KIYEOKSIOS + {0x9694, 0xBF0C}, //3810 #HANGUL SYLLABLE SSANGPIEUP YEO NIEUN + {0x9695, 0xBF0D}, //3811 #HANGUL SYLLABLE SSANGPIEUP YEO NIEUNCIEUC + {0x9696, 0xBF0E}, //3812 #HANGUL SYLLABLE SSANGPIEUP YEO NIEUNHIEUH + {0x9697, 0xBF0F}, //3813 #HANGUL SYLLABLE SSANGPIEUP YEO TIKEUT + {0x9698, 0xBF10}, //3814 #HANGUL SYLLABLE SSANGPIEUP YEO RIEUL + {0x9699, 0xBF11}, //3815 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULKIYEOK + {0x969A, 0xBF12}, //3816 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULMIEUM + {0x969B, 0xBF13}, //3817 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULPIEUP + {0x969C, 0xBF14}, //3818 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULSIOS + {0x969D, 0xBF15}, //3819 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULTHIEUTH + {0x969E, 0xBF16}, //3820 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULPHIEUPH + {0x969F, 0xBF17}, //3821 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULHIEUH + {0x96A0, 0xBF1A}, //3822 #HANGUL SYLLABLE SSANGPIEUP YEO PIEUPSIOS + {0x96A1, 0xBF1E}, //3823 #HANGUL SYLLABLE SSANGPIEUP YEO CIEUC + {0x96A2, 0xBF1F}, //3824 #HANGUL SYLLABLE SSANGPIEUP YEO CHIEUCH + {0x96A3, 0xBF20}, //3825 #HANGUL SYLLABLE SSANGPIEUP YEO KHIEUKH + {0x96A4, 0xBF21}, //3826 #HANGUL SYLLABLE SSANGPIEUP YEO THIEUTH + {0x96A5, 0xBF22}, //3827 #HANGUL SYLLABLE SSANGPIEUP YEO PHIEUPH + {0x96A6, 0xBF23}, //3828 #HANGUL SYLLABLE SSANGPIEUP YEO HIEUH + {0x96A7, 0xBF24}, //3829 #HANGUL SYLLABLE SSANGPIEUP YE + {0x96A8, 0xBF25}, //3830 #HANGUL SYLLABLE SSANGPIEUP YE KIYEOK + {0x96A9, 0xBF26}, //3831 #HANGUL SYLLABLE SSANGPIEUP YE SSANGKIYEOK + {0x96AA, 0xBF27}, //3832 #HANGUL SYLLABLE SSANGPIEUP YE KIYEOKSIOS + {0x96AB, 0xBF28}, //3833 #HANGUL SYLLABLE SSANGPIEUP YE NIEUN + {0x96AC, 0xBF29}, //3834 #HANGUL SYLLABLE SSANGPIEUP YE NIEUNCIEUC + {0x96AD, 0xBF2A}, //3835 #HANGUL SYLLABLE SSANGPIEUP YE NIEUNHIEUH + {0x96AE, 0xBF2B}, //3836 #HANGUL SYLLABLE SSANGPIEUP YE TIKEUT + {0x96AF, 0xBF2C}, //3837 #HANGUL SYLLABLE SSANGPIEUP YE RIEUL + {0x96B0, 0xBF2D}, //3838 #HANGUL SYLLABLE SSANGPIEUP YE RIEULKIYEOK + {0x96B1, 0xBF2E}, //3839 #HANGUL SYLLABLE SSANGPIEUP YE RIEULMIEUM + {0x96B2, 0xBF2F}, //3840 #HANGUL SYLLABLE SSANGPIEUP YE RIEULPIEUP + {0x96B3, 0xBF30}, //3841 #HANGUL SYLLABLE SSANGPIEUP YE RIEULSIOS + {0x96B4, 0xBF31}, //3842 #HANGUL SYLLABLE SSANGPIEUP YE RIEULTHIEUTH + {0x96B5, 0xBF32}, //3843 #HANGUL SYLLABLE SSANGPIEUP YE RIEULPHIEUPH + {0x96B6, 0xBF33}, //3844 #HANGUL SYLLABLE SSANGPIEUP YE RIEULHIEUH + {0x96B7, 0xBF34}, //3845 #HANGUL SYLLABLE SSANGPIEUP YE MIEUM + {0x96B8, 0xBF35}, //3846 #HANGUL SYLLABLE SSANGPIEUP YE PIEUP + {0x96B9, 0xBF36}, //3847 #HANGUL SYLLABLE SSANGPIEUP YE PIEUPSIOS + {0x96BA, 0xBF37}, //3848 #HANGUL SYLLABLE SSANGPIEUP YE SIOS + {0x96BB, 0xBF38}, //3849 #HANGUL SYLLABLE SSANGPIEUP YE SSANGSIOS + {0x96BC, 0xBF39}, //3850 #HANGUL SYLLABLE SSANGPIEUP YE IEUNG + {0x96BD, 0xBF3A}, //3851 #HANGUL SYLLABLE SSANGPIEUP YE CIEUC + {0x96BE, 0xBF3B}, //3852 #HANGUL SYLLABLE SSANGPIEUP YE CHIEUCH + {0x96BF, 0xBF3C}, //3853 #HANGUL SYLLABLE SSANGPIEUP YE KHIEUKH + {0x96C0, 0xBF3D}, //3854 #HANGUL SYLLABLE SSANGPIEUP YE THIEUTH + {0x96C1, 0xBF3E}, //3855 #HANGUL SYLLABLE SSANGPIEUP YE PHIEUPH + {0x96C2, 0xBF3F}, //3856 #HANGUL SYLLABLE SSANGPIEUP YE HIEUH + {0x96C3, 0xBF42}, //3857 #HANGUL SYLLABLE SSANGPIEUP O SSANGKIYEOK + {0x96C4, 0xBF43}, //3858 #HANGUL SYLLABLE SSANGPIEUP O KIYEOKSIOS + {0x96C5, 0xBF45}, //3859 #HANGUL SYLLABLE SSANGPIEUP O NIEUNCIEUC + {0x96C6, 0xBF46}, //3860 #HANGUL SYLLABLE SSANGPIEUP O NIEUNHIEUH + {0x96C7, 0xBF47}, //3861 #HANGUL SYLLABLE SSANGPIEUP O TIKEUT + {0x96C8, 0xBF49}, //3862 #HANGUL SYLLABLE SSANGPIEUP O RIEULKIYEOK + {0x96C9, 0xBF4A}, //3863 #HANGUL SYLLABLE SSANGPIEUP O RIEULMIEUM + {0x96CA, 0xBF4B}, //3864 #HANGUL SYLLABLE SSANGPIEUP O RIEULPIEUP + {0x96CB, 0xBF4C}, //3865 #HANGUL SYLLABLE SSANGPIEUP O RIEULSIOS + {0x96CC, 0xBF4D}, //3866 #HANGUL SYLLABLE SSANGPIEUP O RIEULTHIEUTH + {0x96CD, 0xBF4E}, //3867 #HANGUL SYLLABLE SSANGPIEUP O RIEULPHIEUPH + {0x96CE, 0xBF4F}, //3868 #HANGUL SYLLABLE SSANGPIEUP O RIEULHIEUH + {0x96CF, 0xBF52}, //3869 #HANGUL SYLLABLE SSANGPIEUP O PIEUPSIOS + {0x96D0, 0xBF53}, //3870 #HANGUL SYLLABLE SSANGPIEUP O SIOS + {0x96D1, 0xBF54}, //3871 #HANGUL SYLLABLE SSANGPIEUP O SSANGSIOS + {0x96D2, 0xBF56}, //3872 #HANGUL SYLLABLE SSANGPIEUP O CIEUC + {0x96D3, 0xBF57}, //3873 #HANGUL SYLLABLE SSANGPIEUP O CHIEUCH + {0x96D4, 0xBF58}, //3874 #HANGUL SYLLABLE SSANGPIEUP O KHIEUKH + {0x96D5, 0xBF59}, //3875 #HANGUL SYLLABLE SSANGPIEUP O THIEUTH + {0x96D6, 0xBF5A}, //3876 #HANGUL SYLLABLE SSANGPIEUP O PHIEUPH + {0x96D7, 0xBF5B}, //3877 #HANGUL SYLLABLE SSANGPIEUP O HIEUH + {0x96D8, 0xBF5C}, //3878 #HANGUL SYLLABLE SSANGPIEUP WA + {0x96D9, 0xBF5D}, //3879 #HANGUL SYLLABLE SSANGPIEUP WA KIYEOK + {0x96DA, 0xBF5E}, //3880 #HANGUL SYLLABLE SSANGPIEUP WA SSANGKIYEOK + {0x96DB, 0xBF5F}, //3881 #HANGUL SYLLABLE SSANGPIEUP WA KIYEOKSIOS + {0x96DC, 0xBF60}, //3882 #HANGUL SYLLABLE SSANGPIEUP WA NIEUN + {0x96DD, 0xBF61}, //3883 #HANGUL SYLLABLE SSANGPIEUP WA NIEUNCIEUC + {0x96DE, 0xBF62}, //3884 #HANGUL SYLLABLE SSANGPIEUP WA NIEUNHIEUH + {0x96DF, 0xBF63}, //3885 #HANGUL SYLLABLE SSANGPIEUP WA TIKEUT + {0x96E0, 0xBF64}, //3886 #HANGUL SYLLABLE SSANGPIEUP WA RIEUL + {0x96E1, 0xBF65}, //3887 #HANGUL SYLLABLE SSANGPIEUP WA RIEULKIYEOK + {0x96E2, 0xBF66}, //3888 #HANGUL SYLLABLE SSANGPIEUP WA RIEULMIEUM + {0x96E3, 0xBF67}, //3889 #HANGUL SYLLABLE SSANGPIEUP WA RIEULPIEUP + {0x96E4, 0xBF68}, //3890 #HANGUL SYLLABLE SSANGPIEUP WA RIEULSIOS + {0x96E5, 0xBF69}, //3891 #HANGUL SYLLABLE SSANGPIEUP WA RIEULTHIEUTH + {0x96E6, 0xBF6A}, //3892 #HANGUL SYLLABLE SSANGPIEUP WA RIEULPHIEUPH + {0x96E7, 0xBF6B}, //3893 #HANGUL SYLLABLE SSANGPIEUP WA RIEULHIEUH + {0x96E8, 0xBF6C}, //3894 #HANGUL SYLLABLE SSANGPIEUP WA MIEUM + {0x96E9, 0xBF6D}, //3895 #HANGUL SYLLABLE SSANGPIEUP WA PIEUP + {0x96EA, 0xBF6E}, //3896 #HANGUL SYLLABLE SSANGPIEUP WA PIEUPSIOS + {0x96EB, 0xBF6F}, //3897 #HANGUL SYLLABLE SSANGPIEUP WA SIOS + {0x96EC, 0xBF70}, //3898 #HANGUL SYLLABLE SSANGPIEUP WA SSANGSIOS + {0x96ED, 0xBF71}, //3899 #HANGUL SYLLABLE SSANGPIEUP WA IEUNG + {0x96EE, 0xBF72}, //3900 #HANGUL SYLLABLE SSANGPIEUP WA CIEUC + {0x96EF, 0xBF73}, //3901 #HANGUL SYLLABLE SSANGPIEUP WA CHIEUCH + {0x96F0, 0xBF74}, //3902 #HANGUL SYLLABLE SSANGPIEUP WA KHIEUKH + {0x96F1, 0xBF75}, //3903 #HANGUL SYLLABLE SSANGPIEUP WA THIEUTH + {0x96F2, 0xBF76}, //3904 #HANGUL SYLLABLE SSANGPIEUP WA PHIEUPH + {0x96F3, 0xBF77}, //3905 #HANGUL SYLLABLE SSANGPIEUP WA HIEUH + {0x96F4, 0xBF78}, //3906 #HANGUL SYLLABLE SSANGPIEUP WAE + {0x96F5, 0xBF79}, //3907 #HANGUL SYLLABLE SSANGPIEUP WAE KIYEOK + {0x96F6, 0xBF7A}, //3908 #HANGUL SYLLABLE SSANGPIEUP WAE SSANGKIYEOK + {0x96F7, 0xBF7B}, //3909 #HANGUL SYLLABLE SSANGPIEUP WAE KIYEOKSIOS + {0x96F8, 0xBF7C}, //3910 #HANGUL SYLLABLE SSANGPIEUP WAE NIEUN + {0x96F9, 0xBF7D}, //3911 #HANGUL SYLLABLE SSANGPIEUP WAE NIEUNCIEUC + {0x96FA, 0xBF7E}, //3912 #HANGUL SYLLABLE SSANGPIEUP WAE NIEUNHIEUH + {0x96FB, 0xBF7F}, //3913 #HANGUL SYLLABLE SSANGPIEUP WAE TIKEUT + {0x96FC, 0xBF80}, //3914 #HANGUL SYLLABLE SSANGPIEUP WAE RIEUL + {0x96FD, 0xBF81}, //3915 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULKIYEOK + {0x96FE, 0xBF82}, //3916 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULMIEUM + {0x9741, 0xBF83}, //3917 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULPIEUP + {0x9742, 0xBF84}, //3918 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULSIOS + {0x9743, 0xBF85}, //3919 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULTHIEUTH + {0x9744, 0xBF86}, //3920 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULPHIEUPH + {0x9745, 0xBF87}, //3921 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULHIEUH + {0x9746, 0xBF88}, //3922 #HANGUL SYLLABLE SSANGPIEUP WAE MIEUM + {0x9747, 0xBF89}, //3923 #HANGUL SYLLABLE SSANGPIEUP WAE PIEUP + {0x9748, 0xBF8A}, //3924 #HANGUL SYLLABLE SSANGPIEUP WAE PIEUPSIOS + {0x9749, 0xBF8B}, //3925 #HANGUL SYLLABLE SSANGPIEUP WAE SIOS + {0x974A, 0xBF8C}, //3926 #HANGUL SYLLABLE SSANGPIEUP WAE SSANGSIOS + {0x974B, 0xBF8D}, //3927 #HANGUL SYLLABLE SSANGPIEUP WAE IEUNG + {0x974C, 0xBF8E}, //3928 #HANGUL SYLLABLE SSANGPIEUP WAE CIEUC + {0x974D, 0xBF8F}, //3929 #HANGUL SYLLABLE SSANGPIEUP WAE CHIEUCH + {0x974E, 0xBF90}, //3930 #HANGUL SYLLABLE SSANGPIEUP WAE KHIEUKH + {0x974F, 0xBF91}, //3931 #HANGUL SYLLABLE SSANGPIEUP WAE THIEUTH + {0x9750, 0xBF92}, //3932 #HANGUL SYLLABLE SSANGPIEUP WAE PHIEUPH + {0x9751, 0xBF93}, //3933 #HANGUL SYLLABLE SSANGPIEUP WAE HIEUH + {0x9752, 0xBF95}, //3934 #HANGUL SYLLABLE SSANGPIEUP OE KIYEOK + {0x9753, 0xBF96}, //3935 #HANGUL SYLLABLE SSANGPIEUP OE SSANGKIYEOK + {0x9754, 0xBF97}, //3936 #HANGUL SYLLABLE SSANGPIEUP OE KIYEOKSIOS + {0x9755, 0xBF98}, //3937 #HANGUL SYLLABLE SSANGPIEUP OE NIEUN + {0x9756, 0xBF99}, //3938 #HANGUL SYLLABLE SSANGPIEUP OE NIEUNCIEUC + {0x9757, 0xBF9A}, //3939 #HANGUL SYLLABLE SSANGPIEUP OE NIEUNHIEUH + {0x9758, 0xBF9B}, //3940 #HANGUL SYLLABLE SSANGPIEUP OE TIKEUT + {0x9759, 0xBF9C}, //3941 #HANGUL SYLLABLE SSANGPIEUP OE RIEUL + {0x975A, 0xBF9D}, //3942 #HANGUL SYLLABLE SSANGPIEUP OE RIEULKIYEOK + {0x9761, 0xBF9E}, //3943 #HANGUL SYLLABLE SSANGPIEUP OE RIEULMIEUM + {0x9762, 0xBF9F}, //3944 #HANGUL SYLLABLE SSANGPIEUP OE RIEULPIEUP + {0x9763, 0xBFA0}, //3945 #HANGUL SYLLABLE SSANGPIEUP OE RIEULSIOS + {0x9764, 0xBFA1}, //3946 #HANGUL SYLLABLE SSANGPIEUP OE RIEULTHIEUTH + {0x9765, 0xBFA2}, //3947 #HANGUL SYLLABLE SSANGPIEUP OE RIEULPHIEUPH + {0x9766, 0xBFA3}, //3948 #HANGUL SYLLABLE SSANGPIEUP OE RIEULHIEUH + {0x9767, 0xBFA4}, //3949 #HANGUL SYLLABLE SSANGPIEUP OE MIEUM + {0x9768, 0xBFA5}, //3950 #HANGUL SYLLABLE SSANGPIEUP OE PIEUP + {0x9769, 0xBFA6}, //3951 #HANGUL SYLLABLE SSANGPIEUP OE PIEUPSIOS + {0x976A, 0xBFA7}, //3952 #HANGUL SYLLABLE SSANGPIEUP OE SIOS + {0x976B, 0xBFA8}, //3953 #HANGUL SYLLABLE SSANGPIEUP OE SSANGSIOS + {0x976C, 0xBFA9}, //3954 #HANGUL SYLLABLE SSANGPIEUP OE IEUNG + {0x976D, 0xBFAA}, //3955 #HANGUL SYLLABLE SSANGPIEUP OE CIEUC + {0x976E, 0xBFAB}, //3956 #HANGUL SYLLABLE SSANGPIEUP OE CHIEUCH + {0x976F, 0xBFAC}, //3957 #HANGUL SYLLABLE SSANGPIEUP OE KHIEUKH + {0x9770, 0xBFAD}, //3958 #HANGUL SYLLABLE SSANGPIEUP OE THIEUTH + {0x9771, 0xBFAE}, //3959 #HANGUL SYLLABLE SSANGPIEUP OE PHIEUPH + {0x9772, 0xBFAF}, //3960 #HANGUL SYLLABLE SSANGPIEUP OE HIEUH + {0x9773, 0xBFB1}, //3961 #HANGUL SYLLABLE SSANGPIEUP YO KIYEOK + {0x9774, 0xBFB2}, //3962 #HANGUL SYLLABLE SSANGPIEUP YO SSANGKIYEOK + {0x9775, 0xBFB3}, //3963 #HANGUL SYLLABLE SSANGPIEUP YO KIYEOKSIOS + {0x9776, 0xBFB4}, //3964 #HANGUL SYLLABLE SSANGPIEUP YO NIEUN + {0x9777, 0xBFB5}, //3965 #HANGUL SYLLABLE SSANGPIEUP YO NIEUNCIEUC + {0x9778, 0xBFB6}, //3966 #HANGUL SYLLABLE SSANGPIEUP YO NIEUNHIEUH + {0x9779, 0xBFB7}, //3967 #HANGUL SYLLABLE SSANGPIEUP YO TIKEUT + {0x977A, 0xBFB8}, //3968 #HANGUL SYLLABLE SSANGPIEUP YO RIEUL + {0x9781, 0xBFB9}, //3969 #HANGUL SYLLABLE SSANGPIEUP YO RIEULKIYEOK + {0x9782, 0xBFBA}, //3970 #HANGUL SYLLABLE SSANGPIEUP YO RIEULMIEUM + {0x9783, 0xBFBB}, //3971 #HANGUL SYLLABLE SSANGPIEUP YO RIEULPIEUP + {0x9784, 0xBFBC}, //3972 #HANGUL SYLLABLE SSANGPIEUP YO RIEULSIOS + {0x9785, 0xBFBD}, //3973 #HANGUL SYLLABLE SSANGPIEUP YO RIEULTHIEUTH + {0x9786, 0xBFBE}, //3974 #HANGUL SYLLABLE SSANGPIEUP YO RIEULPHIEUPH + {0x9787, 0xBFBF}, //3975 #HANGUL SYLLABLE SSANGPIEUP YO RIEULHIEUH + {0x9788, 0xBFC0}, //3976 #HANGUL SYLLABLE SSANGPIEUP YO MIEUM + {0x9789, 0xBFC1}, //3977 #HANGUL SYLLABLE SSANGPIEUP YO PIEUP + {0x978A, 0xBFC2}, //3978 #HANGUL SYLLABLE SSANGPIEUP YO PIEUPSIOS + {0x978B, 0xBFC3}, //3979 #HANGUL SYLLABLE SSANGPIEUP YO SIOS + {0x978C, 0xBFC4}, //3980 #HANGUL SYLLABLE SSANGPIEUP YO SSANGSIOS + {0x978D, 0xBFC6}, //3981 #HANGUL SYLLABLE SSANGPIEUP YO CIEUC + {0x978E, 0xBFC7}, //3982 #HANGUL SYLLABLE SSANGPIEUP YO CHIEUCH + {0x978F, 0xBFC8}, //3983 #HANGUL SYLLABLE SSANGPIEUP YO KHIEUKH + {0x9790, 0xBFC9}, //3984 #HANGUL SYLLABLE SSANGPIEUP YO THIEUTH + {0x9791, 0xBFCA}, //3985 #HANGUL SYLLABLE SSANGPIEUP YO PHIEUPH + {0x9792, 0xBFCB}, //3986 #HANGUL SYLLABLE SSANGPIEUP YO HIEUH + {0x9793, 0xBFCE}, //3987 #HANGUL SYLLABLE SSANGPIEUP U SSANGKIYEOK + {0x9794, 0xBFCF}, //3988 #HANGUL SYLLABLE SSANGPIEUP U KIYEOKSIOS + {0x9795, 0xBFD1}, //3989 #HANGUL SYLLABLE SSANGPIEUP U NIEUNCIEUC + {0x9796, 0xBFD2}, //3990 #HANGUL SYLLABLE SSANGPIEUP U NIEUNHIEUH + {0x9797, 0xBFD3}, //3991 #HANGUL SYLLABLE SSANGPIEUP U TIKEUT + {0x9798, 0xBFD5}, //3992 #HANGUL SYLLABLE SSANGPIEUP U RIEULKIYEOK + {0x9799, 0xBFD6}, //3993 #HANGUL SYLLABLE SSANGPIEUP U RIEULMIEUM + {0x979A, 0xBFD7}, //3994 #HANGUL SYLLABLE SSANGPIEUP U RIEULPIEUP + {0x979B, 0xBFD8}, //3995 #HANGUL SYLLABLE SSANGPIEUP U RIEULSIOS + {0x979C, 0xBFD9}, //3996 #HANGUL SYLLABLE SSANGPIEUP U RIEULTHIEUTH + {0x979D, 0xBFDA}, //3997 #HANGUL SYLLABLE SSANGPIEUP U RIEULPHIEUPH + {0x979E, 0xBFDB}, //3998 #HANGUL SYLLABLE SSANGPIEUP U RIEULHIEUH + {0x979F, 0xBFDD}, //3999 #HANGUL SYLLABLE SSANGPIEUP U PIEUP + {0x97A0, 0xBFDE}, //4000 #HANGUL SYLLABLE SSANGPIEUP U PIEUPSIOS + {0x97A1, 0xBFE0}, //4001 #HANGUL SYLLABLE SSANGPIEUP U SSANGSIOS + {0x97A2, 0xBFE2}, //4002 #HANGUL SYLLABLE SSANGPIEUP U CIEUC + {0x97A3, 0xBFE3}, //4003 #HANGUL SYLLABLE SSANGPIEUP U CHIEUCH + {0x97A4, 0xBFE4}, //4004 #HANGUL SYLLABLE SSANGPIEUP U KHIEUKH + {0x97A5, 0xBFE5}, //4005 #HANGUL SYLLABLE SSANGPIEUP U THIEUTH + {0x97A6, 0xBFE6}, //4006 #HANGUL SYLLABLE SSANGPIEUP U PHIEUPH + {0x97A7, 0xBFE7}, //4007 #HANGUL SYLLABLE SSANGPIEUP U HIEUH + {0x97A8, 0xBFE8}, //4008 #HANGUL SYLLABLE SSANGPIEUP WEO + {0x97A9, 0xBFE9}, //4009 #HANGUL SYLLABLE SSANGPIEUP WEO KIYEOK + {0x97AA, 0xBFEA}, //4010 #HANGUL SYLLABLE SSANGPIEUP WEO SSANGKIYEOK + {0x97AB, 0xBFEB}, //4011 #HANGUL SYLLABLE SSANGPIEUP WEO KIYEOKSIOS + {0x97AC, 0xBFEC}, //4012 #HANGUL SYLLABLE SSANGPIEUP WEO NIEUN + {0x97AD, 0xBFED}, //4013 #HANGUL SYLLABLE SSANGPIEUP WEO NIEUNCIEUC + {0x97AE, 0xBFEE}, //4014 #HANGUL SYLLABLE SSANGPIEUP WEO NIEUNHIEUH + {0x97AF, 0xBFEF}, //4015 #HANGUL SYLLABLE SSANGPIEUP WEO TIKEUT + {0x97B0, 0xBFF0}, //4016 #HANGUL SYLLABLE SSANGPIEUP WEO RIEUL + {0x97B1, 0xBFF1}, //4017 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULKIYEOK + {0x97B2, 0xBFF2}, //4018 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULMIEUM + {0x97B3, 0xBFF3}, //4019 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULPIEUP + {0x97B4, 0xBFF4}, //4020 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULSIOS + {0x97B5, 0xBFF5}, //4021 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULTHIEUTH + {0x97B6, 0xBFF6}, //4022 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULPHIEUPH + {0x97B7, 0xBFF7}, //4023 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULHIEUH + {0x97B8, 0xBFF8}, //4024 #HANGUL SYLLABLE SSANGPIEUP WEO MIEUM + {0x97B9, 0xBFF9}, //4025 #HANGUL SYLLABLE SSANGPIEUP WEO PIEUP + {0x97BA, 0xBFFA}, //4026 #HANGUL SYLLABLE SSANGPIEUP WEO PIEUPSIOS + {0x97BB, 0xBFFB}, //4027 #HANGUL SYLLABLE SSANGPIEUP WEO SIOS + {0x97BC, 0xBFFC}, //4028 #HANGUL SYLLABLE SSANGPIEUP WEO SSANGSIOS + {0x97BD, 0xBFFD}, //4029 #HANGUL SYLLABLE SSANGPIEUP WEO IEUNG + {0x97BE, 0xBFFE}, //4030 #HANGUL SYLLABLE SSANGPIEUP WEO CIEUC + {0x97BF, 0xBFFF}, //4031 #HANGUL SYLLABLE SSANGPIEUP WEO CHIEUCH + {0x97C0, 0xC000}, //4032 #HANGUL SYLLABLE SSANGPIEUP WEO KHIEUKH + {0x97C1, 0xC001}, //4033 #HANGUL SYLLABLE SSANGPIEUP WEO THIEUTH + {0x97C2, 0xC002}, //4034 #HANGUL SYLLABLE SSANGPIEUP WEO PHIEUPH + {0x97C3, 0xC003}, //4035 #HANGUL SYLLABLE SSANGPIEUP WEO HIEUH + {0x97C4, 0xC004}, //4036 #HANGUL SYLLABLE SSANGPIEUP WE + {0x97C5, 0xC005}, //4037 #HANGUL SYLLABLE SSANGPIEUP WE KIYEOK + {0x97C6, 0xC006}, //4038 #HANGUL SYLLABLE SSANGPIEUP WE SSANGKIYEOK + {0x97C7, 0xC007}, //4039 #HANGUL SYLLABLE SSANGPIEUP WE KIYEOKSIOS + {0x97C8, 0xC008}, //4040 #HANGUL SYLLABLE SSANGPIEUP WE NIEUN + {0x97C9, 0xC009}, //4041 #HANGUL SYLLABLE SSANGPIEUP WE NIEUNCIEUC + {0x97CA, 0xC00A}, //4042 #HANGUL SYLLABLE SSANGPIEUP WE NIEUNHIEUH + {0x97CB, 0xC00B}, //4043 #HANGUL SYLLABLE SSANGPIEUP WE TIKEUT + {0x97CC, 0xC00C}, //4044 #HANGUL SYLLABLE SSANGPIEUP WE RIEUL + {0x97CD, 0xC00D}, //4045 #HANGUL SYLLABLE SSANGPIEUP WE RIEULKIYEOK + {0x97CE, 0xC00E}, //4046 #HANGUL SYLLABLE SSANGPIEUP WE RIEULMIEUM + {0x97CF, 0xC00F}, //4047 #HANGUL SYLLABLE SSANGPIEUP WE RIEULPIEUP + {0x97D0, 0xC010}, //4048 #HANGUL SYLLABLE SSANGPIEUP WE RIEULSIOS + {0x97D1, 0xC011}, //4049 #HANGUL SYLLABLE SSANGPIEUP WE RIEULTHIEUTH + {0x97D2, 0xC012}, //4050 #HANGUL SYLLABLE SSANGPIEUP WE RIEULPHIEUPH + {0x97D3, 0xC013}, //4051 #HANGUL SYLLABLE SSANGPIEUP WE RIEULHIEUH + {0x97D4, 0xC014}, //4052 #HANGUL SYLLABLE SSANGPIEUP WE MIEUM + {0x97D5, 0xC015}, //4053 #HANGUL SYLLABLE SSANGPIEUP WE PIEUP + {0x97D6, 0xC016}, //4054 #HANGUL SYLLABLE SSANGPIEUP WE PIEUPSIOS + {0x97D7, 0xC017}, //4055 #HANGUL SYLLABLE SSANGPIEUP WE SIOS + {0x97D8, 0xC018}, //4056 #HANGUL SYLLABLE SSANGPIEUP WE SSANGSIOS + {0x97D9, 0xC019}, //4057 #HANGUL SYLLABLE SSANGPIEUP WE IEUNG + {0x97DA, 0xC01A}, //4058 #HANGUL SYLLABLE SSANGPIEUP WE CIEUC + {0x97DB, 0xC01B}, //4059 #HANGUL SYLLABLE SSANGPIEUP WE CHIEUCH + {0x97DC, 0xC01C}, //4060 #HANGUL SYLLABLE SSANGPIEUP WE KHIEUKH + {0x97DD, 0xC01D}, //4061 #HANGUL SYLLABLE SSANGPIEUP WE THIEUTH + {0x97DE, 0xC01E}, //4062 #HANGUL SYLLABLE SSANGPIEUP WE PHIEUPH + {0x97DF, 0xC01F}, //4063 #HANGUL SYLLABLE SSANGPIEUP WE HIEUH + {0x97E0, 0xC020}, //4064 #HANGUL SYLLABLE SSANGPIEUP WI + {0x97E1, 0xC021}, //4065 #HANGUL SYLLABLE SSANGPIEUP WI KIYEOK + {0x97E2, 0xC022}, //4066 #HANGUL SYLLABLE SSANGPIEUP WI SSANGKIYEOK + {0x97E3, 0xC023}, //4067 #HANGUL SYLLABLE SSANGPIEUP WI KIYEOKSIOS + {0x97E4, 0xC024}, //4068 #HANGUL SYLLABLE SSANGPIEUP WI NIEUN + {0x97E5, 0xC025}, //4069 #HANGUL SYLLABLE SSANGPIEUP WI NIEUNCIEUC + {0x97E6, 0xC026}, //4070 #HANGUL SYLLABLE SSANGPIEUP WI NIEUNHIEUH + {0x97E7, 0xC027}, //4071 #HANGUL SYLLABLE SSANGPIEUP WI TIKEUT + {0x97E8, 0xC028}, //4072 #HANGUL SYLLABLE SSANGPIEUP WI RIEUL + {0x97E9, 0xC029}, //4073 #HANGUL SYLLABLE SSANGPIEUP WI RIEULKIYEOK + {0x97EA, 0xC02A}, //4074 #HANGUL SYLLABLE SSANGPIEUP WI RIEULMIEUM + {0x97EB, 0xC02B}, //4075 #HANGUL SYLLABLE SSANGPIEUP WI RIEULPIEUP + {0x97EC, 0xC02C}, //4076 #HANGUL SYLLABLE SSANGPIEUP WI RIEULSIOS + {0x97ED, 0xC02D}, //4077 #HANGUL SYLLABLE SSANGPIEUP WI RIEULTHIEUTH + {0x97EE, 0xC02E}, //4078 #HANGUL SYLLABLE SSANGPIEUP WI RIEULPHIEUPH + {0x97EF, 0xC02F}, //4079 #HANGUL SYLLABLE SSANGPIEUP WI RIEULHIEUH + {0x97F0, 0xC030}, //4080 #HANGUL SYLLABLE SSANGPIEUP WI MIEUM + {0x97F1, 0xC031}, //4081 #HANGUL SYLLABLE SSANGPIEUP WI PIEUP + {0x97F2, 0xC032}, //4082 #HANGUL SYLLABLE SSANGPIEUP WI PIEUPSIOS + {0x97F3, 0xC033}, //4083 #HANGUL SYLLABLE SSANGPIEUP WI SIOS + {0x97F4, 0xC034}, //4084 #HANGUL SYLLABLE SSANGPIEUP WI SSANGSIOS + {0x97F5, 0xC035}, //4085 #HANGUL SYLLABLE SSANGPIEUP WI IEUNG + {0x97F6, 0xC036}, //4086 #HANGUL SYLLABLE SSANGPIEUP WI CIEUC + {0x97F7, 0xC037}, //4087 #HANGUL SYLLABLE SSANGPIEUP WI CHIEUCH + {0x97F8, 0xC038}, //4088 #HANGUL SYLLABLE SSANGPIEUP WI KHIEUKH + {0x97F9, 0xC039}, //4089 #HANGUL SYLLABLE SSANGPIEUP WI THIEUTH + {0x97FA, 0xC03A}, //4090 #HANGUL SYLLABLE SSANGPIEUP WI PHIEUPH + {0x97FB, 0xC03B}, //4091 #HANGUL SYLLABLE SSANGPIEUP WI HIEUH + {0x97FC, 0xC03D}, //4092 #HANGUL SYLLABLE SSANGPIEUP YU KIYEOK + {0x97FD, 0xC03E}, //4093 #HANGUL SYLLABLE SSANGPIEUP YU SSANGKIYEOK + {0x97FE, 0xC03F}, //4094 #HANGUL SYLLABLE SSANGPIEUP YU KIYEOKSIOS + {0x9841, 0xC040}, //4095 #HANGUL SYLLABLE SSANGPIEUP YU NIEUN + {0x9842, 0xC041}, //4096 #HANGUL SYLLABLE SSANGPIEUP YU NIEUNCIEUC + {0x9843, 0xC042}, //4097 #HANGUL SYLLABLE SSANGPIEUP YU NIEUNHIEUH + {0x9844, 0xC043}, //4098 #HANGUL SYLLABLE SSANGPIEUP YU TIKEUT + {0x9845, 0xC044}, //4099 #HANGUL SYLLABLE SSANGPIEUP YU RIEUL + {0x9846, 0xC045}, //4100 #HANGUL SYLLABLE SSANGPIEUP YU RIEULKIYEOK + {0x9847, 0xC046}, //4101 #HANGUL SYLLABLE SSANGPIEUP YU RIEULMIEUM + {0x9848, 0xC047}, //4102 #HANGUL SYLLABLE SSANGPIEUP YU RIEULPIEUP + {0x9849, 0xC048}, //4103 #HANGUL SYLLABLE SSANGPIEUP YU RIEULSIOS + {0x984A, 0xC049}, //4104 #HANGUL SYLLABLE SSANGPIEUP YU RIEULTHIEUTH + {0x984B, 0xC04A}, //4105 #HANGUL SYLLABLE SSANGPIEUP YU RIEULPHIEUPH + {0x984C, 0xC04B}, //4106 #HANGUL SYLLABLE SSANGPIEUP YU RIEULHIEUH + {0x984D, 0xC04C}, //4107 #HANGUL SYLLABLE SSANGPIEUP YU MIEUM + {0x984E, 0xC04D}, //4108 #HANGUL SYLLABLE SSANGPIEUP YU PIEUP + {0x984F, 0xC04E}, //4109 #HANGUL SYLLABLE SSANGPIEUP YU PIEUPSIOS + {0x9850, 0xC04F}, //4110 #HANGUL SYLLABLE SSANGPIEUP YU SIOS + {0x9851, 0xC050}, //4111 #HANGUL SYLLABLE SSANGPIEUP YU SSANGSIOS + {0x9852, 0xC052}, //4112 #HANGUL SYLLABLE SSANGPIEUP YU CIEUC + {0x9853, 0xC053}, //4113 #HANGUL SYLLABLE SSANGPIEUP YU CHIEUCH + {0x9854, 0xC054}, //4114 #HANGUL SYLLABLE SSANGPIEUP YU KHIEUKH + {0x9855, 0xC055}, //4115 #HANGUL SYLLABLE SSANGPIEUP YU THIEUTH + {0x9856, 0xC056}, //4116 #HANGUL SYLLABLE SSANGPIEUP YU PHIEUPH + {0x9857, 0xC057}, //4117 #HANGUL SYLLABLE SSANGPIEUP YU HIEUH + {0x9858, 0xC059}, //4118 #HANGUL SYLLABLE SSANGPIEUP EU KIYEOK + {0x9859, 0xC05A}, //4119 #HANGUL SYLLABLE SSANGPIEUP EU SSANGKIYEOK + {0x985A, 0xC05B}, //4120 #HANGUL SYLLABLE SSANGPIEUP EU KIYEOKSIOS + {0x9861, 0xC05D}, //4121 #HANGUL SYLLABLE SSANGPIEUP EU NIEUNCIEUC + {0x9862, 0xC05E}, //4122 #HANGUL SYLLABLE SSANGPIEUP EU NIEUNHIEUH + {0x9863, 0xC05F}, //4123 #HANGUL SYLLABLE SSANGPIEUP EU TIKEUT + {0x9864, 0xC061}, //4124 #HANGUL SYLLABLE SSANGPIEUP EU RIEULKIYEOK + {0x9865, 0xC062}, //4125 #HANGUL SYLLABLE SSANGPIEUP EU RIEULMIEUM + {0x9866, 0xC063}, //4126 #HANGUL SYLLABLE SSANGPIEUP EU RIEULPIEUP + {0x9867, 0xC064}, //4127 #HANGUL SYLLABLE SSANGPIEUP EU RIEULSIOS + {0x9868, 0xC065}, //4128 #HANGUL SYLLABLE SSANGPIEUP EU RIEULTHIEUTH + {0x9869, 0xC066}, //4129 #HANGUL SYLLABLE SSANGPIEUP EU RIEULPHIEUPH + {0x986A, 0xC067}, //4130 #HANGUL SYLLABLE SSANGPIEUP EU RIEULHIEUH + {0x986B, 0xC06A}, //4131 #HANGUL SYLLABLE SSANGPIEUP EU PIEUPSIOS + {0x986C, 0xC06B}, //4132 #HANGUL SYLLABLE SSANGPIEUP EU SIOS + {0x986D, 0xC06C}, //4133 #HANGUL SYLLABLE SSANGPIEUP EU SSANGSIOS + {0x986E, 0xC06D}, //4134 #HANGUL SYLLABLE SSANGPIEUP EU IEUNG + {0x986F, 0xC06E}, //4135 #HANGUL SYLLABLE SSANGPIEUP EU CIEUC + {0x9870, 0xC06F}, //4136 #HANGUL SYLLABLE SSANGPIEUP EU CHIEUCH + {0x9871, 0xC070}, //4137 #HANGUL SYLLABLE SSANGPIEUP EU KHIEUKH + {0x9872, 0xC071}, //4138 #HANGUL SYLLABLE SSANGPIEUP EU THIEUTH + {0x9873, 0xC072}, //4139 #HANGUL SYLLABLE SSANGPIEUP EU PHIEUPH + {0x9874, 0xC073}, //4140 #HANGUL SYLLABLE SSANGPIEUP EU HIEUH + {0x9875, 0xC074}, //4141 #HANGUL SYLLABLE SSANGPIEUP YI + {0x9876, 0xC075}, //4142 #HANGUL SYLLABLE SSANGPIEUP YI KIYEOK + {0x9877, 0xC076}, //4143 #HANGUL SYLLABLE SSANGPIEUP YI SSANGKIYEOK + {0x9878, 0xC077}, //4144 #HANGUL SYLLABLE SSANGPIEUP YI KIYEOKSIOS + {0x9879, 0xC078}, //4145 #HANGUL SYLLABLE SSANGPIEUP YI NIEUN + {0x987A, 0xC079}, //4146 #HANGUL SYLLABLE SSANGPIEUP YI NIEUNCIEUC + {0x9881, 0xC07A}, //4147 #HANGUL SYLLABLE SSANGPIEUP YI NIEUNHIEUH + {0x9882, 0xC07B}, //4148 #HANGUL SYLLABLE SSANGPIEUP YI TIKEUT + {0x9883, 0xC07C}, //4149 #HANGUL SYLLABLE SSANGPIEUP YI RIEUL + {0x9884, 0xC07D}, //4150 #HANGUL SYLLABLE SSANGPIEUP YI RIEULKIYEOK + {0x9885, 0xC07E}, //4151 #HANGUL SYLLABLE SSANGPIEUP YI RIEULMIEUM + {0x9886, 0xC07F}, //4152 #HANGUL SYLLABLE SSANGPIEUP YI RIEULPIEUP + {0x9887, 0xC080}, //4153 #HANGUL SYLLABLE SSANGPIEUP YI RIEULSIOS + {0x9888, 0xC081}, //4154 #HANGUL SYLLABLE SSANGPIEUP YI RIEULTHIEUTH + {0x9889, 0xC082}, //4155 #HANGUL SYLLABLE SSANGPIEUP YI RIEULPHIEUPH + {0x988A, 0xC083}, //4156 #HANGUL SYLLABLE SSANGPIEUP YI RIEULHIEUH + {0x988B, 0xC084}, //4157 #HANGUL SYLLABLE SSANGPIEUP YI MIEUM + {0x988C, 0xC085}, //4158 #HANGUL SYLLABLE SSANGPIEUP YI PIEUP + {0x988D, 0xC086}, //4159 #HANGUL SYLLABLE SSANGPIEUP YI PIEUPSIOS + {0x988E, 0xC087}, //4160 #HANGUL SYLLABLE SSANGPIEUP YI SIOS + {0x988F, 0xC088}, //4161 #HANGUL SYLLABLE SSANGPIEUP YI SSANGSIOS + {0x9890, 0xC089}, //4162 #HANGUL SYLLABLE SSANGPIEUP YI IEUNG + {0x9891, 0xC08A}, //4163 #HANGUL SYLLABLE SSANGPIEUP YI CIEUC + {0x9892, 0xC08B}, //4164 #HANGUL SYLLABLE SSANGPIEUP YI CHIEUCH + {0x9893, 0xC08C}, //4165 #HANGUL SYLLABLE SSANGPIEUP YI KHIEUKH + {0x9894, 0xC08D}, //4166 #HANGUL SYLLABLE SSANGPIEUP YI THIEUTH + {0x9895, 0xC08E}, //4167 #HANGUL SYLLABLE SSANGPIEUP YI PHIEUPH + {0x9896, 0xC08F}, //4168 #HANGUL SYLLABLE SSANGPIEUP YI HIEUH + {0x9897, 0xC092}, //4169 #HANGUL SYLLABLE SSANGPIEUP I SSANGKIYEOK + {0x9898, 0xC093}, //4170 #HANGUL SYLLABLE SSANGPIEUP I KIYEOKSIOS + {0x9899, 0xC095}, //4171 #HANGUL SYLLABLE SSANGPIEUP I NIEUNCIEUC + {0x989A, 0xC096}, //4172 #HANGUL SYLLABLE SSANGPIEUP I NIEUNHIEUH + {0x989B, 0xC097}, //4173 #HANGUL SYLLABLE SSANGPIEUP I TIKEUT + {0x989C, 0xC099}, //4174 #HANGUL SYLLABLE SSANGPIEUP I RIEULKIYEOK + {0x989D, 0xC09A}, //4175 #HANGUL SYLLABLE SSANGPIEUP I RIEULMIEUM + {0x989E, 0xC09B}, //4176 #HANGUL SYLLABLE SSANGPIEUP I RIEULPIEUP + {0x989F, 0xC09C}, //4177 #HANGUL SYLLABLE SSANGPIEUP I RIEULSIOS + {0x98A0, 0xC09D}, //4178 #HANGUL SYLLABLE SSANGPIEUP I RIEULTHIEUTH + {0x98A1, 0xC09E}, //4179 #HANGUL SYLLABLE SSANGPIEUP I RIEULPHIEUPH + {0x98A2, 0xC09F}, //4180 #HANGUL SYLLABLE SSANGPIEUP I RIEULHIEUH + {0x98A3, 0xC0A2}, //4181 #HANGUL SYLLABLE SSANGPIEUP I PIEUPSIOS + {0x98A4, 0xC0A4}, //4182 #HANGUL SYLLABLE SSANGPIEUP I SSANGSIOS + {0x98A5, 0xC0A6}, //4183 #HANGUL SYLLABLE SSANGPIEUP I CIEUC + {0x98A6, 0xC0A7}, //4184 #HANGUL SYLLABLE SSANGPIEUP I CHIEUCH + {0x98A7, 0xC0A8}, //4185 #HANGUL SYLLABLE SSANGPIEUP I KHIEUKH + {0x98A8, 0xC0A9}, //4186 #HANGUL SYLLABLE SSANGPIEUP I THIEUTH + {0x98A9, 0xC0AA}, //4187 #HANGUL SYLLABLE SSANGPIEUP I PHIEUPH + {0x98AA, 0xC0AB}, //4188 #HANGUL SYLLABLE SSANGPIEUP I HIEUH + {0x98AB, 0xC0AE}, //4189 #HANGUL SYLLABLE SIOS A SSANGKIYEOK + {0x98AC, 0xC0B1}, //4190 #HANGUL SYLLABLE SIOS A NIEUNCIEUC + {0x98AD, 0xC0B2}, //4191 #HANGUL SYLLABLE SIOS A NIEUNHIEUH + {0x98AE, 0xC0B7}, //4192 #HANGUL SYLLABLE SIOS A RIEULPIEUP + {0x98AF, 0xC0B8}, //4193 #HANGUL SYLLABLE SIOS A RIEULSIOS + {0x98B0, 0xC0B9}, //4194 #HANGUL SYLLABLE SIOS A RIEULTHIEUTH + {0x98B1, 0xC0BA}, //4195 #HANGUL SYLLABLE SIOS A RIEULPHIEUPH + {0x98B2, 0xC0BB}, //4196 #HANGUL SYLLABLE SIOS A RIEULHIEUH + {0x98B3, 0xC0BE}, //4197 #HANGUL SYLLABLE SIOS A PIEUPSIOS + {0x98B4, 0xC0C2}, //4198 #HANGUL SYLLABLE SIOS A CIEUC + {0x98B5, 0xC0C3}, //4199 #HANGUL SYLLABLE SIOS A CHIEUCH + {0x98B6, 0xC0C4}, //4200 #HANGUL SYLLABLE SIOS A KHIEUKH + {0x98B7, 0xC0C6}, //4201 #HANGUL SYLLABLE SIOS A PHIEUPH + {0x98B8, 0xC0C7}, //4202 #HANGUL SYLLABLE SIOS A HIEUH + {0x98B9, 0xC0CA}, //4203 #HANGUL SYLLABLE SIOS AE SSANGKIYEOK + {0x98BA, 0xC0CB}, //4204 #HANGUL SYLLABLE SIOS AE KIYEOKSIOS + {0x98BB, 0xC0CD}, //4205 #HANGUL SYLLABLE SIOS AE NIEUNCIEUC + {0x98BC, 0xC0CE}, //4206 #HANGUL SYLLABLE SIOS AE NIEUNHIEUH + {0x98BD, 0xC0CF}, //4207 #HANGUL SYLLABLE SIOS AE TIKEUT + {0x98BE, 0xC0D1}, //4208 #HANGUL SYLLABLE SIOS AE RIEULKIYEOK + {0x98BF, 0xC0D2}, //4209 #HANGUL SYLLABLE SIOS AE RIEULMIEUM + {0x98C0, 0xC0D3}, //4210 #HANGUL SYLLABLE SIOS AE RIEULPIEUP + {0x98C1, 0xC0D4}, //4211 #HANGUL SYLLABLE SIOS AE RIEULSIOS + {0x98C2, 0xC0D5}, //4212 #HANGUL SYLLABLE SIOS AE RIEULTHIEUTH + {0x98C3, 0xC0D6}, //4213 #HANGUL SYLLABLE SIOS AE RIEULPHIEUPH + {0x98C4, 0xC0D7}, //4214 #HANGUL SYLLABLE SIOS AE RIEULHIEUH + {0x98C5, 0xC0DA}, //4215 #HANGUL SYLLABLE SIOS AE PIEUPSIOS + {0x98C6, 0xC0DE}, //4216 #HANGUL SYLLABLE SIOS AE CIEUC + {0x98C7, 0xC0DF}, //4217 #HANGUL SYLLABLE SIOS AE CHIEUCH + {0x98C8, 0xC0E0}, //4218 #HANGUL SYLLABLE SIOS AE KHIEUKH + {0x98C9, 0xC0E1}, //4219 #HANGUL SYLLABLE SIOS AE THIEUTH + {0x98CA, 0xC0E2}, //4220 #HANGUL SYLLABLE SIOS AE PHIEUPH + {0x98CB, 0xC0E3}, //4221 #HANGUL SYLLABLE SIOS AE HIEUH + {0x98CC, 0xC0E6}, //4222 #HANGUL SYLLABLE SIOS YA SSANGKIYEOK + {0x98CD, 0xC0E7}, //4223 #HANGUL SYLLABLE SIOS YA KIYEOKSIOS + {0x98CE, 0xC0E9}, //4224 #HANGUL SYLLABLE SIOS YA NIEUNCIEUC + {0x98CF, 0xC0EA}, //4225 #HANGUL SYLLABLE SIOS YA NIEUNHIEUH + {0x98D0, 0xC0EB}, //4226 #HANGUL SYLLABLE SIOS YA TIKEUT + {0x98D1, 0xC0ED}, //4227 #HANGUL SYLLABLE SIOS YA RIEULKIYEOK + {0x98D2, 0xC0EE}, //4228 #HANGUL SYLLABLE SIOS YA RIEULMIEUM + {0x98D3, 0xC0EF}, //4229 #HANGUL SYLLABLE SIOS YA RIEULPIEUP + {0x98D4, 0xC0F0}, //4230 #HANGUL SYLLABLE SIOS YA RIEULSIOS + {0x98D5, 0xC0F1}, //4231 #HANGUL SYLLABLE SIOS YA RIEULTHIEUTH + {0x98D6, 0xC0F2}, //4232 #HANGUL SYLLABLE SIOS YA RIEULPHIEUPH + {0x98D7, 0xC0F3}, //4233 #HANGUL SYLLABLE SIOS YA RIEULHIEUH + {0x98D8, 0xC0F6}, //4234 #HANGUL SYLLABLE SIOS YA PIEUPSIOS + {0x98D9, 0xC0F8}, //4235 #HANGUL SYLLABLE SIOS YA SSANGSIOS + {0x98DA, 0xC0FA}, //4236 #HANGUL SYLLABLE SIOS YA CIEUC + {0x98DB, 0xC0FB}, //4237 #HANGUL SYLLABLE SIOS YA CHIEUCH + {0x98DC, 0xC0FC}, //4238 #HANGUL SYLLABLE SIOS YA KHIEUKH + {0x98DD, 0xC0FD}, //4239 #HANGUL SYLLABLE SIOS YA THIEUTH + {0x98DE, 0xC0FE}, //4240 #HANGUL SYLLABLE SIOS YA PHIEUPH + {0x98DF, 0xC0FF}, //4241 #HANGUL SYLLABLE SIOS YA HIEUH + {0x98E0, 0xC101}, //4242 #HANGUL SYLLABLE SIOS YAE KIYEOK + {0x98E1, 0xC102}, //4243 #HANGUL SYLLABLE SIOS YAE SSANGKIYEOK + {0x98E2, 0xC103}, //4244 #HANGUL SYLLABLE SIOS YAE KIYEOKSIOS + {0x98E3, 0xC105}, //4245 #HANGUL SYLLABLE SIOS YAE NIEUNCIEUC + {0x98E4, 0xC106}, //4246 #HANGUL SYLLABLE SIOS YAE NIEUNHIEUH + {0x98E5, 0xC107}, //4247 #HANGUL SYLLABLE SIOS YAE TIKEUT + {0x98E6, 0xC109}, //4248 #HANGUL SYLLABLE SIOS YAE RIEULKIYEOK + {0x98E7, 0xC10A}, //4249 #HANGUL SYLLABLE SIOS YAE RIEULMIEUM + {0x98E8, 0xC10B}, //4250 #HANGUL SYLLABLE SIOS YAE RIEULPIEUP + {0x98E9, 0xC10C}, //4251 #HANGUL SYLLABLE SIOS YAE RIEULSIOS + {0x98EA, 0xC10D}, //4252 #HANGUL SYLLABLE SIOS YAE RIEULTHIEUTH + {0x98EB, 0xC10E}, //4253 #HANGUL SYLLABLE SIOS YAE RIEULPHIEUPH + {0x98EC, 0xC10F}, //4254 #HANGUL SYLLABLE SIOS YAE RIEULHIEUH + {0x98ED, 0xC111}, //4255 #HANGUL SYLLABLE SIOS YAE PIEUP + {0x98EE, 0xC112}, //4256 #HANGUL SYLLABLE SIOS YAE PIEUPSIOS + {0x98EF, 0xC113}, //4257 #HANGUL SYLLABLE SIOS YAE SIOS + {0x98F0, 0xC114}, //4258 #HANGUL SYLLABLE SIOS YAE SSANGSIOS + {0x98F1, 0xC116}, //4259 #HANGUL SYLLABLE SIOS YAE CIEUC + {0x98F2, 0xC117}, //4260 #HANGUL SYLLABLE SIOS YAE CHIEUCH + {0x98F3, 0xC118}, //4261 #HANGUL SYLLABLE SIOS YAE KHIEUKH + {0x98F4, 0xC119}, //4262 #HANGUL SYLLABLE SIOS YAE THIEUTH + {0x98F5, 0xC11A}, //4263 #HANGUL SYLLABLE SIOS YAE PHIEUPH + {0x98F6, 0xC11B}, //4264 #HANGUL SYLLABLE SIOS YAE HIEUH + {0x98F7, 0xC121}, //4265 #HANGUL SYLLABLE SIOS EO NIEUNCIEUC + {0x98F8, 0xC122}, //4266 #HANGUL SYLLABLE SIOS EO NIEUNHIEUH + {0x98F9, 0xC125}, //4267 #HANGUL SYLLABLE SIOS EO RIEULKIYEOK + {0x98FA, 0xC128}, //4268 #HANGUL SYLLABLE SIOS EO RIEULSIOS + {0x98FB, 0xC129}, //4269 #HANGUL SYLLABLE SIOS EO RIEULTHIEUTH + {0x98FC, 0xC12A}, //4270 #HANGUL SYLLABLE SIOS EO RIEULPHIEUPH + {0x98FD, 0xC12B}, //4271 #HANGUL SYLLABLE SIOS EO RIEULHIEUH + {0x98FE, 0xC12E}, //4272 #HANGUL SYLLABLE SIOS EO PIEUPSIOS + {0x9941, 0xC132}, //4273 #HANGUL SYLLABLE SIOS EO CIEUC + {0x9942, 0xC133}, //4274 #HANGUL SYLLABLE SIOS EO CHIEUCH + {0x9943, 0xC134}, //4275 #HANGUL SYLLABLE SIOS EO KHIEUKH + {0x9944, 0xC135}, //4276 #HANGUL SYLLABLE SIOS EO THIEUTH + {0x9945, 0xC137}, //4277 #HANGUL SYLLABLE SIOS EO HIEUH + {0x9946, 0xC13A}, //4278 #HANGUL SYLLABLE SIOS E SSANGKIYEOK + {0x9947, 0xC13B}, //4279 #HANGUL SYLLABLE SIOS E KIYEOKSIOS + {0x9948, 0xC13D}, //4280 #HANGUL SYLLABLE SIOS E NIEUNCIEUC + {0x9949, 0xC13E}, //4281 #HANGUL SYLLABLE SIOS E NIEUNHIEUH + {0x994A, 0xC13F}, //4282 #HANGUL SYLLABLE SIOS E TIKEUT + {0x994B, 0xC141}, //4283 #HANGUL SYLLABLE SIOS E RIEULKIYEOK + {0x994C, 0xC142}, //4284 #HANGUL SYLLABLE SIOS E RIEULMIEUM + {0x994D, 0xC143}, //4285 #HANGUL SYLLABLE SIOS E RIEULPIEUP + {0x994E, 0xC144}, //4286 #HANGUL SYLLABLE SIOS E RIEULSIOS + {0x994F, 0xC145}, //4287 #HANGUL SYLLABLE SIOS E RIEULTHIEUTH + {0x9950, 0xC146}, //4288 #HANGUL SYLLABLE SIOS E RIEULPHIEUPH + {0x9951, 0xC147}, //4289 #HANGUL SYLLABLE SIOS E RIEULHIEUH + {0x9952, 0xC14A}, //4290 #HANGUL SYLLABLE SIOS E PIEUPSIOS + {0x9953, 0xC14E}, //4291 #HANGUL SYLLABLE SIOS E CIEUC + {0x9954, 0xC14F}, //4292 #HANGUL SYLLABLE SIOS E CHIEUCH + {0x9955, 0xC150}, //4293 #HANGUL SYLLABLE SIOS E KHIEUKH + {0x9956, 0xC151}, //4294 #HANGUL SYLLABLE SIOS E THIEUTH + {0x9957, 0xC152}, //4295 #HANGUL SYLLABLE SIOS E PHIEUPH + {0x9958, 0xC153}, //4296 #HANGUL SYLLABLE SIOS E HIEUH + {0x9959, 0xC156}, //4297 #HANGUL SYLLABLE SIOS YEO SSANGKIYEOK + {0x995A, 0xC157}, //4298 #HANGUL SYLLABLE SIOS YEO KIYEOKSIOS + {0x9961, 0xC159}, //4299 #HANGUL SYLLABLE SIOS YEO NIEUNCIEUC + {0x9962, 0xC15A}, //4300 #HANGUL SYLLABLE SIOS YEO NIEUNHIEUH + {0x9963, 0xC15B}, //4301 #HANGUL SYLLABLE SIOS YEO TIKEUT + {0x9964, 0xC15D}, //4302 #HANGUL SYLLABLE SIOS YEO RIEULKIYEOK + {0x9965, 0xC15E}, //4303 #HANGUL SYLLABLE SIOS YEO RIEULMIEUM + {0x9966, 0xC15F}, //4304 #HANGUL SYLLABLE SIOS YEO RIEULPIEUP + {0x9967, 0xC160}, //4305 #HANGUL SYLLABLE SIOS YEO RIEULSIOS + {0x9968, 0xC161}, //4306 #HANGUL SYLLABLE SIOS YEO RIEULTHIEUTH + {0x9969, 0xC162}, //4307 #HANGUL SYLLABLE SIOS YEO RIEULPHIEUPH + {0x996A, 0xC163}, //4308 #HANGUL SYLLABLE SIOS YEO RIEULHIEUH + {0x996B, 0xC166}, //4309 #HANGUL SYLLABLE SIOS YEO PIEUPSIOS + {0x996C, 0xC16A}, //4310 #HANGUL SYLLABLE SIOS YEO CIEUC + {0x996D, 0xC16B}, //4311 #HANGUL SYLLABLE SIOS YEO CHIEUCH + {0x996E, 0xC16C}, //4312 #HANGUL SYLLABLE SIOS YEO KHIEUKH + {0x996F, 0xC16D}, //4313 #HANGUL SYLLABLE SIOS YEO THIEUTH + {0x9970, 0xC16E}, //4314 #HANGUL SYLLABLE SIOS YEO PHIEUPH + {0x9971, 0xC16F}, //4315 #HANGUL SYLLABLE SIOS YEO HIEUH + {0x9972, 0xC171}, //4316 #HANGUL SYLLABLE SIOS YE KIYEOK + {0x9973, 0xC172}, //4317 #HANGUL SYLLABLE SIOS YE SSANGKIYEOK + {0x9974, 0xC173}, //4318 #HANGUL SYLLABLE SIOS YE KIYEOKSIOS + {0x9975, 0xC175}, //4319 #HANGUL SYLLABLE SIOS YE NIEUNCIEUC + {0x9976, 0xC176}, //4320 #HANGUL SYLLABLE SIOS YE NIEUNHIEUH + {0x9977, 0xC177}, //4321 #HANGUL SYLLABLE SIOS YE TIKEUT + {0x9978, 0xC179}, //4322 #HANGUL SYLLABLE SIOS YE RIEULKIYEOK + {0x9979, 0xC17A}, //4323 #HANGUL SYLLABLE SIOS YE RIEULMIEUM + {0x997A, 0xC17B}, //4324 #HANGUL SYLLABLE SIOS YE RIEULPIEUP + {0x9981, 0xC17C}, //4325 #HANGUL SYLLABLE SIOS YE RIEULSIOS + {0x9982, 0xC17D}, //4326 #HANGUL SYLLABLE SIOS YE RIEULTHIEUTH + {0x9983, 0xC17E}, //4327 #HANGUL SYLLABLE SIOS YE RIEULPHIEUPH + {0x9984, 0xC17F}, //4328 #HANGUL SYLLABLE SIOS YE RIEULHIEUH + {0x9985, 0xC180}, //4329 #HANGUL SYLLABLE SIOS YE MIEUM + {0x9986, 0xC181}, //4330 #HANGUL SYLLABLE SIOS YE PIEUP + {0x9987, 0xC182}, //4331 #HANGUL SYLLABLE SIOS YE PIEUPSIOS + {0x9988, 0xC183}, //4332 #HANGUL SYLLABLE SIOS YE SIOS + {0x9989, 0xC184}, //4333 #HANGUL SYLLABLE SIOS YE SSANGSIOS + {0x998A, 0xC186}, //4334 #HANGUL SYLLABLE SIOS YE CIEUC + {0x998B, 0xC187}, //4335 #HANGUL SYLLABLE SIOS YE CHIEUCH + {0x998C, 0xC188}, //4336 #HANGUL SYLLABLE SIOS YE KHIEUKH + {0x998D, 0xC189}, //4337 #HANGUL SYLLABLE SIOS YE THIEUTH + {0x998E, 0xC18A}, //4338 #HANGUL SYLLABLE SIOS YE PHIEUPH + {0x998F, 0xC18B}, //4339 #HANGUL SYLLABLE SIOS YE HIEUH + {0x9990, 0xC18F}, //4340 #HANGUL SYLLABLE SIOS O KIYEOKSIOS + {0x9991, 0xC191}, //4341 #HANGUL SYLLABLE SIOS O NIEUNCIEUC + {0x9992, 0xC192}, //4342 #HANGUL SYLLABLE SIOS O NIEUNHIEUH + {0x9993, 0xC193}, //4343 #HANGUL SYLLABLE SIOS O TIKEUT + {0x9994, 0xC195}, //4344 #HANGUL SYLLABLE SIOS O RIEULKIYEOK + {0x9995, 0xC197}, //4345 #HANGUL SYLLABLE SIOS O RIEULPIEUP + {0x9996, 0xC198}, //4346 #HANGUL SYLLABLE SIOS O RIEULSIOS + {0x9997, 0xC199}, //4347 #HANGUL SYLLABLE SIOS O RIEULTHIEUTH + {0x9998, 0xC19A}, //4348 #HANGUL SYLLABLE SIOS O RIEULPHIEUPH + {0x9999, 0xC19B}, //4349 #HANGUL SYLLABLE SIOS O RIEULHIEUH + {0x999A, 0xC19E}, //4350 #HANGUL SYLLABLE SIOS O PIEUPSIOS + {0x999B, 0xC1A0}, //4351 #HANGUL SYLLABLE SIOS O SSANGSIOS + {0x999C, 0xC1A2}, //4352 #HANGUL SYLLABLE SIOS O CIEUC + {0x999D, 0xC1A3}, //4353 #HANGUL SYLLABLE SIOS O CHIEUCH + {0x999E, 0xC1A4}, //4354 #HANGUL SYLLABLE SIOS O KHIEUKH + {0x999F, 0xC1A6}, //4355 #HANGUL SYLLABLE SIOS O PHIEUPH + {0x99A0, 0xC1A7}, //4356 #HANGUL SYLLABLE SIOS O HIEUH + {0x99A1, 0xC1AA}, //4357 #HANGUL SYLLABLE SIOS WA SSANGKIYEOK + {0x99A2, 0xC1AB}, //4358 #HANGUL SYLLABLE SIOS WA KIYEOKSIOS + {0x99A3, 0xC1AD}, //4359 #HANGUL SYLLABLE SIOS WA NIEUNCIEUC + {0x99A4, 0xC1AE}, //4360 #HANGUL SYLLABLE SIOS WA NIEUNHIEUH + {0x99A5, 0xC1AF}, //4361 #HANGUL SYLLABLE SIOS WA TIKEUT + {0x99A6, 0xC1B1}, //4362 #HANGUL SYLLABLE SIOS WA RIEULKIYEOK + {0x99A7, 0xC1B2}, //4363 #HANGUL SYLLABLE SIOS WA RIEULMIEUM + {0x99A8, 0xC1B3}, //4364 #HANGUL SYLLABLE SIOS WA RIEULPIEUP + {0x99A9, 0xC1B4}, //4365 #HANGUL SYLLABLE SIOS WA RIEULSIOS + {0x99AA, 0xC1B5}, //4366 #HANGUL SYLLABLE SIOS WA RIEULTHIEUTH + {0x99AB, 0xC1B6}, //4367 #HANGUL SYLLABLE SIOS WA RIEULPHIEUPH + {0x99AC, 0xC1B7}, //4368 #HANGUL SYLLABLE SIOS WA RIEULHIEUH + {0x99AD, 0xC1B8}, //4369 #HANGUL SYLLABLE SIOS WA MIEUM + {0x99AE, 0xC1B9}, //4370 #HANGUL SYLLABLE SIOS WA PIEUP + {0x99AF, 0xC1BA}, //4371 #HANGUL SYLLABLE SIOS WA PIEUPSIOS + {0x99B0, 0xC1BB}, //4372 #HANGUL SYLLABLE SIOS WA SIOS + {0x99B1, 0xC1BC}, //4373 #HANGUL SYLLABLE SIOS WA SSANGSIOS + {0x99B2, 0xC1BE}, //4374 #HANGUL SYLLABLE SIOS WA CIEUC + {0x99B3, 0xC1BF}, //4375 #HANGUL SYLLABLE SIOS WA CHIEUCH + {0x99B4, 0xC1C0}, //4376 #HANGUL SYLLABLE SIOS WA KHIEUKH + {0x99B5, 0xC1C1}, //4377 #HANGUL SYLLABLE SIOS WA THIEUTH + {0x99B6, 0xC1C2}, //4378 #HANGUL SYLLABLE SIOS WA PHIEUPH + {0x99B7, 0xC1C3}, //4379 #HANGUL SYLLABLE SIOS WA HIEUH + {0x99B8, 0xC1C5}, //4380 #HANGUL SYLLABLE SIOS WAE KIYEOK + {0x99B9, 0xC1C6}, //4381 #HANGUL SYLLABLE SIOS WAE SSANGKIYEOK + {0x99BA, 0xC1C7}, //4382 #HANGUL SYLLABLE SIOS WAE KIYEOKSIOS + {0x99BB, 0xC1C9}, //4383 #HANGUL SYLLABLE SIOS WAE NIEUNCIEUC + {0x99BC, 0xC1CA}, //4384 #HANGUL SYLLABLE SIOS WAE NIEUNHIEUH + {0x99BD, 0xC1CB}, //4385 #HANGUL SYLLABLE SIOS WAE TIKEUT + {0x99BE, 0xC1CD}, //4386 #HANGUL SYLLABLE SIOS WAE RIEULKIYEOK + {0x99BF, 0xC1CE}, //4387 #HANGUL SYLLABLE SIOS WAE RIEULMIEUM + {0x99C0, 0xC1CF}, //4388 #HANGUL SYLLABLE SIOS WAE RIEULPIEUP + {0x99C1, 0xC1D0}, //4389 #HANGUL SYLLABLE SIOS WAE RIEULSIOS + {0x99C2, 0xC1D1}, //4390 #HANGUL SYLLABLE SIOS WAE RIEULTHIEUTH + {0x99C3, 0xC1D2}, //4391 #HANGUL SYLLABLE SIOS WAE RIEULPHIEUPH + {0x99C4, 0xC1D3}, //4392 #HANGUL SYLLABLE SIOS WAE RIEULHIEUH + {0x99C5, 0xC1D5}, //4393 #HANGUL SYLLABLE SIOS WAE PIEUP + {0x99C6, 0xC1D6}, //4394 #HANGUL SYLLABLE SIOS WAE PIEUPSIOS + {0x99C7, 0xC1D9}, //4395 #HANGUL SYLLABLE SIOS WAE IEUNG + {0x99C8, 0xC1DA}, //4396 #HANGUL SYLLABLE SIOS WAE CIEUC + {0x99C9, 0xC1DB}, //4397 #HANGUL SYLLABLE SIOS WAE CHIEUCH + {0x99CA, 0xC1DC}, //4398 #HANGUL SYLLABLE SIOS WAE KHIEUKH + {0x99CB, 0xC1DD}, //4399 #HANGUL SYLLABLE SIOS WAE THIEUTH + {0x99CC, 0xC1DE}, //4400 #HANGUL SYLLABLE SIOS WAE PHIEUPH + {0x99CD, 0xC1DF}, //4401 #HANGUL SYLLABLE SIOS WAE HIEUH + {0x99CE, 0xC1E1}, //4402 #HANGUL SYLLABLE SIOS OE KIYEOK + {0x99CF, 0xC1E2}, //4403 #HANGUL SYLLABLE SIOS OE SSANGKIYEOK + {0x99D0, 0xC1E3}, //4404 #HANGUL SYLLABLE SIOS OE KIYEOKSIOS + {0x99D1, 0xC1E5}, //4405 #HANGUL SYLLABLE SIOS OE NIEUNCIEUC + {0x99D2, 0xC1E6}, //4406 #HANGUL SYLLABLE SIOS OE NIEUNHIEUH + {0x99D3, 0xC1E7}, //4407 #HANGUL SYLLABLE SIOS OE TIKEUT + {0x99D4, 0xC1E9}, //4408 #HANGUL SYLLABLE SIOS OE RIEULKIYEOK + {0x99D5, 0xC1EA}, //4409 #HANGUL SYLLABLE SIOS OE RIEULMIEUM + {0x99D6, 0xC1EB}, //4410 #HANGUL SYLLABLE SIOS OE RIEULPIEUP + {0x99D7, 0xC1EC}, //4411 #HANGUL SYLLABLE SIOS OE RIEULSIOS + {0x99D8, 0xC1ED}, //4412 #HANGUL SYLLABLE SIOS OE RIEULTHIEUTH + {0x99D9, 0xC1EE}, //4413 #HANGUL SYLLABLE SIOS OE RIEULPHIEUPH + {0x99DA, 0xC1EF}, //4414 #HANGUL SYLLABLE SIOS OE RIEULHIEUH + {0x99DB, 0xC1F2}, //4415 #HANGUL SYLLABLE SIOS OE PIEUPSIOS + {0x99DC, 0xC1F4}, //4416 #HANGUL SYLLABLE SIOS OE SSANGSIOS + {0x99DD, 0xC1F5}, //4417 #HANGUL SYLLABLE SIOS OE IEUNG + {0x99DE, 0xC1F6}, //4418 #HANGUL SYLLABLE SIOS OE CIEUC + {0x99DF, 0xC1F7}, //4419 #HANGUL SYLLABLE SIOS OE CHIEUCH + {0x99E0, 0xC1F8}, //4420 #HANGUL SYLLABLE SIOS OE KHIEUKH + {0x99E1, 0xC1F9}, //4421 #HANGUL SYLLABLE SIOS OE THIEUTH + {0x99E2, 0xC1FA}, //4422 #HANGUL SYLLABLE SIOS OE PHIEUPH + {0x99E3, 0xC1FB}, //4423 #HANGUL SYLLABLE SIOS OE HIEUH + {0x99E4, 0xC1FE}, //4424 #HANGUL SYLLABLE SIOS YO SSANGKIYEOK + {0x99E5, 0xC1FF}, //4425 #HANGUL SYLLABLE SIOS YO KIYEOKSIOS + {0x99E6, 0xC201}, //4426 #HANGUL SYLLABLE SIOS YO NIEUNCIEUC + {0x99E7, 0xC202}, //4427 #HANGUL SYLLABLE SIOS YO NIEUNHIEUH + {0x99E8, 0xC203}, //4428 #HANGUL SYLLABLE SIOS YO TIKEUT + {0x99E9, 0xC205}, //4429 #HANGUL SYLLABLE SIOS YO RIEULKIYEOK + {0x99EA, 0xC206}, //4430 #HANGUL SYLLABLE SIOS YO RIEULMIEUM + {0x99EB, 0xC207}, //4431 #HANGUL SYLLABLE SIOS YO RIEULPIEUP + {0x99EC, 0xC208}, //4432 #HANGUL SYLLABLE SIOS YO RIEULSIOS + {0x99ED, 0xC209}, //4433 #HANGUL SYLLABLE SIOS YO RIEULTHIEUTH + {0x99EE, 0xC20A}, //4434 #HANGUL SYLLABLE SIOS YO RIEULPHIEUPH + {0x99EF, 0xC20B}, //4435 #HANGUL SYLLABLE SIOS YO RIEULHIEUH + {0x99F0, 0xC20E}, //4436 #HANGUL SYLLABLE SIOS YO PIEUPSIOS + {0x99F1, 0xC210}, //4437 #HANGUL SYLLABLE SIOS YO SSANGSIOS + {0x99F2, 0xC212}, //4438 #HANGUL SYLLABLE SIOS YO CIEUC + {0x99F3, 0xC213}, //4439 #HANGUL SYLLABLE SIOS YO CHIEUCH + {0x99F4, 0xC214}, //4440 #HANGUL SYLLABLE SIOS YO KHIEUKH + {0x99F5, 0xC215}, //4441 #HANGUL SYLLABLE SIOS YO THIEUTH + {0x99F6, 0xC216}, //4442 #HANGUL SYLLABLE SIOS YO PHIEUPH + {0x99F7, 0xC217}, //4443 #HANGUL SYLLABLE SIOS YO HIEUH + {0x99F8, 0xC21A}, //4444 #HANGUL SYLLABLE SIOS U SSANGKIYEOK + {0x99F9, 0xC21B}, //4445 #HANGUL SYLLABLE SIOS U KIYEOKSIOS + {0x99FA, 0xC21D}, //4446 #HANGUL SYLLABLE SIOS U NIEUNCIEUC + {0x99FB, 0xC21E}, //4447 #HANGUL SYLLABLE SIOS U NIEUNHIEUH + {0x99FC, 0xC221}, //4448 #HANGUL SYLLABLE SIOS U RIEULKIYEOK + {0x99FD, 0xC222}, //4449 #HANGUL SYLLABLE SIOS U RIEULMIEUM + {0x99FE, 0xC223}, //4450 #HANGUL SYLLABLE SIOS U RIEULPIEUP + {0x9A41, 0xC224}, //4451 #HANGUL SYLLABLE SIOS U RIEULSIOS + {0x9A42, 0xC225}, //4452 #HANGUL SYLLABLE SIOS U RIEULTHIEUTH + {0x9A43, 0xC226}, //4453 #HANGUL SYLLABLE SIOS U RIEULPHIEUPH + {0x9A44, 0xC227}, //4454 #HANGUL SYLLABLE SIOS U RIEULHIEUH + {0x9A45, 0xC22A}, //4455 #HANGUL SYLLABLE SIOS U PIEUPSIOS + {0x9A46, 0xC22C}, //4456 #HANGUL SYLLABLE SIOS U SSANGSIOS + {0x9A47, 0xC22E}, //4457 #HANGUL SYLLABLE SIOS U CIEUC + {0x9A48, 0xC230}, //4458 #HANGUL SYLLABLE SIOS U KHIEUKH + {0x9A49, 0xC233}, //4459 #HANGUL SYLLABLE SIOS U HIEUH + {0x9A4A, 0xC235}, //4460 #HANGUL SYLLABLE SIOS WEO KIYEOK + {0x9A4B, 0xC236}, //4461 #HANGUL SYLLABLE SIOS WEO SSANGKIYEOK + {0x9A4C, 0xC237}, //4462 #HANGUL SYLLABLE SIOS WEO KIYEOKSIOS + {0x9A4D, 0xC238}, //4463 #HANGUL SYLLABLE SIOS WEO NIEUN + {0x9A4E, 0xC239}, //4464 #HANGUL SYLLABLE SIOS WEO NIEUNCIEUC + {0x9A4F, 0xC23A}, //4465 #HANGUL SYLLABLE SIOS WEO NIEUNHIEUH + {0x9A50, 0xC23B}, //4466 #HANGUL SYLLABLE SIOS WEO TIKEUT + {0x9A51, 0xC23C}, //4467 #HANGUL SYLLABLE SIOS WEO RIEUL + {0x9A52, 0xC23D}, //4468 #HANGUL SYLLABLE SIOS WEO RIEULKIYEOK + {0x9A53, 0xC23E}, //4469 #HANGUL SYLLABLE SIOS WEO RIEULMIEUM + {0x9A54, 0xC23F}, //4470 #HANGUL SYLLABLE SIOS WEO RIEULPIEUP + {0x9A55, 0xC240}, //4471 #HANGUL SYLLABLE SIOS WEO RIEULSIOS + {0x9A56, 0xC241}, //4472 #HANGUL SYLLABLE SIOS WEO RIEULTHIEUTH + {0x9A57, 0xC242}, //4473 #HANGUL SYLLABLE SIOS WEO RIEULPHIEUPH + {0x9A58, 0xC243}, //4474 #HANGUL SYLLABLE SIOS WEO RIEULHIEUH + {0x9A59, 0xC244}, //4475 #HANGUL SYLLABLE SIOS WEO MIEUM + {0x9A5A, 0xC245}, //4476 #HANGUL SYLLABLE SIOS WEO PIEUP + {0x9A61, 0xC246}, //4477 #HANGUL SYLLABLE SIOS WEO PIEUPSIOS + {0x9A62, 0xC247}, //4478 #HANGUL SYLLABLE SIOS WEO SIOS + {0x9A63, 0xC249}, //4479 #HANGUL SYLLABLE SIOS WEO IEUNG + {0x9A64, 0xC24A}, //4480 #HANGUL SYLLABLE SIOS WEO CIEUC + {0x9A65, 0xC24B}, //4481 #HANGUL SYLLABLE SIOS WEO CHIEUCH + {0x9A66, 0xC24C}, //4482 #HANGUL SYLLABLE SIOS WEO KHIEUKH + {0x9A67, 0xC24D}, //4483 #HANGUL SYLLABLE SIOS WEO THIEUTH + {0x9A68, 0xC24E}, //4484 #HANGUL SYLLABLE SIOS WEO PHIEUPH + {0x9A69, 0xC24F}, //4485 #HANGUL SYLLABLE SIOS WEO HIEUH + {0x9A6A, 0xC252}, //4486 #HANGUL SYLLABLE SIOS WE SSANGKIYEOK + {0x9A6B, 0xC253}, //4487 #HANGUL SYLLABLE SIOS WE KIYEOKSIOS + {0x9A6C, 0xC255}, //4488 #HANGUL SYLLABLE SIOS WE NIEUNCIEUC + {0x9A6D, 0xC256}, //4489 #HANGUL SYLLABLE SIOS WE NIEUNHIEUH + {0x9A6E, 0xC257}, //4490 #HANGUL SYLLABLE SIOS WE TIKEUT + {0x9A6F, 0xC259}, //4491 #HANGUL SYLLABLE SIOS WE RIEULKIYEOK + {0x9A70, 0xC25A}, //4492 #HANGUL SYLLABLE SIOS WE RIEULMIEUM + {0x9A71, 0xC25B}, //4493 #HANGUL SYLLABLE SIOS WE RIEULPIEUP + {0x9A72, 0xC25C}, //4494 #HANGUL SYLLABLE SIOS WE RIEULSIOS + {0x9A73, 0xC25D}, //4495 #HANGUL SYLLABLE SIOS WE RIEULTHIEUTH + {0x9A74, 0xC25E}, //4496 #HANGUL SYLLABLE SIOS WE RIEULPHIEUPH + {0x9A75, 0xC25F}, //4497 #HANGUL SYLLABLE SIOS WE RIEULHIEUH + {0x9A76, 0xC261}, //4498 #HANGUL SYLLABLE SIOS WE PIEUP + {0x9A77, 0xC262}, //4499 #HANGUL SYLLABLE SIOS WE PIEUPSIOS + {0x9A78, 0xC263}, //4500 #HANGUL SYLLABLE SIOS WE SIOS + {0x9A79, 0xC264}, //4501 #HANGUL SYLLABLE SIOS WE SSANGSIOS + {0x9A7A, 0xC266}, //4502 #HANGUL SYLLABLE SIOS WE CIEUC + {0x9A81, 0xC267}, //4503 #HANGUL SYLLABLE SIOS WE CHIEUCH + {0x9A82, 0xC268}, //4504 #HANGUL SYLLABLE SIOS WE KHIEUKH + {0x9A83, 0xC269}, //4505 #HANGUL SYLLABLE SIOS WE THIEUTH + {0x9A84, 0xC26A}, //4506 #HANGUL SYLLABLE SIOS WE PHIEUPH + {0x9A85, 0xC26B}, //4507 #HANGUL SYLLABLE SIOS WE HIEUH + {0x9A86, 0xC26E}, //4508 #HANGUL SYLLABLE SIOS WI SSANGKIYEOK + {0x9A87, 0xC26F}, //4509 #HANGUL SYLLABLE SIOS WI KIYEOKSIOS + {0x9A88, 0xC271}, //4510 #HANGUL SYLLABLE SIOS WI NIEUNCIEUC + {0x9A89, 0xC272}, //4511 #HANGUL SYLLABLE SIOS WI NIEUNHIEUH + {0x9A8A, 0xC273}, //4512 #HANGUL SYLLABLE SIOS WI TIKEUT + {0x9A8B, 0xC275}, //4513 #HANGUL SYLLABLE SIOS WI RIEULKIYEOK + {0x9A8C, 0xC276}, //4514 #HANGUL SYLLABLE SIOS WI RIEULMIEUM + {0x9A8D, 0xC277}, //4515 #HANGUL SYLLABLE SIOS WI RIEULPIEUP + {0x9A8E, 0xC278}, //4516 #HANGUL SYLLABLE SIOS WI RIEULSIOS + {0x9A8F, 0xC279}, //4517 #HANGUL SYLLABLE SIOS WI RIEULTHIEUTH + {0x9A90, 0xC27A}, //4518 #HANGUL SYLLABLE SIOS WI RIEULPHIEUPH + {0x9A91, 0xC27B}, //4519 #HANGUL SYLLABLE SIOS WI RIEULHIEUH + {0x9A92, 0xC27E}, //4520 #HANGUL SYLLABLE SIOS WI PIEUPSIOS + {0x9A93, 0xC280}, //4521 #HANGUL SYLLABLE SIOS WI SSANGSIOS + {0x9A94, 0xC282}, //4522 #HANGUL SYLLABLE SIOS WI CIEUC + {0x9A95, 0xC283}, //4523 #HANGUL SYLLABLE SIOS WI CHIEUCH + {0x9A96, 0xC284}, //4524 #HANGUL SYLLABLE SIOS WI KHIEUKH + {0x9A97, 0xC285}, //4525 #HANGUL SYLLABLE SIOS WI THIEUTH + {0x9A98, 0xC286}, //4526 #HANGUL SYLLABLE SIOS WI PHIEUPH + {0x9A99, 0xC287}, //4527 #HANGUL SYLLABLE SIOS WI HIEUH + {0x9A9A, 0xC28A}, //4528 #HANGUL SYLLABLE SIOS YU SSANGKIYEOK + {0x9A9B, 0xC28B}, //4529 #HANGUL SYLLABLE SIOS YU KIYEOKSIOS + {0x9A9C, 0xC28C}, //4530 #HANGUL SYLLABLE SIOS YU NIEUN + {0x9A9D, 0xC28D}, //4531 #HANGUL SYLLABLE SIOS YU NIEUNCIEUC + {0x9A9E, 0xC28E}, //4532 #HANGUL SYLLABLE SIOS YU NIEUNHIEUH + {0x9A9F, 0xC28F}, //4533 #HANGUL SYLLABLE SIOS YU TIKEUT + {0x9AA0, 0xC291}, //4534 #HANGUL SYLLABLE SIOS YU RIEULKIYEOK + {0x9AA1, 0xC292}, //4535 #HANGUL SYLLABLE SIOS YU RIEULMIEUM + {0x9AA2, 0xC293}, //4536 #HANGUL SYLLABLE SIOS YU RIEULPIEUP + {0x9AA3, 0xC294}, //4537 #HANGUL SYLLABLE SIOS YU RIEULSIOS + {0x9AA4, 0xC295}, //4538 #HANGUL SYLLABLE SIOS YU RIEULTHIEUTH + {0x9AA5, 0xC296}, //4539 #HANGUL SYLLABLE SIOS YU RIEULPHIEUPH + {0x9AA6, 0xC297}, //4540 #HANGUL SYLLABLE SIOS YU RIEULHIEUH + {0x9AA7, 0xC299}, //4541 #HANGUL SYLLABLE SIOS YU PIEUP + {0x9AA8, 0xC29A}, //4542 #HANGUL SYLLABLE SIOS YU PIEUPSIOS + {0x9AA9, 0xC29C}, //4543 #HANGUL SYLLABLE SIOS YU SSANGSIOS + {0x9AAA, 0xC29E}, //4544 #HANGUL SYLLABLE SIOS YU CIEUC + {0x9AAB, 0xC29F}, //4545 #HANGUL SYLLABLE SIOS YU CHIEUCH + {0x9AAC, 0xC2A0}, //4546 #HANGUL SYLLABLE SIOS YU KHIEUKH + {0x9AAD, 0xC2A1}, //4547 #HANGUL SYLLABLE SIOS YU THIEUTH + {0x9AAE, 0xC2A2}, //4548 #HANGUL SYLLABLE SIOS YU PHIEUPH + {0x9AAF, 0xC2A3}, //4549 #HANGUL SYLLABLE SIOS YU HIEUH + {0x9AB0, 0xC2A6}, //4550 #HANGUL SYLLABLE SIOS EU SSANGKIYEOK + {0x9AB1, 0xC2A7}, //4551 #HANGUL SYLLABLE SIOS EU KIYEOKSIOS + {0x9AB2, 0xC2A9}, //4552 #HANGUL SYLLABLE SIOS EU NIEUNCIEUC + {0x9AB3, 0xC2AA}, //4553 #HANGUL SYLLABLE SIOS EU NIEUNHIEUH + {0x9AB4, 0xC2AB}, //4554 #HANGUL SYLLABLE SIOS EU TIKEUT + {0x9AB5, 0xC2AE}, //4555 #HANGUL SYLLABLE SIOS EU RIEULMIEUM + {0x9AB6, 0xC2AF}, //4556 #HANGUL SYLLABLE SIOS EU RIEULPIEUP + {0x9AB7, 0xC2B0}, //4557 #HANGUL SYLLABLE SIOS EU RIEULSIOS + {0x9AB8, 0xC2B1}, //4558 #HANGUL SYLLABLE SIOS EU RIEULTHIEUTH + {0x9AB9, 0xC2B2}, //4559 #HANGUL SYLLABLE SIOS EU RIEULPHIEUPH + {0x9ABA, 0xC2B3}, //4560 #HANGUL SYLLABLE SIOS EU RIEULHIEUH + {0x9ABB, 0xC2B6}, //4561 #HANGUL SYLLABLE SIOS EU PIEUPSIOS + {0x9ABC, 0xC2B8}, //4562 #HANGUL SYLLABLE SIOS EU SSANGSIOS + {0x9ABD, 0xC2BA}, //4563 #HANGUL SYLLABLE SIOS EU CIEUC + {0x9ABE, 0xC2BB}, //4564 #HANGUL SYLLABLE SIOS EU CHIEUCH + {0x9ABF, 0xC2BC}, //4565 #HANGUL SYLLABLE SIOS EU KHIEUKH + {0x9AC0, 0xC2BD}, //4566 #HANGUL SYLLABLE SIOS EU THIEUTH + {0x9AC1, 0xC2BE}, //4567 #HANGUL SYLLABLE SIOS EU PHIEUPH + {0x9AC2, 0xC2BF}, //4568 #HANGUL SYLLABLE SIOS EU HIEUH + {0x9AC3, 0xC2C0}, //4569 #HANGUL SYLLABLE SIOS YI + {0x9AC4, 0xC2C1}, //4570 #HANGUL SYLLABLE SIOS YI KIYEOK + {0x9AC5, 0xC2C2}, //4571 #HANGUL SYLLABLE SIOS YI SSANGKIYEOK + {0x9AC6, 0xC2C3}, //4572 #HANGUL SYLLABLE SIOS YI KIYEOKSIOS + {0x9AC7, 0xC2C4}, //4573 #HANGUL SYLLABLE SIOS YI NIEUN + {0x9AC8, 0xC2C5}, //4574 #HANGUL SYLLABLE SIOS YI NIEUNCIEUC + {0x9AC9, 0xC2C6}, //4575 #HANGUL SYLLABLE SIOS YI NIEUNHIEUH + {0x9ACA, 0xC2C7}, //4576 #HANGUL SYLLABLE SIOS YI TIKEUT + {0x9ACB, 0xC2C8}, //4577 #HANGUL SYLLABLE SIOS YI RIEUL + {0x9ACC, 0xC2C9}, //4578 #HANGUL SYLLABLE SIOS YI RIEULKIYEOK + {0x9ACD, 0xC2CA}, //4579 #HANGUL SYLLABLE SIOS YI RIEULMIEUM + {0x9ACE, 0xC2CB}, //4580 #HANGUL SYLLABLE SIOS YI RIEULPIEUP + {0x9ACF, 0xC2CC}, //4581 #HANGUL SYLLABLE SIOS YI RIEULSIOS + {0x9AD0, 0xC2CD}, //4582 #HANGUL SYLLABLE SIOS YI RIEULTHIEUTH + {0x9AD1, 0xC2CE}, //4583 #HANGUL SYLLABLE SIOS YI RIEULPHIEUPH + {0x9AD2, 0xC2CF}, //4584 #HANGUL SYLLABLE SIOS YI RIEULHIEUH + {0x9AD3, 0xC2D0}, //4585 #HANGUL SYLLABLE SIOS YI MIEUM + {0x9AD4, 0xC2D1}, //4586 #HANGUL SYLLABLE SIOS YI PIEUP + {0x9AD5, 0xC2D2}, //4587 #HANGUL SYLLABLE SIOS YI PIEUPSIOS + {0x9AD6, 0xC2D3}, //4588 #HANGUL SYLLABLE SIOS YI SIOS + {0x9AD7, 0xC2D4}, //4589 #HANGUL SYLLABLE SIOS YI SSANGSIOS + {0x9AD8, 0xC2D5}, //4590 #HANGUL SYLLABLE SIOS YI IEUNG + {0x9AD9, 0xC2D6}, //4591 #HANGUL SYLLABLE SIOS YI CIEUC + {0x9ADA, 0xC2D7}, //4592 #HANGUL SYLLABLE SIOS YI CHIEUCH + {0x9ADB, 0xC2D8}, //4593 #HANGUL SYLLABLE SIOS YI KHIEUKH + {0x9ADC, 0xC2D9}, //4594 #HANGUL SYLLABLE SIOS YI THIEUTH + {0x9ADD, 0xC2DA}, //4595 #HANGUL SYLLABLE SIOS YI PHIEUPH + {0x9ADE, 0xC2DB}, //4596 #HANGUL SYLLABLE SIOS YI HIEUH + {0x9ADF, 0xC2DE}, //4597 #HANGUL SYLLABLE SIOS I SSANGKIYEOK + {0x9AE0, 0xC2DF}, //4598 #HANGUL SYLLABLE SIOS I KIYEOKSIOS + {0x9AE1, 0xC2E1}, //4599 #HANGUL SYLLABLE SIOS I NIEUNCIEUC + {0x9AE2, 0xC2E2}, //4600 #HANGUL SYLLABLE SIOS I NIEUNHIEUH + {0x9AE3, 0xC2E5}, //4601 #HANGUL SYLLABLE SIOS I RIEULKIYEOK + {0x9AE4, 0xC2E6}, //4602 #HANGUL SYLLABLE SIOS I RIEULMIEUM + {0x9AE5, 0xC2E7}, //4603 #HANGUL SYLLABLE SIOS I RIEULPIEUP + {0x9AE6, 0xC2E8}, //4604 #HANGUL SYLLABLE SIOS I RIEULSIOS + {0x9AE7, 0xC2E9}, //4605 #HANGUL SYLLABLE SIOS I RIEULTHIEUTH + {0x9AE8, 0xC2EA}, //4606 #HANGUL SYLLABLE SIOS I RIEULPHIEUPH + {0x9AE9, 0xC2EE}, //4607 #HANGUL SYLLABLE SIOS I PIEUPSIOS + {0x9AEA, 0xC2F0}, //4608 #HANGUL SYLLABLE SIOS I SSANGSIOS + {0x9AEB, 0xC2F2}, //4609 #HANGUL SYLLABLE SIOS I CIEUC + {0x9AEC, 0xC2F3}, //4610 #HANGUL SYLLABLE SIOS I CHIEUCH + {0x9AED, 0xC2F4}, //4611 #HANGUL SYLLABLE SIOS I KHIEUKH + {0x9AEE, 0xC2F5}, //4612 #HANGUL SYLLABLE SIOS I THIEUTH + {0x9AEF, 0xC2F7}, //4613 #HANGUL SYLLABLE SIOS I HIEUH + {0x9AF0, 0xC2FA}, //4614 #HANGUL SYLLABLE SSANGSIOS A SSANGKIYEOK + {0x9AF1, 0xC2FD}, //4615 #HANGUL SYLLABLE SSANGSIOS A NIEUNCIEUC + {0x9AF2, 0xC2FE}, //4616 #HANGUL SYLLABLE SSANGSIOS A NIEUNHIEUH + {0x9AF3, 0xC2FF}, //4617 #HANGUL SYLLABLE SSANGSIOS A TIKEUT + {0x9AF4, 0xC301}, //4618 #HANGUL SYLLABLE SSANGSIOS A RIEULKIYEOK + {0x9AF5, 0xC302}, //4619 #HANGUL SYLLABLE SSANGSIOS A RIEULMIEUM + {0x9AF6, 0xC303}, //4620 #HANGUL SYLLABLE SSANGSIOS A RIEULPIEUP + {0x9AF7, 0xC304}, //4621 #HANGUL SYLLABLE SSANGSIOS A RIEULSIOS + {0x9AF8, 0xC305}, //4622 #HANGUL SYLLABLE SSANGSIOS A RIEULTHIEUTH + {0x9AF9, 0xC306}, //4623 #HANGUL SYLLABLE SSANGSIOS A RIEULPHIEUPH + {0x9AFA, 0xC307}, //4624 #HANGUL SYLLABLE SSANGSIOS A RIEULHIEUH + {0x9AFB, 0xC30A}, //4625 #HANGUL SYLLABLE SSANGSIOS A PIEUPSIOS + {0x9AFC, 0xC30B}, //4626 #HANGUL SYLLABLE SSANGSIOS A SIOS + {0x9AFD, 0xC30E}, //4627 #HANGUL SYLLABLE SSANGSIOS A CIEUC + {0x9AFE, 0xC30F}, //4628 #HANGUL SYLLABLE SSANGSIOS A CHIEUCH + {0x9B41, 0xC310}, //4629 #HANGUL SYLLABLE SSANGSIOS A KHIEUKH + {0x9B42, 0xC311}, //4630 #HANGUL SYLLABLE SSANGSIOS A THIEUTH + {0x9B43, 0xC312}, //4631 #HANGUL SYLLABLE SSANGSIOS A PHIEUPH + {0x9B44, 0xC316}, //4632 #HANGUL SYLLABLE SSANGSIOS AE SSANGKIYEOK + {0x9B45, 0xC317}, //4633 #HANGUL SYLLABLE SSANGSIOS AE KIYEOKSIOS + {0x9B46, 0xC319}, //4634 #HANGUL SYLLABLE SSANGSIOS AE NIEUNCIEUC + {0x9B47, 0xC31A}, //4635 #HANGUL SYLLABLE SSANGSIOS AE NIEUNHIEUH + {0x9B48, 0xC31B}, //4636 #HANGUL SYLLABLE SSANGSIOS AE TIKEUT + {0x9B49, 0xC31D}, //4637 #HANGUL SYLLABLE SSANGSIOS AE RIEULKIYEOK + {0x9B4A, 0xC31E}, //4638 #HANGUL SYLLABLE SSANGSIOS AE RIEULMIEUM + {0x9B4B, 0xC31F}, //4639 #HANGUL SYLLABLE SSANGSIOS AE RIEULPIEUP + {0x9B4C, 0xC320}, //4640 #HANGUL SYLLABLE SSANGSIOS AE RIEULSIOS + {0x9B4D, 0xC321}, //4641 #HANGUL SYLLABLE SSANGSIOS AE RIEULTHIEUTH + {0x9B4E, 0xC322}, //4642 #HANGUL SYLLABLE SSANGSIOS AE RIEULPHIEUPH + {0x9B4F, 0xC323}, //4643 #HANGUL SYLLABLE SSANGSIOS AE RIEULHIEUH + {0x9B50, 0xC326}, //4644 #HANGUL SYLLABLE SSANGSIOS AE PIEUPSIOS + {0x9B51, 0xC327}, //4645 #HANGUL SYLLABLE SSANGSIOS AE SIOS + {0x9B52, 0xC32A}, //4646 #HANGUL SYLLABLE SSANGSIOS AE CIEUC + {0x9B53, 0xC32B}, //4647 #HANGUL SYLLABLE SSANGSIOS AE CHIEUCH + {0x9B54, 0xC32C}, //4648 #HANGUL SYLLABLE SSANGSIOS AE KHIEUKH + {0x9B55, 0xC32D}, //4649 #HANGUL SYLLABLE SSANGSIOS AE THIEUTH + {0x9B56, 0xC32E}, //4650 #HANGUL SYLLABLE SSANGSIOS AE PHIEUPH + {0x9B57, 0xC32F}, //4651 #HANGUL SYLLABLE SSANGSIOS AE HIEUH + {0x9B58, 0xC330}, //4652 #HANGUL SYLLABLE SSANGSIOS YA + {0x9B59, 0xC331}, //4653 #HANGUL SYLLABLE SSANGSIOS YA KIYEOK + {0x9B5A, 0xC332}, //4654 #HANGUL SYLLABLE SSANGSIOS YA SSANGKIYEOK + {0x9B61, 0xC333}, //4655 #HANGUL SYLLABLE SSANGSIOS YA KIYEOKSIOS + {0x9B62, 0xC334}, //4656 #HANGUL SYLLABLE SSANGSIOS YA NIEUN + {0x9B63, 0xC335}, //4657 #HANGUL SYLLABLE SSANGSIOS YA NIEUNCIEUC + {0x9B64, 0xC336}, //4658 #HANGUL SYLLABLE SSANGSIOS YA NIEUNHIEUH + {0x9B65, 0xC337}, //4659 #HANGUL SYLLABLE SSANGSIOS YA TIKEUT + {0x9B66, 0xC338}, //4660 #HANGUL SYLLABLE SSANGSIOS YA RIEUL + {0x9B67, 0xC339}, //4661 #HANGUL SYLLABLE SSANGSIOS YA RIEULKIYEOK + {0x9B68, 0xC33A}, //4662 #HANGUL SYLLABLE SSANGSIOS YA RIEULMIEUM + {0x9B69, 0xC33B}, //4663 #HANGUL SYLLABLE SSANGSIOS YA RIEULPIEUP + {0x9B6A, 0xC33C}, //4664 #HANGUL SYLLABLE SSANGSIOS YA RIEULSIOS + {0x9B6B, 0xC33D}, //4665 #HANGUL SYLLABLE SSANGSIOS YA RIEULTHIEUTH + {0x9B6C, 0xC33E}, //4666 #HANGUL SYLLABLE SSANGSIOS YA RIEULPHIEUPH + {0x9B6D, 0xC33F}, //4667 #HANGUL SYLLABLE SSANGSIOS YA RIEULHIEUH + {0x9B6E, 0xC340}, //4668 #HANGUL SYLLABLE SSANGSIOS YA MIEUM + {0x9B6F, 0xC341}, //4669 #HANGUL SYLLABLE SSANGSIOS YA PIEUP + {0x9B70, 0xC342}, //4670 #HANGUL SYLLABLE SSANGSIOS YA PIEUPSIOS + {0x9B71, 0xC343}, //4671 #HANGUL SYLLABLE SSANGSIOS YA SIOS + {0x9B72, 0xC344}, //4672 #HANGUL SYLLABLE SSANGSIOS YA SSANGSIOS + {0x9B73, 0xC346}, //4673 #HANGUL SYLLABLE SSANGSIOS YA CIEUC + {0x9B74, 0xC347}, //4674 #HANGUL SYLLABLE SSANGSIOS YA CHIEUCH + {0x9B75, 0xC348}, //4675 #HANGUL SYLLABLE SSANGSIOS YA KHIEUKH + {0x9B76, 0xC349}, //4676 #HANGUL SYLLABLE SSANGSIOS YA THIEUTH + {0x9B77, 0xC34A}, //4677 #HANGUL SYLLABLE SSANGSIOS YA PHIEUPH + {0x9B78, 0xC34B}, //4678 #HANGUL SYLLABLE SSANGSIOS YA HIEUH + {0x9B79, 0xC34C}, //4679 #HANGUL SYLLABLE SSANGSIOS YAE + {0x9B7A, 0xC34D}, //4680 #HANGUL SYLLABLE SSANGSIOS YAE KIYEOK + {0x9B81, 0xC34E}, //4681 #HANGUL SYLLABLE SSANGSIOS YAE SSANGKIYEOK + {0x9B82, 0xC34F}, //4682 #HANGUL SYLLABLE SSANGSIOS YAE KIYEOKSIOS + {0x9B83, 0xC350}, //4683 #HANGUL SYLLABLE SSANGSIOS YAE NIEUN + {0x9B84, 0xC351}, //4684 #HANGUL SYLLABLE SSANGSIOS YAE NIEUNCIEUC + {0x9B85, 0xC352}, //4685 #HANGUL SYLLABLE SSANGSIOS YAE NIEUNHIEUH + {0x9B86, 0xC353}, //4686 #HANGUL SYLLABLE SSANGSIOS YAE TIKEUT + {0x9B87, 0xC354}, //4687 #HANGUL SYLLABLE SSANGSIOS YAE RIEUL + {0x9B88, 0xC355}, //4688 #HANGUL SYLLABLE SSANGSIOS YAE RIEULKIYEOK + {0x9B89, 0xC356}, //4689 #HANGUL SYLLABLE SSANGSIOS YAE RIEULMIEUM + {0x9B8A, 0xC357}, //4690 #HANGUL SYLLABLE SSANGSIOS YAE RIEULPIEUP + {0x9B8B, 0xC358}, //4691 #HANGUL SYLLABLE SSANGSIOS YAE RIEULSIOS + {0x9B8C, 0xC359}, //4692 #HANGUL SYLLABLE SSANGSIOS YAE RIEULTHIEUTH + {0x9B8D, 0xC35A}, //4693 #HANGUL SYLLABLE SSANGSIOS YAE RIEULPHIEUPH + {0x9B8E, 0xC35B}, //4694 #HANGUL SYLLABLE SSANGSIOS YAE RIEULHIEUH + {0x9B8F, 0xC35C}, //4695 #HANGUL SYLLABLE SSANGSIOS YAE MIEUM + {0x9B90, 0xC35D}, //4696 #HANGUL SYLLABLE SSANGSIOS YAE PIEUP + {0x9B91, 0xC35E}, //4697 #HANGUL SYLLABLE SSANGSIOS YAE PIEUPSIOS + {0x9B92, 0xC35F}, //4698 #HANGUL SYLLABLE SSANGSIOS YAE SIOS + {0x9B93, 0xC360}, //4699 #HANGUL SYLLABLE SSANGSIOS YAE SSANGSIOS + {0x9B94, 0xC361}, //4700 #HANGUL SYLLABLE SSANGSIOS YAE IEUNG + {0x9B95, 0xC362}, //4701 #HANGUL SYLLABLE SSANGSIOS YAE CIEUC + {0x9B96, 0xC363}, //4702 #HANGUL SYLLABLE SSANGSIOS YAE CHIEUCH + {0x9B97, 0xC364}, //4703 #HANGUL SYLLABLE SSANGSIOS YAE KHIEUKH + {0x9B98, 0xC365}, //4704 #HANGUL SYLLABLE SSANGSIOS YAE THIEUTH + {0x9B99, 0xC366}, //4705 #HANGUL SYLLABLE SSANGSIOS YAE PHIEUPH + {0x9B9A, 0xC367}, //4706 #HANGUL SYLLABLE SSANGSIOS YAE HIEUH + {0x9B9B, 0xC36A}, //4707 #HANGUL SYLLABLE SSANGSIOS EO SSANGKIYEOK + {0x9B9C, 0xC36B}, //4708 #HANGUL SYLLABLE SSANGSIOS EO KIYEOKSIOS + {0x9B9D, 0xC36D}, //4709 #HANGUL SYLLABLE SSANGSIOS EO NIEUNCIEUC + {0x9B9E, 0xC36E}, //4710 #HANGUL SYLLABLE SSANGSIOS EO NIEUNHIEUH + {0x9B9F, 0xC36F}, //4711 #HANGUL SYLLABLE SSANGSIOS EO TIKEUT + {0x9BA0, 0xC371}, //4712 #HANGUL SYLLABLE SSANGSIOS EO RIEULKIYEOK + {0x9BA1, 0xC373}, //4713 #HANGUL SYLLABLE SSANGSIOS EO RIEULPIEUP + {0x9BA2, 0xC374}, //4714 #HANGUL SYLLABLE SSANGSIOS EO RIEULSIOS + {0x9BA3, 0xC375}, //4715 #HANGUL SYLLABLE SSANGSIOS EO RIEULTHIEUTH + {0x9BA4, 0xC376}, //4716 #HANGUL SYLLABLE SSANGSIOS EO RIEULPHIEUPH + {0x9BA5, 0xC377}, //4717 #HANGUL SYLLABLE SSANGSIOS EO RIEULHIEUH + {0x9BA6, 0xC37A}, //4718 #HANGUL SYLLABLE SSANGSIOS EO PIEUPSIOS + {0x9BA7, 0xC37B}, //4719 #HANGUL SYLLABLE SSANGSIOS EO SIOS + {0x9BA8, 0xC37E}, //4720 #HANGUL SYLLABLE SSANGSIOS EO CIEUC + {0x9BA9, 0xC37F}, //4721 #HANGUL SYLLABLE SSANGSIOS EO CHIEUCH + {0x9BAA, 0xC380}, //4722 #HANGUL SYLLABLE SSANGSIOS EO KHIEUKH + {0x9BAB, 0xC381}, //4723 #HANGUL SYLLABLE SSANGSIOS EO THIEUTH + {0x9BAC, 0xC382}, //4724 #HANGUL SYLLABLE SSANGSIOS EO PHIEUPH + {0x9BAD, 0xC383}, //4725 #HANGUL SYLLABLE SSANGSIOS EO HIEUH + {0x9BAE, 0xC385}, //4726 #HANGUL SYLLABLE SSANGSIOS E KIYEOK + {0x9BAF, 0xC386}, //4727 #HANGUL SYLLABLE SSANGSIOS E SSANGKIYEOK + {0x9BB0, 0xC387}, //4728 #HANGUL SYLLABLE SSANGSIOS E KIYEOKSIOS + {0x9BB1, 0xC389}, //4729 #HANGUL SYLLABLE SSANGSIOS E NIEUNCIEUC + {0x9BB2, 0xC38A}, //4730 #HANGUL SYLLABLE SSANGSIOS E NIEUNHIEUH + {0x9BB3, 0xC38B}, //4731 #HANGUL SYLLABLE SSANGSIOS E TIKEUT + {0x9BB4, 0xC38D}, //4732 #HANGUL SYLLABLE SSANGSIOS E RIEULKIYEOK + {0x9BB5, 0xC38E}, //4733 #HANGUL SYLLABLE SSANGSIOS E RIEULMIEUM + {0x9BB6, 0xC38F}, //4734 #HANGUL SYLLABLE SSANGSIOS E RIEULPIEUP + {0x9BB7, 0xC390}, //4735 #HANGUL SYLLABLE SSANGSIOS E RIEULSIOS + {0x9BB8, 0xC391}, //4736 #HANGUL SYLLABLE SSANGSIOS E RIEULTHIEUTH + {0x9BB9, 0xC392}, //4737 #HANGUL SYLLABLE SSANGSIOS E RIEULPHIEUPH + {0x9BBA, 0xC393}, //4738 #HANGUL SYLLABLE SSANGSIOS E RIEULHIEUH + {0x9BBB, 0xC394}, //4739 #HANGUL SYLLABLE SSANGSIOS E MIEUM + {0x9BBC, 0xC395}, //4740 #HANGUL SYLLABLE SSANGSIOS E PIEUP + {0x9BBD, 0xC396}, //4741 #HANGUL SYLLABLE SSANGSIOS E PIEUPSIOS + {0x9BBE, 0xC397}, //4742 #HANGUL SYLLABLE SSANGSIOS E SIOS + {0x9BBF, 0xC398}, //4743 #HANGUL SYLLABLE SSANGSIOS E SSANGSIOS + {0x9BC0, 0xC399}, //4744 #HANGUL SYLLABLE SSANGSIOS E IEUNG + {0x9BC1, 0xC39A}, //4745 #HANGUL SYLLABLE SSANGSIOS E CIEUC + {0x9BC2, 0xC39B}, //4746 #HANGUL SYLLABLE SSANGSIOS E CHIEUCH + {0x9BC3, 0xC39C}, //4747 #HANGUL SYLLABLE SSANGSIOS E KHIEUKH + {0x9BC4, 0xC39D}, //4748 #HANGUL SYLLABLE SSANGSIOS E THIEUTH + {0x9BC5, 0xC39E}, //4749 #HANGUL SYLLABLE SSANGSIOS E PHIEUPH + {0x9BC6, 0xC39F}, //4750 #HANGUL SYLLABLE SSANGSIOS E HIEUH + {0x9BC7, 0xC3A0}, //4751 #HANGUL SYLLABLE SSANGSIOS YEO + {0x9BC8, 0xC3A1}, //4752 #HANGUL SYLLABLE SSANGSIOS YEO KIYEOK + {0x9BC9, 0xC3A2}, //4753 #HANGUL SYLLABLE SSANGSIOS YEO SSANGKIYEOK + {0x9BCA, 0xC3A3}, //4754 #HANGUL SYLLABLE SSANGSIOS YEO KIYEOKSIOS + {0x9BCB, 0xC3A4}, //4755 #HANGUL SYLLABLE SSANGSIOS YEO NIEUN + {0x9BCC, 0xC3A5}, //4756 #HANGUL SYLLABLE SSANGSIOS YEO NIEUNCIEUC + {0x9BCD, 0xC3A6}, //4757 #HANGUL SYLLABLE SSANGSIOS YEO NIEUNHIEUH + {0x9BCE, 0xC3A7}, //4758 #HANGUL SYLLABLE SSANGSIOS YEO TIKEUT + {0x9BCF, 0xC3A8}, //4759 #HANGUL SYLLABLE SSANGSIOS YEO RIEUL + {0x9BD0, 0xC3A9}, //4760 #HANGUL SYLLABLE SSANGSIOS YEO RIEULKIYEOK + {0x9BD1, 0xC3AA}, //4761 #HANGUL SYLLABLE SSANGSIOS YEO RIEULMIEUM + {0x9BD2, 0xC3AB}, //4762 #HANGUL SYLLABLE SSANGSIOS YEO RIEULPIEUP + {0x9BD3, 0xC3AC}, //4763 #HANGUL SYLLABLE SSANGSIOS YEO RIEULSIOS + {0x9BD4, 0xC3AD}, //4764 #HANGUL SYLLABLE SSANGSIOS YEO RIEULTHIEUTH + {0x9BD5, 0xC3AE}, //4765 #HANGUL SYLLABLE SSANGSIOS YEO RIEULPHIEUPH + {0x9BD6, 0xC3AF}, //4766 #HANGUL SYLLABLE SSANGSIOS YEO RIEULHIEUH + {0x9BD7, 0xC3B0}, //4767 #HANGUL SYLLABLE SSANGSIOS YEO MIEUM + {0x9BD8, 0xC3B1}, //4768 #HANGUL SYLLABLE SSANGSIOS YEO PIEUP + {0x9BD9, 0xC3B2}, //4769 #HANGUL SYLLABLE SSANGSIOS YEO PIEUPSIOS + {0x9BDA, 0xC3B3}, //4770 #HANGUL SYLLABLE SSANGSIOS YEO SIOS + {0x9BDB, 0xC3B4}, //4771 #HANGUL SYLLABLE SSANGSIOS YEO SSANGSIOS + {0x9BDC, 0xC3B5}, //4772 #HANGUL SYLLABLE SSANGSIOS YEO IEUNG + {0x9BDD, 0xC3B6}, //4773 #HANGUL SYLLABLE SSANGSIOS YEO CIEUC + {0x9BDE, 0xC3B7}, //4774 #HANGUL SYLLABLE SSANGSIOS YEO CHIEUCH + {0x9BDF, 0xC3B8}, //4775 #HANGUL SYLLABLE SSANGSIOS YEO KHIEUKH + {0x9BE0, 0xC3B9}, //4776 #HANGUL SYLLABLE SSANGSIOS YEO THIEUTH + {0x9BE1, 0xC3BA}, //4777 #HANGUL SYLLABLE SSANGSIOS YEO PHIEUPH + {0x9BE2, 0xC3BB}, //4778 #HANGUL SYLLABLE SSANGSIOS YEO HIEUH + {0x9BE3, 0xC3BC}, //4779 #HANGUL SYLLABLE SSANGSIOS YE + {0x9BE4, 0xC3BD}, //4780 #HANGUL SYLLABLE SSANGSIOS YE KIYEOK + {0x9BE5, 0xC3BE}, //4781 #HANGUL SYLLABLE SSANGSIOS YE SSANGKIYEOK + {0x9BE6, 0xC3BF}, //4782 #HANGUL SYLLABLE SSANGSIOS YE KIYEOKSIOS + {0x9BE7, 0xC3C1}, //4783 #HANGUL SYLLABLE SSANGSIOS YE NIEUNCIEUC + {0x9BE8, 0xC3C2}, //4784 #HANGUL SYLLABLE SSANGSIOS YE NIEUNHIEUH + {0x9BE9, 0xC3C3}, //4785 #HANGUL SYLLABLE SSANGSIOS YE TIKEUT + {0x9BEA, 0xC3C4}, //4786 #HANGUL SYLLABLE SSANGSIOS YE RIEUL + {0x9BEB, 0xC3C5}, //4787 #HANGUL SYLLABLE SSANGSIOS YE RIEULKIYEOK + {0x9BEC, 0xC3C6}, //4788 #HANGUL SYLLABLE SSANGSIOS YE RIEULMIEUM + {0x9BED, 0xC3C7}, //4789 #HANGUL SYLLABLE SSANGSIOS YE RIEULPIEUP + {0x9BEE, 0xC3C8}, //4790 #HANGUL SYLLABLE SSANGSIOS YE RIEULSIOS + {0x9BEF, 0xC3C9}, //4791 #HANGUL SYLLABLE SSANGSIOS YE RIEULTHIEUTH + {0x9BF0, 0xC3CA}, //4792 #HANGUL SYLLABLE SSANGSIOS YE RIEULPHIEUPH + {0x9BF1, 0xC3CB}, //4793 #HANGUL SYLLABLE SSANGSIOS YE RIEULHIEUH + {0x9BF2, 0xC3CC}, //4794 #HANGUL SYLLABLE SSANGSIOS YE MIEUM + {0x9BF3, 0xC3CD}, //4795 #HANGUL SYLLABLE SSANGSIOS YE PIEUP + {0x9BF4, 0xC3CE}, //4796 #HANGUL SYLLABLE SSANGSIOS YE PIEUPSIOS + {0x9BF5, 0xC3CF}, //4797 #HANGUL SYLLABLE SSANGSIOS YE SIOS + {0x9BF6, 0xC3D0}, //4798 #HANGUL SYLLABLE SSANGSIOS YE SSANGSIOS + {0x9BF7, 0xC3D1}, //4799 #HANGUL SYLLABLE SSANGSIOS YE IEUNG + {0x9BF8, 0xC3D2}, //4800 #HANGUL SYLLABLE SSANGSIOS YE CIEUC + {0x9BF9, 0xC3D3}, //4801 #HANGUL SYLLABLE SSANGSIOS YE CHIEUCH + {0x9BFA, 0xC3D4}, //4802 #HANGUL SYLLABLE SSANGSIOS YE KHIEUKH + {0x9BFB, 0xC3D5}, //4803 #HANGUL SYLLABLE SSANGSIOS YE THIEUTH + {0x9BFC, 0xC3D6}, //4804 #HANGUL SYLLABLE SSANGSIOS YE PHIEUPH + {0x9BFD, 0xC3D7}, //4805 #HANGUL SYLLABLE SSANGSIOS YE HIEUH + {0x9BFE, 0xC3DA}, //4806 #HANGUL SYLLABLE SSANGSIOS O SSANGKIYEOK + {0x9C41, 0xC3DB}, //4807 #HANGUL SYLLABLE SSANGSIOS O KIYEOKSIOS + {0x9C42, 0xC3DD}, //4808 #HANGUL SYLLABLE SSANGSIOS O NIEUNCIEUC + {0x9C43, 0xC3DE}, //4809 #HANGUL SYLLABLE SSANGSIOS O NIEUNHIEUH + {0x9C44, 0xC3E1}, //4810 #HANGUL SYLLABLE SSANGSIOS O RIEULKIYEOK + {0x9C45, 0xC3E3}, //4811 #HANGUL SYLLABLE SSANGSIOS O RIEULPIEUP + {0x9C46, 0xC3E4}, //4812 #HANGUL SYLLABLE SSANGSIOS O RIEULSIOS + {0x9C47, 0xC3E5}, //4813 #HANGUL SYLLABLE SSANGSIOS O RIEULTHIEUTH + {0x9C48, 0xC3E6}, //4814 #HANGUL SYLLABLE SSANGSIOS O RIEULPHIEUPH + {0x9C49, 0xC3E7}, //4815 #HANGUL SYLLABLE SSANGSIOS O RIEULHIEUH + {0x9C4A, 0xC3EA}, //4816 #HANGUL SYLLABLE SSANGSIOS O PIEUPSIOS + {0x9C4B, 0xC3EB}, //4817 #HANGUL SYLLABLE SSANGSIOS O SIOS + {0x9C4C, 0xC3EC}, //4818 #HANGUL SYLLABLE SSANGSIOS O SSANGSIOS + {0x9C4D, 0xC3EE}, //4819 #HANGUL SYLLABLE SSANGSIOS O CIEUC + {0x9C4E, 0xC3EF}, //4820 #HANGUL SYLLABLE SSANGSIOS O CHIEUCH + {0x9C4F, 0xC3F0}, //4821 #HANGUL SYLLABLE SSANGSIOS O KHIEUKH + {0x9C50, 0xC3F1}, //4822 #HANGUL SYLLABLE SSANGSIOS O THIEUTH + {0x9C51, 0xC3F2}, //4823 #HANGUL SYLLABLE SSANGSIOS O PHIEUPH + {0x9C52, 0xC3F3}, //4824 #HANGUL SYLLABLE SSANGSIOS O HIEUH + {0x9C53, 0xC3F6}, //4825 #HANGUL SYLLABLE SSANGSIOS WA SSANGKIYEOK + {0x9C54, 0xC3F7}, //4826 #HANGUL SYLLABLE SSANGSIOS WA KIYEOKSIOS + {0x9C55, 0xC3F9}, //4827 #HANGUL SYLLABLE SSANGSIOS WA NIEUNCIEUC + {0x9C56, 0xC3FA}, //4828 #HANGUL SYLLABLE SSANGSIOS WA NIEUNHIEUH + {0x9C57, 0xC3FB}, //4829 #HANGUL SYLLABLE SSANGSIOS WA TIKEUT + {0x9C58, 0xC3FC}, //4830 #HANGUL SYLLABLE SSANGSIOS WA RIEUL + {0x9C59, 0xC3FD}, //4831 #HANGUL SYLLABLE SSANGSIOS WA RIEULKIYEOK + {0x9C5A, 0xC3FE}, //4832 #HANGUL SYLLABLE SSANGSIOS WA RIEULMIEUM + {0x9C61, 0xC3FF}, //4833 #HANGUL SYLLABLE SSANGSIOS WA RIEULPIEUP + {0x9C62, 0xC400}, //4834 #HANGUL SYLLABLE SSANGSIOS WA RIEULSIOS + {0x9C63, 0xC401}, //4835 #HANGUL SYLLABLE SSANGSIOS WA RIEULTHIEUTH + {0x9C64, 0xC402}, //4836 #HANGUL SYLLABLE SSANGSIOS WA RIEULPHIEUPH + {0x9C65, 0xC403}, //4837 #HANGUL SYLLABLE SSANGSIOS WA RIEULHIEUH + {0x9C66, 0xC404}, //4838 #HANGUL SYLLABLE SSANGSIOS WA MIEUM + {0x9C67, 0xC405}, //4839 #HANGUL SYLLABLE SSANGSIOS WA PIEUP + {0x9C68, 0xC406}, //4840 #HANGUL SYLLABLE SSANGSIOS WA PIEUPSIOS + {0x9C69, 0xC407}, //4841 #HANGUL SYLLABLE SSANGSIOS WA SIOS + {0x9C6A, 0xC409}, //4842 #HANGUL SYLLABLE SSANGSIOS WA IEUNG + {0x9C6B, 0xC40A}, //4843 #HANGUL SYLLABLE SSANGSIOS WA CIEUC + {0x9C6C, 0xC40B}, //4844 #HANGUL SYLLABLE SSANGSIOS WA CHIEUCH + {0x9C6D, 0xC40C}, //4845 #HANGUL SYLLABLE SSANGSIOS WA KHIEUKH + {0x9C6E, 0xC40D}, //4846 #HANGUL SYLLABLE SSANGSIOS WA THIEUTH + {0x9C6F, 0xC40E}, //4847 #HANGUL SYLLABLE SSANGSIOS WA PHIEUPH + {0x9C70, 0xC40F}, //4848 #HANGUL SYLLABLE SSANGSIOS WA HIEUH + {0x9C71, 0xC411}, //4849 #HANGUL SYLLABLE SSANGSIOS WAE KIYEOK + {0x9C72, 0xC412}, //4850 #HANGUL SYLLABLE SSANGSIOS WAE SSANGKIYEOK + {0x9C73, 0xC413}, //4851 #HANGUL SYLLABLE SSANGSIOS WAE KIYEOKSIOS + {0x9C74, 0xC414}, //4852 #HANGUL SYLLABLE SSANGSIOS WAE NIEUN + {0x9C75, 0xC415}, //4853 #HANGUL SYLLABLE SSANGSIOS WAE NIEUNCIEUC + {0x9C76, 0xC416}, //4854 #HANGUL SYLLABLE SSANGSIOS WAE NIEUNHIEUH + {0x9C77, 0xC417}, //4855 #HANGUL SYLLABLE SSANGSIOS WAE TIKEUT + {0x9C78, 0xC418}, //4856 #HANGUL SYLLABLE SSANGSIOS WAE RIEUL + {0x9C79, 0xC419}, //4857 #HANGUL SYLLABLE SSANGSIOS WAE RIEULKIYEOK + {0x9C7A, 0xC41A}, //4858 #HANGUL SYLLABLE SSANGSIOS WAE RIEULMIEUM + {0x9C81, 0xC41B}, //4859 #HANGUL SYLLABLE SSANGSIOS WAE RIEULPIEUP + {0x9C82, 0xC41C}, //4860 #HANGUL SYLLABLE SSANGSIOS WAE RIEULSIOS + {0x9C83, 0xC41D}, //4861 #HANGUL SYLLABLE SSANGSIOS WAE RIEULTHIEUTH + {0x9C84, 0xC41E}, //4862 #HANGUL SYLLABLE SSANGSIOS WAE RIEULPHIEUPH + {0x9C85, 0xC41F}, //4863 #HANGUL SYLLABLE SSANGSIOS WAE RIEULHIEUH + {0x9C86, 0xC420}, //4864 #HANGUL SYLLABLE SSANGSIOS WAE MIEUM + {0x9C87, 0xC421}, //4865 #HANGUL SYLLABLE SSANGSIOS WAE PIEUP + {0x9C88, 0xC422}, //4866 #HANGUL SYLLABLE SSANGSIOS WAE PIEUPSIOS + {0x9C89, 0xC423}, //4867 #HANGUL SYLLABLE SSANGSIOS WAE SIOS + {0x9C8A, 0xC425}, //4868 #HANGUL SYLLABLE SSANGSIOS WAE IEUNG + {0x9C8B, 0xC426}, //4869 #HANGUL SYLLABLE SSANGSIOS WAE CIEUC + {0x9C8C, 0xC427}, //4870 #HANGUL SYLLABLE SSANGSIOS WAE CHIEUCH + {0x9C8D, 0xC428}, //4871 #HANGUL SYLLABLE SSANGSIOS WAE KHIEUKH + {0x9C8E, 0xC429}, //4872 #HANGUL SYLLABLE SSANGSIOS WAE THIEUTH + {0x9C8F, 0xC42A}, //4873 #HANGUL SYLLABLE SSANGSIOS WAE PHIEUPH + {0x9C90, 0xC42B}, //4874 #HANGUL SYLLABLE SSANGSIOS WAE HIEUH + {0x9C91, 0xC42D}, //4875 #HANGUL SYLLABLE SSANGSIOS OE KIYEOK + {0x9C92, 0xC42E}, //4876 #HANGUL SYLLABLE SSANGSIOS OE SSANGKIYEOK + {0x9C93, 0xC42F}, //4877 #HANGUL SYLLABLE SSANGSIOS OE KIYEOKSIOS + {0x9C94, 0xC431}, //4878 #HANGUL SYLLABLE SSANGSIOS OE NIEUNCIEUC + {0x9C95, 0xC432}, //4879 #HANGUL SYLLABLE SSANGSIOS OE NIEUNHIEUH + {0x9C96, 0xC433}, //4880 #HANGUL SYLLABLE SSANGSIOS OE TIKEUT + {0x9C97, 0xC435}, //4881 #HANGUL SYLLABLE SSANGSIOS OE RIEULKIYEOK + {0x9C98, 0xC436}, //4882 #HANGUL SYLLABLE SSANGSIOS OE RIEULMIEUM + {0x9C99, 0xC437}, //4883 #HANGUL SYLLABLE SSANGSIOS OE RIEULPIEUP + {0x9C9A, 0xC438}, //4884 #HANGUL SYLLABLE SSANGSIOS OE RIEULSIOS + {0x9C9B, 0xC439}, //4885 #HANGUL SYLLABLE SSANGSIOS OE RIEULTHIEUTH + {0x9C9C, 0xC43A}, //4886 #HANGUL SYLLABLE SSANGSIOS OE RIEULPHIEUPH + {0x9C9D, 0xC43B}, //4887 #HANGUL SYLLABLE SSANGSIOS OE RIEULHIEUH + {0x9C9E, 0xC43E}, //4888 #HANGUL SYLLABLE SSANGSIOS OE PIEUPSIOS + {0x9C9F, 0xC43F}, //4889 #HANGUL SYLLABLE SSANGSIOS OE SIOS + {0x9CA0, 0xC440}, //4890 #HANGUL SYLLABLE SSANGSIOS OE SSANGSIOS + {0x9CA1, 0xC441}, //4891 #HANGUL SYLLABLE SSANGSIOS OE IEUNG + {0x9CA2, 0xC442}, //4892 #HANGUL SYLLABLE SSANGSIOS OE CIEUC + {0x9CA3, 0xC443}, //4893 #HANGUL SYLLABLE SSANGSIOS OE CHIEUCH + {0x9CA4, 0xC444}, //4894 #HANGUL SYLLABLE SSANGSIOS OE KHIEUKH + {0x9CA5, 0xC445}, //4895 #HANGUL SYLLABLE SSANGSIOS OE THIEUTH + {0x9CA6, 0xC446}, //4896 #HANGUL SYLLABLE SSANGSIOS OE PHIEUPH + {0x9CA7, 0xC447}, //4897 #HANGUL SYLLABLE SSANGSIOS OE HIEUH + {0x9CA8, 0xC449}, //4898 #HANGUL SYLLABLE SSANGSIOS YO KIYEOK + {0x9CA9, 0xC44A}, //4899 #HANGUL SYLLABLE SSANGSIOS YO SSANGKIYEOK + {0x9CAA, 0xC44B}, //4900 #HANGUL SYLLABLE SSANGSIOS YO KIYEOKSIOS + {0x9CAB, 0xC44C}, //4901 #HANGUL SYLLABLE SSANGSIOS YO NIEUN + {0x9CAC, 0xC44D}, //4902 #HANGUL SYLLABLE SSANGSIOS YO NIEUNCIEUC + {0x9CAD, 0xC44E}, //4903 #HANGUL SYLLABLE SSANGSIOS YO NIEUNHIEUH + {0x9CAE, 0xC44F}, //4904 #HANGUL SYLLABLE SSANGSIOS YO TIKEUT + {0x9CAF, 0xC450}, //4905 #HANGUL SYLLABLE SSANGSIOS YO RIEUL + {0x9CB0, 0xC451}, //4906 #HANGUL SYLLABLE SSANGSIOS YO RIEULKIYEOK + {0x9CB1, 0xC452}, //4907 #HANGUL SYLLABLE SSANGSIOS YO RIEULMIEUM + {0x9CB2, 0xC453}, //4908 #HANGUL SYLLABLE SSANGSIOS YO RIEULPIEUP + {0x9CB3, 0xC454}, //4909 #HANGUL SYLLABLE SSANGSIOS YO RIEULSIOS + {0x9CB4, 0xC455}, //4910 #HANGUL SYLLABLE SSANGSIOS YO RIEULTHIEUTH + {0x9CB5, 0xC456}, //4911 #HANGUL SYLLABLE SSANGSIOS YO RIEULPHIEUPH + {0x9CB6, 0xC457}, //4912 #HANGUL SYLLABLE SSANGSIOS YO RIEULHIEUH + {0x9CB7, 0xC458}, //4913 #HANGUL SYLLABLE SSANGSIOS YO MIEUM + {0x9CB8, 0xC459}, //4914 #HANGUL SYLLABLE SSANGSIOS YO PIEUP + {0x9CB9, 0xC45A}, //4915 #HANGUL SYLLABLE SSANGSIOS YO PIEUPSIOS + {0x9CBA, 0xC45B}, //4916 #HANGUL SYLLABLE SSANGSIOS YO SIOS + {0x9CBB, 0xC45C}, //4917 #HANGUL SYLLABLE SSANGSIOS YO SSANGSIOS + {0x9CBC, 0xC45D}, //4918 #HANGUL SYLLABLE SSANGSIOS YO IEUNG + {0x9CBD, 0xC45E}, //4919 #HANGUL SYLLABLE SSANGSIOS YO CIEUC + {0x9CBE, 0xC45F}, //4920 #HANGUL SYLLABLE SSANGSIOS YO CHIEUCH + {0x9CBF, 0xC460}, //4921 #HANGUL SYLLABLE SSANGSIOS YO KHIEUKH + {0x9CC0, 0xC461}, //4922 #HANGUL SYLLABLE SSANGSIOS YO THIEUTH + {0x9CC1, 0xC462}, //4923 #HANGUL SYLLABLE SSANGSIOS YO PHIEUPH + {0x9CC2, 0xC463}, //4924 #HANGUL SYLLABLE SSANGSIOS YO HIEUH + {0x9CC3, 0xC466}, //4925 #HANGUL SYLLABLE SSANGSIOS U SSANGKIYEOK + {0x9CC4, 0xC467}, //4926 #HANGUL SYLLABLE SSANGSIOS U KIYEOKSIOS + {0x9CC5, 0xC469}, //4927 #HANGUL SYLLABLE SSANGSIOS U NIEUNCIEUC + {0x9CC6, 0xC46A}, //4928 #HANGUL SYLLABLE SSANGSIOS U NIEUNHIEUH + {0x9CC7, 0xC46B}, //4929 #HANGUL SYLLABLE SSANGSIOS U TIKEUT + {0x9CC8, 0xC46D}, //4930 #HANGUL SYLLABLE SSANGSIOS U RIEULKIYEOK + {0x9CC9, 0xC46E}, //4931 #HANGUL SYLLABLE SSANGSIOS U RIEULMIEUM + {0x9CCA, 0xC46F}, //4932 #HANGUL SYLLABLE SSANGSIOS U RIEULPIEUP + {0x9CCB, 0xC470}, //4933 #HANGUL SYLLABLE SSANGSIOS U RIEULSIOS + {0x9CCC, 0xC471}, //4934 #HANGUL SYLLABLE SSANGSIOS U RIEULTHIEUTH + {0x9CCD, 0xC472}, //4935 #HANGUL SYLLABLE SSANGSIOS U RIEULPHIEUPH + {0x9CCE, 0xC473}, //4936 #HANGUL SYLLABLE SSANGSIOS U RIEULHIEUH + {0x9CCF, 0xC476}, //4937 #HANGUL SYLLABLE SSANGSIOS U PIEUPSIOS + {0x9CD0, 0xC477}, //4938 #HANGUL SYLLABLE SSANGSIOS U SIOS + {0x9CD1, 0xC478}, //4939 #HANGUL SYLLABLE SSANGSIOS U SSANGSIOS + {0x9CD2, 0xC47A}, //4940 #HANGUL SYLLABLE SSANGSIOS U CIEUC + {0x9CD3, 0xC47B}, //4941 #HANGUL SYLLABLE SSANGSIOS U CHIEUCH + {0x9CD4, 0xC47C}, //4942 #HANGUL SYLLABLE SSANGSIOS U KHIEUKH + {0x9CD5, 0xC47D}, //4943 #HANGUL SYLLABLE SSANGSIOS U THIEUTH + {0x9CD6, 0xC47E}, //4944 #HANGUL SYLLABLE SSANGSIOS U PHIEUPH + {0x9CD7, 0xC47F}, //4945 #HANGUL SYLLABLE SSANGSIOS U HIEUH + {0x9CD8, 0xC481}, //4946 #HANGUL SYLLABLE SSANGSIOS WEO KIYEOK + {0x9CD9, 0xC482}, //4947 #HANGUL SYLLABLE SSANGSIOS WEO SSANGKIYEOK + {0x9CDA, 0xC483}, //4948 #HANGUL SYLLABLE SSANGSIOS WEO KIYEOKSIOS + {0x9CDB, 0xC484}, //4949 #HANGUL SYLLABLE SSANGSIOS WEO NIEUN + {0x9CDC, 0xC485}, //4950 #HANGUL SYLLABLE SSANGSIOS WEO NIEUNCIEUC + {0x9CDD, 0xC486}, //4951 #HANGUL SYLLABLE SSANGSIOS WEO NIEUNHIEUH + {0x9CDE, 0xC487}, //4952 #HANGUL SYLLABLE SSANGSIOS WEO TIKEUT + {0x9CDF, 0xC488}, //4953 #HANGUL SYLLABLE SSANGSIOS WEO RIEUL + {0x9CE0, 0xC489}, //4954 #HANGUL SYLLABLE SSANGSIOS WEO RIEULKIYEOK + {0x9CE1, 0xC48A}, //4955 #HANGUL SYLLABLE SSANGSIOS WEO RIEULMIEUM + {0x9CE2, 0xC48B}, //4956 #HANGUL SYLLABLE SSANGSIOS WEO RIEULPIEUP + {0x9CE3, 0xC48C}, //4957 #HANGUL SYLLABLE SSANGSIOS WEO RIEULSIOS + {0x9CE4, 0xC48D}, //4958 #HANGUL SYLLABLE SSANGSIOS WEO RIEULTHIEUTH + {0x9CE5, 0xC48E}, //4959 #HANGUL SYLLABLE SSANGSIOS WEO RIEULPHIEUPH + {0x9CE6, 0xC48F}, //4960 #HANGUL SYLLABLE SSANGSIOS WEO RIEULHIEUH + {0x9CE7, 0xC490}, //4961 #HANGUL SYLLABLE SSANGSIOS WEO MIEUM + {0x9CE8, 0xC491}, //4962 #HANGUL SYLLABLE SSANGSIOS WEO PIEUP + {0x9CE9, 0xC492}, //4963 #HANGUL SYLLABLE SSANGSIOS WEO PIEUPSIOS + {0x9CEA, 0xC493}, //4964 #HANGUL SYLLABLE SSANGSIOS WEO SIOS + {0x9CEB, 0xC495}, //4965 #HANGUL SYLLABLE SSANGSIOS WEO IEUNG + {0x9CEC, 0xC496}, //4966 #HANGUL SYLLABLE SSANGSIOS WEO CIEUC + {0x9CED, 0xC497}, //4967 #HANGUL SYLLABLE SSANGSIOS WEO CHIEUCH + {0x9CEE, 0xC498}, //4968 #HANGUL SYLLABLE SSANGSIOS WEO KHIEUKH + {0x9CEF, 0xC499}, //4969 #HANGUL SYLLABLE SSANGSIOS WEO THIEUTH + {0x9CF0, 0xC49A}, //4970 #HANGUL SYLLABLE SSANGSIOS WEO PHIEUPH + {0x9CF1, 0xC49B}, //4971 #HANGUL SYLLABLE SSANGSIOS WEO HIEUH + {0x9CF2, 0xC49D}, //4972 #HANGUL SYLLABLE SSANGSIOS WE KIYEOK + {0x9CF3, 0xC49E}, //4973 #HANGUL SYLLABLE SSANGSIOS WE SSANGKIYEOK + {0x9CF4, 0xC49F}, //4974 #HANGUL SYLLABLE SSANGSIOS WE KIYEOKSIOS + {0x9CF5, 0xC4A0}, //4975 #HANGUL SYLLABLE SSANGSIOS WE NIEUN + {0x9CF6, 0xC4A1}, //4976 #HANGUL SYLLABLE SSANGSIOS WE NIEUNCIEUC + {0x9CF7, 0xC4A2}, //4977 #HANGUL SYLLABLE SSANGSIOS WE NIEUNHIEUH + {0x9CF8, 0xC4A3}, //4978 #HANGUL SYLLABLE SSANGSIOS WE TIKEUT + {0x9CF9, 0xC4A4}, //4979 #HANGUL SYLLABLE SSANGSIOS WE RIEUL + {0x9CFA, 0xC4A5}, //4980 #HANGUL SYLLABLE SSANGSIOS WE RIEULKIYEOK + {0x9CFB, 0xC4A6}, //4981 #HANGUL SYLLABLE SSANGSIOS WE RIEULMIEUM + {0x9CFC, 0xC4A7}, //4982 #HANGUL SYLLABLE SSANGSIOS WE RIEULPIEUP + {0x9CFD, 0xC4A8}, //4983 #HANGUL SYLLABLE SSANGSIOS WE RIEULSIOS + {0x9CFE, 0xC4A9}, //4984 #HANGUL SYLLABLE SSANGSIOS WE RIEULTHIEUTH + {0x9D41, 0xC4AA}, //4985 #HANGUL SYLLABLE SSANGSIOS WE RIEULPHIEUPH + {0x9D42, 0xC4AB}, //4986 #HANGUL SYLLABLE SSANGSIOS WE RIEULHIEUH + {0x9D43, 0xC4AC}, //4987 #HANGUL SYLLABLE SSANGSIOS WE MIEUM + {0x9D44, 0xC4AD}, //4988 #HANGUL SYLLABLE SSANGSIOS WE PIEUP + {0x9D45, 0xC4AE}, //4989 #HANGUL SYLLABLE SSANGSIOS WE PIEUPSIOS + {0x9D46, 0xC4AF}, //4990 #HANGUL SYLLABLE SSANGSIOS WE SIOS + {0x9D47, 0xC4B0}, //4991 #HANGUL SYLLABLE SSANGSIOS WE SSANGSIOS + {0x9D48, 0xC4B1}, //4992 #HANGUL SYLLABLE SSANGSIOS WE IEUNG + {0x9D49, 0xC4B2}, //4993 #HANGUL SYLLABLE SSANGSIOS WE CIEUC + {0x9D4A, 0xC4B3}, //4994 #HANGUL SYLLABLE SSANGSIOS WE CHIEUCH + {0x9D4B, 0xC4B4}, //4995 #HANGUL SYLLABLE SSANGSIOS WE KHIEUKH + {0x9D4C, 0xC4B5}, //4996 #HANGUL SYLLABLE SSANGSIOS WE THIEUTH + {0x9D4D, 0xC4B6}, //4997 #HANGUL SYLLABLE SSANGSIOS WE PHIEUPH + {0x9D4E, 0xC4B7}, //4998 #HANGUL SYLLABLE SSANGSIOS WE HIEUH + {0x9D4F, 0xC4B9}, //4999 #HANGUL SYLLABLE SSANGSIOS WI KIYEOK + {0x9D50, 0xC4BA}, //5000 #HANGUL SYLLABLE SSANGSIOS WI SSANGKIYEOK + {0x9D51, 0xC4BB}, //5001 #HANGUL SYLLABLE SSANGSIOS WI KIYEOKSIOS + {0x9D52, 0xC4BD}, //5002 #HANGUL SYLLABLE SSANGSIOS WI NIEUNCIEUC + {0x9D53, 0xC4BE}, //5003 #HANGUL SYLLABLE SSANGSIOS WI NIEUNHIEUH + {0x9D54, 0xC4BF}, //5004 #HANGUL SYLLABLE SSANGSIOS WI TIKEUT + {0x9D55, 0xC4C0}, //5005 #HANGUL SYLLABLE SSANGSIOS WI RIEUL + {0x9D56, 0xC4C1}, //5006 #HANGUL SYLLABLE SSANGSIOS WI RIEULKIYEOK + {0x9D57, 0xC4C2}, //5007 #HANGUL SYLLABLE SSANGSIOS WI RIEULMIEUM + {0x9D58, 0xC4C3}, //5008 #HANGUL SYLLABLE SSANGSIOS WI RIEULPIEUP + {0x9D59, 0xC4C4}, //5009 #HANGUL SYLLABLE SSANGSIOS WI RIEULSIOS + {0x9D5A, 0xC4C5}, //5010 #HANGUL SYLLABLE SSANGSIOS WI RIEULTHIEUTH + {0x9D61, 0xC4C6}, //5011 #HANGUL SYLLABLE SSANGSIOS WI RIEULPHIEUPH + {0x9D62, 0xC4C7}, //5012 #HANGUL SYLLABLE SSANGSIOS WI RIEULHIEUH + {0x9D63, 0xC4C8}, //5013 #HANGUL SYLLABLE SSANGSIOS WI MIEUM + {0x9D64, 0xC4C9}, //5014 #HANGUL SYLLABLE SSANGSIOS WI PIEUP + {0x9D65, 0xC4CA}, //5015 #HANGUL SYLLABLE SSANGSIOS WI PIEUPSIOS + {0x9D66, 0xC4CB}, //5016 #HANGUL SYLLABLE SSANGSIOS WI SIOS + {0x9D67, 0xC4CC}, //5017 #HANGUL SYLLABLE SSANGSIOS WI SSANGSIOS + {0x9D68, 0xC4CD}, //5018 #HANGUL SYLLABLE SSANGSIOS WI IEUNG + {0x9D69, 0xC4CE}, //5019 #HANGUL SYLLABLE SSANGSIOS WI CIEUC + {0x9D6A, 0xC4CF}, //5020 #HANGUL SYLLABLE SSANGSIOS WI CHIEUCH + {0x9D6B, 0xC4D0}, //5021 #HANGUL SYLLABLE SSANGSIOS WI KHIEUKH + {0x9D6C, 0xC4D1}, //5022 #HANGUL SYLLABLE SSANGSIOS WI THIEUTH + {0x9D6D, 0xC4D2}, //5023 #HANGUL SYLLABLE SSANGSIOS WI PHIEUPH + {0x9D6E, 0xC4D3}, //5024 #HANGUL SYLLABLE SSANGSIOS WI HIEUH + {0x9D6F, 0xC4D4}, //5025 #HANGUL SYLLABLE SSANGSIOS YU + {0x9D70, 0xC4D5}, //5026 #HANGUL SYLLABLE SSANGSIOS YU KIYEOK + {0x9D71, 0xC4D6}, //5027 #HANGUL SYLLABLE SSANGSIOS YU SSANGKIYEOK + {0x9D72, 0xC4D7}, //5028 #HANGUL SYLLABLE SSANGSIOS YU KIYEOKSIOS + {0x9D73, 0xC4D8}, //5029 #HANGUL SYLLABLE SSANGSIOS YU NIEUN + {0x9D74, 0xC4D9}, //5030 #HANGUL SYLLABLE SSANGSIOS YU NIEUNCIEUC + {0x9D75, 0xC4DA}, //5031 #HANGUL SYLLABLE SSANGSIOS YU NIEUNHIEUH + {0x9D76, 0xC4DB}, //5032 #HANGUL SYLLABLE SSANGSIOS YU TIKEUT + {0x9D77, 0xC4DC}, //5033 #HANGUL SYLLABLE SSANGSIOS YU RIEUL + {0x9D78, 0xC4DD}, //5034 #HANGUL SYLLABLE SSANGSIOS YU RIEULKIYEOK + {0x9D79, 0xC4DE}, //5035 #HANGUL SYLLABLE SSANGSIOS YU RIEULMIEUM + {0x9D7A, 0xC4DF}, //5036 #HANGUL SYLLABLE SSANGSIOS YU RIEULPIEUP + {0x9D81, 0xC4E0}, //5037 #HANGUL SYLLABLE SSANGSIOS YU RIEULSIOS + {0x9D82, 0xC4E1}, //5038 #HANGUL SYLLABLE SSANGSIOS YU RIEULTHIEUTH + {0x9D83, 0xC4E2}, //5039 #HANGUL SYLLABLE SSANGSIOS YU RIEULPHIEUPH + {0x9D84, 0xC4E3}, //5040 #HANGUL SYLLABLE SSANGSIOS YU RIEULHIEUH + {0x9D85, 0xC4E4}, //5041 #HANGUL SYLLABLE SSANGSIOS YU MIEUM + {0x9D86, 0xC4E5}, //5042 #HANGUL SYLLABLE SSANGSIOS YU PIEUP + {0x9D87, 0xC4E6}, //5043 #HANGUL SYLLABLE SSANGSIOS YU PIEUPSIOS + {0x9D88, 0xC4E7}, //5044 #HANGUL SYLLABLE SSANGSIOS YU SIOS + {0x9D89, 0xC4E8}, //5045 #HANGUL SYLLABLE SSANGSIOS YU SSANGSIOS + {0x9D8A, 0xC4EA}, //5046 #HANGUL SYLLABLE SSANGSIOS YU CIEUC + {0x9D8B, 0xC4EB}, //5047 #HANGUL SYLLABLE SSANGSIOS YU CHIEUCH + {0x9D8C, 0xC4EC}, //5048 #HANGUL SYLLABLE SSANGSIOS YU KHIEUKH + {0x9D8D, 0xC4ED}, //5049 #HANGUL SYLLABLE SSANGSIOS YU THIEUTH + {0x9D8E, 0xC4EE}, //5050 #HANGUL SYLLABLE SSANGSIOS YU PHIEUPH + {0x9D8F, 0xC4EF}, //5051 #HANGUL SYLLABLE SSANGSIOS YU HIEUH + {0x9D90, 0xC4F2}, //5052 #HANGUL SYLLABLE SSANGSIOS EU SSANGKIYEOK + {0x9D91, 0xC4F3}, //5053 #HANGUL SYLLABLE SSANGSIOS EU KIYEOKSIOS + {0x9D92, 0xC4F5}, //5054 #HANGUL SYLLABLE SSANGSIOS EU NIEUNCIEUC + {0x9D93, 0xC4F6}, //5055 #HANGUL SYLLABLE SSANGSIOS EU NIEUNHIEUH + {0x9D94, 0xC4F7}, //5056 #HANGUL SYLLABLE SSANGSIOS EU TIKEUT + {0x9D95, 0xC4F9}, //5057 #HANGUL SYLLABLE SSANGSIOS EU RIEULKIYEOK + {0x9D96, 0xC4FB}, //5058 #HANGUL SYLLABLE SSANGSIOS EU RIEULPIEUP + {0x9D97, 0xC4FC}, //5059 #HANGUL SYLLABLE SSANGSIOS EU RIEULSIOS + {0x9D98, 0xC4FD}, //5060 #HANGUL SYLLABLE SSANGSIOS EU RIEULTHIEUTH + {0x9D99, 0xC4FE}, //5061 #HANGUL SYLLABLE SSANGSIOS EU RIEULPHIEUPH + {0x9D9A, 0xC502}, //5062 #HANGUL SYLLABLE SSANGSIOS EU PIEUPSIOS + {0x9D9B, 0xC503}, //5063 #HANGUL SYLLABLE SSANGSIOS EU SIOS + {0x9D9C, 0xC504}, //5064 #HANGUL SYLLABLE SSANGSIOS EU SSANGSIOS + {0x9D9D, 0xC505}, //5065 #HANGUL SYLLABLE SSANGSIOS EU IEUNG + {0x9D9E, 0xC506}, //5066 #HANGUL SYLLABLE SSANGSIOS EU CIEUC + {0x9D9F, 0xC507}, //5067 #HANGUL SYLLABLE SSANGSIOS EU CHIEUCH + {0x9DA0, 0xC508}, //5068 #HANGUL SYLLABLE SSANGSIOS EU KHIEUKH + {0x9DA1, 0xC509}, //5069 #HANGUL SYLLABLE SSANGSIOS EU THIEUTH + {0x9DA2, 0xC50A}, //5070 #HANGUL SYLLABLE SSANGSIOS EU PHIEUPH + {0x9DA3, 0xC50B}, //5071 #HANGUL SYLLABLE SSANGSIOS EU HIEUH + {0x9DA4, 0xC50D}, //5072 #HANGUL SYLLABLE SSANGSIOS YI KIYEOK + {0x9DA5, 0xC50E}, //5073 #HANGUL SYLLABLE SSANGSIOS YI SSANGKIYEOK + {0x9DA6, 0xC50F}, //5074 #HANGUL SYLLABLE SSANGSIOS YI KIYEOKSIOS + {0x9DA7, 0xC511}, //5075 #HANGUL SYLLABLE SSANGSIOS YI NIEUNCIEUC + {0x9DA8, 0xC512}, //5076 #HANGUL SYLLABLE SSANGSIOS YI NIEUNHIEUH + {0x9DA9, 0xC513}, //5077 #HANGUL SYLLABLE SSANGSIOS YI TIKEUT + {0x9DAA, 0xC515}, //5078 #HANGUL SYLLABLE SSANGSIOS YI RIEULKIYEOK + {0x9DAB, 0xC516}, //5079 #HANGUL SYLLABLE SSANGSIOS YI RIEULMIEUM + {0x9DAC, 0xC517}, //5080 #HANGUL SYLLABLE SSANGSIOS YI RIEULPIEUP + {0x9DAD, 0xC518}, //5081 #HANGUL SYLLABLE SSANGSIOS YI RIEULSIOS + {0x9DAE, 0xC519}, //5082 #HANGUL SYLLABLE SSANGSIOS YI RIEULTHIEUTH + {0x9DAF, 0xC51A}, //5083 #HANGUL SYLLABLE SSANGSIOS YI RIEULPHIEUPH + {0x9DB0, 0xC51B}, //5084 #HANGUL SYLLABLE SSANGSIOS YI RIEULHIEUH + {0x9DB1, 0xC51D}, //5085 #HANGUL SYLLABLE SSANGSIOS YI PIEUP + {0x9DB2, 0xC51E}, //5086 #HANGUL SYLLABLE SSANGSIOS YI PIEUPSIOS + {0x9DB3, 0xC51F}, //5087 #HANGUL SYLLABLE SSANGSIOS YI SIOS + {0x9DB4, 0xC520}, //5088 #HANGUL SYLLABLE SSANGSIOS YI SSANGSIOS + {0x9DB5, 0xC521}, //5089 #HANGUL SYLLABLE SSANGSIOS YI IEUNG + {0x9DB6, 0xC522}, //5090 #HANGUL SYLLABLE SSANGSIOS YI CIEUC + {0x9DB7, 0xC523}, //5091 #HANGUL SYLLABLE SSANGSIOS YI CHIEUCH + {0x9DB8, 0xC524}, //5092 #HANGUL SYLLABLE SSANGSIOS YI KHIEUKH + {0x9DB9, 0xC525}, //5093 #HANGUL SYLLABLE SSANGSIOS YI THIEUTH + {0x9DBA, 0xC526}, //5094 #HANGUL SYLLABLE SSANGSIOS YI PHIEUPH + {0x9DBB, 0xC527}, //5095 #HANGUL SYLLABLE SSANGSIOS YI HIEUH + {0x9DBC, 0xC52A}, //5096 #HANGUL SYLLABLE SSANGSIOS I SSANGKIYEOK + {0x9DBD, 0xC52B}, //5097 #HANGUL SYLLABLE SSANGSIOS I KIYEOKSIOS + {0x9DBE, 0xC52D}, //5098 #HANGUL SYLLABLE SSANGSIOS I NIEUNCIEUC + {0x9DBF, 0xC52E}, //5099 #HANGUL SYLLABLE SSANGSIOS I NIEUNHIEUH + {0x9DC0, 0xC52F}, //5100 #HANGUL SYLLABLE SSANGSIOS I TIKEUT + {0x9DC1, 0xC531}, //5101 #HANGUL SYLLABLE SSANGSIOS I RIEULKIYEOK + {0x9DC2, 0xC532}, //5102 #HANGUL SYLLABLE SSANGSIOS I RIEULMIEUM + {0x9DC3, 0xC533}, //5103 #HANGUL SYLLABLE SSANGSIOS I RIEULPIEUP + {0x9DC4, 0xC534}, //5104 #HANGUL SYLLABLE SSANGSIOS I RIEULSIOS + {0x9DC5, 0xC535}, //5105 #HANGUL SYLLABLE SSANGSIOS I RIEULTHIEUTH + {0x9DC6, 0xC536}, //5106 #HANGUL SYLLABLE SSANGSIOS I RIEULPHIEUPH + {0x9DC7, 0xC537}, //5107 #HANGUL SYLLABLE SSANGSIOS I RIEULHIEUH + {0x9DC8, 0xC53A}, //5108 #HANGUL SYLLABLE SSANGSIOS I PIEUPSIOS + {0x9DC9, 0xC53C}, //5109 #HANGUL SYLLABLE SSANGSIOS I SSANGSIOS + {0x9DCA, 0xC53E}, //5110 #HANGUL SYLLABLE SSANGSIOS I CIEUC + {0x9DCB, 0xC53F}, //5111 #HANGUL SYLLABLE SSANGSIOS I CHIEUCH + {0x9DCC, 0xC540}, //5112 #HANGUL SYLLABLE SSANGSIOS I KHIEUKH + {0x9DCD, 0xC541}, //5113 #HANGUL SYLLABLE SSANGSIOS I THIEUTH + {0x9DCE, 0xC542}, //5114 #HANGUL SYLLABLE SSANGSIOS I PHIEUPH + {0x9DCF, 0xC543}, //5115 #HANGUL SYLLABLE SSANGSIOS I HIEUH + {0x9DD0, 0xC546}, //5116 #HANGUL SYLLABLE IEUNG A SSANGKIYEOK + {0x9DD1, 0xC547}, //5117 #HANGUL SYLLABLE IEUNG A KIYEOKSIOS + {0x9DD2, 0xC54B}, //5118 #HANGUL SYLLABLE IEUNG A TIKEUT + {0x9DD3, 0xC54F}, //5119 #HANGUL SYLLABLE IEUNG A RIEULPIEUP + {0x9DD4, 0xC550}, //5120 #HANGUL SYLLABLE IEUNG A RIEULSIOS + {0x9DD5, 0xC551}, //5121 #HANGUL SYLLABLE IEUNG A RIEULTHIEUTH + {0x9DD6, 0xC552}, //5122 #HANGUL SYLLABLE IEUNG A RIEULPHIEUPH + {0x9DD7, 0xC556}, //5123 #HANGUL SYLLABLE IEUNG A PIEUPSIOS + {0x9DD8, 0xC55A}, //5124 #HANGUL SYLLABLE IEUNG A CIEUC + {0x9DD9, 0xC55B}, //5125 #HANGUL SYLLABLE IEUNG A CHIEUCH + {0x9DDA, 0xC55C}, //5126 #HANGUL SYLLABLE IEUNG A KHIEUKH + {0x9DDB, 0xC55F}, //5127 #HANGUL SYLLABLE IEUNG A HIEUH + {0x9DDC, 0xC562}, //5128 #HANGUL SYLLABLE IEUNG AE SSANGKIYEOK + {0x9DDD, 0xC563}, //5129 #HANGUL SYLLABLE IEUNG AE KIYEOKSIOS + {0x9DDE, 0xC565}, //5130 #HANGUL SYLLABLE IEUNG AE NIEUNCIEUC + {0x9DDF, 0xC566}, //5131 #HANGUL SYLLABLE IEUNG AE NIEUNHIEUH + {0x9DE0, 0xC567}, //5132 #HANGUL SYLLABLE IEUNG AE TIKEUT + {0x9DE1, 0xC569}, //5133 #HANGUL SYLLABLE IEUNG AE RIEULKIYEOK + {0x9DE2, 0xC56A}, //5134 #HANGUL SYLLABLE IEUNG AE RIEULMIEUM + {0x9DE3, 0xC56B}, //5135 #HANGUL SYLLABLE IEUNG AE RIEULPIEUP + {0x9DE4, 0xC56C}, //5136 #HANGUL SYLLABLE IEUNG AE RIEULSIOS + {0x9DE5, 0xC56D}, //5137 #HANGUL SYLLABLE IEUNG AE RIEULTHIEUTH + {0x9DE6, 0xC56E}, //5138 #HANGUL SYLLABLE IEUNG AE RIEULPHIEUPH + {0x9DE7, 0xC56F}, //5139 #HANGUL SYLLABLE IEUNG AE RIEULHIEUH + {0x9DE8, 0xC572}, //5140 #HANGUL SYLLABLE IEUNG AE PIEUPSIOS + {0x9DE9, 0xC576}, //5141 #HANGUL SYLLABLE IEUNG AE CIEUC + {0x9DEA, 0xC577}, //5142 #HANGUL SYLLABLE IEUNG AE CHIEUCH + {0x9DEB, 0xC578}, //5143 #HANGUL SYLLABLE IEUNG AE KHIEUKH + {0x9DEC, 0xC579}, //5144 #HANGUL SYLLABLE IEUNG AE THIEUTH + {0x9DED, 0xC57A}, //5145 #HANGUL SYLLABLE IEUNG AE PHIEUPH + {0x9DEE, 0xC57B}, //5146 #HANGUL SYLLABLE IEUNG AE HIEUH + {0x9DEF, 0xC57E}, //5147 #HANGUL SYLLABLE IEUNG YA SSANGKIYEOK + {0x9DF0, 0xC57F}, //5148 #HANGUL SYLLABLE IEUNG YA KIYEOKSIOS + {0x9DF1, 0xC581}, //5149 #HANGUL SYLLABLE IEUNG YA NIEUNCIEUC + {0x9DF2, 0xC582}, //5150 #HANGUL SYLLABLE IEUNG YA NIEUNHIEUH + {0x9DF3, 0xC583}, //5151 #HANGUL SYLLABLE IEUNG YA TIKEUT + {0x9DF4, 0xC585}, //5152 #HANGUL SYLLABLE IEUNG YA RIEULKIYEOK + {0x9DF5, 0xC586}, //5153 #HANGUL SYLLABLE IEUNG YA RIEULMIEUM + {0x9DF6, 0xC588}, //5154 #HANGUL SYLLABLE IEUNG YA RIEULSIOS + {0x9DF7, 0xC589}, //5155 #HANGUL SYLLABLE IEUNG YA RIEULTHIEUTH + {0x9DF8, 0xC58A}, //5156 #HANGUL SYLLABLE IEUNG YA RIEULPHIEUPH + {0x9DF9, 0xC58B}, //5157 #HANGUL SYLLABLE IEUNG YA RIEULHIEUH + {0x9DFA, 0xC58E}, //5158 #HANGUL SYLLABLE IEUNG YA PIEUPSIOS + {0x9DFB, 0xC590}, //5159 #HANGUL SYLLABLE IEUNG YA SSANGSIOS + {0x9DFC, 0xC592}, //5160 #HANGUL SYLLABLE IEUNG YA CIEUC + {0x9DFD, 0xC593}, //5161 #HANGUL SYLLABLE IEUNG YA CHIEUCH + {0x9DFE, 0xC594}, //5162 #HANGUL SYLLABLE IEUNG YA KHIEUKH + {0x9E41, 0xC596}, //5163 #HANGUL SYLLABLE IEUNG YA PHIEUPH + {0x9E42, 0xC599}, //5164 #HANGUL SYLLABLE IEUNG YAE KIYEOK + {0x9E43, 0xC59A}, //5165 #HANGUL SYLLABLE IEUNG YAE SSANGKIYEOK + {0x9E44, 0xC59B}, //5166 #HANGUL SYLLABLE IEUNG YAE KIYEOKSIOS + {0x9E45, 0xC59D}, //5167 #HANGUL SYLLABLE IEUNG YAE NIEUNCIEUC + {0x9E46, 0xC59E}, //5168 #HANGUL SYLLABLE IEUNG YAE NIEUNHIEUH + {0x9E47, 0xC59F}, //5169 #HANGUL SYLLABLE IEUNG YAE TIKEUT + {0x9E48, 0xC5A1}, //5170 #HANGUL SYLLABLE IEUNG YAE RIEULKIYEOK + {0x9E49, 0xC5A2}, //5171 #HANGUL SYLLABLE IEUNG YAE RIEULMIEUM + {0x9E4A, 0xC5A3}, //5172 #HANGUL SYLLABLE IEUNG YAE RIEULPIEUP + {0x9E4B, 0xC5A4}, //5173 #HANGUL SYLLABLE IEUNG YAE RIEULSIOS + {0x9E4C, 0xC5A5}, //5174 #HANGUL SYLLABLE IEUNG YAE RIEULTHIEUTH + {0x9E4D, 0xC5A6}, //5175 #HANGUL SYLLABLE IEUNG YAE RIEULPHIEUPH + {0x9E4E, 0xC5A7}, //5176 #HANGUL SYLLABLE IEUNG YAE RIEULHIEUH + {0x9E4F, 0xC5A8}, //5177 #HANGUL SYLLABLE IEUNG YAE MIEUM + {0x9E50, 0xC5AA}, //5178 #HANGUL SYLLABLE IEUNG YAE PIEUPSIOS + {0x9E51, 0xC5AB}, //5179 #HANGUL SYLLABLE IEUNG YAE SIOS + {0x9E52, 0xC5AC}, //5180 #HANGUL SYLLABLE IEUNG YAE SSANGSIOS + {0x9E53, 0xC5AD}, //5181 #HANGUL SYLLABLE IEUNG YAE IEUNG + {0x9E54, 0xC5AE}, //5182 #HANGUL SYLLABLE IEUNG YAE CIEUC + {0x9E55, 0xC5AF}, //5183 #HANGUL SYLLABLE IEUNG YAE CHIEUCH + {0x9E56, 0xC5B0}, //5184 #HANGUL SYLLABLE IEUNG YAE KHIEUKH + {0x9E57, 0xC5B1}, //5185 #HANGUL SYLLABLE IEUNG YAE THIEUTH + {0x9E58, 0xC5B2}, //5186 #HANGUL SYLLABLE IEUNG YAE PHIEUPH + {0x9E59, 0xC5B3}, //5187 #HANGUL SYLLABLE IEUNG YAE HIEUH + {0x9E5A, 0xC5B6}, //5188 #HANGUL SYLLABLE IEUNG EO SSANGKIYEOK + {0x9E61, 0xC5B7}, //5189 #HANGUL SYLLABLE IEUNG EO KIYEOKSIOS + {0x9E62, 0xC5BA}, //5190 #HANGUL SYLLABLE IEUNG EO NIEUNHIEUH + {0x9E63, 0xC5BF}, //5191 #HANGUL SYLLABLE IEUNG EO RIEULPIEUP + {0x9E64, 0xC5C0}, //5192 #HANGUL SYLLABLE IEUNG EO RIEULSIOS + {0x9E65, 0xC5C1}, //5193 #HANGUL SYLLABLE IEUNG EO RIEULTHIEUTH + {0x9E66, 0xC5C2}, //5194 #HANGUL SYLLABLE IEUNG EO RIEULPHIEUPH + {0x9E67, 0xC5C3}, //5195 #HANGUL SYLLABLE IEUNG EO RIEULHIEUH + {0x9E68, 0xC5CB}, //5196 #HANGUL SYLLABLE IEUNG EO CHIEUCH + {0x9E69, 0xC5CD}, //5197 #HANGUL SYLLABLE IEUNG EO THIEUTH + {0x9E6A, 0xC5CF}, //5198 #HANGUL SYLLABLE IEUNG EO HIEUH + {0x9E6B, 0xC5D2}, //5199 #HANGUL SYLLABLE IEUNG E SSANGKIYEOK + {0x9E6C, 0xC5D3}, //5200 #HANGUL SYLLABLE IEUNG E KIYEOKSIOS + {0x9E6D, 0xC5D5}, //5201 #HANGUL SYLLABLE IEUNG E NIEUNCIEUC + {0x9E6E, 0xC5D6}, //5202 #HANGUL SYLLABLE IEUNG E NIEUNHIEUH + {0x9E6F, 0xC5D7}, //5203 #HANGUL SYLLABLE IEUNG E TIKEUT + {0x9E70, 0xC5D9}, //5204 #HANGUL SYLLABLE IEUNG E RIEULKIYEOK + {0x9E71, 0xC5DA}, //5205 #HANGUL SYLLABLE IEUNG E RIEULMIEUM + {0x9E72, 0xC5DB}, //5206 #HANGUL SYLLABLE IEUNG E RIEULPIEUP + {0x9E73, 0xC5DC}, //5207 #HANGUL SYLLABLE IEUNG E RIEULSIOS + {0x9E74, 0xC5DD}, //5208 #HANGUL SYLLABLE IEUNG E RIEULTHIEUTH + {0x9E75, 0xC5DE}, //5209 #HANGUL SYLLABLE IEUNG E RIEULPHIEUPH + {0x9E76, 0xC5DF}, //5210 #HANGUL SYLLABLE IEUNG E RIEULHIEUH + {0x9E77, 0xC5E2}, //5211 #HANGUL SYLLABLE IEUNG E PIEUPSIOS + {0x9E78, 0xC5E4}, //5212 #HANGUL SYLLABLE IEUNG E SSANGSIOS + {0x9E79, 0xC5E6}, //5213 #HANGUL SYLLABLE IEUNG E CIEUC + {0x9E7A, 0xC5E7}, //5214 #HANGUL SYLLABLE IEUNG E CHIEUCH + {0x9E81, 0xC5E8}, //5215 #HANGUL SYLLABLE IEUNG E KHIEUKH + {0x9E82, 0xC5E9}, //5216 #HANGUL SYLLABLE IEUNG E THIEUTH + {0x9E83, 0xC5EA}, //5217 #HANGUL SYLLABLE IEUNG E PHIEUPH + {0x9E84, 0xC5EB}, //5218 #HANGUL SYLLABLE IEUNG E HIEUH + {0x9E85, 0xC5EF}, //5219 #HANGUL SYLLABLE IEUNG YEO KIYEOKSIOS + {0x9E86, 0xC5F1}, //5220 #HANGUL SYLLABLE IEUNG YEO NIEUNCIEUC + {0x9E87, 0xC5F2}, //5221 #HANGUL SYLLABLE IEUNG YEO NIEUNHIEUH + {0x9E88, 0xC5F3}, //5222 #HANGUL SYLLABLE IEUNG YEO TIKEUT + {0x9E89, 0xC5F5}, //5223 #HANGUL SYLLABLE IEUNG YEO RIEULKIYEOK + {0x9E8A, 0xC5F8}, //5224 #HANGUL SYLLABLE IEUNG YEO RIEULSIOS + {0x9E8B, 0xC5F9}, //5225 #HANGUL SYLLABLE IEUNG YEO RIEULTHIEUTH + {0x9E8C, 0xC5FA}, //5226 #HANGUL SYLLABLE IEUNG YEO RIEULPHIEUPH + {0x9E8D, 0xC5FB}, //5227 #HANGUL SYLLABLE IEUNG YEO RIEULHIEUH + {0x9E8E, 0xC602}, //5228 #HANGUL SYLLABLE IEUNG YEO CIEUC + {0x9E8F, 0xC603}, //5229 #HANGUL SYLLABLE IEUNG YEO CHIEUCH + {0x9E90, 0xC604}, //5230 #HANGUL SYLLABLE IEUNG YEO KHIEUKH + {0x9E91, 0xC609}, //5231 #HANGUL SYLLABLE IEUNG YE KIYEOK + {0x9E92, 0xC60A}, //5232 #HANGUL SYLLABLE IEUNG YE SSANGKIYEOK + {0x9E93, 0xC60B}, //5233 #HANGUL SYLLABLE IEUNG YE KIYEOKSIOS + {0x9E94, 0xC60D}, //5234 #HANGUL SYLLABLE IEUNG YE NIEUNCIEUC + {0x9E95, 0xC60E}, //5235 #HANGUL SYLLABLE IEUNG YE NIEUNHIEUH + {0x9E96, 0xC60F}, //5236 #HANGUL SYLLABLE IEUNG YE TIKEUT + {0x9E97, 0xC611}, //5237 #HANGUL SYLLABLE IEUNG YE RIEULKIYEOK + {0x9E98, 0xC612}, //5238 #HANGUL SYLLABLE IEUNG YE RIEULMIEUM + {0x9E99, 0xC613}, //5239 #HANGUL SYLLABLE IEUNG YE RIEULPIEUP + {0x9E9A, 0xC614}, //5240 #HANGUL SYLLABLE IEUNG YE RIEULSIOS + {0x9E9B, 0xC615}, //5241 #HANGUL SYLLABLE IEUNG YE RIEULTHIEUTH + {0x9E9C, 0xC616}, //5242 #HANGUL SYLLABLE IEUNG YE RIEULPHIEUPH + {0x9E9D, 0xC617}, //5243 #HANGUL SYLLABLE IEUNG YE RIEULHIEUH + {0x9E9E, 0xC61A}, //5244 #HANGUL SYLLABLE IEUNG YE PIEUPSIOS + {0x9E9F, 0xC61D}, //5245 #HANGUL SYLLABLE IEUNG YE IEUNG + {0x9EA0, 0xC61E}, //5246 #HANGUL SYLLABLE IEUNG YE CIEUC + {0x9EA1, 0xC61F}, //5247 #HANGUL SYLLABLE IEUNG YE CHIEUCH + {0x9EA2, 0xC620}, //5248 #HANGUL SYLLABLE IEUNG YE KHIEUKH + {0x9EA3, 0xC621}, //5249 #HANGUL SYLLABLE IEUNG YE THIEUTH + {0x9EA4, 0xC622}, //5250 #HANGUL SYLLABLE IEUNG YE PHIEUPH + {0x9EA5, 0xC623}, //5251 #HANGUL SYLLABLE IEUNG YE HIEUH + {0x9EA6, 0xC626}, //5252 #HANGUL SYLLABLE IEUNG O SSANGKIYEOK + {0x9EA7, 0xC627}, //5253 #HANGUL SYLLABLE IEUNG O KIYEOKSIOS + {0x9EA8, 0xC629}, //5254 #HANGUL SYLLABLE IEUNG O NIEUNCIEUC + {0x9EA9, 0xC62A}, //5255 #HANGUL SYLLABLE IEUNG O NIEUNHIEUH + {0x9EAA, 0xC62B}, //5256 #HANGUL SYLLABLE IEUNG O TIKEUT + {0x9EAB, 0xC62F}, //5257 #HANGUL SYLLABLE IEUNG O RIEULPIEUP + {0x9EAC, 0xC631}, //5258 #HANGUL SYLLABLE IEUNG O RIEULTHIEUTH + {0x9EAD, 0xC632}, //5259 #HANGUL SYLLABLE IEUNG O RIEULPHIEUPH + {0x9EAE, 0xC636}, //5260 #HANGUL SYLLABLE IEUNG O PIEUPSIOS + {0x9EAF, 0xC638}, //5261 #HANGUL SYLLABLE IEUNG O SSANGSIOS + {0x9EB0, 0xC63A}, //5262 #HANGUL SYLLABLE IEUNG O CIEUC + {0x9EB1, 0xC63C}, //5263 #HANGUL SYLLABLE IEUNG O KHIEUKH + {0x9EB2, 0xC63D}, //5264 #HANGUL SYLLABLE IEUNG O THIEUTH + {0x9EB3, 0xC63E}, //5265 #HANGUL SYLLABLE IEUNG O PHIEUPH + {0x9EB4, 0xC63F}, //5266 #HANGUL SYLLABLE IEUNG O HIEUH + {0x9EB5, 0xC642}, //5267 #HANGUL SYLLABLE IEUNG WA SSANGKIYEOK + {0x9EB6, 0xC643}, //5268 #HANGUL SYLLABLE IEUNG WA KIYEOKSIOS + {0x9EB7, 0xC645}, //5269 #HANGUL SYLLABLE IEUNG WA NIEUNCIEUC + {0x9EB8, 0xC646}, //5270 #HANGUL SYLLABLE IEUNG WA NIEUNHIEUH + {0x9EB9, 0xC647}, //5271 #HANGUL SYLLABLE IEUNG WA TIKEUT + {0x9EBA, 0xC649}, //5272 #HANGUL SYLLABLE IEUNG WA RIEULKIYEOK + {0x9EBB, 0xC64A}, //5273 #HANGUL SYLLABLE IEUNG WA RIEULMIEUM + {0x9EBC, 0xC64B}, //5274 #HANGUL SYLLABLE IEUNG WA RIEULPIEUP + {0x9EBD, 0xC64C}, //5275 #HANGUL SYLLABLE IEUNG WA RIEULSIOS + {0x9EBE, 0xC64D}, //5276 #HANGUL SYLLABLE IEUNG WA RIEULTHIEUTH + {0x9EBF, 0xC64E}, //5277 #HANGUL SYLLABLE IEUNG WA RIEULPHIEUPH + {0x9EC0, 0xC64F}, //5278 #HANGUL SYLLABLE IEUNG WA RIEULHIEUH + {0x9EC1, 0xC652}, //5279 #HANGUL SYLLABLE IEUNG WA PIEUPSIOS + {0x9EC2, 0xC656}, //5280 #HANGUL SYLLABLE IEUNG WA CIEUC + {0x9EC3, 0xC657}, //5281 #HANGUL SYLLABLE IEUNG WA CHIEUCH + {0x9EC4, 0xC658}, //5282 #HANGUL SYLLABLE IEUNG WA KHIEUKH + {0x9EC5, 0xC659}, //5283 #HANGUL SYLLABLE IEUNG WA THIEUTH + {0x9EC6, 0xC65A}, //5284 #HANGUL SYLLABLE IEUNG WA PHIEUPH + {0x9EC7, 0xC65B}, //5285 #HANGUL SYLLABLE IEUNG WA HIEUH + {0x9EC8, 0xC65E}, //5286 #HANGUL SYLLABLE IEUNG WAE SSANGKIYEOK + {0x9EC9, 0xC65F}, //5287 #HANGUL SYLLABLE IEUNG WAE KIYEOKSIOS + {0x9ECA, 0xC661}, //5288 #HANGUL SYLLABLE IEUNG WAE NIEUNCIEUC + {0x9ECB, 0xC662}, //5289 #HANGUL SYLLABLE IEUNG WAE NIEUNHIEUH + {0x9ECC, 0xC663}, //5290 #HANGUL SYLLABLE IEUNG WAE TIKEUT + {0x9ECD, 0xC664}, //5291 #HANGUL SYLLABLE IEUNG WAE RIEUL + {0x9ECE, 0xC665}, //5292 #HANGUL SYLLABLE IEUNG WAE RIEULKIYEOK + {0x9ECF, 0xC666}, //5293 #HANGUL SYLLABLE IEUNG WAE RIEULMIEUM + {0x9ED0, 0xC667}, //5294 #HANGUL SYLLABLE IEUNG WAE RIEULPIEUP + {0x9ED1, 0xC668}, //5295 #HANGUL SYLLABLE IEUNG WAE RIEULSIOS + {0x9ED2, 0xC669}, //5296 #HANGUL SYLLABLE IEUNG WAE RIEULTHIEUTH + {0x9ED3, 0xC66A}, //5297 #HANGUL SYLLABLE IEUNG WAE RIEULPHIEUPH + {0x9ED4, 0xC66B}, //5298 #HANGUL SYLLABLE IEUNG WAE RIEULHIEUH + {0x9ED5, 0xC66D}, //5299 #HANGUL SYLLABLE IEUNG WAE PIEUP + {0x9ED6, 0xC66E}, //5300 #HANGUL SYLLABLE IEUNG WAE PIEUPSIOS + {0x9ED7, 0xC670}, //5301 #HANGUL SYLLABLE IEUNG WAE SSANGSIOS + {0x9ED8, 0xC672}, //5302 #HANGUL SYLLABLE IEUNG WAE CIEUC + {0x9ED9, 0xC673}, //5303 #HANGUL SYLLABLE IEUNG WAE CHIEUCH + {0x9EDA, 0xC674}, //5304 #HANGUL SYLLABLE IEUNG WAE KHIEUKH + {0x9EDB, 0xC675}, //5305 #HANGUL SYLLABLE IEUNG WAE THIEUTH + {0x9EDC, 0xC676}, //5306 #HANGUL SYLLABLE IEUNG WAE PHIEUPH + {0x9EDD, 0xC677}, //5307 #HANGUL SYLLABLE IEUNG WAE HIEUH + {0x9EDE, 0xC67A}, //5308 #HANGUL SYLLABLE IEUNG OE SSANGKIYEOK + {0x9EDF, 0xC67B}, //5309 #HANGUL SYLLABLE IEUNG OE KIYEOKSIOS + {0x9EE0, 0xC67D}, //5310 #HANGUL SYLLABLE IEUNG OE NIEUNCIEUC + {0x9EE1, 0xC67E}, //5311 #HANGUL SYLLABLE IEUNG OE NIEUNHIEUH + {0x9EE2, 0xC67F}, //5312 #HANGUL SYLLABLE IEUNG OE TIKEUT + {0x9EE3, 0xC681}, //5313 #HANGUL SYLLABLE IEUNG OE RIEULKIYEOK + {0x9EE4, 0xC682}, //5314 #HANGUL SYLLABLE IEUNG OE RIEULMIEUM + {0x9EE5, 0xC683}, //5315 #HANGUL SYLLABLE IEUNG OE RIEULPIEUP + {0x9EE6, 0xC684}, //5316 #HANGUL SYLLABLE IEUNG OE RIEULSIOS + {0x9EE7, 0xC685}, //5317 #HANGUL SYLLABLE IEUNG OE RIEULTHIEUTH + {0x9EE8, 0xC686}, //5318 #HANGUL SYLLABLE IEUNG OE RIEULPHIEUPH + {0x9EE9, 0xC687}, //5319 #HANGUL SYLLABLE IEUNG OE RIEULHIEUH + {0x9EEA, 0xC68A}, //5320 #HANGUL SYLLABLE IEUNG OE PIEUPSIOS + {0x9EEB, 0xC68C}, //5321 #HANGUL SYLLABLE IEUNG OE SSANGSIOS + {0x9EEC, 0xC68E}, //5322 #HANGUL SYLLABLE IEUNG OE CIEUC + {0x9EED, 0xC68F}, //5323 #HANGUL SYLLABLE IEUNG OE CHIEUCH + {0x9EEE, 0xC690}, //5324 #HANGUL SYLLABLE IEUNG OE KHIEUKH + {0x9EEF, 0xC691}, //5325 #HANGUL SYLLABLE IEUNG OE THIEUTH + {0x9EF0, 0xC692}, //5326 #HANGUL SYLLABLE IEUNG OE PHIEUPH + {0x9EF1, 0xC693}, //5327 #HANGUL SYLLABLE IEUNG OE HIEUH + {0x9EF2, 0xC696}, //5328 #HANGUL SYLLABLE IEUNG YO SSANGKIYEOK + {0x9EF3, 0xC697}, //5329 #HANGUL SYLLABLE IEUNG YO KIYEOKSIOS + {0x9EF4, 0xC699}, //5330 #HANGUL SYLLABLE IEUNG YO NIEUNCIEUC + {0x9EF5, 0xC69A}, //5331 #HANGUL SYLLABLE IEUNG YO NIEUNHIEUH + {0x9EF6, 0xC69B}, //5332 #HANGUL SYLLABLE IEUNG YO TIKEUT + {0x9EF7, 0xC69D}, //5333 #HANGUL SYLLABLE IEUNG YO RIEULKIYEOK + {0x9EF8, 0xC69E}, //5334 #HANGUL SYLLABLE IEUNG YO RIEULMIEUM + {0x9EF9, 0xC69F}, //5335 #HANGUL SYLLABLE IEUNG YO RIEULPIEUP + {0x9EFA, 0xC6A0}, //5336 #HANGUL SYLLABLE IEUNG YO RIEULSIOS + {0x9EFB, 0xC6A1}, //5337 #HANGUL SYLLABLE IEUNG YO RIEULTHIEUTH + {0x9EFC, 0xC6A2}, //5338 #HANGUL SYLLABLE IEUNG YO RIEULPHIEUPH + {0x9EFD, 0xC6A3}, //5339 #HANGUL SYLLABLE IEUNG YO RIEULHIEUH + {0x9EFE, 0xC6A6}, //5340 #HANGUL SYLLABLE IEUNG YO PIEUPSIOS + {0x9F41, 0xC6A8}, //5341 #HANGUL SYLLABLE IEUNG YO SSANGSIOS + {0x9F42, 0xC6AA}, //5342 #HANGUL SYLLABLE IEUNG YO CIEUC + {0x9F43, 0xC6AB}, //5343 #HANGUL SYLLABLE IEUNG YO CHIEUCH + {0x9F44, 0xC6AC}, //5344 #HANGUL SYLLABLE IEUNG YO KHIEUKH + {0x9F45, 0xC6AD}, //5345 #HANGUL SYLLABLE IEUNG YO THIEUTH + {0x9F46, 0xC6AE}, //5346 #HANGUL SYLLABLE IEUNG YO PHIEUPH + {0x9F47, 0xC6AF}, //5347 #HANGUL SYLLABLE IEUNG YO HIEUH + {0x9F48, 0xC6B2}, //5348 #HANGUL SYLLABLE IEUNG U SSANGKIYEOK + {0x9F49, 0xC6B3}, //5349 #HANGUL SYLLABLE IEUNG U KIYEOKSIOS + {0x9F4A, 0xC6B5}, //5350 #HANGUL SYLLABLE IEUNG U NIEUNCIEUC + {0x9F4B, 0xC6B6}, //5351 #HANGUL SYLLABLE IEUNG U NIEUNHIEUH + {0x9F4C, 0xC6B7}, //5352 #HANGUL SYLLABLE IEUNG U TIKEUT + {0x9F4D, 0xC6BB}, //5353 #HANGUL SYLLABLE IEUNG U RIEULPIEUP + {0x9F4E, 0xC6BC}, //5354 #HANGUL SYLLABLE IEUNG U RIEULSIOS + {0x9F4F, 0xC6BD}, //5355 #HANGUL SYLLABLE IEUNG U RIEULTHIEUTH + {0x9F50, 0xC6BE}, //5356 #HANGUL SYLLABLE IEUNG U RIEULPHIEUPH + {0x9F51, 0xC6BF}, //5357 #HANGUL SYLLABLE IEUNG U RIEULHIEUH + {0x9F52, 0xC6C2}, //5358 #HANGUL SYLLABLE IEUNG U PIEUPSIOS + {0x9F53, 0xC6C4}, //5359 #HANGUL SYLLABLE IEUNG U SSANGSIOS + {0x9F54, 0xC6C6}, //5360 #HANGUL SYLLABLE IEUNG U CIEUC + {0x9F55, 0xC6C7}, //5361 #HANGUL SYLLABLE IEUNG U CHIEUCH + {0x9F56, 0xC6C8}, //5362 #HANGUL SYLLABLE IEUNG U KHIEUKH + {0x9F57, 0xC6C9}, //5363 #HANGUL SYLLABLE IEUNG U THIEUTH + {0x9F58, 0xC6CA}, //5364 #HANGUL SYLLABLE IEUNG U PHIEUPH + {0x9F59, 0xC6CB}, //5365 #HANGUL SYLLABLE IEUNG U HIEUH + {0x9F5A, 0xC6CE}, //5366 #HANGUL SYLLABLE IEUNG WEO SSANGKIYEOK + {0x9F61, 0xC6CF}, //5367 #HANGUL SYLLABLE IEUNG WEO KIYEOKSIOS + {0x9F62, 0xC6D1}, //5368 #HANGUL SYLLABLE IEUNG WEO NIEUNCIEUC + {0x9F63, 0xC6D2}, //5369 #HANGUL SYLLABLE IEUNG WEO NIEUNHIEUH + {0x9F64, 0xC6D3}, //5370 #HANGUL SYLLABLE IEUNG WEO TIKEUT + {0x9F65, 0xC6D5}, //5371 #HANGUL SYLLABLE IEUNG WEO RIEULKIYEOK + {0x9F66, 0xC6D6}, //5372 #HANGUL SYLLABLE IEUNG WEO RIEULMIEUM + {0x9F67, 0xC6D7}, //5373 #HANGUL SYLLABLE IEUNG WEO RIEULPIEUP + {0x9F68, 0xC6D8}, //5374 #HANGUL SYLLABLE IEUNG WEO RIEULSIOS + {0x9F69, 0xC6D9}, //5375 #HANGUL SYLLABLE IEUNG WEO RIEULTHIEUTH + {0x9F6A, 0xC6DA}, //5376 #HANGUL SYLLABLE IEUNG WEO RIEULPHIEUPH + {0x9F6B, 0xC6DB}, //5377 #HANGUL SYLLABLE IEUNG WEO RIEULHIEUH + {0x9F6C, 0xC6DE}, //5378 #HANGUL SYLLABLE IEUNG WEO PIEUPSIOS + {0x9F6D, 0xC6DF}, //5379 #HANGUL SYLLABLE IEUNG WEO SIOS + {0x9F6E, 0xC6E2}, //5380 #HANGUL SYLLABLE IEUNG WEO CIEUC + {0x9F6F, 0xC6E3}, //5381 #HANGUL SYLLABLE IEUNG WEO CHIEUCH + {0x9F70, 0xC6E4}, //5382 #HANGUL SYLLABLE IEUNG WEO KHIEUKH + {0x9F71, 0xC6E5}, //5383 #HANGUL SYLLABLE IEUNG WEO THIEUTH + {0x9F72, 0xC6E6}, //5384 #HANGUL SYLLABLE IEUNG WEO PHIEUPH + {0x9F73, 0xC6E7}, //5385 #HANGUL SYLLABLE IEUNG WEO HIEUH + {0x9F74, 0xC6EA}, //5386 #HANGUL SYLLABLE IEUNG WE SSANGKIYEOK + {0x9F75, 0xC6EB}, //5387 #HANGUL SYLLABLE IEUNG WE KIYEOKSIOS + {0x9F76, 0xC6ED}, //5388 #HANGUL SYLLABLE IEUNG WE NIEUNCIEUC + {0x9F77, 0xC6EE}, //5389 #HANGUL SYLLABLE IEUNG WE NIEUNHIEUH + {0x9F78, 0xC6EF}, //5390 #HANGUL SYLLABLE IEUNG WE TIKEUT + {0x9F79, 0xC6F1}, //5391 #HANGUL SYLLABLE IEUNG WE RIEULKIYEOK + {0x9F7A, 0xC6F2}, //5392 #HANGUL SYLLABLE IEUNG WE RIEULMIEUM + {0x9F81, 0xC6F3}, //5393 #HANGUL SYLLABLE IEUNG WE RIEULPIEUP + {0x9F82, 0xC6F4}, //5394 #HANGUL SYLLABLE IEUNG WE RIEULSIOS + {0x9F83, 0xC6F5}, //5395 #HANGUL SYLLABLE IEUNG WE RIEULTHIEUTH + {0x9F84, 0xC6F6}, //5396 #HANGUL SYLLABLE IEUNG WE RIEULPHIEUPH + {0x9F85, 0xC6F7}, //5397 #HANGUL SYLLABLE IEUNG WE RIEULHIEUH + {0x9F86, 0xC6FA}, //5398 #HANGUL SYLLABLE IEUNG WE PIEUPSIOS + {0x9F87, 0xC6FB}, //5399 #HANGUL SYLLABLE IEUNG WE SIOS + {0x9F88, 0xC6FC}, //5400 #HANGUL SYLLABLE IEUNG WE SSANGSIOS + {0x9F89, 0xC6FE}, //5401 #HANGUL SYLLABLE IEUNG WE CIEUC + {0x9F8A, 0xC6FF}, //5402 #HANGUL SYLLABLE IEUNG WE CHIEUCH + {0x9F8B, 0xC700}, //5403 #HANGUL SYLLABLE IEUNG WE KHIEUKH + {0x9F8C, 0xC701}, //5404 #HANGUL SYLLABLE IEUNG WE THIEUTH + {0x9F8D, 0xC702}, //5405 #HANGUL SYLLABLE IEUNG WE PHIEUPH + {0x9F8E, 0xC703}, //5406 #HANGUL SYLLABLE IEUNG WE HIEUH + {0x9F8F, 0xC706}, //5407 #HANGUL SYLLABLE IEUNG WI SSANGKIYEOK + {0x9F90, 0xC707}, //5408 #HANGUL SYLLABLE IEUNG WI KIYEOKSIOS + {0x9F91, 0xC709}, //5409 #HANGUL SYLLABLE IEUNG WI NIEUNCIEUC + {0x9F92, 0xC70A}, //5410 #HANGUL SYLLABLE IEUNG WI NIEUNHIEUH + {0x9F93, 0xC70B}, //5411 #HANGUL SYLLABLE IEUNG WI TIKEUT + {0x9F94, 0xC70D}, //5412 #HANGUL SYLLABLE IEUNG WI RIEULKIYEOK + {0x9F95, 0xC70E}, //5413 #HANGUL SYLLABLE IEUNG WI RIEULMIEUM + {0x9F96, 0xC70F}, //5414 #HANGUL SYLLABLE IEUNG WI RIEULPIEUP + {0x9F97, 0xC710}, //5415 #HANGUL SYLLABLE IEUNG WI RIEULSIOS + {0x9F98, 0xC711}, //5416 #HANGUL SYLLABLE IEUNG WI RIEULTHIEUTH + {0x9F99, 0xC712}, //5417 #HANGUL SYLLABLE IEUNG WI RIEULPHIEUPH + {0x9F9A, 0xC713}, //5418 #HANGUL SYLLABLE IEUNG WI RIEULHIEUH + {0x9F9B, 0xC716}, //5419 #HANGUL SYLLABLE IEUNG WI PIEUPSIOS + {0x9F9C, 0xC718}, //5420 #HANGUL SYLLABLE IEUNG WI SSANGSIOS + {0x9F9D, 0xC71A}, //5421 #HANGUL SYLLABLE IEUNG WI CIEUC + {0x9F9E, 0xC71B}, //5422 #HANGUL SYLLABLE IEUNG WI CHIEUCH + {0x9F9F, 0xC71C}, //5423 #HANGUL SYLLABLE IEUNG WI KHIEUKH + {0x9FA0, 0xC71D}, //5424 #HANGUL SYLLABLE IEUNG WI THIEUTH + {0x9FA1, 0xC71E}, //5425 #HANGUL SYLLABLE IEUNG WI PHIEUPH + {0x9FA2, 0xC71F}, //5426 #HANGUL SYLLABLE IEUNG WI HIEUH + {0x9FA3, 0xC722}, //5427 #HANGUL SYLLABLE IEUNG YU SSANGKIYEOK + {0x9FA4, 0xC723}, //5428 #HANGUL SYLLABLE IEUNG YU KIYEOKSIOS + {0x9FA5, 0xC725}, //5429 #HANGUL SYLLABLE IEUNG YU NIEUNCIEUC + {0x9FA6, 0xC726}, //5430 #HANGUL SYLLABLE IEUNG YU NIEUNHIEUH + {0x9FA7, 0xC727}, //5431 #HANGUL SYLLABLE IEUNG YU TIKEUT + {0x9FA8, 0xC729}, //5432 #HANGUL SYLLABLE IEUNG YU RIEULKIYEOK + {0x9FA9, 0xC72A}, //5433 #HANGUL SYLLABLE IEUNG YU RIEULMIEUM + {0x9FAA, 0xC72B}, //5434 #HANGUL SYLLABLE IEUNG YU RIEULPIEUP + {0x9FAB, 0xC72C}, //5435 #HANGUL SYLLABLE IEUNG YU RIEULSIOS + {0x9FAC, 0xC72D}, //5436 #HANGUL SYLLABLE IEUNG YU RIEULTHIEUTH + {0x9FAD, 0xC72E}, //5437 #HANGUL SYLLABLE IEUNG YU RIEULPHIEUPH + {0x9FAE, 0xC72F}, //5438 #HANGUL SYLLABLE IEUNG YU RIEULHIEUH + {0x9FAF, 0xC732}, //5439 #HANGUL SYLLABLE IEUNG YU PIEUPSIOS + {0x9FB0, 0xC734}, //5440 #HANGUL SYLLABLE IEUNG YU SSANGSIOS + {0x9FB1, 0xC736}, //5441 #HANGUL SYLLABLE IEUNG YU CIEUC + {0x9FB2, 0xC738}, //5442 #HANGUL SYLLABLE IEUNG YU KHIEUKH + {0x9FB3, 0xC739}, //5443 #HANGUL SYLLABLE IEUNG YU THIEUTH + {0x9FB4, 0xC73A}, //5444 #HANGUL SYLLABLE IEUNG YU PHIEUPH + {0x9FB5, 0xC73B}, //5445 #HANGUL SYLLABLE IEUNG YU HIEUH + {0x9FB6, 0xC73E}, //5446 #HANGUL SYLLABLE IEUNG EU SSANGKIYEOK + {0x9FB7, 0xC73F}, //5447 #HANGUL SYLLABLE IEUNG EU KIYEOKSIOS + {0x9FB8, 0xC741}, //5448 #HANGUL SYLLABLE IEUNG EU NIEUNCIEUC + {0x9FB9, 0xC742}, //5449 #HANGUL SYLLABLE IEUNG EU NIEUNHIEUH + {0x9FBA, 0xC743}, //5450 #HANGUL SYLLABLE IEUNG EU TIKEUT + {0x9FBB, 0xC745}, //5451 #HANGUL SYLLABLE IEUNG EU RIEULKIYEOK + {0x9FBC, 0xC746}, //5452 #HANGUL SYLLABLE IEUNG EU RIEULMIEUM + {0x9FBD, 0xC747}, //5453 #HANGUL SYLLABLE IEUNG EU RIEULPIEUP + {0x9FBE, 0xC748}, //5454 #HANGUL SYLLABLE IEUNG EU RIEULSIOS + {0x9FBF, 0xC749}, //5455 #HANGUL SYLLABLE IEUNG EU RIEULTHIEUTH + {0x9FC0, 0xC74B}, //5456 #HANGUL SYLLABLE IEUNG EU RIEULHIEUH + {0x9FC1, 0xC74E}, //5457 #HANGUL SYLLABLE IEUNG EU PIEUPSIOS + {0x9FC2, 0xC750}, //5458 #HANGUL SYLLABLE IEUNG EU SSANGSIOS + {0x9FC3, 0xC759}, //5459 #HANGUL SYLLABLE IEUNG YI KIYEOK + {0x9FC4, 0xC75A}, //5460 #HANGUL SYLLABLE IEUNG YI SSANGKIYEOK + {0x9FC5, 0xC75B}, //5461 #HANGUL SYLLABLE IEUNG YI KIYEOKSIOS + {0x9FC6, 0xC75D}, //5462 #HANGUL SYLLABLE IEUNG YI NIEUNCIEUC + {0x9FC7, 0xC75E}, //5463 #HANGUL SYLLABLE IEUNG YI NIEUNHIEUH + {0x9FC8, 0xC75F}, //5464 #HANGUL SYLLABLE IEUNG YI TIKEUT + {0x9FC9, 0xC761}, //5465 #HANGUL SYLLABLE IEUNG YI RIEULKIYEOK + {0x9FCA, 0xC762}, //5466 #HANGUL SYLLABLE IEUNG YI RIEULMIEUM + {0x9FCB, 0xC763}, //5467 #HANGUL SYLLABLE IEUNG YI RIEULPIEUP + {0x9FCC, 0xC764}, //5468 #HANGUL SYLLABLE IEUNG YI RIEULSIOS + {0x9FCD, 0xC765}, //5469 #HANGUL SYLLABLE IEUNG YI RIEULTHIEUTH + {0x9FCE, 0xC766}, //5470 #HANGUL SYLLABLE IEUNG YI RIEULPHIEUPH + {0x9FCF, 0xC767}, //5471 #HANGUL SYLLABLE IEUNG YI RIEULHIEUH + {0x9FD0, 0xC769}, //5472 #HANGUL SYLLABLE IEUNG YI PIEUP + {0x9FD1, 0xC76A}, //5473 #HANGUL SYLLABLE IEUNG YI PIEUPSIOS + {0x9FD2, 0xC76C}, //5474 #HANGUL SYLLABLE IEUNG YI SSANGSIOS + {0x9FD3, 0xC76D}, //5475 #HANGUL SYLLABLE IEUNG YI IEUNG + {0x9FD4, 0xC76E}, //5476 #HANGUL SYLLABLE IEUNG YI CIEUC + {0x9FD5, 0xC76F}, //5477 #HANGUL SYLLABLE IEUNG YI CHIEUCH + {0x9FD6, 0xC770}, //5478 #HANGUL SYLLABLE IEUNG YI KHIEUKH + {0x9FD7, 0xC771}, //5479 #HANGUL SYLLABLE IEUNG YI THIEUTH + {0x9FD8, 0xC772}, //5480 #HANGUL SYLLABLE IEUNG YI PHIEUPH + {0x9FD9, 0xC773}, //5481 #HANGUL SYLLABLE IEUNG YI HIEUH + {0x9FDA, 0xC776}, //5482 #HANGUL SYLLABLE IEUNG I SSANGKIYEOK + {0x9FDB, 0xC777}, //5483 #HANGUL SYLLABLE IEUNG I KIYEOKSIOS + {0x9FDC, 0xC779}, //5484 #HANGUL SYLLABLE IEUNG I NIEUNCIEUC + {0x9FDD, 0xC77A}, //5485 #HANGUL SYLLABLE IEUNG I NIEUNHIEUH + {0x9FDE, 0xC77B}, //5486 #HANGUL SYLLABLE IEUNG I TIKEUT + {0x9FDF, 0xC77F}, //5487 #HANGUL SYLLABLE IEUNG I RIEULPIEUP + {0x9FE0, 0xC780}, //5488 #HANGUL SYLLABLE IEUNG I RIEULSIOS + {0x9FE1, 0xC781}, //5489 #HANGUL SYLLABLE IEUNG I RIEULTHIEUTH + {0x9FE2, 0xC782}, //5490 #HANGUL SYLLABLE IEUNG I RIEULPHIEUPH + {0x9FE3, 0xC786}, //5491 #HANGUL SYLLABLE IEUNG I PIEUPSIOS + {0x9FE4, 0xC78B}, //5492 #HANGUL SYLLABLE IEUNG I CHIEUCH + {0x9FE5, 0xC78C}, //5493 #HANGUL SYLLABLE IEUNG I KHIEUKH + {0x9FE6, 0xC78D}, //5494 #HANGUL SYLLABLE IEUNG I THIEUTH + {0x9FE7, 0xC78F}, //5495 #HANGUL SYLLABLE IEUNG I HIEUH + {0x9FE8, 0xC792}, //5496 #HANGUL SYLLABLE CIEUC A SSANGKIYEOK + {0x9FE9, 0xC793}, //5497 #HANGUL SYLLABLE CIEUC A KIYEOKSIOS + {0x9FEA, 0xC795}, //5498 #HANGUL SYLLABLE CIEUC A NIEUNCIEUC + {0x9FEB, 0xC799}, //5499 #HANGUL SYLLABLE CIEUC A RIEULKIYEOK + {0x9FEC, 0xC79B}, //5500 #HANGUL SYLLABLE CIEUC A RIEULPIEUP + {0x9FED, 0xC79C}, //5501 #HANGUL SYLLABLE CIEUC A RIEULSIOS + {0x9FEE, 0xC79D}, //5502 #HANGUL SYLLABLE CIEUC A RIEULTHIEUTH + {0x9FEF, 0xC79E}, //5503 #HANGUL SYLLABLE CIEUC A RIEULPHIEUPH + {0x9FF0, 0xC79F}, //5504 #HANGUL SYLLABLE CIEUC A RIEULHIEUH + {0x9FF1, 0xC7A2}, //5505 #HANGUL SYLLABLE CIEUC A PIEUPSIOS + {0x9FF2, 0xC7A7}, //5506 #HANGUL SYLLABLE CIEUC A CHIEUCH + {0x9FF3, 0xC7A8}, //5507 #HANGUL SYLLABLE CIEUC A KHIEUKH + {0x9FF4, 0xC7A9}, //5508 #HANGUL SYLLABLE CIEUC A THIEUTH + {0x9FF5, 0xC7AA}, //5509 #HANGUL SYLLABLE CIEUC A PHIEUPH + {0x9FF6, 0xC7AB}, //5510 #HANGUL SYLLABLE CIEUC A HIEUH + {0x9FF7, 0xC7AE}, //5511 #HANGUL SYLLABLE CIEUC AE SSANGKIYEOK + {0x9FF8, 0xC7AF}, //5512 #HANGUL SYLLABLE CIEUC AE KIYEOKSIOS + {0x9FF9, 0xC7B1}, //5513 #HANGUL SYLLABLE CIEUC AE NIEUNCIEUC + {0x9FFA, 0xC7B2}, //5514 #HANGUL SYLLABLE CIEUC AE NIEUNHIEUH + {0x9FFB, 0xC7B3}, //5515 #HANGUL SYLLABLE CIEUC AE TIKEUT + {0x9FFC, 0xC7B5}, //5516 #HANGUL SYLLABLE CIEUC AE RIEULKIYEOK + {0x9FFD, 0xC7B6}, //5517 #HANGUL SYLLABLE CIEUC AE RIEULMIEUM + {0x9FFE, 0xC7B7}, //5518 #HANGUL SYLLABLE CIEUC AE RIEULPIEUP + {0xA041, 0xC7B8}, //5519 #HANGUL SYLLABLE CIEUC AE RIEULSIOS + {0xA042, 0xC7B9}, //5520 #HANGUL SYLLABLE CIEUC AE RIEULTHIEUTH + {0xA043, 0xC7BA}, //5521 #HANGUL SYLLABLE CIEUC AE RIEULPHIEUPH + {0xA044, 0xC7BB}, //5522 #HANGUL SYLLABLE CIEUC AE RIEULHIEUH + {0xA045, 0xC7BE}, //5523 #HANGUL SYLLABLE CIEUC AE PIEUPSIOS + {0xA046, 0xC7C2}, //5524 #HANGUL SYLLABLE CIEUC AE CIEUC + {0xA047, 0xC7C3}, //5525 #HANGUL SYLLABLE CIEUC AE CHIEUCH + {0xA048, 0xC7C4}, //5526 #HANGUL SYLLABLE CIEUC AE KHIEUKH + {0xA049, 0xC7C5}, //5527 #HANGUL SYLLABLE CIEUC AE THIEUTH + {0xA04A, 0xC7C6}, //5528 #HANGUL SYLLABLE CIEUC AE PHIEUPH + {0xA04B, 0xC7C7}, //5529 #HANGUL SYLLABLE CIEUC AE HIEUH + {0xA04C, 0xC7CA}, //5530 #HANGUL SYLLABLE CIEUC YA SSANGKIYEOK + {0xA04D, 0xC7CB}, //5531 #HANGUL SYLLABLE CIEUC YA KIYEOKSIOS + {0xA04E, 0xC7CD}, //5532 #HANGUL SYLLABLE CIEUC YA NIEUNCIEUC + {0xA04F, 0xC7CF}, //5533 #HANGUL SYLLABLE CIEUC YA TIKEUT + {0xA050, 0xC7D1}, //5534 #HANGUL SYLLABLE CIEUC YA RIEULKIYEOK + {0xA051, 0xC7D2}, //5535 #HANGUL SYLLABLE CIEUC YA RIEULMIEUM + {0xA052, 0xC7D3}, //5536 #HANGUL SYLLABLE CIEUC YA RIEULPIEUP + {0xA053, 0xC7D4}, //5537 #HANGUL SYLLABLE CIEUC YA RIEULSIOS + {0xA054, 0xC7D5}, //5538 #HANGUL SYLLABLE CIEUC YA RIEULTHIEUTH + {0xA055, 0xC7D6}, //5539 #HANGUL SYLLABLE CIEUC YA RIEULPHIEUPH + {0xA056, 0xC7D7}, //5540 #HANGUL SYLLABLE CIEUC YA RIEULHIEUH + {0xA057, 0xC7D9}, //5541 #HANGUL SYLLABLE CIEUC YA PIEUP + {0xA058, 0xC7DA}, //5542 #HANGUL SYLLABLE CIEUC YA PIEUPSIOS + {0xA059, 0xC7DB}, //5543 #HANGUL SYLLABLE CIEUC YA SIOS + {0xA05A, 0xC7DC}, //5544 #HANGUL SYLLABLE CIEUC YA SSANGSIOS + {0xA061, 0xC7DE}, //5545 #HANGUL SYLLABLE CIEUC YA CIEUC + {0xA062, 0xC7DF}, //5546 #HANGUL SYLLABLE CIEUC YA CHIEUCH + {0xA063, 0xC7E0}, //5547 #HANGUL SYLLABLE CIEUC YA KHIEUKH + {0xA064, 0xC7E1}, //5548 #HANGUL SYLLABLE CIEUC YA THIEUTH + {0xA065, 0xC7E2}, //5549 #HANGUL SYLLABLE CIEUC YA PHIEUPH + {0xA066, 0xC7E3}, //5550 #HANGUL SYLLABLE CIEUC YA HIEUH + {0xA067, 0xC7E5}, //5551 #HANGUL SYLLABLE CIEUC YAE KIYEOK + {0xA068, 0xC7E6}, //5552 #HANGUL SYLLABLE CIEUC YAE SSANGKIYEOK + {0xA069, 0xC7E7}, //5553 #HANGUL SYLLABLE CIEUC YAE KIYEOKSIOS + {0xA06A, 0xC7E9}, //5554 #HANGUL SYLLABLE CIEUC YAE NIEUNCIEUC + {0xA06B, 0xC7EA}, //5555 #HANGUL SYLLABLE CIEUC YAE NIEUNHIEUH + {0xA06C, 0xC7EB}, //5556 #HANGUL SYLLABLE CIEUC YAE TIKEUT + {0xA06D, 0xC7ED}, //5557 #HANGUL SYLLABLE CIEUC YAE RIEULKIYEOK + {0xA06E, 0xC7EE}, //5558 #HANGUL SYLLABLE CIEUC YAE RIEULMIEUM + {0xA06F, 0xC7EF}, //5559 #HANGUL SYLLABLE CIEUC YAE RIEULPIEUP + {0xA070, 0xC7F0}, //5560 #HANGUL SYLLABLE CIEUC YAE RIEULSIOS + {0xA071, 0xC7F1}, //5561 #HANGUL SYLLABLE CIEUC YAE RIEULTHIEUTH + {0xA072, 0xC7F2}, //5562 #HANGUL SYLLABLE CIEUC YAE RIEULPHIEUPH + {0xA073, 0xC7F3}, //5563 #HANGUL SYLLABLE CIEUC YAE RIEULHIEUH + {0xA074, 0xC7F4}, //5564 #HANGUL SYLLABLE CIEUC YAE MIEUM + {0xA075, 0xC7F5}, //5565 #HANGUL SYLLABLE CIEUC YAE PIEUP + {0xA076, 0xC7F6}, //5566 #HANGUL SYLLABLE CIEUC YAE PIEUPSIOS + {0xA077, 0xC7F7}, //5567 #HANGUL SYLLABLE CIEUC YAE SIOS + {0xA078, 0xC7F8}, //5568 #HANGUL SYLLABLE CIEUC YAE SSANGSIOS + {0xA079, 0xC7F9}, //5569 #HANGUL SYLLABLE CIEUC YAE IEUNG + {0xA07A, 0xC7FA}, //5570 #HANGUL SYLLABLE CIEUC YAE CIEUC + {0xA081, 0xC7FB}, //5571 #HANGUL SYLLABLE CIEUC YAE CHIEUCH + {0xA082, 0xC7FC}, //5572 #HANGUL SYLLABLE CIEUC YAE KHIEUKH + {0xA083, 0xC7FD}, //5573 #HANGUL SYLLABLE CIEUC YAE THIEUTH + {0xA084, 0xC7FE}, //5574 #HANGUL SYLLABLE CIEUC YAE PHIEUPH + {0xA085, 0xC7FF}, //5575 #HANGUL SYLLABLE CIEUC YAE HIEUH + {0xA086, 0xC802}, //5576 #HANGUL SYLLABLE CIEUC EO SSANGKIYEOK + {0xA087, 0xC803}, //5577 #HANGUL SYLLABLE CIEUC EO KIYEOKSIOS + {0xA088, 0xC805}, //5578 #HANGUL SYLLABLE CIEUC EO NIEUNCIEUC + {0xA089, 0xC806}, //5579 #HANGUL SYLLABLE CIEUC EO NIEUNHIEUH + {0xA08A, 0xC807}, //5580 #HANGUL SYLLABLE CIEUC EO TIKEUT + {0xA08B, 0xC809}, //5581 #HANGUL SYLLABLE CIEUC EO RIEULKIYEOK + {0xA08C, 0xC80B}, //5582 #HANGUL SYLLABLE CIEUC EO RIEULPIEUP + {0xA08D, 0xC80C}, //5583 #HANGUL SYLLABLE CIEUC EO RIEULSIOS + {0xA08E, 0xC80D}, //5584 #HANGUL SYLLABLE CIEUC EO RIEULTHIEUTH + {0xA08F, 0xC80E}, //5585 #HANGUL SYLLABLE CIEUC EO RIEULPHIEUPH + {0xA090, 0xC80F}, //5586 #HANGUL SYLLABLE CIEUC EO RIEULHIEUH + {0xA091, 0xC812}, //5587 #HANGUL SYLLABLE CIEUC EO PIEUPSIOS + {0xA092, 0xC814}, //5588 #HANGUL SYLLABLE CIEUC EO SSANGSIOS + {0xA093, 0xC817}, //5589 #HANGUL SYLLABLE CIEUC EO CHIEUCH + {0xA094, 0xC818}, //5590 #HANGUL SYLLABLE CIEUC EO KHIEUKH + {0xA095, 0xC819}, //5591 #HANGUL SYLLABLE CIEUC EO THIEUTH + {0xA096, 0xC81A}, //5592 #HANGUL SYLLABLE CIEUC EO PHIEUPH + {0xA097, 0xC81B}, //5593 #HANGUL SYLLABLE CIEUC EO HIEUH + {0xA098, 0xC81E}, //5594 #HANGUL SYLLABLE CIEUC E SSANGKIYEOK + {0xA099, 0xC81F}, //5595 #HANGUL SYLLABLE CIEUC E KIYEOKSIOS + {0xA09A, 0xC821}, //5596 #HANGUL SYLLABLE CIEUC E NIEUNCIEUC + {0xA09B, 0xC822}, //5597 #HANGUL SYLLABLE CIEUC E NIEUNHIEUH + {0xA09C, 0xC823}, //5598 #HANGUL SYLLABLE CIEUC E TIKEUT + {0xA09D, 0xC825}, //5599 #HANGUL SYLLABLE CIEUC E RIEULKIYEOK + {0xA09E, 0xC826}, //5600 #HANGUL SYLLABLE CIEUC E RIEULMIEUM + {0xA09F, 0xC827}, //5601 #HANGUL SYLLABLE CIEUC E RIEULPIEUP + {0xA0A0, 0xC828}, //5602 #HANGUL SYLLABLE CIEUC E RIEULSIOS + {0xA0A1, 0xC829}, //5603 #HANGUL SYLLABLE CIEUC E RIEULTHIEUTH + {0xA0A2, 0xC82A}, //5604 #HANGUL SYLLABLE CIEUC E RIEULPHIEUPH + {0xA0A3, 0xC82B}, //5605 #HANGUL SYLLABLE CIEUC E RIEULHIEUH + {0xA0A4, 0xC82E}, //5606 #HANGUL SYLLABLE CIEUC E PIEUPSIOS + {0xA0A5, 0xC830}, //5607 #HANGUL SYLLABLE CIEUC E SSANGSIOS + {0xA0A6, 0xC832}, //5608 #HANGUL SYLLABLE CIEUC E CIEUC + {0xA0A7, 0xC833}, //5609 #HANGUL SYLLABLE CIEUC E CHIEUCH + {0xA0A8, 0xC834}, //5610 #HANGUL SYLLABLE CIEUC E KHIEUKH + {0xA0A9, 0xC835}, //5611 #HANGUL SYLLABLE CIEUC E THIEUTH + {0xA0AA, 0xC836}, //5612 #HANGUL SYLLABLE CIEUC E PHIEUPH + {0xA0AB, 0xC837}, //5613 #HANGUL SYLLABLE CIEUC E HIEUH + {0xA0AC, 0xC839}, //5614 #HANGUL SYLLABLE CIEUC YEO KIYEOK + {0xA0AD, 0xC83A}, //5615 #HANGUL SYLLABLE CIEUC YEO SSANGKIYEOK + {0xA0AE, 0xC83B}, //5616 #HANGUL SYLLABLE CIEUC YEO KIYEOKSIOS + {0xA0AF, 0xC83D}, //5617 #HANGUL SYLLABLE CIEUC YEO NIEUNCIEUC + {0xA0B0, 0xC83E}, //5618 #HANGUL SYLLABLE CIEUC YEO NIEUNHIEUH + {0xA0B1, 0xC83F}, //5619 #HANGUL SYLLABLE CIEUC YEO TIKEUT + {0xA0B2, 0xC841}, //5620 #HANGUL SYLLABLE CIEUC YEO RIEULKIYEOK + {0xA0B3, 0xC842}, //5621 #HANGUL SYLLABLE CIEUC YEO RIEULMIEUM + {0xA0B4, 0xC843}, //5622 #HANGUL SYLLABLE CIEUC YEO RIEULPIEUP + {0xA0B5, 0xC844}, //5623 #HANGUL SYLLABLE CIEUC YEO RIEULSIOS + {0xA0B6, 0xC845}, //5624 #HANGUL SYLLABLE CIEUC YEO RIEULTHIEUTH + {0xA0B7, 0xC846}, //5625 #HANGUL SYLLABLE CIEUC YEO RIEULPHIEUPH + {0xA0B8, 0xC847}, //5626 #HANGUL SYLLABLE CIEUC YEO RIEULHIEUH + {0xA0B9, 0xC84A}, //5627 #HANGUL SYLLABLE CIEUC YEO PIEUPSIOS + {0xA0BA, 0xC84B}, //5628 #HANGUL SYLLABLE CIEUC YEO SIOS + {0xA0BB, 0xC84E}, //5629 #HANGUL SYLLABLE CIEUC YEO CIEUC + {0xA0BC, 0xC84F}, //5630 #HANGUL SYLLABLE CIEUC YEO CHIEUCH + {0xA0BD, 0xC850}, //5631 #HANGUL SYLLABLE CIEUC YEO KHIEUKH + {0xA0BE, 0xC851}, //5632 #HANGUL SYLLABLE CIEUC YEO THIEUTH + {0xA0BF, 0xC852}, //5633 #HANGUL SYLLABLE CIEUC YEO PHIEUPH + {0xA0C0, 0xC853}, //5634 #HANGUL SYLLABLE CIEUC YEO HIEUH + {0xA0C1, 0xC855}, //5635 #HANGUL SYLLABLE CIEUC YE KIYEOK + {0xA0C2, 0xC856}, //5636 #HANGUL SYLLABLE CIEUC YE SSANGKIYEOK + {0xA0C3, 0xC857}, //5637 #HANGUL SYLLABLE CIEUC YE KIYEOKSIOS + {0xA0C4, 0xC858}, //5638 #HANGUL SYLLABLE CIEUC YE NIEUN + {0xA0C5, 0xC859}, //5639 #HANGUL SYLLABLE CIEUC YE NIEUNCIEUC + {0xA0C6, 0xC85A}, //5640 #HANGUL SYLLABLE CIEUC YE NIEUNHIEUH + {0xA0C7, 0xC85B}, //5641 #HANGUL SYLLABLE CIEUC YE TIKEUT + {0xA0C8, 0xC85C}, //5642 #HANGUL SYLLABLE CIEUC YE RIEUL + {0xA0C9, 0xC85D}, //5643 #HANGUL SYLLABLE CIEUC YE RIEULKIYEOK + {0xA0CA, 0xC85E}, //5644 #HANGUL SYLLABLE CIEUC YE RIEULMIEUM + {0xA0CB, 0xC85F}, //5645 #HANGUL SYLLABLE CIEUC YE RIEULPIEUP + {0xA0CC, 0xC860}, //5646 #HANGUL SYLLABLE CIEUC YE RIEULSIOS + {0xA0CD, 0xC861}, //5647 #HANGUL SYLLABLE CIEUC YE RIEULTHIEUTH + {0xA0CE, 0xC862}, //5648 #HANGUL SYLLABLE CIEUC YE RIEULPHIEUPH + {0xA0CF, 0xC863}, //5649 #HANGUL SYLLABLE CIEUC YE RIEULHIEUH + {0xA0D0, 0xC864}, //5650 #HANGUL SYLLABLE CIEUC YE MIEUM + {0xA0D1, 0xC865}, //5651 #HANGUL SYLLABLE CIEUC YE PIEUP + {0xA0D2, 0xC866}, //5652 #HANGUL SYLLABLE CIEUC YE PIEUPSIOS + {0xA0D3, 0xC867}, //5653 #HANGUL SYLLABLE CIEUC YE SIOS + {0xA0D4, 0xC868}, //5654 #HANGUL SYLLABLE CIEUC YE SSANGSIOS + {0xA0D5, 0xC869}, //5655 #HANGUL SYLLABLE CIEUC YE IEUNG + {0xA0D6, 0xC86A}, //5656 #HANGUL SYLLABLE CIEUC YE CIEUC + {0xA0D7, 0xC86B}, //5657 #HANGUL SYLLABLE CIEUC YE CHIEUCH + {0xA0D8, 0xC86C}, //5658 #HANGUL SYLLABLE CIEUC YE KHIEUKH + {0xA0D9, 0xC86D}, //5659 #HANGUL SYLLABLE CIEUC YE THIEUTH + {0xA0DA, 0xC86E}, //5660 #HANGUL SYLLABLE CIEUC YE PHIEUPH + {0xA0DB, 0xC86F}, //5661 #HANGUL SYLLABLE CIEUC YE HIEUH + {0xA0DC, 0xC872}, //5662 #HANGUL SYLLABLE CIEUC O SSANGKIYEOK + {0xA0DD, 0xC873}, //5663 #HANGUL SYLLABLE CIEUC O KIYEOKSIOS + {0xA0DE, 0xC875}, //5664 #HANGUL SYLLABLE CIEUC O NIEUNCIEUC + {0xA0DF, 0xC876}, //5665 #HANGUL SYLLABLE CIEUC O NIEUNHIEUH + {0xA0E0, 0xC877}, //5666 #HANGUL SYLLABLE CIEUC O TIKEUT + {0xA0E1, 0xC879}, //5667 #HANGUL SYLLABLE CIEUC O RIEULKIYEOK + {0xA0E2, 0xC87B}, //5668 #HANGUL SYLLABLE CIEUC O RIEULPIEUP + {0xA0E3, 0xC87C}, //5669 #HANGUL SYLLABLE CIEUC O RIEULSIOS + {0xA0E4, 0xC87D}, //5670 #HANGUL SYLLABLE CIEUC O RIEULTHIEUTH + {0xA0E5, 0xC87E}, //5671 #HANGUL SYLLABLE CIEUC O RIEULPHIEUPH + {0xA0E6, 0xC87F}, //5672 #HANGUL SYLLABLE CIEUC O RIEULHIEUH + {0xA0E7, 0xC882}, //5673 #HANGUL SYLLABLE CIEUC O PIEUPSIOS + {0xA0E8, 0xC884}, //5674 #HANGUL SYLLABLE CIEUC O SSANGSIOS + {0xA0E9, 0xC888}, //5675 #HANGUL SYLLABLE CIEUC O KHIEUKH + {0xA0EA, 0xC889}, //5676 #HANGUL SYLLABLE CIEUC O THIEUTH + {0xA0EB, 0xC88A}, //5677 #HANGUL SYLLABLE CIEUC O PHIEUPH + {0xA0EC, 0xC88E}, //5678 #HANGUL SYLLABLE CIEUC WA SSANGKIYEOK + {0xA0ED, 0xC88F}, //5679 #HANGUL SYLLABLE CIEUC WA KIYEOKSIOS + {0xA0EE, 0xC890}, //5680 #HANGUL SYLLABLE CIEUC WA NIEUN + {0xA0EF, 0xC891}, //5681 #HANGUL SYLLABLE CIEUC WA NIEUNCIEUC + {0xA0F0, 0xC892}, //5682 #HANGUL SYLLABLE CIEUC WA NIEUNHIEUH + {0xA0F1, 0xC893}, //5683 #HANGUL SYLLABLE CIEUC WA TIKEUT + {0xA0F2, 0xC895}, //5684 #HANGUL SYLLABLE CIEUC WA RIEULKIYEOK + {0xA0F3, 0xC896}, //5685 #HANGUL SYLLABLE CIEUC WA RIEULMIEUM + {0xA0F4, 0xC897}, //5686 #HANGUL SYLLABLE CIEUC WA RIEULPIEUP + {0xA0F5, 0xC898}, //5687 #HANGUL SYLLABLE CIEUC WA RIEULSIOS + {0xA0F6, 0xC899}, //5688 #HANGUL SYLLABLE CIEUC WA RIEULTHIEUTH + {0xA0F7, 0xC89A}, //5689 #HANGUL SYLLABLE CIEUC WA RIEULPHIEUPH + {0xA0F8, 0xC89B}, //5690 #HANGUL SYLLABLE CIEUC WA RIEULHIEUH + {0xA0F9, 0xC89C}, //5691 #HANGUL SYLLABLE CIEUC WA MIEUM + {0xA0FA, 0xC89E}, //5692 #HANGUL SYLLABLE CIEUC WA PIEUPSIOS + {0xA0FB, 0xC8A0}, //5693 #HANGUL SYLLABLE CIEUC WA SSANGSIOS + {0xA0FC, 0xC8A2}, //5694 #HANGUL SYLLABLE CIEUC WA CIEUC + {0xA0FD, 0xC8A3}, //5695 #HANGUL SYLLABLE CIEUC WA CHIEUCH + {0xA0FE, 0xC8A4}, //5696 #HANGUL SYLLABLE CIEUC WA KHIEUKH + {0xA141, 0xC8A5}, //5697 #HANGUL SYLLABLE CIEUC WA THIEUTH + {0xA142, 0xC8A6}, //5698 #HANGUL SYLLABLE CIEUC WA PHIEUPH + {0xA143, 0xC8A7}, //5699 #HANGUL SYLLABLE CIEUC WA HIEUH + {0xA144, 0xC8A9}, //5700 #HANGUL SYLLABLE CIEUC WAE KIYEOK + {0xA145, 0xC8AA}, //5701 #HANGUL SYLLABLE CIEUC WAE SSANGKIYEOK + {0xA146, 0xC8AB}, //5702 #HANGUL SYLLABLE CIEUC WAE KIYEOKSIOS + {0xA147, 0xC8AC}, //5703 #HANGUL SYLLABLE CIEUC WAE NIEUN + {0xA148, 0xC8AD}, //5704 #HANGUL SYLLABLE CIEUC WAE NIEUNCIEUC + {0xA149, 0xC8AE}, //5705 #HANGUL SYLLABLE CIEUC WAE NIEUNHIEUH + {0xA14A, 0xC8AF}, //5706 #HANGUL SYLLABLE CIEUC WAE TIKEUT + {0xA14B, 0xC8B0}, //5707 #HANGUL SYLLABLE CIEUC WAE RIEUL + {0xA14C, 0xC8B1}, //5708 #HANGUL SYLLABLE CIEUC WAE RIEULKIYEOK + {0xA14D, 0xC8B2}, //5709 #HANGUL SYLLABLE CIEUC WAE RIEULMIEUM + {0xA14E, 0xC8B3}, //5710 #HANGUL SYLLABLE CIEUC WAE RIEULPIEUP + {0xA14F, 0xC8B4}, //5711 #HANGUL SYLLABLE CIEUC WAE RIEULSIOS + {0xA150, 0xC8B5}, //5712 #HANGUL SYLLABLE CIEUC WAE RIEULTHIEUTH + {0xA151, 0xC8B6}, //5713 #HANGUL SYLLABLE CIEUC WAE RIEULPHIEUPH + {0xA152, 0xC8B7}, //5714 #HANGUL SYLLABLE CIEUC WAE RIEULHIEUH + {0xA153, 0xC8B8}, //5715 #HANGUL SYLLABLE CIEUC WAE MIEUM + {0xA154, 0xC8B9}, //5716 #HANGUL SYLLABLE CIEUC WAE PIEUP + {0xA155, 0xC8BA}, //5717 #HANGUL SYLLABLE CIEUC WAE PIEUPSIOS + {0xA156, 0xC8BB}, //5718 #HANGUL SYLLABLE CIEUC WAE SIOS + {0xA157, 0xC8BE}, //5719 #HANGUL SYLLABLE CIEUC WAE CIEUC + {0xA158, 0xC8BF}, //5720 #HANGUL SYLLABLE CIEUC WAE CHIEUCH + {0xA159, 0xC8C0}, //5721 #HANGUL SYLLABLE CIEUC WAE KHIEUKH + {0xA15A, 0xC8C1}, //5722 #HANGUL SYLLABLE CIEUC WAE THIEUTH + {0xA161, 0xC8C2}, //5723 #HANGUL SYLLABLE CIEUC WAE PHIEUPH + {0xA162, 0xC8C3}, //5724 #HANGUL SYLLABLE CIEUC WAE HIEUH + {0xA163, 0xC8C5}, //5725 #HANGUL SYLLABLE CIEUC OE KIYEOK + {0xA164, 0xC8C6}, //5726 #HANGUL SYLLABLE CIEUC OE SSANGKIYEOK + {0xA165, 0xC8C7}, //5727 #HANGUL SYLLABLE CIEUC OE KIYEOKSIOS + {0xA166, 0xC8C9}, //5728 #HANGUL SYLLABLE CIEUC OE NIEUNCIEUC + {0xA167, 0xC8CA}, //5729 #HANGUL SYLLABLE CIEUC OE NIEUNHIEUH + {0xA168, 0xC8CB}, //5730 #HANGUL SYLLABLE CIEUC OE TIKEUT + {0xA169, 0xC8CD}, //5731 #HANGUL SYLLABLE CIEUC OE RIEULKIYEOK + {0xA16A, 0xC8CE}, //5732 #HANGUL SYLLABLE CIEUC OE RIEULMIEUM + {0xA16B, 0xC8CF}, //5733 #HANGUL SYLLABLE CIEUC OE RIEULPIEUP + {0xA16C, 0xC8D0}, //5734 #HANGUL SYLLABLE CIEUC OE RIEULSIOS + {0xA16D, 0xC8D1}, //5735 #HANGUL SYLLABLE CIEUC OE RIEULTHIEUTH + {0xA16E, 0xC8D2}, //5736 #HANGUL SYLLABLE CIEUC OE RIEULPHIEUPH + {0xA16F, 0xC8D3}, //5737 #HANGUL SYLLABLE CIEUC OE RIEULHIEUH + {0xA170, 0xC8D6}, //5738 #HANGUL SYLLABLE CIEUC OE PIEUPSIOS + {0xA171, 0xC8D8}, //5739 #HANGUL SYLLABLE CIEUC OE SSANGSIOS + {0xA172, 0xC8DA}, //5740 #HANGUL SYLLABLE CIEUC OE CIEUC + {0xA173, 0xC8DB}, //5741 #HANGUL SYLLABLE CIEUC OE CHIEUCH + {0xA174, 0xC8DC}, //5742 #HANGUL SYLLABLE CIEUC OE KHIEUKH + {0xA175, 0xC8DD}, //5743 #HANGUL SYLLABLE CIEUC OE THIEUTH + {0xA176, 0xC8DE}, //5744 #HANGUL SYLLABLE CIEUC OE PHIEUPH + {0xA177, 0xC8DF}, //5745 #HANGUL SYLLABLE CIEUC OE HIEUH + {0xA178, 0xC8E2}, //5746 #HANGUL SYLLABLE CIEUC YO SSANGKIYEOK + {0xA179, 0xC8E3}, //5747 #HANGUL SYLLABLE CIEUC YO KIYEOKSIOS + {0xA17A, 0xC8E5}, //5748 #HANGUL SYLLABLE CIEUC YO NIEUNCIEUC + {0xA181, 0xC8E6}, //5749 #HANGUL SYLLABLE CIEUC YO NIEUNHIEUH + {0xA182, 0xC8E7}, //5750 #HANGUL SYLLABLE CIEUC YO TIKEUT + {0xA183, 0xC8E8}, //5751 #HANGUL SYLLABLE CIEUC YO RIEUL + {0xA184, 0xC8E9}, //5752 #HANGUL SYLLABLE CIEUC YO RIEULKIYEOK + {0xA185, 0xC8EA}, //5753 #HANGUL SYLLABLE CIEUC YO RIEULMIEUM + {0xA186, 0xC8EB}, //5754 #HANGUL SYLLABLE CIEUC YO RIEULPIEUP + {0xA187, 0xC8EC}, //5755 #HANGUL SYLLABLE CIEUC YO RIEULSIOS + {0xA188, 0xC8ED}, //5756 #HANGUL SYLLABLE CIEUC YO RIEULTHIEUTH + {0xA189, 0xC8EE}, //5757 #HANGUL SYLLABLE CIEUC YO RIEULPHIEUPH + {0xA18A, 0xC8EF}, //5758 #HANGUL SYLLABLE CIEUC YO RIEULHIEUH + {0xA18B, 0xC8F0}, //5759 #HANGUL SYLLABLE CIEUC YO MIEUM + {0xA18C, 0xC8F1}, //5760 #HANGUL SYLLABLE CIEUC YO PIEUP + {0xA18D, 0xC8F2}, //5761 #HANGUL SYLLABLE CIEUC YO PIEUPSIOS + {0xA18E, 0xC8F3}, //5762 #HANGUL SYLLABLE CIEUC YO SIOS + {0xA18F, 0xC8F4}, //5763 #HANGUL SYLLABLE CIEUC YO SSANGSIOS + {0xA190, 0xC8F6}, //5764 #HANGUL SYLLABLE CIEUC YO CIEUC + {0xA191, 0xC8F7}, //5765 #HANGUL SYLLABLE CIEUC YO CHIEUCH + {0xA192, 0xC8F8}, //5766 #HANGUL SYLLABLE CIEUC YO KHIEUKH + {0xA193, 0xC8F9}, //5767 #HANGUL SYLLABLE CIEUC YO THIEUTH + {0xA194, 0xC8FA}, //5768 #HANGUL SYLLABLE CIEUC YO PHIEUPH + {0xA195, 0xC8FB}, //5769 #HANGUL SYLLABLE CIEUC YO HIEUH + {0xA196, 0xC8FE}, //5770 #HANGUL SYLLABLE CIEUC U SSANGKIYEOK + {0xA197, 0xC8FF}, //5771 #HANGUL SYLLABLE CIEUC U KIYEOKSIOS + {0xA198, 0xC901}, //5772 #HANGUL SYLLABLE CIEUC U NIEUNCIEUC + {0xA199, 0xC902}, //5773 #HANGUL SYLLABLE CIEUC U NIEUNHIEUH + {0xA19A, 0xC903}, //5774 #HANGUL SYLLABLE CIEUC U TIKEUT + {0xA19B, 0xC907}, //5775 #HANGUL SYLLABLE CIEUC U RIEULPIEUP + {0xA19C, 0xC908}, //5776 #HANGUL SYLLABLE CIEUC U RIEULSIOS + {0xA19D, 0xC909}, //5777 #HANGUL SYLLABLE CIEUC U RIEULTHIEUTH + {0xA19E, 0xC90A}, //5778 #HANGUL SYLLABLE CIEUC U RIEULPHIEUPH + {0xA19F, 0xC90B}, //5779 #HANGUL SYLLABLE CIEUC U RIEULHIEUH + {0xA1A0, 0xC90E}, //5780 #HANGUL SYLLABLE CIEUC U PIEUPSIOS + {0xA1A1, 0x3000}, //5781 #IDEOGRAPHIC SPACE + {0xA1A2, 0x3001}, //5782 #IDEOGRAPHIC COMMA + {0xA1A3, 0x3002}, //5783 #IDEOGRAPHIC FULL STOP + {0xA1A4, 0x00B7}, //5784 #MIDDLE DOT + {0xA1A5, 0x2025}, //5785 #TWO DOT LEADER + {0xA1A6, 0x2026}, //5786 #HORIZONTAL ELLIPSIS + {0xA1A7, 0x00A8}, //5787 #DIAERESIS + {0xA1A8, 0x3003}, //5788 #DITTO MARK + {0xA1A9, 0x00AD}, //5789 #SOFT HYPHEN + {0xA1AA, 0x2015}, //5790 #HORIZONTAL BAR + {0xA1AB, 0x2225}, //5791 #PARALLEL TO + {0xA1AC, 0xFF3C}, //5792 #FULLWIDTH REVERSE SOLIDUS + {0xA1AD, 0x223C}, //5793 #TILDE OPERATOR + {0xA1AE, 0x2018}, //5794 #LEFT SINGLE QUOTATION MARK + {0xA1AF, 0x2019}, //5795 #RIGHT SINGLE QUOTATION MARK + {0xA1B0, 0x201C}, //5796 #LEFT DOUBLE QUOTATION MARK + {0xA1B1, 0x201D}, //5797 #RIGHT DOUBLE QUOTATION MARK + {0xA1B2, 0x3014}, //5798 #LEFT TORTOISE SHELL BRACKET + {0xA1B3, 0x3015}, //5799 #RIGHT TORTOISE SHELL BRACKET + {0xA1B4, 0x3008}, //5800 #LEFT ANGLE BRACKET + {0xA1B5, 0x3009}, //5801 #RIGHT ANGLE BRACKET + {0xA1B6, 0x300A}, //5802 #LEFT DOUBLE ANGLE BRACKET + {0xA1B7, 0x300B}, //5803 #RIGHT DOUBLE ANGLE BRACKET + {0xA1B8, 0x300C}, //5804 #LEFT CORNER BRACKET + {0xA1B9, 0x300D}, //5805 #RIGHT CORNER BRACKET + {0xA1BA, 0x300E}, //5806 #LEFT WHITE CORNER BRACKET + {0xA1BB, 0x300F}, //5807 #RIGHT WHITE CORNER BRACKET + {0xA1BC, 0x3010}, //5808 #LEFT BLACK LENTICULAR BRACKET + {0xA1BD, 0x3011}, //5809 #RIGHT BLACK LENTICULAR BRACKET + {0xA1BE, 0x00B1}, //5810 #PLUS-MINUS SIGN + {0xA1BF, 0x00D7}, //5811 #MULTIPLICATION SIGN + {0xA1C0, 0x00F7}, //5812 #DIVISION SIGN + {0xA1C1, 0x2260}, //5813 #NOT EQUAL TO + {0xA1C2, 0x2264}, //5814 #LESS-THAN OR EQUAL TO + {0xA1C3, 0x2265}, //5815 #GREATER-THAN OR EQUAL TO + {0xA1C4, 0x221E}, //5816 #INFINITY + {0xA1C5, 0x2234}, //5817 #THEREFORE + {0xA1C6, 0x00B0}, //5818 #DEGREE SIGN + {0xA1C7, 0x2032}, //5819 #PRIME + {0xA1C8, 0x2033}, //5820 #DOUBLE PRIME + {0xA1C9, 0x2103}, //5821 #DEGREE CELSIUS + {0xA1CA, 0x212B}, //5822 #ANGSTROM SIGN + {0xA1CB, 0xFFE0}, //5823 #FULLWIDTH CENT SIGN + {0xA1CC, 0xFFE1}, //5824 #FULLWIDTH POUND SIGN + {0xA1CD, 0xFFE5}, //5825 #FULLWIDTH YEN SIGN + {0xA1CE, 0x2642}, //5826 #MALE SIGN + {0xA1CF, 0x2640}, //5827 #FEMALE SIGN + {0xA1D0, 0x2220}, //5828 #ANGLE + {0xA1D1, 0x22A5}, //5829 #UP TACK + {0xA1D2, 0x2312}, //5830 #ARC + {0xA1D3, 0x2202}, //5831 #PARTIAL DIFFERENTIAL + {0xA1D4, 0x2207}, //5832 #NABLA + {0xA1D5, 0x2261}, //5833 #IDENTICAL TO + {0xA1D6, 0x2252}, //5834 #APPROXIMATELY EQUAL TO OR THE IMAGE OF + {0xA1D7, 0x00A7}, //5835 #SECTION SIGN + {0xA1D8, 0x203B}, //5836 #REFERENCE MARK + {0xA1D9, 0x2606}, //5837 #WHITE STAR + {0xA1DA, 0x2605}, //5838 #BLACK STAR + {0xA1DB, 0x25CB}, //5839 #WHITE CIRCLE + {0xA1DC, 0x25CF}, //5840 #BLACK CIRCLE + {0xA1DD, 0x25CE}, //5841 #BULLSEYE + {0xA1DE, 0x25C7}, //5842 #WHITE DIAMOND + {0xA1DF, 0x25C6}, //5843 #BLACK DIAMOND + {0xA1E0, 0x25A1}, //5844 #WHITE SQUARE + {0xA1E1, 0x25A0}, //5845 #BLACK SQUARE + {0xA1E2, 0x25B3}, //5846 #WHITE UP-POINTING TRIANGLE + {0xA1E3, 0x25B2}, //5847 #BLACK UP-POINTING TRIANGLE + {0xA1E4, 0x25BD}, //5848 #WHITE DOWN-POINTING TRIANGLE + {0xA1E5, 0x25BC}, //5849 #BLACK DOWN-POINTING TRIANGLE + {0xA1E6, 0x2192}, //5850 #RIGHTWARDS ARROW + {0xA1E7, 0x2190}, //5851 #LEFTWARDS ARROW + {0xA1E8, 0x2191}, //5852 #UPWARDS ARROW + {0xA1E9, 0x2193}, //5853 #DOWNWARDS ARROW + {0xA1EA, 0x2194}, //5854 #LEFT RIGHT ARROW + {0xA1EB, 0x3013}, //5855 #GETA MARK + {0xA1EC, 0x226A}, //5856 #MUCH LESS-THAN + {0xA1ED, 0x226B}, //5857 #MUCH GREATER-THAN + {0xA1EE, 0x221A}, //5858 #SQUARE ROOT + {0xA1EF, 0x223D}, //5859 #REVERSED TILDE + {0xA1F0, 0x221D}, //5860 #PROPORTIONAL TO + {0xA1F1, 0x2235}, //5861 #BECAUSE + {0xA1F2, 0x222B}, //5862 #INTEGRAL + {0xA1F3, 0x222C}, //5863 #DOUBLE INTEGRAL + {0xA1F4, 0x2208}, //5864 #ELEMENT OF + {0xA1F5, 0x220B}, //5865 #CONTAINS AS MEMBER + {0xA1F6, 0x2286}, //5866 #SUBSET OF OR EQUAL TO + {0xA1F7, 0x2287}, //5867 #SUPERSET OF OR EQUAL TO + {0xA1F8, 0x2282}, //5868 #SUBSET OF + {0xA1F9, 0x2283}, //5869 #SUPERSET OF + {0xA1FA, 0x222A}, //5870 #UNION + {0xA1FB, 0x2229}, //5871 #INTERSECTION + {0xA1FC, 0x2227}, //5872 #LOGICAL AND + {0xA1FD, 0x2228}, //5873 #LOGICAL OR + {0xA1FE, 0xFFE2}, //5874 #FULLWIDTH NOT SIGN + {0xA241, 0xC910}, //5875 #HANGUL SYLLABLE CIEUC U SSANGSIOS + {0xA242, 0xC912}, //5876 #HANGUL SYLLABLE CIEUC U CIEUC + {0xA243, 0xC913}, //5877 #HANGUL SYLLABLE CIEUC U CHIEUCH + {0xA244, 0xC914}, //5878 #HANGUL SYLLABLE CIEUC U KHIEUKH + {0xA245, 0xC915}, //5879 #HANGUL SYLLABLE CIEUC U THIEUTH + {0xA246, 0xC916}, //5880 #HANGUL SYLLABLE CIEUC U PHIEUPH + {0xA247, 0xC917}, //5881 #HANGUL SYLLABLE CIEUC U HIEUH + {0xA248, 0xC919}, //5882 #HANGUL SYLLABLE CIEUC WEO KIYEOK + {0xA249, 0xC91A}, //5883 #HANGUL SYLLABLE CIEUC WEO SSANGKIYEOK + {0xA24A, 0xC91B}, //5884 #HANGUL SYLLABLE CIEUC WEO KIYEOKSIOS + {0xA24B, 0xC91C}, //5885 #HANGUL SYLLABLE CIEUC WEO NIEUN + {0xA24C, 0xC91D}, //5886 #HANGUL SYLLABLE CIEUC WEO NIEUNCIEUC + {0xA24D, 0xC91E}, //5887 #HANGUL SYLLABLE CIEUC WEO NIEUNHIEUH + {0xA24E, 0xC91F}, //5888 #HANGUL SYLLABLE CIEUC WEO TIKEUT + {0xA24F, 0xC920}, //5889 #HANGUL SYLLABLE CIEUC WEO RIEUL + {0xA250, 0xC921}, //5890 #HANGUL SYLLABLE CIEUC WEO RIEULKIYEOK + {0xA251, 0xC922}, //5891 #HANGUL SYLLABLE CIEUC WEO RIEULMIEUM + {0xA252, 0xC923}, //5892 #HANGUL SYLLABLE CIEUC WEO RIEULPIEUP + {0xA253, 0xC924}, //5893 #HANGUL SYLLABLE CIEUC WEO RIEULSIOS + {0xA254, 0xC925}, //5894 #HANGUL SYLLABLE CIEUC WEO RIEULTHIEUTH + {0xA255, 0xC926}, //5895 #HANGUL SYLLABLE CIEUC WEO RIEULPHIEUPH + {0xA256, 0xC927}, //5896 #HANGUL SYLLABLE CIEUC WEO RIEULHIEUH + {0xA257, 0xC928}, //5897 #HANGUL SYLLABLE CIEUC WEO MIEUM + {0xA258, 0xC929}, //5898 #HANGUL SYLLABLE CIEUC WEO PIEUP + {0xA259, 0xC92A}, //5899 #HANGUL SYLLABLE CIEUC WEO PIEUPSIOS + {0xA25A, 0xC92B}, //5900 #HANGUL SYLLABLE CIEUC WEO SIOS + {0xA261, 0xC92D}, //5901 #HANGUL SYLLABLE CIEUC WEO IEUNG + {0xA262, 0xC92E}, //5902 #HANGUL SYLLABLE CIEUC WEO CIEUC + {0xA263, 0xC92F}, //5903 #HANGUL SYLLABLE CIEUC WEO CHIEUCH + {0xA264, 0xC930}, //5904 #HANGUL SYLLABLE CIEUC WEO KHIEUKH + {0xA265, 0xC931}, //5905 #HANGUL SYLLABLE CIEUC WEO THIEUTH + {0xA266, 0xC932}, //5906 #HANGUL SYLLABLE CIEUC WEO PHIEUPH + {0xA267, 0xC933}, //5907 #HANGUL SYLLABLE CIEUC WEO HIEUH + {0xA268, 0xC935}, //5908 #HANGUL SYLLABLE CIEUC WE KIYEOK + {0xA269, 0xC936}, //5909 #HANGUL SYLLABLE CIEUC WE SSANGKIYEOK + {0xA26A, 0xC937}, //5910 #HANGUL SYLLABLE CIEUC WE KIYEOKSIOS + {0xA26B, 0xC938}, //5911 #HANGUL SYLLABLE CIEUC WE NIEUN + {0xA26C, 0xC939}, //5912 #HANGUL SYLLABLE CIEUC WE NIEUNCIEUC + {0xA26D, 0xC93A}, //5913 #HANGUL SYLLABLE CIEUC WE NIEUNHIEUH + {0xA26E, 0xC93B}, //5914 #HANGUL SYLLABLE CIEUC WE TIKEUT + {0xA26F, 0xC93C}, //5915 #HANGUL SYLLABLE CIEUC WE RIEUL + {0xA270, 0xC93D}, //5916 #HANGUL SYLLABLE CIEUC WE RIEULKIYEOK + {0xA271, 0xC93E}, //5917 #HANGUL SYLLABLE CIEUC WE RIEULMIEUM + {0xA272, 0xC93F}, //5918 #HANGUL SYLLABLE CIEUC WE RIEULPIEUP + {0xA273, 0xC940}, //5919 #HANGUL SYLLABLE CIEUC WE RIEULSIOS + {0xA274, 0xC941}, //5920 #HANGUL SYLLABLE CIEUC WE RIEULTHIEUTH + {0xA275, 0xC942}, //5921 #HANGUL SYLLABLE CIEUC WE RIEULPHIEUPH + {0xA276, 0xC943}, //5922 #HANGUL SYLLABLE CIEUC WE RIEULHIEUH + {0xA277, 0xC944}, //5923 #HANGUL SYLLABLE CIEUC WE MIEUM + {0xA278, 0xC945}, //5924 #HANGUL SYLLABLE CIEUC WE PIEUP + {0xA279, 0xC946}, //5925 #HANGUL SYLLABLE CIEUC WE PIEUPSIOS + {0xA27A, 0xC947}, //5926 #HANGUL SYLLABLE CIEUC WE SIOS + {0xA281, 0xC948}, //5927 #HANGUL SYLLABLE CIEUC WE SSANGSIOS + {0xA282, 0xC949}, //5928 #HANGUL SYLLABLE CIEUC WE IEUNG + {0xA283, 0xC94A}, //5929 #HANGUL SYLLABLE CIEUC WE CIEUC + {0xA284, 0xC94B}, //5930 #HANGUL SYLLABLE CIEUC WE CHIEUCH + {0xA285, 0xC94C}, //5931 #HANGUL SYLLABLE CIEUC WE KHIEUKH + {0xA286, 0xC94D}, //5932 #HANGUL SYLLABLE CIEUC WE THIEUTH + {0xA287, 0xC94E}, //5933 #HANGUL SYLLABLE CIEUC WE PHIEUPH + {0xA288, 0xC94F}, //5934 #HANGUL SYLLABLE CIEUC WE HIEUH + {0xA289, 0xC952}, //5935 #HANGUL SYLLABLE CIEUC WI SSANGKIYEOK + {0xA28A, 0xC953}, //5936 #HANGUL SYLLABLE CIEUC WI KIYEOKSIOS + {0xA28B, 0xC955}, //5937 #HANGUL SYLLABLE CIEUC WI NIEUNCIEUC + {0xA28C, 0xC956}, //5938 #HANGUL SYLLABLE CIEUC WI NIEUNHIEUH + {0xA28D, 0xC957}, //5939 #HANGUL SYLLABLE CIEUC WI TIKEUT + {0xA28E, 0xC959}, //5940 #HANGUL SYLLABLE CIEUC WI RIEULKIYEOK + {0xA28F, 0xC95A}, //5941 #HANGUL SYLLABLE CIEUC WI RIEULMIEUM + {0xA290, 0xC95B}, //5942 #HANGUL SYLLABLE CIEUC WI RIEULPIEUP + {0xA291, 0xC95C}, //5943 #HANGUL SYLLABLE CIEUC WI RIEULSIOS + {0xA292, 0xC95D}, //5944 #HANGUL SYLLABLE CIEUC WI RIEULTHIEUTH + {0xA293, 0xC95E}, //5945 #HANGUL SYLLABLE CIEUC WI RIEULPHIEUPH + {0xA294, 0xC95F}, //5946 #HANGUL SYLLABLE CIEUC WI RIEULHIEUH + {0xA295, 0xC962}, //5947 #HANGUL SYLLABLE CIEUC WI PIEUPSIOS + {0xA296, 0xC964}, //5948 #HANGUL SYLLABLE CIEUC WI SSANGSIOS + {0xA297, 0xC965}, //5949 #HANGUL SYLLABLE CIEUC WI IEUNG + {0xA298, 0xC966}, //5950 #HANGUL SYLLABLE CIEUC WI CIEUC + {0xA299, 0xC967}, //5951 #HANGUL SYLLABLE CIEUC WI CHIEUCH + {0xA29A, 0xC968}, //5952 #HANGUL SYLLABLE CIEUC WI KHIEUKH + {0xA29B, 0xC969}, //5953 #HANGUL SYLLABLE CIEUC WI THIEUTH + {0xA29C, 0xC96A}, //5954 #HANGUL SYLLABLE CIEUC WI PHIEUPH + {0xA29D, 0xC96B}, //5955 #HANGUL SYLLABLE CIEUC WI HIEUH + {0xA29E, 0xC96D}, //5956 #HANGUL SYLLABLE CIEUC YU KIYEOK + {0xA29F, 0xC96E}, //5957 #HANGUL SYLLABLE CIEUC YU SSANGKIYEOK + {0xA2A0, 0xC96F}, //5958 #HANGUL SYLLABLE CIEUC YU KIYEOKSIOS + {0xA2A1, 0x21D2}, //5959 #RIGHTWARDS DOUBLE ARROW + {0xA2A2, 0x21D4}, //5960 #LEFT RIGHT DOUBLE ARROW + {0xA2A3, 0x2200}, //5961 #FOR ALL + {0xA2A4, 0x2203}, //5962 #THERE EXISTS + {0xA2A5, 0x00B4}, //5963 #ACUTE ACCENT + {0xA2A6, 0xFF5E}, //5964 #FULLWIDTH TILDE + {0xA2A7, 0x02C7}, //5965 #CARON + {0xA2A8, 0x02D8}, //5966 #BREVE + {0xA2A9, 0x02DD}, //5967 #DOUBLE ACUTE ACCENT + {0xA2AA, 0x02DA}, //5968 #RING ABOVE + {0xA2AB, 0x02D9}, //5969 #DOT ABOVE + {0xA2AC, 0x00B8}, //5970 #CEDILLA + {0xA2AD, 0x02DB}, //5971 #OGONEK + {0xA2AE, 0x00A1}, //5972 #INVERTED EXCLAMATION MARK + {0xA2AF, 0x00BF}, //5973 #INVERTED QUESTION MARK + {0xA2B0, 0x02D0}, //5974 #MODIFIER LETTER TRIANGULAR COLON + {0xA2B1, 0x222E}, //5975 #CONTOUR INTEGRAL + {0xA2B2, 0x2211}, //5976 #N-ARY SUMMATION + {0xA2B3, 0x220F}, //5977 #N-ARY PRODUCT + {0xA2B4, 0x00A4}, //5978 #CURRENCY SIGN + {0xA2B5, 0x2109}, //5979 #DEGREE FAHRENHEIT + {0xA2B6, 0x2030}, //5980 #PER MILLE SIGN + {0xA2B7, 0x25C1}, //5981 #WHITE LEFT-POINTING TRIANGLE + {0xA2B8, 0x25C0}, //5982 #BLACK LEFT-POINTING TRIANGLE + {0xA2B9, 0x25B7}, //5983 #WHITE RIGHT-POINTING TRIANGLE + {0xA2BA, 0x25B6}, //5984 #BLACK RIGHT-POINTING TRIANGLE + {0xA2BB, 0x2664}, //5985 #WHITE SPADE SUIT + {0xA2BC, 0x2660}, //5986 #BLACK SPADE SUIT + {0xA2BD, 0x2661}, //5987 #WHITE HEART SUIT + {0xA2BE, 0x2665}, //5988 #BLACK HEART SUIT + {0xA2BF, 0x2667}, //5989 #WHITE CLUB SUIT + {0xA2C0, 0x2663}, //5990 #BLACK CLUB SUIT + {0xA2C1, 0x2299}, //5991 #CIRCLED DOT OPERATOR + {0xA2C2, 0x25C8}, //5992 #WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND + {0xA2C3, 0x25A3}, //5993 #WHITE SQUARE CONTAINING BLACK SMALL SQUARE + {0xA2C4, 0x25D0}, //5994 #CIRCLE WITH LEFT HALF BLACK + {0xA2C5, 0x25D1}, //5995 #CIRCLE WITH RIGHT HALF BLACK + {0xA2C6, 0x2592}, //5996 #MEDIUM SHADE + {0xA2C7, 0x25A4}, //5997 #SQUARE WITH HORIZONTAL FILL + {0xA2C8, 0x25A5}, //5998 #SQUARE WITH VERTICAL FILL + {0xA2C9, 0x25A8}, //5999 #SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL + {0xA2CA, 0x25A7}, //6000 #SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL + {0xA2CB, 0x25A6}, //6001 #SQUARE WITH ORTHOGONAL CROSSHATCH FILL + {0xA2CC, 0x25A9}, //6002 #SQUARE WITH DIAGONAL CROSSHATCH FILL + {0xA2CD, 0x2668}, //6003 #HOT SPRINGS + {0xA2CE, 0x260F}, //6004 #WHITE TELEPHONE + {0xA2CF, 0x260E}, //6005 #BLACK TELEPHONE + {0xA2D0, 0x261C}, //6006 #WHITE LEFT POINTING INDEX + {0xA2D1, 0x261E}, //6007 #WHITE RIGHT POINTING INDEX + {0xA2D2, 0x00B6}, //6008 #PILCROW SIGN + {0xA2D3, 0x2020}, //6009 #DAGGER + {0xA2D4, 0x2021}, //6010 #DOUBLE DAGGER + {0xA2D5, 0x2195}, //6011 #UP DOWN ARROW + {0xA2D6, 0x2197}, //6012 #NORTH EAST ARROW + {0xA2D7, 0x2199}, //6013 #SOUTH WEST ARROW + {0xA2D8, 0x2196}, //6014 #NORTH WEST ARROW + {0xA2D9, 0x2198}, //6015 #SOUTH EAST ARROW + {0xA2DA, 0x266D}, //6016 #MUSIC FLAT SIGN + {0xA2DB, 0x2669}, //6017 #QUARTER NOTE + {0xA2DC, 0x266A}, //6018 #EIGHTH NOTE + {0xA2DD, 0x266C}, //6019 #BEAMED SIXTEENTH NOTES + {0xA2DE, 0x327F}, //6020 #KOREAN STANDARD SYMBOL + {0xA2DF, 0x321C}, //6021 #PARENTHESIZED HANGUL CIEUC U + {0xA2E0, 0x2116}, //6022 #NUMERO SIGN + {0xA2E1, 0x33C7}, //6023 #SQUARE CO + {0xA2E2, 0x2122}, //6024 #TRADE MARK SIGN + {0xA2E3, 0x33C2}, //6025 #SQUARE AM + {0xA2E4, 0x33D8}, //6026 #SQUARE PM + {0xA2E5, 0x2121}, //6027 #TELEPHONE SIGN + {0xA2E6, 0x20AC}, //6028 #EURO SIGN + {0xA2E7, 0x00AE}, //6029 #REGISTERED SIGN + {0xA341, 0xC971}, //6030 #HANGUL SYLLABLE CIEUC YU NIEUNCIEUC + {0xA342, 0xC972}, //6031 #HANGUL SYLLABLE CIEUC YU NIEUNHIEUH + {0xA343, 0xC973}, //6032 #HANGUL SYLLABLE CIEUC YU TIKEUT + {0xA344, 0xC975}, //6033 #HANGUL SYLLABLE CIEUC YU RIEULKIYEOK + {0xA345, 0xC976}, //6034 #HANGUL SYLLABLE CIEUC YU RIEULMIEUM + {0xA346, 0xC977}, //6035 #HANGUL SYLLABLE CIEUC YU RIEULPIEUP + {0xA347, 0xC978}, //6036 #HANGUL SYLLABLE CIEUC YU RIEULSIOS + {0xA348, 0xC979}, //6037 #HANGUL SYLLABLE CIEUC YU RIEULTHIEUTH + {0xA349, 0xC97A}, //6038 #HANGUL SYLLABLE CIEUC YU RIEULPHIEUPH + {0xA34A, 0xC97B}, //6039 #HANGUL SYLLABLE CIEUC YU RIEULHIEUH + {0xA34B, 0xC97D}, //6040 #HANGUL SYLLABLE CIEUC YU PIEUP + {0xA34C, 0xC97E}, //6041 #HANGUL SYLLABLE CIEUC YU PIEUPSIOS + {0xA34D, 0xC97F}, //6042 #HANGUL SYLLABLE CIEUC YU SIOS + {0xA34E, 0xC980}, //6043 #HANGUL SYLLABLE CIEUC YU SSANGSIOS + {0xA34F, 0xC981}, //6044 #HANGUL SYLLABLE CIEUC YU IEUNG + {0xA350, 0xC982}, //6045 #HANGUL SYLLABLE CIEUC YU CIEUC + {0xA351, 0xC983}, //6046 #HANGUL SYLLABLE CIEUC YU CHIEUCH + {0xA352, 0xC984}, //6047 #HANGUL SYLLABLE CIEUC YU KHIEUKH + {0xA353, 0xC985}, //6048 #HANGUL SYLLABLE CIEUC YU THIEUTH + {0xA354, 0xC986}, //6049 #HANGUL SYLLABLE CIEUC YU PHIEUPH + {0xA355, 0xC987}, //6050 #HANGUL SYLLABLE CIEUC YU HIEUH + {0xA356, 0xC98A}, //6051 #HANGUL SYLLABLE CIEUC EU SSANGKIYEOK + {0xA357, 0xC98B}, //6052 #HANGUL SYLLABLE CIEUC EU KIYEOKSIOS + {0xA358, 0xC98D}, //6053 #HANGUL SYLLABLE CIEUC EU NIEUNCIEUC + {0xA359, 0xC98E}, //6054 #HANGUL SYLLABLE CIEUC EU NIEUNHIEUH + {0xA35A, 0xC98F}, //6055 #HANGUL SYLLABLE CIEUC EU TIKEUT + {0xA361, 0xC991}, //6056 #HANGUL SYLLABLE CIEUC EU RIEULKIYEOK + {0xA362, 0xC992}, //6057 #HANGUL SYLLABLE CIEUC EU RIEULMIEUM + {0xA363, 0xC993}, //6058 #HANGUL SYLLABLE CIEUC EU RIEULPIEUP + {0xA364, 0xC994}, //6059 #HANGUL SYLLABLE CIEUC EU RIEULSIOS + {0xA365, 0xC995}, //6060 #HANGUL SYLLABLE CIEUC EU RIEULTHIEUTH + {0xA366, 0xC996}, //6061 #HANGUL SYLLABLE CIEUC EU RIEULPHIEUPH + {0xA367, 0xC997}, //6062 #HANGUL SYLLABLE CIEUC EU RIEULHIEUH + {0xA368, 0xC99A}, //6063 #HANGUL SYLLABLE CIEUC EU PIEUPSIOS + {0xA369, 0xC99C}, //6064 #HANGUL SYLLABLE CIEUC EU SSANGSIOS + {0xA36A, 0xC99E}, //6065 #HANGUL SYLLABLE CIEUC EU CIEUC + {0xA36B, 0xC99F}, //6066 #HANGUL SYLLABLE CIEUC EU CHIEUCH + {0xA36C, 0xC9A0}, //6067 #HANGUL SYLLABLE CIEUC EU KHIEUKH + {0xA36D, 0xC9A1}, //6068 #HANGUL SYLLABLE CIEUC EU THIEUTH + {0xA36E, 0xC9A2}, //6069 #HANGUL SYLLABLE CIEUC EU PHIEUPH + {0xA36F, 0xC9A3}, //6070 #HANGUL SYLLABLE CIEUC EU HIEUH + {0xA370, 0xC9A4}, //6071 #HANGUL SYLLABLE CIEUC YI + {0xA371, 0xC9A5}, //6072 #HANGUL SYLLABLE CIEUC YI KIYEOK + {0xA372, 0xC9A6}, //6073 #HANGUL SYLLABLE CIEUC YI SSANGKIYEOK + {0xA373, 0xC9A7}, //6074 #HANGUL SYLLABLE CIEUC YI KIYEOKSIOS + {0xA374, 0xC9A8}, //6075 #HANGUL SYLLABLE CIEUC YI NIEUN + {0xA375, 0xC9A9}, //6076 #HANGUL SYLLABLE CIEUC YI NIEUNCIEUC + {0xA376, 0xC9AA}, //6077 #HANGUL SYLLABLE CIEUC YI NIEUNHIEUH + {0xA377, 0xC9AB}, //6078 #HANGUL SYLLABLE CIEUC YI TIKEUT + {0xA378, 0xC9AC}, //6079 #HANGUL SYLLABLE CIEUC YI RIEUL + {0xA379, 0xC9AD}, //6080 #HANGUL SYLLABLE CIEUC YI RIEULKIYEOK + {0xA37A, 0xC9AE}, //6081 #HANGUL SYLLABLE CIEUC YI RIEULMIEUM + {0xA381, 0xC9AF}, //6082 #HANGUL SYLLABLE CIEUC YI RIEULPIEUP + {0xA382, 0xC9B0}, //6083 #HANGUL SYLLABLE CIEUC YI RIEULSIOS + {0xA383, 0xC9B1}, //6084 #HANGUL SYLLABLE CIEUC YI RIEULTHIEUTH + {0xA384, 0xC9B2}, //6085 #HANGUL SYLLABLE CIEUC YI RIEULPHIEUPH + {0xA385, 0xC9B3}, //6086 #HANGUL SYLLABLE CIEUC YI RIEULHIEUH + {0xA386, 0xC9B4}, //6087 #HANGUL SYLLABLE CIEUC YI MIEUM + {0xA387, 0xC9B5}, //6088 #HANGUL SYLLABLE CIEUC YI PIEUP + {0xA388, 0xC9B6}, //6089 #HANGUL SYLLABLE CIEUC YI PIEUPSIOS + {0xA389, 0xC9B7}, //6090 #HANGUL SYLLABLE CIEUC YI SIOS + {0xA38A, 0xC9B8}, //6091 #HANGUL SYLLABLE CIEUC YI SSANGSIOS + {0xA38B, 0xC9B9}, //6092 #HANGUL SYLLABLE CIEUC YI IEUNG + {0xA38C, 0xC9BA}, //6093 #HANGUL SYLLABLE CIEUC YI CIEUC + {0xA38D, 0xC9BB}, //6094 #HANGUL SYLLABLE CIEUC YI CHIEUCH + {0xA38E, 0xC9BC}, //6095 #HANGUL SYLLABLE CIEUC YI KHIEUKH + {0xA38F, 0xC9BD}, //6096 #HANGUL SYLLABLE CIEUC YI THIEUTH + {0xA390, 0xC9BE}, //6097 #HANGUL SYLLABLE CIEUC YI PHIEUPH + {0xA391, 0xC9BF}, //6098 #HANGUL SYLLABLE CIEUC YI HIEUH + {0xA392, 0xC9C2}, //6099 #HANGUL SYLLABLE CIEUC I SSANGKIYEOK + {0xA393, 0xC9C3}, //6100 #HANGUL SYLLABLE CIEUC I KIYEOKSIOS + {0xA394, 0xC9C5}, //6101 #HANGUL SYLLABLE CIEUC I NIEUNCIEUC + {0xA395, 0xC9C6}, //6102 #HANGUL SYLLABLE CIEUC I NIEUNHIEUH + {0xA396, 0xC9C9}, //6103 #HANGUL SYLLABLE CIEUC I RIEULKIYEOK + {0xA397, 0xC9CB}, //6104 #HANGUL SYLLABLE CIEUC I RIEULPIEUP + {0xA398, 0xC9CC}, //6105 #HANGUL SYLLABLE CIEUC I RIEULSIOS + {0xA399, 0xC9CD}, //6106 #HANGUL SYLLABLE CIEUC I RIEULTHIEUTH + {0xA39A, 0xC9CE}, //6107 #HANGUL SYLLABLE CIEUC I RIEULPHIEUPH + {0xA39B, 0xC9CF}, //6108 #HANGUL SYLLABLE CIEUC I RIEULHIEUH + {0xA39C, 0xC9D2}, //6109 #HANGUL SYLLABLE CIEUC I PIEUPSIOS + {0xA39D, 0xC9D4}, //6110 #HANGUL SYLLABLE CIEUC I SSANGSIOS + {0xA39E, 0xC9D7}, //6111 #HANGUL SYLLABLE CIEUC I CHIEUCH + {0xA39F, 0xC9D8}, //6112 #HANGUL SYLLABLE CIEUC I KHIEUKH + {0xA3A0, 0xC9DB}, //6113 #HANGUL SYLLABLE CIEUC I HIEUH + {0xA3A1, 0xFF01}, //6114 #FULLWIDTH EXCLAMATION MARK + {0xA3A2, 0xFF02}, //6115 #FULLWIDTH QUOTATION MARK + {0xA3A3, 0xFF03}, //6116 #FULLWIDTH NUMBER SIGN + {0xA3A4, 0xFF04}, //6117 #FULLWIDTH DOLLAR SIGN + {0xA3A5, 0xFF05}, //6118 #FULLWIDTH PERCENT SIGN + {0xA3A6, 0xFF06}, //6119 #FULLWIDTH AMPERSAND + {0xA3A7, 0xFF07}, //6120 #FULLWIDTH APOSTROPHE + {0xA3A8, 0xFF08}, //6121 #FULLWIDTH LEFT PARENTHESIS + {0xA3A9, 0xFF09}, //6122 #FULLWIDTH RIGHT PARENTHESIS + {0xA3AA, 0xFF0A}, //6123 #FULLWIDTH ASTERISK + {0xA3AB, 0xFF0B}, //6124 #FULLWIDTH PLUS SIGN + {0xA3AC, 0xFF0C}, //6125 #FULLWIDTH COMMA + {0xA3AD, 0xFF0D}, //6126 #FULLWIDTH HYPHEN-MINUS + {0xA3AE, 0xFF0E}, //6127 #FULLWIDTH FULL STOP + {0xA3AF, 0xFF0F}, //6128 #FULLWIDTH SOLIDUS + {0xA3B0, 0xFF10}, //6129 #FULLWIDTH DIGIT ZERO + {0xA3B1, 0xFF11}, //6130 #FULLWIDTH DIGIT ONE + {0xA3B2, 0xFF12}, //6131 #FULLWIDTH DIGIT TWO + {0xA3B3, 0xFF13}, //6132 #FULLWIDTH DIGIT THREE + {0xA3B4, 0xFF14}, //6133 #FULLWIDTH DIGIT FOUR + {0xA3B5, 0xFF15}, //6134 #FULLWIDTH DIGIT FIVE + {0xA3B6, 0xFF16}, //6135 #FULLWIDTH DIGIT SIX + {0xA3B7, 0xFF17}, //6136 #FULLWIDTH DIGIT SEVEN + {0xA3B8, 0xFF18}, //6137 #FULLWIDTH DIGIT EIGHT + {0xA3B9, 0xFF19}, //6138 #FULLWIDTH DIGIT NINE + {0xA3BA, 0xFF1A}, //6139 #FULLWIDTH COLON + {0xA3BB, 0xFF1B}, //6140 #FULLWIDTH SEMICOLON + {0xA3BC, 0xFF1C}, //6141 #FULLWIDTH LESS-THAN SIGN + {0xA3BD, 0xFF1D}, //6142 #FULLWIDTH EQUALS SIGN + {0xA3BE, 0xFF1E}, //6143 #FULLWIDTH GREATER-THAN SIGN + {0xA3BF, 0xFF1F}, //6144 #FULLWIDTH QUESTION MARK + {0xA3C0, 0xFF20}, //6145 #FULLWIDTH COMMERCIAL AT + {0xA3C1, 0xFF21}, //6146 #FULLWIDTH LATIN CAPITAL LETTER A + {0xA3C2, 0xFF22}, //6147 #FULLWIDTH LATIN CAPITAL LETTER B + {0xA3C3, 0xFF23}, //6148 #FULLWIDTH LATIN CAPITAL LETTER C + {0xA3C4, 0xFF24}, //6149 #FULLWIDTH LATIN CAPITAL LETTER D + {0xA3C5, 0xFF25}, //6150 #FULLWIDTH LATIN CAPITAL LETTER E + {0xA3C6, 0xFF26}, //6151 #FULLWIDTH LATIN CAPITAL LETTER F + {0xA3C7, 0xFF27}, //6152 #FULLWIDTH LATIN CAPITAL LETTER G + {0xA3C8, 0xFF28}, //6153 #FULLWIDTH LATIN CAPITAL LETTER H + {0xA3C9, 0xFF29}, //6154 #FULLWIDTH LATIN CAPITAL LETTER I + {0xA3CA, 0xFF2A}, //6155 #FULLWIDTH LATIN CAPITAL LETTER J + {0xA3CB, 0xFF2B}, //6156 #FULLWIDTH LATIN CAPITAL LETTER K + {0xA3CC, 0xFF2C}, //6157 #FULLWIDTH LATIN CAPITAL LETTER L + {0xA3CD, 0xFF2D}, //6158 #FULLWIDTH LATIN CAPITAL LETTER M + {0xA3CE, 0xFF2E}, //6159 #FULLWIDTH LATIN CAPITAL LETTER N + {0xA3CF, 0xFF2F}, //6160 #FULLWIDTH LATIN CAPITAL LETTER O + {0xA3D0, 0xFF30}, //6161 #FULLWIDTH LATIN CAPITAL LETTER P + {0xA3D1, 0xFF31}, //6162 #FULLWIDTH LATIN CAPITAL LETTER Q + {0xA3D2, 0xFF32}, //6163 #FULLWIDTH LATIN CAPITAL LETTER R + {0xA3D3, 0xFF33}, //6164 #FULLWIDTH LATIN CAPITAL LETTER S + {0xA3D4, 0xFF34}, //6165 #FULLWIDTH LATIN CAPITAL LETTER T + {0xA3D5, 0xFF35}, //6166 #FULLWIDTH LATIN CAPITAL LETTER U + {0xA3D6, 0xFF36}, //6167 #FULLWIDTH LATIN CAPITAL LETTER V + {0xA3D7, 0xFF37}, //6168 #FULLWIDTH LATIN CAPITAL LETTER W + {0xA3D8, 0xFF38}, //6169 #FULLWIDTH LATIN CAPITAL LETTER X + {0xA3D9, 0xFF39}, //6170 #FULLWIDTH LATIN CAPITAL LETTER Y + {0xA3DA, 0xFF3A}, //6171 #FULLWIDTH LATIN CAPITAL LETTER Z + {0xA3DB, 0xFF3B}, //6172 #FULLWIDTH LEFT SQUARE BRACKET + {0xA3DC, 0xFFE6}, //6173 #FULLWIDTH WON SIGN + {0xA3DD, 0xFF3D}, //6174 #FULLWIDTH RIGHT SQUARE BRACKET + {0xA3DE, 0xFF3E}, //6175 #FULLWIDTH CIRCUMFLEX ACCENT + {0xA3DF, 0xFF3F}, //6176 #FULLWIDTH LOW LINE + {0xA3E0, 0xFF40}, //6177 #FULLWIDTH GRAVE ACCENT + {0xA3E1, 0xFF41}, //6178 #FULLWIDTH LATIN SMALL LETTER A + {0xA3E2, 0xFF42}, //6179 #FULLWIDTH LATIN SMALL LETTER B + {0xA3E3, 0xFF43}, //6180 #FULLWIDTH LATIN SMALL LETTER C + {0xA3E4, 0xFF44}, //6181 #FULLWIDTH LATIN SMALL LETTER D + {0xA3E5, 0xFF45}, //6182 #FULLWIDTH LATIN SMALL LETTER E + {0xA3E6, 0xFF46}, //6183 #FULLWIDTH LATIN SMALL LETTER F + {0xA3E7, 0xFF47}, //6184 #FULLWIDTH LATIN SMALL LETTER G + {0xA3E8, 0xFF48}, //6185 #FULLWIDTH LATIN SMALL LETTER H + {0xA3E9, 0xFF49}, //6186 #FULLWIDTH LATIN SMALL LETTER I + {0xA3EA, 0xFF4A}, //6187 #FULLWIDTH LATIN SMALL LETTER J + {0xA3EB, 0xFF4B}, //6188 #FULLWIDTH LATIN SMALL LETTER K + {0xA3EC, 0xFF4C}, //6189 #FULLWIDTH LATIN SMALL LETTER L + {0xA3ED, 0xFF4D}, //6190 #FULLWIDTH LATIN SMALL LETTER M + {0xA3EE, 0xFF4E}, //6191 #FULLWIDTH LATIN SMALL LETTER N + {0xA3EF, 0xFF4F}, //6192 #FULLWIDTH LATIN SMALL LETTER O + {0xA3F0, 0xFF50}, //6193 #FULLWIDTH LATIN SMALL LETTER P + {0xA3F1, 0xFF51}, //6194 #FULLWIDTH LATIN SMALL LETTER Q + {0xA3F2, 0xFF52}, //6195 #FULLWIDTH LATIN SMALL LETTER R + {0xA3F3, 0xFF53}, //6196 #FULLWIDTH LATIN SMALL LETTER S + {0xA3F4, 0xFF54}, //6197 #FULLWIDTH LATIN SMALL LETTER T + {0xA3F5, 0xFF55}, //6198 #FULLWIDTH LATIN SMALL LETTER U + {0xA3F6, 0xFF56}, //6199 #FULLWIDTH LATIN SMALL LETTER V + {0xA3F7, 0xFF57}, //6200 #FULLWIDTH LATIN SMALL LETTER W + {0xA3F8, 0xFF58}, //6201 #FULLWIDTH LATIN SMALL LETTER X + {0xA3F9, 0xFF59}, //6202 #FULLWIDTH LATIN SMALL LETTER Y + {0xA3FA, 0xFF5A}, //6203 #FULLWIDTH LATIN SMALL LETTER Z + {0xA3FB, 0xFF5B}, //6204 #FULLWIDTH LEFT CURLY BRACKET + {0xA3FC, 0xFF5C}, //6205 #FULLWIDTH VERTICAL LINE + {0xA3FD, 0xFF5D}, //6206 #FULLWIDTH RIGHT CURLY BRACKET + {0xA3FE, 0xFFE3}, //6207 #FULLWIDTH MACRON + {0xA441, 0xC9DE}, //6208 #HANGUL SYLLABLE SSANGCIEUC A SSANGKIYEOK + {0xA442, 0xC9DF}, //6209 #HANGUL SYLLABLE SSANGCIEUC A KIYEOKSIOS + {0xA443, 0xC9E1}, //6210 #HANGUL SYLLABLE SSANGCIEUC A NIEUNCIEUC + {0xA444, 0xC9E3}, //6211 #HANGUL SYLLABLE SSANGCIEUC A TIKEUT + {0xA445, 0xC9E5}, //6212 #HANGUL SYLLABLE SSANGCIEUC A RIEULKIYEOK + {0xA446, 0xC9E6}, //6213 #HANGUL SYLLABLE SSANGCIEUC A RIEULMIEUM + {0xA447, 0xC9E8}, //6214 #HANGUL SYLLABLE SSANGCIEUC A RIEULSIOS + {0xA448, 0xC9E9}, //6215 #HANGUL SYLLABLE SSANGCIEUC A RIEULTHIEUTH + {0xA449, 0xC9EA}, //6216 #HANGUL SYLLABLE SSANGCIEUC A RIEULPHIEUPH + {0xA44A, 0xC9EB}, //6217 #HANGUL SYLLABLE SSANGCIEUC A RIEULHIEUH + {0xA44B, 0xC9EE}, //6218 #HANGUL SYLLABLE SSANGCIEUC A PIEUPSIOS + {0xA44C, 0xC9F2}, //6219 #HANGUL SYLLABLE SSANGCIEUC A CIEUC + {0xA44D, 0xC9F3}, //6220 #HANGUL SYLLABLE SSANGCIEUC A CHIEUCH + {0xA44E, 0xC9F4}, //6221 #HANGUL SYLLABLE SSANGCIEUC A KHIEUKH + {0xA44F, 0xC9F5}, //6222 #HANGUL SYLLABLE SSANGCIEUC A THIEUTH + {0xA450, 0xC9F6}, //6223 #HANGUL SYLLABLE SSANGCIEUC A PHIEUPH + {0xA451, 0xC9F7}, //6224 #HANGUL SYLLABLE SSANGCIEUC A HIEUH + {0xA452, 0xC9FA}, //6225 #HANGUL SYLLABLE SSANGCIEUC AE SSANGKIYEOK + {0xA453, 0xC9FB}, //6226 #HANGUL SYLLABLE SSANGCIEUC AE KIYEOKSIOS + {0xA454, 0xC9FD}, //6227 #HANGUL SYLLABLE SSANGCIEUC AE NIEUNCIEUC + {0xA455, 0xC9FE}, //6228 #HANGUL SYLLABLE SSANGCIEUC AE NIEUNHIEUH + {0xA456, 0xC9FF}, //6229 #HANGUL SYLLABLE SSANGCIEUC AE TIKEUT + {0xA457, 0xCA01}, //6230 #HANGUL SYLLABLE SSANGCIEUC AE RIEULKIYEOK + {0xA458, 0xCA02}, //6231 #HANGUL SYLLABLE SSANGCIEUC AE RIEULMIEUM + {0xA459, 0xCA03}, //6232 #HANGUL SYLLABLE SSANGCIEUC AE RIEULPIEUP + {0xA45A, 0xCA04}, //6233 #HANGUL SYLLABLE SSANGCIEUC AE RIEULSIOS + {0xA461, 0xCA05}, //6234 #HANGUL SYLLABLE SSANGCIEUC AE RIEULTHIEUTH + {0xA462, 0xCA06}, //6235 #HANGUL SYLLABLE SSANGCIEUC AE RIEULPHIEUPH + {0xA463, 0xCA07}, //6236 #HANGUL SYLLABLE SSANGCIEUC AE RIEULHIEUH + {0xA464, 0xCA0A}, //6237 #HANGUL SYLLABLE SSANGCIEUC AE PIEUPSIOS + {0xA465, 0xCA0E}, //6238 #HANGUL SYLLABLE SSANGCIEUC AE CIEUC + {0xA466, 0xCA0F}, //6239 #HANGUL SYLLABLE SSANGCIEUC AE CHIEUCH + {0xA467, 0xCA10}, //6240 #HANGUL SYLLABLE SSANGCIEUC AE KHIEUKH + {0xA468, 0xCA11}, //6241 #HANGUL SYLLABLE SSANGCIEUC AE THIEUTH + {0xA469, 0xCA12}, //6242 #HANGUL SYLLABLE SSANGCIEUC AE PHIEUPH + {0xA46A, 0xCA13}, //6243 #HANGUL SYLLABLE SSANGCIEUC AE HIEUH + {0xA46B, 0xCA15}, //6244 #HANGUL SYLLABLE SSANGCIEUC YA KIYEOK + {0xA46C, 0xCA16}, //6245 #HANGUL SYLLABLE SSANGCIEUC YA SSANGKIYEOK + {0xA46D, 0xCA17}, //6246 #HANGUL SYLLABLE SSANGCIEUC YA KIYEOKSIOS + {0xA46E, 0xCA19}, //6247 #HANGUL SYLLABLE SSANGCIEUC YA NIEUNCIEUC + {0xA46F, 0xCA1A}, //6248 #HANGUL SYLLABLE SSANGCIEUC YA NIEUNHIEUH + {0xA470, 0xCA1B}, //6249 #HANGUL SYLLABLE SSANGCIEUC YA TIKEUT + {0xA471, 0xCA1C}, //6250 #HANGUL SYLLABLE SSANGCIEUC YA RIEUL + {0xA472, 0xCA1D}, //6251 #HANGUL SYLLABLE SSANGCIEUC YA RIEULKIYEOK + {0xA473, 0xCA1E}, //6252 #HANGUL SYLLABLE SSANGCIEUC YA RIEULMIEUM + {0xA474, 0xCA1F}, //6253 #HANGUL SYLLABLE SSANGCIEUC YA RIEULPIEUP + {0xA475, 0xCA20}, //6254 #HANGUL SYLLABLE SSANGCIEUC YA RIEULSIOS + {0xA476, 0xCA21}, //6255 #HANGUL SYLLABLE SSANGCIEUC YA RIEULTHIEUTH + {0xA477, 0xCA22}, //6256 #HANGUL SYLLABLE SSANGCIEUC YA RIEULPHIEUPH + {0xA478, 0xCA23}, //6257 #HANGUL SYLLABLE SSANGCIEUC YA RIEULHIEUH + {0xA479, 0xCA24}, //6258 #HANGUL SYLLABLE SSANGCIEUC YA MIEUM + {0xA47A, 0xCA25}, //6259 #HANGUL SYLLABLE SSANGCIEUC YA PIEUP + {0xA481, 0xCA26}, //6260 #HANGUL SYLLABLE SSANGCIEUC YA PIEUPSIOS + {0xA482, 0xCA27}, //6261 #HANGUL SYLLABLE SSANGCIEUC YA SIOS + {0xA483, 0xCA28}, //6262 #HANGUL SYLLABLE SSANGCIEUC YA SSANGSIOS + {0xA484, 0xCA2A}, //6263 #HANGUL SYLLABLE SSANGCIEUC YA CIEUC + {0xA485, 0xCA2B}, //6264 #HANGUL SYLLABLE SSANGCIEUC YA CHIEUCH + {0xA486, 0xCA2C}, //6265 #HANGUL SYLLABLE SSANGCIEUC YA KHIEUKH + {0xA487, 0xCA2D}, //6266 #HANGUL SYLLABLE SSANGCIEUC YA THIEUTH + {0xA488, 0xCA2E}, //6267 #HANGUL SYLLABLE SSANGCIEUC YA PHIEUPH + {0xA489, 0xCA2F}, //6268 #HANGUL SYLLABLE SSANGCIEUC YA HIEUH + {0xA48A, 0xCA30}, //6269 #HANGUL SYLLABLE SSANGCIEUC YAE + {0xA48B, 0xCA31}, //6270 #HANGUL SYLLABLE SSANGCIEUC YAE KIYEOK + {0xA48C, 0xCA32}, //6271 #HANGUL SYLLABLE SSANGCIEUC YAE SSANGKIYEOK + {0xA48D, 0xCA33}, //6272 #HANGUL SYLLABLE SSANGCIEUC YAE KIYEOKSIOS + {0xA48E, 0xCA34}, //6273 #HANGUL SYLLABLE SSANGCIEUC YAE NIEUN + {0xA48F, 0xCA35}, //6274 #HANGUL SYLLABLE SSANGCIEUC YAE NIEUNCIEUC + {0xA490, 0xCA36}, //6275 #HANGUL SYLLABLE SSANGCIEUC YAE NIEUNHIEUH + {0xA491, 0xCA37}, //6276 #HANGUL SYLLABLE SSANGCIEUC YAE TIKEUT + {0xA492, 0xCA38}, //6277 #HANGUL SYLLABLE SSANGCIEUC YAE RIEUL + {0xA493, 0xCA39}, //6278 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULKIYEOK + {0xA494, 0xCA3A}, //6279 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULMIEUM + {0xA495, 0xCA3B}, //6280 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULPIEUP + {0xA496, 0xCA3C}, //6281 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULSIOS + {0xA497, 0xCA3D}, //6282 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULTHIEUTH + {0xA498, 0xCA3E}, //6283 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULPHIEUPH + {0xA499, 0xCA3F}, //6284 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULHIEUH + {0xA49A, 0xCA40}, //6285 #HANGUL SYLLABLE SSANGCIEUC YAE MIEUM + {0xA49B, 0xCA41}, //6286 #HANGUL SYLLABLE SSANGCIEUC YAE PIEUP + {0xA49C, 0xCA42}, //6287 #HANGUL SYLLABLE SSANGCIEUC YAE PIEUPSIOS + {0xA49D, 0xCA43}, //6288 #HANGUL SYLLABLE SSANGCIEUC YAE SIOS + {0xA49E, 0xCA44}, //6289 #HANGUL SYLLABLE SSANGCIEUC YAE SSANGSIOS + {0xA49F, 0xCA45}, //6290 #HANGUL SYLLABLE SSANGCIEUC YAE IEUNG + {0xA4A0, 0xCA46}, //6291 #HANGUL SYLLABLE SSANGCIEUC YAE CIEUC + {0xA4A1, 0x3131}, //6292 #HANGUL LETTER KIYEOK + {0xA4A2, 0x3132}, //6293 #HANGUL LETTER SSANGKIYEOK + {0xA4A3, 0x3133}, //6294 #HANGUL LETTER KIYEOK-SIOS + {0xA4A4, 0x3134}, //6295 #HANGUL LETTER NIEUN + {0xA4A5, 0x3135}, //6296 #HANGUL LETTER NIEUN-CIEUC + {0xA4A6, 0x3136}, //6297 #HANGUL LETTER NIEUN-HIEUH + {0xA4A7, 0x3137}, //6298 #HANGUL LETTER TIKEUT + {0xA4A8, 0x3138}, //6299 #HANGUL LETTER SSANGTIKEUT + {0xA4A9, 0x3139}, //6300 #HANGUL LETTER RIEUL + {0xA4AA, 0x313A}, //6301 #HANGUL LETTER RIEUL-KIYEOK + {0xA4AB, 0x313B}, //6302 #HANGUL LETTER RIEUL-MIEUM + {0xA4AC, 0x313C}, //6303 #HANGUL LETTER RIEUL-PIEUP + {0xA4AD, 0x313D}, //6304 #HANGUL LETTER RIEUL-SIOS + {0xA4AE, 0x313E}, //6305 #HANGUL LETTER RIEUL-THIEUTH + {0xA4AF, 0x313F}, //6306 #HANGUL LETTER RIEUL-PHIEUPH + {0xA4B0, 0x3140}, //6307 #HANGUL LETTER RIEUL-HIEUH + {0xA4B1, 0x3141}, //6308 #HANGUL LETTER MIEUM + {0xA4B2, 0x3142}, //6309 #HANGUL LETTER PIEUP + {0xA4B3, 0x3143}, //6310 #HANGUL LETTER SSANGPIEUP + {0xA4B4, 0x3144}, //6311 #HANGUL LETTER PIEUP-SIOS + {0xA4B5, 0x3145}, //6312 #HANGUL LETTER SIOS + {0xA4B6, 0x3146}, //6313 #HANGUL LETTER SSANGSIOS + {0xA4B7, 0x3147}, //6314 #HANGUL LETTER IEUNG + {0xA4B8, 0x3148}, //6315 #HANGUL LETTER CIEUC + {0xA4B9, 0x3149}, //6316 #HANGUL LETTER SSANGCIEUC + {0xA4BA, 0x314A}, //6317 #HANGUL LETTER CHIEUCH + {0xA4BB, 0x314B}, //6318 #HANGUL LETTER KHIEUKH + {0xA4BC, 0x314C}, //6319 #HANGUL LETTER THIEUTH + {0xA4BD, 0x314D}, //6320 #HANGUL LETTER PHIEUPH + {0xA4BE, 0x314E}, //6321 #HANGUL LETTER HIEUH + {0xA4BF, 0x314F}, //6322 #HANGUL LETTER A + {0xA4C0, 0x3150}, //6323 #HANGUL LETTER AE + {0xA4C1, 0x3151}, //6324 #HANGUL LETTER YA + {0xA4C2, 0x3152}, //6325 #HANGUL LETTER YAE + {0xA4C3, 0x3153}, //6326 #HANGUL LETTER EO + {0xA4C4, 0x3154}, //6327 #HANGUL LETTER E + {0xA4C5, 0x3155}, //6328 #HANGUL LETTER YEO + {0xA4C6, 0x3156}, //6329 #HANGUL LETTER YE + {0xA4C7, 0x3157}, //6330 #HANGUL LETTER O + {0xA4C8, 0x3158}, //6331 #HANGUL LETTER WA + {0xA4C9, 0x3159}, //6332 #HANGUL LETTER WAE + {0xA4CA, 0x315A}, //6333 #HANGUL LETTER OE + {0xA4CB, 0x315B}, //6334 #HANGUL LETTER YO + {0xA4CC, 0x315C}, //6335 #HANGUL LETTER U + {0xA4CD, 0x315D}, //6336 #HANGUL LETTER WEO + {0xA4CE, 0x315E}, //6337 #HANGUL LETTER WE + {0xA4CF, 0x315F}, //6338 #HANGUL LETTER WI + {0xA4D0, 0x3160}, //6339 #HANGUL LETTER YU + {0xA4D1, 0x3161}, //6340 #HANGUL LETTER EU + {0xA4D2, 0x3162}, //6341 #HANGUL LETTER YI + {0xA4D3, 0x3163}, //6342 #HANGUL LETTER I + {0xA4D4, 0x3164}, //6343 #HANGUL FILLER + {0xA4D5, 0x3165}, //6344 #HANGUL LETTER SSANGNIEUN + {0xA4D6, 0x3166}, //6345 #HANGUL LETTER NIEUN-TIKEUT + {0xA4D7, 0x3167}, //6346 #HANGUL LETTER NIEUN-SIOS + {0xA4D8, 0x3168}, //6347 #HANGUL LETTER NIEUN-PANSIOS + {0xA4D9, 0x3169}, //6348 #HANGUL LETTER RIEUL-KIYEOK-SIOS + {0xA4DA, 0x316A}, //6349 #HANGUL LETTER RIEUL-TIKEUT + {0xA4DB, 0x316B}, //6350 #HANGUL LETTER RIEUL-PIEUP-SIOS + {0xA4DC, 0x316C}, //6351 #HANGUL LETTER RIEUL-PANSIOS + {0xA4DD, 0x316D}, //6352 #HANGUL LETTER RIEUL-YEORINHIEUH + {0xA4DE, 0x316E}, //6353 #HANGUL LETTER MIEUM-PIEUP + {0xA4DF, 0x316F}, //6354 #HANGUL LETTER MIEUM-SIOS + {0xA4E0, 0x3170}, //6355 #HANGUL LETTER MIEUM-PANSIOS + {0xA4E1, 0x3171}, //6356 #HANGUL LETTER KAPYEOUNMIEUM + {0xA4E2, 0x3172}, //6357 #HANGUL LETTER PIEUP-KIYEOK + {0xA4E3, 0x3173}, //6358 #HANGUL LETTER PIEUP-TIKEUT + {0xA4E4, 0x3174}, //6359 #HANGUL LETTER PIEUP-SIOS-KIYEOK + {0xA4E5, 0x3175}, //6360 #HANGUL LETTER PIEUP-SIOS-TIKEUT + {0xA4E6, 0x3176}, //6361 #HANGUL LETTER PIEUP-CIEUC + {0xA4E7, 0x3177}, //6362 #HANGUL LETTER PIEUP-THIEUTH + {0xA4E8, 0x3178}, //6363 #HANGUL LETTER KAPYEOUNPIEUP + {0xA4E9, 0x3179}, //6364 #HANGUL LETTER KAPYEOUNSSANGPIEUP + {0xA4EA, 0x317A}, //6365 #HANGUL LETTER SIOS-KIYEOK + {0xA4EB, 0x317B}, //6366 #HANGUL LETTER SIOS-NIEUN + {0xA4EC, 0x317C}, //6367 #HANGUL LETTER SIOS-TIKEUT + {0xA4ED, 0x317D}, //6368 #HANGUL LETTER SIOS-PIEUP + {0xA4EE, 0x317E}, //6369 #HANGUL LETTER SIOS-CIEUC + {0xA4EF, 0x317F}, //6370 #HANGUL LETTER PANSIOS + {0xA4F0, 0x3180}, //6371 #HANGUL LETTER SSANGIEUNG + {0xA4F1, 0x3181}, //6372 #HANGUL LETTER YESIEUNG + {0xA4F2, 0x3182}, //6373 #HANGUL LETTER YESIEUNG-SIOS + {0xA4F3, 0x3183}, //6374 #HANGUL LETTER YESIEUNG-PANSIOS + {0xA4F4, 0x3184}, //6375 #HANGUL LETTER KAPYEOUNPHIEUPH + {0xA4F5, 0x3185}, //6376 #HANGUL LETTER SSANGHIEUH + {0xA4F6, 0x3186}, //6377 #HANGUL LETTER YEORINHIEUH + {0xA4F7, 0x3187}, //6378 #HANGUL LETTER YO-YA + {0xA4F8, 0x3188}, //6379 #HANGUL LETTER YO-YAE + {0xA4F9, 0x3189}, //6380 #HANGUL LETTER YO-I + {0xA4FA, 0x318A}, //6381 #HANGUL LETTER YU-YEO + {0xA4FB, 0x318B}, //6382 #HANGUL LETTER YU-YE + {0xA4FC, 0x318C}, //6383 #HANGUL LETTER YU-I + {0xA4FD, 0x318D}, //6384 #HANGUL LETTER ARAEA + {0xA4FE, 0x318E}, //6385 #HANGUL LETTER ARAEAE + {0xA541, 0xCA47}, //6386 #HANGUL SYLLABLE SSANGCIEUC YAE CHIEUCH + {0xA542, 0xCA48}, //6387 #HANGUL SYLLABLE SSANGCIEUC YAE KHIEUKH + {0xA543, 0xCA49}, //6388 #HANGUL SYLLABLE SSANGCIEUC YAE THIEUTH + {0xA544, 0xCA4A}, //6389 #HANGUL SYLLABLE SSANGCIEUC YAE PHIEUPH + {0xA545, 0xCA4B}, //6390 #HANGUL SYLLABLE SSANGCIEUC YAE HIEUH + {0xA546, 0xCA4E}, //6391 #HANGUL SYLLABLE SSANGCIEUC EO SSANGKIYEOK + {0xA547, 0xCA4F}, //6392 #HANGUL SYLLABLE SSANGCIEUC EO KIYEOKSIOS + {0xA548, 0xCA51}, //6393 #HANGUL SYLLABLE SSANGCIEUC EO NIEUNCIEUC + {0xA549, 0xCA52}, //6394 #HANGUL SYLLABLE SSANGCIEUC EO NIEUNHIEUH + {0xA54A, 0xCA53}, //6395 #HANGUL SYLLABLE SSANGCIEUC EO TIKEUT + {0xA54B, 0xCA55}, //6396 #HANGUL SYLLABLE SSANGCIEUC EO RIEULKIYEOK + {0xA54C, 0xCA56}, //6397 #HANGUL SYLLABLE SSANGCIEUC EO RIEULMIEUM + {0xA54D, 0xCA57}, //6398 #HANGUL SYLLABLE SSANGCIEUC EO RIEULPIEUP + {0xA54E, 0xCA58}, //6399 #HANGUL SYLLABLE SSANGCIEUC EO RIEULSIOS + {0xA54F, 0xCA59}, //6400 #HANGUL SYLLABLE SSANGCIEUC EO RIEULTHIEUTH + {0xA550, 0xCA5A}, //6401 #HANGUL SYLLABLE SSANGCIEUC EO RIEULPHIEUPH + {0xA551, 0xCA5B}, //6402 #HANGUL SYLLABLE SSANGCIEUC EO RIEULHIEUH + {0xA552, 0xCA5E}, //6403 #HANGUL SYLLABLE SSANGCIEUC EO PIEUPSIOS + {0xA553, 0xCA62}, //6404 #HANGUL SYLLABLE SSANGCIEUC EO CIEUC + {0xA554, 0xCA63}, //6405 #HANGUL SYLLABLE SSANGCIEUC EO CHIEUCH + {0xA555, 0xCA64}, //6406 #HANGUL SYLLABLE SSANGCIEUC EO KHIEUKH + {0xA556, 0xCA65}, //6407 #HANGUL SYLLABLE SSANGCIEUC EO THIEUTH + {0xA557, 0xCA66}, //6408 #HANGUL SYLLABLE SSANGCIEUC EO PHIEUPH + {0xA558, 0xCA67}, //6409 #HANGUL SYLLABLE SSANGCIEUC EO HIEUH + {0xA559, 0xCA69}, //6410 #HANGUL SYLLABLE SSANGCIEUC E KIYEOK + {0xA55A, 0xCA6A}, //6411 #HANGUL SYLLABLE SSANGCIEUC E SSANGKIYEOK + {0xA561, 0xCA6B}, //6412 #HANGUL SYLLABLE SSANGCIEUC E KIYEOKSIOS + {0xA562, 0xCA6C}, //6413 #HANGUL SYLLABLE SSANGCIEUC E NIEUN + {0xA563, 0xCA6D}, //6414 #HANGUL SYLLABLE SSANGCIEUC E NIEUNCIEUC + {0xA564, 0xCA6E}, //6415 #HANGUL SYLLABLE SSANGCIEUC E NIEUNHIEUH + {0xA565, 0xCA6F}, //6416 #HANGUL SYLLABLE SSANGCIEUC E TIKEUT + {0xA566, 0xCA70}, //6417 #HANGUL SYLLABLE SSANGCIEUC E RIEUL + {0xA567, 0xCA71}, //6418 #HANGUL SYLLABLE SSANGCIEUC E RIEULKIYEOK + {0xA568, 0xCA72}, //6419 #HANGUL SYLLABLE SSANGCIEUC E RIEULMIEUM + {0xA569, 0xCA73}, //6420 #HANGUL SYLLABLE SSANGCIEUC E RIEULPIEUP + {0xA56A, 0xCA74}, //6421 #HANGUL SYLLABLE SSANGCIEUC E RIEULSIOS + {0xA56B, 0xCA75}, //6422 #HANGUL SYLLABLE SSANGCIEUC E RIEULTHIEUTH + {0xA56C, 0xCA76}, //6423 #HANGUL SYLLABLE SSANGCIEUC E RIEULPHIEUPH + {0xA56D, 0xCA77}, //6424 #HANGUL SYLLABLE SSANGCIEUC E RIEULHIEUH + {0xA56E, 0xCA78}, //6425 #HANGUL SYLLABLE SSANGCIEUC E MIEUM + {0xA56F, 0xCA79}, //6426 #HANGUL SYLLABLE SSANGCIEUC E PIEUP + {0xA570, 0xCA7A}, //6427 #HANGUL SYLLABLE SSANGCIEUC E PIEUPSIOS + {0xA571, 0xCA7B}, //6428 #HANGUL SYLLABLE SSANGCIEUC E SIOS + {0xA572, 0xCA7C}, //6429 #HANGUL SYLLABLE SSANGCIEUC E SSANGSIOS + {0xA573, 0xCA7E}, //6430 #HANGUL SYLLABLE SSANGCIEUC E CIEUC + {0xA574, 0xCA7F}, //6431 #HANGUL SYLLABLE SSANGCIEUC E CHIEUCH + {0xA575, 0xCA80}, //6432 #HANGUL SYLLABLE SSANGCIEUC E KHIEUKH + {0xA576, 0xCA81}, //6433 #HANGUL SYLLABLE SSANGCIEUC E THIEUTH + {0xA577, 0xCA82}, //6434 #HANGUL SYLLABLE SSANGCIEUC E PHIEUPH + {0xA578, 0xCA83}, //6435 #HANGUL SYLLABLE SSANGCIEUC E HIEUH + {0xA579, 0xCA85}, //6436 #HANGUL SYLLABLE SSANGCIEUC YEO KIYEOK + {0xA57A, 0xCA86}, //6437 #HANGUL SYLLABLE SSANGCIEUC YEO SSANGKIYEOK + {0xA581, 0xCA87}, //6438 #HANGUL SYLLABLE SSANGCIEUC YEO KIYEOKSIOS + {0xA582, 0xCA88}, //6439 #HANGUL SYLLABLE SSANGCIEUC YEO NIEUN + {0xA583, 0xCA89}, //6440 #HANGUL SYLLABLE SSANGCIEUC YEO NIEUNCIEUC + {0xA584, 0xCA8A}, //6441 #HANGUL SYLLABLE SSANGCIEUC YEO NIEUNHIEUH + {0xA585, 0xCA8B}, //6442 #HANGUL SYLLABLE SSANGCIEUC YEO TIKEUT + {0xA586, 0xCA8C}, //6443 #HANGUL SYLLABLE SSANGCIEUC YEO RIEUL + {0xA587, 0xCA8D}, //6444 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULKIYEOK + {0xA588, 0xCA8E}, //6445 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULMIEUM + {0xA589, 0xCA8F}, //6446 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULPIEUP + {0xA58A, 0xCA90}, //6447 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULSIOS + {0xA58B, 0xCA91}, //6448 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULTHIEUTH + {0xA58C, 0xCA92}, //6449 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULPHIEUPH + {0xA58D, 0xCA93}, //6450 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULHIEUH + {0xA58E, 0xCA94}, //6451 #HANGUL SYLLABLE SSANGCIEUC YEO MIEUM + {0xA58F, 0xCA95}, //6452 #HANGUL SYLLABLE SSANGCIEUC YEO PIEUP + {0xA590, 0xCA96}, //6453 #HANGUL SYLLABLE SSANGCIEUC YEO PIEUPSIOS + {0xA591, 0xCA97}, //6454 #HANGUL SYLLABLE SSANGCIEUC YEO SIOS + {0xA592, 0xCA99}, //6455 #HANGUL SYLLABLE SSANGCIEUC YEO IEUNG + {0xA593, 0xCA9A}, //6456 #HANGUL SYLLABLE SSANGCIEUC YEO CIEUC + {0xA594, 0xCA9B}, //6457 #HANGUL SYLLABLE SSANGCIEUC YEO CHIEUCH + {0xA595, 0xCA9C}, //6458 #HANGUL SYLLABLE SSANGCIEUC YEO KHIEUKH + {0xA596, 0xCA9D}, //6459 #HANGUL SYLLABLE SSANGCIEUC YEO THIEUTH + {0xA597, 0xCA9E}, //6460 #HANGUL SYLLABLE SSANGCIEUC YEO PHIEUPH + {0xA598, 0xCA9F}, //6461 #HANGUL SYLLABLE SSANGCIEUC YEO HIEUH + {0xA599, 0xCAA0}, //6462 #HANGUL SYLLABLE SSANGCIEUC YE + {0xA59A, 0xCAA1}, //6463 #HANGUL SYLLABLE SSANGCIEUC YE KIYEOK + {0xA59B, 0xCAA2}, //6464 #HANGUL SYLLABLE SSANGCIEUC YE SSANGKIYEOK + {0xA59C, 0xCAA3}, //6465 #HANGUL SYLLABLE SSANGCIEUC YE KIYEOKSIOS + {0xA59D, 0xCAA4}, //6466 #HANGUL SYLLABLE SSANGCIEUC YE NIEUN + {0xA59E, 0xCAA5}, //6467 #HANGUL SYLLABLE SSANGCIEUC YE NIEUNCIEUC + {0xA59F, 0xCAA6}, //6468 #HANGUL SYLLABLE SSANGCIEUC YE NIEUNHIEUH + {0xA5A0, 0xCAA7}, //6469 #HANGUL SYLLABLE SSANGCIEUC YE TIKEUT + {0xA5A1, 0x2170}, //6470 #SMALL ROMAN NUMERAL ONE + {0xA5A2, 0x2171}, //6471 #SMALL ROMAN NUMERAL TWO + {0xA5A3, 0x2172}, //6472 #SMALL ROMAN NUMERAL THREE + {0xA5A4, 0x2173}, //6473 #SMALL ROMAN NUMERAL FOUR + {0xA5A5, 0x2174}, //6474 #SMALL ROMAN NUMERAL FIVE + {0xA5A6, 0x2175}, //6475 #SMALL ROMAN NUMERAL SIX + {0xA5A7, 0x2176}, //6476 #SMALL ROMAN NUMERAL SEVEN + {0xA5A8, 0x2177}, //6477 #SMALL ROMAN NUMERAL EIGHT + {0xA5A9, 0x2178}, //6478 #SMALL ROMAN NUMERAL NINE + {0xA5AA, 0x2179}, //6479 #SMALL ROMAN NUMERAL TEN + {0xA5B0, 0x2160}, //6480 #ROMAN NUMERAL ONE + {0xA5B1, 0x2161}, //6481 #ROMAN NUMERAL TWO + {0xA5B2, 0x2162}, //6482 #ROMAN NUMERAL THREE + {0xA5B3, 0x2163}, //6483 #ROMAN NUMERAL FOUR + {0xA5B4, 0x2164}, //6484 #ROMAN NUMERAL FIVE + {0xA5B5, 0x2165}, //6485 #ROMAN NUMERAL SIX + {0xA5B6, 0x2166}, //6486 #ROMAN NUMERAL SEVEN + {0xA5B7, 0x2167}, //6487 #ROMAN NUMERAL EIGHT + {0xA5B8, 0x2168}, //6488 #ROMAN NUMERAL NINE + {0xA5B9, 0x2169}, //6489 #ROMAN NUMERAL TEN + {0xA5C1, 0x0391}, //6490 #GREEK CAPITAL LETTER ALPHA + {0xA5C2, 0x0392}, //6491 #GREEK CAPITAL LETTER BETA + {0xA5C3, 0x0393}, //6492 #GREEK CAPITAL LETTER GAMMA + {0xA5C4, 0x0394}, //6493 #GREEK CAPITAL LETTER DELTA + {0xA5C5, 0x0395}, //6494 #GREEK CAPITAL LETTER EPSILON + {0xA5C6, 0x0396}, //6495 #GREEK CAPITAL LETTER ZETA + {0xA5C7, 0x0397}, //6496 #GREEK CAPITAL LETTER ETA + {0xA5C8, 0x0398}, //6497 #GREEK CAPITAL LETTER THETA + {0xA5C9, 0x0399}, //6498 #GREEK CAPITAL LETTER IOTA + {0xA5CA, 0x039A}, //6499 #GREEK CAPITAL LETTER KAPPA + {0xA5CB, 0x039B}, //6500 #GREEK CAPITAL LETTER LAMDA + {0xA5CC, 0x039C}, //6501 #GREEK CAPITAL LETTER MU + {0xA5CD, 0x039D}, //6502 #GREEK CAPITAL LETTER NU + {0xA5CE, 0x039E}, //6503 #GREEK CAPITAL LETTER XI + {0xA5CF, 0x039F}, //6504 #GREEK CAPITAL LETTER OMICRON + {0xA5D0, 0x03A0}, //6505 #GREEK CAPITAL LETTER PI + {0xA5D1, 0x03A1}, //6506 #GREEK CAPITAL LETTER RHO + {0xA5D2, 0x03A3}, //6507 #GREEK CAPITAL LETTER SIGMA + {0xA5D3, 0x03A4}, //6508 #GREEK CAPITAL LETTER TAU + {0xA5D4, 0x03A5}, //6509 #GREEK CAPITAL LETTER UPSILON + {0xA5D5, 0x03A6}, //6510 #GREEK CAPITAL LETTER PHI + {0xA5D6, 0x03A7}, //6511 #GREEK CAPITAL LETTER CHI + {0xA5D7, 0x03A8}, //6512 #GREEK CAPITAL LETTER PSI + {0xA5D8, 0x03A9}, //6513 #GREEK CAPITAL LETTER OMEGA + {0xA5E1, 0x03B1}, //6514 #GREEK SMALL LETTER ALPHA + {0xA5E2, 0x03B2}, //6515 #GREEK SMALL LETTER BETA + {0xA5E3, 0x03B3}, //6516 #GREEK SMALL LETTER GAMMA + {0xA5E4, 0x03B4}, //6517 #GREEK SMALL LETTER DELTA + {0xA5E5, 0x03B5}, //6518 #GREEK SMALL LETTER EPSILON + {0xA5E6, 0x03B6}, //6519 #GREEK SMALL LETTER ZETA + {0xA5E7, 0x03B7}, //6520 #GREEK SMALL LETTER ETA + {0xA5E8, 0x03B8}, //6521 #GREEK SMALL LETTER THETA + {0xA5E9, 0x03B9}, //6522 #GREEK SMALL LETTER IOTA + {0xA5EA, 0x03BA}, //6523 #GREEK SMALL LETTER KAPPA + {0xA5EB, 0x03BB}, //6524 #GREEK SMALL LETTER LAMDA + {0xA5EC, 0x03BC}, //6525 #GREEK SMALL LETTER MU + {0xA5ED, 0x03BD}, //6526 #GREEK SMALL LETTER NU + {0xA5EE, 0x03BE}, //6527 #GREEK SMALL LETTER XI + {0xA5EF, 0x03BF}, //6528 #GREEK SMALL LETTER OMICRON + {0xA5F0, 0x03C0}, //6529 #GREEK SMALL LETTER PI + {0xA5F1, 0x03C1}, //6530 #GREEK SMALL LETTER RHO + {0xA5F2, 0x03C3}, //6531 #GREEK SMALL LETTER SIGMA + {0xA5F3, 0x03C4}, //6532 #GREEK SMALL LETTER TAU + {0xA5F4, 0x03C5}, //6533 #GREEK SMALL LETTER UPSILON + {0xA5F5, 0x03C6}, //6534 #GREEK SMALL LETTER PHI + {0xA5F6, 0x03C7}, //6535 #GREEK SMALL LETTER CHI + {0xA5F7, 0x03C8}, //6536 #GREEK SMALL LETTER PSI + {0xA5F8, 0x03C9}, //6537 #GREEK SMALL LETTER OMEGA + {0xA641, 0xCAA8}, //6538 #HANGUL SYLLABLE SSANGCIEUC YE RIEUL + {0xA642, 0xCAA9}, //6539 #HANGUL SYLLABLE SSANGCIEUC YE RIEULKIYEOK + {0xA643, 0xCAAA}, //6540 #HANGUL SYLLABLE SSANGCIEUC YE RIEULMIEUM + {0xA644, 0xCAAB}, //6541 #HANGUL SYLLABLE SSANGCIEUC YE RIEULPIEUP + {0xA645, 0xCAAC}, //6542 #HANGUL SYLLABLE SSANGCIEUC YE RIEULSIOS + {0xA646, 0xCAAD}, //6543 #HANGUL SYLLABLE SSANGCIEUC YE RIEULTHIEUTH + {0xA647, 0xCAAE}, //6544 #HANGUL SYLLABLE SSANGCIEUC YE RIEULPHIEUPH + {0xA648, 0xCAAF}, //6545 #HANGUL SYLLABLE SSANGCIEUC YE RIEULHIEUH + {0xA649, 0xCAB0}, //6546 #HANGUL SYLLABLE SSANGCIEUC YE MIEUM + {0xA64A, 0xCAB1}, //6547 #HANGUL SYLLABLE SSANGCIEUC YE PIEUP + {0xA64B, 0xCAB2}, //6548 #HANGUL SYLLABLE SSANGCIEUC YE PIEUPSIOS + {0xA64C, 0xCAB3}, //6549 #HANGUL SYLLABLE SSANGCIEUC YE SIOS + {0xA64D, 0xCAB4}, //6550 #HANGUL SYLLABLE SSANGCIEUC YE SSANGSIOS + {0xA64E, 0xCAB5}, //6551 #HANGUL SYLLABLE SSANGCIEUC YE IEUNG + {0xA64F, 0xCAB6}, //6552 #HANGUL SYLLABLE SSANGCIEUC YE CIEUC + {0xA650, 0xCAB7}, //6553 #HANGUL SYLLABLE SSANGCIEUC YE CHIEUCH + {0xA651, 0xCAB8}, //6554 #HANGUL SYLLABLE SSANGCIEUC YE KHIEUKH + {0xA652, 0xCAB9}, //6555 #HANGUL SYLLABLE SSANGCIEUC YE THIEUTH + {0xA653, 0xCABA}, //6556 #HANGUL SYLLABLE SSANGCIEUC YE PHIEUPH + {0xA654, 0xCABB}, //6557 #HANGUL SYLLABLE SSANGCIEUC YE HIEUH + {0xA655, 0xCABE}, //6558 #HANGUL SYLLABLE SSANGCIEUC O SSANGKIYEOK + {0xA656, 0xCABF}, //6559 #HANGUL SYLLABLE SSANGCIEUC O KIYEOKSIOS + {0xA657, 0xCAC1}, //6560 #HANGUL SYLLABLE SSANGCIEUC O NIEUNCIEUC + {0xA658, 0xCAC2}, //6561 #HANGUL SYLLABLE SSANGCIEUC O NIEUNHIEUH + {0xA659, 0xCAC3}, //6562 #HANGUL SYLLABLE SSANGCIEUC O TIKEUT + {0xA65A, 0xCAC5}, //6563 #HANGUL SYLLABLE SSANGCIEUC O RIEULKIYEOK + {0xA661, 0xCAC6}, //6564 #HANGUL SYLLABLE SSANGCIEUC O RIEULMIEUM + {0xA662, 0xCAC7}, //6565 #HANGUL SYLLABLE SSANGCIEUC O RIEULPIEUP + {0xA663, 0xCAC8}, //6566 #HANGUL SYLLABLE SSANGCIEUC O RIEULSIOS + {0xA664, 0xCAC9}, //6567 #HANGUL SYLLABLE SSANGCIEUC O RIEULTHIEUTH + {0xA665, 0xCACA}, //6568 #HANGUL SYLLABLE SSANGCIEUC O RIEULPHIEUPH + {0xA666, 0xCACB}, //6569 #HANGUL SYLLABLE SSANGCIEUC O RIEULHIEUH + {0xA667, 0xCACE}, //6570 #HANGUL SYLLABLE SSANGCIEUC O PIEUPSIOS + {0xA668, 0xCAD0}, //6571 #HANGUL SYLLABLE SSANGCIEUC O SSANGSIOS + {0xA669, 0xCAD2}, //6572 #HANGUL SYLLABLE SSANGCIEUC O CIEUC + {0xA66A, 0xCAD4}, //6573 #HANGUL SYLLABLE SSANGCIEUC O KHIEUKH + {0xA66B, 0xCAD5}, //6574 #HANGUL SYLLABLE SSANGCIEUC O THIEUTH + {0xA66C, 0xCAD6}, //6575 #HANGUL SYLLABLE SSANGCIEUC O PHIEUPH + {0xA66D, 0xCAD7}, //6576 #HANGUL SYLLABLE SSANGCIEUC O HIEUH + {0xA66E, 0xCADA}, //6577 #HANGUL SYLLABLE SSANGCIEUC WA SSANGKIYEOK + {0xA66F, 0xCADB}, //6578 #HANGUL SYLLABLE SSANGCIEUC WA KIYEOKSIOS + {0xA670, 0xCADC}, //6579 #HANGUL SYLLABLE SSANGCIEUC WA NIEUN + {0xA671, 0xCADD}, //6580 #HANGUL SYLLABLE SSANGCIEUC WA NIEUNCIEUC + {0xA672, 0xCADE}, //6581 #HANGUL SYLLABLE SSANGCIEUC WA NIEUNHIEUH + {0xA673, 0xCADF}, //6582 #HANGUL SYLLABLE SSANGCIEUC WA TIKEUT + {0xA674, 0xCAE1}, //6583 #HANGUL SYLLABLE SSANGCIEUC WA RIEULKIYEOK + {0xA675, 0xCAE2}, //6584 #HANGUL SYLLABLE SSANGCIEUC WA RIEULMIEUM + {0xA676, 0xCAE3}, //6585 #HANGUL SYLLABLE SSANGCIEUC WA RIEULPIEUP + {0xA677, 0xCAE4}, //6586 #HANGUL SYLLABLE SSANGCIEUC WA RIEULSIOS + {0xA678, 0xCAE5}, //6587 #HANGUL SYLLABLE SSANGCIEUC WA RIEULTHIEUTH + {0xA679, 0xCAE6}, //6588 #HANGUL SYLLABLE SSANGCIEUC WA RIEULPHIEUPH + {0xA67A, 0xCAE7}, //6589 #HANGUL SYLLABLE SSANGCIEUC WA RIEULHIEUH + {0xA681, 0xCAE8}, //6590 #HANGUL SYLLABLE SSANGCIEUC WA MIEUM + {0xA682, 0xCAE9}, //6591 #HANGUL SYLLABLE SSANGCIEUC WA PIEUP + {0xA683, 0xCAEA}, //6592 #HANGUL SYLLABLE SSANGCIEUC WA PIEUPSIOS + {0xA684, 0xCAEB}, //6593 #HANGUL SYLLABLE SSANGCIEUC WA SIOS + {0xA685, 0xCAED}, //6594 #HANGUL SYLLABLE SSANGCIEUC WA IEUNG + {0xA686, 0xCAEE}, //6595 #HANGUL SYLLABLE SSANGCIEUC WA CIEUC + {0xA687, 0xCAEF}, //6596 #HANGUL SYLLABLE SSANGCIEUC WA CHIEUCH + {0xA688, 0xCAF0}, //6597 #HANGUL SYLLABLE SSANGCIEUC WA KHIEUKH + {0xA689, 0xCAF1}, //6598 #HANGUL SYLLABLE SSANGCIEUC WA THIEUTH + {0xA68A, 0xCAF2}, //6599 #HANGUL SYLLABLE SSANGCIEUC WA PHIEUPH + {0xA68B, 0xCAF3}, //6600 #HANGUL SYLLABLE SSANGCIEUC WA HIEUH + {0xA68C, 0xCAF5}, //6601 #HANGUL SYLLABLE SSANGCIEUC WAE KIYEOK + {0xA68D, 0xCAF6}, //6602 #HANGUL SYLLABLE SSANGCIEUC WAE SSANGKIYEOK + {0xA68E, 0xCAF7}, //6603 #HANGUL SYLLABLE SSANGCIEUC WAE KIYEOKSIOS + {0xA68F, 0xCAF8}, //6604 #HANGUL SYLLABLE SSANGCIEUC WAE NIEUN + {0xA690, 0xCAF9}, //6605 #HANGUL SYLLABLE SSANGCIEUC WAE NIEUNCIEUC + {0xA691, 0xCAFA}, //6606 #HANGUL SYLLABLE SSANGCIEUC WAE NIEUNHIEUH + {0xA692, 0xCAFB}, //6607 #HANGUL SYLLABLE SSANGCIEUC WAE TIKEUT + {0xA693, 0xCAFC}, //6608 #HANGUL SYLLABLE SSANGCIEUC WAE RIEUL + {0xA694, 0xCAFD}, //6609 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULKIYEOK + {0xA695, 0xCAFE}, //6610 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULMIEUM + {0xA696, 0xCAFF}, //6611 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULPIEUP + {0xA697, 0xCB00}, //6612 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULSIOS + {0xA698, 0xCB01}, //6613 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULTHIEUTH + {0xA699, 0xCB02}, //6614 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULPHIEUPH + {0xA69A, 0xCB03}, //6615 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULHIEUH + {0xA69B, 0xCB04}, //6616 #HANGUL SYLLABLE SSANGCIEUC WAE MIEUM + {0xA69C, 0xCB05}, //6617 #HANGUL SYLLABLE SSANGCIEUC WAE PIEUP + {0xA69D, 0xCB06}, //6618 #HANGUL SYLLABLE SSANGCIEUC WAE PIEUPSIOS + {0xA69E, 0xCB07}, //6619 #HANGUL SYLLABLE SSANGCIEUC WAE SIOS + {0xA69F, 0xCB09}, //6620 #HANGUL SYLLABLE SSANGCIEUC WAE IEUNG + {0xA6A0, 0xCB0A}, //6621 #HANGUL SYLLABLE SSANGCIEUC WAE CIEUC + {0xA6A1, 0x2500}, //6622 #BOX DRAWINGS LIGHT HORIZONTAL + {0xA6A2, 0x2502}, //6623 #BOX DRAWINGS LIGHT VERTICAL + {0xA6A3, 0x250C}, //6624 #BOX DRAWINGS LIGHT DOWN AND RIGHT + {0xA6A4, 0x2510}, //6625 #BOX DRAWINGS LIGHT DOWN AND LEFT + {0xA6A5, 0x2518}, //6626 #BOX DRAWINGS LIGHT UP AND LEFT + {0xA6A6, 0x2514}, //6627 #BOX DRAWINGS LIGHT UP AND RIGHT + {0xA6A7, 0x251C}, //6628 #BOX DRAWINGS LIGHT VERTICAL AND RIGHT + {0xA6A8, 0x252C}, //6629 #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + {0xA6A9, 0x2524}, //6630 #BOX DRAWINGS LIGHT VERTICAL AND LEFT + {0xA6AA, 0x2534}, //6631 #BOX DRAWINGS LIGHT UP AND HORIZONTAL + {0xA6AB, 0x253C}, //6632 #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + {0xA6AC, 0x2501}, //6633 #BOX DRAWINGS HEAVY HORIZONTAL + {0xA6AD, 0x2503}, //6634 #BOX DRAWINGS HEAVY VERTICAL + {0xA6AE, 0x250F}, //6635 #BOX DRAWINGS HEAVY DOWN AND RIGHT + {0xA6AF, 0x2513}, //6636 #BOX DRAWINGS HEAVY DOWN AND LEFT + {0xA6B0, 0x251B}, //6637 #BOX DRAWINGS HEAVY UP AND LEFT + {0xA6B1, 0x2517}, //6638 #BOX DRAWINGS HEAVY UP AND RIGHT + {0xA6B2, 0x2523}, //6639 #BOX DRAWINGS HEAVY VERTICAL AND RIGHT + {0xA6B3, 0x2533}, //6640 #BOX DRAWINGS HEAVY DOWN AND HORIZONTAL + {0xA6B4, 0x252B}, //6641 #BOX DRAWINGS HEAVY VERTICAL AND LEFT + {0xA6B5, 0x253B}, //6642 #BOX DRAWINGS HEAVY UP AND HORIZONTAL + {0xA6B6, 0x254B}, //6643 #BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL + {0xA6B7, 0x2520}, //6644 #BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT + {0xA6B8, 0x252F}, //6645 #BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY + {0xA6B9, 0x2528}, //6646 #BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT + {0xA6BA, 0x2537}, //6647 #BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY + {0xA6BB, 0x253F}, //6648 #BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY + {0xA6BC, 0x251D}, //6649 #BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY + {0xA6BD, 0x2530}, //6650 #BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT + {0xA6BE, 0x2525}, //6651 #BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY + {0xA6BF, 0x2538}, //6652 #BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT + {0xA6C0, 0x2542}, //6653 #BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT + {0xA6C1, 0x2512}, //6654 #BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT + {0xA6C2, 0x2511}, //6655 #BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY + {0xA6C3, 0x251A}, //6656 #BOX DRAWINGS UP HEAVY AND LEFT LIGHT + {0xA6C4, 0x2519}, //6657 #BOX DRAWINGS UP LIGHT AND LEFT HEAVY + {0xA6C5, 0x2516}, //6658 #BOX DRAWINGS UP HEAVY AND RIGHT LIGHT + {0xA6C6, 0x2515}, //6659 #BOX DRAWINGS UP LIGHT AND RIGHT HEAVY + {0xA6C7, 0x250E}, //6660 #BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT + {0xA6C8, 0x250D}, //6661 #BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY + {0xA6C9, 0x251E}, //6662 #BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT + {0xA6CA, 0x251F}, //6663 #BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT + {0xA6CB, 0x2521}, //6664 #BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY + {0xA6CC, 0x2522}, //6665 #BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY + {0xA6CD, 0x2526}, //6666 #BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT + {0xA6CE, 0x2527}, //6667 #BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT + {0xA6CF, 0x2529}, //6668 #BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY + {0xA6D0, 0x252A}, //6669 #BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY + {0xA6D1, 0x252D}, //6670 #BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT + {0xA6D2, 0x252E}, //6671 #BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT + {0xA6D3, 0x2531}, //6672 #BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY + {0xA6D4, 0x2532}, //6673 #BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY + {0xA6D5, 0x2535}, //6674 #BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT + {0xA6D6, 0x2536}, //6675 #BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT + {0xA6D7, 0x2539}, //6676 #BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY + {0xA6D8, 0x253A}, //6677 #BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY + {0xA6D9, 0x253D}, //6678 #BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT + {0xA6DA, 0x253E}, //6679 #BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT + {0xA6DB, 0x2540}, //6680 #BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT + {0xA6DC, 0x2541}, //6681 #BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT + {0xA6DD, 0x2543}, //6682 #BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT + {0xA6DE, 0x2544}, //6683 #BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT + {0xA6DF, 0x2545}, //6684 #BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT + {0xA6E0, 0x2546}, //6685 #BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT + {0xA6E1, 0x2547}, //6686 #BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY + {0xA6E2, 0x2548}, //6687 #BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY + {0xA6E3, 0x2549}, //6688 #BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY + {0xA6E4, 0x254A}, //6689 #BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY + {0xA741, 0xCB0B}, //6690 #HANGUL SYLLABLE SSANGCIEUC WAE CHIEUCH + {0xA742, 0xCB0C}, //6691 #HANGUL SYLLABLE SSANGCIEUC WAE KHIEUKH + {0xA743, 0xCB0D}, //6692 #HANGUL SYLLABLE SSANGCIEUC WAE THIEUTH + {0xA744, 0xCB0E}, //6693 #HANGUL SYLLABLE SSANGCIEUC WAE PHIEUPH + {0xA745, 0xCB0F}, //6694 #HANGUL SYLLABLE SSANGCIEUC WAE HIEUH + {0xA746, 0xCB11}, //6695 #HANGUL SYLLABLE SSANGCIEUC OE KIYEOK + {0xA747, 0xCB12}, //6696 #HANGUL SYLLABLE SSANGCIEUC OE SSANGKIYEOK + {0xA748, 0xCB13}, //6697 #HANGUL SYLLABLE SSANGCIEUC OE KIYEOKSIOS + {0xA749, 0xCB15}, //6698 #HANGUL SYLLABLE SSANGCIEUC OE NIEUNCIEUC + {0xA74A, 0xCB16}, //6699 #HANGUL SYLLABLE SSANGCIEUC OE NIEUNHIEUH + {0xA74B, 0xCB17}, //6700 #HANGUL SYLLABLE SSANGCIEUC OE TIKEUT + {0xA74C, 0xCB19}, //6701 #HANGUL SYLLABLE SSANGCIEUC OE RIEULKIYEOK + {0xA74D, 0xCB1A}, //6702 #HANGUL SYLLABLE SSANGCIEUC OE RIEULMIEUM + {0xA74E, 0xCB1B}, //6703 #HANGUL SYLLABLE SSANGCIEUC OE RIEULPIEUP + {0xA74F, 0xCB1C}, //6704 #HANGUL SYLLABLE SSANGCIEUC OE RIEULSIOS + {0xA750, 0xCB1D}, //6705 #HANGUL SYLLABLE SSANGCIEUC OE RIEULTHIEUTH + {0xA751, 0xCB1E}, //6706 #HANGUL SYLLABLE SSANGCIEUC OE RIEULPHIEUPH + {0xA752, 0xCB1F}, //6707 #HANGUL SYLLABLE SSANGCIEUC OE RIEULHIEUH + {0xA753, 0xCB22}, //6708 #HANGUL SYLLABLE SSANGCIEUC OE PIEUPSIOS + {0xA754, 0xCB23}, //6709 #HANGUL SYLLABLE SSANGCIEUC OE SIOS + {0xA755, 0xCB24}, //6710 #HANGUL SYLLABLE SSANGCIEUC OE SSANGSIOS + {0xA756, 0xCB25}, //6711 #HANGUL SYLLABLE SSANGCIEUC OE IEUNG + {0xA757, 0xCB26}, //6712 #HANGUL SYLLABLE SSANGCIEUC OE CIEUC + {0xA758, 0xCB27}, //6713 #HANGUL SYLLABLE SSANGCIEUC OE CHIEUCH + {0xA759, 0xCB28}, //6714 #HANGUL SYLLABLE SSANGCIEUC OE KHIEUKH + {0xA75A, 0xCB29}, //6715 #HANGUL SYLLABLE SSANGCIEUC OE THIEUTH + {0xA761, 0xCB2A}, //6716 #HANGUL SYLLABLE SSANGCIEUC OE PHIEUPH + {0xA762, 0xCB2B}, //6717 #HANGUL SYLLABLE SSANGCIEUC OE HIEUH + {0xA763, 0xCB2C}, //6718 #HANGUL SYLLABLE SSANGCIEUC YO + {0xA764, 0xCB2D}, //6719 #HANGUL SYLLABLE SSANGCIEUC YO KIYEOK + {0xA765, 0xCB2E}, //6720 #HANGUL SYLLABLE SSANGCIEUC YO SSANGKIYEOK + {0xA766, 0xCB2F}, //6721 #HANGUL SYLLABLE SSANGCIEUC YO KIYEOKSIOS + {0xA767, 0xCB30}, //6722 #HANGUL SYLLABLE SSANGCIEUC YO NIEUN + {0xA768, 0xCB31}, //6723 #HANGUL SYLLABLE SSANGCIEUC YO NIEUNCIEUC + {0xA769, 0xCB32}, //6724 #HANGUL SYLLABLE SSANGCIEUC YO NIEUNHIEUH + {0xA76A, 0xCB33}, //6725 #HANGUL SYLLABLE SSANGCIEUC YO TIKEUT + {0xA76B, 0xCB34}, //6726 #HANGUL SYLLABLE SSANGCIEUC YO RIEUL + {0xA76C, 0xCB35}, //6727 #HANGUL SYLLABLE SSANGCIEUC YO RIEULKIYEOK + {0xA76D, 0xCB36}, //6728 #HANGUL SYLLABLE SSANGCIEUC YO RIEULMIEUM + {0xA76E, 0xCB37}, //6729 #HANGUL SYLLABLE SSANGCIEUC YO RIEULPIEUP + {0xA76F, 0xCB38}, //6730 #HANGUL SYLLABLE SSANGCIEUC YO RIEULSIOS + {0xA770, 0xCB39}, //6731 #HANGUL SYLLABLE SSANGCIEUC YO RIEULTHIEUTH + {0xA771, 0xCB3A}, //6732 #HANGUL SYLLABLE SSANGCIEUC YO RIEULPHIEUPH + {0xA772, 0xCB3B}, //6733 #HANGUL SYLLABLE SSANGCIEUC YO RIEULHIEUH + {0xA773, 0xCB3C}, //6734 #HANGUL SYLLABLE SSANGCIEUC YO MIEUM + {0xA774, 0xCB3D}, //6735 #HANGUL SYLLABLE SSANGCIEUC YO PIEUP + {0xA775, 0xCB3E}, //6736 #HANGUL SYLLABLE SSANGCIEUC YO PIEUPSIOS + {0xA776, 0xCB3F}, //6737 #HANGUL SYLLABLE SSANGCIEUC YO SIOS + {0xA777, 0xCB40}, //6738 #HANGUL SYLLABLE SSANGCIEUC YO SSANGSIOS + {0xA778, 0xCB42}, //6739 #HANGUL SYLLABLE SSANGCIEUC YO CIEUC + {0xA779, 0xCB43}, //6740 #HANGUL SYLLABLE SSANGCIEUC YO CHIEUCH + {0xA77A, 0xCB44}, //6741 #HANGUL SYLLABLE SSANGCIEUC YO KHIEUKH + {0xA781, 0xCB45}, //6742 #HANGUL SYLLABLE SSANGCIEUC YO THIEUTH + {0xA782, 0xCB46}, //6743 #HANGUL SYLLABLE SSANGCIEUC YO PHIEUPH + {0xA783, 0xCB47}, //6744 #HANGUL SYLLABLE SSANGCIEUC YO HIEUH + {0xA784, 0xCB4A}, //6745 #HANGUL SYLLABLE SSANGCIEUC U SSANGKIYEOK + {0xA785, 0xCB4B}, //6746 #HANGUL SYLLABLE SSANGCIEUC U KIYEOKSIOS + {0xA786, 0xCB4D}, //6747 #HANGUL SYLLABLE SSANGCIEUC U NIEUNCIEUC + {0xA787, 0xCB4E}, //6748 #HANGUL SYLLABLE SSANGCIEUC U NIEUNHIEUH + {0xA788, 0xCB4F}, //6749 #HANGUL SYLLABLE SSANGCIEUC U TIKEUT + {0xA789, 0xCB51}, //6750 #HANGUL SYLLABLE SSANGCIEUC U RIEULKIYEOK + {0xA78A, 0xCB52}, //6751 #HANGUL SYLLABLE SSANGCIEUC U RIEULMIEUM + {0xA78B, 0xCB53}, //6752 #HANGUL SYLLABLE SSANGCIEUC U RIEULPIEUP + {0xA78C, 0xCB54}, //6753 #HANGUL SYLLABLE SSANGCIEUC U RIEULSIOS + {0xA78D, 0xCB55}, //6754 #HANGUL SYLLABLE SSANGCIEUC U RIEULTHIEUTH + {0xA78E, 0xCB56}, //6755 #HANGUL SYLLABLE SSANGCIEUC U RIEULPHIEUPH + {0xA78F, 0xCB57}, //6756 #HANGUL SYLLABLE SSANGCIEUC U RIEULHIEUH + {0xA790, 0xCB5A}, //6757 #HANGUL SYLLABLE SSANGCIEUC U PIEUPSIOS + {0xA791, 0xCB5B}, //6758 #HANGUL SYLLABLE SSANGCIEUC U SIOS + {0xA792, 0xCB5C}, //6759 #HANGUL SYLLABLE SSANGCIEUC U SSANGSIOS + {0xA793, 0xCB5E}, //6760 #HANGUL SYLLABLE SSANGCIEUC U CIEUC + {0xA794, 0xCB5F}, //6761 #HANGUL SYLLABLE SSANGCIEUC U CHIEUCH + {0xA795, 0xCB60}, //6762 #HANGUL SYLLABLE SSANGCIEUC U KHIEUKH + {0xA796, 0xCB61}, //6763 #HANGUL SYLLABLE SSANGCIEUC U THIEUTH + {0xA797, 0xCB62}, //6764 #HANGUL SYLLABLE SSANGCIEUC U PHIEUPH + {0xA798, 0xCB63}, //6765 #HANGUL SYLLABLE SSANGCIEUC U HIEUH + {0xA799, 0xCB65}, //6766 #HANGUL SYLLABLE SSANGCIEUC WEO KIYEOK + {0xA79A, 0xCB66}, //6767 #HANGUL SYLLABLE SSANGCIEUC WEO SSANGKIYEOK + {0xA79B, 0xCB67}, //6768 #HANGUL SYLLABLE SSANGCIEUC WEO KIYEOKSIOS + {0xA79C, 0xCB68}, //6769 #HANGUL SYLLABLE SSANGCIEUC WEO NIEUN + {0xA79D, 0xCB69}, //6770 #HANGUL SYLLABLE SSANGCIEUC WEO NIEUNCIEUC + {0xA79E, 0xCB6A}, //6771 #HANGUL SYLLABLE SSANGCIEUC WEO NIEUNHIEUH + {0xA79F, 0xCB6B}, //6772 #HANGUL SYLLABLE SSANGCIEUC WEO TIKEUT + {0xA7A0, 0xCB6C}, //6773 #HANGUL SYLLABLE SSANGCIEUC WEO RIEUL + {0xA7A1, 0x3395}, //6774 #SQUARE MU L + {0xA7A2, 0x3396}, //6775 #SQUARE ML + {0xA7A3, 0x3397}, //6776 #SQUARE DL + {0xA7A4, 0x2113}, //6777 #SCRIPT SMALL L + {0xA7A5, 0x3398}, //6778 #SQUARE KL + {0xA7A6, 0x33C4}, //6779 #SQUARE CC + {0xA7A7, 0x33A3}, //6780 #SQUARE MM CUBED + {0xA7A8, 0x33A4}, //6781 #SQUARE CM CUBED + {0xA7A9, 0x33A5}, //6782 #SQUARE M CUBED + {0xA7AA, 0x33A6}, //6783 #SQUARE KM CUBED + {0xA7AB, 0x3399}, //6784 #SQUARE FM + {0xA7AC, 0x339A}, //6785 #SQUARE NM + {0xA7AD, 0x339B}, //6786 #SQUARE MU M + {0xA7AE, 0x339C}, //6787 #SQUARE MM + {0xA7AF, 0x339D}, //6788 #SQUARE CM + {0xA7B0, 0x339E}, //6789 #SQUARE KM + {0xA7B1, 0x339F}, //6790 #SQUARE MM SQUARED + {0xA7B2, 0x33A0}, //6791 #SQUARE CM SQUARED + {0xA7B3, 0x33A1}, //6792 #SQUARE M SQUARED + {0xA7B4, 0x33A2}, //6793 #SQUARE KM SQUARED + {0xA7B5, 0x33CA}, //6794 #SQUARE HA + {0xA7B6, 0x338D}, //6795 #SQUARE MU G + {0xA7B7, 0x338E}, //6796 #SQUARE MG + {0xA7B8, 0x338F}, //6797 #SQUARE KG + {0xA7B9, 0x33CF}, //6798 #SQUARE KT + {0xA7BA, 0x3388}, //6799 #SQUARE CAL + {0xA7BB, 0x3389}, //6800 #SQUARE KCAL + {0xA7BC, 0x33C8}, //6801 #SQUARE DB + {0xA7BD, 0x33A7}, //6802 #SQUARE M OVER S + {0xA7BE, 0x33A8}, //6803 #SQUARE M OVER S SQUARED + {0xA7BF, 0x33B0}, //6804 #SQUARE PS + {0xA7C0, 0x33B1}, //6805 #SQUARE NS + {0xA7C1, 0x33B2}, //6806 #SQUARE MU S + {0xA7C2, 0x33B3}, //6807 #SQUARE MS + {0xA7C3, 0x33B4}, //6808 #SQUARE PV + {0xA7C4, 0x33B5}, //6809 #SQUARE NV + {0xA7C5, 0x33B6}, //6810 #SQUARE MU V + {0xA7C6, 0x33B7}, //6811 #SQUARE MV + {0xA7C7, 0x33B8}, //6812 #SQUARE KV + {0xA7C8, 0x33B9}, //6813 #SQUARE MV MEGA + {0xA7C9, 0x3380}, //6814 #SQUARE PA AMPS + {0xA7CA, 0x3381}, //6815 #SQUARE NA + {0xA7CB, 0x3382}, //6816 #SQUARE MU A + {0xA7CC, 0x3383}, //6817 #SQUARE MA + {0xA7CD, 0x3384}, //6818 #SQUARE KA + {0xA7CE, 0x33BA}, //6819 #SQUARE PW + {0xA7CF, 0x33BB}, //6820 #SQUARE NW + {0xA7D0, 0x33BC}, //6821 #SQUARE MU W + {0xA7D1, 0x33BD}, //6822 #SQUARE MW + {0xA7D2, 0x33BE}, //6823 #SQUARE KW + {0xA7D3, 0x33BF}, //6824 #SQUARE MW MEGA + {0xA7D4, 0x3390}, //6825 #SQUARE HZ + {0xA7D5, 0x3391}, //6826 #SQUARE KHZ + {0xA7D6, 0x3392}, //6827 #SQUARE MHZ + {0xA7D7, 0x3393}, //6828 #SQUARE GHZ + {0xA7D8, 0x3394}, //6829 #SQUARE THZ + {0xA7D9, 0x2126}, //6830 #OHM SIGN + {0xA7DA, 0x33C0}, //6831 #SQUARE K OHM + {0xA7DB, 0x33C1}, //6832 #SQUARE M OHM + {0xA7DC, 0x338A}, //6833 #SQUARE PF + {0xA7DD, 0x338B}, //6834 #SQUARE NF + {0xA7DE, 0x338C}, //6835 #SQUARE MU F + {0xA7DF, 0x33D6}, //6836 #SQUARE MOL + {0xA7E0, 0x33C5}, //6837 #SQUARE CD + {0xA7E1, 0x33AD}, //6838 #SQUARE RAD + {0xA7E2, 0x33AE}, //6839 #SQUARE RAD OVER S + {0xA7E3, 0x33AF}, //6840 #SQUARE RAD OVER S SQUARED + {0xA7E4, 0x33DB}, //6841 #SQUARE SR + {0xA7E5, 0x33A9}, //6842 #SQUARE PA + {0xA7E6, 0x33AA}, //6843 #SQUARE KPA + {0xA7E7, 0x33AB}, //6844 #SQUARE MPA + {0xA7E8, 0x33AC}, //6845 #SQUARE GPA + {0xA7E9, 0x33DD}, //6846 #SQUARE WB + {0xA7EA, 0x33D0}, //6847 #SQUARE LM + {0xA7EB, 0x33D3}, //6848 #SQUARE LX + {0xA7EC, 0x33C3}, //6849 #SQUARE BQ + {0xA7ED, 0x33C9}, //6850 #SQUARE GY + {0xA7EE, 0x33DC}, //6851 #SQUARE SV + {0xA7EF, 0x33C6}, //6852 #SQUARE C OVER KG + {0xA841, 0xCB6D}, //6853 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULKIYEOK + {0xA842, 0xCB6E}, //6854 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULMIEUM + {0xA843, 0xCB6F}, //6855 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULPIEUP + {0xA844, 0xCB70}, //6856 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULSIOS + {0xA845, 0xCB71}, //6857 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULTHIEUTH + {0xA846, 0xCB72}, //6858 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULPHIEUPH + {0xA847, 0xCB73}, //6859 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULHIEUH + {0xA848, 0xCB74}, //6860 #HANGUL SYLLABLE SSANGCIEUC WEO MIEUM + {0xA849, 0xCB75}, //6861 #HANGUL SYLLABLE SSANGCIEUC WEO PIEUP + {0xA84A, 0xCB76}, //6862 #HANGUL SYLLABLE SSANGCIEUC WEO PIEUPSIOS + {0xA84B, 0xCB77}, //6863 #HANGUL SYLLABLE SSANGCIEUC WEO SIOS + {0xA84C, 0xCB7A}, //6864 #HANGUL SYLLABLE SSANGCIEUC WEO CIEUC + {0xA84D, 0xCB7B}, //6865 #HANGUL SYLLABLE SSANGCIEUC WEO CHIEUCH + {0xA84E, 0xCB7C}, //6866 #HANGUL SYLLABLE SSANGCIEUC WEO KHIEUKH + {0xA84F, 0xCB7D}, //6867 #HANGUL SYLLABLE SSANGCIEUC WEO THIEUTH + {0xA850, 0xCB7E}, //6868 #HANGUL SYLLABLE SSANGCIEUC WEO PHIEUPH + {0xA851, 0xCB7F}, //6869 #HANGUL SYLLABLE SSANGCIEUC WEO HIEUH + {0xA852, 0xCB80}, //6870 #HANGUL SYLLABLE SSANGCIEUC WE + {0xA853, 0xCB81}, //6871 #HANGUL SYLLABLE SSANGCIEUC WE KIYEOK + {0xA854, 0xCB82}, //6872 #HANGUL SYLLABLE SSANGCIEUC WE SSANGKIYEOK + {0xA855, 0xCB83}, //6873 #HANGUL SYLLABLE SSANGCIEUC WE KIYEOKSIOS + {0xA856, 0xCB84}, //6874 #HANGUL SYLLABLE SSANGCIEUC WE NIEUN + {0xA857, 0xCB85}, //6875 #HANGUL SYLLABLE SSANGCIEUC WE NIEUNCIEUC + {0xA858, 0xCB86}, //6876 #HANGUL SYLLABLE SSANGCIEUC WE NIEUNHIEUH + {0xA859, 0xCB87}, //6877 #HANGUL SYLLABLE SSANGCIEUC WE TIKEUT + {0xA85A, 0xCB88}, //6878 #HANGUL SYLLABLE SSANGCIEUC WE RIEUL + {0xA861, 0xCB89}, //6879 #HANGUL SYLLABLE SSANGCIEUC WE RIEULKIYEOK + {0xA862, 0xCB8A}, //6880 #HANGUL SYLLABLE SSANGCIEUC WE RIEULMIEUM + {0xA863, 0xCB8B}, //6881 #HANGUL SYLLABLE SSANGCIEUC WE RIEULPIEUP + {0xA864, 0xCB8C}, //6882 #HANGUL SYLLABLE SSANGCIEUC WE RIEULSIOS + {0xA865, 0xCB8D}, //6883 #HANGUL SYLLABLE SSANGCIEUC WE RIEULTHIEUTH + {0xA866, 0xCB8E}, //6884 #HANGUL SYLLABLE SSANGCIEUC WE RIEULPHIEUPH + {0xA867, 0xCB8F}, //6885 #HANGUL SYLLABLE SSANGCIEUC WE RIEULHIEUH + {0xA868, 0xCB90}, //6886 #HANGUL SYLLABLE SSANGCIEUC WE MIEUM + {0xA869, 0xCB91}, //6887 #HANGUL SYLLABLE SSANGCIEUC WE PIEUP + {0xA86A, 0xCB92}, //6888 #HANGUL SYLLABLE SSANGCIEUC WE PIEUPSIOS + {0xA86B, 0xCB93}, //6889 #HANGUL SYLLABLE SSANGCIEUC WE SIOS + {0xA86C, 0xCB94}, //6890 #HANGUL SYLLABLE SSANGCIEUC WE SSANGSIOS + {0xA86D, 0xCB95}, //6891 #HANGUL SYLLABLE SSANGCIEUC WE IEUNG + {0xA86E, 0xCB96}, //6892 #HANGUL SYLLABLE SSANGCIEUC WE CIEUC + {0xA86F, 0xCB97}, //6893 #HANGUL SYLLABLE SSANGCIEUC WE CHIEUCH + {0xA870, 0xCB98}, //6894 #HANGUL SYLLABLE SSANGCIEUC WE KHIEUKH + {0xA871, 0xCB99}, //6895 #HANGUL SYLLABLE SSANGCIEUC WE THIEUTH + {0xA872, 0xCB9A}, //6896 #HANGUL SYLLABLE SSANGCIEUC WE PHIEUPH + {0xA873, 0xCB9B}, //6897 #HANGUL SYLLABLE SSANGCIEUC WE HIEUH + {0xA874, 0xCB9D}, //6898 #HANGUL SYLLABLE SSANGCIEUC WI KIYEOK + {0xA875, 0xCB9E}, //6899 #HANGUL SYLLABLE SSANGCIEUC WI SSANGKIYEOK + {0xA876, 0xCB9F}, //6900 #HANGUL SYLLABLE SSANGCIEUC WI KIYEOKSIOS + {0xA877, 0xCBA0}, //6901 #HANGUL SYLLABLE SSANGCIEUC WI NIEUN + {0xA878, 0xCBA1}, //6902 #HANGUL SYLLABLE SSANGCIEUC WI NIEUNCIEUC + {0xA879, 0xCBA2}, //6903 #HANGUL SYLLABLE SSANGCIEUC WI NIEUNHIEUH + {0xA87A, 0xCBA3}, //6904 #HANGUL SYLLABLE SSANGCIEUC WI TIKEUT + {0xA881, 0xCBA4}, //6905 #HANGUL SYLLABLE SSANGCIEUC WI RIEUL + {0xA882, 0xCBA5}, //6906 #HANGUL SYLLABLE SSANGCIEUC WI RIEULKIYEOK + {0xA883, 0xCBA6}, //6907 #HANGUL SYLLABLE SSANGCIEUC WI RIEULMIEUM + {0xA884, 0xCBA7}, //6908 #HANGUL SYLLABLE SSANGCIEUC WI RIEULPIEUP + {0xA885, 0xCBA8}, //6909 #HANGUL SYLLABLE SSANGCIEUC WI RIEULSIOS + {0xA886, 0xCBA9}, //6910 #HANGUL SYLLABLE SSANGCIEUC WI RIEULTHIEUTH + {0xA887, 0xCBAA}, //6911 #HANGUL SYLLABLE SSANGCIEUC WI RIEULPHIEUPH + {0xA888, 0xCBAB}, //6912 #HANGUL SYLLABLE SSANGCIEUC WI RIEULHIEUH + {0xA889, 0xCBAC}, //6913 #HANGUL SYLLABLE SSANGCIEUC WI MIEUM + {0xA88A, 0xCBAD}, //6914 #HANGUL SYLLABLE SSANGCIEUC WI PIEUP + {0xA88B, 0xCBAE}, //6915 #HANGUL SYLLABLE SSANGCIEUC WI PIEUPSIOS + {0xA88C, 0xCBAF}, //6916 #HANGUL SYLLABLE SSANGCIEUC WI SIOS + {0xA88D, 0xCBB0}, //6917 #HANGUL SYLLABLE SSANGCIEUC WI SSANGSIOS + {0xA88E, 0xCBB1}, //6918 #HANGUL SYLLABLE SSANGCIEUC WI IEUNG + {0xA88F, 0xCBB2}, //6919 #HANGUL SYLLABLE SSANGCIEUC WI CIEUC + {0xA890, 0xCBB3}, //6920 #HANGUL SYLLABLE SSANGCIEUC WI CHIEUCH + {0xA891, 0xCBB4}, //6921 #HANGUL SYLLABLE SSANGCIEUC WI KHIEUKH + {0xA892, 0xCBB5}, //6922 #HANGUL SYLLABLE SSANGCIEUC WI THIEUTH + {0xA893, 0xCBB6}, //6923 #HANGUL SYLLABLE SSANGCIEUC WI PHIEUPH + {0xA894, 0xCBB7}, //6924 #HANGUL SYLLABLE SSANGCIEUC WI HIEUH + {0xA895, 0xCBB9}, //6925 #HANGUL SYLLABLE SSANGCIEUC YU KIYEOK + {0xA896, 0xCBBA}, //6926 #HANGUL SYLLABLE SSANGCIEUC YU SSANGKIYEOK + {0xA897, 0xCBBB}, //6927 #HANGUL SYLLABLE SSANGCIEUC YU KIYEOKSIOS + {0xA898, 0xCBBC}, //6928 #HANGUL SYLLABLE SSANGCIEUC YU NIEUN + {0xA899, 0xCBBD}, //6929 #HANGUL SYLLABLE SSANGCIEUC YU NIEUNCIEUC + {0xA89A, 0xCBBE}, //6930 #HANGUL SYLLABLE SSANGCIEUC YU NIEUNHIEUH + {0xA89B, 0xCBBF}, //6931 #HANGUL SYLLABLE SSANGCIEUC YU TIKEUT + {0xA89C, 0xCBC0}, //6932 #HANGUL SYLLABLE SSANGCIEUC YU RIEUL + {0xA89D, 0xCBC1}, //6933 #HANGUL SYLLABLE SSANGCIEUC YU RIEULKIYEOK + {0xA89E, 0xCBC2}, //6934 #HANGUL SYLLABLE SSANGCIEUC YU RIEULMIEUM + {0xA89F, 0xCBC3}, //6935 #HANGUL SYLLABLE SSANGCIEUC YU RIEULPIEUP + {0xA8A0, 0xCBC4}, //6936 #HANGUL SYLLABLE SSANGCIEUC YU RIEULSIOS + {0xA8A1, 0x00C6}, //6937 #LATIN CAPITAL LETTER AE + {0xA8A2, 0x00D0}, //6938 #LATIN CAPITAL LETTER ETH + {0xA8A3, 0x00AA}, //6939 #FEMININE ORDINAL INDICATOR + {0xA8A4, 0x0126}, //6940 #LATIN CAPITAL LETTER H WITH STROKE + {0xA8A6, 0x0132}, //6941 #LATIN CAPITAL LIGATURE IJ + {0xA8A8, 0x013F}, //6942 #LATIN CAPITAL LETTER L WITH MIDDLE DOT + {0xA8A9, 0x0141}, //6943 #LATIN CAPITAL LETTER L WITH STROKE + {0xA8AA, 0x00D8}, //6944 #LATIN CAPITAL LETTER O WITH STROKE + {0xA8AB, 0x0152}, //6945 #LATIN CAPITAL LIGATURE OE + {0xA8AC, 0x00BA}, //6946 #MASCULINE ORDINAL INDICATOR + {0xA8AD, 0x00DE}, //6947 #LATIN CAPITAL LETTER THORN + {0xA8AE, 0x0166}, //6948 #LATIN CAPITAL LETTER T WITH STROKE + {0xA8AF, 0x014A}, //6949 #LATIN CAPITAL LETTER ENG + {0xA8B1, 0x3260}, //6950 #CIRCLED HANGUL KIYEOK + {0xA8B2, 0x3261}, //6951 #CIRCLED HANGUL NIEUN + {0xA8B3, 0x3262}, //6952 #CIRCLED HANGUL TIKEUT + {0xA8B4, 0x3263}, //6953 #CIRCLED HANGUL RIEUL + {0xA8B5, 0x3264}, //6954 #CIRCLED HANGUL MIEUM + {0xA8B6, 0x3265}, //6955 #CIRCLED HANGUL PIEUP + {0xA8B7, 0x3266}, //6956 #CIRCLED HANGUL SIOS + {0xA8B8, 0x3267}, //6957 #CIRCLED HANGUL IEUNG + {0xA8B9, 0x3268}, //6958 #CIRCLED HANGUL CIEUC + {0xA8BA, 0x3269}, //6959 #CIRCLED HANGUL CHIEUCH + {0xA8BB, 0x326A}, //6960 #CIRCLED HANGUL KHIEUKH + {0xA8BC, 0x326B}, //6961 #CIRCLED HANGUL THIEUTH + {0xA8BD, 0x326C}, //6962 #CIRCLED HANGUL PHIEUPH + {0xA8BE, 0x326D}, //6963 #CIRCLED HANGUL HIEUH + {0xA8BF, 0x326E}, //6964 #CIRCLED HANGUL KIYEOK A + {0xA8C0, 0x326F}, //6965 #CIRCLED HANGUL NIEUN A + {0xA8C1, 0x3270}, //6966 #CIRCLED HANGUL TIKEUT A + {0xA8C2, 0x3271}, //6967 #CIRCLED HANGUL RIEUL A + {0xA8C3, 0x3272}, //6968 #CIRCLED HANGUL MIEUM A + {0xA8C4, 0x3273}, //6969 #CIRCLED HANGUL PIEUP A + {0xA8C5, 0x3274}, //6970 #CIRCLED HANGUL SIOS A + {0xA8C6, 0x3275}, //6971 #CIRCLED HANGUL IEUNG A + {0xA8C7, 0x3276}, //6972 #CIRCLED HANGUL CIEUC A + {0xA8C8, 0x3277}, //6973 #CIRCLED HANGUL CHIEUCH A + {0xA8C9, 0x3278}, //6974 #CIRCLED HANGUL KHIEUKH A + {0xA8CA, 0x3279}, //6975 #CIRCLED HANGUL THIEUTH A + {0xA8CB, 0x327A}, //6976 #CIRCLED HANGUL PHIEUPH A + {0xA8CC, 0x327B}, //6977 #CIRCLED HANGUL HIEUH A + {0xA8CD, 0x24D0}, //6978 #CIRCLED LATIN SMALL LETTER A + {0xA8CE, 0x24D1}, //6979 #CIRCLED LATIN SMALL LETTER B + {0xA8CF, 0x24D2}, //6980 #CIRCLED LATIN SMALL LETTER C + {0xA8D0, 0x24D3}, //6981 #CIRCLED LATIN SMALL LETTER D + {0xA8D1, 0x24D4}, //6982 #CIRCLED LATIN SMALL LETTER E + {0xA8D2, 0x24D5}, //6983 #CIRCLED LATIN SMALL LETTER F + {0xA8D3, 0x24D6}, //6984 #CIRCLED LATIN SMALL LETTER G + {0xA8D4, 0x24D7}, //6985 #CIRCLED LATIN SMALL LETTER H + {0xA8D5, 0x24D8}, //6986 #CIRCLED LATIN SMALL LETTER I + {0xA8D6, 0x24D9}, //6987 #CIRCLED LATIN SMALL LETTER J + {0xA8D7, 0x24DA}, //6988 #CIRCLED LATIN SMALL LETTER K + {0xA8D8, 0x24DB}, //6989 #CIRCLED LATIN SMALL LETTER L + {0xA8D9, 0x24DC}, //6990 #CIRCLED LATIN SMALL LETTER M + {0xA8DA, 0x24DD}, //6991 #CIRCLED LATIN SMALL LETTER N + {0xA8DB, 0x24DE}, //6992 #CIRCLED LATIN SMALL LETTER O + {0xA8DC, 0x24DF}, //6993 #CIRCLED LATIN SMALL LETTER P + {0xA8DD, 0x24E0}, //6994 #CIRCLED LATIN SMALL LETTER Q + {0xA8DE, 0x24E1}, //6995 #CIRCLED LATIN SMALL LETTER R + {0xA8DF, 0x24E2}, //6996 #CIRCLED LATIN SMALL LETTER S + {0xA8E0, 0x24E3}, //6997 #CIRCLED LATIN SMALL LETTER T + {0xA8E1, 0x24E4}, //6998 #CIRCLED LATIN SMALL LETTER U + {0xA8E2, 0x24E5}, //6999 #CIRCLED LATIN SMALL LETTER V + {0xA8E3, 0x24E6}, //7000 #CIRCLED LATIN SMALL LETTER W + {0xA8E4, 0x24E7}, //7001 #CIRCLED LATIN SMALL LETTER X + {0xA8E5, 0x24E8}, //7002 #CIRCLED LATIN SMALL LETTER Y + {0xA8E6, 0x24E9}, //7003 #CIRCLED LATIN SMALL LETTER Z + {0xA8E7, 0x2460}, //7004 #CIRCLED DIGIT ONE + {0xA8E8, 0x2461}, //7005 #CIRCLED DIGIT TWO + {0xA8E9, 0x2462}, //7006 #CIRCLED DIGIT THREE + {0xA8EA, 0x2463}, //7007 #CIRCLED DIGIT FOUR + {0xA8EB, 0x2464}, //7008 #CIRCLED DIGIT FIVE + {0xA8EC, 0x2465}, //7009 #CIRCLED DIGIT SIX + {0xA8ED, 0x2466}, //7010 #CIRCLED DIGIT SEVEN + {0xA8EE, 0x2467}, //7011 #CIRCLED DIGIT EIGHT + {0xA8EF, 0x2468}, //7012 #CIRCLED DIGIT NINE + {0xA8F0, 0x2469}, //7013 #CIRCLED NUMBER TEN + {0xA8F1, 0x246A}, //7014 #CIRCLED NUMBER ELEVEN + {0xA8F2, 0x246B}, //7015 #CIRCLED NUMBER TWELVE + {0xA8F3, 0x246C}, //7016 #CIRCLED NUMBER THIRTEEN + {0xA8F4, 0x246D}, //7017 #CIRCLED NUMBER FOURTEEN + {0xA8F5, 0x246E}, //7018 #CIRCLED NUMBER FIFTEEN + {0xA8F6, 0x00BD}, //7019 #VULGAR FRACTION ONE HALF + {0xA8F7, 0x2153}, //7020 #VULGAR FRACTION ONE THIRD + {0xA8F8, 0x2154}, //7021 #VULGAR FRACTION TWO THIRDS + {0xA8F9, 0x00BC}, //7022 #VULGAR FRACTION ONE QUARTER + {0xA8FA, 0x00BE}, //7023 #VULGAR FRACTION THREE QUARTERS + {0xA8FB, 0x215B}, //7024 #VULGAR FRACTION ONE EIGHTH + {0xA8FC, 0x215C}, //7025 #VULGAR FRACTION THREE EIGHTHS + {0xA8FD, 0x215D}, //7026 #VULGAR FRACTION FIVE EIGHTHS + {0xA8FE, 0x215E}, //7027 #VULGAR FRACTION SEVEN EIGHTHS + {0xA941, 0xCBC5}, //7028 #HANGUL SYLLABLE SSANGCIEUC YU RIEULTHIEUTH + {0xA942, 0xCBC6}, //7029 #HANGUL SYLLABLE SSANGCIEUC YU RIEULPHIEUPH + {0xA943, 0xCBC7}, //7030 #HANGUL SYLLABLE SSANGCIEUC YU RIEULHIEUH + {0xA944, 0xCBC8}, //7031 #HANGUL SYLLABLE SSANGCIEUC YU MIEUM + {0xA945, 0xCBC9}, //7032 #HANGUL SYLLABLE SSANGCIEUC YU PIEUP + {0xA946, 0xCBCA}, //7033 #HANGUL SYLLABLE SSANGCIEUC YU PIEUPSIOS + {0xA947, 0xCBCB}, //7034 #HANGUL SYLLABLE SSANGCIEUC YU SIOS + {0xA948, 0xCBCC}, //7035 #HANGUL SYLLABLE SSANGCIEUC YU SSANGSIOS + {0xA949, 0xCBCD}, //7036 #HANGUL SYLLABLE SSANGCIEUC YU IEUNG + {0xA94A, 0xCBCE}, //7037 #HANGUL SYLLABLE SSANGCIEUC YU CIEUC + {0xA94B, 0xCBCF}, //7038 #HANGUL SYLLABLE SSANGCIEUC YU CHIEUCH + {0xA94C, 0xCBD0}, //7039 #HANGUL SYLLABLE SSANGCIEUC YU KHIEUKH + {0xA94D, 0xCBD1}, //7040 #HANGUL SYLLABLE SSANGCIEUC YU THIEUTH + {0xA94E, 0xCBD2}, //7041 #HANGUL SYLLABLE SSANGCIEUC YU PHIEUPH + {0xA94F, 0xCBD3}, //7042 #HANGUL SYLLABLE SSANGCIEUC YU HIEUH + {0xA950, 0xCBD5}, //7043 #HANGUL SYLLABLE SSANGCIEUC EU KIYEOK + {0xA951, 0xCBD6}, //7044 #HANGUL SYLLABLE SSANGCIEUC EU SSANGKIYEOK + {0xA952, 0xCBD7}, //7045 #HANGUL SYLLABLE SSANGCIEUC EU KIYEOKSIOS + {0xA953, 0xCBD8}, //7046 #HANGUL SYLLABLE SSANGCIEUC EU NIEUN + {0xA954, 0xCBD9}, //7047 #HANGUL SYLLABLE SSANGCIEUC EU NIEUNCIEUC + {0xA955, 0xCBDA}, //7048 #HANGUL SYLLABLE SSANGCIEUC EU NIEUNHIEUH + {0xA956, 0xCBDB}, //7049 #HANGUL SYLLABLE SSANGCIEUC EU TIKEUT + {0xA957, 0xCBDC}, //7050 #HANGUL SYLLABLE SSANGCIEUC EU RIEUL + {0xA958, 0xCBDD}, //7051 #HANGUL SYLLABLE SSANGCIEUC EU RIEULKIYEOK + {0xA959, 0xCBDE}, //7052 #HANGUL SYLLABLE SSANGCIEUC EU RIEULMIEUM + {0xA95A, 0xCBDF}, //7053 #HANGUL SYLLABLE SSANGCIEUC EU RIEULPIEUP + {0xA961, 0xCBE0}, //7054 #HANGUL SYLLABLE SSANGCIEUC EU RIEULSIOS + {0xA962, 0xCBE1}, //7055 #HANGUL SYLLABLE SSANGCIEUC EU RIEULTHIEUTH + {0xA963, 0xCBE2}, //7056 #HANGUL SYLLABLE SSANGCIEUC EU RIEULPHIEUPH + {0xA964, 0xCBE3}, //7057 #HANGUL SYLLABLE SSANGCIEUC EU RIEULHIEUH + {0xA965, 0xCBE5}, //7058 #HANGUL SYLLABLE SSANGCIEUC EU PIEUP + {0xA966, 0xCBE6}, //7059 #HANGUL SYLLABLE SSANGCIEUC EU PIEUPSIOS + {0xA967, 0xCBE8}, //7060 #HANGUL SYLLABLE SSANGCIEUC EU SSANGSIOS + {0xA968, 0xCBEA}, //7061 #HANGUL SYLLABLE SSANGCIEUC EU CIEUC + {0xA969, 0xCBEB}, //7062 #HANGUL SYLLABLE SSANGCIEUC EU CHIEUCH + {0xA96A, 0xCBEC}, //7063 #HANGUL SYLLABLE SSANGCIEUC EU KHIEUKH + {0xA96B, 0xCBED}, //7064 #HANGUL SYLLABLE SSANGCIEUC EU THIEUTH + {0xA96C, 0xCBEE}, //7065 #HANGUL SYLLABLE SSANGCIEUC EU PHIEUPH + {0xA96D, 0xCBEF}, //7066 #HANGUL SYLLABLE SSANGCIEUC EU HIEUH + {0xA96E, 0xCBF0}, //7067 #HANGUL SYLLABLE SSANGCIEUC YI + {0xA96F, 0xCBF1}, //7068 #HANGUL SYLLABLE SSANGCIEUC YI KIYEOK + {0xA970, 0xCBF2}, //7069 #HANGUL SYLLABLE SSANGCIEUC YI SSANGKIYEOK + {0xA971, 0xCBF3}, //7070 #HANGUL SYLLABLE SSANGCIEUC YI KIYEOKSIOS + {0xA972, 0xCBF4}, //7071 #HANGUL SYLLABLE SSANGCIEUC YI NIEUN + {0xA973, 0xCBF5}, //7072 #HANGUL SYLLABLE SSANGCIEUC YI NIEUNCIEUC + {0xA974, 0xCBF6}, //7073 #HANGUL SYLLABLE SSANGCIEUC YI NIEUNHIEUH + {0xA975, 0xCBF7}, //7074 #HANGUL SYLLABLE SSANGCIEUC YI TIKEUT + {0xA976, 0xCBF8}, //7075 #HANGUL SYLLABLE SSANGCIEUC YI RIEUL + {0xA977, 0xCBF9}, //7076 #HANGUL SYLLABLE SSANGCIEUC YI RIEULKIYEOK + {0xA978, 0xCBFA}, //7077 #HANGUL SYLLABLE SSANGCIEUC YI RIEULMIEUM + {0xA979, 0xCBFB}, //7078 #HANGUL SYLLABLE SSANGCIEUC YI RIEULPIEUP + {0xA97A, 0xCBFC}, //7079 #HANGUL SYLLABLE SSANGCIEUC YI RIEULSIOS + {0xA981, 0xCBFD}, //7080 #HANGUL SYLLABLE SSANGCIEUC YI RIEULTHIEUTH + {0xA982, 0xCBFE}, //7081 #HANGUL SYLLABLE SSANGCIEUC YI RIEULPHIEUPH + {0xA983, 0xCBFF}, //7082 #HANGUL SYLLABLE SSANGCIEUC YI RIEULHIEUH + {0xA984, 0xCC00}, //7083 #HANGUL SYLLABLE SSANGCIEUC YI MIEUM + {0xA985, 0xCC01}, //7084 #HANGUL SYLLABLE SSANGCIEUC YI PIEUP + {0xA986, 0xCC02}, //7085 #HANGUL SYLLABLE SSANGCIEUC YI PIEUPSIOS + {0xA987, 0xCC03}, //7086 #HANGUL SYLLABLE SSANGCIEUC YI SIOS + {0xA988, 0xCC04}, //7087 #HANGUL SYLLABLE SSANGCIEUC YI SSANGSIOS + {0xA989, 0xCC05}, //7088 #HANGUL SYLLABLE SSANGCIEUC YI IEUNG + {0xA98A, 0xCC06}, //7089 #HANGUL SYLLABLE SSANGCIEUC YI CIEUC + {0xA98B, 0xCC07}, //7090 #HANGUL SYLLABLE SSANGCIEUC YI CHIEUCH + {0xA98C, 0xCC08}, //7091 #HANGUL SYLLABLE SSANGCIEUC YI KHIEUKH + {0xA98D, 0xCC09}, //7092 #HANGUL SYLLABLE SSANGCIEUC YI THIEUTH + {0xA98E, 0xCC0A}, //7093 #HANGUL SYLLABLE SSANGCIEUC YI PHIEUPH + {0xA98F, 0xCC0B}, //7094 #HANGUL SYLLABLE SSANGCIEUC YI HIEUH + {0xA990, 0xCC0E}, //7095 #HANGUL SYLLABLE SSANGCIEUC I SSANGKIYEOK + {0xA991, 0xCC0F}, //7096 #HANGUL SYLLABLE SSANGCIEUC I KIYEOKSIOS + {0xA992, 0xCC11}, //7097 #HANGUL SYLLABLE SSANGCIEUC I NIEUNCIEUC + {0xA993, 0xCC12}, //7098 #HANGUL SYLLABLE SSANGCIEUC I NIEUNHIEUH + {0xA994, 0xCC13}, //7099 #HANGUL SYLLABLE SSANGCIEUC I TIKEUT + {0xA995, 0xCC15}, //7100 #HANGUL SYLLABLE SSANGCIEUC I RIEULKIYEOK + {0xA996, 0xCC16}, //7101 #HANGUL SYLLABLE SSANGCIEUC I RIEULMIEUM + {0xA997, 0xCC17}, //7102 #HANGUL SYLLABLE SSANGCIEUC I RIEULPIEUP + {0xA998, 0xCC18}, //7103 #HANGUL SYLLABLE SSANGCIEUC I RIEULSIOS + {0xA999, 0xCC19}, //7104 #HANGUL SYLLABLE SSANGCIEUC I RIEULTHIEUTH + {0xA99A, 0xCC1A}, //7105 #HANGUL SYLLABLE SSANGCIEUC I RIEULPHIEUPH + {0xA99B, 0xCC1B}, //7106 #HANGUL SYLLABLE SSANGCIEUC I RIEULHIEUH + {0xA99C, 0xCC1E}, //7107 #HANGUL SYLLABLE SSANGCIEUC I PIEUPSIOS + {0xA99D, 0xCC1F}, //7108 #HANGUL SYLLABLE SSANGCIEUC I SIOS + {0xA99E, 0xCC20}, //7109 #HANGUL SYLLABLE SSANGCIEUC I SSANGSIOS + {0xA99F, 0xCC23}, //7110 #HANGUL SYLLABLE SSANGCIEUC I CHIEUCH + {0xA9A0, 0xCC24}, //7111 #HANGUL SYLLABLE SSANGCIEUC I KHIEUKH + {0xA9A1, 0x00E6}, //7112 #LATIN SMALL LETTER AE + {0xA9A2, 0x0111}, //7113 #LATIN SMALL LETTER D WITH STROKE + {0xA9A3, 0x00F0}, //7114 #LATIN SMALL LETTER ETH + {0xA9A4, 0x0127}, //7115 #LATIN SMALL LETTER H WITH STROKE + {0xA9A5, 0x0131}, //7116 #LATIN SMALL LETTER DOTLESS I + {0xA9A6, 0x0133}, //7117 #LATIN SMALL LIGATURE IJ + {0xA9A7, 0x0138}, //7118 #LATIN SMALL LETTER KRA + {0xA9A8, 0x0140}, //7119 #LATIN SMALL LETTER L WITH MIDDLE DOT + {0xA9A9, 0x0142}, //7120 #LATIN SMALL LETTER L WITH STROKE + {0xA9AA, 0x00F8}, //7121 #LATIN SMALL LETTER O WITH STROKE + {0xA9AB, 0x0153}, //7122 #LATIN SMALL LIGATURE OE + {0xA9AC, 0x00DF}, //7123 #LATIN SMALL LETTER SHARP S + {0xA9AD, 0x00FE}, //7124 #LATIN SMALL LETTER THORN + {0xA9AE, 0x0167}, //7125 #LATIN SMALL LETTER T WITH STROKE + {0xA9AF, 0x014B}, //7126 #LATIN SMALL LETTER ENG + {0xA9B0, 0x0149}, //7127 #LATIN SMALL LETTER N PRECEDED BY APOSTROPHE + {0xA9B1, 0x3200}, //7128 #PARENTHESIZED HANGUL KIYEOK + {0xA9B2, 0x3201}, //7129 #PARENTHESIZED HANGUL NIEUN + {0xA9B3, 0x3202}, //7130 #PARENTHESIZED HANGUL TIKEUT + {0xA9B4, 0x3203}, //7131 #PARENTHESIZED HANGUL RIEUL + {0xA9B5, 0x3204}, //7132 #PARENTHESIZED HANGUL MIEUM + {0xA9B6, 0x3205}, //7133 #PARENTHESIZED HANGUL PIEUP + {0xA9B7, 0x3206}, //7134 #PARENTHESIZED HANGUL SIOS + {0xA9B8, 0x3207}, //7135 #PARENTHESIZED HANGUL IEUNG + {0xA9B9, 0x3208}, //7136 #PARENTHESIZED HANGUL CIEUC + {0xA9BA, 0x3209}, //7137 #PARENTHESIZED HANGUL CHIEUCH + {0xA9BB, 0x320A}, //7138 #PARENTHESIZED HANGUL KHIEUKH + {0xA9BC, 0x320B}, //7139 #PARENTHESIZED HANGUL THIEUTH + {0xA9BD, 0x320C}, //7140 #PARENTHESIZED HANGUL PHIEUPH + {0xA9BE, 0x320D}, //7141 #PARENTHESIZED HANGUL HIEUH + {0xA9BF, 0x320E}, //7142 #PARENTHESIZED HANGUL KIYEOK A + {0xA9C0, 0x320F}, //7143 #PARENTHESIZED HANGUL NIEUN A + {0xA9C1, 0x3210}, //7144 #PARENTHESIZED HANGUL TIKEUT A + {0xA9C2, 0x3211}, //7145 #PARENTHESIZED HANGUL RIEUL A + {0xA9C3, 0x3212}, //7146 #PARENTHESIZED HANGUL MIEUM A + {0xA9C4, 0x3213}, //7147 #PARENTHESIZED HANGUL PIEUP A + {0xA9C5, 0x3214}, //7148 #PARENTHESIZED HANGUL SIOS A + {0xA9C6, 0x3215}, //7149 #PARENTHESIZED HANGUL IEUNG A + {0xA9C7, 0x3216}, //7150 #PARENTHESIZED HANGUL CIEUC A + {0xA9C8, 0x3217}, //7151 #PARENTHESIZED HANGUL CHIEUCH A + {0xA9C9, 0x3218}, //7152 #PARENTHESIZED HANGUL KHIEUKH A + {0xA9CA, 0x3219}, //7153 #PARENTHESIZED HANGUL THIEUTH A + {0xA9CB, 0x321A}, //7154 #PARENTHESIZED HANGUL PHIEUPH A + {0xA9CC, 0x321B}, //7155 #PARENTHESIZED HANGUL HIEUH A + {0xA9CD, 0x249C}, //7156 #PARENTHESIZED LATIN SMALL LETTER A + {0xA9CE, 0x249D}, //7157 #PARENTHESIZED LATIN SMALL LETTER B + {0xA9CF, 0x249E}, //7158 #PARENTHESIZED LATIN SMALL LETTER C + {0xA9D0, 0x249F}, //7159 #PARENTHESIZED LATIN SMALL LETTER D + {0xA9D1, 0x24A0}, //7160 #PARENTHESIZED LATIN SMALL LETTER E + {0xA9D2, 0x24A1}, //7161 #PARENTHESIZED LATIN SMALL LETTER F + {0xA9D3, 0x24A2}, //7162 #PARENTHESIZED LATIN SMALL LETTER G + {0xA9D4, 0x24A3}, //7163 #PARENTHESIZED LATIN SMALL LETTER H + {0xA9D5, 0x24A4}, //7164 #PARENTHESIZED LATIN SMALL LETTER I + {0xA9D6, 0x24A5}, //7165 #PARENTHESIZED LATIN SMALL LETTER J + {0xA9D7, 0x24A6}, //7166 #PARENTHESIZED LATIN SMALL LETTER K + {0xA9D8, 0x24A7}, //7167 #PARENTHESIZED LATIN SMALL LETTER L + {0xA9D9, 0x24A8}, //7168 #PARENTHESIZED LATIN SMALL LETTER M + {0xA9DA, 0x24A9}, //7169 #PARENTHESIZED LATIN SMALL LETTER N + {0xA9DB, 0x24AA}, //7170 #PARENTHESIZED LATIN SMALL LETTER O + {0xA9DC, 0x24AB}, //7171 #PARENTHESIZED LATIN SMALL LETTER P + {0xA9DD, 0x24AC}, //7172 #PARENTHESIZED LATIN SMALL LETTER Q + {0xA9DE, 0x24AD}, //7173 #PARENTHESIZED LATIN SMALL LETTER R + {0xA9DF, 0x24AE}, //7174 #PARENTHESIZED LATIN SMALL LETTER S + {0xA9E0, 0x24AF}, //7175 #PARENTHESIZED LATIN SMALL LETTER T + {0xA9E1, 0x24B0}, //7176 #PARENTHESIZED LATIN SMALL LETTER U + {0xA9E2, 0x24B1}, //7177 #PARENTHESIZED LATIN SMALL LETTER V + {0xA9E3, 0x24B2}, //7178 #PARENTHESIZED LATIN SMALL LETTER W + {0xA9E4, 0x24B3}, //7179 #PARENTHESIZED LATIN SMALL LETTER X + {0xA9E5, 0x24B4}, //7180 #PARENTHESIZED LATIN SMALL LETTER Y + {0xA9E6, 0x24B5}, //7181 #PARENTHESIZED LATIN SMALL LETTER Z + {0xA9E7, 0x2474}, //7182 #PARENTHESIZED DIGIT ONE + {0xA9E8, 0x2475}, //7183 #PARENTHESIZED DIGIT TWO + {0xA9E9, 0x2476}, //7184 #PARENTHESIZED DIGIT THREE + {0xA9EA, 0x2477}, //7185 #PARENTHESIZED DIGIT FOUR + {0xA9EB, 0x2478}, //7186 #PARENTHESIZED DIGIT FIVE + {0xA9EC, 0x2479}, //7187 #PARENTHESIZED DIGIT SIX + {0xA9ED, 0x247A}, //7188 #PARENTHESIZED DIGIT SEVEN + {0xA9EE, 0x247B}, //7189 #PARENTHESIZED DIGIT EIGHT + {0xA9EF, 0x247C}, //7190 #PARENTHESIZED DIGIT NINE + {0xA9F0, 0x247D}, //7191 #PARENTHESIZED NUMBER TEN + {0xA9F1, 0x247E}, //7192 #PARENTHESIZED NUMBER ELEVEN + {0xA9F2, 0x247F}, //7193 #PARENTHESIZED NUMBER TWELVE + {0xA9F3, 0x2480}, //7194 #PARENTHESIZED NUMBER THIRTEEN + {0xA9F4, 0x2481}, //7195 #PARENTHESIZED NUMBER FOURTEEN + {0xA9F5, 0x2482}, //7196 #PARENTHESIZED NUMBER FIFTEEN + {0xA9F6, 0x00B9}, //7197 #SUPERSCRIPT ONE + {0xA9F7, 0x00B2}, //7198 #SUPERSCRIPT TWO + {0xA9F8, 0x00B3}, //7199 #SUPERSCRIPT THREE + {0xA9F9, 0x2074}, //7200 #SUPERSCRIPT FOUR + {0xA9FA, 0x207F}, //7201 #SUPERSCRIPT LATIN SMALL LETTER N + {0xA9FB, 0x2081}, //7202 #SUBSCRIPT ONE + {0xA9FC, 0x2082}, //7203 #SUBSCRIPT TWO + {0xA9FD, 0x2083}, //7204 #SUBSCRIPT THREE + {0xA9FE, 0x2084}, //7205 #SUBSCRIPT FOUR + {0xAA41, 0xCC25}, //7206 #HANGUL SYLLABLE SSANGCIEUC I THIEUTH + {0xAA42, 0xCC26}, //7207 #HANGUL SYLLABLE SSANGCIEUC I PHIEUPH + {0xAA43, 0xCC2A}, //7208 #HANGUL SYLLABLE CHIEUCH A SSANGKIYEOK + {0xAA44, 0xCC2B}, //7209 #HANGUL SYLLABLE CHIEUCH A KIYEOKSIOS + {0xAA45, 0xCC2D}, //7210 #HANGUL SYLLABLE CHIEUCH A NIEUNCIEUC + {0xAA46, 0xCC2F}, //7211 #HANGUL SYLLABLE CHIEUCH A TIKEUT + {0xAA47, 0xCC31}, //7212 #HANGUL SYLLABLE CHIEUCH A RIEULKIYEOK + {0xAA48, 0xCC32}, //7213 #HANGUL SYLLABLE CHIEUCH A RIEULMIEUM + {0xAA49, 0xCC33}, //7214 #HANGUL SYLLABLE CHIEUCH A RIEULPIEUP + {0xAA4A, 0xCC34}, //7215 #HANGUL SYLLABLE CHIEUCH A RIEULSIOS + {0xAA4B, 0xCC35}, //7216 #HANGUL SYLLABLE CHIEUCH A RIEULTHIEUTH + {0xAA4C, 0xCC36}, //7217 #HANGUL SYLLABLE CHIEUCH A RIEULPHIEUPH + {0xAA4D, 0xCC37}, //7218 #HANGUL SYLLABLE CHIEUCH A RIEULHIEUH + {0xAA4E, 0xCC3A}, //7219 #HANGUL SYLLABLE CHIEUCH A PIEUPSIOS + {0xAA4F, 0xCC3F}, //7220 #HANGUL SYLLABLE CHIEUCH A CHIEUCH + {0xAA50, 0xCC40}, //7221 #HANGUL SYLLABLE CHIEUCH A KHIEUKH + {0xAA51, 0xCC41}, //7222 #HANGUL SYLLABLE CHIEUCH A THIEUTH + {0xAA52, 0xCC42}, //7223 #HANGUL SYLLABLE CHIEUCH A PHIEUPH + {0xAA53, 0xCC43}, //7224 #HANGUL SYLLABLE CHIEUCH A HIEUH + {0xAA54, 0xCC46}, //7225 #HANGUL SYLLABLE CHIEUCH AE SSANGKIYEOK + {0xAA55, 0xCC47}, //7226 #HANGUL SYLLABLE CHIEUCH AE KIYEOKSIOS + {0xAA56, 0xCC49}, //7227 #HANGUL SYLLABLE CHIEUCH AE NIEUNCIEUC + {0xAA57, 0xCC4A}, //7228 #HANGUL SYLLABLE CHIEUCH AE NIEUNHIEUH + {0xAA58, 0xCC4B}, //7229 #HANGUL SYLLABLE CHIEUCH AE TIKEUT + {0xAA59, 0xCC4D}, //7230 #HANGUL SYLLABLE CHIEUCH AE RIEULKIYEOK + {0xAA5A, 0xCC4E}, //7231 #HANGUL SYLLABLE CHIEUCH AE RIEULMIEUM + {0xAA61, 0xCC4F}, //7232 #HANGUL SYLLABLE CHIEUCH AE RIEULPIEUP + {0xAA62, 0xCC50}, //7233 #HANGUL SYLLABLE CHIEUCH AE RIEULSIOS + {0xAA63, 0xCC51}, //7234 #HANGUL SYLLABLE CHIEUCH AE RIEULTHIEUTH + {0xAA64, 0xCC52}, //7235 #HANGUL SYLLABLE CHIEUCH AE RIEULPHIEUPH + {0xAA65, 0xCC53}, //7236 #HANGUL SYLLABLE CHIEUCH AE RIEULHIEUH + {0xAA66, 0xCC56}, //7237 #HANGUL SYLLABLE CHIEUCH AE PIEUPSIOS + {0xAA67, 0xCC5A}, //7238 #HANGUL SYLLABLE CHIEUCH AE CIEUC + {0xAA68, 0xCC5B}, //7239 #HANGUL SYLLABLE CHIEUCH AE CHIEUCH + {0xAA69, 0xCC5C}, //7240 #HANGUL SYLLABLE CHIEUCH AE KHIEUKH + {0xAA6A, 0xCC5D}, //7241 #HANGUL SYLLABLE CHIEUCH AE THIEUTH + {0xAA6B, 0xCC5E}, //7242 #HANGUL SYLLABLE CHIEUCH AE PHIEUPH + {0xAA6C, 0xCC5F}, //7243 #HANGUL SYLLABLE CHIEUCH AE HIEUH + {0xAA6D, 0xCC61}, //7244 #HANGUL SYLLABLE CHIEUCH YA KIYEOK + {0xAA6E, 0xCC62}, //7245 #HANGUL SYLLABLE CHIEUCH YA SSANGKIYEOK + {0xAA6F, 0xCC63}, //7246 #HANGUL SYLLABLE CHIEUCH YA KIYEOKSIOS + {0xAA70, 0xCC65}, //7247 #HANGUL SYLLABLE CHIEUCH YA NIEUNCIEUC + {0xAA71, 0xCC67}, //7248 #HANGUL SYLLABLE CHIEUCH YA TIKEUT + {0xAA72, 0xCC69}, //7249 #HANGUL SYLLABLE CHIEUCH YA RIEULKIYEOK + {0xAA73, 0xCC6A}, //7250 #HANGUL SYLLABLE CHIEUCH YA RIEULMIEUM + {0xAA74, 0xCC6B}, //7251 #HANGUL SYLLABLE CHIEUCH YA RIEULPIEUP + {0xAA75, 0xCC6C}, //7252 #HANGUL SYLLABLE CHIEUCH YA RIEULSIOS + {0xAA76, 0xCC6D}, //7253 #HANGUL SYLLABLE CHIEUCH YA RIEULTHIEUTH + {0xAA77, 0xCC6E}, //7254 #HANGUL SYLLABLE CHIEUCH YA RIEULPHIEUPH + {0xAA78, 0xCC6F}, //7255 #HANGUL SYLLABLE CHIEUCH YA RIEULHIEUH + {0xAA79, 0xCC71}, //7256 #HANGUL SYLLABLE CHIEUCH YA PIEUP + {0xAA7A, 0xCC72}, //7257 #HANGUL SYLLABLE CHIEUCH YA PIEUPSIOS + {0xAA81, 0xCC73}, //7258 #HANGUL SYLLABLE CHIEUCH YA SIOS + {0xAA82, 0xCC74}, //7259 #HANGUL SYLLABLE CHIEUCH YA SSANGSIOS + {0xAA83, 0xCC76}, //7260 #HANGUL SYLLABLE CHIEUCH YA CIEUC + {0xAA84, 0xCC77}, //7261 #HANGUL SYLLABLE CHIEUCH YA CHIEUCH + {0xAA85, 0xCC78}, //7262 #HANGUL SYLLABLE CHIEUCH YA KHIEUKH + {0xAA86, 0xCC79}, //7263 #HANGUL SYLLABLE CHIEUCH YA THIEUTH + {0xAA87, 0xCC7A}, //7264 #HANGUL SYLLABLE CHIEUCH YA PHIEUPH + {0xAA88, 0xCC7B}, //7265 #HANGUL SYLLABLE CHIEUCH YA HIEUH + {0xAA89, 0xCC7C}, //7266 #HANGUL SYLLABLE CHIEUCH YAE + {0xAA8A, 0xCC7D}, //7267 #HANGUL SYLLABLE CHIEUCH YAE KIYEOK + {0xAA8B, 0xCC7E}, //7268 #HANGUL SYLLABLE CHIEUCH YAE SSANGKIYEOK + {0xAA8C, 0xCC7F}, //7269 #HANGUL SYLLABLE CHIEUCH YAE KIYEOKSIOS + {0xAA8D, 0xCC80}, //7270 #HANGUL SYLLABLE CHIEUCH YAE NIEUN + {0xAA8E, 0xCC81}, //7271 #HANGUL SYLLABLE CHIEUCH YAE NIEUNCIEUC + {0xAA8F, 0xCC82}, //7272 #HANGUL SYLLABLE CHIEUCH YAE NIEUNHIEUH + {0xAA90, 0xCC83}, //7273 #HANGUL SYLLABLE CHIEUCH YAE TIKEUT + {0xAA91, 0xCC84}, //7274 #HANGUL SYLLABLE CHIEUCH YAE RIEUL + {0xAA92, 0xCC85}, //7275 #HANGUL SYLLABLE CHIEUCH YAE RIEULKIYEOK + {0xAA93, 0xCC86}, //7276 #HANGUL SYLLABLE CHIEUCH YAE RIEULMIEUM + {0xAA94, 0xCC87}, //7277 #HANGUL SYLLABLE CHIEUCH YAE RIEULPIEUP + {0xAA95, 0xCC88}, //7278 #HANGUL SYLLABLE CHIEUCH YAE RIEULSIOS + {0xAA96, 0xCC89}, //7279 #HANGUL SYLLABLE CHIEUCH YAE RIEULTHIEUTH + {0xAA97, 0xCC8A}, //7280 #HANGUL SYLLABLE CHIEUCH YAE RIEULPHIEUPH + {0xAA98, 0xCC8B}, //7281 #HANGUL SYLLABLE CHIEUCH YAE RIEULHIEUH + {0xAA99, 0xCC8C}, //7282 #HANGUL SYLLABLE CHIEUCH YAE MIEUM + {0xAA9A, 0xCC8D}, //7283 #HANGUL SYLLABLE CHIEUCH YAE PIEUP + {0xAA9B, 0xCC8E}, //7284 #HANGUL SYLLABLE CHIEUCH YAE PIEUPSIOS + {0xAA9C, 0xCC8F}, //7285 #HANGUL SYLLABLE CHIEUCH YAE SIOS + {0xAA9D, 0xCC90}, //7286 #HANGUL SYLLABLE CHIEUCH YAE SSANGSIOS + {0xAA9E, 0xCC91}, //7287 #HANGUL SYLLABLE CHIEUCH YAE IEUNG + {0xAA9F, 0xCC92}, //7288 #HANGUL SYLLABLE CHIEUCH YAE CIEUC + {0xAAA0, 0xCC93}, //7289 #HANGUL SYLLABLE CHIEUCH YAE CHIEUCH + {0xAAA1, 0x3041}, //7290 #HIRAGANA LETTER SMALL A + {0xAAA2, 0x3042}, //7291 #HIRAGANA LETTER A + {0xAAA3, 0x3043}, //7292 #HIRAGANA LETTER SMALL I + {0xAAA4, 0x3044}, //7293 #HIRAGANA LETTER I + {0xAAA5, 0x3045}, //7294 #HIRAGANA LETTER SMALL U + {0xAAA6, 0x3046}, //7295 #HIRAGANA LETTER U + {0xAAA7, 0x3047}, //7296 #HIRAGANA LETTER SMALL E + {0xAAA8, 0x3048}, //7297 #HIRAGANA LETTER E + {0xAAA9, 0x3049}, //7298 #HIRAGANA LETTER SMALL O + {0xAAAA, 0x304A}, //7299 #HIRAGANA LETTER O + {0xAAAB, 0x304B}, //7300 #HIRAGANA LETTER KA + {0xAAAC, 0x304C}, //7301 #HIRAGANA LETTER GA + {0xAAAD, 0x304D}, //7302 #HIRAGANA LETTER KI + {0xAAAE, 0x304E}, //7303 #HIRAGANA LETTER GI + {0xAAAF, 0x304F}, //7304 #HIRAGANA LETTER KU + {0xAAB0, 0x3050}, //7305 #HIRAGANA LETTER GU + {0xAAB1, 0x3051}, //7306 #HIRAGANA LETTER KE + {0xAAB2, 0x3052}, //7307 #HIRAGANA LETTER GE + {0xAAB3, 0x3053}, //7308 #HIRAGANA LETTER KO + {0xAAB4, 0x3054}, //7309 #HIRAGANA LETTER GO + {0xAAB5, 0x3055}, //7310 #HIRAGANA LETTER SA + {0xAAB6, 0x3056}, //7311 #HIRAGANA LETTER ZA + {0xAAB7, 0x3057}, //7312 #HIRAGANA LETTER SI + {0xAAB8, 0x3058}, //7313 #HIRAGANA LETTER ZI + {0xAAB9, 0x3059}, //7314 #HIRAGANA LETTER SU + {0xAABA, 0x305A}, //7315 #HIRAGANA LETTER ZU + {0xAABB, 0x305B}, //7316 #HIRAGANA LETTER SE + {0xAABC, 0x305C}, //7317 #HIRAGANA LETTER ZE + {0xAABD, 0x305D}, //7318 #HIRAGANA LETTER SO + {0xAABE, 0x305E}, //7319 #HIRAGANA LETTER ZO + {0xAABF, 0x305F}, //7320 #HIRAGANA LETTER TA + {0xAAC0, 0x3060}, //7321 #HIRAGANA LETTER DA + {0xAAC1, 0x3061}, //7322 #HIRAGANA LETTER TI + {0xAAC2, 0x3062}, //7323 #HIRAGANA LETTER DI + {0xAAC3, 0x3063}, //7324 #HIRAGANA LETTER SMALL TU + {0xAAC4, 0x3064}, //7325 #HIRAGANA LETTER TU + {0xAAC5, 0x3065}, //7326 #HIRAGANA LETTER DU + {0xAAC6, 0x3066}, //7327 #HIRAGANA LETTER TE + {0xAAC7, 0x3067}, //7328 #HIRAGANA LETTER DE + {0xAAC8, 0x3068}, //7329 #HIRAGANA LETTER TO + {0xAAC9, 0x3069}, //7330 #HIRAGANA LETTER DO + {0xAACA, 0x306A}, //7331 #HIRAGANA LETTER NA + {0xAACB, 0x306B}, //7332 #HIRAGANA LETTER NI + {0xAACC, 0x306C}, //7333 #HIRAGANA LETTER NU + {0xAACD, 0x306D}, //7334 #HIRAGANA LETTER NE + {0xAACE, 0x306E}, //7335 #HIRAGANA LETTER NO + {0xAACF, 0x306F}, //7336 #HIRAGANA LETTER HA + {0xAAD0, 0x3070}, //7337 #HIRAGANA LETTER BA + {0xAAD1, 0x3071}, //7338 #HIRAGANA LETTER PA + {0xAAD2, 0x3072}, //7339 #HIRAGANA LETTER HI + {0xAAD3, 0x3073}, //7340 #HIRAGANA LETTER BI + {0xAAD4, 0x3074}, //7341 #HIRAGANA LETTER PI + {0xAAD5, 0x3075}, //7342 #HIRAGANA LETTER HU + {0xAAD6, 0x3076}, //7343 #HIRAGANA LETTER BU + {0xAAD7, 0x3077}, //7344 #HIRAGANA LETTER PU + {0xAAD8, 0x3078}, //7345 #HIRAGANA LETTER HE + {0xAAD9, 0x3079}, //7346 #HIRAGANA LETTER BE + {0xAADA, 0x307A}, //7347 #HIRAGANA LETTER PE + {0xAADB, 0x307B}, //7348 #HIRAGANA LETTER HO + {0xAADC, 0x307C}, //7349 #HIRAGANA LETTER BO + {0xAADD, 0x307D}, //7350 #HIRAGANA LETTER PO + {0xAADE, 0x307E}, //7351 #HIRAGANA LETTER MA + {0xAADF, 0x307F}, //7352 #HIRAGANA LETTER MI + {0xAAE0, 0x3080}, //7353 #HIRAGANA LETTER MU + {0xAAE1, 0x3081}, //7354 #HIRAGANA LETTER ME + {0xAAE2, 0x3082}, //7355 #HIRAGANA LETTER MO + {0xAAE3, 0x3083}, //7356 #HIRAGANA LETTER SMALL YA + {0xAAE4, 0x3084}, //7357 #HIRAGANA LETTER YA + {0xAAE5, 0x3085}, //7358 #HIRAGANA LETTER SMALL YU + {0xAAE6, 0x3086}, //7359 #HIRAGANA LETTER YU + {0xAAE7, 0x3087}, //7360 #HIRAGANA LETTER SMALL YO + {0xAAE8, 0x3088}, //7361 #HIRAGANA LETTER YO + {0xAAE9, 0x3089}, //7362 #HIRAGANA LETTER RA + {0xAAEA, 0x308A}, //7363 #HIRAGANA LETTER RI + {0xAAEB, 0x308B}, //7364 #HIRAGANA LETTER RU + {0xAAEC, 0x308C}, //7365 #HIRAGANA LETTER RE + {0xAAED, 0x308D}, //7366 #HIRAGANA LETTER RO + {0xAAEE, 0x308E}, //7367 #HIRAGANA LETTER SMALL WA + {0xAAEF, 0x308F}, //7368 #HIRAGANA LETTER WA + {0xAAF0, 0x3090}, //7369 #HIRAGANA LETTER WI + {0xAAF1, 0x3091}, //7370 #HIRAGANA LETTER WE + {0xAAF2, 0x3092}, //7371 #HIRAGANA LETTER WO + {0xAAF3, 0x3093}, //7372 #HIRAGANA LETTER N + {0xAB41, 0xCC94}, //7373 #HANGUL SYLLABLE CHIEUCH YAE KHIEUKH + {0xAB42, 0xCC95}, //7374 #HANGUL SYLLABLE CHIEUCH YAE THIEUTH + {0xAB43, 0xCC96}, //7375 #HANGUL SYLLABLE CHIEUCH YAE PHIEUPH + {0xAB44, 0xCC97}, //7376 #HANGUL SYLLABLE CHIEUCH YAE HIEUH + {0xAB45, 0xCC9A}, //7377 #HANGUL SYLLABLE CHIEUCH EO SSANGKIYEOK + {0xAB46, 0xCC9B}, //7378 #HANGUL SYLLABLE CHIEUCH EO KIYEOKSIOS + {0xAB47, 0xCC9D}, //7379 #HANGUL SYLLABLE CHIEUCH EO NIEUNCIEUC + {0xAB48, 0xCC9E}, //7380 #HANGUL SYLLABLE CHIEUCH EO NIEUNHIEUH + {0xAB49, 0xCC9F}, //7381 #HANGUL SYLLABLE CHIEUCH EO TIKEUT + {0xAB4A, 0xCCA1}, //7382 #HANGUL SYLLABLE CHIEUCH EO RIEULKIYEOK + {0xAB4B, 0xCCA2}, //7383 #HANGUL SYLLABLE CHIEUCH EO RIEULMIEUM + {0xAB4C, 0xCCA3}, //7384 #HANGUL SYLLABLE CHIEUCH EO RIEULPIEUP + {0xAB4D, 0xCCA4}, //7385 #HANGUL SYLLABLE CHIEUCH EO RIEULSIOS + {0xAB4E, 0xCCA5}, //7386 #HANGUL SYLLABLE CHIEUCH EO RIEULTHIEUTH + {0xAB4F, 0xCCA6}, //7387 #HANGUL SYLLABLE CHIEUCH EO RIEULPHIEUPH + {0xAB50, 0xCCA7}, //7388 #HANGUL SYLLABLE CHIEUCH EO RIEULHIEUH + {0xAB51, 0xCCAA}, //7389 #HANGUL SYLLABLE CHIEUCH EO PIEUPSIOS + {0xAB52, 0xCCAE}, //7390 #HANGUL SYLLABLE CHIEUCH EO CIEUC + {0xAB53, 0xCCAF}, //7391 #HANGUL SYLLABLE CHIEUCH EO CHIEUCH + {0xAB54, 0xCCB0}, //7392 #HANGUL SYLLABLE CHIEUCH EO KHIEUKH + {0xAB55, 0xCCB1}, //7393 #HANGUL SYLLABLE CHIEUCH EO THIEUTH + {0xAB56, 0xCCB2}, //7394 #HANGUL SYLLABLE CHIEUCH EO PHIEUPH + {0xAB57, 0xCCB3}, //7395 #HANGUL SYLLABLE CHIEUCH EO HIEUH + {0xAB58, 0xCCB6}, //7396 #HANGUL SYLLABLE CHIEUCH E SSANGKIYEOK + {0xAB59, 0xCCB7}, //7397 #HANGUL SYLLABLE CHIEUCH E KIYEOKSIOS + {0xAB5A, 0xCCB9}, //7398 #HANGUL SYLLABLE CHIEUCH E NIEUNCIEUC + {0xAB61, 0xCCBA}, //7399 #HANGUL SYLLABLE CHIEUCH E NIEUNHIEUH + {0xAB62, 0xCCBB}, //7400 #HANGUL SYLLABLE CHIEUCH E TIKEUT + {0xAB63, 0xCCBD}, //7401 #HANGUL SYLLABLE CHIEUCH E RIEULKIYEOK + {0xAB64, 0xCCBE}, //7402 #HANGUL SYLLABLE CHIEUCH E RIEULMIEUM + {0xAB65, 0xCCBF}, //7403 #HANGUL SYLLABLE CHIEUCH E RIEULPIEUP + {0xAB66, 0xCCC0}, //7404 #HANGUL SYLLABLE CHIEUCH E RIEULSIOS + {0xAB67, 0xCCC1}, //7405 #HANGUL SYLLABLE CHIEUCH E RIEULTHIEUTH + {0xAB68, 0xCCC2}, //7406 #HANGUL SYLLABLE CHIEUCH E RIEULPHIEUPH + {0xAB69, 0xCCC3}, //7407 #HANGUL SYLLABLE CHIEUCH E RIEULHIEUH + {0xAB6A, 0xCCC6}, //7408 #HANGUL SYLLABLE CHIEUCH E PIEUPSIOS + {0xAB6B, 0xCCC8}, //7409 #HANGUL SYLLABLE CHIEUCH E SSANGSIOS + {0xAB6C, 0xCCCA}, //7410 #HANGUL SYLLABLE CHIEUCH E CIEUC + {0xAB6D, 0xCCCB}, //7411 #HANGUL SYLLABLE CHIEUCH E CHIEUCH + {0xAB6E, 0xCCCC}, //7412 #HANGUL SYLLABLE CHIEUCH E KHIEUKH + {0xAB6F, 0xCCCD}, //7413 #HANGUL SYLLABLE CHIEUCH E THIEUTH + {0xAB70, 0xCCCE}, //7414 #HANGUL SYLLABLE CHIEUCH E PHIEUPH + {0xAB71, 0xCCCF}, //7415 #HANGUL SYLLABLE CHIEUCH E HIEUH + {0xAB72, 0xCCD1}, //7416 #HANGUL SYLLABLE CHIEUCH YEO KIYEOK + {0xAB73, 0xCCD2}, //7417 #HANGUL SYLLABLE CHIEUCH YEO SSANGKIYEOK + {0xAB74, 0xCCD3}, //7418 #HANGUL SYLLABLE CHIEUCH YEO KIYEOKSIOS + {0xAB75, 0xCCD5}, //7419 #HANGUL SYLLABLE CHIEUCH YEO NIEUNCIEUC + {0xAB76, 0xCCD6}, //7420 #HANGUL SYLLABLE CHIEUCH YEO NIEUNHIEUH + {0xAB77, 0xCCD7}, //7421 #HANGUL SYLLABLE CHIEUCH YEO TIKEUT + {0xAB78, 0xCCD8}, //7422 #HANGUL SYLLABLE CHIEUCH YEO RIEUL + {0xAB79, 0xCCD9}, //7423 #HANGUL SYLLABLE CHIEUCH YEO RIEULKIYEOK + {0xAB7A, 0xCCDA}, //7424 #HANGUL SYLLABLE CHIEUCH YEO RIEULMIEUM + {0xAB81, 0xCCDB}, //7425 #HANGUL SYLLABLE CHIEUCH YEO RIEULPIEUP + {0xAB82, 0xCCDC}, //7426 #HANGUL SYLLABLE CHIEUCH YEO RIEULSIOS + {0xAB83, 0xCCDD}, //7427 #HANGUL SYLLABLE CHIEUCH YEO RIEULTHIEUTH + {0xAB84, 0xCCDE}, //7428 #HANGUL SYLLABLE CHIEUCH YEO RIEULPHIEUPH + {0xAB85, 0xCCDF}, //7429 #HANGUL SYLLABLE CHIEUCH YEO RIEULHIEUH + {0xAB86, 0xCCE0}, //7430 #HANGUL SYLLABLE CHIEUCH YEO MIEUM + {0xAB87, 0xCCE1}, //7431 #HANGUL SYLLABLE CHIEUCH YEO PIEUP + {0xAB88, 0xCCE2}, //7432 #HANGUL SYLLABLE CHIEUCH YEO PIEUPSIOS + {0xAB89, 0xCCE3}, //7433 #HANGUL SYLLABLE CHIEUCH YEO SIOS + {0xAB8A, 0xCCE5}, //7434 #HANGUL SYLLABLE CHIEUCH YEO IEUNG + {0xAB8B, 0xCCE6}, //7435 #HANGUL SYLLABLE CHIEUCH YEO CIEUC + {0xAB8C, 0xCCE7}, //7436 #HANGUL SYLLABLE CHIEUCH YEO CHIEUCH + {0xAB8D, 0xCCE8}, //7437 #HANGUL SYLLABLE CHIEUCH YEO KHIEUKH + {0xAB8E, 0xCCE9}, //7438 #HANGUL SYLLABLE CHIEUCH YEO THIEUTH + {0xAB8F, 0xCCEA}, //7439 #HANGUL SYLLABLE CHIEUCH YEO PHIEUPH + {0xAB90, 0xCCEB}, //7440 #HANGUL SYLLABLE CHIEUCH YEO HIEUH + {0xAB91, 0xCCED}, //7441 #HANGUL SYLLABLE CHIEUCH YE KIYEOK + {0xAB92, 0xCCEE}, //7442 #HANGUL SYLLABLE CHIEUCH YE SSANGKIYEOK + {0xAB93, 0xCCEF}, //7443 #HANGUL SYLLABLE CHIEUCH YE KIYEOKSIOS + {0xAB94, 0xCCF1}, //7444 #HANGUL SYLLABLE CHIEUCH YE NIEUNCIEUC + {0xAB95, 0xCCF2}, //7445 #HANGUL SYLLABLE CHIEUCH YE NIEUNHIEUH + {0xAB96, 0xCCF3}, //7446 #HANGUL SYLLABLE CHIEUCH YE TIKEUT + {0xAB97, 0xCCF4}, //7447 #HANGUL SYLLABLE CHIEUCH YE RIEUL + {0xAB98, 0xCCF5}, //7448 #HANGUL SYLLABLE CHIEUCH YE RIEULKIYEOK + {0xAB99, 0xCCF6}, //7449 #HANGUL SYLLABLE CHIEUCH YE RIEULMIEUM + {0xAB9A, 0xCCF7}, //7450 #HANGUL SYLLABLE CHIEUCH YE RIEULPIEUP + {0xAB9B, 0xCCF8}, //7451 #HANGUL SYLLABLE CHIEUCH YE RIEULSIOS + {0xAB9C, 0xCCF9}, //7452 #HANGUL SYLLABLE CHIEUCH YE RIEULTHIEUTH + {0xAB9D, 0xCCFA}, //7453 #HANGUL SYLLABLE CHIEUCH YE RIEULPHIEUPH + {0xAB9E, 0xCCFB}, //7454 #HANGUL SYLLABLE CHIEUCH YE RIEULHIEUH + {0xAB9F, 0xCCFC}, //7455 #HANGUL SYLLABLE CHIEUCH YE MIEUM + {0xABA0, 0xCCFD}, //7456 #HANGUL SYLLABLE CHIEUCH YE PIEUP + {0xABA1, 0x30A1}, //7457 #KATAKANA LETTER SMALL A + {0xABA2, 0x30A2}, //7458 #KATAKANA LETTER A + {0xABA3, 0x30A3}, //7459 #KATAKANA LETTER SMALL I + {0xABA4, 0x30A4}, //7460 #KATAKANA LETTER I + {0xABA5, 0x30A5}, //7461 #KATAKANA LETTER SMALL U + {0xABA6, 0x30A6}, //7462 #KATAKANA LETTER U + {0xABA7, 0x30A7}, //7463 #KATAKANA LETTER SMALL E + {0xABA8, 0x30A8}, //7464 #KATAKANA LETTER E + {0xABA9, 0x30A9}, //7465 #KATAKANA LETTER SMALL O + {0xABAA, 0x30AA}, //7466 #KATAKANA LETTER O + {0xABAB, 0x30AB}, //7467 #KATAKANA LETTER KA + {0xABAC, 0x30AC}, //7468 #KATAKANA LETTER GA + {0xABAD, 0x30AD}, //7469 #KATAKANA LETTER KI + {0xABAE, 0x30AE}, //7470 #KATAKANA LETTER GI + {0xABAF, 0x30AF}, //7471 #KATAKANA LETTER KU + {0xABB0, 0x30B0}, //7472 #KATAKANA LETTER GU + {0xABB1, 0x30B1}, //7473 #KATAKANA LETTER KE + {0xABB2, 0x30B2}, //7474 #KATAKANA LETTER GE + {0xABB3, 0x30B3}, //7475 #KATAKANA LETTER KO + {0xABB4, 0x30B4}, //7476 #KATAKANA LETTER GO + {0xABB5, 0x30B5}, //7477 #KATAKANA LETTER SA + {0xABB6, 0x30B6}, //7478 #KATAKANA LETTER ZA + {0xABB7, 0x30B7}, //7479 #KATAKANA LETTER SI + {0xABB8, 0x30B8}, //7480 #KATAKANA LETTER ZI + {0xABB9, 0x30B9}, //7481 #KATAKANA LETTER SU + {0xABBA, 0x30BA}, //7482 #KATAKANA LETTER ZU + {0xABBB, 0x30BB}, //7483 #KATAKANA LETTER SE + {0xABBC, 0x30BC}, //7484 #KATAKANA LETTER ZE + {0xABBD, 0x30BD}, //7485 #KATAKANA LETTER SO + {0xABBE, 0x30BE}, //7486 #KATAKANA LETTER ZO + {0xABBF, 0x30BF}, //7487 #KATAKANA LETTER TA + {0xABC0, 0x30C0}, //7488 #KATAKANA LETTER DA + {0xABC1, 0x30C1}, //7489 #KATAKANA LETTER TI + {0xABC2, 0x30C2}, //7490 #KATAKANA LETTER DI + {0xABC3, 0x30C3}, //7491 #KATAKANA LETTER SMALL TU + {0xABC4, 0x30C4}, //7492 #KATAKANA LETTER TU + {0xABC5, 0x30C5}, //7493 #KATAKANA LETTER DU + {0xABC6, 0x30C6}, //7494 #KATAKANA LETTER TE + {0xABC7, 0x30C7}, //7495 #KATAKANA LETTER DE + {0xABC8, 0x30C8}, //7496 #KATAKANA LETTER TO + {0xABC9, 0x30C9}, //7497 #KATAKANA LETTER DO + {0xABCA, 0x30CA}, //7498 #KATAKANA LETTER NA + {0xABCB, 0x30CB}, //7499 #KATAKANA LETTER NI + {0xABCC, 0x30CC}, //7500 #KATAKANA LETTER NU + {0xABCD, 0x30CD}, //7501 #KATAKANA LETTER NE + {0xABCE, 0x30CE}, //7502 #KATAKANA LETTER NO + {0xABCF, 0x30CF}, //7503 #KATAKANA LETTER HA + {0xABD0, 0x30D0}, //7504 #KATAKANA LETTER BA + {0xABD1, 0x30D1}, //7505 #KATAKANA LETTER PA + {0xABD2, 0x30D2}, //7506 #KATAKANA LETTER HI + {0xABD3, 0x30D3}, //7507 #KATAKANA LETTER BI + {0xABD4, 0x30D4}, //7508 #KATAKANA LETTER PI + {0xABD5, 0x30D5}, //7509 #KATAKANA LETTER HU + {0xABD6, 0x30D6}, //7510 #KATAKANA LETTER BU + {0xABD7, 0x30D7}, //7511 #KATAKANA LETTER PU + {0xABD8, 0x30D8}, //7512 #KATAKANA LETTER HE + {0xABD9, 0x30D9}, //7513 #KATAKANA LETTER BE + {0xABDA, 0x30DA}, //7514 #KATAKANA LETTER PE + {0xABDB, 0x30DB}, //7515 #KATAKANA LETTER HO + {0xABDC, 0x30DC}, //7516 #KATAKANA LETTER BO + {0xABDD, 0x30DD}, //7517 #KATAKANA LETTER PO + {0xABDE, 0x30DE}, //7518 #KATAKANA LETTER MA + {0xABDF, 0x30DF}, //7519 #KATAKANA LETTER MI + {0xABE0, 0x30E0}, //7520 #KATAKANA LETTER MU + {0xABE1, 0x30E1}, //7521 #KATAKANA LETTER ME + {0xABE2, 0x30E2}, //7522 #KATAKANA LETTER MO + {0xABE3, 0x30E3}, //7523 #KATAKANA LETTER SMALL YA + {0xABE4, 0x30E4}, //7524 #KATAKANA LETTER YA + {0xABE5, 0x30E5}, //7525 #KATAKANA LETTER SMALL YU + {0xABE6, 0x30E6}, //7526 #KATAKANA LETTER YU + {0xABE7, 0x30E7}, //7527 #KATAKANA LETTER SMALL YO + {0xABE8, 0x30E8}, //7528 #KATAKANA LETTER YO + {0xABE9, 0x30E9}, //7529 #KATAKANA LETTER RA + {0xABEA, 0x30EA}, //7530 #KATAKANA LETTER RI + {0xABEB, 0x30EB}, //7531 #KATAKANA LETTER RU + {0xABEC, 0x30EC}, //7532 #KATAKANA LETTER RE + {0xABED, 0x30ED}, //7533 #KATAKANA LETTER RO + {0xABEE, 0x30EE}, //7534 #KATAKANA LETTER SMALL WA + {0xABEF, 0x30EF}, //7535 #KATAKANA LETTER WA + {0xABF0, 0x30F0}, //7536 #KATAKANA LETTER WI + {0xABF1, 0x30F1}, //7537 #KATAKANA LETTER WE + {0xABF2, 0x30F2}, //7538 #KATAKANA LETTER WO + {0xABF3, 0x30F3}, //7539 #KATAKANA LETTER N + {0xABF4, 0x30F4}, //7540 #KATAKANA LETTER VU + {0xABF5, 0x30F5}, //7541 #KATAKANA LETTER SMALL KA + {0xABF6, 0x30F6}, //7542 #KATAKANA LETTER SMALL KE + {0xAC41, 0xCCFE}, //7543 #HANGUL SYLLABLE CHIEUCH YE PIEUPSIOS + {0xAC42, 0xCCFF}, //7544 #HANGUL SYLLABLE CHIEUCH YE SIOS + {0xAC43, 0xCD00}, //7545 #HANGUL SYLLABLE CHIEUCH YE SSANGSIOS + {0xAC44, 0xCD02}, //7546 #HANGUL SYLLABLE CHIEUCH YE CIEUC + {0xAC45, 0xCD03}, //7547 #HANGUL SYLLABLE CHIEUCH YE CHIEUCH + {0xAC46, 0xCD04}, //7548 #HANGUL SYLLABLE CHIEUCH YE KHIEUKH + {0xAC47, 0xCD05}, //7549 #HANGUL SYLLABLE CHIEUCH YE THIEUTH + {0xAC48, 0xCD06}, //7550 #HANGUL SYLLABLE CHIEUCH YE PHIEUPH + {0xAC49, 0xCD07}, //7551 #HANGUL SYLLABLE CHIEUCH YE HIEUH + {0xAC4A, 0xCD0A}, //7552 #HANGUL SYLLABLE CHIEUCH O SSANGKIYEOK + {0xAC4B, 0xCD0B}, //7553 #HANGUL SYLLABLE CHIEUCH O KIYEOKSIOS + {0xAC4C, 0xCD0D}, //7554 #HANGUL SYLLABLE CHIEUCH O NIEUNCIEUC + {0xAC4D, 0xCD0E}, //7555 #HANGUL SYLLABLE CHIEUCH O NIEUNHIEUH + {0xAC4E, 0xCD0F}, //7556 #HANGUL SYLLABLE CHIEUCH O TIKEUT + {0xAC4F, 0xCD11}, //7557 #HANGUL SYLLABLE CHIEUCH O RIEULKIYEOK + {0xAC50, 0xCD12}, //7558 #HANGUL SYLLABLE CHIEUCH O RIEULMIEUM + {0xAC51, 0xCD13}, //7559 #HANGUL SYLLABLE CHIEUCH O RIEULPIEUP + {0xAC52, 0xCD14}, //7560 #HANGUL SYLLABLE CHIEUCH O RIEULSIOS + {0xAC53, 0xCD15}, //7561 #HANGUL SYLLABLE CHIEUCH O RIEULTHIEUTH + {0xAC54, 0xCD16}, //7562 #HANGUL SYLLABLE CHIEUCH O RIEULPHIEUPH + {0xAC55, 0xCD17}, //7563 #HANGUL SYLLABLE CHIEUCH O RIEULHIEUH + {0xAC56, 0xCD1A}, //7564 #HANGUL SYLLABLE CHIEUCH O PIEUPSIOS + {0xAC57, 0xCD1C}, //7565 #HANGUL SYLLABLE CHIEUCH O SSANGSIOS + {0xAC58, 0xCD1E}, //7566 #HANGUL SYLLABLE CHIEUCH O CIEUC + {0xAC59, 0xCD1F}, //7567 #HANGUL SYLLABLE CHIEUCH O CHIEUCH + {0xAC5A, 0xCD20}, //7568 #HANGUL SYLLABLE CHIEUCH O KHIEUKH + {0xAC61, 0xCD21}, //7569 #HANGUL SYLLABLE CHIEUCH O THIEUTH + {0xAC62, 0xCD22}, //7570 #HANGUL SYLLABLE CHIEUCH O PHIEUPH + {0xAC63, 0xCD23}, //7571 #HANGUL SYLLABLE CHIEUCH O HIEUH + {0xAC64, 0xCD25}, //7572 #HANGUL SYLLABLE CHIEUCH WA KIYEOK + {0xAC65, 0xCD26}, //7573 #HANGUL SYLLABLE CHIEUCH WA SSANGKIYEOK + {0xAC66, 0xCD27}, //7574 #HANGUL SYLLABLE CHIEUCH WA KIYEOKSIOS + {0xAC67, 0xCD29}, //7575 #HANGUL SYLLABLE CHIEUCH WA NIEUNCIEUC + {0xAC68, 0xCD2A}, //7576 #HANGUL SYLLABLE CHIEUCH WA NIEUNHIEUH + {0xAC69, 0xCD2B}, //7577 #HANGUL SYLLABLE CHIEUCH WA TIKEUT + {0xAC6A, 0xCD2D}, //7578 #HANGUL SYLLABLE CHIEUCH WA RIEULKIYEOK + {0xAC6B, 0xCD2E}, //7579 #HANGUL SYLLABLE CHIEUCH WA RIEULMIEUM + {0xAC6C, 0xCD2F}, //7580 #HANGUL SYLLABLE CHIEUCH WA RIEULPIEUP + {0xAC6D, 0xCD30}, //7581 #HANGUL SYLLABLE CHIEUCH WA RIEULSIOS + {0xAC6E, 0xCD31}, //7582 #HANGUL SYLLABLE CHIEUCH WA RIEULTHIEUTH + {0xAC6F, 0xCD32}, //7583 #HANGUL SYLLABLE CHIEUCH WA RIEULPHIEUPH + {0xAC70, 0xCD33}, //7584 #HANGUL SYLLABLE CHIEUCH WA RIEULHIEUH + {0xAC71, 0xCD34}, //7585 #HANGUL SYLLABLE CHIEUCH WA MIEUM + {0xAC72, 0xCD35}, //7586 #HANGUL SYLLABLE CHIEUCH WA PIEUP + {0xAC73, 0xCD36}, //7587 #HANGUL SYLLABLE CHIEUCH WA PIEUPSIOS + {0xAC74, 0xCD37}, //7588 #HANGUL SYLLABLE CHIEUCH WA SIOS + {0xAC75, 0xCD38}, //7589 #HANGUL SYLLABLE CHIEUCH WA SSANGSIOS + {0xAC76, 0xCD3A}, //7590 #HANGUL SYLLABLE CHIEUCH WA CIEUC + {0xAC77, 0xCD3B}, //7591 #HANGUL SYLLABLE CHIEUCH WA CHIEUCH + {0xAC78, 0xCD3C}, //7592 #HANGUL SYLLABLE CHIEUCH WA KHIEUKH + {0xAC79, 0xCD3D}, //7593 #HANGUL SYLLABLE CHIEUCH WA THIEUTH + {0xAC7A, 0xCD3E}, //7594 #HANGUL SYLLABLE CHIEUCH WA PHIEUPH + {0xAC81, 0xCD3F}, //7595 #HANGUL SYLLABLE CHIEUCH WA HIEUH + {0xAC82, 0xCD40}, //7596 #HANGUL SYLLABLE CHIEUCH WAE + {0xAC83, 0xCD41}, //7597 #HANGUL SYLLABLE CHIEUCH WAE KIYEOK + {0xAC84, 0xCD42}, //7598 #HANGUL SYLLABLE CHIEUCH WAE SSANGKIYEOK + {0xAC85, 0xCD43}, //7599 #HANGUL SYLLABLE CHIEUCH WAE KIYEOKSIOS + {0xAC86, 0xCD44}, //7600 #HANGUL SYLLABLE CHIEUCH WAE NIEUN + {0xAC87, 0xCD45}, //7601 #HANGUL SYLLABLE CHIEUCH WAE NIEUNCIEUC + {0xAC88, 0xCD46}, //7602 #HANGUL SYLLABLE CHIEUCH WAE NIEUNHIEUH + {0xAC89, 0xCD47}, //7603 #HANGUL SYLLABLE CHIEUCH WAE TIKEUT + {0xAC8A, 0xCD48}, //7604 #HANGUL SYLLABLE CHIEUCH WAE RIEUL + {0xAC8B, 0xCD49}, //7605 #HANGUL SYLLABLE CHIEUCH WAE RIEULKIYEOK + {0xAC8C, 0xCD4A}, //7606 #HANGUL SYLLABLE CHIEUCH WAE RIEULMIEUM + {0xAC8D, 0xCD4B}, //7607 #HANGUL SYLLABLE CHIEUCH WAE RIEULPIEUP + {0xAC8E, 0xCD4C}, //7608 #HANGUL SYLLABLE CHIEUCH WAE RIEULSIOS + {0xAC8F, 0xCD4D}, //7609 #HANGUL SYLLABLE CHIEUCH WAE RIEULTHIEUTH + {0xAC90, 0xCD4E}, //7610 #HANGUL SYLLABLE CHIEUCH WAE RIEULPHIEUPH + {0xAC91, 0xCD4F}, //7611 #HANGUL SYLLABLE CHIEUCH WAE RIEULHIEUH + {0xAC92, 0xCD50}, //7612 #HANGUL SYLLABLE CHIEUCH WAE MIEUM + {0xAC93, 0xCD51}, //7613 #HANGUL SYLLABLE CHIEUCH WAE PIEUP + {0xAC94, 0xCD52}, //7614 #HANGUL SYLLABLE CHIEUCH WAE PIEUPSIOS + {0xAC95, 0xCD53}, //7615 #HANGUL SYLLABLE CHIEUCH WAE SIOS + {0xAC96, 0xCD54}, //7616 #HANGUL SYLLABLE CHIEUCH WAE SSANGSIOS + {0xAC97, 0xCD55}, //7617 #HANGUL SYLLABLE CHIEUCH WAE IEUNG + {0xAC98, 0xCD56}, //7618 #HANGUL SYLLABLE CHIEUCH WAE CIEUC + {0xAC99, 0xCD57}, //7619 #HANGUL SYLLABLE CHIEUCH WAE CHIEUCH + {0xAC9A, 0xCD58}, //7620 #HANGUL SYLLABLE CHIEUCH WAE KHIEUKH + {0xAC9B, 0xCD59}, //7621 #HANGUL SYLLABLE CHIEUCH WAE THIEUTH + {0xAC9C, 0xCD5A}, //7622 #HANGUL SYLLABLE CHIEUCH WAE PHIEUPH + {0xAC9D, 0xCD5B}, //7623 #HANGUL SYLLABLE CHIEUCH WAE HIEUH + {0xAC9E, 0xCD5D}, //7624 #HANGUL SYLLABLE CHIEUCH OE KIYEOK + {0xAC9F, 0xCD5E}, //7625 #HANGUL SYLLABLE CHIEUCH OE SSANGKIYEOK + {0xACA0, 0xCD5F}, //7626 #HANGUL SYLLABLE CHIEUCH OE KIYEOKSIOS + {0xACA1, 0x0410}, //7627 #CYRILLIC CAPITAL LETTER A + {0xACA2, 0x0411}, //7628 #CYRILLIC CAPITAL LETTER BE + {0xACA3, 0x0412}, //7629 #CYRILLIC CAPITAL LETTER VE + {0xACA4, 0x0413}, //7630 #CYRILLIC CAPITAL LETTER GHE + {0xACA5, 0x0414}, //7631 #CYRILLIC CAPITAL LETTER DE + {0xACA6, 0x0415}, //7632 #CYRILLIC CAPITAL LETTER IE + {0xACA7, 0x0401}, //7633 #CYRILLIC CAPITAL LETTER IO + {0xACA8, 0x0416}, //7634 #CYRILLIC CAPITAL LETTER ZHE + {0xACA9, 0x0417}, //7635 #CYRILLIC CAPITAL LETTER ZE + {0xACAA, 0x0418}, //7636 #CYRILLIC CAPITAL LETTER I + {0xACAB, 0x0419}, //7637 #CYRILLIC CAPITAL LETTER SHORT I + {0xACAC, 0x041A}, //7638 #CYRILLIC CAPITAL LETTER KA + {0xACAD, 0x041B}, //7639 #CYRILLIC CAPITAL LETTER EL + {0xACAE, 0x041C}, //7640 #CYRILLIC CAPITAL LETTER EM + {0xACAF, 0x041D}, //7641 #CYRILLIC CAPITAL LETTER EN + {0xACB0, 0x041E}, //7642 #CYRILLIC CAPITAL LETTER O + {0xACB1, 0x041F}, //7643 #CYRILLIC CAPITAL LETTER PE + {0xACB2, 0x0420}, //7644 #CYRILLIC CAPITAL LETTER ER + {0xACB3, 0x0421}, //7645 #CYRILLIC CAPITAL LETTER ES + {0xACB4, 0x0422}, //7646 #CYRILLIC CAPITAL LETTER TE + {0xACB5, 0x0423}, //7647 #CYRILLIC CAPITAL LETTER U + {0xACB6, 0x0424}, //7648 #CYRILLIC CAPITAL LETTER EF + {0xACB7, 0x0425}, //7649 #CYRILLIC CAPITAL LETTER HA + {0xACB8, 0x0426}, //7650 #CYRILLIC CAPITAL LETTER TSE + {0xACB9, 0x0427}, //7651 #CYRILLIC CAPITAL LETTER CHE + {0xACBA, 0x0428}, //7652 #CYRILLIC CAPITAL LETTER SHA + {0xACBB, 0x0429}, //7653 #CYRILLIC CAPITAL LETTER SHCHA + {0xACBC, 0x042A}, //7654 #CYRILLIC CAPITAL LETTER HARD SIGN + {0xACBD, 0x042B}, //7655 #CYRILLIC CAPITAL LETTER YERU + {0xACBE, 0x042C}, //7656 #CYRILLIC CAPITAL LETTER SOFT SIGN + {0xACBF, 0x042D}, //7657 #CYRILLIC CAPITAL LETTER E + {0xACC0, 0x042E}, //7658 #CYRILLIC CAPITAL LETTER YU + {0xACC1, 0x042F}, //7659 #CYRILLIC CAPITAL LETTER YA + {0xACD1, 0x0430}, //7660 #CYRILLIC SMALL LETTER A + {0xACD2, 0x0431}, //7661 #CYRILLIC SMALL LETTER BE + {0xACD3, 0x0432}, //7662 #CYRILLIC SMALL LETTER VE + {0xACD4, 0x0433}, //7663 #CYRILLIC SMALL LETTER GHE + {0xACD5, 0x0434}, //7664 #CYRILLIC SMALL LETTER DE + {0xACD6, 0x0435}, //7665 #CYRILLIC SMALL LETTER IE + {0xACD7, 0x0451}, //7666 #CYRILLIC SMALL LETTER IO + {0xACD8, 0x0436}, //7667 #CYRILLIC SMALL LETTER ZHE + {0xACD9, 0x0437}, //7668 #CYRILLIC SMALL LETTER ZE + {0xACDA, 0x0438}, //7669 #CYRILLIC SMALL LETTER I + {0xACDB, 0x0439}, //7670 #CYRILLIC SMALL LETTER SHORT I + {0xACDC, 0x043A}, //7671 #CYRILLIC SMALL LETTER KA + {0xACDD, 0x043B}, //7672 #CYRILLIC SMALL LETTER EL + {0xACDE, 0x043C}, //7673 #CYRILLIC SMALL LETTER EM + {0xACDF, 0x043D}, //7674 #CYRILLIC SMALL LETTER EN + {0xACE0, 0x043E}, //7675 #CYRILLIC SMALL LETTER O + {0xACE1, 0x043F}, //7676 #CYRILLIC SMALL LETTER PE + {0xACE2, 0x0440}, //7677 #CYRILLIC SMALL LETTER ER + {0xACE3, 0x0441}, //7678 #CYRILLIC SMALL LETTER ES + {0xACE4, 0x0442}, //7679 #CYRILLIC SMALL LETTER TE + {0xACE5, 0x0443}, //7680 #CYRILLIC SMALL LETTER U + {0xACE6, 0x0444}, //7681 #CYRILLIC SMALL LETTER EF + {0xACE7, 0x0445}, //7682 #CYRILLIC SMALL LETTER HA + {0xACE8, 0x0446}, //7683 #CYRILLIC SMALL LETTER TSE + {0xACE9, 0x0447}, //7684 #CYRILLIC SMALL LETTER CHE + {0xACEA, 0x0448}, //7685 #CYRILLIC SMALL LETTER SHA + {0xACEB, 0x0449}, //7686 #CYRILLIC SMALL LETTER SHCHA + {0xACEC, 0x044A}, //7687 #CYRILLIC SMALL LETTER HARD SIGN + {0xACED, 0x044B}, //7688 #CYRILLIC SMALL LETTER YERU + {0xACEE, 0x044C}, //7689 #CYRILLIC SMALL LETTER SOFT SIGN + {0xACEF, 0x044D}, //7690 #CYRILLIC SMALL LETTER E + {0xACF0, 0x044E}, //7691 #CYRILLIC SMALL LETTER YU + {0xACF1, 0x044F}, //7692 #CYRILLIC SMALL LETTER YA + {0xAD41, 0xCD61}, //7693 #HANGUL SYLLABLE CHIEUCH OE NIEUNCIEUC + {0xAD42, 0xCD62}, //7694 #HANGUL SYLLABLE CHIEUCH OE NIEUNHIEUH + {0xAD43, 0xCD63}, //7695 #HANGUL SYLLABLE CHIEUCH OE TIKEUT + {0xAD44, 0xCD65}, //7696 #HANGUL SYLLABLE CHIEUCH OE RIEULKIYEOK + {0xAD45, 0xCD66}, //7697 #HANGUL SYLLABLE CHIEUCH OE RIEULMIEUM + {0xAD46, 0xCD67}, //7698 #HANGUL SYLLABLE CHIEUCH OE RIEULPIEUP + {0xAD47, 0xCD68}, //7699 #HANGUL SYLLABLE CHIEUCH OE RIEULSIOS + {0xAD48, 0xCD69}, //7700 #HANGUL SYLLABLE CHIEUCH OE RIEULTHIEUTH + {0xAD49, 0xCD6A}, //7701 #HANGUL SYLLABLE CHIEUCH OE RIEULPHIEUPH + {0xAD4A, 0xCD6B}, //7702 #HANGUL SYLLABLE CHIEUCH OE RIEULHIEUH + {0xAD4B, 0xCD6E}, //7703 #HANGUL SYLLABLE CHIEUCH OE PIEUPSIOS + {0xAD4C, 0xCD70}, //7704 #HANGUL SYLLABLE CHIEUCH OE SSANGSIOS + {0xAD4D, 0xCD72}, //7705 #HANGUL SYLLABLE CHIEUCH OE CIEUC + {0xAD4E, 0xCD73}, //7706 #HANGUL SYLLABLE CHIEUCH OE CHIEUCH + {0xAD4F, 0xCD74}, //7707 #HANGUL SYLLABLE CHIEUCH OE KHIEUKH + {0xAD50, 0xCD75}, //7708 #HANGUL SYLLABLE CHIEUCH OE THIEUTH + {0xAD51, 0xCD76}, //7709 #HANGUL SYLLABLE CHIEUCH OE PHIEUPH + {0xAD52, 0xCD77}, //7710 #HANGUL SYLLABLE CHIEUCH OE HIEUH + {0xAD53, 0xCD79}, //7711 #HANGUL SYLLABLE CHIEUCH YO KIYEOK + {0xAD54, 0xCD7A}, //7712 #HANGUL SYLLABLE CHIEUCH YO SSANGKIYEOK + {0xAD55, 0xCD7B}, //7713 #HANGUL SYLLABLE CHIEUCH YO KIYEOKSIOS + {0xAD56, 0xCD7C}, //7714 #HANGUL SYLLABLE CHIEUCH YO NIEUN + {0xAD57, 0xCD7D}, //7715 #HANGUL SYLLABLE CHIEUCH YO NIEUNCIEUC + {0xAD58, 0xCD7E}, //7716 #HANGUL SYLLABLE CHIEUCH YO NIEUNHIEUH + {0xAD59, 0xCD7F}, //7717 #HANGUL SYLLABLE CHIEUCH YO TIKEUT + {0xAD5A, 0xCD80}, //7718 #HANGUL SYLLABLE CHIEUCH YO RIEUL + {0xAD61, 0xCD81}, //7719 #HANGUL SYLLABLE CHIEUCH YO RIEULKIYEOK + {0xAD62, 0xCD82}, //7720 #HANGUL SYLLABLE CHIEUCH YO RIEULMIEUM + {0xAD63, 0xCD83}, //7721 #HANGUL SYLLABLE CHIEUCH YO RIEULPIEUP + {0xAD64, 0xCD84}, //7722 #HANGUL SYLLABLE CHIEUCH YO RIEULSIOS + {0xAD65, 0xCD85}, //7723 #HANGUL SYLLABLE CHIEUCH YO RIEULTHIEUTH + {0xAD66, 0xCD86}, //7724 #HANGUL SYLLABLE CHIEUCH YO RIEULPHIEUPH + {0xAD67, 0xCD87}, //7725 #HANGUL SYLLABLE CHIEUCH YO RIEULHIEUH + {0xAD68, 0xCD89}, //7726 #HANGUL SYLLABLE CHIEUCH YO PIEUP + {0xAD69, 0xCD8A}, //7727 #HANGUL SYLLABLE CHIEUCH YO PIEUPSIOS + {0xAD6A, 0xCD8B}, //7728 #HANGUL SYLLABLE CHIEUCH YO SIOS + {0xAD6B, 0xCD8C}, //7729 #HANGUL SYLLABLE CHIEUCH YO SSANGSIOS + {0xAD6C, 0xCD8D}, //7730 #HANGUL SYLLABLE CHIEUCH YO IEUNG + {0xAD6D, 0xCD8E}, //7731 #HANGUL SYLLABLE CHIEUCH YO CIEUC + {0xAD6E, 0xCD8F}, //7732 #HANGUL SYLLABLE CHIEUCH YO CHIEUCH + {0xAD6F, 0xCD90}, //7733 #HANGUL SYLLABLE CHIEUCH YO KHIEUKH + {0xAD70, 0xCD91}, //7734 #HANGUL SYLLABLE CHIEUCH YO THIEUTH + {0xAD71, 0xCD92}, //7735 #HANGUL SYLLABLE CHIEUCH YO PHIEUPH + {0xAD72, 0xCD93}, //7736 #HANGUL SYLLABLE CHIEUCH YO HIEUH + {0xAD73, 0xCD96}, //7737 #HANGUL SYLLABLE CHIEUCH U SSANGKIYEOK + {0xAD74, 0xCD97}, //7738 #HANGUL SYLLABLE CHIEUCH U KIYEOKSIOS + {0xAD75, 0xCD99}, //7739 #HANGUL SYLLABLE CHIEUCH U NIEUNCIEUC + {0xAD76, 0xCD9A}, //7740 #HANGUL SYLLABLE CHIEUCH U NIEUNHIEUH + {0xAD77, 0xCD9B}, //7741 #HANGUL SYLLABLE CHIEUCH U TIKEUT + {0xAD78, 0xCD9D}, //7742 #HANGUL SYLLABLE CHIEUCH U RIEULKIYEOK + {0xAD79, 0xCD9E}, //7743 #HANGUL SYLLABLE CHIEUCH U RIEULMIEUM + {0xAD7A, 0xCD9F}, //7744 #HANGUL SYLLABLE CHIEUCH U RIEULPIEUP + {0xAD81, 0xCDA0}, //7745 #HANGUL SYLLABLE CHIEUCH U RIEULSIOS + {0xAD82, 0xCDA1}, //7746 #HANGUL SYLLABLE CHIEUCH U RIEULTHIEUTH + {0xAD83, 0xCDA2}, //7747 #HANGUL SYLLABLE CHIEUCH U RIEULPHIEUPH + {0xAD84, 0xCDA3}, //7748 #HANGUL SYLLABLE CHIEUCH U RIEULHIEUH + {0xAD85, 0xCDA6}, //7749 #HANGUL SYLLABLE CHIEUCH U PIEUPSIOS + {0xAD86, 0xCDA8}, //7750 #HANGUL SYLLABLE CHIEUCH U SSANGSIOS + {0xAD87, 0xCDAA}, //7751 #HANGUL SYLLABLE CHIEUCH U CIEUC + {0xAD88, 0xCDAB}, //7752 #HANGUL SYLLABLE CHIEUCH U CHIEUCH + {0xAD89, 0xCDAC}, //7753 #HANGUL SYLLABLE CHIEUCH U KHIEUKH + {0xAD8A, 0xCDAD}, //7754 #HANGUL SYLLABLE CHIEUCH U THIEUTH + {0xAD8B, 0xCDAE}, //7755 #HANGUL SYLLABLE CHIEUCH U PHIEUPH + {0xAD8C, 0xCDAF}, //7756 #HANGUL SYLLABLE CHIEUCH U HIEUH + {0xAD8D, 0xCDB1}, //7757 #HANGUL SYLLABLE CHIEUCH WEO KIYEOK + {0xAD8E, 0xCDB2}, //7758 #HANGUL SYLLABLE CHIEUCH WEO SSANGKIYEOK + {0xAD8F, 0xCDB3}, //7759 #HANGUL SYLLABLE CHIEUCH WEO KIYEOKSIOS + {0xAD90, 0xCDB4}, //7760 #HANGUL SYLLABLE CHIEUCH WEO NIEUN + {0xAD91, 0xCDB5}, //7761 #HANGUL SYLLABLE CHIEUCH WEO NIEUNCIEUC + {0xAD92, 0xCDB6}, //7762 #HANGUL SYLLABLE CHIEUCH WEO NIEUNHIEUH + {0xAD93, 0xCDB7}, //7763 #HANGUL SYLLABLE CHIEUCH WEO TIKEUT + {0xAD94, 0xCDB8}, //7764 #HANGUL SYLLABLE CHIEUCH WEO RIEUL + {0xAD95, 0xCDB9}, //7765 #HANGUL SYLLABLE CHIEUCH WEO RIEULKIYEOK + {0xAD96, 0xCDBA}, //7766 #HANGUL SYLLABLE CHIEUCH WEO RIEULMIEUM + {0xAD97, 0xCDBB}, //7767 #HANGUL SYLLABLE CHIEUCH WEO RIEULPIEUP + {0xAD98, 0xCDBC}, //7768 #HANGUL SYLLABLE CHIEUCH WEO RIEULSIOS + {0xAD99, 0xCDBD}, //7769 #HANGUL SYLLABLE CHIEUCH WEO RIEULTHIEUTH + {0xAD9A, 0xCDBE}, //7770 #HANGUL SYLLABLE CHIEUCH WEO RIEULPHIEUPH + {0xAD9B, 0xCDBF}, //7771 #HANGUL SYLLABLE CHIEUCH WEO RIEULHIEUH + {0xAD9C, 0xCDC0}, //7772 #HANGUL SYLLABLE CHIEUCH WEO MIEUM + {0xAD9D, 0xCDC1}, //7773 #HANGUL SYLLABLE CHIEUCH WEO PIEUP + {0xAD9E, 0xCDC2}, //7774 #HANGUL SYLLABLE CHIEUCH WEO PIEUPSIOS + {0xAD9F, 0xCDC3}, //7775 #HANGUL SYLLABLE CHIEUCH WEO SIOS + {0xADA0, 0xCDC5}, //7776 #HANGUL SYLLABLE CHIEUCH WEO IEUNG + {0xAE41, 0xCDC6}, //7777 #HANGUL SYLLABLE CHIEUCH WEO CIEUC + {0xAE42, 0xCDC7}, //7778 #HANGUL SYLLABLE CHIEUCH WEO CHIEUCH + {0xAE43, 0xCDC8}, //7779 #HANGUL SYLLABLE CHIEUCH WEO KHIEUKH + {0xAE44, 0xCDC9}, //7780 #HANGUL SYLLABLE CHIEUCH WEO THIEUTH + {0xAE45, 0xCDCA}, //7781 #HANGUL SYLLABLE CHIEUCH WEO PHIEUPH + {0xAE46, 0xCDCB}, //7782 #HANGUL SYLLABLE CHIEUCH WEO HIEUH + {0xAE47, 0xCDCD}, //7783 #HANGUL SYLLABLE CHIEUCH WE KIYEOK + {0xAE48, 0xCDCE}, //7784 #HANGUL SYLLABLE CHIEUCH WE SSANGKIYEOK + {0xAE49, 0xCDCF}, //7785 #HANGUL SYLLABLE CHIEUCH WE KIYEOKSIOS + {0xAE4A, 0xCDD1}, //7786 #HANGUL SYLLABLE CHIEUCH WE NIEUNCIEUC + {0xAE4B, 0xCDD2}, //7787 #HANGUL SYLLABLE CHIEUCH WE NIEUNHIEUH + {0xAE4C, 0xCDD3}, //7788 #HANGUL SYLLABLE CHIEUCH WE TIKEUT + {0xAE4D, 0xCDD4}, //7789 #HANGUL SYLLABLE CHIEUCH WE RIEUL + {0xAE4E, 0xCDD5}, //7790 #HANGUL SYLLABLE CHIEUCH WE RIEULKIYEOK + {0xAE4F, 0xCDD6}, //7791 #HANGUL SYLLABLE CHIEUCH WE RIEULMIEUM + {0xAE50, 0xCDD7}, //7792 #HANGUL SYLLABLE CHIEUCH WE RIEULPIEUP + {0xAE51, 0xCDD8}, //7793 #HANGUL SYLLABLE CHIEUCH WE RIEULSIOS + {0xAE52, 0xCDD9}, //7794 #HANGUL SYLLABLE CHIEUCH WE RIEULTHIEUTH + {0xAE53, 0xCDDA}, //7795 #HANGUL SYLLABLE CHIEUCH WE RIEULPHIEUPH + {0xAE54, 0xCDDB}, //7796 #HANGUL SYLLABLE CHIEUCH WE RIEULHIEUH + {0xAE55, 0xCDDC}, //7797 #HANGUL SYLLABLE CHIEUCH WE MIEUM + {0xAE56, 0xCDDD}, //7798 #HANGUL SYLLABLE CHIEUCH WE PIEUP + {0xAE57, 0xCDDE}, //7799 #HANGUL SYLLABLE CHIEUCH WE PIEUPSIOS + {0xAE58, 0xCDDF}, //7800 #HANGUL SYLLABLE CHIEUCH WE SIOS + {0xAE59, 0xCDE0}, //7801 #HANGUL SYLLABLE CHIEUCH WE SSANGSIOS + {0xAE5A, 0xCDE1}, //7802 #HANGUL SYLLABLE CHIEUCH WE IEUNG + {0xAE61, 0xCDE2}, //7803 #HANGUL SYLLABLE CHIEUCH WE CIEUC + {0xAE62, 0xCDE3}, //7804 #HANGUL SYLLABLE CHIEUCH WE CHIEUCH + {0xAE63, 0xCDE4}, //7805 #HANGUL SYLLABLE CHIEUCH WE KHIEUKH + {0xAE64, 0xCDE5}, //7806 #HANGUL SYLLABLE CHIEUCH WE THIEUTH + {0xAE65, 0xCDE6}, //7807 #HANGUL SYLLABLE CHIEUCH WE PHIEUPH + {0xAE66, 0xCDE7}, //7808 #HANGUL SYLLABLE CHIEUCH WE HIEUH + {0xAE67, 0xCDE9}, //7809 #HANGUL SYLLABLE CHIEUCH WI KIYEOK + {0xAE68, 0xCDEA}, //7810 #HANGUL SYLLABLE CHIEUCH WI SSANGKIYEOK + {0xAE69, 0xCDEB}, //7811 #HANGUL SYLLABLE CHIEUCH WI KIYEOKSIOS + {0xAE6A, 0xCDED}, //7812 #HANGUL SYLLABLE CHIEUCH WI NIEUNCIEUC + {0xAE6B, 0xCDEE}, //7813 #HANGUL SYLLABLE CHIEUCH WI NIEUNHIEUH + {0xAE6C, 0xCDEF}, //7814 #HANGUL SYLLABLE CHIEUCH WI TIKEUT + {0xAE6D, 0xCDF1}, //7815 #HANGUL SYLLABLE CHIEUCH WI RIEULKIYEOK + {0xAE6E, 0xCDF2}, //7816 #HANGUL SYLLABLE CHIEUCH WI RIEULMIEUM + {0xAE6F, 0xCDF3}, //7817 #HANGUL SYLLABLE CHIEUCH WI RIEULPIEUP + {0xAE70, 0xCDF4}, //7818 #HANGUL SYLLABLE CHIEUCH WI RIEULSIOS + {0xAE71, 0xCDF5}, //7819 #HANGUL SYLLABLE CHIEUCH WI RIEULTHIEUTH + {0xAE72, 0xCDF6}, //7820 #HANGUL SYLLABLE CHIEUCH WI RIEULPHIEUPH + {0xAE73, 0xCDF7}, //7821 #HANGUL SYLLABLE CHIEUCH WI RIEULHIEUH + {0xAE74, 0xCDFA}, //7822 #HANGUL SYLLABLE CHIEUCH WI PIEUPSIOS + {0xAE75, 0xCDFC}, //7823 #HANGUL SYLLABLE CHIEUCH WI SSANGSIOS + {0xAE76, 0xCDFE}, //7824 #HANGUL SYLLABLE CHIEUCH WI CIEUC + {0xAE77, 0xCDFF}, //7825 #HANGUL SYLLABLE CHIEUCH WI CHIEUCH + {0xAE78, 0xCE00}, //7826 #HANGUL SYLLABLE CHIEUCH WI KHIEUKH + {0xAE79, 0xCE01}, //7827 #HANGUL SYLLABLE CHIEUCH WI THIEUTH + {0xAE7A, 0xCE02}, //7828 #HANGUL SYLLABLE CHIEUCH WI PHIEUPH + {0xAE81, 0xCE03}, //7829 #HANGUL SYLLABLE CHIEUCH WI HIEUH + {0xAE82, 0xCE05}, //7830 #HANGUL SYLLABLE CHIEUCH YU KIYEOK + {0xAE83, 0xCE06}, //7831 #HANGUL SYLLABLE CHIEUCH YU SSANGKIYEOK + {0xAE84, 0xCE07}, //7832 #HANGUL SYLLABLE CHIEUCH YU KIYEOKSIOS + {0xAE85, 0xCE09}, //7833 #HANGUL SYLLABLE CHIEUCH YU NIEUNCIEUC + {0xAE86, 0xCE0A}, //7834 #HANGUL SYLLABLE CHIEUCH YU NIEUNHIEUH + {0xAE87, 0xCE0B}, //7835 #HANGUL SYLLABLE CHIEUCH YU TIKEUT + {0xAE88, 0xCE0D}, //7836 #HANGUL SYLLABLE CHIEUCH YU RIEULKIYEOK + {0xAE89, 0xCE0E}, //7837 #HANGUL SYLLABLE CHIEUCH YU RIEULMIEUM + {0xAE8A, 0xCE0F}, //7838 #HANGUL SYLLABLE CHIEUCH YU RIEULPIEUP + {0xAE8B, 0xCE10}, //7839 #HANGUL SYLLABLE CHIEUCH YU RIEULSIOS + {0xAE8C, 0xCE11}, //7840 #HANGUL SYLLABLE CHIEUCH YU RIEULTHIEUTH + {0xAE8D, 0xCE12}, //7841 #HANGUL SYLLABLE CHIEUCH YU RIEULPHIEUPH + {0xAE8E, 0xCE13}, //7842 #HANGUL SYLLABLE CHIEUCH YU RIEULHIEUH + {0xAE8F, 0xCE15}, //7843 #HANGUL SYLLABLE CHIEUCH YU PIEUP + {0xAE90, 0xCE16}, //7844 #HANGUL SYLLABLE CHIEUCH YU PIEUPSIOS + {0xAE91, 0xCE17}, //7845 #HANGUL SYLLABLE CHIEUCH YU SIOS + {0xAE92, 0xCE18}, //7846 #HANGUL SYLLABLE CHIEUCH YU SSANGSIOS + {0xAE93, 0xCE1A}, //7847 #HANGUL SYLLABLE CHIEUCH YU CIEUC + {0xAE94, 0xCE1B}, //7848 #HANGUL SYLLABLE CHIEUCH YU CHIEUCH + {0xAE95, 0xCE1C}, //7849 #HANGUL SYLLABLE CHIEUCH YU KHIEUKH + {0xAE96, 0xCE1D}, //7850 #HANGUL SYLLABLE CHIEUCH YU THIEUTH + {0xAE97, 0xCE1E}, //7851 #HANGUL SYLLABLE CHIEUCH YU PHIEUPH + {0xAE98, 0xCE1F}, //7852 #HANGUL SYLLABLE CHIEUCH YU HIEUH + {0xAE99, 0xCE22}, //7853 #HANGUL SYLLABLE CHIEUCH EU SSANGKIYEOK + {0xAE9A, 0xCE23}, //7854 #HANGUL SYLLABLE CHIEUCH EU KIYEOKSIOS + {0xAE9B, 0xCE25}, //7855 #HANGUL SYLLABLE CHIEUCH EU NIEUNCIEUC + {0xAE9C, 0xCE26}, //7856 #HANGUL SYLLABLE CHIEUCH EU NIEUNHIEUH + {0xAE9D, 0xCE27}, //7857 #HANGUL SYLLABLE CHIEUCH EU TIKEUT + {0xAE9E, 0xCE29}, //7858 #HANGUL SYLLABLE CHIEUCH EU RIEULKIYEOK + {0xAE9F, 0xCE2A}, //7859 #HANGUL SYLLABLE CHIEUCH EU RIEULMIEUM + {0xAEA0, 0xCE2B}, //7860 #HANGUL SYLLABLE CHIEUCH EU RIEULPIEUP + {0xAF41, 0xCE2C}, //7861 #HANGUL SYLLABLE CHIEUCH EU RIEULSIOS + {0xAF42, 0xCE2D}, //7862 #HANGUL SYLLABLE CHIEUCH EU RIEULTHIEUTH + {0xAF43, 0xCE2E}, //7863 #HANGUL SYLLABLE CHIEUCH EU RIEULPHIEUPH + {0xAF44, 0xCE2F}, //7864 #HANGUL SYLLABLE CHIEUCH EU RIEULHIEUH + {0xAF45, 0xCE32}, //7865 #HANGUL SYLLABLE CHIEUCH EU PIEUPSIOS + {0xAF46, 0xCE34}, //7866 #HANGUL SYLLABLE CHIEUCH EU SSANGSIOS + {0xAF47, 0xCE36}, //7867 #HANGUL SYLLABLE CHIEUCH EU CIEUC + {0xAF48, 0xCE37}, //7868 #HANGUL SYLLABLE CHIEUCH EU CHIEUCH + {0xAF49, 0xCE38}, //7869 #HANGUL SYLLABLE CHIEUCH EU KHIEUKH + {0xAF4A, 0xCE39}, //7870 #HANGUL SYLLABLE CHIEUCH EU THIEUTH + {0xAF4B, 0xCE3A}, //7871 #HANGUL SYLLABLE CHIEUCH EU PHIEUPH + {0xAF4C, 0xCE3B}, //7872 #HANGUL SYLLABLE CHIEUCH EU HIEUH + {0xAF4D, 0xCE3C}, //7873 #HANGUL SYLLABLE CHIEUCH YI + {0xAF4E, 0xCE3D}, //7874 #HANGUL SYLLABLE CHIEUCH YI KIYEOK + {0xAF4F, 0xCE3E}, //7875 #HANGUL SYLLABLE CHIEUCH YI SSANGKIYEOK + {0xAF50, 0xCE3F}, //7876 #HANGUL SYLLABLE CHIEUCH YI KIYEOKSIOS + {0xAF51, 0xCE40}, //7877 #HANGUL SYLLABLE CHIEUCH YI NIEUN + {0xAF52, 0xCE41}, //7878 #HANGUL SYLLABLE CHIEUCH YI NIEUNCIEUC + {0xAF53, 0xCE42}, //7879 #HANGUL SYLLABLE CHIEUCH YI NIEUNHIEUH + {0xAF54, 0xCE43}, //7880 #HANGUL SYLLABLE CHIEUCH YI TIKEUT + {0xAF55, 0xCE44}, //7881 #HANGUL SYLLABLE CHIEUCH YI RIEUL + {0xAF56, 0xCE45}, //7882 #HANGUL SYLLABLE CHIEUCH YI RIEULKIYEOK + {0xAF57, 0xCE46}, //7883 #HANGUL SYLLABLE CHIEUCH YI RIEULMIEUM + {0xAF58, 0xCE47}, //7884 #HANGUL SYLLABLE CHIEUCH YI RIEULPIEUP + {0xAF59, 0xCE48}, //7885 #HANGUL SYLLABLE CHIEUCH YI RIEULSIOS + {0xAF5A, 0xCE49}, //7886 #HANGUL SYLLABLE CHIEUCH YI RIEULTHIEUTH + {0xAF61, 0xCE4A}, //7887 #HANGUL SYLLABLE CHIEUCH YI RIEULPHIEUPH + {0xAF62, 0xCE4B}, //7888 #HANGUL SYLLABLE CHIEUCH YI RIEULHIEUH + {0xAF63, 0xCE4C}, //7889 #HANGUL SYLLABLE CHIEUCH YI MIEUM + {0xAF64, 0xCE4D}, //7890 #HANGUL SYLLABLE CHIEUCH YI PIEUP + {0xAF65, 0xCE4E}, //7891 #HANGUL SYLLABLE CHIEUCH YI PIEUPSIOS + {0xAF66, 0xCE4F}, //7892 #HANGUL SYLLABLE CHIEUCH YI SIOS + {0xAF67, 0xCE50}, //7893 #HANGUL SYLLABLE CHIEUCH YI SSANGSIOS + {0xAF68, 0xCE51}, //7894 #HANGUL SYLLABLE CHIEUCH YI IEUNG + {0xAF69, 0xCE52}, //7895 #HANGUL SYLLABLE CHIEUCH YI CIEUC + {0xAF6A, 0xCE53}, //7896 #HANGUL SYLLABLE CHIEUCH YI CHIEUCH + {0xAF6B, 0xCE54}, //7897 #HANGUL SYLLABLE CHIEUCH YI KHIEUKH + {0xAF6C, 0xCE55}, //7898 #HANGUL SYLLABLE CHIEUCH YI THIEUTH + {0xAF6D, 0xCE56}, //7899 #HANGUL SYLLABLE CHIEUCH YI PHIEUPH + {0xAF6E, 0xCE57}, //7900 #HANGUL SYLLABLE CHIEUCH YI HIEUH + {0xAF6F, 0xCE5A}, //7901 #HANGUL SYLLABLE CHIEUCH I SSANGKIYEOK + {0xAF70, 0xCE5B}, //7902 #HANGUL SYLLABLE CHIEUCH I KIYEOKSIOS + {0xAF71, 0xCE5D}, //7903 #HANGUL SYLLABLE CHIEUCH I NIEUNCIEUC + {0xAF72, 0xCE5E}, //7904 #HANGUL SYLLABLE CHIEUCH I NIEUNHIEUH + {0xAF73, 0xCE62}, //7905 #HANGUL SYLLABLE CHIEUCH I RIEULMIEUM + {0xAF74, 0xCE63}, //7906 #HANGUL SYLLABLE CHIEUCH I RIEULPIEUP + {0xAF75, 0xCE64}, //7907 #HANGUL SYLLABLE CHIEUCH I RIEULSIOS + {0xAF76, 0xCE65}, //7908 #HANGUL SYLLABLE CHIEUCH I RIEULTHIEUTH + {0xAF77, 0xCE66}, //7909 #HANGUL SYLLABLE CHIEUCH I RIEULPHIEUPH + {0xAF78, 0xCE67}, //7910 #HANGUL SYLLABLE CHIEUCH I RIEULHIEUH + {0xAF79, 0xCE6A}, //7911 #HANGUL SYLLABLE CHIEUCH I PIEUPSIOS + {0xAF7A, 0xCE6C}, //7912 #HANGUL SYLLABLE CHIEUCH I SSANGSIOS + {0xAF81, 0xCE6E}, //7913 #HANGUL SYLLABLE CHIEUCH I CIEUC + {0xAF82, 0xCE6F}, //7914 #HANGUL SYLLABLE CHIEUCH I CHIEUCH + {0xAF83, 0xCE70}, //7915 #HANGUL SYLLABLE CHIEUCH I KHIEUKH + {0xAF84, 0xCE71}, //7916 #HANGUL SYLLABLE CHIEUCH I THIEUTH + {0xAF85, 0xCE72}, //7917 #HANGUL SYLLABLE CHIEUCH I PHIEUPH + {0xAF86, 0xCE73}, //7918 #HANGUL SYLLABLE CHIEUCH I HIEUH + {0xAF87, 0xCE76}, //7919 #HANGUL SYLLABLE KHIEUKH A SSANGKIYEOK + {0xAF88, 0xCE77}, //7920 #HANGUL SYLLABLE KHIEUKH A KIYEOKSIOS + {0xAF89, 0xCE79}, //7921 #HANGUL SYLLABLE KHIEUKH A NIEUNCIEUC + {0xAF8A, 0xCE7A}, //7922 #HANGUL SYLLABLE KHIEUKH A NIEUNHIEUH + {0xAF8B, 0xCE7B}, //7923 #HANGUL SYLLABLE KHIEUKH A TIKEUT + {0xAF8C, 0xCE7D}, //7924 #HANGUL SYLLABLE KHIEUKH A RIEULKIYEOK + {0xAF8D, 0xCE7E}, //7925 #HANGUL SYLLABLE KHIEUKH A RIEULMIEUM + {0xAF8E, 0xCE7F}, //7926 #HANGUL SYLLABLE KHIEUKH A RIEULPIEUP + {0xAF8F, 0xCE80}, //7927 #HANGUL SYLLABLE KHIEUKH A RIEULSIOS + {0xAF90, 0xCE81}, //7928 #HANGUL SYLLABLE KHIEUKH A RIEULTHIEUTH + {0xAF91, 0xCE82}, //7929 #HANGUL SYLLABLE KHIEUKH A RIEULPHIEUPH + {0xAF92, 0xCE83}, //7930 #HANGUL SYLLABLE KHIEUKH A RIEULHIEUH + {0xAF93, 0xCE86}, //7931 #HANGUL SYLLABLE KHIEUKH A PIEUPSIOS + {0xAF94, 0xCE88}, //7932 #HANGUL SYLLABLE KHIEUKH A SSANGSIOS + {0xAF95, 0xCE8A}, //7933 #HANGUL SYLLABLE KHIEUKH A CIEUC + {0xAF96, 0xCE8B}, //7934 #HANGUL SYLLABLE KHIEUKH A CHIEUCH + {0xAF97, 0xCE8C}, //7935 #HANGUL SYLLABLE KHIEUKH A KHIEUKH + {0xAF98, 0xCE8D}, //7936 #HANGUL SYLLABLE KHIEUKH A THIEUTH + {0xAF99, 0xCE8E}, //7937 #HANGUL SYLLABLE KHIEUKH A PHIEUPH + {0xAF9A, 0xCE8F}, //7938 #HANGUL SYLLABLE KHIEUKH A HIEUH + {0xAF9B, 0xCE92}, //7939 #HANGUL SYLLABLE KHIEUKH AE SSANGKIYEOK + {0xAF9C, 0xCE93}, //7940 #HANGUL SYLLABLE KHIEUKH AE KIYEOKSIOS + {0xAF9D, 0xCE95}, //7941 #HANGUL SYLLABLE KHIEUKH AE NIEUNCIEUC + {0xAF9E, 0xCE96}, //7942 #HANGUL SYLLABLE KHIEUKH AE NIEUNHIEUH + {0xAF9F, 0xCE97}, //7943 #HANGUL SYLLABLE KHIEUKH AE TIKEUT + {0xAFA0, 0xCE99}, //7944 #HANGUL SYLLABLE KHIEUKH AE RIEULKIYEOK + {0xB041, 0xCE9A}, //7945 #HANGUL SYLLABLE KHIEUKH AE RIEULMIEUM + {0xB042, 0xCE9B}, //7946 #HANGUL SYLLABLE KHIEUKH AE RIEULPIEUP + {0xB043, 0xCE9C}, //7947 #HANGUL SYLLABLE KHIEUKH AE RIEULSIOS + {0xB044, 0xCE9D}, //7948 #HANGUL SYLLABLE KHIEUKH AE RIEULTHIEUTH + {0xB045, 0xCE9E}, //7949 #HANGUL SYLLABLE KHIEUKH AE RIEULPHIEUPH + {0xB046, 0xCE9F}, //7950 #HANGUL SYLLABLE KHIEUKH AE RIEULHIEUH + {0xB047, 0xCEA2}, //7951 #HANGUL SYLLABLE KHIEUKH AE PIEUPSIOS + {0xB048, 0xCEA6}, //7952 #HANGUL SYLLABLE KHIEUKH AE CIEUC + {0xB049, 0xCEA7}, //7953 #HANGUL SYLLABLE KHIEUKH AE CHIEUCH + {0xB04A, 0xCEA8}, //7954 #HANGUL SYLLABLE KHIEUKH AE KHIEUKH + {0xB04B, 0xCEA9}, //7955 #HANGUL SYLLABLE KHIEUKH AE THIEUTH + {0xB04C, 0xCEAA}, //7956 #HANGUL SYLLABLE KHIEUKH AE PHIEUPH + {0xB04D, 0xCEAB}, //7957 #HANGUL SYLLABLE KHIEUKH AE HIEUH + {0xB04E, 0xCEAE}, //7958 #HANGUL SYLLABLE KHIEUKH YA SSANGKIYEOK + {0xB04F, 0xCEAF}, //7959 #HANGUL SYLLABLE KHIEUKH YA KIYEOKSIOS + {0xB050, 0xCEB0}, //7960 #HANGUL SYLLABLE KHIEUKH YA NIEUN + {0xB051, 0xCEB1}, //7961 #HANGUL SYLLABLE KHIEUKH YA NIEUNCIEUC + {0xB052, 0xCEB2}, //7962 #HANGUL SYLLABLE KHIEUKH YA NIEUNHIEUH + {0xB053, 0xCEB3}, //7963 #HANGUL SYLLABLE KHIEUKH YA TIKEUT + {0xB054, 0xCEB4}, //7964 #HANGUL SYLLABLE KHIEUKH YA RIEUL + {0xB055, 0xCEB5}, //7965 #HANGUL SYLLABLE KHIEUKH YA RIEULKIYEOK + {0xB056, 0xCEB6}, //7966 #HANGUL SYLLABLE KHIEUKH YA RIEULMIEUM + {0xB057, 0xCEB7}, //7967 #HANGUL SYLLABLE KHIEUKH YA RIEULPIEUP + {0xB058, 0xCEB8}, //7968 #HANGUL SYLLABLE KHIEUKH YA RIEULSIOS + {0xB059, 0xCEB9}, //7969 #HANGUL SYLLABLE KHIEUKH YA RIEULTHIEUTH + {0xB05A, 0xCEBA}, //7970 #HANGUL SYLLABLE KHIEUKH YA RIEULPHIEUPH + {0xB061, 0xCEBB}, //7971 #HANGUL SYLLABLE KHIEUKH YA RIEULHIEUH + {0xB062, 0xCEBC}, //7972 #HANGUL SYLLABLE KHIEUKH YA MIEUM + {0xB063, 0xCEBD}, //7973 #HANGUL SYLLABLE KHIEUKH YA PIEUP + {0xB064, 0xCEBE}, //7974 #HANGUL SYLLABLE KHIEUKH YA PIEUPSIOS + {0xB065, 0xCEBF}, //7975 #HANGUL SYLLABLE KHIEUKH YA SIOS + {0xB066, 0xCEC0}, //7976 #HANGUL SYLLABLE KHIEUKH YA SSANGSIOS + {0xB067, 0xCEC2}, //7977 #HANGUL SYLLABLE KHIEUKH YA CIEUC + {0xB068, 0xCEC3}, //7978 #HANGUL SYLLABLE KHIEUKH YA CHIEUCH + {0xB069, 0xCEC4}, //7979 #HANGUL SYLLABLE KHIEUKH YA KHIEUKH + {0xB06A, 0xCEC5}, //7980 #HANGUL SYLLABLE KHIEUKH YA THIEUTH + {0xB06B, 0xCEC6}, //7981 #HANGUL SYLLABLE KHIEUKH YA PHIEUPH + {0xB06C, 0xCEC7}, //7982 #HANGUL SYLLABLE KHIEUKH YA HIEUH + {0xB06D, 0xCEC8}, //7983 #HANGUL SYLLABLE KHIEUKH YAE + {0xB06E, 0xCEC9}, //7984 #HANGUL SYLLABLE KHIEUKH YAE KIYEOK + {0xB06F, 0xCECA}, //7985 #HANGUL SYLLABLE KHIEUKH YAE SSANGKIYEOK + {0xB070, 0xCECB}, //7986 #HANGUL SYLLABLE KHIEUKH YAE KIYEOKSIOS + {0xB071, 0xCECC}, //7987 #HANGUL SYLLABLE KHIEUKH YAE NIEUN + {0xB072, 0xCECD}, //7988 #HANGUL SYLLABLE KHIEUKH YAE NIEUNCIEUC + {0xB073, 0xCECE}, //7989 #HANGUL SYLLABLE KHIEUKH YAE NIEUNHIEUH + {0xB074, 0xCECF}, //7990 #HANGUL SYLLABLE KHIEUKH YAE TIKEUT + {0xB075, 0xCED0}, //7991 #HANGUL SYLLABLE KHIEUKH YAE RIEUL + {0xB076, 0xCED1}, //7992 #HANGUL SYLLABLE KHIEUKH YAE RIEULKIYEOK + {0xB077, 0xCED2}, //7993 #HANGUL SYLLABLE KHIEUKH YAE RIEULMIEUM + {0xB078, 0xCED3}, //7994 #HANGUL SYLLABLE KHIEUKH YAE RIEULPIEUP + {0xB079, 0xCED4}, //7995 #HANGUL SYLLABLE KHIEUKH YAE RIEULSIOS + {0xB07A, 0xCED5}, //7996 #HANGUL SYLLABLE KHIEUKH YAE RIEULTHIEUTH + {0xB081, 0xCED6}, //7997 #HANGUL SYLLABLE KHIEUKH YAE RIEULPHIEUPH + {0xB082, 0xCED7}, //7998 #HANGUL SYLLABLE KHIEUKH YAE RIEULHIEUH + {0xB083, 0xCED8}, //7999 #HANGUL SYLLABLE KHIEUKH YAE MIEUM + {0xB084, 0xCED9}, //8000 #HANGUL SYLLABLE KHIEUKH YAE PIEUP + {0xB085, 0xCEDA}, //8001 #HANGUL SYLLABLE KHIEUKH YAE PIEUPSIOS + {0xB086, 0xCEDB}, //8002 #HANGUL SYLLABLE KHIEUKH YAE SIOS + {0xB087, 0xCEDC}, //8003 #HANGUL SYLLABLE KHIEUKH YAE SSANGSIOS + {0xB088, 0xCEDD}, //8004 #HANGUL SYLLABLE KHIEUKH YAE IEUNG + {0xB089, 0xCEDE}, //8005 #HANGUL SYLLABLE KHIEUKH YAE CIEUC + {0xB08A, 0xCEDF}, //8006 #HANGUL SYLLABLE KHIEUKH YAE CHIEUCH + {0xB08B, 0xCEE0}, //8007 #HANGUL SYLLABLE KHIEUKH YAE KHIEUKH + {0xB08C, 0xCEE1}, //8008 #HANGUL SYLLABLE KHIEUKH YAE THIEUTH + {0xB08D, 0xCEE2}, //8009 #HANGUL SYLLABLE KHIEUKH YAE PHIEUPH + {0xB08E, 0xCEE3}, //8010 #HANGUL SYLLABLE KHIEUKH YAE HIEUH + {0xB08F, 0xCEE6}, //8011 #HANGUL SYLLABLE KHIEUKH EO SSANGKIYEOK + {0xB090, 0xCEE7}, //8012 #HANGUL SYLLABLE KHIEUKH EO KIYEOKSIOS + {0xB091, 0xCEE9}, //8013 #HANGUL SYLLABLE KHIEUKH EO NIEUNCIEUC + {0xB092, 0xCEEA}, //8014 #HANGUL SYLLABLE KHIEUKH EO NIEUNHIEUH + {0xB093, 0xCEED}, //8015 #HANGUL SYLLABLE KHIEUKH EO RIEULKIYEOK + {0xB094, 0xCEEE}, //8016 #HANGUL SYLLABLE KHIEUKH EO RIEULMIEUM + {0xB095, 0xCEEF}, //8017 #HANGUL SYLLABLE KHIEUKH EO RIEULPIEUP + {0xB096, 0xCEF0}, //8018 #HANGUL SYLLABLE KHIEUKH EO RIEULSIOS + {0xB097, 0xCEF1}, //8019 #HANGUL SYLLABLE KHIEUKH EO RIEULTHIEUTH + {0xB098, 0xCEF2}, //8020 #HANGUL SYLLABLE KHIEUKH EO RIEULPHIEUPH + {0xB099, 0xCEF3}, //8021 #HANGUL SYLLABLE KHIEUKH EO RIEULHIEUH + {0xB09A, 0xCEF6}, //8022 #HANGUL SYLLABLE KHIEUKH EO PIEUPSIOS + {0xB09B, 0xCEFA}, //8023 #HANGUL SYLLABLE KHIEUKH EO CIEUC + {0xB09C, 0xCEFB}, //8024 #HANGUL SYLLABLE KHIEUKH EO CHIEUCH + {0xB09D, 0xCEFC}, //8025 #HANGUL SYLLABLE KHIEUKH EO KHIEUKH + {0xB09E, 0xCEFD}, //8026 #HANGUL SYLLABLE KHIEUKH EO THIEUTH + {0xB09F, 0xCEFE}, //8027 #HANGUL SYLLABLE KHIEUKH EO PHIEUPH + {0xB0A0, 0xCEFF}, //8028 #HANGUL SYLLABLE KHIEUKH EO HIEUH + {0xB0A1, 0xAC00}, //8029 #HANGUL SYLLABLE KIYEOK A + {0xB0A2, 0xAC01}, //8030 #HANGUL SYLLABLE KIYEOK A KIYEOK + {0xB0A3, 0xAC04}, //8031 #HANGUL SYLLABLE KIYEOK A NIEUN + {0xB0A4, 0xAC07}, //8032 #HANGUL SYLLABLE KIYEOK A TIKEUT + {0xB0A5, 0xAC08}, //8033 #HANGUL SYLLABLE KIYEOK A RIEUL + {0xB0A6, 0xAC09}, //8034 #HANGUL SYLLABLE KIYEOK A RIEULKIYEOK + {0xB0A7, 0xAC0A}, //8035 #HANGUL SYLLABLE KIYEOK A RIEULMIEUM + {0xB0A8, 0xAC10}, //8036 #HANGUL SYLLABLE KIYEOK A MIEUM + {0xB0A9, 0xAC11}, //8037 #HANGUL SYLLABLE KIYEOK A PIEUP + {0xB0AA, 0xAC12}, //8038 #HANGUL SYLLABLE KIYEOK A PIEUPSIOS + {0xB0AB, 0xAC13}, //8039 #HANGUL SYLLABLE KIYEOK A SIOS + {0xB0AC, 0xAC14}, //8040 #HANGUL SYLLABLE KIYEOK A SSANGSIOS + {0xB0AD, 0xAC15}, //8041 #HANGUL SYLLABLE KIYEOK A IEUNG + {0xB0AE, 0xAC16}, //8042 #HANGUL SYLLABLE KIYEOK A CIEUC + {0xB0AF, 0xAC17}, //8043 #HANGUL SYLLABLE KIYEOK A CHIEUCH + {0xB0B0, 0xAC19}, //8044 #HANGUL SYLLABLE KIYEOK A THIEUTH + {0xB0B1, 0xAC1A}, //8045 #HANGUL SYLLABLE KIYEOK A PHIEUPH + {0xB0B2, 0xAC1B}, //8046 #HANGUL SYLLABLE KIYEOK A HIEUH + {0xB0B3, 0xAC1C}, //8047 #HANGUL SYLLABLE KIYEOK AE + {0xB0B4, 0xAC1D}, //8048 #HANGUL SYLLABLE KIYEOK AE KIYEOK + {0xB0B5, 0xAC20}, //8049 #HANGUL SYLLABLE KIYEOK AE NIEUN + {0xB0B6, 0xAC24}, //8050 #HANGUL SYLLABLE KIYEOK AE RIEUL + {0xB0B7, 0xAC2C}, //8051 #HANGUL SYLLABLE KIYEOK AE MIEUM + {0xB0B8, 0xAC2D}, //8052 #HANGUL SYLLABLE KIYEOK AE PIEUP + {0xB0B9, 0xAC2F}, //8053 #HANGUL SYLLABLE KIYEOK AE SIOS + {0xB0BA, 0xAC30}, //8054 #HANGUL SYLLABLE KIYEOK AE SSANGSIOS + {0xB0BB, 0xAC31}, //8055 #HANGUL SYLLABLE KIYEOK AE IEUNG + {0xB0BC, 0xAC38}, //8056 #HANGUL SYLLABLE KIYEOK YA + {0xB0BD, 0xAC39}, //8057 #HANGUL SYLLABLE KIYEOK YA KIYEOK + {0xB0BE, 0xAC3C}, //8058 #HANGUL SYLLABLE KIYEOK YA NIEUN + {0xB0BF, 0xAC40}, //8059 #HANGUL SYLLABLE KIYEOK YA RIEUL + {0xB0C0, 0xAC4B}, //8060 #HANGUL SYLLABLE KIYEOK YA SIOS + {0xB0C1, 0xAC4D}, //8061 #HANGUL SYLLABLE KIYEOK YA IEUNG + {0xB0C2, 0xAC54}, //8062 #HANGUL SYLLABLE KIYEOK YAE + {0xB0C3, 0xAC58}, //8063 #HANGUL SYLLABLE KIYEOK YAE NIEUN + {0xB0C4, 0xAC5C}, //8064 #HANGUL SYLLABLE KIYEOK YAE RIEUL + {0xB0C5, 0xAC70}, //8065 #HANGUL SYLLABLE KIYEOK EO + {0xB0C6, 0xAC71}, //8066 #HANGUL SYLLABLE KIYEOK EO KIYEOK + {0xB0C7, 0xAC74}, //8067 #HANGUL SYLLABLE KIYEOK EO NIEUN + {0xB0C8, 0xAC77}, //8068 #HANGUL SYLLABLE KIYEOK EO TIKEUT + {0xB0C9, 0xAC78}, //8069 #HANGUL SYLLABLE KIYEOK EO RIEUL + {0xB0CA, 0xAC7A}, //8070 #HANGUL SYLLABLE KIYEOK EO RIEULMIEUM + {0xB0CB, 0xAC80}, //8071 #HANGUL SYLLABLE KIYEOK EO MIEUM + {0xB0CC, 0xAC81}, //8072 #HANGUL SYLLABLE KIYEOK EO PIEUP + {0xB0CD, 0xAC83}, //8073 #HANGUL SYLLABLE KIYEOK EO SIOS + {0xB0CE, 0xAC84}, //8074 #HANGUL SYLLABLE KIYEOK EO SSANGSIOS + {0xB0CF, 0xAC85}, //8075 #HANGUL SYLLABLE KIYEOK EO IEUNG + {0xB0D0, 0xAC86}, //8076 #HANGUL SYLLABLE KIYEOK EO CIEUC + {0xB0D1, 0xAC89}, //8077 #HANGUL SYLLABLE KIYEOK EO THIEUTH + {0xB0D2, 0xAC8A}, //8078 #HANGUL SYLLABLE KIYEOK EO PHIEUPH + {0xB0D3, 0xAC8B}, //8079 #HANGUL SYLLABLE KIYEOK EO HIEUH + {0xB0D4, 0xAC8C}, //8080 #HANGUL SYLLABLE KIYEOK E + {0xB0D5, 0xAC90}, //8081 #HANGUL SYLLABLE KIYEOK E NIEUN + {0xB0D6, 0xAC94}, //8082 #HANGUL SYLLABLE KIYEOK E RIEUL + {0xB0D7, 0xAC9C}, //8083 #HANGUL SYLLABLE KIYEOK E MIEUM + {0xB0D8, 0xAC9D}, //8084 #HANGUL SYLLABLE KIYEOK E PIEUP + {0xB0D9, 0xAC9F}, //8085 #HANGUL SYLLABLE KIYEOK E SIOS + {0xB0DA, 0xACA0}, //8086 #HANGUL SYLLABLE KIYEOK E SSANGSIOS + {0xB0DB, 0xACA1}, //8087 #HANGUL SYLLABLE KIYEOK E IEUNG + {0xB0DC, 0xACA8}, //8088 #HANGUL SYLLABLE KIYEOK YEO + {0xB0DD, 0xACA9}, //8089 #HANGUL SYLLABLE KIYEOK YEO KIYEOK + {0xB0DE, 0xACAA}, //8090 #HANGUL SYLLABLE KIYEOK YEO SSANGKIYEOK + {0xB0DF, 0xACAC}, //8091 #HANGUL SYLLABLE KIYEOK YEO NIEUN + {0xB0E0, 0xACAF}, //8092 #HANGUL SYLLABLE KIYEOK YEO TIKEUT + {0xB0E1, 0xACB0}, //8093 #HANGUL SYLLABLE KIYEOK YEO RIEUL + {0xB0E2, 0xACB8}, //8094 #HANGUL SYLLABLE KIYEOK YEO MIEUM + {0xB0E3, 0xACB9}, //8095 #HANGUL SYLLABLE KIYEOK YEO PIEUP + {0xB0E4, 0xACBB}, //8096 #HANGUL SYLLABLE KIYEOK YEO SIOS + {0xB0E5, 0xACBC}, //8097 #HANGUL SYLLABLE KIYEOK YEO SSANGSIOS + {0xB0E6, 0xACBD}, //8098 #HANGUL SYLLABLE KIYEOK YEO IEUNG + {0xB0E7, 0xACC1}, //8099 #HANGUL SYLLABLE KIYEOK YEO THIEUTH + {0xB0E8, 0xACC4}, //8100 #HANGUL SYLLABLE KIYEOK YE + {0xB0E9, 0xACC8}, //8101 #HANGUL SYLLABLE KIYEOK YE NIEUN + {0xB0EA, 0xACCC}, //8102 #HANGUL SYLLABLE KIYEOK YE RIEUL + {0xB0EB, 0xACD5}, //8103 #HANGUL SYLLABLE KIYEOK YE PIEUP + {0xB0EC, 0xACD7}, //8104 #HANGUL SYLLABLE KIYEOK YE SIOS + {0xB0ED, 0xACE0}, //8105 #HANGUL SYLLABLE KIYEOK O + {0xB0EE, 0xACE1}, //8106 #HANGUL SYLLABLE KIYEOK O KIYEOK + {0xB0EF, 0xACE4}, //8107 #HANGUL SYLLABLE KIYEOK O NIEUN + {0xB0F0, 0xACE7}, //8108 #HANGUL SYLLABLE KIYEOK O TIKEUT + {0xB0F1, 0xACE8}, //8109 #HANGUL SYLLABLE KIYEOK O RIEUL + {0xB0F2, 0xACEA}, //8110 #HANGUL SYLLABLE KIYEOK O RIEULMIEUM + {0xB0F3, 0xACEC}, //8111 #HANGUL SYLLABLE KIYEOK O RIEULSIOS + {0xB0F4, 0xACEF}, //8112 #HANGUL SYLLABLE KIYEOK O RIEULHIEUH + {0xB0F5, 0xACF0}, //8113 #HANGUL SYLLABLE KIYEOK O MIEUM + {0xB0F6, 0xACF1}, //8114 #HANGUL SYLLABLE KIYEOK O PIEUP + {0xB0F7, 0xACF3}, //8115 #HANGUL SYLLABLE KIYEOK O SIOS + {0xB0F8, 0xACF5}, //8116 #HANGUL SYLLABLE KIYEOK O IEUNG + {0xB0F9, 0xACF6}, //8117 #HANGUL SYLLABLE KIYEOK O CIEUC + {0xB0FA, 0xACFC}, //8118 #HANGUL SYLLABLE KIYEOK WA + {0xB0FB, 0xACFD}, //8119 #HANGUL SYLLABLE KIYEOK WA KIYEOK + {0xB0FC, 0xAD00}, //8120 #HANGUL SYLLABLE KIYEOK WA NIEUN + {0xB0FD, 0xAD04}, //8121 #HANGUL SYLLABLE KIYEOK WA RIEUL + {0xB0FE, 0xAD06}, //8122 #HANGUL SYLLABLE KIYEOK WA RIEULMIEUM + {0xB141, 0xCF02}, //8123 #HANGUL SYLLABLE KHIEUKH E SSANGKIYEOK + {0xB142, 0xCF03}, //8124 #HANGUL SYLLABLE KHIEUKH E KIYEOKSIOS + {0xB143, 0xCF05}, //8125 #HANGUL SYLLABLE KHIEUKH E NIEUNCIEUC + {0xB144, 0xCF06}, //8126 #HANGUL SYLLABLE KHIEUKH E NIEUNHIEUH + {0xB145, 0xCF07}, //8127 #HANGUL SYLLABLE KHIEUKH E TIKEUT + {0xB146, 0xCF09}, //8128 #HANGUL SYLLABLE KHIEUKH E RIEULKIYEOK + {0xB147, 0xCF0A}, //8129 #HANGUL SYLLABLE KHIEUKH E RIEULMIEUM + {0xB148, 0xCF0B}, //8130 #HANGUL SYLLABLE KHIEUKH E RIEULPIEUP + {0xB149, 0xCF0C}, //8131 #HANGUL SYLLABLE KHIEUKH E RIEULSIOS + {0xB14A, 0xCF0D}, //8132 #HANGUL SYLLABLE KHIEUKH E RIEULTHIEUTH + {0xB14B, 0xCF0E}, //8133 #HANGUL SYLLABLE KHIEUKH E RIEULPHIEUPH + {0xB14C, 0xCF0F}, //8134 #HANGUL SYLLABLE KHIEUKH E RIEULHIEUH + {0xB14D, 0xCF12}, //8135 #HANGUL SYLLABLE KHIEUKH E PIEUPSIOS + {0xB14E, 0xCF14}, //8136 #HANGUL SYLLABLE KHIEUKH E SSANGSIOS + {0xB14F, 0xCF16}, //8137 #HANGUL SYLLABLE KHIEUKH E CIEUC + {0xB150, 0xCF17}, //8138 #HANGUL SYLLABLE KHIEUKH E CHIEUCH + {0xB151, 0xCF18}, //8139 #HANGUL SYLLABLE KHIEUKH E KHIEUKH + {0xB152, 0xCF19}, //8140 #HANGUL SYLLABLE KHIEUKH E THIEUTH + {0xB153, 0xCF1A}, //8141 #HANGUL SYLLABLE KHIEUKH E PHIEUPH + {0xB154, 0xCF1B}, //8142 #HANGUL SYLLABLE KHIEUKH E HIEUH + {0xB155, 0xCF1D}, //8143 #HANGUL SYLLABLE KHIEUKH YEO KIYEOK + {0xB156, 0xCF1E}, //8144 #HANGUL SYLLABLE KHIEUKH YEO SSANGKIYEOK + {0xB157, 0xCF1F}, //8145 #HANGUL SYLLABLE KHIEUKH YEO KIYEOKSIOS + {0xB158, 0xCF21}, //8146 #HANGUL SYLLABLE KHIEUKH YEO NIEUNCIEUC + {0xB159, 0xCF22}, //8147 #HANGUL SYLLABLE KHIEUKH YEO NIEUNHIEUH + {0xB15A, 0xCF23}, //8148 #HANGUL SYLLABLE KHIEUKH YEO TIKEUT + {0xB161, 0xCF25}, //8149 #HANGUL SYLLABLE KHIEUKH YEO RIEULKIYEOK + {0xB162, 0xCF26}, //8150 #HANGUL SYLLABLE KHIEUKH YEO RIEULMIEUM + {0xB163, 0xCF27}, //8151 #HANGUL SYLLABLE KHIEUKH YEO RIEULPIEUP + {0xB164, 0xCF28}, //8152 #HANGUL SYLLABLE KHIEUKH YEO RIEULSIOS + {0xB165, 0xCF29}, //8153 #HANGUL SYLLABLE KHIEUKH YEO RIEULTHIEUTH + {0xB166, 0xCF2A}, //8154 #HANGUL SYLLABLE KHIEUKH YEO RIEULPHIEUPH + {0xB167, 0xCF2B}, //8155 #HANGUL SYLLABLE KHIEUKH YEO RIEULHIEUH + {0xB168, 0xCF2E}, //8156 #HANGUL SYLLABLE KHIEUKH YEO PIEUPSIOS + {0xB169, 0xCF32}, //8157 #HANGUL SYLLABLE KHIEUKH YEO CIEUC + {0xB16A, 0xCF33}, //8158 #HANGUL SYLLABLE KHIEUKH YEO CHIEUCH + {0xB16B, 0xCF34}, //8159 #HANGUL SYLLABLE KHIEUKH YEO KHIEUKH + {0xB16C, 0xCF35}, //8160 #HANGUL SYLLABLE KHIEUKH YEO THIEUTH + {0xB16D, 0xCF36}, //8161 #HANGUL SYLLABLE KHIEUKH YEO PHIEUPH + {0xB16E, 0xCF37}, //8162 #HANGUL SYLLABLE KHIEUKH YEO HIEUH + {0xB16F, 0xCF39}, //8163 #HANGUL SYLLABLE KHIEUKH YE KIYEOK + {0xB170, 0xCF3A}, //8164 #HANGUL SYLLABLE KHIEUKH YE SSANGKIYEOK + {0xB171, 0xCF3B}, //8165 #HANGUL SYLLABLE KHIEUKH YE KIYEOKSIOS + {0xB172, 0xCF3C}, //8166 #HANGUL SYLLABLE KHIEUKH YE NIEUN + {0xB173, 0xCF3D}, //8167 #HANGUL SYLLABLE KHIEUKH YE NIEUNCIEUC + {0xB174, 0xCF3E}, //8168 #HANGUL SYLLABLE KHIEUKH YE NIEUNHIEUH + {0xB175, 0xCF3F}, //8169 #HANGUL SYLLABLE KHIEUKH YE TIKEUT + {0xB176, 0xCF40}, //8170 #HANGUL SYLLABLE KHIEUKH YE RIEUL + {0xB177, 0xCF41}, //8171 #HANGUL SYLLABLE KHIEUKH YE RIEULKIYEOK + {0xB178, 0xCF42}, //8172 #HANGUL SYLLABLE KHIEUKH YE RIEULMIEUM + {0xB179, 0xCF43}, //8173 #HANGUL SYLLABLE KHIEUKH YE RIEULPIEUP + {0xB17A, 0xCF44}, //8174 #HANGUL SYLLABLE KHIEUKH YE RIEULSIOS + {0xB181, 0xCF45}, //8175 #HANGUL SYLLABLE KHIEUKH YE RIEULTHIEUTH + {0xB182, 0xCF46}, //8176 #HANGUL SYLLABLE KHIEUKH YE RIEULPHIEUPH + {0xB183, 0xCF47}, //8177 #HANGUL SYLLABLE KHIEUKH YE RIEULHIEUH + {0xB184, 0xCF48}, //8178 #HANGUL SYLLABLE KHIEUKH YE MIEUM + {0xB185, 0xCF49}, //8179 #HANGUL SYLLABLE KHIEUKH YE PIEUP + {0xB186, 0xCF4A}, //8180 #HANGUL SYLLABLE KHIEUKH YE PIEUPSIOS + {0xB187, 0xCF4B}, //8181 #HANGUL SYLLABLE KHIEUKH YE SIOS + {0xB188, 0xCF4C}, //8182 #HANGUL SYLLABLE KHIEUKH YE SSANGSIOS + {0xB189, 0xCF4D}, //8183 #HANGUL SYLLABLE KHIEUKH YE IEUNG + {0xB18A, 0xCF4E}, //8184 #HANGUL SYLLABLE KHIEUKH YE CIEUC + {0xB18B, 0xCF4F}, //8185 #HANGUL SYLLABLE KHIEUKH YE CHIEUCH + {0xB18C, 0xCF50}, //8186 #HANGUL SYLLABLE KHIEUKH YE KHIEUKH + {0xB18D, 0xCF51}, //8187 #HANGUL SYLLABLE KHIEUKH YE THIEUTH + {0xB18E, 0xCF52}, //8188 #HANGUL SYLLABLE KHIEUKH YE PHIEUPH + {0xB18F, 0xCF53}, //8189 #HANGUL SYLLABLE KHIEUKH YE HIEUH + {0xB190, 0xCF56}, //8190 #HANGUL SYLLABLE KHIEUKH O SSANGKIYEOK + {0xB191, 0xCF57}, //8191 #HANGUL SYLLABLE KHIEUKH O KIYEOKSIOS + {0xB192, 0xCF59}, //8192 #HANGUL SYLLABLE KHIEUKH O NIEUNCIEUC + {0xB193, 0xCF5A}, //8193 #HANGUL SYLLABLE KHIEUKH O NIEUNHIEUH + {0xB194, 0xCF5B}, //8194 #HANGUL SYLLABLE KHIEUKH O TIKEUT + {0xB195, 0xCF5D}, //8195 #HANGUL SYLLABLE KHIEUKH O RIEULKIYEOK + {0xB196, 0xCF5E}, //8196 #HANGUL SYLLABLE KHIEUKH O RIEULMIEUM + {0xB197, 0xCF5F}, //8197 #HANGUL SYLLABLE KHIEUKH O RIEULPIEUP + {0xB198, 0xCF60}, //8198 #HANGUL SYLLABLE KHIEUKH O RIEULSIOS + {0xB199, 0xCF61}, //8199 #HANGUL SYLLABLE KHIEUKH O RIEULTHIEUTH + {0xB19A, 0xCF62}, //8200 #HANGUL SYLLABLE KHIEUKH O RIEULPHIEUPH + {0xB19B, 0xCF63}, //8201 #HANGUL SYLLABLE KHIEUKH O RIEULHIEUH + {0xB19C, 0xCF66}, //8202 #HANGUL SYLLABLE KHIEUKH O PIEUPSIOS + {0xB19D, 0xCF68}, //8203 #HANGUL SYLLABLE KHIEUKH O SSANGSIOS + {0xB19E, 0xCF6A}, //8204 #HANGUL SYLLABLE KHIEUKH O CIEUC + {0xB19F, 0xCF6B}, //8205 #HANGUL SYLLABLE KHIEUKH O CHIEUCH + {0xB1A0, 0xCF6C}, //8206 #HANGUL SYLLABLE KHIEUKH O KHIEUKH + {0xB1A1, 0xAD0C}, //8207 #HANGUL SYLLABLE KIYEOK WA MIEUM + {0xB1A2, 0xAD0D}, //8208 #HANGUL SYLLABLE KIYEOK WA PIEUP + {0xB1A3, 0xAD0F}, //8209 #HANGUL SYLLABLE KIYEOK WA SIOS + {0xB1A4, 0xAD11}, //8210 #HANGUL SYLLABLE KIYEOK WA IEUNG + {0xB1A5, 0xAD18}, //8211 #HANGUL SYLLABLE KIYEOK WAE + {0xB1A6, 0xAD1C}, //8212 #HANGUL SYLLABLE KIYEOK WAE NIEUN + {0xB1A7, 0xAD20}, //8213 #HANGUL SYLLABLE KIYEOK WAE RIEUL + {0xB1A8, 0xAD29}, //8214 #HANGUL SYLLABLE KIYEOK WAE PIEUP + {0xB1A9, 0xAD2C}, //8215 #HANGUL SYLLABLE KIYEOK WAE SSANGSIOS + {0xB1AA, 0xAD2D}, //8216 #HANGUL SYLLABLE KIYEOK WAE IEUNG + {0xB1AB, 0xAD34}, //8217 #HANGUL SYLLABLE KIYEOK OE + {0xB1AC, 0xAD35}, //8218 #HANGUL SYLLABLE KIYEOK OE KIYEOK + {0xB1AD, 0xAD38}, //8219 #HANGUL SYLLABLE KIYEOK OE NIEUN + {0xB1AE, 0xAD3C}, //8220 #HANGUL SYLLABLE KIYEOK OE RIEUL + {0xB1AF, 0xAD44}, //8221 #HANGUL SYLLABLE KIYEOK OE MIEUM + {0xB1B0, 0xAD45}, //8222 #HANGUL SYLLABLE KIYEOK OE PIEUP + {0xB1B1, 0xAD47}, //8223 #HANGUL SYLLABLE KIYEOK OE SIOS + {0xB1B2, 0xAD49}, //8224 #HANGUL SYLLABLE KIYEOK OE IEUNG + {0xB1B3, 0xAD50}, //8225 #HANGUL SYLLABLE KIYEOK YO + {0xB1B4, 0xAD54}, //8226 #HANGUL SYLLABLE KIYEOK YO NIEUN + {0xB1B5, 0xAD58}, //8227 #HANGUL SYLLABLE KIYEOK YO RIEUL + {0xB1B6, 0xAD61}, //8228 #HANGUL SYLLABLE KIYEOK YO PIEUP + {0xB1B7, 0xAD63}, //8229 #HANGUL SYLLABLE KIYEOK YO SIOS + {0xB1B8, 0xAD6C}, //8230 #HANGUL SYLLABLE KIYEOK U + {0xB1B9, 0xAD6D}, //8231 #HANGUL SYLLABLE KIYEOK U KIYEOK + {0xB1BA, 0xAD70}, //8232 #HANGUL SYLLABLE KIYEOK U NIEUN + {0xB1BB, 0xAD73}, //8233 #HANGUL SYLLABLE KIYEOK U TIKEUT + {0xB1BC, 0xAD74}, //8234 #HANGUL SYLLABLE KIYEOK U RIEUL + {0xB1BD, 0xAD75}, //8235 #HANGUL SYLLABLE KIYEOK U RIEULKIYEOK + {0xB1BE, 0xAD76}, //8236 #HANGUL SYLLABLE KIYEOK U RIEULMIEUM + {0xB1BF, 0xAD7B}, //8237 #HANGUL SYLLABLE KIYEOK U RIEULHIEUH + {0xB1C0, 0xAD7C}, //8238 #HANGUL SYLLABLE KIYEOK U MIEUM + {0xB1C1, 0xAD7D}, //8239 #HANGUL SYLLABLE KIYEOK U PIEUP + {0xB1C2, 0xAD7F}, //8240 #HANGUL SYLLABLE KIYEOK U SIOS + {0xB1C3, 0xAD81}, //8241 #HANGUL SYLLABLE KIYEOK U IEUNG + {0xB1C4, 0xAD82}, //8242 #HANGUL SYLLABLE KIYEOK U CIEUC + {0xB1C5, 0xAD88}, //8243 #HANGUL SYLLABLE KIYEOK WEO + {0xB1C6, 0xAD89}, //8244 #HANGUL SYLLABLE KIYEOK WEO KIYEOK + {0xB1C7, 0xAD8C}, //8245 #HANGUL SYLLABLE KIYEOK WEO NIEUN + {0xB1C8, 0xAD90}, //8246 #HANGUL SYLLABLE KIYEOK WEO RIEUL + {0xB1C9, 0xAD9C}, //8247 #HANGUL SYLLABLE KIYEOK WEO SSANGSIOS + {0xB1CA, 0xAD9D}, //8248 #HANGUL SYLLABLE KIYEOK WEO IEUNG + {0xB1CB, 0xADA4}, //8249 #HANGUL SYLLABLE KIYEOK WE + {0xB1CC, 0xADB7}, //8250 #HANGUL SYLLABLE KIYEOK WE SIOS + {0xB1CD, 0xADC0}, //8251 #HANGUL SYLLABLE KIYEOK WI + {0xB1CE, 0xADC1}, //8252 #HANGUL SYLLABLE KIYEOK WI KIYEOK + {0xB1CF, 0xADC4}, //8253 #HANGUL SYLLABLE KIYEOK WI NIEUN + {0xB1D0, 0xADC8}, //8254 #HANGUL SYLLABLE KIYEOK WI RIEUL + {0xB1D1, 0xADD0}, //8255 #HANGUL SYLLABLE KIYEOK WI MIEUM + {0xB1D2, 0xADD1}, //8256 #HANGUL SYLLABLE KIYEOK WI PIEUP + {0xB1D3, 0xADD3}, //8257 #HANGUL SYLLABLE KIYEOK WI SIOS + {0xB1D4, 0xADDC}, //8258 #HANGUL SYLLABLE KIYEOK YU + {0xB1D5, 0xADE0}, //8259 #HANGUL SYLLABLE KIYEOK YU NIEUN + {0xB1D6, 0xADE4}, //8260 #HANGUL SYLLABLE KIYEOK YU RIEUL + {0xB1D7, 0xADF8}, //8261 #HANGUL SYLLABLE KIYEOK EU + {0xB1D8, 0xADF9}, //8262 #HANGUL SYLLABLE KIYEOK EU KIYEOK + {0xB1D9, 0xADFC}, //8263 #HANGUL SYLLABLE KIYEOK EU NIEUN + {0xB1DA, 0xADFF}, //8264 #HANGUL SYLLABLE KIYEOK EU TIKEUT + {0xB1DB, 0xAE00}, //8265 #HANGUL SYLLABLE KIYEOK EU RIEUL + {0xB1DC, 0xAE01}, //8266 #HANGUL SYLLABLE KIYEOK EU RIEULKIYEOK + {0xB1DD, 0xAE08}, //8267 #HANGUL SYLLABLE KIYEOK EU MIEUM + {0xB1DE, 0xAE09}, //8268 #HANGUL SYLLABLE KIYEOK EU PIEUP + {0xB1DF, 0xAE0B}, //8269 #HANGUL SYLLABLE KIYEOK EU SIOS + {0xB1E0, 0xAE0D}, //8270 #HANGUL SYLLABLE KIYEOK EU IEUNG + {0xB1E1, 0xAE14}, //8271 #HANGUL SYLLABLE KIYEOK YI + {0xB1E2, 0xAE30}, //8272 #HANGUL SYLLABLE KIYEOK I + {0xB1E3, 0xAE31}, //8273 #HANGUL SYLLABLE KIYEOK I KIYEOK + {0xB1E4, 0xAE34}, //8274 #HANGUL SYLLABLE KIYEOK I NIEUN + {0xB1E5, 0xAE37}, //8275 #HANGUL SYLLABLE KIYEOK I TIKEUT + {0xB1E6, 0xAE38}, //8276 #HANGUL SYLLABLE KIYEOK I RIEUL + {0xB1E7, 0xAE3A}, //8277 #HANGUL SYLLABLE KIYEOK I RIEULMIEUM + {0xB1E8, 0xAE40}, //8278 #HANGUL SYLLABLE KIYEOK I MIEUM + {0xB1E9, 0xAE41}, //8279 #HANGUL SYLLABLE KIYEOK I PIEUP + {0xB1EA, 0xAE43}, //8280 #HANGUL SYLLABLE KIYEOK I SIOS + {0xB1EB, 0xAE45}, //8281 #HANGUL SYLLABLE KIYEOK I IEUNG + {0xB1EC, 0xAE46}, //8282 #HANGUL SYLLABLE KIYEOK I CIEUC + {0xB1ED, 0xAE4A}, //8283 #HANGUL SYLLABLE KIYEOK I PHIEUPH + {0xB1EE, 0xAE4C}, //8284 #HANGUL SYLLABLE SSANGKIYEOK A + {0xB1EF, 0xAE4D}, //8285 #HANGUL SYLLABLE SSANGKIYEOK A KIYEOK + {0xB1F0, 0xAE4E}, //8286 #HANGUL SYLLABLE SSANGKIYEOK A SSANGKIYEOK + {0xB1F1, 0xAE50}, //8287 #HANGUL SYLLABLE SSANGKIYEOK A NIEUN + {0xB1F2, 0xAE54}, //8288 #HANGUL SYLLABLE SSANGKIYEOK A RIEUL + {0xB1F3, 0xAE56}, //8289 #HANGUL SYLLABLE SSANGKIYEOK A RIEULMIEUM + {0xB1F4, 0xAE5C}, //8290 #HANGUL SYLLABLE SSANGKIYEOK A MIEUM + {0xB1F5, 0xAE5D}, //8291 #HANGUL SYLLABLE SSANGKIYEOK A PIEUP + {0xB1F6, 0xAE5F}, //8292 #HANGUL SYLLABLE SSANGKIYEOK A SIOS + {0xB1F7, 0xAE60}, //8293 #HANGUL SYLLABLE SSANGKIYEOK A SSANGSIOS + {0xB1F8, 0xAE61}, //8294 #HANGUL SYLLABLE SSANGKIYEOK A IEUNG + {0xB1F9, 0xAE65}, //8295 #HANGUL SYLLABLE SSANGKIYEOK A THIEUTH + {0xB1FA, 0xAE68}, //8296 #HANGUL SYLLABLE SSANGKIYEOK AE + {0xB1FB, 0xAE69}, //8297 #HANGUL SYLLABLE SSANGKIYEOK AE KIYEOK + {0xB1FC, 0xAE6C}, //8298 #HANGUL SYLLABLE SSANGKIYEOK AE NIEUN + {0xB1FD, 0xAE70}, //8299 #HANGUL SYLLABLE SSANGKIYEOK AE RIEUL + {0xB1FE, 0xAE78}, //8300 #HANGUL SYLLABLE SSANGKIYEOK AE MIEUM + {0xB241, 0xCF6D}, //8301 #HANGUL SYLLABLE KHIEUKH O THIEUTH + {0xB242, 0xCF6E}, //8302 #HANGUL SYLLABLE KHIEUKH O PHIEUPH + {0xB243, 0xCF6F}, //8303 #HANGUL SYLLABLE KHIEUKH O HIEUH + {0xB244, 0xCF72}, //8304 #HANGUL SYLLABLE KHIEUKH WA SSANGKIYEOK + {0xB245, 0xCF73}, //8305 #HANGUL SYLLABLE KHIEUKH WA KIYEOKSIOS + {0xB246, 0xCF75}, //8306 #HANGUL SYLLABLE KHIEUKH WA NIEUNCIEUC + {0xB247, 0xCF76}, //8307 #HANGUL SYLLABLE KHIEUKH WA NIEUNHIEUH + {0xB248, 0xCF77}, //8308 #HANGUL SYLLABLE KHIEUKH WA TIKEUT + {0xB249, 0xCF79}, //8309 #HANGUL SYLLABLE KHIEUKH WA RIEULKIYEOK + {0xB24A, 0xCF7A}, //8310 #HANGUL SYLLABLE KHIEUKH WA RIEULMIEUM + {0xB24B, 0xCF7B}, //8311 #HANGUL SYLLABLE KHIEUKH WA RIEULPIEUP + {0xB24C, 0xCF7C}, //8312 #HANGUL SYLLABLE KHIEUKH WA RIEULSIOS + {0xB24D, 0xCF7D}, //8313 #HANGUL SYLLABLE KHIEUKH WA RIEULTHIEUTH + {0xB24E, 0xCF7E}, //8314 #HANGUL SYLLABLE KHIEUKH WA RIEULPHIEUPH + {0xB24F, 0xCF7F}, //8315 #HANGUL SYLLABLE KHIEUKH WA RIEULHIEUH + {0xB250, 0xCF81}, //8316 #HANGUL SYLLABLE KHIEUKH WA PIEUP + {0xB251, 0xCF82}, //8317 #HANGUL SYLLABLE KHIEUKH WA PIEUPSIOS + {0xB252, 0xCF83}, //8318 #HANGUL SYLLABLE KHIEUKH WA SIOS + {0xB253, 0xCF84}, //8319 #HANGUL SYLLABLE KHIEUKH WA SSANGSIOS + {0xB254, 0xCF86}, //8320 #HANGUL SYLLABLE KHIEUKH WA CIEUC + {0xB255, 0xCF87}, //8321 #HANGUL SYLLABLE KHIEUKH WA CHIEUCH + {0xB256, 0xCF88}, //8322 #HANGUL SYLLABLE KHIEUKH WA KHIEUKH + {0xB257, 0xCF89}, //8323 #HANGUL SYLLABLE KHIEUKH WA THIEUTH + {0xB258, 0xCF8A}, //8324 #HANGUL SYLLABLE KHIEUKH WA PHIEUPH + {0xB259, 0xCF8B}, //8325 #HANGUL SYLLABLE KHIEUKH WA HIEUH + {0xB25A, 0xCF8D}, //8326 #HANGUL SYLLABLE KHIEUKH WAE KIYEOK + {0xB261, 0xCF8E}, //8327 #HANGUL SYLLABLE KHIEUKH WAE SSANGKIYEOK + {0xB262, 0xCF8F}, //8328 #HANGUL SYLLABLE KHIEUKH WAE KIYEOKSIOS + {0xB263, 0xCF90}, //8329 #HANGUL SYLLABLE KHIEUKH WAE NIEUN + {0xB264, 0xCF91}, //8330 #HANGUL SYLLABLE KHIEUKH WAE NIEUNCIEUC + {0xB265, 0xCF92}, //8331 #HANGUL SYLLABLE KHIEUKH WAE NIEUNHIEUH + {0xB266, 0xCF93}, //8332 #HANGUL SYLLABLE KHIEUKH WAE TIKEUT + {0xB267, 0xCF94}, //8333 #HANGUL SYLLABLE KHIEUKH WAE RIEUL + {0xB268, 0xCF95}, //8334 #HANGUL SYLLABLE KHIEUKH WAE RIEULKIYEOK + {0xB269, 0xCF96}, //8335 #HANGUL SYLLABLE KHIEUKH WAE RIEULMIEUM + {0xB26A, 0xCF97}, //8336 #HANGUL SYLLABLE KHIEUKH WAE RIEULPIEUP + {0xB26B, 0xCF98}, //8337 #HANGUL SYLLABLE KHIEUKH WAE RIEULSIOS + {0xB26C, 0xCF99}, //8338 #HANGUL SYLLABLE KHIEUKH WAE RIEULTHIEUTH + {0xB26D, 0xCF9A}, //8339 #HANGUL SYLLABLE KHIEUKH WAE RIEULPHIEUPH + {0xB26E, 0xCF9B}, //8340 #HANGUL SYLLABLE KHIEUKH WAE RIEULHIEUH + {0xB26F, 0xCF9C}, //8341 #HANGUL SYLLABLE KHIEUKH WAE MIEUM + {0xB270, 0xCF9D}, //8342 #HANGUL SYLLABLE KHIEUKH WAE PIEUP + {0xB271, 0xCF9E}, //8343 #HANGUL SYLLABLE KHIEUKH WAE PIEUPSIOS + {0xB272, 0xCF9F}, //8344 #HANGUL SYLLABLE KHIEUKH WAE SIOS + {0xB273, 0xCFA0}, //8345 #HANGUL SYLLABLE KHIEUKH WAE SSANGSIOS + {0xB274, 0xCFA2}, //8346 #HANGUL SYLLABLE KHIEUKH WAE CIEUC + {0xB275, 0xCFA3}, //8347 #HANGUL SYLLABLE KHIEUKH WAE CHIEUCH + {0xB276, 0xCFA4}, //8348 #HANGUL SYLLABLE KHIEUKH WAE KHIEUKH + {0xB277, 0xCFA5}, //8349 #HANGUL SYLLABLE KHIEUKH WAE THIEUTH + {0xB278, 0xCFA6}, //8350 #HANGUL SYLLABLE KHIEUKH WAE PHIEUPH + {0xB279, 0xCFA7}, //8351 #HANGUL SYLLABLE KHIEUKH WAE HIEUH + {0xB27A, 0xCFA9}, //8352 #HANGUL SYLLABLE KHIEUKH OE KIYEOK + {0xB281, 0xCFAA}, //8353 #HANGUL SYLLABLE KHIEUKH OE SSANGKIYEOK + {0xB282, 0xCFAB}, //8354 #HANGUL SYLLABLE KHIEUKH OE KIYEOKSIOS + {0xB283, 0xCFAC}, //8355 #HANGUL SYLLABLE KHIEUKH OE NIEUN + {0xB284, 0xCFAD}, //8356 #HANGUL SYLLABLE KHIEUKH OE NIEUNCIEUC + {0xB285, 0xCFAE}, //8357 #HANGUL SYLLABLE KHIEUKH OE NIEUNHIEUH + {0xB286, 0xCFAF}, //8358 #HANGUL SYLLABLE KHIEUKH OE TIKEUT + {0xB287, 0xCFB1}, //8359 #HANGUL SYLLABLE KHIEUKH OE RIEULKIYEOK + {0xB288, 0xCFB2}, //8360 #HANGUL SYLLABLE KHIEUKH OE RIEULMIEUM + {0xB289, 0xCFB3}, //8361 #HANGUL SYLLABLE KHIEUKH OE RIEULPIEUP + {0xB28A, 0xCFB4}, //8362 #HANGUL SYLLABLE KHIEUKH OE RIEULSIOS + {0xB28B, 0xCFB5}, //8363 #HANGUL SYLLABLE KHIEUKH OE RIEULTHIEUTH + {0xB28C, 0xCFB6}, //8364 #HANGUL SYLLABLE KHIEUKH OE RIEULPHIEUPH + {0xB28D, 0xCFB7}, //8365 #HANGUL SYLLABLE KHIEUKH OE RIEULHIEUH + {0xB28E, 0xCFB8}, //8366 #HANGUL SYLLABLE KHIEUKH OE MIEUM + {0xB28F, 0xCFB9}, //8367 #HANGUL SYLLABLE KHIEUKH OE PIEUP + {0xB290, 0xCFBA}, //8368 #HANGUL SYLLABLE KHIEUKH OE PIEUPSIOS + {0xB291, 0xCFBB}, //8369 #HANGUL SYLLABLE KHIEUKH OE SIOS + {0xB292, 0xCFBC}, //8370 #HANGUL SYLLABLE KHIEUKH OE SSANGSIOS + {0xB293, 0xCFBD}, //8371 #HANGUL SYLLABLE KHIEUKH OE IEUNG + {0xB294, 0xCFBE}, //8372 #HANGUL SYLLABLE KHIEUKH OE CIEUC + {0xB295, 0xCFBF}, //8373 #HANGUL SYLLABLE KHIEUKH OE CHIEUCH + {0xB296, 0xCFC0}, //8374 #HANGUL SYLLABLE KHIEUKH OE KHIEUKH + {0xB297, 0xCFC1}, //8375 #HANGUL SYLLABLE KHIEUKH OE THIEUTH + {0xB298, 0xCFC2}, //8376 #HANGUL SYLLABLE KHIEUKH OE PHIEUPH + {0xB299, 0xCFC3}, //8377 #HANGUL SYLLABLE KHIEUKH OE HIEUH + {0xB29A, 0xCFC5}, //8378 #HANGUL SYLLABLE KHIEUKH YO KIYEOK + {0xB29B, 0xCFC6}, //8379 #HANGUL SYLLABLE KHIEUKH YO SSANGKIYEOK + {0xB29C, 0xCFC7}, //8380 #HANGUL SYLLABLE KHIEUKH YO KIYEOKSIOS + {0xB29D, 0xCFC8}, //8381 #HANGUL SYLLABLE KHIEUKH YO NIEUN + {0xB29E, 0xCFC9}, //8382 #HANGUL SYLLABLE KHIEUKH YO NIEUNCIEUC + {0xB29F, 0xCFCA}, //8383 #HANGUL SYLLABLE KHIEUKH YO NIEUNHIEUH + {0xB2A0, 0xCFCB}, //8384 #HANGUL SYLLABLE KHIEUKH YO TIKEUT + {0xB2A1, 0xAE79}, //8385 #HANGUL SYLLABLE SSANGKIYEOK AE PIEUP + {0xB2A2, 0xAE7B}, //8386 #HANGUL SYLLABLE SSANGKIYEOK AE SIOS + {0xB2A3, 0xAE7C}, //8387 #HANGUL SYLLABLE SSANGKIYEOK AE SSANGSIOS + {0xB2A4, 0xAE7D}, //8388 #HANGUL SYLLABLE SSANGKIYEOK AE IEUNG + {0xB2A5, 0xAE84}, //8389 #HANGUL SYLLABLE SSANGKIYEOK YA + {0xB2A6, 0xAE85}, //8390 #HANGUL SYLLABLE SSANGKIYEOK YA KIYEOK + {0xB2A7, 0xAE8C}, //8391 #HANGUL SYLLABLE SSANGKIYEOK YA RIEUL + {0xB2A8, 0xAEBC}, //8392 #HANGUL SYLLABLE SSANGKIYEOK EO + {0xB2A9, 0xAEBD}, //8393 #HANGUL SYLLABLE SSANGKIYEOK EO KIYEOK + {0xB2AA, 0xAEBE}, //8394 #HANGUL SYLLABLE SSANGKIYEOK EO SSANGKIYEOK + {0xB2AB, 0xAEC0}, //8395 #HANGUL SYLLABLE SSANGKIYEOK EO NIEUN + {0xB2AC, 0xAEC4}, //8396 #HANGUL SYLLABLE SSANGKIYEOK EO RIEUL + {0xB2AD, 0xAECC}, //8397 #HANGUL SYLLABLE SSANGKIYEOK EO MIEUM + {0xB2AE, 0xAECD}, //8398 #HANGUL SYLLABLE SSANGKIYEOK EO PIEUP + {0xB2AF, 0xAECF}, //8399 #HANGUL SYLLABLE SSANGKIYEOK EO SIOS + {0xB2B0, 0xAED0}, //8400 #HANGUL SYLLABLE SSANGKIYEOK EO SSANGSIOS + {0xB2B1, 0xAED1}, //8401 #HANGUL SYLLABLE SSANGKIYEOK EO IEUNG + {0xB2B2, 0xAED8}, //8402 #HANGUL SYLLABLE SSANGKIYEOK E + {0xB2B3, 0xAED9}, //8403 #HANGUL SYLLABLE SSANGKIYEOK E KIYEOK + {0xB2B4, 0xAEDC}, //8404 #HANGUL SYLLABLE SSANGKIYEOK E NIEUN + {0xB2B5, 0xAEE8}, //8405 #HANGUL SYLLABLE SSANGKIYEOK E MIEUM + {0xB2B6, 0xAEEB}, //8406 #HANGUL SYLLABLE SSANGKIYEOK E SIOS + {0xB2B7, 0xAEED}, //8407 #HANGUL SYLLABLE SSANGKIYEOK E IEUNG + {0xB2B8, 0xAEF4}, //8408 #HANGUL SYLLABLE SSANGKIYEOK YEO + {0xB2B9, 0xAEF8}, //8409 #HANGUL SYLLABLE SSANGKIYEOK YEO NIEUN + {0xB2BA, 0xAEFC}, //8410 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEUL + {0xB2BB, 0xAF07}, //8411 #HANGUL SYLLABLE SSANGKIYEOK YEO SIOS + {0xB2BC, 0xAF08}, //8412 #HANGUL SYLLABLE SSANGKIYEOK YEO SSANGSIOS + {0xB2BD, 0xAF0D}, //8413 #HANGUL SYLLABLE SSANGKIYEOK YEO THIEUTH + {0xB2BE, 0xAF10}, //8414 #HANGUL SYLLABLE SSANGKIYEOK YE + {0xB2BF, 0xAF2C}, //8415 #HANGUL SYLLABLE SSANGKIYEOK O + {0xB2C0, 0xAF2D}, //8416 #HANGUL SYLLABLE SSANGKIYEOK O KIYEOK + {0xB2C1, 0xAF30}, //8417 #HANGUL SYLLABLE SSANGKIYEOK O NIEUN + {0xB2C2, 0xAF32}, //8418 #HANGUL SYLLABLE SSANGKIYEOK O NIEUNHIEUH + {0xB2C3, 0xAF34}, //8419 #HANGUL SYLLABLE SSANGKIYEOK O RIEUL + {0xB2C4, 0xAF3C}, //8420 #HANGUL SYLLABLE SSANGKIYEOK O MIEUM + {0xB2C5, 0xAF3D}, //8421 #HANGUL SYLLABLE SSANGKIYEOK O PIEUP + {0xB2C6, 0xAF3F}, //8422 #HANGUL SYLLABLE SSANGKIYEOK O SIOS + {0xB2C7, 0xAF41}, //8423 #HANGUL SYLLABLE SSANGKIYEOK O IEUNG + {0xB2C8, 0xAF42}, //8424 #HANGUL SYLLABLE SSANGKIYEOK O CIEUC + {0xB2C9, 0xAF43}, //8425 #HANGUL SYLLABLE SSANGKIYEOK O CHIEUCH + {0xB2CA, 0xAF48}, //8426 #HANGUL SYLLABLE SSANGKIYEOK WA + {0xB2CB, 0xAF49}, //8427 #HANGUL SYLLABLE SSANGKIYEOK WA KIYEOK + {0xB2CC, 0xAF50}, //8428 #HANGUL SYLLABLE SSANGKIYEOK WA RIEUL + {0xB2CD, 0xAF5C}, //8429 #HANGUL SYLLABLE SSANGKIYEOK WA SSANGSIOS + {0xB2CE, 0xAF5D}, //8430 #HANGUL SYLLABLE SSANGKIYEOK WA IEUNG + {0xB2CF, 0xAF64}, //8431 #HANGUL SYLLABLE SSANGKIYEOK WAE + {0xB2D0, 0xAF65}, //8432 #HANGUL SYLLABLE SSANGKIYEOK WAE KIYEOK + {0xB2D1, 0xAF79}, //8433 #HANGUL SYLLABLE SSANGKIYEOK WAE IEUNG + {0xB2D2, 0xAF80}, //8434 #HANGUL SYLLABLE SSANGKIYEOK OE + {0xB2D3, 0xAF84}, //8435 #HANGUL SYLLABLE SSANGKIYEOK OE NIEUN + {0xB2D4, 0xAF88}, //8436 #HANGUL SYLLABLE SSANGKIYEOK OE RIEUL + {0xB2D5, 0xAF90}, //8437 #HANGUL SYLLABLE SSANGKIYEOK OE MIEUM + {0xB2D6, 0xAF91}, //8438 #HANGUL SYLLABLE SSANGKIYEOK OE PIEUP + {0xB2D7, 0xAF95}, //8439 #HANGUL SYLLABLE SSANGKIYEOK OE IEUNG + {0xB2D8, 0xAF9C}, //8440 #HANGUL SYLLABLE SSANGKIYEOK YO + {0xB2D9, 0xAFB8}, //8441 #HANGUL SYLLABLE SSANGKIYEOK U + {0xB2DA, 0xAFB9}, //8442 #HANGUL SYLLABLE SSANGKIYEOK U KIYEOK + {0xB2DB, 0xAFBC}, //8443 #HANGUL SYLLABLE SSANGKIYEOK U NIEUN + {0xB2DC, 0xAFC0}, //8444 #HANGUL SYLLABLE SSANGKIYEOK U RIEUL + {0xB2DD, 0xAFC7}, //8445 #HANGUL SYLLABLE SSANGKIYEOK U RIEULHIEUH + {0xB2DE, 0xAFC8}, //8446 #HANGUL SYLLABLE SSANGKIYEOK U MIEUM + {0xB2DF, 0xAFC9}, //8447 #HANGUL SYLLABLE SSANGKIYEOK U PIEUP + {0xB2E0, 0xAFCB}, //8448 #HANGUL SYLLABLE SSANGKIYEOK U SIOS + {0xB2E1, 0xAFCD}, //8449 #HANGUL SYLLABLE SSANGKIYEOK U IEUNG + {0xB2E2, 0xAFCE}, //8450 #HANGUL SYLLABLE SSANGKIYEOK U CIEUC + {0xB2E3, 0xAFD4}, //8451 #HANGUL SYLLABLE SSANGKIYEOK WEO + {0xB2E4, 0xAFDC}, //8452 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEUL + {0xB2E5, 0xAFE8}, //8453 #HANGUL SYLLABLE SSANGKIYEOK WEO SSANGSIOS + {0xB2E6, 0xAFE9}, //8454 #HANGUL SYLLABLE SSANGKIYEOK WEO IEUNG + {0xB2E7, 0xAFF0}, //8455 #HANGUL SYLLABLE SSANGKIYEOK WE + {0xB2E8, 0xAFF1}, //8456 #HANGUL SYLLABLE SSANGKIYEOK WE KIYEOK + {0xB2E9, 0xAFF4}, //8457 #HANGUL SYLLABLE SSANGKIYEOK WE NIEUN + {0xB2EA, 0xAFF8}, //8458 #HANGUL SYLLABLE SSANGKIYEOK WE RIEUL + {0xB2EB, 0xB000}, //8459 #HANGUL SYLLABLE SSANGKIYEOK WE MIEUM + {0xB2EC, 0xB001}, //8460 #HANGUL SYLLABLE SSANGKIYEOK WE PIEUP + {0xB2ED, 0xB004}, //8461 #HANGUL SYLLABLE SSANGKIYEOK WE SSANGSIOS + {0xB2EE, 0xB00C}, //8462 #HANGUL SYLLABLE SSANGKIYEOK WI + {0xB2EF, 0xB010}, //8463 #HANGUL SYLLABLE SSANGKIYEOK WI NIEUN + {0xB2F0, 0xB014}, //8464 #HANGUL SYLLABLE SSANGKIYEOK WI RIEUL + {0xB2F1, 0xB01C}, //8465 #HANGUL SYLLABLE SSANGKIYEOK WI MIEUM + {0xB2F2, 0xB01D}, //8466 #HANGUL SYLLABLE SSANGKIYEOK WI PIEUP + {0xB2F3, 0xB028}, //8467 #HANGUL SYLLABLE SSANGKIYEOK YU + {0xB2F4, 0xB044}, //8468 #HANGUL SYLLABLE SSANGKIYEOK EU + {0xB2F5, 0xB045}, //8469 #HANGUL SYLLABLE SSANGKIYEOK EU KIYEOK + {0xB2F6, 0xB048}, //8470 #HANGUL SYLLABLE SSANGKIYEOK EU NIEUN + {0xB2F7, 0xB04A}, //8471 #HANGUL SYLLABLE SSANGKIYEOK EU NIEUNHIEUH + {0xB2F8, 0xB04C}, //8472 #HANGUL SYLLABLE SSANGKIYEOK EU RIEUL + {0xB2F9, 0xB04E}, //8473 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULMIEUM + {0xB2FA, 0xB053}, //8474 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULHIEUH + {0xB2FB, 0xB054}, //8475 #HANGUL SYLLABLE SSANGKIYEOK EU MIEUM + {0xB2FC, 0xB055}, //8476 #HANGUL SYLLABLE SSANGKIYEOK EU PIEUP + {0xB2FD, 0xB057}, //8477 #HANGUL SYLLABLE SSANGKIYEOK EU SIOS + {0xB2FE, 0xB059}, //8478 #HANGUL SYLLABLE SSANGKIYEOK EU IEUNG + {0xB341, 0xCFCC}, //8479 #HANGUL SYLLABLE KHIEUKH YO RIEUL + {0xB342, 0xCFCD}, //8480 #HANGUL SYLLABLE KHIEUKH YO RIEULKIYEOK + {0xB343, 0xCFCE}, //8481 #HANGUL SYLLABLE KHIEUKH YO RIEULMIEUM + {0xB344, 0xCFCF}, //8482 #HANGUL SYLLABLE KHIEUKH YO RIEULPIEUP + {0xB345, 0xCFD0}, //8483 #HANGUL SYLLABLE KHIEUKH YO RIEULSIOS + {0xB346, 0xCFD1}, //8484 #HANGUL SYLLABLE KHIEUKH YO RIEULTHIEUTH + {0xB347, 0xCFD2}, //8485 #HANGUL SYLLABLE KHIEUKH YO RIEULPHIEUPH + {0xB348, 0xCFD3}, //8486 #HANGUL SYLLABLE KHIEUKH YO RIEULHIEUH + {0xB349, 0xCFD4}, //8487 #HANGUL SYLLABLE KHIEUKH YO MIEUM + {0xB34A, 0xCFD5}, //8488 #HANGUL SYLLABLE KHIEUKH YO PIEUP + {0xB34B, 0xCFD6}, //8489 #HANGUL SYLLABLE KHIEUKH YO PIEUPSIOS + {0xB34C, 0xCFD7}, //8490 #HANGUL SYLLABLE KHIEUKH YO SIOS + {0xB34D, 0xCFD8}, //8491 #HANGUL SYLLABLE KHIEUKH YO SSANGSIOS + {0xB34E, 0xCFD9}, //8492 #HANGUL SYLLABLE KHIEUKH YO IEUNG + {0xB34F, 0xCFDA}, //8493 #HANGUL SYLLABLE KHIEUKH YO CIEUC + {0xB350, 0xCFDB}, //8494 #HANGUL SYLLABLE KHIEUKH YO CHIEUCH + {0xB351, 0xCFDC}, //8495 #HANGUL SYLLABLE KHIEUKH YO KHIEUKH + {0xB352, 0xCFDD}, //8496 #HANGUL SYLLABLE KHIEUKH YO THIEUTH + {0xB353, 0xCFDE}, //8497 #HANGUL SYLLABLE KHIEUKH YO PHIEUPH + {0xB354, 0xCFDF}, //8498 #HANGUL SYLLABLE KHIEUKH YO HIEUH + {0xB355, 0xCFE2}, //8499 #HANGUL SYLLABLE KHIEUKH U SSANGKIYEOK + {0xB356, 0xCFE3}, //8500 #HANGUL SYLLABLE KHIEUKH U KIYEOKSIOS + {0xB357, 0xCFE5}, //8501 #HANGUL SYLLABLE KHIEUKH U NIEUNCIEUC + {0xB358, 0xCFE6}, //8502 #HANGUL SYLLABLE KHIEUKH U NIEUNHIEUH + {0xB359, 0xCFE7}, //8503 #HANGUL SYLLABLE KHIEUKH U TIKEUT + {0xB35A, 0xCFE9}, //8504 #HANGUL SYLLABLE KHIEUKH U RIEULKIYEOK + {0xB361, 0xCFEA}, //8505 #HANGUL SYLLABLE KHIEUKH U RIEULMIEUM + {0xB362, 0xCFEB}, //8506 #HANGUL SYLLABLE KHIEUKH U RIEULPIEUP + {0xB363, 0xCFEC}, //8507 #HANGUL SYLLABLE KHIEUKH U RIEULSIOS + {0xB364, 0xCFED}, //8508 #HANGUL SYLLABLE KHIEUKH U RIEULTHIEUTH + {0xB365, 0xCFEE}, //8509 #HANGUL SYLLABLE KHIEUKH U RIEULPHIEUPH + {0xB366, 0xCFEF}, //8510 #HANGUL SYLLABLE KHIEUKH U RIEULHIEUH + {0xB367, 0xCFF2}, //8511 #HANGUL SYLLABLE KHIEUKH U PIEUPSIOS + {0xB368, 0xCFF4}, //8512 #HANGUL SYLLABLE KHIEUKH U SSANGSIOS + {0xB369, 0xCFF6}, //8513 #HANGUL SYLLABLE KHIEUKH U CIEUC + {0xB36A, 0xCFF7}, //8514 #HANGUL SYLLABLE KHIEUKH U CHIEUCH + {0xB36B, 0xCFF8}, //8515 #HANGUL SYLLABLE KHIEUKH U KHIEUKH + {0xB36C, 0xCFF9}, //8516 #HANGUL SYLLABLE KHIEUKH U THIEUTH + {0xB36D, 0xCFFA}, //8517 #HANGUL SYLLABLE KHIEUKH U PHIEUPH + {0xB36E, 0xCFFB}, //8518 #HANGUL SYLLABLE KHIEUKH U HIEUH + {0xB36F, 0xCFFD}, //8519 #HANGUL SYLLABLE KHIEUKH WEO KIYEOK + {0xB370, 0xCFFE}, //8520 #HANGUL SYLLABLE KHIEUKH WEO SSANGKIYEOK + {0xB371, 0xCFFF}, //8521 #HANGUL SYLLABLE KHIEUKH WEO KIYEOKSIOS + {0xB372, 0xD001}, //8522 #HANGUL SYLLABLE KHIEUKH WEO NIEUNCIEUC + {0xB373, 0xD002}, //8523 #HANGUL SYLLABLE KHIEUKH WEO NIEUNHIEUH + {0xB374, 0xD003}, //8524 #HANGUL SYLLABLE KHIEUKH WEO TIKEUT + {0xB375, 0xD005}, //8525 #HANGUL SYLLABLE KHIEUKH WEO RIEULKIYEOK + {0xB376, 0xD006}, //8526 #HANGUL SYLLABLE KHIEUKH WEO RIEULMIEUM + {0xB377, 0xD007}, //8527 #HANGUL SYLLABLE KHIEUKH WEO RIEULPIEUP + {0xB378, 0xD008}, //8528 #HANGUL SYLLABLE KHIEUKH WEO RIEULSIOS + {0xB379, 0xD009}, //8529 #HANGUL SYLLABLE KHIEUKH WEO RIEULTHIEUTH + {0xB37A, 0xD00A}, //8530 #HANGUL SYLLABLE KHIEUKH WEO RIEULPHIEUPH + {0xB381, 0xD00B}, //8531 #HANGUL SYLLABLE KHIEUKH WEO RIEULHIEUH + {0xB382, 0xD00C}, //8532 #HANGUL SYLLABLE KHIEUKH WEO MIEUM + {0xB383, 0xD00D}, //8533 #HANGUL SYLLABLE KHIEUKH WEO PIEUP + {0xB384, 0xD00E}, //8534 #HANGUL SYLLABLE KHIEUKH WEO PIEUPSIOS + {0xB385, 0xD00F}, //8535 #HANGUL SYLLABLE KHIEUKH WEO SIOS + {0xB386, 0xD010}, //8536 #HANGUL SYLLABLE KHIEUKH WEO SSANGSIOS + {0xB387, 0xD012}, //8537 #HANGUL SYLLABLE KHIEUKH WEO CIEUC + {0xB388, 0xD013}, //8538 #HANGUL SYLLABLE KHIEUKH WEO CHIEUCH + {0xB389, 0xD014}, //8539 #HANGUL SYLLABLE KHIEUKH WEO KHIEUKH + {0xB38A, 0xD015}, //8540 #HANGUL SYLLABLE KHIEUKH WEO THIEUTH + {0xB38B, 0xD016}, //8541 #HANGUL SYLLABLE KHIEUKH WEO PHIEUPH + {0xB38C, 0xD017}, //8542 #HANGUL SYLLABLE KHIEUKH WEO HIEUH + {0xB38D, 0xD019}, //8543 #HANGUL SYLLABLE KHIEUKH WE KIYEOK + {0xB38E, 0xD01A}, //8544 #HANGUL SYLLABLE KHIEUKH WE SSANGKIYEOK + {0xB38F, 0xD01B}, //8545 #HANGUL SYLLABLE KHIEUKH WE KIYEOKSIOS + {0xB390, 0xD01C}, //8546 #HANGUL SYLLABLE KHIEUKH WE NIEUN + {0xB391, 0xD01D}, //8547 #HANGUL SYLLABLE KHIEUKH WE NIEUNCIEUC + {0xB392, 0xD01E}, //8548 #HANGUL SYLLABLE KHIEUKH WE NIEUNHIEUH + {0xB393, 0xD01F}, //8549 #HANGUL SYLLABLE KHIEUKH WE TIKEUT + {0xB394, 0xD020}, //8550 #HANGUL SYLLABLE KHIEUKH WE RIEUL + {0xB395, 0xD021}, //8551 #HANGUL SYLLABLE KHIEUKH WE RIEULKIYEOK + {0xB396, 0xD022}, //8552 #HANGUL SYLLABLE KHIEUKH WE RIEULMIEUM + {0xB397, 0xD023}, //8553 #HANGUL SYLLABLE KHIEUKH WE RIEULPIEUP + {0xB398, 0xD024}, //8554 #HANGUL SYLLABLE KHIEUKH WE RIEULSIOS + {0xB399, 0xD025}, //8555 #HANGUL SYLLABLE KHIEUKH WE RIEULTHIEUTH + {0xB39A, 0xD026}, //8556 #HANGUL SYLLABLE KHIEUKH WE RIEULPHIEUPH + {0xB39B, 0xD027}, //8557 #HANGUL SYLLABLE KHIEUKH WE RIEULHIEUH + {0xB39C, 0xD028}, //8558 #HANGUL SYLLABLE KHIEUKH WE MIEUM + {0xB39D, 0xD029}, //8559 #HANGUL SYLLABLE KHIEUKH WE PIEUP + {0xB39E, 0xD02A}, //8560 #HANGUL SYLLABLE KHIEUKH WE PIEUPSIOS + {0xB39F, 0xD02B}, //8561 #HANGUL SYLLABLE KHIEUKH WE SIOS + {0xB3A0, 0xD02C}, //8562 #HANGUL SYLLABLE KHIEUKH WE SSANGSIOS + {0xB3A1, 0xB05D}, //8563 #HANGUL SYLLABLE SSANGKIYEOK EU THIEUTH + {0xB3A2, 0xB07C}, //8564 #HANGUL SYLLABLE SSANGKIYEOK I + {0xB3A3, 0xB07D}, //8565 #HANGUL SYLLABLE SSANGKIYEOK I KIYEOK + {0xB3A4, 0xB080}, //8566 #HANGUL SYLLABLE SSANGKIYEOK I NIEUN + {0xB3A5, 0xB084}, //8567 #HANGUL SYLLABLE SSANGKIYEOK I RIEUL + {0xB3A6, 0xB08C}, //8568 #HANGUL SYLLABLE SSANGKIYEOK I MIEUM + {0xB3A7, 0xB08D}, //8569 #HANGUL SYLLABLE SSANGKIYEOK I PIEUP + {0xB3A8, 0xB08F}, //8570 #HANGUL SYLLABLE SSANGKIYEOK I SIOS + {0xB3A9, 0xB091}, //8571 #HANGUL SYLLABLE SSANGKIYEOK I IEUNG + {0xB3AA, 0xB098}, //8572 #HANGUL SYLLABLE NIEUN A + {0xB3AB, 0xB099}, //8573 #HANGUL SYLLABLE NIEUN A KIYEOK + {0xB3AC, 0xB09A}, //8574 #HANGUL SYLLABLE NIEUN A SSANGKIYEOK + {0xB3AD, 0xB09C}, //8575 #HANGUL SYLLABLE NIEUN A NIEUN + {0xB3AE, 0xB09F}, //8576 #HANGUL SYLLABLE NIEUN A TIKEUT + {0xB3AF, 0xB0A0}, //8577 #HANGUL SYLLABLE NIEUN A RIEUL + {0xB3B0, 0xB0A1}, //8578 #HANGUL SYLLABLE NIEUN A RIEULKIYEOK + {0xB3B1, 0xB0A2}, //8579 #HANGUL SYLLABLE NIEUN A RIEULMIEUM + {0xB3B2, 0xB0A8}, //8580 #HANGUL SYLLABLE NIEUN A MIEUM + {0xB3B3, 0xB0A9}, //8581 #HANGUL SYLLABLE NIEUN A PIEUP + {0xB3B4, 0xB0AB}, //8582 #HANGUL SYLLABLE NIEUN A SIOS + {0xB3B5, 0xB0AC}, //8583 #HANGUL SYLLABLE NIEUN A SSANGSIOS + {0xB3B6, 0xB0AD}, //8584 #HANGUL SYLLABLE NIEUN A IEUNG + {0xB3B7, 0xB0AE}, //8585 #HANGUL SYLLABLE NIEUN A CIEUC + {0xB3B8, 0xB0AF}, //8586 #HANGUL SYLLABLE NIEUN A CHIEUCH + {0xB3B9, 0xB0B1}, //8587 #HANGUL SYLLABLE NIEUN A THIEUTH + {0xB3BA, 0xB0B3}, //8588 #HANGUL SYLLABLE NIEUN A HIEUH + {0xB3BB, 0xB0B4}, //8589 #HANGUL SYLLABLE NIEUN AE + {0xB3BC, 0xB0B5}, //8590 #HANGUL SYLLABLE NIEUN AE KIYEOK + {0xB3BD, 0xB0B8}, //8591 #HANGUL SYLLABLE NIEUN AE NIEUN + {0xB3BE, 0xB0BC}, //8592 #HANGUL SYLLABLE NIEUN AE RIEUL + {0xB3BF, 0xB0C4}, //8593 #HANGUL SYLLABLE NIEUN AE MIEUM + {0xB3C0, 0xB0C5}, //8594 #HANGUL SYLLABLE NIEUN AE PIEUP + {0xB3C1, 0xB0C7}, //8595 #HANGUL SYLLABLE NIEUN AE SIOS + {0xB3C2, 0xB0C8}, //8596 #HANGUL SYLLABLE NIEUN AE SSANGSIOS + {0xB3C3, 0xB0C9}, //8597 #HANGUL SYLLABLE NIEUN AE IEUNG + {0xB3C4, 0xB0D0}, //8598 #HANGUL SYLLABLE NIEUN YA + {0xB3C5, 0xB0D1}, //8599 #HANGUL SYLLABLE NIEUN YA KIYEOK + {0xB3C6, 0xB0D4}, //8600 #HANGUL SYLLABLE NIEUN YA NIEUN + {0xB3C7, 0xB0D8}, //8601 #HANGUL SYLLABLE NIEUN YA RIEUL + {0xB3C8, 0xB0E0}, //8602 #HANGUL SYLLABLE NIEUN YA MIEUM + {0xB3C9, 0xB0E5}, //8603 #HANGUL SYLLABLE NIEUN YA IEUNG + {0xB3CA, 0xB108}, //8604 #HANGUL SYLLABLE NIEUN EO + {0xB3CB, 0xB109}, //8605 #HANGUL SYLLABLE NIEUN EO KIYEOK + {0xB3CC, 0xB10B}, //8606 #HANGUL SYLLABLE NIEUN EO KIYEOKSIOS + {0xB3CD, 0xB10C}, //8607 #HANGUL SYLLABLE NIEUN EO NIEUN + {0xB3CE, 0xB110}, //8608 #HANGUL SYLLABLE NIEUN EO RIEUL + {0xB3CF, 0xB112}, //8609 #HANGUL SYLLABLE NIEUN EO RIEULMIEUM + {0xB3D0, 0xB113}, //8610 #HANGUL SYLLABLE NIEUN EO RIEULPIEUP + {0xB3D1, 0xB118}, //8611 #HANGUL SYLLABLE NIEUN EO MIEUM + {0xB3D2, 0xB119}, //8612 #HANGUL SYLLABLE NIEUN EO PIEUP + {0xB3D3, 0xB11B}, //8613 #HANGUL SYLLABLE NIEUN EO SIOS + {0xB3D4, 0xB11C}, //8614 #HANGUL SYLLABLE NIEUN EO SSANGSIOS + {0xB3D5, 0xB11D}, //8615 #HANGUL SYLLABLE NIEUN EO IEUNG + {0xB3D6, 0xB123}, //8616 #HANGUL SYLLABLE NIEUN EO HIEUH + {0xB3D7, 0xB124}, //8617 #HANGUL SYLLABLE NIEUN E + {0xB3D8, 0xB125}, //8618 #HANGUL SYLLABLE NIEUN E KIYEOK + {0xB3D9, 0xB128}, //8619 #HANGUL SYLLABLE NIEUN E NIEUN + {0xB3DA, 0xB12C}, //8620 #HANGUL SYLLABLE NIEUN E RIEUL + {0xB3DB, 0xB134}, //8621 #HANGUL SYLLABLE NIEUN E MIEUM + {0xB3DC, 0xB135}, //8622 #HANGUL SYLLABLE NIEUN E PIEUP + {0xB3DD, 0xB137}, //8623 #HANGUL SYLLABLE NIEUN E SIOS + {0xB3DE, 0xB138}, //8624 #HANGUL SYLLABLE NIEUN E SSANGSIOS + {0xB3DF, 0xB139}, //8625 #HANGUL SYLLABLE NIEUN E IEUNG + {0xB3E0, 0xB140}, //8626 #HANGUL SYLLABLE NIEUN YEO + {0xB3E1, 0xB141}, //8627 #HANGUL SYLLABLE NIEUN YEO KIYEOK + {0xB3E2, 0xB144}, //8628 #HANGUL SYLLABLE NIEUN YEO NIEUN + {0xB3E3, 0xB148}, //8629 #HANGUL SYLLABLE NIEUN YEO RIEUL + {0xB3E4, 0xB150}, //8630 #HANGUL SYLLABLE NIEUN YEO MIEUM + {0xB3E5, 0xB151}, //8631 #HANGUL SYLLABLE NIEUN YEO PIEUP + {0xB3E6, 0xB154}, //8632 #HANGUL SYLLABLE NIEUN YEO SSANGSIOS + {0xB3E7, 0xB155}, //8633 #HANGUL SYLLABLE NIEUN YEO IEUNG + {0xB3E8, 0xB158}, //8634 #HANGUL SYLLABLE NIEUN YEO KHIEUKH + {0xB3E9, 0xB15C}, //8635 #HANGUL SYLLABLE NIEUN YE + {0xB3EA, 0xB160}, //8636 #HANGUL SYLLABLE NIEUN YE NIEUN + {0xB3EB, 0xB178}, //8637 #HANGUL SYLLABLE NIEUN O + {0xB3EC, 0xB179}, //8638 #HANGUL SYLLABLE NIEUN O KIYEOK + {0xB3ED, 0xB17C}, //8639 #HANGUL SYLLABLE NIEUN O NIEUN + {0xB3EE, 0xB180}, //8640 #HANGUL SYLLABLE NIEUN O RIEUL + {0xB3EF, 0xB182}, //8641 #HANGUL SYLLABLE NIEUN O RIEULMIEUM + {0xB3F0, 0xB188}, //8642 #HANGUL SYLLABLE NIEUN O MIEUM + {0xB3F1, 0xB189}, //8643 #HANGUL SYLLABLE NIEUN O PIEUP + {0xB3F2, 0xB18B}, //8644 #HANGUL SYLLABLE NIEUN O SIOS + {0xB3F3, 0xB18D}, //8645 #HANGUL SYLLABLE NIEUN O IEUNG + {0xB3F4, 0xB192}, //8646 #HANGUL SYLLABLE NIEUN O PHIEUPH + {0xB3F5, 0xB193}, //8647 #HANGUL SYLLABLE NIEUN O HIEUH + {0xB3F6, 0xB194}, //8648 #HANGUL SYLLABLE NIEUN WA + {0xB3F7, 0xB198}, //8649 #HANGUL SYLLABLE NIEUN WA NIEUN + {0xB3F8, 0xB19C}, //8650 #HANGUL SYLLABLE NIEUN WA RIEUL + {0xB3F9, 0xB1A8}, //8651 #HANGUL SYLLABLE NIEUN WA SSANGSIOS + {0xB3FA, 0xB1CC}, //8652 #HANGUL SYLLABLE NIEUN OE + {0xB3FB, 0xB1D0}, //8653 #HANGUL SYLLABLE NIEUN OE NIEUN + {0xB3FC, 0xB1D4}, //8654 #HANGUL SYLLABLE NIEUN OE RIEUL + {0xB3FD, 0xB1DC}, //8655 #HANGUL SYLLABLE NIEUN OE MIEUM + {0xB3FE, 0xB1DD}, //8656 #HANGUL SYLLABLE NIEUN OE PIEUP + {0xB441, 0xD02E}, //8657 #HANGUL SYLLABLE KHIEUKH WE CIEUC + {0xB442, 0xD02F}, //8658 #HANGUL SYLLABLE KHIEUKH WE CHIEUCH + {0xB443, 0xD030}, //8659 #HANGUL SYLLABLE KHIEUKH WE KHIEUKH + {0xB444, 0xD031}, //8660 #HANGUL SYLLABLE KHIEUKH WE THIEUTH + {0xB445, 0xD032}, //8661 #HANGUL SYLLABLE KHIEUKH WE PHIEUPH + {0xB446, 0xD033}, //8662 #HANGUL SYLLABLE KHIEUKH WE HIEUH + {0xB447, 0xD036}, //8663 #HANGUL SYLLABLE KHIEUKH WI SSANGKIYEOK + {0xB448, 0xD037}, //8664 #HANGUL SYLLABLE KHIEUKH WI KIYEOKSIOS + {0xB449, 0xD039}, //8665 #HANGUL SYLLABLE KHIEUKH WI NIEUNCIEUC + {0xB44A, 0xD03A}, //8666 #HANGUL SYLLABLE KHIEUKH WI NIEUNHIEUH + {0xB44B, 0xD03B}, //8667 #HANGUL SYLLABLE KHIEUKH WI TIKEUT + {0xB44C, 0xD03D}, //8668 #HANGUL SYLLABLE KHIEUKH WI RIEULKIYEOK + {0xB44D, 0xD03E}, //8669 #HANGUL SYLLABLE KHIEUKH WI RIEULMIEUM + {0xB44E, 0xD03F}, //8670 #HANGUL SYLLABLE KHIEUKH WI RIEULPIEUP + {0xB44F, 0xD040}, //8671 #HANGUL SYLLABLE KHIEUKH WI RIEULSIOS + {0xB450, 0xD041}, //8672 #HANGUL SYLLABLE KHIEUKH WI RIEULTHIEUTH + {0xB451, 0xD042}, //8673 #HANGUL SYLLABLE KHIEUKH WI RIEULPHIEUPH + {0xB452, 0xD043}, //8674 #HANGUL SYLLABLE KHIEUKH WI RIEULHIEUH + {0xB453, 0xD046}, //8675 #HANGUL SYLLABLE KHIEUKH WI PIEUPSIOS + {0xB454, 0xD048}, //8676 #HANGUL SYLLABLE KHIEUKH WI SSANGSIOS + {0xB455, 0xD04A}, //8677 #HANGUL SYLLABLE KHIEUKH WI CIEUC + {0xB456, 0xD04B}, //8678 #HANGUL SYLLABLE KHIEUKH WI CHIEUCH + {0xB457, 0xD04C}, //8679 #HANGUL SYLLABLE KHIEUKH WI KHIEUKH + {0xB458, 0xD04D}, //8680 #HANGUL SYLLABLE KHIEUKH WI THIEUTH + {0xB459, 0xD04E}, //8681 #HANGUL SYLLABLE KHIEUKH WI PHIEUPH + {0xB45A, 0xD04F}, //8682 #HANGUL SYLLABLE KHIEUKH WI HIEUH + {0xB461, 0xD051}, //8683 #HANGUL SYLLABLE KHIEUKH YU KIYEOK + {0xB462, 0xD052}, //8684 #HANGUL SYLLABLE KHIEUKH YU SSANGKIYEOK + {0xB463, 0xD053}, //8685 #HANGUL SYLLABLE KHIEUKH YU KIYEOKSIOS + {0xB464, 0xD055}, //8686 #HANGUL SYLLABLE KHIEUKH YU NIEUNCIEUC + {0xB465, 0xD056}, //8687 #HANGUL SYLLABLE KHIEUKH YU NIEUNHIEUH + {0xB466, 0xD057}, //8688 #HANGUL SYLLABLE KHIEUKH YU TIKEUT + {0xB467, 0xD059}, //8689 #HANGUL SYLLABLE KHIEUKH YU RIEULKIYEOK + {0xB468, 0xD05A}, //8690 #HANGUL SYLLABLE KHIEUKH YU RIEULMIEUM + {0xB469, 0xD05B}, //8691 #HANGUL SYLLABLE KHIEUKH YU RIEULPIEUP + {0xB46A, 0xD05C}, //8692 #HANGUL SYLLABLE KHIEUKH YU RIEULSIOS + {0xB46B, 0xD05D}, //8693 #HANGUL SYLLABLE KHIEUKH YU RIEULTHIEUTH + {0xB46C, 0xD05E}, //8694 #HANGUL SYLLABLE KHIEUKH YU RIEULPHIEUPH + {0xB46D, 0xD05F}, //8695 #HANGUL SYLLABLE KHIEUKH YU RIEULHIEUH + {0xB46E, 0xD061}, //8696 #HANGUL SYLLABLE KHIEUKH YU PIEUP + {0xB46F, 0xD062}, //8697 #HANGUL SYLLABLE KHIEUKH YU PIEUPSIOS + {0xB470, 0xD063}, //8698 #HANGUL SYLLABLE KHIEUKH YU SIOS + {0xB471, 0xD064}, //8699 #HANGUL SYLLABLE KHIEUKH YU SSANGSIOS + {0xB472, 0xD065}, //8700 #HANGUL SYLLABLE KHIEUKH YU IEUNG + {0xB473, 0xD066}, //8701 #HANGUL SYLLABLE KHIEUKH YU CIEUC + {0xB474, 0xD067}, //8702 #HANGUL SYLLABLE KHIEUKH YU CHIEUCH + {0xB475, 0xD068}, //8703 #HANGUL SYLLABLE KHIEUKH YU KHIEUKH + {0xB476, 0xD069}, //8704 #HANGUL SYLLABLE KHIEUKH YU THIEUTH + {0xB477, 0xD06A}, //8705 #HANGUL SYLLABLE KHIEUKH YU PHIEUPH + {0xB478, 0xD06B}, //8706 #HANGUL SYLLABLE KHIEUKH YU HIEUH + {0xB479, 0xD06E}, //8707 #HANGUL SYLLABLE KHIEUKH EU SSANGKIYEOK + {0xB47A, 0xD06F}, //8708 #HANGUL SYLLABLE KHIEUKH EU KIYEOKSIOS + {0xB481, 0xD071}, //8709 #HANGUL SYLLABLE KHIEUKH EU NIEUNCIEUC + {0xB482, 0xD072}, //8710 #HANGUL SYLLABLE KHIEUKH EU NIEUNHIEUH + {0xB483, 0xD073}, //8711 #HANGUL SYLLABLE KHIEUKH EU TIKEUT + {0xB484, 0xD075}, //8712 #HANGUL SYLLABLE KHIEUKH EU RIEULKIYEOK + {0xB485, 0xD076}, //8713 #HANGUL SYLLABLE KHIEUKH EU RIEULMIEUM + {0xB486, 0xD077}, //8714 #HANGUL SYLLABLE KHIEUKH EU RIEULPIEUP + {0xB487, 0xD078}, //8715 #HANGUL SYLLABLE KHIEUKH EU RIEULSIOS + {0xB488, 0xD079}, //8716 #HANGUL SYLLABLE KHIEUKH EU RIEULTHIEUTH + {0xB489, 0xD07A}, //8717 #HANGUL SYLLABLE KHIEUKH EU RIEULPHIEUPH + {0xB48A, 0xD07B}, //8718 #HANGUL SYLLABLE KHIEUKH EU RIEULHIEUH + {0xB48B, 0xD07E}, //8719 #HANGUL SYLLABLE KHIEUKH EU PIEUPSIOS + {0xB48C, 0xD07F}, //8720 #HANGUL SYLLABLE KHIEUKH EU SIOS + {0xB48D, 0xD080}, //8721 #HANGUL SYLLABLE KHIEUKH EU SSANGSIOS + {0xB48E, 0xD082}, //8722 #HANGUL SYLLABLE KHIEUKH EU CIEUC + {0xB48F, 0xD083}, //8723 #HANGUL SYLLABLE KHIEUKH EU CHIEUCH + {0xB490, 0xD084}, //8724 #HANGUL SYLLABLE KHIEUKH EU KHIEUKH + {0xB491, 0xD085}, //8725 #HANGUL SYLLABLE KHIEUKH EU THIEUTH + {0xB492, 0xD086}, //8726 #HANGUL SYLLABLE KHIEUKH EU PHIEUPH + {0xB493, 0xD087}, //8727 #HANGUL SYLLABLE KHIEUKH EU HIEUH + {0xB494, 0xD088}, //8728 #HANGUL SYLLABLE KHIEUKH YI + {0xB495, 0xD089}, //8729 #HANGUL SYLLABLE KHIEUKH YI KIYEOK + {0xB496, 0xD08A}, //8730 #HANGUL SYLLABLE KHIEUKH YI SSANGKIYEOK + {0xB497, 0xD08B}, //8731 #HANGUL SYLLABLE KHIEUKH YI KIYEOKSIOS + {0xB498, 0xD08C}, //8732 #HANGUL SYLLABLE KHIEUKH YI NIEUN + {0xB499, 0xD08D}, //8733 #HANGUL SYLLABLE KHIEUKH YI NIEUNCIEUC + {0xB49A, 0xD08E}, //8734 #HANGUL SYLLABLE KHIEUKH YI NIEUNHIEUH + {0xB49B, 0xD08F}, //8735 #HANGUL SYLLABLE KHIEUKH YI TIKEUT + {0xB49C, 0xD090}, //8736 #HANGUL SYLLABLE KHIEUKH YI RIEUL + {0xB49D, 0xD091}, //8737 #HANGUL SYLLABLE KHIEUKH YI RIEULKIYEOK + {0xB49E, 0xD092}, //8738 #HANGUL SYLLABLE KHIEUKH YI RIEULMIEUM + {0xB49F, 0xD093}, //8739 #HANGUL SYLLABLE KHIEUKH YI RIEULPIEUP + {0xB4A0, 0xD094}, //8740 #HANGUL SYLLABLE KHIEUKH YI RIEULSIOS + {0xB4A1, 0xB1DF}, //8741 #HANGUL SYLLABLE NIEUN OE SIOS + {0xB4A2, 0xB1E8}, //8742 #HANGUL SYLLABLE NIEUN YO + {0xB4A3, 0xB1E9}, //8743 #HANGUL SYLLABLE NIEUN YO KIYEOK + {0xB4A4, 0xB1EC}, //8744 #HANGUL SYLLABLE NIEUN YO NIEUN + {0xB4A5, 0xB1F0}, //8745 #HANGUL SYLLABLE NIEUN YO RIEUL + {0xB4A6, 0xB1F9}, //8746 #HANGUL SYLLABLE NIEUN YO PIEUP + {0xB4A7, 0xB1FB}, //8747 #HANGUL SYLLABLE NIEUN YO SIOS + {0xB4A8, 0xB1FD}, //8748 #HANGUL SYLLABLE NIEUN YO IEUNG + {0xB4A9, 0xB204}, //8749 #HANGUL SYLLABLE NIEUN U + {0xB4AA, 0xB205}, //8750 #HANGUL SYLLABLE NIEUN U KIYEOK + {0xB4AB, 0xB208}, //8751 #HANGUL SYLLABLE NIEUN U NIEUN + {0xB4AC, 0xB20B}, //8752 #HANGUL SYLLABLE NIEUN U TIKEUT + {0xB4AD, 0xB20C}, //8753 #HANGUL SYLLABLE NIEUN U RIEUL + {0xB4AE, 0xB214}, //8754 #HANGUL SYLLABLE NIEUN U MIEUM + {0xB4AF, 0xB215}, //8755 #HANGUL SYLLABLE NIEUN U PIEUP + {0xB4B0, 0xB217}, //8756 #HANGUL SYLLABLE NIEUN U SIOS + {0xB4B1, 0xB219}, //8757 #HANGUL SYLLABLE NIEUN U IEUNG + {0xB4B2, 0xB220}, //8758 #HANGUL SYLLABLE NIEUN WEO + {0xB4B3, 0xB234}, //8759 #HANGUL SYLLABLE NIEUN WEO SSANGSIOS + {0xB4B4, 0xB23C}, //8760 #HANGUL SYLLABLE NIEUN WE + {0xB4B5, 0xB258}, //8761 #HANGUL SYLLABLE NIEUN WI + {0xB4B6, 0xB25C}, //8762 #HANGUL SYLLABLE NIEUN WI NIEUN + {0xB4B7, 0xB260}, //8763 #HANGUL SYLLABLE NIEUN WI RIEUL + {0xB4B8, 0xB268}, //8764 #HANGUL SYLLABLE NIEUN WI MIEUM + {0xB4B9, 0xB269}, //8765 #HANGUL SYLLABLE NIEUN WI PIEUP + {0xB4BA, 0xB274}, //8766 #HANGUL SYLLABLE NIEUN YU + {0xB4BB, 0xB275}, //8767 #HANGUL SYLLABLE NIEUN YU KIYEOK + {0xB4BC, 0xB27C}, //8768 #HANGUL SYLLABLE NIEUN YU RIEUL + {0xB4BD, 0xB284}, //8769 #HANGUL SYLLABLE NIEUN YU MIEUM + {0xB4BE, 0xB285}, //8770 #HANGUL SYLLABLE NIEUN YU PIEUP + {0xB4BF, 0xB289}, //8771 #HANGUL SYLLABLE NIEUN YU IEUNG + {0xB4C0, 0xB290}, //8772 #HANGUL SYLLABLE NIEUN EU + {0xB4C1, 0xB291}, //8773 #HANGUL SYLLABLE NIEUN EU KIYEOK + {0xB4C2, 0xB294}, //8774 #HANGUL SYLLABLE NIEUN EU NIEUN + {0xB4C3, 0xB298}, //8775 #HANGUL SYLLABLE NIEUN EU RIEUL + {0xB4C4, 0xB299}, //8776 #HANGUL SYLLABLE NIEUN EU RIEULKIYEOK + {0xB4C5, 0xB29A}, //8777 #HANGUL SYLLABLE NIEUN EU RIEULMIEUM + {0xB4C6, 0xB2A0}, //8778 #HANGUL SYLLABLE NIEUN EU MIEUM + {0xB4C7, 0xB2A1}, //8779 #HANGUL SYLLABLE NIEUN EU PIEUP + {0xB4C8, 0xB2A3}, //8780 #HANGUL SYLLABLE NIEUN EU SIOS + {0xB4C9, 0xB2A5}, //8781 #HANGUL SYLLABLE NIEUN EU IEUNG + {0xB4CA, 0xB2A6}, //8782 #HANGUL SYLLABLE NIEUN EU CIEUC + {0xB4CB, 0xB2AA}, //8783 #HANGUL SYLLABLE NIEUN EU PHIEUPH + {0xB4CC, 0xB2AC}, //8784 #HANGUL SYLLABLE NIEUN YI + {0xB4CD, 0xB2B0}, //8785 #HANGUL SYLLABLE NIEUN YI NIEUN + {0xB4CE, 0xB2B4}, //8786 #HANGUL SYLLABLE NIEUN YI RIEUL + {0xB4CF, 0xB2C8}, //8787 #HANGUL SYLLABLE NIEUN I + {0xB4D0, 0xB2C9}, //8788 #HANGUL SYLLABLE NIEUN I KIYEOK + {0xB4D1, 0xB2CC}, //8789 #HANGUL SYLLABLE NIEUN I NIEUN + {0xB4D2, 0xB2D0}, //8790 #HANGUL SYLLABLE NIEUN I RIEUL + {0xB4D3, 0xB2D2}, //8791 #HANGUL SYLLABLE NIEUN I RIEULMIEUM + {0xB4D4, 0xB2D8}, //8792 #HANGUL SYLLABLE NIEUN I MIEUM + {0xB4D5, 0xB2D9}, //8793 #HANGUL SYLLABLE NIEUN I PIEUP + {0xB4D6, 0xB2DB}, //8794 #HANGUL SYLLABLE NIEUN I SIOS + {0xB4D7, 0xB2DD}, //8795 #HANGUL SYLLABLE NIEUN I IEUNG + {0xB4D8, 0xB2E2}, //8796 #HANGUL SYLLABLE NIEUN I PHIEUPH + {0xB4D9, 0xB2E4}, //8797 #HANGUL SYLLABLE TIKEUT A + {0xB4DA, 0xB2E5}, //8798 #HANGUL SYLLABLE TIKEUT A KIYEOK + {0xB4DB, 0xB2E6}, //8799 #HANGUL SYLLABLE TIKEUT A SSANGKIYEOK + {0xB4DC, 0xB2E8}, //8800 #HANGUL SYLLABLE TIKEUT A NIEUN + {0xB4DD, 0xB2EB}, //8801 #HANGUL SYLLABLE TIKEUT A TIKEUT + {0xB4DE, 0xB2EC}, //8802 #HANGUL SYLLABLE TIKEUT A RIEUL + {0xB4DF, 0xB2ED}, //8803 #HANGUL SYLLABLE TIKEUT A RIEULKIYEOK + {0xB4E0, 0xB2EE}, //8804 #HANGUL SYLLABLE TIKEUT A RIEULMIEUM + {0xB4E1, 0xB2EF}, //8805 #HANGUL SYLLABLE TIKEUT A RIEULPIEUP + {0xB4E2, 0xB2F3}, //8806 #HANGUL SYLLABLE TIKEUT A RIEULHIEUH + {0xB4E3, 0xB2F4}, //8807 #HANGUL SYLLABLE TIKEUT A MIEUM + {0xB4E4, 0xB2F5}, //8808 #HANGUL SYLLABLE TIKEUT A PIEUP + {0xB4E5, 0xB2F7}, //8809 #HANGUL SYLLABLE TIKEUT A SIOS + {0xB4E6, 0xB2F8}, //8810 #HANGUL SYLLABLE TIKEUT A SSANGSIOS + {0xB4E7, 0xB2F9}, //8811 #HANGUL SYLLABLE TIKEUT A IEUNG + {0xB4E8, 0xB2FA}, //8812 #HANGUL SYLLABLE TIKEUT A CIEUC + {0xB4E9, 0xB2FB}, //8813 #HANGUL SYLLABLE TIKEUT A CHIEUCH + {0xB4EA, 0xB2FF}, //8814 #HANGUL SYLLABLE TIKEUT A HIEUH + {0xB4EB, 0xB300}, //8815 #HANGUL SYLLABLE TIKEUT AE + {0xB4EC, 0xB301}, //8816 #HANGUL SYLLABLE TIKEUT AE KIYEOK + {0xB4ED, 0xB304}, //8817 #HANGUL SYLLABLE TIKEUT AE NIEUN + {0xB4EE, 0xB308}, //8818 #HANGUL SYLLABLE TIKEUT AE RIEUL + {0xB4EF, 0xB310}, //8819 #HANGUL SYLLABLE TIKEUT AE MIEUM + {0xB4F0, 0xB311}, //8820 #HANGUL SYLLABLE TIKEUT AE PIEUP + {0xB4F1, 0xB313}, //8821 #HANGUL SYLLABLE TIKEUT AE SIOS + {0xB4F2, 0xB314}, //8822 #HANGUL SYLLABLE TIKEUT AE SSANGSIOS + {0xB4F3, 0xB315}, //8823 #HANGUL SYLLABLE TIKEUT AE IEUNG + {0xB4F4, 0xB31C}, //8824 #HANGUL SYLLABLE TIKEUT YA + {0xB4F5, 0xB354}, //8825 #HANGUL SYLLABLE TIKEUT EO + {0xB4F6, 0xB355}, //8826 #HANGUL SYLLABLE TIKEUT EO KIYEOK + {0xB4F7, 0xB356}, //8827 #HANGUL SYLLABLE TIKEUT EO SSANGKIYEOK + {0xB4F8, 0xB358}, //8828 #HANGUL SYLLABLE TIKEUT EO NIEUN + {0xB4F9, 0xB35B}, //8829 #HANGUL SYLLABLE TIKEUT EO TIKEUT + {0xB4FA, 0xB35C}, //8830 #HANGUL SYLLABLE TIKEUT EO RIEUL + {0xB4FB, 0xB35E}, //8831 #HANGUL SYLLABLE TIKEUT EO RIEULMIEUM + {0xB4FC, 0xB35F}, //8832 #HANGUL SYLLABLE TIKEUT EO RIEULPIEUP + {0xB4FD, 0xB364}, //8833 #HANGUL SYLLABLE TIKEUT EO MIEUM + {0xB4FE, 0xB365}, //8834 #HANGUL SYLLABLE TIKEUT EO PIEUP + {0xB541, 0xD095}, //8835 #HANGUL SYLLABLE KHIEUKH YI RIEULTHIEUTH + {0xB542, 0xD096}, //8836 #HANGUL SYLLABLE KHIEUKH YI RIEULPHIEUPH + {0xB543, 0xD097}, //8837 #HANGUL SYLLABLE KHIEUKH YI RIEULHIEUH + {0xB544, 0xD098}, //8838 #HANGUL SYLLABLE KHIEUKH YI MIEUM + {0xB545, 0xD099}, //8839 #HANGUL SYLLABLE KHIEUKH YI PIEUP + {0xB546, 0xD09A}, //8840 #HANGUL SYLLABLE KHIEUKH YI PIEUPSIOS + {0xB547, 0xD09B}, //8841 #HANGUL SYLLABLE KHIEUKH YI SIOS + {0xB548, 0xD09C}, //8842 #HANGUL SYLLABLE KHIEUKH YI SSANGSIOS + {0xB549, 0xD09D}, //8843 #HANGUL SYLLABLE KHIEUKH YI IEUNG + {0xB54A, 0xD09E}, //8844 #HANGUL SYLLABLE KHIEUKH YI CIEUC + {0xB54B, 0xD09F}, //8845 #HANGUL SYLLABLE KHIEUKH YI CHIEUCH + {0xB54C, 0xD0A0}, //8846 #HANGUL SYLLABLE KHIEUKH YI KHIEUKH + {0xB54D, 0xD0A1}, //8847 #HANGUL SYLLABLE KHIEUKH YI THIEUTH + {0xB54E, 0xD0A2}, //8848 #HANGUL SYLLABLE KHIEUKH YI PHIEUPH + {0xB54F, 0xD0A3}, //8849 #HANGUL SYLLABLE KHIEUKH YI HIEUH + {0xB550, 0xD0A6}, //8850 #HANGUL SYLLABLE KHIEUKH I SSANGKIYEOK + {0xB551, 0xD0A7}, //8851 #HANGUL SYLLABLE KHIEUKH I KIYEOKSIOS + {0xB552, 0xD0A9}, //8852 #HANGUL SYLLABLE KHIEUKH I NIEUNCIEUC + {0xB553, 0xD0AA}, //8853 #HANGUL SYLLABLE KHIEUKH I NIEUNHIEUH + {0xB554, 0xD0AB}, //8854 #HANGUL SYLLABLE KHIEUKH I TIKEUT + {0xB555, 0xD0AD}, //8855 #HANGUL SYLLABLE KHIEUKH I RIEULKIYEOK + {0xB556, 0xD0AE}, //8856 #HANGUL SYLLABLE KHIEUKH I RIEULMIEUM + {0xB557, 0xD0AF}, //8857 #HANGUL SYLLABLE KHIEUKH I RIEULPIEUP + {0xB558, 0xD0B0}, //8858 #HANGUL SYLLABLE KHIEUKH I RIEULSIOS + {0xB559, 0xD0B1}, //8859 #HANGUL SYLLABLE KHIEUKH I RIEULTHIEUTH + {0xB55A, 0xD0B2}, //8860 #HANGUL SYLLABLE KHIEUKH I RIEULPHIEUPH + {0xB561, 0xD0B3}, //8861 #HANGUL SYLLABLE KHIEUKH I RIEULHIEUH + {0xB562, 0xD0B6}, //8862 #HANGUL SYLLABLE KHIEUKH I PIEUPSIOS + {0xB563, 0xD0B8}, //8863 #HANGUL SYLLABLE KHIEUKH I SSANGSIOS + {0xB564, 0xD0BA}, //8864 #HANGUL SYLLABLE KHIEUKH I CIEUC + {0xB565, 0xD0BB}, //8865 #HANGUL SYLLABLE KHIEUKH I CHIEUCH + {0xB566, 0xD0BC}, //8866 #HANGUL SYLLABLE KHIEUKH I KHIEUKH + {0xB567, 0xD0BD}, //8867 #HANGUL SYLLABLE KHIEUKH I THIEUTH + {0xB568, 0xD0BE}, //8868 #HANGUL SYLLABLE KHIEUKH I PHIEUPH + {0xB569, 0xD0BF}, //8869 #HANGUL SYLLABLE KHIEUKH I HIEUH + {0xB56A, 0xD0C2}, //8870 #HANGUL SYLLABLE THIEUTH A SSANGKIYEOK + {0xB56B, 0xD0C3}, //8871 #HANGUL SYLLABLE THIEUTH A KIYEOKSIOS + {0xB56C, 0xD0C5}, //8872 #HANGUL SYLLABLE THIEUTH A NIEUNCIEUC + {0xB56D, 0xD0C6}, //8873 #HANGUL SYLLABLE THIEUTH A NIEUNHIEUH + {0xB56E, 0xD0C7}, //8874 #HANGUL SYLLABLE THIEUTH A TIKEUT + {0xB56F, 0xD0CA}, //8875 #HANGUL SYLLABLE THIEUTH A RIEULMIEUM + {0xB570, 0xD0CB}, //8876 #HANGUL SYLLABLE THIEUTH A RIEULPIEUP + {0xB571, 0xD0CC}, //8877 #HANGUL SYLLABLE THIEUTH A RIEULSIOS + {0xB572, 0xD0CD}, //8878 #HANGUL SYLLABLE THIEUTH A RIEULTHIEUTH + {0xB573, 0xD0CE}, //8879 #HANGUL SYLLABLE THIEUTH A RIEULPHIEUPH + {0xB574, 0xD0CF}, //8880 #HANGUL SYLLABLE THIEUTH A RIEULHIEUH + {0xB575, 0xD0D2}, //8881 #HANGUL SYLLABLE THIEUTH A PIEUPSIOS + {0xB576, 0xD0D6}, //8882 #HANGUL SYLLABLE THIEUTH A CIEUC + {0xB577, 0xD0D7}, //8883 #HANGUL SYLLABLE THIEUTH A CHIEUCH + {0xB578, 0xD0D8}, //8884 #HANGUL SYLLABLE THIEUTH A KHIEUKH + {0xB579, 0xD0D9}, //8885 #HANGUL SYLLABLE THIEUTH A THIEUTH + {0xB57A, 0xD0DA}, //8886 #HANGUL SYLLABLE THIEUTH A PHIEUPH + {0xB581, 0xD0DB}, //8887 #HANGUL SYLLABLE THIEUTH A HIEUH + {0xB582, 0xD0DE}, //8888 #HANGUL SYLLABLE THIEUTH AE SSANGKIYEOK + {0xB583, 0xD0DF}, //8889 #HANGUL SYLLABLE THIEUTH AE KIYEOKSIOS + {0xB584, 0xD0E1}, //8890 #HANGUL SYLLABLE THIEUTH AE NIEUNCIEUC + {0xB585, 0xD0E2}, //8891 #HANGUL SYLLABLE THIEUTH AE NIEUNHIEUH + {0xB586, 0xD0E3}, //8892 #HANGUL SYLLABLE THIEUTH AE TIKEUT + {0xB587, 0xD0E5}, //8893 #HANGUL SYLLABLE THIEUTH AE RIEULKIYEOK + {0xB588, 0xD0E6}, //8894 #HANGUL SYLLABLE THIEUTH AE RIEULMIEUM + {0xB589, 0xD0E7}, //8895 #HANGUL SYLLABLE THIEUTH AE RIEULPIEUP + {0xB58A, 0xD0E8}, //8896 #HANGUL SYLLABLE THIEUTH AE RIEULSIOS + {0xB58B, 0xD0E9}, //8897 #HANGUL SYLLABLE THIEUTH AE RIEULTHIEUTH + {0xB58C, 0xD0EA}, //8898 #HANGUL SYLLABLE THIEUTH AE RIEULPHIEUPH + {0xB58D, 0xD0EB}, //8899 #HANGUL SYLLABLE THIEUTH AE RIEULHIEUH + {0xB58E, 0xD0EE}, //8900 #HANGUL SYLLABLE THIEUTH AE PIEUPSIOS + {0xB58F, 0xD0F2}, //8901 #HANGUL SYLLABLE THIEUTH AE CIEUC + {0xB590, 0xD0F3}, //8902 #HANGUL SYLLABLE THIEUTH AE CHIEUCH + {0xB591, 0xD0F4}, //8903 #HANGUL SYLLABLE THIEUTH AE KHIEUKH + {0xB592, 0xD0F5}, //8904 #HANGUL SYLLABLE THIEUTH AE THIEUTH + {0xB593, 0xD0F6}, //8905 #HANGUL SYLLABLE THIEUTH AE PHIEUPH + {0xB594, 0xD0F7}, //8906 #HANGUL SYLLABLE THIEUTH AE HIEUH + {0xB595, 0xD0F9}, //8907 #HANGUL SYLLABLE THIEUTH YA KIYEOK + {0xB596, 0xD0FA}, //8908 #HANGUL SYLLABLE THIEUTH YA SSANGKIYEOK + {0xB597, 0xD0FB}, //8909 #HANGUL SYLLABLE THIEUTH YA KIYEOKSIOS + {0xB598, 0xD0FC}, //8910 #HANGUL SYLLABLE THIEUTH YA NIEUN + {0xB599, 0xD0FD}, //8911 #HANGUL SYLLABLE THIEUTH YA NIEUNCIEUC + {0xB59A, 0xD0FE}, //8912 #HANGUL SYLLABLE THIEUTH YA NIEUNHIEUH + {0xB59B, 0xD0FF}, //8913 #HANGUL SYLLABLE THIEUTH YA TIKEUT + {0xB59C, 0xD100}, //8914 #HANGUL SYLLABLE THIEUTH YA RIEUL + {0xB59D, 0xD101}, //8915 #HANGUL SYLLABLE THIEUTH YA RIEULKIYEOK + {0xB59E, 0xD102}, //8916 #HANGUL SYLLABLE THIEUTH YA RIEULMIEUM + {0xB59F, 0xD103}, //8917 #HANGUL SYLLABLE THIEUTH YA RIEULPIEUP + {0xB5A0, 0xD104}, //8918 #HANGUL SYLLABLE THIEUTH YA RIEULSIOS + {0xB5A1, 0xB367}, //8919 #HANGUL SYLLABLE TIKEUT EO SIOS + {0xB5A2, 0xB369}, //8920 #HANGUL SYLLABLE TIKEUT EO IEUNG + {0xB5A3, 0xB36B}, //8921 #HANGUL SYLLABLE TIKEUT EO CHIEUCH + {0xB5A4, 0xB36E}, //8922 #HANGUL SYLLABLE TIKEUT EO PHIEUPH + {0xB5A5, 0xB370}, //8923 #HANGUL SYLLABLE TIKEUT E + {0xB5A6, 0xB371}, //8924 #HANGUL SYLLABLE TIKEUT E KIYEOK + {0xB5A7, 0xB374}, //8925 #HANGUL SYLLABLE TIKEUT E NIEUN + {0xB5A8, 0xB378}, //8926 #HANGUL SYLLABLE TIKEUT E RIEUL + {0xB5A9, 0xB380}, //8927 #HANGUL SYLLABLE TIKEUT E MIEUM + {0xB5AA, 0xB381}, //8928 #HANGUL SYLLABLE TIKEUT E PIEUP + {0xB5AB, 0xB383}, //8929 #HANGUL SYLLABLE TIKEUT E SIOS + {0xB5AC, 0xB384}, //8930 #HANGUL SYLLABLE TIKEUT E SSANGSIOS + {0xB5AD, 0xB385}, //8931 #HANGUL SYLLABLE TIKEUT E IEUNG + {0xB5AE, 0xB38C}, //8932 #HANGUL SYLLABLE TIKEUT YEO + {0xB5AF, 0xB390}, //8933 #HANGUL SYLLABLE TIKEUT YEO NIEUN + {0xB5B0, 0xB394}, //8934 #HANGUL SYLLABLE TIKEUT YEO RIEUL + {0xB5B1, 0xB3A0}, //8935 #HANGUL SYLLABLE TIKEUT YEO SSANGSIOS + {0xB5B2, 0xB3A1}, //8936 #HANGUL SYLLABLE TIKEUT YEO IEUNG + {0xB5B3, 0xB3A8}, //8937 #HANGUL SYLLABLE TIKEUT YE + {0xB5B4, 0xB3AC}, //8938 #HANGUL SYLLABLE TIKEUT YE NIEUN + {0xB5B5, 0xB3C4}, //8939 #HANGUL SYLLABLE TIKEUT O + {0xB5B6, 0xB3C5}, //8940 #HANGUL SYLLABLE TIKEUT O KIYEOK + {0xB5B7, 0xB3C8}, //8941 #HANGUL SYLLABLE TIKEUT O NIEUN + {0xB5B8, 0xB3CB}, //8942 #HANGUL SYLLABLE TIKEUT O TIKEUT + {0xB5B9, 0xB3CC}, //8943 #HANGUL SYLLABLE TIKEUT O RIEUL + {0xB5BA, 0xB3CE}, //8944 #HANGUL SYLLABLE TIKEUT O RIEULMIEUM + {0xB5BB, 0xB3D0}, //8945 #HANGUL SYLLABLE TIKEUT O RIEULSIOS + {0xB5BC, 0xB3D4}, //8946 #HANGUL SYLLABLE TIKEUT O MIEUM + {0xB5BD, 0xB3D5}, //8947 #HANGUL SYLLABLE TIKEUT O PIEUP + {0xB5BE, 0xB3D7}, //8948 #HANGUL SYLLABLE TIKEUT O SIOS + {0xB5BF, 0xB3D9}, //8949 #HANGUL SYLLABLE TIKEUT O IEUNG + {0xB5C0, 0xB3DB}, //8950 #HANGUL SYLLABLE TIKEUT O CHIEUCH + {0xB5C1, 0xB3DD}, //8951 #HANGUL SYLLABLE TIKEUT O THIEUTH + {0xB5C2, 0xB3E0}, //8952 #HANGUL SYLLABLE TIKEUT WA + {0xB5C3, 0xB3E4}, //8953 #HANGUL SYLLABLE TIKEUT WA NIEUN + {0xB5C4, 0xB3E8}, //8954 #HANGUL SYLLABLE TIKEUT WA RIEUL + {0xB5C5, 0xB3FC}, //8955 #HANGUL SYLLABLE TIKEUT WAE + {0xB5C6, 0xB410}, //8956 #HANGUL SYLLABLE TIKEUT WAE SSANGSIOS + {0xB5C7, 0xB418}, //8957 #HANGUL SYLLABLE TIKEUT OE + {0xB5C8, 0xB41C}, //8958 #HANGUL SYLLABLE TIKEUT OE NIEUN + {0xB5C9, 0xB420}, //8959 #HANGUL SYLLABLE TIKEUT OE RIEUL + {0xB5CA, 0xB428}, //8960 #HANGUL SYLLABLE TIKEUT OE MIEUM + {0xB5CB, 0xB429}, //8961 #HANGUL SYLLABLE TIKEUT OE PIEUP + {0xB5CC, 0xB42B}, //8962 #HANGUL SYLLABLE TIKEUT OE SIOS + {0xB5CD, 0xB434}, //8963 #HANGUL SYLLABLE TIKEUT YO + {0xB5CE, 0xB450}, //8964 #HANGUL SYLLABLE TIKEUT U + {0xB5CF, 0xB451}, //8965 #HANGUL SYLLABLE TIKEUT U KIYEOK + {0xB5D0, 0xB454}, //8966 #HANGUL SYLLABLE TIKEUT U NIEUN + {0xB5D1, 0xB458}, //8967 #HANGUL SYLLABLE TIKEUT U RIEUL + {0xB5D2, 0xB460}, //8968 #HANGUL SYLLABLE TIKEUT U MIEUM + {0xB5D3, 0xB461}, //8969 #HANGUL SYLLABLE TIKEUT U PIEUP + {0xB5D4, 0xB463}, //8970 #HANGUL SYLLABLE TIKEUT U SIOS + {0xB5D5, 0xB465}, //8971 #HANGUL SYLLABLE TIKEUT U IEUNG + {0xB5D6, 0xB46C}, //8972 #HANGUL SYLLABLE TIKEUT WEO + {0xB5D7, 0xB480}, //8973 #HANGUL SYLLABLE TIKEUT WEO SSANGSIOS + {0xB5D8, 0xB488}, //8974 #HANGUL SYLLABLE TIKEUT WE + {0xB5D9, 0xB49D}, //8975 #HANGUL SYLLABLE TIKEUT WE IEUNG + {0xB5DA, 0xB4A4}, //8976 #HANGUL SYLLABLE TIKEUT WI + {0xB5DB, 0xB4A8}, //8977 #HANGUL SYLLABLE TIKEUT WI NIEUN + {0xB5DC, 0xB4AC}, //8978 #HANGUL SYLLABLE TIKEUT WI RIEUL + {0xB5DD, 0xB4B5}, //8979 #HANGUL SYLLABLE TIKEUT WI PIEUP + {0xB5DE, 0xB4B7}, //8980 #HANGUL SYLLABLE TIKEUT WI SIOS + {0xB5DF, 0xB4B9}, //8981 #HANGUL SYLLABLE TIKEUT WI IEUNG + {0xB5E0, 0xB4C0}, //8982 #HANGUL SYLLABLE TIKEUT YU + {0xB5E1, 0xB4C4}, //8983 #HANGUL SYLLABLE TIKEUT YU NIEUN + {0xB5E2, 0xB4C8}, //8984 #HANGUL SYLLABLE TIKEUT YU RIEUL + {0xB5E3, 0xB4D0}, //8985 #HANGUL SYLLABLE TIKEUT YU MIEUM + {0xB5E4, 0xB4D5}, //8986 #HANGUL SYLLABLE TIKEUT YU IEUNG + {0xB5E5, 0xB4DC}, //8987 #HANGUL SYLLABLE TIKEUT EU + {0xB5E6, 0xB4DD}, //8988 #HANGUL SYLLABLE TIKEUT EU KIYEOK + {0xB5E7, 0xB4E0}, //8989 #HANGUL SYLLABLE TIKEUT EU NIEUN + {0xB5E8, 0xB4E3}, //8990 #HANGUL SYLLABLE TIKEUT EU TIKEUT + {0xB5E9, 0xB4E4}, //8991 #HANGUL SYLLABLE TIKEUT EU RIEUL + {0xB5EA, 0xB4E6}, //8992 #HANGUL SYLLABLE TIKEUT EU RIEULMIEUM + {0xB5EB, 0xB4EC}, //8993 #HANGUL SYLLABLE TIKEUT EU MIEUM + {0xB5EC, 0xB4ED}, //8994 #HANGUL SYLLABLE TIKEUT EU PIEUP + {0xB5ED, 0xB4EF}, //8995 #HANGUL SYLLABLE TIKEUT EU SIOS + {0xB5EE, 0xB4F1}, //8996 #HANGUL SYLLABLE TIKEUT EU IEUNG + {0xB5EF, 0xB4F8}, //8997 #HANGUL SYLLABLE TIKEUT YI + {0xB5F0, 0xB514}, //8998 #HANGUL SYLLABLE TIKEUT I + {0xB5F1, 0xB515}, //8999 #HANGUL SYLLABLE TIKEUT I KIYEOK + {0xB5F2, 0xB518}, //9000 #HANGUL SYLLABLE TIKEUT I NIEUN + {0xB5F3, 0xB51B}, //9001 #HANGUL SYLLABLE TIKEUT I TIKEUT + {0xB5F4, 0xB51C}, //9002 #HANGUL SYLLABLE TIKEUT I RIEUL + {0xB5F5, 0xB524}, //9003 #HANGUL SYLLABLE TIKEUT I MIEUM + {0xB5F6, 0xB525}, //9004 #HANGUL SYLLABLE TIKEUT I PIEUP + {0xB5F7, 0xB527}, //9005 #HANGUL SYLLABLE TIKEUT I SIOS + {0xB5F8, 0xB528}, //9006 #HANGUL SYLLABLE TIKEUT I SSANGSIOS + {0xB5F9, 0xB529}, //9007 #HANGUL SYLLABLE TIKEUT I IEUNG + {0xB5FA, 0xB52A}, //9008 #HANGUL SYLLABLE TIKEUT I CIEUC + {0xB5FB, 0xB530}, //9009 #HANGUL SYLLABLE SSANGTIKEUT A + {0xB5FC, 0xB531}, //9010 #HANGUL SYLLABLE SSANGTIKEUT A KIYEOK + {0xB5FD, 0xB534}, //9011 #HANGUL SYLLABLE SSANGTIKEUT A NIEUN + {0xB5FE, 0xB538}, //9012 #HANGUL SYLLABLE SSANGTIKEUT A RIEUL + {0xB641, 0xD105}, //9013 #HANGUL SYLLABLE THIEUTH YA RIEULTHIEUTH + {0xB642, 0xD106}, //9014 #HANGUL SYLLABLE THIEUTH YA RIEULPHIEUPH + {0xB643, 0xD107}, //9015 #HANGUL SYLLABLE THIEUTH YA RIEULHIEUH + {0xB644, 0xD108}, //9016 #HANGUL SYLLABLE THIEUTH YA MIEUM + {0xB645, 0xD109}, //9017 #HANGUL SYLLABLE THIEUTH YA PIEUP + {0xB646, 0xD10A}, //9018 #HANGUL SYLLABLE THIEUTH YA PIEUPSIOS + {0xB647, 0xD10B}, //9019 #HANGUL SYLLABLE THIEUTH YA SIOS + {0xB648, 0xD10C}, //9020 #HANGUL SYLLABLE THIEUTH YA SSANGSIOS + {0xB649, 0xD10E}, //9021 #HANGUL SYLLABLE THIEUTH YA CIEUC + {0xB64A, 0xD10F}, //9022 #HANGUL SYLLABLE THIEUTH YA CHIEUCH + {0xB64B, 0xD110}, //9023 #HANGUL SYLLABLE THIEUTH YA KHIEUKH + {0xB64C, 0xD111}, //9024 #HANGUL SYLLABLE THIEUTH YA THIEUTH + {0xB64D, 0xD112}, //9025 #HANGUL SYLLABLE THIEUTH YA PHIEUPH + {0xB64E, 0xD113}, //9026 #HANGUL SYLLABLE THIEUTH YA HIEUH + {0xB64F, 0xD114}, //9027 #HANGUL SYLLABLE THIEUTH YAE + {0xB650, 0xD115}, //9028 #HANGUL SYLLABLE THIEUTH YAE KIYEOK + {0xB651, 0xD116}, //9029 #HANGUL SYLLABLE THIEUTH YAE SSANGKIYEOK + {0xB652, 0xD117}, //9030 #HANGUL SYLLABLE THIEUTH YAE KIYEOKSIOS + {0xB653, 0xD118}, //9031 #HANGUL SYLLABLE THIEUTH YAE NIEUN + {0xB654, 0xD119}, //9032 #HANGUL SYLLABLE THIEUTH YAE NIEUNCIEUC + {0xB655, 0xD11A}, //9033 #HANGUL SYLLABLE THIEUTH YAE NIEUNHIEUH + {0xB656, 0xD11B}, //9034 #HANGUL SYLLABLE THIEUTH YAE TIKEUT + {0xB657, 0xD11C}, //9035 #HANGUL SYLLABLE THIEUTH YAE RIEUL + {0xB658, 0xD11D}, //9036 #HANGUL SYLLABLE THIEUTH YAE RIEULKIYEOK + {0xB659, 0xD11E}, //9037 #HANGUL SYLLABLE THIEUTH YAE RIEULMIEUM + {0xB65A, 0xD11F}, //9038 #HANGUL SYLLABLE THIEUTH YAE RIEULPIEUP + {0xB661, 0xD120}, //9039 #HANGUL SYLLABLE THIEUTH YAE RIEULSIOS + {0xB662, 0xD121}, //9040 #HANGUL SYLLABLE THIEUTH YAE RIEULTHIEUTH + {0xB663, 0xD122}, //9041 #HANGUL SYLLABLE THIEUTH YAE RIEULPHIEUPH + {0xB664, 0xD123}, //9042 #HANGUL SYLLABLE THIEUTH YAE RIEULHIEUH + {0xB665, 0xD124}, //9043 #HANGUL SYLLABLE THIEUTH YAE MIEUM + {0xB666, 0xD125}, //9044 #HANGUL SYLLABLE THIEUTH YAE PIEUP + {0xB667, 0xD126}, //9045 #HANGUL SYLLABLE THIEUTH YAE PIEUPSIOS + {0xB668, 0xD127}, //9046 #HANGUL SYLLABLE THIEUTH YAE SIOS + {0xB669, 0xD128}, //9047 #HANGUL SYLLABLE THIEUTH YAE SSANGSIOS + {0xB66A, 0xD129}, //9048 #HANGUL SYLLABLE THIEUTH YAE IEUNG + {0xB66B, 0xD12A}, //9049 #HANGUL SYLLABLE THIEUTH YAE CIEUC + {0xB66C, 0xD12B}, //9050 #HANGUL SYLLABLE THIEUTH YAE CHIEUCH + {0xB66D, 0xD12C}, //9051 #HANGUL SYLLABLE THIEUTH YAE KHIEUKH + {0xB66E, 0xD12D}, //9052 #HANGUL SYLLABLE THIEUTH YAE THIEUTH + {0xB66F, 0xD12E}, //9053 #HANGUL SYLLABLE THIEUTH YAE PHIEUPH + {0xB670, 0xD12F}, //9054 #HANGUL SYLLABLE THIEUTH YAE HIEUH + {0xB671, 0xD132}, //9055 #HANGUL SYLLABLE THIEUTH EO SSANGKIYEOK + {0xB672, 0xD133}, //9056 #HANGUL SYLLABLE THIEUTH EO KIYEOKSIOS + {0xB673, 0xD135}, //9057 #HANGUL SYLLABLE THIEUTH EO NIEUNCIEUC + {0xB674, 0xD136}, //9058 #HANGUL SYLLABLE THIEUTH EO NIEUNHIEUH + {0xB675, 0xD137}, //9059 #HANGUL SYLLABLE THIEUTH EO TIKEUT + {0xB676, 0xD139}, //9060 #HANGUL SYLLABLE THIEUTH EO RIEULKIYEOK + {0xB677, 0xD13B}, //9061 #HANGUL SYLLABLE THIEUTH EO RIEULPIEUP + {0xB678, 0xD13C}, //9062 #HANGUL SYLLABLE THIEUTH EO RIEULSIOS + {0xB679, 0xD13D}, //9063 #HANGUL SYLLABLE THIEUTH EO RIEULTHIEUTH + {0xB67A, 0xD13E}, //9064 #HANGUL SYLLABLE THIEUTH EO RIEULPHIEUPH + {0xB681, 0xD13F}, //9065 #HANGUL SYLLABLE THIEUTH EO RIEULHIEUH + {0xB682, 0xD142}, //9066 #HANGUL SYLLABLE THIEUTH EO PIEUPSIOS + {0xB683, 0xD146}, //9067 #HANGUL SYLLABLE THIEUTH EO CIEUC + {0xB684, 0xD147}, //9068 #HANGUL SYLLABLE THIEUTH EO CHIEUCH + {0xB685, 0xD148}, //9069 #HANGUL SYLLABLE THIEUTH EO KHIEUKH + {0xB686, 0xD149}, //9070 #HANGUL SYLLABLE THIEUTH EO THIEUTH + {0xB687, 0xD14A}, //9071 #HANGUL SYLLABLE THIEUTH EO PHIEUPH + {0xB688, 0xD14B}, //9072 #HANGUL SYLLABLE THIEUTH EO HIEUH + {0xB689, 0xD14E}, //9073 #HANGUL SYLLABLE THIEUTH E SSANGKIYEOK + {0xB68A, 0xD14F}, //9074 #HANGUL SYLLABLE THIEUTH E KIYEOKSIOS + {0xB68B, 0xD151}, //9075 #HANGUL SYLLABLE THIEUTH E NIEUNCIEUC + {0xB68C, 0xD152}, //9076 #HANGUL SYLLABLE THIEUTH E NIEUNHIEUH + {0xB68D, 0xD153}, //9077 #HANGUL SYLLABLE THIEUTH E TIKEUT + {0xB68E, 0xD155}, //9078 #HANGUL SYLLABLE THIEUTH E RIEULKIYEOK + {0xB68F, 0xD156}, //9079 #HANGUL SYLLABLE THIEUTH E RIEULMIEUM + {0xB690, 0xD157}, //9080 #HANGUL SYLLABLE THIEUTH E RIEULPIEUP + {0xB691, 0xD158}, //9081 #HANGUL SYLLABLE THIEUTH E RIEULSIOS + {0xB692, 0xD159}, //9082 #HANGUL SYLLABLE THIEUTH E RIEULTHIEUTH + {0xB693, 0xD15A}, //9083 #HANGUL SYLLABLE THIEUTH E RIEULPHIEUPH + {0xB694, 0xD15B}, //9084 #HANGUL SYLLABLE THIEUTH E RIEULHIEUH + {0xB695, 0xD15E}, //9085 #HANGUL SYLLABLE THIEUTH E PIEUPSIOS + {0xB696, 0xD160}, //9086 #HANGUL SYLLABLE THIEUTH E SSANGSIOS + {0xB697, 0xD162}, //9087 #HANGUL SYLLABLE THIEUTH E CIEUC + {0xB698, 0xD163}, //9088 #HANGUL SYLLABLE THIEUTH E CHIEUCH + {0xB699, 0xD164}, //9089 #HANGUL SYLLABLE THIEUTH E KHIEUKH + {0xB69A, 0xD165}, //9090 #HANGUL SYLLABLE THIEUTH E THIEUTH + {0xB69B, 0xD166}, //9091 #HANGUL SYLLABLE THIEUTH E PHIEUPH + {0xB69C, 0xD167}, //9092 #HANGUL SYLLABLE THIEUTH E HIEUH + {0xB69D, 0xD169}, //9093 #HANGUL SYLLABLE THIEUTH YEO KIYEOK + {0xB69E, 0xD16A}, //9094 #HANGUL SYLLABLE THIEUTH YEO SSANGKIYEOK + {0xB69F, 0xD16B}, //9095 #HANGUL SYLLABLE THIEUTH YEO KIYEOKSIOS + {0xB6A0, 0xD16D}, //9096 #HANGUL SYLLABLE THIEUTH YEO NIEUNCIEUC + {0xB6A1, 0xB540}, //9097 #HANGUL SYLLABLE SSANGTIKEUT A MIEUM + {0xB6A2, 0xB541}, //9098 #HANGUL SYLLABLE SSANGTIKEUT A PIEUP + {0xB6A3, 0xB543}, //9099 #HANGUL SYLLABLE SSANGTIKEUT A SIOS + {0xB6A4, 0xB544}, //9100 #HANGUL SYLLABLE SSANGTIKEUT A SSANGSIOS + {0xB6A5, 0xB545}, //9101 #HANGUL SYLLABLE SSANGTIKEUT A IEUNG + {0xB6A6, 0xB54B}, //9102 #HANGUL SYLLABLE SSANGTIKEUT A HIEUH + {0xB6A7, 0xB54C}, //9103 #HANGUL SYLLABLE SSANGTIKEUT AE + {0xB6A8, 0xB54D}, //9104 #HANGUL SYLLABLE SSANGTIKEUT AE KIYEOK + {0xB6A9, 0xB550}, //9105 #HANGUL SYLLABLE SSANGTIKEUT AE NIEUN + {0xB6AA, 0xB554}, //9106 #HANGUL SYLLABLE SSANGTIKEUT AE RIEUL + {0xB6AB, 0xB55C}, //9107 #HANGUL SYLLABLE SSANGTIKEUT AE MIEUM + {0xB6AC, 0xB55D}, //9108 #HANGUL SYLLABLE SSANGTIKEUT AE PIEUP + {0xB6AD, 0xB55F}, //9109 #HANGUL SYLLABLE SSANGTIKEUT AE SIOS + {0xB6AE, 0xB560}, //9110 #HANGUL SYLLABLE SSANGTIKEUT AE SSANGSIOS + {0xB6AF, 0xB561}, //9111 #HANGUL SYLLABLE SSANGTIKEUT AE IEUNG + {0xB6B0, 0xB5A0}, //9112 #HANGUL SYLLABLE SSANGTIKEUT EO + {0xB6B1, 0xB5A1}, //9113 #HANGUL SYLLABLE SSANGTIKEUT EO KIYEOK + {0xB6B2, 0xB5A4}, //9114 #HANGUL SYLLABLE SSANGTIKEUT EO NIEUN + {0xB6B3, 0xB5A8}, //9115 #HANGUL SYLLABLE SSANGTIKEUT EO RIEUL + {0xB6B4, 0xB5AA}, //9116 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULMIEUM + {0xB6B5, 0xB5AB}, //9117 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULPIEUP + {0xB6B6, 0xB5B0}, //9118 #HANGUL SYLLABLE SSANGTIKEUT EO MIEUM + {0xB6B7, 0xB5B1}, //9119 #HANGUL SYLLABLE SSANGTIKEUT EO PIEUP + {0xB6B8, 0xB5B3}, //9120 #HANGUL SYLLABLE SSANGTIKEUT EO SIOS + {0xB6B9, 0xB5B4}, //9121 #HANGUL SYLLABLE SSANGTIKEUT EO SSANGSIOS + {0xB6BA, 0xB5B5}, //9122 #HANGUL SYLLABLE SSANGTIKEUT EO IEUNG + {0xB6BB, 0xB5BB}, //9123 #HANGUL SYLLABLE SSANGTIKEUT EO HIEUH + {0xB6BC, 0xB5BC}, //9124 #HANGUL SYLLABLE SSANGTIKEUT E + {0xB6BD, 0xB5BD}, //9125 #HANGUL SYLLABLE SSANGTIKEUT E KIYEOK + {0xB6BE, 0xB5C0}, //9126 #HANGUL SYLLABLE SSANGTIKEUT E NIEUN + {0xB6BF, 0xB5C4}, //9127 #HANGUL SYLLABLE SSANGTIKEUT E RIEUL + {0xB6C0, 0xB5CC}, //9128 #HANGUL SYLLABLE SSANGTIKEUT E MIEUM + {0xB6C1, 0xB5CD}, //9129 #HANGUL SYLLABLE SSANGTIKEUT E PIEUP + {0xB6C2, 0xB5CF}, //9130 #HANGUL SYLLABLE SSANGTIKEUT E SIOS + {0xB6C3, 0xB5D0}, //9131 #HANGUL SYLLABLE SSANGTIKEUT E SSANGSIOS + {0xB6C4, 0xB5D1}, //9132 #HANGUL SYLLABLE SSANGTIKEUT E IEUNG + {0xB6C5, 0xB5D8}, //9133 #HANGUL SYLLABLE SSANGTIKEUT YEO + {0xB6C6, 0xB5EC}, //9134 #HANGUL SYLLABLE SSANGTIKEUT YEO SSANGSIOS + {0xB6C7, 0xB610}, //9135 #HANGUL SYLLABLE SSANGTIKEUT O + {0xB6C8, 0xB611}, //9136 #HANGUL SYLLABLE SSANGTIKEUT O KIYEOK + {0xB6C9, 0xB614}, //9137 #HANGUL SYLLABLE SSANGTIKEUT O NIEUN + {0xB6CA, 0xB618}, //9138 #HANGUL SYLLABLE SSANGTIKEUT O RIEUL + {0xB6CB, 0xB625}, //9139 #HANGUL SYLLABLE SSANGTIKEUT O IEUNG + {0xB6CC, 0xB62C}, //9140 #HANGUL SYLLABLE SSANGTIKEUT WA + {0xB6CD, 0xB634}, //9141 #HANGUL SYLLABLE SSANGTIKEUT WA RIEUL + {0xB6CE, 0xB648}, //9142 #HANGUL SYLLABLE SSANGTIKEUT WAE + {0xB6CF, 0xB664}, //9143 #HANGUL SYLLABLE SSANGTIKEUT OE + {0xB6D0, 0xB668}, //9144 #HANGUL SYLLABLE SSANGTIKEUT OE NIEUN + {0xB6D1, 0xB69C}, //9145 #HANGUL SYLLABLE SSANGTIKEUT U + {0xB6D2, 0xB69D}, //9146 #HANGUL SYLLABLE SSANGTIKEUT U KIYEOK + {0xB6D3, 0xB6A0}, //9147 #HANGUL SYLLABLE SSANGTIKEUT U NIEUN + {0xB6D4, 0xB6A4}, //9148 #HANGUL SYLLABLE SSANGTIKEUT U RIEUL + {0xB6D5, 0xB6AB}, //9149 #HANGUL SYLLABLE SSANGTIKEUT U RIEULHIEUH + {0xB6D6, 0xB6AC}, //9150 #HANGUL SYLLABLE SSANGTIKEUT U MIEUM + {0xB6D7, 0xB6B1}, //9151 #HANGUL SYLLABLE SSANGTIKEUT U IEUNG + {0xB6D8, 0xB6D4}, //9152 #HANGUL SYLLABLE SSANGTIKEUT WE + {0xB6D9, 0xB6F0}, //9153 #HANGUL SYLLABLE SSANGTIKEUT WI + {0xB6DA, 0xB6F4}, //9154 #HANGUL SYLLABLE SSANGTIKEUT WI NIEUN + {0xB6DB, 0xB6F8}, //9155 #HANGUL SYLLABLE SSANGTIKEUT WI RIEUL + {0xB6DC, 0xB700}, //9156 #HANGUL SYLLABLE SSANGTIKEUT WI MIEUM + {0xB6DD, 0xB701}, //9157 #HANGUL SYLLABLE SSANGTIKEUT WI PIEUP + {0xB6DE, 0xB705}, //9158 #HANGUL SYLLABLE SSANGTIKEUT WI IEUNG + {0xB6DF, 0xB728}, //9159 #HANGUL SYLLABLE SSANGTIKEUT EU + {0xB6E0, 0xB729}, //9160 #HANGUL SYLLABLE SSANGTIKEUT EU KIYEOK + {0xB6E1, 0xB72C}, //9161 #HANGUL SYLLABLE SSANGTIKEUT EU NIEUN + {0xB6E2, 0xB72F}, //9162 #HANGUL SYLLABLE SSANGTIKEUT EU TIKEUT + {0xB6E3, 0xB730}, //9163 #HANGUL SYLLABLE SSANGTIKEUT EU RIEUL + {0xB6E4, 0xB738}, //9164 #HANGUL SYLLABLE SSANGTIKEUT EU MIEUM + {0xB6E5, 0xB739}, //9165 #HANGUL SYLLABLE SSANGTIKEUT EU PIEUP + {0xB6E6, 0xB73B}, //9166 #HANGUL SYLLABLE SSANGTIKEUT EU SIOS + {0xB6E7, 0xB744}, //9167 #HANGUL SYLLABLE SSANGTIKEUT YI + {0xB6E8, 0xB748}, //9168 #HANGUL SYLLABLE SSANGTIKEUT YI NIEUN + {0xB6E9, 0xB74C}, //9169 #HANGUL SYLLABLE SSANGTIKEUT YI RIEUL + {0xB6EA, 0xB754}, //9170 #HANGUL SYLLABLE SSANGTIKEUT YI MIEUM + {0xB6EB, 0xB755}, //9171 #HANGUL SYLLABLE SSANGTIKEUT YI PIEUP + {0xB6EC, 0xB760}, //9172 #HANGUL SYLLABLE SSANGTIKEUT I + {0xB6ED, 0xB764}, //9173 #HANGUL SYLLABLE SSANGTIKEUT I NIEUN + {0xB6EE, 0xB768}, //9174 #HANGUL SYLLABLE SSANGTIKEUT I RIEUL + {0xB6EF, 0xB770}, //9175 #HANGUL SYLLABLE SSANGTIKEUT I MIEUM + {0xB6F0, 0xB771}, //9176 #HANGUL SYLLABLE SSANGTIKEUT I PIEUP + {0xB6F1, 0xB773}, //9177 #HANGUL SYLLABLE SSANGTIKEUT I SIOS + {0xB6F2, 0xB775}, //9178 #HANGUL SYLLABLE SSANGTIKEUT I IEUNG + {0xB6F3, 0xB77C}, //9179 #HANGUL SYLLABLE RIEUL A + {0xB6F4, 0xB77D}, //9180 #HANGUL SYLLABLE RIEUL A KIYEOK + {0xB6F5, 0xB780}, //9181 #HANGUL SYLLABLE RIEUL A NIEUN + {0xB6F6, 0xB784}, //9182 #HANGUL SYLLABLE RIEUL A RIEUL + {0xB6F7, 0xB78C}, //9183 #HANGUL SYLLABLE RIEUL A MIEUM + {0xB6F8, 0xB78D}, //9184 #HANGUL SYLLABLE RIEUL A PIEUP + {0xB6F9, 0xB78F}, //9185 #HANGUL SYLLABLE RIEUL A SIOS + {0xB6FA, 0xB790}, //9186 #HANGUL SYLLABLE RIEUL A SSANGSIOS + {0xB6FB, 0xB791}, //9187 #HANGUL SYLLABLE RIEUL A IEUNG + {0xB6FC, 0xB792}, //9188 #HANGUL SYLLABLE RIEUL A CIEUC + {0xB6FD, 0xB796}, //9189 #HANGUL SYLLABLE RIEUL A PHIEUPH + {0xB6FE, 0xB797}, //9190 #HANGUL SYLLABLE RIEUL A HIEUH + {0xB741, 0xD16E}, //9191 #HANGUL SYLLABLE THIEUTH YEO NIEUNHIEUH + {0xB742, 0xD16F}, //9192 #HANGUL SYLLABLE THIEUTH YEO TIKEUT + {0xB743, 0xD170}, //9193 #HANGUL SYLLABLE THIEUTH YEO RIEUL + {0xB744, 0xD171}, //9194 #HANGUL SYLLABLE THIEUTH YEO RIEULKIYEOK + {0xB745, 0xD172}, //9195 #HANGUL SYLLABLE THIEUTH YEO RIEULMIEUM + {0xB746, 0xD173}, //9196 #HANGUL SYLLABLE THIEUTH YEO RIEULPIEUP + {0xB747, 0xD174}, //9197 #HANGUL SYLLABLE THIEUTH YEO RIEULSIOS + {0xB748, 0xD175}, //9198 #HANGUL SYLLABLE THIEUTH YEO RIEULTHIEUTH + {0xB749, 0xD176}, //9199 #HANGUL SYLLABLE THIEUTH YEO RIEULPHIEUPH + {0xB74A, 0xD177}, //9200 #HANGUL SYLLABLE THIEUTH YEO RIEULHIEUH + {0xB74B, 0xD178}, //9201 #HANGUL SYLLABLE THIEUTH YEO MIEUM + {0xB74C, 0xD179}, //9202 #HANGUL SYLLABLE THIEUTH YEO PIEUP + {0xB74D, 0xD17A}, //9203 #HANGUL SYLLABLE THIEUTH YEO PIEUPSIOS + {0xB74E, 0xD17B}, //9204 #HANGUL SYLLABLE THIEUTH YEO SIOS + {0xB74F, 0xD17D}, //9205 #HANGUL SYLLABLE THIEUTH YEO IEUNG + {0xB750, 0xD17E}, //9206 #HANGUL SYLLABLE THIEUTH YEO CIEUC + {0xB751, 0xD17F}, //9207 #HANGUL SYLLABLE THIEUTH YEO CHIEUCH + {0xB752, 0xD180}, //9208 #HANGUL SYLLABLE THIEUTH YEO KHIEUKH + {0xB753, 0xD181}, //9209 #HANGUL SYLLABLE THIEUTH YEO THIEUTH + {0xB754, 0xD182}, //9210 #HANGUL SYLLABLE THIEUTH YEO PHIEUPH + {0xB755, 0xD183}, //9211 #HANGUL SYLLABLE THIEUTH YEO HIEUH + {0xB756, 0xD185}, //9212 #HANGUL SYLLABLE THIEUTH YE KIYEOK + {0xB757, 0xD186}, //9213 #HANGUL SYLLABLE THIEUTH YE SSANGKIYEOK + {0xB758, 0xD187}, //9214 #HANGUL SYLLABLE THIEUTH YE KIYEOKSIOS + {0xB759, 0xD189}, //9215 #HANGUL SYLLABLE THIEUTH YE NIEUNCIEUC + {0xB75A, 0xD18A}, //9216 #HANGUL SYLLABLE THIEUTH YE NIEUNHIEUH + {0xB761, 0xD18B}, //9217 #HANGUL SYLLABLE THIEUTH YE TIKEUT + {0xB762, 0xD18C}, //9218 #HANGUL SYLLABLE THIEUTH YE RIEUL + {0xB763, 0xD18D}, //9219 #HANGUL SYLLABLE THIEUTH YE RIEULKIYEOK + {0xB764, 0xD18E}, //9220 #HANGUL SYLLABLE THIEUTH YE RIEULMIEUM + {0xB765, 0xD18F}, //9221 #HANGUL SYLLABLE THIEUTH YE RIEULPIEUP + {0xB766, 0xD190}, //9222 #HANGUL SYLLABLE THIEUTH YE RIEULSIOS + {0xB767, 0xD191}, //9223 #HANGUL SYLLABLE THIEUTH YE RIEULTHIEUTH + {0xB768, 0xD192}, //9224 #HANGUL SYLLABLE THIEUTH YE RIEULPHIEUPH + {0xB769, 0xD193}, //9225 #HANGUL SYLLABLE THIEUTH YE RIEULHIEUH + {0xB76A, 0xD194}, //9226 #HANGUL SYLLABLE THIEUTH YE MIEUM + {0xB76B, 0xD195}, //9227 #HANGUL SYLLABLE THIEUTH YE PIEUP + {0xB76C, 0xD196}, //9228 #HANGUL SYLLABLE THIEUTH YE PIEUPSIOS + {0xB76D, 0xD197}, //9229 #HANGUL SYLLABLE THIEUTH YE SIOS + {0xB76E, 0xD198}, //9230 #HANGUL SYLLABLE THIEUTH YE SSANGSIOS + {0xB76F, 0xD199}, //9231 #HANGUL SYLLABLE THIEUTH YE IEUNG + {0xB770, 0xD19A}, //9232 #HANGUL SYLLABLE THIEUTH YE CIEUC + {0xB771, 0xD19B}, //9233 #HANGUL SYLLABLE THIEUTH YE CHIEUCH + {0xB772, 0xD19C}, //9234 #HANGUL SYLLABLE THIEUTH YE KHIEUKH + {0xB773, 0xD19D}, //9235 #HANGUL SYLLABLE THIEUTH YE THIEUTH + {0xB774, 0xD19E}, //9236 #HANGUL SYLLABLE THIEUTH YE PHIEUPH + {0xB775, 0xD19F}, //9237 #HANGUL SYLLABLE THIEUTH YE HIEUH + {0xB776, 0xD1A2}, //9238 #HANGUL SYLLABLE THIEUTH O SSANGKIYEOK + {0xB777, 0xD1A3}, //9239 #HANGUL SYLLABLE THIEUTH O KIYEOKSIOS + {0xB778, 0xD1A5}, //9240 #HANGUL SYLLABLE THIEUTH O NIEUNCIEUC + {0xB779, 0xD1A6}, //9241 #HANGUL SYLLABLE THIEUTH O NIEUNHIEUH + {0xB77A, 0xD1A7}, //9242 #HANGUL SYLLABLE THIEUTH O TIKEUT + {0xB781, 0xD1A9}, //9243 #HANGUL SYLLABLE THIEUTH O RIEULKIYEOK + {0xB782, 0xD1AA}, //9244 #HANGUL SYLLABLE THIEUTH O RIEULMIEUM + {0xB783, 0xD1AB}, //9245 #HANGUL SYLLABLE THIEUTH O RIEULPIEUP + {0xB784, 0xD1AC}, //9246 #HANGUL SYLLABLE THIEUTH O RIEULSIOS + {0xB785, 0xD1AD}, //9247 #HANGUL SYLLABLE THIEUTH O RIEULTHIEUTH + {0xB786, 0xD1AE}, //9248 #HANGUL SYLLABLE THIEUTH O RIEULPHIEUPH + {0xB787, 0xD1AF}, //9249 #HANGUL SYLLABLE THIEUTH O RIEULHIEUH + {0xB788, 0xD1B2}, //9250 #HANGUL SYLLABLE THIEUTH O PIEUPSIOS + {0xB789, 0xD1B4}, //9251 #HANGUL SYLLABLE THIEUTH O SSANGSIOS + {0xB78A, 0xD1B6}, //9252 #HANGUL SYLLABLE THIEUTH O CIEUC + {0xB78B, 0xD1B7}, //9253 #HANGUL SYLLABLE THIEUTH O CHIEUCH + {0xB78C, 0xD1B8}, //9254 #HANGUL SYLLABLE THIEUTH O KHIEUKH + {0xB78D, 0xD1B9}, //9255 #HANGUL SYLLABLE THIEUTH O THIEUTH + {0xB78E, 0xD1BB}, //9256 #HANGUL SYLLABLE THIEUTH O HIEUH + {0xB78F, 0xD1BD}, //9257 #HANGUL SYLLABLE THIEUTH WA KIYEOK + {0xB790, 0xD1BE}, //9258 #HANGUL SYLLABLE THIEUTH WA SSANGKIYEOK + {0xB791, 0xD1BF}, //9259 #HANGUL SYLLABLE THIEUTH WA KIYEOKSIOS + {0xB792, 0xD1C1}, //9260 #HANGUL SYLLABLE THIEUTH WA NIEUNCIEUC + {0xB793, 0xD1C2}, //9261 #HANGUL SYLLABLE THIEUTH WA NIEUNHIEUH + {0xB794, 0xD1C3}, //9262 #HANGUL SYLLABLE THIEUTH WA TIKEUT + {0xB795, 0xD1C4}, //9263 #HANGUL SYLLABLE THIEUTH WA RIEUL + {0xB796, 0xD1C5}, //9264 #HANGUL SYLLABLE THIEUTH WA RIEULKIYEOK + {0xB797, 0xD1C6}, //9265 #HANGUL SYLLABLE THIEUTH WA RIEULMIEUM + {0xB798, 0xD1C7}, //9266 #HANGUL SYLLABLE THIEUTH WA RIEULPIEUP + {0xB799, 0xD1C8}, //9267 #HANGUL SYLLABLE THIEUTH WA RIEULSIOS + {0xB79A, 0xD1C9}, //9268 #HANGUL SYLLABLE THIEUTH WA RIEULTHIEUTH + {0xB79B, 0xD1CA}, //9269 #HANGUL SYLLABLE THIEUTH WA RIEULPHIEUPH + {0xB79C, 0xD1CB}, //9270 #HANGUL SYLLABLE THIEUTH WA RIEULHIEUH + {0xB79D, 0xD1CC}, //9271 #HANGUL SYLLABLE THIEUTH WA MIEUM + {0xB79E, 0xD1CD}, //9272 #HANGUL SYLLABLE THIEUTH WA PIEUP + {0xB79F, 0xD1CE}, //9273 #HANGUL SYLLABLE THIEUTH WA PIEUPSIOS + {0xB7A0, 0xD1CF}, //9274 #HANGUL SYLLABLE THIEUTH WA SIOS + {0xB7A1, 0xB798}, //9275 #HANGUL SYLLABLE RIEUL AE + {0xB7A2, 0xB799}, //9276 #HANGUL SYLLABLE RIEUL AE KIYEOK + {0xB7A3, 0xB79C}, //9277 #HANGUL SYLLABLE RIEUL AE NIEUN + {0xB7A4, 0xB7A0}, //9278 #HANGUL SYLLABLE RIEUL AE RIEUL + {0xB7A5, 0xB7A8}, //9279 #HANGUL SYLLABLE RIEUL AE MIEUM + {0xB7A6, 0xB7A9}, //9280 #HANGUL SYLLABLE RIEUL AE PIEUP + {0xB7A7, 0xB7AB}, //9281 #HANGUL SYLLABLE RIEUL AE SIOS + {0xB7A8, 0xB7AC}, //9282 #HANGUL SYLLABLE RIEUL AE SSANGSIOS + {0xB7A9, 0xB7AD}, //9283 #HANGUL SYLLABLE RIEUL AE IEUNG + {0xB7AA, 0xB7B4}, //9284 #HANGUL SYLLABLE RIEUL YA + {0xB7AB, 0xB7B5}, //9285 #HANGUL SYLLABLE RIEUL YA KIYEOK + {0xB7AC, 0xB7B8}, //9286 #HANGUL SYLLABLE RIEUL YA NIEUN + {0xB7AD, 0xB7C7}, //9287 #HANGUL SYLLABLE RIEUL YA SIOS + {0xB7AE, 0xB7C9}, //9288 #HANGUL SYLLABLE RIEUL YA IEUNG + {0xB7AF, 0xB7EC}, //9289 #HANGUL SYLLABLE RIEUL EO + {0xB7B0, 0xB7ED}, //9290 #HANGUL SYLLABLE RIEUL EO KIYEOK + {0xB7B1, 0xB7F0}, //9291 #HANGUL SYLLABLE RIEUL EO NIEUN + {0xB7B2, 0xB7F4}, //9292 #HANGUL SYLLABLE RIEUL EO RIEUL + {0xB7B3, 0xB7FC}, //9293 #HANGUL SYLLABLE RIEUL EO MIEUM + {0xB7B4, 0xB7FD}, //9294 #HANGUL SYLLABLE RIEUL EO PIEUP + {0xB7B5, 0xB7FF}, //9295 #HANGUL SYLLABLE RIEUL EO SIOS + {0xB7B6, 0xB800}, //9296 #HANGUL SYLLABLE RIEUL EO SSANGSIOS + {0xB7B7, 0xB801}, //9297 #HANGUL SYLLABLE RIEUL EO IEUNG + {0xB7B8, 0xB807}, //9298 #HANGUL SYLLABLE RIEUL EO HIEUH + {0xB7B9, 0xB808}, //9299 #HANGUL SYLLABLE RIEUL E + {0xB7BA, 0xB809}, //9300 #HANGUL SYLLABLE RIEUL E KIYEOK + {0xB7BB, 0xB80C}, //9301 #HANGUL SYLLABLE RIEUL E NIEUN + {0xB7BC, 0xB810}, //9302 #HANGUL SYLLABLE RIEUL E RIEUL + {0xB7BD, 0xB818}, //9303 #HANGUL SYLLABLE RIEUL E MIEUM + {0xB7BE, 0xB819}, //9304 #HANGUL SYLLABLE RIEUL E PIEUP + {0xB7BF, 0xB81B}, //9305 #HANGUL SYLLABLE RIEUL E SIOS + {0xB7C0, 0xB81D}, //9306 #HANGUL SYLLABLE RIEUL E IEUNG + {0xB7C1, 0xB824}, //9307 #HANGUL SYLLABLE RIEUL YEO + {0xB7C2, 0xB825}, //9308 #HANGUL SYLLABLE RIEUL YEO KIYEOK + {0xB7C3, 0xB828}, //9309 #HANGUL SYLLABLE RIEUL YEO NIEUN + {0xB7C4, 0xB82C}, //9310 #HANGUL SYLLABLE RIEUL YEO RIEUL + {0xB7C5, 0xB834}, //9311 #HANGUL SYLLABLE RIEUL YEO MIEUM + {0xB7C6, 0xB835}, //9312 #HANGUL SYLLABLE RIEUL YEO PIEUP + {0xB7C7, 0xB837}, //9313 #HANGUL SYLLABLE RIEUL YEO SIOS + {0xB7C8, 0xB838}, //9314 #HANGUL SYLLABLE RIEUL YEO SSANGSIOS + {0xB7C9, 0xB839}, //9315 #HANGUL SYLLABLE RIEUL YEO IEUNG + {0xB7CA, 0xB840}, //9316 #HANGUL SYLLABLE RIEUL YE + {0xB7CB, 0xB844}, //9317 #HANGUL SYLLABLE RIEUL YE NIEUN + {0xB7CC, 0xB851}, //9318 #HANGUL SYLLABLE RIEUL YE PIEUP + {0xB7CD, 0xB853}, //9319 #HANGUL SYLLABLE RIEUL YE SIOS + {0xB7CE, 0xB85C}, //9320 #HANGUL SYLLABLE RIEUL O + {0xB7CF, 0xB85D}, //9321 #HANGUL SYLLABLE RIEUL O KIYEOK + {0xB7D0, 0xB860}, //9322 #HANGUL SYLLABLE RIEUL O NIEUN + {0xB7D1, 0xB864}, //9323 #HANGUL SYLLABLE RIEUL O RIEUL + {0xB7D2, 0xB86C}, //9324 #HANGUL SYLLABLE RIEUL O MIEUM + {0xB7D3, 0xB86D}, //9325 #HANGUL SYLLABLE RIEUL O PIEUP + {0xB7D4, 0xB86F}, //9326 #HANGUL SYLLABLE RIEUL O SIOS + {0xB7D5, 0xB871}, //9327 #HANGUL SYLLABLE RIEUL O IEUNG + {0xB7D6, 0xB878}, //9328 #HANGUL SYLLABLE RIEUL WA + {0xB7D7, 0xB87C}, //9329 #HANGUL SYLLABLE RIEUL WA NIEUN + {0xB7D8, 0xB88D}, //9330 #HANGUL SYLLABLE RIEUL WA IEUNG + {0xB7D9, 0xB8A8}, //9331 #HANGUL SYLLABLE RIEUL WAE SSANGSIOS + {0xB7DA, 0xB8B0}, //9332 #HANGUL SYLLABLE RIEUL OE + {0xB7DB, 0xB8B4}, //9333 #HANGUL SYLLABLE RIEUL OE NIEUN + {0xB7DC, 0xB8B8}, //9334 #HANGUL SYLLABLE RIEUL OE RIEUL + {0xB7DD, 0xB8C0}, //9335 #HANGUL SYLLABLE RIEUL OE MIEUM + {0xB7DE, 0xB8C1}, //9336 #HANGUL SYLLABLE RIEUL OE PIEUP + {0xB7DF, 0xB8C3}, //9337 #HANGUL SYLLABLE RIEUL OE SIOS + {0xB7E0, 0xB8C5}, //9338 #HANGUL SYLLABLE RIEUL OE IEUNG + {0xB7E1, 0xB8CC}, //9339 #HANGUL SYLLABLE RIEUL YO + {0xB7E2, 0xB8D0}, //9340 #HANGUL SYLLABLE RIEUL YO NIEUN + {0xB7E3, 0xB8D4}, //9341 #HANGUL SYLLABLE RIEUL YO RIEUL + {0xB7E4, 0xB8DD}, //9342 #HANGUL SYLLABLE RIEUL YO PIEUP + {0xB7E5, 0xB8DF}, //9343 #HANGUL SYLLABLE RIEUL YO SIOS + {0xB7E6, 0xB8E1}, //9344 #HANGUL SYLLABLE RIEUL YO IEUNG + {0xB7E7, 0xB8E8}, //9345 #HANGUL SYLLABLE RIEUL U + {0xB7E8, 0xB8E9}, //9346 #HANGUL SYLLABLE RIEUL U KIYEOK + {0xB7E9, 0xB8EC}, //9347 #HANGUL SYLLABLE RIEUL U NIEUN + {0xB7EA, 0xB8F0}, //9348 #HANGUL SYLLABLE RIEUL U RIEUL + {0xB7EB, 0xB8F8}, //9349 #HANGUL SYLLABLE RIEUL U MIEUM + {0xB7EC, 0xB8F9}, //9350 #HANGUL SYLLABLE RIEUL U PIEUP + {0xB7ED, 0xB8FB}, //9351 #HANGUL SYLLABLE RIEUL U SIOS + {0xB7EE, 0xB8FD}, //9352 #HANGUL SYLLABLE RIEUL U IEUNG + {0xB7EF, 0xB904}, //9353 #HANGUL SYLLABLE RIEUL WEO + {0xB7F0, 0xB918}, //9354 #HANGUL SYLLABLE RIEUL WEO SSANGSIOS + {0xB7F1, 0xB920}, //9355 #HANGUL SYLLABLE RIEUL WE + {0xB7F2, 0xB93C}, //9356 #HANGUL SYLLABLE RIEUL WI + {0xB7F3, 0xB93D}, //9357 #HANGUL SYLLABLE RIEUL WI KIYEOK + {0xB7F4, 0xB940}, //9358 #HANGUL SYLLABLE RIEUL WI NIEUN + {0xB7F5, 0xB944}, //9359 #HANGUL SYLLABLE RIEUL WI RIEUL + {0xB7F6, 0xB94C}, //9360 #HANGUL SYLLABLE RIEUL WI MIEUM + {0xB7F7, 0xB94F}, //9361 #HANGUL SYLLABLE RIEUL WI SIOS + {0xB7F8, 0xB951}, //9362 #HANGUL SYLLABLE RIEUL WI IEUNG + {0xB7F9, 0xB958}, //9363 #HANGUL SYLLABLE RIEUL YU + {0xB7FA, 0xB959}, //9364 #HANGUL SYLLABLE RIEUL YU KIYEOK + {0xB7FB, 0xB95C}, //9365 #HANGUL SYLLABLE RIEUL YU NIEUN + {0xB7FC, 0xB960}, //9366 #HANGUL SYLLABLE RIEUL YU RIEUL + {0xB7FD, 0xB968}, //9367 #HANGUL SYLLABLE RIEUL YU MIEUM + {0xB7FE, 0xB969}, //9368 #HANGUL SYLLABLE RIEUL YU PIEUP + {0xB841, 0xD1D0}, //9369 #HANGUL SYLLABLE THIEUTH WA SSANGSIOS + {0xB842, 0xD1D1}, //9370 #HANGUL SYLLABLE THIEUTH WA IEUNG + {0xB843, 0xD1D2}, //9371 #HANGUL SYLLABLE THIEUTH WA CIEUC + {0xB844, 0xD1D3}, //9372 #HANGUL SYLLABLE THIEUTH WA CHIEUCH + {0xB845, 0xD1D4}, //9373 #HANGUL SYLLABLE THIEUTH WA KHIEUKH + {0xB846, 0xD1D5}, //9374 #HANGUL SYLLABLE THIEUTH WA THIEUTH + {0xB847, 0xD1D6}, //9375 #HANGUL SYLLABLE THIEUTH WA PHIEUPH + {0xB848, 0xD1D7}, //9376 #HANGUL SYLLABLE THIEUTH WA HIEUH + {0xB849, 0xD1D9}, //9377 #HANGUL SYLLABLE THIEUTH WAE KIYEOK + {0xB84A, 0xD1DA}, //9378 #HANGUL SYLLABLE THIEUTH WAE SSANGKIYEOK + {0xB84B, 0xD1DB}, //9379 #HANGUL SYLLABLE THIEUTH WAE KIYEOKSIOS + {0xB84C, 0xD1DC}, //9380 #HANGUL SYLLABLE THIEUTH WAE NIEUN + {0xB84D, 0xD1DD}, //9381 #HANGUL SYLLABLE THIEUTH WAE NIEUNCIEUC + {0xB84E, 0xD1DE}, //9382 #HANGUL SYLLABLE THIEUTH WAE NIEUNHIEUH + {0xB84F, 0xD1DF}, //9383 #HANGUL SYLLABLE THIEUTH WAE TIKEUT + {0xB850, 0xD1E0}, //9384 #HANGUL SYLLABLE THIEUTH WAE RIEUL + {0xB851, 0xD1E1}, //9385 #HANGUL SYLLABLE THIEUTH WAE RIEULKIYEOK + {0xB852, 0xD1E2}, //9386 #HANGUL SYLLABLE THIEUTH WAE RIEULMIEUM + {0xB853, 0xD1E3}, //9387 #HANGUL SYLLABLE THIEUTH WAE RIEULPIEUP + {0xB854, 0xD1E4}, //9388 #HANGUL SYLLABLE THIEUTH WAE RIEULSIOS + {0xB855, 0xD1E5}, //9389 #HANGUL SYLLABLE THIEUTH WAE RIEULTHIEUTH + {0xB856, 0xD1E6}, //9390 #HANGUL SYLLABLE THIEUTH WAE RIEULPHIEUPH + {0xB857, 0xD1E7}, //9391 #HANGUL SYLLABLE THIEUTH WAE RIEULHIEUH + {0xB858, 0xD1E8}, //9392 #HANGUL SYLLABLE THIEUTH WAE MIEUM + {0xB859, 0xD1E9}, //9393 #HANGUL SYLLABLE THIEUTH WAE PIEUP + {0xB85A, 0xD1EA}, //9394 #HANGUL SYLLABLE THIEUTH WAE PIEUPSIOS + {0xB861, 0xD1EB}, //9395 #HANGUL SYLLABLE THIEUTH WAE SIOS + {0xB862, 0xD1EC}, //9396 #HANGUL SYLLABLE THIEUTH WAE SSANGSIOS + {0xB863, 0xD1ED}, //9397 #HANGUL SYLLABLE THIEUTH WAE IEUNG + {0xB864, 0xD1EE}, //9398 #HANGUL SYLLABLE THIEUTH WAE CIEUC + {0xB865, 0xD1EF}, //9399 #HANGUL SYLLABLE THIEUTH WAE CHIEUCH + {0xB866, 0xD1F0}, //9400 #HANGUL SYLLABLE THIEUTH WAE KHIEUKH + {0xB867, 0xD1F1}, //9401 #HANGUL SYLLABLE THIEUTH WAE THIEUTH + {0xB868, 0xD1F2}, //9402 #HANGUL SYLLABLE THIEUTH WAE PHIEUPH + {0xB869, 0xD1F3}, //9403 #HANGUL SYLLABLE THIEUTH WAE HIEUH + {0xB86A, 0xD1F5}, //9404 #HANGUL SYLLABLE THIEUTH OE KIYEOK + {0xB86B, 0xD1F6}, //9405 #HANGUL SYLLABLE THIEUTH OE SSANGKIYEOK + {0xB86C, 0xD1F7}, //9406 #HANGUL SYLLABLE THIEUTH OE KIYEOKSIOS + {0xB86D, 0xD1F9}, //9407 #HANGUL SYLLABLE THIEUTH OE NIEUNCIEUC + {0xB86E, 0xD1FA}, //9408 #HANGUL SYLLABLE THIEUTH OE NIEUNHIEUH + {0xB86F, 0xD1FB}, //9409 #HANGUL SYLLABLE THIEUTH OE TIKEUT + {0xB870, 0xD1FC}, //9410 #HANGUL SYLLABLE THIEUTH OE RIEUL + {0xB871, 0xD1FD}, //9411 #HANGUL SYLLABLE THIEUTH OE RIEULKIYEOK + {0xB872, 0xD1FE}, //9412 #HANGUL SYLLABLE THIEUTH OE RIEULMIEUM + {0xB873, 0xD1FF}, //9413 #HANGUL SYLLABLE THIEUTH OE RIEULPIEUP + {0xB874, 0xD200}, //9414 #HANGUL SYLLABLE THIEUTH OE RIEULSIOS + {0xB875, 0xD201}, //9415 #HANGUL SYLLABLE THIEUTH OE RIEULTHIEUTH + {0xB876, 0xD202}, //9416 #HANGUL SYLLABLE THIEUTH OE RIEULPHIEUPH + {0xB877, 0xD203}, //9417 #HANGUL SYLLABLE THIEUTH OE RIEULHIEUH + {0xB878, 0xD204}, //9418 #HANGUL SYLLABLE THIEUTH OE MIEUM + {0xB879, 0xD205}, //9419 #HANGUL SYLLABLE THIEUTH OE PIEUP + {0xB87A, 0xD206}, //9420 #HANGUL SYLLABLE THIEUTH OE PIEUPSIOS + {0xB881, 0xD208}, //9421 #HANGUL SYLLABLE THIEUTH OE SSANGSIOS + {0xB882, 0xD20A}, //9422 #HANGUL SYLLABLE THIEUTH OE CIEUC + {0xB883, 0xD20B}, //9423 #HANGUL SYLLABLE THIEUTH OE CHIEUCH + {0xB884, 0xD20C}, //9424 #HANGUL SYLLABLE THIEUTH OE KHIEUKH + {0xB885, 0xD20D}, //9425 #HANGUL SYLLABLE THIEUTH OE THIEUTH + {0xB886, 0xD20E}, //9426 #HANGUL SYLLABLE THIEUTH OE PHIEUPH + {0xB887, 0xD20F}, //9427 #HANGUL SYLLABLE THIEUTH OE HIEUH + {0xB888, 0xD211}, //9428 #HANGUL SYLLABLE THIEUTH YO KIYEOK + {0xB889, 0xD212}, //9429 #HANGUL SYLLABLE THIEUTH YO SSANGKIYEOK + {0xB88A, 0xD213}, //9430 #HANGUL SYLLABLE THIEUTH YO KIYEOKSIOS + {0xB88B, 0xD214}, //9431 #HANGUL SYLLABLE THIEUTH YO NIEUN + {0xB88C, 0xD215}, //9432 #HANGUL SYLLABLE THIEUTH YO NIEUNCIEUC + {0xB88D, 0xD216}, //9433 #HANGUL SYLLABLE THIEUTH YO NIEUNHIEUH + {0xB88E, 0xD217}, //9434 #HANGUL SYLLABLE THIEUTH YO TIKEUT + {0xB88F, 0xD218}, //9435 #HANGUL SYLLABLE THIEUTH YO RIEUL + {0xB890, 0xD219}, //9436 #HANGUL SYLLABLE THIEUTH YO RIEULKIYEOK + {0xB891, 0xD21A}, //9437 #HANGUL SYLLABLE THIEUTH YO RIEULMIEUM + {0xB892, 0xD21B}, //9438 #HANGUL SYLLABLE THIEUTH YO RIEULPIEUP + {0xB893, 0xD21C}, //9439 #HANGUL SYLLABLE THIEUTH YO RIEULSIOS + {0xB894, 0xD21D}, //9440 #HANGUL SYLLABLE THIEUTH YO RIEULTHIEUTH + {0xB895, 0xD21E}, //9441 #HANGUL SYLLABLE THIEUTH YO RIEULPHIEUPH + {0xB896, 0xD21F}, //9442 #HANGUL SYLLABLE THIEUTH YO RIEULHIEUH + {0xB897, 0xD220}, //9443 #HANGUL SYLLABLE THIEUTH YO MIEUM + {0xB898, 0xD221}, //9444 #HANGUL SYLLABLE THIEUTH YO PIEUP + {0xB899, 0xD222}, //9445 #HANGUL SYLLABLE THIEUTH YO PIEUPSIOS + {0xB89A, 0xD223}, //9446 #HANGUL SYLLABLE THIEUTH YO SIOS + {0xB89B, 0xD224}, //9447 #HANGUL SYLLABLE THIEUTH YO SSANGSIOS + {0xB89C, 0xD225}, //9448 #HANGUL SYLLABLE THIEUTH YO IEUNG + {0xB89D, 0xD226}, //9449 #HANGUL SYLLABLE THIEUTH YO CIEUC + {0xB89E, 0xD227}, //9450 #HANGUL SYLLABLE THIEUTH YO CHIEUCH + {0xB89F, 0xD228}, //9451 #HANGUL SYLLABLE THIEUTH YO KHIEUKH + {0xB8A0, 0xD229}, //9452 #HANGUL SYLLABLE THIEUTH YO THIEUTH + {0xB8A1, 0xB96B}, //9453 #HANGUL SYLLABLE RIEUL YU SIOS + {0xB8A2, 0xB96D}, //9454 #HANGUL SYLLABLE RIEUL YU IEUNG + {0xB8A3, 0xB974}, //9455 #HANGUL SYLLABLE RIEUL EU + {0xB8A4, 0xB975}, //9456 #HANGUL SYLLABLE RIEUL EU KIYEOK + {0xB8A5, 0xB978}, //9457 #HANGUL SYLLABLE RIEUL EU NIEUN + {0xB8A6, 0xB97C}, //9458 #HANGUL SYLLABLE RIEUL EU RIEUL + {0xB8A7, 0xB984}, //9459 #HANGUL SYLLABLE RIEUL EU MIEUM + {0xB8A8, 0xB985}, //9460 #HANGUL SYLLABLE RIEUL EU PIEUP + {0xB8A9, 0xB987}, //9461 #HANGUL SYLLABLE RIEUL EU SIOS + {0xB8AA, 0xB989}, //9462 #HANGUL SYLLABLE RIEUL EU IEUNG + {0xB8AB, 0xB98A}, //9463 #HANGUL SYLLABLE RIEUL EU CIEUC + {0xB8AC, 0xB98D}, //9464 #HANGUL SYLLABLE RIEUL EU THIEUTH + {0xB8AD, 0xB98E}, //9465 #HANGUL SYLLABLE RIEUL EU PHIEUPH + {0xB8AE, 0xB9AC}, //9466 #HANGUL SYLLABLE RIEUL I + {0xB8AF, 0xB9AD}, //9467 #HANGUL SYLLABLE RIEUL I KIYEOK + {0xB8B0, 0xB9B0}, //9468 #HANGUL SYLLABLE RIEUL I NIEUN + {0xB8B1, 0xB9B4}, //9469 #HANGUL SYLLABLE RIEUL I RIEUL + {0xB8B2, 0xB9BC}, //9470 #HANGUL SYLLABLE RIEUL I MIEUM + {0xB8B3, 0xB9BD}, //9471 #HANGUL SYLLABLE RIEUL I PIEUP + {0xB8B4, 0xB9BF}, //9472 #HANGUL SYLLABLE RIEUL I SIOS + {0xB8B5, 0xB9C1}, //9473 #HANGUL SYLLABLE RIEUL I IEUNG + {0xB8B6, 0xB9C8}, //9474 #HANGUL SYLLABLE MIEUM A + {0xB8B7, 0xB9C9}, //9475 #HANGUL SYLLABLE MIEUM A KIYEOK + {0xB8B8, 0xB9CC}, //9476 #HANGUL SYLLABLE MIEUM A NIEUN + {0xB8B9, 0xB9CE}, //9477 #HANGUL SYLLABLE MIEUM A NIEUNHIEUH + {0xB8BA, 0xB9CF}, //9478 #HANGUL SYLLABLE MIEUM A TIKEUT + {0xB8BB, 0xB9D0}, //9479 #HANGUL SYLLABLE MIEUM A RIEUL + {0xB8BC, 0xB9D1}, //9480 #HANGUL SYLLABLE MIEUM A RIEULKIYEOK + {0xB8BD, 0xB9D2}, //9481 #HANGUL SYLLABLE MIEUM A RIEULMIEUM + {0xB8BE, 0xB9D8}, //9482 #HANGUL SYLLABLE MIEUM A MIEUM + {0xB8BF, 0xB9D9}, //9483 #HANGUL SYLLABLE MIEUM A PIEUP + {0xB8C0, 0xB9DB}, //9484 #HANGUL SYLLABLE MIEUM A SIOS + {0xB8C1, 0xB9DD}, //9485 #HANGUL SYLLABLE MIEUM A IEUNG + {0xB8C2, 0xB9DE}, //9486 #HANGUL SYLLABLE MIEUM A CIEUC + {0xB8C3, 0xB9E1}, //9487 #HANGUL SYLLABLE MIEUM A THIEUTH + {0xB8C4, 0xB9E3}, //9488 #HANGUL SYLLABLE MIEUM A HIEUH + {0xB8C5, 0xB9E4}, //9489 #HANGUL SYLLABLE MIEUM AE + {0xB8C6, 0xB9E5}, //9490 #HANGUL SYLLABLE MIEUM AE KIYEOK + {0xB8C7, 0xB9E8}, //9491 #HANGUL SYLLABLE MIEUM AE NIEUN + {0xB8C8, 0xB9EC}, //9492 #HANGUL SYLLABLE MIEUM AE RIEUL + {0xB8C9, 0xB9F4}, //9493 #HANGUL SYLLABLE MIEUM AE MIEUM + {0xB8CA, 0xB9F5}, //9494 #HANGUL SYLLABLE MIEUM AE PIEUP + {0xB8CB, 0xB9F7}, //9495 #HANGUL SYLLABLE MIEUM AE SIOS + {0xB8CC, 0xB9F8}, //9496 #HANGUL SYLLABLE MIEUM AE SSANGSIOS + {0xB8CD, 0xB9F9}, //9497 #HANGUL SYLLABLE MIEUM AE IEUNG + {0xB8CE, 0xB9FA}, //9498 #HANGUL SYLLABLE MIEUM AE CIEUC + {0xB8CF, 0xBA00}, //9499 #HANGUL SYLLABLE MIEUM YA + {0xB8D0, 0xBA01}, //9500 #HANGUL SYLLABLE MIEUM YA KIYEOK + {0xB8D1, 0xBA08}, //9501 #HANGUL SYLLABLE MIEUM YA RIEUL + {0xB8D2, 0xBA15}, //9502 #HANGUL SYLLABLE MIEUM YA IEUNG + {0xB8D3, 0xBA38}, //9503 #HANGUL SYLLABLE MIEUM EO + {0xB8D4, 0xBA39}, //9504 #HANGUL SYLLABLE MIEUM EO KIYEOK + {0xB8D5, 0xBA3C}, //9505 #HANGUL SYLLABLE MIEUM EO NIEUN + {0xB8D6, 0xBA40}, //9506 #HANGUL SYLLABLE MIEUM EO RIEUL + {0xB8D7, 0xBA42}, //9507 #HANGUL SYLLABLE MIEUM EO RIEULMIEUM + {0xB8D8, 0xBA48}, //9508 #HANGUL SYLLABLE MIEUM EO MIEUM + {0xB8D9, 0xBA49}, //9509 #HANGUL SYLLABLE MIEUM EO PIEUP + {0xB8DA, 0xBA4B}, //9510 #HANGUL SYLLABLE MIEUM EO SIOS + {0xB8DB, 0xBA4D}, //9511 #HANGUL SYLLABLE MIEUM EO IEUNG + {0xB8DC, 0xBA4E}, //9512 #HANGUL SYLLABLE MIEUM EO CIEUC + {0xB8DD, 0xBA53}, //9513 #HANGUL SYLLABLE MIEUM EO HIEUH + {0xB8DE, 0xBA54}, //9514 #HANGUL SYLLABLE MIEUM E + {0xB8DF, 0xBA55}, //9515 #HANGUL SYLLABLE MIEUM E KIYEOK + {0xB8E0, 0xBA58}, //9516 #HANGUL SYLLABLE MIEUM E NIEUN + {0xB8E1, 0xBA5C}, //9517 #HANGUL SYLLABLE MIEUM E RIEUL + {0xB8E2, 0xBA64}, //9518 #HANGUL SYLLABLE MIEUM E MIEUM + {0xB8E3, 0xBA65}, //9519 #HANGUL SYLLABLE MIEUM E PIEUP + {0xB8E4, 0xBA67}, //9520 #HANGUL SYLLABLE MIEUM E SIOS + {0xB8E5, 0xBA68}, //9521 #HANGUL SYLLABLE MIEUM E SSANGSIOS + {0xB8E6, 0xBA69}, //9522 #HANGUL SYLLABLE MIEUM E IEUNG + {0xB8E7, 0xBA70}, //9523 #HANGUL SYLLABLE MIEUM YEO + {0xB8E8, 0xBA71}, //9524 #HANGUL SYLLABLE MIEUM YEO KIYEOK + {0xB8E9, 0xBA74}, //9525 #HANGUL SYLLABLE MIEUM YEO NIEUN + {0xB8EA, 0xBA78}, //9526 #HANGUL SYLLABLE MIEUM YEO RIEUL + {0xB8EB, 0xBA83}, //9527 #HANGUL SYLLABLE MIEUM YEO SIOS + {0xB8EC, 0xBA84}, //9528 #HANGUL SYLLABLE MIEUM YEO SSANGSIOS + {0xB8ED, 0xBA85}, //9529 #HANGUL SYLLABLE MIEUM YEO IEUNG + {0xB8EE, 0xBA87}, //9530 #HANGUL SYLLABLE MIEUM YEO CHIEUCH + {0xB8EF, 0xBA8C}, //9531 #HANGUL SYLLABLE MIEUM YE + {0xB8F0, 0xBAA8}, //9532 #HANGUL SYLLABLE MIEUM O + {0xB8F1, 0xBAA9}, //9533 #HANGUL SYLLABLE MIEUM O KIYEOK + {0xB8F2, 0xBAAB}, //9534 #HANGUL SYLLABLE MIEUM O KIYEOKSIOS + {0xB8F3, 0xBAAC}, //9535 #HANGUL SYLLABLE MIEUM O NIEUN + {0xB8F4, 0xBAB0}, //9536 #HANGUL SYLLABLE MIEUM O RIEUL + {0xB8F5, 0xBAB2}, //9537 #HANGUL SYLLABLE MIEUM O RIEULMIEUM + {0xB8F6, 0xBAB8}, //9538 #HANGUL SYLLABLE MIEUM O MIEUM + {0xB8F7, 0xBAB9}, //9539 #HANGUL SYLLABLE MIEUM O PIEUP + {0xB8F8, 0xBABB}, //9540 #HANGUL SYLLABLE MIEUM O SIOS + {0xB8F9, 0xBABD}, //9541 #HANGUL SYLLABLE MIEUM O IEUNG + {0xB8FA, 0xBAC4}, //9542 #HANGUL SYLLABLE MIEUM WA + {0xB8FB, 0xBAC8}, //9543 #HANGUL SYLLABLE MIEUM WA NIEUN + {0xB8FC, 0xBAD8}, //9544 #HANGUL SYLLABLE MIEUM WA SSANGSIOS + {0xB8FD, 0xBAD9}, //9545 #HANGUL SYLLABLE MIEUM WA IEUNG + {0xB8FE, 0xBAFC}, //9546 #HANGUL SYLLABLE MIEUM OE + {0xB941, 0xD22A}, //9547 #HANGUL SYLLABLE THIEUTH YO PHIEUPH + {0xB942, 0xD22B}, //9548 #HANGUL SYLLABLE THIEUTH YO HIEUH + {0xB943, 0xD22E}, //9549 #HANGUL SYLLABLE THIEUTH U SSANGKIYEOK + {0xB944, 0xD22F}, //9550 #HANGUL SYLLABLE THIEUTH U KIYEOKSIOS + {0xB945, 0xD231}, //9551 #HANGUL SYLLABLE THIEUTH U NIEUNCIEUC + {0xB946, 0xD232}, //9552 #HANGUL SYLLABLE THIEUTH U NIEUNHIEUH + {0xB947, 0xD233}, //9553 #HANGUL SYLLABLE THIEUTH U TIKEUT + {0xB948, 0xD235}, //9554 #HANGUL SYLLABLE THIEUTH U RIEULKIYEOK + {0xB949, 0xD236}, //9555 #HANGUL SYLLABLE THIEUTH U RIEULMIEUM + {0xB94A, 0xD237}, //9556 #HANGUL SYLLABLE THIEUTH U RIEULPIEUP + {0xB94B, 0xD238}, //9557 #HANGUL SYLLABLE THIEUTH U RIEULSIOS + {0xB94C, 0xD239}, //9558 #HANGUL SYLLABLE THIEUTH U RIEULTHIEUTH + {0xB94D, 0xD23A}, //9559 #HANGUL SYLLABLE THIEUTH U RIEULPHIEUPH + {0xB94E, 0xD23B}, //9560 #HANGUL SYLLABLE THIEUTH U RIEULHIEUH + {0xB94F, 0xD23E}, //9561 #HANGUL SYLLABLE THIEUTH U PIEUPSIOS + {0xB950, 0xD240}, //9562 #HANGUL SYLLABLE THIEUTH U SSANGSIOS + {0xB951, 0xD242}, //9563 #HANGUL SYLLABLE THIEUTH U CIEUC + {0xB952, 0xD243}, //9564 #HANGUL SYLLABLE THIEUTH U CHIEUCH + {0xB953, 0xD244}, //9565 #HANGUL SYLLABLE THIEUTH U KHIEUKH + {0xB954, 0xD245}, //9566 #HANGUL SYLLABLE THIEUTH U THIEUTH + {0xB955, 0xD246}, //9567 #HANGUL SYLLABLE THIEUTH U PHIEUPH + {0xB956, 0xD247}, //9568 #HANGUL SYLLABLE THIEUTH U HIEUH + {0xB957, 0xD249}, //9569 #HANGUL SYLLABLE THIEUTH WEO KIYEOK + {0xB958, 0xD24A}, //9570 #HANGUL SYLLABLE THIEUTH WEO SSANGKIYEOK + {0xB959, 0xD24B}, //9571 #HANGUL SYLLABLE THIEUTH WEO KIYEOKSIOS + {0xB95A, 0xD24C}, //9572 #HANGUL SYLLABLE THIEUTH WEO NIEUN + {0xB961, 0xD24D}, //9573 #HANGUL SYLLABLE THIEUTH WEO NIEUNCIEUC + {0xB962, 0xD24E}, //9574 #HANGUL SYLLABLE THIEUTH WEO NIEUNHIEUH + {0xB963, 0xD24F}, //9575 #HANGUL SYLLABLE THIEUTH WEO TIKEUT + {0xB964, 0xD250}, //9576 #HANGUL SYLLABLE THIEUTH WEO RIEUL + {0xB965, 0xD251}, //9577 #HANGUL SYLLABLE THIEUTH WEO RIEULKIYEOK + {0xB966, 0xD252}, //9578 #HANGUL SYLLABLE THIEUTH WEO RIEULMIEUM + {0xB967, 0xD253}, //9579 #HANGUL SYLLABLE THIEUTH WEO RIEULPIEUP + {0xB968, 0xD254}, //9580 #HANGUL SYLLABLE THIEUTH WEO RIEULSIOS + {0xB969, 0xD255}, //9581 #HANGUL SYLLABLE THIEUTH WEO RIEULTHIEUTH + {0xB96A, 0xD256}, //9582 #HANGUL SYLLABLE THIEUTH WEO RIEULPHIEUPH + {0xB96B, 0xD257}, //9583 #HANGUL SYLLABLE THIEUTH WEO RIEULHIEUH + {0xB96C, 0xD258}, //9584 #HANGUL SYLLABLE THIEUTH WEO MIEUM + {0xB96D, 0xD259}, //9585 #HANGUL SYLLABLE THIEUTH WEO PIEUP + {0xB96E, 0xD25A}, //9586 #HANGUL SYLLABLE THIEUTH WEO PIEUPSIOS + {0xB96F, 0xD25B}, //9587 #HANGUL SYLLABLE THIEUTH WEO SIOS + {0xB970, 0xD25D}, //9588 #HANGUL SYLLABLE THIEUTH WEO IEUNG + {0xB971, 0xD25E}, //9589 #HANGUL SYLLABLE THIEUTH WEO CIEUC + {0xB972, 0xD25F}, //9590 #HANGUL SYLLABLE THIEUTH WEO CHIEUCH + {0xB973, 0xD260}, //9591 #HANGUL SYLLABLE THIEUTH WEO KHIEUKH + {0xB974, 0xD261}, //9592 #HANGUL SYLLABLE THIEUTH WEO THIEUTH + {0xB975, 0xD262}, //9593 #HANGUL SYLLABLE THIEUTH WEO PHIEUPH + {0xB976, 0xD263}, //9594 #HANGUL SYLLABLE THIEUTH WEO HIEUH + {0xB977, 0xD265}, //9595 #HANGUL SYLLABLE THIEUTH WE KIYEOK + {0xB978, 0xD266}, //9596 #HANGUL SYLLABLE THIEUTH WE SSANGKIYEOK + {0xB979, 0xD267}, //9597 #HANGUL SYLLABLE THIEUTH WE KIYEOKSIOS + {0xB97A, 0xD268}, //9598 #HANGUL SYLLABLE THIEUTH WE NIEUN + {0xB981, 0xD269}, //9599 #HANGUL SYLLABLE THIEUTH WE NIEUNCIEUC + {0xB982, 0xD26A}, //9600 #HANGUL SYLLABLE THIEUTH WE NIEUNHIEUH + {0xB983, 0xD26B}, //9601 #HANGUL SYLLABLE THIEUTH WE TIKEUT + {0xB984, 0xD26C}, //9602 #HANGUL SYLLABLE THIEUTH WE RIEUL + {0xB985, 0xD26D}, //9603 #HANGUL SYLLABLE THIEUTH WE RIEULKIYEOK + {0xB986, 0xD26E}, //9604 #HANGUL SYLLABLE THIEUTH WE RIEULMIEUM + {0xB987, 0xD26F}, //9605 #HANGUL SYLLABLE THIEUTH WE RIEULPIEUP + {0xB988, 0xD270}, //9606 #HANGUL SYLLABLE THIEUTH WE RIEULSIOS + {0xB989, 0xD271}, //9607 #HANGUL SYLLABLE THIEUTH WE RIEULTHIEUTH + {0xB98A, 0xD272}, //9608 #HANGUL SYLLABLE THIEUTH WE RIEULPHIEUPH + {0xB98B, 0xD273}, //9609 #HANGUL SYLLABLE THIEUTH WE RIEULHIEUH + {0xB98C, 0xD274}, //9610 #HANGUL SYLLABLE THIEUTH WE MIEUM + {0xB98D, 0xD275}, //9611 #HANGUL SYLLABLE THIEUTH WE PIEUP + {0xB98E, 0xD276}, //9612 #HANGUL SYLLABLE THIEUTH WE PIEUPSIOS + {0xB98F, 0xD277}, //9613 #HANGUL SYLLABLE THIEUTH WE SIOS + {0xB990, 0xD278}, //9614 #HANGUL SYLLABLE THIEUTH WE SSANGSIOS + {0xB991, 0xD279}, //9615 #HANGUL SYLLABLE THIEUTH WE IEUNG + {0xB992, 0xD27A}, //9616 #HANGUL SYLLABLE THIEUTH WE CIEUC + {0xB993, 0xD27B}, //9617 #HANGUL SYLLABLE THIEUTH WE CHIEUCH + {0xB994, 0xD27C}, //9618 #HANGUL SYLLABLE THIEUTH WE KHIEUKH + {0xB995, 0xD27D}, //9619 #HANGUL SYLLABLE THIEUTH WE THIEUTH + {0xB996, 0xD27E}, //9620 #HANGUL SYLLABLE THIEUTH WE PHIEUPH + {0xB997, 0xD27F}, //9621 #HANGUL SYLLABLE THIEUTH WE HIEUH + {0xB998, 0xD282}, //9622 #HANGUL SYLLABLE THIEUTH WI SSANGKIYEOK + {0xB999, 0xD283}, //9623 #HANGUL SYLLABLE THIEUTH WI KIYEOKSIOS + {0xB99A, 0xD285}, //9624 #HANGUL SYLLABLE THIEUTH WI NIEUNCIEUC + {0xB99B, 0xD286}, //9625 #HANGUL SYLLABLE THIEUTH WI NIEUNHIEUH + {0xB99C, 0xD287}, //9626 #HANGUL SYLLABLE THIEUTH WI TIKEUT + {0xB99D, 0xD289}, //9627 #HANGUL SYLLABLE THIEUTH WI RIEULKIYEOK + {0xB99E, 0xD28A}, //9628 #HANGUL SYLLABLE THIEUTH WI RIEULMIEUM + {0xB99F, 0xD28B}, //9629 #HANGUL SYLLABLE THIEUTH WI RIEULPIEUP + {0xB9A0, 0xD28C}, //9630 #HANGUL SYLLABLE THIEUTH WI RIEULSIOS + {0xB9A1, 0xBB00}, //9631 #HANGUL SYLLABLE MIEUM OE NIEUN + {0xB9A2, 0xBB04}, //9632 #HANGUL SYLLABLE MIEUM OE RIEUL + {0xB9A3, 0xBB0D}, //9633 #HANGUL SYLLABLE MIEUM OE PIEUP + {0xB9A4, 0xBB0F}, //9634 #HANGUL SYLLABLE MIEUM OE SIOS + {0xB9A5, 0xBB11}, //9635 #HANGUL SYLLABLE MIEUM OE IEUNG + {0xB9A6, 0xBB18}, //9636 #HANGUL SYLLABLE MIEUM YO + {0xB9A7, 0xBB1C}, //9637 #HANGUL SYLLABLE MIEUM YO NIEUN + {0xB9A8, 0xBB20}, //9638 #HANGUL SYLLABLE MIEUM YO RIEUL + {0xB9A9, 0xBB29}, //9639 #HANGUL SYLLABLE MIEUM YO PIEUP + {0xB9AA, 0xBB2B}, //9640 #HANGUL SYLLABLE MIEUM YO SIOS + {0xB9AB, 0xBB34}, //9641 #HANGUL SYLLABLE MIEUM U + {0xB9AC, 0xBB35}, //9642 #HANGUL SYLLABLE MIEUM U KIYEOK + {0xB9AD, 0xBB36}, //9643 #HANGUL SYLLABLE MIEUM U SSANGKIYEOK + {0xB9AE, 0xBB38}, //9644 #HANGUL SYLLABLE MIEUM U NIEUN + {0xB9AF, 0xBB3B}, //9645 #HANGUL SYLLABLE MIEUM U TIKEUT + {0xB9B0, 0xBB3C}, //9646 #HANGUL SYLLABLE MIEUM U RIEUL + {0xB9B1, 0xBB3D}, //9647 #HANGUL SYLLABLE MIEUM U RIEULKIYEOK + {0xB9B2, 0xBB3E}, //9648 #HANGUL SYLLABLE MIEUM U RIEULMIEUM + {0xB9B3, 0xBB44}, //9649 #HANGUL SYLLABLE MIEUM U MIEUM + {0xB9B4, 0xBB45}, //9650 #HANGUL SYLLABLE MIEUM U PIEUP + {0xB9B5, 0xBB47}, //9651 #HANGUL SYLLABLE MIEUM U SIOS + {0xB9B6, 0xBB49}, //9652 #HANGUL SYLLABLE MIEUM U IEUNG + {0xB9B7, 0xBB4D}, //9653 #HANGUL SYLLABLE MIEUM U THIEUTH + {0xB9B8, 0xBB4F}, //9654 #HANGUL SYLLABLE MIEUM U HIEUH + {0xB9B9, 0xBB50}, //9655 #HANGUL SYLLABLE MIEUM WEO + {0xB9BA, 0xBB54}, //9656 #HANGUL SYLLABLE MIEUM WEO NIEUN + {0xB9BB, 0xBB58}, //9657 #HANGUL SYLLABLE MIEUM WEO RIEUL + {0xB9BC, 0xBB61}, //9658 #HANGUL SYLLABLE MIEUM WEO PIEUP + {0xB9BD, 0xBB63}, //9659 #HANGUL SYLLABLE MIEUM WEO SIOS + {0xB9BE, 0xBB6C}, //9660 #HANGUL SYLLABLE MIEUM WE + {0xB9BF, 0xBB88}, //9661 #HANGUL SYLLABLE MIEUM WI + {0xB9C0, 0xBB8C}, //9662 #HANGUL SYLLABLE MIEUM WI NIEUN + {0xB9C1, 0xBB90}, //9663 #HANGUL SYLLABLE MIEUM WI RIEUL + {0xB9C2, 0xBBA4}, //9664 #HANGUL SYLLABLE MIEUM YU + {0xB9C3, 0xBBA8}, //9665 #HANGUL SYLLABLE MIEUM YU NIEUN + {0xB9C4, 0xBBAC}, //9666 #HANGUL SYLLABLE MIEUM YU RIEUL + {0xB9C5, 0xBBB4}, //9667 #HANGUL SYLLABLE MIEUM YU MIEUM + {0xB9C6, 0xBBB7}, //9668 #HANGUL SYLLABLE MIEUM YU SIOS + {0xB9C7, 0xBBC0}, //9669 #HANGUL SYLLABLE MIEUM EU + {0xB9C8, 0xBBC4}, //9670 #HANGUL SYLLABLE MIEUM EU NIEUN + {0xB9C9, 0xBBC8}, //9671 #HANGUL SYLLABLE MIEUM EU RIEUL + {0xB9CA, 0xBBD0}, //9672 #HANGUL SYLLABLE MIEUM EU MIEUM + {0xB9CB, 0xBBD3}, //9673 #HANGUL SYLLABLE MIEUM EU SIOS + {0xB9CC, 0xBBF8}, //9674 #HANGUL SYLLABLE MIEUM I + {0xB9CD, 0xBBF9}, //9675 #HANGUL SYLLABLE MIEUM I KIYEOK + {0xB9CE, 0xBBFC}, //9676 #HANGUL SYLLABLE MIEUM I NIEUN + {0xB9CF, 0xBBFF}, //9677 #HANGUL SYLLABLE MIEUM I TIKEUT + {0xB9D0, 0xBC00}, //9678 #HANGUL SYLLABLE MIEUM I RIEUL + {0xB9D1, 0xBC02}, //9679 #HANGUL SYLLABLE MIEUM I RIEULMIEUM + {0xB9D2, 0xBC08}, //9680 #HANGUL SYLLABLE MIEUM I MIEUM + {0xB9D3, 0xBC09}, //9681 #HANGUL SYLLABLE MIEUM I PIEUP + {0xB9D4, 0xBC0B}, //9682 #HANGUL SYLLABLE MIEUM I SIOS + {0xB9D5, 0xBC0C}, //9683 #HANGUL SYLLABLE MIEUM I SSANGSIOS + {0xB9D6, 0xBC0D}, //9684 #HANGUL SYLLABLE MIEUM I IEUNG + {0xB9D7, 0xBC0F}, //9685 #HANGUL SYLLABLE MIEUM I CHIEUCH + {0xB9D8, 0xBC11}, //9686 #HANGUL SYLLABLE MIEUM I THIEUTH + {0xB9D9, 0xBC14}, //9687 #HANGUL SYLLABLE PIEUP A + {0xB9DA, 0xBC15}, //9688 #HANGUL SYLLABLE PIEUP A KIYEOK + {0xB9DB, 0xBC16}, //9689 #HANGUL SYLLABLE PIEUP A SSANGKIYEOK + {0xB9DC, 0xBC17}, //9690 #HANGUL SYLLABLE PIEUP A KIYEOKSIOS + {0xB9DD, 0xBC18}, //9691 #HANGUL SYLLABLE PIEUP A NIEUN + {0xB9DE, 0xBC1B}, //9692 #HANGUL SYLLABLE PIEUP A TIKEUT + {0xB9DF, 0xBC1C}, //9693 #HANGUL SYLLABLE PIEUP A RIEUL + {0xB9E0, 0xBC1D}, //9694 #HANGUL SYLLABLE PIEUP A RIEULKIYEOK + {0xB9E1, 0xBC1E}, //9695 #HANGUL SYLLABLE PIEUP A RIEULMIEUM + {0xB9E2, 0xBC1F}, //9696 #HANGUL SYLLABLE PIEUP A RIEULPIEUP + {0xB9E3, 0xBC24}, //9697 #HANGUL SYLLABLE PIEUP A MIEUM + {0xB9E4, 0xBC25}, //9698 #HANGUL SYLLABLE PIEUP A PIEUP + {0xB9E5, 0xBC27}, //9699 #HANGUL SYLLABLE PIEUP A SIOS + {0xB9E6, 0xBC29}, //9700 #HANGUL SYLLABLE PIEUP A IEUNG + {0xB9E7, 0xBC2D}, //9701 #HANGUL SYLLABLE PIEUP A THIEUTH + {0xB9E8, 0xBC30}, //9702 #HANGUL SYLLABLE PIEUP AE + {0xB9E9, 0xBC31}, //9703 #HANGUL SYLLABLE PIEUP AE KIYEOK + {0xB9EA, 0xBC34}, //9704 #HANGUL SYLLABLE PIEUP AE NIEUN + {0xB9EB, 0xBC38}, //9705 #HANGUL SYLLABLE PIEUP AE RIEUL + {0xB9EC, 0xBC40}, //9706 #HANGUL SYLLABLE PIEUP AE MIEUM + {0xB9ED, 0xBC41}, //9707 #HANGUL SYLLABLE PIEUP AE PIEUP + {0xB9EE, 0xBC43}, //9708 #HANGUL SYLLABLE PIEUP AE SIOS + {0xB9EF, 0xBC44}, //9709 #HANGUL SYLLABLE PIEUP AE SSANGSIOS + {0xB9F0, 0xBC45}, //9710 #HANGUL SYLLABLE PIEUP AE IEUNG + {0xB9F1, 0xBC49}, //9711 #HANGUL SYLLABLE PIEUP AE THIEUTH + {0xB9F2, 0xBC4C}, //9712 #HANGUL SYLLABLE PIEUP YA + {0xB9F3, 0xBC4D}, //9713 #HANGUL SYLLABLE PIEUP YA KIYEOK + {0xB9F4, 0xBC50}, //9714 #HANGUL SYLLABLE PIEUP YA NIEUN + {0xB9F5, 0xBC5D}, //9715 #HANGUL SYLLABLE PIEUP YA PIEUP + {0xB9F6, 0xBC84}, //9716 #HANGUL SYLLABLE PIEUP EO + {0xB9F7, 0xBC85}, //9717 #HANGUL SYLLABLE PIEUP EO KIYEOK + {0xB9F8, 0xBC88}, //9718 #HANGUL SYLLABLE PIEUP EO NIEUN + {0xB9F9, 0xBC8B}, //9719 #HANGUL SYLLABLE PIEUP EO TIKEUT + {0xB9FA, 0xBC8C}, //9720 #HANGUL SYLLABLE PIEUP EO RIEUL + {0xB9FB, 0xBC8E}, //9721 #HANGUL SYLLABLE PIEUP EO RIEULMIEUM + {0xB9FC, 0xBC94}, //9722 #HANGUL SYLLABLE PIEUP EO MIEUM + {0xB9FD, 0xBC95}, //9723 #HANGUL SYLLABLE PIEUP EO PIEUP + {0xB9FE, 0xBC97}, //9724 #HANGUL SYLLABLE PIEUP EO SIOS + {0xBA41, 0xD28D}, //9725 #HANGUL SYLLABLE THIEUTH WI RIEULTHIEUTH + {0xBA42, 0xD28E}, //9726 #HANGUL SYLLABLE THIEUTH WI RIEULPHIEUPH + {0xBA43, 0xD28F}, //9727 #HANGUL SYLLABLE THIEUTH WI RIEULHIEUH + {0xBA44, 0xD292}, //9728 #HANGUL SYLLABLE THIEUTH WI PIEUPSIOS + {0xBA45, 0xD293}, //9729 #HANGUL SYLLABLE THIEUTH WI SIOS + {0xBA46, 0xD294}, //9730 #HANGUL SYLLABLE THIEUTH WI SSANGSIOS + {0xBA47, 0xD296}, //9731 #HANGUL SYLLABLE THIEUTH WI CIEUC + {0xBA48, 0xD297}, //9732 #HANGUL SYLLABLE THIEUTH WI CHIEUCH + {0xBA49, 0xD298}, //9733 #HANGUL SYLLABLE THIEUTH WI KHIEUKH + {0xBA4A, 0xD299}, //9734 #HANGUL SYLLABLE THIEUTH WI THIEUTH + {0xBA4B, 0xD29A}, //9735 #HANGUL SYLLABLE THIEUTH WI PHIEUPH + {0xBA4C, 0xD29B}, //9736 #HANGUL SYLLABLE THIEUTH WI HIEUH + {0xBA4D, 0xD29D}, //9737 #HANGUL SYLLABLE THIEUTH YU KIYEOK + {0xBA4E, 0xD29E}, //9738 #HANGUL SYLLABLE THIEUTH YU SSANGKIYEOK + {0xBA4F, 0xD29F}, //9739 #HANGUL SYLLABLE THIEUTH YU KIYEOKSIOS + {0xBA50, 0xD2A1}, //9740 #HANGUL SYLLABLE THIEUTH YU NIEUNCIEUC + {0xBA51, 0xD2A2}, //9741 #HANGUL SYLLABLE THIEUTH YU NIEUNHIEUH + {0xBA52, 0xD2A3}, //9742 #HANGUL SYLLABLE THIEUTH YU TIKEUT + {0xBA53, 0xD2A5}, //9743 #HANGUL SYLLABLE THIEUTH YU RIEULKIYEOK + {0xBA54, 0xD2A6}, //9744 #HANGUL SYLLABLE THIEUTH YU RIEULMIEUM + {0xBA55, 0xD2A7}, //9745 #HANGUL SYLLABLE THIEUTH YU RIEULPIEUP + {0xBA56, 0xD2A8}, //9746 #HANGUL SYLLABLE THIEUTH YU RIEULSIOS + {0xBA57, 0xD2A9}, //9747 #HANGUL SYLLABLE THIEUTH YU RIEULTHIEUTH + {0xBA58, 0xD2AA}, //9748 #HANGUL SYLLABLE THIEUTH YU RIEULPHIEUPH + {0xBA59, 0xD2AB}, //9749 #HANGUL SYLLABLE THIEUTH YU RIEULHIEUH + {0xBA5A, 0xD2AD}, //9750 #HANGUL SYLLABLE THIEUTH YU PIEUP + {0xBA61, 0xD2AE}, //9751 #HANGUL SYLLABLE THIEUTH YU PIEUPSIOS + {0xBA62, 0xD2AF}, //9752 #HANGUL SYLLABLE THIEUTH YU SIOS + {0xBA63, 0xD2B0}, //9753 #HANGUL SYLLABLE THIEUTH YU SSANGSIOS + {0xBA64, 0xD2B2}, //9754 #HANGUL SYLLABLE THIEUTH YU CIEUC + {0xBA65, 0xD2B3}, //9755 #HANGUL SYLLABLE THIEUTH YU CHIEUCH + {0xBA66, 0xD2B4}, //9756 #HANGUL SYLLABLE THIEUTH YU KHIEUKH + {0xBA67, 0xD2B5}, //9757 #HANGUL SYLLABLE THIEUTH YU THIEUTH + {0xBA68, 0xD2B6}, //9758 #HANGUL SYLLABLE THIEUTH YU PHIEUPH + {0xBA69, 0xD2B7}, //9759 #HANGUL SYLLABLE THIEUTH YU HIEUH + {0xBA6A, 0xD2BA}, //9760 #HANGUL SYLLABLE THIEUTH EU SSANGKIYEOK + {0xBA6B, 0xD2BB}, //9761 #HANGUL SYLLABLE THIEUTH EU KIYEOKSIOS + {0xBA6C, 0xD2BD}, //9762 #HANGUL SYLLABLE THIEUTH EU NIEUNCIEUC + {0xBA6D, 0xD2BE}, //9763 #HANGUL SYLLABLE THIEUTH EU NIEUNHIEUH + {0xBA6E, 0xD2C1}, //9764 #HANGUL SYLLABLE THIEUTH EU RIEULKIYEOK + {0xBA6F, 0xD2C3}, //9765 #HANGUL SYLLABLE THIEUTH EU RIEULPIEUP + {0xBA70, 0xD2C4}, //9766 #HANGUL SYLLABLE THIEUTH EU RIEULSIOS + {0xBA71, 0xD2C5}, //9767 #HANGUL SYLLABLE THIEUTH EU RIEULTHIEUTH + {0xBA72, 0xD2C6}, //9768 #HANGUL SYLLABLE THIEUTH EU RIEULPHIEUPH + {0xBA73, 0xD2C7}, //9769 #HANGUL SYLLABLE THIEUTH EU RIEULHIEUH + {0xBA74, 0xD2CA}, //9770 #HANGUL SYLLABLE THIEUTH EU PIEUPSIOS + {0xBA75, 0xD2CC}, //9771 #HANGUL SYLLABLE THIEUTH EU SSANGSIOS + {0xBA76, 0xD2CD}, //9772 #HANGUL SYLLABLE THIEUTH EU IEUNG + {0xBA77, 0xD2CE}, //9773 #HANGUL SYLLABLE THIEUTH EU CIEUC + {0xBA78, 0xD2CF}, //9774 #HANGUL SYLLABLE THIEUTH EU CHIEUCH + {0xBA79, 0xD2D0}, //9775 #HANGUL SYLLABLE THIEUTH EU KHIEUKH + {0xBA7A, 0xD2D1}, //9776 #HANGUL SYLLABLE THIEUTH EU THIEUTH + {0xBA81, 0xD2D2}, //9777 #HANGUL SYLLABLE THIEUTH EU PHIEUPH + {0xBA82, 0xD2D3}, //9778 #HANGUL SYLLABLE THIEUTH EU HIEUH + {0xBA83, 0xD2D5}, //9779 #HANGUL SYLLABLE THIEUTH YI KIYEOK + {0xBA84, 0xD2D6}, //9780 #HANGUL SYLLABLE THIEUTH YI SSANGKIYEOK + {0xBA85, 0xD2D7}, //9781 #HANGUL SYLLABLE THIEUTH YI KIYEOKSIOS + {0xBA86, 0xD2D9}, //9782 #HANGUL SYLLABLE THIEUTH YI NIEUNCIEUC + {0xBA87, 0xD2DA}, //9783 #HANGUL SYLLABLE THIEUTH YI NIEUNHIEUH + {0xBA88, 0xD2DB}, //9784 #HANGUL SYLLABLE THIEUTH YI TIKEUT + {0xBA89, 0xD2DD}, //9785 #HANGUL SYLLABLE THIEUTH YI RIEULKIYEOK + {0xBA8A, 0xD2DE}, //9786 #HANGUL SYLLABLE THIEUTH YI RIEULMIEUM + {0xBA8B, 0xD2DF}, //9787 #HANGUL SYLLABLE THIEUTH YI RIEULPIEUP + {0xBA8C, 0xD2E0}, //9788 #HANGUL SYLLABLE THIEUTH YI RIEULSIOS + {0xBA8D, 0xD2E1}, //9789 #HANGUL SYLLABLE THIEUTH YI RIEULTHIEUTH + {0xBA8E, 0xD2E2}, //9790 #HANGUL SYLLABLE THIEUTH YI RIEULPHIEUPH + {0xBA8F, 0xD2E3}, //9791 #HANGUL SYLLABLE THIEUTH YI RIEULHIEUH + {0xBA90, 0xD2E6}, //9792 #HANGUL SYLLABLE THIEUTH YI PIEUPSIOS + {0xBA91, 0xD2E7}, //9793 #HANGUL SYLLABLE THIEUTH YI SIOS + {0xBA92, 0xD2E8}, //9794 #HANGUL SYLLABLE THIEUTH YI SSANGSIOS + {0xBA93, 0xD2E9}, //9795 #HANGUL SYLLABLE THIEUTH YI IEUNG + {0xBA94, 0xD2EA}, //9796 #HANGUL SYLLABLE THIEUTH YI CIEUC + {0xBA95, 0xD2EB}, //9797 #HANGUL SYLLABLE THIEUTH YI CHIEUCH + {0xBA96, 0xD2EC}, //9798 #HANGUL SYLLABLE THIEUTH YI KHIEUKH + {0xBA97, 0xD2ED}, //9799 #HANGUL SYLLABLE THIEUTH YI THIEUTH + {0xBA98, 0xD2EE}, //9800 #HANGUL SYLLABLE THIEUTH YI PHIEUPH + {0xBA99, 0xD2EF}, //9801 #HANGUL SYLLABLE THIEUTH YI HIEUH + {0xBA9A, 0xD2F2}, //9802 #HANGUL SYLLABLE THIEUTH I SSANGKIYEOK + {0xBA9B, 0xD2F3}, //9803 #HANGUL SYLLABLE THIEUTH I KIYEOKSIOS + {0xBA9C, 0xD2F5}, //9804 #HANGUL SYLLABLE THIEUTH I NIEUNCIEUC + {0xBA9D, 0xD2F6}, //9805 #HANGUL SYLLABLE THIEUTH I NIEUNHIEUH + {0xBA9E, 0xD2F7}, //9806 #HANGUL SYLLABLE THIEUTH I TIKEUT + {0xBA9F, 0xD2F9}, //9807 #HANGUL SYLLABLE THIEUTH I RIEULKIYEOK + {0xBAA0, 0xD2FA}, //9808 #HANGUL SYLLABLE THIEUTH I RIEULMIEUM + {0xBAA1, 0xBC99}, //9809 #HANGUL SYLLABLE PIEUP EO IEUNG + {0xBAA2, 0xBC9A}, //9810 #HANGUL SYLLABLE PIEUP EO CIEUC + {0xBAA3, 0xBCA0}, //9811 #HANGUL SYLLABLE PIEUP E + {0xBAA4, 0xBCA1}, //9812 #HANGUL SYLLABLE PIEUP E KIYEOK + {0xBAA5, 0xBCA4}, //9813 #HANGUL SYLLABLE PIEUP E NIEUN + {0xBAA6, 0xBCA7}, //9814 #HANGUL SYLLABLE PIEUP E TIKEUT + {0xBAA7, 0xBCA8}, //9815 #HANGUL SYLLABLE PIEUP E RIEUL + {0xBAA8, 0xBCB0}, //9816 #HANGUL SYLLABLE PIEUP E MIEUM + {0xBAA9, 0xBCB1}, //9817 #HANGUL SYLLABLE PIEUP E PIEUP + {0xBAAA, 0xBCB3}, //9818 #HANGUL SYLLABLE PIEUP E SIOS + {0xBAAB, 0xBCB4}, //9819 #HANGUL SYLLABLE PIEUP E SSANGSIOS + {0xBAAC, 0xBCB5}, //9820 #HANGUL SYLLABLE PIEUP E IEUNG + {0xBAAD, 0xBCBC}, //9821 #HANGUL SYLLABLE PIEUP YEO + {0xBAAE, 0xBCBD}, //9822 #HANGUL SYLLABLE PIEUP YEO KIYEOK + {0xBAAF, 0xBCC0}, //9823 #HANGUL SYLLABLE PIEUP YEO NIEUN + {0xBAB0, 0xBCC4}, //9824 #HANGUL SYLLABLE PIEUP YEO RIEUL + {0xBAB1, 0xBCCD}, //9825 #HANGUL SYLLABLE PIEUP YEO PIEUP + {0xBAB2, 0xBCCF}, //9826 #HANGUL SYLLABLE PIEUP YEO SIOS + {0xBAB3, 0xBCD0}, //9827 #HANGUL SYLLABLE PIEUP YEO SSANGSIOS + {0xBAB4, 0xBCD1}, //9828 #HANGUL SYLLABLE PIEUP YEO IEUNG + {0xBAB5, 0xBCD5}, //9829 #HANGUL SYLLABLE PIEUP YEO THIEUTH + {0xBAB6, 0xBCD8}, //9830 #HANGUL SYLLABLE PIEUP YE + {0xBAB7, 0xBCDC}, //9831 #HANGUL SYLLABLE PIEUP YE NIEUN + {0xBAB8, 0xBCF4}, //9832 #HANGUL SYLLABLE PIEUP O + {0xBAB9, 0xBCF5}, //9833 #HANGUL SYLLABLE PIEUP O KIYEOK + {0xBABA, 0xBCF6}, //9834 #HANGUL SYLLABLE PIEUP O SSANGKIYEOK + {0xBABB, 0xBCF8}, //9835 #HANGUL SYLLABLE PIEUP O NIEUN + {0xBABC, 0xBCFC}, //9836 #HANGUL SYLLABLE PIEUP O RIEUL + {0xBABD, 0xBD04}, //9837 #HANGUL SYLLABLE PIEUP O MIEUM + {0xBABE, 0xBD05}, //9838 #HANGUL SYLLABLE PIEUP O PIEUP + {0xBABF, 0xBD07}, //9839 #HANGUL SYLLABLE PIEUP O SIOS + {0xBAC0, 0xBD09}, //9840 #HANGUL SYLLABLE PIEUP O IEUNG + {0xBAC1, 0xBD10}, //9841 #HANGUL SYLLABLE PIEUP WA + {0xBAC2, 0xBD14}, //9842 #HANGUL SYLLABLE PIEUP WA NIEUN + {0xBAC3, 0xBD24}, //9843 #HANGUL SYLLABLE PIEUP WA SSANGSIOS + {0xBAC4, 0xBD2C}, //9844 #HANGUL SYLLABLE PIEUP WAE + {0xBAC5, 0xBD40}, //9845 #HANGUL SYLLABLE PIEUP WAE SSANGSIOS + {0xBAC6, 0xBD48}, //9846 #HANGUL SYLLABLE PIEUP OE + {0xBAC7, 0xBD49}, //9847 #HANGUL SYLLABLE PIEUP OE KIYEOK + {0xBAC8, 0xBD4C}, //9848 #HANGUL SYLLABLE PIEUP OE NIEUN + {0xBAC9, 0xBD50}, //9849 #HANGUL SYLLABLE PIEUP OE RIEUL + {0xBACA, 0xBD58}, //9850 #HANGUL SYLLABLE PIEUP OE MIEUM + {0xBACB, 0xBD59}, //9851 #HANGUL SYLLABLE PIEUP OE PIEUP + {0xBACC, 0xBD64}, //9852 #HANGUL SYLLABLE PIEUP YO + {0xBACD, 0xBD68}, //9853 #HANGUL SYLLABLE PIEUP YO NIEUN + {0xBACE, 0xBD80}, //9854 #HANGUL SYLLABLE PIEUP U + {0xBACF, 0xBD81}, //9855 #HANGUL SYLLABLE PIEUP U KIYEOK + {0xBAD0, 0xBD84}, //9856 #HANGUL SYLLABLE PIEUP U NIEUN + {0xBAD1, 0xBD87}, //9857 #HANGUL SYLLABLE PIEUP U TIKEUT + {0xBAD2, 0xBD88}, //9858 #HANGUL SYLLABLE PIEUP U RIEUL + {0xBAD3, 0xBD89}, //9859 #HANGUL SYLLABLE PIEUP U RIEULKIYEOK + {0xBAD4, 0xBD8A}, //9860 #HANGUL SYLLABLE PIEUP U RIEULMIEUM + {0xBAD5, 0xBD90}, //9861 #HANGUL SYLLABLE PIEUP U MIEUM + {0xBAD6, 0xBD91}, //9862 #HANGUL SYLLABLE PIEUP U PIEUP + {0xBAD7, 0xBD93}, //9863 #HANGUL SYLLABLE PIEUP U SIOS + {0xBAD8, 0xBD95}, //9864 #HANGUL SYLLABLE PIEUP U IEUNG + {0xBAD9, 0xBD99}, //9865 #HANGUL SYLLABLE PIEUP U THIEUTH + {0xBADA, 0xBD9A}, //9866 #HANGUL SYLLABLE PIEUP U PHIEUPH + {0xBADB, 0xBD9C}, //9867 #HANGUL SYLLABLE PIEUP WEO + {0xBADC, 0xBDA4}, //9868 #HANGUL SYLLABLE PIEUP WEO RIEUL + {0xBADD, 0xBDB0}, //9869 #HANGUL SYLLABLE PIEUP WEO SSANGSIOS + {0xBADE, 0xBDB8}, //9870 #HANGUL SYLLABLE PIEUP WE + {0xBADF, 0xBDD4}, //9871 #HANGUL SYLLABLE PIEUP WI + {0xBAE0, 0xBDD5}, //9872 #HANGUL SYLLABLE PIEUP WI KIYEOK + {0xBAE1, 0xBDD8}, //9873 #HANGUL SYLLABLE PIEUP WI NIEUN + {0xBAE2, 0xBDDC}, //9874 #HANGUL SYLLABLE PIEUP WI RIEUL + {0xBAE3, 0xBDE9}, //9875 #HANGUL SYLLABLE PIEUP WI IEUNG + {0xBAE4, 0xBDF0}, //9876 #HANGUL SYLLABLE PIEUP YU + {0xBAE5, 0xBDF4}, //9877 #HANGUL SYLLABLE PIEUP YU NIEUN + {0xBAE6, 0xBDF8}, //9878 #HANGUL SYLLABLE PIEUP YU RIEUL + {0xBAE7, 0xBE00}, //9879 #HANGUL SYLLABLE PIEUP YU MIEUM + {0xBAE8, 0xBE03}, //9880 #HANGUL SYLLABLE PIEUP YU SIOS + {0xBAE9, 0xBE05}, //9881 #HANGUL SYLLABLE PIEUP YU IEUNG + {0xBAEA, 0xBE0C}, //9882 #HANGUL SYLLABLE PIEUP EU + {0xBAEB, 0xBE0D}, //9883 #HANGUL SYLLABLE PIEUP EU KIYEOK + {0xBAEC, 0xBE10}, //9884 #HANGUL SYLLABLE PIEUP EU NIEUN + {0xBAED, 0xBE14}, //9885 #HANGUL SYLLABLE PIEUP EU RIEUL + {0xBAEE, 0xBE1C}, //9886 #HANGUL SYLLABLE PIEUP EU MIEUM + {0xBAEF, 0xBE1D}, //9887 #HANGUL SYLLABLE PIEUP EU PIEUP + {0xBAF0, 0xBE1F}, //9888 #HANGUL SYLLABLE PIEUP EU SIOS + {0xBAF1, 0xBE44}, //9889 #HANGUL SYLLABLE PIEUP I + {0xBAF2, 0xBE45}, //9890 #HANGUL SYLLABLE PIEUP I KIYEOK + {0xBAF3, 0xBE48}, //9891 #HANGUL SYLLABLE PIEUP I NIEUN + {0xBAF4, 0xBE4C}, //9892 #HANGUL SYLLABLE PIEUP I RIEUL + {0xBAF5, 0xBE4E}, //9893 #HANGUL SYLLABLE PIEUP I RIEULMIEUM + {0xBAF6, 0xBE54}, //9894 #HANGUL SYLLABLE PIEUP I MIEUM + {0xBAF7, 0xBE55}, //9895 #HANGUL SYLLABLE PIEUP I PIEUP + {0xBAF8, 0xBE57}, //9896 #HANGUL SYLLABLE PIEUP I SIOS + {0xBAF9, 0xBE59}, //9897 #HANGUL SYLLABLE PIEUP I IEUNG + {0xBAFA, 0xBE5A}, //9898 #HANGUL SYLLABLE PIEUP I CIEUC + {0xBAFB, 0xBE5B}, //9899 #HANGUL SYLLABLE PIEUP I CHIEUCH + {0xBAFC, 0xBE60}, //9900 #HANGUL SYLLABLE SSANGPIEUP A + {0xBAFD, 0xBE61}, //9901 #HANGUL SYLLABLE SSANGPIEUP A KIYEOK + {0xBAFE, 0xBE64}, //9902 #HANGUL SYLLABLE SSANGPIEUP A NIEUN + {0xBB41, 0xD2FB}, //9903 #HANGUL SYLLABLE THIEUTH I RIEULPIEUP + {0xBB42, 0xD2FC}, //9904 #HANGUL SYLLABLE THIEUTH I RIEULSIOS + {0xBB43, 0xD2FD}, //9905 #HANGUL SYLLABLE THIEUTH I RIEULTHIEUTH + {0xBB44, 0xD2FE}, //9906 #HANGUL SYLLABLE THIEUTH I RIEULPHIEUPH + {0xBB45, 0xD2FF}, //9907 #HANGUL SYLLABLE THIEUTH I RIEULHIEUH + {0xBB46, 0xD302}, //9908 #HANGUL SYLLABLE THIEUTH I PIEUPSIOS + {0xBB47, 0xD304}, //9909 #HANGUL SYLLABLE THIEUTH I SSANGSIOS + {0xBB48, 0xD306}, //9910 #HANGUL SYLLABLE THIEUTH I CIEUC + {0xBB49, 0xD307}, //9911 #HANGUL SYLLABLE THIEUTH I CHIEUCH + {0xBB4A, 0xD308}, //9912 #HANGUL SYLLABLE THIEUTH I KHIEUKH + {0xBB4B, 0xD309}, //9913 #HANGUL SYLLABLE THIEUTH I THIEUTH + {0xBB4C, 0xD30A}, //9914 #HANGUL SYLLABLE THIEUTH I PHIEUPH + {0xBB4D, 0xD30B}, //9915 #HANGUL SYLLABLE THIEUTH I HIEUH + {0xBB4E, 0xD30F}, //9916 #HANGUL SYLLABLE PHIEUPH A KIYEOKSIOS + {0xBB4F, 0xD311}, //9917 #HANGUL SYLLABLE PHIEUPH A NIEUNCIEUC + {0xBB50, 0xD312}, //9918 #HANGUL SYLLABLE PHIEUPH A NIEUNHIEUH + {0xBB51, 0xD313}, //9919 #HANGUL SYLLABLE PHIEUPH A TIKEUT + {0xBB52, 0xD315}, //9920 #HANGUL SYLLABLE PHIEUPH A RIEULKIYEOK + {0xBB53, 0xD317}, //9921 #HANGUL SYLLABLE PHIEUPH A RIEULPIEUP + {0xBB54, 0xD318}, //9922 #HANGUL SYLLABLE PHIEUPH A RIEULSIOS + {0xBB55, 0xD319}, //9923 #HANGUL SYLLABLE PHIEUPH A RIEULTHIEUTH + {0xBB56, 0xD31A}, //9924 #HANGUL SYLLABLE PHIEUPH A RIEULPHIEUPH + {0xBB57, 0xD31B}, //9925 #HANGUL SYLLABLE PHIEUPH A RIEULHIEUH + {0xBB58, 0xD31E}, //9926 #HANGUL SYLLABLE PHIEUPH A PIEUPSIOS + {0xBB59, 0xD322}, //9927 #HANGUL SYLLABLE PHIEUPH A CIEUC + {0xBB5A, 0xD323}, //9928 #HANGUL SYLLABLE PHIEUPH A CHIEUCH + {0xBB61, 0xD324}, //9929 #HANGUL SYLLABLE PHIEUPH A KHIEUKH + {0xBB62, 0xD326}, //9930 #HANGUL SYLLABLE PHIEUPH A PHIEUPH + {0xBB63, 0xD327}, //9931 #HANGUL SYLLABLE PHIEUPH A HIEUH + {0xBB64, 0xD32A}, //9932 #HANGUL SYLLABLE PHIEUPH AE SSANGKIYEOK + {0xBB65, 0xD32B}, //9933 #HANGUL SYLLABLE PHIEUPH AE KIYEOKSIOS + {0xBB66, 0xD32D}, //9934 #HANGUL SYLLABLE PHIEUPH AE NIEUNCIEUC + {0xBB67, 0xD32E}, //9935 #HANGUL SYLLABLE PHIEUPH AE NIEUNHIEUH + {0xBB68, 0xD32F}, //9936 #HANGUL SYLLABLE PHIEUPH AE TIKEUT + {0xBB69, 0xD331}, //9937 #HANGUL SYLLABLE PHIEUPH AE RIEULKIYEOK + {0xBB6A, 0xD332}, //9938 #HANGUL SYLLABLE PHIEUPH AE RIEULMIEUM + {0xBB6B, 0xD333}, //9939 #HANGUL SYLLABLE PHIEUPH AE RIEULPIEUP + {0xBB6C, 0xD334}, //9940 #HANGUL SYLLABLE PHIEUPH AE RIEULSIOS + {0xBB6D, 0xD335}, //9941 #HANGUL SYLLABLE PHIEUPH AE RIEULTHIEUTH + {0xBB6E, 0xD336}, //9942 #HANGUL SYLLABLE PHIEUPH AE RIEULPHIEUPH + {0xBB6F, 0xD337}, //9943 #HANGUL SYLLABLE PHIEUPH AE RIEULHIEUH + {0xBB70, 0xD33A}, //9944 #HANGUL SYLLABLE PHIEUPH AE PIEUPSIOS + {0xBB71, 0xD33E}, //9945 #HANGUL SYLLABLE PHIEUPH AE CIEUC + {0xBB72, 0xD33F}, //9946 #HANGUL SYLLABLE PHIEUPH AE CHIEUCH + {0xBB73, 0xD340}, //9947 #HANGUL SYLLABLE PHIEUPH AE KHIEUKH + {0xBB74, 0xD341}, //9948 #HANGUL SYLLABLE PHIEUPH AE THIEUTH + {0xBB75, 0xD342}, //9949 #HANGUL SYLLABLE PHIEUPH AE PHIEUPH + {0xBB76, 0xD343}, //9950 #HANGUL SYLLABLE PHIEUPH AE HIEUH + {0xBB77, 0xD346}, //9951 #HANGUL SYLLABLE PHIEUPH YA SSANGKIYEOK + {0xBB78, 0xD347}, //9952 #HANGUL SYLLABLE PHIEUPH YA KIYEOKSIOS + {0xBB79, 0xD348}, //9953 #HANGUL SYLLABLE PHIEUPH YA NIEUN + {0xBB7A, 0xD349}, //9954 #HANGUL SYLLABLE PHIEUPH YA NIEUNCIEUC + {0xBB81, 0xD34A}, //9955 #HANGUL SYLLABLE PHIEUPH YA NIEUNHIEUH + {0xBB82, 0xD34B}, //9956 #HANGUL SYLLABLE PHIEUPH YA TIKEUT + {0xBB83, 0xD34C}, //9957 #HANGUL SYLLABLE PHIEUPH YA RIEUL + {0xBB84, 0xD34D}, //9958 #HANGUL SYLLABLE PHIEUPH YA RIEULKIYEOK + {0xBB85, 0xD34E}, //9959 #HANGUL SYLLABLE PHIEUPH YA RIEULMIEUM + {0xBB86, 0xD34F}, //9960 #HANGUL SYLLABLE PHIEUPH YA RIEULPIEUP + {0xBB87, 0xD350}, //9961 #HANGUL SYLLABLE PHIEUPH YA RIEULSIOS + {0xBB88, 0xD351}, //9962 #HANGUL SYLLABLE PHIEUPH YA RIEULTHIEUTH + {0xBB89, 0xD352}, //9963 #HANGUL SYLLABLE PHIEUPH YA RIEULPHIEUPH + {0xBB8A, 0xD353}, //9964 #HANGUL SYLLABLE PHIEUPH YA RIEULHIEUH + {0xBB8B, 0xD354}, //9965 #HANGUL SYLLABLE PHIEUPH YA MIEUM + {0xBB8C, 0xD355}, //9966 #HANGUL SYLLABLE PHIEUPH YA PIEUP + {0xBB8D, 0xD356}, //9967 #HANGUL SYLLABLE PHIEUPH YA PIEUPSIOS + {0xBB8E, 0xD357}, //9968 #HANGUL SYLLABLE PHIEUPH YA SIOS + {0xBB8F, 0xD358}, //9969 #HANGUL SYLLABLE PHIEUPH YA SSANGSIOS + {0xBB90, 0xD359}, //9970 #HANGUL SYLLABLE PHIEUPH YA IEUNG + {0xBB91, 0xD35A}, //9971 #HANGUL SYLLABLE PHIEUPH YA CIEUC + {0xBB92, 0xD35B}, //9972 #HANGUL SYLLABLE PHIEUPH YA CHIEUCH + {0xBB93, 0xD35C}, //9973 #HANGUL SYLLABLE PHIEUPH YA KHIEUKH + {0xBB94, 0xD35D}, //9974 #HANGUL SYLLABLE PHIEUPH YA THIEUTH + {0xBB95, 0xD35E}, //9975 #HANGUL SYLLABLE PHIEUPH YA PHIEUPH + {0xBB96, 0xD35F}, //9976 #HANGUL SYLLABLE PHIEUPH YA HIEUH + {0xBB97, 0xD360}, //9977 #HANGUL SYLLABLE PHIEUPH YAE + {0xBB98, 0xD361}, //9978 #HANGUL SYLLABLE PHIEUPH YAE KIYEOK + {0xBB99, 0xD362}, //9979 #HANGUL SYLLABLE PHIEUPH YAE SSANGKIYEOK + {0xBB9A, 0xD363}, //9980 #HANGUL SYLLABLE PHIEUPH YAE KIYEOKSIOS + {0xBB9B, 0xD364}, //9981 #HANGUL SYLLABLE PHIEUPH YAE NIEUN + {0xBB9C, 0xD365}, //9982 #HANGUL SYLLABLE PHIEUPH YAE NIEUNCIEUC + {0xBB9D, 0xD366}, //9983 #HANGUL SYLLABLE PHIEUPH YAE NIEUNHIEUH + {0xBB9E, 0xD367}, //9984 #HANGUL SYLLABLE PHIEUPH YAE TIKEUT + {0xBB9F, 0xD368}, //9985 #HANGUL SYLLABLE PHIEUPH YAE RIEUL + {0xBBA0, 0xD369}, //9986 #HANGUL SYLLABLE PHIEUPH YAE RIEULKIYEOK + {0xBBA1, 0xBE68}, //9987 #HANGUL SYLLABLE SSANGPIEUP A RIEUL + {0xBBA2, 0xBE6A}, //9988 #HANGUL SYLLABLE SSANGPIEUP A RIEULMIEUM + {0xBBA3, 0xBE70}, //9989 #HANGUL SYLLABLE SSANGPIEUP A MIEUM + {0xBBA4, 0xBE71}, //9990 #HANGUL SYLLABLE SSANGPIEUP A PIEUP + {0xBBA5, 0xBE73}, //9991 #HANGUL SYLLABLE SSANGPIEUP A SIOS + {0xBBA6, 0xBE74}, //9992 #HANGUL SYLLABLE SSANGPIEUP A SSANGSIOS + {0xBBA7, 0xBE75}, //9993 #HANGUL SYLLABLE SSANGPIEUP A IEUNG + {0xBBA8, 0xBE7B}, //9994 #HANGUL SYLLABLE SSANGPIEUP A HIEUH + {0xBBA9, 0xBE7C}, //9995 #HANGUL SYLLABLE SSANGPIEUP AE + {0xBBAA, 0xBE7D}, //9996 #HANGUL SYLLABLE SSANGPIEUP AE KIYEOK + {0xBBAB, 0xBE80}, //9997 #HANGUL SYLLABLE SSANGPIEUP AE NIEUN + {0xBBAC, 0xBE84}, //9998 #HANGUL SYLLABLE SSANGPIEUP AE RIEUL + {0xBBAD, 0xBE8C}, //9999 #HANGUL SYLLABLE SSANGPIEUP AE MIEUM + {0xBBAE, 0xBE8D}, //10000 #HANGUL SYLLABLE SSANGPIEUP AE PIEUP + {0xBBAF, 0xBE8F}, //10001 #HANGUL SYLLABLE SSANGPIEUP AE SIOS + {0xBBB0, 0xBE90}, //10002 #HANGUL SYLLABLE SSANGPIEUP AE SSANGSIOS + {0xBBB1, 0xBE91}, //10003 #HANGUL SYLLABLE SSANGPIEUP AE IEUNG + {0xBBB2, 0xBE98}, //10004 #HANGUL SYLLABLE SSANGPIEUP YA + {0xBBB3, 0xBE99}, //10005 #HANGUL SYLLABLE SSANGPIEUP YA KIYEOK + {0xBBB4, 0xBEA8}, //10006 #HANGUL SYLLABLE SSANGPIEUP YA MIEUM + {0xBBB5, 0xBED0}, //10007 #HANGUL SYLLABLE SSANGPIEUP EO + {0xBBB6, 0xBED1}, //10008 #HANGUL SYLLABLE SSANGPIEUP EO KIYEOK + {0xBBB7, 0xBED4}, //10009 #HANGUL SYLLABLE SSANGPIEUP EO NIEUN + {0xBBB8, 0xBED7}, //10010 #HANGUL SYLLABLE SSANGPIEUP EO TIKEUT + {0xBBB9, 0xBED8}, //10011 #HANGUL SYLLABLE SSANGPIEUP EO RIEUL + {0xBBBA, 0xBEE0}, //10012 #HANGUL SYLLABLE SSANGPIEUP EO MIEUM + {0xBBBB, 0xBEE3}, //10013 #HANGUL SYLLABLE SSANGPIEUP EO SIOS + {0xBBBC, 0xBEE4}, //10014 #HANGUL SYLLABLE SSANGPIEUP EO SSANGSIOS + {0xBBBD, 0xBEE5}, //10015 #HANGUL SYLLABLE SSANGPIEUP EO IEUNG + {0xBBBE, 0xBEEC}, //10016 #HANGUL SYLLABLE SSANGPIEUP E + {0xBBBF, 0xBF01}, //10017 #HANGUL SYLLABLE SSANGPIEUP E IEUNG + {0xBBC0, 0xBF08}, //10018 #HANGUL SYLLABLE SSANGPIEUP YEO + {0xBBC1, 0xBF09}, //10019 #HANGUL SYLLABLE SSANGPIEUP YEO KIYEOK + {0xBBC2, 0xBF18}, //10020 #HANGUL SYLLABLE SSANGPIEUP YEO MIEUM + {0xBBC3, 0xBF19}, //10021 #HANGUL SYLLABLE SSANGPIEUP YEO PIEUP + {0xBBC4, 0xBF1B}, //10022 #HANGUL SYLLABLE SSANGPIEUP YEO SIOS + {0xBBC5, 0xBF1C}, //10023 #HANGUL SYLLABLE SSANGPIEUP YEO SSANGSIOS + {0xBBC6, 0xBF1D}, //10024 #HANGUL SYLLABLE SSANGPIEUP YEO IEUNG + {0xBBC7, 0xBF40}, //10025 #HANGUL SYLLABLE SSANGPIEUP O + {0xBBC8, 0xBF41}, //10026 #HANGUL SYLLABLE SSANGPIEUP O KIYEOK + {0xBBC9, 0xBF44}, //10027 #HANGUL SYLLABLE SSANGPIEUP O NIEUN + {0xBBCA, 0xBF48}, //10028 #HANGUL SYLLABLE SSANGPIEUP O RIEUL + {0xBBCB, 0xBF50}, //10029 #HANGUL SYLLABLE SSANGPIEUP O MIEUM + {0xBBCC, 0xBF51}, //10030 #HANGUL SYLLABLE SSANGPIEUP O PIEUP + {0xBBCD, 0xBF55}, //10031 #HANGUL SYLLABLE SSANGPIEUP O IEUNG + {0xBBCE, 0xBF94}, //10032 #HANGUL SYLLABLE SSANGPIEUP OE + {0xBBCF, 0xBFB0}, //10033 #HANGUL SYLLABLE SSANGPIEUP YO + {0xBBD0, 0xBFC5}, //10034 #HANGUL SYLLABLE SSANGPIEUP YO IEUNG + {0xBBD1, 0xBFCC}, //10035 #HANGUL SYLLABLE SSANGPIEUP U + {0xBBD2, 0xBFCD}, //10036 #HANGUL SYLLABLE SSANGPIEUP U KIYEOK + {0xBBD3, 0xBFD0}, //10037 #HANGUL SYLLABLE SSANGPIEUP U NIEUN + {0xBBD4, 0xBFD4}, //10038 #HANGUL SYLLABLE SSANGPIEUP U RIEUL + {0xBBD5, 0xBFDC}, //10039 #HANGUL SYLLABLE SSANGPIEUP U MIEUM + {0xBBD6, 0xBFDF}, //10040 #HANGUL SYLLABLE SSANGPIEUP U SIOS + {0xBBD7, 0xBFE1}, //10041 #HANGUL SYLLABLE SSANGPIEUP U IEUNG + {0xBBD8, 0xC03C}, //10042 #HANGUL SYLLABLE SSANGPIEUP YU + {0xBBD9, 0xC051}, //10043 #HANGUL SYLLABLE SSANGPIEUP YU IEUNG + {0xBBDA, 0xC058}, //10044 #HANGUL SYLLABLE SSANGPIEUP EU + {0xBBDB, 0xC05C}, //10045 #HANGUL SYLLABLE SSANGPIEUP EU NIEUN + {0xBBDC, 0xC060}, //10046 #HANGUL SYLLABLE SSANGPIEUP EU RIEUL + {0xBBDD, 0xC068}, //10047 #HANGUL SYLLABLE SSANGPIEUP EU MIEUM + {0xBBDE, 0xC069}, //10048 #HANGUL SYLLABLE SSANGPIEUP EU PIEUP + {0xBBDF, 0xC090}, //10049 #HANGUL SYLLABLE SSANGPIEUP I + {0xBBE0, 0xC091}, //10050 #HANGUL SYLLABLE SSANGPIEUP I KIYEOK + {0xBBE1, 0xC094}, //10051 #HANGUL SYLLABLE SSANGPIEUP I NIEUN + {0xBBE2, 0xC098}, //10052 #HANGUL SYLLABLE SSANGPIEUP I RIEUL + {0xBBE3, 0xC0A0}, //10053 #HANGUL SYLLABLE SSANGPIEUP I MIEUM + {0xBBE4, 0xC0A1}, //10054 #HANGUL SYLLABLE SSANGPIEUP I PIEUP + {0xBBE5, 0xC0A3}, //10055 #HANGUL SYLLABLE SSANGPIEUP I SIOS + {0xBBE6, 0xC0A5}, //10056 #HANGUL SYLLABLE SSANGPIEUP I IEUNG + {0xBBE7, 0xC0AC}, //10057 #HANGUL SYLLABLE SIOS A + {0xBBE8, 0xC0AD}, //10058 #HANGUL SYLLABLE SIOS A KIYEOK + {0xBBE9, 0xC0AF}, //10059 #HANGUL SYLLABLE SIOS A KIYEOKSIOS + {0xBBEA, 0xC0B0}, //10060 #HANGUL SYLLABLE SIOS A NIEUN + {0xBBEB, 0xC0B3}, //10061 #HANGUL SYLLABLE SIOS A TIKEUT + {0xBBEC, 0xC0B4}, //10062 #HANGUL SYLLABLE SIOS A RIEUL + {0xBBED, 0xC0B5}, //10063 #HANGUL SYLLABLE SIOS A RIEULKIYEOK + {0xBBEE, 0xC0B6}, //10064 #HANGUL SYLLABLE SIOS A RIEULMIEUM + {0xBBEF, 0xC0BC}, //10065 #HANGUL SYLLABLE SIOS A MIEUM + {0xBBF0, 0xC0BD}, //10066 #HANGUL SYLLABLE SIOS A PIEUP + {0xBBF1, 0xC0BF}, //10067 #HANGUL SYLLABLE SIOS A SIOS + {0xBBF2, 0xC0C0}, //10068 #HANGUL SYLLABLE SIOS A SSANGSIOS + {0xBBF3, 0xC0C1}, //10069 #HANGUL SYLLABLE SIOS A IEUNG + {0xBBF4, 0xC0C5}, //10070 #HANGUL SYLLABLE SIOS A THIEUTH + {0xBBF5, 0xC0C8}, //10071 #HANGUL SYLLABLE SIOS AE + {0xBBF6, 0xC0C9}, //10072 #HANGUL SYLLABLE SIOS AE KIYEOK + {0xBBF7, 0xC0CC}, //10073 #HANGUL SYLLABLE SIOS AE NIEUN + {0xBBF8, 0xC0D0}, //10074 #HANGUL SYLLABLE SIOS AE RIEUL + {0xBBF9, 0xC0D8}, //10075 #HANGUL SYLLABLE SIOS AE MIEUM + {0xBBFA, 0xC0D9}, //10076 #HANGUL SYLLABLE SIOS AE PIEUP + {0xBBFB, 0xC0DB}, //10077 #HANGUL SYLLABLE SIOS AE SIOS + {0xBBFC, 0xC0DC}, //10078 #HANGUL SYLLABLE SIOS AE SSANGSIOS + {0xBBFD, 0xC0DD}, //10079 #HANGUL SYLLABLE SIOS AE IEUNG + {0xBBFE, 0xC0E4}, //10080 #HANGUL SYLLABLE SIOS YA + {0xBC41, 0xD36A}, //10081 #HANGUL SYLLABLE PHIEUPH YAE RIEULMIEUM + {0xBC42, 0xD36B}, //10082 #HANGUL SYLLABLE PHIEUPH YAE RIEULPIEUP + {0xBC43, 0xD36C}, //10083 #HANGUL SYLLABLE PHIEUPH YAE RIEULSIOS + {0xBC44, 0xD36D}, //10084 #HANGUL SYLLABLE PHIEUPH YAE RIEULTHIEUTH + {0xBC45, 0xD36E}, //10085 #HANGUL SYLLABLE PHIEUPH YAE RIEULPHIEUPH + {0xBC46, 0xD36F}, //10086 #HANGUL SYLLABLE PHIEUPH YAE RIEULHIEUH + {0xBC47, 0xD370}, //10087 #HANGUL SYLLABLE PHIEUPH YAE MIEUM + {0xBC48, 0xD371}, //10088 #HANGUL SYLLABLE PHIEUPH YAE PIEUP + {0xBC49, 0xD372}, //10089 #HANGUL SYLLABLE PHIEUPH YAE PIEUPSIOS + {0xBC4A, 0xD373}, //10090 #HANGUL SYLLABLE PHIEUPH YAE SIOS + {0xBC4B, 0xD374}, //10091 #HANGUL SYLLABLE PHIEUPH YAE SSANGSIOS + {0xBC4C, 0xD375}, //10092 #HANGUL SYLLABLE PHIEUPH YAE IEUNG + {0xBC4D, 0xD376}, //10093 #HANGUL SYLLABLE PHIEUPH YAE CIEUC + {0xBC4E, 0xD377}, //10094 #HANGUL SYLLABLE PHIEUPH YAE CHIEUCH + {0xBC4F, 0xD378}, //10095 #HANGUL SYLLABLE PHIEUPH YAE KHIEUKH + {0xBC50, 0xD379}, //10096 #HANGUL SYLLABLE PHIEUPH YAE THIEUTH + {0xBC51, 0xD37A}, //10097 #HANGUL SYLLABLE PHIEUPH YAE PHIEUPH + {0xBC52, 0xD37B}, //10098 #HANGUL SYLLABLE PHIEUPH YAE HIEUH + {0xBC53, 0xD37E}, //10099 #HANGUL SYLLABLE PHIEUPH EO SSANGKIYEOK + {0xBC54, 0xD37F}, //10100 #HANGUL SYLLABLE PHIEUPH EO KIYEOKSIOS + {0xBC55, 0xD381}, //10101 #HANGUL SYLLABLE PHIEUPH EO NIEUNCIEUC + {0xBC56, 0xD382}, //10102 #HANGUL SYLLABLE PHIEUPH EO NIEUNHIEUH + {0xBC57, 0xD383}, //10103 #HANGUL SYLLABLE PHIEUPH EO TIKEUT + {0xBC58, 0xD385}, //10104 #HANGUL SYLLABLE PHIEUPH EO RIEULKIYEOK + {0xBC59, 0xD386}, //10105 #HANGUL SYLLABLE PHIEUPH EO RIEULMIEUM + {0xBC5A, 0xD387}, //10106 #HANGUL SYLLABLE PHIEUPH EO RIEULPIEUP + {0xBC61, 0xD388}, //10107 #HANGUL SYLLABLE PHIEUPH EO RIEULSIOS + {0xBC62, 0xD389}, //10108 #HANGUL SYLLABLE PHIEUPH EO RIEULTHIEUTH + {0xBC63, 0xD38A}, //10109 #HANGUL SYLLABLE PHIEUPH EO RIEULPHIEUPH + {0xBC64, 0xD38B}, //10110 #HANGUL SYLLABLE PHIEUPH EO RIEULHIEUH + {0xBC65, 0xD38E}, //10111 #HANGUL SYLLABLE PHIEUPH EO PIEUPSIOS + {0xBC66, 0xD392}, //10112 #HANGUL SYLLABLE PHIEUPH EO CIEUC + {0xBC67, 0xD393}, //10113 #HANGUL SYLLABLE PHIEUPH EO CHIEUCH + {0xBC68, 0xD394}, //10114 #HANGUL SYLLABLE PHIEUPH EO KHIEUKH + {0xBC69, 0xD395}, //10115 #HANGUL SYLLABLE PHIEUPH EO THIEUTH + {0xBC6A, 0xD396}, //10116 #HANGUL SYLLABLE PHIEUPH EO PHIEUPH + {0xBC6B, 0xD397}, //10117 #HANGUL SYLLABLE PHIEUPH EO HIEUH + {0xBC6C, 0xD39A}, //10118 #HANGUL SYLLABLE PHIEUPH E SSANGKIYEOK + {0xBC6D, 0xD39B}, //10119 #HANGUL SYLLABLE PHIEUPH E KIYEOKSIOS + {0xBC6E, 0xD39D}, //10120 #HANGUL SYLLABLE PHIEUPH E NIEUNCIEUC + {0xBC6F, 0xD39E}, //10121 #HANGUL SYLLABLE PHIEUPH E NIEUNHIEUH + {0xBC70, 0xD39F}, //10122 #HANGUL SYLLABLE PHIEUPH E TIKEUT + {0xBC71, 0xD3A1}, //10123 #HANGUL SYLLABLE PHIEUPH E RIEULKIYEOK + {0xBC72, 0xD3A2}, //10124 #HANGUL SYLLABLE PHIEUPH E RIEULMIEUM + {0xBC73, 0xD3A3}, //10125 #HANGUL SYLLABLE PHIEUPH E RIEULPIEUP + {0xBC74, 0xD3A4}, //10126 #HANGUL SYLLABLE PHIEUPH E RIEULSIOS + {0xBC75, 0xD3A5}, //10127 #HANGUL SYLLABLE PHIEUPH E RIEULTHIEUTH + {0xBC76, 0xD3A6}, //10128 #HANGUL SYLLABLE PHIEUPH E RIEULPHIEUPH + {0xBC77, 0xD3A7}, //10129 #HANGUL SYLLABLE PHIEUPH E RIEULHIEUH + {0xBC78, 0xD3AA}, //10130 #HANGUL SYLLABLE PHIEUPH E PIEUPSIOS + {0xBC79, 0xD3AC}, //10131 #HANGUL SYLLABLE PHIEUPH E SSANGSIOS + {0xBC7A, 0xD3AE}, //10132 #HANGUL SYLLABLE PHIEUPH E CIEUC + {0xBC81, 0xD3AF}, //10133 #HANGUL SYLLABLE PHIEUPH E CHIEUCH + {0xBC82, 0xD3B0}, //10134 #HANGUL SYLLABLE PHIEUPH E KHIEUKH + {0xBC83, 0xD3B1}, //10135 #HANGUL SYLLABLE PHIEUPH E THIEUTH + {0xBC84, 0xD3B2}, //10136 #HANGUL SYLLABLE PHIEUPH E PHIEUPH + {0xBC85, 0xD3B3}, //10137 #HANGUL SYLLABLE PHIEUPH E HIEUH + {0xBC86, 0xD3B5}, //10138 #HANGUL SYLLABLE PHIEUPH YEO KIYEOK + {0xBC87, 0xD3B6}, //10139 #HANGUL SYLLABLE PHIEUPH YEO SSANGKIYEOK + {0xBC88, 0xD3B7}, //10140 #HANGUL SYLLABLE PHIEUPH YEO KIYEOKSIOS + {0xBC89, 0xD3B9}, //10141 #HANGUL SYLLABLE PHIEUPH YEO NIEUNCIEUC + {0xBC8A, 0xD3BA}, //10142 #HANGUL SYLLABLE PHIEUPH YEO NIEUNHIEUH + {0xBC8B, 0xD3BB}, //10143 #HANGUL SYLLABLE PHIEUPH YEO TIKEUT + {0xBC8C, 0xD3BD}, //10144 #HANGUL SYLLABLE PHIEUPH YEO RIEULKIYEOK + {0xBC8D, 0xD3BE}, //10145 #HANGUL SYLLABLE PHIEUPH YEO RIEULMIEUM + {0xBC8E, 0xD3BF}, //10146 #HANGUL SYLLABLE PHIEUPH YEO RIEULPIEUP + {0xBC8F, 0xD3C0}, //10147 #HANGUL SYLLABLE PHIEUPH YEO RIEULSIOS + {0xBC90, 0xD3C1}, //10148 #HANGUL SYLLABLE PHIEUPH YEO RIEULTHIEUTH + {0xBC91, 0xD3C2}, //10149 #HANGUL SYLLABLE PHIEUPH YEO RIEULPHIEUPH + {0xBC92, 0xD3C3}, //10150 #HANGUL SYLLABLE PHIEUPH YEO RIEULHIEUH + {0xBC93, 0xD3C6}, //10151 #HANGUL SYLLABLE PHIEUPH YEO PIEUPSIOS + {0xBC94, 0xD3C7}, //10152 #HANGUL SYLLABLE PHIEUPH YEO SIOS + {0xBC95, 0xD3CA}, //10153 #HANGUL SYLLABLE PHIEUPH YEO CIEUC + {0xBC96, 0xD3CB}, //10154 #HANGUL SYLLABLE PHIEUPH YEO CHIEUCH + {0xBC97, 0xD3CC}, //10155 #HANGUL SYLLABLE PHIEUPH YEO KHIEUKH + {0xBC98, 0xD3CD}, //10156 #HANGUL SYLLABLE PHIEUPH YEO THIEUTH + {0xBC99, 0xD3CE}, //10157 #HANGUL SYLLABLE PHIEUPH YEO PHIEUPH + {0xBC9A, 0xD3CF}, //10158 #HANGUL SYLLABLE PHIEUPH YEO HIEUH + {0xBC9B, 0xD3D1}, //10159 #HANGUL SYLLABLE PHIEUPH YE KIYEOK + {0xBC9C, 0xD3D2}, //10160 #HANGUL SYLLABLE PHIEUPH YE SSANGKIYEOK + {0xBC9D, 0xD3D3}, //10161 #HANGUL SYLLABLE PHIEUPH YE KIYEOKSIOS + {0xBC9E, 0xD3D4}, //10162 #HANGUL SYLLABLE PHIEUPH YE NIEUN + {0xBC9F, 0xD3D5}, //10163 #HANGUL SYLLABLE PHIEUPH YE NIEUNCIEUC + {0xBCA0, 0xD3D6}, //10164 #HANGUL SYLLABLE PHIEUPH YE NIEUNHIEUH + {0xBCA1, 0xC0E5}, //10165 #HANGUL SYLLABLE SIOS YA KIYEOK + {0xBCA2, 0xC0E8}, //10166 #HANGUL SYLLABLE SIOS YA NIEUN + {0xBCA3, 0xC0EC}, //10167 #HANGUL SYLLABLE SIOS YA RIEUL + {0xBCA4, 0xC0F4}, //10168 #HANGUL SYLLABLE SIOS YA MIEUM + {0xBCA5, 0xC0F5}, //10169 #HANGUL SYLLABLE SIOS YA PIEUP + {0xBCA6, 0xC0F7}, //10170 #HANGUL SYLLABLE SIOS YA SIOS + {0xBCA7, 0xC0F9}, //10171 #HANGUL SYLLABLE SIOS YA IEUNG + {0xBCA8, 0xC100}, //10172 #HANGUL SYLLABLE SIOS YAE + {0xBCA9, 0xC104}, //10173 #HANGUL SYLLABLE SIOS YAE NIEUN + {0xBCAA, 0xC108}, //10174 #HANGUL SYLLABLE SIOS YAE RIEUL + {0xBCAB, 0xC110}, //10175 #HANGUL SYLLABLE SIOS YAE MIEUM + {0xBCAC, 0xC115}, //10176 #HANGUL SYLLABLE SIOS YAE IEUNG + {0xBCAD, 0xC11C}, //10177 #HANGUL SYLLABLE SIOS EO + {0xBCAE, 0xC11D}, //10178 #HANGUL SYLLABLE SIOS EO KIYEOK + {0xBCAF, 0xC11E}, //10179 #HANGUL SYLLABLE SIOS EO SSANGKIYEOK + {0xBCB0, 0xC11F}, //10180 #HANGUL SYLLABLE SIOS EO KIYEOKSIOS + {0xBCB1, 0xC120}, //10181 #HANGUL SYLLABLE SIOS EO NIEUN + {0xBCB2, 0xC123}, //10182 #HANGUL SYLLABLE SIOS EO TIKEUT + {0xBCB3, 0xC124}, //10183 #HANGUL SYLLABLE SIOS EO RIEUL + {0xBCB4, 0xC126}, //10184 #HANGUL SYLLABLE SIOS EO RIEULMIEUM + {0xBCB5, 0xC127}, //10185 #HANGUL SYLLABLE SIOS EO RIEULPIEUP + {0xBCB6, 0xC12C}, //10186 #HANGUL SYLLABLE SIOS EO MIEUM + {0xBCB7, 0xC12D}, //10187 #HANGUL SYLLABLE SIOS EO PIEUP + {0xBCB8, 0xC12F}, //10188 #HANGUL SYLLABLE SIOS EO SIOS + {0xBCB9, 0xC130}, //10189 #HANGUL SYLLABLE SIOS EO SSANGSIOS + {0xBCBA, 0xC131}, //10190 #HANGUL SYLLABLE SIOS EO IEUNG + {0xBCBB, 0xC136}, //10191 #HANGUL SYLLABLE SIOS EO PHIEUPH + {0xBCBC, 0xC138}, //10192 #HANGUL SYLLABLE SIOS E + {0xBCBD, 0xC139}, //10193 #HANGUL SYLLABLE SIOS E KIYEOK + {0xBCBE, 0xC13C}, //10194 #HANGUL SYLLABLE SIOS E NIEUN + {0xBCBF, 0xC140}, //10195 #HANGUL SYLLABLE SIOS E RIEUL + {0xBCC0, 0xC148}, //10196 #HANGUL SYLLABLE SIOS E MIEUM + {0xBCC1, 0xC149}, //10197 #HANGUL SYLLABLE SIOS E PIEUP + {0xBCC2, 0xC14B}, //10198 #HANGUL SYLLABLE SIOS E SIOS + {0xBCC3, 0xC14C}, //10199 #HANGUL SYLLABLE SIOS E SSANGSIOS + {0xBCC4, 0xC14D}, //10200 #HANGUL SYLLABLE SIOS E IEUNG + {0xBCC5, 0xC154}, //10201 #HANGUL SYLLABLE SIOS YEO + {0xBCC6, 0xC155}, //10202 #HANGUL SYLLABLE SIOS YEO KIYEOK + {0xBCC7, 0xC158}, //10203 #HANGUL SYLLABLE SIOS YEO NIEUN + {0xBCC8, 0xC15C}, //10204 #HANGUL SYLLABLE SIOS YEO RIEUL + {0xBCC9, 0xC164}, //10205 #HANGUL SYLLABLE SIOS YEO MIEUM + {0xBCCA, 0xC165}, //10206 #HANGUL SYLLABLE SIOS YEO PIEUP + {0xBCCB, 0xC167}, //10207 #HANGUL SYLLABLE SIOS YEO SIOS + {0xBCCC, 0xC168}, //10208 #HANGUL SYLLABLE SIOS YEO SSANGSIOS + {0xBCCD, 0xC169}, //10209 #HANGUL SYLLABLE SIOS YEO IEUNG + {0xBCCE, 0xC170}, //10210 #HANGUL SYLLABLE SIOS YE + {0xBCCF, 0xC174}, //10211 #HANGUL SYLLABLE SIOS YE NIEUN + {0xBCD0, 0xC178}, //10212 #HANGUL SYLLABLE SIOS YE RIEUL + {0xBCD1, 0xC185}, //10213 #HANGUL SYLLABLE SIOS YE IEUNG + {0xBCD2, 0xC18C}, //10214 #HANGUL SYLLABLE SIOS O + {0xBCD3, 0xC18D}, //10215 #HANGUL SYLLABLE SIOS O KIYEOK + {0xBCD4, 0xC18E}, //10216 #HANGUL SYLLABLE SIOS O SSANGKIYEOK + {0xBCD5, 0xC190}, //10217 #HANGUL SYLLABLE SIOS O NIEUN + {0xBCD6, 0xC194}, //10218 #HANGUL SYLLABLE SIOS O RIEUL + {0xBCD7, 0xC196}, //10219 #HANGUL SYLLABLE SIOS O RIEULMIEUM + {0xBCD8, 0xC19C}, //10220 #HANGUL SYLLABLE SIOS O MIEUM + {0xBCD9, 0xC19D}, //10221 #HANGUL SYLLABLE SIOS O PIEUP + {0xBCDA, 0xC19F}, //10222 #HANGUL SYLLABLE SIOS O SIOS + {0xBCDB, 0xC1A1}, //10223 #HANGUL SYLLABLE SIOS O IEUNG + {0xBCDC, 0xC1A5}, //10224 #HANGUL SYLLABLE SIOS O THIEUTH + {0xBCDD, 0xC1A8}, //10225 #HANGUL SYLLABLE SIOS WA + {0xBCDE, 0xC1A9}, //10226 #HANGUL SYLLABLE SIOS WA KIYEOK + {0xBCDF, 0xC1AC}, //10227 #HANGUL SYLLABLE SIOS WA NIEUN + {0xBCE0, 0xC1B0}, //10228 #HANGUL SYLLABLE SIOS WA RIEUL + {0xBCE1, 0xC1BD}, //10229 #HANGUL SYLLABLE SIOS WA IEUNG + {0xBCE2, 0xC1C4}, //10230 #HANGUL SYLLABLE SIOS WAE + {0xBCE3, 0xC1C8}, //10231 #HANGUL SYLLABLE SIOS WAE NIEUN + {0xBCE4, 0xC1CC}, //10232 #HANGUL SYLLABLE SIOS WAE RIEUL + {0xBCE5, 0xC1D4}, //10233 #HANGUL SYLLABLE SIOS WAE MIEUM + {0xBCE6, 0xC1D7}, //10234 #HANGUL SYLLABLE SIOS WAE SIOS + {0xBCE7, 0xC1D8}, //10235 #HANGUL SYLLABLE SIOS WAE SSANGSIOS + {0xBCE8, 0xC1E0}, //10236 #HANGUL SYLLABLE SIOS OE + {0xBCE9, 0xC1E4}, //10237 #HANGUL SYLLABLE SIOS OE NIEUN + {0xBCEA, 0xC1E8}, //10238 #HANGUL SYLLABLE SIOS OE RIEUL + {0xBCEB, 0xC1F0}, //10239 #HANGUL SYLLABLE SIOS OE MIEUM + {0xBCEC, 0xC1F1}, //10240 #HANGUL SYLLABLE SIOS OE PIEUP + {0xBCED, 0xC1F3}, //10241 #HANGUL SYLLABLE SIOS OE SIOS + {0xBCEE, 0xC1FC}, //10242 #HANGUL SYLLABLE SIOS YO + {0xBCEF, 0xC1FD}, //10243 #HANGUL SYLLABLE SIOS YO KIYEOK + {0xBCF0, 0xC200}, //10244 #HANGUL SYLLABLE SIOS YO NIEUN + {0xBCF1, 0xC204}, //10245 #HANGUL SYLLABLE SIOS YO RIEUL + {0xBCF2, 0xC20C}, //10246 #HANGUL SYLLABLE SIOS YO MIEUM + {0xBCF3, 0xC20D}, //10247 #HANGUL SYLLABLE SIOS YO PIEUP + {0xBCF4, 0xC20F}, //10248 #HANGUL SYLLABLE SIOS YO SIOS + {0xBCF5, 0xC211}, //10249 #HANGUL SYLLABLE SIOS YO IEUNG + {0xBCF6, 0xC218}, //10250 #HANGUL SYLLABLE SIOS U + {0xBCF7, 0xC219}, //10251 #HANGUL SYLLABLE SIOS U KIYEOK + {0xBCF8, 0xC21C}, //10252 #HANGUL SYLLABLE SIOS U NIEUN + {0xBCF9, 0xC21F}, //10253 #HANGUL SYLLABLE SIOS U TIKEUT + {0xBCFA, 0xC220}, //10254 #HANGUL SYLLABLE SIOS U RIEUL + {0xBCFB, 0xC228}, //10255 #HANGUL SYLLABLE SIOS U MIEUM + {0xBCFC, 0xC229}, //10256 #HANGUL SYLLABLE SIOS U PIEUP + {0xBCFD, 0xC22B}, //10257 #HANGUL SYLLABLE SIOS U SIOS + {0xBCFE, 0xC22D}, //10258 #HANGUL SYLLABLE SIOS U IEUNG + {0xBD41, 0xD3D7}, //10259 #HANGUL SYLLABLE PHIEUPH YE TIKEUT + {0xBD42, 0xD3D9}, //10260 #HANGUL SYLLABLE PHIEUPH YE RIEULKIYEOK + {0xBD43, 0xD3DA}, //10261 #HANGUL SYLLABLE PHIEUPH YE RIEULMIEUM + {0xBD44, 0xD3DB}, //10262 #HANGUL SYLLABLE PHIEUPH YE RIEULPIEUP + {0xBD45, 0xD3DC}, //10263 #HANGUL SYLLABLE PHIEUPH YE RIEULSIOS + {0xBD46, 0xD3DD}, //10264 #HANGUL SYLLABLE PHIEUPH YE RIEULTHIEUTH + {0xBD47, 0xD3DE}, //10265 #HANGUL SYLLABLE PHIEUPH YE RIEULPHIEUPH + {0xBD48, 0xD3DF}, //10266 #HANGUL SYLLABLE PHIEUPH YE RIEULHIEUH + {0xBD49, 0xD3E0}, //10267 #HANGUL SYLLABLE PHIEUPH YE MIEUM + {0xBD4A, 0xD3E2}, //10268 #HANGUL SYLLABLE PHIEUPH YE PIEUPSIOS + {0xBD4B, 0xD3E4}, //10269 #HANGUL SYLLABLE PHIEUPH YE SSANGSIOS + {0xBD4C, 0xD3E5}, //10270 #HANGUL SYLLABLE PHIEUPH YE IEUNG + {0xBD4D, 0xD3E6}, //10271 #HANGUL SYLLABLE PHIEUPH YE CIEUC + {0xBD4E, 0xD3E7}, //10272 #HANGUL SYLLABLE PHIEUPH YE CHIEUCH + {0xBD4F, 0xD3E8}, //10273 #HANGUL SYLLABLE PHIEUPH YE KHIEUKH + {0xBD50, 0xD3E9}, //10274 #HANGUL SYLLABLE PHIEUPH YE THIEUTH + {0xBD51, 0xD3EA}, //10275 #HANGUL SYLLABLE PHIEUPH YE PHIEUPH + {0xBD52, 0xD3EB}, //10276 #HANGUL SYLLABLE PHIEUPH YE HIEUH + {0xBD53, 0xD3EE}, //10277 #HANGUL SYLLABLE PHIEUPH O SSANGKIYEOK + {0xBD54, 0xD3EF}, //10278 #HANGUL SYLLABLE PHIEUPH O KIYEOKSIOS + {0xBD55, 0xD3F1}, //10279 #HANGUL SYLLABLE PHIEUPH O NIEUNCIEUC + {0xBD56, 0xD3F2}, //10280 #HANGUL SYLLABLE PHIEUPH O NIEUNHIEUH + {0xBD57, 0xD3F3}, //10281 #HANGUL SYLLABLE PHIEUPH O TIKEUT + {0xBD58, 0xD3F5}, //10282 #HANGUL SYLLABLE PHIEUPH O RIEULKIYEOK + {0xBD59, 0xD3F6}, //10283 #HANGUL SYLLABLE PHIEUPH O RIEULMIEUM + {0xBD5A, 0xD3F7}, //10284 #HANGUL SYLLABLE PHIEUPH O RIEULPIEUP + {0xBD61, 0xD3F8}, //10285 #HANGUL SYLLABLE PHIEUPH O RIEULSIOS + {0xBD62, 0xD3F9}, //10286 #HANGUL SYLLABLE PHIEUPH O RIEULTHIEUTH + {0xBD63, 0xD3FA}, //10287 #HANGUL SYLLABLE PHIEUPH O RIEULPHIEUPH + {0xBD64, 0xD3FB}, //10288 #HANGUL SYLLABLE PHIEUPH O RIEULHIEUH + {0xBD65, 0xD3FE}, //10289 #HANGUL SYLLABLE PHIEUPH O PIEUPSIOS + {0xBD66, 0xD400}, //10290 #HANGUL SYLLABLE PHIEUPH O SSANGSIOS + {0xBD67, 0xD402}, //10291 #HANGUL SYLLABLE PHIEUPH O CIEUC + {0xBD68, 0xD403}, //10292 #HANGUL SYLLABLE PHIEUPH O CHIEUCH + {0xBD69, 0xD404}, //10293 #HANGUL SYLLABLE PHIEUPH O KHIEUKH + {0xBD6A, 0xD405}, //10294 #HANGUL SYLLABLE PHIEUPH O THIEUTH + {0xBD6B, 0xD406}, //10295 #HANGUL SYLLABLE PHIEUPH O PHIEUPH + {0xBD6C, 0xD407}, //10296 #HANGUL SYLLABLE PHIEUPH O HIEUH + {0xBD6D, 0xD409}, //10297 #HANGUL SYLLABLE PHIEUPH WA KIYEOK + {0xBD6E, 0xD40A}, //10298 #HANGUL SYLLABLE PHIEUPH WA SSANGKIYEOK + {0xBD6F, 0xD40B}, //10299 #HANGUL SYLLABLE PHIEUPH WA KIYEOKSIOS + {0xBD70, 0xD40C}, //10300 #HANGUL SYLLABLE PHIEUPH WA NIEUN + {0xBD71, 0xD40D}, //10301 #HANGUL SYLLABLE PHIEUPH WA NIEUNCIEUC + {0xBD72, 0xD40E}, //10302 #HANGUL SYLLABLE PHIEUPH WA NIEUNHIEUH + {0xBD73, 0xD40F}, //10303 #HANGUL SYLLABLE PHIEUPH WA TIKEUT + {0xBD74, 0xD410}, //10304 #HANGUL SYLLABLE PHIEUPH WA RIEUL + {0xBD75, 0xD411}, //10305 #HANGUL SYLLABLE PHIEUPH WA RIEULKIYEOK + {0xBD76, 0xD412}, //10306 #HANGUL SYLLABLE PHIEUPH WA RIEULMIEUM + {0xBD77, 0xD413}, //10307 #HANGUL SYLLABLE PHIEUPH WA RIEULPIEUP + {0xBD78, 0xD414}, //10308 #HANGUL SYLLABLE PHIEUPH WA RIEULSIOS + {0xBD79, 0xD415}, //10309 #HANGUL SYLLABLE PHIEUPH WA RIEULTHIEUTH + {0xBD7A, 0xD416}, //10310 #HANGUL SYLLABLE PHIEUPH WA RIEULPHIEUPH + {0xBD81, 0xD417}, //10311 #HANGUL SYLLABLE PHIEUPH WA RIEULHIEUH + {0xBD82, 0xD418}, //10312 #HANGUL SYLLABLE PHIEUPH WA MIEUM + {0xBD83, 0xD419}, //10313 #HANGUL SYLLABLE PHIEUPH WA PIEUP + {0xBD84, 0xD41A}, //10314 #HANGUL SYLLABLE PHIEUPH WA PIEUPSIOS + {0xBD85, 0xD41B}, //10315 #HANGUL SYLLABLE PHIEUPH WA SIOS + {0xBD86, 0xD41C}, //10316 #HANGUL SYLLABLE PHIEUPH WA SSANGSIOS + {0xBD87, 0xD41E}, //10317 #HANGUL SYLLABLE PHIEUPH WA CIEUC + {0xBD88, 0xD41F}, //10318 #HANGUL SYLLABLE PHIEUPH WA CHIEUCH + {0xBD89, 0xD420}, //10319 #HANGUL SYLLABLE PHIEUPH WA KHIEUKH + {0xBD8A, 0xD421}, //10320 #HANGUL SYLLABLE PHIEUPH WA THIEUTH + {0xBD8B, 0xD422}, //10321 #HANGUL SYLLABLE PHIEUPH WA PHIEUPH + {0xBD8C, 0xD423}, //10322 #HANGUL SYLLABLE PHIEUPH WA HIEUH + {0xBD8D, 0xD424}, //10323 #HANGUL SYLLABLE PHIEUPH WAE + {0xBD8E, 0xD425}, //10324 #HANGUL SYLLABLE PHIEUPH WAE KIYEOK + {0xBD8F, 0xD426}, //10325 #HANGUL SYLLABLE PHIEUPH WAE SSANGKIYEOK + {0xBD90, 0xD427}, //10326 #HANGUL SYLLABLE PHIEUPH WAE KIYEOKSIOS + {0xBD91, 0xD428}, //10327 #HANGUL SYLLABLE PHIEUPH WAE NIEUN + {0xBD92, 0xD429}, //10328 #HANGUL SYLLABLE PHIEUPH WAE NIEUNCIEUC + {0xBD93, 0xD42A}, //10329 #HANGUL SYLLABLE PHIEUPH WAE NIEUNHIEUH + {0xBD94, 0xD42B}, //10330 #HANGUL SYLLABLE PHIEUPH WAE TIKEUT + {0xBD95, 0xD42C}, //10331 #HANGUL SYLLABLE PHIEUPH WAE RIEUL + {0xBD96, 0xD42D}, //10332 #HANGUL SYLLABLE PHIEUPH WAE RIEULKIYEOK + {0xBD97, 0xD42E}, //10333 #HANGUL SYLLABLE PHIEUPH WAE RIEULMIEUM + {0xBD98, 0xD42F}, //10334 #HANGUL SYLLABLE PHIEUPH WAE RIEULPIEUP + {0xBD99, 0xD430}, //10335 #HANGUL SYLLABLE PHIEUPH WAE RIEULSIOS + {0xBD9A, 0xD431}, //10336 #HANGUL SYLLABLE PHIEUPH WAE RIEULTHIEUTH + {0xBD9B, 0xD432}, //10337 #HANGUL SYLLABLE PHIEUPH WAE RIEULPHIEUPH + {0xBD9C, 0xD433}, //10338 #HANGUL SYLLABLE PHIEUPH WAE RIEULHIEUH + {0xBD9D, 0xD434}, //10339 #HANGUL SYLLABLE PHIEUPH WAE MIEUM + {0xBD9E, 0xD435}, //10340 #HANGUL SYLLABLE PHIEUPH WAE PIEUP + {0xBD9F, 0xD436}, //10341 #HANGUL SYLLABLE PHIEUPH WAE PIEUPSIOS + {0xBDA0, 0xD437}, //10342 #HANGUL SYLLABLE PHIEUPH WAE SIOS + {0xBDA1, 0xC22F}, //10343 #HANGUL SYLLABLE SIOS U CHIEUCH + {0xBDA2, 0xC231}, //10344 #HANGUL SYLLABLE SIOS U THIEUTH + {0xBDA3, 0xC232}, //10345 #HANGUL SYLLABLE SIOS U PHIEUPH + {0xBDA4, 0xC234}, //10346 #HANGUL SYLLABLE SIOS WEO + {0xBDA5, 0xC248}, //10347 #HANGUL SYLLABLE SIOS WEO SSANGSIOS + {0xBDA6, 0xC250}, //10348 #HANGUL SYLLABLE SIOS WE + {0xBDA7, 0xC251}, //10349 #HANGUL SYLLABLE SIOS WE KIYEOK + {0xBDA8, 0xC254}, //10350 #HANGUL SYLLABLE SIOS WE NIEUN + {0xBDA9, 0xC258}, //10351 #HANGUL SYLLABLE SIOS WE RIEUL + {0xBDAA, 0xC260}, //10352 #HANGUL SYLLABLE SIOS WE MIEUM + {0xBDAB, 0xC265}, //10353 #HANGUL SYLLABLE SIOS WE IEUNG + {0xBDAC, 0xC26C}, //10354 #HANGUL SYLLABLE SIOS WI + {0xBDAD, 0xC26D}, //10355 #HANGUL SYLLABLE SIOS WI KIYEOK + {0xBDAE, 0xC270}, //10356 #HANGUL SYLLABLE SIOS WI NIEUN + {0xBDAF, 0xC274}, //10357 #HANGUL SYLLABLE SIOS WI RIEUL + {0xBDB0, 0xC27C}, //10358 #HANGUL SYLLABLE SIOS WI MIEUM + {0xBDB1, 0xC27D}, //10359 #HANGUL SYLLABLE SIOS WI PIEUP + {0xBDB2, 0xC27F}, //10360 #HANGUL SYLLABLE SIOS WI SIOS + {0xBDB3, 0xC281}, //10361 #HANGUL SYLLABLE SIOS WI IEUNG + {0xBDB4, 0xC288}, //10362 #HANGUL SYLLABLE SIOS YU + {0xBDB5, 0xC289}, //10363 #HANGUL SYLLABLE SIOS YU KIYEOK + {0xBDB6, 0xC290}, //10364 #HANGUL SYLLABLE SIOS YU RIEUL + {0xBDB7, 0xC298}, //10365 #HANGUL SYLLABLE SIOS YU MIEUM + {0xBDB8, 0xC29B}, //10366 #HANGUL SYLLABLE SIOS YU SIOS + {0xBDB9, 0xC29D}, //10367 #HANGUL SYLLABLE SIOS YU IEUNG + {0xBDBA, 0xC2A4}, //10368 #HANGUL SYLLABLE SIOS EU + {0xBDBB, 0xC2A5}, //10369 #HANGUL SYLLABLE SIOS EU KIYEOK + {0xBDBC, 0xC2A8}, //10370 #HANGUL SYLLABLE SIOS EU NIEUN + {0xBDBD, 0xC2AC}, //10371 #HANGUL SYLLABLE SIOS EU RIEUL + {0xBDBE, 0xC2AD}, //10372 #HANGUL SYLLABLE SIOS EU RIEULKIYEOK + {0xBDBF, 0xC2B4}, //10373 #HANGUL SYLLABLE SIOS EU MIEUM + {0xBDC0, 0xC2B5}, //10374 #HANGUL SYLLABLE SIOS EU PIEUP + {0xBDC1, 0xC2B7}, //10375 #HANGUL SYLLABLE SIOS EU SIOS + {0xBDC2, 0xC2B9}, //10376 #HANGUL SYLLABLE SIOS EU IEUNG + {0xBDC3, 0xC2DC}, //10377 #HANGUL SYLLABLE SIOS I + {0xBDC4, 0xC2DD}, //10378 #HANGUL SYLLABLE SIOS I KIYEOK + {0xBDC5, 0xC2E0}, //10379 #HANGUL SYLLABLE SIOS I NIEUN + {0xBDC6, 0xC2E3}, //10380 #HANGUL SYLLABLE SIOS I TIKEUT + {0xBDC7, 0xC2E4}, //10381 #HANGUL SYLLABLE SIOS I RIEUL + {0xBDC8, 0xC2EB}, //10382 #HANGUL SYLLABLE SIOS I RIEULHIEUH + {0xBDC9, 0xC2EC}, //10383 #HANGUL SYLLABLE SIOS I MIEUM + {0xBDCA, 0xC2ED}, //10384 #HANGUL SYLLABLE SIOS I PIEUP + {0xBDCB, 0xC2EF}, //10385 #HANGUL SYLLABLE SIOS I SIOS + {0xBDCC, 0xC2F1}, //10386 #HANGUL SYLLABLE SIOS I IEUNG + {0xBDCD, 0xC2F6}, //10387 #HANGUL SYLLABLE SIOS I PHIEUPH + {0xBDCE, 0xC2F8}, //10388 #HANGUL SYLLABLE SSANGSIOS A + {0xBDCF, 0xC2F9}, //10389 #HANGUL SYLLABLE SSANGSIOS A KIYEOK + {0xBDD0, 0xC2FB}, //10390 #HANGUL SYLLABLE SSANGSIOS A KIYEOKSIOS + {0xBDD1, 0xC2FC}, //10391 #HANGUL SYLLABLE SSANGSIOS A NIEUN + {0xBDD2, 0xC300}, //10392 #HANGUL SYLLABLE SSANGSIOS A RIEUL + {0xBDD3, 0xC308}, //10393 #HANGUL SYLLABLE SSANGSIOS A MIEUM + {0xBDD4, 0xC309}, //10394 #HANGUL SYLLABLE SSANGSIOS A PIEUP + {0xBDD5, 0xC30C}, //10395 #HANGUL SYLLABLE SSANGSIOS A SSANGSIOS + {0xBDD6, 0xC30D}, //10396 #HANGUL SYLLABLE SSANGSIOS A IEUNG + {0xBDD7, 0xC313}, //10397 #HANGUL SYLLABLE SSANGSIOS A HIEUH + {0xBDD8, 0xC314}, //10398 #HANGUL SYLLABLE SSANGSIOS AE + {0xBDD9, 0xC315}, //10399 #HANGUL SYLLABLE SSANGSIOS AE KIYEOK + {0xBDDA, 0xC318}, //10400 #HANGUL SYLLABLE SSANGSIOS AE NIEUN + {0xBDDB, 0xC31C}, //10401 #HANGUL SYLLABLE SSANGSIOS AE RIEUL + {0xBDDC, 0xC324}, //10402 #HANGUL SYLLABLE SSANGSIOS AE MIEUM + {0xBDDD, 0xC325}, //10403 #HANGUL SYLLABLE SSANGSIOS AE PIEUP + {0xBDDE, 0xC328}, //10404 #HANGUL SYLLABLE SSANGSIOS AE SSANGSIOS + {0xBDDF, 0xC329}, //10405 #HANGUL SYLLABLE SSANGSIOS AE IEUNG + {0xBDE0, 0xC345}, //10406 #HANGUL SYLLABLE SSANGSIOS YA IEUNG + {0xBDE1, 0xC368}, //10407 #HANGUL SYLLABLE SSANGSIOS EO + {0xBDE2, 0xC369}, //10408 #HANGUL SYLLABLE SSANGSIOS EO KIYEOK + {0xBDE3, 0xC36C}, //10409 #HANGUL SYLLABLE SSANGSIOS EO NIEUN + {0xBDE4, 0xC370}, //10410 #HANGUL SYLLABLE SSANGSIOS EO RIEUL + {0xBDE5, 0xC372}, //10411 #HANGUL SYLLABLE SSANGSIOS EO RIEULMIEUM + {0xBDE6, 0xC378}, //10412 #HANGUL SYLLABLE SSANGSIOS EO MIEUM + {0xBDE7, 0xC379}, //10413 #HANGUL SYLLABLE SSANGSIOS EO PIEUP + {0xBDE8, 0xC37C}, //10414 #HANGUL SYLLABLE SSANGSIOS EO SSANGSIOS + {0xBDE9, 0xC37D}, //10415 #HANGUL SYLLABLE SSANGSIOS EO IEUNG + {0xBDEA, 0xC384}, //10416 #HANGUL SYLLABLE SSANGSIOS E + {0xBDEB, 0xC388}, //10417 #HANGUL SYLLABLE SSANGSIOS E NIEUN + {0xBDEC, 0xC38C}, //10418 #HANGUL SYLLABLE SSANGSIOS E RIEUL + {0xBDED, 0xC3C0}, //10419 #HANGUL SYLLABLE SSANGSIOS YE NIEUN + {0xBDEE, 0xC3D8}, //10420 #HANGUL SYLLABLE SSANGSIOS O + {0xBDEF, 0xC3D9}, //10421 #HANGUL SYLLABLE SSANGSIOS O KIYEOK + {0xBDF0, 0xC3DC}, //10422 #HANGUL SYLLABLE SSANGSIOS O NIEUN + {0xBDF1, 0xC3DF}, //10423 #HANGUL SYLLABLE SSANGSIOS O TIKEUT + {0xBDF2, 0xC3E0}, //10424 #HANGUL SYLLABLE SSANGSIOS O RIEUL + {0xBDF3, 0xC3E2}, //10425 #HANGUL SYLLABLE SSANGSIOS O RIEULMIEUM + {0xBDF4, 0xC3E8}, //10426 #HANGUL SYLLABLE SSANGSIOS O MIEUM + {0xBDF5, 0xC3E9}, //10427 #HANGUL SYLLABLE SSANGSIOS O PIEUP + {0xBDF6, 0xC3ED}, //10428 #HANGUL SYLLABLE SSANGSIOS O IEUNG + {0xBDF7, 0xC3F4}, //10429 #HANGUL SYLLABLE SSANGSIOS WA + {0xBDF8, 0xC3F5}, //10430 #HANGUL SYLLABLE SSANGSIOS WA KIYEOK + {0xBDF9, 0xC3F8}, //10431 #HANGUL SYLLABLE SSANGSIOS WA NIEUN + {0xBDFA, 0xC408}, //10432 #HANGUL SYLLABLE SSANGSIOS WA SSANGSIOS + {0xBDFB, 0xC410}, //10433 #HANGUL SYLLABLE SSANGSIOS WAE + {0xBDFC, 0xC424}, //10434 #HANGUL SYLLABLE SSANGSIOS WAE SSANGSIOS + {0xBDFD, 0xC42C}, //10435 #HANGUL SYLLABLE SSANGSIOS OE + {0xBDFE, 0xC430}, //10436 #HANGUL SYLLABLE SSANGSIOS OE NIEUN + {0xBE41, 0xD438}, //10437 #HANGUL SYLLABLE PHIEUPH WAE SSANGSIOS + {0xBE42, 0xD439}, //10438 #HANGUL SYLLABLE PHIEUPH WAE IEUNG + {0xBE43, 0xD43A}, //10439 #HANGUL SYLLABLE PHIEUPH WAE CIEUC + {0xBE44, 0xD43B}, //10440 #HANGUL SYLLABLE PHIEUPH WAE CHIEUCH + {0xBE45, 0xD43C}, //10441 #HANGUL SYLLABLE PHIEUPH WAE KHIEUKH + {0xBE46, 0xD43D}, //10442 #HANGUL SYLLABLE PHIEUPH WAE THIEUTH + {0xBE47, 0xD43E}, //10443 #HANGUL SYLLABLE PHIEUPH WAE PHIEUPH + {0xBE48, 0xD43F}, //10444 #HANGUL SYLLABLE PHIEUPH WAE HIEUH + {0xBE49, 0xD441}, //10445 #HANGUL SYLLABLE PHIEUPH OE KIYEOK + {0xBE4A, 0xD442}, //10446 #HANGUL SYLLABLE PHIEUPH OE SSANGKIYEOK + {0xBE4B, 0xD443}, //10447 #HANGUL SYLLABLE PHIEUPH OE KIYEOKSIOS + {0xBE4C, 0xD445}, //10448 #HANGUL SYLLABLE PHIEUPH OE NIEUNCIEUC + {0xBE4D, 0xD446}, //10449 #HANGUL SYLLABLE PHIEUPH OE NIEUNHIEUH + {0xBE4E, 0xD447}, //10450 #HANGUL SYLLABLE PHIEUPH OE TIKEUT + {0xBE4F, 0xD448}, //10451 #HANGUL SYLLABLE PHIEUPH OE RIEUL + {0xBE50, 0xD449}, //10452 #HANGUL SYLLABLE PHIEUPH OE RIEULKIYEOK + {0xBE51, 0xD44A}, //10453 #HANGUL SYLLABLE PHIEUPH OE RIEULMIEUM + {0xBE52, 0xD44B}, //10454 #HANGUL SYLLABLE PHIEUPH OE RIEULPIEUP + {0xBE53, 0xD44C}, //10455 #HANGUL SYLLABLE PHIEUPH OE RIEULSIOS + {0xBE54, 0xD44D}, //10456 #HANGUL SYLLABLE PHIEUPH OE RIEULTHIEUTH + {0xBE55, 0xD44E}, //10457 #HANGUL SYLLABLE PHIEUPH OE RIEULPHIEUPH + {0xBE56, 0xD44F}, //10458 #HANGUL SYLLABLE PHIEUPH OE RIEULHIEUH + {0xBE57, 0xD450}, //10459 #HANGUL SYLLABLE PHIEUPH OE MIEUM + {0xBE58, 0xD451}, //10460 #HANGUL SYLLABLE PHIEUPH OE PIEUP + {0xBE59, 0xD452}, //10461 #HANGUL SYLLABLE PHIEUPH OE PIEUPSIOS + {0xBE5A, 0xD453}, //10462 #HANGUL SYLLABLE PHIEUPH OE SIOS + {0xBE61, 0xD454}, //10463 #HANGUL SYLLABLE PHIEUPH OE SSANGSIOS + {0xBE62, 0xD455}, //10464 #HANGUL SYLLABLE PHIEUPH OE IEUNG + {0xBE63, 0xD456}, //10465 #HANGUL SYLLABLE PHIEUPH OE CIEUC + {0xBE64, 0xD457}, //10466 #HANGUL SYLLABLE PHIEUPH OE CHIEUCH + {0xBE65, 0xD458}, //10467 #HANGUL SYLLABLE PHIEUPH OE KHIEUKH + {0xBE66, 0xD459}, //10468 #HANGUL SYLLABLE PHIEUPH OE THIEUTH + {0xBE67, 0xD45A}, //10469 #HANGUL SYLLABLE PHIEUPH OE PHIEUPH + {0xBE68, 0xD45B}, //10470 #HANGUL SYLLABLE PHIEUPH OE HIEUH + {0xBE69, 0xD45D}, //10471 #HANGUL SYLLABLE PHIEUPH YO KIYEOK + {0xBE6A, 0xD45E}, //10472 #HANGUL SYLLABLE PHIEUPH YO SSANGKIYEOK + {0xBE6B, 0xD45F}, //10473 #HANGUL SYLLABLE PHIEUPH YO KIYEOKSIOS + {0xBE6C, 0xD461}, //10474 #HANGUL SYLLABLE PHIEUPH YO NIEUNCIEUC + {0xBE6D, 0xD462}, //10475 #HANGUL SYLLABLE PHIEUPH YO NIEUNHIEUH + {0xBE6E, 0xD463}, //10476 #HANGUL SYLLABLE PHIEUPH YO TIKEUT + {0xBE6F, 0xD465}, //10477 #HANGUL SYLLABLE PHIEUPH YO RIEULKIYEOK + {0xBE70, 0xD466}, //10478 #HANGUL SYLLABLE PHIEUPH YO RIEULMIEUM + {0xBE71, 0xD467}, //10479 #HANGUL SYLLABLE PHIEUPH YO RIEULPIEUP + {0xBE72, 0xD468}, //10480 #HANGUL SYLLABLE PHIEUPH YO RIEULSIOS + {0xBE73, 0xD469}, //10481 #HANGUL SYLLABLE PHIEUPH YO RIEULTHIEUTH + {0xBE74, 0xD46A}, //10482 #HANGUL SYLLABLE PHIEUPH YO RIEULPHIEUPH + {0xBE75, 0xD46B}, //10483 #HANGUL SYLLABLE PHIEUPH YO RIEULHIEUH + {0xBE76, 0xD46C}, //10484 #HANGUL SYLLABLE PHIEUPH YO MIEUM + {0xBE77, 0xD46E}, //10485 #HANGUL SYLLABLE PHIEUPH YO PIEUPSIOS + {0xBE78, 0xD470}, //10486 #HANGUL SYLLABLE PHIEUPH YO SSANGSIOS + {0xBE79, 0xD471}, //10487 #HANGUL SYLLABLE PHIEUPH YO IEUNG + {0xBE7A, 0xD472}, //10488 #HANGUL SYLLABLE PHIEUPH YO CIEUC + {0xBE81, 0xD473}, //10489 #HANGUL SYLLABLE PHIEUPH YO CHIEUCH + {0xBE82, 0xD474}, //10490 #HANGUL SYLLABLE PHIEUPH YO KHIEUKH + {0xBE83, 0xD475}, //10491 #HANGUL SYLLABLE PHIEUPH YO THIEUTH + {0xBE84, 0xD476}, //10492 #HANGUL SYLLABLE PHIEUPH YO PHIEUPH + {0xBE85, 0xD477}, //10493 #HANGUL SYLLABLE PHIEUPH YO HIEUH + {0xBE86, 0xD47A}, //10494 #HANGUL SYLLABLE PHIEUPH U SSANGKIYEOK + {0xBE87, 0xD47B}, //10495 #HANGUL SYLLABLE PHIEUPH U KIYEOKSIOS + {0xBE88, 0xD47D}, //10496 #HANGUL SYLLABLE PHIEUPH U NIEUNCIEUC + {0xBE89, 0xD47E}, //10497 #HANGUL SYLLABLE PHIEUPH U NIEUNHIEUH + {0xBE8A, 0xD481}, //10498 #HANGUL SYLLABLE PHIEUPH U RIEULKIYEOK + {0xBE8B, 0xD483}, //10499 #HANGUL SYLLABLE PHIEUPH U RIEULPIEUP + {0xBE8C, 0xD484}, //10500 #HANGUL SYLLABLE PHIEUPH U RIEULSIOS + {0xBE8D, 0xD485}, //10501 #HANGUL SYLLABLE PHIEUPH U RIEULTHIEUTH + {0xBE8E, 0xD486}, //10502 #HANGUL SYLLABLE PHIEUPH U RIEULPHIEUPH + {0xBE8F, 0xD487}, //10503 #HANGUL SYLLABLE PHIEUPH U RIEULHIEUH + {0xBE90, 0xD48A}, //10504 #HANGUL SYLLABLE PHIEUPH U PIEUPSIOS + {0xBE91, 0xD48C}, //10505 #HANGUL SYLLABLE PHIEUPH U SSANGSIOS + {0xBE92, 0xD48E}, //10506 #HANGUL SYLLABLE PHIEUPH U CIEUC + {0xBE93, 0xD48F}, //10507 #HANGUL SYLLABLE PHIEUPH U CHIEUCH + {0xBE94, 0xD490}, //10508 #HANGUL SYLLABLE PHIEUPH U KHIEUKH + {0xBE95, 0xD491}, //10509 #HANGUL SYLLABLE PHIEUPH U THIEUTH + {0xBE96, 0xD492}, //10510 #HANGUL SYLLABLE PHIEUPH U PHIEUPH + {0xBE97, 0xD493}, //10511 #HANGUL SYLLABLE PHIEUPH U HIEUH + {0xBE98, 0xD495}, //10512 #HANGUL SYLLABLE PHIEUPH WEO KIYEOK + {0xBE99, 0xD496}, //10513 #HANGUL SYLLABLE PHIEUPH WEO SSANGKIYEOK + {0xBE9A, 0xD497}, //10514 #HANGUL SYLLABLE PHIEUPH WEO KIYEOKSIOS + {0xBE9B, 0xD498}, //10515 #HANGUL SYLLABLE PHIEUPH WEO NIEUN + {0xBE9C, 0xD499}, //10516 #HANGUL SYLLABLE PHIEUPH WEO NIEUNCIEUC + {0xBE9D, 0xD49A}, //10517 #HANGUL SYLLABLE PHIEUPH WEO NIEUNHIEUH + {0xBE9E, 0xD49B}, //10518 #HANGUL SYLLABLE PHIEUPH WEO TIKEUT + {0xBE9F, 0xD49C}, //10519 #HANGUL SYLLABLE PHIEUPH WEO RIEUL + {0xBEA0, 0xD49D}, //10520 #HANGUL SYLLABLE PHIEUPH WEO RIEULKIYEOK + {0xBEA1, 0xC434}, //10521 #HANGUL SYLLABLE SSANGSIOS OE RIEUL + {0xBEA2, 0xC43C}, //10522 #HANGUL SYLLABLE SSANGSIOS OE MIEUM + {0xBEA3, 0xC43D}, //10523 #HANGUL SYLLABLE SSANGSIOS OE PIEUP + {0xBEA4, 0xC448}, //10524 #HANGUL SYLLABLE SSANGSIOS YO + {0xBEA5, 0xC464}, //10525 #HANGUL SYLLABLE SSANGSIOS U + {0xBEA6, 0xC465}, //10526 #HANGUL SYLLABLE SSANGSIOS U KIYEOK + {0xBEA7, 0xC468}, //10527 #HANGUL SYLLABLE SSANGSIOS U NIEUN + {0xBEA8, 0xC46C}, //10528 #HANGUL SYLLABLE SSANGSIOS U RIEUL + {0xBEA9, 0xC474}, //10529 #HANGUL SYLLABLE SSANGSIOS U MIEUM + {0xBEAA, 0xC475}, //10530 #HANGUL SYLLABLE SSANGSIOS U PIEUP + {0xBEAB, 0xC479}, //10531 #HANGUL SYLLABLE SSANGSIOS U IEUNG + {0xBEAC, 0xC480}, //10532 #HANGUL SYLLABLE SSANGSIOS WEO + {0xBEAD, 0xC494}, //10533 #HANGUL SYLLABLE SSANGSIOS WEO SSANGSIOS + {0xBEAE, 0xC49C}, //10534 #HANGUL SYLLABLE SSANGSIOS WE + {0xBEAF, 0xC4B8}, //10535 #HANGUL SYLLABLE SSANGSIOS WI + {0xBEB0, 0xC4BC}, //10536 #HANGUL SYLLABLE SSANGSIOS WI NIEUN + {0xBEB1, 0xC4E9}, //10537 #HANGUL SYLLABLE SSANGSIOS YU IEUNG + {0xBEB2, 0xC4F0}, //10538 #HANGUL SYLLABLE SSANGSIOS EU + {0xBEB3, 0xC4F1}, //10539 #HANGUL SYLLABLE SSANGSIOS EU KIYEOK + {0xBEB4, 0xC4F4}, //10540 #HANGUL SYLLABLE SSANGSIOS EU NIEUN + {0xBEB5, 0xC4F8}, //10541 #HANGUL SYLLABLE SSANGSIOS EU RIEUL + {0xBEB6, 0xC4FA}, //10542 #HANGUL SYLLABLE SSANGSIOS EU RIEULMIEUM + {0xBEB7, 0xC4FF}, //10543 #HANGUL SYLLABLE SSANGSIOS EU RIEULHIEUH + {0xBEB8, 0xC500}, //10544 #HANGUL SYLLABLE SSANGSIOS EU MIEUM + {0xBEB9, 0xC501}, //10545 #HANGUL SYLLABLE SSANGSIOS EU PIEUP + {0xBEBA, 0xC50C}, //10546 #HANGUL SYLLABLE SSANGSIOS YI + {0xBEBB, 0xC510}, //10547 #HANGUL SYLLABLE SSANGSIOS YI NIEUN + {0xBEBC, 0xC514}, //10548 #HANGUL SYLLABLE SSANGSIOS YI RIEUL + {0xBEBD, 0xC51C}, //10549 #HANGUL SYLLABLE SSANGSIOS YI MIEUM + {0xBEBE, 0xC528}, //10550 #HANGUL SYLLABLE SSANGSIOS I + {0xBEBF, 0xC529}, //10551 #HANGUL SYLLABLE SSANGSIOS I KIYEOK + {0xBEC0, 0xC52C}, //10552 #HANGUL SYLLABLE SSANGSIOS I NIEUN + {0xBEC1, 0xC530}, //10553 #HANGUL SYLLABLE SSANGSIOS I RIEUL + {0xBEC2, 0xC538}, //10554 #HANGUL SYLLABLE SSANGSIOS I MIEUM + {0xBEC3, 0xC539}, //10555 #HANGUL SYLLABLE SSANGSIOS I PIEUP + {0xBEC4, 0xC53B}, //10556 #HANGUL SYLLABLE SSANGSIOS I SIOS + {0xBEC5, 0xC53D}, //10557 #HANGUL SYLLABLE SSANGSIOS I IEUNG + {0xBEC6, 0xC544}, //10558 #HANGUL SYLLABLE IEUNG A + {0xBEC7, 0xC545}, //10559 #HANGUL SYLLABLE IEUNG A KIYEOK + {0xBEC8, 0xC548}, //10560 #HANGUL SYLLABLE IEUNG A NIEUN + {0xBEC9, 0xC549}, //10561 #HANGUL SYLLABLE IEUNG A NIEUNCIEUC + {0xBECA, 0xC54A}, //10562 #HANGUL SYLLABLE IEUNG A NIEUNHIEUH + {0xBECB, 0xC54C}, //10563 #HANGUL SYLLABLE IEUNG A RIEUL + {0xBECC, 0xC54D}, //10564 #HANGUL SYLLABLE IEUNG A RIEULKIYEOK + {0xBECD, 0xC54E}, //10565 #HANGUL SYLLABLE IEUNG A RIEULMIEUM + {0xBECE, 0xC553}, //10566 #HANGUL SYLLABLE IEUNG A RIEULHIEUH + {0xBECF, 0xC554}, //10567 #HANGUL SYLLABLE IEUNG A MIEUM + {0xBED0, 0xC555}, //10568 #HANGUL SYLLABLE IEUNG A PIEUP + {0xBED1, 0xC557}, //10569 #HANGUL SYLLABLE IEUNG A SIOS + {0xBED2, 0xC558}, //10570 #HANGUL SYLLABLE IEUNG A SSANGSIOS + {0xBED3, 0xC559}, //10571 #HANGUL SYLLABLE IEUNG A IEUNG + {0xBED4, 0xC55D}, //10572 #HANGUL SYLLABLE IEUNG A THIEUTH + {0xBED5, 0xC55E}, //10573 #HANGUL SYLLABLE IEUNG A PHIEUPH + {0xBED6, 0xC560}, //10574 #HANGUL SYLLABLE IEUNG AE + {0xBED7, 0xC561}, //10575 #HANGUL SYLLABLE IEUNG AE KIYEOK + {0xBED8, 0xC564}, //10576 #HANGUL SYLLABLE IEUNG AE NIEUN + {0xBED9, 0xC568}, //10577 #HANGUL SYLLABLE IEUNG AE RIEUL + {0xBEDA, 0xC570}, //10578 #HANGUL SYLLABLE IEUNG AE MIEUM + {0xBEDB, 0xC571}, //10579 #HANGUL SYLLABLE IEUNG AE PIEUP + {0xBEDC, 0xC573}, //10580 #HANGUL SYLLABLE IEUNG AE SIOS + {0xBEDD, 0xC574}, //10581 #HANGUL SYLLABLE IEUNG AE SSANGSIOS + {0xBEDE, 0xC575}, //10582 #HANGUL SYLLABLE IEUNG AE IEUNG + {0xBEDF, 0xC57C}, //10583 #HANGUL SYLLABLE IEUNG YA + {0xBEE0, 0xC57D}, //10584 #HANGUL SYLLABLE IEUNG YA KIYEOK + {0xBEE1, 0xC580}, //10585 #HANGUL SYLLABLE IEUNG YA NIEUN + {0xBEE2, 0xC584}, //10586 #HANGUL SYLLABLE IEUNG YA RIEUL + {0xBEE3, 0xC587}, //10587 #HANGUL SYLLABLE IEUNG YA RIEULPIEUP + {0xBEE4, 0xC58C}, //10588 #HANGUL SYLLABLE IEUNG YA MIEUM + {0xBEE5, 0xC58D}, //10589 #HANGUL SYLLABLE IEUNG YA PIEUP + {0xBEE6, 0xC58F}, //10590 #HANGUL SYLLABLE IEUNG YA SIOS + {0xBEE7, 0xC591}, //10591 #HANGUL SYLLABLE IEUNG YA IEUNG + {0xBEE8, 0xC595}, //10592 #HANGUL SYLLABLE IEUNG YA THIEUTH + {0xBEE9, 0xC597}, //10593 #HANGUL SYLLABLE IEUNG YA HIEUH + {0xBEEA, 0xC598}, //10594 #HANGUL SYLLABLE IEUNG YAE + {0xBEEB, 0xC59C}, //10595 #HANGUL SYLLABLE IEUNG YAE NIEUN + {0xBEEC, 0xC5A0}, //10596 #HANGUL SYLLABLE IEUNG YAE RIEUL + {0xBEED, 0xC5A9}, //10597 #HANGUL SYLLABLE IEUNG YAE PIEUP + {0xBEEE, 0xC5B4}, //10598 #HANGUL SYLLABLE IEUNG EO + {0xBEEF, 0xC5B5}, //10599 #HANGUL SYLLABLE IEUNG EO KIYEOK + {0xBEF0, 0xC5B8}, //10600 #HANGUL SYLLABLE IEUNG EO NIEUN + {0xBEF1, 0xC5B9}, //10601 #HANGUL SYLLABLE IEUNG EO NIEUNCIEUC + {0xBEF2, 0xC5BB}, //10602 #HANGUL SYLLABLE IEUNG EO TIKEUT + {0xBEF3, 0xC5BC}, //10603 #HANGUL SYLLABLE IEUNG EO RIEUL + {0xBEF4, 0xC5BD}, //10604 #HANGUL SYLLABLE IEUNG EO RIEULKIYEOK + {0xBEF5, 0xC5BE}, //10605 #HANGUL SYLLABLE IEUNG EO RIEULMIEUM + {0xBEF6, 0xC5C4}, //10606 #HANGUL SYLLABLE IEUNG EO MIEUM + {0xBEF7, 0xC5C5}, //10607 #HANGUL SYLLABLE IEUNG EO PIEUP + {0xBEF8, 0xC5C6}, //10608 #HANGUL SYLLABLE IEUNG EO PIEUPSIOS + {0xBEF9, 0xC5C7}, //10609 #HANGUL SYLLABLE IEUNG EO SIOS + {0xBEFA, 0xC5C8}, //10610 #HANGUL SYLLABLE IEUNG EO SSANGSIOS + {0xBEFB, 0xC5C9}, //10611 #HANGUL SYLLABLE IEUNG EO IEUNG + {0xBEFC, 0xC5CA}, //10612 #HANGUL SYLLABLE IEUNG EO CIEUC + {0xBEFD, 0xC5CC}, //10613 #HANGUL SYLLABLE IEUNG EO KHIEUKH + {0xBEFE, 0xC5CE}, //10614 #HANGUL SYLLABLE IEUNG EO PHIEUPH + {0xBF41, 0xD49E}, //10615 #HANGUL SYLLABLE PHIEUPH WEO RIEULMIEUM + {0xBF42, 0xD49F}, //10616 #HANGUL SYLLABLE PHIEUPH WEO RIEULPIEUP + {0xBF43, 0xD4A0}, //10617 #HANGUL SYLLABLE PHIEUPH WEO RIEULSIOS + {0xBF44, 0xD4A1}, //10618 #HANGUL SYLLABLE PHIEUPH WEO RIEULTHIEUTH + {0xBF45, 0xD4A2}, //10619 #HANGUL SYLLABLE PHIEUPH WEO RIEULPHIEUPH + {0xBF46, 0xD4A3}, //10620 #HANGUL SYLLABLE PHIEUPH WEO RIEULHIEUH + {0xBF47, 0xD4A4}, //10621 #HANGUL SYLLABLE PHIEUPH WEO MIEUM + {0xBF48, 0xD4A5}, //10622 #HANGUL SYLLABLE PHIEUPH WEO PIEUP + {0xBF49, 0xD4A6}, //10623 #HANGUL SYLLABLE PHIEUPH WEO PIEUPSIOS + {0xBF4A, 0xD4A7}, //10624 #HANGUL SYLLABLE PHIEUPH WEO SIOS + {0xBF4B, 0xD4A8}, //10625 #HANGUL SYLLABLE PHIEUPH WEO SSANGSIOS + {0xBF4C, 0xD4AA}, //10626 #HANGUL SYLLABLE PHIEUPH WEO CIEUC + {0xBF4D, 0xD4AB}, //10627 #HANGUL SYLLABLE PHIEUPH WEO CHIEUCH + {0xBF4E, 0xD4AC}, //10628 #HANGUL SYLLABLE PHIEUPH WEO KHIEUKH + {0xBF4F, 0xD4AD}, //10629 #HANGUL SYLLABLE PHIEUPH WEO THIEUTH + {0xBF50, 0xD4AE}, //10630 #HANGUL SYLLABLE PHIEUPH WEO PHIEUPH + {0xBF51, 0xD4AF}, //10631 #HANGUL SYLLABLE PHIEUPH WEO HIEUH + {0xBF52, 0xD4B0}, //10632 #HANGUL SYLLABLE PHIEUPH WE + {0xBF53, 0xD4B1}, //10633 #HANGUL SYLLABLE PHIEUPH WE KIYEOK + {0xBF54, 0xD4B2}, //10634 #HANGUL SYLLABLE PHIEUPH WE SSANGKIYEOK + {0xBF55, 0xD4B3}, //10635 #HANGUL SYLLABLE PHIEUPH WE KIYEOKSIOS + {0xBF56, 0xD4B4}, //10636 #HANGUL SYLLABLE PHIEUPH WE NIEUN + {0xBF57, 0xD4B5}, //10637 #HANGUL SYLLABLE PHIEUPH WE NIEUNCIEUC + {0xBF58, 0xD4B6}, //10638 #HANGUL SYLLABLE PHIEUPH WE NIEUNHIEUH + {0xBF59, 0xD4B7}, //10639 #HANGUL SYLLABLE PHIEUPH WE TIKEUT + {0xBF5A, 0xD4B8}, //10640 #HANGUL SYLLABLE PHIEUPH WE RIEUL + {0xBF61, 0xD4B9}, //10641 #HANGUL SYLLABLE PHIEUPH WE RIEULKIYEOK + {0xBF62, 0xD4BA}, //10642 #HANGUL SYLLABLE PHIEUPH WE RIEULMIEUM + {0xBF63, 0xD4BB}, //10643 #HANGUL SYLLABLE PHIEUPH WE RIEULPIEUP + {0xBF64, 0xD4BC}, //10644 #HANGUL SYLLABLE PHIEUPH WE RIEULSIOS + {0xBF65, 0xD4BD}, //10645 #HANGUL SYLLABLE PHIEUPH WE RIEULTHIEUTH + {0xBF66, 0xD4BE}, //10646 #HANGUL SYLLABLE PHIEUPH WE RIEULPHIEUPH + {0xBF67, 0xD4BF}, //10647 #HANGUL SYLLABLE PHIEUPH WE RIEULHIEUH + {0xBF68, 0xD4C0}, //10648 #HANGUL SYLLABLE PHIEUPH WE MIEUM + {0xBF69, 0xD4C1}, //10649 #HANGUL SYLLABLE PHIEUPH WE PIEUP + {0xBF6A, 0xD4C2}, //10650 #HANGUL SYLLABLE PHIEUPH WE PIEUPSIOS + {0xBF6B, 0xD4C3}, //10651 #HANGUL SYLLABLE PHIEUPH WE SIOS + {0xBF6C, 0xD4C4}, //10652 #HANGUL SYLLABLE PHIEUPH WE SSANGSIOS + {0xBF6D, 0xD4C5}, //10653 #HANGUL SYLLABLE PHIEUPH WE IEUNG + {0xBF6E, 0xD4C6}, //10654 #HANGUL SYLLABLE PHIEUPH WE CIEUC + {0xBF6F, 0xD4C7}, //10655 #HANGUL SYLLABLE PHIEUPH WE CHIEUCH + {0xBF70, 0xD4C8}, //10656 #HANGUL SYLLABLE PHIEUPH WE KHIEUKH + {0xBF71, 0xD4C9}, //10657 #HANGUL SYLLABLE PHIEUPH WE THIEUTH + {0xBF72, 0xD4CA}, //10658 #HANGUL SYLLABLE PHIEUPH WE PHIEUPH + {0xBF73, 0xD4CB}, //10659 #HANGUL SYLLABLE PHIEUPH WE HIEUH + {0xBF74, 0xD4CD}, //10660 #HANGUL SYLLABLE PHIEUPH WI KIYEOK + {0xBF75, 0xD4CE}, //10661 #HANGUL SYLLABLE PHIEUPH WI SSANGKIYEOK + {0xBF76, 0xD4CF}, //10662 #HANGUL SYLLABLE PHIEUPH WI KIYEOKSIOS + {0xBF77, 0xD4D1}, //10663 #HANGUL SYLLABLE PHIEUPH WI NIEUNCIEUC + {0xBF78, 0xD4D2}, //10664 #HANGUL SYLLABLE PHIEUPH WI NIEUNHIEUH + {0xBF79, 0xD4D3}, //10665 #HANGUL SYLLABLE PHIEUPH WI TIKEUT + {0xBF7A, 0xD4D5}, //10666 #HANGUL SYLLABLE PHIEUPH WI RIEULKIYEOK + {0xBF81, 0xD4D6}, //10667 #HANGUL SYLLABLE PHIEUPH WI RIEULMIEUM + {0xBF82, 0xD4D7}, //10668 #HANGUL SYLLABLE PHIEUPH WI RIEULPIEUP + {0xBF83, 0xD4D8}, //10669 #HANGUL SYLLABLE PHIEUPH WI RIEULSIOS + {0xBF84, 0xD4D9}, //10670 #HANGUL SYLLABLE PHIEUPH WI RIEULTHIEUTH + {0xBF85, 0xD4DA}, //10671 #HANGUL SYLLABLE PHIEUPH WI RIEULPHIEUPH + {0xBF86, 0xD4DB}, //10672 #HANGUL SYLLABLE PHIEUPH WI RIEULHIEUH + {0xBF87, 0xD4DD}, //10673 #HANGUL SYLLABLE PHIEUPH WI PIEUP + {0xBF88, 0xD4DE}, //10674 #HANGUL SYLLABLE PHIEUPH WI PIEUPSIOS + {0xBF89, 0xD4E0}, //10675 #HANGUL SYLLABLE PHIEUPH WI SSANGSIOS + {0xBF8A, 0xD4E1}, //10676 #HANGUL SYLLABLE PHIEUPH WI IEUNG + {0xBF8B, 0xD4E2}, //10677 #HANGUL SYLLABLE PHIEUPH WI CIEUC + {0xBF8C, 0xD4E3}, //10678 #HANGUL SYLLABLE PHIEUPH WI CHIEUCH + {0xBF8D, 0xD4E4}, //10679 #HANGUL SYLLABLE PHIEUPH WI KHIEUKH + {0xBF8E, 0xD4E5}, //10680 #HANGUL SYLLABLE PHIEUPH WI THIEUTH + {0xBF8F, 0xD4E6}, //10681 #HANGUL SYLLABLE PHIEUPH WI PHIEUPH + {0xBF90, 0xD4E7}, //10682 #HANGUL SYLLABLE PHIEUPH WI HIEUH + {0xBF91, 0xD4E9}, //10683 #HANGUL SYLLABLE PHIEUPH YU KIYEOK + {0xBF92, 0xD4EA}, //10684 #HANGUL SYLLABLE PHIEUPH YU SSANGKIYEOK + {0xBF93, 0xD4EB}, //10685 #HANGUL SYLLABLE PHIEUPH YU KIYEOKSIOS + {0xBF94, 0xD4ED}, //10686 #HANGUL SYLLABLE PHIEUPH YU NIEUNCIEUC + {0xBF95, 0xD4EE}, //10687 #HANGUL SYLLABLE PHIEUPH YU NIEUNHIEUH + {0xBF96, 0xD4EF}, //10688 #HANGUL SYLLABLE PHIEUPH YU TIKEUT + {0xBF97, 0xD4F1}, //10689 #HANGUL SYLLABLE PHIEUPH YU RIEULKIYEOK + {0xBF98, 0xD4F2}, //10690 #HANGUL SYLLABLE PHIEUPH YU RIEULMIEUM + {0xBF99, 0xD4F3}, //10691 #HANGUL SYLLABLE PHIEUPH YU RIEULPIEUP + {0xBF9A, 0xD4F4}, //10692 #HANGUL SYLLABLE PHIEUPH YU RIEULSIOS + {0xBF9B, 0xD4F5}, //10693 #HANGUL SYLLABLE PHIEUPH YU RIEULTHIEUTH + {0xBF9C, 0xD4F6}, //10694 #HANGUL SYLLABLE PHIEUPH YU RIEULPHIEUPH + {0xBF9D, 0xD4F7}, //10695 #HANGUL SYLLABLE PHIEUPH YU RIEULHIEUH + {0xBF9E, 0xD4F9}, //10696 #HANGUL SYLLABLE PHIEUPH YU PIEUP + {0xBF9F, 0xD4FA}, //10697 #HANGUL SYLLABLE PHIEUPH YU PIEUPSIOS + {0xBFA0, 0xD4FC}, //10698 #HANGUL SYLLABLE PHIEUPH YU SSANGSIOS + {0xBFA1, 0xC5D0}, //10699 #HANGUL SYLLABLE IEUNG E + {0xBFA2, 0xC5D1}, //10700 #HANGUL SYLLABLE IEUNG E KIYEOK + {0xBFA3, 0xC5D4}, //10701 #HANGUL SYLLABLE IEUNG E NIEUN + {0xBFA4, 0xC5D8}, //10702 #HANGUL SYLLABLE IEUNG E RIEUL + {0xBFA5, 0xC5E0}, //10703 #HANGUL SYLLABLE IEUNG E MIEUM + {0xBFA6, 0xC5E1}, //10704 #HANGUL SYLLABLE IEUNG E PIEUP + {0xBFA7, 0xC5E3}, //10705 #HANGUL SYLLABLE IEUNG E SIOS + {0xBFA8, 0xC5E5}, //10706 #HANGUL SYLLABLE IEUNG E IEUNG + {0xBFA9, 0xC5EC}, //10707 #HANGUL SYLLABLE IEUNG YEO + {0xBFAA, 0xC5ED}, //10708 #HANGUL SYLLABLE IEUNG YEO KIYEOK + {0xBFAB, 0xC5EE}, //10709 #HANGUL SYLLABLE IEUNG YEO SSANGKIYEOK + {0xBFAC, 0xC5F0}, //10710 #HANGUL SYLLABLE IEUNG YEO NIEUN + {0xBFAD, 0xC5F4}, //10711 #HANGUL SYLLABLE IEUNG YEO RIEUL + {0xBFAE, 0xC5F6}, //10712 #HANGUL SYLLABLE IEUNG YEO RIEULMIEUM + {0xBFAF, 0xC5F7}, //10713 #HANGUL SYLLABLE IEUNG YEO RIEULPIEUP + {0xBFB0, 0xC5FC}, //10714 #HANGUL SYLLABLE IEUNG YEO MIEUM + {0xBFB1, 0xC5FD}, //10715 #HANGUL SYLLABLE IEUNG YEO PIEUP + {0xBFB2, 0xC5FE}, //10716 #HANGUL SYLLABLE IEUNG YEO PIEUPSIOS + {0xBFB3, 0xC5FF}, //10717 #HANGUL SYLLABLE IEUNG YEO SIOS + {0xBFB4, 0xC600}, //10718 #HANGUL SYLLABLE IEUNG YEO SSANGSIOS + {0xBFB5, 0xC601}, //10719 #HANGUL SYLLABLE IEUNG YEO IEUNG + {0xBFB6, 0xC605}, //10720 #HANGUL SYLLABLE IEUNG YEO THIEUTH + {0xBFB7, 0xC606}, //10721 #HANGUL SYLLABLE IEUNG YEO PHIEUPH + {0xBFB8, 0xC607}, //10722 #HANGUL SYLLABLE IEUNG YEO HIEUH + {0xBFB9, 0xC608}, //10723 #HANGUL SYLLABLE IEUNG YE + {0xBFBA, 0xC60C}, //10724 #HANGUL SYLLABLE IEUNG YE NIEUN + {0xBFBB, 0xC610}, //10725 #HANGUL SYLLABLE IEUNG YE RIEUL + {0xBFBC, 0xC618}, //10726 #HANGUL SYLLABLE IEUNG YE MIEUM + {0xBFBD, 0xC619}, //10727 #HANGUL SYLLABLE IEUNG YE PIEUP + {0xBFBE, 0xC61B}, //10728 #HANGUL SYLLABLE IEUNG YE SIOS + {0xBFBF, 0xC61C}, //10729 #HANGUL SYLLABLE IEUNG YE SSANGSIOS + {0xBFC0, 0xC624}, //10730 #HANGUL SYLLABLE IEUNG O + {0xBFC1, 0xC625}, //10731 #HANGUL SYLLABLE IEUNG O KIYEOK + {0xBFC2, 0xC628}, //10732 #HANGUL SYLLABLE IEUNG O NIEUN + {0xBFC3, 0xC62C}, //10733 #HANGUL SYLLABLE IEUNG O RIEUL + {0xBFC4, 0xC62D}, //10734 #HANGUL SYLLABLE IEUNG O RIEULKIYEOK + {0xBFC5, 0xC62E}, //10735 #HANGUL SYLLABLE IEUNG O RIEULMIEUM + {0xBFC6, 0xC630}, //10736 #HANGUL SYLLABLE IEUNG O RIEULSIOS + {0xBFC7, 0xC633}, //10737 #HANGUL SYLLABLE IEUNG O RIEULHIEUH + {0xBFC8, 0xC634}, //10738 #HANGUL SYLLABLE IEUNG O MIEUM + {0xBFC9, 0xC635}, //10739 #HANGUL SYLLABLE IEUNG O PIEUP + {0xBFCA, 0xC637}, //10740 #HANGUL SYLLABLE IEUNG O SIOS + {0xBFCB, 0xC639}, //10741 #HANGUL SYLLABLE IEUNG O IEUNG + {0xBFCC, 0xC63B}, //10742 #HANGUL SYLLABLE IEUNG O CHIEUCH + {0xBFCD, 0xC640}, //10743 #HANGUL SYLLABLE IEUNG WA + {0xBFCE, 0xC641}, //10744 #HANGUL SYLLABLE IEUNG WA KIYEOK + {0xBFCF, 0xC644}, //10745 #HANGUL SYLLABLE IEUNG WA NIEUN + {0xBFD0, 0xC648}, //10746 #HANGUL SYLLABLE IEUNG WA RIEUL + {0xBFD1, 0xC650}, //10747 #HANGUL SYLLABLE IEUNG WA MIEUM + {0xBFD2, 0xC651}, //10748 #HANGUL SYLLABLE IEUNG WA PIEUP + {0xBFD3, 0xC653}, //10749 #HANGUL SYLLABLE IEUNG WA SIOS + {0xBFD4, 0xC654}, //10750 #HANGUL SYLLABLE IEUNG WA SSANGSIOS + {0xBFD5, 0xC655}, //10751 #HANGUL SYLLABLE IEUNG WA IEUNG + {0xBFD6, 0xC65C}, //10752 #HANGUL SYLLABLE IEUNG WAE + {0xBFD7, 0xC65D}, //10753 #HANGUL SYLLABLE IEUNG WAE KIYEOK + {0xBFD8, 0xC660}, //10754 #HANGUL SYLLABLE IEUNG WAE NIEUN + {0xBFD9, 0xC66C}, //10755 #HANGUL SYLLABLE IEUNG WAE MIEUM + {0xBFDA, 0xC66F}, //10756 #HANGUL SYLLABLE IEUNG WAE SIOS + {0xBFDB, 0xC671}, //10757 #HANGUL SYLLABLE IEUNG WAE IEUNG + {0xBFDC, 0xC678}, //10758 #HANGUL SYLLABLE IEUNG OE + {0xBFDD, 0xC679}, //10759 #HANGUL SYLLABLE IEUNG OE KIYEOK + {0xBFDE, 0xC67C}, //10760 #HANGUL SYLLABLE IEUNG OE NIEUN + {0xBFDF, 0xC680}, //10761 #HANGUL SYLLABLE IEUNG OE RIEUL + {0xBFE0, 0xC688}, //10762 #HANGUL SYLLABLE IEUNG OE MIEUM + {0xBFE1, 0xC689}, //10763 #HANGUL SYLLABLE IEUNG OE PIEUP + {0xBFE2, 0xC68B}, //10764 #HANGUL SYLLABLE IEUNG OE SIOS + {0xBFE3, 0xC68D}, //10765 #HANGUL SYLLABLE IEUNG OE IEUNG + {0xBFE4, 0xC694}, //10766 #HANGUL SYLLABLE IEUNG YO + {0xBFE5, 0xC695}, //10767 #HANGUL SYLLABLE IEUNG YO KIYEOK + {0xBFE6, 0xC698}, //10768 #HANGUL SYLLABLE IEUNG YO NIEUN + {0xBFE7, 0xC69C}, //10769 #HANGUL SYLLABLE IEUNG YO RIEUL + {0xBFE8, 0xC6A4}, //10770 #HANGUL SYLLABLE IEUNG YO MIEUM + {0xBFE9, 0xC6A5}, //10771 #HANGUL SYLLABLE IEUNG YO PIEUP + {0xBFEA, 0xC6A7}, //10772 #HANGUL SYLLABLE IEUNG YO SIOS + {0xBFEB, 0xC6A9}, //10773 #HANGUL SYLLABLE IEUNG YO IEUNG + {0xBFEC, 0xC6B0}, //10774 #HANGUL SYLLABLE IEUNG U + {0xBFED, 0xC6B1}, //10775 #HANGUL SYLLABLE IEUNG U KIYEOK + {0xBFEE, 0xC6B4}, //10776 #HANGUL SYLLABLE IEUNG U NIEUN + {0xBFEF, 0xC6B8}, //10777 #HANGUL SYLLABLE IEUNG U RIEUL + {0xBFF0, 0xC6B9}, //10778 #HANGUL SYLLABLE IEUNG U RIEULKIYEOK + {0xBFF1, 0xC6BA}, //10779 #HANGUL SYLLABLE IEUNG U RIEULMIEUM + {0xBFF2, 0xC6C0}, //10780 #HANGUL SYLLABLE IEUNG U MIEUM + {0xBFF3, 0xC6C1}, //10781 #HANGUL SYLLABLE IEUNG U PIEUP + {0xBFF4, 0xC6C3}, //10782 #HANGUL SYLLABLE IEUNG U SIOS + {0xBFF5, 0xC6C5}, //10783 #HANGUL SYLLABLE IEUNG U IEUNG + {0xBFF6, 0xC6CC}, //10784 #HANGUL SYLLABLE IEUNG WEO + {0xBFF7, 0xC6CD}, //10785 #HANGUL SYLLABLE IEUNG WEO KIYEOK + {0xBFF8, 0xC6D0}, //10786 #HANGUL SYLLABLE IEUNG WEO NIEUN + {0xBFF9, 0xC6D4}, //10787 #HANGUL SYLLABLE IEUNG WEO RIEUL + {0xBFFA, 0xC6DC}, //10788 #HANGUL SYLLABLE IEUNG WEO MIEUM + {0xBFFB, 0xC6DD}, //10789 #HANGUL SYLLABLE IEUNG WEO PIEUP + {0xBFFC, 0xC6E0}, //10790 #HANGUL SYLLABLE IEUNG WEO SSANGSIOS + {0xBFFD, 0xC6E1}, //10791 #HANGUL SYLLABLE IEUNG WEO IEUNG + {0xBFFE, 0xC6E8}, //10792 #HANGUL SYLLABLE IEUNG WE + {0xC041, 0xD4FE}, //10793 #HANGUL SYLLABLE PHIEUPH YU CIEUC + {0xC042, 0xD4FF}, //10794 #HANGUL SYLLABLE PHIEUPH YU CHIEUCH + {0xC043, 0xD500}, //10795 #HANGUL SYLLABLE PHIEUPH YU KHIEUKH + {0xC044, 0xD501}, //10796 #HANGUL SYLLABLE PHIEUPH YU THIEUTH + {0xC045, 0xD502}, //10797 #HANGUL SYLLABLE PHIEUPH YU PHIEUPH + {0xC046, 0xD503}, //10798 #HANGUL SYLLABLE PHIEUPH YU HIEUH + {0xC047, 0xD505}, //10799 #HANGUL SYLLABLE PHIEUPH EU KIYEOK + {0xC048, 0xD506}, //10800 #HANGUL SYLLABLE PHIEUPH EU SSANGKIYEOK + {0xC049, 0xD507}, //10801 #HANGUL SYLLABLE PHIEUPH EU KIYEOKSIOS + {0xC04A, 0xD509}, //10802 #HANGUL SYLLABLE PHIEUPH EU NIEUNCIEUC + {0xC04B, 0xD50A}, //10803 #HANGUL SYLLABLE PHIEUPH EU NIEUNHIEUH + {0xC04C, 0xD50B}, //10804 #HANGUL SYLLABLE PHIEUPH EU TIKEUT + {0xC04D, 0xD50D}, //10805 #HANGUL SYLLABLE PHIEUPH EU RIEULKIYEOK + {0xC04E, 0xD50E}, //10806 #HANGUL SYLLABLE PHIEUPH EU RIEULMIEUM + {0xC04F, 0xD50F}, //10807 #HANGUL SYLLABLE PHIEUPH EU RIEULPIEUP + {0xC050, 0xD510}, //10808 #HANGUL SYLLABLE PHIEUPH EU RIEULSIOS + {0xC051, 0xD511}, //10809 #HANGUL SYLLABLE PHIEUPH EU RIEULTHIEUTH + {0xC052, 0xD512}, //10810 #HANGUL SYLLABLE PHIEUPH EU RIEULPHIEUPH + {0xC053, 0xD513}, //10811 #HANGUL SYLLABLE PHIEUPH EU RIEULHIEUH + {0xC054, 0xD516}, //10812 #HANGUL SYLLABLE PHIEUPH EU PIEUPSIOS + {0xC055, 0xD518}, //10813 #HANGUL SYLLABLE PHIEUPH EU SSANGSIOS + {0xC056, 0xD519}, //10814 #HANGUL SYLLABLE PHIEUPH EU IEUNG + {0xC057, 0xD51A}, //10815 #HANGUL SYLLABLE PHIEUPH EU CIEUC + {0xC058, 0xD51B}, //10816 #HANGUL SYLLABLE PHIEUPH EU CHIEUCH + {0xC059, 0xD51C}, //10817 #HANGUL SYLLABLE PHIEUPH EU KHIEUKH + {0xC05A, 0xD51D}, //10818 #HANGUL SYLLABLE PHIEUPH EU THIEUTH + {0xC061, 0xD51E}, //10819 #HANGUL SYLLABLE PHIEUPH EU PHIEUPH + {0xC062, 0xD51F}, //10820 #HANGUL SYLLABLE PHIEUPH EU HIEUH + {0xC063, 0xD520}, //10821 #HANGUL SYLLABLE PHIEUPH YI + {0xC064, 0xD521}, //10822 #HANGUL SYLLABLE PHIEUPH YI KIYEOK + {0xC065, 0xD522}, //10823 #HANGUL SYLLABLE PHIEUPH YI SSANGKIYEOK + {0xC066, 0xD523}, //10824 #HANGUL SYLLABLE PHIEUPH YI KIYEOKSIOS + {0xC067, 0xD524}, //10825 #HANGUL SYLLABLE PHIEUPH YI NIEUN + {0xC068, 0xD525}, //10826 #HANGUL SYLLABLE PHIEUPH YI NIEUNCIEUC + {0xC069, 0xD526}, //10827 #HANGUL SYLLABLE PHIEUPH YI NIEUNHIEUH + {0xC06A, 0xD527}, //10828 #HANGUL SYLLABLE PHIEUPH YI TIKEUT + {0xC06B, 0xD528}, //10829 #HANGUL SYLLABLE PHIEUPH YI RIEUL + {0xC06C, 0xD529}, //10830 #HANGUL SYLLABLE PHIEUPH YI RIEULKIYEOK + {0xC06D, 0xD52A}, //10831 #HANGUL SYLLABLE PHIEUPH YI RIEULMIEUM + {0xC06E, 0xD52B}, //10832 #HANGUL SYLLABLE PHIEUPH YI RIEULPIEUP + {0xC06F, 0xD52C}, //10833 #HANGUL SYLLABLE PHIEUPH YI RIEULSIOS + {0xC070, 0xD52D}, //10834 #HANGUL SYLLABLE PHIEUPH YI RIEULTHIEUTH + {0xC071, 0xD52E}, //10835 #HANGUL SYLLABLE PHIEUPH YI RIEULPHIEUPH + {0xC072, 0xD52F}, //10836 #HANGUL SYLLABLE PHIEUPH YI RIEULHIEUH + {0xC073, 0xD530}, //10837 #HANGUL SYLLABLE PHIEUPH YI MIEUM + {0xC074, 0xD531}, //10838 #HANGUL SYLLABLE PHIEUPH YI PIEUP + {0xC075, 0xD532}, //10839 #HANGUL SYLLABLE PHIEUPH YI PIEUPSIOS + {0xC076, 0xD533}, //10840 #HANGUL SYLLABLE PHIEUPH YI SIOS + {0xC077, 0xD534}, //10841 #HANGUL SYLLABLE PHIEUPH YI SSANGSIOS + {0xC078, 0xD535}, //10842 #HANGUL SYLLABLE PHIEUPH YI IEUNG + {0xC079, 0xD536}, //10843 #HANGUL SYLLABLE PHIEUPH YI CIEUC + {0xC07A, 0xD537}, //10844 #HANGUL SYLLABLE PHIEUPH YI CHIEUCH + {0xC081, 0xD538}, //10845 #HANGUL SYLLABLE PHIEUPH YI KHIEUKH + {0xC082, 0xD539}, //10846 #HANGUL SYLLABLE PHIEUPH YI THIEUTH + {0xC083, 0xD53A}, //10847 #HANGUL SYLLABLE PHIEUPH YI PHIEUPH + {0xC084, 0xD53B}, //10848 #HANGUL SYLLABLE PHIEUPH YI HIEUH + {0xC085, 0xD53E}, //10849 #HANGUL SYLLABLE PHIEUPH I SSANGKIYEOK + {0xC086, 0xD53F}, //10850 #HANGUL SYLLABLE PHIEUPH I KIYEOKSIOS + {0xC087, 0xD541}, //10851 #HANGUL SYLLABLE PHIEUPH I NIEUNCIEUC + {0xC088, 0xD542}, //10852 #HANGUL SYLLABLE PHIEUPH I NIEUNHIEUH + {0xC089, 0xD543}, //10853 #HANGUL SYLLABLE PHIEUPH I TIKEUT + {0xC08A, 0xD545}, //10854 #HANGUL SYLLABLE PHIEUPH I RIEULKIYEOK + {0xC08B, 0xD546}, //10855 #HANGUL SYLLABLE PHIEUPH I RIEULMIEUM + {0xC08C, 0xD547}, //10856 #HANGUL SYLLABLE PHIEUPH I RIEULPIEUP + {0xC08D, 0xD548}, //10857 #HANGUL SYLLABLE PHIEUPH I RIEULSIOS + {0xC08E, 0xD549}, //10858 #HANGUL SYLLABLE PHIEUPH I RIEULTHIEUTH + {0xC08F, 0xD54A}, //10859 #HANGUL SYLLABLE PHIEUPH I RIEULPHIEUPH + {0xC090, 0xD54B}, //10860 #HANGUL SYLLABLE PHIEUPH I RIEULHIEUH + {0xC091, 0xD54E}, //10861 #HANGUL SYLLABLE PHIEUPH I PIEUPSIOS + {0xC092, 0xD550}, //10862 #HANGUL SYLLABLE PHIEUPH I SSANGSIOS + {0xC093, 0xD552}, //10863 #HANGUL SYLLABLE PHIEUPH I CIEUC + {0xC094, 0xD553}, //10864 #HANGUL SYLLABLE PHIEUPH I CHIEUCH + {0xC095, 0xD554}, //10865 #HANGUL SYLLABLE PHIEUPH I KHIEUKH + {0xC096, 0xD555}, //10866 #HANGUL SYLLABLE PHIEUPH I THIEUTH + {0xC097, 0xD556}, //10867 #HANGUL SYLLABLE PHIEUPH I PHIEUPH + {0xC098, 0xD557}, //10868 #HANGUL SYLLABLE PHIEUPH I HIEUH + {0xC099, 0xD55A}, //10869 #HANGUL SYLLABLE HIEUH A SSANGKIYEOK + {0xC09A, 0xD55B}, //10870 #HANGUL SYLLABLE HIEUH A KIYEOKSIOS + {0xC09B, 0xD55D}, //10871 #HANGUL SYLLABLE HIEUH A NIEUNCIEUC + {0xC09C, 0xD55E}, //10872 #HANGUL SYLLABLE HIEUH A NIEUNHIEUH + {0xC09D, 0xD55F}, //10873 #HANGUL SYLLABLE HIEUH A TIKEUT + {0xC09E, 0xD561}, //10874 #HANGUL SYLLABLE HIEUH A RIEULKIYEOK + {0xC09F, 0xD562}, //10875 #HANGUL SYLLABLE HIEUH A RIEULMIEUM + {0xC0A0, 0xD563}, //10876 #HANGUL SYLLABLE HIEUH A RIEULPIEUP + {0xC0A1, 0xC6E9}, //10877 #HANGUL SYLLABLE IEUNG WE KIYEOK + {0xC0A2, 0xC6EC}, //10878 #HANGUL SYLLABLE IEUNG WE NIEUN + {0xC0A3, 0xC6F0}, //10879 #HANGUL SYLLABLE IEUNG WE RIEUL + {0xC0A4, 0xC6F8}, //10880 #HANGUL SYLLABLE IEUNG WE MIEUM + {0xC0A5, 0xC6F9}, //10881 #HANGUL SYLLABLE IEUNG WE PIEUP + {0xC0A6, 0xC6FD}, //10882 #HANGUL SYLLABLE IEUNG WE IEUNG + {0xC0A7, 0xC704}, //10883 #HANGUL SYLLABLE IEUNG WI + {0xC0A8, 0xC705}, //10884 #HANGUL SYLLABLE IEUNG WI KIYEOK + {0xC0A9, 0xC708}, //10885 #HANGUL SYLLABLE IEUNG WI NIEUN + {0xC0AA, 0xC70C}, //10886 #HANGUL SYLLABLE IEUNG WI RIEUL + {0xC0AB, 0xC714}, //10887 #HANGUL SYLLABLE IEUNG WI MIEUM + {0xC0AC, 0xC715}, //10888 #HANGUL SYLLABLE IEUNG WI PIEUP + {0xC0AD, 0xC717}, //10889 #HANGUL SYLLABLE IEUNG WI SIOS + {0xC0AE, 0xC719}, //10890 #HANGUL SYLLABLE IEUNG WI IEUNG + {0xC0AF, 0xC720}, //10891 #HANGUL SYLLABLE IEUNG YU + {0xC0B0, 0xC721}, //10892 #HANGUL SYLLABLE IEUNG YU KIYEOK + {0xC0B1, 0xC724}, //10893 #HANGUL SYLLABLE IEUNG YU NIEUN + {0xC0B2, 0xC728}, //10894 #HANGUL SYLLABLE IEUNG YU RIEUL + {0xC0B3, 0xC730}, //10895 #HANGUL SYLLABLE IEUNG YU MIEUM + {0xC0B4, 0xC731}, //10896 #HANGUL SYLLABLE IEUNG YU PIEUP + {0xC0B5, 0xC733}, //10897 #HANGUL SYLLABLE IEUNG YU SIOS + {0xC0B6, 0xC735}, //10898 #HANGUL SYLLABLE IEUNG YU IEUNG + {0xC0B7, 0xC737}, //10899 #HANGUL SYLLABLE IEUNG YU CHIEUCH + {0xC0B8, 0xC73C}, //10900 #HANGUL SYLLABLE IEUNG EU + {0xC0B9, 0xC73D}, //10901 #HANGUL SYLLABLE IEUNG EU KIYEOK + {0xC0BA, 0xC740}, //10902 #HANGUL SYLLABLE IEUNG EU NIEUN + {0xC0BB, 0xC744}, //10903 #HANGUL SYLLABLE IEUNG EU RIEUL + {0xC0BC, 0xC74A}, //10904 #HANGUL SYLLABLE IEUNG EU RIEULPHIEUPH + {0xC0BD, 0xC74C}, //10905 #HANGUL SYLLABLE IEUNG EU MIEUM + {0xC0BE, 0xC74D}, //10906 #HANGUL SYLLABLE IEUNG EU PIEUP + {0xC0BF, 0xC74F}, //10907 #HANGUL SYLLABLE IEUNG EU SIOS + {0xC0C0, 0xC751}, //10908 #HANGUL SYLLABLE IEUNG EU IEUNG + {0xC0C1, 0xC752}, //10909 #HANGUL SYLLABLE IEUNG EU CIEUC + {0xC0C2, 0xC753}, //10910 #HANGUL SYLLABLE IEUNG EU CHIEUCH + {0xC0C3, 0xC754}, //10911 #HANGUL SYLLABLE IEUNG EU KHIEUKH + {0xC0C4, 0xC755}, //10912 #HANGUL SYLLABLE IEUNG EU THIEUTH + {0xC0C5, 0xC756}, //10913 #HANGUL SYLLABLE IEUNG EU PHIEUPH + {0xC0C6, 0xC757}, //10914 #HANGUL SYLLABLE IEUNG EU HIEUH + {0xC0C7, 0xC758}, //10915 #HANGUL SYLLABLE IEUNG YI + {0xC0C8, 0xC75C}, //10916 #HANGUL SYLLABLE IEUNG YI NIEUN + {0xC0C9, 0xC760}, //10917 #HANGUL SYLLABLE IEUNG YI RIEUL + {0xC0CA, 0xC768}, //10918 #HANGUL SYLLABLE IEUNG YI MIEUM + {0xC0CB, 0xC76B}, //10919 #HANGUL SYLLABLE IEUNG YI SIOS + {0xC0CC, 0xC774}, //10920 #HANGUL SYLLABLE IEUNG I + {0xC0CD, 0xC775}, //10921 #HANGUL SYLLABLE IEUNG I KIYEOK + {0xC0CE, 0xC778}, //10922 #HANGUL SYLLABLE IEUNG I NIEUN + {0xC0CF, 0xC77C}, //10923 #HANGUL SYLLABLE IEUNG I RIEUL + {0xC0D0, 0xC77D}, //10924 #HANGUL SYLLABLE IEUNG I RIEULKIYEOK + {0xC0D1, 0xC77E}, //10925 #HANGUL SYLLABLE IEUNG I RIEULMIEUM + {0xC0D2, 0xC783}, //10926 #HANGUL SYLLABLE IEUNG I RIEULHIEUH + {0xC0D3, 0xC784}, //10927 #HANGUL SYLLABLE IEUNG I MIEUM + {0xC0D4, 0xC785}, //10928 #HANGUL SYLLABLE IEUNG I PIEUP + {0xC0D5, 0xC787}, //10929 #HANGUL SYLLABLE IEUNG I SIOS + {0xC0D6, 0xC788}, //10930 #HANGUL SYLLABLE IEUNG I SSANGSIOS + {0xC0D7, 0xC789}, //10931 #HANGUL SYLLABLE IEUNG I IEUNG + {0xC0D8, 0xC78A}, //10932 #HANGUL SYLLABLE IEUNG I CIEUC + {0xC0D9, 0xC78E}, //10933 #HANGUL SYLLABLE IEUNG I PHIEUPH + {0xC0DA, 0xC790}, //10934 #HANGUL SYLLABLE CIEUC A + {0xC0DB, 0xC791}, //10935 #HANGUL SYLLABLE CIEUC A KIYEOK + {0xC0DC, 0xC794}, //10936 #HANGUL SYLLABLE CIEUC A NIEUN + {0xC0DD, 0xC796}, //10937 #HANGUL SYLLABLE CIEUC A NIEUNHIEUH + {0xC0DE, 0xC797}, //10938 #HANGUL SYLLABLE CIEUC A TIKEUT + {0xC0DF, 0xC798}, //10939 #HANGUL SYLLABLE CIEUC A RIEUL + {0xC0E0, 0xC79A}, //10940 #HANGUL SYLLABLE CIEUC A RIEULMIEUM + {0xC0E1, 0xC7A0}, //10941 #HANGUL SYLLABLE CIEUC A MIEUM + {0xC0E2, 0xC7A1}, //10942 #HANGUL SYLLABLE CIEUC A PIEUP + {0xC0E3, 0xC7A3}, //10943 #HANGUL SYLLABLE CIEUC A SIOS + {0xC0E4, 0xC7A4}, //10944 #HANGUL SYLLABLE CIEUC A SSANGSIOS + {0xC0E5, 0xC7A5}, //10945 #HANGUL SYLLABLE CIEUC A IEUNG + {0xC0E6, 0xC7A6}, //10946 #HANGUL SYLLABLE CIEUC A CIEUC + {0xC0E7, 0xC7AC}, //10947 #HANGUL SYLLABLE CIEUC AE + {0xC0E8, 0xC7AD}, //10948 #HANGUL SYLLABLE CIEUC AE KIYEOK + {0xC0E9, 0xC7B0}, //10949 #HANGUL SYLLABLE CIEUC AE NIEUN + {0xC0EA, 0xC7B4}, //10950 #HANGUL SYLLABLE CIEUC AE RIEUL + {0xC0EB, 0xC7BC}, //10951 #HANGUL SYLLABLE CIEUC AE MIEUM + {0xC0EC, 0xC7BD}, //10952 #HANGUL SYLLABLE CIEUC AE PIEUP + {0xC0ED, 0xC7BF}, //10953 #HANGUL SYLLABLE CIEUC AE SIOS + {0xC0EE, 0xC7C0}, //10954 #HANGUL SYLLABLE CIEUC AE SSANGSIOS + {0xC0EF, 0xC7C1}, //10955 #HANGUL SYLLABLE CIEUC AE IEUNG + {0xC0F0, 0xC7C8}, //10956 #HANGUL SYLLABLE CIEUC YA + {0xC0F1, 0xC7C9}, //10957 #HANGUL SYLLABLE CIEUC YA KIYEOK + {0xC0F2, 0xC7CC}, //10958 #HANGUL SYLLABLE CIEUC YA NIEUN + {0xC0F3, 0xC7CE}, //10959 #HANGUL SYLLABLE CIEUC YA NIEUNHIEUH + {0xC0F4, 0xC7D0}, //10960 #HANGUL SYLLABLE CIEUC YA RIEUL + {0xC0F5, 0xC7D8}, //10961 #HANGUL SYLLABLE CIEUC YA MIEUM + {0xC0F6, 0xC7DD}, //10962 #HANGUL SYLLABLE CIEUC YA IEUNG + {0xC0F7, 0xC7E4}, //10963 #HANGUL SYLLABLE CIEUC YAE + {0xC0F8, 0xC7E8}, //10964 #HANGUL SYLLABLE CIEUC YAE NIEUN + {0xC0F9, 0xC7EC}, //10965 #HANGUL SYLLABLE CIEUC YAE RIEUL + {0xC0FA, 0xC800}, //10966 #HANGUL SYLLABLE CIEUC EO + {0xC0FB, 0xC801}, //10967 #HANGUL SYLLABLE CIEUC EO KIYEOK + {0xC0FC, 0xC804}, //10968 #HANGUL SYLLABLE CIEUC EO NIEUN + {0xC0FD, 0xC808}, //10969 #HANGUL SYLLABLE CIEUC EO RIEUL + {0xC0FE, 0xC80A}, //10970 #HANGUL SYLLABLE CIEUC EO RIEULMIEUM + {0xC141, 0xD564}, //10971 #HANGUL SYLLABLE HIEUH A RIEULSIOS + {0xC142, 0xD566}, //10972 #HANGUL SYLLABLE HIEUH A RIEULPHIEUPH + {0xC143, 0xD567}, //10973 #HANGUL SYLLABLE HIEUH A RIEULHIEUH + {0xC144, 0xD56A}, //10974 #HANGUL SYLLABLE HIEUH A PIEUPSIOS + {0xC145, 0xD56C}, //10975 #HANGUL SYLLABLE HIEUH A SSANGSIOS + {0xC146, 0xD56E}, //10976 #HANGUL SYLLABLE HIEUH A CIEUC + {0xC147, 0xD56F}, //10977 #HANGUL SYLLABLE HIEUH A CHIEUCH + {0xC148, 0xD570}, //10978 #HANGUL SYLLABLE HIEUH A KHIEUKH + {0xC149, 0xD571}, //10979 #HANGUL SYLLABLE HIEUH A THIEUTH + {0xC14A, 0xD572}, //10980 #HANGUL SYLLABLE HIEUH A PHIEUPH + {0xC14B, 0xD573}, //10981 #HANGUL SYLLABLE HIEUH A HIEUH + {0xC14C, 0xD576}, //10982 #HANGUL SYLLABLE HIEUH AE SSANGKIYEOK + {0xC14D, 0xD577}, //10983 #HANGUL SYLLABLE HIEUH AE KIYEOKSIOS + {0xC14E, 0xD579}, //10984 #HANGUL SYLLABLE HIEUH AE NIEUNCIEUC + {0xC14F, 0xD57A}, //10985 #HANGUL SYLLABLE HIEUH AE NIEUNHIEUH + {0xC150, 0xD57B}, //10986 #HANGUL SYLLABLE HIEUH AE TIKEUT + {0xC151, 0xD57D}, //10987 #HANGUL SYLLABLE HIEUH AE RIEULKIYEOK + {0xC152, 0xD57E}, //10988 #HANGUL SYLLABLE HIEUH AE RIEULMIEUM + {0xC153, 0xD57F}, //10989 #HANGUL SYLLABLE HIEUH AE RIEULPIEUP + {0xC154, 0xD580}, //10990 #HANGUL SYLLABLE HIEUH AE RIEULSIOS + {0xC155, 0xD581}, //10991 #HANGUL SYLLABLE HIEUH AE RIEULTHIEUTH + {0xC156, 0xD582}, //10992 #HANGUL SYLLABLE HIEUH AE RIEULPHIEUPH + {0xC157, 0xD583}, //10993 #HANGUL SYLLABLE HIEUH AE RIEULHIEUH + {0xC158, 0xD586}, //10994 #HANGUL SYLLABLE HIEUH AE PIEUPSIOS + {0xC159, 0xD58A}, //10995 #HANGUL SYLLABLE HIEUH AE CIEUC + {0xC15A, 0xD58B}, //10996 #HANGUL SYLLABLE HIEUH AE CHIEUCH + {0xC161, 0xD58C}, //10997 #HANGUL SYLLABLE HIEUH AE KHIEUKH + {0xC162, 0xD58D}, //10998 #HANGUL SYLLABLE HIEUH AE THIEUTH + {0xC163, 0xD58E}, //10999 #HANGUL SYLLABLE HIEUH AE PHIEUPH + {0xC164, 0xD58F}, //11000 #HANGUL SYLLABLE HIEUH AE HIEUH + {0xC165, 0xD591}, //11001 #HANGUL SYLLABLE HIEUH YA KIYEOK + {0xC166, 0xD592}, //11002 #HANGUL SYLLABLE HIEUH YA SSANGKIYEOK + {0xC167, 0xD593}, //11003 #HANGUL SYLLABLE HIEUH YA KIYEOKSIOS + {0xC168, 0xD594}, //11004 #HANGUL SYLLABLE HIEUH YA NIEUN + {0xC169, 0xD595}, //11005 #HANGUL SYLLABLE HIEUH YA NIEUNCIEUC + {0xC16A, 0xD596}, //11006 #HANGUL SYLLABLE HIEUH YA NIEUNHIEUH + {0xC16B, 0xD597}, //11007 #HANGUL SYLLABLE HIEUH YA TIKEUT + {0xC16C, 0xD598}, //11008 #HANGUL SYLLABLE HIEUH YA RIEUL + {0xC16D, 0xD599}, //11009 #HANGUL SYLLABLE HIEUH YA RIEULKIYEOK + {0xC16E, 0xD59A}, //11010 #HANGUL SYLLABLE HIEUH YA RIEULMIEUM + {0xC16F, 0xD59B}, //11011 #HANGUL SYLLABLE HIEUH YA RIEULPIEUP + {0xC170, 0xD59C}, //11012 #HANGUL SYLLABLE HIEUH YA RIEULSIOS + {0xC171, 0xD59D}, //11013 #HANGUL SYLLABLE HIEUH YA RIEULTHIEUTH + {0xC172, 0xD59E}, //11014 #HANGUL SYLLABLE HIEUH YA RIEULPHIEUPH + {0xC173, 0xD59F}, //11015 #HANGUL SYLLABLE HIEUH YA RIEULHIEUH + {0xC174, 0xD5A0}, //11016 #HANGUL SYLLABLE HIEUH YA MIEUM + {0xC175, 0xD5A1}, //11017 #HANGUL SYLLABLE HIEUH YA PIEUP + {0xC176, 0xD5A2}, //11018 #HANGUL SYLLABLE HIEUH YA PIEUPSIOS + {0xC177, 0xD5A3}, //11019 #HANGUL SYLLABLE HIEUH YA SIOS + {0xC178, 0xD5A4}, //11020 #HANGUL SYLLABLE HIEUH YA SSANGSIOS + {0xC179, 0xD5A6}, //11021 #HANGUL SYLLABLE HIEUH YA CIEUC + {0xC17A, 0xD5A7}, //11022 #HANGUL SYLLABLE HIEUH YA CHIEUCH + {0xC181, 0xD5A8}, //11023 #HANGUL SYLLABLE HIEUH YA KHIEUKH + {0xC182, 0xD5A9}, //11024 #HANGUL SYLLABLE HIEUH YA THIEUTH + {0xC183, 0xD5AA}, //11025 #HANGUL SYLLABLE HIEUH YA PHIEUPH + {0xC184, 0xD5AB}, //11026 #HANGUL SYLLABLE HIEUH YA HIEUH + {0xC185, 0xD5AC}, //11027 #HANGUL SYLLABLE HIEUH YAE + {0xC186, 0xD5AD}, //11028 #HANGUL SYLLABLE HIEUH YAE KIYEOK + {0xC187, 0xD5AE}, //11029 #HANGUL SYLLABLE HIEUH YAE SSANGKIYEOK + {0xC188, 0xD5AF}, //11030 #HANGUL SYLLABLE HIEUH YAE KIYEOKSIOS + {0xC189, 0xD5B0}, //11031 #HANGUL SYLLABLE HIEUH YAE NIEUN + {0xC18A, 0xD5B1}, //11032 #HANGUL SYLLABLE HIEUH YAE NIEUNCIEUC + {0xC18B, 0xD5B2}, //11033 #HANGUL SYLLABLE HIEUH YAE NIEUNHIEUH + {0xC18C, 0xD5B3}, //11034 #HANGUL SYLLABLE HIEUH YAE TIKEUT + {0xC18D, 0xD5B4}, //11035 #HANGUL SYLLABLE HIEUH YAE RIEUL + {0xC18E, 0xD5B5}, //11036 #HANGUL SYLLABLE HIEUH YAE RIEULKIYEOK + {0xC18F, 0xD5B6}, //11037 #HANGUL SYLLABLE HIEUH YAE RIEULMIEUM + {0xC190, 0xD5B7}, //11038 #HANGUL SYLLABLE HIEUH YAE RIEULPIEUP + {0xC191, 0xD5B8}, //11039 #HANGUL SYLLABLE HIEUH YAE RIEULSIOS + {0xC192, 0xD5B9}, //11040 #HANGUL SYLLABLE HIEUH YAE RIEULTHIEUTH + {0xC193, 0xD5BA}, //11041 #HANGUL SYLLABLE HIEUH YAE RIEULPHIEUPH + {0xC194, 0xD5BB}, //11042 #HANGUL SYLLABLE HIEUH YAE RIEULHIEUH + {0xC195, 0xD5BC}, //11043 #HANGUL SYLLABLE HIEUH YAE MIEUM + {0xC196, 0xD5BD}, //11044 #HANGUL SYLLABLE HIEUH YAE PIEUP + {0xC197, 0xD5BE}, //11045 #HANGUL SYLLABLE HIEUH YAE PIEUPSIOS + {0xC198, 0xD5BF}, //11046 #HANGUL SYLLABLE HIEUH YAE SIOS + {0xC199, 0xD5C0}, //11047 #HANGUL SYLLABLE HIEUH YAE SSANGSIOS + {0xC19A, 0xD5C1}, //11048 #HANGUL SYLLABLE HIEUH YAE IEUNG + {0xC19B, 0xD5C2}, //11049 #HANGUL SYLLABLE HIEUH YAE CIEUC + {0xC19C, 0xD5C3}, //11050 #HANGUL SYLLABLE HIEUH YAE CHIEUCH + {0xC19D, 0xD5C4}, //11051 #HANGUL SYLLABLE HIEUH YAE KHIEUKH + {0xC19E, 0xD5C5}, //11052 #HANGUL SYLLABLE HIEUH YAE THIEUTH + {0xC19F, 0xD5C6}, //11053 #HANGUL SYLLABLE HIEUH YAE PHIEUPH + {0xC1A0, 0xD5C7}, //11054 #HANGUL SYLLABLE HIEUH YAE HIEUH + {0xC1A1, 0xC810}, //11055 #HANGUL SYLLABLE CIEUC EO MIEUM + {0xC1A2, 0xC811}, //11056 #HANGUL SYLLABLE CIEUC EO PIEUP + {0xC1A3, 0xC813}, //11057 #HANGUL SYLLABLE CIEUC EO SIOS + {0xC1A4, 0xC815}, //11058 #HANGUL SYLLABLE CIEUC EO IEUNG + {0xC1A5, 0xC816}, //11059 #HANGUL SYLLABLE CIEUC EO CIEUC + {0xC1A6, 0xC81C}, //11060 #HANGUL SYLLABLE CIEUC E + {0xC1A7, 0xC81D}, //11061 #HANGUL SYLLABLE CIEUC E KIYEOK + {0xC1A8, 0xC820}, //11062 #HANGUL SYLLABLE CIEUC E NIEUN + {0xC1A9, 0xC824}, //11063 #HANGUL SYLLABLE CIEUC E RIEUL + {0xC1AA, 0xC82C}, //11064 #HANGUL SYLLABLE CIEUC E MIEUM + {0xC1AB, 0xC82D}, //11065 #HANGUL SYLLABLE CIEUC E PIEUP + {0xC1AC, 0xC82F}, //11066 #HANGUL SYLLABLE CIEUC E SIOS + {0xC1AD, 0xC831}, //11067 #HANGUL SYLLABLE CIEUC E IEUNG + {0xC1AE, 0xC838}, //11068 #HANGUL SYLLABLE CIEUC YEO + {0xC1AF, 0xC83C}, //11069 #HANGUL SYLLABLE CIEUC YEO NIEUN + {0xC1B0, 0xC840}, //11070 #HANGUL SYLLABLE CIEUC YEO RIEUL + {0xC1B1, 0xC848}, //11071 #HANGUL SYLLABLE CIEUC YEO MIEUM + {0xC1B2, 0xC849}, //11072 #HANGUL SYLLABLE CIEUC YEO PIEUP + {0xC1B3, 0xC84C}, //11073 #HANGUL SYLLABLE CIEUC YEO SSANGSIOS + {0xC1B4, 0xC84D}, //11074 #HANGUL SYLLABLE CIEUC YEO IEUNG + {0xC1B5, 0xC854}, //11075 #HANGUL SYLLABLE CIEUC YE + {0xC1B6, 0xC870}, //11076 #HANGUL SYLLABLE CIEUC O + {0xC1B7, 0xC871}, //11077 #HANGUL SYLLABLE CIEUC O KIYEOK + {0xC1B8, 0xC874}, //11078 #HANGUL SYLLABLE CIEUC O NIEUN + {0xC1B9, 0xC878}, //11079 #HANGUL SYLLABLE CIEUC O RIEUL + {0xC1BA, 0xC87A}, //11080 #HANGUL SYLLABLE CIEUC O RIEULMIEUM + {0xC1BB, 0xC880}, //11081 #HANGUL SYLLABLE CIEUC O MIEUM + {0xC1BC, 0xC881}, //11082 #HANGUL SYLLABLE CIEUC O PIEUP + {0xC1BD, 0xC883}, //11083 #HANGUL SYLLABLE CIEUC O SIOS + {0xC1BE, 0xC885}, //11084 #HANGUL SYLLABLE CIEUC O IEUNG + {0xC1BF, 0xC886}, //11085 #HANGUL SYLLABLE CIEUC O CIEUC + {0xC1C0, 0xC887}, //11086 #HANGUL SYLLABLE CIEUC O CHIEUCH + {0xC1C1, 0xC88B}, //11087 #HANGUL SYLLABLE CIEUC O HIEUH + {0xC1C2, 0xC88C}, //11088 #HANGUL SYLLABLE CIEUC WA + {0xC1C3, 0xC88D}, //11089 #HANGUL SYLLABLE CIEUC WA KIYEOK + {0xC1C4, 0xC894}, //11090 #HANGUL SYLLABLE CIEUC WA RIEUL + {0xC1C5, 0xC89D}, //11091 #HANGUL SYLLABLE CIEUC WA PIEUP + {0xC1C6, 0xC89F}, //11092 #HANGUL SYLLABLE CIEUC WA SIOS + {0xC1C7, 0xC8A1}, //11093 #HANGUL SYLLABLE CIEUC WA IEUNG + {0xC1C8, 0xC8A8}, //11094 #HANGUL SYLLABLE CIEUC WAE + {0xC1C9, 0xC8BC}, //11095 #HANGUL SYLLABLE CIEUC WAE SSANGSIOS + {0xC1CA, 0xC8BD}, //11096 #HANGUL SYLLABLE CIEUC WAE IEUNG + {0xC1CB, 0xC8C4}, //11097 #HANGUL SYLLABLE CIEUC OE + {0xC1CC, 0xC8C8}, //11098 #HANGUL SYLLABLE CIEUC OE NIEUN + {0xC1CD, 0xC8CC}, //11099 #HANGUL SYLLABLE CIEUC OE RIEUL + {0xC1CE, 0xC8D4}, //11100 #HANGUL SYLLABLE CIEUC OE MIEUM + {0xC1CF, 0xC8D5}, //11101 #HANGUL SYLLABLE CIEUC OE PIEUP + {0xC1D0, 0xC8D7}, //11102 #HANGUL SYLLABLE CIEUC OE SIOS + {0xC1D1, 0xC8D9}, //11103 #HANGUL SYLLABLE CIEUC OE IEUNG + {0xC1D2, 0xC8E0}, //11104 #HANGUL SYLLABLE CIEUC YO + {0xC1D3, 0xC8E1}, //11105 #HANGUL SYLLABLE CIEUC YO KIYEOK + {0xC1D4, 0xC8E4}, //11106 #HANGUL SYLLABLE CIEUC YO NIEUN + {0xC1D5, 0xC8F5}, //11107 #HANGUL SYLLABLE CIEUC YO IEUNG + {0xC1D6, 0xC8FC}, //11108 #HANGUL SYLLABLE CIEUC U + {0xC1D7, 0xC8FD}, //11109 #HANGUL SYLLABLE CIEUC U KIYEOK + {0xC1D8, 0xC900}, //11110 #HANGUL SYLLABLE CIEUC U NIEUN + {0xC1D9, 0xC904}, //11111 #HANGUL SYLLABLE CIEUC U RIEUL + {0xC1DA, 0xC905}, //11112 #HANGUL SYLLABLE CIEUC U RIEULKIYEOK + {0xC1DB, 0xC906}, //11113 #HANGUL SYLLABLE CIEUC U RIEULMIEUM + {0xC1DC, 0xC90C}, //11114 #HANGUL SYLLABLE CIEUC U MIEUM + {0xC1DD, 0xC90D}, //11115 #HANGUL SYLLABLE CIEUC U PIEUP + {0xC1DE, 0xC90F}, //11116 #HANGUL SYLLABLE CIEUC U SIOS + {0xC1DF, 0xC911}, //11117 #HANGUL SYLLABLE CIEUC U IEUNG + {0xC1E0, 0xC918}, //11118 #HANGUL SYLLABLE CIEUC WEO + {0xC1E1, 0xC92C}, //11119 #HANGUL SYLLABLE CIEUC WEO SSANGSIOS + {0xC1E2, 0xC934}, //11120 #HANGUL SYLLABLE CIEUC WE + {0xC1E3, 0xC950}, //11121 #HANGUL SYLLABLE CIEUC WI + {0xC1E4, 0xC951}, //11122 #HANGUL SYLLABLE CIEUC WI KIYEOK + {0xC1E5, 0xC954}, //11123 #HANGUL SYLLABLE CIEUC WI NIEUN + {0xC1E6, 0xC958}, //11124 #HANGUL SYLLABLE CIEUC WI RIEUL + {0xC1E7, 0xC960}, //11125 #HANGUL SYLLABLE CIEUC WI MIEUM + {0xC1E8, 0xC961}, //11126 #HANGUL SYLLABLE CIEUC WI PIEUP + {0xC1E9, 0xC963}, //11127 #HANGUL SYLLABLE CIEUC WI SIOS + {0xC1EA, 0xC96C}, //11128 #HANGUL SYLLABLE CIEUC YU + {0xC1EB, 0xC970}, //11129 #HANGUL SYLLABLE CIEUC YU NIEUN + {0xC1EC, 0xC974}, //11130 #HANGUL SYLLABLE CIEUC YU RIEUL + {0xC1ED, 0xC97C}, //11131 #HANGUL SYLLABLE CIEUC YU MIEUM + {0xC1EE, 0xC988}, //11132 #HANGUL SYLLABLE CIEUC EU + {0xC1EF, 0xC989}, //11133 #HANGUL SYLLABLE CIEUC EU KIYEOK + {0xC1F0, 0xC98C}, //11134 #HANGUL SYLLABLE CIEUC EU NIEUN + {0xC1F1, 0xC990}, //11135 #HANGUL SYLLABLE CIEUC EU RIEUL + {0xC1F2, 0xC998}, //11136 #HANGUL SYLLABLE CIEUC EU MIEUM + {0xC1F3, 0xC999}, //11137 #HANGUL SYLLABLE CIEUC EU PIEUP + {0xC1F4, 0xC99B}, //11138 #HANGUL SYLLABLE CIEUC EU SIOS + {0xC1F5, 0xC99D}, //11139 #HANGUL SYLLABLE CIEUC EU IEUNG + {0xC1F6, 0xC9C0}, //11140 #HANGUL SYLLABLE CIEUC I + {0xC1F7, 0xC9C1}, //11141 #HANGUL SYLLABLE CIEUC I KIYEOK + {0xC1F8, 0xC9C4}, //11142 #HANGUL SYLLABLE CIEUC I NIEUN + {0xC1F9, 0xC9C7}, //11143 #HANGUL SYLLABLE CIEUC I TIKEUT + {0xC1FA, 0xC9C8}, //11144 #HANGUL SYLLABLE CIEUC I RIEUL + {0xC1FB, 0xC9CA}, //11145 #HANGUL SYLLABLE CIEUC I RIEULMIEUM + {0xC1FC, 0xC9D0}, //11146 #HANGUL SYLLABLE CIEUC I MIEUM + {0xC1FD, 0xC9D1}, //11147 #HANGUL SYLLABLE CIEUC I PIEUP + {0xC1FE, 0xC9D3}, //11148 #HANGUL SYLLABLE CIEUC I SIOS + {0xC241, 0xD5CA}, //11149 #HANGUL SYLLABLE HIEUH EO SSANGKIYEOK + {0xC242, 0xD5CB}, //11150 #HANGUL SYLLABLE HIEUH EO KIYEOKSIOS + {0xC243, 0xD5CD}, //11151 #HANGUL SYLLABLE HIEUH EO NIEUNCIEUC + {0xC244, 0xD5CE}, //11152 #HANGUL SYLLABLE HIEUH EO NIEUNHIEUH + {0xC245, 0xD5CF}, //11153 #HANGUL SYLLABLE HIEUH EO TIKEUT + {0xC246, 0xD5D1}, //11154 #HANGUL SYLLABLE HIEUH EO RIEULKIYEOK + {0xC247, 0xD5D3}, //11155 #HANGUL SYLLABLE HIEUH EO RIEULPIEUP + {0xC248, 0xD5D4}, //11156 #HANGUL SYLLABLE HIEUH EO RIEULSIOS + {0xC249, 0xD5D5}, //11157 #HANGUL SYLLABLE HIEUH EO RIEULTHIEUTH + {0xC24A, 0xD5D6}, //11158 #HANGUL SYLLABLE HIEUH EO RIEULPHIEUPH + {0xC24B, 0xD5D7}, //11159 #HANGUL SYLLABLE HIEUH EO RIEULHIEUH + {0xC24C, 0xD5DA}, //11160 #HANGUL SYLLABLE HIEUH EO PIEUPSIOS + {0xC24D, 0xD5DC}, //11161 #HANGUL SYLLABLE HIEUH EO SSANGSIOS + {0xC24E, 0xD5DE}, //11162 #HANGUL SYLLABLE HIEUH EO CIEUC + {0xC24F, 0xD5DF}, //11163 #HANGUL SYLLABLE HIEUH EO CHIEUCH + {0xC250, 0xD5E0}, //11164 #HANGUL SYLLABLE HIEUH EO KHIEUKH + {0xC251, 0xD5E1}, //11165 #HANGUL SYLLABLE HIEUH EO THIEUTH + {0xC252, 0xD5E2}, //11166 #HANGUL SYLLABLE HIEUH EO PHIEUPH + {0xC253, 0xD5E3}, //11167 #HANGUL SYLLABLE HIEUH EO HIEUH + {0xC254, 0xD5E6}, //11168 #HANGUL SYLLABLE HIEUH E SSANGKIYEOK + {0xC255, 0xD5E7}, //11169 #HANGUL SYLLABLE HIEUH E KIYEOKSIOS + {0xC256, 0xD5E9}, //11170 #HANGUL SYLLABLE HIEUH E NIEUNCIEUC + {0xC257, 0xD5EA}, //11171 #HANGUL SYLLABLE HIEUH E NIEUNHIEUH + {0xC258, 0xD5EB}, //11172 #HANGUL SYLLABLE HIEUH E TIKEUT + {0xC259, 0xD5ED}, //11173 #HANGUL SYLLABLE HIEUH E RIEULKIYEOK + {0xC25A, 0xD5EE}, //11174 #HANGUL SYLLABLE HIEUH E RIEULMIEUM + {0xC261, 0xD5EF}, //11175 #HANGUL SYLLABLE HIEUH E RIEULPIEUP + {0xC262, 0xD5F0}, //11176 #HANGUL SYLLABLE HIEUH E RIEULSIOS + {0xC263, 0xD5F1}, //11177 #HANGUL SYLLABLE HIEUH E RIEULTHIEUTH + {0xC264, 0xD5F2}, //11178 #HANGUL SYLLABLE HIEUH E RIEULPHIEUPH + {0xC265, 0xD5F3}, //11179 #HANGUL SYLLABLE HIEUH E RIEULHIEUH + {0xC266, 0xD5F6}, //11180 #HANGUL SYLLABLE HIEUH E PIEUPSIOS + {0xC267, 0xD5F8}, //11181 #HANGUL SYLLABLE HIEUH E SSANGSIOS + {0xC268, 0xD5FA}, //11182 #HANGUL SYLLABLE HIEUH E CIEUC + {0xC269, 0xD5FB}, //11183 #HANGUL SYLLABLE HIEUH E CHIEUCH + {0xC26A, 0xD5FC}, //11184 #HANGUL SYLLABLE HIEUH E KHIEUKH + {0xC26B, 0xD5FD}, //11185 #HANGUL SYLLABLE HIEUH E THIEUTH + {0xC26C, 0xD5FE}, //11186 #HANGUL SYLLABLE HIEUH E PHIEUPH + {0xC26D, 0xD5FF}, //11187 #HANGUL SYLLABLE HIEUH E HIEUH + {0xC26E, 0xD602}, //11188 #HANGUL SYLLABLE HIEUH YEO SSANGKIYEOK + {0xC26F, 0xD603}, //11189 #HANGUL SYLLABLE HIEUH YEO KIYEOKSIOS + {0xC270, 0xD605}, //11190 #HANGUL SYLLABLE HIEUH YEO NIEUNCIEUC + {0xC271, 0xD606}, //11191 #HANGUL SYLLABLE HIEUH YEO NIEUNHIEUH + {0xC272, 0xD607}, //11192 #HANGUL SYLLABLE HIEUH YEO TIKEUT + {0xC273, 0xD609}, //11193 #HANGUL SYLLABLE HIEUH YEO RIEULKIYEOK + {0xC274, 0xD60A}, //11194 #HANGUL SYLLABLE HIEUH YEO RIEULMIEUM + {0xC275, 0xD60B}, //11195 #HANGUL SYLLABLE HIEUH YEO RIEULPIEUP + {0xC276, 0xD60C}, //11196 #HANGUL SYLLABLE HIEUH YEO RIEULSIOS + {0xC277, 0xD60D}, //11197 #HANGUL SYLLABLE HIEUH YEO RIEULTHIEUTH + {0xC278, 0xD60E}, //11198 #HANGUL SYLLABLE HIEUH YEO RIEULPHIEUPH + {0xC279, 0xD60F}, //11199 #HANGUL SYLLABLE HIEUH YEO RIEULHIEUH + {0xC27A, 0xD612}, //11200 #HANGUL SYLLABLE HIEUH YEO PIEUPSIOS + {0xC281, 0xD616}, //11201 #HANGUL SYLLABLE HIEUH YEO CIEUC + {0xC282, 0xD617}, //11202 #HANGUL SYLLABLE HIEUH YEO CHIEUCH + {0xC283, 0xD618}, //11203 #HANGUL SYLLABLE HIEUH YEO KHIEUKH + {0xC284, 0xD619}, //11204 #HANGUL SYLLABLE HIEUH YEO THIEUTH + {0xC285, 0xD61A}, //11205 #HANGUL SYLLABLE HIEUH YEO PHIEUPH + {0xC286, 0xD61B}, //11206 #HANGUL SYLLABLE HIEUH YEO HIEUH + {0xC287, 0xD61D}, //11207 #HANGUL SYLLABLE HIEUH YE KIYEOK + {0xC288, 0xD61E}, //11208 #HANGUL SYLLABLE HIEUH YE SSANGKIYEOK + {0xC289, 0xD61F}, //11209 #HANGUL SYLLABLE HIEUH YE KIYEOKSIOS + {0xC28A, 0xD621}, //11210 #HANGUL SYLLABLE HIEUH YE NIEUNCIEUC + {0xC28B, 0xD622}, //11211 #HANGUL SYLLABLE HIEUH YE NIEUNHIEUH + {0xC28C, 0xD623}, //11212 #HANGUL SYLLABLE HIEUH YE TIKEUT + {0xC28D, 0xD625}, //11213 #HANGUL SYLLABLE HIEUH YE RIEULKIYEOK + {0xC28E, 0xD626}, //11214 #HANGUL SYLLABLE HIEUH YE RIEULMIEUM + {0xC28F, 0xD627}, //11215 #HANGUL SYLLABLE HIEUH YE RIEULPIEUP + {0xC290, 0xD628}, //11216 #HANGUL SYLLABLE HIEUH YE RIEULSIOS + {0xC291, 0xD629}, //11217 #HANGUL SYLLABLE HIEUH YE RIEULTHIEUTH + {0xC292, 0xD62A}, //11218 #HANGUL SYLLABLE HIEUH YE RIEULPHIEUPH + {0xC293, 0xD62B}, //11219 #HANGUL SYLLABLE HIEUH YE RIEULHIEUH + {0xC294, 0xD62C}, //11220 #HANGUL SYLLABLE HIEUH YE MIEUM + {0xC295, 0xD62E}, //11221 #HANGUL SYLLABLE HIEUH YE PIEUPSIOS + {0xC296, 0xD62F}, //11222 #HANGUL SYLLABLE HIEUH YE SIOS + {0xC297, 0xD630}, //11223 #HANGUL SYLLABLE HIEUH YE SSANGSIOS + {0xC298, 0xD631}, //11224 #HANGUL SYLLABLE HIEUH YE IEUNG + {0xC299, 0xD632}, //11225 #HANGUL SYLLABLE HIEUH YE CIEUC + {0xC29A, 0xD633}, //11226 #HANGUL SYLLABLE HIEUH YE CHIEUCH + {0xC29B, 0xD634}, //11227 #HANGUL SYLLABLE HIEUH YE KHIEUKH + {0xC29C, 0xD635}, //11228 #HANGUL SYLLABLE HIEUH YE THIEUTH + {0xC29D, 0xD636}, //11229 #HANGUL SYLLABLE HIEUH YE PHIEUPH + {0xC29E, 0xD637}, //11230 #HANGUL SYLLABLE HIEUH YE HIEUH + {0xC29F, 0xD63A}, //11231 #HANGUL SYLLABLE HIEUH O SSANGKIYEOK + {0xC2A0, 0xD63B}, //11232 #HANGUL SYLLABLE HIEUH O KIYEOKSIOS + {0xC2A1, 0xC9D5}, //11233 #HANGUL SYLLABLE CIEUC I IEUNG + {0xC2A2, 0xC9D6}, //11234 #HANGUL SYLLABLE CIEUC I CIEUC + {0xC2A3, 0xC9D9}, //11235 #HANGUL SYLLABLE CIEUC I THIEUTH + {0xC2A4, 0xC9DA}, //11236 #HANGUL SYLLABLE CIEUC I PHIEUPH + {0xC2A5, 0xC9DC}, //11237 #HANGUL SYLLABLE SSANGCIEUC A + {0xC2A6, 0xC9DD}, //11238 #HANGUL SYLLABLE SSANGCIEUC A KIYEOK + {0xC2A7, 0xC9E0}, //11239 #HANGUL SYLLABLE SSANGCIEUC A NIEUN + {0xC2A8, 0xC9E2}, //11240 #HANGUL SYLLABLE SSANGCIEUC A NIEUNHIEUH + {0xC2A9, 0xC9E4}, //11241 #HANGUL SYLLABLE SSANGCIEUC A RIEUL + {0xC2AA, 0xC9E7}, //11242 #HANGUL SYLLABLE SSANGCIEUC A RIEULPIEUP + {0xC2AB, 0xC9EC}, //11243 #HANGUL SYLLABLE SSANGCIEUC A MIEUM + {0xC2AC, 0xC9ED}, //11244 #HANGUL SYLLABLE SSANGCIEUC A PIEUP + {0xC2AD, 0xC9EF}, //11245 #HANGUL SYLLABLE SSANGCIEUC A SIOS + {0xC2AE, 0xC9F0}, //11246 #HANGUL SYLLABLE SSANGCIEUC A SSANGSIOS + {0xC2AF, 0xC9F1}, //11247 #HANGUL SYLLABLE SSANGCIEUC A IEUNG + {0xC2B0, 0xC9F8}, //11248 #HANGUL SYLLABLE SSANGCIEUC AE + {0xC2B1, 0xC9F9}, //11249 #HANGUL SYLLABLE SSANGCIEUC AE KIYEOK + {0xC2B2, 0xC9FC}, //11250 #HANGUL SYLLABLE SSANGCIEUC AE NIEUN + {0xC2B3, 0xCA00}, //11251 #HANGUL SYLLABLE SSANGCIEUC AE RIEUL + {0xC2B4, 0xCA08}, //11252 #HANGUL SYLLABLE SSANGCIEUC AE MIEUM + {0xC2B5, 0xCA09}, //11253 #HANGUL SYLLABLE SSANGCIEUC AE PIEUP + {0xC2B6, 0xCA0B}, //11254 #HANGUL SYLLABLE SSANGCIEUC AE SIOS + {0xC2B7, 0xCA0C}, //11255 #HANGUL SYLLABLE SSANGCIEUC AE SSANGSIOS + {0xC2B8, 0xCA0D}, //11256 #HANGUL SYLLABLE SSANGCIEUC AE IEUNG + {0xC2B9, 0xCA14}, //11257 #HANGUL SYLLABLE SSANGCIEUC YA + {0xC2BA, 0xCA18}, //11258 #HANGUL SYLLABLE SSANGCIEUC YA NIEUN + {0xC2BB, 0xCA29}, //11259 #HANGUL SYLLABLE SSANGCIEUC YA IEUNG + {0xC2BC, 0xCA4C}, //11260 #HANGUL SYLLABLE SSANGCIEUC EO + {0xC2BD, 0xCA4D}, //11261 #HANGUL SYLLABLE SSANGCIEUC EO KIYEOK + {0xC2BE, 0xCA50}, //11262 #HANGUL SYLLABLE SSANGCIEUC EO NIEUN + {0xC2BF, 0xCA54}, //11263 #HANGUL SYLLABLE SSANGCIEUC EO RIEUL + {0xC2C0, 0xCA5C}, //11264 #HANGUL SYLLABLE SSANGCIEUC EO MIEUM + {0xC2C1, 0xCA5D}, //11265 #HANGUL SYLLABLE SSANGCIEUC EO PIEUP + {0xC2C2, 0xCA5F}, //11266 #HANGUL SYLLABLE SSANGCIEUC EO SIOS + {0xC2C3, 0xCA60}, //11267 #HANGUL SYLLABLE SSANGCIEUC EO SSANGSIOS + {0xC2C4, 0xCA61}, //11268 #HANGUL SYLLABLE SSANGCIEUC EO IEUNG + {0xC2C5, 0xCA68}, //11269 #HANGUL SYLLABLE SSANGCIEUC E + {0xC2C6, 0xCA7D}, //11270 #HANGUL SYLLABLE SSANGCIEUC E IEUNG + {0xC2C7, 0xCA84}, //11271 #HANGUL SYLLABLE SSANGCIEUC YEO + {0xC2C8, 0xCA98}, //11272 #HANGUL SYLLABLE SSANGCIEUC YEO SSANGSIOS + {0xC2C9, 0xCABC}, //11273 #HANGUL SYLLABLE SSANGCIEUC O + {0xC2CA, 0xCABD}, //11274 #HANGUL SYLLABLE SSANGCIEUC O KIYEOK + {0xC2CB, 0xCAC0}, //11275 #HANGUL SYLLABLE SSANGCIEUC O NIEUN + {0xC2CC, 0xCAC4}, //11276 #HANGUL SYLLABLE SSANGCIEUC O RIEUL + {0xC2CD, 0xCACC}, //11277 #HANGUL SYLLABLE SSANGCIEUC O MIEUM + {0xC2CE, 0xCACD}, //11278 #HANGUL SYLLABLE SSANGCIEUC O PIEUP + {0xC2CF, 0xCACF}, //11279 #HANGUL SYLLABLE SSANGCIEUC O SIOS + {0xC2D0, 0xCAD1}, //11280 #HANGUL SYLLABLE SSANGCIEUC O IEUNG + {0xC2D1, 0xCAD3}, //11281 #HANGUL SYLLABLE SSANGCIEUC O CHIEUCH + {0xC2D2, 0xCAD8}, //11282 #HANGUL SYLLABLE SSANGCIEUC WA + {0xC2D3, 0xCAD9}, //11283 #HANGUL SYLLABLE SSANGCIEUC WA KIYEOK + {0xC2D4, 0xCAE0}, //11284 #HANGUL SYLLABLE SSANGCIEUC WA RIEUL + {0xC2D5, 0xCAEC}, //11285 #HANGUL SYLLABLE SSANGCIEUC WA SSANGSIOS + {0xC2D6, 0xCAF4}, //11286 #HANGUL SYLLABLE SSANGCIEUC WAE + {0xC2D7, 0xCB08}, //11287 #HANGUL SYLLABLE SSANGCIEUC WAE SSANGSIOS + {0xC2D8, 0xCB10}, //11288 #HANGUL SYLLABLE SSANGCIEUC OE + {0xC2D9, 0xCB14}, //11289 #HANGUL SYLLABLE SSANGCIEUC OE NIEUN + {0xC2DA, 0xCB18}, //11290 #HANGUL SYLLABLE SSANGCIEUC OE RIEUL + {0xC2DB, 0xCB20}, //11291 #HANGUL SYLLABLE SSANGCIEUC OE MIEUM + {0xC2DC, 0xCB21}, //11292 #HANGUL SYLLABLE SSANGCIEUC OE PIEUP + {0xC2DD, 0xCB41}, //11293 #HANGUL SYLLABLE SSANGCIEUC YO IEUNG + {0xC2DE, 0xCB48}, //11294 #HANGUL SYLLABLE SSANGCIEUC U + {0xC2DF, 0xCB49}, //11295 #HANGUL SYLLABLE SSANGCIEUC U KIYEOK + {0xC2E0, 0xCB4C}, //11296 #HANGUL SYLLABLE SSANGCIEUC U NIEUN + {0xC2E1, 0xCB50}, //11297 #HANGUL SYLLABLE SSANGCIEUC U RIEUL + {0xC2E2, 0xCB58}, //11298 #HANGUL SYLLABLE SSANGCIEUC U MIEUM + {0xC2E3, 0xCB59}, //11299 #HANGUL SYLLABLE SSANGCIEUC U PIEUP + {0xC2E4, 0xCB5D}, //11300 #HANGUL SYLLABLE SSANGCIEUC U IEUNG + {0xC2E5, 0xCB64}, //11301 #HANGUL SYLLABLE SSANGCIEUC WEO + {0xC2E6, 0xCB78}, //11302 #HANGUL SYLLABLE SSANGCIEUC WEO SSANGSIOS + {0xC2E7, 0xCB79}, //11303 #HANGUL SYLLABLE SSANGCIEUC WEO IEUNG + {0xC2E8, 0xCB9C}, //11304 #HANGUL SYLLABLE SSANGCIEUC WI + {0xC2E9, 0xCBB8}, //11305 #HANGUL SYLLABLE SSANGCIEUC YU + {0xC2EA, 0xCBD4}, //11306 #HANGUL SYLLABLE SSANGCIEUC EU + {0xC2EB, 0xCBE4}, //11307 #HANGUL SYLLABLE SSANGCIEUC EU MIEUM + {0xC2EC, 0xCBE7}, //11308 #HANGUL SYLLABLE SSANGCIEUC EU SIOS + {0xC2ED, 0xCBE9}, //11309 #HANGUL SYLLABLE SSANGCIEUC EU IEUNG + {0xC2EE, 0xCC0C}, //11310 #HANGUL SYLLABLE SSANGCIEUC I + {0xC2EF, 0xCC0D}, //11311 #HANGUL SYLLABLE SSANGCIEUC I KIYEOK + {0xC2F0, 0xCC10}, //11312 #HANGUL SYLLABLE SSANGCIEUC I NIEUN + {0xC2F1, 0xCC14}, //11313 #HANGUL SYLLABLE SSANGCIEUC I RIEUL + {0xC2F2, 0xCC1C}, //11314 #HANGUL SYLLABLE SSANGCIEUC I MIEUM + {0xC2F3, 0xCC1D}, //11315 #HANGUL SYLLABLE SSANGCIEUC I PIEUP + {0xC2F4, 0xCC21}, //11316 #HANGUL SYLLABLE SSANGCIEUC I IEUNG + {0xC2F5, 0xCC22}, //11317 #HANGUL SYLLABLE SSANGCIEUC I CIEUC + {0xC2F6, 0xCC27}, //11318 #HANGUL SYLLABLE SSANGCIEUC I HIEUH + {0xC2F7, 0xCC28}, //11319 #HANGUL SYLLABLE CHIEUCH A + {0xC2F8, 0xCC29}, //11320 #HANGUL SYLLABLE CHIEUCH A KIYEOK + {0xC2F9, 0xCC2C}, //11321 #HANGUL SYLLABLE CHIEUCH A NIEUN + {0xC2FA, 0xCC2E}, //11322 #HANGUL SYLLABLE CHIEUCH A NIEUNHIEUH + {0xC2FB, 0xCC30}, //11323 #HANGUL SYLLABLE CHIEUCH A RIEUL + {0xC2FC, 0xCC38}, //11324 #HANGUL SYLLABLE CHIEUCH A MIEUM + {0xC2FD, 0xCC39}, //11325 #HANGUL SYLLABLE CHIEUCH A PIEUP + {0xC2FE, 0xCC3B}, //11326 #HANGUL SYLLABLE CHIEUCH A SIOS + {0xC341, 0xD63D}, //11327 #HANGUL SYLLABLE HIEUH O NIEUNCIEUC + {0xC342, 0xD63E}, //11328 #HANGUL SYLLABLE HIEUH O NIEUNHIEUH + {0xC343, 0xD63F}, //11329 #HANGUL SYLLABLE HIEUH O TIKEUT + {0xC344, 0xD641}, //11330 #HANGUL SYLLABLE HIEUH O RIEULKIYEOK + {0xC345, 0xD642}, //11331 #HANGUL SYLLABLE HIEUH O RIEULMIEUM + {0xC346, 0xD643}, //11332 #HANGUL SYLLABLE HIEUH O RIEULPIEUP + {0xC347, 0xD644}, //11333 #HANGUL SYLLABLE HIEUH O RIEULSIOS + {0xC348, 0xD646}, //11334 #HANGUL SYLLABLE HIEUH O RIEULPHIEUPH + {0xC349, 0xD647}, //11335 #HANGUL SYLLABLE HIEUH O RIEULHIEUH + {0xC34A, 0xD64A}, //11336 #HANGUL SYLLABLE HIEUH O PIEUPSIOS + {0xC34B, 0xD64C}, //11337 #HANGUL SYLLABLE HIEUH O SSANGSIOS + {0xC34C, 0xD64E}, //11338 #HANGUL SYLLABLE HIEUH O CIEUC + {0xC34D, 0xD64F}, //11339 #HANGUL SYLLABLE HIEUH O CHIEUCH + {0xC34E, 0xD650}, //11340 #HANGUL SYLLABLE HIEUH O KHIEUKH + {0xC34F, 0xD652}, //11341 #HANGUL SYLLABLE HIEUH O PHIEUPH + {0xC350, 0xD653}, //11342 #HANGUL SYLLABLE HIEUH O HIEUH + {0xC351, 0xD656}, //11343 #HANGUL SYLLABLE HIEUH WA SSANGKIYEOK + {0xC352, 0xD657}, //11344 #HANGUL SYLLABLE HIEUH WA KIYEOKSIOS + {0xC353, 0xD659}, //11345 #HANGUL SYLLABLE HIEUH WA NIEUNCIEUC + {0xC354, 0xD65A}, //11346 #HANGUL SYLLABLE HIEUH WA NIEUNHIEUH + {0xC355, 0xD65B}, //11347 #HANGUL SYLLABLE HIEUH WA TIKEUT + {0xC356, 0xD65D}, //11348 #HANGUL SYLLABLE HIEUH WA RIEULKIYEOK + {0xC357, 0xD65E}, //11349 #HANGUL SYLLABLE HIEUH WA RIEULMIEUM + {0xC358, 0xD65F}, //11350 #HANGUL SYLLABLE HIEUH WA RIEULPIEUP + {0xC359, 0xD660}, //11351 #HANGUL SYLLABLE HIEUH WA RIEULSIOS + {0xC35A, 0xD661}, //11352 #HANGUL SYLLABLE HIEUH WA RIEULTHIEUTH + {0xC361, 0xD662}, //11353 #HANGUL SYLLABLE HIEUH WA RIEULPHIEUPH + {0xC362, 0xD663}, //11354 #HANGUL SYLLABLE HIEUH WA RIEULHIEUH + {0xC363, 0xD664}, //11355 #HANGUL SYLLABLE HIEUH WA MIEUM + {0xC364, 0xD665}, //11356 #HANGUL SYLLABLE HIEUH WA PIEUP + {0xC365, 0xD666}, //11357 #HANGUL SYLLABLE HIEUH WA PIEUPSIOS + {0xC366, 0xD668}, //11358 #HANGUL SYLLABLE HIEUH WA SSANGSIOS + {0xC367, 0xD66A}, //11359 #HANGUL SYLLABLE HIEUH WA CIEUC + {0xC368, 0xD66B}, //11360 #HANGUL SYLLABLE HIEUH WA CHIEUCH + {0xC369, 0xD66C}, //11361 #HANGUL SYLLABLE HIEUH WA KHIEUKH + {0xC36A, 0xD66D}, //11362 #HANGUL SYLLABLE HIEUH WA THIEUTH + {0xC36B, 0xD66E}, //11363 #HANGUL SYLLABLE HIEUH WA PHIEUPH + {0xC36C, 0xD66F}, //11364 #HANGUL SYLLABLE HIEUH WA HIEUH + {0xC36D, 0xD672}, //11365 #HANGUL SYLLABLE HIEUH WAE SSANGKIYEOK + {0xC36E, 0xD673}, //11366 #HANGUL SYLLABLE HIEUH WAE KIYEOKSIOS + {0xC36F, 0xD675}, //11367 #HANGUL SYLLABLE HIEUH WAE NIEUNCIEUC + {0xC370, 0xD676}, //11368 #HANGUL SYLLABLE HIEUH WAE NIEUNHIEUH + {0xC371, 0xD677}, //11369 #HANGUL SYLLABLE HIEUH WAE TIKEUT + {0xC372, 0xD678}, //11370 #HANGUL SYLLABLE HIEUH WAE RIEUL + {0xC373, 0xD679}, //11371 #HANGUL SYLLABLE HIEUH WAE RIEULKIYEOK + {0xC374, 0xD67A}, //11372 #HANGUL SYLLABLE HIEUH WAE RIEULMIEUM + {0xC375, 0xD67B}, //11373 #HANGUL SYLLABLE HIEUH WAE RIEULPIEUP + {0xC376, 0xD67C}, //11374 #HANGUL SYLLABLE HIEUH WAE RIEULSIOS + {0xC377, 0xD67D}, //11375 #HANGUL SYLLABLE HIEUH WAE RIEULTHIEUTH + {0xC378, 0xD67E}, //11376 #HANGUL SYLLABLE HIEUH WAE RIEULPHIEUPH + {0xC379, 0xD67F}, //11377 #HANGUL SYLLABLE HIEUH WAE RIEULHIEUH + {0xC37A, 0xD680}, //11378 #HANGUL SYLLABLE HIEUH WAE MIEUM + {0xC381, 0xD681}, //11379 #HANGUL SYLLABLE HIEUH WAE PIEUP + {0xC382, 0xD682}, //11380 #HANGUL SYLLABLE HIEUH WAE PIEUPSIOS + {0xC383, 0xD684}, //11381 #HANGUL SYLLABLE HIEUH WAE SSANGSIOS + {0xC384, 0xD686}, //11382 #HANGUL SYLLABLE HIEUH WAE CIEUC + {0xC385, 0xD687}, //11383 #HANGUL SYLLABLE HIEUH WAE CHIEUCH + {0xC386, 0xD688}, //11384 #HANGUL SYLLABLE HIEUH WAE KHIEUKH + {0xC387, 0xD689}, //11385 #HANGUL SYLLABLE HIEUH WAE THIEUTH + {0xC388, 0xD68A}, //11386 #HANGUL SYLLABLE HIEUH WAE PHIEUPH + {0xC389, 0xD68B}, //11387 #HANGUL SYLLABLE HIEUH WAE HIEUH + {0xC38A, 0xD68E}, //11388 #HANGUL SYLLABLE HIEUH OE SSANGKIYEOK + {0xC38B, 0xD68F}, //11389 #HANGUL SYLLABLE HIEUH OE KIYEOKSIOS + {0xC38C, 0xD691}, //11390 #HANGUL SYLLABLE HIEUH OE NIEUNCIEUC + {0xC38D, 0xD692}, //11391 #HANGUL SYLLABLE HIEUH OE NIEUNHIEUH + {0xC38E, 0xD693}, //11392 #HANGUL SYLLABLE HIEUH OE TIKEUT + {0xC38F, 0xD695}, //11393 #HANGUL SYLLABLE HIEUH OE RIEULKIYEOK + {0xC390, 0xD696}, //11394 #HANGUL SYLLABLE HIEUH OE RIEULMIEUM + {0xC391, 0xD697}, //11395 #HANGUL SYLLABLE HIEUH OE RIEULPIEUP + {0xC392, 0xD698}, //11396 #HANGUL SYLLABLE HIEUH OE RIEULSIOS + {0xC393, 0xD699}, //11397 #HANGUL SYLLABLE HIEUH OE RIEULTHIEUTH + {0xC394, 0xD69A}, //11398 #HANGUL SYLLABLE HIEUH OE RIEULPHIEUPH + {0xC395, 0xD69B}, //11399 #HANGUL SYLLABLE HIEUH OE RIEULHIEUH + {0xC396, 0xD69C}, //11400 #HANGUL SYLLABLE HIEUH OE MIEUM + {0xC397, 0xD69E}, //11401 #HANGUL SYLLABLE HIEUH OE PIEUPSIOS + {0xC398, 0xD6A0}, //11402 #HANGUL SYLLABLE HIEUH OE SSANGSIOS + {0xC399, 0xD6A2}, //11403 #HANGUL SYLLABLE HIEUH OE CIEUC + {0xC39A, 0xD6A3}, //11404 #HANGUL SYLLABLE HIEUH OE CHIEUCH + {0xC39B, 0xD6A4}, //11405 #HANGUL SYLLABLE HIEUH OE KHIEUKH + {0xC39C, 0xD6A5}, //11406 #HANGUL SYLLABLE HIEUH OE THIEUTH + {0xC39D, 0xD6A6}, //11407 #HANGUL SYLLABLE HIEUH OE PHIEUPH + {0xC39E, 0xD6A7}, //11408 #HANGUL SYLLABLE HIEUH OE HIEUH + {0xC39F, 0xD6A9}, //11409 #HANGUL SYLLABLE HIEUH YO KIYEOK + {0xC3A0, 0xD6AA}, //11410 #HANGUL SYLLABLE HIEUH YO SSANGKIYEOK + {0xC3A1, 0xCC3C}, //11411 #HANGUL SYLLABLE CHIEUCH A SSANGSIOS + {0xC3A2, 0xCC3D}, //11412 #HANGUL SYLLABLE CHIEUCH A IEUNG + {0xC3A3, 0xCC3E}, //11413 #HANGUL SYLLABLE CHIEUCH A CIEUC + {0xC3A4, 0xCC44}, //11414 #HANGUL SYLLABLE CHIEUCH AE + {0xC3A5, 0xCC45}, //11415 #HANGUL SYLLABLE CHIEUCH AE KIYEOK + {0xC3A6, 0xCC48}, //11416 #HANGUL SYLLABLE CHIEUCH AE NIEUN + {0xC3A7, 0xCC4C}, //11417 #HANGUL SYLLABLE CHIEUCH AE RIEUL + {0xC3A8, 0xCC54}, //11418 #HANGUL SYLLABLE CHIEUCH AE MIEUM + {0xC3A9, 0xCC55}, //11419 #HANGUL SYLLABLE CHIEUCH AE PIEUP + {0xC3AA, 0xCC57}, //11420 #HANGUL SYLLABLE CHIEUCH AE SIOS + {0xC3AB, 0xCC58}, //11421 #HANGUL SYLLABLE CHIEUCH AE SSANGSIOS + {0xC3AC, 0xCC59}, //11422 #HANGUL SYLLABLE CHIEUCH AE IEUNG + {0xC3AD, 0xCC60}, //11423 #HANGUL SYLLABLE CHIEUCH YA + {0xC3AE, 0xCC64}, //11424 #HANGUL SYLLABLE CHIEUCH YA NIEUN + {0xC3AF, 0xCC66}, //11425 #HANGUL SYLLABLE CHIEUCH YA NIEUNHIEUH + {0xC3B0, 0xCC68}, //11426 #HANGUL SYLLABLE CHIEUCH YA RIEUL + {0xC3B1, 0xCC70}, //11427 #HANGUL SYLLABLE CHIEUCH YA MIEUM + {0xC3B2, 0xCC75}, //11428 #HANGUL SYLLABLE CHIEUCH YA IEUNG + {0xC3B3, 0xCC98}, //11429 #HANGUL SYLLABLE CHIEUCH EO + {0xC3B4, 0xCC99}, //11430 #HANGUL SYLLABLE CHIEUCH EO KIYEOK + {0xC3B5, 0xCC9C}, //11431 #HANGUL SYLLABLE CHIEUCH EO NIEUN + {0xC3B6, 0xCCA0}, //11432 #HANGUL SYLLABLE CHIEUCH EO RIEUL + {0xC3B7, 0xCCA8}, //11433 #HANGUL SYLLABLE CHIEUCH EO MIEUM + {0xC3B8, 0xCCA9}, //11434 #HANGUL SYLLABLE CHIEUCH EO PIEUP + {0xC3B9, 0xCCAB}, //11435 #HANGUL SYLLABLE CHIEUCH EO SIOS + {0xC3BA, 0xCCAC}, //11436 #HANGUL SYLLABLE CHIEUCH EO SSANGSIOS + {0xC3BB, 0xCCAD}, //11437 #HANGUL SYLLABLE CHIEUCH EO IEUNG + {0xC3BC, 0xCCB4}, //11438 #HANGUL SYLLABLE CHIEUCH E + {0xC3BD, 0xCCB5}, //11439 #HANGUL SYLLABLE CHIEUCH E KIYEOK + {0xC3BE, 0xCCB8}, //11440 #HANGUL SYLLABLE CHIEUCH E NIEUN + {0xC3BF, 0xCCBC}, //11441 #HANGUL SYLLABLE CHIEUCH E RIEUL + {0xC3C0, 0xCCC4}, //11442 #HANGUL SYLLABLE CHIEUCH E MIEUM + {0xC3C1, 0xCCC5}, //11443 #HANGUL SYLLABLE CHIEUCH E PIEUP + {0xC3C2, 0xCCC7}, //11444 #HANGUL SYLLABLE CHIEUCH E SIOS + {0xC3C3, 0xCCC9}, //11445 #HANGUL SYLLABLE CHIEUCH E IEUNG + {0xC3C4, 0xCCD0}, //11446 #HANGUL SYLLABLE CHIEUCH YEO + {0xC3C5, 0xCCD4}, //11447 #HANGUL SYLLABLE CHIEUCH YEO NIEUN + {0xC3C6, 0xCCE4}, //11448 #HANGUL SYLLABLE CHIEUCH YEO SSANGSIOS + {0xC3C7, 0xCCEC}, //11449 #HANGUL SYLLABLE CHIEUCH YE + {0xC3C8, 0xCCF0}, //11450 #HANGUL SYLLABLE CHIEUCH YE NIEUN + {0xC3C9, 0xCD01}, //11451 #HANGUL SYLLABLE CHIEUCH YE IEUNG + {0xC3CA, 0xCD08}, //11452 #HANGUL SYLLABLE CHIEUCH O + {0xC3CB, 0xCD09}, //11453 #HANGUL SYLLABLE CHIEUCH O KIYEOK + {0xC3CC, 0xCD0C}, //11454 #HANGUL SYLLABLE CHIEUCH O NIEUN + {0xC3CD, 0xCD10}, //11455 #HANGUL SYLLABLE CHIEUCH O RIEUL + {0xC3CE, 0xCD18}, //11456 #HANGUL SYLLABLE CHIEUCH O MIEUM + {0xC3CF, 0xCD19}, //11457 #HANGUL SYLLABLE CHIEUCH O PIEUP + {0xC3D0, 0xCD1B}, //11458 #HANGUL SYLLABLE CHIEUCH O SIOS + {0xC3D1, 0xCD1D}, //11459 #HANGUL SYLLABLE CHIEUCH O IEUNG + {0xC3D2, 0xCD24}, //11460 #HANGUL SYLLABLE CHIEUCH WA + {0xC3D3, 0xCD28}, //11461 #HANGUL SYLLABLE CHIEUCH WA NIEUN + {0xC3D4, 0xCD2C}, //11462 #HANGUL SYLLABLE CHIEUCH WA RIEUL + {0xC3D5, 0xCD39}, //11463 #HANGUL SYLLABLE CHIEUCH WA IEUNG + {0xC3D6, 0xCD5C}, //11464 #HANGUL SYLLABLE CHIEUCH OE + {0xC3D7, 0xCD60}, //11465 #HANGUL SYLLABLE CHIEUCH OE NIEUN + {0xC3D8, 0xCD64}, //11466 #HANGUL SYLLABLE CHIEUCH OE RIEUL + {0xC3D9, 0xCD6C}, //11467 #HANGUL SYLLABLE CHIEUCH OE MIEUM + {0xC3DA, 0xCD6D}, //11468 #HANGUL SYLLABLE CHIEUCH OE PIEUP + {0xC3DB, 0xCD6F}, //11469 #HANGUL SYLLABLE CHIEUCH OE SIOS + {0xC3DC, 0xCD71}, //11470 #HANGUL SYLLABLE CHIEUCH OE IEUNG + {0xC3DD, 0xCD78}, //11471 #HANGUL SYLLABLE CHIEUCH YO + {0xC3DE, 0xCD88}, //11472 #HANGUL SYLLABLE CHIEUCH YO MIEUM + {0xC3DF, 0xCD94}, //11473 #HANGUL SYLLABLE CHIEUCH U + {0xC3E0, 0xCD95}, //11474 #HANGUL SYLLABLE CHIEUCH U KIYEOK + {0xC3E1, 0xCD98}, //11475 #HANGUL SYLLABLE CHIEUCH U NIEUN + {0xC3E2, 0xCD9C}, //11476 #HANGUL SYLLABLE CHIEUCH U RIEUL + {0xC3E3, 0xCDA4}, //11477 #HANGUL SYLLABLE CHIEUCH U MIEUM + {0xC3E4, 0xCDA5}, //11478 #HANGUL SYLLABLE CHIEUCH U PIEUP + {0xC3E5, 0xCDA7}, //11479 #HANGUL SYLLABLE CHIEUCH U SIOS + {0xC3E6, 0xCDA9}, //11480 #HANGUL SYLLABLE CHIEUCH U IEUNG + {0xC3E7, 0xCDB0}, //11481 #HANGUL SYLLABLE CHIEUCH WEO + {0xC3E8, 0xCDC4}, //11482 #HANGUL SYLLABLE CHIEUCH WEO SSANGSIOS + {0xC3E9, 0xCDCC}, //11483 #HANGUL SYLLABLE CHIEUCH WE + {0xC3EA, 0xCDD0}, //11484 #HANGUL SYLLABLE CHIEUCH WE NIEUN + {0xC3EB, 0xCDE8}, //11485 #HANGUL SYLLABLE CHIEUCH WI + {0xC3EC, 0xCDEC}, //11486 #HANGUL SYLLABLE CHIEUCH WI NIEUN + {0xC3ED, 0xCDF0}, //11487 #HANGUL SYLLABLE CHIEUCH WI RIEUL + {0xC3EE, 0xCDF8}, //11488 #HANGUL SYLLABLE CHIEUCH WI MIEUM + {0xC3EF, 0xCDF9}, //11489 #HANGUL SYLLABLE CHIEUCH WI PIEUP + {0xC3F0, 0xCDFB}, //11490 #HANGUL SYLLABLE CHIEUCH WI SIOS + {0xC3F1, 0xCDFD}, //11491 #HANGUL SYLLABLE CHIEUCH WI IEUNG + {0xC3F2, 0xCE04}, //11492 #HANGUL SYLLABLE CHIEUCH YU + {0xC3F3, 0xCE08}, //11493 #HANGUL SYLLABLE CHIEUCH YU NIEUN + {0xC3F4, 0xCE0C}, //11494 #HANGUL SYLLABLE CHIEUCH YU RIEUL + {0xC3F5, 0xCE14}, //11495 #HANGUL SYLLABLE CHIEUCH YU MIEUM + {0xC3F6, 0xCE19}, //11496 #HANGUL SYLLABLE CHIEUCH YU IEUNG + {0xC3F7, 0xCE20}, //11497 #HANGUL SYLLABLE CHIEUCH EU + {0xC3F8, 0xCE21}, //11498 #HANGUL SYLLABLE CHIEUCH EU KIYEOK + {0xC3F9, 0xCE24}, //11499 #HANGUL SYLLABLE CHIEUCH EU NIEUN + {0xC3FA, 0xCE28}, //11500 #HANGUL SYLLABLE CHIEUCH EU RIEUL + {0xC3FB, 0xCE30}, //11501 #HANGUL SYLLABLE CHIEUCH EU MIEUM + {0xC3FC, 0xCE31}, //11502 #HANGUL SYLLABLE CHIEUCH EU PIEUP + {0xC3FD, 0xCE33}, //11503 #HANGUL SYLLABLE CHIEUCH EU SIOS + {0xC3FE, 0xCE35}, //11504 #HANGUL SYLLABLE CHIEUCH EU IEUNG + {0xC441, 0xD6AB}, //11505 #HANGUL SYLLABLE HIEUH YO KIYEOKSIOS + {0xC442, 0xD6AD}, //11506 #HANGUL SYLLABLE HIEUH YO NIEUNCIEUC + {0xC443, 0xD6AE}, //11507 #HANGUL SYLLABLE HIEUH YO NIEUNHIEUH + {0xC444, 0xD6AF}, //11508 #HANGUL SYLLABLE HIEUH YO TIKEUT + {0xC445, 0xD6B1}, //11509 #HANGUL SYLLABLE HIEUH YO RIEULKIYEOK + {0xC446, 0xD6B2}, //11510 #HANGUL SYLLABLE HIEUH YO RIEULMIEUM + {0xC447, 0xD6B3}, //11511 #HANGUL SYLLABLE HIEUH YO RIEULPIEUP + {0xC448, 0xD6B4}, //11512 #HANGUL SYLLABLE HIEUH YO RIEULSIOS + {0xC449, 0xD6B5}, //11513 #HANGUL SYLLABLE HIEUH YO RIEULTHIEUTH + {0xC44A, 0xD6B6}, //11514 #HANGUL SYLLABLE HIEUH YO RIEULPHIEUPH + {0xC44B, 0xD6B7}, //11515 #HANGUL SYLLABLE HIEUH YO RIEULHIEUH + {0xC44C, 0xD6B8}, //11516 #HANGUL SYLLABLE HIEUH YO MIEUM + {0xC44D, 0xD6BA}, //11517 #HANGUL SYLLABLE HIEUH YO PIEUPSIOS + {0xC44E, 0xD6BC}, //11518 #HANGUL SYLLABLE HIEUH YO SSANGSIOS + {0xC44F, 0xD6BD}, //11519 #HANGUL SYLLABLE HIEUH YO IEUNG + {0xC450, 0xD6BE}, //11520 #HANGUL SYLLABLE HIEUH YO CIEUC + {0xC451, 0xD6BF}, //11521 #HANGUL SYLLABLE HIEUH YO CHIEUCH + {0xC452, 0xD6C0}, //11522 #HANGUL SYLLABLE HIEUH YO KHIEUKH + {0xC453, 0xD6C1}, //11523 #HANGUL SYLLABLE HIEUH YO THIEUTH + {0xC454, 0xD6C2}, //11524 #HANGUL SYLLABLE HIEUH YO PHIEUPH + {0xC455, 0xD6C3}, //11525 #HANGUL SYLLABLE HIEUH YO HIEUH + {0xC456, 0xD6C6}, //11526 #HANGUL SYLLABLE HIEUH U SSANGKIYEOK + {0xC457, 0xD6C7}, //11527 #HANGUL SYLLABLE HIEUH U KIYEOKSIOS + {0xC458, 0xD6C9}, //11528 #HANGUL SYLLABLE HIEUH U NIEUNCIEUC + {0xC459, 0xD6CA}, //11529 #HANGUL SYLLABLE HIEUH U NIEUNHIEUH + {0xC45A, 0xD6CB}, //11530 #HANGUL SYLLABLE HIEUH U TIKEUT + {0xC461, 0xD6CD}, //11531 #HANGUL SYLLABLE HIEUH U RIEULKIYEOK + {0xC462, 0xD6CE}, //11532 #HANGUL SYLLABLE HIEUH U RIEULMIEUM + {0xC463, 0xD6CF}, //11533 #HANGUL SYLLABLE HIEUH U RIEULPIEUP + {0xC464, 0xD6D0}, //11534 #HANGUL SYLLABLE HIEUH U RIEULSIOS + {0xC465, 0xD6D2}, //11535 #HANGUL SYLLABLE HIEUH U RIEULPHIEUPH + {0xC466, 0xD6D3}, //11536 #HANGUL SYLLABLE HIEUH U RIEULHIEUH + {0xC467, 0xD6D5}, //11537 #HANGUL SYLLABLE HIEUH U PIEUP + {0xC468, 0xD6D6}, //11538 #HANGUL SYLLABLE HIEUH U PIEUPSIOS + {0xC469, 0xD6D8}, //11539 #HANGUL SYLLABLE HIEUH U SSANGSIOS + {0xC46A, 0xD6DA}, //11540 #HANGUL SYLLABLE HIEUH U CIEUC + {0xC46B, 0xD6DB}, //11541 #HANGUL SYLLABLE HIEUH U CHIEUCH + {0xC46C, 0xD6DC}, //11542 #HANGUL SYLLABLE HIEUH U KHIEUKH + {0xC46D, 0xD6DD}, //11543 #HANGUL SYLLABLE HIEUH U THIEUTH + {0xC46E, 0xD6DE}, //11544 #HANGUL SYLLABLE HIEUH U PHIEUPH + {0xC46F, 0xD6DF}, //11545 #HANGUL SYLLABLE HIEUH U HIEUH + {0xC470, 0xD6E1}, //11546 #HANGUL SYLLABLE HIEUH WEO KIYEOK + {0xC471, 0xD6E2}, //11547 #HANGUL SYLLABLE HIEUH WEO SSANGKIYEOK + {0xC472, 0xD6E3}, //11548 #HANGUL SYLLABLE HIEUH WEO KIYEOKSIOS + {0xC473, 0xD6E5}, //11549 #HANGUL SYLLABLE HIEUH WEO NIEUNCIEUC + {0xC474, 0xD6E6}, //11550 #HANGUL SYLLABLE HIEUH WEO NIEUNHIEUH + {0xC475, 0xD6E7}, //11551 #HANGUL SYLLABLE HIEUH WEO TIKEUT + {0xC476, 0xD6E9}, //11552 #HANGUL SYLLABLE HIEUH WEO RIEULKIYEOK + {0xC477, 0xD6EA}, //11553 #HANGUL SYLLABLE HIEUH WEO RIEULMIEUM + {0xC478, 0xD6EB}, //11554 #HANGUL SYLLABLE HIEUH WEO RIEULPIEUP + {0xC479, 0xD6EC}, //11555 #HANGUL SYLLABLE HIEUH WEO RIEULSIOS + {0xC47A, 0xD6ED}, //11556 #HANGUL SYLLABLE HIEUH WEO RIEULTHIEUTH + {0xC481, 0xD6EE}, //11557 #HANGUL SYLLABLE HIEUH WEO RIEULPHIEUPH + {0xC482, 0xD6EF}, //11558 #HANGUL SYLLABLE HIEUH WEO RIEULHIEUH + {0xC483, 0xD6F1}, //11559 #HANGUL SYLLABLE HIEUH WEO PIEUP + {0xC484, 0xD6F2}, //11560 #HANGUL SYLLABLE HIEUH WEO PIEUPSIOS + {0xC485, 0xD6F3}, //11561 #HANGUL SYLLABLE HIEUH WEO SIOS + {0xC486, 0xD6F4}, //11562 #HANGUL SYLLABLE HIEUH WEO SSANGSIOS + {0xC487, 0xD6F6}, //11563 #HANGUL SYLLABLE HIEUH WEO CIEUC + {0xC488, 0xD6F7}, //11564 #HANGUL SYLLABLE HIEUH WEO CHIEUCH + {0xC489, 0xD6F8}, //11565 #HANGUL SYLLABLE HIEUH WEO KHIEUKH + {0xC48A, 0xD6F9}, //11566 #HANGUL SYLLABLE HIEUH WEO THIEUTH + {0xC48B, 0xD6FA}, //11567 #HANGUL SYLLABLE HIEUH WEO PHIEUPH + {0xC48C, 0xD6FB}, //11568 #HANGUL SYLLABLE HIEUH WEO HIEUH + {0xC48D, 0xD6FE}, //11569 #HANGUL SYLLABLE HIEUH WE SSANGKIYEOK + {0xC48E, 0xD6FF}, //11570 #HANGUL SYLLABLE HIEUH WE KIYEOKSIOS + {0xC48F, 0xD701}, //11571 #HANGUL SYLLABLE HIEUH WE NIEUNCIEUC + {0xC490, 0xD702}, //11572 #HANGUL SYLLABLE HIEUH WE NIEUNHIEUH + {0xC491, 0xD703}, //11573 #HANGUL SYLLABLE HIEUH WE TIKEUT + {0xC492, 0xD705}, //11574 #HANGUL SYLLABLE HIEUH WE RIEULKIYEOK + {0xC493, 0xD706}, //11575 #HANGUL SYLLABLE HIEUH WE RIEULMIEUM + {0xC494, 0xD707}, //11576 #HANGUL SYLLABLE HIEUH WE RIEULPIEUP + {0xC495, 0xD708}, //11577 #HANGUL SYLLABLE HIEUH WE RIEULSIOS + {0xC496, 0xD709}, //11578 #HANGUL SYLLABLE HIEUH WE RIEULTHIEUTH + {0xC497, 0xD70A}, //11579 #HANGUL SYLLABLE HIEUH WE RIEULPHIEUPH + {0xC498, 0xD70B}, //11580 #HANGUL SYLLABLE HIEUH WE RIEULHIEUH + {0xC499, 0xD70C}, //11581 #HANGUL SYLLABLE HIEUH WE MIEUM + {0xC49A, 0xD70D}, //11582 #HANGUL SYLLABLE HIEUH WE PIEUP + {0xC49B, 0xD70E}, //11583 #HANGUL SYLLABLE HIEUH WE PIEUPSIOS + {0xC49C, 0xD70F}, //11584 #HANGUL SYLLABLE HIEUH WE SIOS + {0xC49D, 0xD710}, //11585 #HANGUL SYLLABLE HIEUH WE SSANGSIOS + {0xC49E, 0xD712}, //11586 #HANGUL SYLLABLE HIEUH WE CIEUC + {0xC49F, 0xD713}, //11587 #HANGUL SYLLABLE HIEUH WE CHIEUCH + {0xC4A0, 0xD714}, //11588 #HANGUL SYLLABLE HIEUH WE KHIEUKH + {0xC4A1, 0xCE58}, //11589 #HANGUL SYLLABLE CHIEUCH I + {0xC4A2, 0xCE59}, //11590 #HANGUL SYLLABLE CHIEUCH I KIYEOK + {0xC4A3, 0xCE5C}, //11591 #HANGUL SYLLABLE CHIEUCH I NIEUN + {0xC4A4, 0xCE5F}, //11592 #HANGUL SYLLABLE CHIEUCH I TIKEUT + {0xC4A5, 0xCE60}, //11593 #HANGUL SYLLABLE CHIEUCH I RIEUL + {0xC4A6, 0xCE61}, //11594 #HANGUL SYLLABLE CHIEUCH I RIEULKIYEOK + {0xC4A7, 0xCE68}, //11595 #HANGUL SYLLABLE CHIEUCH I MIEUM + {0xC4A8, 0xCE69}, //11596 #HANGUL SYLLABLE CHIEUCH I PIEUP + {0xC4A9, 0xCE6B}, //11597 #HANGUL SYLLABLE CHIEUCH I SIOS + {0xC4AA, 0xCE6D}, //11598 #HANGUL SYLLABLE CHIEUCH I IEUNG + {0xC4AB, 0xCE74}, //11599 #HANGUL SYLLABLE KHIEUKH A + {0xC4AC, 0xCE75}, //11600 #HANGUL SYLLABLE KHIEUKH A KIYEOK + {0xC4AD, 0xCE78}, //11601 #HANGUL SYLLABLE KHIEUKH A NIEUN + {0xC4AE, 0xCE7C}, //11602 #HANGUL SYLLABLE KHIEUKH A RIEUL + {0xC4AF, 0xCE84}, //11603 #HANGUL SYLLABLE KHIEUKH A MIEUM + {0xC4B0, 0xCE85}, //11604 #HANGUL SYLLABLE KHIEUKH A PIEUP + {0xC4B1, 0xCE87}, //11605 #HANGUL SYLLABLE KHIEUKH A SIOS + {0xC4B2, 0xCE89}, //11606 #HANGUL SYLLABLE KHIEUKH A IEUNG + {0xC4B3, 0xCE90}, //11607 #HANGUL SYLLABLE KHIEUKH AE + {0xC4B4, 0xCE91}, //11608 #HANGUL SYLLABLE KHIEUKH AE KIYEOK + {0xC4B5, 0xCE94}, //11609 #HANGUL SYLLABLE KHIEUKH AE NIEUN + {0xC4B6, 0xCE98}, //11610 #HANGUL SYLLABLE KHIEUKH AE RIEUL + {0xC4B7, 0xCEA0}, //11611 #HANGUL SYLLABLE KHIEUKH AE MIEUM + {0xC4B8, 0xCEA1}, //11612 #HANGUL SYLLABLE KHIEUKH AE PIEUP + {0xC4B9, 0xCEA3}, //11613 #HANGUL SYLLABLE KHIEUKH AE SIOS + {0xC4BA, 0xCEA4}, //11614 #HANGUL SYLLABLE KHIEUKH AE SSANGSIOS + {0xC4BB, 0xCEA5}, //11615 #HANGUL SYLLABLE KHIEUKH AE IEUNG + {0xC4BC, 0xCEAC}, //11616 #HANGUL SYLLABLE KHIEUKH YA + {0xC4BD, 0xCEAD}, //11617 #HANGUL SYLLABLE KHIEUKH YA KIYEOK + {0xC4BE, 0xCEC1}, //11618 #HANGUL SYLLABLE KHIEUKH YA IEUNG + {0xC4BF, 0xCEE4}, //11619 #HANGUL SYLLABLE KHIEUKH EO + {0xC4C0, 0xCEE5}, //11620 #HANGUL SYLLABLE KHIEUKH EO KIYEOK + {0xC4C1, 0xCEE8}, //11621 #HANGUL SYLLABLE KHIEUKH EO NIEUN + {0xC4C2, 0xCEEB}, //11622 #HANGUL SYLLABLE KHIEUKH EO TIKEUT + {0xC4C3, 0xCEEC}, //11623 #HANGUL SYLLABLE KHIEUKH EO RIEUL + {0xC4C4, 0xCEF4}, //11624 #HANGUL SYLLABLE KHIEUKH EO MIEUM + {0xC4C5, 0xCEF5}, //11625 #HANGUL SYLLABLE KHIEUKH EO PIEUP + {0xC4C6, 0xCEF7}, //11626 #HANGUL SYLLABLE KHIEUKH EO SIOS + {0xC4C7, 0xCEF8}, //11627 #HANGUL SYLLABLE KHIEUKH EO SSANGSIOS + {0xC4C8, 0xCEF9}, //11628 #HANGUL SYLLABLE KHIEUKH EO IEUNG + {0xC4C9, 0xCF00}, //11629 #HANGUL SYLLABLE KHIEUKH E + {0xC4CA, 0xCF01}, //11630 #HANGUL SYLLABLE KHIEUKH E KIYEOK + {0xC4CB, 0xCF04}, //11631 #HANGUL SYLLABLE KHIEUKH E NIEUN + {0xC4CC, 0xCF08}, //11632 #HANGUL SYLLABLE KHIEUKH E RIEUL + {0xC4CD, 0xCF10}, //11633 #HANGUL SYLLABLE KHIEUKH E MIEUM + {0xC4CE, 0xCF11}, //11634 #HANGUL SYLLABLE KHIEUKH E PIEUP + {0xC4CF, 0xCF13}, //11635 #HANGUL SYLLABLE KHIEUKH E SIOS + {0xC4D0, 0xCF15}, //11636 #HANGUL SYLLABLE KHIEUKH E IEUNG + {0xC4D1, 0xCF1C}, //11637 #HANGUL SYLLABLE KHIEUKH YEO + {0xC4D2, 0xCF20}, //11638 #HANGUL SYLLABLE KHIEUKH YEO NIEUN + {0xC4D3, 0xCF24}, //11639 #HANGUL SYLLABLE KHIEUKH YEO RIEUL + {0xC4D4, 0xCF2C}, //11640 #HANGUL SYLLABLE KHIEUKH YEO MIEUM + {0xC4D5, 0xCF2D}, //11641 #HANGUL SYLLABLE KHIEUKH YEO PIEUP + {0xC4D6, 0xCF2F}, //11642 #HANGUL SYLLABLE KHIEUKH YEO SIOS + {0xC4D7, 0xCF30}, //11643 #HANGUL SYLLABLE KHIEUKH YEO SSANGSIOS + {0xC4D8, 0xCF31}, //11644 #HANGUL SYLLABLE KHIEUKH YEO IEUNG + {0xC4D9, 0xCF38}, //11645 #HANGUL SYLLABLE KHIEUKH YE + {0xC4DA, 0xCF54}, //11646 #HANGUL SYLLABLE KHIEUKH O + {0xC4DB, 0xCF55}, //11647 #HANGUL SYLLABLE KHIEUKH O KIYEOK + {0xC4DC, 0xCF58}, //11648 #HANGUL SYLLABLE KHIEUKH O NIEUN + {0xC4DD, 0xCF5C}, //11649 #HANGUL SYLLABLE KHIEUKH O RIEUL + {0xC4DE, 0xCF64}, //11650 #HANGUL SYLLABLE KHIEUKH O MIEUM + {0xC4DF, 0xCF65}, //11651 #HANGUL SYLLABLE KHIEUKH O PIEUP + {0xC4E0, 0xCF67}, //11652 #HANGUL SYLLABLE KHIEUKH O SIOS + {0xC4E1, 0xCF69}, //11653 #HANGUL SYLLABLE KHIEUKH O IEUNG + {0xC4E2, 0xCF70}, //11654 #HANGUL SYLLABLE KHIEUKH WA + {0xC4E3, 0xCF71}, //11655 #HANGUL SYLLABLE KHIEUKH WA KIYEOK + {0xC4E4, 0xCF74}, //11656 #HANGUL SYLLABLE KHIEUKH WA NIEUN + {0xC4E5, 0xCF78}, //11657 #HANGUL SYLLABLE KHIEUKH WA RIEUL + {0xC4E6, 0xCF80}, //11658 #HANGUL SYLLABLE KHIEUKH WA MIEUM + {0xC4E7, 0xCF85}, //11659 #HANGUL SYLLABLE KHIEUKH WA IEUNG + {0xC4E8, 0xCF8C}, //11660 #HANGUL SYLLABLE KHIEUKH WAE + {0xC4E9, 0xCFA1}, //11661 #HANGUL SYLLABLE KHIEUKH WAE IEUNG + {0xC4EA, 0xCFA8}, //11662 #HANGUL SYLLABLE KHIEUKH OE + {0xC4EB, 0xCFB0}, //11663 #HANGUL SYLLABLE KHIEUKH OE RIEUL + {0xC4EC, 0xCFC4}, //11664 #HANGUL SYLLABLE KHIEUKH YO + {0xC4ED, 0xCFE0}, //11665 #HANGUL SYLLABLE KHIEUKH U + {0xC4EE, 0xCFE1}, //11666 #HANGUL SYLLABLE KHIEUKH U KIYEOK + {0xC4EF, 0xCFE4}, //11667 #HANGUL SYLLABLE KHIEUKH U NIEUN + {0xC4F0, 0xCFE8}, //11668 #HANGUL SYLLABLE KHIEUKH U RIEUL + {0xC4F1, 0xCFF0}, //11669 #HANGUL SYLLABLE KHIEUKH U MIEUM + {0xC4F2, 0xCFF1}, //11670 #HANGUL SYLLABLE KHIEUKH U PIEUP + {0xC4F3, 0xCFF3}, //11671 #HANGUL SYLLABLE KHIEUKH U SIOS + {0xC4F4, 0xCFF5}, //11672 #HANGUL SYLLABLE KHIEUKH U IEUNG + {0xC4F5, 0xCFFC}, //11673 #HANGUL SYLLABLE KHIEUKH WEO + {0xC4F6, 0xD000}, //11674 #HANGUL SYLLABLE KHIEUKH WEO NIEUN + {0xC4F7, 0xD004}, //11675 #HANGUL SYLLABLE KHIEUKH WEO RIEUL + {0xC4F8, 0xD011}, //11676 #HANGUL SYLLABLE KHIEUKH WEO IEUNG + {0xC4F9, 0xD018}, //11677 #HANGUL SYLLABLE KHIEUKH WE + {0xC4FA, 0xD02D}, //11678 #HANGUL SYLLABLE KHIEUKH WE IEUNG + {0xC4FB, 0xD034}, //11679 #HANGUL SYLLABLE KHIEUKH WI + {0xC4FC, 0xD035}, //11680 #HANGUL SYLLABLE KHIEUKH WI KIYEOK + {0xC4FD, 0xD038}, //11681 #HANGUL SYLLABLE KHIEUKH WI NIEUN + {0xC4FE, 0xD03C}, //11682 #HANGUL SYLLABLE KHIEUKH WI RIEUL + {0xC541, 0xD715}, //11683 #HANGUL SYLLABLE HIEUH WE THIEUTH + {0xC542, 0xD716}, //11684 #HANGUL SYLLABLE HIEUH WE PHIEUPH + {0xC543, 0xD717}, //11685 #HANGUL SYLLABLE HIEUH WE HIEUH + {0xC544, 0xD71A}, //11686 #HANGUL SYLLABLE HIEUH WI SSANGKIYEOK + {0xC545, 0xD71B}, //11687 #HANGUL SYLLABLE HIEUH WI KIYEOKSIOS + {0xC546, 0xD71D}, //11688 #HANGUL SYLLABLE HIEUH WI NIEUNCIEUC + {0xC547, 0xD71E}, //11689 #HANGUL SYLLABLE HIEUH WI NIEUNHIEUH + {0xC548, 0xD71F}, //11690 #HANGUL SYLLABLE HIEUH WI TIKEUT + {0xC549, 0xD721}, //11691 #HANGUL SYLLABLE HIEUH WI RIEULKIYEOK + {0xC54A, 0xD722}, //11692 #HANGUL SYLLABLE HIEUH WI RIEULMIEUM + {0xC54B, 0xD723}, //11693 #HANGUL SYLLABLE HIEUH WI RIEULPIEUP + {0xC54C, 0xD724}, //11694 #HANGUL SYLLABLE HIEUH WI RIEULSIOS + {0xC54D, 0xD725}, //11695 #HANGUL SYLLABLE HIEUH WI RIEULTHIEUTH + {0xC54E, 0xD726}, //11696 #HANGUL SYLLABLE HIEUH WI RIEULPHIEUPH + {0xC54F, 0xD727}, //11697 #HANGUL SYLLABLE HIEUH WI RIEULHIEUH + {0xC550, 0xD72A}, //11698 #HANGUL SYLLABLE HIEUH WI PIEUPSIOS + {0xC551, 0xD72C}, //11699 #HANGUL SYLLABLE HIEUH WI SSANGSIOS + {0xC552, 0xD72E}, //11700 #HANGUL SYLLABLE HIEUH WI CIEUC + {0xC553, 0xD72F}, //11701 #HANGUL SYLLABLE HIEUH WI CHIEUCH + {0xC554, 0xD730}, //11702 #HANGUL SYLLABLE HIEUH WI KHIEUKH + {0xC555, 0xD731}, //11703 #HANGUL SYLLABLE HIEUH WI THIEUTH + {0xC556, 0xD732}, //11704 #HANGUL SYLLABLE HIEUH WI PHIEUPH + {0xC557, 0xD733}, //11705 #HANGUL SYLLABLE HIEUH WI HIEUH + {0xC558, 0xD736}, //11706 #HANGUL SYLLABLE HIEUH YU SSANGKIYEOK + {0xC559, 0xD737}, //11707 #HANGUL SYLLABLE HIEUH YU KIYEOKSIOS + {0xC55A, 0xD739}, //11708 #HANGUL SYLLABLE HIEUH YU NIEUNCIEUC + {0xC561, 0xD73A}, //11709 #HANGUL SYLLABLE HIEUH YU NIEUNHIEUH + {0xC562, 0xD73B}, //11710 #HANGUL SYLLABLE HIEUH YU TIKEUT + {0xC563, 0xD73D}, //11711 #HANGUL SYLLABLE HIEUH YU RIEULKIYEOK + {0xC564, 0xD73E}, //11712 #HANGUL SYLLABLE HIEUH YU RIEULMIEUM + {0xC565, 0xD73F}, //11713 #HANGUL SYLLABLE HIEUH YU RIEULPIEUP + {0xC566, 0xD740}, //11714 #HANGUL SYLLABLE HIEUH YU RIEULSIOS + {0xC567, 0xD741}, //11715 #HANGUL SYLLABLE HIEUH YU RIEULTHIEUTH + {0xC568, 0xD742}, //11716 #HANGUL SYLLABLE HIEUH YU RIEULPHIEUPH + {0xC569, 0xD743}, //11717 #HANGUL SYLLABLE HIEUH YU RIEULHIEUH + {0xC56A, 0xD745}, //11718 #HANGUL SYLLABLE HIEUH YU PIEUP + {0xC56B, 0xD746}, //11719 #HANGUL SYLLABLE HIEUH YU PIEUPSIOS + {0xC56C, 0xD748}, //11720 #HANGUL SYLLABLE HIEUH YU SSANGSIOS + {0xC56D, 0xD74A}, //11721 #HANGUL SYLLABLE HIEUH YU CIEUC + {0xC56E, 0xD74B}, //11722 #HANGUL SYLLABLE HIEUH YU CHIEUCH + {0xC56F, 0xD74C}, //11723 #HANGUL SYLLABLE HIEUH YU KHIEUKH + {0xC570, 0xD74D}, //11724 #HANGUL SYLLABLE HIEUH YU THIEUTH + {0xC571, 0xD74E}, //11725 #HANGUL SYLLABLE HIEUH YU PHIEUPH + {0xC572, 0xD74F}, //11726 #HANGUL SYLLABLE HIEUH YU HIEUH + {0xC573, 0xD752}, //11727 #HANGUL SYLLABLE HIEUH EU SSANGKIYEOK + {0xC574, 0xD753}, //11728 #HANGUL SYLLABLE HIEUH EU KIYEOKSIOS + {0xC575, 0xD755}, //11729 #HANGUL SYLLABLE HIEUH EU NIEUNCIEUC + {0xC576, 0xD75A}, //11730 #HANGUL SYLLABLE HIEUH EU RIEULMIEUM + {0xC577, 0xD75B}, //11731 #HANGUL SYLLABLE HIEUH EU RIEULPIEUP + {0xC578, 0xD75C}, //11732 #HANGUL SYLLABLE HIEUH EU RIEULSIOS + {0xC579, 0xD75D}, //11733 #HANGUL SYLLABLE HIEUH EU RIEULTHIEUTH + {0xC57A, 0xD75E}, //11734 #HANGUL SYLLABLE HIEUH EU RIEULPHIEUPH + {0xC581, 0xD75F}, //11735 #HANGUL SYLLABLE HIEUH EU RIEULHIEUH + {0xC582, 0xD762}, //11736 #HANGUL SYLLABLE HIEUH EU PIEUPSIOS + {0xC583, 0xD764}, //11737 #HANGUL SYLLABLE HIEUH EU SSANGSIOS + {0xC584, 0xD766}, //11738 #HANGUL SYLLABLE HIEUH EU CIEUC + {0xC585, 0xD767}, //11739 #HANGUL SYLLABLE HIEUH EU CHIEUCH + {0xC586, 0xD768}, //11740 #HANGUL SYLLABLE HIEUH EU KHIEUKH + {0xC587, 0xD76A}, //11741 #HANGUL SYLLABLE HIEUH EU PHIEUPH + {0xC588, 0xD76B}, //11742 #HANGUL SYLLABLE HIEUH EU HIEUH + {0xC589, 0xD76D}, //11743 #HANGUL SYLLABLE HIEUH YI KIYEOK + {0xC58A, 0xD76E}, //11744 #HANGUL SYLLABLE HIEUH YI SSANGKIYEOK + {0xC58B, 0xD76F}, //11745 #HANGUL SYLLABLE HIEUH YI KIYEOKSIOS + {0xC58C, 0xD771}, //11746 #HANGUL SYLLABLE HIEUH YI NIEUNCIEUC + {0xC58D, 0xD772}, //11747 #HANGUL SYLLABLE HIEUH YI NIEUNHIEUH + {0xC58E, 0xD773}, //11748 #HANGUL SYLLABLE HIEUH YI TIKEUT + {0xC58F, 0xD775}, //11749 #HANGUL SYLLABLE HIEUH YI RIEULKIYEOK + {0xC590, 0xD776}, //11750 #HANGUL SYLLABLE HIEUH YI RIEULMIEUM + {0xC591, 0xD777}, //11751 #HANGUL SYLLABLE HIEUH YI RIEULPIEUP + {0xC592, 0xD778}, //11752 #HANGUL SYLLABLE HIEUH YI RIEULSIOS + {0xC593, 0xD779}, //11753 #HANGUL SYLLABLE HIEUH YI RIEULTHIEUTH + {0xC594, 0xD77A}, //11754 #HANGUL SYLLABLE HIEUH YI RIEULPHIEUPH + {0xC595, 0xD77B}, //11755 #HANGUL SYLLABLE HIEUH YI RIEULHIEUH + {0xC596, 0xD77E}, //11756 #HANGUL SYLLABLE HIEUH YI PIEUPSIOS + {0xC597, 0xD77F}, //11757 #HANGUL SYLLABLE HIEUH YI SIOS + {0xC598, 0xD780}, //11758 #HANGUL SYLLABLE HIEUH YI SSANGSIOS + {0xC599, 0xD782}, //11759 #HANGUL SYLLABLE HIEUH YI CIEUC + {0xC59A, 0xD783}, //11760 #HANGUL SYLLABLE HIEUH YI CHIEUCH + {0xC59B, 0xD784}, //11761 #HANGUL SYLLABLE HIEUH YI KHIEUKH + {0xC59C, 0xD785}, //11762 #HANGUL SYLLABLE HIEUH YI THIEUTH + {0xC59D, 0xD786}, //11763 #HANGUL SYLLABLE HIEUH YI PHIEUPH + {0xC59E, 0xD787}, //11764 #HANGUL SYLLABLE HIEUH YI HIEUH + {0xC59F, 0xD78A}, //11765 #HANGUL SYLLABLE HIEUH I SSANGKIYEOK + {0xC5A0, 0xD78B}, //11766 #HANGUL SYLLABLE HIEUH I KIYEOKSIOS + {0xC5A1, 0xD044}, //11767 #HANGUL SYLLABLE KHIEUKH WI MIEUM + {0xC5A2, 0xD045}, //11768 #HANGUL SYLLABLE KHIEUKH WI PIEUP + {0xC5A3, 0xD047}, //11769 #HANGUL SYLLABLE KHIEUKH WI SIOS + {0xC5A4, 0xD049}, //11770 #HANGUL SYLLABLE KHIEUKH WI IEUNG + {0xC5A5, 0xD050}, //11771 #HANGUL SYLLABLE KHIEUKH YU + {0xC5A6, 0xD054}, //11772 #HANGUL SYLLABLE KHIEUKH YU NIEUN + {0xC5A7, 0xD058}, //11773 #HANGUL SYLLABLE KHIEUKH YU RIEUL + {0xC5A8, 0xD060}, //11774 #HANGUL SYLLABLE KHIEUKH YU MIEUM + {0xC5A9, 0xD06C}, //11775 #HANGUL SYLLABLE KHIEUKH EU + {0xC5AA, 0xD06D}, //11776 #HANGUL SYLLABLE KHIEUKH EU KIYEOK + {0xC5AB, 0xD070}, //11777 #HANGUL SYLLABLE KHIEUKH EU NIEUN + {0xC5AC, 0xD074}, //11778 #HANGUL SYLLABLE KHIEUKH EU RIEUL + {0xC5AD, 0xD07C}, //11779 #HANGUL SYLLABLE KHIEUKH EU MIEUM + {0xC5AE, 0xD07D}, //11780 #HANGUL SYLLABLE KHIEUKH EU PIEUP + {0xC5AF, 0xD081}, //11781 #HANGUL SYLLABLE KHIEUKH EU IEUNG + {0xC5B0, 0xD0A4}, //11782 #HANGUL SYLLABLE KHIEUKH I + {0xC5B1, 0xD0A5}, //11783 #HANGUL SYLLABLE KHIEUKH I KIYEOK + {0xC5B2, 0xD0A8}, //11784 #HANGUL SYLLABLE KHIEUKH I NIEUN + {0xC5B3, 0xD0AC}, //11785 #HANGUL SYLLABLE KHIEUKH I RIEUL + {0xC5B4, 0xD0B4}, //11786 #HANGUL SYLLABLE KHIEUKH I MIEUM + {0xC5B5, 0xD0B5}, //11787 #HANGUL SYLLABLE KHIEUKH I PIEUP + {0xC5B6, 0xD0B7}, //11788 #HANGUL SYLLABLE KHIEUKH I SIOS + {0xC5B7, 0xD0B9}, //11789 #HANGUL SYLLABLE KHIEUKH I IEUNG + {0xC5B8, 0xD0C0}, //11790 #HANGUL SYLLABLE THIEUTH A + {0xC5B9, 0xD0C1}, //11791 #HANGUL SYLLABLE THIEUTH A KIYEOK + {0xC5BA, 0xD0C4}, //11792 #HANGUL SYLLABLE THIEUTH A NIEUN + {0xC5BB, 0xD0C8}, //11793 #HANGUL SYLLABLE THIEUTH A RIEUL + {0xC5BC, 0xD0C9}, //11794 #HANGUL SYLLABLE THIEUTH A RIEULKIYEOK + {0xC5BD, 0xD0D0}, //11795 #HANGUL SYLLABLE THIEUTH A MIEUM + {0xC5BE, 0xD0D1}, //11796 #HANGUL SYLLABLE THIEUTH A PIEUP + {0xC5BF, 0xD0D3}, //11797 #HANGUL SYLLABLE THIEUTH A SIOS + {0xC5C0, 0xD0D4}, //11798 #HANGUL SYLLABLE THIEUTH A SSANGSIOS + {0xC5C1, 0xD0D5}, //11799 #HANGUL SYLLABLE THIEUTH A IEUNG + {0xC5C2, 0xD0DC}, //11800 #HANGUL SYLLABLE THIEUTH AE + {0xC5C3, 0xD0DD}, //11801 #HANGUL SYLLABLE THIEUTH AE KIYEOK + {0xC5C4, 0xD0E0}, //11802 #HANGUL SYLLABLE THIEUTH AE NIEUN + {0xC5C5, 0xD0E4}, //11803 #HANGUL SYLLABLE THIEUTH AE RIEUL + {0xC5C6, 0xD0EC}, //11804 #HANGUL SYLLABLE THIEUTH AE MIEUM + {0xC5C7, 0xD0ED}, //11805 #HANGUL SYLLABLE THIEUTH AE PIEUP + {0xC5C8, 0xD0EF}, //11806 #HANGUL SYLLABLE THIEUTH AE SIOS + {0xC5C9, 0xD0F0}, //11807 #HANGUL SYLLABLE THIEUTH AE SSANGSIOS + {0xC5CA, 0xD0F1}, //11808 #HANGUL SYLLABLE THIEUTH AE IEUNG + {0xC5CB, 0xD0F8}, //11809 #HANGUL SYLLABLE THIEUTH YA + {0xC5CC, 0xD10D}, //11810 #HANGUL SYLLABLE THIEUTH YA IEUNG + {0xC5CD, 0xD130}, //11811 #HANGUL SYLLABLE THIEUTH EO + {0xC5CE, 0xD131}, //11812 #HANGUL SYLLABLE THIEUTH EO KIYEOK + {0xC5CF, 0xD134}, //11813 #HANGUL SYLLABLE THIEUTH EO NIEUN + {0xC5D0, 0xD138}, //11814 #HANGUL SYLLABLE THIEUTH EO RIEUL + {0xC5D1, 0xD13A}, //11815 #HANGUL SYLLABLE THIEUTH EO RIEULMIEUM + {0xC5D2, 0xD140}, //11816 #HANGUL SYLLABLE THIEUTH EO MIEUM + {0xC5D3, 0xD141}, //11817 #HANGUL SYLLABLE THIEUTH EO PIEUP + {0xC5D4, 0xD143}, //11818 #HANGUL SYLLABLE THIEUTH EO SIOS + {0xC5D5, 0xD144}, //11819 #HANGUL SYLLABLE THIEUTH EO SSANGSIOS + {0xC5D6, 0xD145}, //11820 #HANGUL SYLLABLE THIEUTH EO IEUNG + {0xC5D7, 0xD14C}, //11821 #HANGUL SYLLABLE THIEUTH E + {0xC5D8, 0xD14D}, //11822 #HANGUL SYLLABLE THIEUTH E KIYEOK + {0xC5D9, 0xD150}, //11823 #HANGUL SYLLABLE THIEUTH E NIEUN + {0xC5DA, 0xD154}, //11824 #HANGUL SYLLABLE THIEUTH E RIEUL + {0xC5DB, 0xD15C}, //11825 #HANGUL SYLLABLE THIEUTH E MIEUM + {0xC5DC, 0xD15D}, //11826 #HANGUL SYLLABLE THIEUTH E PIEUP + {0xC5DD, 0xD15F}, //11827 #HANGUL SYLLABLE THIEUTH E SIOS + {0xC5DE, 0xD161}, //11828 #HANGUL SYLLABLE THIEUTH E IEUNG + {0xC5DF, 0xD168}, //11829 #HANGUL SYLLABLE THIEUTH YEO + {0xC5E0, 0xD16C}, //11830 #HANGUL SYLLABLE THIEUTH YEO NIEUN + {0xC5E1, 0xD17C}, //11831 #HANGUL SYLLABLE THIEUTH YEO SSANGSIOS + {0xC5E2, 0xD184}, //11832 #HANGUL SYLLABLE THIEUTH YE + {0xC5E3, 0xD188}, //11833 #HANGUL SYLLABLE THIEUTH YE NIEUN + {0xC5E4, 0xD1A0}, //11834 #HANGUL SYLLABLE THIEUTH O + {0xC5E5, 0xD1A1}, //11835 #HANGUL SYLLABLE THIEUTH O KIYEOK + {0xC5E6, 0xD1A4}, //11836 #HANGUL SYLLABLE THIEUTH O NIEUN + {0xC5E7, 0xD1A8}, //11837 #HANGUL SYLLABLE THIEUTH O RIEUL + {0xC5E8, 0xD1B0}, //11838 #HANGUL SYLLABLE THIEUTH O MIEUM + {0xC5E9, 0xD1B1}, //11839 #HANGUL SYLLABLE THIEUTH O PIEUP + {0xC5EA, 0xD1B3}, //11840 #HANGUL SYLLABLE THIEUTH O SIOS + {0xC5EB, 0xD1B5}, //11841 #HANGUL SYLLABLE THIEUTH O IEUNG + {0xC5EC, 0xD1BA}, //11842 #HANGUL SYLLABLE THIEUTH O PHIEUPH + {0xC5ED, 0xD1BC}, //11843 #HANGUL SYLLABLE THIEUTH WA + {0xC5EE, 0xD1C0}, //11844 #HANGUL SYLLABLE THIEUTH WA NIEUN + {0xC5EF, 0xD1D8}, //11845 #HANGUL SYLLABLE THIEUTH WAE + {0xC5F0, 0xD1F4}, //11846 #HANGUL SYLLABLE THIEUTH OE + {0xC5F1, 0xD1F8}, //11847 #HANGUL SYLLABLE THIEUTH OE NIEUN + {0xC5F2, 0xD207}, //11848 #HANGUL SYLLABLE THIEUTH OE SIOS + {0xC5F3, 0xD209}, //11849 #HANGUL SYLLABLE THIEUTH OE IEUNG + {0xC5F4, 0xD210}, //11850 #HANGUL SYLLABLE THIEUTH YO + {0xC5F5, 0xD22C}, //11851 #HANGUL SYLLABLE THIEUTH U + {0xC5F6, 0xD22D}, //11852 #HANGUL SYLLABLE THIEUTH U KIYEOK + {0xC5F7, 0xD230}, //11853 #HANGUL SYLLABLE THIEUTH U NIEUN + {0xC5F8, 0xD234}, //11854 #HANGUL SYLLABLE THIEUTH U RIEUL + {0xC5F9, 0xD23C}, //11855 #HANGUL SYLLABLE THIEUTH U MIEUM + {0xC5FA, 0xD23D}, //11856 #HANGUL SYLLABLE THIEUTH U PIEUP + {0xC5FB, 0xD23F}, //11857 #HANGUL SYLLABLE THIEUTH U SIOS + {0xC5FC, 0xD241}, //11858 #HANGUL SYLLABLE THIEUTH U IEUNG + {0xC5FD, 0xD248}, //11859 #HANGUL SYLLABLE THIEUTH WEO + {0xC5FE, 0xD25C}, //11860 #HANGUL SYLLABLE THIEUTH WEO SSANGSIOS + {0xC641, 0xD78D}, //11861 #HANGUL SYLLABLE HIEUH I NIEUNCIEUC + {0xC642, 0xD78E}, //11862 #HANGUL SYLLABLE HIEUH I NIEUNHIEUH + {0xC643, 0xD78F}, //11863 #HANGUL SYLLABLE HIEUH I TIKEUT + {0xC644, 0xD791}, //11864 #HANGUL SYLLABLE HIEUH I RIEULKIYEOK + {0xC645, 0xD792}, //11865 #HANGUL SYLLABLE HIEUH I RIEULMIEUM + {0xC646, 0xD793}, //11866 #HANGUL SYLLABLE HIEUH I RIEULPIEUP + {0xC647, 0xD794}, //11867 #HANGUL SYLLABLE HIEUH I RIEULSIOS + {0xC648, 0xD795}, //11868 #HANGUL SYLLABLE HIEUH I RIEULTHIEUTH + {0xC649, 0xD796}, //11869 #HANGUL SYLLABLE HIEUH I RIEULPHIEUPH + {0xC64A, 0xD797}, //11870 #HANGUL SYLLABLE HIEUH I RIEULHIEUH + {0xC64B, 0xD79A}, //11871 #HANGUL SYLLABLE HIEUH I PIEUPSIOS + {0xC64C, 0xD79C}, //11872 #HANGUL SYLLABLE HIEUH I SSANGSIOS + {0xC64D, 0xD79E}, //11873 #HANGUL SYLLABLE HIEUH I CIEUC + {0xC64E, 0xD79F}, //11874 #HANGUL SYLLABLE HIEUH I CHIEUCH + {0xC64F, 0xD7A0}, //11875 #HANGUL SYLLABLE HIEUH I KHIEUKH + {0xC650, 0xD7A1}, //11876 #HANGUL SYLLABLE HIEUH I THIEUTH + {0xC651, 0xD7A2}, //11877 #HANGUL SYLLABLE HIEUH I PHIEUPH + {0xC652, 0xD7A3}, //11878 #HANGUL SYLLABLE HIEUH I HIEUH + {0xC6A1, 0xD264}, //11879 #HANGUL SYLLABLE THIEUTH WE + {0xC6A2, 0xD280}, //11880 #HANGUL SYLLABLE THIEUTH WI + {0xC6A3, 0xD281}, //11881 #HANGUL SYLLABLE THIEUTH WI KIYEOK + {0xC6A4, 0xD284}, //11882 #HANGUL SYLLABLE THIEUTH WI NIEUN + {0xC6A5, 0xD288}, //11883 #HANGUL SYLLABLE THIEUTH WI RIEUL + {0xC6A6, 0xD290}, //11884 #HANGUL SYLLABLE THIEUTH WI MIEUM + {0xC6A7, 0xD291}, //11885 #HANGUL SYLLABLE THIEUTH WI PIEUP + {0xC6A8, 0xD295}, //11886 #HANGUL SYLLABLE THIEUTH WI IEUNG + {0xC6A9, 0xD29C}, //11887 #HANGUL SYLLABLE THIEUTH YU + {0xC6AA, 0xD2A0}, //11888 #HANGUL SYLLABLE THIEUTH YU NIEUN + {0xC6AB, 0xD2A4}, //11889 #HANGUL SYLLABLE THIEUTH YU RIEUL + {0xC6AC, 0xD2AC}, //11890 #HANGUL SYLLABLE THIEUTH YU MIEUM + {0xC6AD, 0xD2B1}, //11891 #HANGUL SYLLABLE THIEUTH YU IEUNG + {0xC6AE, 0xD2B8}, //11892 #HANGUL SYLLABLE THIEUTH EU + {0xC6AF, 0xD2B9}, //11893 #HANGUL SYLLABLE THIEUTH EU KIYEOK + {0xC6B0, 0xD2BC}, //11894 #HANGUL SYLLABLE THIEUTH EU NIEUN + {0xC6B1, 0xD2BF}, //11895 #HANGUL SYLLABLE THIEUTH EU TIKEUT + {0xC6B2, 0xD2C0}, //11896 #HANGUL SYLLABLE THIEUTH EU RIEUL + {0xC6B3, 0xD2C2}, //11897 #HANGUL SYLLABLE THIEUTH EU RIEULMIEUM + {0xC6B4, 0xD2C8}, //11898 #HANGUL SYLLABLE THIEUTH EU MIEUM + {0xC6B5, 0xD2C9}, //11899 #HANGUL SYLLABLE THIEUTH EU PIEUP + {0xC6B6, 0xD2CB}, //11900 #HANGUL SYLLABLE THIEUTH EU SIOS + {0xC6B7, 0xD2D4}, //11901 #HANGUL SYLLABLE THIEUTH YI + {0xC6B8, 0xD2D8}, //11902 #HANGUL SYLLABLE THIEUTH YI NIEUN + {0xC6B9, 0xD2DC}, //11903 #HANGUL SYLLABLE THIEUTH YI RIEUL + {0xC6BA, 0xD2E4}, //11904 #HANGUL SYLLABLE THIEUTH YI MIEUM + {0xC6BB, 0xD2E5}, //11905 #HANGUL SYLLABLE THIEUTH YI PIEUP + {0xC6BC, 0xD2F0}, //11906 #HANGUL SYLLABLE THIEUTH I + {0xC6BD, 0xD2F1}, //11907 #HANGUL SYLLABLE THIEUTH I KIYEOK + {0xC6BE, 0xD2F4}, //11908 #HANGUL SYLLABLE THIEUTH I NIEUN + {0xC6BF, 0xD2F8}, //11909 #HANGUL SYLLABLE THIEUTH I RIEUL + {0xC6C0, 0xD300}, //11910 #HANGUL SYLLABLE THIEUTH I MIEUM + {0xC6C1, 0xD301}, //11911 #HANGUL SYLLABLE THIEUTH I PIEUP + {0xC6C2, 0xD303}, //11912 #HANGUL SYLLABLE THIEUTH I SIOS + {0xC6C3, 0xD305}, //11913 #HANGUL SYLLABLE THIEUTH I IEUNG + {0xC6C4, 0xD30C}, //11914 #HANGUL SYLLABLE PHIEUPH A + {0xC6C5, 0xD30D}, //11915 #HANGUL SYLLABLE PHIEUPH A KIYEOK + {0xC6C6, 0xD30E}, //11916 #HANGUL SYLLABLE PHIEUPH A SSANGKIYEOK + {0xC6C7, 0xD310}, //11917 #HANGUL SYLLABLE PHIEUPH A NIEUN + {0xC6C8, 0xD314}, //11918 #HANGUL SYLLABLE PHIEUPH A RIEUL + {0xC6C9, 0xD316}, //11919 #HANGUL SYLLABLE PHIEUPH A RIEULMIEUM + {0xC6CA, 0xD31C}, //11920 #HANGUL SYLLABLE PHIEUPH A MIEUM + {0xC6CB, 0xD31D}, //11921 #HANGUL SYLLABLE PHIEUPH A PIEUP + {0xC6CC, 0xD31F}, //11922 #HANGUL SYLLABLE PHIEUPH A SIOS + {0xC6CD, 0xD320}, //11923 #HANGUL SYLLABLE PHIEUPH A SSANGSIOS + {0xC6CE, 0xD321}, //11924 #HANGUL SYLLABLE PHIEUPH A IEUNG + {0xC6CF, 0xD325}, //11925 #HANGUL SYLLABLE PHIEUPH A THIEUTH + {0xC6D0, 0xD328}, //11926 #HANGUL SYLLABLE PHIEUPH AE + {0xC6D1, 0xD329}, //11927 #HANGUL SYLLABLE PHIEUPH AE KIYEOK + {0xC6D2, 0xD32C}, //11928 #HANGUL SYLLABLE PHIEUPH AE NIEUN + {0xC6D3, 0xD330}, //11929 #HANGUL SYLLABLE PHIEUPH AE RIEUL + {0xC6D4, 0xD338}, //11930 #HANGUL SYLLABLE PHIEUPH AE MIEUM + {0xC6D5, 0xD339}, //11931 #HANGUL SYLLABLE PHIEUPH AE PIEUP + {0xC6D6, 0xD33B}, //11932 #HANGUL SYLLABLE PHIEUPH AE SIOS + {0xC6D7, 0xD33C}, //11933 #HANGUL SYLLABLE PHIEUPH AE SSANGSIOS + {0xC6D8, 0xD33D}, //11934 #HANGUL SYLLABLE PHIEUPH AE IEUNG + {0xC6D9, 0xD344}, //11935 #HANGUL SYLLABLE PHIEUPH YA + {0xC6DA, 0xD345}, //11936 #HANGUL SYLLABLE PHIEUPH YA KIYEOK + {0xC6DB, 0xD37C}, //11937 #HANGUL SYLLABLE PHIEUPH EO + {0xC6DC, 0xD37D}, //11938 #HANGUL SYLLABLE PHIEUPH EO KIYEOK + {0xC6DD, 0xD380}, //11939 #HANGUL SYLLABLE PHIEUPH EO NIEUN + {0xC6DE, 0xD384}, //11940 #HANGUL SYLLABLE PHIEUPH EO RIEUL + {0xC6DF, 0xD38C}, //11941 #HANGUL SYLLABLE PHIEUPH EO MIEUM + {0xC6E0, 0xD38D}, //11942 #HANGUL SYLLABLE PHIEUPH EO PIEUP + {0xC6E1, 0xD38F}, //11943 #HANGUL SYLLABLE PHIEUPH EO SIOS + {0xC6E2, 0xD390}, //11944 #HANGUL SYLLABLE PHIEUPH EO SSANGSIOS + {0xC6E3, 0xD391}, //11945 #HANGUL SYLLABLE PHIEUPH EO IEUNG + {0xC6E4, 0xD398}, //11946 #HANGUL SYLLABLE PHIEUPH E + {0xC6E5, 0xD399}, //11947 #HANGUL SYLLABLE PHIEUPH E KIYEOK + {0xC6E6, 0xD39C}, //11948 #HANGUL SYLLABLE PHIEUPH E NIEUN + {0xC6E7, 0xD3A0}, //11949 #HANGUL SYLLABLE PHIEUPH E RIEUL + {0xC6E8, 0xD3A8}, //11950 #HANGUL SYLLABLE PHIEUPH E MIEUM + {0xC6E9, 0xD3A9}, //11951 #HANGUL SYLLABLE PHIEUPH E PIEUP + {0xC6EA, 0xD3AB}, //11952 #HANGUL SYLLABLE PHIEUPH E SIOS + {0xC6EB, 0xD3AD}, //11953 #HANGUL SYLLABLE PHIEUPH E IEUNG + {0xC6EC, 0xD3B4}, //11954 #HANGUL SYLLABLE PHIEUPH YEO + {0xC6ED, 0xD3B8}, //11955 #HANGUL SYLLABLE PHIEUPH YEO NIEUN + {0xC6EE, 0xD3BC}, //11956 #HANGUL SYLLABLE PHIEUPH YEO RIEUL + {0xC6EF, 0xD3C4}, //11957 #HANGUL SYLLABLE PHIEUPH YEO MIEUM + {0xC6F0, 0xD3C5}, //11958 #HANGUL SYLLABLE PHIEUPH YEO PIEUP + {0xC6F1, 0xD3C8}, //11959 #HANGUL SYLLABLE PHIEUPH YEO SSANGSIOS + {0xC6F2, 0xD3C9}, //11960 #HANGUL SYLLABLE PHIEUPH YEO IEUNG + {0xC6F3, 0xD3D0}, //11961 #HANGUL SYLLABLE PHIEUPH YE + {0xC6F4, 0xD3D8}, //11962 #HANGUL SYLLABLE PHIEUPH YE RIEUL + {0xC6F5, 0xD3E1}, //11963 #HANGUL SYLLABLE PHIEUPH YE PIEUP + {0xC6F6, 0xD3E3}, //11964 #HANGUL SYLLABLE PHIEUPH YE SIOS + {0xC6F7, 0xD3EC}, //11965 #HANGUL SYLLABLE PHIEUPH O + {0xC6F8, 0xD3ED}, //11966 #HANGUL SYLLABLE PHIEUPH O KIYEOK + {0xC6F9, 0xD3F0}, //11967 #HANGUL SYLLABLE PHIEUPH O NIEUN + {0xC6FA, 0xD3F4}, //11968 #HANGUL SYLLABLE PHIEUPH O RIEUL + {0xC6FB, 0xD3FC}, //11969 #HANGUL SYLLABLE PHIEUPH O MIEUM + {0xC6FC, 0xD3FD}, //11970 #HANGUL SYLLABLE PHIEUPH O PIEUP + {0xC6FD, 0xD3FF}, //11971 #HANGUL SYLLABLE PHIEUPH O SIOS + {0xC6FE, 0xD401}, //11972 #HANGUL SYLLABLE PHIEUPH O IEUNG + {0xC7A1, 0xD408}, //11973 #HANGUL SYLLABLE PHIEUPH WA + {0xC7A2, 0xD41D}, //11974 #HANGUL SYLLABLE PHIEUPH WA IEUNG + {0xC7A3, 0xD440}, //11975 #HANGUL SYLLABLE PHIEUPH OE + {0xC7A4, 0xD444}, //11976 #HANGUL SYLLABLE PHIEUPH OE NIEUN + {0xC7A5, 0xD45C}, //11977 #HANGUL SYLLABLE PHIEUPH YO + {0xC7A6, 0xD460}, //11978 #HANGUL SYLLABLE PHIEUPH YO NIEUN + {0xC7A7, 0xD464}, //11979 #HANGUL SYLLABLE PHIEUPH YO RIEUL + {0xC7A8, 0xD46D}, //11980 #HANGUL SYLLABLE PHIEUPH YO PIEUP + {0xC7A9, 0xD46F}, //11981 #HANGUL SYLLABLE PHIEUPH YO SIOS + {0xC7AA, 0xD478}, //11982 #HANGUL SYLLABLE PHIEUPH U + {0xC7AB, 0xD479}, //11983 #HANGUL SYLLABLE PHIEUPH U KIYEOK + {0xC7AC, 0xD47C}, //11984 #HANGUL SYLLABLE PHIEUPH U NIEUN + {0xC7AD, 0xD47F}, //11985 #HANGUL SYLLABLE PHIEUPH U TIKEUT + {0xC7AE, 0xD480}, //11986 #HANGUL SYLLABLE PHIEUPH U RIEUL + {0xC7AF, 0xD482}, //11987 #HANGUL SYLLABLE PHIEUPH U RIEULMIEUM + {0xC7B0, 0xD488}, //11988 #HANGUL SYLLABLE PHIEUPH U MIEUM + {0xC7B1, 0xD489}, //11989 #HANGUL SYLLABLE PHIEUPH U PIEUP + {0xC7B2, 0xD48B}, //11990 #HANGUL SYLLABLE PHIEUPH U SIOS + {0xC7B3, 0xD48D}, //11991 #HANGUL SYLLABLE PHIEUPH U IEUNG + {0xC7B4, 0xD494}, //11992 #HANGUL SYLLABLE PHIEUPH WEO + {0xC7B5, 0xD4A9}, //11993 #HANGUL SYLLABLE PHIEUPH WEO IEUNG + {0xC7B6, 0xD4CC}, //11994 #HANGUL SYLLABLE PHIEUPH WI + {0xC7B7, 0xD4D0}, //11995 #HANGUL SYLLABLE PHIEUPH WI NIEUN + {0xC7B8, 0xD4D4}, //11996 #HANGUL SYLLABLE PHIEUPH WI RIEUL + {0xC7B9, 0xD4DC}, //11997 #HANGUL SYLLABLE PHIEUPH WI MIEUM + {0xC7BA, 0xD4DF}, //11998 #HANGUL SYLLABLE PHIEUPH WI SIOS + {0xC7BB, 0xD4E8}, //11999 #HANGUL SYLLABLE PHIEUPH YU + {0xC7BC, 0xD4EC}, //12000 #HANGUL SYLLABLE PHIEUPH YU NIEUN + {0xC7BD, 0xD4F0}, //12001 #HANGUL SYLLABLE PHIEUPH YU RIEUL + {0xC7BE, 0xD4F8}, //12002 #HANGUL SYLLABLE PHIEUPH YU MIEUM + {0xC7BF, 0xD4FB}, //12003 #HANGUL SYLLABLE PHIEUPH YU SIOS + {0xC7C0, 0xD4FD}, //12004 #HANGUL SYLLABLE PHIEUPH YU IEUNG + {0xC7C1, 0xD504}, //12005 #HANGUL SYLLABLE PHIEUPH EU + {0xC7C2, 0xD508}, //12006 #HANGUL SYLLABLE PHIEUPH EU NIEUN + {0xC7C3, 0xD50C}, //12007 #HANGUL SYLLABLE PHIEUPH EU RIEUL + {0xC7C4, 0xD514}, //12008 #HANGUL SYLLABLE PHIEUPH EU MIEUM + {0xC7C5, 0xD515}, //12009 #HANGUL SYLLABLE PHIEUPH EU PIEUP + {0xC7C6, 0xD517}, //12010 #HANGUL SYLLABLE PHIEUPH EU SIOS + {0xC7C7, 0xD53C}, //12011 #HANGUL SYLLABLE PHIEUPH I + {0xC7C8, 0xD53D}, //12012 #HANGUL SYLLABLE PHIEUPH I KIYEOK + {0xC7C9, 0xD540}, //12013 #HANGUL SYLLABLE PHIEUPH I NIEUN + {0xC7CA, 0xD544}, //12014 #HANGUL SYLLABLE PHIEUPH I RIEUL + {0xC7CB, 0xD54C}, //12015 #HANGUL SYLLABLE PHIEUPH I MIEUM + {0xC7CC, 0xD54D}, //12016 #HANGUL SYLLABLE PHIEUPH I PIEUP + {0xC7CD, 0xD54F}, //12017 #HANGUL SYLLABLE PHIEUPH I SIOS + {0xC7CE, 0xD551}, //12018 #HANGUL SYLLABLE PHIEUPH I IEUNG + {0xC7CF, 0xD558}, //12019 #HANGUL SYLLABLE HIEUH A + {0xC7D0, 0xD559}, //12020 #HANGUL SYLLABLE HIEUH A KIYEOK + {0xC7D1, 0xD55C}, //12021 #HANGUL SYLLABLE HIEUH A NIEUN + {0xC7D2, 0xD560}, //12022 #HANGUL SYLLABLE HIEUH A RIEUL + {0xC7D3, 0xD565}, //12023 #HANGUL SYLLABLE HIEUH A RIEULTHIEUTH + {0xC7D4, 0xD568}, //12024 #HANGUL SYLLABLE HIEUH A MIEUM + {0xC7D5, 0xD569}, //12025 #HANGUL SYLLABLE HIEUH A PIEUP + {0xC7D6, 0xD56B}, //12026 #HANGUL SYLLABLE HIEUH A SIOS + {0xC7D7, 0xD56D}, //12027 #HANGUL SYLLABLE HIEUH A IEUNG + {0xC7D8, 0xD574}, //12028 #HANGUL SYLLABLE HIEUH AE + {0xC7D9, 0xD575}, //12029 #HANGUL SYLLABLE HIEUH AE KIYEOK + {0xC7DA, 0xD578}, //12030 #HANGUL SYLLABLE HIEUH AE NIEUN + {0xC7DB, 0xD57C}, //12031 #HANGUL SYLLABLE HIEUH AE RIEUL + {0xC7DC, 0xD584}, //12032 #HANGUL SYLLABLE HIEUH AE MIEUM + {0xC7DD, 0xD585}, //12033 #HANGUL SYLLABLE HIEUH AE PIEUP + {0xC7DE, 0xD587}, //12034 #HANGUL SYLLABLE HIEUH AE SIOS + {0xC7DF, 0xD588}, //12035 #HANGUL SYLLABLE HIEUH AE SSANGSIOS + {0xC7E0, 0xD589}, //12036 #HANGUL SYLLABLE HIEUH AE IEUNG + {0xC7E1, 0xD590}, //12037 #HANGUL SYLLABLE HIEUH YA + {0xC7E2, 0xD5A5}, //12038 #HANGUL SYLLABLE HIEUH YA IEUNG + {0xC7E3, 0xD5C8}, //12039 #HANGUL SYLLABLE HIEUH EO + {0xC7E4, 0xD5C9}, //12040 #HANGUL SYLLABLE HIEUH EO KIYEOK + {0xC7E5, 0xD5CC}, //12041 #HANGUL SYLLABLE HIEUH EO NIEUN + {0xC7E6, 0xD5D0}, //12042 #HANGUL SYLLABLE HIEUH EO RIEUL + {0xC7E7, 0xD5D2}, //12043 #HANGUL SYLLABLE HIEUH EO RIEULMIEUM + {0xC7E8, 0xD5D8}, //12044 #HANGUL SYLLABLE HIEUH EO MIEUM + {0xC7E9, 0xD5D9}, //12045 #HANGUL SYLLABLE HIEUH EO PIEUP + {0xC7EA, 0xD5DB}, //12046 #HANGUL SYLLABLE HIEUH EO SIOS + {0xC7EB, 0xD5DD}, //12047 #HANGUL SYLLABLE HIEUH EO IEUNG + {0xC7EC, 0xD5E4}, //12048 #HANGUL SYLLABLE HIEUH E + {0xC7ED, 0xD5E5}, //12049 #HANGUL SYLLABLE HIEUH E KIYEOK + {0xC7EE, 0xD5E8}, //12050 #HANGUL SYLLABLE HIEUH E NIEUN + {0xC7EF, 0xD5EC}, //12051 #HANGUL SYLLABLE HIEUH E RIEUL + {0xC7F0, 0xD5F4}, //12052 #HANGUL SYLLABLE HIEUH E MIEUM + {0xC7F1, 0xD5F5}, //12053 #HANGUL SYLLABLE HIEUH E PIEUP + {0xC7F2, 0xD5F7}, //12054 #HANGUL SYLLABLE HIEUH E SIOS + {0xC7F3, 0xD5F9}, //12055 #HANGUL SYLLABLE HIEUH E IEUNG + {0xC7F4, 0xD600}, //12056 #HANGUL SYLLABLE HIEUH YEO + {0xC7F5, 0xD601}, //12057 #HANGUL SYLLABLE HIEUH YEO KIYEOK + {0xC7F6, 0xD604}, //12058 #HANGUL SYLLABLE HIEUH YEO NIEUN + {0xC7F7, 0xD608}, //12059 #HANGUL SYLLABLE HIEUH YEO RIEUL + {0xC7F8, 0xD610}, //12060 #HANGUL SYLLABLE HIEUH YEO MIEUM + {0xC7F9, 0xD611}, //12061 #HANGUL SYLLABLE HIEUH YEO PIEUP + {0xC7FA, 0xD613}, //12062 #HANGUL SYLLABLE HIEUH YEO SIOS + {0xC7FB, 0xD614}, //12063 #HANGUL SYLLABLE HIEUH YEO SSANGSIOS + {0xC7FC, 0xD615}, //12064 #HANGUL SYLLABLE HIEUH YEO IEUNG + {0xC7FD, 0xD61C}, //12065 #HANGUL SYLLABLE HIEUH YE + {0xC7FE, 0xD620}, //12066 #HANGUL SYLLABLE HIEUH YE NIEUN + {0xC8A1, 0xD624}, //12067 #HANGUL SYLLABLE HIEUH YE RIEUL + {0xC8A2, 0xD62D}, //12068 #HANGUL SYLLABLE HIEUH YE PIEUP + {0xC8A3, 0xD638}, //12069 #HANGUL SYLLABLE HIEUH O + {0xC8A4, 0xD639}, //12070 #HANGUL SYLLABLE HIEUH O KIYEOK + {0xC8A5, 0xD63C}, //12071 #HANGUL SYLLABLE HIEUH O NIEUN + {0xC8A6, 0xD640}, //12072 #HANGUL SYLLABLE HIEUH O RIEUL + {0xC8A7, 0xD645}, //12073 #HANGUL SYLLABLE HIEUH O RIEULTHIEUTH + {0xC8A8, 0xD648}, //12074 #HANGUL SYLLABLE HIEUH O MIEUM + {0xC8A9, 0xD649}, //12075 #HANGUL SYLLABLE HIEUH O PIEUP + {0xC8AA, 0xD64B}, //12076 #HANGUL SYLLABLE HIEUH O SIOS + {0xC8AB, 0xD64D}, //12077 #HANGUL SYLLABLE HIEUH O IEUNG + {0xC8AC, 0xD651}, //12078 #HANGUL SYLLABLE HIEUH O THIEUTH + {0xC8AD, 0xD654}, //12079 #HANGUL SYLLABLE HIEUH WA + {0xC8AE, 0xD655}, //12080 #HANGUL SYLLABLE HIEUH WA KIYEOK + {0xC8AF, 0xD658}, //12081 #HANGUL SYLLABLE HIEUH WA NIEUN + {0xC8B0, 0xD65C}, //12082 #HANGUL SYLLABLE HIEUH WA RIEUL + {0xC8B1, 0xD667}, //12083 #HANGUL SYLLABLE HIEUH WA SIOS + {0xC8B2, 0xD669}, //12084 #HANGUL SYLLABLE HIEUH WA IEUNG + {0xC8B3, 0xD670}, //12085 #HANGUL SYLLABLE HIEUH WAE + {0xC8B4, 0xD671}, //12086 #HANGUL SYLLABLE HIEUH WAE KIYEOK + {0xC8B5, 0xD674}, //12087 #HANGUL SYLLABLE HIEUH WAE NIEUN + {0xC8B6, 0xD683}, //12088 #HANGUL SYLLABLE HIEUH WAE SIOS + {0xC8B7, 0xD685}, //12089 #HANGUL SYLLABLE HIEUH WAE IEUNG + {0xC8B8, 0xD68C}, //12090 #HANGUL SYLLABLE HIEUH OE + {0xC8B9, 0xD68D}, //12091 #HANGUL SYLLABLE HIEUH OE KIYEOK + {0xC8BA, 0xD690}, //12092 #HANGUL SYLLABLE HIEUH OE NIEUN + {0xC8BB, 0xD694}, //12093 #HANGUL SYLLABLE HIEUH OE RIEUL + {0xC8BC, 0xD69D}, //12094 #HANGUL SYLLABLE HIEUH OE PIEUP + {0xC8BD, 0xD69F}, //12095 #HANGUL SYLLABLE HIEUH OE SIOS + {0xC8BE, 0xD6A1}, //12096 #HANGUL SYLLABLE HIEUH OE IEUNG + {0xC8BF, 0xD6A8}, //12097 #HANGUL SYLLABLE HIEUH YO + {0xC8C0, 0xD6AC}, //12098 #HANGUL SYLLABLE HIEUH YO NIEUN + {0xC8C1, 0xD6B0}, //12099 #HANGUL SYLLABLE HIEUH YO RIEUL + {0xC8C2, 0xD6B9}, //12100 #HANGUL SYLLABLE HIEUH YO PIEUP + {0xC8C3, 0xD6BB}, //12101 #HANGUL SYLLABLE HIEUH YO SIOS + {0xC8C4, 0xD6C4}, //12102 #HANGUL SYLLABLE HIEUH U + {0xC8C5, 0xD6C5}, //12103 #HANGUL SYLLABLE HIEUH U KIYEOK + {0xC8C6, 0xD6C8}, //12104 #HANGUL SYLLABLE HIEUH U NIEUN + {0xC8C7, 0xD6CC}, //12105 #HANGUL SYLLABLE HIEUH U RIEUL + {0xC8C8, 0xD6D1}, //12106 #HANGUL SYLLABLE HIEUH U RIEULTHIEUTH + {0xC8C9, 0xD6D4}, //12107 #HANGUL SYLLABLE HIEUH U MIEUM + {0xC8CA, 0xD6D7}, //12108 #HANGUL SYLLABLE HIEUH U SIOS + {0xC8CB, 0xD6D9}, //12109 #HANGUL SYLLABLE HIEUH U IEUNG + {0xC8CC, 0xD6E0}, //12110 #HANGUL SYLLABLE HIEUH WEO + {0xC8CD, 0xD6E4}, //12111 #HANGUL SYLLABLE HIEUH WEO NIEUN + {0xC8CE, 0xD6E8}, //12112 #HANGUL SYLLABLE HIEUH WEO RIEUL + {0xC8CF, 0xD6F0}, //12113 #HANGUL SYLLABLE HIEUH WEO MIEUM + {0xC8D0, 0xD6F5}, //12114 #HANGUL SYLLABLE HIEUH WEO IEUNG + {0xC8D1, 0xD6FC}, //12115 #HANGUL SYLLABLE HIEUH WE + {0xC8D2, 0xD6FD}, //12116 #HANGUL SYLLABLE HIEUH WE KIYEOK + {0xC8D3, 0xD700}, //12117 #HANGUL SYLLABLE HIEUH WE NIEUN + {0xC8D4, 0xD704}, //12118 #HANGUL SYLLABLE HIEUH WE RIEUL + {0xC8D5, 0xD711}, //12119 #HANGUL SYLLABLE HIEUH WE IEUNG + {0xC8D6, 0xD718}, //12120 #HANGUL SYLLABLE HIEUH WI + {0xC8D7, 0xD719}, //12121 #HANGUL SYLLABLE HIEUH WI KIYEOK + {0xC8D8, 0xD71C}, //12122 #HANGUL SYLLABLE HIEUH WI NIEUN + {0xC8D9, 0xD720}, //12123 #HANGUL SYLLABLE HIEUH WI RIEUL + {0xC8DA, 0xD728}, //12124 #HANGUL SYLLABLE HIEUH WI MIEUM + {0xC8DB, 0xD729}, //12125 #HANGUL SYLLABLE HIEUH WI PIEUP + {0xC8DC, 0xD72B}, //12126 #HANGUL SYLLABLE HIEUH WI SIOS + {0xC8DD, 0xD72D}, //12127 #HANGUL SYLLABLE HIEUH WI IEUNG + {0xC8DE, 0xD734}, //12128 #HANGUL SYLLABLE HIEUH YU + {0xC8DF, 0xD735}, //12129 #HANGUL SYLLABLE HIEUH YU KIYEOK + {0xC8E0, 0xD738}, //12130 #HANGUL SYLLABLE HIEUH YU NIEUN + {0xC8E1, 0xD73C}, //12131 #HANGUL SYLLABLE HIEUH YU RIEUL + {0xC8E2, 0xD744}, //12132 #HANGUL SYLLABLE HIEUH YU MIEUM + {0xC8E3, 0xD747}, //12133 #HANGUL SYLLABLE HIEUH YU SIOS + {0xC8E4, 0xD749}, //12134 #HANGUL SYLLABLE HIEUH YU IEUNG + {0xC8E5, 0xD750}, //12135 #HANGUL SYLLABLE HIEUH EU + {0xC8E6, 0xD751}, //12136 #HANGUL SYLLABLE HIEUH EU KIYEOK + {0xC8E7, 0xD754}, //12137 #HANGUL SYLLABLE HIEUH EU NIEUN + {0xC8E8, 0xD756}, //12138 #HANGUL SYLLABLE HIEUH EU NIEUNHIEUH + {0xC8E9, 0xD757}, //12139 #HANGUL SYLLABLE HIEUH EU TIKEUT + {0xC8EA, 0xD758}, //12140 #HANGUL SYLLABLE HIEUH EU RIEUL + {0xC8EB, 0xD759}, //12141 #HANGUL SYLLABLE HIEUH EU RIEULKIYEOK + {0xC8EC, 0xD760}, //12142 #HANGUL SYLLABLE HIEUH EU MIEUM + {0xC8ED, 0xD761}, //12143 #HANGUL SYLLABLE HIEUH EU PIEUP + {0xC8EE, 0xD763}, //12144 #HANGUL SYLLABLE HIEUH EU SIOS + {0xC8EF, 0xD765}, //12145 #HANGUL SYLLABLE HIEUH EU IEUNG + {0xC8F0, 0xD769}, //12146 #HANGUL SYLLABLE HIEUH EU THIEUTH + {0xC8F1, 0xD76C}, //12147 #HANGUL SYLLABLE HIEUH YI + {0xC8F2, 0xD770}, //12148 #HANGUL SYLLABLE HIEUH YI NIEUN + {0xC8F3, 0xD774}, //12149 #HANGUL SYLLABLE HIEUH YI RIEUL + {0xC8F4, 0xD77C}, //12150 #HANGUL SYLLABLE HIEUH YI MIEUM + {0xC8F5, 0xD77D}, //12151 #HANGUL SYLLABLE HIEUH YI PIEUP + {0xC8F6, 0xD781}, //12152 #HANGUL SYLLABLE HIEUH YI IEUNG + {0xC8F7, 0xD788}, //12153 #HANGUL SYLLABLE HIEUH I + {0xC8F8, 0xD789}, //12154 #HANGUL SYLLABLE HIEUH I KIYEOK + {0xC8F9, 0xD78C}, //12155 #HANGUL SYLLABLE HIEUH I NIEUN + {0xC8FA, 0xD790}, //12156 #HANGUL SYLLABLE HIEUH I RIEUL + {0xC8FB, 0xD798}, //12157 #HANGUL SYLLABLE HIEUH I MIEUM + {0xC8FC, 0xD799}, //12158 #HANGUL SYLLABLE HIEUH I PIEUP + {0xC8FD, 0xD79B}, //12159 #HANGUL SYLLABLE HIEUH I SIOS + {0xC8FE, 0xD79D}, //12160 #HANGUL SYLLABLE HIEUH I IEUNG + {0xCAA1, 0x4F3D}, //12161 #CJK UNIFIED IDEOGRAPH + {0xCAA2, 0x4F73}, //12162 #CJK UNIFIED IDEOGRAPH + {0xCAA3, 0x5047}, //12163 #CJK UNIFIED IDEOGRAPH + {0xCAA4, 0x50F9}, //12164 #CJK UNIFIED IDEOGRAPH + {0xCAA5, 0x52A0}, //12165 #CJK UNIFIED IDEOGRAPH + {0xCAA6, 0x53EF}, //12166 #CJK UNIFIED IDEOGRAPH + {0xCAA7, 0x5475}, //12167 #CJK UNIFIED IDEOGRAPH + {0xCAA8, 0x54E5}, //12168 #CJK UNIFIED IDEOGRAPH + {0xCAA9, 0x5609}, //12169 #CJK UNIFIED IDEOGRAPH + {0xCAAA, 0x5AC1}, //12170 #CJK UNIFIED IDEOGRAPH + {0xCAAB, 0x5BB6}, //12171 #CJK UNIFIED IDEOGRAPH + {0xCAAC, 0x6687}, //12172 #CJK UNIFIED IDEOGRAPH + {0xCAAD, 0x67B6}, //12173 #CJK UNIFIED IDEOGRAPH + {0xCAAE, 0x67B7}, //12174 #CJK UNIFIED IDEOGRAPH + {0xCAAF, 0x67EF}, //12175 #CJK UNIFIED IDEOGRAPH + {0xCAB0, 0x6B4C}, //12176 #CJK UNIFIED IDEOGRAPH + {0xCAB1, 0x73C2}, //12177 #CJK UNIFIED IDEOGRAPH + {0xCAB2, 0x75C2}, //12178 #CJK UNIFIED IDEOGRAPH + {0xCAB3, 0x7A3C}, //12179 #CJK UNIFIED IDEOGRAPH + {0xCAB4, 0x82DB}, //12180 #CJK UNIFIED IDEOGRAPH + {0xCAB5, 0x8304}, //12181 #CJK UNIFIED IDEOGRAPH + {0xCAB6, 0x8857}, //12182 #CJK UNIFIED IDEOGRAPH + {0xCAB7, 0x8888}, //12183 #CJK UNIFIED IDEOGRAPH + {0xCAB8, 0x8A36}, //12184 #CJK UNIFIED IDEOGRAPH + {0xCAB9, 0x8CC8}, //12185 #CJK UNIFIED IDEOGRAPH + {0xCABA, 0x8DCF}, //12186 #CJK UNIFIED IDEOGRAPH + {0xCABB, 0x8EFB}, //12187 #CJK UNIFIED IDEOGRAPH + {0xCABC, 0x8FE6}, //12188 #CJK UNIFIED IDEOGRAPH + {0xCABD, 0x99D5}, //12189 #CJK UNIFIED IDEOGRAPH + {0xCABE, 0x523B}, //12190 #CJK UNIFIED IDEOGRAPH + {0xCABF, 0x5374}, //12191 #CJK UNIFIED IDEOGRAPH + {0xCAC0, 0x5404}, //12192 #CJK UNIFIED IDEOGRAPH + {0xCAC1, 0x606A}, //12193 #CJK UNIFIED IDEOGRAPH + {0xCAC2, 0x6164}, //12194 #CJK UNIFIED IDEOGRAPH + {0xCAC3, 0x6BBC}, //12195 #CJK UNIFIED IDEOGRAPH + {0xCAC4, 0x73CF}, //12196 #CJK UNIFIED IDEOGRAPH + {0xCAC5, 0x811A}, //12197 #CJK UNIFIED IDEOGRAPH + {0xCAC6, 0x89BA}, //12198 #CJK UNIFIED IDEOGRAPH + {0xCAC7, 0x89D2}, //12199 #CJK UNIFIED IDEOGRAPH + {0xCAC8, 0x95A3}, //12200 #CJK UNIFIED IDEOGRAPH + {0xCAC9, 0x4F83}, //12201 #CJK UNIFIED IDEOGRAPH + {0xCACA, 0x520A}, //12202 #CJK UNIFIED IDEOGRAPH + {0xCACB, 0x58BE}, //12203 #CJK UNIFIED IDEOGRAPH + {0xCACC, 0x5978}, //12204 #CJK UNIFIED IDEOGRAPH + {0xCACD, 0x59E6}, //12205 #CJK UNIFIED IDEOGRAPH + {0xCACE, 0x5E72}, //12206 #CJK UNIFIED IDEOGRAPH + {0xCACF, 0x5E79}, //12207 #CJK UNIFIED IDEOGRAPH + {0xCAD0, 0x61C7}, //12208 #CJK UNIFIED IDEOGRAPH + {0xCAD1, 0x63C0}, //12209 #CJK UNIFIED IDEOGRAPH + {0xCAD2, 0x6746}, //12210 #CJK UNIFIED IDEOGRAPH + {0xCAD3, 0x67EC}, //12211 #CJK UNIFIED IDEOGRAPH + {0xCAD4, 0x687F}, //12212 #CJK UNIFIED IDEOGRAPH + {0xCAD5, 0x6F97}, //12213 #CJK UNIFIED IDEOGRAPH + {0xCAD6, 0x764E}, //12214 #CJK UNIFIED IDEOGRAPH + {0xCAD7, 0x770B}, //12215 #CJK UNIFIED IDEOGRAPH + {0xCAD8, 0x78F5}, //12216 #CJK UNIFIED IDEOGRAPH + {0xCAD9, 0x7A08}, //12217 #CJK UNIFIED IDEOGRAPH + {0xCADA, 0x7AFF}, //12218 #CJK UNIFIED IDEOGRAPH + {0xCADB, 0x7C21}, //12219 #CJK UNIFIED IDEOGRAPH + {0xCADC, 0x809D}, //12220 #CJK UNIFIED IDEOGRAPH + {0xCADD, 0x826E}, //12221 #CJK UNIFIED IDEOGRAPH + {0xCADE, 0x8271}, //12222 #CJK UNIFIED IDEOGRAPH + {0xCADF, 0x8AEB}, //12223 #CJK UNIFIED IDEOGRAPH + {0xCAE0, 0x9593}, //12224 #CJK UNIFIED IDEOGRAPH + {0xCAE1, 0x4E6B}, //12225 #CJK UNIFIED IDEOGRAPH + {0xCAE2, 0x559D}, //12226 #CJK UNIFIED IDEOGRAPH + {0xCAE3, 0x66F7}, //12227 #CJK UNIFIED IDEOGRAPH + {0xCAE4, 0x6E34}, //12228 #CJK UNIFIED IDEOGRAPH + {0xCAE5, 0x78A3}, //12229 #CJK UNIFIED IDEOGRAPH + {0xCAE6, 0x7AED}, //12230 #CJK UNIFIED IDEOGRAPH + {0xCAE7, 0x845B}, //12231 #CJK UNIFIED IDEOGRAPH + {0xCAE8, 0x8910}, //12232 #CJK UNIFIED IDEOGRAPH + {0xCAE9, 0x874E}, //12233 #CJK UNIFIED IDEOGRAPH + {0xCAEA, 0x97A8}, //12234 #CJK UNIFIED IDEOGRAPH + {0xCAEB, 0x52D8}, //12235 #CJK UNIFIED IDEOGRAPH + {0xCAEC, 0x574E}, //12236 #CJK UNIFIED IDEOGRAPH + {0xCAED, 0x582A}, //12237 #CJK UNIFIED IDEOGRAPH + {0xCAEE, 0x5D4C}, //12238 #CJK UNIFIED IDEOGRAPH + {0xCAEF, 0x611F}, //12239 #CJK UNIFIED IDEOGRAPH + {0xCAF0, 0x61BE}, //12240 #CJK UNIFIED IDEOGRAPH + {0xCAF1, 0x6221}, //12241 #CJK UNIFIED IDEOGRAPH + {0xCAF2, 0x6562}, //12242 #CJK UNIFIED IDEOGRAPH + {0xCAF3, 0x67D1}, //12243 #CJK UNIFIED IDEOGRAPH + {0xCAF4, 0x6A44}, //12244 #CJK UNIFIED IDEOGRAPH + {0xCAF5, 0x6E1B}, //12245 #CJK UNIFIED IDEOGRAPH + {0xCAF6, 0x7518}, //12246 #CJK UNIFIED IDEOGRAPH + {0xCAF7, 0x75B3}, //12247 #CJK UNIFIED IDEOGRAPH + {0xCAF8, 0x76E3}, //12248 #CJK UNIFIED IDEOGRAPH + {0xCAF9, 0x77B0}, //12249 #CJK UNIFIED IDEOGRAPH + {0xCAFA, 0x7D3A}, //12250 #CJK UNIFIED IDEOGRAPH + {0xCAFB, 0x90AF}, //12251 #CJK UNIFIED IDEOGRAPH + {0xCAFC, 0x9451}, //12252 #CJK UNIFIED IDEOGRAPH + {0xCAFD, 0x9452}, //12253 #CJK UNIFIED IDEOGRAPH + {0xCAFE, 0x9F95}, //12254 #CJK UNIFIED IDEOGRAPH + {0xCBA1, 0x5323}, //12255 #CJK UNIFIED IDEOGRAPH + {0xCBA2, 0x5CAC}, //12256 #CJK UNIFIED IDEOGRAPH + {0xCBA3, 0x7532}, //12257 #CJK UNIFIED IDEOGRAPH + {0xCBA4, 0x80DB}, //12258 #CJK UNIFIED IDEOGRAPH + {0xCBA5, 0x9240}, //12259 #CJK UNIFIED IDEOGRAPH + {0xCBA6, 0x9598}, //12260 #CJK UNIFIED IDEOGRAPH + {0xCBA7, 0x525B}, //12261 #CJK UNIFIED IDEOGRAPH + {0xCBA8, 0x5808}, //12262 #CJK UNIFIED IDEOGRAPH + {0xCBA9, 0x59DC}, //12263 #CJK UNIFIED IDEOGRAPH + {0xCBAA, 0x5CA1}, //12264 #CJK UNIFIED IDEOGRAPH + {0xCBAB, 0x5D17}, //12265 #CJK UNIFIED IDEOGRAPH + {0xCBAC, 0x5EB7}, //12266 #CJK UNIFIED IDEOGRAPH + {0xCBAD, 0x5F3A}, //12267 #CJK UNIFIED IDEOGRAPH + {0xCBAE, 0x5F4A}, //12268 #CJK UNIFIED IDEOGRAPH + {0xCBAF, 0x6177}, //12269 #CJK UNIFIED IDEOGRAPH + {0xCBB0, 0x6C5F}, //12270 #CJK UNIFIED IDEOGRAPH + {0xCBB1, 0x757A}, //12271 #CJK UNIFIED IDEOGRAPH + {0xCBB2, 0x7586}, //12272 #CJK UNIFIED IDEOGRAPH + {0xCBB3, 0x7CE0}, //12273 #CJK UNIFIED IDEOGRAPH + {0xCBB4, 0x7D73}, //12274 #CJK UNIFIED IDEOGRAPH + {0xCBB5, 0x7DB1}, //12275 #CJK UNIFIED IDEOGRAPH + {0xCBB6, 0x7F8C}, //12276 #CJK UNIFIED IDEOGRAPH + {0xCBB7, 0x8154}, //12277 #CJK UNIFIED IDEOGRAPH + {0xCBB8, 0x8221}, //12278 #CJK UNIFIED IDEOGRAPH + {0xCBB9, 0x8591}, //12279 #CJK UNIFIED IDEOGRAPH + {0xCBBA, 0x8941}, //12280 #CJK UNIFIED IDEOGRAPH + {0xCBBB, 0x8B1B}, //12281 #CJK UNIFIED IDEOGRAPH + {0xCBBC, 0x92FC}, //12282 #CJK UNIFIED IDEOGRAPH + {0xCBBD, 0x964D}, //12283 #CJK UNIFIED IDEOGRAPH + {0xCBBE, 0x9C47}, //12284 #CJK UNIFIED IDEOGRAPH + {0xCBBF, 0x4ECB}, //12285 #CJK UNIFIED IDEOGRAPH + {0xCBC0, 0x4EF7}, //12286 #CJK UNIFIED IDEOGRAPH + {0xCBC1, 0x500B}, //12287 #CJK UNIFIED IDEOGRAPH + {0xCBC2, 0x51F1}, //12288 #CJK UNIFIED IDEOGRAPH + {0xCBC3, 0x584F}, //12289 #CJK UNIFIED IDEOGRAPH + {0xCBC4, 0x6137}, //12290 #CJK UNIFIED IDEOGRAPH + {0xCBC5, 0x613E}, //12291 #CJK UNIFIED IDEOGRAPH + {0xCBC6, 0x6168}, //12292 #CJK UNIFIED IDEOGRAPH + {0xCBC7, 0x6539}, //12293 #CJK UNIFIED IDEOGRAPH + {0xCBC8, 0x69EA}, //12294 #CJK UNIFIED IDEOGRAPH + {0xCBC9, 0x6F11}, //12295 #CJK UNIFIED IDEOGRAPH + {0xCBCA, 0x75A5}, //12296 #CJK UNIFIED IDEOGRAPH + {0xCBCB, 0x7686}, //12297 #CJK UNIFIED IDEOGRAPH + {0xCBCC, 0x76D6}, //12298 #CJK UNIFIED IDEOGRAPH + {0xCBCD, 0x7B87}, //12299 #CJK UNIFIED IDEOGRAPH + {0xCBCE, 0x82A5}, //12300 #CJK UNIFIED IDEOGRAPH + {0xCBCF, 0x84CB}, //12301 #CJK UNIFIED IDEOGRAPH + {0xCBD0, 0xF900}, //12302 #CJK COMPATIBILITY IDEOGRAPH + {0xCBD1, 0x93A7}, //12303 #CJK UNIFIED IDEOGRAPH + {0xCBD2, 0x958B}, //12304 #CJK UNIFIED IDEOGRAPH + {0xCBD3, 0x5580}, //12305 #CJK UNIFIED IDEOGRAPH + {0xCBD4, 0x5BA2}, //12306 #CJK UNIFIED IDEOGRAPH + {0xCBD5, 0x5751}, //12307 #CJK UNIFIED IDEOGRAPH + {0xCBD6, 0xF901}, //12308 #CJK COMPATIBILITY IDEOGRAPH + {0xCBD7, 0x7CB3}, //12309 #CJK UNIFIED IDEOGRAPH + {0xCBD8, 0x7FB9}, //12310 #CJK UNIFIED IDEOGRAPH + {0xCBD9, 0x91B5}, //12311 #CJK UNIFIED IDEOGRAPH + {0xCBDA, 0x5028}, //12312 #CJK UNIFIED IDEOGRAPH + {0xCBDB, 0x53BB}, //12313 #CJK UNIFIED IDEOGRAPH + {0xCBDC, 0x5C45}, //12314 #CJK UNIFIED IDEOGRAPH + {0xCBDD, 0x5DE8}, //12315 #CJK UNIFIED IDEOGRAPH + {0xCBDE, 0x62D2}, //12316 #CJK UNIFIED IDEOGRAPH + {0xCBDF, 0x636E}, //12317 #CJK UNIFIED IDEOGRAPH + {0xCBE0, 0x64DA}, //12318 #CJK UNIFIED IDEOGRAPH + {0xCBE1, 0x64E7}, //12319 #CJK UNIFIED IDEOGRAPH + {0xCBE2, 0x6E20}, //12320 #CJK UNIFIED IDEOGRAPH + {0xCBE3, 0x70AC}, //12321 #CJK UNIFIED IDEOGRAPH + {0xCBE4, 0x795B}, //12322 #CJK UNIFIED IDEOGRAPH + {0xCBE5, 0x8DDD}, //12323 #CJK UNIFIED IDEOGRAPH + {0xCBE6, 0x8E1E}, //12324 #CJK UNIFIED IDEOGRAPH + {0xCBE7, 0xF902}, //12325 #CJK COMPATIBILITY IDEOGRAPH + {0xCBE8, 0x907D}, //12326 #CJK UNIFIED IDEOGRAPH + {0xCBE9, 0x9245}, //12327 #CJK UNIFIED IDEOGRAPH + {0xCBEA, 0x92F8}, //12328 #CJK UNIFIED IDEOGRAPH + {0xCBEB, 0x4E7E}, //12329 #CJK UNIFIED IDEOGRAPH + {0xCBEC, 0x4EF6}, //12330 #CJK UNIFIED IDEOGRAPH + {0xCBED, 0x5065}, //12331 #CJK UNIFIED IDEOGRAPH + {0xCBEE, 0x5DFE}, //12332 #CJK UNIFIED IDEOGRAPH + {0xCBEF, 0x5EFA}, //12333 #CJK UNIFIED IDEOGRAPH + {0xCBF0, 0x6106}, //12334 #CJK UNIFIED IDEOGRAPH + {0xCBF1, 0x6957}, //12335 #CJK UNIFIED IDEOGRAPH + {0xCBF2, 0x8171}, //12336 #CJK UNIFIED IDEOGRAPH + {0xCBF3, 0x8654}, //12337 #CJK UNIFIED IDEOGRAPH + {0xCBF4, 0x8E47}, //12338 #CJK UNIFIED IDEOGRAPH + {0xCBF5, 0x9375}, //12339 #CJK UNIFIED IDEOGRAPH + {0xCBF6, 0x9A2B}, //12340 #CJK UNIFIED IDEOGRAPH + {0xCBF7, 0x4E5E}, //12341 #CJK UNIFIED IDEOGRAPH + {0xCBF8, 0x5091}, //12342 #CJK UNIFIED IDEOGRAPH + {0xCBF9, 0x6770}, //12343 #CJK UNIFIED IDEOGRAPH + {0xCBFA, 0x6840}, //12344 #CJK UNIFIED IDEOGRAPH + {0xCBFB, 0x5109}, //12345 #CJK UNIFIED IDEOGRAPH + {0xCBFC, 0x528D}, //12346 #CJK UNIFIED IDEOGRAPH + {0xCBFD, 0x5292}, //12347 #CJK UNIFIED IDEOGRAPH + {0xCBFE, 0x6AA2}, //12348 #CJK UNIFIED IDEOGRAPH + {0xCCA1, 0x77BC}, //12349 #CJK UNIFIED IDEOGRAPH + {0xCCA2, 0x9210}, //12350 #CJK UNIFIED IDEOGRAPH + {0xCCA3, 0x9ED4}, //12351 #CJK UNIFIED IDEOGRAPH + {0xCCA4, 0x52AB}, //12352 #CJK UNIFIED IDEOGRAPH + {0xCCA5, 0x602F}, //12353 #CJK UNIFIED IDEOGRAPH + {0xCCA6, 0x8FF2}, //12354 #CJK UNIFIED IDEOGRAPH + {0xCCA7, 0x5048}, //12355 #CJK UNIFIED IDEOGRAPH + {0xCCA8, 0x61A9}, //12356 #CJK UNIFIED IDEOGRAPH + {0xCCA9, 0x63ED}, //12357 #CJK UNIFIED IDEOGRAPH + {0xCCAA, 0x64CA}, //12358 #CJK UNIFIED IDEOGRAPH + {0xCCAB, 0x683C}, //12359 #CJK UNIFIED IDEOGRAPH + {0xCCAC, 0x6A84}, //12360 #CJK UNIFIED IDEOGRAPH + {0xCCAD, 0x6FC0}, //12361 #CJK UNIFIED IDEOGRAPH + {0xCCAE, 0x8188}, //12362 #CJK UNIFIED IDEOGRAPH + {0xCCAF, 0x89A1}, //12363 #CJK UNIFIED IDEOGRAPH + {0xCCB0, 0x9694}, //12364 #CJK UNIFIED IDEOGRAPH + {0xCCB1, 0x5805}, //12365 #CJK UNIFIED IDEOGRAPH + {0xCCB2, 0x727D}, //12366 #CJK UNIFIED IDEOGRAPH + {0xCCB3, 0x72AC}, //12367 #CJK UNIFIED IDEOGRAPH + {0xCCB4, 0x7504}, //12368 #CJK UNIFIED IDEOGRAPH + {0xCCB5, 0x7D79}, //12369 #CJK UNIFIED IDEOGRAPH + {0xCCB6, 0x7E6D}, //12370 #CJK UNIFIED IDEOGRAPH + {0xCCB7, 0x80A9}, //12371 #CJK UNIFIED IDEOGRAPH + {0xCCB8, 0x898B}, //12372 #CJK UNIFIED IDEOGRAPH + {0xCCB9, 0x8B74}, //12373 #CJK UNIFIED IDEOGRAPH + {0xCCBA, 0x9063}, //12374 #CJK UNIFIED IDEOGRAPH + {0xCCBB, 0x9D51}, //12375 #CJK UNIFIED IDEOGRAPH + {0xCCBC, 0x6289}, //12376 #CJK UNIFIED IDEOGRAPH + {0xCCBD, 0x6C7A}, //12377 #CJK UNIFIED IDEOGRAPH + {0xCCBE, 0x6F54}, //12378 #CJK UNIFIED IDEOGRAPH + {0xCCBF, 0x7D50}, //12379 #CJK UNIFIED IDEOGRAPH + {0xCCC0, 0x7F3A}, //12380 #CJK UNIFIED IDEOGRAPH + {0xCCC1, 0x8A23}, //12381 #CJK UNIFIED IDEOGRAPH + {0xCCC2, 0x517C}, //12382 #CJK UNIFIED IDEOGRAPH + {0xCCC3, 0x614A}, //12383 #CJK UNIFIED IDEOGRAPH + {0xCCC4, 0x7B9D}, //12384 #CJK UNIFIED IDEOGRAPH + {0xCCC5, 0x8B19}, //12385 #CJK UNIFIED IDEOGRAPH + {0xCCC6, 0x9257}, //12386 #CJK UNIFIED IDEOGRAPH + {0xCCC7, 0x938C}, //12387 #CJK UNIFIED IDEOGRAPH + {0xCCC8, 0x4EAC}, //12388 #CJK UNIFIED IDEOGRAPH + {0xCCC9, 0x4FD3}, //12389 #CJK UNIFIED IDEOGRAPH + {0xCCCA, 0x501E}, //12390 #CJK UNIFIED IDEOGRAPH + {0xCCCB, 0x50BE}, //12391 #CJK UNIFIED IDEOGRAPH + {0xCCCC, 0x5106}, //12392 #CJK UNIFIED IDEOGRAPH + {0xCCCD, 0x52C1}, //12393 #CJK UNIFIED IDEOGRAPH + {0xCCCE, 0x52CD}, //12394 #CJK UNIFIED IDEOGRAPH + {0xCCCF, 0x537F}, //12395 #CJK UNIFIED IDEOGRAPH + {0xCCD0, 0x5770}, //12396 #CJK UNIFIED IDEOGRAPH + {0xCCD1, 0x5883}, //12397 #CJK UNIFIED IDEOGRAPH + {0xCCD2, 0x5E9A}, //12398 #CJK UNIFIED IDEOGRAPH + {0xCCD3, 0x5F91}, //12399 #CJK UNIFIED IDEOGRAPH + {0xCCD4, 0x6176}, //12400 #CJK UNIFIED IDEOGRAPH + {0xCCD5, 0x61AC}, //12401 #CJK UNIFIED IDEOGRAPH + {0xCCD6, 0x64CE}, //12402 #CJK UNIFIED IDEOGRAPH + {0xCCD7, 0x656C}, //12403 #CJK UNIFIED IDEOGRAPH + {0xCCD8, 0x666F}, //12404 #CJK UNIFIED IDEOGRAPH + {0xCCD9, 0x66BB}, //12405 #CJK UNIFIED IDEOGRAPH + {0xCCDA, 0x66F4}, //12406 #CJK UNIFIED IDEOGRAPH + {0xCCDB, 0x6897}, //12407 #CJK UNIFIED IDEOGRAPH + {0xCCDC, 0x6D87}, //12408 #CJK UNIFIED IDEOGRAPH + {0xCCDD, 0x7085}, //12409 #CJK UNIFIED IDEOGRAPH + {0xCCDE, 0x70F1}, //12410 #CJK UNIFIED IDEOGRAPH + {0xCCDF, 0x749F}, //12411 #CJK UNIFIED IDEOGRAPH + {0xCCE0, 0x74A5}, //12412 #CJK UNIFIED IDEOGRAPH + {0xCCE1, 0x74CA}, //12413 #CJK UNIFIED IDEOGRAPH + {0xCCE2, 0x75D9}, //12414 #CJK UNIFIED IDEOGRAPH + {0xCCE3, 0x786C}, //12415 #CJK UNIFIED IDEOGRAPH + {0xCCE4, 0x78EC}, //12416 #CJK UNIFIED IDEOGRAPH + {0xCCE5, 0x7ADF}, //12417 #CJK UNIFIED IDEOGRAPH + {0xCCE6, 0x7AF6}, //12418 #CJK UNIFIED IDEOGRAPH + {0xCCE7, 0x7D45}, //12419 #CJK UNIFIED IDEOGRAPH + {0xCCE8, 0x7D93}, //12420 #CJK UNIFIED IDEOGRAPH + {0xCCE9, 0x8015}, //12421 #CJK UNIFIED IDEOGRAPH + {0xCCEA, 0x803F}, //12422 #CJK UNIFIED IDEOGRAPH + {0xCCEB, 0x811B}, //12423 #CJK UNIFIED IDEOGRAPH + {0xCCEC, 0x8396}, //12424 #CJK UNIFIED IDEOGRAPH + {0xCCED, 0x8B66}, //12425 #CJK UNIFIED IDEOGRAPH + {0xCCEE, 0x8F15}, //12426 #CJK UNIFIED IDEOGRAPH + {0xCCEF, 0x9015}, //12427 #CJK UNIFIED IDEOGRAPH + {0xCCF0, 0x93E1}, //12428 #CJK UNIFIED IDEOGRAPH + {0xCCF1, 0x9803}, //12429 #CJK UNIFIED IDEOGRAPH + {0xCCF2, 0x9838}, //12430 #CJK UNIFIED IDEOGRAPH + {0xCCF3, 0x9A5A}, //12431 #CJK UNIFIED IDEOGRAPH + {0xCCF4, 0x9BE8}, //12432 #CJK UNIFIED IDEOGRAPH + {0xCCF5, 0x4FC2}, //12433 #CJK UNIFIED IDEOGRAPH + {0xCCF6, 0x5553}, //12434 #CJK UNIFIED IDEOGRAPH + {0xCCF7, 0x583A}, //12435 #CJK UNIFIED IDEOGRAPH + {0xCCF8, 0x5951}, //12436 #CJK UNIFIED IDEOGRAPH + {0xCCF9, 0x5B63}, //12437 #CJK UNIFIED IDEOGRAPH + {0xCCFA, 0x5C46}, //12438 #CJK UNIFIED IDEOGRAPH + {0xCCFB, 0x60B8}, //12439 #CJK UNIFIED IDEOGRAPH + {0xCCFC, 0x6212}, //12440 #CJK UNIFIED IDEOGRAPH + {0xCCFD, 0x6842}, //12441 #CJK UNIFIED IDEOGRAPH + {0xCCFE, 0x68B0}, //12442 #CJK UNIFIED IDEOGRAPH + {0xCDA1, 0x68E8}, //12443 #CJK UNIFIED IDEOGRAPH + {0xCDA2, 0x6EAA}, //12444 #CJK UNIFIED IDEOGRAPH + {0xCDA3, 0x754C}, //12445 #CJK UNIFIED IDEOGRAPH + {0xCDA4, 0x7678}, //12446 #CJK UNIFIED IDEOGRAPH + {0xCDA5, 0x78CE}, //12447 #CJK UNIFIED IDEOGRAPH + {0xCDA6, 0x7A3D}, //12448 #CJK UNIFIED IDEOGRAPH + {0xCDA7, 0x7CFB}, //12449 #CJK UNIFIED IDEOGRAPH + {0xCDA8, 0x7E6B}, //12450 #CJK UNIFIED IDEOGRAPH + {0xCDA9, 0x7E7C}, //12451 #CJK UNIFIED IDEOGRAPH + {0xCDAA, 0x8A08}, //12452 #CJK UNIFIED IDEOGRAPH + {0xCDAB, 0x8AA1}, //12453 #CJK UNIFIED IDEOGRAPH + {0xCDAC, 0x8C3F}, //12454 #CJK UNIFIED IDEOGRAPH + {0xCDAD, 0x968E}, //12455 #CJK UNIFIED IDEOGRAPH + {0xCDAE, 0x9DC4}, //12456 #CJK UNIFIED IDEOGRAPH + {0xCDAF, 0x53E4}, //12457 #CJK UNIFIED IDEOGRAPH + {0xCDB0, 0x53E9}, //12458 #CJK UNIFIED IDEOGRAPH + {0xCDB1, 0x544A}, //12459 #CJK UNIFIED IDEOGRAPH + {0xCDB2, 0x5471}, //12460 #CJK UNIFIED IDEOGRAPH + {0xCDB3, 0x56FA}, //12461 #CJK UNIFIED IDEOGRAPH + {0xCDB4, 0x59D1}, //12462 #CJK UNIFIED IDEOGRAPH + {0xCDB5, 0x5B64}, //12463 #CJK UNIFIED IDEOGRAPH + {0xCDB6, 0x5C3B}, //12464 #CJK UNIFIED IDEOGRAPH + {0xCDB7, 0x5EAB}, //12465 #CJK UNIFIED IDEOGRAPH + {0xCDB8, 0x62F7}, //12466 #CJK UNIFIED IDEOGRAPH + {0xCDB9, 0x6537}, //12467 #CJK UNIFIED IDEOGRAPH + {0xCDBA, 0x6545}, //12468 #CJK UNIFIED IDEOGRAPH + {0xCDBB, 0x6572}, //12469 #CJK UNIFIED IDEOGRAPH + {0xCDBC, 0x66A0}, //12470 #CJK UNIFIED IDEOGRAPH + {0xCDBD, 0x67AF}, //12471 #CJK UNIFIED IDEOGRAPH + {0xCDBE, 0x69C1}, //12472 #CJK UNIFIED IDEOGRAPH + {0xCDBF, 0x6CBD}, //12473 #CJK UNIFIED IDEOGRAPH + {0xCDC0, 0x75FC}, //12474 #CJK UNIFIED IDEOGRAPH + {0xCDC1, 0x7690}, //12475 #CJK UNIFIED IDEOGRAPH + {0xCDC2, 0x777E}, //12476 #CJK UNIFIED IDEOGRAPH + {0xCDC3, 0x7A3F}, //12477 #CJK UNIFIED IDEOGRAPH + {0xCDC4, 0x7F94}, //12478 #CJK UNIFIED IDEOGRAPH + {0xCDC5, 0x8003}, //12479 #CJK UNIFIED IDEOGRAPH + {0xCDC6, 0x80A1}, //12480 #CJK UNIFIED IDEOGRAPH + {0xCDC7, 0x818F}, //12481 #CJK UNIFIED IDEOGRAPH + {0xCDC8, 0x82E6}, //12482 #CJK UNIFIED IDEOGRAPH + {0xCDC9, 0x82FD}, //12483 #CJK UNIFIED IDEOGRAPH + {0xCDCA, 0x83F0}, //12484 #CJK UNIFIED IDEOGRAPH + {0xCDCB, 0x85C1}, //12485 #CJK UNIFIED IDEOGRAPH + {0xCDCC, 0x8831}, //12486 #CJK UNIFIED IDEOGRAPH + {0xCDCD, 0x88B4}, //12487 #CJK UNIFIED IDEOGRAPH + {0xCDCE, 0x8AA5}, //12488 #CJK UNIFIED IDEOGRAPH + {0xCDCF, 0xF903}, //12489 #CJK COMPATIBILITY IDEOGRAPH + {0xCDD0, 0x8F9C}, //12490 #CJK UNIFIED IDEOGRAPH + {0xCDD1, 0x932E}, //12491 #CJK UNIFIED IDEOGRAPH + {0xCDD2, 0x96C7}, //12492 #CJK UNIFIED IDEOGRAPH + {0xCDD3, 0x9867}, //12493 #CJK UNIFIED IDEOGRAPH + {0xCDD4, 0x9AD8}, //12494 #CJK UNIFIED IDEOGRAPH + {0xCDD5, 0x9F13}, //12495 #CJK UNIFIED IDEOGRAPH + {0xCDD6, 0x54ED}, //12496 #CJK UNIFIED IDEOGRAPH + {0xCDD7, 0x659B}, //12497 #CJK UNIFIED IDEOGRAPH + {0xCDD8, 0x66F2}, //12498 #CJK UNIFIED IDEOGRAPH + {0xCDD9, 0x688F}, //12499 #CJK UNIFIED IDEOGRAPH + {0xCDDA, 0x7A40}, //12500 #CJK UNIFIED IDEOGRAPH + {0xCDDB, 0x8C37}, //12501 #CJK UNIFIED IDEOGRAPH + {0xCDDC, 0x9D60}, //12502 #CJK UNIFIED IDEOGRAPH + {0xCDDD, 0x56F0}, //12503 #CJK UNIFIED IDEOGRAPH + {0xCDDE, 0x5764}, //12504 #CJK UNIFIED IDEOGRAPH + {0xCDDF, 0x5D11}, //12505 #CJK UNIFIED IDEOGRAPH + {0xCDE0, 0x6606}, //12506 #CJK UNIFIED IDEOGRAPH + {0xCDE1, 0x68B1}, //12507 #CJK UNIFIED IDEOGRAPH + {0xCDE2, 0x68CD}, //12508 #CJK UNIFIED IDEOGRAPH + {0xCDE3, 0x6EFE}, //12509 #CJK UNIFIED IDEOGRAPH + {0xCDE4, 0x7428}, //12510 #CJK UNIFIED IDEOGRAPH + {0xCDE5, 0x889E}, //12511 #CJK UNIFIED IDEOGRAPH + {0xCDE6, 0x9BE4}, //12512 #CJK UNIFIED IDEOGRAPH + {0xCDE7, 0x6C68}, //12513 #CJK UNIFIED IDEOGRAPH + {0xCDE8, 0xF904}, //12514 #CJK COMPATIBILITY IDEOGRAPH + {0xCDE9, 0x9AA8}, //12515 #CJK UNIFIED IDEOGRAPH + {0xCDEA, 0x4F9B}, //12516 #CJK UNIFIED IDEOGRAPH + {0xCDEB, 0x516C}, //12517 #CJK UNIFIED IDEOGRAPH + {0xCDEC, 0x5171}, //12518 #CJK UNIFIED IDEOGRAPH + {0xCDED, 0x529F}, //12519 #CJK UNIFIED IDEOGRAPH + {0xCDEE, 0x5B54}, //12520 #CJK UNIFIED IDEOGRAPH + {0xCDEF, 0x5DE5}, //12521 #CJK UNIFIED IDEOGRAPH + {0xCDF0, 0x6050}, //12522 #CJK UNIFIED IDEOGRAPH + {0xCDF1, 0x606D}, //12523 #CJK UNIFIED IDEOGRAPH + {0xCDF2, 0x62F1}, //12524 #CJK UNIFIED IDEOGRAPH + {0xCDF3, 0x63A7}, //12525 #CJK UNIFIED IDEOGRAPH + {0xCDF4, 0x653B}, //12526 #CJK UNIFIED IDEOGRAPH + {0xCDF5, 0x73D9}, //12527 #CJK UNIFIED IDEOGRAPH + {0xCDF6, 0x7A7A}, //12528 #CJK UNIFIED IDEOGRAPH + {0xCDF7, 0x86A3}, //12529 #CJK UNIFIED IDEOGRAPH + {0xCDF8, 0x8CA2}, //12530 #CJK UNIFIED IDEOGRAPH + {0xCDF9, 0x978F}, //12531 #CJK UNIFIED IDEOGRAPH + {0xCDFA, 0x4E32}, //12532 #CJK UNIFIED IDEOGRAPH + {0xCDFB, 0x5BE1}, //12533 #CJK UNIFIED IDEOGRAPH + {0xCDFC, 0x6208}, //12534 #CJK UNIFIED IDEOGRAPH + {0xCDFD, 0x679C}, //12535 #CJK UNIFIED IDEOGRAPH + {0xCDFE, 0x74DC}, //12536 #CJK UNIFIED IDEOGRAPH + {0xCEA1, 0x79D1}, //12537 #CJK UNIFIED IDEOGRAPH + {0xCEA2, 0x83D3}, //12538 #CJK UNIFIED IDEOGRAPH + {0xCEA3, 0x8A87}, //12539 #CJK UNIFIED IDEOGRAPH + {0xCEA4, 0x8AB2}, //12540 #CJK UNIFIED IDEOGRAPH + {0xCEA5, 0x8DE8}, //12541 #CJK UNIFIED IDEOGRAPH + {0xCEA6, 0x904E}, //12542 #CJK UNIFIED IDEOGRAPH + {0xCEA7, 0x934B}, //12543 #CJK UNIFIED IDEOGRAPH + {0xCEA8, 0x9846}, //12544 #CJK UNIFIED IDEOGRAPH + {0xCEA9, 0x5ED3}, //12545 #CJK UNIFIED IDEOGRAPH + {0xCEAA, 0x69E8}, //12546 #CJK UNIFIED IDEOGRAPH + {0xCEAB, 0x85FF}, //12547 #CJK UNIFIED IDEOGRAPH + {0xCEAC, 0x90ED}, //12548 #CJK UNIFIED IDEOGRAPH + {0xCEAD, 0xF905}, //12549 #CJK COMPATIBILITY IDEOGRAPH + {0xCEAE, 0x51A0}, //12550 #CJK UNIFIED IDEOGRAPH + {0xCEAF, 0x5B98}, //12551 #CJK UNIFIED IDEOGRAPH + {0xCEB0, 0x5BEC}, //12552 #CJK UNIFIED IDEOGRAPH + {0xCEB1, 0x6163}, //12553 #CJK UNIFIED IDEOGRAPH + {0xCEB2, 0x68FA}, //12554 #CJK UNIFIED IDEOGRAPH + {0xCEB3, 0x6B3E}, //12555 #CJK UNIFIED IDEOGRAPH + {0xCEB4, 0x704C}, //12556 #CJK UNIFIED IDEOGRAPH + {0xCEB5, 0x742F}, //12557 #CJK UNIFIED IDEOGRAPH + {0xCEB6, 0x74D8}, //12558 #CJK UNIFIED IDEOGRAPH + {0xCEB7, 0x7BA1}, //12559 #CJK UNIFIED IDEOGRAPH + {0xCEB8, 0x7F50}, //12560 #CJK UNIFIED IDEOGRAPH + {0xCEB9, 0x83C5}, //12561 #CJK UNIFIED IDEOGRAPH + {0xCEBA, 0x89C0}, //12562 #CJK UNIFIED IDEOGRAPH + {0xCEBB, 0x8CAB}, //12563 #CJK UNIFIED IDEOGRAPH + {0xCEBC, 0x95DC}, //12564 #CJK UNIFIED IDEOGRAPH + {0xCEBD, 0x9928}, //12565 #CJK UNIFIED IDEOGRAPH + {0xCEBE, 0x522E}, //12566 #CJK UNIFIED IDEOGRAPH + {0xCEBF, 0x605D}, //12567 #CJK UNIFIED IDEOGRAPH + {0xCEC0, 0x62EC}, //12568 #CJK UNIFIED IDEOGRAPH + {0xCEC1, 0x9002}, //12569 #CJK UNIFIED IDEOGRAPH + {0xCEC2, 0x4F8A}, //12570 #CJK UNIFIED IDEOGRAPH + {0xCEC3, 0x5149}, //12571 #CJK UNIFIED IDEOGRAPH + {0xCEC4, 0x5321}, //12572 #CJK UNIFIED IDEOGRAPH + {0xCEC5, 0x58D9}, //12573 #CJK UNIFIED IDEOGRAPH + {0xCEC6, 0x5EE3}, //12574 #CJK UNIFIED IDEOGRAPH + {0xCEC7, 0x66E0}, //12575 #CJK UNIFIED IDEOGRAPH + {0xCEC8, 0x6D38}, //12576 #CJK UNIFIED IDEOGRAPH + {0xCEC9, 0x709A}, //12577 #CJK UNIFIED IDEOGRAPH + {0xCECA, 0x72C2}, //12578 #CJK UNIFIED IDEOGRAPH + {0xCECB, 0x73D6}, //12579 #CJK UNIFIED IDEOGRAPH + {0xCECC, 0x7B50}, //12580 #CJK UNIFIED IDEOGRAPH + {0xCECD, 0x80F1}, //12581 #CJK UNIFIED IDEOGRAPH + {0xCECE, 0x945B}, //12582 #CJK UNIFIED IDEOGRAPH + {0xCECF, 0x5366}, //12583 #CJK UNIFIED IDEOGRAPH + {0xCED0, 0x639B}, //12584 #CJK UNIFIED IDEOGRAPH + {0xCED1, 0x7F6B}, //12585 #CJK UNIFIED IDEOGRAPH + {0xCED2, 0x4E56}, //12586 #CJK UNIFIED IDEOGRAPH + {0xCED3, 0x5080}, //12587 #CJK UNIFIED IDEOGRAPH + {0xCED4, 0x584A}, //12588 #CJK UNIFIED IDEOGRAPH + {0xCED5, 0x58DE}, //12589 #CJK UNIFIED IDEOGRAPH + {0xCED6, 0x602A}, //12590 #CJK UNIFIED IDEOGRAPH + {0xCED7, 0x6127}, //12591 #CJK UNIFIED IDEOGRAPH + {0xCED8, 0x62D0}, //12592 #CJK UNIFIED IDEOGRAPH + {0xCED9, 0x69D0}, //12593 #CJK UNIFIED IDEOGRAPH + {0xCEDA, 0x9B41}, //12594 #CJK UNIFIED IDEOGRAPH + {0xCEDB, 0x5B8F}, //12595 #CJK UNIFIED IDEOGRAPH + {0xCEDC, 0x7D18}, //12596 #CJK UNIFIED IDEOGRAPH + {0xCEDD, 0x80B1}, //12597 #CJK UNIFIED IDEOGRAPH + {0xCEDE, 0x8F5F}, //12598 #CJK UNIFIED IDEOGRAPH + {0xCEDF, 0x4EA4}, //12599 #CJK UNIFIED IDEOGRAPH + {0xCEE0, 0x50D1}, //12600 #CJK UNIFIED IDEOGRAPH + {0xCEE1, 0x54AC}, //12601 #CJK UNIFIED IDEOGRAPH + {0xCEE2, 0x55AC}, //12602 #CJK UNIFIED IDEOGRAPH + {0xCEE3, 0x5B0C}, //12603 #CJK UNIFIED IDEOGRAPH + {0xCEE4, 0x5DA0}, //12604 #CJK UNIFIED IDEOGRAPH + {0xCEE5, 0x5DE7}, //12605 #CJK UNIFIED IDEOGRAPH + {0xCEE6, 0x652A}, //12606 #CJK UNIFIED IDEOGRAPH + {0xCEE7, 0x654E}, //12607 #CJK UNIFIED IDEOGRAPH + {0xCEE8, 0x6821}, //12608 #CJK UNIFIED IDEOGRAPH + {0xCEE9, 0x6A4B}, //12609 #CJK UNIFIED IDEOGRAPH + {0xCEEA, 0x72E1}, //12610 #CJK UNIFIED IDEOGRAPH + {0xCEEB, 0x768E}, //12611 #CJK UNIFIED IDEOGRAPH + {0xCEEC, 0x77EF}, //12612 #CJK UNIFIED IDEOGRAPH + {0xCEED, 0x7D5E}, //12613 #CJK UNIFIED IDEOGRAPH + {0xCEEE, 0x7FF9}, //12614 #CJK UNIFIED IDEOGRAPH + {0xCEEF, 0x81A0}, //12615 #CJK UNIFIED IDEOGRAPH + {0xCEF0, 0x854E}, //12616 #CJK UNIFIED IDEOGRAPH + {0xCEF1, 0x86DF}, //12617 #CJK UNIFIED IDEOGRAPH + {0xCEF2, 0x8F03}, //12618 #CJK UNIFIED IDEOGRAPH + {0xCEF3, 0x8F4E}, //12619 #CJK UNIFIED IDEOGRAPH + {0xCEF4, 0x90CA}, //12620 #CJK UNIFIED IDEOGRAPH + {0xCEF5, 0x9903}, //12621 #CJK UNIFIED IDEOGRAPH + {0xCEF6, 0x9A55}, //12622 #CJK UNIFIED IDEOGRAPH + {0xCEF7, 0x9BAB}, //12623 #CJK UNIFIED IDEOGRAPH + {0xCEF8, 0x4E18}, //12624 #CJK UNIFIED IDEOGRAPH + {0xCEF9, 0x4E45}, //12625 #CJK UNIFIED IDEOGRAPH + {0xCEFA, 0x4E5D}, //12626 #CJK UNIFIED IDEOGRAPH + {0xCEFB, 0x4EC7}, //12627 #CJK UNIFIED IDEOGRAPH + {0xCEFC, 0x4FF1}, //12628 #CJK UNIFIED IDEOGRAPH + {0xCEFD, 0x5177}, //12629 #CJK UNIFIED IDEOGRAPH + {0xCEFE, 0x52FE}, //12630 #CJK UNIFIED IDEOGRAPH + {0xCFA1, 0x5340}, //12631 #CJK UNIFIED IDEOGRAPH + {0xCFA2, 0x53E3}, //12632 #CJK UNIFIED IDEOGRAPH + {0xCFA3, 0x53E5}, //12633 #CJK UNIFIED IDEOGRAPH + {0xCFA4, 0x548E}, //12634 #CJK UNIFIED IDEOGRAPH + {0xCFA5, 0x5614}, //12635 #CJK UNIFIED IDEOGRAPH + {0xCFA6, 0x5775}, //12636 #CJK UNIFIED IDEOGRAPH + {0xCFA7, 0x57A2}, //12637 #CJK UNIFIED IDEOGRAPH + {0xCFA8, 0x5BC7}, //12638 #CJK UNIFIED IDEOGRAPH + {0xCFA9, 0x5D87}, //12639 #CJK UNIFIED IDEOGRAPH + {0xCFAA, 0x5ED0}, //12640 #CJK UNIFIED IDEOGRAPH + {0xCFAB, 0x61FC}, //12641 #CJK UNIFIED IDEOGRAPH + {0xCFAC, 0x62D8}, //12642 #CJK UNIFIED IDEOGRAPH + {0xCFAD, 0x6551}, //12643 #CJK UNIFIED IDEOGRAPH + {0xCFAE, 0x67B8}, //12644 #CJK UNIFIED IDEOGRAPH + {0xCFAF, 0x67E9}, //12645 #CJK UNIFIED IDEOGRAPH + {0xCFB0, 0x69CB}, //12646 #CJK UNIFIED IDEOGRAPH + {0xCFB1, 0x6B50}, //12647 #CJK UNIFIED IDEOGRAPH + {0xCFB2, 0x6BC6}, //12648 #CJK UNIFIED IDEOGRAPH + {0xCFB3, 0x6BEC}, //12649 #CJK UNIFIED IDEOGRAPH + {0xCFB4, 0x6C42}, //12650 #CJK UNIFIED IDEOGRAPH + {0xCFB5, 0x6E9D}, //12651 #CJK UNIFIED IDEOGRAPH + {0xCFB6, 0x7078}, //12652 #CJK UNIFIED IDEOGRAPH + {0xCFB7, 0x72D7}, //12653 #CJK UNIFIED IDEOGRAPH + {0xCFB8, 0x7396}, //12654 #CJK UNIFIED IDEOGRAPH + {0xCFB9, 0x7403}, //12655 #CJK UNIFIED IDEOGRAPH + {0xCFBA, 0x77BF}, //12656 #CJK UNIFIED IDEOGRAPH + {0xCFBB, 0x77E9}, //12657 #CJK UNIFIED IDEOGRAPH + {0xCFBC, 0x7A76}, //12658 #CJK UNIFIED IDEOGRAPH + {0xCFBD, 0x7D7F}, //12659 #CJK UNIFIED IDEOGRAPH + {0xCFBE, 0x8009}, //12660 #CJK UNIFIED IDEOGRAPH + {0xCFBF, 0x81FC}, //12661 #CJK UNIFIED IDEOGRAPH + {0xCFC0, 0x8205}, //12662 #CJK UNIFIED IDEOGRAPH + {0xCFC1, 0x820A}, //12663 #CJK UNIFIED IDEOGRAPH + {0xCFC2, 0x82DF}, //12664 #CJK UNIFIED IDEOGRAPH + {0xCFC3, 0x8862}, //12665 #CJK UNIFIED IDEOGRAPH + {0xCFC4, 0x8B33}, //12666 #CJK UNIFIED IDEOGRAPH + {0xCFC5, 0x8CFC}, //12667 #CJK UNIFIED IDEOGRAPH + {0xCFC6, 0x8EC0}, //12668 #CJK UNIFIED IDEOGRAPH + {0xCFC7, 0x9011}, //12669 #CJK UNIFIED IDEOGRAPH + {0xCFC8, 0x90B1}, //12670 #CJK UNIFIED IDEOGRAPH + {0xCFC9, 0x9264}, //12671 #CJK UNIFIED IDEOGRAPH + {0xCFCA, 0x92B6}, //12672 #CJK UNIFIED IDEOGRAPH + {0xCFCB, 0x99D2}, //12673 #CJK UNIFIED IDEOGRAPH + {0xCFCC, 0x9A45}, //12674 #CJK UNIFIED IDEOGRAPH + {0xCFCD, 0x9CE9}, //12675 #CJK UNIFIED IDEOGRAPH + {0xCFCE, 0x9DD7}, //12676 #CJK UNIFIED IDEOGRAPH + {0xCFCF, 0x9F9C}, //12677 #CJK UNIFIED IDEOGRAPH + {0xCFD0, 0x570B}, //12678 #CJK UNIFIED IDEOGRAPH + {0xCFD1, 0x5C40}, //12679 #CJK UNIFIED IDEOGRAPH + {0xCFD2, 0x83CA}, //12680 #CJK UNIFIED IDEOGRAPH + {0xCFD3, 0x97A0}, //12681 #CJK UNIFIED IDEOGRAPH + {0xCFD4, 0x97AB}, //12682 #CJK UNIFIED IDEOGRAPH + {0xCFD5, 0x9EB4}, //12683 #CJK UNIFIED IDEOGRAPH + {0xCFD6, 0x541B}, //12684 #CJK UNIFIED IDEOGRAPH + {0xCFD7, 0x7A98}, //12685 #CJK UNIFIED IDEOGRAPH + {0xCFD8, 0x7FA4}, //12686 #CJK UNIFIED IDEOGRAPH + {0xCFD9, 0x88D9}, //12687 #CJK UNIFIED IDEOGRAPH + {0xCFDA, 0x8ECD}, //12688 #CJK UNIFIED IDEOGRAPH + {0xCFDB, 0x90E1}, //12689 #CJK UNIFIED IDEOGRAPH + {0xCFDC, 0x5800}, //12690 #CJK UNIFIED IDEOGRAPH + {0xCFDD, 0x5C48}, //12691 #CJK UNIFIED IDEOGRAPH + {0xCFDE, 0x6398}, //12692 #CJK UNIFIED IDEOGRAPH + {0xCFDF, 0x7A9F}, //12693 #CJK UNIFIED IDEOGRAPH + {0xCFE0, 0x5BAE}, //12694 #CJK UNIFIED IDEOGRAPH + {0xCFE1, 0x5F13}, //12695 #CJK UNIFIED IDEOGRAPH + {0xCFE2, 0x7A79}, //12696 #CJK UNIFIED IDEOGRAPH + {0xCFE3, 0x7AAE}, //12697 #CJK UNIFIED IDEOGRAPH + {0xCFE4, 0x828E}, //12698 #CJK UNIFIED IDEOGRAPH + {0xCFE5, 0x8EAC}, //12699 #CJK UNIFIED IDEOGRAPH + {0xCFE6, 0x5026}, //12700 #CJK UNIFIED IDEOGRAPH + {0xCFE7, 0x5238}, //12701 #CJK UNIFIED IDEOGRAPH + {0xCFE8, 0x52F8}, //12702 #CJK UNIFIED IDEOGRAPH + {0xCFE9, 0x5377}, //12703 #CJK UNIFIED IDEOGRAPH + {0xCFEA, 0x5708}, //12704 #CJK UNIFIED IDEOGRAPH + {0xCFEB, 0x62F3}, //12705 #CJK UNIFIED IDEOGRAPH + {0xCFEC, 0x6372}, //12706 #CJK UNIFIED IDEOGRAPH + {0xCFED, 0x6B0A}, //12707 #CJK UNIFIED IDEOGRAPH + {0xCFEE, 0x6DC3}, //12708 #CJK UNIFIED IDEOGRAPH + {0xCFEF, 0x7737}, //12709 #CJK UNIFIED IDEOGRAPH + {0xCFF0, 0x53A5}, //12710 #CJK UNIFIED IDEOGRAPH + {0xCFF1, 0x7357}, //12711 #CJK UNIFIED IDEOGRAPH + {0xCFF2, 0x8568}, //12712 #CJK UNIFIED IDEOGRAPH + {0xCFF3, 0x8E76}, //12713 #CJK UNIFIED IDEOGRAPH + {0xCFF4, 0x95D5}, //12714 #CJK UNIFIED IDEOGRAPH + {0xCFF5, 0x673A}, //12715 #CJK UNIFIED IDEOGRAPH + {0xCFF6, 0x6AC3}, //12716 #CJK UNIFIED IDEOGRAPH + {0xCFF7, 0x6F70}, //12717 #CJK UNIFIED IDEOGRAPH + {0xCFF8, 0x8A6D}, //12718 #CJK UNIFIED IDEOGRAPH + {0xCFF9, 0x8ECC}, //12719 #CJK UNIFIED IDEOGRAPH + {0xCFFA, 0x994B}, //12720 #CJK UNIFIED IDEOGRAPH + {0xCFFB, 0xF906}, //12721 #CJK COMPATIBILITY IDEOGRAPH + {0xCFFC, 0x6677}, //12722 #CJK UNIFIED IDEOGRAPH + {0xCFFD, 0x6B78}, //12723 #CJK UNIFIED IDEOGRAPH + {0xCFFE, 0x8CB4}, //12724 #CJK UNIFIED IDEOGRAPH + {0xD0A1, 0x9B3C}, //12725 #CJK UNIFIED IDEOGRAPH + {0xD0A2, 0xF907}, //12726 #CJK COMPATIBILITY IDEOGRAPH + {0xD0A3, 0x53EB}, //12727 #CJK UNIFIED IDEOGRAPH + {0xD0A4, 0x572D}, //12728 #CJK UNIFIED IDEOGRAPH + {0xD0A5, 0x594E}, //12729 #CJK UNIFIED IDEOGRAPH + {0xD0A6, 0x63C6}, //12730 #CJK UNIFIED IDEOGRAPH + {0xD0A7, 0x69FB}, //12731 #CJK UNIFIED IDEOGRAPH + {0xD0A8, 0x73EA}, //12732 #CJK UNIFIED IDEOGRAPH + {0xD0A9, 0x7845}, //12733 #CJK UNIFIED IDEOGRAPH + {0xD0AA, 0x7ABA}, //12734 #CJK UNIFIED IDEOGRAPH + {0xD0AB, 0x7AC5}, //12735 #CJK UNIFIED IDEOGRAPH + {0xD0AC, 0x7CFE}, //12736 #CJK UNIFIED IDEOGRAPH + {0xD0AD, 0x8475}, //12737 #CJK UNIFIED IDEOGRAPH + {0xD0AE, 0x898F}, //12738 #CJK UNIFIED IDEOGRAPH + {0xD0AF, 0x8D73}, //12739 #CJK UNIFIED IDEOGRAPH + {0xD0B0, 0x9035}, //12740 #CJK UNIFIED IDEOGRAPH + {0xD0B1, 0x95A8}, //12741 #CJK UNIFIED IDEOGRAPH + {0xD0B2, 0x52FB}, //12742 #CJK UNIFIED IDEOGRAPH + {0xD0B3, 0x5747}, //12743 #CJK UNIFIED IDEOGRAPH + {0xD0B4, 0x7547}, //12744 #CJK UNIFIED IDEOGRAPH + {0xD0B5, 0x7B60}, //12745 #CJK UNIFIED IDEOGRAPH + {0xD0B6, 0x83CC}, //12746 #CJK UNIFIED IDEOGRAPH + {0xD0B7, 0x921E}, //12747 #CJK UNIFIED IDEOGRAPH + {0xD0B8, 0xF908}, //12748 #CJK COMPATIBILITY IDEOGRAPH + {0xD0B9, 0x6A58}, //12749 #CJK UNIFIED IDEOGRAPH + {0xD0BA, 0x514B}, //12750 #CJK UNIFIED IDEOGRAPH + {0xD0BB, 0x524B}, //12751 #CJK UNIFIED IDEOGRAPH + {0xD0BC, 0x5287}, //12752 #CJK UNIFIED IDEOGRAPH + {0xD0BD, 0x621F}, //12753 #CJK UNIFIED IDEOGRAPH + {0xD0BE, 0x68D8}, //12754 #CJK UNIFIED IDEOGRAPH + {0xD0BF, 0x6975}, //12755 #CJK UNIFIED IDEOGRAPH + {0xD0C0, 0x9699}, //12756 #CJK UNIFIED IDEOGRAPH + {0xD0C1, 0x50C5}, //12757 #CJK UNIFIED IDEOGRAPH + {0xD0C2, 0x52A4}, //12758 #CJK UNIFIED IDEOGRAPH + {0xD0C3, 0x52E4}, //12759 #CJK UNIFIED IDEOGRAPH + {0xD0C4, 0x61C3}, //12760 #CJK UNIFIED IDEOGRAPH + {0xD0C5, 0x65A4}, //12761 #CJK UNIFIED IDEOGRAPH + {0xD0C6, 0x6839}, //12762 #CJK UNIFIED IDEOGRAPH + {0xD0C7, 0x69FF}, //12763 #CJK UNIFIED IDEOGRAPH + {0xD0C8, 0x747E}, //12764 #CJK UNIFIED IDEOGRAPH + {0xD0C9, 0x7B4B}, //12765 #CJK UNIFIED IDEOGRAPH + {0xD0CA, 0x82B9}, //12766 #CJK UNIFIED IDEOGRAPH + {0xD0CB, 0x83EB}, //12767 #CJK UNIFIED IDEOGRAPH + {0xD0CC, 0x89B2}, //12768 #CJK UNIFIED IDEOGRAPH + {0xD0CD, 0x8B39}, //12769 #CJK UNIFIED IDEOGRAPH + {0xD0CE, 0x8FD1}, //12770 #CJK UNIFIED IDEOGRAPH + {0xD0CF, 0x9949}, //12771 #CJK UNIFIED IDEOGRAPH + {0xD0D0, 0xF909}, //12772 #CJK COMPATIBILITY IDEOGRAPH + {0xD0D1, 0x4ECA}, //12773 #CJK UNIFIED IDEOGRAPH + {0xD0D2, 0x5997}, //12774 #CJK UNIFIED IDEOGRAPH + {0xD0D3, 0x64D2}, //12775 #CJK UNIFIED IDEOGRAPH + {0xD0D4, 0x6611}, //12776 #CJK UNIFIED IDEOGRAPH + {0xD0D5, 0x6A8E}, //12777 #CJK UNIFIED IDEOGRAPH + {0xD0D6, 0x7434}, //12778 #CJK UNIFIED IDEOGRAPH + {0xD0D7, 0x7981}, //12779 #CJK UNIFIED IDEOGRAPH + {0xD0D8, 0x79BD}, //12780 #CJK UNIFIED IDEOGRAPH + {0xD0D9, 0x82A9}, //12781 #CJK UNIFIED IDEOGRAPH + {0xD0DA, 0x887E}, //12782 #CJK UNIFIED IDEOGRAPH + {0xD0DB, 0x887F}, //12783 #CJK UNIFIED IDEOGRAPH + {0xD0DC, 0x895F}, //12784 #CJK UNIFIED IDEOGRAPH + {0xD0DD, 0xF90A}, //12785 #CJK COMPATIBILITY IDEOGRAPH + {0xD0DE, 0x9326}, //12786 #CJK UNIFIED IDEOGRAPH + {0xD0DF, 0x4F0B}, //12787 #CJK UNIFIED IDEOGRAPH + {0xD0E0, 0x53CA}, //12788 #CJK UNIFIED IDEOGRAPH + {0xD0E1, 0x6025}, //12789 #CJK UNIFIED IDEOGRAPH + {0xD0E2, 0x6271}, //12790 #CJK UNIFIED IDEOGRAPH + {0xD0E3, 0x6C72}, //12791 #CJK UNIFIED IDEOGRAPH + {0xD0E4, 0x7D1A}, //12792 #CJK UNIFIED IDEOGRAPH + {0xD0E5, 0x7D66}, //12793 #CJK UNIFIED IDEOGRAPH + {0xD0E6, 0x4E98}, //12794 #CJK UNIFIED IDEOGRAPH + {0xD0E7, 0x5162}, //12795 #CJK UNIFIED IDEOGRAPH + {0xD0E8, 0x77DC}, //12796 #CJK UNIFIED IDEOGRAPH + {0xD0E9, 0x80AF}, //12797 #CJK UNIFIED IDEOGRAPH + {0xD0EA, 0x4F01}, //12798 #CJK UNIFIED IDEOGRAPH + {0xD0EB, 0x4F0E}, //12799 #CJK UNIFIED IDEOGRAPH + {0xD0EC, 0x5176}, //12800 #CJK UNIFIED IDEOGRAPH + {0xD0ED, 0x5180}, //12801 #CJK UNIFIED IDEOGRAPH + {0xD0EE, 0x55DC}, //12802 #CJK UNIFIED IDEOGRAPH + {0xD0EF, 0x5668}, //12803 #CJK UNIFIED IDEOGRAPH + {0xD0F0, 0x573B}, //12804 #CJK UNIFIED IDEOGRAPH + {0xD0F1, 0x57FA}, //12805 #CJK UNIFIED IDEOGRAPH + {0xD0F2, 0x57FC}, //12806 #CJK UNIFIED IDEOGRAPH + {0xD0F3, 0x5914}, //12807 #CJK UNIFIED IDEOGRAPH + {0xD0F4, 0x5947}, //12808 #CJK UNIFIED IDEOGRAPH + {0xD0F5, 0x5993}, //12809 #CJK UNIFIED IDEOGRAPH + {0xD0F6, 0x5BC4}, //12810 #CJK UNIFIED IDEOGRAPH + {0xD0F7, 0x5C90}, //12811 #CJK UNIFIED IDEOGRAPH + {0xD0F8, 0x5D0E}, //12812 #CJK UNIFIED IDEOGRAPH + {0xD0F9, 0x5DF1}, //12813 #CJK UNIFIED IDEOGRAPH + {0xD0FA, 0x5E7E}, //12814 #CJK UNIFIED IDEOGRAPH + {0xD0FB, 0x5FCC}, //12815 #CJK UNIFIED IDEOGRAPH + {0xD0FC, 0x6280}, //12816 #CJK UNIFIED IDEOGRAPH + {0xD0FD, 0x65D7}, //12817 #CJK UNIFIED IDEOGRAPH + {0xD0FE, 0x65E3}, //12818 #CJK UNIFIED IDEOGRAPH + {0xD1A1, 0x671E}, //12819 #CJK UNIFIED IDEOGRAPH + {0xD1A2, 0x671F}, //12820 #CJK UNIFIED IDEOGRAPH + {0xD1A3, 0x675E}, //12821 #CJK UNIFIED IDEOGRAPH + {0xD1A4, 0x68CB}, //12822 #CJK UNIFIED IDEOGRAPH + {0xD1A5, 0x68C4}, //12823 #CJK UNIFIED IDEOGRAPH + {0xD1A6, 0x6A5F}, //12824 #CJK UNIFIED IDEOGRAPH + {0xD1A7, 0x6B3A}, //12825 #CJK UNIFIED IDEOGRAPH + {0xD1A8, 0x6C23}, //12826 #CJK UNIFIED IDEOGRAPH + {0xD1A9, 0x6C7D}, //12827 #CJK UNIFIED IDEOGRAPH + {0xD1AA, 0x6C82}, //12828 #CJK UNIFIED IDEOGRAPH + {0xD1AB, 0x6DC7}, //12829 #CJK UNIFIED IDEOGRAPH + {0xD1AC, 0x7398}, //12830 #CJK UNIFIED IDEOGRAPH + {0xD1AD, 0x7426}, //12831 #CJK UNIFIED IDEOGRAPH + {0xD1AE, 0x742A}, //12832 #CJK UNIFIED IDEOGRAPH + {0xD1AF, 0x7482}, //12833 #CJK UNIFIED IDEOGRAPH + {0xD1B0, 0x74A3}, //12834 #CJK UNIFIED IDEOGRAPH + {0xD1B1, 0x7578}, //12835 #CJK UNIFIED IDEOGRAPH + {0xD1B2, 0x757F}, //12836 #CJK UNIFIED IDEOGRAPH + {0xD1B3, 0x7881}, //12837 #CJK UNIFIED IDEOGRAPH + {0xD1B4, 0x78EF}, //12838 #CJK UNIFIED IDEOGRAPH + {0xD1B5, 0x7941}, //12839 #CJK UNIFIED IDEOGRAPH + {0xD1B6, 0x7947}, //12840 #CJK UNIFIED IDEOGRAPH + {0xD1B7, 0x7948}, //12841 #CJK UNIFIED IDEOGRAPH + {0xD1B8, 0x797A}, //12842 #CJK UNIFIED IDEOGRAPH + {0xD1B9, 0x7B95}, //12843 #CJK UNIFIED IDEOGRAPH + {0xD1BA, 0x7D00}, //12844 #CJK UNIFIED IDEOGRAPH + {0xD1BB, 0x7DBA}, //12845 #CJK UNIFIED IDEOGRAPH + {0xD1BC, 0x7F88}, //12846 #CJK UNIFIED IDEOGRAPH + {0xD1BD, 0x8006}, //12847 #CJK UNIFIED IDEOGRAPH + {0xD1BE, 0x802D}, //12848 #CJK UNIFIED IDEOGRAPH + {0xD1BF, 0x808C}, //12849 #CJK UNIFIED IDEOGRAPH + {0xD1C0, 0x8A18}, //12850 #CJK UNIFIED IDEOGRAPH + {0xD1C1, 0x8B4F}, //12851 #CJK UNIFIED IDEOGRAPH + {0xD1C2, 0x8C48}, //12852 #CJK UNIFIED IDEOGRAPH + {0xD1C3, 0x8D77}, //12853 #CJK UNIFIED IDEOGRAPH + {0xD1C4, 0x9321}, //12854 #CJK UNIFIED IDEOGRAPH + {0xD1C5, 0x9324}, //12855 #CJK UNIFIED IDEOGRAPH + {0xD1C6, 0x98E2}, //12856 #CJK UNIFIED IDEOGRAPH + {0xD1C7, 0x9951}, //12857 #CJK UNIFIED IDEOGRAPH + {0xD1C8, 0x9A0E}, //12858 #CJK UNIFIED IDEOGRAPH + {0xD1C9, 0x9A0F}, //12859 #CJK UNIFIED IDEOGRAPH + {0xD1CA, 0x9A65}, //12860 #CJK UNIFIED IDEOGRAPH + {0xD1CB, 0x9E92}, //12861 #CJK UNIFIED IDEOGRAPH + {0xD1CC, 0x7DCA}, //12862 #CJK UNIFIED IDEOGRAPH + {0xD1CD, 0x4F76}, //12863 #CJK UNIFIED IDEOGRAPH + {0xD1CE, 0x5409}, //12864 #CJK UNIFIED IDEOGRAPH + {0xD1CF, 0x62EE}, //12865 #CJK UNIFIED IDEOGRAPH + {0xD1D0, 0x6854}, //12866 #CJK UNIFIED IDEOGRAPH + {0xD1D1, 0x91D1}, //12867 #CJK UNIFIED IDEOGRAPH + {0xD1D2, 0x55AB}, //12868 #CJK UNIFIED IDEOGRAPH + {0xD1D3, 0x513A}, //12869 #CJK UNIFIED IDEOGRAPH + {0xD1D4, 0xF90B}, //12870 #CJK COMPATIBILITY IDEOGRAPH + {0xD1D5, 0xF90C}, //12871 #CJK COMPATIBILITY IDEOGRAPH + {0xD1D6, 0x5A1C}, //12872 #CJK UNIFIED IDEOGRAPH + {0xD1D7, 0x61E6}, //12873 #CJK UNIFIED IDEOGRAPH + {0xD1D8, 0xF90D}, //12874 #CJK COMPATIBILITY IDEOGRAPH + {0xD1D9, 0x62CF}, //12875 #CJK UNIFIED IDEOGRAPH + {0xD1DA, 0x62FF}, //12876 #CJK UNIFIED IDEOGRAPH + {0xD1DB, 0xF90E}, //12877 #CJK COMPATIBILITY IDEOGRAPH + {0xD1DC, 0xF90F}, //12878 #CJK COMPATIBILITY IDEOGRAPH + {0xD1DD, 0xF910}, //12879 #CJK COMPATIBILITY IDEOGRAPH + {0xD1DE, 0xF911}, //12880 #CJK COMPATIBILITY IDEOGRAPH + {0xD1DF, 0xF912}, //12881 #CJK COMPATIBILITY IDEOGRAPH + {0xD1E0, 0xF913}, //12882 #CJK COMPATIBILITY IDEOGRAPH + {0xD1E1, 0x90A3}, //12883 #CJK UNIFIED IDEOGRAPH + {0xD1E2, 0xF914}, //12884 #CJK COMPATIBILITY IDEOGRAPH + {0xD1E3, 0xF915}, //12885 #CJK COMPATIBILITY IDEOGRAPH + {0xD1E4, 0xF916}, //12886 #CJK COMPATIBILITY IDEOGRAPH + {0xD1E5, 0xF917}, //12887 #CJK COMPATIBILITY IDEOGRAPH + {0xD1E6, 0xF918}, //12888 #CJK COMPATIBILITY IDEOGRAPH + {0xD1E7, 0x8AFE}, //12889 #CJK UNIFIED IDEOGRAPH + {0xD1E8, 0xF919}, //12890 #CJK COMPATIBILITY IDEOGRAPH + {0xD1E9, 0xF91A}, //12891 #CJK COMPATIBILITY IDEOGRAPH + {0xD1EA, 0xF91B}, //12892 #CJK COMPATIBILITY IDEOGRAPH + {0xD1EB, 0xF91C}, //12893 #CJK COMPATIBILITY IDEOGRAPH + {0xD1EC, 0x6696}, //12894 #CJK UNIFIED IDEOGRAPH + {0xD1ED, 0xF91D}, //12895 #CJK COMPATIBILITY IDEOGRAPH + {0xD1EE, 0x7156}, //12896 #CJK UNIFIED IDEOGRAPH + {0xD1EF, 0xF91E}, //12897 #CJK COMPATIBILITY IDEOGRAPH + {0xD1F0, 0xF91F}, //12898 #CJK COMPATIBILITY IDEOGRAPH + {0xD1F1, 0x96E3}, //12899 #CJK UNIFIED IDEOGRAPH + {0xD1F2, 0xF920}, //12900 #CJK COMPATIBILITY IDEOGRAPH + {0xD1F3, 0x634F}, //12901 #CJK UNIFIED IDEOGRAPH + {0xD1F4, 0x637A}, //12902 #CJK UNIFIED IDEOGRAPH + {0xD1F5, 0x5357}, //12903 #CJK UNIFIED IDEOGRAPH + {0xD1F6, 0xF921}, //12904 #CJK COMPATIBILITY IDEOGRAPH + {0xD1F7, 0x678F}, //12905 #CJK UNIFIED IDEOGRAPH + {0xD1F8, 0x6960}, //12906 #CJK UNIFIED IDEOGRAPH + {0xD1F9, 0x6E73}, //12907 #CJK UNIFIED IDEOGRAPH + {0xD1FA, 0xF922}, //12908 #CJK COMPATIBILITY IDEOGRAPH + {0xD1FB, 0x7537}, //12909 #CJK UNIFIED IDEOGRAPH + {0xD1FC, 0xF923}, //12910 #CJK COMPATIBILITY IDEOGRAPH + {0xD1FD, 0xF924}, //12911 #CJK COMPATIBILITY IDEOGRAPH + {0xD1FE, 0xF925}, //12912 #CJK COMPATIBILITY IDEOGRAPH + {0xD2A1, 0x7D0D}, //12913 #CJK UNIFIED IDEOGRAPH + {0xD2A2, 0xF926}, //12914 #CJK COMPATIBILITY IDEOGRAPH + {0xD2A3, 0xF927}, //12915 #CJK COMPATIBILITY IDEOGRAPH + {0xD2A4, 0x8872}, //12916 #CJK UNIFIED IDEOGRAPH + {0xD2A5, 0x56CA}, //12917 #CJK UNIFIED IDEOGRAPH + {0xD2A6, 0x5A18}, //12918 #CJK UNIFIED IDEOGRAPH + {0xD2A7, 0xF928}, //12919 #CJK COMPATIBILITY IDEOGRAPH + {0xD2A8, 0xF929}, //12920 #CJK COMPATIBILITY IDEOGRAPH + {0xD2A9, 0xF92A}, //12921 #CJK COMPATIBILITY IDEOGRAPH + {0xD2AA, 0xF92B}, //12922 #CJK COMPATIBILITY IDEOGRAPH + {0xD2AB, 0xF92C}, //12923 #CJK COMPATIBILITY IDEOGRAPH + {0xD2AC, 0x4E43}, //12924 #CJK UNIFIED IDEOGRAPH + {0xD2AD, 0xF92D}, //12925 #CJK COMPATIBILITY IDEOGRAPH + {0xD2AE, 0x5167}, //12926 #CJK UNIFIED IDEOGRAPH + {0xD2AF, 0x5948}, //12927 #CJK UNIFIED IDEOGRAPH + {0xD2B0, 0x67F0}, //12928 #CJK UNIFIED IDEOGRAPH + {0xD2B1, 0x8010}, //12929 #CJK UNIFIED IDEOGRAPH + {0xD2B2, 0xF92E}, //12930 #CJK COMPATIBILITY IDEOGRAPH + {0xD2B3, 0x5973}, //12931 #CJK UNIFIED IDEOGRAPH + {0xD2B4, 0x5E74}, //12932 #CJK UNIFIED IDEOGRAPH + {0xD2B5, 0x649A}, //12933 #CJK UNIFIED IDEOGRAPH + {0xD2B6, 0x79CA}, //12934 #CJK UNIFIED IDEOGRAPH + {0xD2B7, 0x5FF5}, //12935 #CJK UNIFIED IDEOGRAPH + {0xD2B8, 0x606C}, //12936 #CJK UNIFIED IDEOGRAPH + {0xD2B9, 0x62C8}, //12937 #CJK UNIFIED IDEOGRAPH + {0xD2BA, 0x637B}, //12938 #CJK UNIFIED IDEOGRAPH + {0xD2BB, 0x5BE7}, //12939 #CJK UNIFIED IDEOGRAPH + {0xD2BC, 0x5BD7}, //12940 #CJK UNIFIED IDEOGRAPH + {0xD2BD, 0x52AA}, //12941 #CJK UNIFIED IDEOGRAPH + {0xD2BE, 0xF92F}, //12942 #CJK COMPATIBILITY IDEOGRAPH + {0xD2BF, 0x5974}, //12943 #CJK UNIFIED IDEOGRAPH + {0xD2C0, 0x5F29}, //12944 #CJK UNIFIED IDEOGRAPH + {0xD2C1, 0x6012}, //12945 #CJK UNIFIED IDEOGRAPH + {0xD2C2, 0xF930}, //12946 #CJK COMPATIBILITY IDEOGRAPH + {0xD2C3, 0xF931}, //12947 #CJK COMPATIBILITY IDEOGRAPH + {0xD2C4, 0xF932}, //12948 #CJK COMPATIBILITY IDEOGRAPH + {0xD2C5, 0x7459}, //12949 #CJK UNIFIED IDEOGRAPH + {0xD2C6, 0xF933}, //12950 #CJK COMPATIBILITY IDEOGRAPH + {0xD2C7, 0xF934}, //12951 #CJK COMPATIBILITY IDEOGRAPH + {0xD2C8, 0xF935}, //12952 #CJK COMPATIBILITY IDEOGRAPH + {0xD2C9, 0xF936}, //12953 #CJK COMPATIBILITY IDEOGRAPH + {0xD2CA, 0xF937}, //12954 #CJK COMPATIBILITY IDEOGRAPH + {0xD2CB, 0xF938}, //12955 #CJK COMPATIBILITY IDEOGRAPH + {0xD2CC, 0x99D1}, //12956 #CJK UNIFIED IDEOGRAPH + {0xD2CD, 0xF939}, //12957 #CJK COMPATIBILITY IDEOGRAPH + {0xD2CE, 0xF93A}, //12958 #CJK COMPATIBILITY IDEOGRAPH + {0xD2CF, 0xF93B}, //12959 #CJK COMPATIBILITY IDEOGRAPH + {0xD2D0, 0xF93C}, //12960 #CJK COMPATIBILITY IDEOGRAPH + {0xD2D1, 0xF93D}, //12961 #CJK COMPATIBILITY IDEOGRAPH + {0xD2D2, 0xF93E}, //12962 #CJK COMPATIBILITY IDEOGRAPH + {0xD2D3, 0xF93F}, //12963 #CJK COMPATIBILITY IDEOGRAPH + {0xD2D4, 0xF940}, //12964 #CJK COMPATIBILITY IDEOGRAPH + {0xD2D5, 0xF941}, //12965 #CJK COMPATIBILITY IDEOGRAPH + {0xD2D6, 0xF942}, //12966 #CJK COMPATIBILITY IDEOGRAPH + {0xD2D7, 0xF943}, //12967 #CJK COMPATIBILITY IDEOGRAPH + {0xD2D8, 0x6FC3}, //12968 #CJK UNIFIED IDEOGRAPH + {0xD2D9, 0xF944}, //12969 #CJK COMPATIBILITY IDEOGRAPH + {0xD2DA, 0xF945}, //12970 #CJK COMPATIBILITY IDEOGRAPH + {0xD2DB, 0x81BF}, //12971 #CJK UNIFIED IDEOGRAPH + {0xD2DC, 0x8FB2}, //12972 #CJK UNIFIED IDEOGRAPH + {0xD2DD, 0x60F1}, //12973 #CJK UNIFIED IDEOGRAPH + {0xD2DE, 0xF946}, //12974 #CJK COMPATIBILITY IDEOGRAPH + {0xD2DF, 0xF947}, //12975 #CJK COMPATIBILITY IDEOGRAPH + {0xD2E0, 0x8166}, //12976 #CJK UNIFIED IDEOGRAPH + {0xD2E1, 0xF948}, //12977 #CJK COMPATIBILITY IDEOGRAPH + {0xD2E2, 0xF949}, //12978 #CJK COMPATIBILITY IDEOGRAPH + {0xD2E3, 0x5C3F}, //12979 #CJK UNIFIED IDEOGRAPH + {0xD2E4, 0xF94A}, //12980 #CJK COMPATIBILITY IDEOGRAPH + {0xD2E5, 0xF94B}, //12981 #CJK COMPATIBILITY IDEOGRAPH + {0xD2E6, 0xF94C}, //12982 #CJK COMPATIBILITY IDEOGRAPH + {0xD2E7, 0xF94D}, //12983 #CJK COMPATIBILITY IDEOGRAPH + {0xD2E8, 0xF94E}, //12984 #CJK COMPATIBILITY IDEOGRAPH + {0xD2E9, 0xF94F}, //12985 #CJK COMPATIBILITY IDEOGRAPH + {0xD2EA, 0xF950}, //12986 #CJK COMPATIBILITY IDEOGRAPH + {0xD2EB, 0xF951}, //12987 #CJK COMPATIBILITY IDEOGRAPH + {0xD2EC, 0x5AE9}, //12988 #CJK UNIFIED IDEOGRAPH + {0xD2ED, 0x8A25}, //12989 #CJK UNIFIED IDEOGRAPH + {0xD2EE, 0x677B}, //12990 #CJK UNIFIED IDEOGRAPH + {0xD2EF, 0x7D10}, //12991 #CJK UNIFIED IDEOGRAPH + {0xD2F0, 0xF952}, //12992 #CJK COMPATIBILITY IDEOGRAPH + {0xD2F1, 0xF953}, //12993 #CJK COMPATIBILITY IDEOGRAPH + {0xD2F2, 0xF954}, //12994 #CJK COMPATIBILITY IDEOGRAPH + {0xD2F3, 0xF955}, //12995 #CJK COMPATIBILITY IDEOGRAPH + {0xD2F4, 0xF956}, //12996 #CJK COMPATIBILITY IDEOGRAPH + {0xD2F5, 0xF957}, //12997 #CJK COMPATIBILITY IDEOGRAPH + {0xD2F6, 0x80FD}, //12998 #CJK UNIFIED IDEOGRAPH + {0xD2F7, 0xF958}, //12999 #CJK COMPATIBILITY IDEOGRAPH + {0xD2F8, 0xF959}, //13000 #CJK COMPATIBILITY IDEOGRAPH + {0xD2F9, 0x5C3C}, //13001 #CJK UNIFIED IDEOGRAPH + {0xD2FA, 0x6CE5}, //13002 #CJK UNIFIED IDEOGRAPH + {0xD2FB, 0x533F}, //13003 #CJK UNIFIED IDEOGRAPH + {0xD2FC, 0x6EBA}, //13004 #CJK UNIFIED IDEOGRAPH + {0xD2FD, 0x591A}, //13005 #CJK UNIFIED IDEOGRAPH + {0xD2FE, 0x8336}, //13006 #CJK UNIFIED IDEOGRAPH + {0xD3A1, 0x4E39}, //13007 #CJK UNIFIED IDEOGRAPH + {0xD3A2, 0x4EB6}, //13008 #CJK UNIFIED IDEOGRAPH + {0xD3A3, 0x4F46}, //13009 #CJK UNIFIED IDEOGRAPH + {0xD3A4, 0x55AE}, //13010 #CJK UNIFIED IDEOGRAPH + {0xD3A5, 0x5718}, //13011 #CJK UNIFIED IDEOGRAPH + {0xD3A6, 0x58C7}, //13012 #CJK UNIFIED IDEOGRAPH + {0xD3A7, 0x5F56}, //13013 #CJK UNIFIED IDEOGRAPH + {0xD3A8, 0x65B7}, //13014 #CJK UNIFIED IDEOGRAPH + {0xD3A9, 0x65E6}, //13015 #CJK UNIFIED IDEOGRAPH + {0xD3AA, 0x6A80}, //13016 #CJK UNIFIED IDEOGRAPH + {0xD3AB, 0x6BB5}, //13017 #CJK UNIFIED IDEOGRAPH + {0xD3AC, 0x6E4D}, //13018 #CJK UNIFIED IDEOGRAPH + {0xD3AD, 0x77ED}, //13019 #CJK UNIFIED IDEOGRAPH + {0xD3AE, 0x7AEF}, //13020 #CJK UNIFIED IDEOGRAPH + {0xD3AF, 0x7C1E}, //13021 #CJK UNIFIED IDEOGRAPH + {0xD3B0, 0x7DDE}, //13022 #CJK UNIFIED IDEOGRAPH + {0xD3B1, 0x86CB}, //13023 #CJK UNIFIED IDEOGRAPH + {0xD3B2, 0x8892}, //13024 #CJK UNIFIED IDEOGRAPH + {0xD3B3, 0x9132}, //13025 #CJK UNIFIED IDEOGRAPH + {0xD3B4, 0x935B}, //13026 #CJK UNIFIED IDEOGRAPH + {0xD3B5, 0x64BB}, //13027 #CJK UNIFIED IDEOGRAPH + {0xD3B6, 0x6FBE}, //13028 #CJK UNIFIED IDEOGRAPH + {0xD3B7, 0x737A}, //13029 #CJK UNIFIED IDEOGRAPH + {0xD3B8, 0x75B8}, //13030 #CJK UNIFIED IDEOGRAPH + {0xD3B9, 0x9054}, //13031 #CJK UNIFIED IDEOGRAPH + {0xD3BA, 0x5556}, //13032 #CJK UNIFIED IDEOGRAPH + {0xD3BB, 0x574D}, //13033 #CJK UNIFIED IDEOGRAPH + {0xD3BC, 0x61BA}, //13034 #CJK UNIFIED IDEOGRAPH + {0xD3BD, 0x64D4}, //13035 #CJK UNIFIED IDEOGRAPH + {0xD3BE, 0x66C7}, //13036 #CJK UNIFIED IDEOGRAPH + {0xD3BF, 0x6DE1}, //13037 #CJK UNIFIED IDEOGRAPH + {0xD3C0, 0x6E5B}, //13038 #CJK UNIFIED IDEOGRAPH + {0xD3C1, 0x6F6D}, //13039 #CJK UNIFIED IDEOGRAPH + {0xD3C2, 0x6FB9}, //13040 #CJK UNIFIED IDEOGRAPH + {0xD3C3, 0x75F0}, //13041 #CJK UNIFIED IDEOGRAPH + {0xD3C4, 0x8043}, //13042 #CJK UNIFIED IDEOGRAPH + {0xD3C5, 0x81BD}, //13043 #CJK UNIFIED IDEOGRAPH + {0xD3C6, 0x8541}, //13044 #CJK UNIFIED IDEOGRAPH + {0xD3C7, 0x8983}, //13045 #CJK UNIFIED IDEOGRAPH + {0xD3C8, 0x8AC7}, //13046 #CJK UNIFIED IDEOGRAPH + {0xD3C9, 0x8B5A}, //13047 #CJK UNIFIED IDEOGRAPH + {0xD3CA, 0x931F}, //13048 #CJK UNIFIED IDEOGRAPH + {0xD3CB, 0x6C93}, //13049 #CJK UNIFIED IDEOGRAPH + {0xD3CC, 0x7553}, //13050 #CJK UNIFIED IDEOGRAPH + {0xD3CD, 0x7B54}, //13051 #CJK UNIFIED IDEOGRAPH + {0xD3CE, 0x8E0F}, //13052 #CJK UNIFIED IDEOGRAPH + {0xD3CF, 0x905D}, //13053 #CJK UNIFIED IDEOGRAPH + {0xD3D0, 0x5510}, //13054 #CJK UNIFIED IDEOGRAPH + {0xD3D1, 0x5802}, //13055 #CJK UNIFIED IDEOGRAPH + {0xD3D2, 0x5858}, //13056 #CJK UNIFIED IDEOGRAPH + {0xD3D3, 0x5E62}, //13057 #CJK UNIFIED IDEOGRAPH + {0xD3D4, 0x6207}, //13058 #CJK UNIFIED IDEOGRAPH + {0xD3D5, 0x649E}, //13059 #CJK UNIFIED IDEOGRAPH + {0xD3D6, 0x68E0}, //13060 #CJK UNIFIED IDEOGRAPH + {0xD3D7, 0x7576}, //13061 #CJK UNIFIED IDEOGRAPH + {0xD3D8, 0x7CD6}, //13062 #CJK UNIFIED IDEOGRAPH + {0xD3D9, 0x87B3}, //13063 #CJK UNIFIED IDEOGRAPH + {0xD3DA, 0x9EE8}, //13064 #CJK UNIFIED IDEOGRAPH + {0xD3DB, 0x4EE3}, //13065 #CJK UNIFIED IDEOGRAPH + {0xD3DC, 0x5788}, //13066 #CJK UNIFIED IDEOGRAPH + {0xD3DD, 0x576E}, //13067 #CJK UNIFIED IDEOGRAPH + {0xD3DE, 0x5927}, //13068 #CJK UNIFIED IDEOGRAPH + {0xD3DF, 0x5C0D}, //13069 #CJK UNIFIED IDEOGRAPH + {0xD3E0, 0x5CB1}, //13070 #CJK UNIFIED IDEOGRAPH + {0xD3E1, 0x5E36}, //13071 #CJK UNIFIED IDEOGRAPH + {0xD3E2, 0x5F85}, //13072 #CJK UNIFIED IDEOGRAPH + {0xD3E3, 0x6234}, //13073 #CJK UNIFIED IDEOGRAPH + {0xD3E4, 0x64E1}, //13074 #CJK UNIFIED IDEOGRAPH + {0xD3E5, 0x73B3}, //13075 #CJK UNIFIED IDEOGRAPH + {0xD3E6, 0x81FA}, //13076 #CJK UNIFIED IDEOGRAPH + {0xD3E7, 0x888B}, //13077 #CJK UNIFIED IDEOGRAPH + {0xD3E8, 0x8CB8}, //13078 #CJK UNIFIED IDEOGRAPH + {0xD3E9, 0x968A}, //13079 #CJK UNIFIED IDEOGRAPH + {0xD3EA, 0x9EDB}, //13080 #CJK UNIFIED IDEOGRAPH + {0xD3EB, 0x5B85}, //13081 #CJK UNIFIED IDEOGRAPH + {0xD3EC, 0x5FB7}, //13082 #CJK UNIFIED IDEOGRAPH + {0xD3ED, 0x60B3}, //13083 #CJK UNIFIED IDEOGRAPH + {0xD3EE, 0x5012}, //13084 #CJK UNIFIED IDEOGRAPH + {0xD3EF, 0x5200}, //13085 #CJK UNIFIED IDEOGRAPH + {0xD3F0, 0x5230}, //13086 #CJK UNIFIED IDEOGRAPH + {0xD3F1, 0x5716}, //13087 #CJK UNIFIED IDEOGRAPH + {0xD3F2, 0x5835}, //13088 #CJK UNIFIED IDEOGRAPH + {0xD3F3, 0x5857}, //13089 #CJK UNIFIED IDEOGRAPH + {0xD3F4, 0x5C0E}, //13090 #CJK UNIFIED IDEOGRAPH + {0xD3F5, 0x5C60}, //13091 #CJK UNIFIED IDEOGRAPH + {0xD3F6, 0x5CF6}, //13092 #CJK UNIFIED IDEOGRAPH + {0xD3F7, 0x5D8B}, //13093 #CJK UNIFIED IDEOGRAPH + {0xD3F8, 0x5EA6}, //13094 #CJK UNIFIED IDEOGRAPH + {0xD3F9, 0x5F92}, //13095 #CJK UNIFIED IDEOGRAPH + {0xD3FA, 0x60BC}, //13096 #CJK UNIFIED IDEOGRAPH + {0xD3FB, 0x6311}, //13097 #CJK UNIFIED IDEOGRAPH + {0xD3FC, 0x6389}, //13098 #CJK UNIFIED IDEOGRAPH + {0xD3FD, 0x6417}, //13099 #CJK UNIFIED IDEOGRAPH + {0xD3FE, 0x6843}, //13100 #CJK UNIFIED IDEOGRAPH + {0xD4A1, 0x68F9}, //13101 #CJK UNIFIED IDEOGRAPH + {0xD4A2, 0x6AC2}, //13102 #CJK UNIFIED IDEOGRAPH + {0xD4A3, 0x6DD8}, //13103 #CJK UNIFIED IDEOGRAPH + {0xD4A4, 0x6E21}, //13104 #CJK UNIFIED IDEOGRAPH + {0xD4A5, 0x6ED4}, //13105 #CJK UNIFIED IDEOGRAPH + {0xD4A6, 0x6FE4}, //13106 #CJK UNIFIED IDEOGRAPH + {0xD4A7, 0x71FE}, //13107 #CJK UNIFIED IDEOGRAPH + {0xD4A8, 0x76DC}, //13108 #CJK UNIFIED IDEOGRAPH + {0xD4A9, 0x7779}, //13109 #CJK UNIFIED IDEOGRAPH + {0xD4AA, 0x79B1}, //13110 #CJK UNIFIED IDEOGRAPH + {0xD4AB, 0x7A3B}, //13111 #CJK UNIFIED IDEOGRAPH + {0xD4AC, 0x8404}, //13112 #CJK UNIFIED IDEOGRAPH + {0xD4AD, 0x89A9}, //13113 #CJK UNIFIED IDEOGRAPH + {0xD4AE, 0x8CED}, //13114 #CJK UNIFIED IDEOGRAPH + {0xD4AF, 0x8DF3}, //13115 #CJK UNIFIED IDEOGRAPH + {0xD4B0, 0x8E48}, //13116 #CJK UNIFIED IDEOGRAPH + {0xD4B1, 0x9003}, //13117 #CJK UNIFIED IDEOGRAPH + {0xD4B2, 0x9014}, //13118 #CJK UNIFIED IDEOGRAPH + {0xD4B3, 0x9053}, //13119 #CJK UNIFIED IDEOGRAPH + {0xD4B4, 0x90FD}, //13120 #CJK UNIFIED IDEOGRAPH + {0xD4B5, 0x934D}, //13121 #CJK UNIFIED IDEOGRAPH + {0xD4B6, 0x9676}, //13122 #CJK UNIFIED IDEOGRAPH + {0xD4B7, 0x97DC}, //13123 #CJK UNIFIED IDEOGRAPH + {0xD4B8, 0x6BD2}, //13124 #CJK UNIFIED IDEOGRAPH + {0xD4B9, 0x7006}, //13125 #CJK UNIFIED IDEOGRAPH + {0xD4BA, 0x7258}, //13126 #CJK UNIFIED IDEOGRAPH + {0xD4BB, 0x72A2}, //13127 #CJK UNIFIED IDEOGRAPH + {0xD4BC, 0x7368}, //13128 #CJK UNIFIED IDEOGRAPH + {0xD4BD, 0x7763}, //13129 #CJK UNIFIED IDEOGRAPH + {0xD4BE, 0x79BF}, //13130 #CJK UNIFIED IDEOGRAPH + {0xD4BF, 0x7BE4}, //13131 #CJK UNIFIED IDEOGRAPH + {0xD4C0, 0x7E9B}, //13132 #CJK UNIFIED IDEOGRAPH + {0xD4C1, 0x8B80}, //13133 #CJK UNIFIED IDEOGRAPH + {0xD4C2, 0x58A9}, //13134 #CJK UNIFIED IDEOGRAPH + {0xD4C3, 0x60C7}, //13135 #CJK UNIFIED IDEOGRAPH + {0xD4C4, 0x6566}, //13136 #CJK UNIFIED IDEOGRAPH + {0xD4C5, 0x65FD}, //13137 #CJK UNIFIED IDEOGRAPH + {0xD4C6, 0x66BE}, //13138 #CJK UNIFIED IDEOGRAPH + {0xD4C7, 0x6C8C}, //13139 #CJK UNIFIED IDEOGRAPH + {0xD4C8, 0x711E}, //13140 #CJK UNIFIED IDEOGRAPH + {0xD4C9, 0x71C9}, //13141 #CJK UNIFIED IDEOGRAPH + {0xD4CA, 0x8C5A}, //13142 #CJK UNIFIED IDEOGRAPH + {0xD4CB, 0x9813}, //13143 #CJK UNIFIED IDEOGRAPH + {0xD4CC, 0x4E6D}, //13144 #CJK UNIFIED IDEOGRAPH + {0xD4CD, 0x7A81}, //13145 #CJK UNIFIED IDEOGRAPH + {0xD4CE, 0x4EDD}, //13146 #CJK UNIFIED IDEOGRAPH + {0xD4CF, 0x51AC}, //13147 #CJK UNIFIED IDEOGRAPH + {0xD4D0, 0x51CD}, //13148 #CJK UNIFIED IDEOGRAPH + {0xD4D1, 0x52D5}, //13149 #CJK UNIFIED IDEOGRAPH + {0xD4D2, 0x540C}, //13150 #CJK UNIFIED IDEOGRAPH + {0xD4D3, 0x61A7}, //13151 #CJK UNIFIED IDEOGRAPH + {0xD4D4, 0x6771}, //13152 #CJK UNIFIED IDEOGRAPH + {0xD4D5, 0x6850}, //13153 #CJK UNIFIED IDEOGRAPH + {0xD4D6, 0x68DF}, //13154 #CJK UNIFIED IDEOGRAPH + {0xD4D7, 0x6D1E}, //13155 #CJK UNIFIED IDEOGRAPH + {0xD4D8, 0x6F7C}, //13156 #CJK UNIFIED IDEOGRAPH + {0xD4D9, 0x75BC}, //13157 #CJK UNIFIED IDEOGRAPH + {0xD4DA, 0x77B3}, //13158 #CJK UNIFIED IDEOGRAPH + {0xD4DB, 0x7AE5}, //13159 #CJK UNIFIED IDEOGRAPH + {0xD4DC, 0x80F4}, //13160 #CJK UNIFIED IDEOGRAPH + {0xD4DD, 0x8463}, //13161 #CJK UNIFIED IDEOGRAPH + {0xD4DE, 0x9285}, //13162 #CJK UNIFIED IDEOGRAPH + {0xD4DF, 0x515C}, //13163 #CJK UNIFIED IDEOGRAPH + {0xD4E0, 0x6597}, //13164 #CJK UNIFIED IDEOGRAPH + {0xD4E1, 0x675C}, //13165 #CJK UNIFIED IDEOGRAPH + {0xD4E2, 0x6793}, //13166 #CJK UNIFIED IDEOGRAPH + {0xD4E3, 0x75D8}, //13167 #CJK UNIFIED IDEOGRAPH + {0xD4E4, 0x7AC7}, //13168 #CJK UNIFIED IDEOGRAPH + {0xD4E5, 0x8373}, //13169 #CJK UNIFIED IDEOGRAPH + {0xD4E6, 0xF95A}, //13170 #CJK COMPATIBILITY IDEOGRAPH + {0xD4E7, 0x8C46}, //13171 #CJK UNIFIED IDEOGRAPH + {0xD4E8, 0x9017}, //13172 #CJK UNIFIED IDEOGRAPH + {0xD4E9, 0x982D}, //13173 #CJK UNIFIED IDEOGRAPH + {0xD4EA, 0x5C6F}, //13174 #CJK UNIFIED IDEOGRAPH + {0xD4EB, 0x81C0}, //13175 #CJK UNIFIED IDEOGRAPH + {0xD4EC, 0x829A}, //13176 #CJK UNIFIED IDEOGRAPH + {0xD4ED, 0x9041}, //13177 #CJK UNIFIED IDEOGRAPH + {0xD4EE, 0x906F}, //13178 #CJK UNIFIED IDEOGRAPH + {0xD4EF, 0x920D}, //13179 #CJK UNIFIED IDEOGRAPH + {0xD4F0, 0x5F97}, //13180 #CJK UNIFIED IDEOGRAPH + {0xD4F1, 0x5D9D}, //13181 #CJK UNIFIED IDEOGRAPH + {0xD4F2, 0x6A59}, //13182 #CJK UNIFIED IDEOGRAPH + {0xD4F3, 0x71C8}, //13183 #CJK UNIFIED IDEOGRAPH + {0xD4F4, 0x767B}, //13184 #CJK UNIFIED IDEOGRAPH + {0xD4F5, 0x7B49}, //13185 #CJK UNIFIED IDEOGRAPH + {0xD4F6, 0x85E4}, //13186 #CJK UNIFIED IDEOGRAPH + {0xD4F7, 0x8B04}, //13187 #CJK UNIFIED IDEOGRAPH + {0xD4F8, 0x9127}, //13188 #CJK UNIFIED IDEOGRAPH + {0xD4F9, 0x9A30}, //13189 #CJK UNIFIED IDEOGRAPH + {0xD4FA, 0x5587}, //13190 #CJK UNIFIED IDEOGRAPH + {0xD4FB, 0x61F6}, //13191 #CJK UNIFIED IDEOGRAPH + {0xD4FC, 0xF95B}, //13192 #CJK COMPATIBILITY IDEOGRAPH + {0xD4FD, 0x7669}, //13193 #CJK UNIFIED IDEOGRAPH + {0xD4FE, 0x7F85}, //13194 #CJK UNIFIED IDEOGRAPH + {0xD5A1, 0x863F}, //13195 #CJK UNIFIED IDEOGRAPH + {0xD5A2, 0x87BA}, //13196 #CJK UNIFIED IDEOGRAPH + {0xD5A3, 0x88F8}, //13197 #CJK UNIFIED IDEOGRAPH + {0xD5A4, 0x908F}, //13198 #CJK UNIFIED IDEOGRAPH + {0xD5A5, 0xF95C}, //13199 #CJK COMPATIBILITY IDEOGRAPH + {0xD5A6, 0x6D1B}, //13200 #CJK UNIFIED IDEOGRAPH + {0xD5A7, 0x70D9}, //13201 #CJK UNIFIED IDEOGRAPH + {0xD5A8, 0x73DE}, //13202 #CJK UNIFIED IDEOGRAPH + {0xD5A9, 0x7D61}, //13203 #CJK UNIFIED IDEOGRAPH + {0xD5AA, 0x843D}, //13204 #CJK UNIFIED IDEOGRAPH + {0xD5AB, 0xF95D}, //13205 #CJK COMPATIBILITY IDEOGRAPH + {0xD5AC, 0x916A}, //13206 #CJK UNIFIED IDEOGRAPH + {0xD5AD, 0x99F1}, //13207 #CJK UNIFIED IDEOGRAPH + {0xD5AE, 0xF95E}, //13208 #CJK COMPATIBILITY IDEOGRAPH + {0xD5AF, 0x4E82}, //13209 #CJK UNIFIED IDEOGRAPH + {0xD5B0, 0x5375}, //13210 #CJK UNIFIED IDEOGRAPH + {0xD5B1, 0x6B04}, //13211 #CJK UNIFIED IDEOGRAPH + {0xD5B2, 0x6B12}, //13212 #CJK UNIFIED IDEOGRAPH + {0xD5B3, 0x703E}, //13213 #CJK UNIFIED IDEOGRAPH + {0xD5B4, 0x721B}, //13214 #CJK UNIFIED IDEOGRAPH + {0xD5B5, 0x862D}, //13215 #CJK UNIFIED IDEOGRAPH + {0xD5B6, 0x9E1E}, //13216 #CJK UNIFIED IDEOGRAPH + {0xD5B7, 0x524C}, //13217 #CJK UNIFIED IDEOGRAPH + {0xD5B8, 0x8FA3}, //13218 #CJK UNIFIED IDEOGRAPH + {0xD5B9, 0x5D50}, //13219 #CJK UNIFIED IDEOGRAPH + {0xD5BA, 0x64E5}, //13220 #CJK UNIFIED IDEOGRAPH + {0xD5BB, 0x652C}, //13221 #CJK UNIFIED IDEOGRAPH + {0xD5BC, 0x6B16}, //13222 #CJK UNIFIED IDEOGRAPH + {0xD5BD, 0x6FEB}, //13223 #CJK UNIFIED IDEOGRAPH + {0xD5BE, 0x7C43}, //13224 #CJK UNIFIED IDEOGRAPH + {0xD5BF, 0x7E9C}, //13225 #CJK UNIFIED IDEOGRAPH + {0xD5C0, 0x85CD}, //13226 #CJK UNIFIED IDEOGRAPH + {0xD5C1, 0x8964}, //13227 #CJK UNIFIED IDEOGRAPH + {0xD5C2, 0x89BD}, //13228 #CJK UNIFIED IDEOGRAPH + {0xD5C3, 0x62C9}, //13229 #CJK UNIFIED IDEOGRAPH + {0xD5C4, 0x81D8}, //13230 #CJK UNIFIED IDEOGRAPH + {0xD5C5, 0x881F}, //13231 #CJK UNIFIED IDEOGRAPH + {0xD5C6, 0x5ECA}, //13232 #CJK UNIFIED IDEOGRAPH + {0xD5C7, 0x6717}, //13233 #CJK UNIFIED IDEOGRAPH + {0xD5C8, 0x6D6A}, //13234 #CJK UNIFIED IDEOGRAPH + {0xD5C9, 0x72FC}, //13235 #CJK UNIFIED IDEOGRAPH + {0xD5CA, 0x7405}, //13236 #CJK UNIFIED IDEOGRAPH + {0xD5CB, 0x746F}, //13237 #CJK UNIFIED IDEOGRAPH + {0xD5CC, 0x8782}, //13238 #CJK UNIFIED IDEOGRAPH + {0xD5CD, 0x90DE}, //13239 #CJK UNIFIED IDEOGRAPH + {0xD5CE, 0x4F86}, //13240 #CJK UNIFIED IDEOGRAPH + {0xD5CF, 0x5D0D}, //13241 #CJK UNIFIED IDEOGRAPH + {0xD5D0, 0x5FA0}, //13242 #CJK UNIFIED IDEOGRAPH + {0xD5D1, 0x840A}, //13243 #CJK UNIFIED IDEOGRAPH + {0xD5D2, 0x51B7}, //13244 #CJK UNIFIED IDEOGRAPH + {0xD5D3, 0x63A0}, //13245 #CJK UNIFIED IDEOGRAPH + {0xD5D4, 0x7565}, //13246 #CJK UNIFIED IDEOGRAPH + {0xD5D5, 0x4EAE}, //13247 #CJK UNIFIED IDEOGRAPH + {0xD5D6, 0x5006}, //13248 #CJK UNIFIED IDEOGRAPH + {0xD5D7, 0x5169}, //13249 #CJK UNIFIED IDEOGRAPH + {0xD5D8, 0x51C9}, //13250 #CJK UNIFIED IDEOGRAPH + {0xD5D9, 0x6881}, //13251 #CJK UNIFIED IDEOGRAPH + {0xD5DA, 0x6A11}, //13252 #CJK UNIFIED IDEOGRAPH + {0xD5DB, 0x7CAE}, //13253 #CJK UNIFIED IDEOGRAPH + {0xD5DC, 0x7CB1}, //13254 #CJK UNIFIED IDEOGRAPH + {0xD5DD, 0x7CE7}, //13255 #CJK UNIFIED IDEOGRAPH + {0xD5DE, 0x826F}, //13256 #CJK UNIFIED IDEOGRAPH + {0xD5DF, 0x8AD2}, //13257 #CJK UNIFIED IDEOGRAPH + {0xD5E0, 0x8F1B}, //13258 #CJK UNIFIED IDEOGRAPH + {0xD5E1, 0x91CF}, //13259 #CJK UNIFIED IDEOGRAPH + {0xD5E2, 0x4FB6}, //13260 #CJK UNIFIED IDEOGRAPH + {0xD5E3, 0x5137}, //13261 #CJK UNIFIED IDEOGRAPH + {0xD5E4, 0x52F5}, //13262 #CJK UNIFIED IDEOGRAPH + {0xD5E5, 0x5442}, //13263 #CJK UNIFIED IDEOGRAPH + {0xD5E6, 0x5EEC}, //13264 #CJK UNIFIED IDEOGRAPH + {0xD5E7, 0x616E}, //13265 #CJK UNIFIED IDEOGRAPH + {0xD5E8, 0x623E}, //13266 #CJK UNIFIED IDEOGRAPH + {0xD5E9, 0x65C5}, //13267 #CJK UNIFIED IDEOGRAPH + {0xD5EA, 0x6ADA}, //13268 #CJK UNIFIED IDEOGRAPH + {0xD5EB, 0x6FFE}, //13269 #CJK UNIFIED IDEOGRAPH + {0xD5EC, 0x792A}, //13270 #CJK UNIFIED IDEOGRAPH + {0xD5ED, 0x85DC}, //13271 #CJK UNIFIED IDEOGRAPH + {0xD5EE, 0x8823}, //13272 #CJK UNIFIED IDEOGRAPH + {0xD5EF, 0x95AD}, //13273 #CJK UNIFIED IDEOGRAPH + {0xD5F0, 0x9A62}, //13274 #CJK UNIFIED IDEOGRAPH + {0xD5F1, 0x9A6A}, //13275 #CJK UNIFIED IDEOGRAPH + {0xD5F2, 0x9E97}, //13276 #CJK UNIFIED IDEOGRAPH + {0xD5F3, 0x9ECE}, //13277 #CJK UNIFIED IDEOGRAPH + {0xD5F4, 0x529B}, //13278 #CJK UNIFIED IDEOGRAPH + {0xD5F5, 0x66C6}, //13279 #CJK UNIFIED IDEOGRAPH + {0xD5F6, 0x6B77}, //13280 #CJK UNIFIED IDEOGRAPH + {0xD5F7, 0x701D}, //13281 #CJK UNIFIED IDEOGRAPH + {0xD5F8, 0x792B}, //13282 #CJK UNIFIED IDEOGRAPH + {0xD5F9, 0x8F62}, //13283 #CJK UNIFIED IDEOGRAPH + {0xD5FA, 0x9742}, //13284 #CJK UNIFIED IDEOGRAPH + {0xD5FB, 0x6190}, //13285 #CJK UNIFIED IDEOGRAPH + {0xD5FC, 0x6200}, //13286 #CJK UNIFIED IDEOGRAPH + {0xD5FD, 0x6523}, //13287 #CJK UNIFIED IDEOGRAPH + {0xD5FE, 0x6F23}, //13288 #CJK UNIFIED IDEOGRAPH + {0xD6A1, 0x7149}, //13289 #CJK UNIFIED IDEOGRAPH + {0xD6A2, 0x7489}, //13290 #CJK UNIFIED IDEOGRAPH + {0xD6A3, 0x7DF4}, //13291 #CJK UNIFIED IDEOGRAPH + {0xD6A4, 0x806F}, //13292 #CJK UNIFIED IDEOGRAPH + {0xD6A5, 0x84EE}, //13293 #CJK UNIFIED IDEOGRAPH + {0xD6A6, 0x8F26}, //13294 #CJK UNIFIED IDEOGRAPH + {0xD6A7, 0x9023}, //13295 #CJK UNIFIED IDEOGRAPH + {0xD6A8, 0x934A}, //13296 #CJK UNIFIED IDEOGRAPH + {0xD6A9, 0x51BD}, //13297 #CJK UNIFIED IDEOGRAPH + {0xD6AA, 0x5217}, //13298 #CJK UNIFIED IDEOGRAPH + {0xD6AB, 0x52A3}, //13299 #CJK UNIFIED IDEOGRAPH + {0xD6AC, 0x6D0C}, //13300 #CJK UNIFIED IDEOGRAPH + {0xD6AD, 0x70C8}, //13301 #CJK UNIFIED IDEOGRAPH + {0xD6AE, 0x88C2}, //13302 #CJK UNIFIED IDEOGRAPH + {0xD6AF, 0x5EC9}, //13303 #CJK UNIFIED IDEOGRAPH + {0xD6B0, 0x6582}, //13304 #CJK UNIFIED IDEOGRAPH + {0xD6B1, 0x6BAE}, //13305 #CJK UNIFIED IDEOGRAPH + {0xD6B2, 0x6FC2}, //13306 #CJK UNIFIED IDEOGRAPH + {0xD6B3, 0x7C3E}, //13307 #CJK UNIFIED IDEOGRAPH + {0xD6B4, 0x7375}, //13308 #CJK UNIFIED IDEOGRAPH + {0xD6B5, 0x4EE4}, //13309 #CJK UNIFIED IDEOGRAPH + {0xD6B6, 0x4F36}, //13310 #CJK UNIFIED IDEOGRAPH + {0xD6B7, 0x56F9}, //13311 #CJK UNIFIED IDEOGRAPH + {0xD6B8, 0xF95F}, //13312 #CJK COMPATIBILITY IDEOGRAPH + {0xD6B9, 0x5CBA}, //13313 #CJK UNIFIED IDEOGRAPH + {0xD6BA, 0x5DBA}, //13314 #CJK UNIFIED IDEOGRAPH + {0xD6BB, 0x601C}, //13315 #CJK UNIFIED IDEOGRAPH + {0xD6BC, 0x73B2}, //13316 #CJK UNIFIED IDEOGRAPH + {0xD6BD, 0x7B2D}, //13317 #CJK UNIFIED IDEOGRAPH + {0xD6BE, 0x7F9A}, //13318 #CJK UNIFIED IDEOGRAPH + {0xD6BF, 0x7FCE}, //13319 #CJK UNIFIED IDEOGRAPH + {0xD6C0, 0x8046}, //13320 #CJK UNIFIED IDEOGRAPH + {0xD6C1, 0x901E}, //13321 #CJK UNIFIED IDEOGRAPH + {0xD6C2, 0x9234}, //13322 #CJK UNIFIED IDEOGRAPH + {0xD6C3, 0x96F6}, //13323 #CJK UNIFIED IDEOGRAPH + {0xD6C4, 0x9748}, //13324 #CJK UNIFIED IDEOGRAPH + {0xD6C5, 0x9818}, //13325 #CJK UNIFIED IDEOGRAPH + {0xD6C6, 0x9F61}, //13326 #CJK UNIFIED IDEOGRAPH + {0xD6C7, 0x4F8B}, //13327 #CJK UNIFIED IDEOGRAPH + {0xD6C8, 0x6FA7}, //13328 #CJK UNIFIED IDEOGRAPH + {0xD6C9, 0x79AE}, //13329 #CJK UNIFIED IDEOGRAPH + {0xD6CA, 0x91B4}, //13330 #CJK UNIFIED IDEOGRAPH + {0xD6CB, 0x96B7}, //13331 #CJK UNIFIED IDEOGRAPH + {0xD6CC, 0x52DE}, //13332 #CJK UNIFIED IDEOGRAPH + {0xD6CD, 0xF960}, //13333 #CJK COMPATIBILITY IDEOGRAPH + {0xD6CE, 0x6488}, //13334 #CJK UNIFIED IDEOGRAPH + {0xD6CF, 0x64C4}, //13335 #CJK UNIFIED IDEOGRAPH + {0xD6D0, 0x6AD3}, //13336 #CJK UNIFIED IDEOGRAPH + {0xD6D1, 0x6F5E}, //13337 #CJK UNIFIED IDEOGRAPH + {0xD6D2, 0x7018}, //13338 #CJK UNIFIED IDEOGRAPH + {0xD6D3, 0x7210}, //13339 #CJK UNIFIED IDEOGRAPH + {0xD6D4, 0x76E7}, //13340 #CJK UNIFIED IDEOGRAPH + {0xD6D5, 0x8001}, //13341 #CJK UNIFIED IDEOGRAPH + {0xD6D6, 0x8606}, //13342 #CJK UNIFIED IDEOGRAPH + {0xD6D7, 0x865C}, //13343 #CJK UNIFIED IDEOGRAPH + {0xD6D8, 0x8DEF}, //13344 #CJK UNIFIED IDEOGRAPH + {0xD6D9, 0x8F05}, //13345 #CJK UNIFIED IDEOGRAPH + {0xD6DA, 0x9732}, //13346 #CJK UNIFIED IDEOGRAPH + {0xD6DB, 0x9B6F}, //13347 #CJK UNIFIED IDEOGRAPH + {0xD6DC, 0x9DFA}, //13348 #CJK UNIFIED IDEOGRAPH + {0xD6DD, 0x9E75}, //13349 #CJK UNIFIED IDEOGRAPH + {0xD6DE, 0x788C}, //13350 #CJK UNIFIED IDEOGRAPH + {0xD6DF, 0x797F}, //13351 #CJK UNIFIED IDEOGRAPH + {0xD6E0, 0x7DA0}, //13352 #CJK UNIFIED IDEOGRAPH + {0xD6E1, 0x83C9}, //13353 #CJK UNIFIED IDEOGRAPH + {0xD6E2, 0x9304}, //13354 #CJK UNIFIED IDEOGRAPH + {0xD6E3, 0x9E7F}, //13355 #CJK UNIFIED IDEOGRAPH + {0xD6E4, 0x9E93}, //13356 #CJK UNIFIED IDEOGRAPH + {0xD6E5, 0x8AD6}, //13357 #CJK UNIFIED IDEOGRAPH + {0xD6E6, 0x58DF}, //13358 #CJK UNIFIED IDEOGRAPH + {0xD6E7, 0x5F04}, //13359 #CJK UNIFIED IDEOGRAPH + {0xD6E8, 0x6727}, //13360 #CJK UNIFIED IDEOGRAPH + {0xD6E9, 0x7027}, //13361 #CJK UNIFIED IDEOGRAPH + {0xD6EA, 0x74CF}, //13362 #CJK UNIFIED IDEOGRAPH + {0xD6EB, 0x7C60}, //13363 #CJK UNIFIED IDEOGRAPH + {0xD6EC, 0x807E}, //13364 #CJK UNIFIED IDEOGRAPH + {0xD6ED, 0x5121}, //13365 #CJK UNIFIED IDEOGRAPH + {0xD6EE, 0x7028}, //13366 #CJK UNIFIED IDEOGRAPH + {0xD6EF, 0x7262}, //13367 #CJK UNIFIED IDEOGRAPH + {0xD6F0, 0x78CA}, //13368 #CJK UNIFIED IDEOGRAPH + {0xD6F1, 0x8CC2}, //13369 #CJK UNIFIED IDEOGRAPH + {0xD6F2, 0x8CDA}, //13370 #CJK UNIFIED IDEOGRAPH + {0xD6F3, 0x8CF4}, //13371 #CJK UNIFIED IDEOGRAPH + {0xD6F4, 0x96F7}, //13372 #CJK UNIFIED IDEOGRAPH + {0xD6F5, 0x4E86}, //13373 #CJK UNIFIED IDEOGRAPH + {0xD6F6, 0x50DA}, //13374 #CJK UNIFIED IDEOGRAPH + {0xD6F7, 0x5BEE}, //13375 #CJK UNIFIED IDEOGRAPH + {0xD6F8, 0x5ED6}, //13376 #CJK UNIFIED IDEOGRAPH + {0xD6F9, 0x6599}, //13377 #CJK UNIFIED IDEOGRAPH + {0xD6FA, 0x71CE}, //13378 #CJK UNIFIED IDEOGRAPH + {0xD6FB, 0x7642}, //13379 #CJK UNIFIED IDEOGRAPH + {0xD6FC, 0x77AD}, //13380 #CJK UNIFIED IDEOGRAPH + {0xD6FD, 0x804A}, //13381 #CJK UNIFIED IDEOGRAPH + {0xD6FE, 0x84FC}, //13382 #CJK UNIFIED IDEOGRAPH + {0xD7A1, 0x907C}, //13383 #CJK UNIFIED IDEOGRAPH + {0xD7A2, 0x9B27}, //13384 #CJK UNIFIED IDEOGRAPH + {0xD7A3, 0x9F8D}, //13385 #CJK UNIFIED IDEOGRAPH + {0xD7A4, 0x58D8}, //13386 #CJK UNIFIED IDEOGRAPH + {0xD7A5, 0x5A41}, //13387 #CJK UNIFIED IDEOGRAPH + {0xD7A6, 0x5C62}, //13388 #CJK UNIFIED IDEOGRAPH + {0xD7A7, 0x6A13}, //13389 #CJK UNIFIED IDEOGRAPH + {0xD7A8, 0x6DDA}, //13390 #CJK UNIFIED IDEOGRAPH + {0xD7A9, 0x6F0F}, //13391 #CJK UNIFIED IDEOGRAPH + {0xD7AA, 0x763B}, //13392 #CJK UNIFIED IDEOGRAPH + {0xD7AB, 0x7D2F}, //13393 #CJK UNIFIED IDEOGRAPH + {0xD7AC, 0x7E37}, //13394 #CJK UNIFIED IDEOGRAPH + {0xD7AD, 0x851E}, //13395 #CJK UNIFIED IDEOGRAPH + {0xD7AE, 0x8938}, //13396 #CJK UNIFIED IDEOGRAPH + {0xD7AF, 0x93E4}, //13397 #CJK UNIFIED IDEOGRAPH + {0xD7B0, 0x964B}, //13398 #CJK UNIFIED IDEOGRAPH + {0xD7B1, 0x5289}, //13399 #CJK UNIFIED IDEOGRAPH + {0xD7B2, 0x65D2}, //13400 #CJK UNIFIED IDEOGRAPH + {0xD7B3, 0x67F3}, //13401 #CJK UNIFIED IDEOGRAPH + {0xD7B4, 0x69B4}, //13402 #CJK UNIFIED IDEOGRAPH + {0xD7B5, 0x6D41}, //13403 #CJK UNIFIED IDEOGRAPH + {0xD7B6, 0x6E9C}, //13404 #CJK UNIFIED IDEOGRAPH + {0xD7B7, 0x700F}, //13405 #CJK UNIFIED IDEOGRAPH + {0xD7B8, 0x7409}, //13406 #CJK UNIFIED IDEOGRAPH + {0xD7B9, 0x7460}, //13407 #CJK UNIFIED IDEOGRAPH + {0xD7BA, 0x7559}, //13408 #CJK UNIFIED IDEOGRAPH + {0xD7BB, 0x7624}, //13409 #CJK UNIFIED IDEOGRAPH + {0xD7BC, 0x786B}, //13410 #CJK UNIFIED IDEOGRAPH + {0xD7BD, 0x8B2C}, //13411 #CJK UNIFIED IDEOGRAPH + {0xD7BE, 0x985E}, //13412 #CJK UNIFIED IDEOGRAPH + {0xD7BF, 0x516D}, //13413 #CJK UNIFIED IDEOGRAPH + {0xD7C0, 0x622E}, //13414 #CJK UNIFIED IDEOGRAPH + {0xD7C1, 0x9678}, //13415 #CJK UNIFIED IDEOGRAPH + {0xD7C2, 0x4F96}, //13416 #CJK UNIFIED IDEOGRAPH + {0xD7C3, 0x502B}, //13417 #CJK UNIFIED IDEOGRAPH + {0xD7C4, 0x5D19}, //13418 #CJK UNIFIED IDEOGRAPH + {0xD7C5, 0x6DEA}, //13419 #CJK UNIFIED IDEOGRAPH + {0xD7C6, 0x7DB8}, //13420 #CJK UNIFIED IDEOGRAPH + {0xD7C7, 0x8F2A}, //13421 #CJK UNIFIED IDEOGRAPH + {0xD7C8, 0x5F8B}, //13422 #CJK UNIFIED IDEOGRAPH + {0xD7C9, 0x6144}, //13423 #CJK UNIFIED IDEOGRAPH + {0xD7CA, 0x6817}, //13424 #CJK UNIFIED IDEOGRAPH + {0xD7CB, 0xF961}, //13425 #CJK COMPATIBILITY IDEOGRAPH + {0xD7CC, 0x9686}, //13426 #CJK UNIFIED IDEOGRAPH + {0xD7CD, 0x52D2}, //13427 #CJK UNIFIED IDEOGRAPH + {0xD7CE, 0x808B}, //13428 #CJK UNIFIED IDEOGRAPH + {0xD7CF, 0x51DC}, //13429 #CJK UNIFIED IDEOGRAPH + {0xD7D0, 0x51CC}, //13430 #CJK UNIFIED IDEOGRAPH + {0xD7D1, 0x695E}, //13431 #CJK UNIFIED IDEOGRAPH + {0xD7D2, 0x7A1C}, //13432 #CJK UNIFIED IDEOGRAPH + {0xD7D3, 0x7DBE}, //13433 #CJK UNIFIED IDEOGRAPH + {0xD7D4, 0x83F1}, //13434 #CJK UNIFIED IDEOGRAPH + {0xD7D5, 0x9675}, //13435 #CJK UNIFIED IDEOGRAPH + {0xD7D6, 0x4FDA}, //13436 #CJK UNIFIED IDEOGRAPH + {0xD7D7, 0x5229}, //13437 #CJK UNIFIED IDEOGRAPH + {0xD7D8, 0x5398}, //13438 #CJK UNIFIED IDEOGRAPH + {0xD7D9, 0x540F}, //13439 #CJK UNIFIED IDEOGRAPH + {0xD7DA, 0x550E}, //13440 #CJK UNIFIED IDEOGRAPH + {0xD7DB, 0x5C65}, //13441 #CJK UNIFIED IDEOGRAPH + {0xD7DC, 0x60A7}, //13442 #CJK UNIFIED IDEOGRAPH + {0xD7DD, 0x674E}, //13443 #CJK UNIFIED IDEOGRAPH + {0xD7DE, 0x68A8}, //13444 #CJK UNIFIED IDEOGRAPH + {0xD7DF, 0x6D6C}, //13445 #CJK UNIFIED IDEOGRAPH + {0xD7E0, 0x7281}, //13446 #CJK UNIFIED IDEOGRAPH + {0xD7E1, 0x72F8}, //13447 #CJK UNIFIED IDEOGRAPH + {0xD7E2, 0x7406}, //13448 #CJK UNIFIED IDEOGRAPH + {0xD7E3, 0x7483}, //13449 #CJK UNIFIED IDEOGRAPH + {0xD7E4, 0xF962}, //13450 #CJK COMPATIBILITY IDEOGRAPH + {0xD7E5, 0x75E2}, //13451 #CJK UNIFIED IDEOGRAPH + {0xD7E6, 0x7C6C}, //13452 #CJK UNIFIED IDEOGRAPH + {0xD7E7, 0x7F79}, //13453 #CJK UNIFIED IDEOGRAPH + {0xD7E8, 0x7FB8}, //13454 #CJK UNIFIED IDEOGRAPH + {0xD7E9, 0x8389}, //13455 #CJK UNIFIED IDEOGRAPH + {0xD7EA, 0x88CF}, //13456 #CJK UNIFIED IDEOGRAPH + {0xD7EB, 0x88E1}, //13457 #CJK UNIFIED IDEOGRAPH + {0xD7EC, 0x91CC}, //13458 #CJK UNIFIED IDEOGRAPH + {0xD7ED, 0x91D0}, //13459 #CJK UNIFIED IDEOGRAPH + {0xD7EE, 0x96E2}, //13460 #CJK UNIFIED IDEOGRAPH + {0xD7EF, 0x9BC9}, //13461 #CJK UNIFIED IDEOGRAPH + {0xD7F0, 0x541D}, //13462 #CJK UNIFIED IDEOGRAPH + {0xD7F1, 0x6F7E}, //13463 #CJK UNIFIED IDEOGRAPH + {0xD7F2, 0x71D0}, //13464 #CJK UNIFIED IDEOGRAPH + {0xD7F3, 0x7498}, //13465 #CJK UNIFIED IDEOGRAPH + {0xD7F4, 0x85FA}, //13466 #CJK UNIFIED IDEOGRAPH + {0xD7F5, 0x8EAA}, //13467 #CJK UNIFIED IDEOGRAPH + {0xD7F6, 0x96A3}, //13468 #CJK UNIFIED IDEOGRAPH + {0xD7F7, 0x9C57}, //13469 #CJK UNIFIED IDEOGRAPH + {0xD7F8, 0x9E9F}, //13470 #CJK UNIFIED IDEOGRAPH + {0xD7F9, 0x6797}, //13471 #CJK UNIFIED IDEOGRAPH + {0xD7FA, 0x6DCB}, //13472 #CJK UNIFIED IDEOGRAPH + {0xD7FB, 0x7433}, //13473 #CJK UNIFIED IDEOGRAPH + {0xD7FC, 0x81E8}, //13474 #CJK UNIFIED IDEOGRAPH + {0xD7FD, 0x9716}, //13475 #CJK UNIFIED IDEOGRAPH + {0xD7FE, 0x782C}, //13476 #CJK UNIFIED IDEOGRAPH + {0xD8A1, 0x7ACB}, //13477 #CJK UNIFIED IDEOGRAPH + {0xD8A2, 0x7B20}, //13478 #CJK UNIFIED IDEOGRAPH + {0xD8A3, 0x7C92}, //13479 #CJK UNIFIED IDEOGRAPH + {0xD8A4, 0x6469}, //13480 #CJK UNIFIED IDEOGRAPH + {0xD8A5, 0x746A}, //13481 #CJK UNIFIED IDEOGRAPH + {0xD8A6, 0x75F2}, //13482 #CJK UNIFIED IDEOGRAPH + {0xD8A7, 0x78BC}, //13483 #CJK UNIFIED IDEOGRAPH + {0xD8A8, 0x78E8}, //13484 #CJK UNIFIED IDEOGRAPH + {0xD8A9, 0x99AC}, //13485 #CJK UNIFIED IDEOGRAPH + {0xD8AA, 0x9B54}, //13486 #CJK UNIFIED IDEOGRAPH + {0xD8AB, 0x9EBB}, //13487 #CJK UNIFIED IDEOGRAPH + {0xD8AC, 0x5BDE}, //13488 #CJK UNIFIED IDEOGRAPH + {0xD8AD, 0x5E55}, //13489 #CJK UNIFIED IDEOGRAPH + {0xD8AE, 0x6F20}, //13490 #CJK UNIFIED IDEOGRAPH + {0xD8AF, 0x819C}, //13491 #CJK UNIFIED IDEOGRAPH + {0xD8B0, 0x83AB}, //13492 #CJK UNIFIED IDEOGRAPH + {0xD8B1, 0x9088}, //13493 #CJK UNIFIED IDEOGRAPH + {0xD8B2, 0x4E07}, //13494 #CJK UNIFIED IDEOGRAPH + {0xD8B3, 0x534D}, //13495 #CJK UNIFIED IDEOGRAPH + {0xD8B4, 0x5A29}, //13496 #CJK UNIFIED IDEOGRAPH + {0xD8B5, 0x5DD2}, //13497 #CJK UNIFIED IDEOGRAPH + {0xD8B6, 0x5F4E}, //13498 #CJK UNIFIED IDEOGRAPH + {0xD8B7, 0x6162}, //13499 #CJK UNIFIED IDEOGRAPH + {0xD8B8, 0x633D}, //13500 #CJK UNIFIED IDEOGRAPH + {0xD8B9, 0x6669}, //13501 #CJK UNIFIED IDEOGRAPH + {0xD8BA, 0x66FC}, //13502 #CJK UNIFIED IDEOGRAPH + {0xD8BB, 0x6EFF}, //13503 #CJK UNIFIED IDEOGRAPH + {0xD8BC, 0x6F2B}, //13504 #CJK UNIFIED IDEOGRAPH + {0xD8BD, 0x7063}, //13505 #CJK UNIFIED IDEOGRAPH + {0xD8BE, 0x779E}, //13506 #CJK UNIFIED IDEOGRAPH + {0xD8BF, 0x842C}, //13507 #CJK UNIFIED IDEOGRAPH + {0xD8C0, 0x8513}, //13508 #CJK UNIFIED IDEOGRAPH + {0xD8C1, 0x883B}, //13509 #CJK UNIFIED IDEOGRAPH + {0xD8C2, 0x8F13}, //13510 #CJK UNIFIED IDEOGRAPH + {0xD8C3, 0x9945}, //13511 #CJK UNIFIED IDEOGRAPH + {0xD8C4, 0x9C3B}, //13512 #CJK UNIFIED IDEOGRAPH + {0xD8C5, 0x551C}, //13513 #CJK UNIFIED IDEOGRAPH + {0xD8C6, 0x62B9}, //13514 #CJK UNIFIED IDEOGRAPH + {0xD8C7, 0x672B}, //13515 #CJK UNIFIED IDEOGRAPH + {0xD8C8, 0x6CAB}, //13516 #CJK UNIFIED IDEOGRAPH + {0xD8C9, 0x8309}, //13517 #CJK UNIFIED IDEOGRAPH + {0xD8CA, 0x896A}, //13518 #CJK UNIFIED IDEOGRAPH + {0xD8CB, 0x977A}, //13519 #CJK UNIFIED IDEOGRAPH + {0xD8CC, 0x4EA1}, //13520 #CJK UNIFIED IDEOGRAPH + {0xD8CD, 0x5984}, //13521 #CJK UNIFIED IDEOGRAPH + {0xD8CE, 0x5FD8}, //13522 #CJK UNIFIED IDEOGRAPH + {0xD8CF, 0x5FD9}, //13523 #CJK UNIFIED IDEOGRAPH + {0xD8D0, 0x671B}, //13524 #CJK UNIFIED IDEOGRAPH + {0xD8D1, 0x7DB2}, //13525 #CJK UNIFIED IDEOGRAPH + {0xD8D2, 0x7F54}, //13526 #CJK UNIFIED IDEOGRAPH + {0xD8D3, 0x8292}, //13527 #CJK UNIFIED IDEOGRAPH + {0xD8D4, 0x832B}, //13528 #CJK UNIFIED IDEOGRAPH + {0xD8D5, 0x83BD}, //13529 #CJK UNIFIED IDEOGRAPH + {0xD8D6, 0x8F1E}, //13530 #CJK UNIFIED IDEOGRAPH + {0xD8D7, 0x9099}, //13531 #CJK UNIFIED IDEOGRAPH + {0xD8D8, 0x57CB}, //13532 #CJK UNIFIED IDEOGRAPH + {0xD8D9, 0x59B9}, //13533 #CJK UNIFIED IDEOGRAPH + {0xD8DA, 0x5A92}, //13534 #CJK UNIFIED IDEOGRAPH + {0xD8DB, 0x5BD0}, //13535 #CJK UNIFIED IDEOGRAPH + {0xD8DC, 0x6627}, //13536 #CJK UNIFIED IDEOGRAPH + {0xD8DD, 0x679A}, //13537 #CJK UNIFIED IDEOGRAPH + {0xD8DE, 0x6885}, //13538 #CJK UNIFIED IDEOGRAPH + {0xD8DF, 0x6BCF}, //13539 #CJK UNIFIED IDEOGRAPH + {0xD8E0, 0x7164}, //13540 #CJK UNIFIED IDEOGRAPH + {0xD8E1, 0x7F75}, //13541 #CJK UNIFIED IDEOGRAPH + {0xD8E2, 0x8CB7}, //13542 #CJK UNIFIED IDEOGRAPH + {0xD8E3, 0x8CE3}, //13543 #CJK UNIFIED IDEOGRAPH + {0xD8E4, 0x9081}, //13544 #CJK UNIFIED IDEOGRAPH + {0xD8E5, 0x9B45}, //13545 #CJK UNIFIED IDEOGRAPH + {0xD8E6, 0x8108}, //13546 #CJK UNIFIED IDEOGRAPH + {0xD8E7, 0x8C8A}, //13547 #CJK UNIFIED IDEOGRAPH + {0xD8E8, 0x964C}, //13548 #CJK UNIFIED IDEOGRAPH + {0xD8E9, 0x9A40}, //13549 #CJK UNIFIED IDEOGRAPH + {0xD8EA, 0x9EA5}, //13550 #CJK UNIFIED IDEOGRAPH + {0xD8EB, 0x5B5F}, //13551 #CJK UNIFIED IDEOGRAPH + {0xD8EC, 0x6C13}, //13552 #CJK UNIFIED IDEOGRAPH + {0xD8ED, 0x731B}, //13553 #CJK UNIFIED IDEOGRAPH + {0xD8EE, 0x76F2}, //13554 #CJK UNIFIED IDEOGRAPH + {0xD8EF, 0x76DF}, //13555 #CJK UNIFIED IDEOGRAPH + {0xD8F0, 0x840C}, //13556 #CJK UNIFIED IDEOGRAPH + {0xD8F1, 0x51AA}, //13557 #CJK UNIFIED IDEOGRAPH + {0xD8F2, 0x8993}, //13558 #CJK UNIFIED IDEOGRAPH + {0xD8F3, 0x514D}, //13559 #CJK UNIFIED IDEOGRAPH + {0xD8F4, 0x5195}, //13560 #CJK UNIFIED IDEOGRAPH + {0xD8F5, 0x52C9}, //13561 #CJK UNIFIED IDEOGRAPH + {0xD8F6, 0x68C9}, //13562 #CJK UNIFIED IDEOGRAPH + {0xD8F7, 0x6C94}, //13563 #CJK UNIFIED IDEOGRAPH + {0xD8F8, 0x7704}, //13564 #CJK UNIFIED IDEOGRAPH + {0xD8F9, 0x7720}, //13565 #CJK UNIFIED IDEOGRAPH + {0xD8FA, 0x7DBF}, //13566 #CJK UNIFIED IDEOGRAPH + {0xD8FB, 0x7DEC}, //13567 #CJK UNIFIED IDEOGRAPH + {0xD8FC, 0x9762}, //13568 #CJK UNIFIED IDEOGRAPH + {0xD8FD, 0x9EB5}, //13569 #CJK UNIFIED IDEOGRAPH + {0xD8FE, 0x6EC5}, //13570 #CJK UNIFIED IDEOGRAPH + {0xD9A1, 0x8511}, //13571 #CJK UNIFIED IDEOGRAPH + {0xD9A2, 0x51A5}, //13572 #CJK UNIFIED IDEOGRAPH + {0xD9A3, 0x540D}, //13573 #CJK UNIFIED IDEOGRAPH + {0xD9A4, 0x547D}, //13574 #CJK UNIFIED IDEOGRAPH + {0xD9A5, 0x660E}, //13575 #CJK UNIFIED IDEOGRAPH + {0xD9A6, 0x669D}, //13576 #CJK UNIFIED IDEOGRAPH + {0xD9A7, 0x6927}, //13577 #CJK UNIFIED IDEOGRAPH + {0xD9A8, 0x6E9F}, //13578 #CJK UNIFIED IDEOGRAPH + {0xD9A9, 0x76BF}, //13579 #CJK UNIFIED IDEOGRAPH + {0xD9AA, 0x7791}, //13580 #CJK UNIFIED IDEOGRAPH + {0xD9AB, 0x8317}, //13581 #CJK UNIFIED IDEOGRAPH + {0xD9AC, 0x84C2}, //13582 #CJK UNIFIED IDEOGRAPH + {0xD9AD, 0x879F}, //13583 #CJK UNIFIED IDEOGRAPH + {0xD9AE, 0x9169}, //13584 #CJK UNIFIED IDEOGRAPH + {0xD9AF, 0x9298}, //13585 #CJK UNIFIED IDEOGRAPH + {0xD9B0, 0x9CF4}, //13586 #CJK UNIFIED IDEOGRAPH + {0xD9B1, 0x8882}, //13587 #CJK UNIFIED IDEOGRAPH + {0xD9B2, 0x4FAE}, //13588 #CJK UNIFIED IDEOGRAPH + {0xD9B3, 0x5192}, //13589 #CJK UNIFIED IDEOGRAPH + {0xD9B4, 0x52DF}, //13590 #CJK UNIFIED IDEOGRAPH + {0xD9B5, 0x59C6}, //13591 #CJK UNIFIED IDEOGRAPH + {0xD9B6, 0x5E3D}, //13592 #CJK UNIFIED IDEOGRAPH + {0xD9B7, 0x6155}, //13593 #CJK UNIFIED IDEOGRAPH + {0xD9B8, 0x6478}, //13594 #CJK UNIFIED IDEOGRAPH + {0xD9B9, 0x6479}, //13595 #CJK UNIFIED IDEOGRAPH + {0xD9BA, 0x66AE}, //13596 #CJK UNIFIED IDEOGRAPH + {0xD9BB, 0x67D0}, //13597 #CJK UNIFIED IDEOGRAPH + {0xD9BC, 0x6A21}, //13598 #CJK UNIFIED IDEOGRAPH + {0xD9BD, 0x6BCD}, //13599 #CJK UNIFIED IDEOGRAPH + {0xD9BE, 0x6BDB}, //13600 #CJK UNIFIED IDEOGRAPH + {0xD9BF, 0x725F}, //13601 #CJK UNIFIED IDEOGRAPH + {0xD9C0, 0x7261}, //13602 #CJK UNIFIED IDEOGRAPH + {0xD9C1, 0x7441}, //13603 #CJK UNIFIED IDEOGRAPH + {0xD9C2, 0x7738}, //13604 #CJK UNIFIED IDEOGRAPH + {0xD9C3, 0x77DB}, //13605 #CJK UNIFIED IDEOGRAPH + {0xD9C4, 0x8017}, //13606 #CJK UNIFIED IDEOGRAPH + {0xD9C5, 0x82BC}, //13607 #CJK UNIFIED IDEOGRAPH + {0xD9C6, 0x8305}, //13608 #CJK UNIFIED IDEOGRAPH + {0xD9C7, 0x8B00}, //13609 #CJK UNIFIED IDEOGRAPH + {0xD9C8, 0x8B28}, //13610 #CJK UNIFIED IDEOGRAPH + {0xD9C9, 0x8C8C}, //13611 #CJK UNIFIED IDEOGRAPH + {0xD9CA, 0x6728}, //13612 #CJK UNIFIED IDEOGRAPH + {0xD9CB, 0x6C90}, //13613 #CJK UNIFIED IDEOGRAPH + {0xD9CC, 0x7267}, //13614 #CJK UNIFIED IDEOGRAPH + {0xD9CD, 0x76EE}, //13615 #CJK UNIFIED IDEOGRAPH + {0xD9CE, 0x7766}, //13616 #CJK UNIFIED IDEOGRAPH + {0xD9CF, 0x7A46}, //13617 #CJK UNIFIED IDEOGRAPH + {0xD9D0, 0x9DA9}, //13618 #CJK UNIFIED IDEOGRAPH + {0xD9D1, 0x6B7F}, //13619 #CJK UNIFIED IDEOGRAPH + {0xD9D2, 0x6C92}, //13620 #CJK UNIFIED IDEOGRAPH + {0xD9D3, 0x5922}, //13621 #CJK UNIFIED IDEOGRAPH + {0xD9D4, 0x6726}, //13622 #CJK UNIFIED IDEOGRAPH + {0xD9D5, 0x8499}, //13623 #CJK UNIFIED IDEOGRAPH + {0xD9D6, 0x536F}, //13624 #CJK UNIFIED IDEOGRAPH + {0xD9D7, 0x5893}, //13625 #CJK UNIFIED IDEOGRAPH + {0xD9D8, 0x5999}, //13626 #CJK UNIFIED IDEOGRAPH + {0xD9D9, 0x5EDF}, //13627 #CJK UNIFIED IDEOGRAPH + {0xD9DA, 0x63CF}, //13628 #CJK UNIFIED IDEOGRAPH + {0xD9DB, 0x6634}, //13629 #CJK UNIFIED IDEOGRAPH + {0xD9DC, 0x6773}, //13630 #CJK UNIFIED IDEOGRAPH + {0xD9DD, 0x6E3A}, //13631 #CJK UNIFIED IDEOGRAPH + {0xD9DE, 0x732B}, //13632 #CJK UNIFIED IDEOGRAPH + {0xD9DF, 0x7AD7}, //13633 #CJK UNIFIED IDEOGRAPH + {0xD9E0, 0x82D7}, //13634 #CJK UNIFIED IDEOGRAPH + {0xD9E1, 0x9328}, //13635 #CJK UNIFIED IDEOGRAPH + {0xD9E2, 0x52D9}, //13636 #CJK UNIFIED IDEOGRAPH + {0xD9E3, 0x5DEB}, //13637 #CJK UNIFIED IDEOGRAPH + {0xD9E4, 0x61AE}, //13638 #CJK UNIFIED IDEOGRAPH + {0xD9E5, 0x61CB}, //13639 #CJK UNIFIED IDEOGRAPH + {0xD9E6, 0x620A}, //13640 #CJK UNIFIED IDEOGRAPH + {0xD9E7, 0x62C7}, //13641 #CJK UNIFIED IDEOGRAPH + {0xD9E8, 0x64AB}, //13642 #CJK UNIFIED IDEOGRAPH + {0xD9E9, 0x65E0}, //13643 #CJK UNIFIED IDEOGRAPH + {0xD9EA, 0x6959}, //13644 #CJK UNIFIED IDEOGRAPH + {0xD9EB, 0x6B66}, //13645 #CJK UNIFIED IDEOGRAPH + {0xD9EC, 0x6BCB}, //13646 #CJK UNIFIED IDEOGRAPH + {0xD9ED, 0x7121}, //13647 #CJK UNIFIED IDEOGRAPH + {0xD9EE, 0x73F7}, //13648 #CJK UNIFIED IDEOGRAPH + {0xD9EF, 0x755D}, //13649 #CJK UNIFIED IDEOGRAPH + {0xD9F0, 0x7E46}, //13650 #CJK UNIFIED IDEOGRAPH + {0xD9F1, 0x821E}, //13651 #CJK UNIFIED IDEOGRAPH + {0xD9F2, 0x8302}, //13652 #CJK UNIFIED IDEOGRAPH + {0xD9F3, 0x856A}, //13653 #CJK UNIFIED IDEOGRAPH + {0xD9F4, 0x8AA3}, //13654 #CJK UNIFIED IDEOGRAPH + {0xD9F5, 0x8CBF}, //13655 #CJK UNIFIED IDEOGRAPH + {0xD9F6, 0x9727}, //13656 #CJK UNIFIED IDEOGRAPH + {0xD9F7, 0x9D61}, //13657 #CJK UNIFIED IDEOGRAPH + {0xD9F8, 0x58A8}, //13658 #CJK UNIFIED IDEOGRAPH + {0xD9F9, 0x9ED8}, //13659 #CJK UNIFIED IDEOGRAPH + {0xD9FA, 0x5011}, //13660 #CJK UNIFIED IDEOGRAPH + {0xD9FB, 0x520E}, //13661 #CJK UNIFIED IDEOGRAPH + {0xD9FC, 0x543B}, //13662 #CJK UNIFIED IDEOGRAPH + {0xD9FD, 0x554F}, //13663 #CJK UNIFIED IDEOGRAPH + {0xD9FE, 0x6587}, //13664 #CJK UNIFIED IDEOGRAPH + {0xDAA1, 0x6C76}, //13665 #CJK UNIFIED IDEOGRAPH + {0xDAA2, 0x7D0A}, //13666 #CJK UNIFIED IDEOGRAPH + {0xDAA3, 0x7D0B}, //13667 #CJK UNIFIED IDEOGRAPH + {0xDAA4, 0x805E}, //13668 #CJK UNIFIED IDEOGRAPH + {0xDAA5, 0x868A}, //13669 #CJK UNIFIED IDEOGRAPH + {0xDAA6, 0x9580}, //13670 #CJK UNIFIED IDEOGRAPH + {0xDAA7, 0x96EF}, //13671 #CJK UNIFIED IDEOGRAPH + {0xDAA8, 0x52FF}, //13672 #CJK UNIFIED IDEOGRAPH + {0xDAA9, 0x6C95}, //13673 #CJK UNIFIED IDEOGRAPH + {0xDAAA, 0x7269}, //13674 #CJK UNIFIED IDEOGRAPH + {0xDAAB, 0x5473}, //13675 #CJK UNIFIED IDEOGRAPH + {0xDAAC, 0x5A9A}, //13676 #CJK UNIFIED IDEOGRAPH + {0xDAAD, 0x5C3E}, //13677 #CJK UNIFIED IDEOGRAPH + {0xDAAE, 0x5D4B}, //13678 #CJK UNIFIED IDEOGRAPH + {0xDAAF, 0x5F4C}, //13679 #CJK UNIFIED IDEOGRAPH + {0xDAB0, 0x5FAE}, //13680 #CJK UNIFIED IDEOGRAPH + {0xDAB1, 0x672A}, //13681 #CJK UNIFIED IDEOGRAPH + {0xDAB2, 0x68B6}, //13682 #CJK UNIFIED IDEOGRAPH + {0xDAB3, 0x6963}, //13683 #CJK UNIFIED IDEOGRAPH + {0xDAB4, 0x6E3C}, //13684 #CJK UNIFIED IDEOGRAPH + {0xDAB5, 0x6E44}, //13685 #CJK UNIFIED IDEOGRAPH + {0xDAB6, 0x7709}, //13686 #CJK UNIFIED IDEOGRAPH + {0xDAB7, 0x7C73}, //13687 #CJK UNIFIED IDEOGRAPH + {0xDAB8, 0x7F8E}, //13688 #CJK UNIFIED IDEOGRAPH + {0xDAB9, 0x8587}, //13689 #CJK UNIFIED IDEOGRAPH + {0xDABA, 0x8B0E}, //13690 #CJK UNIFIED IDEOGRAPH + {0xDABB, 0x8FF7}, //13691 #CJK UNIFIED IDEOGRAPH + {0xDABC, 0x9761}, //13692 #CJK UNIFIED IDEOGRAPH + {0xDABD, 0x9EF4}, //13693 #CJK UNIFIED IDEOGRAPH + {0xDABE, 0x5CB7}, //13694 #CJK UNIFIED IDEOGRAPH + {0xDABF, 0x60B6}, //13695 #CJK UNIFIED IDEOGRAPH + {0xDAC0, 0x610D}, //13696 #CJK UNIFIED IDEOGRAPH + {0xDAC1, 0x61AB}, //13697 #CJK UNIFIED IDEOGRAPH + {0xDAC2, 0x654F}, //13698 #CJK UNIFIED IDEOGRAPH + {0xDAC3, 0x65FB}, //13699 #CJK UNIFIED IDEOGRAPH + {0xDAC4, 0x65FC}, //13700 #CJK UNIFIED IDEOGRAPH + {0xDAC5, 0x6C11}, //13701 #CJK UNIFIED IDEOGRAPH + {0xDAC6, 0x6CEF}, //13702 #CJK UNIFIED IDEOGRAPH + {0xDAC7, 0x739F}, //13703 #CJK UNIFIED IDEOGRAPH + {0xDAC8, 0x73C9}, //13704 #CJK UNIFIED IDEOGRAPH + {0xDAC9, 0x7DE1}, //13705 #CJK UNIFIED IDEOGRAPH + {0xDACA, 0x9594}, //13706 #CJK UNIFIED IDEOGRAPH + {0xDACB, 0x5BC6}, //13707 #CJK UNIFIED IDEOGRAPH + {0xDACC, 0x871C}, //13708 #CJK UNIFIED IDEOGRAPH + {0xDACD, 0x8B10}, //13709 #CJK UNIFIED IDEOGRAPH + {0xDACE, 0x525D}, //13710 #CJK UNIFIED IDEOGRAPH + {0xDACF, 0x535A}, //13711 #CJK UNIFIED IDEOGRAPH + {0xDAD0, 0x62CD}, //13712 #CJK UNIFIED IDEOGRAPH + {0xDAD1, 0x640F}, //13713 #CJK UNIFIED IDEOGRAPH + {0xDAD2, 0x64B2}, //13714 #CJK UNIFIED IDEOGRAPH + {0xDAD3, 0x6734}, //13715 #CJK UNIFIED IDEOGRAPH + {0xDAD4, 0x6A38}, //13716 #CJK UNIFIED IDEOGRAPH + {0xDAD5, 0x6CCA}, //13717 #CJK UNIFIED IDEOGRAPH + {0xDAD6, 0x73C0}, //13718 #CJK UNIFIED IDEOGRAPH + {0xDAD7, 0x749E}, //13719 #CJK UNIFIED IDEOGRAPH + {0xDAD8, 0x7B94}, //13720 #CJK UNIFIED IDEOGRAPH + {0xDAD9, 0x7C95}, //13721 #CJK UNIFIED IDEOGRAPH + {0xDADA, 0x7E1B}, //13722 #CJK UNIFIED IDEOGRAPH + {0xDADB, 0x818A}, //13723 #CJK UNIFIED IDEOGRAPH + {0xDADC, 0x8236}, //13724 #CJK UNIFIED IDEOGRAPH + {0xDADD, 0x8584}, //13725 #CJK UNIFIED IDEOGRAPH + {0xDADE, 0x8FEB}, //13726 #CJK UNIFIED IDEOGRAPH + {0xDADF, 0x96F9}, //13727 #CJK UNIFIED IDEOGRAPH + {0xDAE0, 0x99C1}, //13728 #CJK UNIFIED IDEOGRAPH + {0xDAE1, 0x4F34}, //13729 #CJK UNIFIED IDEOGRAPH + {0xDAE2, 0x534A}, //13730 #CJK UNIFIED IDEOGRAPH + {0xDAE3, 0x53CD}, //13731 #CJK UNIFIED IDEOGRAPH + {0xDAE4, 0x53DB}, //13732 #CJK UNIFIED IDEOGRAPH + {0xDAE5, 0x62CC}, //13733 #CJK UNIFIED IDEOGRAPH + {0xDAE6, 0x642C}, //13734 #CJK UNIFIED IDEOGRAPH + {0xDAE7, 0x6500}, //13735 #CJK UNIFIED IDEOGRAPH + {0xDAE8, 0x6591}, //13736 #CJK UNIFIED IDEOGRAPH + {0xDAE9, 0x69C3}, //13737 #CJK UNIFIED IDEOGRAPH + {0xDAEA, 0x6CEE}, //13738 #CJK UNIFIED IDEOGRAPH + {0xDAEB, 0x6F58}, //13739 #CJK UNIFIED IDEOGRAPH + {0xDAEC, 0x73ED}, //13740 #CJK UNIFIED IDEOGRAPH + {0xDAED, 0x7554}, //13741 #CJK UNIFIED IDEOGRAPH + {0xDAEE, 0x7622}, //13742 #CJK UNIFIED IDEOGRAPH + {0xDAEF, 0x76E4}, //13743 #CJK UNIFIED IDEOGRAPH + {0xDAF0, 0x76FC}, //13744 #CJK UNIFIED IDEOGRAPH + {0xDAF1, 0x78D0}, //13745 #CJK UNIFIED IDEOGRAPH + {0xDAF2, 0x78FB}, //13746 #CJK UNIFIED IDEOGRAPH + {0xDAF3, 0x792C}, //13747 #CJK UNIFIED IDEOGRAPH + {0xDAF4, 0x7D46}, //13748 #CJK UNIFIED IDEOGRAPH + {0xDAF5, 0x822C}, //13749 #CJK UNIFIED IDEOGRAPH + {0xDAF6, 0x87E0}, //13750 #CJK UNIFIED IDEOGRAPH + {0xDAF7, 0x8FD4}, //13751 #CJK UNIFIED IDEOGRAPH + {0xDAF8, 0x9812}, //13752 #CJK UNIFIED IDEOGRAPH + {0xDAF9, 0x98EF}, //13753 #CJK UNIFIED IDEOGRAPH + {0xDAFA, 0x52C3}, //13754 #CJK UNIFIED IDEOGRAPH + {0xDAFB, 0x62D4}, //13755 #CJK UNIFIED IDEOGRAPH + {0xDAFC, 0x64A5}, //13756 #CJK UNIFIED IDEOGRAPH + {0xDAFD, 0x6E24}, //13757 #CJK UNIFIED IDEOGRAPH + {0xDAFE, 0x6F51}, //13758 #CJK UNIFIED IDEOGRAPH + {0xDBA1, 0x767C}, //13759 #CJK UNIFIED IDEOGRAPH + {0xDBA2, 0x8DCB}, //13760 #CJK UNIFIED IDEOGRAPH + {0xDBA3, 0x91B1}, //13761 #CJK UNIFIED IDEOGRAPH + {0xDBA4, 0x9262}, //13762 #CJK UNIFIED IDEOGRAPH + {0xDBA5, 0x9AEE}, //13763 #CJK UNIFIED IDEOGRAPH + {0xDBA6, 0x9B43}, //13764 #CJK UNIFIED IDEOGRAPH + {0xDBA7, 0x5023}, //13765 #CJK UNIFIED IDEOGRAPH + {0xDBA8, 0x508D}, //13766 #CJK UNIFIED IDEOGRAPH + {0xDBA9, 0x574A}, //13767 #CJK UNIFIED IDEOGRAPH + {0xDBAA, 0x59A8}, //13768 #CJK UNIFIED IDEOGRAPH + {0xDBAB, 0x5C28}, //13769 #CJK UNIFIED IDEOGRAPH + {0xDBAC, 0x5E47}, //13770 #CJK UNIFIED IDEOGRAPH + {0xDBAD, 0x5F77}, //13771 #CJK UNIFIED IDEOGRAPH + {0xDBAE, 0x623F}, //13772 #CJK UNIFIED IDEOGRAPH + {0xDBAF, 0x653E}, //13773 #CJK UNIFIED IDEOGRAPH + {0xDBB0, 0x65B9}, //13774 #CJK UNIFIED IDEOGRAPH + {0xDBB1, 0x65C1}, //13775 #CJK UNIFIED IDEOGRAPH + {0xDBB2, 0x6609}, //13776 #CJK UNIFIED IDEOGRAPH + {0xDBB3, 0x678B}, //13777 #CJK UNIFIED IDEOGRAPH + {0xDBB4, 0x699C}, //13778 #CJK UNIFIED IDEOGRAPH + {0xDBB5, 0x6EC2}, //13779 #CJK UNIFIED IDEOGRAPH + {0xDBB6, 0x78C5}, //13780 #CJK UNIFIED IDEOGRAPH + {0xDBB7, 0x7D21}, //13781 #CJK UNIFIED IDEOGRAPH + {0xDBB8, 0x80AA}, //13782 #CJK UNIFIED IDEOGRAPH + {0xDBB9, 0x8180}, //13783 #CJK UNIFIED IDEOGRAPH + {0xDBBA, 0x822B}, //13784 #CJK UNIFIED IDEOGRAPH + {0xDBBB, 0x82B3}, //13785 #CJK UNIFIED IDEOGRAPH + {0xDBBC, 0x84A1}, //13786 #CJK UNIFIED IDEOGRAPH + {0xDBBD, 0x868C}, //13787 #CJK UNIFIED IDEOGRAPH + {0xDBBE, 0x8A2A}, //13788 #CJK UNIFIED IDEOGRAPH + {0xDBBF, 0x8B17}, //13789 #CJK UNIFIED IDEOGRAPH + {0xDBC0, 0x90A6}, //13790 #CJK UNIFIED IDEOGRAPH + {0xDBC1, 0x9632}, //13791 #CJK UNIFIED IDEOGRAPH + {0xDBC2, 0x9F90}, //13792 #CJK UNIFIED IDEOGRAPH + {0xDBC3, 0x500D}, //13793 #CJK UNIFIED IDEOGRAPH + {0xDBC4, 0x4FF3}, //13794 #CJK UNIFIED IDEOGRAPH + {0xDBC5, 0xF963}, //13795 #CJK COMPATIBILITY IDEOGRAPH + {0xDBC6, 0x57F9}, //13796 #CJK UNIFIED IDEOGRAPH + {0xDBC7, 0x5F98}, //13797 #CJK UNIFIED IDEOGRAPH + {0xDBC8, 0x62DC}, //13798 #CJK UNIFIED IDEOGRAPH + {0xDBC9, 0x6392}, //13799 #CJK UNIFIED IDEOGRAPH + {0xDBCA, 0x676F}, //13800 #CJK UNIFIED IDEOGRAPH + {0xDBCB, 0x6E43}, //13801 #CJK UNIFIED IDEOGRAPH + {0xDBCC, 0x7119}, //13802 #CJK UNIFIED IDEOGRAPH + {0xDBCD, 0x76C3}, //13803 #CJK UNIFIED IDEOGRAPH + {0xDBCE, 0x80CC}, //13804 #CJK UNIFIED IDEOGRAPH + {0xDBCF, 0x80DA}, //13805 #CJK UNIFIED IDEOGRAPH + {0xDBD0, 0x88F4}, //13806 #CJK UNIFIED IDEOGRAPH + {0xDBD1, 0x88F5}, //13807 #CJK UNIFIED IDEOGRAPH + {0xDBD2, 0x8919}, //13808 #CJK UNIFIED IDEOGRAPH + {0xDBD3, 0x8CE0}, //13809 #CJK UNIFIED IDEOGRAPH + {0xDBD4, 0x8F29}, //13810 #CJK UNIFIED IDEOGRAPH + {0xDBD5, 0x914D}, //13811 #CJK UNIFIED IDEOGRAPH + {0xDBD6, 0x966A}, //13812 #CJK UNIFIED IDEOGRAPH + {0xDBD7, 0x4F2F}, //13813 #CJK UNIFIED IDEOGRAPH + {0xDBD8, 0x4F70}, //13814 #CJK UNIFIED IDEOGRAPH + {0xDBD9, 0x5E1B}, //13815 #CJK UNIFIED IDEOGRAPH + {0xDBDA, 0x67CF}, //13816 #CJK UNIFIED IDEOGRAPH + {0xDBDB, 0x6822}, //13817 #CJK UNIFIED IDEOGRAPH + {0xDBDC, 0x767D}, //13818 #CJK UNIFIED IDEOGRAPH + {0xDBDD, 0x767E}, //13819 #CJK UNIFIED IDEOGRAPH + {0xDBDE, 0x9B44}, //13820 #CJK UNIFIED IDEOGRAPH + {0xDBDF, 0x5E61}, //13821 #CJK UNIFIED IDEOGRAPH + {0xDBE0, 0x6A0A}, //13822 #CJK UNIFIED IDEOGRAPH + {0xDBE1, 0x7169}, //13823 #CJK UNIFIED IDEOGRAPH + {0xDBE2, 0x71D4}, //13824 #CJK UNIFIED IDEOGRAPH + {0xDBE3, 0x756A}, //13825 #CJK UNIFIED IDEOGRAPH + {0xDBE4, 0xF964}, //13826 #CJK COMPATIBILITY IDEOGRAPH + {0xDBE5, 0x7E41}, //13827 #CJK UNIFIED IDEOGRAPH + {0xDBE6, 0x8543}, //13828 #CJK UNIFIED IDEOGRAPH + {0xDBE7, 0x85E9}, //13829 #CJK UNIFIED IDEOGRAPH + {0xDBE8, 0x98DC}, //13830 #CJK UNIFIED IDEOGRAPH + {0xDBE9, 0x4F10}, //13831 #CJK UNIFIED IDEOGRAPH + {0xDBEA, 0x7B4F}, //13832 #CJK UNIFIED IDEOGRAPH + {0xDBEB, 0x7F70}, //13833 #CJK UNIFIED IDEOGRAPH + {0xDBEC, 0x95A5}, //13834 #CJK UNIFIED IDEOGRAPH + {0xDBED, 0x51E1}, //13835 #CJK UNIFIED IDEOGRAPH + {0xDBEE, 0x5E06}, //13836 #CJK UNIFIED IDEOGRAPH + {0xDBEF, 0x68B5}, //13837 #CJK UNIFIED IDEOGRAPH + {0xDBF0, 0x6C3E}, //13838 #CJK UNIFIED IDEOGRAPH + {0xDBF1, 0x6C4E}, //13839 #CJK UNIFIED IDEOGRAPH + {0xDBF2, 0x6CDB}, //13840 #CJK UNIFIED IDEOGRAPH + {0xDBF3, 0x72AF}, //13841 #CJK UNIFIED IDEOGRAPH + {0xDBF4, 0x7BC4}, //13842 #CJK UNIFIED IDEOGRAPH + {0xDBF5, 0x8303}, //13843 #CJK UNIFIED IDEOGRAPH + {0xDBF6, 0x6CD5}, //13844 #CJK UNIFIED IDEOGRAPH + {0xDBF7, 0x743A}, //13845 #CJK UNIFIED IDEOGRAPH + {0xDBF8, 0x50FB}, //13846 #CJK UNIFIED IDEOGRAPH + {0xDBF9, 0x5288}, //13847 #CJK UNIFIED IDEOGRAPH + {0xDBFA, 0x58C1}, //13848 #CJK UNIFIED IDEOGRAPH + {0xDBFB, 0x64D8}, //13849 #CJK UNIFIED IDEOGRAPH + {0xDBFC, 0x6A97}, //13850 #CJK UNIFIED IDEOGRAPH + {0xDBFD, 0x74A7}, //13851 #CJK UNIFIED IDEOGRAPH + {0xDBFE, 0x7656}, //13852 #CJK UNIFIED IDEOGRAPH + {0xDCA1, 0x78A7}, //13853 #CJK UNIFIED IDEOGRAPH + {0xDCA2, 0x8617}, //13854 #CJK UNIFIED IDEOGRAPH + {0xDCA3, 0x95E2}, //13855 #CJK UNIFIED IDEOGRAPH + {0xDCA4, 0x9739}, //13856 #CJK UNIFIED IDEOGRAPH + {0xDCA5, 0xF965}, //13857 #CJK COMPATIBILITY IDEOGRAPH + {0xDCA6, 0x535E}, //13858 #CJK UNIFIED IDEOGRAPH + {0xDCA7, 0x5F01}, //13859 #CJK UNIFIED IDEOGRAPH + {0xDCA8, 0x8B8A}, //13860 #CJK UNIFIED IDEOGRAPH + {0xDCA9, 0x8FA8}, //13861 #CJK UNIFIED IDEOGRAPH + {0xDCAA, 0x8FAF}, //13862 #CJK UNIFIED IDEOGRAPH + {0xDCAB, 0x908A}, //13863 #CJK UNIFIED IDEOGRAPH + {0xDCAC, 0x5225}, //13864 #CJK UNIFIED IDEOGRAPH + {0xDCAD, 0x77A5}, //13865 #CJK UNIFIED IDEOGRAPH + {0xDCAE, 0x9C49}, //13866 #CJK UNIFIED IDEOGRAPH + {0xDCAF, 0x9F08}, //13867 #CJK UNIFIED IDEOGRAPH + {0xDCB0, 0x4E19}, //13868 #CJK UNIFIED IDEOGRAPH + {0xDCB1, 0x5002}, //13869 #CJK UNIFIED IDEOGRAPH + {0xDCB2, 0x5175}, //13870 #CJK UNIFIED IDEOGRAPH + {0xDCB3, 0x5C5B}, //13871 #CJK UNIFIED IDEOGRAPH + {0xDCB4, 0x5E77}, //13872 #CJK UNIFIED IDEOGRAPH + {0xDCB5, 0x661E}, //13873 #CJK UNIFIED IDEOGRAPH + {0xDCB6, 0x663A}, //13874 #CJK UNIFIED IDEOGRAPH + {0xDCB7, 0x67C4}, //13875 #CJK UNIFIED IDEOGRAPH + {0xDCB8, 0x68C5}, //13876 #CJK UNIFIED IDEOGRAPH + {0xDCB9, 0x70B3}, //13877 #CJK UNIFIED IDEOGRAPH + {0xDCBA, 0x7501}, //13878 #CJK UNIFIED IDEOGRAPH + {0xDCBB, 0x75C5}, //13879 #CJK UNIFIED IDEOGRAPH + {0xDCBC, 0x79C9}, //13880 #CJK UNIFIED IDEOGRAPH + {0xDCBD, 0x7ADD}, //13881 #CJK UNIFIED IDEOGRAPH + {0xDCBE, 0x8F27}, //13882 #CJK UNIFIED IDEOGRAPH + {0xDCBF, 0x9920}, //13883 #CJK UNIFIED IDEOGRAPH + {0xDCC0, 0x9A08}, //13884 #CJK UNIFIED IDEOGRAPH + {0xDCC1, 0x4FDD}, //13885 #CJK UNIFIED IDEOGRAPH + {0xDCC2, 0x5821}, //13886 #CJK UNIFIED IDEOGRAPH + {0xDCC3, 0x5831}, //13887 #CJK UNIFIED IDEOGRAPH + {0xDCC4, 0x5BF6}, //13888 #CJK UNIFIED IDEOGRAPH + {0xDCC5, 0x666E}, //13889 #CJK UNIFIED IDEOGRAPH + {0xDCC6, 0x6B65}, //13890 #CJK UNIFIED IDEOGRAPH + {0xDCC7, 0x6D11}, //13891 #CJK UNIFIED IDEOGRAPH + {0xDCC8, 0x6E7A}, //13892 #CJK UNIFIED IDEOGRAPH + {0xDCC9, 0x6F7D}, //13893 #CJK UNIFIED IDEOGRAPH + {0xDCCA, 0x73E4}, //13894 #CJK UNIFIED IDEOGRAPH + {0xDCCB, 0x752B}, //13895 #CJK UNIFIED IDEOGRAPH + {0xDCCC, 0x83E9}, //13896 #CJK UNIFIED IDEOGRAPH + {0xDCCD, 0x88DC}, //13897 #CJK UNIFIED IDEOGRAPH + {0xDCCE, 0x8913}, //13898 #CJK UNIFIED IDEOGRAPH + {0xDCCF, 0x8B5C}, //13899 #CJK UNIFIED IDEOGRAPH + {0xDCD0, 0x8F14}, //13900 #CJK UNIFIED IDEOGRAPH + {0xDCD1, 0x4F0F}, //13901 #CJK UNIFIED IDEOGRAPH + {0xDCD2, 0x50D5}, //13902 #CJK UNIFIED IDEOGRAPH + {0xDCD3, 0x5310}, //13903 #CJK UNIFIED IDEOGRAPH + {0xDCD4, 0x535C}, //13904 #CJK UNIFIED IDEOGRAPH + {0xDCD5, 0x5B93}, //13905 #CJK UNIFIED IDEOGRAPH + {0xDCD6, 0x5FA9}, //13906 #CJK UNIFIED IDEOGRAPH + {0xDCD7, 0x670D}, //13907 #CJK UNIFIED IDEOGRAPH + {0xDCD8, 0x798F}, //13908 #CJK UNIFIED IDEOGRAPH + {0xDCD9, 0x8179}, //13909 #CJK UNIFIED IDEOGRAPH + {0xDCDA, 0x832F}, //13910 #CJK UNIFIED IDEOGRAPH + {0xDCDB, 0x8514}, //13911 #CJK UNIFIED IDEOGRAPH + {0xDCDC, 0x8907}, //13912 #CJK UNIFIED IDEOGRAPH + {0xDCDD, 0x8986}, //13913 #CJK UNIFIED IDEOGRAPH + {0xDCDE, 0x8F39}, //13914 #CJK UNIFIED IDEOGRAPH + {0xDCDF, 0x8F3B}, //13915 #CJK UNIFIED IDEOGRAPH + {0xDCE0, 0x99A5}, //13916 #CJK UNIFIED IDEOGRAPH + {0xDCE1, 0x9C12}, //13917 #CJK UNIFIED IDEOGRAPH + {0xDCE2, 0x672C}, //13918 #CJK UNIFIED IDEOGRAPH + {0xDCE3, 0x4E76}, //13919 #CJK UNIFIED IDEOGRAPH + {0xDCE4, 0x4FF8}, //13920 #CJK UNIFIED IDEOGRAPH + {0xDCE5, 0x5949}, //13921 #CJK UNIFIED IDEOGRAPH + {0xDCE6, 0x5C01}, //13922 #CJK UNIFIED IDEOGRAPH + {0xDCE7, 0x5CEF}, //13923 #CJK UNIFIED IDEOGRAPH + {0xDCE8, 0x5CF0}, //13924 #CJK UNIFIED IDEOGRAPH + {0xDCE9, 0x6367}, //13925 #CJK UNIFIED IDEOGRAPH + {0xDCEA, 0x68D2}, //13926 #CJK UNIFIED IDEOGRAPH + {0xDCEB, 0x70FD}, //13927 #CJK UNIFIED IDEOGRAPH + {0xDCEC, 0x71A2}, //13928 #CJK UNIFIED IDEOGRAPH + {0xDCED, 0x742B}, //13929 #CJK UNIFIED IDEOGRAPH + {0xDCEE, 0x7E2B}, //13930 #CJK UNIFIED IDEOGRAPH + {0xDCEF, 0x84EC}, //13931 #CJK UNIFIED IDEOGRAPH + {0xDCF0, 0x8702}, //13932 #CJK UNIFIED IDEOGRAPH + {0xDCF1, 0x9022}, //13933 #CJK UNIFIED IDEOGRAPH + {0xDCF2, 0x92D2}, //13934 #CJK UNIFIED IDEOGRAPH + {0xDCF3, 0x9CF3}, //13935 #CJK UNIFIED IDEOGRAPH + {0xDCF4, 0x4E0D}, //13936 #CJK UNIFIED IDEOGRAPH + {0xDCF5, 0x4ED8}, //13937 #CJK UNIFIED IDEOGRAPH + {0xDCF6, 0x4FEF}, //13938 #CJK UNIFIED IDEOGRAPH + {0xDCF7, 0x5085}, //13939 #CJK UNIFIED IDEOGRAPH + {0xDCF8, 0x5256}, //13940 #CJK UNIFIED IDEOGRAPH + {0xDCF9, 0x526F}, //13941 #CJK UNIFIED IDEOGRAPH + {0xDCFA, 0x5426}, //13942 #CJK UNIFIED IDEOGRAPH + {0xDCFB, 0x5490}, //13943 #CJK UNIFIED IDEOGRAPH + {0xDCFC, 0x57E0}, //13944 #CJK UNIFIED IDEOGRAPH + {0xDCFD, 0x592B}, //13945 #CJK UNIFIED IDEOGRAPH + {0xDCFE, 0x5A66}, //13946 #CJK UNIFIED IDEOGRAPH + {0xDDA1, 0x5B5A}, //13947 #CJK UNIFIED IDEOGRAPH + {0xDDA2, 0x5B75}, //13948 #CJK UNIFIED IDEOGRAPH + {0xDDA3, 0x5BCC}, //13949 #CJK UNIFIED IDEOGRAPH + {0xDDA4, 0x5E9C}, //13950 #CJK UNIFIED IDEOGRAPH + {0xDDA5, 0xF966}, //13951 #CJK COMPATIBILITY IDEOGRAPH + {0xDDA6, 0x6276}, //13952 #CJK UNIFIED IDEOGRAPH + {0xDDA7, 0x6577}, //13953 #CJK UNIFIED IDEOGRAPH + {0xDDA8, 0x65A7}, //13954 #CJK UNIFIED IDEOGRAPH + {0xDDA9, 0x6D6E}, //13955 #CJK UNIFIED IDEOGRAPH + {0xDDAA, 0x6EA5}, //13956 #CJK UNIFIED IDEOGRAPH + {0xDDAB, 0x7236}, //13957 #CJK UNIFIED IDEOGRAPH + {0xDDAC, 0x7B26}, //13958 #CJK UNIFIED IDEOGRAPH + {0xDDAD, 0x7C3F}, //13959 #CJK UNIFIED IDEOGRAPH + {0xDDAE, 0x7F36}, //13960 #CJK UNIFIED IDEOGRAPH + {0xDDAF, 0x8150}, //13961 #CJK UNIFIED IDEOGRAPH + {0xDDB0, 0x8151}, //13962 #CJK UNIFIED IDEOGRAPH + {0xDDB1, 0x819A}, //13963 #CJK UNIFIED IDEOGRAPH + {0xDDB2, 0x8240}, //13964 #CJK UNIFIED IDEOGRAPH + {0xDDB3, 0x8299}, //13965 #CJK UNIFIED IDEOGRAPH + {0xDDB4, 0x83A9}, //13966 #CJK UNIFIED IDEOGRAPH + {0xDDB5, 0x8A03}, //13967 #CJK UNIFIED IDEOGRAPH + {0xDDB6, 0x8CA0}, //13968 #CJK UNIFIED IDEOGRAPH + {0xDDB7, 0x8CE6}, //13969 #CJK UNIFIED IDEOGRAPH + {0xDDB8, 0x8CFB}, //13970 #CJK UNIFIED IDEOGRAPH + {0xDDB9, 0x8D74}, //13971 #CJK UNIFIED IDEOGRAPH + {0xDDBA, 0x8DBA}, //13972 #CJK UNIFIED IDEOGRAPH + {0xDDBB, 0x90E8}, //13973 #CJK UNIFIED IDEOGRAPH + {0xDDBC, 0x91DC}, //13974 #CJK UNIFIED IDEOGRAPH + {0xDDBD, 0x961C}, //13975 #CJK UNIFIED IDEOGRAPH + {0xDDBE, 0x9644}, //13976 #CJK UNIFIED IDEOGRAPH + {0xDDBF, 0x99D9}, //13977 #CJK UNIFIED IDEOGRAPH + {0xDDC0, 0x9CE7}, //13978 #CJK UNIFIED IDEOGRAPH + {0xDDC1, 0x5317}, //13979 #CJK UNIFIED IDEOGRAPH + {0xDDC2, 0x5206}, //13980 #CJK UNIFIED IDEOGRAPH + {0xDDC3, 0x5429}, //13981 #CJK UNIFIED IDEOGRAPH + {0xDDC4, 0x5674}, //13982 #CJK UNIFIED IDEOGRAPH + {0xDDC5, 0x58B3}, //13983 #CJK UNIFIED IDEOGRAPH + {0xDDC6, 0x5954}, //13984 #CJK UNIFIED IDEOGRAPH + {0xDDC7, 0x596E}, //13985 #CJK UNIFIED IDEOGRAPH + {0xDDC8, 0x5FFF}, //13986 #CJK UNIFIED IDEOGRAPH + {0xDDC9, 0x61A4}, //13987 #CJK UNIFIED IDEOGRAPH + {0xDDCA, 0x626E}, //13988 #CJK UNIFIED IDEOGRAPH + {0xDDCB, 0x6610}, //13989 #CJK UNIFIED IDEOGRAPH + {0xDDCC, 0x6C7E}, //13990 #CJK UNIFIED IDEOGRAPH + {0xDDCD, 0x711A}, //13991 #CJK UNIFIED IDEOGRAPH + {0xDDCE, 0x76C6}, //13992 #CJK UNIFIED IDEOGRAPH + {0xDDCF, 0x7C89}, //13993 #CJK UNIFIED IDEOGRAPH + {0xDDD0, 0x7CDE}, //13994 #CJK UNIFIED IDEOGRAPH + {0xDDD1, 0x7D1B}, //13995 #CJK UNIFIED IDEOGRAPH + {0xDDD2, 0x82AC}, //13996 #CJK UNIFIED IDEOGRAPH + {0xDDD3, 0x8CC1}, //13997 #CJK UNIFIED IDEOGRAPH + {0xDDD4, 0x96F0}, //13998 #CJK UNIFIED IDEOGRAPH + {0xDDD5, 0xF967}, //13999 #CJK COMPATIBILITY IDEOGRAPH + {0xDDD6, 0x4F5B}, //14000 #CJK UNIFIED IDEOGRAPH + {0xDDD7, 0x5F17}, //14001 #CJK UNIFIED IDEOGRAPH + {0xDDD8, 0x5F7F}, //14002 #CJK UNIFIED IDEOGRAPH + {0xDDD9, 0x62C2}, //14003 #CJK UNIFIED IDEOGRAPH + {0xDDDA, 0x5D29}, //14004 #CJK UNIFIED IDEOGRAPH + {0xDDDB, 0x670B}, //14005 #CJK UNIFIED IDEOGRAPH + {0xDDDC, 0x68DA}, //14006 #CJK UNIFIED IDEOGRAPH + {0xDDDD, 0x787C}, //14007 #CJK UNIFIED IDEOGRAPH + {0xDDDE, 0x7E43}, //14008 #CJK UNIFIED IDEOGRAPH + {0xDDDF, 0x9D6C}, //14009 #CJK UNIFIED IDEOGRAPH + {0xDDE0, 0x4E15}, //14010 #CJK UNIFIED IDEOGRAPH + {0xDDE1, 0x5099}, //14011 #CJK UNIFIED IDEOGRAPH + {0xDDE2, 0x5315}, //14012 #CJK UNIFIED IDEOGRAPH + {0xDDE3, 0x532A}, //14013 #CJK UNIFIED IDEOGRAPH + {0xDDE4, 0x5351}, //14014 #CJK UNIFIED IDEOGRAPH + {0xDDE5, 0x5983}, //14015 #CJK UNIFIED IDEOGRAPH + {0xDDE6, 0x5A62}, //14016 #CJK UNIFIED IDEOGRAPH + {0xDDE7, 0x5E87}, //14017 #CJK UNIFIED IDEOGRAPH + {0xDDE8, 0x60B2}, //14018 #CJK UNIFIED IDEOGRAPH + {0xDDE9, 0x618A}, //14019 #CJK UNIFIED IDEOGRAPH + {0xDDEA, 0x6249}, //14020 #CJK UNIFIED IDEOGRAPH + {0xDDEB, 0x6279}, //14021 #CJK UNIFIED IDEOGRAPH + {0xDDEC, 0x6590}, //14022 #CJK UNIFIED IDEOGRAPH + {0xDDED, 0x6787}, //14023 #CJK UNIFIED IDEOGRAPH + {0xDDEE, 0x69A7}, //14024 #CJK UNIFIED IDEOGRAPH + {0xDDEF, 0x6BD4}, //14025 #CJK UNIFIED IDEOGRAPH + {0xDDF0, 0x6BD6}, //14026 #CJK UNIFIED IDEOGRAPH + {0xDDF1, 0x6BD7}, //14027 #CJK UNIFIED IDEOGRAPH + {0xDDF2, 0x6BD8}, //14028 #CJK UNIFIED IDEOGRAPH + {0xDDF3, 0x6CB8}, //14029 #CJK UNIFIED IDEOGRAPH + {0xDDF4, 0xF968}, //14030 #CJK COMPATIBILITY IDEOGRAPH + {0xDDF5, 0x7435}, //14031 #CJK UNIFIED IDEOGRAPH + {0xDDF6, 0x75FA}, //14032 #CJK UNIFIED IDEOGRAPH + {0xDDF7, 0x7812}, //14033 #CJK UNIFIED IDEOGRAPH + {0xDDF8, 0x7891}, //14034 #CJK UNIFIED IDEOGRAPH + {0xDDF9, 0x79D5}, //14035 #CJK UNIFIED IDEOGRAPH + {0xDDFA, 0x79D8}, //14036 #CJK UNIFIED IDEOGRAPH + {0xDDFB, 0x7C83}, //14037 #CJK UNIFIED IDEOGRAPH + {0xDDFC, 0x7DCB}, //14038 #CJK UNIFIED IDEOGRAPH + {0xDDFD, 0x7FE1}, //14039 #CJK UNIFIED IDEOGRAPH + {0xDDFE, 0x80A5}, //14040 #CJK UNIFIED IDEOGRAPH + {0xDEA1, 0x813E}, //14041 #CJK UNIFIED IDEOGRAPH + {0xDEA2, 0x81C2}, //14042 #CJK UNIFIED IDEOGRAPH + {0xDEA3, 0x83F2}, //14043 #CJK UNIFIED IDEOGRAPH + {0xDEA4, 0x871A}, //14044 #CJK UNIFIED IDEOGRAPH + {0xDEA5, 0x88E8}, //14045 #CJK UNIFIED IDEOGRAPH + {0xDEA6, 0x8AB9}, //14046 #CJK UNIFIED IDEOGRAPH + {0xDEA7, 0x8B6C}, //14047 #CJK UNIFIED IDEOGRAPH + {0xDEA8, 0x8CBB}, //14048 #CJK UNIFIED IDEOGRAPH + {0xDEA9, 0x9119}, //14049 #CJK UNIFIED IDEOGRAPH + {0xDEAA, 0x975E}, //14050 #CJK UNIFIED IDEOGRAPH + {0xDEAB, 0x98DB}, //14051 #CJK UNIFIED IDEOGRAPH + {0xDEAC, 0x9F3B}, //14052 #CJK UNIFIED IDEOGRAPH + {0xDEAD, 0x56AC}, //14053 #CJK UNIFIED IDEOGRAPH + {0xDEAE, 0x5B2A}, //14054 #CJK UNIFIED IDEOGRAPH + {0xDEAF, 0x5F6C}, //14055 #CJK UNIFIED IDEOGRAPH + {0xDEB0, 0x658C}, //14056 #CJK UNIFIED IDEOGRAPH + {0xDEB1, 0x6AB3}, //14057 #CJK UNIFIED IDEOGRAPH + {0xDEB2, 0x6BAF}, //14058 #CJK UNIFIED IDEOGRAPH + {0xDEB3, 0x6D5C}, //14059 #CJK UNIFIED IDEOGRAPH + {0xDEB4, 0x6FF1}, //14060 #CJK UNIFIED IDEOGRAPH + {0xDEB5, 0x7015}, //14061 #CJK UNIFIED IDEOGRAPH + {0xDEB6, 0x725D}, //14062 #CJK UNIFIED IDEOGRAPH + {0xDEB7, 0x73AD}, //14063 #CJK UNIFIED IDEOGRAPH + {0xDEB8, 0x8CA7}, //14064 #CJK UNIFIED IDEOGRAPH + {0xDEB9, 0x8CD3}, //14065 #CJK UNIFIED IDEOGRAPH + {0xDEBA, 0x983B}, //14066 #CJK UNIFIED IDEOGRAPH + {0xDEBB, 0x6191}, //14067 #CJK UNIFIED IDEOGRAPH + {0xDEBC, 0x6C37}, //14068 #CJK UNIFIED IDEOGRAPH + {0xDEBD, 0x8058}, //14069 #CJK UNIFIED IDEOGRAPH + {0xDEBE, 0x9A01}, //14070 #CJK UNIFIED IDEOGRAPH + {0xDEBF, 0x4E4D}, //14071 #CJK UNIFIED IDEOGRAPH + {0xDEC0, 0x4E8B}, //14072 #CJK UNIFIED IDEOGRAPH + {0xDEC1, 0x4E9B}, //14073 #CJK UNIFIED IDEOGRAPH + {0xDEC2, 0x4ED5}, //14074 #CJK UNIFIED IDEOGRAPH + {0xDEC3, 0x4F3A}, //14075 #CJK UNIFIED IDEOGRAPH + {0xDEC4, 0x4F3C}, //14076 #CJK UNIFIED IDEOGRAPH + {0xDEC5, 0x4F7F}, //14077 #CJK UNIFIED IDEOGRAPH + {0xDEC6, 0x4FDF}, //14078 #CJK UNIFIED IDEOGRAPH + {0xDEC7, 0x50FF}, //14079 #CJK UNIFIED IDEOGRAPH + {0xDEC8, 0x53F2}, //14080 #CJK UNIFIED IDEOGRAPH + {0xDEC9, 0x53F8}, //14081 #CJK UNIFIED IDEOGRAPH + {0xDECA, 0x5506}, //14082 #CJK UNIFIED IDEOGRAPH + {0xDECB, 0x55E3}, //14083 #CJK UNIFIED IDEOGRAPH + {0xDECC, 0x56DB}, //14084 #CJK UNIFIED IDEOGRAPH + {0xDECD, 0x58EB}, //14085 #CJK UNIFIED IDEOGRAPH + {0xDECE, 0x5962}, //14086 #CJK UNIFIED IDEOGRAPH + {0xDECF, 0x5A11}, //14087 #CJK UNIFIED IDEOGRAPH + {0xDED0, 0x5BEB}, //14088 #CJK UNIFIED IDEOGRAPH + {0xDED1, 0x5BFA}, //14089 #CJK UNIFIED IDEOGRAPH + {0xDED2, 0x5C04}, //14090 #CJK UNIFIED IDEOGRAPH + {0xDED3, 0x5DF3}, //14091 #CJK UNIFIED IDEOGRAPH + {0xDED4, 0x5E2B}, //14092 #CJK UNIFIED IDEOGRAPH + {0xDED5, 0x5F99}, //14093 #CJK UNIFIED IDEOGRAPH + {0xDED6, 0x601D}, //14094 #CJK UNIFIED IDEOGRAPH + {0xDED7, 0x6368}, //14095 #CJK UNIFIED IDEOGRAPH + {0xDED8, 0x659C}, //14096 #CJK UNIFIED IDEOGRAPH + {0xDED9, 0x65AF}, //14097 #CJK UNIFIED IDEOGRAPH + {0xDEDA, 0x67F6}, //14098 #CJK UNIFIED IDEOGRAPH + {0xDEDB, 0x67FB}, //14099 #CJK UNIFIED IDEOGRAPH + {0xDEDC, 0x68AD}, //14100 #CJK UNIFIED IDEOGRAPH + {0xDEDD, 0x6B7B}, //14101 #CJK UNIFIED IDEOGRAPH + {0xDEDE, 0x6C99}, //14102 #CJK UNIFIED IDEOGRAPH + {0xDEDF, 0x6CD7}, //14103 #CJK UNIFIED IDEOGRAPH + {0xDEE0, 0x6E23}, //14104 #CJK UNIFIED IDEOGRAPH + {0xDEE1, 0x7009}, //14105 #CJK UNIFIED IDEOGRAPH + {0xDEE2, 0x7345}, //14106 #CJK UNIFIED IDEOGRAPH + {0xDEE3, 0x7802}, //14107 #CJK UNIFIED IDEOGRAPH + {0xDEE4, 0x793E}, //14108 #CJK UNIFIED IDEOGRAPH + {0xDEE5, 0x7940}, //14109 #CJK UNIFIED IDEOGRAPH + {0xDEE6, 0x7960}, //14110 #CJK UNIFIED IDEOGRAPH + {0xDEE7, 0x79C1}, //14111 #CJK UNIFIED IDEOGRAPH + {0xDEE8, 0x7BE9}, //14112 #CJK UNIFIED IDEOGRAPH + {0xDEE9, 0x7D17}, //14113 #CJK UNIFIED IDEOGRAPH + {0xDEEA, 0x7D72}, //14114 #CJK UNIFIED IDEOGRAPH + {0xDEEB, 0x8086}, //14115 #CJK UNIFIED IDEOGRAPH + {0xDEEC, 0x820D}, //14116 #CJK UNIFIED IDEOGRAPH + {0xDEED, 0x838E}, //14117 #CJK UNIFIED IDEOGRAPH + {0xDEEE, 0x84D1}, //14118 #CJK UNIFIED IDEOGRAPH + {0xDEEF, 0x86C7}, //14119 #CJK UNIFIED IDEOGRAPH + {0xDEF0, 0x88DF}, //14120 #CJK UNIFIED IDEOGRAPH + {0xDEF1, 0x8A50}, //14121 #CJK UNIFIED IDEOGRAPH + {0xDEF2, 0x8A5E}, //14122 #CJK UNIFIED IDEOGRAPH + {0xDEF3, 0x8B1D}, //14123 #CJK UNIFIED IDEOGRAPH + {0xDEF4, 0x8CDC}, //14124 #CJK UNIFIED IDEOGRAPH + {0xDEF5, 0x8D66}, //14125 #CJK UNIFIED IDEOGRAPH + {0xDEF6, 0x8FAD}, //14126 #CJK UNIFIED IDEOGRAPH + {0xDEF7, 0x90AA}, //14127 #CJK UNIFIED IDEOGRAPH + {0xDEF8, 0x98FC}, //14128 #CJK UNIFIED IDEOGRAPH + {0xDEF9, 0x99DF}, //14129 #CJK UNIFIED IDEOGRAPH + {0xDEFA, 0x9E9D}, //14130 #CJK UNIFIED IDEOGRAPH + {0xDEFB, 0x524A}, //14131 #CJK UNIFIED IDEOGRAPH + {0xDEFC, 0xF969}, //14132 #CJK COMPATIBILITY IDEOGRAPH + {0xDEFD, 0x6714}, //14133 #CJK UNIFIED IDEOGRAPH + {0xDEFE, 0xF96A}, //14134 #CJK COMPATIBILITY IDEOGRAPH + {0xDFA1, 0x5098}, //14135 #CJK UNIFIED IDEOGRAPH + {0xDFA2, 0x522A}, //14136 #CJK UNIFIED IDEOGRAPH + {0xDFA3, 0x5C71}, //14137 #CJK UNIFIED IDEOGRAPH + {0xDFA4, 0x6563}, //14138 #CJK UNIFIED IDEOGRAPH + {0xDFA5, 0x6C55}, //14139 #CJK UNIFIED IDEOGRAPH + {0xDFA6, 0x73CA}, //14140 #CJK UNIFIED IDEOGRAPH + {0xDFA7, 0x7523}, //14141 #CJK UNIFIED IDEOGRAPH + {0xDFA8, 0x759D}, //14142 #CJK UNIFIED IDEOGRAPH + {0xDFA9, 0x7B97}, //14143 #CJK UNIFIED IDEOGRAPH + {0xDFAA, 0x849C}, //14144 #CJK UNIFIED IDEOGRAPH + {0xDFAB, 0x9178}, //14145 #CJK UNIFIED IDEOGRAPH + {0xDFAC, 0x9730}, //14146 #CJK UNIFIED IDEOGRAPH + {0xDFAD, 0x4E77}, //14147 #CJK UNIFIED IDEOGRAPH + {0xDFAE, 0x6492}, //14148 #CJK UNIFIED IDEOGRAPH + {0xDFAF, 0x6BBA}, //14149 #CJK UNIFIED IDEOGRAPH + {0xDFB0, 0x715E}, //14150 #CJK UNIFIED IDEOGRAPH + {0xDFB1, 0x85A9}, //14151 #CJK UNIFIED IDEOGRAPH + {0xDFB2, 0x4E09}, //14152 #CJK UNIFIED IDEOGRAPH + {0xDFB3, 0xF96B}, //14153 #CJK COMPATIBILITY IDEOGRAPH + {0xDFB4, 0x6749}, //14154 #CJK UNIFIED IDEOGRAPH + {0xDFB5, 0x68EE}, //14155 #CJK UNIFIED IDEOGRAPH + {0xDFB6, 0x6E17}, //14156 #CJK UNIFIED IDEOGRAPH + {0xDFB7, 0x829F}, //14157 #CJK UNIFIED IDEOGRAPH + {0xDFB8, 0x8518}, //14158 #CJK UNIFIED IDEOGRAPH + {0xDFB9, 0x886B}, //14159 #CJK UNIFIED IDEOGRAPH + {0xDFBA, 0x63F7}, //14160 #CJK UNIFIED IDEOGRAPH + {0xDFBB, 0x6F81}, //14161 #CJK UNIFIED IDEOGRAPH + {0xDFBC, 0x9212}, //14162 #CJK UNIFIED IDEOGRAPH + {0xDFBD, 0x98AF}, //14163 #CJK UNIFIED IDEOGRAPH + {0xDFBE, 0x4E0A}, //14164 #CJK UNIFIED IDEOGRAPH + {0xDFBF, 0x50B7}, //14165 #CJK UNIFIED IDEOGRAPH + {0xDFC0, 0x50CF}, //14166 #CJK UNIFIED IDEOGRAPH + {0xDFC1, 0x511F}, //14167 #CJK UNIFIED IDEOGRAPH + {0xDFC2, 0x5546}, //14168 #CJK UNIFIED IDEOGRAPH + {0xDFC3, 0x55AA}, //14169 #CJK UNIFIED IDEOGRAPH + {0xDFC4, 0x5617}, //14170 #CJK UNIFIED IDEOGRAPH + {0xDFC5, 0x5B40}, //14171 #CJK UNIFIED IDEOGRAPH + {0xDFC6, 0x5C19}, //14172 #CJK UNIFIED IDEOGRAPH + {0xDFC7, 0x5CE0}, //14173 #CJK UNIFIED IDEOGRAPH + {0xDFC8, 0x5E38}, //14174 #CJK UNIFIED IDEOGRAPH + {0xDFC9, 0x5E8A}, //14175 #CJK UNIFIED IDEOGRAPH + {0xDFCA, 0x5EA0}, //14176 #CJK UNIFIED IDEOGRAPH + {0xDFCB, 0x5EC2}, //14177 #CJK UNIFIED IDEOGRAPH + {0xDFCC, 0x60F3}, //14178 #CJK UNIFIED IDEOGRAPH + {0xDFCD, 0x6851}, //14179 #CJK UNIFIED IDEOGRAPH + {0xDFCE, 0x6A61}, //14180 #CJK UNIFIED IDEOGRAPH + {0xDFCF, 0x6E58}, //14181 #CJK UNIFIED IDEOGRAPH + {0xDFD0, 0x723D}, //14182 #CJK UNIFIED IDEOGRAPH + {0xDFD1, 0x7240}, //14183 #CJK UNIFIED IDEOGRAPH + {0xDFD2, 0x72C0}, //14184 #CJK UNIFIED IDEOGRAPH + {0xDFD3, 0x76F8}, //14185 #CJK UNIFIED IDEOGRAPH + {0xDFD4, 0x7965}, //14186 #CJK UNIFIED IDEOGRAPH + {0xDFD5, 0x7BB1}, //14187 #CJK UNIFIED IDEOGRAPH + {0xDFD6, 0x7FD4}, //14188 #CJK UNIFIED IDEOGRAPH + {0xDFD7, 0x88F3}, //14189 #CJK UNIFIED IDEOGRAPH + {0xDFD8, 0x89F4}, //14190 #CJK UNIFIED IDEOGRAPH + {0xDFD9, 0x8A73}, //14191 #CJK UNIFIED IDEOGRAPH + {0xDFDA, 0x8C61}, //14192 #CJK UNIFIED IDEOGRAPH + {0xDFDB, 0x8CDE}, //14193 #CJK UNIFIED IDEOGRAPH + {0xDFDC, 0x971C}, //14194 #CJK UNIFIED IDEOGRAPH + {0xDFDD, 0x585E}, //14195 #CJK UNIFIED IDEOGRAPH + {0xDFDE, 0x74BD}, //14196 #CJK UNIFIED IDEOGRAPH + {0xDFDF, 0x8CFD}, //14197 #CJK UNIFIED IDEOGRAPH + {0xDFE0, 0x55C7}, //14198 #CJK UNIFIED IDEOGRAPH + {0xDFE1, 0xF96C}, //14199 #CJK COMPATIBILITY IDEOGRAPH + {0xDFE2, 0x7A61}, //14200 #CJK UNIFIED IDEOGRAPH + {0xDFE3, 0x7D22}, //14201 #CJK UNIFIED IDEOGRAPH + {0xDFE4, 0x8272}, //14202 #CJK UNIFIED IDEOGRAPH + {0xDFE5, 0x7272}, //14203 #CJK UNIFIED IDEOGRAPH + {0xDFE6, 0x751F}, //14204 #CJK UNIFIED IDEOGRAPH + {0xDFE7, 0x7525}, //14205 #CJK UNIFIED IDEOGRAPH + {0xDFE8, 0xF96D}, //14206 #CJK COMPATIBILITY IDEOGRAPH + {0xDFE9, 0x7B19}, //14207 #CJK UNIFIED IDEOGRAPH + {0xDFEA, 0x5885}, //14208 #CJK UNIFIED IDEOGRAPH + {0xDFEB, 0x58FB}, //14209 #CJK UNIFIED IDEOGRAPH + {0xDFEC, 0x5DBC}, //14210 #CJK UNIFIED IDEOGRAPH + {0xDFED, 0x5E8F}, //14211 #CJK UNIFIED IDEOGRAPH + {0xDFEE, 0x5EB6}, //14212 #CJK UNIFIED IDEOGRAPH + {0xDFEF, 0x5F90}, //14213 #CJK UNIFIED IDEOGRAPH + {0xDFF0, 0x6055}, //14214 #CJK UNIFIED IDEOGRAPH + {0xDFF1, 0x6292}, //14215 #CJK UNIFIED IDEOGRAPH + {0xDFF2, 0x637F}, //14216 #CJK UNIFIED IDEOGRAPH + {0xDFF3, 0x654D}, //14217 #CJK UNIFIED IDEOGRAPH + {0xDFF4, 0x6691}, //14218 #CJK UNIFIED IDEOGRAPH + {0xDFF5, 0x66D9}, //14219 #CJK UNIFIED IDEOGRAPH + {0xDFF6, 0x66F8}, //14220 #CJK UNIFIED IDEOGRAPH + {0xDFF7, 0x6816}, //14221 #CJK UNIFIED IDEOGRAPH + {0xDFF8, 0x68F2}, //14222 #CJK UNIFIED IDEOGRAPH + {0xDFF9, 0x7280}, //14223 #CJK UNIFIED IDEOGRAPH + {0xDFFA, 0x745E}, //14224 #CJK UNIFIED IDEOGRAPH + {0xDFFB, 0x7B6E}, //14225 #CJK UNIFIED IDEOGRAPH + {0xDFFC, 0x7D6E}, //14226 #CJK UNIFIED IDEOGRAPH + {0xDFFD, 0x7DD6}, //14227 #CJK UNIFIED IDEOGRAPH + {0xDFFE, 0x7F72}, //14228 #CJK UNIFIED IDEOGRAPH + {0xE0A1, 0x80E5}, //14229 #CJK UNIFIED IDEOGRAPH + {0xE0A2, 0x8212}, //14230 #CJK UNIFIED IDEOGRAPH + {0xE0A3, 0x85AF}, //14231 #CJK UNIFIED IDEOGRAPH + {0xE0A4, 0x897F}, //14232 #CJK UNIFIED IDEOGRAPH + {0xE0A5, 0x8A93}, //14233 #CJK UNIFIED IDEOGRAPH + {0xE0A6, 0x901D}, //14234 #CJK UNIFIED IDEOGRAPH + {0xE0A7, 0x92E4}, //14235 #CJK UNIFIED IDEOGRAPH + {0xE0A8, 0x9ECD}, //14236 #CJK UNIFIED IDEOGRAPH + {0xE0A9, 0x9F20}, //14237 #CJK UNIFIED IDEOGRAPH + {0xE0AA, 0x5915}, //14238 #CJK UNIFIED IDEOGRAPH + {0xE0AB, 0x596D}, //14239 #CJK UNIFIED IDEOGRAPH + {0xE0AC, 0x5E2D}, //14240 #CJK UNIFIED IDEOGRAPH + {0xE0AD, 0x60DC}, //14241 #CJK UNIFIED IDEOGRAPH + {0xE0AE, 0x6614}, //14242 #CJK UNIFIED IDEOGRAPH + {0xE0AF, 0x6673}, //14243 #CJK UNIFIED IDEOGRAPH + {0xE0B0, 0x6790}, //14244 #CJK UNIFIED IDEOGRAPH + {0xE0B1, 0x6C50}, //14245 #CJK UNIFIED IDEOGRAPH + {0xE0B2, 0x6DC5}, //14246 #CJK UNIFIED IDEOGRAPH + {0xE0B3, 0x6F5F}, //14247 #CJK UNIFIED IDEOGRAPH + {0xE0B4, 0x77F3}, //14248 #CJK UNIFIED IDEOGRAPH + {0xE0B5, 0x78A9}, //14249 #CJK UNIFIED IDEOGRAPH + {0xE0B6, 0x84C6}, //14250 #CJK UNIFIED IDEOGRAPH + {0xE0B7, 0x91CB}, //14251 #CJK UNIFIED IDEOGRAPH + {0xE0B8, 0x932B}, //14252 #CJK UNIFIED IDEOGRAPH + {0xE0B9, 0x4ED9}, //14253 #CJK UNIFIED IDEOGRAPH + {0xE0BA, 0x50CA}, //14254 #CJK UNIFIED IDEOGRAPH + {0xE0BB, 0x5148}, //14255 #CJK UNIFIED IDEOGRAPH + {0xE0BC, 0x5584}, //14256 #CJK UNIFIED IDEOGRAPH + {0xE0BD, 0x5B0B}, //14257 #CJK UNIFIED IDEOGRAPH + {0xE0BE, 0x5BA3}, //14258 #CJK UNIFIED IDEOGRAPH + {0xE0BF, 0x6247}, //14259 #CJK UNIFIED IDEOGRAPH + {0xE0C0, 0x657E}, //14260 #CJK UNIFIED IDEOGRAPH + {0xE0C1, 0x65CB}, //14261 #CJK UNIFIED IDEOGRAPH + {0xE0C2, 0x6E32}, //14262 #CJK UNIFIED IDEOGRAPH + {0xE0C3, 0x717D}, //14263 #CJK UNIFIED IDEOGRAPH + {0xE0C4, 0x7401}, //14264 #CJK UNIFIED IDEOGRAPH + {0xE0C5, 0x7444}, //14265 #CJK UNIFIED IDEOGRAPH + {0xE0C6, 0x7487}, //14266 #CJK UNIFIED IDEOGRAPH + {0xE0C7, 0x74BF}, //14267 #CJK UNIFIED IDEOGRAPH + {0xE0C8, 0x766C}, //14268 #CJK UNIFIED IDEOGRAPH + {0xE0C9, 0x79AA}, //14269 #CJK UNIFIED IDEOGRAPH + {0xE0CA, 0x7DDA}, //14270 #CJK UNIFIED IDEOGRAPH + {0xE0CB, 0x7E55}, //14271 #CJK UNIFIED IDEOGRAPH + {0xE0CC, 0x7FA8}, //14272 #CJK UNIFIED IDEOGRAPH + {0xE0CD, 0x817A}, //14273 #CJK UNIFIED IDEOGRAPH + {0xE0CE, 0x81B3}, //14274 #CJK UNIFIED IDEOGRAPH + {0xE0CF, 0x8239}, //14275 #CJK UNIFIED IDEOGRAPH + {0xE0D0, 0x861A}, //14276 #CJK UNIFIED IDEOGRAPH + {0xE0D1, 0x87EC}, //14277 #CJK UNIFIED IDEOGRAPH + {0xE0D2, 0x8A75}, //14278 #CJK UNIFIED IDEOGRAPH + {0xE0D3, 0x8DE3}, //14279 #CJK UNIFIED IDEOGRAPH + {0xE0D4, 0x9078}, //14280 #CJK UNIFIED IDEOGRAPH + {0xE0D5, 0x9291}, //14281 #CJK UNIFIED IDEOGRAPH + {0xE0D6, 0x9425}, //14282 #CJK UNIFIED IDEOGRAPH + {0xE0D7, 0x994D}, //14283 #CJK UNIFIED IDEOGRAPH + {0xE0D8, 0x9BAE}, //14284 #CJK UNIFIED IDEOGRAPH + {0xE0D9, 0x5368}, //14285 #CJK UNIFIED IDEOGRAPH + {0xE0DA, 0x5C51}, //14286 #CJK UNIFIED IDEOGRAPH + {0xE0DB, 0x6954}, //14287 #CJK UNIFIED IDEOGRAPH + {0xE0DC, 0x6CC4}, //14288 #CJK UNIFIED IDEOGRAPH + {0xE0DD, 0x6D29}, //14289 #CJK UNIFIED IDEOGRAPH + {0xE0DE, 0x6E2B}, //14290 #CJK UNIFIED IDEOGRAPH + {0xE0DF, 0x820C}, //14291 #CJK UNIFIED IDEOGRAPH + {0xE0E0, 0x859B}, //14292 #CJK UNIFIED IDEOGRAPH + {0xE0E1, 0x893B}, //14293 #CJK UNIFIED IDEOGRAPH + {0xE0E2, 0x8A2D}, //14294 #CJK UNIFIED IDEOGRAPH + {0xE0E3, 0x8AAA}, //14295 #CJK UNIFIED IDEOGRAPH + {0xE0E4, 0x96EA}, //14296 #CJK UNIFIED IDEOGRAPH + {0xE0E5, 0x9F67}, //14297 #CJK UNIFIED IDEOGRAPH + {0xE0E6, 0x5261}, //14298 #CJK UNIFIED IDEOGRAPH + {0xE0E7, 0x66B9}, //14299 #CJK UNIFIED IDEOGRAPH + {0xE0E8, 0x6BB2}, //14300 #CJK UNIFIED IDEOGRAPH + {0xE0E9, 0x7E96}, //14301 #CJK UNIFIED IDEOGRAPH + {0xE0EA, 0x87FE}, //14302 #CJK UNIFIED IDEOGRAPH + {0xE0EB, 0x8D0D}, //14303 #CJK UNIFIED IDEOGRAPH + {0xE0EC, 0x9583}, //14304 #CJK UNIFIED IDEOGRAPH + {0xE0ED, 0x965D}, //14305 #CJK UNIFIED IDEOGRAPH + {0xE0EE, 0x651D}, //14306 #CJK UNIFIED IDEOGRAPH + {0xE0EF, 0x6D89}, //14307 #CJK UNIFIED IDEOGRAPH + {0xE0F0, 0x71EE}, //14308 #CJK UNIFIED IDEOGRAPH + {0xE0F1, 0xF96E}, //14309 #CJK COMPATIBILITY IDEOGRAPH + {0xE0F2, 0x57CE}, //14310 #CJK UNIFIED IDEOGRAPH + {0xE0F3, 0x59D3}, //14311 #CJK UNIFIED IDEOGRAPH + {0xE0F4, 0x5BAC}, //14312 #CJK UNIFIED IDEOGRAPH + {0xE0F5, 0x6027}, //14313 #CJK UNIFIED IDEOGRAPH + {0xE0F6, 0x60FA}, //14314 #CJK UNIFIED IDEOGRAPH + {0xE0F7, 0x6210}, //14315 #CJK UNIFIED IDEOGRAPH + {0xE0F8, 0x661F}, //14316 #CJK UNIFIED IDEOGRAPH + {0xE0F9, 0x665F}, //14317 #CJK UNIFIED IDEOGRAPH + {0xE0FA, 0x7329}, //14318 #CJK UNIFIED IDEOGRAPH + {0xE0FB, 0x73F9}, //14319 #CJK UNIFIED IDEOGRAPH + {0xE0FC, 0x76DB}, //14320 #CJK UNIFIED IDEOGRAPH + {0xE0FD, 0x7701}, //14321 #CJK UNIFIED IDEOGRAPH + {0xE0FE, 0x7B6C}, //14322 #CJK UNIFIED IDEOGRAPH + {0xE1A1, 0x8056}, //14323 #CJK UNIFIED IDEOGRAPH + {0xE1A2, 0x8072}, //14324 #CJK UNIFIED IDEOGRAPH + {0xE1A3, 0x8165}, //14325 #CJK UNIFIED IDEOGRAPH + {0xE1A4, 0x8AA0}, //14326 #CJK UNIFIED IDEOGRAPH + {0xE1A5, 0x9192}, //14327 #CJK UNIFIED IDEOGRAPH + {0xE1A6, 0x4E16}, //14328 #CJK UNIFIED IDEOGRAPH + {0xE1A7, 0x52E2}, //14329 #CJK UNIFIED IDEOGRAPH + {0xE1A8, 0x6B72}, //14330 #CJK UNIFIED IDEOGRAPH + {0xE1A9, 0x6D17}, //14331 #CJK UNIFIED IDEOGRAPH + {0xE1AA, 0x7A05}, //14332 #CJK UNIFIED IDEOGRAPH + {0xE1AB, 0x7B39}, //14333 #CJK UNIFIED IDEOGRAPH + {0xE1AC, 0x7D30}, //14334 #CJK UNIFIED IDEOGRAPH + {0xE1AD, 0xF96F}, //14335 #CJK COMPATIBILITY IDEOGRAPH + {0xE1AE, 0x8CB0}, //14336 #CJK UNIFIED IDEOGRAPH + {0xE1AF, 0x53EC}, //14337 #CJK UNIFIED IDEOGRAPH + {0xE1B0, 0x562F}, //14338 #CJK UNIFIED IDEOGRAPH + {0xE1B1, 0x5851}, //14339 #CJK UNIFIED IDEOGRAPH + {0xE1B2, 0x5BB5}, //14340 #CJK UNIFIED IDEOGRAPH + {0xE1B3, 0x5C0F}, //14341 #CJK UNIFIED IDEOGRAPH + {0xE1B4, 0x5C11}, //14342 #CJK UNIFIED IDEOGRAPH + {0xE1B5, 0x5DE2}, //14343 #CJK UNIFIED IDEOGRAPH + {0xE1B6, 0x6240}, //14344 #CJK UNIFIED IDEOGRAPH + {0xE1B7, 0x6383}, //14345 #CJK UNIFIED IDEOGRAPH + {0xE1B8, 0x6414}, //14346 #CJK UNIFIED IDEOGRAPH + {0xE1B9, 0x662D}, //14347 #CJK UNIFIED IDEOGRAPH + {0xE1BA, 0x68B3}, //14348 #CJK UNIFIED IDEOGRAPH + {0xE1BB, 0x6CBC}, //14349 #CJK UNIFIED IDEOGRAPH + {0xE1BC, 0x6D88}, //14350 #CJK UNIFIED IDEOGRAPH + {0xE1BD, 0x6EAF}, //14351 #CJK UNIFIED IDEOGRAPH + {0xE1BE, 0x701F}, //14352 #CJK UNIFIED IDEOGRAPH + {0xE1BF, 0x70A4}, //14353 #CJK UNIFIED IDEOGRAPH + {0xE1C0, 0x71D2}, //14354 #CJK UNIFIED IDEOGRAPH + {0xE1C1, 0x7526}, //14355 #CJK UNIFIED IDEOGRAPH + {0xE1C2, 0x758F}, //14356 #CJK UNIFIED IDEOGRAPH + {0xE1C3, 0x758E}, //14357 #CJK UNIFIED IDEOGRAPH + {0xE1C4, 0x7619}, //14358 #CJK UNIFIED IDEOGRAPH + {0xE1C5, 0x7B11}, //14359 #CJK UNIFIED IDEOGRAPH + {0xE1C6, 0x7BE0}, //14360 #CJK UNIFIED IDEOGRAPH + {0xE1C7, 0x7C2B}, //14361 #CJK UNIFIED IDEOGRAPH + {0xE1C8, 0x7D20}, //14362 #CJK UNIFIED IDEOGRAPH + {0xE1C9, 0x7D39}, //14363 #CJK UNIFIED IDEOGRAPH + {0xE1CA, 0x852C}, //14364 #CJK UNIFIED IDEOGRAPH + {0xE1CB, 0x856D}, //14365 #CJK UNIFIED IDEOGRAPH + {0xE1CC, 0x8607}, //14366 #CJK UNIFIED IDEOGRAPH + {0xE1CD, 0x8A34}, //14367 #CJK UNIFIED IDEOGRAPH + {0xE1CE, 0x900D}, //14368 #CJK UNIFIED IDEOGRAPH + {0xE1CF, 0x9061}, //14369 #CJK UNIFIED IDEOGRAPH + {0xE1D0, 0x90B5}, //14370 #CJK UNIFIED IDEOGRAPH + {0xE1D1, 0x92B7}, //14371 #CJK UNIFIED IDEOGRAPH + {0xE1D2, 0x97F6}, //14372 #CJK UNIFIED IDEOGRAPH + {0xE1D3, 0x9A37}, //14373 #CJK UNIFIED IDEOGRAPH + {0xE1D4, 0x4FD7}, //14374 #CJK UNIFIED IDEOGRAPH + {0xE1D5, 0x5C6C}, //14375 #CJK UNIFIED IDEOGRAPH + {0xE1D6, 0x675F}, //14376 #CJK UNIFIED IDEOGRAPH + {0xE1D7, 0x6D91}, //14377 #CJK UNIFIED IDEOGRAPH + {0xE1D8, 0x7C9F}, //14378 #CJK UNIFIED IDEOGRAPH + {0xE1D9, 0x7E8C}, //14379 #CJK UNIFIED IDEOGRAPH + {0xE1DA, 0x8B16}, //14380 #CJK UNIFIED IDEOGRAPH + {0xE1DB, 0x8D16}, //14381 #CJK UNIFIED IDEOGRAPH + {0xE1DC, 0x901F}, //14382 #CJK UNIFIED IDEOGRAPH + {0xE1DD, 0x5B6B}, //14383 #CJK UNIFIED IDEOGRAPH + {0xE1DE, 0x5DFD}, //14384 #CJK UNIFIED IDEOGRAPH + {0xE1DF, 0x640D}, //14385 #CJK UNIFIED IDEOGRAPH + {0xE1E0, 0x84C0}, //14386 #CJK UNIFIED IDEOGRAPH + {0xE1E1, 0x905C}, //14387 #CJK UNIFIED IDEOGRAPH + {0xE1E2, 0x98E1}, //14388 #CJK UNIFIED IDEOGRAPH + {0xE1E3, 0x7387}, //14389 #CJK UNIFIED IDEOGRAPH + {0xE1E4, 0x5B8B}, //14390 #CJK UNIFIED IDEOGRAPH + {0xE1E5, 0x609A}, //14391 #CJK UNIFIED IDEOGRAPH + {0xE1E6, 0x677E}, //14392 #CJK UNIFIED IDEOGRAPH + {0xE1E7, 0x6DDE}, //14393 #CJK UNIFIED IDEOGRAPH + {0xE1E8, 0x8A1F}, //14394 #CJK UNIFIED IDEOGRAPH + {0xE1E9, 0x8AA6}, //14395 #CJK UNIFIED IDEOGRAPH + {0xE1EA, 0x9001}, //14396 #CJK UNIFIED IDEOGRAPH + {0xE1EB, 0x980C}, //14397 #CJK UNIFIED IDEOGRAPH + {0xE1EC, 0x5237}, //14398 #CJK UNIFIED IDEOGRAPH + {0xE1ED, 0xF970}, //14399 #CJK COMPATIBILITY IDEOGRAPH + {0xE1EE, 0x7051}, //14400 #CJK UNIFIED IDEOGRAPH + {0xE1EF, 0x788E}, //14401 #CJK UNIFIED IDEOGRAPH + {0xE1F0, 0x9396}, //14402 #CJK UNIFIED IDEOGRAPH + {0xE1F1, 0x8870}, //14403 #CJK UNIFIED IDEOGRAPH + {0xE1F2, 0x91D7}, //14404 #CJK UNIFIED IDEOGRAPH + {0xE1F3, 0x4FEE}, //14405 #CJK UNIFIED IDEOGRAPH + {0xE1F4, 0x53D7}, //14406 #CJK UNIFIED IDEOGRAPH + {0xE1F5, 0x55FD}, //14407 #CJK UNIFIED IDEOGRAPH + {0xE1F6, 0x56DA}, //14408 #CJK UNIFIED IDEOGRAPH + {0xE1F7, 0x5782}, //14409 #CJK UNIFIED IDEOGRAPH + {0xE1F8, 0x58FD}, //14410 #CJK UNIFIED IDEOGRAPH + {0xE1F9, 0x5AC2}, //14411 #CJK UNIFIED IDEOGRAPH + {0xE1FA, 0x5B88}, //14412 #CJK UNIFIED IDEOGRAPH + {0xE1FB, 0x5CAB}, //14413 #CJK UNIFIED IDEOGRAPH + {0xE1FC, 0x5CC0}, //14414 #CJK UNIFIED IDEOGRAPH + {0xE1FD, 0x5E25}, //14415 #CJK UNIFIED IDEOGRAPH + {0xE1FE, 0x6101}, //14416 #CJK UNIFIED IDEOGRAPH + {0xE2A1, 0x620D}, //14417 #CJK UNIFIED IDEOGRAPH + {0xE2A2, 0x624B}, //14418 #CJK UNIFIED IDEOGRAPH + {0xE2A3, 0x6388}, //14419 #CJK UNIFIED IDEOGRAPH + {0xE2A4, 0x641C}, //14420 #CJK UNIFIED IDEOGRAPH + {0xE2A5, 0x6536}, //14421 #CJK UNIFIED IDEOGRAPH + {0xE2A6, 0x6578}, //14422 #CJK UNIFIED IDEOGRAPH + {0xE2A7, 0x6A39}, //14423 #CJK UNIFIED IDEOGRAPH + {0xE2A8, 0x6B8A}, //14424 #CJK UNIFIED IDEOGRAPH + {0xE2A9, 0x6C34}, //14425 #CJK UNIFIED IDEOGRAPH + {0xE2AA, 0x6D19}, //14426 #CJK UNIFIED IDEOGRAPH + {0xE2AB, 0x6F31}, //14427 #CJK UNIFIED IDEOGRAPH + {0xE2AC, 0x71E7}, //14428 #CJK UNIFIED IDEOGRAPH + {0xE2AD, 0x72E9}, //14429 #CJK UNIFIED IDEOGRAPH + {0xE2AE, 0x7378}, //14430 #CJK UNIFIED IDEOGRAPH + {0xE2AF, 0x7407}, //14431 #CJK UNIFIED IDEOGRAPH + {0xE2B0, 0x74B2}, //14432 #CJK UNIFIED IDEOGRAPH + {0xE2B1, 0x7626}, //14433 #CJK UNIFIED IDEOGRAPH + {0xE2B2, 0x7761}, //14434 #CJK UNIFIED IDEOGRAPH + {0xE2B3, 0x79C0}, //14435 #CJK UNIFIED IDEOGRAPH + {0xE2B4, 0x7A57}, //14436 #CJK UNIFIED IDEOGRAPH + {0xE2B5, 0x7AEA}, //14437 #CJK UNIFIED IDEOGRAPH + {0xE2B6, 0x7CB9}, //14438 #CJK UNIFIED IDEOGRAPH + {0xE2B7, 0x7D8F}, //14439 #CJK UNIFIED IDEOGRAPH + {0xE2B8, 0x7DAC}, //14440 #CJK UNIFIED IDEOGRAPH + {0xE2B9, 0x7E61}, //14441 #CJK UNIFIED IDEOGRAPH + {0xE2BA, 0x7F9E}, //14442 #CJK UNIFIED IDEOGRAPH + {0xE2BB, 0x8129}, //14443 #CJK UNIFIED IDEOGRAPH + {0xE2BC, 0x8331}, //14444 #CJK UNIFIED IDEOGRAPH + {0xE2BD, 0x8490}, //14445 #CJK UNIFIED IDEOGRAPH + {0xE2BE, 0x84DA}, //14446 #CJK UNIFIED IDEOGRAPH + {0xE2BF, 0x85EA}, //14447 #CJK UNIFIED IDEOGRAPH + {0xE2C0, 0x8896}, //14448 #CJK UNIFIED IDEOGRAPH + {0xE2C1, 0x8AB0}, //14449 #CJK UNIFIED IDEOGRAPH + {0xE2C2, 0x8B90}, //14450 #CJK UNIFIED IDEOGRAPH + {0xE2C3, 0x8F38}, //14451 #CJK UNIFIED IDEOGRAPH + {0xE2C4, 0x9042}, //14452 #CJK UNIFIED IDEOGRAPH + {0xE2C5, 0x9083}, //14453 #CJK UNIFIED IDEOGRAPH + {0xE2C6, 0x916C}, //14454 #CJK UNIFIED IDEOGRAPH + {0xE2C7, 0x9296}, //14455 #CJK UNIFIED IDEOGRAPH + {0xE2C8, 0x92B9}, //14456 #CJK UNIFIED IDEOGRAPH + {0xE2C9, 0x968B}, //14457 #CJK UNIFIED IDEOGRAPH + {0xE2CA, 0x96A7}, //14458 #CJK UNIFIED IDEOGRAPH + {0xE2CB, 0x96A8}, //14459 #CJK UNIFIED IDEOGRAPH + {0xE2CC, 0x96D6}, //14460 #CJK UNIFIED IDEOGRAPH + {0xE2CD, 0x9700}, //14461 #CJK UNIFIED IDEOGRAPH + {0xE2CE, 0x9808}, //14462 #CJK UNIFIED IDEOGRAPH + {0xE2CF, 0x9996}, //14463 #CJK UNIFIED IDEOGRAPH + {0xE2D0, 0x9AD3}, //14464 #CJK UNIFIED IDEOGRAPH + {0xE2D1, 0x9B1A}, //14465 #CJK UNIFIED IDEOGRAPH + {0xE2D2, 0x53D4}, //14466 #CJK UNIFIED IDEOGRAPH + {0xE2D3, 0x587E}, //14467 #CJK UNIFIED IDEOGRAPH + {0xE2D4, 0x5919}, //14468 #CJK UNIFIED IDEOGRAPH + {0xE2D5, 0x5B70}, //14469 #CJK UNIFIED IDEOGRAPH + {0xE2D6, 0x5BBF}, //14470 #CJK UNIFIED IDEOGRAPH + {0xE2D7, 0x6DD1}, //14471 #CJK UNIFIED IDEOGRAPH + {0xE2D8, 0x6F5A}, //14472 #CJK UNIFIED IDEOGRAPH + {0xE2D9, 0x719F}, //14473 #CJK UNIFIED IDEOGRAPH + {0xE2DA, 0x7421}, //14474 #CJK UNIFIED IDEOGRAPH + {0xE2DB, 0x74B9}, //14475 #CJK UNIFIED IDEOGRAPH + {0xE2DC, 0x8085}, //14476 #CJK UNIFIED IDEOGRAPH + {0xE2DD, 0x83FD}, //14477 #CJK UNIFIED IDEOGRAPH + {0xE2DE, 0x5DE1}, //14478 #CJK UNIFIED IDEOGRAPH + {0xE2DF, 0x5F87}, //14479 #CJK UNIFIED IDEOGRAPH + {0xE2E0, 0x5FAA}, //14480 #CJK UNIFIED IDEOGRAPH + {0xE2E1, 0x6042}, //14481 #CJK UNIFIED IDEOGRAPH + {0xE2E2, 0x65EC}, //14482 #CJK UNIFIED IDEOGRAPH + {0xE2E3, 0x6812}, //14483 #CJK UNIFIED IDEOGRAPH + {0xE2E4, 0x696F}, //14484 #CJK UNIFIED IDEOGRAPH + {0xE2E5, 0x6A53}, //14485 #CJK UNIFIED IDEOGRAPH + {0xE2E6, 0x6B89}, //14486 #CJK UNIFIED IDEOGRAPH + {0xE2E7, 0x6D35}, //14487 #CJK UNIFIED IDEOGRAPH + {0xE2E8, 0x6DF3}, //14488 #CJK UNIFIED IDEOGRAPH + {0xE2E9, 0x73E3}, //14489 #CJK UNIFIED IDEOGRAPH + {0xE2EA, 0x76FE}, //14490 #CJK UNIFIED IDEOGRAPH + {0xE2EB, 0x77AC}, //14491 #CJK UNIFIED IDEOGRAPH + {0xE2EC, 0x7B4D}, //14492 #CJK UNIFIED IDEOGRAPH + {0xE2ED, 0x7D14}, //14493 #CJK UNIFIED IDEOGRAPH + {0xE2EE, 0x8123}, //14494 #CJK UNIFIED IDEOGRAPH + {0xE2EF, 0x821C}, //14495 #CJK UNIFIED IDEOGRAPH + {0xE2F0, 0x8340}, //14496 #CJK UNIFIED IDEOGRAPH + {0xE2F1, 0x84F4}, //14497 #CJK UNIFIED IDEOGRAPH + {0xE2F2, 0x8563}, //14498 #CJK UNIFIED IDEOGRAPH + {0xE2F3, 0x8A62}, //14499 #CJK UNIFIED IDEOGRAPH + {0xE2F4, 0x8AC4}, //14500 #CJK UNIFIED IDEOGRAPH + {0xE2F5, 0x9187}, //14501 #CJK UNIFIED IDEOGRAPH + {0xE2F6, 0x931E}, //14502 #CJK UNIFIED IDEOGRAPH + {0xE2F7, 0x9806}, //14503 #CJK UNIFIED IDEOGRAPH + {0xE2F8, 0x99B4}, //14504 #CJK UNIFIED IDEOGRAPH + {0xE2F9, 0x620C}, //14505 #CJK UNIFIED IDEOGRAPH + {0xE2FA, 0x8853}, //14506 #CJK UNIFIED IDEOGRAPH + {0xE2FB, 0x8FF0}, //14507 #CJK UNIFIED IDEOGRAPH + {0xE2FC, 0x9265}, //14508 #CJK UNIFIED IDEOGRAPH + {0xE2FD, 0x5D07}, //14509 #CJK UNIFIED IDEOGRAPH + {0xE2FE, 0x5D27}, //14510 #CJK UNIFIED IDEOGRAPH + {0xE3A1, 0x5D69}, //14511 #CJK UNIFIED IDEOGRAPH + {0xE3A2, 0x745F}, //14512 #CJK UNIFIED IDEOGRAPH + {0xE3A3, 0x819D}, //14513 #CJK UNIFIED IDEOGRAPH + {0xE3A4, 0x8768}, //14514 #CJK UNIFIED IDEOGRAPH + {0xE3A5, 0x6FD5}, //14515 #CJK UNIFIED IDEOGRAPH + {0xE3A6, 0x62FE}, //14516 #CJK UNIFIED IDEOGRAPH + {0xE3A7, 0x7FD2}, //14517 #CJK UNIFIED IDEOGRAPH + {0xE3A8, 0x8936}, //14518 #CJK UNIFIED IDEOGRAPH + {0xE3A9, 0x8972}, //14519 #CJK UNIFIED IDEOGRAPH + {0xE3AA, 0x4E1E}, //14520 #CJK UNIFIED IDEOGRAPH + {0xE3AB, 0x4E58}, //14521 #CJK UNIFIED IDEOGRAPH + {0xE3AC, 0x50E7}, //14522 #CJK UNIFIED IDEOGRAPH + {0xE3AD, 0x52DD}, //14523 #CJK UNIFIED IDEOGRAPH + {0xE3AE, 0x5347}, //14524 #CJK UNIFIED IDEOGRAPH + {0xE3AF, 0x627F}, //14525 #CJK UNIFIED IDEOGRAPH + {0xE3B0, 0x6607}, //14526 #CJK UNIFIED IDEOGRAPH + {0xE3B1, 0x7E69}, //14527 #CJK UNIFIED IDEOGRAPH + {0xE3B2, 0x8805}, //14528 #CJK UNIFIED IDEOGRAPH + {0xE3B3, 0x965E}, //14529 #CJK UNIFIED IDEOGRAPH + {0xE3B4, 0x4F8D}, //14530 #CJK UNIFIED IDEOGRAPH + {0xE3B5, 0x5319}, //14531 #CJK UNIFIED IDEOGRAPH + {0xE3B6, 0x5636}, //14532 #CJK UNIFIED IDEOGRAPH + {0xE3B7, 0x59CB}, //14533 #CJK UNIFIED IDEOGRAPH + {0xE3B8, 0x5AA4}, //14534 #CJK UNIFIED IDEOGRAPH + {0xE3B9, 0x5C38}, //14535 #CJK UNIFIED IDEOGRAPH + {0xE3BA, 0x5C4E}, //14536 #CJK UNIFIED IDEOGRAPH + {0xE3BB, 0x5C4D}, //14537 #CJK UNIFIED IDEOGRAPH + {0xE3BC, 0x5E02}, //14538 #CJK UNIFIED IDEOGRAPH + {0xE3BD, 0x5F11}, //14539 #CJK UNIFIED IDEOGRAPH + {0xE3BE, 0x6043}, //14540 #CJK UNIFIED IDEOGRAPH + {0xE3BF, 0x65BD}, //14541 #CJK UNIFIED IDEOGRAPH + {0xE3C0, 0x662F}, //14542 #CJK UNIFIED IDEOGRAPH + {0xE3C1, 0x6642}, //14543 #CJK UNIFIED IDEOGRAPH + {0xE3C2, 0x67BE}, //14544 #CJK UNIFIED IDEOGRAPH + {0xE3C3, 0x67F4}, //14545 #CJK UNIFIED IDEOGRAPH + {0xE3C4, 0x731C}, //14546 #CJK UNIFIED IDEOGRAPH + {0xE3C5, 0x77E2}, //14547 #CJK UNIFIED IDEOGRAPH + {0xE3C6, 0x793A}, //14548 #CJK UNIFIED IDEOGRAPH + {0xE3C7, 0x7FC5}, //14549 #CJK UNIFIED IDEOGRAPH + {0xE3C8, 0x8494}, //14550 #CJK UNIFIED IDEOGRAPH + {0xE3C9, 0x84CD}, //14551 #CJK UNIFIED IDEOGRAPH + {0xE3CA, 0x8996}, //14552 #CJK UNIFIED IDEOGRAPH + {0xE3CB, 0x8A66}, //14553 #CJK UNIFIED IDEOGRAPH + {0xE3CC, 0x8A69}, //14554 #CJK UNIFIED IDEOGRAPH + {0xE3CD, 0x8AE1}, //14555 #CJK UNIFIED IDEOGRAPH + {0xE3CE, 0x8C55}, //14556 #CJK UNIFIED IDEOGRAPH + {0xE3CF, 0x8C7A}, //14557 #CJK UNIFIED IDEOGRAPH + {0xE3D0, 0x57F4}, //14558 #CJK UNIFIED IDEOGRAPH + {0xE3D1, 0x5BD4}, //14559 #CJK UNIFIED IDEOGRAPH + {0xE3D2, 0x5F0F}, //14560 #CJK UNIFIED IDEOGRAPH + {0xE3D3, 0x606F}, //14561 #CJK UNIFIED IDEOGRAPH + {0xE3D4, 0x62ED}, //14562 #CJK UNIFIED IDEOGRAPH + {0xE3D5, 0x690D}, //14563 #CJK UNIFIED IDEOGRAPH + {0xE3D6, 0x6B96}, //14564 #CJK UNIFIED IDEOGRAPH + {0xE3D7, 0x6E5C}, //14565 #CJK UNIFIED IDEOGRAPH + {0xE3D8, 0x7184}, //14566 #CJK UNIFIED IDEOGRAPH + {0xE3D9, 0x7BD2}, //14567 #CJK UNIFIED IDEOGRAPH + {0xE3DA, 0x8755}, //14568 #CJK UNIFIED IDEOGRAPH + {0xE3DB, 0x8B58}, //14569 #CJK UNIFIED IDEOGRAPH + {0xE3DC, 0x8EFE}, //14570 #CJK UNIFIED IDEOGRAPH + {0xE3DD, 0x98DF}, //14571 #CJK UNIFIED IDEOGRAPH + {0xE3DE, 0x98FE}, //14572 #CJK UNIFIED IDEOGRAPH + {0xE3DF, 0x4F38}, //14573 #CJK UNIFIED IDEOGRAPH + {0xE3E0, 0x4F81}, //14574 #CJK UNIFIED IDEOGRAPH + {0xE3E1, 0x4FE1}, //14575 #CJK UNIFIED IDEOGRAPH + {0xE3E2, 0x547B}, //14576 #CJK UNIFIED IDEOGRAPH + {0xE3E3, 0x5A20}, //14577 #CJK UNIFIED IDEOGRAPH + {0xE3E4, 0x5BB8}, //14578 #CJK UNIFIED IDEOGRAPH + {0xE3E5, 0x613C}, //14579 #CJK UNIFIED IDEOGRAPH + {0xE3E6, 0x65B0}, //14580 #CJK UNIFIED IDEOGRAPH + {0xE3E7, 0x6668}, //14581 #CJK UNIFIED IDEOGRAPH + {0xE3E8, 0x71FC}, //14582 #CJK UNIFIED IDEOGRAPH + {0xE3E9, 0x7533}, //14583 #CJK UNIFIED IDEOGRAPH + {0xE3EA, 0x795E}, //14584 #CJK UNIFIED IDEOGRAPH + {0xE3EB, 0x7D33}, //14585 #CJK UNIFIED IDEOGRAPH + {0xE3EC, 0x814E}, //14586 #CJK UNIFIED IDEOGRAPH + {0xE3ED, 0x81E3}, //14587 #CJK UNIFIED IDEOGRAPH + {0xE3EE, 0x8398}, //14588 #CJK UNIFIED IDEOGRAPH + {0xE3EF, 0x85AA}, //14589 #CJK UNIFIED IDEOGRAPH + {0xE3F0, 0x85CE}, //14590 #CJK UNIFIED IDEOGRAPH + {0xE3F1, 0x8703}, //14591 #CJK UNIFIED IDEOGRAPH + {0xE3F2, 0x8A0A}, //14592 #CJK UNIFIED IDEOGRAPH + {0xE3F3, 0x8EAB}, //14593 #CJK UNIFIED IDEOGRAPH + {0xE3F4, 0x8F9B}, //14594 #CJK UNIFIED IDEOGRAPH + {0xE3F5, 0xF971}, //14595 #CJK COMPATIBILITY IDEOGRAPH + {0xE3F6, 0x8FC5}, //14596 #CJK UNIFIED IDEOGRAPH + {0xE3F7, 0x5931}, //14597 #CJK UNIFIED IDEOGRAPH + {0xE3F8, 0x5BA4}, //14598 #CJK UNIFIED IDEOGRAPH + {0xE3F9, 0x5BE6}, //14599 #CJK UNIFIED IDEOGRAPH + {0xE3FA, 0x6089}, //14600 #CJK UNIFIED IDEOGRAPH + {0xE3FB, 0x5BE9}, //14601 #CJK UNIFIED IDEOGRAPH + {0xE3FC, 0x5C0B}, //14602 #CJK UNIFIED IDEOGRAPH + {0xE3FD, 0x5FC3}, //14603 #CJK UNIFIED IDEOGRAPH + {0xE3FE, 0x6C81}, //14604 #CJK UNIFIED IDEOGRAPH + {0xE4A1, 0xF972}, //14605 #CJK COMPATIBILITY IDEOGRAPH + {0xE4A2, 0x6DF1}, //14606 #CJK UNIFIED IDEOGRAPH + {0xE4A3, 0x700B}, //14607 #CJK UNIFIED IDEOGRAPH + {0xE4A4, 0x751A}, //14608 #CJK UNIFIED IDEOGRAPH + {0xE4A5, 0x82AF}, //14609 #CJK UNIFIED IDEOGRAPH + {0xE4A6, 0x8AF6}, //14610 #CJK UNIFIED IDEOGRAPH + {0xE4A7, 0x4EC0}, //14611 #CJK UNIFIED IDEOGRAPH + {0xE4A8, 0x5341}, //14612 #CJK UNIFIED IDEOGRAPH + {0xE4A9, 0xF973}, //14613 #CJK COMPATIBILITY IDEOGRAPH + {0xE4AA, 0x96D9}, //14614 #CJK UNIFIED IDEOGRAPH + {0xE4AB, 0x6C0F}, //14615 #CJK UNIFIED IDEOGRAPH + {0xE4AC, 0x4E9E}, //14616 #CJK UNIFIED IDEOGRAPH + {0xE4AD, 0x4FC4}, //14617 #CJK UNIFIED IDEOGRAPH + {0xE4AE, 0x5152}, //14618 #CJK UNIFIED IDEOGRAPH + {0xE4AF, 0x555E}, //14619 #CJK UNIFIED IDEOGRAPH + {0xE4B0, 0x5A25}, //14620 #CJK UNIFIED IDEOGRAPH + {0xE4B1, 0x5CE8}, //14621 #CJK UNIFIED IDEOGRAPH + {0xE4B2, 0x6211}, //14622 #CJK UNIFIED IDEOGRAPH + {0xE4B3, 0x7259}, //14623 #CJK UNIFIED IDEOGRAPH + {0xE4B4, 0x82BD}, //14624 #CJK UNIFIED IDEOGRAPH + {0xE4B5, 0x83AA}, //14625 #CJK UNIFIED IDEOGRAPH + {0xE4B6, 0x86FE}, //14626 #CJK UNIFIED IDEOGRAPH + {0xE4B7, 0x8859}, //14627 #CJK UNIFIED IDEOGRAPH + {0xE4B8, 0x8A1D}, //14628 #CJK UNIFIED IDEOGRAPH + {0xE4B9, 0x963F}, //14629 #CJK UNIFIED IDEOGRAPH + {0xE4BA, 0x96C5}, //14630 #CJK UNIFIED IDEOGRAPH + {0xE4BB, 0x9913}, //14631 #CJK UNIFIED IDEOGRAPH + {0xE4BC, 0x9D09}, //14632 #CJK UNIFIED IDEOGRAPH + {0xE4BD, 0x9D5D}, //14633 #CJK UNIFIED IDEOGRAPH + {0xE4BE, 0x580A}, //14634 #CJK UNIFIED IDEOGRAPH + {0xE4BF, 0x5CB3}, //14635 #CJK UNIFIED IDEOGRAPH + {0xE4C0, 0x5DBD}, //14636 #CJK UNIFIED IDEOGRAPH + {0xE4C1, 0x5E44}, //14637 #CJK UNIFIED IDEOGRAPH + {0xE4C2, 0x60E1}, //14638 #CJK UNIFIED IDEOGRAPH + {0xE4C3, 0x6115}, //14639 #CJK UNIFIED IDEOGRAPH + {0xE4C4, 0x63E1}, //14640 #CJK UNIFIED IDEOGRAPH + {0xE4C5, 0x6A02}, //14641 #CJK UNIFIED IDEOGRAPH + {0xE4C6, 0x6E25}, //14642 #CJK UNIFIED IDEOGRAPH + {0xE4C7, 0x9102}, //14643 #CJK UNIFIED IDEOGRAPH + {0xE4C8, 0x9354}, //14644 #CJK UNIFIED IDEOGRAPH + {0xE4C9, 0x984E}, //14645 #CJK UNIFIED IDEOGRAPH + {0xE4CA, 0x9C10}, //14646 #CJK UNIFIED IDEOGRAPH + {0xE4CB, 0x9F77}, //14647 #CJK UNIFIED IDEOGRAPH + {0xE4CC, 0x5B89}, //14648 #CJK UNIFIED IDEOGRAPH + {0xE4CD, 0x5CB8}, //14649 #CJK UNIFIED IDEOGRAPH + {0xE4CE, 0x6309}, //14650 #CJK UNIFIED IDEOGRAPH + {0xE4CF, 0x664F}, //14651 #CJK UNIFIED IDEOGRAPH + {0xE4D0, 0x6848}, //14652 #CJK UNIFIED IDEOGRAPH + {0xE4D1, 0x773C}, //14653 #CJK UNIFIED IDEOGRAPH + {0xE4D2, 0x96C1}, //14654 #CJK UNIFIED IDEOGRAPH + {0xE4D3, 0x978D}, //14655 #CJK UNIFIED IDEOGRAPH + {0xE4D4, 0x9854}, //14656 #CJK UNIFIED IDEOGRAPH + {0xE4D5, 0x9B9F}, //14657 #CJK UNIFIED IDEOGRAPH + {0xE4D6, 0x65A1}, //14658 #CJK UNIFIED IDEOGRAPH + {0xE4D7, 0x8B01}, //14659 #CJK UNIFIED IDEOGRAPH + {0xE4D8, 0x8ECB}, //14660 #CJK UNIFIED IDEOGRAPH + {0xE4D9, 0x95BC}, //14661 #CJK UNIFIED IDEOGRAPH + {0xE4DA, 0x5535}, //14662 #CJK UNIFIED IDEOGRAPH + {0xE4DB, 0x5CA9}, //14663 #CJK UNIFIED IDEOGRAPH + {0xE4DC, 0x5DD6}, //14664 #CJK UNIFIED IDEOGRAPH + {0xE4DD, 0x5EB5}, //14665 #CJK UNIFIED IDEOGRAPH + {0xE4DE, 0x6697}, //14666 #CJK UNIFIED IDEOGRAPH + {0xE4DF, 0x764C}, //14667 #CJK UNIFIED IDEOGRAPH + {0xE4E0, 0x83F4}, //14668 #CJK UNIFIED IDEOGRAPH + {0xE4E1, 0x95C7}, //14669 #CJK UNIFIED IDEOGRAPH + {0xE4E2, 0x58D3}, //14670 #CJK UNIFIED IDEOGRAPH + {0xE4E3, 0x62BC}, //14671 #CJK UNIFIED IDEOGRAPH + {0xE4E4, 0x72CE}, //14672 #CJK UNIFIED IDEOGRAPH + {0xE4E5, 0x9D28}, //14673 #CJK UNIFIED IDEOGRAPH + {0xE4E6, 0x4EF0}, //14674 #CJK UNIFIED IDEOGRAPH + {0xE4E7, 0x592E}, //14675 #CJK UNIFIED IDEOGRAPH + {0xE4E8, 0x600F}, //14676 #CJK UNIFIED IDEOGRAPH + {0xE4E9, 0x663B}, //14677 #CJK UNIFIED IDEOGRAPH + {0xE4EA, 0x6B83}, //14678 #CJK UNIFIED IDEOGRAPH + {0xE4EB, 0x79E7}, //14679 #CJK UNIFIED IDEOGRAPH + {0xE4EC, 0x9D26}, //14680 #CJK UNIFIED IDEOGRAPH + {0xE4ED, 0x5393}, //14681 #CJK UNIFIED IDEOGRAPH + {0xE4EE, 0x54C0}, //14682 #CJK UNIFIED IDEOGRAPH + {0xE4EF, 0x57C3}, //14683 #CJK UNIFIED IDEOGRAPH + {0xE4F0, 0x5D16}, //14684 #CJK UNIFIED IDEOGRAPH + {0xE4F1, 0x611B}, //14685 #CJK UNIFIED IDEOGRAPH + {0xE4F2, 0x66D6}, //14686 #CJK UNIFIED IDEOGRAPH + {0xE4F3, 0x6DAF}, //14687 #CJK UNIFIED IDEOGRAPH + {0xE4F4, 0x788D}, //14688 #CJK UNIFIED IDEOGRAPH + {0xE4F5, 0x827E}, //14689 #CJK UNIFIED IDEOGRAPH + {0xE4F6, 0x9698}, //14690 #CJK UNIFIED IDEOGRAPH + {0xE4F7, 0x9744}, //14691 #CJK UNIFIED IDEOGRAPH + {0xE4F8, 0x5384}, //14692 #CJK UNIFIED IDEOGRAPH + {0xE4F9, 0x627C}, //14693 #CJK UNIFIED IDEOGRAPH + {0xE4FA, 0x6396}, //14694 #CJK UNIFIED IDEOGRAPH + {0xE4FB, 0x6DB2}, //14695 #CJK UNIFIED IDEOGRAPH + {0xE4FC, 0x7E0A}, //14696 #CJK UNIFIED IDEOGRAPH + {0xE4FD, 0x814B}, //14697 #CJK UNIFIED IDEOGRAPH + {0xE4FE, 0x984D}, //14698 #CJK UNIFIED IDEOGRAPH + {0xE5A1, 0x6AFB}, //14699 #CJK UNIFIED IDEOGRAPH + {0xE5A2, 0x7F4C}, //14700 #CJK UNIFIED IDEOGRAPH + {0xE5A3, 0x9DAF}, //14701 #CJK UNIFIED IDEOGRAPH + {0xE5A4, 0x9E1A}, //14702 #CJK UNIFIED IDEOGRAPH + {0xE5A5, 0x4E5F}, //14703 #CJK UNIFIED IDEOGRAPH + {0xE5A6, 0x503B}, //14704 #CJK UNIFIED IDEOGRAPH + {0xE5A7, 0x51B6}, //14705 #CJK UNIFIED IDEOGRAPH + {0xE5A8, 0x591C}, //14706 #CJK UNIFIED IDEOGRAPH + {0xE5A9, 0x60F9}, //14707 #CJK UNIFIED IDEOGRAPH + {0xE5AA, 0x63F6}, //14708 #CJK UNIFIED IDEOGRAPH + {0xE5AB, 0x6930}, //14709 #CJK UNIFIED IDEOGRAPH + {0xE5AC, 0x723A}, //14710 #CJK UNIFIED IDEOGRAPH + {0xE5AD, 0x8036}, //14711 #CJK UNIFIED IDEOGRAPH + {0xE5AE, 0xF974}, //14712 #CJK COMPATIBILITY IDEOGRAPH + {0xE5AF, 0x91CE}, //14713 #CJK UNIFIED IDEOGRAPH + {0xE5B0, 0x5F31}, //14714 #CJK UNIFIED IDEOGRAPH + {0xE5B1, 0xF975}, //14715 #CJK COMPATIBILITY IDEOGRAPH + {0xE5B2, 0xF976}, //14716 #CJK COMPATIBILITY IDEOGRAPH + {0xE5B3, 0x7D04}, //14717 #CJK UNIFIED IDEOGRAPH + {0xE5B4, 0x82E5}, //14718 #CJK UNIFIED IDEOGRAPH + {0xE5B5, 0x846F}, //14719 #CJK UNIFIED IDEOGRAPH + {0xE5B6, 0x84BB}, //14720 #CJK UNIFIED IDEOGRAPH + {0xE5B7, 0x85E5}, //14721 #CJK UNIFIED IDEOGRAPH + {0xE5B8, 0x8E8D}, //14722 #CJK UNIFIED IDEOGRAPH + {0xE5B9, 0xF977}, //14723 #CJK COMPATIBILITY IDEOGRAPH + {0xE5BA, 0x4F6F}, //14724 #CJK UNIFIED IDEOGRAPH + {0xE5BB, 0xF978}, //14725 #CJK COMPATIBILITY IDEOGRAPH + {0xE5BC, 0xF979}, //14726 #CJK COMPATIBILITY IDEOGRAPH + {0xE5BD, 0x58E4}, //14727 #CJK UNIFIED IDEOGRAPH + {0xE5BE, 0x5B43}, //14728 #CJK UNIFIED IDEOGRAPH + {0xE5BF, 0x6059}, //14729 #CJK UNIFIED IDEOGRAPH + {0xE5C0, 0x63DA}, //14730 #CJK UNIFIED IDEOGRAPH + {0xE5C1, 0x6518}, //14731 #CJK UNIFIED IDEOGRAPH + {0xE5C2, 0x656D}, //14732 #CJK UNIFIED IDEOGRAPH + {0xE5C3, 0x6698}, //14733 #CJK UNIFIED IDEOGRAPH + {0xE5C4, 0xF97A}, //14734 #CJK COMPATIBILITY IDEOGRAPH + {0xE5C5, 0x694A}, //14735 #CJK UNIFIED IDEOGRAPH + {0xE5C6, 0x6A23}, //14736 #CJK UNIFIED IDEOGRAPH + {0xE5C7, 0x6D0B}, //14737 #CJK UNIFIED IDEOGRAPH + {0xE5C8, 0x7001}, //14738 #CJK UNIFIED IDEOGRAPH + {0xE5C9, 0x716C}, //14739 #CJK UNIFIED IDEOGRAPH + {0xE5CA, 0x75D2}, //14740 #CJK UNIFIED IDEOGRAPH + {0xE5CB, 0x760D}, //14741 #CJK UNIFIED IDEOGRAPH + {0xE5CC, 0x79B3}, //14742 #CJK UNIFIED IDEOGRAPH + {0xE5CD, 0x7A70}, //14743 #CJK UNIFIED IDEOGRAPH + {0xE5CE, 0xF97B}, //14744 #CJK COMPATIBILITY IDEOGRAPH + {0xE5CF, 0x7F8A}, //14745 #CJK UNIFIED IDEOGRAPH + {0xE5D0, 0xF97C}, //14746 #CJK COMPATIBILITY IDEOGRAPH + {0xE5D1, 0x8944}, //14747 #CJK UNIFIED IDEOGRAPH + {0xE5D2, 0xF97D}, //14748 #CJK COMPATIBILITY IDEOGRAPH + {0xE5D3, 0x8B93}, //14749 #CJK UNIFIED IDEOGRAPH + {0xE5D4, 0x91C0}, //14750 #CJK UNIFIED IDEOGRAPH + {0xE5D5, 0x967D}, //14751 #CJK UNIFIED IDEOGRAPH + {0xE5D6, 0xF97E}, //14752 #CJK COMPATIBILITY IDEOGRAPH + {0xE5D7, 0x990A}, //14753 #CJK UNIFIED IDEOGRAPH + {0xE5D8, 0x5704}, //14754 #CJK UNIFIED IDEOGRAPH + {0xE5D9, 0x5FA1}, //14755 #CJK UNIFIED IDEOGRAPH + {0xE5DA, 0x65BC}, //14756 #CJK UNIFIED IDEOGRAPH + {0xE5DB, 0x6F01}, //14757 #CJK UNIFIED IDEOGRAPH + {0xE5DC, 0x7600}, //14758 #CJK UNIFIED IDEOGRAPH + {0xE5DD, 0x79A6}, //14759 #CJK UNIFIED IDEOGRAPH + {0xE5DE, 0x8A9E}, //14760 #CJK UNIFIED IDEOGRAPH + {0xE5DF, 0x99AD}, //14761 #CJK UNIFIED IDEOGRAPH + {0xE5E0, 0x9B5A}, //14762 #CJK UNIFIED IDEOGRAPH + {0xE5E1, 0x9F6C}, //14763 #CJK UNIFIED IDEOGRAPH + {0xE5E2, 0x5104}, //14764 #CJK UNIFIED IDEOGRAPH + {0xE5E3, 0x61B6}, //14765 #CJK UNIFIED IDEOGRAPH + {0xE5E4, 0x6291}, //14766 #CJK UNIFIED IDEOGRAPH + {0xE5E5, 0x6A8D}, //14767 #CJK UNIFIED IDEOGRAPH + {0xE5E6, 0x81C6}, //14768 #CJK UNIFIED IDEOGRAPH + {0xE5E7, 0x5043}, //14769 #CJK UNIFIED IDEOGRAPH + {0xE5E8, 0x5830}, //14770 #CJK UNIFIED IDEOGRAPH + {0xE5E9, 0x5F66}, //14771 #CJK UNIFIED IDEOGRAPH + {0xE5EA, 0x7109}, //14772 #CJK UNIFIED IDEOGRAPH + {0xE5EB, 0x8A00}, //14773 #CJK UNIFIED IDEOGRAPH + {0xE5EC, 0x8AFA}, //14774 #CJK UNIFIED IDEOGRAPH + {0xE5ED, 0x5B7C}, //14775 #CJK UNIFIED IDEOGRAPH + {0xE5EE, 0x8616}, //14776 #CJK UNIFIED IDEOGRAPH + {0xE5EF, 0x4FFA}, //14777 #CJK UNIFIED IDEOGRAPH + {0xE5F0, 0x513C}, //14778 #CJK UNIFIED IDEOGRAPH + {0xE5F1, 0x56B4}, //14779 #CJK UNIFIED IDEOGRAPH + {0xE5F2, 0x5944}, //14780 #CJK UNIFIED IDEOGRAPH + {0xE5F3, 0x63A9}, //14781 #CJK UNIFIED IDEOGRAPH + {0xE5F4, 0x6DF9}, //14782 #CJK UNIFIED IDEOGRAPH + {0xE5F5, 0x5DAA}, //14783 #CJK UNIFIED IDEOGRAPH + {0xE5F6, 0x696D}, //14784 #CJK UNIFIED IDEOGRAPH + {0xE5F7, 0x5186}, //14785 #CJK UNIFIED IDEOGRAPH + {0xE5F8, 0x4E88}, //14786 #CJK UNIFIED IDEOGRAPH + {0xE5F9, 0x4F59}, //14787 #CJK UNIFIED IDEOGRAPH + {0xE5FA, 0xF97F}, //14788 #CJK COMPATIBILITY IDEOGRAPH + {0xE5FB, 0xF980}, //14789 #CJK COMPATIBILITY IDEOGRAPH + {0xE5FC, 0xF981}, //14790 #CJK COMPATIBILITY IDEOGRAPH + {0xE5FD, 0x5982}, //14791 #CJK UNIFIED IDEOGRAPH + {0xE5FE, 0xF982}, //14792 #CJK COMPATIBILITY IDEOGRAPH + {0xE6A1, 0xF983}, //14793 #CJK COMPATIBILITY IDEOGRAPH + {0xE6A2, 0x6B5F}, //14794 #CJK UNIFIED IDEOGRAPH + {0xE6A3, 0x6C5D}, //14795 #CJK UNIFIED IDEOGRAPH + {0xE6A4, 0xF984}, //14796 #CJK COMPATIBILITY IDEOGRAPH + {0xE6A5, 0x74B5}, //14797 #CJK UNIFIED IDEOGRAPH + {0xE6A6, 0x7916}, //14798 #CJK UNIFIED IDEOGRAPH + {0xE6A7, 0xF985}, //14799 #CJK COMPATIBILITY IDEOGRAPH + {0xE6A8, 0x8207}, //14800 #CJK UNIFIED IDEOGRAPH + {0xE6A9, 0x8245}, //14801 #CJK UNIFIED IDEOGRAPH + {0xE6AA, 0x8339}, //14802 #CJK UNIFIED IDEOGRAPH + {0xE6AB, 0x8F3F}, //14803 #CJK UNIFIED IDEOGRAPH + {0xE6AC, 0x8F5D}, //14804 #CJK UNIFIED IDEOGRAPH + {0xE6AD, 0xF986}, //14805 #CJK COMPATIBILITY IDEOGRAPH + {0xE6AE, 0x9918}, //14806 #CJK UNIFIED IDEOGRAPH + {0xE6AF, 0xF987}, //14807 #CJK COMPATIBILITY IDEOGRAPH + {0xE6B0, 0xF988}, //14808 #CJK COMPATIBILITY IDEOGRAPH + {0xE6B1, 0xF989}, //14809 #CJK COMPATIBILITY IDEOGRAPH + {0xE6B2, 0x4EA6}, //14810 #CJK UNIFIED IDEOGRAPH + {0xE6B3, 0xF98A}, //14811 #CJK COMPATIBILITY IDEOGRAPH + {0xE6B4, 0x57DF}, //14812 #CJK UNIFIED IDEOGRAPH + {0xE6B5, 0x5F79}, //14813 #CJK UNIFIED IDEOGRAPH + {0xE6B6, 0x6613}, //14814 #CJK UNIFIED IDEOGRAPH + {0xE6B7, 0xF98B}, //14815 #CJK COMPATIBILITY IDEOGRAPH + {0xE6B8, 0xF98C}, //14816 #CJK COMPATIBILITY IDEOGRAPH + {0xE6B9, 0x75AB}, //14817 #CJK UNIFIED IDEOGRAPH + {0xE6BA, 0x7E79}, //14818 #CJK UNIFIED IDEOGRAPH + {0xE6BB, 0x8B6F}, //14819 #CJK UNIFIED IDEOGRAPH + {0xE6BC, 0xF98D}, //14820 #CJK COMPATIBILITY IDEOGRAPH + {0xE6BD, 0x9006}, //14821 #CJK UNIFIED IDEOGRAPH + {0xE6BE, 0x9A5B}, //14822 #CJK UNIFIED IDEOGRAPH + {0xE6BF, 0x56A5}, //14823 #CJK UNIFIED IDEOGRAPH + {0xE6C0, 0x5827}, //14824 #CJK UNIFIED IDEOGRAPH + {0xE6C1, 0x59F8}, //14825 #CJK UNIFIED IDEOGRAPH + {0xE6C2, 0x5A1F}, //14826 #CJK UNIFIED IDEOGRAPH + {0xE6C3, 0x5BB4}, //14827 #CJK UNIFIED IDEOGRAPH + {0xE6C4, 0xF98E}, //14828 #CJK COMPATIBILITY IDEOGRAPH + {0xE6C5, 0x5EF6}, //14829 #CJK UNIFIED IDEOGRAPH + {0xE6C6, 0xF98F}, //14830 #CJK COMPATIBILITY IDEOGRAPH + {0xE6C7, 0xF990}, //14831 #CJK COMPATIBILITY IDEOGRAPH + {0xE6C8, 0x6350}, //14832 #CJK UNIFIED IDEOGRAPH + {0xE6C9, 0x633B}, //14833 #CJK UNIFIED IDEOGRAPH + {0xE6CA, 0xF991}, //14834 #CJK COMPATIBILITY IDEOGRAPH + {0xE6CB, 0x693D}, //14835 #CJK UNIFIED IDEOGRAPH + {0xE6CC, 0x6C87}, //14836 #CJK UNIFIED IDEOGRAPH + {0xE6CD, 0x6CBF}, //14837 #CJK UNIFIED IDEOGRAPH + {0xE6CE, 0x6D8E}, //14838 #CJK UNIFIED IDEOGRAPH + {0xE6CF, 0x6D93}, //14839 #CJK UNIFIED IDEOGRAPH + {0xE6D0, 0x6DF5}, //14840 #CJK UNIFIED IDEOGRAPH + {0xE6D1, 0x6F14}, //14841 #CJK UNIFIED IDEOGRAPH + {0xE6D2, 0xF992}, //14842 #CJK COMPATIBILITY IDEOGRAPH + {0xE6D3, 0x70DF}, //14843 #CJK UNIFIED IDEOGRAPH + {0xE6D4, 0x7136}, //14844 #CJK UNIFIED IDEOGRAPH + {0xE6D5, 0x7159}, //14845 #CJK UNIFIED IDEOGRAPH + {0xE6D6, 0xF993}, //14846 #CJK COMPATIBILITY IDEOGRAPH + {0xE6D7, 0x71C3}, //14847 #CJK UNIFIED IDEOGRAPH + {0xE6D8, 0x71D5}, //14848 #CJK UNIFIED IDEOGRAPH + {0xE6D9, 0xF994}, //14849 #CJK COMPATIBILITY IDEOGRAPH + {0xE6DA, 0x784F}, //14850 #CJK UNIFIED IDEOGRAPH + {0xE6DB, 0x786F}, //14851 #CJK UNIFIED IDEOGRAPH + {0xE6DC, 0xF995}, //14852 #CJK COMPATIBILITY IDEOGRAPH + {0xE6DD, 0x7B75}, //14853 #CJK UNIFIED IDEOGRAPH + {0xE6DE, 0x7DE3}, //14854 #CJK UNIFIED IDEOGRAPH + {0xE6DF, 0xF996}, //14855 #CJK COMPATIBILITY IDEOGRAPH + {0xE6E0, 0x7E2F}, //14856 #CJK UNIFIED IDEOGRAPH + {0xE6E1, 0xF997}, //14857 #CJK COMPATIBILITY IDEOGRAPH + {0xE6E2, 0x884D}, //14858 #CJK UNIFIED IDEOGRAPH + {0xE6E3, 0x8EDF}, //14859 #CJK UNIFIED IDEOGRAPH + {0xE6E4, 0xF998}, //14860 #CJK COMPATIBILITY IDEOGRAPH + {0xE6E5, 0xF999}, //14861 #CJK COMPATIBILITY IDEOGRAPH + {0xE6E6, 0xF99A}, //14862 #CJK COMPATIBILITY IDEOGRAPH + {0xE6E7, 0x925B}, //14863 #CJK UNIFIED IDEOGRAPH + {0xE6E8, 0xF99B}, //14864 #CJK COMPATIBILITY IDEOGRAPH + {0xE6E9, 0x9CF6}, //14865 #CJK UNIFIED IDEOGRAPH + {0xE6EA, 0xF99C}, //14866 #CJK COMPATIBILITY IDEOGRAPH + {0xE6EB, 0xF99D}, //14867 #CJK COMPATIBILITY IDEOGRAPH + {0xE6EC, 0xF99E}, //14868 #CJK COMPATIBILITY IDEOGRAPH + {0xE6ED, 0x6085}, //14869 #CJK UNIFIED IDEOGRAPH + {0xE6EE, 0x6D85}, //14870 #CJK UNIFIED IDEOGRAPH + {0xE6EF, 0xF99F}, //14871 #CJK COMPATIBILITY IDEOGRAPH + {0xE6F0, 0x71B1}, //14872 #CJK UNIFIED IDEOGRAPH + {0xE6F1, 0xF9A0}, //14873 #CJK COMPATIBILITY IDEOGRAPH + {0xE6F2, 0xF9A1}, //14874 #CJK COMPATIBILITY IDEOGRAPH + {0xE6F3, 0x95B1}, //14875 #CJK UNIFIED IDEOGRAPH + {0xE6F4, 0x53AD}, //14876 #CJK UNIFIED IDEOGRAPH + {0xE6F5, 0xF9A2}, //14877 #CJK COMPATIBILITY IDEOGRAPH + {0xE6F6, 0xF9A3}, //14878 #CJK COMPATIBILITY IDEOGRAPH + {0xE6F7, 0xF9A4}, //14879 #CJK COMPATIBILITY IDEOGRAPH + {0xE6F8, 0x67D3}, //14880 #CJK UNIFIED IDEOGRAPH + {0xE6F9, 0xF9A5}, //14881 #CJK COMPATIBILITY IDEOGRAPH + {0xE6FA, 0x708E}, //14882 #CJK UNIFIED IDEOGRAPH + {0xE6FB, 0x7130}, //14883 #CJK UNIFIED IDEOGRAPH + {0xE6FC, 0x7430}, //14884 #CJK UNIFIED IDEOGRAPH + {0xE6FD, 0x8276}, //14885 #CJK UNIFIED IDEOGRAPH + {0xE6FE, 0x82D2}, //14886 #CJK UNIFIED IDEOGRAPH + {0xE7A1, 0xF9A6}, //14887 #CJK COMPATIBILITY IDEOGRAPH + {0xE7A2, 0x95BB}, //14888 #CJK UNIFIED IDEOGRAPH + {0xE7A3, 0x9AE5}, //14889 #CJK UNIFIED IDEOGRAPH + {0xE7A4, 0x9E7D}, //14890 #CJK UNIFIED IDEOGRAPH + {0xE7A5, 0x66C4}, //14891 #CJK UNIFIED IDEOGRAPH + {0xE7A6, 0xF9A7}, //14892 #CJK COMPATIBILITY IDEOGRAPH + {0xE7A7, 0x71C1}, //14893 #CJK UNIFIED IDEOGRAPH + {0xE7A8, 0x8449}, //14894 #CJK UNIFIED IDEOGRAPH + {0xE7A9, 0xF9A8}, //14895 #CJK COMPATIBILITY IDEOGRAPH + {0xE7AA, 0xF9A9}, //14896 #CJK COMPATIBILITY IDEOGRAPH + {0xE7AB, 0x584B}, //14897 #CJK UNIFIED IDEOGRAPH + {0xE7AC, 0xF9AA}, //14898 #CJK COMPATIBILITY IDEOGRAPH + {0xE7AD, 0xF9AB}, //14899 #CJK COMPATIBILITY IDEOGRAPH + {0xE7AE, 0x5DB8}, //14900 #CJK UNIFIED IDEOGRAPH + {0xE7AF, 0x5F71}, //14901 #CJK UNIFIED IDEOGRAPH + {0xE7B0, 0xF9AC}, //14902 #CJK COMPATIBILITY IDEOGRAPH + {0xE7B1, 0x6620}, //14903 #CJK UNIFIED IDEOGRAPH + {0xE7B2, 0x668E}, //14904 #CJK UNIFIED IDEOGRAPH + {0xE7B3, 0x6979}, //14905 #CJK UNIFIED IDEOGRAPH + {0xE7B4, 0x69AE}, //14906 #CJK UNIFIED IDEOGRAPH + {0xE7B5, 0x6C38}, //14907 #CJK UNIFIED IDEOGRAPH + {0xE7B6, 0x6CF3}, //14908 #CJK UNIFIED IDEOGRAPH + {0xE7B7, 0x6E36}, //14909 #CJK UNIFIED IDEOGRAPH + {0xE7B8, 0x6F41}, //14910 #CJK UNIFIED IDEOGRAPH + {0xE7B9, 0x6FDA}, //14911 #CJK UNIFIED IDEOGRAPH + {0xE7BA, 0x701B}, //14912 #CJK UNIFIED IDEOGRAPH + {0xE7BB, 0x702F}, //14913 #CJK UNIFIED IDEOGRAPH + {0xE7BC, 0x7150}, //14914 #CJK UNIFIED IDEOGRAPH + {0xE7BD, 0x71DF}, //14915 #CJK UNIFIED IDEOGRAPH + {0xE7BE, 0x7370}, //14916 #CJK UNIFIED IDEOGRAPH + {0xE7BF, 0xF9AD}, //14917 #CJK COMPATIBILITY IDEOGRAPH + {0xE7C0, 0x745B}, //14918 #CJK UNIFIED IDEOGRAPH + {0xE7C1, 0xF9AE}, //14919 #CJK COMPATIBILITY IDEOGRAPH + {0xE7C2, 0x74D4}, //14920 #CJK UNIFIED IDEOGRAPH + {0xE7C3, 0x76C8}, //14921 #CJK UNIFIED IDEOGRAPH + {0xE7C4, 0x7A4E}, //14922 #CJK UNIFIED IDEOGRAPH + {0xE7C5, 0x7E93}, //14923 #CJK UNIFIED IDEOGRAPH + {0xE7C6, 0xF9AF}, //14924 #CJK COMPATIBILITY IDEOGRAPH + {0xE7C7, 0xF9B0}, //14925 #CJK COMPATIBILITY IDEOGRAPH + {0xE7C8, 0x82F1}, //14926 #CJK UNIFIED IDEOGRAPH + {0xE7C9, 0x8A60}, //14927 #CJK UNIFIED IDEOGRAPH + {0xE7CA, 0x8FCE}, //14928 #CJK UNIFIED IDEOGRAPH + {0xE7CB, 0xF9B1}, //14929 #CJK COMPATIBILITY IDEOGRAPH + {0xE7CC, 0x9348}, //14930 #CJK UNIFIED IDEOGRAPH + {0xE7CD, 0xF9B2}, //14931 #CJK COMPATIBILITY IDEOGRAPH + {0xE7CE, 0x9719}, //14932 #CJK UNIFIED IDEOGRAPH + {0xE7CF, 0xF9B3}, //14933 #CJK COMPATIBILITY IDEOGRAPH + {0xE7D0, 0xF9B4}, //14934 #CJK COMPATIBILITY IDEOGRAPH + {0xE7D1, 0x4E42}, //14935 #CJK UNIFIED IDEOGRAPH + {0xE7D2, 0x502A}, //14936 #CJK UNIFIED IDEOGRAPH + {0xE7D3, 0xF9B5}, //14937 #CJK COMPATIBILITY IDEOGRAPH + {0xE7D4, 0x5208}, //14938 #CJK UNIFIED IDEOGRAPH + {0xE7D5, 0x53E1}, //14939 #CJK UNIFIED IDEOGRAPH + {0xE7D6, 0x66F3}, //14940 #CJK UNIFIED IDEOGRAPH + {0xE7D7, 0x6C6D}, //14941 #CJK UNIFIED IDEOGRAPH + {0xE7D8, 0x6FCA}, //14942 #CJK UNIFIED IDEOGRAPH + {0xE7D9, 0x730A}, //14943 #CJK UNIFIED IDEOGRAPH + {0xE7DA, 0x777F}, //14944 #CJK UNIFIED IDEOGRAPH + {0xE7DB, 0x7A62}, //14945 #CJK UNIFIED IDEOGRAPH + {0xE7DC, 0x82AE}, //14946 #CJK UNIFIED IDEOGRAPH + {0xE7DD, 0x85DD}, //14947 #CJK UNIFIED IDEOGRAPH + {0xE7DE, 0x8602}, //14948 #CJK UNIFIED IDEOGRAPH + {0xE7DF, 0xF9B6}, //14949 #CJK COMPATIBILITY IDEOGRAPH + {0xE7E0, 0x88D4}, //14950 #CJK UNIFIED IDEOGRAPH + {0xE7E1, 0x8A63}, //14951 #CJK UNIFIED IDEOGRAPH + {0xE7E2, 0x8B7D}, //14952 #CJK UNIFIED IDEOGRAPH + {0xE7E3, 0x8C6B}, //14953 #CJK UNIFIED IDEOGRAPH + {0xE7E4, 0xF9B7}, //14954 #CJK COMPATIBILITY IDEOGRAPH + {0xE7E5, 0x92B3}, //14955 #CJK UNIFIED IDEOGRAPH + {0xE7E6, 0xF9B8}, //14956 #CJK COMPATIBILITY IDEOGRAPH + {0xE7E7, 0x9713}, //14957 #CJK UNIFIED IDEOGRAPH + {0xE7E8, 0x9810}, //14958 #CJK UNIFIED IDEOGRAPH + {0xE7E9, 0x4E94}, //14959 #CJK UNIFIED IDEOGRAPH + {0xE7EA, 0x4F0D}, //14960 #CJK UNIFIED IDEOGRAPH + {0xE7EB, 0x4FC9}, //14961 #CJK UNIFIED IDEOGRAPH + {0xE7EC, 0x50B2}, //14962 #CJK UNIFIED IDEOGRAPH + {0xE7ED, 0x5348}, //14963 #CJK UNIFIED IDEOGRAPH + {0xE7EE, 0x543E}, //14964 #CJK UNIFIED IDEOGRAPH + {0xE7EF, 0x5433}, //14965 #CJK UNIFIED IDEOGRAPH + {0xE7F0, 0x55DA}, //14966 #CJK UNIFIED IDEOGRAPH + {0xE7F1, 0x5862}, //14967 #CJK UNIFIED IDEOGRAPH + {0xE7F2, 0x58BA}, //14968 #CJK UNIFIED IDEOGRAPH + {0xE7F3, 0x5967}, //14969 #CJK UNIFIED IDEOGRAPH + {0xE7F4, 0x5A1B}, //14970 #CJK UNIFIED IDEOGRAPH + {0xE7F5, 0x5BE4}, //14971 #CJK UNIFIED IDEOGRAPH + {0xE7F6, 0x609F}, //14972 #CJK UNIFIED IDEOGRAPH + {0xE7F7, 0xF9B9}, //14973 #CJK COMPATIBILITY IDEOGRAPH + {0xE7F8, 0x61CA}, //14974 #CJK UNIFIED IDEOGRAPH + {0xE7F9, 0x6556}, //14975 #CJK UNIFIED IDEOGRAPH + {0xE7FA, 0x65FF}, //14976 #CJK UNIFIED IDEOGRAPH + {0xE7FB, 0x6664}, //14977 #CJK UNIFIED IDEOGRAPH + {0xE7FC, 0x68A7}, //14978 #CJK UNIFIED IDEOGRAPH + {0xE7FD, 0x6C5A}, //14979 #CJK UNIFIED IDEOGRAPH + {0xE7FE, 0x6FB3}, //14980 #CJK UNIFIED IDEOGRAPH + {0xE8A1, 0x70CF}, //14981 #CJK UNIFIED IDEOGRAPH + {0xE8A2, 0x71AC}, //14982 #CJK UNIFIED IDEOGRAPH + {0xE8A3, 0x7352}, //14983 #CJK UNIFIED IDEOGRAPH + {0xE8A4, 0x7B7D}, //14984 #CJK UNIFIED IDEOGRAPH + {0xE8A5, 0x8708}, //14985 #CJK UNIFIED IDEOGRAPH + {0xE8A6, 0x8AA4}, //14986 #CJK UNIFIED IDEOGRAPH + {0xE8A7, 0x9C32}, //14987 #CJK UNIFIED IDEOGRAPH + {0xE8A8, 0x9F07}, //14988 #CJK UNIFIED IDEOGRAPH + {0xE8A9, 0x5C4B}, //14989 #CJK UNIFIED IDEOGRAPH + {0xE8AA, 0x6C83}, //14990 #CJK UNIFIED IDEOGRAPH + {0xE8AB, 0x7344}, //14991 #CJK UNIFIED IDEOGRAPH + {0xE8AC, 0x7389}, //14992 #CJK UNIFIED IDEOGRAPH + {0xE8AD, 0x923A}, //14993 #CJK UNIFIED IDEOGRAPH + {0xE8AE, 0x6EAB}, //14994 #CJK UNIFIED IDEOGRAPH + {0xE8AF, 0x7465}, //14995 #CJK UNIFIED IDEOGRAPH + {0xE8B0, 0x761F}, //14996 #CJK UNIFIED IDEOGRAPH + {0xE8B1, 0x7A69}, //14997 #CJK UNIFIED IDEOGRAPH + {0xE8B2, 0x7E15}, //14998 #CJK UNIFIED IDEOGRAPH + {0xE8B3, 0x860A}, //14999 #CJK UNIFIED IDEOGRAPH + {0xE8B4, 0x5140}, //15000 #CJK UNIFIED IDEOGRAPH + {0xE8B5, 0x58C5}, //15001 #CJK UNIFIED IDEOGRAPH + {0xE8B6, 0x64C1}, //15002 #CJK UNIFIED IDEOGRAPH + {0xE8B7, 0x74EE}, //15003 #CJK UNIFIED IDEOGRAPH + {0xE8B8, 0x7515}, //15004 #CJK UNIFIED IDEOGRAPH + {0xE8B9, 0x7670}, //15005 #CJK UNIFIED IDEOGRAPH + {0xE8BA, 0x7FC1}, //15006 #CJK UNIFIED IDEOGRAPH + {0xE8BB, 0x9095}, //15007 #CJK UNIFIED IDEOGRAPH + {0xE8BC, 0x96CD}, //15008 #CJK UNIFIED IDEOGRAPH + {0xE8BD, 0x9954}, //15009 #CJK UNIFIED IDEOGRAPH + {0xE8BE, 0x6E26}, //15010 #CJK UNIFIED IDEOGRAPH + {0xE8BF, 0x74E6}, //15011 #CJK UNIFIED IDEOGRAPH + {0xE8C0, 0x7AA9}, //15012 #CJK UNIFIED IDEOGRAPH + {0xE8C1, 0x7AAA}, //15013 #CJK UNIFIED IDEOGRAPH + {0xE8C2, 0x81E5}, //15014 #CJK UNIFIED IDEOGRAPH + {0xE8C3, 0x86D9}, //15015 #CJK UNIFIED IDEOGRAPH + {0xE8C4, 0x8778}, //15016 #CJK UNIFIED IDEOGRAPH + {0xE8C5, 0x8A1B}, //15017 #CJK UNIFIED IDEOGRAPH + {0xE8C6, 0x5A49}, //15018 #CJK UNIFIED IDEOGRAPH + {0xE8C7, 0x5B8C}, //15019 #CJK UNIFIED IDEOGRAPH + {0xE8C8, 0x5B9B}, //15020 #CJK UNIFIED IDEOGRAPH + {0xE8C9, 0x68A1}, //15021 #CJK UNIFIED IDEOGRAPH + {0xE8CA, 0x6900}, //15022 #CJK UNIFIED IDEOGRAPH + {0xE8CB, 0x6D63}, //15023 #CJK UNIFIED IDEOGRAPH + {0xE8CC, 0x73A9}, //15024 #CJK UNIFIED IDEOGRAPH + {0xE8CD, 0x7413}, //15025 #CJK UNIFIED IDEOGRAPH + {0xE8CE, 0x742C}, //15026 #CJK UNIFIED IDEOGRAPH + {0xE8CF, 0x7897}, //15027 #CJK UNIFIED IDEOGRAPH + {0xE8D0, 0x7DE9}, //15028 #CJK UNIFIED IDEOGRAPH + {0xE8D1, 0x7FEB}, //15029 #CJK UNIFIED IDEOGRAPH + {0xE8D2, 0x8118}, //15030 #CJK UNIFIED IDEOGRAPH + {0xE8D3, 0x8155}, //15031 #CJK UNIFIED IDEOGRAPH + {0xE8D4, 0x839E}, //15032 #CJK UNIFIED IDEOGRAPH + {0xE8D5, 0x8C4C}, //15033 #CJK UNIFIED IDEOGRAPH + {0xE8D6, 0x962E}, //15034 #CJK UNIFIED IDEOGRAPH + {0xE8D7, 0x9811}, //15035 #CJK UNIFIED IDEOGRAPH + {0xE8D8, 0x66F0}, //15036 #CJK UNIFIED IDEOGRAPH + {0xE8D9, 0x5F80}, //15037 #CJK UNIFIED IDEOGRAPH + {0xE8DA, 0x65FA}, //15038 #CJK UNIFIED IDEOGRAPH + {0xE8DB, 0x6789}, //15039 #CJK UNIFIED IDEOGRAPH + {0xE8DC, 0x6C6A}, //15040 #CJK UNIFIED IDEOGRAPH + {0xE8DD, 0x738B}, //15041 #CJK UNIFIED IDEOGRAPH + {0xE8DE, 0x502D}, //15042 #CJK UNIFIED IDEOGRAPH + {0xE8DF, 0x5A03}, //15043 #CJK UNIFIED IDEOGRAPH + {0xE8E0, 0x6B6A}, //15044 #CJK UNIFIED IDEOGRAPH + {0xE8E1, 0x77EE}, //15045 #CJK UNIFIED IDEOGRAPH + {0xE8E2, 0x5916}, //15046 #CJK UNIFIED IDEOGRAPH + {0xE8E3, 0x5D6C}, //15047 #CJK UNIFIED IDEOGRAPH + {0xE8E4, 0x5DCD}, //15048 #CJK UNIFIED IDEOGRAPH + {0xE8E5, 0x7325}, //15049 #CJK UNIFIED IDEOGRAPH + {0xE8E6, 0x754F}, //15050 #CJK UNIFIED IDEOGRAPH + {0xE8E7, 0xF9BA}, //15051 #CJK COMPATIBILITY IDEOGRAPH + {0xE8E8, 0xF9BB}, //15052 #CJK COMPATIBILITY IDEOGRAPH + {0xE8E9, 0x50E5}, //15053 #CJK UNIFIED IDEOGRAPH + {0xE8EA, 0x51F9}, //15054 #CJK UNIFIED IDEOGRAPH + {0xE8EB, 0x582F}, //15055 #CJK UNIFIED IDEOGRAPH + {0xE8EC, 0x592D}, //15056 #CJK UNIFIED IDEOGRAPH + {0xE8ED, 0x5996}, //15057 #CJK UNIFIED IDEOGRAPH + {0xE8EE, 0x59DA}, //15058 #CJK UNIFIED IDEOGRAPH + {0xE8EF, 0x5BE5}, //15059 #CJK UNIFIED IDEOGRAPH + {0xE8F0, 0xF9BC}, //15060 #CJK COMPATIBILITY IDEOGRAPH + {0xE8F1, 0xF9BD}, //15061 #CJK COMPATIBILITY IDEOGRAPH + {0xE8F2, 0x5DA2}, //15062 #CJK UNIFIED IDEOGRAPH + {0xE8F3, 0x62D7}, //15063 #CJK UNIFIED IDEOGRAPH + {0xE8F4, 0x6416}, //15064 #CJK UNIFIED IDEOGRAPH + {0xE8F5, 0x6493}, //15065 #CJK UNIFIED IDEOGRAPH + {0xE8F6, 0x64FE}, //15066 #CJK UNIFIED IDEOGRAPH + {0xE8F7, 0xF9BE}, //15067 #CJK COMPATIBILITY IDEOGRAPH + {0xE8F8, 0x66DC}, //15068 #CJK UNIFIED IDEOGRAPH + {0xE8F9, 0xF9BF}, //15069 #CJK COMPATIBILITY IDEOGRAPH + {0xE8FA, 0x6A48}, //15070 #CJK UNIFIED IDEOGRAPH + {0xE8FB, 0xF9C0}, //15071 #CJK COMPATIBILITY IDEOGRAPH + {0xE8FC, 0x71FF}, //15072 #CJK UNIFIED IDEOGRAPH + {0xE8FD, 0x7464}, //15073 #CJK UNIFIED IDEOGRAPH + {0xE8FE, 0xF9C1}, //15074 #CJK COMPATIBILITY IDEOGRAPH + {0xE9A1, 0x7A88}, //15075 #CJK UNIFIED IDEOGRAPH + {0xE9A2, 0x7AAF}, //15076 #CJK UNIFIED IDEOGRAPH + {0xE9A3, 0x7E47}, //15077 #CJK UNIFIED IDEOGRAPH + {0xE9A4, 0x7E5E}, //15078 #CJK UNIFIED IDEOGRAPH + {0xE9A5, 0x8000}, //15079 #CJK UNIFIED IDEOGRAPH + {0xE9A6, 0x8170}, //15080 #CJK UNIFIED IDEOGRAPH + {0xE9A7, 0xF9C2}, //15081 #CJK COMPATIBILITY IDEOGRAPH + {0xE9A8, 0x87EF}, //15082 #CJK UNIFIED IDEOGRAPH + {0xE9A9, 0x8981}, //15083 #CJK UNIFIED IDEOGRAPH + {0xE9AA, 0x8B20}, //15084 #CJK UNIFIED IDEOGRAPH + {0xE9AB, 0x9059}, //15085 #CJK UNIFIED IDEOGRAPH + {0xE9AC, 0xF9C3}, //15086 #CJK COMPATIBILITY IDEOGRAPH + {0xE9AD, 0x9080}, //15087 #CJK UNIFIED IDEOGRAPH + {0xE9AE, 0x9952}, //15088 #CJK UNIFIED IDEOGRAPH + {0xE9AF, 0x617E}, //15089 #CJK UNIFIED IDEOGRAPH + {0xE9B0, 0x6B32}, //15090 #CJK UNIFIED IDEOGRAPH + {0xE9B1, 0x6D74}, //15091 #CJK UNIFIED IDEOGRAPH + {0xE9B2, 0x7E1F}, //15092 #CJK UNIFIED IDEOGRAPH + {0xE9B3, 0x8925}, //15093 #CJK UNIFIED IDEOGRAPH + {0xE9B4, 0x8FB1}, //15094 #CJK UNIFIED IDEOGRAPH + {0xE9B5, 0x4FD1}, //15095 #CJK UNIFIED IDEOGRAPH + {0xE9B6, 0x50AD}, //15096 #CJK UNIFIED IDEOGRAPH + {0xE9B7, 0x5197}, //15097 #CJK UNIFIED IDEOGRAPH + {0xE9B8, 0x52C7}, //15098 #CJK UNIFIED IDEOGRAPH + {0xE9B9, 0x57C7}, //15099 #CJK UNIFIED IDEOGRAPH + {0xE9BA, 0x5889}, //15100 #CJK UNIFIED IDEOGRAPH + {0xE9BB, 0x5BB9}, //15101 #CJK UNIFIED IDEOGRAPH + {0xE9BC, 0x5EB8}, //15102 #CJK UNIFIED IDEOGRAPH + {0xE9BD, 0x6142}, //15103 #CJK UNIFIED IDEOGRAPH + {0xE9BE, 0x6995}, //15104 #CJK UNIFIED IDEOGRAPH + {0xE9BF, 0x6D8C}, //15105 #CJK UNIFIED IDEOGRAPH + {0xE9C0, 0x6E67}, //15106 #CJK UNIFIED IDEOGRAPH + {0xE9C1, 0x6EB6}, //15107 #CJK UNIFIED IDEOGRAPH + {0xE9C2, 0x7194}, //15108 #CJK UNIFIED IDEOGRAPH + {0xE9C3, 0x7462}, //15109 #CJK UNIFIED IDEOGRAPH + {0xE9C4, 0x7528}, //15110 #CJK UNIFIED IDEOGRAPH + {0xE9C5, 0x752C}, //15111 #CJK UNIFIED IDEOGRAPH + {0xE9C6, 0x8073}, //15112 #CJK UNIFIED IDEOGRAPH + {0xE9C7, 0x8338}, //15113 #CJK UNIFIED IDEOGRAPH + {0xE9C8, 0x84C9}, //15114 #CJK UNIFIED IDEOGRAPH + {0xE9C9, 0x8E0A}, //15115 #CJK UNIFIED IDEOGRAPH + {0xE9CA, 0x9394}, //15116 #CJK UNIFIED IDEOGRAPH + {0xE9CB, 0x93DE}, //15117 #CJK UNIFIED IDEOGRAPH + {0xE9CC, 0xF9C4}, //15118 #CJK COMPATIBILITY IDEOGRAPH + {0xE9CD, 0x4E8E}, //15119 #CJK UNIFIED IDEOGRAPH + {0xE9CE, 0x4F51}, //15120 #CJK UNIFIED IDEOGRAPH + {0xE9CF, 0x5076}, //15121 #CJK UNIFIED IDEOGRAPH + {0xE9D0, 0x512A}, //15122 #CJK UNIFIED IDEOGRAPH + {0xE9D1, 0x53C8}, //15123 #CJK UNIFIED IDEOGRAPH + {0xE9D2, 0x53CB}, //15124 #CJK UNIFIED IDEOGRAPH + {0xE9D3, 0x53F3}, //15125 #CJK UNIFIED IDEOGRAPH + {0xE9D4, 0x5B87}, //15126 #CJK UNIFIED IDEOGRAPH + {0xE9D5, 0x5BD3}, //15127 #CJK UNIFIED IDEOGRAPH + {0xE9D6, 0x5C24}, //15128 #CJK UNIFIED IDEOGRAPH + {0xE9D7, 0x611A}, //15129 #CJK UNIFIED IDEOGRAPH + {0xE9D8, 0x6182}, //15130 #CJK UNIFIED IDEOGRAPH + {0xE9D9, 0x65F4}, //15131 #CJK UNIFIED IDEOGRAPH + {0xE9DA, 0x725B}, //15132 #CJK UNIFIED IDEOGRAPH + {0xE9DB, 0x7397}, //15133 #CJK UNIFIED IDEOGRAPH + {0xE9DC, 0x7440}, //15134 #CJK UNIFIED IDEOGRAPH + {0xE9DD, 0x76C2}, //15135 #CJK UNIFIED IDEOGRAPH + {0xE9DE, 0x7950}, //15136 #CJK UNIFIED IDEOGRAPH + {0xE9DF, 0x7991}, //15137 #CJK UNIFIED IDEOGRAPH + {0xE9E0, 0x79B9}, //15138 #CJK UNIFIED IDEOGRAPH + {0xE9E1, 0x7D06}, //15139 #CJK UNIFIED IDEOGRAPH + {0xE9E2, 0x7FBD}, //15140 #CJK UNIFIED IDEOGRAPH + {0xE9E3, 0x828B}, //15141 #CJK UNIFIED IDEOGRAPH + {0xE9E4, 0x85D5}, //15142 #CJK UNIFIED IDEOGRAPH + {0xE9E5, 0x865E}, //15143 #CJK UNIFIED IDEOGRAPH + {0xE9E6, 0x8FC2}, //15144 #CJK UNIFIED IDEOGRAPH + {0xE9E7, 0x9047}, //15145 #CJK UNIFIED IDEOGRAPH + {0xE9E8, 0x90F5}, //15146 #CJK UNIFIED IDEOGRAPH + {0xE9E9, 0x91EA}, //15147 #CJK UNIFIED IDEOGRAPH + {0xE9EA, 0x9685}, //15148 #CJK UNIFIED IDEOGRAPH + {0xE9EB, 0x96E8}, //15149 #CJK UNIFIED IDEOGRAPH + {0xE9EC, 0x96E9}, //15150 #CJK UNIFIED IDEOGRAPH + {0xE9ED, 0x52D6}, //15151 #CJK UNIFIED IDEOGRAPH + {0xE9EE, 0x5F67}, //15152 #CJK UNIFIED IDEOGRAPH + {0xE9EF, 0x65ED}, //15153 #CJK UNIFIED IDEOGRAPH + {0xE9F0, 0x6631}, //15154 #CJK UNIFIED IDEOGRAPH + {0xE9F1, 0x682F}, //15155 #CJK UNIFIED IDEOGRAPH + {0xE9F2, 0x715C}, //15156 #CJK UNIFIED IDEOGRAPH + {0xE9F3, 0x7A36}, //15157 #CJK UNIFIED IDEOGRAPH + {0xE9F4, 0x90C1}, //15158 #CJK UNIFIED IDEOGRAPH + {0xE9F5, 0x980A}, //15159 #CJK UNIFIED IDEOGRAPH + {0xE9F6, 0x4E91}, //15160 #CJK UNIFIED IDEOGRAPH + {0xE9F7, 0xF9C5}, //15161 #CJK COMPATIBILITY IDEOGRAPH + {0xE9F8, 0x6A52}, //15162 #CJK UNIFIED IDEOGRAPH + {0xE9F9, 0x6B9E}, //15163 #CJK UNIFIED IDEOGRAPH + {0xE9FA, 0x6F90}, //15164 #CJK UNIFIED IDEOGRAPH + {0xE9FB, 0x7189}, //15165 #CJK UNIFIED IDEOGRAPH + {0xE9FC, 0x8018}, //15166 #CJK UNIFIED IDEOGRAPH + {0xE9FD, 0x82B8}, //15167 #CJK UNIFIED IDEOGRAPH + {0xE9FE, 0x8553}, //15168 #CJK UNIFIED IDEOGRAPH + {0xEAA1, 0x904B}, //15169 #CJK UNIFIED IDEOGRAPH + {0xEAA2, 0x9695}, //15170 #CJK UNIFIED IDEOGRAPH + {0xEAA3, 0x96F2}, //15171 #CJK UNIFIED IDEOGRAPH + {0xEAA4, 0x97FB}, //15172 #CJK UNIFIED IDEOGRAPH + {0xEAA5, 0x851A}, //15173 #CJK UNIFIED IDEOGRAPH + {0xEAA6, 0x9B31}, //15174 #CJK UNIFIED IDEOGRAPH + {0xEAA7, 0x4E90}, //15175 #CJK UNIFIED IDEOGRAPH + {0xEAA8, 0x718A}, //15176 #CJK UNIFIED IDEOGRAPH + {0xEAA9, 0x96C4}, //15177 #CJK UNIFIED IDEOGRAPH + {0xEAAA, 0x5143}, //15178 #CJK UNIFIED IDEOGRAPH + {0xEAAB, 0x539F}, //15179 #CJK UNIFIED IDEOGRAPH + {0xEAAC, 0x54E1}, //15180 #CJK UNIFIED IDEOGRAPH + {0xEAAD, 0x5713}, //15181 #CJK UNIFIED IDEOGRAPH + {0xEAAE, 0x5712}, //15182 #CJK UNIFIED IDEOGRAPH + {0xEAAF, 0x57A3}, //15183 #CJK UNIFIED IDEOGRAPH + {0xEAB0, 0x5A9B}, //15184 #CJK UNIFIED IDEOGRAPH + {0xEAB1, 0x5AC4}, //15185 #CJK UNIFIED IDEOGRAPH + {0xEAB2, 0x5BC3}, //15186 #CJK UNIFIED IDEOGRAPH + {0xEAB3, 0x6028}, //15187 #CJK UNIFIED IDEOGRAPH + {0xEAB4, 0x613F}, //15188 #CJK UNIFIED IDEOGRAPH + {0xEAB5, 0x63F4}, //15189 #CJK UNIFIED IDEOGRAPH + {0xEAB6, 0x6C85}, //15190 #CJK UNIFIED IDEOGRAPH + {0xEAB7, 0x6D39}, //15191 #CJK UNIFIED IDEOGRAPH + {0xEAB8, 0x6E72}, //15192 #CJK UNIFIED IDEOGRAPH + {0xEAB9, 0x6E90}, //15193 #CJK UNIFIED IDEOGRAPH + {0xEABA, 0x7230}, //15194 #CJK UNIFIED IDEOGRAPH + {0xEABB, 0x733F}, //15195 #CJK UNIFIED IDEOGRAPH + {0xEABC, 0x7457}, //15196 #CJK UNIFIED IDEOGRAPH + {0xEABD, 0x82D1}, //15197 #CJK UNIFIED IDEOGRAPH + {0xEABE, 0x8881}, //15198 #CJK UNIFIED IDEOGRAPH + {0xEABF, 0x8F45}, //15199 #CJK UNIFIED IDEOGRAPH + {0xEAC0, 0x9060}, //15200 #CJK UNIFIED IDEOGRAPH + {0xEAC1, 0xF9C6}, //15201 #CJK COMPATIBILITY IDEOGRAPH + {0xEAC2, 0x9662}, //15202 #CJK UNIFIED IDEOGRAPH + {0xEAC3, 0x9858}, //15203 #CJK UNIFIED IDEOGRAPH + {0xEAC4, 0x9D1B}, //15204 #CJK UNIFIED IDEOGRAPH + {0xEAC5, 0x6708}, //15205 #CJK UNIFIED IDEOGRAPH + {0xEAC6, 0x8D8A}, //15206 #CJK UNIFIED IDEOGRAPH + {0xEAC7, 0x925E}, //15207 #CJK UNIFIED IDEOGRAPH + {0xEAC8, 0x4F4D}, //15208 #CJK UNIFIED IDEOGRAPH + {0xEAC9, 0x5049}, //15209 #CJK UNIFIED IDEOGRAPH + {0xEACA, 0x50DE}, //15210 #CJK UNIFIED IDEOGRAPH + {0xEACB, 0x5371}, //15211 #CJK UNIFIED IDEOGRAPH + {0xEACC, 0x570D}, //15212 #CJK UNIFIED IDEOGRAPH + {0xEACD, 0x59D4}, //15213 #CJK UNIFIED IDEOGRAPH + {0xEACE, 0x5A01}, //15214 #CJK UNIFIED IDEOGRAPH + {0xEACF, 0x5C09}, //15215 #CJK UNIFIED IDEOGRAPH + {0xEAD0, 0x6170}, //15216 #CJK UNIFIED IDEOGRAPH + {0xEAD1, 0x6690}, //15217 #CJK UNIFIED IDEOGRAPH + {0xEAD2, 0x6E2D}, //15218 #CJK UNIFIED IDEOGRAPH + {0xEAD3, 0x7232}, //15219 #CJK UNIFIED IDEOGRAPH + {0xEAD4, 0x744B}, //15220 #CJK UNIFIED IDEOGRAPH + {0xEAD5, 0x7DEF}, //15221 #CJK UNIFIED IDEOGRAPH + {0xEAD6, 0x80C3}, //15222 #CJK UNIFIED IDEOGRAPH + {0xEAD7, 0x840E}, //15223 #CJK UNIFIED IDEOGRAPH + {0xEAD8, 0x8466}, //15224 #CJK UNIFIED IDEOGRAPH + {0xEAD9, 0x853F}, //15225 #CJK UNIFIED IDEOGRAPH + {0xEADA, 0x875F}, //15226 #CJK UNIFIED IDEOGRAPH + {0xEADB, 0x885B}, //15227 #CJK UNIFIED IDEOGRAPH + {0xEADC, 0x8918}, //15228 #CJK UNIFIED IDEOGRAPH + {0xEADD, 0x8B02}, //15229 #CJK UNIFIED IDEOGRAPH + {0xEADE, 0x9055}, //15230 #CJK UNIFIED IDEOGRAPH + {0xEADF, 0x97CB}, //15231 #CJK UNIFIED IDEOGRAPH + {0xEAE0, 0x9B4F}, //15232 #CJK UNIFIED IDEOGRAPH + {0xEAE1, 0x4E73}, //15233 #CJK UNIFIED IDEOGRAPH + {0xEAE2, 0x4F91}, //15234 #CJK UNIFIED IDEOGRAPH + {0xEAE3, 0x5112}, //15235 #CJK UNIFIED IDEOGRAPH + {0xEAE4, 0x516A}, //15236 #CJK UNIFIED IDEOGRAPH + {0xEAE5, 0xF9C7}, //15237 #CJK COMPATIBILITY IDEOGRAPH + {0xEAE6, 0x552F}, //15238 #CJK UNIFIED IDEOGRAPH + {0xEAE7, 0x55A9}, //15239 #CJK UNIFIED IDEOGRAPH + {0xEAE8, 0x5B7A}, //15240 #CJK UNIFIED IDEOGRAPH + {0xEAE9, 0x5BA5}, //15241 #CJK UNIFIED IDEOGRAPH + {0xEAEA, 0x5E7C}, //15242 #CJK UNIFIED IDEOGRAPH + {0xEAEB, 0x5E7D}, //15243 #CJK UNIFIED IDEOGRAPH + {0xEAEC, 0x5EBE}, //15244 #CJK UNIFIED IDEOGRAPH + {0xEAED, 0x60A0}, //15245 #CJK UNIFIED IDEOGRAPH + {0xEAEE, 0x60DF}, //15246 #CJK UNIFIED IDEOGRAPH + {0xEAEF, 0x6108}, //15247 #CJK UNIFIED IDEOGRAPH + {0xEAF0, 0x6109}, //15248 #CJK UNIFIED IDEOGRAPH + {0xEAF1, 0x63C4}, //15249 #CJK UNIFIED IDEOGRAPH + {0xEAF2, 0x6538}, //15250 #CJK UNIFIED IDEOGRAPH + {0xEAF3, 0x6709}, //15251 #CJK UNIFIED IDEOGRAPH + {0xEAF4, 0xF9C8}, //15252 #CJK COMPATIBILITY IDEOGRAPH + {0xEAF5, 0x67D4}, //15253 #CJK UNIFIED IDEOGRAPH + {0xEAF6, 0x67DA}, //15254 #CJK UNIFIED IDEOGRAPH + {0xEAF7, 0xF9C9}, //15255 #CJK COMPATIBILITY IDEOGRAPH + {0xEAF8, 0x6961}, //15256 #CJK UNIFIED IDEOGRAPH + {0xEAF9, 0x6962}, //15257 #CJK UNIFIED IDEOGRAPH + {0xEAFA, 0x6CB9}, //15258 #CJK UNIFIED IDEOGRAPH + {0xEAFB, 0x6D27}, //15259 #CJK UNIFIED IDEOGRAPH + {0xEAFC, 0xF9CA}, //15260 #CJK COMPATIBILITY IDEOGRAPH + {0xEAFD, 0x6E38}, //15261 #CJK UNIFIED IDEOGRAPH + {0xEAFE, 0xF9CB}, //15262 #CJK COMPATIBILITY IDEOGRAPH + {0xEBA1, 0x6FE1}, //15263 #CJK UNIFIED IDEOGRAPH + {0xEBA2, 0x7336}, //15264 #CJK UNIFIED IDEOGRAPH + {0xEBA3, 0x7337}, //15265 #CJK UNIFIED IDEOGRAPH + {0xEBA4, 0xF9CC}, //15266 #CJK COMPATIBILITY IDEOGRAPH + {0xEBA5, 0x745C}, //15267 #CJK UNIFIED IDEOGRAPH + {0xEBA6, 0x7531}, //15268 #CJK UNIFIED IDEOGRAPH + {0xEBA7, 0xF9CD}, //15269 #CJK COMPATIBILITY IDEOGRAPH + {0xEBA8, 0x7652}, //15270 #CJK UNIFIED IDEOGRAPH + {0xEBA9, 0xF9CE}, //15271 #CJK COMPATIBILITY IDEOGRAPH + {0xEBAA, 0xF9CF}, //15272 #CJK COMPATIBILITY IDEOGRAPH + {0xEBAB, 0x7DAD}, //15273 #CJK UNIFIED IDEOGRAPH + {0xEBAC, 0x81FE}, //15274 #CJK UNIFIED IDEOGRAPH + {0xEBAD, 0x8438}, //15275 #CJK UNIFIED IDEOGRAPH + {0xEBAE, 0x88D5}, //15276 #CJK UNIFIED IDEOGRAPH + {0xEBAF, 0x8A98}, //15277 #CJK UNIFIED IDEOGRAPH + {0xEBB0, 0x8ADB}, //15278 #CJK UNIFIED IDEOGRAPH + {0xEBB1, 0x8AED}, //15279 #CJK UNIFIED IDEOGRAPH + {0xEBB2, 0x8E30}, //15280 #CJK UNIFIED IDEOGRAPH + {0xEBB3, 0x8E42}, //15281 #CJK UNIFIED IDEOGRAPH + {0xEBB4, 0x904A}, //15282 #CJK UNIFIED IDEOGRAPH + {0xEBB5, 0x903E}, //15283 #CJK UNIFIED IDEOGRAPH + {0xEBB6, 0x907A}, //15284 #CJK UNIFIED IDEOGRAPH + {0xEBB7, 0x9149}, //15285 #CJK UNIFIED IDEOGRAPH + {0xEBB8, 0x91C9}, //15286 #CJK UNIFIED IDEOGRAPH + {0xEBB9, 0x936E}, //15287 #CJK UNIFIED IDEOGRAPH + {0xEBBA, 0xF9D0}, //15288 #CJK COMPATIBILITY IDEOGRAPH + {0xEBBB, 0xF9D1}, //15289 #CJK COMPATIBILITY IDEOGRAPH + {0xEBBC, 0x5809}, //15290 #CJK UNIFIED IDEOGRAPH + {0xEBBD, 0xF9D2}, //15291 #CJK COMPATIBILITY IDEOGRAPH + {0xEBBE, 0x6BD3}, //15292 #CJK UNIFIED IDEOGRAPH + {0xEBBF, 0x8089}, //15293 #CJK UNIFIED IDEOGRAPH + {0xEBC0, 0x80B2}, //15294 #CJK UNIFIED IDEOGRAPH + {0xEBC1, 0xF9D3}, //15295 #CJK COMPATIBILITY IDEOGRAPH + {0xEBC2, 0xF9D4}, //15296 #CJK COMPATIBILITY IDEOGRAPH + {0xEBC3, 0x5141}, //15297 #CJK UNIFIED IDEOGRAPH + {0xEBC4, 0x596B}, //15298 #CJK UNIFIED IDEOGRAPH + {0xEBC5, 0x5C39}, //15299 #CJK UNIFIED IDEOGRAPH + {0xEBC6, 0xF9D5}, //15300 #CJK COMPATIBILITY IDEOGRAPH + {0xEBC7, 0xF9D6}, //15301 #CJK COMPATIBILITY IDEOGRAPH + {0xEBC8, 0x6F64}, //15302 #CJK UNIFIED IDEOGRAPH + {0xEBC9, 0x73A7}, //15303 #CJK UNIFIED IDEOGRAPH + {0xEBCA, 0x80E4}, //15304 #CJK UNIFIED IDEOGRAPH + {0xEBCB, 0x8D07}, //15305 #CJK UNIFIED IDEOGRAPH + {0xEBCC, 0xF9D7}, //15306 #CJK COMPATIBILITY IDEOGRAPH + {0xEBCD, 0x9217}, //15307 #CJK UNIFIED IDEOGRAPH + {0xEBCE, 0x958F}, //15308 #CJK UNIFIED IDEOGRAPH + {0xEBCF, 0xF9D8}, //15309 #CJK COMPATIBILITY IDEOGRAPH + {0xEBD0, 0xF9D9}, //15310 #CJK COMPATIBILITY IDEOGRAPH + {0xEBD1, 0xF9DA}, //15311 #CJK COMPATIBILITY IDEOGRAPH + {0xEBD2, 0xF9DB}, //15312 #CJK COMPATIBILITY IDEOGRAPH + {0xEBD3, 0x807F}, //15313 #CJK UNIFIED IDEOGRAPH + {0xEBD4, 0x620E}, //15314 #CJK UNIFIED IDEOGRAPH + {0xEBD5, 0x701C}, //15315 #CJK UNIFIED IDEOGRAPH + {0xEBD6, 0x7D68}, //15316 #CJK UNIFIED IDEOGRAPH + {0xEBD7, 0x878D}, //15317 #CJK UNIFIED IDEOGRAPH + {0xEBD8, 0xF9DC}, //15318 #CJK COMPATIBILITY IDEOGRAPH + {0xEBD9, 0x57A0}, //15319 #CJK UNIFIED IDEOGRAPH + {0xEBDA, 0x6069}, //15320 #CJK UNIFIED IDEOGRAPH + {0xEBDB, 0x6147}, //15321 #CJK UNIFIED IDEOGRAPH + {0xEBDC, 0x6BB7}, //15322 #CJK UNIFIED IDEOGRAPH + {0xEBDD, 0x8ABE}, //15323 #CJK UNIFIED IDEOGRAPH + {0xEBDE, 0x9280}, //15324 #CJK UNIFIED IDEOGRAPH + {0xEBDF, 0x96B1}, //15325 #CJK UNIFIED IDEOGRAPH + {0xEBE0, 0x4E59}, //15326 #CJK UNIFIED IDEOGRAPH + {0xEBE1, 0x541F}, //15327 #CJK UNIFIED IDEOGRAPH + {0xEBE2, 0x6DEB}, //15328 #CJK UNIFIED IDEOGRAPH + {0xEBE3, 0x852D}, //15329 #CJK UNIFIED IDEOGRAPH + {0xEBE4, 0x9670}, //15330 #CJK UNIFIED IDEOGRAPH + {0xEBE5, 0x97F3}, //15331 #CJK UNIFIED IDEOGRAPH + {0xEBE6, 0x98EE}, //15332 #CJK UNIFIED IDEOGRAPH + {0xEBE7, 0x63D6}, //15333 #CJK UNIFIED IDEOGRAPH + {0xEBE8, 0x6CE3}, //15334 #CJK UNIFIED IDEOGRAPH + {0xEBE9, 0x9091}, //15335 #CJK UNIFIED IDEOGRAPH + {0xEBEA, 0x51DD}, //15336 #CJK UNIFIED IDEOGRAPH + {0xEBEB, 0x61C9}, //15337 #CJK UNIFIED IDEOGRAPH + {0xEBEC, 0x81BA}, //15338 #CJK UNIFIED IDEOGRAPH + {0xEBED, 0x9DF9}, //15339 #CJK UNIFIED IDEOGRAPH + {0xEBEE, 0x4F9D}, //15340 #CJK UNIFIED IDEOGRAPH + {0xEBEF, 0x501A}, //15341 #CJK UNIFIED IDEOGRAPH + {0xEBF0, 0x5100}, //15342 #CJK UNIFIED IDEOGRAPH + {0xEBF1, 0x5B9C}, //15343 #CJK UNIFIED IDEOGRAPH + {0xEBF2, 0x610F}, //15344 #CJK UNIFIED IDEOGRAPH + {0xEBF3, 0x61FF}, //15345 #CJK UNIFIED IDEOGRAPH + {0xEBF4, 0x64EC}, //15346 #CJK UNIFIED IDEOGRAPH + {0xEBF5, 0x6905}, //15347 #CJK UNIFIED IDEOGRAPH + {0xEBF6, 0x6BC5}, //15348 #CJK UNIFIED IDEOGRAPH + {0xEBF7, 0x7591}, //15349 #CJK UNIFIED IDEOGRAPH + {0xEBF8, 0x77E3}, //15350 #CJK UNIFIED IDEOGRAPH + {0xEBF9, 0x7FA9}, //15351 #CJK UNIFIED IDEOGRAPH + {0xEBFA, 0x8264}, //15352 #CJK UNIFIED IDEOGRAPH + {0xEBFB, 0x858F}, //15353 #CJK UNIFIED IDEOGRAPH + {0xEBFC, 0x87FB}, //15354 #CJK UNIFIED IDEOGRAPH + {0xEBFD, 0x8863}, //15355 #CJK UNIFIED IDEOGRAPH + {0xEBFE, 0x8ABC}, //15356 #CJK UNIFIED IDEOGRAPH + {0xECA1, 0x8B70}, //15357 #CJK UNIFIED IDEOGRAPH + {0xECA2, 0x91AB}, //15358 #CJK UNIFIED IDEOGRAPH + {0xECA3, 0x4E8C}, //15359 #CJK UNIFIED IDEOGRAPH + {0xECA4, 0x4EE5}, //15360 #CJK UNIFIED IDEOGRAPH + {0xECA5, 0x4F0A}, //15361 #CJK UNIFIED IDEOGRAPH + {0xECA6, 0xF9DD}, //15362 #CJK COMPATIBILITY IDEOGRAPH + {0xECA7, 0xF9DE}, //15363 #CJK COMPATIBILITY IDEOGRAPH + {0xECA8, 0x5937}, //15364 #CJK UNIFIED IDEOGRAPH + {0xECA9, 0x59E8}, //15365 #CJK UNIFIED IDEOGRAPH + {0xECAA, 0xF9DF}, //15366 #CJK COMPATIBILITY IDEOGRAPH + {0xECAB, 0x5DF2}, //15367 #CJK UNIFIED IDEOGRAPH + {0xECAC, 0x5F1B}, //15368 #CJK UNIFIED IDEOGRAPH + {0xECAD, 0x5F5B}, //15369 #CJK UNIFIED IDEOGRAPH + {0xECAE, 0x6021}, //15370 #CJK UNIFIED IDEOGRAPH + {0xECAF, 0xF9E0}, //15371 #CJK COMPATIBILITY IDEOGRAPH + {0xECB0, 0xF9E1}, //15372 #CJK COMPATIBILITY IDEOGRAPH + {0xECB1, 0xF9E2}, //15373 #CJK COMPATIBILITY IDEOGRAPH + {0xECB2, 0xF9E3}, //15374 #CJK COMPATIBILITY IDEOGRAPH + {0xECB3, 0x723E}, //15375 #CJK UNIFIED IDEOGRAPH + {0xECB4, 0x73E5}, //15376 #CJK UNIFIED IDEOGRAPH + {0xECB5, 0xF9E4}, //15377 #CJK COMPATIBILITY IDEOGRAPH + {0xECB6, 0x7570}, //15378 #CJK UNIFIED IDEOGRAPH + {0xECB7, 0x75CD}, //15379 #CJK UNIFIED IDEOGRAPH + {0xECB8, 0xF9E5}, //15380 #CJK COMPATIBILITY IDEOGRAPH + {0xECB9, 0x79FB}, //15381 #CJK UNIFIED IDEOGRAPH + {0xECBA, 0xF9E6}, //15382 #CJK COMPATIBILITY IDEOGRAPH + {0xECBB, 0x800C}, //15383 #CJK UNIFIED IDEOGRAPH + {0xECBC, 0x8033}, //15384 #CJK UNIFIED IDEOGRAPH + {0xECBD, 0x8084}, //15385 #CJK UNIFIED IDEOGRAPH + {0xECBE, 0x82E1}, //15386 #CJK UNIFIED IDEOGRAPH + {0xECBF, 0x8351}, //15387 #CJK UNIFIED IDEOGRAPH + {0xECC0, 0xF9E7}, //15388 #CJK COMPATIBILITY IDEOGRAPH + {0xECC1, 0xF9E8}, //15389 #CJK COMPATIBILITY IDEOGRAPH + {0xECC2, 0x8CBD}, //15390 #CJK UNIFIED IDEOGRAPH + {0xECC3, 0x8CB3}, //15391 #CJK UNIFIED IDEOGRAPH + {0xECC4, 0x9087}, //15392 #CJK UNIFIED IDEOGRAPH + {0xECC5, 0xF9E9}, //15393 #CJK COMPATIBILITY IDEOGRAPH + {0xECC6, 0xF9EA}, //15394 #CJK COMPATIBILITY IDEOGRAPH + {0xECC7, 0x98F4}, //15395 #CJK UNIFIED IDEOGRAPH + {0xECC8, 0x990C}, //15396 #CJK UNIFIED IDEOGRAPH + {0xECC9, 0xF9EB}, //15397 #CJK COMPATIBILITY IDEOGRAPH + {0xECCA, 0xF9EC}, //15398 #CJK COMPATIBILITY IDEOGRAPH + {0xECCB, 0x7037}, //15399 #CJK UNIFIED IDEOGRAPH + {0xECCC, 0x76CA}, //15400 #CJK UNIFIED IDEOGRAPH + {0xECCD, 0x7FCA}, //15401 #CJK UNIFIED IDEOGRAPH + {0xECCE, 0x7FCC}, //15402 #CJK UNIFIED IDEOGRAPH + {0xECCF, 0x7FFC}, //15403 #CJK UNIFIED IDEOGRAPH + {0xECD0, 0x8B1A}, //15404 #CJK UNIFIED IDEOGRAPH + {0xECD1, 0x4EBA}, //15405 #CJK UNIFIED IDEOGRAPH + {0xECD2, 0x4EC1}, //15406 #CJK UNIFIED IDEOGRAPH + {0xECD3, 0x5203}, //15407 #CJK UNIFIED IDEOGRAPH + {0xECD4, 0x5370}, //15408 #CJK UNIFIED IDEOGRAPH + {0xECD5, 0xF9ED}, //15409 #CJK COMPATIBILITY IDEOGRAPH + {0xECD6, 0x54BD}, //15410 #CJK UNIFIED IDEOGRAPH + {0xECD7, 0x56E0}, //15411 #CJK UNIFIED IDEOGRAPH + {0xECD8, 0x59FB}, //15412 #CJK UNIFIED IDEOGRAPH + {0xECD9, 0x5BC5}, //15413 #CJK UNIFIED IDEOGRAPH + {0xECDA, 0x5F15}, //15414 #CJK UNIFIED IDEOGRAPH + {0xECDB, 0x5FCD}, //15415 #CJK UNIFIED IDEOGRAPH + {0xECDC, 0x6E6E}, //15416 #CJK UNIFIED IDEOGRAPH + {0xECDD, 0xF9EE}, //15417 #CJK COMPATIBILITY IDEOGRAPH + {0xECDE, 0xF9EF}, //15418 #CJK COMPATIBILITY IDEOGRAPH + {0xECDF, 0x7D6A}, //15419 #CJK UNIFIED IDEOGRAPH + {0xECE0, 0x8335}, //15420 #CJK UNIFIED IDEOGRAPH + {0xECE1, 0xF9F0}, //15421 #CJK COMPATIBILITY IDEOGRAPH + {0xECE2, 0x8693}, //15422 #CJK UNIFIED IDEOGRAPH + {0xECE3, 0x8A8D}, //15423 #CJK UNIFIED IDEOGRAPH + {0xECE4, 0xF9F1}, //15424 #CJK COMPATIBILITY IDEOGRAPH + {0xECE5, 0x976D}, //15425 #CJK UNIFIED IDEOGRAPH + {0xECE6, 0x9777}, //15426 #CJK UNIFIED IDEOGRAPH + {0xECE7, 0xF9F2}, //15427 #CJK COMPATIBILITY IDEOGRAPH + {0xECE8, 0xF9F3}, //15428 #CJK COMPATIBILITY IDEOGRAPH + {0xECE9, 0x4E00}, //15429 #CJK UNIFIED IDEOGRAPH + {0xECEA, 0x4F5A}, //15430 #CJK UNIFIED IDEOGRAPH + {0xECEB, 0x4F7E}, //15431 #CJK UNIFIED IDEOGRAPH + {0xECEC, 0x58F9}, //15432 #CJK UNIFIED IDEOGRAPH + {0xECED, 0x65E5}, //15433 #CJK UNIFIED IDEOGRAPH + {0xECEE, 0x6EA2}, //15434 #CJK UNIFIED IDEOGRAPH + {0xECEF, 0x9038}, //15435 #CJK UNIFIED IDEOGRAPH + {0xECF0, 0x93B0}, //15436 #CJK UNIFIED IDEOGRAPH + {0xECF1, 0x99B9}, //15437 #CJK UNIFIED IDEOGRAPH + {0xECF2, 0x4EFB}, //15438 #CJK UNIFIED IDEOGRAPH + {0xECF3, 0x58EC}, //15439 #CJK UNIFIED IDEOGRAPH + {0xECF4, 0x598A}, //15440 #CJK UNIFIED IDEOGRAPH + {0xECF5, 0x59D9}, //15441 #CJK UNIFIED IDEOGRAPH + {0xECF6, 0x6041}, //15442 #CJK UNIFIED IDEOGRAPH + {0xECF7, 0xF9F4}, //15443 #CJK COMPATIBILITY IDEOGRAPH + {0xECF8, 0xF9F5}, //15444 #CJK COMPATIBILITY IDEOGRAPH + {0xECF9, 0x7A14}, //15445 #CJK UNIFIED IDEOGRAPH + {0xECFA, 0xF9F6}, //15446 #CJK COMPATIBILITY IDEOGRAPH + {0xECFB, 0x834F}, //15447 #CJK UNIFIED IDEOGRAPH + {0xECFC, 0x8CC3}, //15448 #CJK UNIFIED IDEOGRAPH + {0xECFD, 0x5165}, //15449 #CJK UNIFIED IDEOGRAPH + {0xECFE, 0x5344}, //15450 #CJK UNIFIED IDEOGRAPH + {0xEDA1, 0xF9F7}, //15451 #CJK COMPATIBILITY IDEOGRAPH + {0xEDA2, 0xF9F8}, //15452 #CJK COMPATIBILITY IDEOGRAPH + {0xEDA3, 0xF9F9}, //15453 #CJK COMPATIBILITY IDEOGRAPH + {0xEDA4, 0x4ECD}, //15454 #CJK UNIFIED IDEOGRAPH + {0xEDA5, 0x5269}, //15455 #CJK UNIFIED IDEOGRAPH + {0xEDA6, 0x5B55}, //15456 #CJK UNIFIED IDEOGRAPH + {0xEDA7, 0x82BF}, //15457 #CJK UNIFIED IDEOGRAPH + {0xEDA8, 0x4ED4}, //15458 #CJK UNIFIED IDEOGRAPH + {0xEDA9, 0x523A}, //15459 #CJK UNIFIED IDEOGRAPH + {0xEDAA, 0x54A8}, //15460 #CJK UNIFIED IDEOGRAPH + {0xEDAB, 0x59C9}, //15461 #CJK UNIFIED IDEOGRAPH + {0xEDAC, 0x59FF}, //15462 #CJK UNIFIED IDEOGRAPH + {0xEDAD, 0x5B50}, //15463 #CJK UNIFIED IDEOGRAPH + {0xEDAE, 0x5B57}, //15464 #CJK UNIFIED IDEOGRAPH + {0xEDAF, 0x5B5C}, //15465 #CJK UNIFIED IDEOGRAPH + {0xEDB0, 0x6063}, //15466 #CJK UNIFIED IDEOGRAPH + {0xEDB1, 0x6148}, //15467 #CJK UNIFIED IDEOGRAPH + {0xEDB2, 0x6ECB}, //15468 #CJK UNIFIED IDEOGRAPH + {0xEDB3, 0x7099}, //15469 #CJK UNIFIED IDEOGRAPH + {0xEDB4, 0x716E}, //15470 #CJK UNIFIED IDEOGRAPH + {0xEDB5, 0x7386}, //15471 #CJK UNIFIED IDEOGRAPH + {0xEDB6, 0x74F7}, //15472 #CJK UNIFIED IDEOGRAPH + {0xEDB7, 0x75B5}, //15473 #CJK UNIFIED IDEOGRAPH + {0xEDB8, 0x78C1}, //15474 #CJK UNIFIED IDEOGRAPH + {0xEDB9, 0x7D2B}, //15475 #CJK UNIFIED IDEOGRAPH + {0xEDBA, 0x8005}, //15476 #CJK UNIFIED IDEOGRAPH + {0xEDBB, 0x81EA}, //15477 #CJK UNIFIED IDEOGRAPH + {0xEDBC, 0x8328}, //15478 #CJK UNIFIED IDEOGRAPH + {0xEDBD, 0x8517}, //15479 #CJK UNIFIED IDEOGRAPH + {0xEDBE, 0x85C9}, //15480 #CJK UNIFIED IDEOGRAPH + {0xEDBF, 0x8AEE}, //15481 #CJK UNIFIED IDEOGRAPH + {0xEDC0, 0x8CC7}, //15482 #CJK UNIFIED IDEOGRAPH + {0xEDC1, 0x96CC}, //15483 #CJK UNIFIED IDEOGRAPH + {0xEDC2, 0x4F5C}, //15484 #CJK UNIFIED IDEOGRAPH + {0xEDC3, 0x52FA}, //15485 #CJK UNIFIED IDEOGRAPH + {0xEDC4, 0x56BC}, //15486 #CJK UNIFIED IDEOGRAPH + {0xEDC5, 0x65AB}, //15487 #CJK UNIFIED IDEOGRAPH + {0xEDC6, 0x6628}, //15488 #CJK UNIFIED IDEOGRAPH + {0xEDC7, 0x707C}, //15489 #CJK UNIFIED IDEOGRAPH + {0xEDC8, 0x70B8}, //15490 #CJK UNIFIED IDEOGRAPH + {0xEDC9, 0x7235}, //15491 #CJK UNIFIED IDEOGRAPH + {0xEDCA, 0x7DBD}, //15492 #CJK UNIFIED IDEOGRAPH + {0xEDCB, 0x828D}, //15493 #CJK UNIFIED IDEOGRAPH + {0xEDCC, 0x914C}, //15494 #CJK UNIFIED IDEOGRAPH + {0xEDCD, 0x96C0}, //15495 #CJK UNIFIED IDEOGRAPH + {0xEDCE, 0x9D72}, //15496 #CJK UNIFIED IDEOGRAPH + {0xEDCF, 0x5B71}, //15497 #CJK UNIFIED IDEOGRAPH + {0xEDD0, 0x68E7}, //15498 #CJK UNIFIED IDEOGRAPH + {0xEDD1, 0x6B98}, //15499 #CJK UNIFIED IDEOGRAPH + {0xEDD2, 0x6F7A}, //15500 #CJK UNIFIED IDEOGRAPH + {0xEDD3, 0x76DE}, //15501 #CJK UNIFIED IDEOGRAPH + {0xEDD4, 0x5C91}, //15502 #CJK UNIFIED IDEOGRAPH + {0xEDD5, 0x66AB}, //15503 #CJK UNIFIED IDEOGRAPH + {0xEDD6, 0x6F5B}, //15504 #CJK UNIFIED IDEOGRAPH + {0xEDD7, 0x7BB4}, //15505 #CJK UNIFIED IDEOGRAPH + {0xEDD8, 0x7C2A}, //15506 #CJK UNIFIED IDEOGRAPH + {0xEDD9, 0x8836}, //15507 #CJK UNIFIED IDEOGRAPH + {0xEDDA, 0x96DC}, //15508 #CJK UNIFIED IDEOGRAPH + {0xEDDB, 0x4E08}, //15509 #CJK UNIFIED IDEOGRAPH + {0xEDDC, 0x4ED7}, //15510 #CJK UNIFIED IDEOGRAPH + {0xEDDD, 0x5320}, //15511 #CJK UNIFIED IDEOGRAPH + {0xEDDE, 0x5834}, //15512 #CJK UNIFIED IDEOGRAPH + {0xEDDF, 0x58BB}, //15513 #CJK UNIFIED IDEOGRAPH + {0xEDE0, 0x58EF}, //15514 #CJK UNIFIED IDEOGRAPH + {0xEDE1, 0x596C}, //15515 #CJK UNIFIED IDEOGRAPH + {0xEDE2, 0x5C07}, //15516 #CJK UNIFIED IDEOGRAPH + {0xEDE3, 0x5E33}, //15517 #CJK UNIFIED IDEOGRAPH + {0xEDE4, 0x5E84}, //15518 #CJK UNIFIED IDEOGRAPH + {0xEDE5, 0x5F35}, //15519 #CJK UNIFIED IDEOGRAPH + {0xEDE6, 0x638C}, //15520 #CJK UNIFIED IDEOGRAPH + {0xEDE7, 0x66B2}, //15521 #CJK UNIFIED IDEOGRAPH + {0xEDE8, 0x6756}, //15522 #CJK UNIFIED IDEOGRAPH + {0xEDE9, 0x6A1F}, //15523 #CJK UNIFIED IDEOGRAPH + {0xEDEA, 0x6AA3}, //15524 #CJK UNIFIED IDEOGRAPH + {0xEDEB, 0x6B0C}, //15525 #CJK UNIFIED IDEOGRAPH + {0xEDEC, 0x6F3F}, //15526 #CJK UNIFIED IDEOGRAPH + {0xEDED, 0x7246}, //15527 #CJK UNIFIED IDEOGRAPH + {0xEDEE, 0xF9FA}, //15528 #CJK COMPATIBILITY IDEOGRAPH + {0xEDEF, 0x7350}, //15529 #CJK UNIFIED IDEOGRAPH + {0xEDF0, 0x748B}, //15530 #CJK UNIFIED IDEOGRAPH + {0xEDF1, 0x7AE0}, //15531 #CJK UNIFIED IDEOGRAPH + {0xEDF2, 0x7CA7}, //15532 #CJK UNIFIED IDEOGRAPH + {0xEDF3, 0x8178}, //15533 #CJK UNIFIED IDEOGRAPH + {0xEDF4, 0x81DF}, //15534 #CJK UNIFIED IDEOGRAPH + {0xEDF5, 0x81E7}, //15535 #CJK UNIFIED IDEOGRAPH + {0xEDF6, 0x838A}, //15536 #CJK UNIFIED IDEOGRAPH + {0xEDF7, 0x846C}, //15537 #CJK UNIFIED IDEOGRAPH + {0xEDF8, 0x8523}, //15538 #CJK UNIFIED IDEOGRAPH + {0xEDF9, 0x8594}, //15539 #CJK UNIFIED IDEOGRAPH + {0xEDFA, 0x85CF}, //15540 #CJK UNIFIED IDEOGRAPH + {0xEDFB, 0x88DD}, //15541 #CJK UNIFIED IDEOGRAPH + {0xEDFC, 0x8D13}, //15542 #CJK UNIFIED IDEOGRAPH + {0xEDFD, 0x91AC}, //15543 #CJK UNIFIED IDEOGRAPH + {0xEDFE, 0x9577}, //15544 #CJK UNIFIED IDEOGRAPH + {0xEEA1, 0x969C}, //15545 #CJK UNIFIED IDEOGRAPH + {0xEEA2, 0x518D}, //15546 #CJK UNIFIED IDEOGRAPH + {0xEEA3, 0x54C9}, //15547 #CJK UNIFIED IDEOGRAPH + {0xEEA4, 0x5728}, //15548 #CJK UNIFIED IDEOGRAPH + {0xEEA5, 0x5BB0}, //15549 #CJK UNIFIED IDEOGRAPH + {0xEEA6, 0x624D}, //15550 #CJK UNIFIED IDEOGRAPH + {0xEEA7, 0x6750}, //15551 #CJK UNIFIED IDEOGRAPH + {0xEEA8, 0x683D}, //15552 #CJK UNIFIED IDEOGRAPH + {0xEEA9, 0x6893}, //15553 #CJK UNIFIED IDEOGRAPH + {0xEEAA, 0x6E3D}, //15554 #CJK UNIFIED IDEOGRAPH + {0xEEAB, 0x6ED3}, //15555 #CJK UNIFIED IDEOGRAPH + {0xEEAC, 0x707D}, //15556 #CJK UNIFIED IDEOGRAPH + {0xEEAD, 0x7E21}, //15557 #CJK UNIFIED IDEOGRAPH + {0xEEAE, 0x88C1}, //15558 #CJK UNIFIED IDEOGRAPH + {0xEEAF, 0x8CA1}, //15559 #CJK UNIFIED IDEOGRAPH + {0xEEB0, 0x8F09}, //15560 #CJK UNIFIED IDEOGRAPH + {0xEEB1, 0x9F4B}, //15561 #CJK UNIFIED IDEOGRAPH + {0xEEB2, 0x9F4E}, //15562 #CJK UNIFIED IDEOGRAPH + {0xEEB3, 0x722D}, //15563 #CJK UNIFIED IDEOGRAPH + {0xEEB4, 0x7B8F}, //15564 #CJK UNIFIED IDEOGRAPH + {0xEEB5, 0x8ACD}, //15565 #CJK UNIFIED IDEOGRAPH + {0xEEB6, 0x931A}, //15566 #CJK UNIFIED IDEOGRAPH + {0xEEB7, 0x4F47}, //15567 #CJK UNIFIED IDEOGRAPH + {0xEEB8, 0x4F4E}, //15568 #CJK UNIFIED IDEOGRAPH + {0xEEB9, 0x5132}, //15569 #CJK UNIFIED IDEOGRAPH + {0xEEBA, 0x5480}, //15570 #CJK UNIFIED IDEOGRAPH + {0xEEBB, 0x59D0}, //15571 #CJK UNIFIED IDEOGRAPH + {0xEEBC, 0x5E95}, //15572 #CJK UNIFIED IDEOGRAPH + {0xEEBD, 0x62B5}, //15573 #CJK UNIFIED IDEOGRAPH + {0xEEBE, 0x6775}, //15574 #CJK UNIFIED IDEOGRAPH + {0xEEBF, 0x696E}, //15575 #CJK UNIFIED IDEOGRAPH + {0xEEC0, 0x6A17}, //15576 #CJK UNIFIED IDEOGRAPH + {0xEEC1, 0x6CAE}, //15577 #CJK UNIFIED IDEOGRAPH + {0xEEC2, 0x6E1A}, //15578 #CJK UNIFIED IDEOGRAPH + {0xEEC3, 0x72D9}, //15579 #CJK UNIFIED IDEOGRAPH + {0xEEC4, 0x732A}, //15580 #CJK UNIFIED IDEOGRAPH + {0xEEC5, 0x75BD}, //15581 #CJK UNIFIED IDEOGRAPH + {0xEEC6, 0x7BB8}, //15582 #CJK UNIFIED IDEOGRAPH + {0xEEC7, 0x7D35}, //15583 #CJK UNIFIED IDEOGRAPH + {0xEEC8, 0x82E7}, //15584 #CJK UNIFIED IDEOGRAPH + {0xEEC9, 0x83F9}, //15585 #CJK UNIFIED IDEOGRAPH + {0xEECA, 0x8457}, //15586 #CJK UNIFIED IDEOGRAPH + {0xEECB, 0x85F7}, //15587 #CJK UNIFIED IDEOGRAPH + {0xEECC, 0x8A5B}, //15588 #CJK UNIFIED IDEOGRAPH + {0xEECD, 0x8CAF}, //15589 #CJK UNIFIED IDEOGRAPH + {0xEECE, 0x8E87}, //15590 #CJK UNIFIED IDEOGRAPH + {0xEECF, 0x9019}, //15591 #CJK UNIFIED IDEOGRAPH + {0xEED0, 0x90B8}, //15592 #CJK UNIFIED IDEOGRAPH + {0xEED1, 0x96CE}, //15593 #CJK UNIFIED IDEOGRAPH + {0xEED2, 0x9F5F}, //15594 #CJK UNIFIED IDEOGRAPH + {0xEED3, 0x52E3}, //15595 #CJK UNIFIED IDEOGRAPH + {0xEED4, 0x540A}, //15596 #CJK UNIFIED IDEOGRAPH + {0xEED5, 0x5AE1}, //15597 #CJK UNIFIED IDEOGRAPH + {0xEED6, 0x5BC2}, //15598 #CJK UNIFIED IDEOGRAPH + {0xEED7, 0x6458}, //15599 #CJK UNIFIED IDEOGRAPH + {0xEED8, 0x6575}, //15600 #CJK UNIFIED IDEOGRAPH + {0xEED9, 0x6EF4}, //15601 #CJK UNIFIED IDEOGRAPH + {0xEEDA, 0x72C4}, //15602 #CJK UNIFIED IDEOGRAPH + {0xEEDB, 0xF9FB}, //15603 #CJK COMPATIBILITY IDEOGRAPH + {0xEEDC, 0x7684}, //15604 #CJK UNIFIED IDEOGRAPH + {0xEEDD, 0x7A4D}, //15605 #CJK UNIFIED IDEOGRAPH + {0xEEDE, 0x7B1B}, //15606 #CJK UNIFIED IDEOGRAPH + {0xEEDF, 0x7C4D}, //15607 #CJK UNIFIED IDEOGRAPH + {0xEEE0, 0x7E3E}, //15608 #CJK UNIFIED IDEOGRAPH + {0xEEE1, 0x7FDF}, //15609 #CJK UNIFIED IDEOGRAPH + {0xEEE2, 0x837B}, //15610 #CJK UNIFIED IDEOGRAPH + {0xEEE3, 0x8B2B}, //15611 #CJK UNIFIED IDEOGRAPH + {0xEEE4, 0x8CCA}, //15612 #CJK UNIFIED IDEOGRAPH + {0xEEE5, 0x8D64}, //15613 #CJK UNIFIED IDEOGRAPH + {0xEEE6, 0x8DE1}, //15614 #CJK UNIFIED IDEOGRAPH + {0xEEE7, 0x8E5F}, //15615 #CJK UNIFIED IDEOGRAPH + {0xEEE8, 0x8FEA}, //15616 #CJK UNIFIED IDEOGRAPH + {0xEEE9, 0x8FF9}, //15617 #CJK UNIFIED IDEOGRAPH + {0xEEEA, 0x9069}, //15618 #CJK UNIFIED IDEOGRAPH + {0xEEEB, 0x93D1}, //15619 #CJK UNIFIED IDEOGRAPH + {0xEEEC, 0x4F43}, //15620 #CJK UNIFIED IDEOGRAPH + {0xEEED, 0x4F7A}, //15621 #CJK UNIFIED IDEOGRAPH + {0xEEEE, 0x50B3}, //15622 #CJK UNIFIED IDEOGRAPH + {0xEEEF, 0x5168}, //15623 #CJK UNIFIED IDEOGRAPH + {0xEEF0, 0x5178}, //15624 #CJK UNIFIED IDEOGRAPH + {0xEEF1, 0x524D}, //15625 #CJK UNIFIED IDEOGRAPH + {0xEEF2, 0x526A}, //15626 #CJK UNIFIED IDEOGRAPH + {0xEEF3, 0x5861}, //15627 #CJK UNIFIED IDEOGRAPH + {0xEEF4, 0x587C}, //15628 #CJK UNIFIED IDEOGRAPH + {0xEEF5, 0x5960}, //15629 #CJK UNIFIED IDEOGRAPH + {0xEEF6, 0x5C08}, //15630 #CJK UNIFIED IDEOGRAPH + {0xEEF7, 0x5C55}, //15631 #CJK UNIFIED IDEOGRAPH + {0xEEF8, 0x5EDB}, //15632 #CJK UNIFIED IDEOGRAPH + {0xEEF9, 0x609B}, //15633 #CJK UNIFIED IDEOGRAPH + {0xEEFA, 0x6230}, //15634 #CJK UNIFIED IDEOGRAPH + {0xEEFB, 0x6813}, //15635 #CJK UNIFIED IDEOGRAPH + {0xEEFC, 0x6BBF}, //15636 #CJK UNIFIED IDEOGRAPH + {0xEEFD, 0x6C08}, //15637 #CJK UNIFIED IDEOGRAPH + {0xEEFE, 0x6FB1}, //15638 #CJK UNIFIED IDEOGRAPH + {0xEFA1, 0x714E}, //15639 #CJK UNIFIED IDEOGRAPH + {0xEFA2, 0x7420}, //15640 #CJK UNIFIED IDEOGRAPH + {0xEFA3, 0x7530}, //15641 #CJK UNIFIED IDEOGRAPH + {0xEFA4, 0x7538}, //15642 #CJK UNIFIED IDEOGRAPH + {0xEFA5, 0x7551}, //15643 #CJK UNIFIED IDEOGRAPH + {0xEFA6, 0x7672}, //15644 #CJK UNIFIED IDEOGRAPH + {0xEFA7, 0x7B4C}, //15645 #CJK UNIFIED IDEOGRAPH + {0xEFA8, 0x7B8B}, //15646 #CJK UNIFIED IDEOGRAPH + {0xEFA9, 0x7BAD}, //15647 #CJK UNIFIED IDEOGRAPH + {0xEFAA, 0x7BC6}, //15648 #CJK UNIFIED IDEOGRAPH + {0xEFAB, 0x7E8F}, //15649 #CJK UNIFIED IDEOGRAPH + {0xEFAC, 0x8A6E}, //15650 #CJK UNIFIED IDEOGRAPH + {0xEFAD, 0x8F3E}, //15651 #CJK UNIFIED IDEOGRAPH + {0xEFAE, 0x8F49}, //15652 #CJK UNIFIED IDEOGRAPH + {0xEFAF, 0x923F}, //15653 #CJK UNIFIED IDEOGRAPH + {0xEFB0, 0x9293}, //15654 #CJK UNIFIED IDEOGRAPH + {0xEFB1, 0x9322}, //15655 #CJK UNIFIED IDEOGRAPH + {0xEFB2, 0x942B}, //15656 #CJK UNIFIED IDEOGRAPH + {0xEFB3, 0x96FB}, //15657 #CJK UNIFIED IDEOGRAPH + {0xEFB4, 0x985A}, //15658 #CJK UNIFIED IDEOGRAPH + {0xEFB5, 0x986B}, //15659 #CJK UNIFIED IDEOGRAPH + {0xEFB6, 0x991E}, //15660 #CJK UNIFIED IDEOGRAPH + {0xEFB7, 0x5207}, //15661 #CJK UNIFIED IDEOGRAPH + {0xEFB8, 0x622A}, //15662 #CJK UNIFIED IDEOGRAPH + {0xEFB9, 0x6298}, //15663 #CJK UNIFIED IDEOGRAPH + {0xEFBA, 0x6D59}, //15664 #CJK UNIFIED IDEOGRAPH + {0xEFBB, 0x7664}, //15665 #CJK UNIFIED IDEOGRAPH + {0xEFBC, 0x7ACA}, //15666 #CJK UNIFIED IDEOGRAPH + {0xEFBD, 0x7BC0}, //15667 #CJK UNIFIED IDEOGRAPH + {0xEFBE, 0x7D76}, //15668 #CJK UNIFIED IDEOGRAPH + {0xEFBF, 0x5360}, //15669 #CJK UNIFIED IDEOGRAPH + {0xEFC0, 0x5CBE}, //15670 #CJK UNIFIED IDEOGRAPH + {0xEFC1, 0x5E97}, //15671 #CJK UNIFIED IDEOGRAPH + {0xEFC2, 0x6F38}, //15672 #CJK UNIFIED IDEOGRAPH + {0xEFC3, 0x70B9}, //15673 #CJK UNIFIED IDEOGRAPH + {0xEFC4, 0x7C98}, //15674 #CJK UNIFIED IDEOGRAPH + {0xEFC5, 0x9711}, //15675 #CJK UNIFIED IDEOGRAPH + {0xEFC6, 0x9B8E}, //15676 #CJK UNIFIED IDEOGRAPH + {0xEFC7, 0x9EDE}, //15677 #CJK UNIFIED IDEOGRAPH + {0xEFC8, 0x63A5}, //15678 #CJK UNIFIED IDEOGRAPH + {0xEFC9, 0x647A}, //15679 #CJK UNIFIED IDEOGRAPH + {0xEFCA, 0x8776}, //15680 #CJK UNIFIED IDEOGRAPH + {0xEFCB, 0x4E01}, //15681 #CJK UNIFIED IDEOGRAPH + {0xEFCC, 0x4E95}, //15682 #CJK UNIFIED IDEOGRAPH + {0xEFCD, 0x4EAD}, //15683 #CJK UNIFIED IDEOGRAPH + {0xEFCE, 0x505C}, //15684 #CJK UNIFIED IDEOGRAPH + {0xEFCF, 0x5075}, //15685 #CJK UNIFIED IDEOGRAPH + {0xEFD0, 0x5448}, //15686 #CJK UNIFIED IDEOGRAPH + {0xEFD1, 0x59C3}, //15687 #CJK UNIFIED IDEOGRAPH + {0xEFD2, 0x5B9A}, //15688 #CJK UNIFIED IDEOGRAPH + {0xEFD3, 0x5E40}, //15689 #CJK UNIFIED IDEOGRAPH + {0xEFD4, 0x5EAD}, //15690 #CJK UNIFIED IDEOGRAPH + {0xEFD5, 0x5EF7}, //15691 #CJK UNIFIED IDEOGRAPH + {0xEFD6, 0x5F81}, //15692 #CJK UNIFIED IDEOGRAPH + {0xEFD7, 0x60C5}, //15693 #CJK UNIFIED IDEOGRAPH + {0xEFD8, 0x633A}, //15694 #CJK UNIFIED IDEOGRAPH + {0xEFD9, 0x653F}, //15695 #CJK UNIFIED IDEOGRAPH + {0xEFDA, 0x6574}, //15696 #CJK UNIFIED IDEOGRAPH + {0xEFDB, 0x65CC}, //15697 #CJK UNIFIED IDEOGRAPH + {0xEFDC, 0x6676}, //15698 #CJK UNIFIED IDEOGRAPH + {0xEFDD, 0x6678}, //15699 #CJK UNIFIED IDEOGRAPH + {0xEFDE, 0x67FE}, //15700 #CJK UNIFIED IDEOGRAPH + {0xEFDF, 0x6968}, //15701 #CJK UNIFIED IDEOGRAPH + {0xEFE0, 0x6A89}, //15702 #CJK UNIFIED IDEOGRAPH + {0xEFE1, 0x6B63}, //15703 #CJK UNIFIED IDEOGRAPH + {0xEFE2, 0x6C40}, //15704 #CJK UNIFIED IDEOGRAPH + {0xEFE3, 0x6DC0}, //15705 #CJK UNIFIED IDEOGRAPH + {0xEFE4, 0x6DE8}, //15706 #CJK UNIFIED IDEOGRAPH + {0xEFE5, 0x6E1F}, //15707 #CJK UNIFIED IDEOGRAPH + {0xEFE6, 0x6E5E}, //15708 #CJK UNIFIED IDEOGRAPH + {0xEFE7, 0x701E}, //15709 #CJK UNIFIED IDEOGRAPH + {0xEFE8, 0x70A1}, //15710 #CJK UNIFIED IDEOGRAPH + {0xEFE9, 0x738E}, //15711 #CJK UNIFIED IDEOGRAPH + {0xEFEA, 0x73FD}, //15712 #CJK UNIFIED IDEOGRAPH + {0xEFEB, 0x753A}, //15713 #CJK UNIFIED IDEOGRAPH + {0xEFEC, 0x775B}, //15714 #CJK UNIFIED IDEOGRAPH + {0xEFED, 0x7887}, //15715 #CJK UNIFIED IDEOGRAPH + {0xEFEE, 0x798E}, //15716 #CJK UNIFIED IDEOGRAPH + {0xEFEF, 0x7A0B}, //15717 #CJK UNIFIED IDEOGRAPH + {0xEFF0, 0x7A7D}, //15718 #CJK UNIFIED IDEOGRAPH + {0xEFF1, 0x7CBE}, //15719 #CJK UNIFIED IDEOGRAPH + {0xEFF2, 0x7D8E}, //15720 #CJK UNIFIED IDEOGRAPH + {0xEFF3, 0x8247}, //15721 #CJK UNIFIED IDEOGRAPH + {0xEFF4, 0x8A02}, //15722 #CJK UNIFIED IDEOGRAPH + {0xEFF5, 0x8AEA}, //15723 #CJK UNIFIED IDEOGRAPH + {0xEFF6, 0x8C9E}, //15724 #CJK UNIFIED IDEOGRAPH + {0xEFF7, 0x912D}, //15725 #CJK UNIFIED IDEOGRAPH + {0xEFF8, 0x914A}, //15726 #CJK UNIFIED IDEOGRAPH + {0xEFF9, 0x91D8}, //15727 #CJK UNIFIED IDEOGRAPH + {0xEFFA, 0x9266}, //15728 #CJK UNIFIED IDEOGRAPH + {0xEFFB, 0x92CC}, //15729 #CJK UNIFIED IDEOGRAPH + {0xEFFC, 0x9320}, //15730 #CJK UNIFIED IDEOGRAPH + {0xEFFD, 0x9706}, //15731 #CJK UNIFIED IDEOGRAPH + {0xEFFE, 0x9756}, //15732 #CJK UNIFIED IDEOGRAPH + {0xF0A1, 0x975C}, //15733 #CJK UNIFIED IDEOGRAPH + {0xF0A2, 0x9802}, //15734 #CJK UNIFIED IDEOGRAPH + {0xF0A3, 0x9F0E}, //15735 #CJK UNIFIED IDEOGRAPH + {0xF0A4, 0x5236}, //15736 #CJK UNIFIED IDEOGRAPH + {0xF0A5, 0x5291}, //15737 #CJK UNIFIED IDEOGRAPH + {0xF0A6, 0x557C}, //15738 #CJK UNIFIED IDEOGRAPH + {0xF0A7, 0x5824}, //15739 #CJK UNIFIED IDEOGRAPH + {0xF0A8, 0x5E1D}, //15740 #CJK UNIFIED IDEOGRAPH + {0xF0A9, 0x5F1F}, //15741 #CJK UNIFIED IDEOGRAPH + {0xF0AA, 0x608C}, //15742 #CJK UNIFIED IDEOGRAPH + {0xF0AB, 0x63D0}, //15743 #CJK UNIFIED IDEOGRAPH + {0xF0AC, 0x68AF}, //15744 #CJK UNIFIED IDEOGRAPH + {0xF0AD, 0x6FDF}, //15745 #CJK UNIFIED IDEOGRAPH + {0xF0AE, 0x796D}, //15746 #CJK UNIFIED IDEOGRAPH + {0xF0AF, 0x7B2C}, //15747 #CJK UNIFIED IDEOGRAPH + {0xF0B0, 0x81CD}, //15748 #CJK UNIFIED IDEOGRAPH + {0xF0B1, 0x85BA}, //15749 #CJK UNIFIED IDEOGRAPH + {0xF0B2, 0x88FD}, //15750 #CJK UNIFIED IDEOGRAPH + {0xF0B3, 0x8AF8}, //15751 #CJK UNIFIED IDEOGRAPH + {0xF0B4, 0x8E44}, //15752 #CJK UNIFIED IDEOGRAPH + {0xF0B5, 0x918D}, //15753 #CJK UNIFIED IDEOGRAPH + {0xF0B6, 0x9664}, //15754 #CJK UNIFIED IDEOGRAPH + {0xF0B7, 0x969B}, //15755 #CJK UNIFIED IDEOGRAPH + {0xF0B8, 0x973D}, //15756 #CJK UNIFIED IDEOGRAPH + {0xF0B9, 0x984C}, //15757 #CJK UNIFIED IDEOGRAPH + {0xF0BA, 0x9F4A}, //15758 #CJK UNIFIED IDEOGRAPH + {0xF0BB, 0x4FCE}, //15759 #CJK UNIFIED IDEOGRAPH + {0xF0BC, 0x5146}, //15760 #CJK UNIFIED IDEOGRAPH + {0xF0BD, 0x51CB}, //15761 #CJK UNIFIED IDEOGRAPH + {0xF0BE, 0x52A9}, //15762 #CJK UNIFIED IDEOGRAPH + {0xF0BF, 0x5632}, //15763 #CJK UNIFIED IDEOGRAPH + {0xF0C0, 0x5F14}, //15764 #CJK UNIFIED IDEOGRAPH + {0xF0C1, 0x5F6B}, //15765 #CJK UNIFIED IDEOGRAPH + {0xF0C2, 0x63AA}, //15766 #CJK UNIFIED IDEOGRAPH + {0xF0C3, 0x64CD}, //15767 #CJK UNIFIED IDEOGRAPH + {0xF0C4, 0x65E9}, //15768 #CJK UNIFIED IDEOGRAPH + {0xF0C5, 0x6641}, //15769 #CJK UNIFIED IDEOGRAPH + {0xF0C6, 0x66FA}, //15770 #CJK UNIFIED IDEOGRAPH + {0xF0C7, 0x66F9}, //15771 #CJK UNIFIED IDEOGRAPH + {0xF0C8, 0x671D}, //15772 #CJK UNIFIED IDEOGRAPH + {0xF0C9, 0x689D}, //15773 #CJK UNIFIED IDEOGRAPH + {0xF0CA, 0x68D7}, //15774 #CJK UNIFIED IDEOGRAPH + {0xF0CB, 0x69FD}, //15775 #CJK UNIFIED IDEOGRAPH + {0xF0CC, 0x6F15}, //15776 #CJK UNIFIED IDEOGRAPH + {0xF0CD, 0x6F6E}, //15777 #CJK UNIFIED IDEOGRAPH + {0xF0CE, 0x7167}, //15778 #CJK UNIFIED IDEOGRAPH + {0xF0CF, 0x71E5}, //15779 #CJK UNIFIED IDEOGRAPH + {0xF0D0, 0x722A}, //15780 #CJK UNIFIED IDEOGRAPH + {0xF0D1, 0x74AA}, //15781 #CJK UNIFIED IDEOGRAPH + {0xF0D2, 0x773A}, //15782 #CJK UNIFIED IDEOGRAPH + {0xF0D3, 0x7956}, //15783 #CJK UNIFIED IDEOGRAPH + {0xF0D4, 0x795A}, //15784 #CJK UNIFIED IDEOGRAPH + {0xF0D5, 0x79DF}, //15785 #CJK UNIFIED IDEOGRAPH + {0xF0D6, 0x7A20}, //15786 #CJK UNIFIED IDEOGRAPH + {0xF0D7, 0x7A95}, //15787 #CJK UNIFIED IDEOGRAPH + {0xF0D8, 0x7C97}, //15788 #CJK UNIFIED IDEOGRAPH + {0xF0D9, 0x7CDF}, //15789 #CJK UNIFIED IDEOGRAPH + {0xF0DA, 0x7D44}, //15790 #CJK UNIFIED IDEOGRAPH + {0xF0DB, 0x7E70}, //15791 #CJK UNIFIED IDEOGRAPH + {0xF0DC, 0x8087}, //15792 #CJK UNIFIED IDEOGRAPH + {0xF0DD, 0x85FB}, //15793 #CJK UNIFIED IDEOGRAPH + {0xF0DE, 0x86A4}, //15794 #CJK UNIFIED IDEOGRAPH + {0xF0DF, 0x8A54}, //15795 #CJK UNIFIED IDEOGRAPH + {0xF0E0, 0x8ABF}, //15796 #CJK UNIFIED IDEOGRAPH + {0xF0E1, 0x8D99}, //15797 #CJK UNIFIED IDEOGRAPH + {0xF0E2, 0x8E81}, //15798 #CJK UNIFIED IDEOGRAPH + {0xF0E3, 0x9020}, //15799 #CJK UNIFIED IDEOGRAPH + {0xF0E4, 0x906D}, //15800 #CJK UNIFIED IDEOGRAPH + {0xF0E5, 0x91E3}, //15801 #CJK UNIFIED IDEOGRAPH + {0xF0E6, 0x963B}, //15802 #CJK UNIFIED IDEOGRAPH + {0xF0E7, 0x96D5}, //15803 #CJK UNIFIED IDEOGRAPH + {0xF0E8, 0x9CE5}, //15804 #CJK UNIFIED IDEOGRAPH + {0xF0E9, 0x65CF}, //15805 #CJK UNIFIED IDEOGRAPH + {0xF0EA, 0x7C07}, //15806 #CJK UNIFIED IDEOGRAPH + {0xF0EB, 0x8DB3}, //15807 #CJK UNIFIED IDEOGRAPH + {0xF0EC, 0x93C3}, //15808 #CJK UNIFIED IDEOGRAPH + {0xF0ED, 0x5B58}, //15809 #CJK UNIFIED IDEOGRAPH + {0xF0EE, 0x5C0A}, //15810 #CJK UNIFIED IDEOGRAPH + {0xF0EF, 0x5352}, //15811 #CJK UNIFIED IDEOGRAPH + {0xF0F0, 0x62D9}, //15812 #CJK UNIFIED IDEOGRAPH + {0xF0F1, 0x731D}, //15813 #CJK UNIFIED IDEOGRAPH + {0xF0F2, 0x5027}, //15814 #CJK UNIFIED IDEOGRAPH + {0xF0F3, 0x5B97}, //15815 #CJK UNIFIED IDEOGRAPH + {0xF0F4, 0x5F9E}, //15816 #CJK UNIFIED IDEOGRAPH + {0xF0F5, 0x60B0}, //15817 #CJK UNIFIED IDEOGRAPH + {0xF0F6, 0x616B}, //15818 #CJK UNIFIED IDEOGRAPH + {0xF0F7, 0x68D5}, //15819 #CJK UNIFIED IDEOGRAPH + {0xF0F8, 0x6DD9}, //15820 #CJK UNIFIED IDEOGRAPH + {0xF0F9, 0x742E}, //15821 #CJK UNIFIED IDEOGRAPH + {0xF0FA, 0x7A2E}, //15822 #CJK UNIFIED IDEOGRAPH + {0xF0FB, 0x7D42}, //15823 #CJK UNIFIED IDEOGRAPH + {0xF0FC, 0x7D9C}, //15824 #CJK UNIFIED IDEOGRAPH + {0xF0FD, 0x7E31}, //15825 #CJK UNIFIED IDEOGRAPH + {0xF0FE, 0x816B}, //15826 #CJK UNIFIED IDEOGRAPH + {0xF1A1, 0x8E2A}, //15827 #CJK UNIFIED IDEOGRAPH + {0xF1A2, 0x8E35}, //15828 #CJK UNIFIED IDEOGRAPH + {0xF1A3, 0x937E}, //15829 #CJK UNIFIED IDEOGRAPH + {0xF1A4, 0x9418}, //15830 #CJK UNIFIED IDEOGRAPH + {0xF1A5, 0x4F50}, //15831 #CJK UNIFIED IDEOGRAPH + {0xF1A6, 0x5750}, //15832 #CJK UNIFIED IDEOGRAPH + {0xF1A7, 0x5DE6}, //15833 #CJK UNIFIED IDEOGRAPH + {0xF1A8, 0x5EA7}, //15834 #CJK UNIFIED IDEOGRAPH + {0xF1A9, 0x632B}, //15835 #CJK UNIFIED IDEOGRAPH + {0xF1AA, 0x7F6A}, //15836 #CJK UNIFIED IDEOGRAPH + {0xF1AB, 0x4E3B}, //15837 #CJK UNIFIED IDEOGRAPH + {0xF1AC, 0x4F4F}, //15838 #CJK UNIFIED IDEOGRAPH + {0xF1AD, 0x4F8F}, //15839 #CJK UNIFIED IDEOGRAPH + {0xF1AE, 0x505A}, //15840 #CJK UNIFIED IDEOGRAPH + {0xF1AF, 0x59DD}, //15841 #CJK UNIFIED IDEOGRAPH + {0xF1B0, 0x80C4}, //15842 #CJK UNIFIED IDEOGRAPH + {0xF1B1, 0x546A}, //15843 #CJK UNIFIED IDEOGRAPH + {0xF1B2, 0x5468}, //15844 #CJK UNIFIED IDEOGRAPH + {0xF1B3, 0x55FE}, //15845 #CJK UNIFIED IDEOGRAPH + {0xF1B4, 0x594F}, //15846 #CJK UNIFIED IDEOGRAPH + {0xF1B5, 0x5B99}, //15847 #CJK UNIFIED IDEOGRAPH + {0xF1B6, 0x5DDE}, //15848 #CJK UNIFIED IDEOGRAPH + {0xF1B7, 0x5EDA}, //15849 #CJK UNIFIED IDEOGRAPH + {0xF1B8, 0x665D}, //15850 #CJK UNIFIED IDEOGRAPH + {0xF1B9, 0x6731}, //15851 #CJK UNIFIED IDEOGRAPH + {0xF1BA, 0x67F1}, //15852 #CJK UNIFIED IDEOGRAPH + {0xF1BB, 0x682A}, //15853 #CJK UNIFIED IDEOGRAPH + {0xF1BC, 0x6CE8}, //15854 #CJK UNIFIED IDEOGRAPH + {0xF1BD, 0x6D32}, //15855 #CJK UNIFIED IDEOGRAPH + {0xF1BE, 0x6E4A}, //15856 #CJK UNIFIED IDEOGRAPH + {0xF1BF, 0x6F8D}, //15857 #CJK UNIFIED IDEOGRAPH + {0xF1C0, 0x70B7}, //15858 #CJK UNIFIED IDEOGRAPH + {0xF1C1, 0x73E0}, //15859 #CJK UNIFIED IDEOGRAPH + {0xF1C2, 0x7587}, //15860 #CJK UNIFIED IDEOGRAPH + {0xF1C3, 0x7C4C}, //15861 #CJK UNIFIED IDEOGRAPH + {0xF1C4, 0x7D02}, //15862 #CJK UNIFIED IDEOGRAPH + {0xF1C5, 0x7D2C}, //15863 #CJK UNIFIED IDEOGRAPH + {0xF1C6, 0x7DA2}, //15864 #CJK UNIFIED IDEOGRAPH + {0xF1C7, 0x821F}, //15865 #CJK UNIFIED IDEOGRAPH + {0xF1C8, 0x86DB}, //15866 #CJK UNIFIED IDEOGRAPH + {0xF1C9, 0x8A3B}, //15867 #CJK UNIFIED IDEOGRAPH + {0xF1CA, 0x8A85}, //15868 #CJK UNIFIED IDEOGRAPH + {0xF1CB, 0x8D70}, //15869 #CJK UNIFIED IDEOGRAPH + {0xF1CC, 0x8E8A}, //15870 #CJK UNIFIED IDEOGRAPH + {0xF1CD, 0x8F33}, //15871 #CJK UNIFIED IDEOGRAPH + {0xF1CE, 0x9031}, //15872 #CJK UNIFIED IDEOGRAPH + {0xF1CF, 0x914E}, //15873 #CJK UNIFIED IDEOGRAPH + {0xF1D0, 0x9152}, //15874 #CJK UNIFIED IDEOGRAPH + {0xF1D1, 0x9444}, //15875 #CJK UNIFIED IDEOGRAPH + {0xF1D2, 0x99D0}, //15876 #CJK UNIFIED IDEOGRAPH + {0xF1D3, 0x7AF9}, //15877 #CJK UNIFIED IDEOGRAPH + {0xF1D4, 0x7CA5}, //15878 #CJK UNIFIED IDEOGRAPH + {0xF1D5, 0x4FCA}, //15879 #CJK UNIFIED IDEOGRAPH + {0xF1D6, 0x5101}, //15880 #CJK UNIFIED IDEOGRAPH + {0xF1D7, 0x51C6}, //15881 #CJK UNIFIED IDEOGRAPH + {0xF1D8, 0x57C8}, //15882 #CJK UNIFIED IDEOGRAPH + {0xF1D9, 0x5BEF}, //15883 #CJK UNIFIED IDEOGRAPH + {0xF1DA, 0x5CFB}, //15884 #CJK UNIFIED IDEOGRAPH + {0xF1DB, 0x6659}, //15885 #CJK UNIFIED IDEOGRAPH + {0xF1DC, 0x6A3D}, //15886 #CJK UNIFIED IDEOGRAPH + {0xF1DD, 0x6D5A}, //15887 #CJK UNIFIED IDEOGRAPH + {0xF1DE, 0x6E96}, //15888 #CJK UNIFIED IDEOGRAPH + {0xF1DF, 0x6FEC}, //15889 #CJK UNIFIED IDEOGRAPH + {0xF1E0, 0x710C}, //15890 #CJK UNIFIED IDEOGRAPH + {0xF1E1, 0x756F}, //15891 #CJK UNIFIED IDEOGRAPH + {0xF1E2, 0x7AE3}, //15892 #CJK UNIFIED IDEOGRAPH + {0xF1E3, 0x8822}, //15893 #CJK UNIFIED IDEOGRAPH + {0xF1E4, 0x9021}, //15894 #CJK UNIFIED IDEOGRAPH + {0xF1E5, 0x9075}, //15895 #CJK UNIFIED IDEOGRAPH + {0xF1E6, 0x96CB}, //15896 #CJK UNIFIED IDEOGRAPH + {0xF1E7, 0x99FF}, //15897 #CJK UNIFIED IDEOGRAPH + {0xF1E8, 0x8301}, //15898 #CJK UNIFIED IDEOGRAPH + {0xF1E9, 0x4E2D}, //15899 #CJK UNIFIED IDEOGRAPH + {0xF1EA, 0x4EF2}, //15900 #CJK UNIFIED IDEOGRAPH + {0xF1EB, 0x8846}, //15901 #CJK UNIFIED IDEOGRAPH + {0xF1EC, 0x91CD}, //15902 #CJK UNIFIED IDEOGRAPH + {0xF1ED, 0x537D}, //15903 #CJK UNIFIED IDEOGRAPH + {0xF1EE, 0x6ADB}, //15904 #CJK UNIFIED IDEOGRAPH + {0xF1EF, 0x696B}, //15905 #CJK UNIFIED IDEOGRAPH + {0xF1F0, 0x6C41}, //15906 #CJK UNIFIED IDEOGRAPH + {0xF1F1, 0x847A}, //15907 #CJK UNIFIED IDEOGRAPH + {0xF1F2, 0x589E}, //15908 #CJK UNIFIED IDEOGRAPH + {0xF1F3, 0x618E}, //15909 #CJK UNIFIED IDEOGRAPH + {0xF1F4, 0x66FE}, //15910 #CJK UNIFIED IDEOGRAPH + {0xF1F5, 0x62EF}, //15911 #CJK UNIFIED IDEOGRAPH + {0xF1F6, 0x70DD}, //15912 #CJK UNIFIED IDEOGRAPH + {0xF1F7, 0x7511}, //15913 #CJK UNIFIED IDEOGRAPH + {0xF1F8, 0x75C7}, //15914 #CJK UNIFIED IDEOGRAPH + {0xF1F9, 0x7E52}, //15915 #CJK UNIFIED IDEOGRAPH + {0xF1FA, 0x84B8}, //15916 #CJK UNIFIED IDEOGRAPH + {0xF1FB, 0x8B49}, //15917 #CJK UNIFIED IDEOGRAPH + {0xF1FC, 0x8D08}, //15918 #CJK UNIFIED IDEOGRAPH + {0xF1FD, 0x4E4B}, //15919 #CJK UNIFIED IDEOGRAPH + {0xF1FE, 0x53EA}, //15920 #CJK UNIFIED IDEOGRAPH + {0xF2A1, 0x54AB}, //15921 #CJK UNIFIED IDEOGRAPH + {0xF2A2, 0x5730}, //15922 #CJK UNIFIED IDEOGRAPH + {0xF2A3, 0x5740}, //15923 #CJK UNIFIED IDEOGRAPH + {0xF2A4, 0x5FD7}, //15924 #CJK UNIFIED IDEOGRAPH + {0xF2A5, 0x6301}, //15925 #CJK UNIFIED IDEOGRAPH + {0xF2A6, 0x6307}, //15926 #CJK UNIFIED IDEOGRAPH + {0xF2A7, 0x646F}, //15927 #CJK UNIFIED IDEOGRAPH + {0xF2A8, 0x652F}, //15928 #CJK UNIFIED IDEOGRAPH + {0xF2A9, 0x65E8}, //15929 #CJK UNIFIED IDEOGRAPH + {0xF2AA, 0x667A}, //15930 #CJK UNIFIED IDEOGRAPH + {0xF2AB, 0x679D}, //15931 #CJK UNIFIED IDEOGRAPH + {0xF2AC, 0x67B3}, //15932 #CJK UNIFIED IDEOGRAPH + {0xF2AD, 0x6B62}, //15933 #CJK UNIFIED IDEOGRAPH + {0xF2AE, 0x6C60}, //15934 #CJK UNIFIED IDEOGRAPH + {0xF2AF, 0x6C9A}, //15935 #CJK UNIFIED IDEOGRAPH + {0xF2B0, 0x6F2C}, //15936 #CJK UNIFIED IDEOGRAPH + {0xF2B1, 0x77E5}, //15937 #CJK UNIFIED IDEOGRAPH + {0xF2B2, 0x7825}, //15938 #CJK UNIFIED IDEOGRAPH + {0xF2B3, 0x7949}, //15939 #CJK UNIFIED IDEOGRAPH + {0xF2B4, 0x7957}, //15940 #CJK UNIFIED IDEOGRAPH + {0xF2B5, 0x7D19}, //15941 #CJK UNIFIED IDEOGRAPH + {0xF2B6, 0x80A2}, //15942 #CJK UNIFIED IDEOGRAPH + {0xF2B7, 0x8102}, //15943 #CJK UNIFIED IDEOGRAPH + {0xF2B8, 0x81F3}, //15944 #CJK UNIFIED IDEOGRAPH + {0xF2B9, 0x829D}, //15945 #CJK UNIFIED IDEOGRAPH + {0xF2BA, 0x82B7}, //15946 #CJK UNIFIED IDEOGRAPH + {0xF2BB, 0x8718}, //15947 #CJK UNIFIED IDEOGRAPH + {0xF2BC, 0x8A8C}, //15948 #CJK UNIFIED IDEOGRAPH + {0xF2BD, 0xF9FC}, //15949 #CJK COMPATIBILITY IDEOGRAPH + {0xF2BE, 0x8D04}, //15950 #CJK UNIFIED IDEOGRAPH + {0xF2BF, 0x8DBE}, //15951 #CJK UNIFIED IDEOGRAPH + {0xF2C0, 0x9072}, //15952 #CJK UNIFIED IDEOGRAPH + {0xF2C1, 0x76F4}, //15953 #CJK UNIFIED IDEOGRAPH + {0xF2C2, 0x7A19}, //15954 #CJK UNIFIED IDEOGRAPH + {0xF2C3, 0x7A37}, //15955 #CJK UNIFIED IDEOGRAPH + {0xF2C4, 0x7E54}, //15956 #CJK UNIFIED IDEOGRAPH + {0xF2C5, 0x8077}, //15957 #CJK UNIFIED IDEOGRAPH + {0xF2C6, 0x5507}, //15958 #CJK UNIFIED IDEOGRAPH + {0xF2C7, 0x55D4}, //15959 #CJK UNIFIED IDEOGRAPH + {0xF2C8, 0x5875}, //15960 #CJK UNIFIED IDEOGRAPH + {0xF2C9, 0x632F}, //15961 #CJK UNIFIED IDEOGRAPH + {0xF2CA, 0x6422}, //15962 #CJK UNIFIED IDEOGRAPH + {0xF2CB, 0x6649}, //15963 #CJK UNIFIED IDEOGRAPH + {0xF2CC, 0x664B}, //15964 #CJK UNIFIED IDEOGRAPH + {0xF2CD, 0x686D}, //15965 #CJK UNIFIED IDEOGRAPH + {0xF2CE, 0x699B}, //15966 #CJK UNIFIED IDEOGRAPH + {0xF2CF, 0x6B84}, //15967 #CJK UNIFIED IDEOGRAPH + {0xF2D0, 0x6D25}, //15968 #CJK UNIFIED IDEOGRAPH + {0xF2D1, 0x6EB1}, //15969 #CJK UNIFIED IDEOGRAPH + {0xF2D2, 0x73CD}, //15970 #CJK UNIFIED IDEOGRAPH + {0xF2D3, 0x7468}, //15971 #CJK UNIFIED IDEOGRAPH + {0xF2D4, 0x74A1}, //15972 #CJK UNIFIED IDEOGRAPH + {0xF2D5, 0x755B}, //15973 #CJK UNIFIED IDEOGRAPH + {0xF2D6, 0x75B9}, //15974 #CJK UNIFIED IDEOGRAPH + {0xF2D7, 0x76E1}, //15975 #CJK UNIFIED IDEOGRAPH + {0xF2D8, 0x771E}, //15976 #CJK UNIFIED IDEOGRAPH + {0xF2D9, 0x778B}, //15977 #CJK UNIFIED IDEOGRAPH + {0xF2DA, 0x79E6}, //15978 #CJK UNIFIED IDEOGRAPH + {0xF2DB, 0x7E09}, //15979 #CJK UNIFIED IDEOGRAPH + {0xF2DC, 0x7E1D}, //15980 #CJK UNIFIED IDEOGRAPH + {0xF2DD, 0x81FB}, //15981 #CJK UNIFIED IDEOGRAPH + {0xF2DE, 0x852F}, //15982 #CJK UNIFIED IDEOGRAPH + {0xF2DF, 0x8897}, //15983 #CJK UNIFIED IDEOGRAPH + {0xF2E0, 0x8A3A}, //15984 #CJK UNIFIED IDEOGRAPH + {0xF2E1, 0x8CD1}, //15985 #CJK UNIFIED IDEOGRAPH + {0xF2E2, 0x8EEB}, //15986 #CJK UNIFIED IDEOGRAPH + {0xF2E3, 0x8FB0}, //15987 #CJK UNIFIED IDEOGRAPH + {0xF2E4, 0x9032}, //15988 #CJK UNIFIED IDEOGRAPH + {0xF2E5, 0x93AD}, //15989 #CJK UNIFIED IDEOGRAPH + {0xF2E6, 0x9663}, //15990 #CJK UNIFIED IDEOGRAPH + {0xF2E7, 0x9673}, //15991 #CJK UNIFIED IDEOGRAPH + {0xF2E8, 0x9707}, //15992 #CJK UNIFIED IDEOGRAPH + {0xF2E9, 0x4F84}, //15993 #CJK UNIFIED IDEOGRAPH + {0xF2EA, 0x53F1}, //15994 #CJK UNIFIED IDEOGRAPH + {0xF2EB, 0x59EA}, //15995 #CJK UNIFIED IDEOGRAPH + {0xF2EC, 0x5AC9}, //15996 #CJK UNIFIED IDEOGRAPH + {0xF2ED, 0x5E19}, //15997 #CJK UNIFIED IDEOGRAPH + {0xF2EE, 0x684E}, //15998 #CJK UNIFIED IDEOGRAPH + {0xF2EF, 0x74C6}, //15999 #CJK UNIFIED IDEOGRAPH + {0xF2F0, 0x75BE}, //16000 #CJK UNIFIED IDEOGRAPH + {0xF2F1, 0x79E9}, //16001 #CJK UNIFIED IDEOGRAPH + {0xF2F2, 0x7A92}, //16002 #CJK UNIFIED IDEOGRAPH + {0xF2F3, 0x81A3}, //16003 #CJK UNIFIED IDEOGRAPH + {0xF2F4, 0x86ED}, //16004 #CJK UNIFIED IDEOGRAPH + {0xF2F5, 0x8CEA}, //16005 #CJK UNIFIED IDEOGRAPH + {0xF2F6, 0x8DCC}, //16006 #CJK UNIFIED IDEOGRAPH + {0xF2F7, 0x8FED}, //16007 #CJK UNIFIED IDEOGRAPH + {0xF2F8, 0x659F}, //16008 #CJK UNIFIED IDEOGRAPH + {0xF2F9, 0x6715}, //16009 #CJK UNIFIED IDEOGRAPH + {0xF2FA, 0xF9FD}, //16010 #CJK COMPATIBILITY IDEOGRAPH + {0xF2FB, 0x57F7}, //16011 #CJK UNIFIED IDEOGRAPH + {0xF2FC, 0x6F57}, //16012 #CJK UNIFIED IDEOGRAPH + {0xF2FD, 0x7DDD}, //16013 #CJK UNIFIED IDEOGRAPH + {0xF2FE, 0x8F2F}, //16014 #CJK UNIFIED IDEOGRAPH + {0xF3A1, 0x93F6}, //16015 #CJK UNIFIED IDEOGRAPH + {0xF3A2, 0x96C6}, //16016 #CJK UNIFIED IDEOGRAPH + {0xF3A3, 0x5FB5}, //16017 #CJK UNIFIED IDEOGRAPH + {0xF3A4, 0x61F2}, //16018 #CJK UNIFIED IDEOGRAPH + {0xF3A5, 0x6F84}, //16019 #CJK UNIFIED IDEOGRAPH + {0xF3A6, 0x4E14}, //16020 #CJK UNIFIED IDEOGRAPH + {0xF3A7, 0x4F98}, //16021 #CJK UNIFIED IDEOGRAPH + {0xF3A8, 0x501F}, //16022 #CJK UNIFIED IDEOGRAPH + {0xF3A9, 0x53C9}, //16023 #CJK UNIFIED IDEOGRAPH + {0xF3AA, 0x55DF}, //16024 #CJK UNIFIED IDEOGRAPH + {0xF3AB, 0x5D6F}, //16025 #CJK UNIFIED IDEOGRAPH + {0xF3AC, 0x5DEE}, //16026 #CJK UNIFIED IDEOGRAPH + {0xF3AD, 0x6B21}, //16027 #CJK UNIFIED IDEOGRAPH + {0xF3AE, 0x6B64}, //16028 #CJK UNIFIED IDEOGRAPH + {0xF3AF, 0x78CB}, //16029 #CJK UNIFIED IDEOGRAPH + {0xF3B0, 0x7B9A}, //16030 #CJK UNIFIED IDEOGRAPH + {0xF3B1, 0xF9FE}, //16031 #CJK COMPATIBILITY IDEOGRAPH + {0xF3B2, 0x8E49}, //16032 #CJK UNIFIED IDEOGRAPH + {0xF3B3, 0x8ECA}, //16033 #CJK UNIFIED IDEOGRAPH + {0xF3B4, 0x906E}, //16034 #CJK UNIFIED IDEOGRAPH + {0xF3B5, 0x6349}, //16035 #CJK UNIFIED IDEOGRAPH + {0xF3B6, 0x643E}, //16036 #CJK UNIFIED IDEOGRAPH + {0xF3B7, 0x7740}, //16037 #CJK UNIFIED IDEOGRAPH + {0xF3B8, 0x7A84}, //16038 #CJK UNIFIED IDEOGRAPH + {0xF3B9, 0x932F}, //16039 #CJK UNIFIED IDEOGRAPH + {0xF3BA, 0x947F}, //16040 #CJK UNIFIED IDEOGRAPH + {0xF3BB, 0x9F6A}, //16041 #CJK UNIFIED IDEOGRAPH + {0xF3BC, 0x64B0}, //16042 #CJK UNIFIED IDEOGRAPH + {0xF3BD, 0x6FAF}, //16043 #CJK UNIFIED IDEOGRAPH + {0xF3BE, 0x71E6}, //16044 #CJK UNIFIED IDEOGRAPH + {0xF3BF, 0x74A8}, //16045 #CJK UNIFIED IDEOGRAPH + {0xF3C0, 0x74DA}, //16046 #CJK UNIFIED IDEOGRAPH + {0xF3C1, 0x7AC4}, //16047 #CJK UNIFIED IDEOGRAPH + {0xF3C2, 0x7C12}, //16048 #CJK UNIFIED IDEOGRAPH + {0xF3C3, 0x7E82}, //16049 #CJK UNIFIED IDEOGRAPH + {0xF3C4, 0x7CB2}, //16050 #CJK UNIFIED IDEOGRAPH + {0xF3C5, 0x7E98}, //16051 #CJK UNIFIED IDEOGRAPH + {0xF3C6, 0x8B9A}, //16052 #CJK UNIFIED IDEOGRAPH + {0xF3C7, 0x8D0A}, //16053 #CJK UNIFIED IDEOGRAPH + {0xF3C8, 0x947D}, //16054 #CJK UNIFIED IDEOGRAPH + {0xF3C9, 0x9910}, //16055 #CJK UNIFIED IDEOGRAPH + {0xF3CA, 0x994C}, //16056 #CJK UNIFIED IDEOGRAPH + {0xF3CB, 0x5239}, //16057 #CJK UNIFIED IDEOGRAPH + {0xF3CC, 0x5BDF}, //16058 #CJK UNIFIED IDEOGRAPH + {0xF3CD, 0x64E6}, //16059 #CJK UNIFIED IDEOGRAPH + {0xF3CE, 0x672D}, //16060 #CJK UNIFIED IDEOGRAPH + {0xF3CF, 0x7D2E}, //16061 #CJK UNIFIED IDEOGRAPH + {0xF3D0, 0x50ED}, //16062 #CJK UNIFIED IDEOGRAPH + {0xF3D1, 0x53C3}, //16063 #CJK UNIFIED IDEOGRAPH + {0xF3D2, 0x5879}, //16064 #CJK UNIFIED IDEOGRAPH + {0xF3D3, 0x6158}, //16065 #CJK UNIFIED IDEOGRAPH + {0xF3D4, 0x6159}, //16066 #CJK UNIFIED IDEOGRAPH + {0xF3D5, 0x61FA}, //16067 #CJK UNIFIED IDEOGRAPH + {0xF3D6, 0x65AC}, //16068 #CJK UNIFIED IDEOGRAPH + {0xF3D7, 0x7AD9}, //16069 #CJK UNIFIED IDEOGRAPH + {0xF3D8, 0x8B92}, //16070 #CJK UNIFIED IDEOGRAPH + {0xF3D9, 0x8B96}, //16071 #CJK UNIFIED IDEOGRAPH + {0xF3DA, 0x5009}, //16072 #CJK UNIFIED IDEOGRAPH + {0xF3DB, 0x5021}, //16073 #CJK UNIFIED IDEOGRAPH + {0xF3DC, 0x5275}, //16074 #CJK UNIFIED IDEOGRAPH + {0xF3DD, 0x5531}, //16075 #CJK UNIFIED IDEOGRAPH + {0xF3DE, 0x5A3C}, //16076 #CJK UNIFIED IDEOGRAPH + {0xF3DF, 0x5EE0}, //16077 #CJK UNIFIED IDEOGRAPH + {0xF3E0, 0x5F70}, //16078 #CJK UNIFIED IDEOGRAPH + {0xF3E1, 0x6134}, //16079 #CJK UNIFIED IDEOGRAPH + {0xF3E2, 0x655E}, //16080 #CJK UNIFIED IDEOGRAPH + {0xF3E3, 0x660C}, //16081 #CJK UNIFIED IDEOGRAPH + {0xF3E4, 0x6636}, //16082 #CJK UNIFIED IDEOGRAPH + {0xF3E5, 0x66A2}, //16083 #CJK UNIFIED IDEOGRAPH + {0xF3E6, 0x69CD}, //16084 #CJK UNIFIED IDEOGRAPH + {0xF3E7, 0x6EC4}, //16085 #CJK UNIFIED IDEOGRAPH + {0xF3E8, 0x6F32}, //16086 #CJK UNIFIED IDEOGRAPH + {0xF3E9, 0x7316}, //16087 #CJK UNIFIED IDEOGRAPH + {0xF3EA, 0x7621}, //16088 #CJK UNIFIED IDEOGRAPH + {0xF3EB, 0x7A93}, //16089 #CJK UNIFIED IDEOGRAPH + {0xF3EC, 0x8139}, //16090 #CJK UNIFIED IDEOGRAPH + {0xF3ED, 0x8259}, //16091 #CJK UNIFIED IDEOGRAPH + {0xF3EE, 0x83D6}, //16092 #CJK UNIFIED IDEOGRAPH + {0xF3EF, 0x84BC}, //16093 #CJK UNIFIED IDEOGRAPH + {0xF3F0, 0x50B5}, //16094 #CJK UNIFIED IDEOGRAPH + {0xF3F1, 0x57F0}, //16095 #CJK UNIFIED IDEOGRAPH + {0xF3F2, 0x5BC0}, //16096 #CJK UNIFIED IDEOGRAPH + {0xF3F3, 0x5BE8}, //16097 #CJK UNIFIED IDEOGRAPH + {0xF3F4, 0x5F69}, //16098 #CJK UNIFIED IDEOGRAPH + {0xF3F5, 0x63A1}, //16099 #CJK UNIFIED IDEOGRAPH + {0xF3F6, 0x7826}, //16100 #CJK UNIFIED IDEOGRAPH + {0xF3F7, 0x7DB5}, //16101 #CJK UNIFIED IDEOGRAPH + {0xF3F8, 0x83DC}, //16102 #CJK UNIFIED IDEOGRAPH + {0xF3F9, 0x8521}, //16103 #CJK UNIFIED IDEOGRAPH + {0xF3FA, 0x91C7}, //16104 #CJK UNIFIED IDEOGRAPH + {0xF3FB, 0x91F5}, //16105 #CJK UNIFIED IDEOGRAPH + {0xF3FC, 0x518A}, //16106 #CJK UNIFIED IDEOGRAPH + {0xF3FD, 0x67F5}, //16107 #CJK UNIFIED IDEOGRAPH + {0xF3FE, 0x7B56}, //16108 #CJK UNIFIED IDEOGRAPH + {0xF4A1, 0x8CAC}, //16109 #CJK UNIFIED IDEOGRAPH + {0xF4A2, 0x51C4}, //16110 #CJK UNIFIED IDEOGRAPH + {0xF4A3, 0x59BB}, //16111 #CJK UNIFIED IDEOGRAPH + {0xF4A4, 0x60BD}, //16112 #CJK UNIFIED IDEOGRAPH + {0xF4A5, 0x8655}, //16113 #CJK UNIFIED IDEOGRAPH + {0xF4A6, 0x501C}, //16114 #CJK UNIFIED IDEOGRAPH + {0xF4A7, 0xF9FF}, //16115 #CJK COMPATIBILITY IDEOGRAPH + {0xF4A8, 0x5254}, //16116 #CJK UNIFIED IDEOGRAPH + {0xF4A9, 0x5C3A}, //16117 #CJK UNIFIED IDEOGRAPH + {0xF4AA, 0x617D}, //16118 #CJK UNIFIED IDEOGRAPH + {0xF4AB, 0x621A}, //16119 #CJK UNIFIED IDEOGRAPH + {0xF4AC, 0x62D3}, //16120 #CJK UNIFIED IDEOGRAPH + {0xF4AD, 0x64F2}, //16121 #CJK UNIFIED IDEOGRAPH + {0xF4AE, 0x65A5}, //16122 #CJK UNIFIED IDEOGRAPH + {0xF4AF, 0x6ECC}, //16123 #CJK UNIFIED IDEOGRAPH + {0xF4B0, 0x7620}, //16124 #CJK UNIFIED IDEOGRAPH + {0xF4B1, 0x810A}, //16125 #CJK UNIFIED IDEOGRAPH + {0xF4B2, 0x8E60}, //16126 #CJK UNIFIED IDEOGRAPH + {0xF4B3, 0x965F}, //16127 #CJK UNIFIED IDEOGRAPH + {0xF4B4, 0x96BB}, //16128 #CJK UNIFIED IDEOGRAPH + {0xF4B5, 0x4EDF}, //16129 #CJK UNIFIED IDEOGRAPH + {0xF4B6, 0x5343}, //16130 #CJK UNIFIED IDEOGRAPH + {0xF4B7, 0x5598}, //16131 #CJK UNIFIED IDEOGRAPH + {0xF4B8, 0x5929}, //16132 #CJK UNIFIED IDEOGRAPH + {0xF4B9, 0x5DDD}, //16133 #CJK UNIFIED IDEOGRAPH + {0xF4BA, 0x64C5}, //16134 #CJK UNIFIED IDEOGRAPH + {0xF4BB, 0x6CC9}, //16135 #CJK UNIFIED IDEOGRAPH + {0xF4BC, 0x6DFA}, //16136 #CJK UNIFIED IDEOGRAPH + {0xF4BD, 0x7394}, //16137 #CJK UNIFIED IDEOGRAPH + {0xF4BE, 0x7A7F}, //16138 #CJK UNIFIED IDEOGRAPH + {0xF4BF, 0x821B}, //16139 #CJK UNIFIED IDEOGRAPH + {0xF4C0, 0x85A6}, //16140 #CJK UNIFIED IDEOGRAPH + {0xF4C1, 0x8CE4}, //16141 #CJK UNIFIED IDEOGRAPH + {0xF4C2, 0x8E10}, //16142 #CJK UNIFIED IDEOGRAPH + {0xF4C3, 0x9077}, //16143 #CJK UNIFIED IDEOGRAPH + {0xF4C4, 0x91E7}, //16144 #CJK UNIFIED IDEOGRAPH + {0xF4C5, 0x95E1}, //16145 #CJK UNIFIED IDEOGRAPH + {0xF4C6, 0x9621}, //16146 #CJK UNIFIED IDEOGRAPH + {0xF4C7, 0x97C6}, //16147 #CJK UNIFIED IDEOGRAPH + {0xF4C8, 0x51F8}, //16148 #CJK UNIFIED IDEOGRAPH + {0xF4C9, 0x54F2}, //16149 #CJK UNIFIED IDEOGRAPH + {0xF4CA, 0x5586}, //16150 #CJK UNIFIED IDEOGRAPH + {0xF4CB, 0x5FB9}, //16151 #CJK UNIFIED IDEOGRAPH + {0xF4CC, 0x64A4}, //16152 #CJK UNIFIED IDEOGRAPH + {0xF4CD, 0x6F88}, //16153 #CJK UNIFIED IDEOGRAPH + {0xF4CE, 0x7DB4}, //16154 #CJK UNIFIED IDEOGRAPH + {0xF4CF, 0x8F1F}, //16155 #CJK UNIFIED IDEOGRAPH + {0xF4D0, 0x8F4D}, //16156 #CJK UNIFIED IDEOGRAPH + {0xF4D1, 0x9435}, //16157 #CJK UNIFIED IDEOGRAPH + {0xF4D2, 0x50C9}, //16158 #CJK UNIFIED IDEOGRAPH + {0xF4D3, 0x5C16}, //16159 #CJK UNIFIED IDEOGRAPH + {0xF4D4, 0x6CBE}, //16160 #CJK UNIFIED IDEOGRAPH + {0xF4D5, 0x6DFB}, //16161 #CJK UNIFIED IDEOGRAPH + {0xF4D6, 0x751B}, //16162 #CJK UNIFIED IDEOGRAPH + {0xF4D7, 0x77BB}, //16163 #CJK UNIFIED IDEOGRAPH + {0xF4D8, 0x7C3D}, //16164 #CJK UNIFIED IDEOGRAPH + {0xF4D9, 0x7C64}, //16165 #CJK UNIFIED IDEOGRAPH + {0xF4DA, 0x8A79}, //16166 #CJK UNIFIED IDEOGRAPH + {0xF4DB, 0x8AC2}, //16167 #CJK UNIFIED IDEOGRAPH + {0xF4DC, 0x581E}, //16168 #CJK UNIFIED IDEOGRAPH + {0xF4DD, 0x59BE}, //16169 #CJK UNIFIED IDEOGRAPH + {0xF4DE, 0x5E16}, //16170 #CJK UNIFIED IDEOGRAPH + {0xF4DF, 0x6377}, //16171 #CJK UNIFIED IDEOGRAPH + {0xF4E0, 0x7252}, //16172 #CJK UNIFIED IDEOGRAPH + {0xF4E1, 0x758A}, //16173 #CJK UNIFIED IDEOGRAPH + {0xF4E2, 0x776B}, //16174 #CJK UNIFIED IDEOGRAPH + {0xF4E3, 0x8ADC}, //16175 #CJK UNIFIED IDEOGRAPH + {0xF4E4, 0x8CBC}, //16176 #CJK UNIFIED IDEOGRAPH + {0xF4E5, 0x8F12}, //16177 #CJK UNIFIED IDEOGRAPH + {0xF4E6, 0x5EF3}, //16178 #CJK UNIFIED IDEOGRAPH + {0xF4E7, 0x6674}, //16179 #CJK UNIFIED IDEOGRAPH + {0xF4E8, 0x6DF8}, //16180 #CJK UNIFIED IDEOGRAPH + {0xF4E9, 0x807D}, //16181 #CJK UNIFIED IDEOGRAPH + {0xF4EA, 0x83C1}, //16182 #CJK UNIFIED IDEOGRAPH + {0xF4EB, 0x8ACB}, //16183 #CJK UNIFIED IDEOGRAPH + {0xF4EC, 0x9751}, //16184 #CJK UNIFIED IDEOGRAPH + {0xF4ED, 0x9BD6}, //16185 #CJK UNIFIED IDEOGRAPH + {0xF4EE, 0xFA00}, //16186 #CJK COMPATIBILITY IDEOGRAPH + {0xF4EF, 0x5243}, //16187 #CJK UNIFIED IDEOGRAPH + {0xF4F0, 0x66FF}, //16188 #CJK UNIFIED IDEOGRAPH + {0xF4F1, 0x6D95}, //16189 #CJK UNIFIED IDEOGRAPH + {0xF4F2, 0x6EEF}, //16190 #CJK UNIFIED IDEOGRAPH + {0xF4F3, 0x7DE0}, //16191 #CJK UNIFIED IDEOGRAPH + {0xF4F4, 0x8AE6}, //16192 #CJK UNIFIED IDEOGRAPH + {0xF4F5, 0x902E}, //16193 #CJK UNIFIED IDEOGRAPH + {0xF4F6, 0x905E}, //16194 #CJK UNIFIED IDEOGRAPH + {0xF4F7, 0x9AD4}, //16195 #CJK UNIFIED IDEOGRAPH + {0xF4F8, 0x521D}, //16196 #CJK UNIFIED IDEOGRAPH + {0xF4F9, 0x527F}, //16197 #CJK UNIFIED IDEOGRAPH + {0xF4FA, 0x54E8}, //16198 #CJK UNIFIED IDEOGRAPH + {0xF4FB, 0x6194}, //16199 #CJK UNIFIED IDEOGRAPH + {0xF4FC, 0x6284}, //16200 #CJK UNIFIED IDEOGRAPH + {0xF4FD, 0x62DB}, //16201 #CJK UNIFIED IDEOGRAPH + {0xF4FE, 0x68A2}, //16202 #CJK UNIFIED IDEOGRAPH + {0xF5A1, 0x6912}, //16203 #CJK UNIFIED IDEOGRAPH + {0xF5A2, 0x695A}, //16204 #CJK UNIFIED IDEOGRAPH + {0xF5A3, 0x6A35}, //16205 #CJK UNIFIED IDEOGRAPH + {0xF5A4, 0x7092}, //16206 #CJK UNIFIED IDEOGRAPH + {0xF5A5, 0x7126}, //16207 #CJK UNIFIED IDEOGRAPH + {0xF5A6, 0x785D}, //16208 #CJK UNIFIED IDEOGRAPH + {0xF5A7, 0x7901}, //16209 #CJK UNIFIED IDEOGRAPH + {0xF5A8, 0x790E}, //16210 #CJK UNIFIED IDEOGRAPH + {0xF5A9, 0x79D2}, //16211 #CJK UNIFIED IDEOGRAPH + {0xF5AA, 0x7A0D}, //16212 #CJK UNIFIED IDEOGRAPH + {0xF5AB, 0x8096}, //16213 #CJK UNIFIED IDEOGRAPH + {0xF5AC, 0x8278}, //16214 #CJK UNIFIED IDEOGRAPH + {0xF5AD, 0x82D5}, //16215 #CJK UNIFIED IDEOGRAPH + {0xF5AE, 0x8349}, //16216 #CJK UNIFIED IDEOGRAPH + {0xF5AF, 0x8549}, //16217 #CJK UNIFIED IDEOGRAPH + {0xF5B0, 0x8C82}, //16218 #CJK UNIFIED IDEOGRAPH + {0xF5B1, 0x8D85}, //16219 #CJK UNIFIED IDEOGRAPH + {0xF5B2, 0x9162}, //16220 #CJK UNIFIED IDEOGRAPH + {0xF5B3, 0x918B}, //16221 #CJK UNIFIED IDEOGRAPH + {0xF5B4, 0x91AE}, //16222 #CJK UNIFIED IDEOGRAPH + {0xF5B5, 0x4FC3}, //16223 #CJK UNIFIED IDEOGRAPH + {0xF5B6, 0x56D1}, //16224 #CJK UNIFIED IDEOGRAPH + {0xF5B7, 0x71ED}, //16225 #CJK UNIFIED IDEOGRAPH + {0xF5B8, 0x77D7}, //16226 #CJK UNIFIED IDEOGRAPH + {0xF5B9, 0x8700}, //16227 #CJK UNIFIED IDEOGRAPH + {0xF5BA, 0x89F8}, //16228 #CJK UNIFIED IDEOGRAPH + {0xF5BB, 0x5BF8}, //16229 #CJK UNIFIED IDEOGRAPH + {0xF5BC, 0x5FD6}, //16230 #CJK UNIFIED IDEOGRAPH + {0xF5BD, 0x6751}, //16231 #CJK UNIFIED IDEOGRAPH + {0xF5BE, 0x90A8}, //16232 #CJK UNIFIED IDEOGRAPH + {0xF5BF, 0x53E2}, //16233 #CJK UNIFIED IDEOGRAPH + {0xF5C0, 0x585A}, //16234 #CJK UNIFIED IDEOGRAPH + {0xF5C1, 0x5BF5}, //16235 #CJK UNIFIED IDEOGRAPH + {0xF5C2, 0x60A4}, //16236 #CJK UNIFIED IDEOGRAPH + {0xF5C3, 0x6181}, //16237 #CJK UNIFIED IDEOGRAPH + {0xF5C4, 0x6460}, //16238 #CJK UNIFIED IDEOGRAPH + {0xF5C5, 0x7E3D}, //16239 #CJK UNIFIED IDEOGRAPH + {0xF5C6, 0x8070}, //16240 #CJK UNIFIED IDEOGRAPH + {0xF5C7, 0x8525}, //16241 #CJK UNIFIED IDEOGRAPH + {0xF5C8, 0x9283}, //16242 #CJK UNIFIED IDEOGRAPH + {0xF5C9, 0x64AE}, //16243 #CJK UNIFIED IDEOGRAPH + {0xF5CA, 0x50AC}, //16244 #CJK UNIFIED IDEOGRAPH + {0xF5CB, 0x5D14}, //16245 #CJK UNIFIED IDEOGRAPH + {0xF5CC, 0x6700}, //16246 #CJK UNIFIED IDEOGRAPH + {0xF5CD, 0x589C}, //16247 #CJK UNIFIED IDEOGRAPH + {0xF5CE, 0x62BD}, //16248 #CJK UNIFIED IDEOGRAPH + {0xF5CF, 0x63A8}, //16249 #CJK UNIFIED IDEOGRAPH + {0xF5D0, 0x690E}, //16250 #CJK UNIFIED IDEOGRAPH + {0xF5D1, 0x6978}, //16251 #CJK UNIFIED IDEOGRAPH + {0xF5D2, 0x6A1E}, //16252 #CJK UNIFIED IDEOGRAPH + {0xF5D3, 0x6E6B}, //16253 #CJK UNIFIED IDEOGRAPH + {0xF5D4, 0x76BA}, //16254 #CJK UNIFIED IDEOGRAPH + {0xF5D5, 0x79CB}, //16255 #CJK UNIFIED IDEOGRAPH + {0xF5D6, 0x82BB}, //16256 #CJK UNIFIED IDEOGRAPH + {0xF5D7, 0x8429}, //16257 #CJK UNIFIED IDEOGRAPH + {0xF5D8, 0x8ACF}, //16258 #CJK UNIFIED IDEOGRAPH + {0xF5D9, 0x8DA8}, //16259 #CJK UNIFIED IDEOGRAPH + {0xF5DA, 0x8FFD}, //16260 #CJK UNIFIED IDEOGRAPH + {0xF5DB, 0x9112}, //16261 #CJK UNIFIED IDEOGRAPH + {0xF5DC, 0x914B}, //16262 #CJK UNIFIED IDEOGRAPH + {0xF5DD, 0x919C}, //16263 #CJK UNIFIED IDEOGRAPH + {0xF5DE, 0x9310}, //16264 #CJK UNIFIED IDEOGRAPH + {0xF5DF, 0x9318}, //16265 #CJK UNIFIED IDEOGRAPH + {0xF5E0, 0x939A}, //16266 #CJK UNIFIED IDEOGRAPH + {0xF5E1, 0x96DB}, //16267 #CJK UNIFIED IDEOGRAPH + {0xF5E2, 0x9A36}, //16268 #CJK UNIFIED IDEOGRAPH + {0xF5E3, 0x9C0D}, //16269 #CJK UNIFIED IDEOGRAPH + {0xF5E4, 0x4E11}, //16270 #CJK UNIFIED IDEOGRAPH + {0xF5E5, 0x755C}, //16271 #CJK UNIFIED IDEOGRAPH + {0xF5E6, 0x795D}, //16272 #CJK UNIFIED IDEOGRAPH + {0xF5E7, 0x7AFA}, //16273 #CJK UNIFIED IDEOGRAPH + {0xF5E8, 0x7B51}, //16274 #CJK UNIFIED IDEOGRAPH + {0xF5E9, 0x7BC9}, //16275 #CJK UNIFIED IDEOGRAPH + {0xF5EA, 0x7E2E}, //16276 #CJK UNIFIED IDEOGRAPH + {0xF5EB, 0x84C4}, //16277 #CJK UNIFIED IDEOGRAPH + {0xF5EC, 0x8E59}, //16278 #CJK UNIFIED IDEOGRAPH + {0xF5ED, 0x8E74}, //16279 #CJK UNIFIED IDEOGRAPH + {0xF5EE, 0x8EF8}, //16280 #CJK UNIFIED IDEOGRAPH + {0xF5EF, 0x9010}, //16281 #CJK UNIFIED IDEOGRAPH + {0xF5F0, 0x6625}, //16282 #CJK UNIFIED IDEOGRAPH + {0xF5F1, 0x693F}, //16283 #CJK UNIFIED IDEOGRAPH + {0xF5F2, 0x7443}, //16284 #CJK UNIFIED IDEOGRAPH + {0xF5F3, 0x51FA}, //16285 #CJK UNIFIED IDEOGRAPH + {0xF5F4, 0x672E}, //16286 #CJK UNIFIED IDEOGRAPH + {0xF5F5, 0x9EDC}, //16287 #CJK UNIFIED IDEOGRAPH + {0xF5F6, 0x5145}, //16288 #CJK UNIFIED IDEOGRAPH + {0xF5F7, 0x5FE0}, //16289 #CJK UNIFIED IDEOGRAPH + {0xF5F8, 0x6C96}, //16290 #CJK UNIFIED IDEOGRAPH + {0xF5F9, 0x87F2}, //16291 #CJK UNIFIED IDEOGRAPH + {0xF5FA, 0x885D}, //16292 #CJK UNIFIED IDEOGRAPH + {0xF5FB, 0x8877}, //16293 #CJK UNIFIED IDEOGRAPH + {0xF5FC, 0x60B4}, //16294 #CJK UNIFIED IDEOGRAPH + {0xF5FD, 0x81B5}, //16295 #CJK UNIFIED IDEOGRAPH + {0xF5FE, 0x8403}, //16296 #CJK UNIFIED IDEOGRAPH + {0xF6A1, 0x8D05}, //16297 #CJK UNIFIED IDEOGRAPH + {0xF6A2, 0x53D6}, //16298 #CJK UNIFIED IDEOGRAPH + {0xF6A3, 0x5439}, //16299 #CJK UNIFIED IDEOGRAPH + {0xF6A4, 0x5634}, //16300 #CJK UNIFIED IDEOGRAPH + {0xF6A5, 0x5A36}, //16301 #CJK UNIFIED IDEOGRAPH + {0xF6A6, 0x5C31}, //16302 #CJK UNIFIED IDEOGRAPH + {0xF6A7, 0x708A}, //16303 #CJK UNIFIED IDEOGRAPH + {0xF6A8, 0x7FE0}, //16304 #CJK UNIFIED IDEOGRAPH + {0xF6A9, 0x805A}, //16305 #CJK UNIFIED IDEOGRAPH + {0xF6AA, 0x8106}, //16306 #CJK UNIFIED IDEOGRAPH + {0xF6AB, 0x81ED}, //16307 #CJK UNIFIED IDEOGRAPH + {0xF6AC, 0x8DA3}, //16308 #CJK UNIFIED IDEOGRAPH + {0xF6AD, 0x9189}, //16309 #CJK UNIFIED IDEOGRAPH + {0xF6AE, 0x9A5F}, //16310 #CJK UNIFIED IDEOGRAPH + {0xF6AF, 0x9DF2}, //16311 #CJK UNIFIED IDEOGRAPH + {0xF6B0, 0x5074}, //16312 #CJK UNIFIED IDEOGRAPH + {0xF6B1, 0x4EC4}, //16313 #CJK UNIFIED IDEOGRAPH + {0xF6B2, 0x53A0}, //16314 #CJK UNIFIED IDEOGRAPH + {0xF6B3, 0x60FB}, //16315 #CJK UNIFIED IDEOGRAPH + {0xF6B4, 0x6E2C}, //16316 #CJK UNIFIED IDEOGRAPH + {0xF6B5, 0x5C64}, //16317 #CJK UNIFIED IDEOGRAPH + {0xF6B6, 0x4F88}, //16318 #CJK UNIFIED IDEOGRAPH + {0xF6B7, 0x5024}, //16319 #CJK UNIFIED IDEOGRAPH + {0xF6B8, 0x55E4}, //16320 #CJK UNIFIED IDEOGRAPH + {0xF6B9, 0x5CD9}, //16321 #CJK UNIFIED IDEOGRAPH + {0xF6BA, 0x5E5F}, //16322 #CJK UNIFIED IDEOGRAPH + {0xF6BB, 0x6065}, //16323 #CJK UNIFIED IDEOGRAPH + {0xF6BC, 0x6894}, //16324 #CJK UNIFIED IDEOGRAPH + {0xF6BD, 0x6CBB}, //16325 #CJK UNIFIED IDEOGRAPH + {0xF6BE, 0x6DC4}, //16326 #CJK UNIFIED IDEOGRAPH + {0xF6BF, 0x71BE}, //16327 #CJK UNIFIED IDEOGRAPH + {0xF6C0, 0x75D4}, //16328 #CJK UNIFIED IDEOGRAPH + {0xF6C1, 0x75F4}, //16329 #CJK UNIFIED IDEOGRAPH + {0xF6C2, 0x7661}, //16330 #CJK UNIFIED IDEOGRAPH + {0xF6C3, 0x7A1A}, //16331 #CJK UNIFIED IDEOGRAPH + {0xF6C4, 0x7A49}, //16332 #CJK UNIFIED IDEOGRAPH + {0xF6C5, 0x7DC7}, //16333 #CJK UNIFIED IDEOGRAPH + {0xF6C6, 0x7DFB}, //16334 #CJK UNIFIED IDEOGRAPH + {0xF6C7, 0x7F6E}, //16335 #CJK UNIFIED IDEOGRAPH + {0xF6C8, 0x81F4}, //16336 #CJK UNIFIED IDEOGRAPH + {0xF6C9, 0x86A9}, //16337 #CJK UNIFIED IDEOGRAPH + {0xF6CA, 0x8F1C}, //16338 #CJK UNIFIED IDEOGRAPH + {0xF6CB, 0x96C9}, //16339 #CJK UNIFIED IDEOGRAPH + {0xF6CC, 0x99B3}, //16340 #CJK UNIFIED IDEOGRAPH + {0xF6CD, 0x9F52}, //16341 #CJK UNIFIED IDEOGRAPH + {0xF6CE, 0x5247}, //16342 #CJK UNIFIED IDEOGRAPH + {0xF6CF, 0x52C5}, //16343 #CJK UNIFIED IDEOGRAPH + {0xF6D0, 0x98ED}, //16344 #CJK UNIFIED IDEOGRAPH + {0xF6D1, 0x89AA}, //16345 #CJK UNIFIED IDEOGRAPH + {0xF6D2, 0x4E03}, //16346 #CJK UNIFIED IDEOGRAPH + {0xF6D3, 0x67D2}, //16347 #CJK UNIFIED IDEOGRAPH + {0xF6D4, 0x6F06}, //16348 #CJK UNIFIED IDEOGRAPH + {0xF6D5, 0x4FB5}, //16349 #CJK UNIFIED IDEOGRAPH + {0xF6D6, 0x5BE2}, //16350 #CJK UNIFIED IDEOGRAPH + {0xF6D7, 0x6795}, //16351 #CJK UNIFIED IDEOGRAPH + {0xF6D8, 0x6C88}, //16352 #CJK UNIFIED IDEOGRAPH + {0xF6D9, 0x6D78}, //16353 #CJK UNIFIED IDEOGRAPH + {0xF6DA, 0x741B}, //16354 #CJK UNIFIED IDEOGRAPH + {0xF6DB, 0x7827}, //16355 #CJK UNIFIED IDEOGRAPH + {0xF6DC, 0x91DD}, //16356 #CJK UNIFIED IDEOGRAPH + {0xF6DD, 0x937C}, //16357 #CJK UNIFIED IDEOGRAPH + {0xF6DE, 0x87C4}, //16358 #CJK UNIFIED IDEOGRAPH + {0xF6DF, 0x79E4}, //16359 #CJK UNIFIED IDEOGRAPH + {0xF6E0, 0x7A31}, //16360 #CJK UNIFIED IDEOGRAPH + {0xF6E1, 0x5FEB}, //16361 #CJK UNIFIED IDEOGRAPH + {0xF6E2, 0x4ED6}, //16362 #CJK UNIFIED IDEOGRAPH + {0xF6E3, 0x54A4}, //16363 #CJK UNIFIED IDEOGRAPH + {0xF6E4, 0x553E}, //16364 #CJK UNIFIED IDEOGRAPH + {0xF6E5, 0x58AE}, //16365 #CJK UNIFIED IDEOGRAPH + {0xF6E6, 0x59A5}, //16366 #CJK UNIFIED IDEOGRAPH + {0xF6E7, 0x60F0}, //16367 #CJK UNIFIED IDEOGRAPH + {0xF6E8, 0x6253}, //16368 #CJK UNIFIED IDEOGRAPH + {0xF6E9, 0x62D6}, //16369 #CJK UNIFIED IDEOGRAPH + {0xF6EA, 0x6736}, //16370 #CJK UNIFIED IDEOGRAPH + {0xF6EB, 0x6955}, //16371 #CJK UNIFIED IDEOGRAPH + {0xF6EC, 0x8235}, //16372 #CJK UNIFIED IDEOGRAPH + {0xF6ED, 0x9640}, //16373 #CJK UNIFIED IDEOGRAPH + {0xF6EE, 0x99B1}, //16374 #CJK UNIFIED IDEOGRAPH + {0xF6EF, 0x99DD}, //16375 #CJK UNIFIED IDEOGRAPH + {0xF6F0, 0x502C}, //16376 #CJK UNIFIED IDEOGRAPH + {0xF6F1, 0x5353}, //16377 #CJK UNIFIED IDEOGRAPH + {0xF6F2, 0x5544}, //16378 #CJK UNIFIED IDEOGRAPH + {0xF6F3, 0x577C}, //16379 #CJK UNIFIED IDEOGRAPH + {0xF6F4, 0xFA01}, //16380 #CJK COMPATIBILITY IDEOGRAPH + {0xF6F5, 0x6258}, //16381 #CJK UNIFIED IDEOGRAPH + {0xF6F6, 0xFA02}, //16382 #CJK COMPATIBILITY IDEOGRAPH + {0xF6F7, 0x64E2}, //16383 #CJK UNIFIED IDEOGRAPH + {0xF6F8, 0x666B}, //16384 #CJK UNIFIED IDEOGRAPH + {0xF6F9, 0x67DD}, //16385 #CJK UNIFIED IDEOGRAPH + {0xF6FA, 0x6FC1}, //16386 #CJK UNIFIED IDEOGRAPH + {0xF6FB, 0x6FEF}, //16387 #CJK UNIFIED IDEOGRAPH + {0xF6FC, 0x7422}, //16388 #CJK UNIFIED IDEOGRAPH + {0xF6FD, 0x7438}, //16389 #CJK UNIFIED IDEOGRAPH + {0xF6FE, 0x8A17}, //16390 #CJK UNIFIED IDEOGRAPH + {0xF7A1, 0x9438}, //16391 #CJK UNIFIED IDEOGRAPH + {0xF7A2, 0x5451}, //16392 #CJK UNIFIED IDEOGRAPH + {0xF7A3, 0x5606}, //16393 #CJK UNIFIED IDEOGRAPH + {0xF7A4, 0x5766}, //16394 #CJK UNIFIED IDEOGRAPH + {0xF7A5, 0x5F48}, //16395 #CJK UNIFIED IDEOGRAPH + {0xF7A6, 0x619A}, //16396 #CJK UNIFIED IDEOGRAPH + {0xF7A7, 0x6B4E}, //16397 #CJK UNIFIED IDEOGRAPH + {0xF7A8, 0x7058}, //16398 #CJK UNIFIED IDEOGRAPH + {0xF7A9, 0x70AD}, //16399 #CJK UNIFIED IDEOGRAPH + {0xF7AA, 0x7DBB}, //16400 #CJK UNIFIED IDEOGRAPH + {0xF7AB, 0x8A95}, //16401 #CJK UNIFIED IDEOGRAPH + {0xF7AC, 0x596A}, //16402 #CJK UNIFIED IDEOGRAPH + {0xF7AD, 0x812B}, //16403 #CJK UNIFIED IDEOGRAPH + {0xF7AE, 0x63A2}, //16404 #CJK UNIFIED IDEOGRAPH + {0xF7AF, 0x7708}, //16405 #CJK UNIFIED IDEOGRAPH + {0xF7B0, 0x803D}, //16406 #CJK UNIFIED IDEOGRAPH + {0xF7B1, 0x8CAA}, //16407 #CJK UNIFIED IDEOGRAPH + {0xF7B2, 0x5854}, //16408 #CJK UNIFIED IDEOGRAPH + {0xF7B3, 0x642D}, //16409 #CJK UNIFIED IDEOGRAPH + {0xF7B4, 0x69BB}, //16410 #CJK UNIFIED IDEOGRAPH + {0xF7B5, 0x5B95}, //16411 #CJK UNIFIED IDEOGRAPH + {0xF7B6, 0x5E11}, //16412 #CJK UNIFIED IDEOGRAPH + {0xF7B7, 0x6E6F}, //16413 #CJK UNIFIED IDEOGRAPH + {0xF7B8, 0xFA03}, //16414 #CJK COMPATIBILITY IDEOGRAPH + {0xF7B9, 0x8569}, //16415 #CJK UNIFIED IDEOGRAPH + {0xF7BA, 0x514C}, //16416 #CJK UNIFIED IDEOGRAPH + {0xF7BB, 0x53F0}, //16417 #CJK UNIFIED IDEOGRAPH + {0xF7BC, 0x592A}, //16418 #CJK UNIFIED IDEOGRAPH + {0xF7BD, 0x6020}, //16419 #CJK UNIFIED IDEOGRAPH + {0xF7BE, 0x614B}, //16420 #CJK UNIFIED IDEOGRAPH + {0xF7BF, 0x6B86}, //16421 #CJK UNIFIED IDEOGRAPH + {0xF7C0, 0x6C70}, //16422 #CJK UNIFIED IDEOGRAPH + {0xF7C1, 0x6CF0}, //16423 #CJK UNIFIED IDEOGRAPH + {0xF7C2, 0x7B1E}, //16424 #CJK UNIFIED IDEOGRAPH + {0xF7C3, 0x80CE}, //16425 #CJK UNIFIED IDEOGRAPH + {0xF7C4, 0x82D4}, //16426 #CJK UNIFIED IDEOGRAPH + {0xF7C5, 0x8DC6}, //16427 #CJK UNIFIED IDEOGRAPH + {0xF7C6, 0x90B0}, //16428 #CJK UNIFIED IDEOGRAPH + {0xF7C7, 0x98B1}, //16429 #CJK UNIFIED IDEOGRAPH + {0xF7C8, 0xFA04}, //16430 #CJK COMPATIBILITY IDEOGRAPH + {0xF7C9, 0x64C7}, //16431 #CJK UNIFIED IDEOGRAPH + {0xF7CA, 0x6FA4}, //16432 #CJK UNIFIED IDEOGRAPH + {0xF7CB, 0x6491}, //16433 #CJK UNIFIED IDEOGRAPH + {0xF7CC, 0x6504}, //16434 #CJK UNIFIED IDEOGRAPH + {0xF7CD, 0x514E}, //16435 #CJK UNIFIED IDEOGRAPH + {0xF7CE, 0x5410}, //16436 #CJK UNIFIED IDEOGRAPH + {0xF7CF, 0x571F}, //16437 #CJK UNIFIED IDEOGRAPH + {0xF7D0, 0x8A0E}, //16438 #CJK UNIFIED IDEOGRAPH + {0xF7D1, 0x615F}, //16439 #CJK UNIFIED IDEOGRAPH + {0xF7D2, 0x6876}, //16440 #CJK UNIFIED IDEOGRAPH + {0xF7D3, 0xFA05}, //16441 #CJK COMPATIBILITY IDEOGRAPH + {0xF7D4, 0x75DB}, //16442 #CJK UNIFIED IDEOGRAPH + {0xF7D5, 0x7B52}, //16443 #CJK UNIFIED IDEOGRAPH + {0xF7D6, 0x7D71}, //16444 #CJK UNIFIED IDEOGRAPH + {0xF7D7, 0x901A}, //16445 #CJK UNIFIED IDEOGRAPH + {0xF7D8, 0x5806}, //16446 #CJK UNIFIED IDEOGRAPH + {0xF7D9, 0x69CC}, //16447 #CJK UNIFIED IDEOGRAPH + {0xF7DA, 0x817F}, //16448 #CJK UNIFIED IDEOGRAPH + {0xF7DB, 0x892A}, //16449 #CJK UNIFIED IDEOGRAPH + {0xF7DC, 0x9000}, //16450 #CJK UNIFIED IDEOGRAPH + {0xF7DD, 0x9839}, //16451 #CJK UNIFIED IDEOGRAPH + {0xF7DE, 0x5078}, //16452 #CJK UNIFIED IDEOGRAPH + {0xF7DF, 0x5957}, //16453 #CJK UNIFIED IDEOGRAPH + {0xF7E0, 0x59AC}, //16454 #CJK UNIFIED IDEOGRAPH + {0xF7E1, 0x6295}, //16455 #CJK UNIFIED IDEOGRAPH + {0xF7E2, 0x900F}, //16456 #CJK UNIFIED IDEOGRAPH + {0xF7E3, 0x9B2A}, //16457 #CJK UNIFIED IDEOGRAPH + {0xF7E4, 0x615D}, //16458 #CJK UNIFIED IDEOGRAPH + {0xF7E5, 0x7279}, //16459 #CJK UNIFIED IDEOGRAPH + {0xF7E6, 0x95D6}, //16460 #CJK UNIFIED IDEOGRAPH + {0xF7E7, 0x5761}, //16461 #CJK UNIFIED IDEOGRAPH + {0xF7E8, 0x5A46}, //16462 #CJK UNIFIED IDEOGRAPH + {0xF7E9, 0x5DF4}, //16463 #CJK UNIFIED IDEOGRAPH + {0xF7EA, 0x628A}, //16464 #CJK UNIFIED IDEOGRAPH + {0xF7EB, 0x64AD}, //16465 #CJK UNIFIED IDEOGRAPH + {0xF7EC, 0x64FA}, //16466 #CJK UNIFIED IDEOGRAPH + {0xF7ED, 0x6777}, //16467 #CJK UNIFIED IDEOGRAPH + {0xF7EE, 0x6CE2}, //16468 #CJK UNIFIED IDEOGRAPH + {0xF7EF, 0x6D3E}, //16469 #CJK UNIFIED IDEOGRAPH + {0xF7F0, 0x722C}, //16470 #CJK UNIFIED IDEOGRAPH + {0xF7F1, 0x7436}, //16471 #CJK UNIFIED IDEOGRAPH + {0xF7F2, 0x7834}, //16472 #CJK UNIFIED IDEOGRAPH + {0xF7F3, 0x7F77}, //16473 #CJK UNIFIED IDEOGRAPH + {0xF7F4, 0x82AD}, //16474 #CJK UNIFIED IDEOGRAPH + {0xF7F5, 0x8DDB}, //16475 #CJK UNIFIED IDEOGRAPH + {0xF7F6, 0x9817}, //16476 #CJK UNIFIED IDEOGRAPH + {0xF7F7, 0x5224}, //16477 #CJK UNIFIED IDEOGRAPH + {0xF7F8, 0x5742}, //16478 #CJK UNIFIED IDEOGRAPH + {0xF7F9, 0x677F}, //16479 #CJK UNIFIED IDEOGRAPH + {0xF7FA, 0x7248}, //16480 #CJK UNIFIED IDEOGRAPH + {0xF7FB, 0x74E3}, //16481 #CJK UNIFIED IDEOGRAPH + {0xF7FC, 0x8CA9}, //16482 #CJK UNIFIED IDEOGRAPH + {0xF7FD, 0x8FA6}, //16483 #CJK UNIFIED IDEOGRAPH + {0xF7FE, 0x9211}, //16484 #CJK UNIFIED IDEOGRAPH + {0xF8A1, 0x962A}, //16485 #CJK UNIFIED IDEOGRAPH + {0xF8A2, 0x516B}, //16486 #CJK UNIFIED IDEOGRAPH + {0xF8A3, 0x53ED}, //16487 #CJK UNIFIED IDEOGRAPH + {0xF8A4, 0x634C}, //16488 #CJK UNIFIED IDEOGRAPH + {0xF8A5, 0x4F69}, //16489 #CJK UNIFIED IDEOGRAPH + {0xF8A6, 0x5504}, //16490 #CJK UNIFIED IDEOGRAPH + {0xF8A7, 0x6096}, //16491 #CJK UNIFIED IDEOGRAPH + {0xF8A8, 0x6557}, //16492 #CJK UNIFIED IDEOGRAPH + {0xF8A9, 0x6C9B}, //16493 #CJK UNIFIED IDEOGRAPH + {0xF8AA, 0x6D7F}, //16494 #CJK UNIFIED IDEOGRAPH + {0xF8AB, 0x724C}, //16495 #CJK UNIFIED IDEOGRAPH + {0xF8AC, 0x72FD}, //16496 #CJK UNIFIED IDEOGRAPH + {0xF8AD, 0x7A17}, //16497 #CJK UNIFIED IDEOGRAPH + {0xF8AE, 0x8987}, //16498 #CJK UNIFIED IDEOGRAPH + {0xF8AF, 0x8C9D}, //16499 #CJK UNIFIED IDEOGRAPH + {0xF8B0, 0x5F6D}, //16500 #CJK UNIFIED IDEOGRAPH + {0xF8B1, 0x6F8E}, //16501 #CJK UNIFIED IDEOGRAPH + {0xF8B2, 0x70F9}, //16502 #CJK UNIFIED IDEOGRAPH + {0xF8B3, 0x81A8}, //16503 #CJK UNIFIED IDEOGRAPH + {0xF8B4, 0x610E}, //16504 #CJK UNIFIED IDEOGRAPH + {0xF8B5, 0x4FBF}, //16505 #CJK UNIFIED IDEOGRAPH + {0xF8B6, 0x504F}, //16506 #CJK UNIFIED IDEOGRAPH + {0xF8B7, 0x6241}, //16507 #CJK UNIFIED IDEOGRAPH + {0xF8B8, 0x7247}, //16508 #CJK UNIFIED IDEOGRAPH + {0xF8B9, 0x7BC7}, //16509 #CJK UNIFIED IDEOGRAPH + {0xF8BA, 0x7DE8}, //16510 #CJK UNIFIED IDEOGRAPH + {0xF8BB, 0x7FE9}, //16511 #CJK UNIFIED IDEOGRAPH + {0xF8BC, 0x904D}, //16512 #CJK UNIFIED IDEOGRAPH + {0xF8BD, 0x97AD}, //16513 #CJK UNIFIED IDEOGRAPH + {0xF8BE, 0x9A19}, //16514 #CJK UNIFIED IDEOGRAPH + {0xF8BF, 0x8CB6}, //16515 #CJK UNIFIED IDEOGRAPH + {0xF8C0, 0x576A}, //16516 #CJK UNIFIED IDEOGRAPH + {0xF8C1, 0x5E73}, //16517 #CJK UNIFIED IDEOGRAPH + {0xF8C2, 0x67B0}, //16518 #CJK UNIFIED IDEOGRAPH + {0xF8C3, 0x840D}, //16519 #CJK UNIFIED IDEOGRAPH + {0xF8C4, 0x8A55}, //16520 #CJK UNIFIED IDEOGRAPH + {0xF8C5, 0x5420}, //16521 #CJK UNIFIED IDEOGRAPH + {0xF8C6, 0x5B16}, //16522 #CJK UNIFIED IDEOGRAPH + {0xF8C7, 0x5E63}, //16523 #CJK UNIFIED IDEOGRAPH + {0xF8C8, 0x5EE2}, //16524 #CJK UNIFIED IDEOGRAPH + {0xF8C9, 0x5F0A}, //16525 #CJK UNIFIED IDEOGRAPH + {0xF8CA, 0x6583}, //16526 #CJK UNIFIED IDEOGRAPH + {0xF8CB, 0x80BA}, //16527 #CJK UNIFIED IDEOGRAPH + {0xF8CC, 0x853D}, //16528 #CJK UNIFIED IDEOGRAPH + {0xF8CD, 0x9589}, //16529 #CJK UNIFIED IDEOGRAPH + {0xF8CE, 0x965B}, //16530 #CJK UNIFIED IDEOGRAPH + {0xF8CF, 0x4F48}, //16531 #CJK UNIFIED IDEOGRAPH + {0xF8D0, 0x5305}, //16532 #CJK UNIFIED IDEOGRAPH + {0xF8D1, 0x530D}, //16533 #CJK UNIFIED IDEOGRAPH + {0xF8D2, 0x530F}, //16534 #CJK UNIFIED IDEOGRAPH + {0xF8D3, 0x5486}, //16535 #CJK UNIFIED IDEOGRAPH + {0xF8D4, 0x54FA}, //16536 #CJK UNIFIED IDEOGRAPH + {0xF8D5, 0x5703}, //16537 #CJK UNIFIED IDEOGRAPH + {0xF8D6, 0x5E03}, //16538 #CJK UNIFIED IDEOGRAPH + {0xF8D7, 0x6016}, //16539 #CJK UNIFIED IDEOGRAPH + {0xF8D8, 0x629B}, //16540 #CJK UNIFIED IDEOGRAPH + {0xF8D9, 0x62B1}, //16541 #CJK UNIFIED IDEOGRAPH + {0xF8DA, 0x6355}, //16542 #CJK UNIFIED IDEOGRAPH + {0xF8DB, 0xFA06}, //16543 #CJK COMPATIBILITY IDEOGRAPH + {0xF8DC, 0x6CE1}, //16544 #CJK UNIFIED IDEOGRAPH + {0xF8DD, 0x6D66}, //16545 #CJK UNIFIED IDEOGRAPH + {0xF8DE, 0x75B1}, //16546 #CJK UNIFIED IDEOGRAPH + {0xF8DF, 0x7832}, //16547 #CJK UNIFIED IDEOGRAPH + {0xF8E0, 0x80DE}, //16548 #CJK UNIFIED IDEOGRAPH + {0xF8E1, 0x812F}, //16549 #CJK UNIFIED IDEOGRAPH + {0xF8E2, 0x82DE}, //16550 #CJK UNIFIED IDEOGRAPH + {0xF8E3, 0x8461}, //16551 #CJK UNIFIED IDEOGRAPH + {0xF8E4, 0x84B2}, //16552 #CJK UNIFIED IDEOGRAPH + {0xF8E5, 0x888D}, //16553 #CJK UNIFIED IDEOGRAPH + {0xF8E6, 0x8912}, //16554 #CJK UNIFIED IDEOGRAPH + {0xF8E7, 0x900B}, //16555 #CJK UNIFIED IDEOGRAPH + {0xF8E8, 0x92EA}, //16556 #CJK UNIFIED IDEOGRAPH + {0xF8E9, 0x98FD}, //16557 #CJK UNIFIED IDEOGRAPH + {0xF8EA, 0x9B91}, //16558 #CJK UNIFIED IDEOGRAPH + {0xF8EB, 0x5E45}, //16559 #CJK UNIFIED IDEOGRAPH + {0xF8EC, 0x66B4}, //16560 #CJK UNIFIED IDEOGRAPH + {0xF8ED, 0x66DD}, //16561 #CJK UNIFIED IDEOGRAPH + {0xF8EE, 0x7011}, //16562 #CJK UNIFIED IDEOGRAPH + {0xF8EF, 0x7206}, //16563 #CJK UNIFIED IDEOGRAPH + {0xF8F0, 0xFA07}, //16564 #CJK COMPATIBILITY IDEOGRAPH + {0xF8F1, 0x4FF5}, //16565 #CJK UNIFIED IDEOGRAPH + {0xF8F2, 0x527D}, //16566 #CJK UNIFIED IDEOGRAPH + {0xF8F3, 0x5F6A}, //16567 #CJK UNIFIED IDEOGRAPH + {0xF8F4, 0x6153}, //16568 #CJK UNIFIED IDEOGRAPH + {0xF8F5, 0x6753}, //16569 #CJK UNIFIED IDEOGRAPH + {0xF8F6, 0x6A19}, //16570 #CJK UNIFIED IDEOGRAPH + {0xF8F7, 0x6F02}, //16571 #CJK UNIFIED IDEOGRAPH + {0xF8F8, 0x74E2}, //16572 #CJK UNIFIED IDEOGRAPH + {0xF8F9, 0x7968}, //16573 #CJK UNIFIED IDEOGRAPH + {0xF8FA, 0x8868}, //16574 #CJK UNIFIED IDEOGRAPH + {0xF8FB, 0x8C79}, //16575 #CJK UNIFIED IDEOGRAPH + {0xF8FC, 0x98C7}, //16576 #CJK UNIFIED IDEOGRAPH + {0xF8FD, 0x98C4}, //16577 #CJK UNIFIED IDEOGRAPH + {0xF8FE, 0x9A43}, //16578 #CJK UNIFIED IDEOGRAPH + {0xF9A1, 0x54C1}, //16579 #CJK UNIFIED IDEOGRAPH + {0xF9A2, 0x7A1F}, //16580 #CJK UNIFIED IDEOGRAPH + {0xF9A3, 0x6953}, //16581 #CJK UNIFIED IDEOGRAPH + {0xF9A4, 0x8AF7}, //16582 #CJK UNIFIED IDEOGRAPH + {0xF9A5, 0x8C4A}, //16583 #CJK UNIFIED IDEOGRAPH + {0xF9A6, 0x98A8}, //16584 #CJK UNIFIED IDEOGRAPH + {0xF9A7, 0x99AE}, //16585 #CJK UNIFIED IDEOGRAPH + {0xF9A8, 0x5F7C}, //16586 #CJK UNIFIED IDEOGRAPH + {0xF9A9, 0x62AB}, //16587 #CJK UNIFIED IDEOGRAPH + {0xF9AA, 0x75B2}, //16588 #CJK UNIFIED IDEOGRAPH + {0xF9AB, 0x76AE}, //16589 #CJK UNIFIED IDEOGRAPH + {0xF9AC, 0x88AB}, //16590 #CJK UNIFIED IDEOGRAPH + {0xF9AD, 0x907F}, //16591 #CJK UNIFIED IDEOGRAPH + {0xF9AE, 0x9642}, //16592 #CJK UNIFIED IDEOGRAPH + {0xF9AF, 0x5339}, //16593 #CJK UNIFIED IDEOGRAPH + {0xF9B0, 0x5F3C}, //16594 #CJK UNIFIED IDEOGRAPH + {0xF9B1, 0x5FC5}, //16595 #CJK UNIFIED IDEOGRAPH + {0xF9B2, 0x6CCC}, //16596 #CJK UNIFIED IDEOGRAPH + {0xF9B3, 0x73CC}, //16597 #CJK UNIFIED IDEOGRAPH + {0xF9B4, 0x7562}, //16598 #CJK UNIFIED IDEOGRAPH + {0xF9B5, 0x758B}, //16599 #CJK UNIFIED IDEOGRAPH + {0xF9B6, 0x7B46}, //16600 #CJK UNIFIED IDEOGRAPH + {0xF9B7, 0x82FE}, //16601 #CJK UNIFIED IDEOGRAPH + {0xF9B8, 0x999D}, //16602 #CJK UNIFIED IDEOGRAPH + {0xF9B9, 0x4E4F}, //16603 #CJK UNIFIED IDEOGRAPH + {0xF9BA, 0x903C}, //16604 #CJK UNIFIED IDEOGRAPH + {0xF9BB, 0x4E0B}, //16605 #CJK UNIFIED IDEOGRAPH + {0xF9BC, 0x4F55}, //16606 #CJK UNIFIED IDEOGRAPH + {0xF9BD, 0x53A6}, //16607 #CJK UNIFIED IDEOGRAPH + {0xF9BE, 0x590F}, //16608 #CJK UNIFIED IDEOGRAPH + {0xF9BF, 0x5EC8}, //16609 #CJK UNIFIED IDEOGRAPH + {0xF9C0, 0x6630}, //16610 #CJK UNIFIED IDEOGRAPH + {0xF9C1, 0x6CB3}, //16611 #CJK UNIFIED IDEOGRAPH + {0xF9C2, 0x7455}, //16612 #CJK UNIFIED IDEOGRAPH + {0xF9C3, 0x8377}, //16613 #CJK UNIFIED IDEOGRAPH + {0xF9C4, 0x8766}, //16614 #CJK UNIFIED IDEOGRAPH + {0xF9C5, 0x8CC0}, //16615 #CJK UNIFIED IDEOGRAPH + {0xF9C6, 0x9050}, //16616 #CJK UNIFIED IDEOGRAPH + {0xF9C7, 0x971E}, //16617 #CJK UNIFIED IDEOGRAPH + {0xF9C8, 0x9C15}, //16618 #CJK UNIFIED IDEOGRAPH + {0xF9C9, 0x58D1}, //16619 #CJK UNIFIED IDEOGRAPH + {0xF9CA, 0x5B78}, //16620 #CJK UNIFIED IDEOGRAPH + {0xF9CB, 0x8650}, //16621 #CJK UNIFIED IDEOGRAPH + {0xF9CC, 0x8B14}, //16622 #CJK UNIFIED IDEOGRAPH + {0xF9CD, 0x9DB4}, //16623 #CJK UNIFIED IDEOGRAPH + {0xF9CE, 0x5BD2}, //16624 #CJK UNIFIED IDEOGRAPH + {0xF9CF, 0x6068}, //16625 #CJK UNIFIED IDEOGRAPH + {0xF9D0, 0x608D}, //16626 #CJK UNIFIED IDEOGRAPH + {0xF9D1, 0x65F1}, //16627 #CJK UNIFIED IDEOGRAPH + {0xF9D2, 0x6C57}, //16628 #CJK UNIFIED IDEOGRAPH + {0xF9D3, 0x6F22}, //16629 #CJK UNIFIED IDEOGRAPH + {0xF9D4, 0x6FA3}, //16630 #CJK UNIFIED IDEOGRAPH + {0xF9D5, 0x701A}, //16631 #CJK UNIFIED IDEOGRAPH + {0xF9D6, 0x7F55}, //16632 #CJK UNIFIED IDEOGRAPH + {0xF9D7, 0x7FF0}, //16633 #CJK UNIFIED IDEOGRAPH + {0xF9D8, 0x9591}, //16634 #CJK UNIFIED IDEOGRAPH + {0xF9D9, 0x9592}, //16635 #CJK UNIFIED IDEOGRAPH + {0xF9DA, 0x9650}, //16636 #CJK UNIFIED IDEOGRAPH + {0xF9DB, 0x97D3}, //16637 #CJK UNIFIED IDEOGRAPH + {0xF9DC, 0x5272}, //16638 #CJK UNIFIED IDEOGRAPH + {0xF9DD, 0x8F44}, //16639 #CJK UNIFIED IDEOGRAPH + {0xF9DE, 0x51FD}, //16640 #CJK UNIFIED IDEOGRAPH + {0xF9DF, 0x542B}, //16641 #CJK UNIFIED IDEOGRAPH + {0xF9E0, 0x54B8}, //16642 #CJK UNIFIED IDEOGRAPH + {0xF9E1, 0x5563}, //16643 #CJK UNIFIED IDEOGRAPH + {0xF9E2, 0x558A}, //16644 #CJK UNIFIED IDEOGRAPH + {0xF9E3, 0x6ABB}, //16645 #CJK UNIFIED IDEOGRAPH + {0xF9E4, 0x6DB5}, //16646 #CJK UNIFIED IDEOGRAPH + {0xF9E5, 0x7DD8}, //16647 #CJK UNIFIED IDEOGRAPH + {0xF9E6, 0x8266}, //16648 #CJK UNIFIED IDEOGRAPH + {0xF9E7, 0x929C}, //16649 #CJK UNIFIED IDEOGRAPH + {0xF9E8, 0x9677}, //16650 #CJK UNIFIED IDEOGRAPH + {0xF9E9, 0x9E79}, //16651 #CJK UNIFIED IDEOGRAPH + {0xF9EA, 0x5408}, //16652 #CJK UNIFIED IDEOGRAPH + {0xF9EB, 0x54C8}, //16653 #CJK UNIFIED IDEOGRAPH + {0xF9EC, 0x76D2}, //16654 #CJK UNIFIED IDEOGRAPH + {0xF9ED, 0x86E4}, //16655 #CJK UNIFIED IDEOGRAPH + {0xF9EE, 0x95A4}, //16656 #CJK UNIFIED IDEOGRAPH + {0xF9EF, 0x95D4}, //16657 #CJK UNIFIED IDEOGRAPH + {0xF9F0, 0x965C}, //16658 #CJK UNIFIED IDEOGRAPH + {0xF9F1, 0x4EA2}, //16659 #CJK UNIFIED IDEOGRAPH + {0xF9F2, 0x4F09}, //16660 #CJK UNIFIED IDEOGRAPH + {0xF9F3, 0x59EE}, //16661 #CJK UNIFIED IDEOGRAPH + {0xF9F4, 0x5AE6}, //16662 #CJK UNIFIED IDEOGRAPH + {0xF9F5, 0x5DF7}, //16663 #CJK UNIFIED IDEOGRAPH + {0xF9F6, 0x6052}, //16664 #CJK UNIFIED IDEOGRAPH + {0xF9F7, 0x6297}, //16665 #CJK UNIFIED IDEOGRAPH + {0xF9F8, 0x676D}, //16666 #CJK UNIFIED IDEOGRAPH + {0xF9F9, 0x6841}, //16667 #CJK UNIFIED IDEOGRAPH + {0xF9FA, 0x6C86}, //16668 #CJK UNIFIED IDEOGRAPH + {0xF9FB, 0x6E2F}, //16669 #CJK UNIFIED IDEOGRAPH + {0xF9FC, 0x7F38}, //16670 #CJK UNIFIED IDEOGRAPH + {0xF9FD, 0x809B}, //16671 #CJK UNIFIED IDEOGRAPH + {0xF9FE, 0x822A}, //16672 #CJK UNIFIED IDEOGRAPH + {0xFAA1, 0xFA08}, //16673 #CJK COMPATIBILITY IDEOGRAPH + {0xFAA2, 0xFA09}, //16674 #CJK COMPATIBILITY IDEOGRAPH + {0xFAA3, 0x9805}, //16675 #CJK UNIFIED IDEOGRAPH + {0xFAA4, 0x4EA5}, //16676 #CJK UNIFIED IDEOGRAPH + {0xFAA5, 0x5055}, //16677 #CJK UNIFIED IDEOGRAPH + {0xFAA6, 0x54B3}, //16678 #CJK UNIFIED IDEOGRAPH + {0xFAA7, 0x5793}, //16679 #CJK UNIFIED IDEOGRAPH + {0xFAA8, 0x595A}, //16680 #CJK UNIFIED IDEOGRAPH + {0xFAA9, 0x5B69}, //16681 #CJK UNIFIED IDEOGRAPH + {0xFAAA, 0x5BB3}, //16682 #CJK UNIFIED IDEOGRAPH + {0xFAAB, 0x61C8}, //16683 #CJK UNIFIED IDEOGRAPH + {0xFAAC, 0x6977}, //16684 #CJK UNIFIED IDEOGRAPH + {0xFAAD, 0x6D77}, //16685 #CJK UNIFIED IDEOGRAPH + {0xFAAE, 0x7023}, //16686 #CJK UNIFIED IDEOGRAPH + {0xFAAF, 0x87F9}, //16687 #CJK UNIFIED IDEOGRAPH + {0xFAB0, 0x89E3}, //16688 #CJK UNIFIED IDEOGRAPH + {0xFAB1, 0x8A72}, //16689 #CJK UNIFIED IDEOGRAPH + {0xFAB2, 0x8AE7}, //16690 #CJK UNIFIED IDEOGRAPH + {0xFAB3, 0x9082}, //16691 #CJK UNIFIED IDEOGRAPH + {0xFAB4, 0x99ED}, //16692 #CJK UNIFIED IDEOGRAPH + {0xFAB5, 0x9AB8}, //16693 #CJK UNIFIED IDEOGRAPH + {0xFAB6, 0x52BE}, //16694 #CJK UNIFIED IDEOGRAPH + {0xFAB7, 0x6838}, //16695 #CJK UNIFIED IDEOGRAPH + {0xFAB8, 0x5016}, //16696 #CJK UNIFIED IDEOGRAPH + {0xFAB9, 0x5E78}, //16697 #CJK UNIFIED IDEOGRAPH + {0xFABA, 0x674F}, //16698 #CJK UNIFIED IDEOGRAPH + {0xFABB, 0x8347}, //16699 #CJK UNIFIED IDEOGRAPH + {0xFABC, 0x884C}, //16700 #CJK UNIFIED IDEOGRAPH + {0xFABD, 0x4EAB}, //16701 #CJK UNIFIED IDEOGRAPH + {0xFABE, 0x5411}, //16702 #CJK UNIFIED IDEOGRAPH + {0xFABF, 0x56AE}, //16703 #CJK UNIFIED IDEOGRAPH + {0xFAC0, 0x73E6}, //16704 #CJK UNIFIED IDEOGRAPH + {0xFAC1, 0x9115}, //16705 #CJK UNIFIED IDEOGRAPH + {0xFAC2, 0x97FF}, //16706 #CJK UNIFIED IDEOGRAPH + {0xFAC3, 0x9909}, //16707 #CJK UNIFIED IDEOGRAPH + {0xFAC4, 0x9957}, //16708 #CJK UNIFIED IDEOGRAPH + {0xFAC5, 0x9999}, //16709 #CJK UNIFIED IDEOGRAPH + {0xFAC6, 0x5653}, //16710 #CJK UNIFIED IDEOGRAPH + {0xFAC7, 0x589F}, //16711 #CJK UNIFIED IDEOGRAPH + {0xFAC8, 0x865B}, //16712 #CJK UNIFIED IDEOGRAPH + {0xFAC9, 0x8A31}, //16713 #CJK UNIFIED IDEOGRAPH + {0xFACA, 0x61B2}, //16714 #CJK UNIFIED IDEOGRAPH + {0xFACB, 0x6AF6}, //16715 #CJK UNIFIED IDEOGRAPH + {0xFACC, 0x737B}, //16716 #CJK UNIFIED IDEOGRAPH + {0xFACD, 0x8ED2}, //16717 #CJK UNIFIED IDEOGRAPH + {0xFACE, 0x6B47}, //16718 #CJK UNIFIED IDEOGRAPH + {0xFACF, 0x96AA}, //16719 #CJK UNIFIED IDEOGRAPH + {0xFAD0, 0x9A57}, //16720 #CJK UNIFIED IDEOGRAPH + {0xFAD1, 0x5955}, //16721 #CJK UNIFIED IDEOGRAPH + {0xFAD2, 0x7200}, //16722 #CJK UNIFIED IDEOGRAPH + {0xFAD3, 0x8D6B}, //16723 #CJK UNIFIED IDEOGRAPH + {0xFAD4, 0x9769}, //16724 #CJK UNIFIED IDEOGRAPH + {0xFAD5, 0x4FD4}, //16725 #CJK UNIFIED IDEOGRAPH + {0xFAD6, 0x5CF4}, //16726 #CJK UNIFIED IDEOGRAPH + {0xFAD7, 0x5F26}, //16727 #CJK UNIFIED IDEOGRAPH + {0xFAD8, 0x61F8}, //16728 #CJK UNIFIED IDEOGRAPH + {0xFAD9, 0x665B}, //16729 #CJK UNIFIED IDEOGRAPH + {0xFADA, 0x6CEB}, //16730 #CJK UNIFIED IDEOGRAPH + {0xFADB, 0x70AB}, //16731 #CJK UNIFIED IDEOGRAPH + {0xFADC, 0x7384}, //16732 #CJK UNIFIED IDEOGRAPH + {0xFADD, 0x73B9}, //16733 #CJK UNIFIED IDEOGRAPH + {0xFADE, 0x73FE}, //16734 #CJK UNIFIED IDEOGRAPH + {0xFADF, 0x7729}, //16735 #CJK UNIFIED IDEOGRAPH + {0xFAE0, 0x774D}, //16736 #CJK UNIFIED IDEOGRAPH + {0xFAE1, 0x7D43}, //16737 #CJK UNIFIED IDEOGRAPH + {0xFAE2, 0x7D62}, //16738 #CJK UNIFIED IDEOGRAPH + {0xFAE3, 0x7E23}, //16739 #CJK UNIFIED IDEOGRAPH + {0xFAE4, 0x8237}, //16740 #CJK UNIFIED IDEOGRAPH + {0xFAE5, 0x8852}, //16741 #CJK UNIFIED IDEOGRAPH + {0xFAE6, 0xFA0A}, //16742 #CJK COMPATIBILITY IDEOGRAPH + {0xFAE7, 0x8CE2}, //16743 #CJK UNIFIED IDEOGRAPH + {0xFAE8, 0x9249}, //16744 #CJK UNIFIED IDEOGRAPH + {0xFAE9, 0x986F}, //16745 #CJK UNIFIED IDEOGRAPH + {0xFAEA, 0x5B51}, //16746 #CJK UNIFIED IDEOGRAPH + {0xFAEB, 0x7A74}, //16747 #CJK UNIFIED IDEOGRAPH + {0xFAEC, 0x8840}, //16748 #CJK UNIFIED IDEOGRAPH + {0xFAED, 0x9801}, //16749 #CJK UNIFIED IDEOGRAPH + {0xFAEE, 0x5ACC}, //16750 #CJK UNIFIED IDEOGRAPH + {0xFAEF, 0x4FE0}, //16751 #CJK UNIFIED IDEOGRAPH + {0xFAF0, 0x5354}, //16752 #CJK UNIFIED IDEOGRAPH + {0xFAF1, 0x593E}, //16753 #CJK UNIFIED IDEOGRAPH + {0xFAF2, 0x5CFD}, //16754 #CJK UNIFIED IDEOGRAPH + {0xFAF3, 0x633E}, //16755 #CJK UNIFIED IDEOGRAPH + {0xFAF4, 0x6D79}, //16756 #CJK UNIFIED IDEOGRAPH + {0xFAF5, 0x72F9}, //16757 #CJK UNIFIED IDEOGRAPH + {0xFAF6, 0x8105}, //16758 #CJK UNIFIED IDEOGRAPH + {0xFAF7, 0x8107}, //16759 #CJK UNIFIED IDEOGRAPH + {0xFAF8, 0x83A2}, //16760 #CJK UNIFIED IDEOGRAPH + {0xFAF9, 0x92CF}, //16761 #CJK UNIFIED IDEOGRAPH + {0xFAFA, 0x9830}, //16762 #CJK UNIFIED IDEOGRAPH + {0xFAFB, 0x4EA8}, //16763 #CJK UNIFIED IDEOGRAPH + {0xFAFC, 0x5144}, //16764 #CJK UNIFIED IDEOGRAPH + {0xFAFD, 0x5211}, //16765 #CJK UNIFIED IDEOGRAPH + {0xFAFE, 0x578B}, //16766 #CJK UNIFIED IDEOGRAPH + {0xFBA1, 0x5F62}, //16767 #CJK UNIFIED IDEOGRAPH + {0xFBA2, 0x6CC2}, //16768 #CJK UNIFIED IDEOGRAPH + {0xFBA3, 0x6ECE}, //16769 #CJK UNIFIED IDEOGRAPH + {0xFBA4, 0x7005}, //16770 #CJK UNIFIED IDEOGRAPH + {0xFBA5, 0x7050}, //16771 #CJK UNIFIED IDEOGRAPH + {0xFBA6, 0x70AF}, //16772 #CJK UNIFIED IDEOGRAPH + {0xFBA7, 0x7192}, //16773 #CJK UNIFIED IDEOGRAPH + {0xFBA8, 0x73E9}, //16774 #CJK UNIFIED IDEOGRAPH + {0xFBA9, 0x7469}, //16775 #CJK UNIFIED IDEOGRAPH + {0xFBAA, 0x834A}, //16776 #CJK UNIFIED IDEOGRAPH + {0xFBAB, 0x87A2}, //16777 #CJK UNIFIED IDEOGRAPH + {0xFBAC, 0x8861}, //16778 #CJK UNIFIED IDEOGRAPH + {0xFBAD, 0x9008}, //16779 #CJK UNIFIED IDEOGRAPH + {0xFBAE, 0x90A2}, //16780 #CJK UNIFIED IDEOGRAPH + {0xFBAF, 0x93A3}, //16781 #CJK UNIFIED IDEOGRAPH + {0xFBB0, 0x99A8}, //16782 #CJK UNIFIED IDEOGRAPH + {0xFBB1, 0x516E}, //16783 #CJK UNIFIED IDEOGRAPH + {0xFBB2, 0x5F57}, //16784 #CJK UNIFIED IDEOGRAPH + {0xFBB3, 0x60E0}, //16785 #CJK UNIFIED IDEOGRAPH + {0xFBB4, 0x6167}, //16786 #CJK UNIFIED IDEOGRAPH + {0xFBB5, 0x66B3}, //16787 #CJK UNIFIED IDEOGRAPH + {0xFBB6, 0x8559}, //16788 #CJK UNIFIED IDEOGRAPH + {0xFBB7, 0x8E4A}, //16789 #CJK UNIFIED IDEOGRAPH + {0xFBB8, 0x91AF}, //16790 #CJK UNIFIED IDEOGRAPH + {0xFBB9, 0x978B}, //16791 #CJK UNIFIED IDEOGRAPH + {0xFBBA, 0x4E4E}, //16792 #CJK UNIFIED IDEOGRAPH + {0xFBBB, 0x4E92}, //16793 #CJK UNIFIED IDEOGRAPH + {0xFBBC, 0x547C}, //16794 #CJK UNIFIED IDEOGRAPH + {0xFBBD, 0x58D5}, //16795 #CJK UNIFIED IDEOGRAPH + {0xFBBE, 0x58FA}, //16796 #CJK UNIFIED IDEOGRAPH + {0xFBBF, 0x597D}, //16797 #CJK UNIFIED IDEOGRAPH + {0xFBC0, 0x5CB5}, //16798 #CJK UNIFIED IDEOGRAPH + {0xFBC1, 0x5F27}, //16799 #CJK UNIFIED IDEOGRAPH + {0xFBC2, 0x6236}, //16800 #CJK UNIFIED IDEOGRAPH + {0xFBC3, 0x6248}, //16801 #CJK UNIFIED IDEOGRAPH + {0xFBC4, 0x660A}, //16802 #CJK UNIFIED IDEOGRAPH + {0xFBC5, 0x6667}, //16803 #CJK UNIFIED IDEOGRAPH + {0xFBC6, 0x6BEB}, //16804 #CJK UNIFIED IDEOGRAPH + {0xFBC7, 0x6D69}, //16805 #CJK UNIFIED IDEOGRAPH + {0xFBC8, 0x6DCF}, //16806 #CJK UNIFIED IDEOGRAPH + {0xFBC9, 0x6E56}, //16807 #CJK UNIFIED IDEOGRAPH + {0xFBCA, 0x6EF8}, //16808 #CJK UNIFIED IDEOGRAPH + {0xFBCB, 0x6F94}, //16809 #CJK UNIFIED IDEOGRAPH + {0xFBCC, 0x6FE0}, //16810 #CJK UNIFIED IDEOGRAPH + {0xFBCD, 0x6FE9}, //16811 #CJK UNIFIED IDEOGRAPH + {0xFBCE, 0x705D}, //16812 #CJK UNIFIED IDEOGRAPH + {0xFBCF, 0x72D0}, //16813 #CJK UNIFIED IDEOGRAPH + {0xFBD0, 0x7425}, //16814 #CJK UNIFIED IDEOGRAPH + {0xFBD1, 0x745A}, //16815 #CJK UNIFIED IDEOGRAPH + {0xFBD2, 0x74E0}, //16816 #CJK UNIFIED IDEOGRAPH + {0xFBD3, 0x7693}, //16817 #CJK UNIFIED IDEOGRAPH + {0xFBD4, 0x795C}, //16818 #CJK UNIFIED IDEOGRAPH + {0xFBD5, 0x7CCA}, //16819 #CJK UNIFIED IDEOGRAPH + {0xFBD6, 0x7E1E}, //16820 #CJK UNIFIED IDEOGRAPH + {0xFBD7, 0x80E1}, //16821 #CJK UNIFIED IDEOGRAPH + {0xFBD8, 0x82A6}, //16822 #CJK UNIFIED IDEOGRAPH + {0xFBD9, 0x846B}, //16823 #CJK UNIFIED IDEOGRAPH + {0xFBDA, 0x84BF}, //16824 #CJK UNIFIED IDEOGRAPH + {0xFBDB, 0x864E}, //16825 #CJK UNIFIED IDEOGRAPH + {0xFBDC, 0x865F}, //16826 #CJK UNIFIED IDEOGRAPH + {0xFBDD, 0x8774}, //16827 #CJK UNIFIED IDEOGRAPH + {0xFBDE, 0x8B77}, //16828 #CJK UNIFIED IDEOGRAPH + {0xFBDF, 0x8C6A}, //16829 #CJK UNIFIED IDEOGRAPH + {0xFBE0, 0x93AC}, //16830 #CJK UNIFIED IDEOGRAPH + {0xFBE1, 0x9800}, //16831 #CJK UNIFIED IDEOGRAPH + {0xFBE2, 0x9865}, //16832 #CJK UNIFIED IDEOGRAPH + {0xFBE3, 0x60D1}, //16833 #CJK UNIFIED IDEOGRAPH + {0xFBE4, 0x6216}, //16834 #CJK UNIFIED IDEOGRAPH + {0xFBE5, 0x9177}, //16835 #CJK UNIFIED IDEOGRAPH + {0xFBE6, 0x5A5A}, //16836 #CJK UNIFIED IDEOGRAPH + {0xFBE7, 0x660F}, //16837 #CJK UNIFIED IDEOGRAPH + {0xFBE8, 0x6DF7}, //16838 #CJK UNIFIED IDEOGRAPH + {0xFBE9, 0x6E3E}, //16839 #CJK UNIFIED IDEOGRAPH + {0xFBEA, 0x743F}, //16840 #CJK UNIFIED IDEOGRAPH + {0xFBEB, 0x9B42}, //16841 #CJK UNIFIED IDEOGRAPH + {0xFBEC, 0x5FFD}, //16842 #CJK UNIFIED IDEOGRAPH + {0xFBED, 0x60DA}, //16843 #CJK UNIFIED IDEOGRAPH + {0xFBEE, 0x7B0F}, //16844 #CJK UNIFIED IDEOGRAPH + {0xFBEF, 0x54C4}, //16845 #CJK UNIFIED IDEOGRAPH + {0xFBF0, 0x5F18}, //16846 #CJK UNIFIED IDEOGRAPH + {0xFBF1, 0x6C5E}, //16847 #CJK UNIFIED IDEOGRAPH + {0xFBF2, 0x6CD3}, //16848 #CJK UNIFIED IDEOGRAPH + {0xFBF3, 0x6D2A}, //16849 #CJK UNIFIED IDEOGRAPH + {0xFBF4, 0x70D8}, //16850 #CJK UNIFIED IDEOGRAPH + {0xFBF5, 0x7D05}, //16851 #CJK UNIFIED IDEOGRAPH + {0xFBF6, 0x8679}, //16852 #CJK UNIFIED IDEOGRAPH + {0xFBF7, 0x8A0C}, //16853 #CJK UNIFIED IDEOGRAPH + {0xFBF8, 0x9D3B}, //16854 #CJK UNIFIED IDEOGRAPH + {0xFBF9, 0x5316}, //16855 #CJK UNIFIED IDEOGRAPH + {0xFBFA, 0x548C}, //16856 #CJK UNIFIED IDEOGRAPH + {0xFBFB, 0x5B05}, //16857 #CJK UNIFIED IDEOGRAPH + {0xFBFC, 0x6A3A}, //16858 #CJK UNIFIED IDEOGRAPH + {0xFBFD, 0x706B}, //16859 #CJK UNIFIED IDEOGRAPH + {0xFBFE, 0x7575}, //16860 #CJK UNIFIED IDEOGRAPH + {0xFCA1, 0x798D}, //16861 #CJK UNIFIED IDEOGRAPH + {0xFCA2, 0x79BE}, //16862 #CJK UNIFIED IDEOGRAPH + {0xFCA3, 0x82B1}, //16863 #CJK UNIFIED IDEOGRAPH + {0xFCA4, 0x83EF}, //16864 #CJK UNIFIED IDEOGRAPH + {0xFCA5, 0x8A71}, //16865 #CJK UNIFIED IDEOGRAPH + {0xFCA6, 0x8B41}, //16866 #CJK UNIFIED IDEOGRAPH + {0xFCA7, 0x8CA8}, //16867 #CJK UNIFIED IDEOGRAPH + {0xFCA8, 0x9774}, //16868 #CJK UNIFIED IDEOGRAPH + {0xFCA9, 0xFA0B}, //16869 #CJK COMPATIBILITY IDEOGRAPH + {0xFCAA, 0x64F4}, //16870 #CJK UNIFIED IDEOGRAPH + {0xFCAB, 0x652B}, //16871 #CJK UNIFIED IDEOGRAPH + {0xFCAC, 0x78BA}, //16872 #CJK UNIFIED IDEOGRAPH + {0xFCAD, 0x78BB}, //16873 #CJK UNIFIED IDEOGRAPH + {0xFCAE, 0x7A6B}, //16874 #CJK UNIFIED IDEOGRAPH + {0xFCAF, 0x4E38}, //16875 #CJK UNIFIED IDEOGRAPH + {0xFCB0, 0x559A}, //16876 #CJK UNIFIED IDEOGRAPH + {0xFCB1, 0x5950}, //16877 #CJK UNIFIED IDEOGRAPH + {0xFCB2, 0x5BA6}, //16878 #CJK UNIFIED IDEOGRAPH + {0xFCB3, 0x5E7B}, //16879 #CJK UNIFIED IDEOGRAPH + {0xFCB4, 0x60A3}, //16880 #CJK UNIFIED IDEOGRAPH + {0xFCB5, 0x63DB}, //16881 #CJK UNIFIED IDEOGRAPH + {0xFCB6, 0x6B61}, //16882 #CJK UNIFIED IDEOGRAPH + {0xFCB7, 0x6665}, //16883 #CJK UNIFIED IDEOGRAPH + {0xFCB8, 0x6853}, //16884 #CJK UNIFIED IDEOGRAPH + {0xFCB9, 0x6E19}, //16885 #CJK UNIFIED IDEOGRAPH + {0xFCBA, 0x7165}, //16886 #CJK UNIFIED IDEOGRAPH + {0xFCBB, 0x74B0}, //16887 #CJK UNIFIED IDEOGRAPH + {0xFCBC, 0x7D08}, //16888 #CJK UNIFIED IDEOGRAPH + {0xFCBD, 0x9084}, //16889 #CJK UNIFIED IDEOGRAPH + {0xFCBE, 0x9A69}, //16890 #CJK UNIFIED IDEOGRAPH + {0xFCBF, 0x9C25}, //16891 #CJK UNIFIED IDEOGRAPH + {0xFCC0, 0x6D3B}, //16892 #CJK UNIFIED IDEOGRAPH + {0xFCC1, 0x6ED1}, //16893 #CJK UNIFIED IDEOGRAPH + {0xFCC2, 0x733E}, //16894 #CJK UNIFIED IDEOGRAPH + {0xFCC3, 0x8C41}, //16895 #CJK UNIFIED IDEOGRAPH + {0xFCC4, 0x95CA}, //16896 #CJK UNIFIED IDEOGRAPH + {0xFCC5, 0x51F0}, //16897 #CJK UNIFIED IDEOGRAPH + {0xFCC6, 0x5E4C}, //16898 #CJK UNIFIED IDEOGRAPH + {0xFCC7, 0x5FA8}, //16899 #CJK UNIFIED IDEOGRAPH + {0xFCC8, 0x604D}, //16900 #CJK UNIFIED IDEOGRAPH + {0xFCC9, 0x60F6}, //16901 #CJK UNIFIED IDEOGRAPH + {0xFCCA, 0x6130}, //16902 #CJK UNIFIED IDEOGRAPH + {0xFCCB, 0x614C}, //16903 #CJK UNIFIED IDEOGRAPH + {0xFCCC, 0x6643}, //16904 #CJK UNIFIED IDEOGRAPH + {0xFCCD, 0x6644}, //16905 #CJK UNIFIED IDEOGRAPH + {0xFCCE, 0x69A5}, //16906 #CJK UNIFIED IDEOGRAPH + {0xFCCF, 0x6CC1}, //16907 #CJK UNIFIED IDEOGRAPH + {0xFCD0, 0x6E5F}, //16908 #CJK UNIFIED IDEOGRAPH + {0xFCD1, 0x6EC9}, //16909 #CJK UNIFIED IDEOGRAPH + {0xFCD2, 0x6F62}, //16910 #CJK UNIFIED IDEOGRAPH + {0xFCD3, 0x714C}, //16911 #CJK UNIFIED IDEOGRAPH + {0xFCD4, 0x749C}, //16912 #CJK UNIFIED IDEOGRAPH + {0xFCD5, 0x7687}, //16913 #CJK UNIFIED IDEOGRAPH + {0xFCD6, 0x7BC1}, //16914 #CJK UNIFIED IDEOGRAPH + {0xFCD7, 0x7C27}, //16915 #CJK UNIFIED IDEOGRAPH + {0xFCD8, 0x8352}, //16916 #CJK UNIFIED IDEOGRAPH + {0xFCD9, 0x8757}, //16917 #CJK UNIFIED IDEOGRAPH + {0xFCDA, 0x9051}, //16918 #CJK UNIFIED IDEOGRAPH + {0xFCDB, 0x968D}, //16919 #CJK UNIFIED IDEOGRAPH + {0xFCDC, 0x9EC3}, //16920 #CJK UNIFIED IDEOGRAPH + {0xFCDD, 0x532F}, //16921 #CJK UNIFIED IDEOGRAPH + {0xFCDE, 0x56DE}, //16922 #CJK UNIFIED IDEOGRAPH + {0xFCDF, 0x5EFB}, //16923 #CJK UNIFIED IDEOGRAPH + {0xFCE0, 0x5F8A}, //16924 #CJK UNIFIED IDEOGRAPH + {0xFCE1, 0x6062}, //16925 #CJK UNIFIED IDEOGRAPH + {0xFCE2, 0x6094}, //16926 #CJK UNIFIED IDEOGRAPH + {0xFCE3, 0x61F7}, //16927 #CJK UNIFIED IDEOGRAPH + {0xFCE4, 0x6666}, //16928 #CJK UNIFIED IDEOGRAPH + {0xFCE5, 0x6703}, //16929 #CJK UNIFIED IDEOGRAPH + {0xFCE6, 0x6A9C}, //16930 #CJK UNIFIED IDEOGRAPH + {0xFCE7, 0x6DEE}, //16931 #CJK UNIFIED IDEOGRAPH + {0xFCE8, 0x6FAE}, //16932 #CJK UNIFIED IDEOGRAPH + {0xFCE9, 0x7070}, //16933 #CJK UNIFIED IDEOGRAPH + {0xFCEA, 0x736A}, //16934 #CJK UNIFIED IDEOGRAPH + {0xFCEB, 0x7E6A}, //16935 #CJK UNIFIED IDEOGRAPH + {0xFCEC, 0x81BE}, //16936 #CJK UNIFIED IDEOGRAPH + {0xFCED, 0x8334}, //16937 #CJK UNIFIED IDEOGRAPH + {0xFCEE, 0x86D4}, //16938 #CJK UNIFIED IDEOGRAPH + {0xFCEF, 0x8AA8}, //16939 #CJK UNIFIED IDEOGRAPH + {0xFCF0, 0x8CC4}, //16940 #CJK UNIFIED IDEOGRAPH + {0xFCF1, 0x5283}, //16941 #CJK UNIFIED IDEOGRAPH + {0xFCF2, 0x7372}, //16942 #CJK UNIFIED IDEOGRAPH + {0xFCF3, 0x5B96}, //16943 #CJK UNIFIED IDEOGRAPH + {0xFCF4, 0x6A6B}, //16944 #CJK UNIFIED IDEOGRAPH + {0xFCF5, 0x9404}, //16945 #CJK UNIFIED IDEOGRAPH + {0xFCF6, 0x54EE}, //16946 #CJK UNIFIED IDEOGRAPH + {0xFCF7, 0x5686}, //16947 #CJK UNIFIED IDEOGRAPH + {0xFCF8, 0x5B5D}, //16948 #CJK UNIFIED IDEOGRAPH + {0xFCF9, 0x6548}, //16949 #CJK UNIFIED IDEOGRAPH + {0xFCFA, 0x6585}, //16950 #CJK UNIFIED IDEOGRAPH + {0xFCFB, 0x66C9}, //16951 #CJK UNIFIED IDEOGRAPH + {0xFCFC, 0x689F}, //16952 #CJK UNIFIED IDEOGRAPH + {0xFCFD, 0x6D8D}, //16953 #CJK UNIFIED IDEOGRAPH + {0xFCFE, 0x6DC6}, //16954 #CJK UNIFIED IDEOGRAPH + {0xFDA1, 0x723B}, //16955 #CJK UNIFIED IDEOGRAPH + {0xFDA2, 0x80B4}, //16956 #CJK UNIFIED IDEOGRAPH + {0xFDA3, 0x9175}, //16957 #CJK UNIFIED IDEOGRAPH + {0xFDA4, 0x9A4D}, //16958 #CJK UNIFIED IDEOGRAPH + {0xFDA5, 0x4FAF}, //16959 #CJK UNIFIED IDEOGRAPH + {0xFDA6, 0x5019}, //16960 #CJK UNIFIED IDEOGRAPH + {0xFDA7, 0x539A}, //16961 #CJK UNIFIED IDEOGRAPH + {0xFDA8, 0x540E}, //16962 #CJK UNIFIED IDEOGRAPH + {0xFDA9, 0x543C}, //16963 #CJK UNIFIED IDEOGRAPH + {0xFDAA, 0x5589}, //16964 #CJK UNIFIED IDEOGRAPH + {0xFDAB, 0x55C5}, //16965 #CJK UNIFIED IDEOGRAPH + {0xFDAC, 0x5E3F}, //16966 #CJK UNIFIED IDEOGRAPH + {0xFDAD, 0x5F8C}, //16967 #CJK UNIFIED IDEOGRAPH + {0xFDAE, 0x673D}, //16968 #CJK UNIFIED IDEOGRAPH + {0xFDAF, 0x7166}, //16969 #CJK UNIFIED IDEOGRAPH + {0xFDB0, 0x73DD}, //16970 #CJK UNIFIED IDEOGRAPH + {0xFDB1, 0x9005}, //16971 #CJK UNIFIED IDEOGRAPH + {0xFDB2, 0x52DB}, //16972 #CJK UNIFIED IDEOGRAPH + {0xFDB3, 0x52F3}, //16973 #CJK UNIFIED IDEOGRAPH + {0xFDB4, 0x5864}, //16974 #CJK UNIFIED IDEOGRAPH + {0xFDB5, 0x58CE}, //16975 #CJK UNIFIED IDEOGRAPH + {0xFDB6, 0x7104}, //16976 #CJK UNIFIED IDEOGRAPH + {0xFDB7, 0x718F}, //16977 #CJK UNIFIED IDEOGRAPH + {0xFDB8, 0x71FB}, //16978 #CJK UNIFIED IDEOGRAPH + {0xFDB9, 0x85B0}, //16979 #CJK UNIFIED IDEOGRAPH + {0xFDBA, 0x8A13}, //16980 #CJK UNIFIED IDEOGRAPH + {0xFDBB, 0x6688}, //16981 #CJK UNIFIED IDEOGRAPH + {0xFDBC, 0x85A8}, //16982 #CJK UNIFIED IDEOGRAPH + {0xFDBD, 0x55A7}, //16983 #CJK UNIFIED IDEOGRAPH + {0xFDBE, 0x6684}, //16984 #CJK UNIFIED IDEOGRAPH + {0xFDBF, 0x714A}, //16985 #CJK UNIFIED IDEOGRAPH + {0xFDC0, 0x8431}, //16986 #CJK UNIFIED IDEOGRAPH + {0xFDC1, 0x5349}, //16987 #CJK UNIFIED IDEOGRAPH + {0xFDC2, 0x5599}, //16988 #CJK UNIFIED IDEOGRAPH + {0xFDC3, 0x6BC1}, //16989 #CJK UNIFIED IDEOGRAPH + {0xFDC4, 0x5F59}, //16990 #CJK UNIFIED IDEOGRAPH + {0xFDC5, 0x5FBD}, //16991 #CJK UNIFIED IDEOGRAPH + {0xFDC6, 0x63EE}, //16992 #CJK UNIFIED IDEOGRAPH + {0xFDC7, 0x6689}, //16993 #CJK UNIFIED IDEOGRAPH + {0xFDC8, 0x7147}, //16994 #CJK UNIFIED IDEOGRAPH + {0xFDC9, 0x8AF1}, //16995 #CJK UNIFIED IDEOGRAPH + {0xFDCA, 0x8F1D}, //16996 #CJK UNIFIED IDEOGRAPH + {0xFDCB, 0x9EBE}, //16997 #CJK UNIFIED IDEOGRAPH + {0xFDCC, 0x4F11}, //16998 #CJK UNIFIED IDEOGRAPH + {0xFDCD, 0x643A}, //16999 #CJK UNIFIED IDEOGRAPH + {0xFDCE, 0x70CB}, //17000 #CJK UNIFIED IDEOGRAPH + {0xFDCF, 0x7566}, //17001 #CJK UNIFIED IDEOGRAPH + {0xFDD0, 0x8667}, //17002 #CJK UNIFIED IDEOGRAPH + {0xFDD1, 0x6064}, //17003 #CJK UNIFIED IDEOGRAPH + {0xFDD2, 0x8B4E}, //17004 #CJK UNIFIED IDEOGRAPH + {0xFDD3, 0x9DF8}, //17005 #CJK UNIFIED IDEOGRAPH + {0xFDD4, 0x5147}, //17006 #CJK UNIFIED IDEOGRAPH + {0xFDD5, 0x51F6}, //17007 #CJK UNIFIED IDEOGRAPH + {0xFDD6, 0x5308}, //17008 #CJK UNIFIED IDEOGRAPH + {0xFDD7, 0x6D36}, //17009 #CJK UNIFIED IDEOGRAPH + {0xFDD8, 0x80F8}, //17010 #CJK UNIFIED IDEOGRAPH + {0xFDD9, 0x9ED1}, //17011 #CJK UNIFIED IDEOGRAPH + {0xFDDA, 0x6615}, //17012 #CJK UNIFIED IDEOGRAPH + {0xFDDB, 0x6B23}, //17013 #CJK UNIFIED IDEOGRAPH + {0xFDDC, 0x7098}, //17014 #CJK UNIFIED IDEOGRAPH + {0xFDDD, 0x75D5}, //17015 #CJK UNIFIED IDEOGRAPH + {0xFDDE, 0x5403}, //17016 #CJK UNIFIED IDEOGRAPH + {0xFDDF, 0x5C79}, //17017 #CJK UNIFIED IDEOGRAPH + {0xFDE0, 0x7D07}, //17018 #CJK UNIFIED IDEOGRAPH + {0xFDE1, 0x8A16}, //17019 #CJK UNIFIED IDEOGRAPH + {0xFDE2, 0x6B20}, //17020 #CJK UNIFIED IDEOGRAPH + {0xFDE3, 0x6B3D}, //17021 #CJK UNIFIED IDEOGRAPH + {0xFDE4, 0x6B46}, //17022 #CJK UNIFIED IDEOGRAPH + {0xFDE5, 0x5438}, //17023 #CJK UNIFIED IDEOGRAPH + {0xFDE6, 0x6070}, //17024 #CJK UNIFIED IDEOGRAPH + {0xFDE7, 0x6D3D}, //17025 #CJK UNIFIED IDEOGRAPH + {0xFDE8, 0x7FD5}, //17026 #CJK UNIFIED IDEOGRAPH + {0xFDE9, 0x8208}, //17027 #CJK UNIFIED IDEOGRAPH + {0xFDEA, 0x50D6}, //17028 #CJK UNIFIED IDEOGRAPH + {0xFDEB, 0x51DE}, //17029 #CJK UNIFIED IDEOGRAPH + {0xFDEC, 0x559C}, //17030 #CJK UNIFIED IDEOGRAPH + {0xFDED, 0x566B}, //17031 #CJK UNIFIED IDEOGRAPH + {0xFDEE, 0x56CD}, //17032 #CJK UNIFIED IDEOGRAPH + {0xFDEF, 0x59EC}, //17033 #CJK UNIFIED IDEOGRAPH + {0xFDF0, 0x5B09}, //17034 #CJK UNIFIED IDEOGRAPH + {0xFDF1, 0x5E0C}, //17035 #CJK UNIFIED IDEOGRAPH + {0xFDF2, 0x6199}, //17036 #CJK UNIFIED IDEOGRAPH + {0xFDF3, 0x6198}, //17037 #CJK UNIFIED IDEOGRAPH + {0xFDF4, 0x6231}, //17038 #CJK UNIFIED IDEOGRAPH + {0xFDF5, 0x665E}, //17039 #CJK UNIFIED IDEOGRAPH + {0xFDF6, 0x66E6}, //17040 #CJK UNIFIED IDEOGRAPH + {0xFDF7, 0x7199}, //17041 #CJK UNIFIED IDEOGRAPH + {0xFDF8, 0x71B9}, //17042 #CJK UNIFIED IDEOGRAPH + {0xFDF9, 0x71BA}, //17043 #CJK UNIFIED IDEOGRAPH + {0xFDFA, 0x72A7}, //17044 #CJK UNIFIED IDEOGRAPH + {0xFDFB, 0x79A7}, //17045 #CJK UNIFIED IDEOGRAPH + {0xFDFC, 0x7A00}, //17046 #CJK UNIFIED IDEOGRAPH + {0xFDFD, 0x7FB2}, //17047 #CJK UNIFIED IDEOGRAPH + {0xFDFE, 0x8A70}, //17048 #CJK UNIFIED IDEOGRAPH +}; + +#endif // DRW_CPTABLE949_H diff --git a/extlib/libdxfrw/intern/drw_cptable950.h b/extlib/libdxfrw/intern/drw_cptable950.h new file mode 100644 index 0000000..2afb89d --- /dev/null +++ b/extlib/libdxfrw/intern/drw_cptable950.h @@ -0,0 +1,13654 @@ +#ifndef DRW_CPTABLE950_H +#define DRW_CPTABLE950_H + +//Chinese (Taiwan, Hong Kong SAR) + +//first entry in this table are 0x80 +#define CPOFFSET950 0x80 +#define CPLENGHT950 13503 +#define NOTFOUND950 0x003F + +//Table 950 one byte +static const int DRW_Table950[1] = { +}; + +//Table 950 lead byte +//pairs of start/end in DRW_DoubleTable950 +static const int DRW_LeadTable950[] = { + 0, //1#DBCS LEAD BYTE 0x81, empty + 0, //2#DBCS LEAD BYTE 0x82, empty + 0, //3#DBCS LEAD BYTE 0x83, empty + 0, //4#DBCS LEAD BYTE 0x84, empty + 0, //5#DBCS LEAD BYTE 0x85, empty + 0, //6#DBCS LEAD BYTE 0x86, empty + 0, //7#DBCS LEAD BYTE 0x87, empty + 0, //8#DBCS LEAD BYTE 0x88, empty + 0, //9#DBCS LEAD BYTE 0x89, empty + 0, //10#DBCS LEAD BYTE 0x8A, empty + 0, //11#DBCS LEAD BYTE 0x8B, empty + 0, //12#DBCS LEAD BYTE 0x8C, empty + 0, //13#DBCS LEAD BYTE 0x8D, empty + 0, //14#DBCS LEAD BYTE 0x8E, empty + 0, //15#DBCS LEAD BYTE 0x8F, empty + 0, //16#DBCS LEAD BYTE 0x90, empty + 0, //17#DBCS LEAD BYTE 0x91, empty + 0, //18#DBCS LEAD BYTE 0x92, empty + 0, //19#DBCS LEAD BYTE 0x93, empty + 0, //20#DBCS LEAD BYTE 0x94, empty + 0, //21#DBCS LEAD BYTE 0x95, empty + 0, //22#DBCS LEAD BYTE 0x96, empty + 0, //23#DBCS LEAD BYTE 0x97, empty + 0, //24#DBCS LEAD BYTE 0x98, empty + 0, //25#DBCS LEAD BYTE 0x99, empty + 0, //26#DBCS LEAD BYTE 0x9A, empty + 0, //27#DBCS LEAD BYTE 0x9B, empty + 0, //28#DBCS LEAD BYTE 0x9C, empty + 0, //29#DBCS LEAD BYTE 0x9D, empty + 0, //30#DBCS LEAD BYTE 0x9E, empty + 0, //31#DBCS LEAD BYTE 0x9F, empty + 0, //32#DBCS LEAD BYTE 0xA0, empty + 0, //33#DBCS LEAD BYTE 0xA1 + 157, //34#DBCS LEAD BYTE 0xA2 + 314, //35#DBCS LEAD BYTE 0xA3 + 409, //36#DBCS LEAD BYTE 0xA4 + 566, //37#DBCS LEAD BYTE 0xA5 + 723, //38#DBCS LEAD BYTE 0xA6 + 880, //39#DBCS LEAD BYTE 0xA7 + 1037, //40#DBCS LEAD BYTE 0xA8 + 1194, //41#DBCS LEAD BYTE 0xA9 + 1351, //42#DBCS LEAD BYTE 0xAA + 1508, //43#DBCS LEAD BYTE 0xAB + 1665, //44#DBCS LEAD BYTE 0xAC + 1822, //45#DBCS LEAD BYTE 0xAD + 1979, //46#DBCS LEAD BYTE 0xAE + 2136, //47#DBCS LEAD BYTE 0xAF + 2293, //48#DBCS LEAD BYTE 0xB0 + 2450, //49#DBCS LEAD BYTE 0xB1 + 2607, //50#DBCS LEAD BYTE 0xB2 + 2764, //51#DBCS LEAD BYTE 0xB3 + 2921, //52#DBCS LEAD BYTE 0xB4 + 3078, //53#DBCS LEAD BYTE 0xB5 + 3235, //54#DBCS LEAD BYTE 0xB6 + 3392, //55#DBCS LEAD BYTE 0xB7 + 3549, //56#DBCS LEAD BYTE 0xB8 + 3706, //57#DBCS LEAD BYTE 0xB9 + 3863, //58#DBCS LEAD BYTE 0xBA + 4020, //59#DBCS LEAD BYTE 0xBB + 4177, //60#DBCS LEAD BYTE 0xBC + 4334, //61#DBCS LEAD BYTE 0xBD + 4491, //62#DBCS LEAD BYTE 0xBE + 4648, //63#DBCS LEAD BYTE 0xBF + 4805, //64#DBCS LEAD BYTE 0xC0 + 4962, //65#DBCS LEAD BYTE 0xC1 + 5119, //66#DBCS LEAD BYTE 0xC2 + 5276, //67#DBCS LEAD BYTE 0xC3 + 5443, //68#DBCS LEAD BYTE 0xC4 + 5590, //69#DBCS LEAD BYTE 0xC5 + 5747, //70#DBCS LEAD BYTE 0xC6 + 5810, //71#DBCS LEAD BYTE 0xC7, empty + 5810, //72#DBCS LEAD BYTE 0xC8, empty + 5810, //73#DBCS LEAD BYTE 0xC9 + 5967, //74#DBCS LEAD BYTE 0xCA + 6124, //75#DBCS LEAD BYTE 0xCB + 6281, //76#DBCS LEAD BYTE 0xCC + 6438, //77#DBCS LEAD BYTE 0xCD + 6595, //78#DBCS LEAD BYTE 0xCE + 6752, //79#DBCS LEAD BYTE 0xCF + 6909, //80#DBCS LEAD BYTE 0xD0 + 7066, //81#DBCS LEAD BYTE 0xD1 + 7223, //82#DBCS LEAD BYTE 0xD2 + 7380, //83#DBCS LEAD BYTE 0xD3 + 7537, //84#DBCS LEAD BYTE 0xD4 + 7694, //85#DBCS LEAD BYTE 0xD5 + 7851, //86#DBCS LEAD BYTE 0xD6 + 8008, //87#DBCS LEAD BYTE 0xD7 + 8165, //88#DBCS LEAD BYTE 0xD8 + 8322, //89#DBCS LEAD BYTE 0xD9 + 8479, //90#DBCS LEAD BYTE 0xDA + 8636, //91#DBCS LEAD BYTE 0xDB + 8793, //92#DBCS LEAD BYTE 0xDC + 8950, //93#DBCS LEAD BYTE 0xDD + 9107, //94#DBCS LEAD BYTE 0xDE + 9264, //95#DBCS LEAD BYTE 0xDF + 9421, //96#DBCS LEAD BYTE 0xE0 + 9578, //97#DBCS LEAD BYTE 0xE1 + 9735, //98#DBCS LEAD BYTE 0xE2 + 9892, //99#DBCS LEAD BYTE 0xE3 + 10049, //100#DBCS LEAD BYTE 0xE4 + 10206, //101#DBCS LEAD BYTE 0xE5 + 10363, //102#DBCS LEAD BYTE 0xE6 + 10520, //103#DBCS LEAD BYTE 0xE7 + 10677, //104#DBCS LEAD BYTE 0xE8 + 10834, //105#DBCS LEAD BYTE 0xE9 + 10991, //106#DBCS LEAD BYTE 0xEA + 11148, //107#DBCS LEAD BYTE 0xEB + 11305, //108#DBCS LEAD BYTE 0xEC + 11462, //109#DBCS LEAD BYTE 0xED + 11619, //110#DBCS LEAD BYTE 0xEE + 11776, //111#DBCS LEAD BYTE 0xEF + 11933, //112#DBCS LEAD BYTE 0xF0 + 12090, //113#DBCS LEAD BYTE 0xF1 + 12247, //114#DBCS LEAD BYTE 0xF2 + 12404, //115#DBCS LEAD BYTE 0xF3 + 12561, //116#DBCS LEAD BYTE 0xF4 + 12718, //117#DBCS LEAD BYTE 0xF5 + 12875, //118#DBCS LEAD BYTE 0xF6 + 13032, //119#DBCS LEAD BYTE 0xF7 + 13189, //120#DBCS LEAD BYTE 0xF8 + 13346, //121#DBCS LEAD BYTE 0xF9 + 13502, //122#DBCS LEAD BYTE 0xFA, empty + 13502, //123#DBCS LEAD BYTE 0xFB, empty + 13502, //124#DBCS LEAD BYTE 0xFC, empty + 13502, //125#DBCS LEAD BYTE 0xFD, empty + 13502, //126#DBCS LEAD BYTE 0xFE, empty + 13502, //127#UNDEFINED 0xFF, END OF TABLE +}; + +//Table 950 tail byte +static const int DRW_DoubleTable950[][2] = { + {0xA140, 0x3000}, //1 #IDEOGRAPHIC SPACE + {0xA141, 0xFF0C}, //2 #FULLWIDTH COMMA + {0xA142, 0x3001}, //3 #IDEOGRAPHIC COMMA + {0xA143, 0x3002}, //4 #IDEOGRAPHIC FULL STOP + {0xA144, 0xFF0E}, //5 #FULLWIDTH FULL STOP + {0xA145, 0x2027}, //6 #HYPHENATION POINT + {0xA146, 0xFF1B}, //7 #FULLWIDTH SEMICOLON + {0xA147, 0xFF1A}, //8 #FULLWIDTH COLON + {0xA148, 0xFF1F}, //9 #FULLWIDTH QUESTION MARK + {0xA149, 0xFF01}, //10 #FULLWIDTH EXCLAMATION MARK + {0xA14A, 0xFE30}, //11 #PRESENTATION FORM FOR VERTICAL TWO DOT LEADER + {0xA14B, 0x2026}, //12 #HORIZONTAL ELLIPSIS + {0xA14C, 0x2025}, //13 #TWO DOT LEADER + {0xA14D, 0xFE50}, //14 #SMALL COMMA + {0xA14E, 0xFE51}, //15 #SMALL IDEOGRAPHIC COMMA + {0xA14F, 0xFE52}, //16 #SMALL FULL STOP + {0xA150, 0x00B7}, //17 #MIDDLE DOT + {0xA151, 0xFE54}, //18 #SMALL SEMICOLON + {0xA152, 0xFE55}, //19 #SMALL COLON + {0xA153, 0xFE56}, //20 #SMALL QUESTION MARK + {0xA154, 0xFE57}, //21 #SMALL EXCLAMATION MARK + {0xA155, 0xFF5C}, //22 #FULLWIDTH VERTICAL LINE + {0xA156, 0x2013}, //23 #EN DASH + {0xA157, 0xFE31}, //24 #PRESENTATION FORM FOR VERTICAL EM DASH + {0xA158, 0x2014}, //25 #EM DASH + {0xA159, 0xFE33}, //26 #PRESENTATION FORM FOR VERTICAL LOW LINE + {0xA15A, 0x2574}, //27 #BOX DRAWINGS LIGHT LEFT + {0xA15B, 0xFE34}, //28 #PRESENTATION FORM FOR VERTICAL WAVY LOW LINE + {0xA15C, 0xFE4F}, //29 #WAVY LOW LINE + {0xA15D, 0xFF08}, //30 #FULLWIDTH LEFT PARENTHESIS + {0xA15E, 0xFF09}, //31 #FULLWIDTH RIGHT PARENTHESIS + {0xA15F, 0xFE35}, //32 #PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS + {0xA160, 0xFE36}, //33 #PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS + {0xA161, 0xFF5B}, //34 #FULLWIDTH LEFT CURLY BRACKET + {0xA162, 0xFF5D}, //35 #FULLWIDTH RIGHT CURLY BRACKET + {0xA163, 0xFE37}, //36 #PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET + {0xA164, 0xFE38}, //37 #PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET + {0xA165, 0x3014}, //38 #LEFT TORTOISE SHELL BRACKET + {0xA166, 0x3015}, //39 #RIGHT TORTOISE SHELL BRACKET + {0xA167, 0xFE39}, //40 #PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET + {0xA168, 0xFE3A}, //41 #PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET + {0xA169, 0x3010}, //42 #LEFT BLACK LENTICULAR BRACKET + {0xA16A, 0x3011}, //43 #RIGHT BLACK LENTICULAR BRACKET + {0xA16B, 0xFE3B}, //44 #PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET + {0xA16C, 0xFE3C}, //45 #PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET + {0xA16D, 0x300A}, //46 #LEFT DOUBLE ANGLE BRACKET + {0xA16E, 0x300B}, //47 #RIGHT DOUBLE ANGLE BRACKET + {0xA16F, 0xFE3D}, //48 #PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET + {0xA170, 0xFE3E}, //49 #PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET + {0xA171, 0x3008}, //50 #LEFT ANGLE BRACKET + {0xA172, 0x3009}, //51 #RIGHT ANGLE BRACKET + {0xA173, 0xFE3F}, //52 #PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET + {0xA174, 0xFE40}, //53 #PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET + {0xA175, 0x300C}, //54 #LEFT CORNER BRACKET + {0xA176, 0x300D}, //55 #RIGHT CORNER BRACKET + {0xA177, 0xFE41}, //56 #PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET + {0xA178, 0xFE42}, //57 #PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET + {0xA179, 0x300E}, //58 #LEFT WHITE CORNER BRACKET + {0xA17A, 0x300F}, //59 #RIGHT WHITE CORNER BRACKET + {0xA17B, 0xFE43}, //60 #PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET + {0xA17C, 0xFE44}, //61 #PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET + {0xA17D, 0xFE59}, //62 #SMALL LEFT PARENTHESIS + {0xA17E, 0xFE5A}, //63 #SMALL RIGHT PARENTHESIS + {0xA1A1, 0xFE5B}, //64 #SMALL LEFT CURLY BRACKET + {0xA1A2, 0xFE5C}, //65 #SMALL RIGHT CURLY BRACKET + {0xA1A3, 0xFE5D}, //66 #SMALL LEFT TORTOISE SHELL BRACKET + {0xA1A4, 0xFE5E}, //67 #SMALL RIGHT TORTOISE SHELL BRACKET + {0xA1A5, 0x2018}, //68 #LEFT SINGLE QUOTATION MARK + {0xA1A6, 0x2019}, //69 #RIGHT SINGLE QUOTATION MARK + {0xA1A7, 0x201C}, //70 #LEFT DOUBLE QUOTATION MARK + {0xA1A8, 0x201D}, //71 #RIGHT DOUBLE QUOTATION MARK + {0xA1A9, 0x301D}, //72 #REVERSED DOUBLE PRIME QUOTATION MARK + {0xA1AA, 0x301E}, //73 #DOUBLE PRIME QUOTATION MARK + {0xA1AB, 0x2035}, //74 #REVERSED PRIME + {0xA1AC, 0x2032}, //75 #PRIME + {0xA1AD, 0xFF03}, //76 #FULLWIDTH NUMBER SIGN + {0xA1AE, 0xFF06}, //77 #FULLWIDTH AMPERSAND + {0xA1AF, 0xFF0A}, //78 #FULLWIDTH ASTERISK + {0xA1B0, 0x203B}, //79 #REFERENCE MARK + {0xA1B1, 0x00A7}, //80 #SECTION SIGN + {0xA1B2, 0x3003}, //81 #DITTO MARK + {0xA1B3, 0x25CB}, //82 #WHITE CIRCLE + {0xA1B4, 0x25CF}, //83 #BLACK CIRCLE + {0xA1B5, 0x25B3}, //84 #WHITE UP-POINTING TRIANGLE + {0xA1B6, 0x25B2}, //85 #BLACK UP-POINTING TRIANGLE + {0xA1B7, 0x25CE}, //86 #BULLSEYE + {0xA1B8, 0x2606}, //87 #WHITE STAR + {0xA1B9, 0x2605}, //88 #BLACK STAR + {0xA1BA, 0x25C7}, //89 #WHITE DIAMOND + {0xA1BB, 0x25C6}, //90 #BLACK DIAMOND + {0xA1BC, 0x25A1}, //91 #WHITE SQUARE + {0xA1BD, 0x25A0}, //92 #BLACK SQUARE + {0xA1BE, 0x25BD}, //93 #WHITE DOWN-POINTING TRIANGLE + {0xA1BF, 0x25BC}, //94 #BLACK DOWN-POINTING TRIANGLE + {0xA1C0, 0x32A3}, //95 #CIRCLED IDEOGRAPH CORRECT + {0xA1C1, 0x2105}, //96 #CARE OF + {0xA1C2, 0x00AF}, //97 #MACRON + {0xA1C3, 0xFFE3}, //98 #FULLWIDTH MACRON + {0xA1C4, 0xFF3F}, //99 #FULLWIDTH LOW LINE + {0xA1C5, 0x02CD}, //100 #MODIFIER LETTER LOW MACRON + {0xA1C6, 0xFE49}, //101 #DASHED OVERLINE + {0xA1C7, 0xFE4A}, //102 #CENTRELINE OVERLINE + {0xA1C8, 0xFE4D}, //103 #DASHED LOW LINE + {0xA1C9, 0xFE4E}, //104 #CENTRELINE LOW LINE + {0xA1CA, 0xFE4B}, //105 #WAVY OVERLINE + {0xA1CB, 0xFE4C}, //106 #DOUBLE WAVY OVERLINE + {0xA1CC, 0xFE5F}, //107 #SMALL NUMBER SIGN + {0xA1CD, 0xFE60}, //108 #SMALL AMPERSAND + {0xA1CE, 0xFE61}, //109 #SMALL ASTERISK + {0xA1CF, 0xFF0B}, //110 #FULLWIDTH PLUS SIGN + {0xA1D0, 0xFF0D}, //111 #FULLWIDTH HYPHEN-MINUS + {0xA1D1, 0x00D7}, //112 #MULTIPLICATION SIGN + {0xA1D2, 0x00F7}, //113 #DIVISION SIGN + {0xA1D3, 0x00B1}, //114 #PLUS-MINUS SIGN + {0xA1D4, 0x221A}, //115 #SQUARE ROOT + {0xA1D5, 0xFF1C}, //116 #FULLWIDTH LESS-THAN SIGN + {0xA1D6, 0xFF1E}, //117 #FULLWIDTH GREATER-THAN SIGN + {0xA1D7, 0xFF1D}, //118 #FULLWIDTH EQUALS SIGN + {0xA1D8, 0x2266}, //119 #LESS-THAN OVER EQUAL TO + {0xA1D9, 0x2267}, //120 #GREATER-THAN OVER EQUAL TO + {0xA1DA, 0x2260}, //121 #NOT EQUAL TO + {0xA1DB, 0x221E}, //122 #INFINITY + {0xA1DC, 0x2252}, //123 #APPROXIMATELY EQUAL TO OR THE IMAGE OF + {0xA1DD, 0x2261}, //124 #IDENTICAL TO + {0xA1DE, 0xFE62}, //125 #SMALL PLUS SIGN + {0xA1DF, 0xFE63}, //126 #SMALL HYPHEN-MINUS + {0xA1E0, 0xFE64}, //127 #SMALL LESS-THAN SIGN + {0xA1E1, 0xFE65}, //128 #SMALL GREATER-THAN SIGN + {0xA1E2, 0xFE66}, //129 #SMALL EQUALS SIGN + {0xA1E3, 0xFF5E}, //130 #FULLWIDTH TILDE + {0xA1E4, 0x2229}, //131 #INTERSECTION + {0xA1E5, 0x222A}, //132 #UNION + {0xA1E6, 0x22A5}, //133 #UP TACK + {0xA1E7, 0x2220}, //134 #ANGLE + {0xA1E8, 0x221F}, //135 #RIGHT ANGLE + {0xA1E9, 0x22BF}, //136 #RIGHT TRIANGLE + {0xA1EA, 0x33D2}, //137 #SQUARE LOG + {0xA1EB, 0x33D1}, //138 #SQUARE LN + {0xA1EC, 0x222B}, //139 #INTEGRAL + {0xA1ED, 0x222E}, //140 #CONTOUR INTEGRAL + {0xA1EE, 0x2235}, //141 #BECAUSE + {0xA1EF, 0x2234}, //142 #THEREFORE + {0xA1F0, 0x2640}, //143 #FEMALE SIGN + {0xA1F1, 0x2642}, //144 #MALE SIGN + {0xA1F2, 0x2295}, //145 #CIRCLED PLUS + {0xA1F3, 0x2299}, //146 #CIRCLED DOT OPERATOR + {0xA1F4, 0x2191}, //147 #UPWARDS ARROW + {0xA1F5, 0x2193}, //148 #DOWNWARDS ARROW + {0xA1F6, 0x2190}, //149 #LEFTWARDS ARROW + {0xA1F7, 0x2192}, //150 #RIGHTWARDS ARROW + {0xA1F8, 0x2196}, //151 #NORTH WEST ARROW + {0xA1F9, 0x2197}, //152 #NORTH EAST ARROW + {0xA1FA, 0x2199}, //153 #SOUTH WEST ARROW + {0xA1FB, 0x2198}, //154 #SOUTH EAST ARROW + {0xA1FC, 0x2225}, //155 #PARALLEL TO + {0xA1FD, 0x2223}, //156 #DIVIDES + {0xA1FE, 0xFF0F}, //157 #FULLWIDTH SOLIDUS + {0xA240, 0xFF3C}, //158 #FULLWIDTH REVERSE SOLIDUS + {0xA241, 0x2215}, //159 #DIVISION SLASH + {0xA242, 0xFE68}, //160 #SMALL REVERSE SOLIDUS + {0xA243, 0xFF04}, //161 #FULLWIDTH DOLLAR SIGN + {0xA244, 0xFFE5}, //162 #FULLWIDTH YEN SIGN + {0xA245, 0x3012}, //163 #POSTAL MARK + {0xA246, 0xFFE0}, //164 #FULLWIDTH CENT SIGN + {0xA247, 0xFFE1}, //165 #FULLWIDTH POUND SIGN + {0xA248, 0xFF05}, //166 #FULLWIDTH PERCENT SIGN + {0xA249, 0xFF20}, //167 #FULLWIDTH COMMERCIAL AT + {0xA24A, 0x2103}, //168 #DEGREE CELSIUS + {0xA24B, 0x2109}, //169 #DEGREE FAHRENHEIT + {0xA24C, 0xFE69}, //170 #SMALL DOLLAR SIGN + {0xA24D, 0xFE6A}, //171 #SMALL PERCENT SIGN + {0xA24E, 0xFE6B}, //172 #SMALL COMMERCIAL AT + {0xA24F, 0x33D5}, //173 #SQUARE MIL + {0xA250, 0x339C}, //174 #SQUARE MM + {0xA251, 0x339D}, //175 #SQUARE CM + {0xA252, 0x339E}, //176 #SQUARE KM + {0xA253, 0x33CE}, //177 #SQUARE KM CAPITAL + {0xA254, 0x33A1}, //178 #SQUARE M SQUARED + {0xA255, 0x338E}, //179 #SQUARE MG + {0xA256, 0x338F}, //180 #SQUARE KG + {0xA257, 0x33C4}, //181 #SQUARE CC + {0xA258, 0x00B0}, //182 #DEGREE SIGN + {0xA259, 0x5159}, //183 #CJK UNIFIED IDEOGRAPH + {0xA25A, 0x515B}, //184 #CJK UNIFIED IDEOGRAPH + {0xA25B, 0x515E}, //185 #CJK UNIFIED IDEOGRAPH + {0xA25C, 0x515D}, //186 #CJK UNIFIED IDEOGRAPH + {0xA25D, 0x5161}, //187 #CJK UNIFIED IDEOGRAPH + {0xA25E, 0x5163}, //188 #CJK UNIFIED IDEOGRAPH + {0xA25F, 0x55E7}, //189 #CJK UNIFIED IDEOGRAPH + {0xA260, 0x74E9}, //190 #CJK UNIFIED IDEOGRAPH + {0xA261, 0x7CCE}, //191 #CJK UNIFIED IDEOGRAPH + {0xA262, 0x2581}, //192 #LOWER ONE EIGHTH BLOCK + {0xA263, 0x2582}, //193 #LOWER ONE QUARTER BLOCK + {0xA264, 0x2583}, //194 #LOWER THREE EIGHTHS BLOCK + {0xA265, 0x2584}, //195 #LOWER HALF BLOCK + {0xA266, 0x2585}, //196 #LOWER FIVE EIGHTHS BLOCK + {0xA267, 0x2586}, //197 #LOWER THREE QUARTERS BLOCK + {0xA268, 0x2587}, //198 #LOWER SEVEN EIGHTHS BLOCK + {0xA269, 0x2588}, //199 #FULL BLOCK + {0xA26A, 0x258F}, //200 #LEFT ONE EIGHTH BLOCK + {0xA26B, 0x258E}, //201 #LEFT ONE QUARTER BLOCK + {0xA26C, 0x258D}, //202 #LEFT THREE EIGHTHS BLOCK + {0xA26D, 0x258C}, //203 #LEFT HALF BLOCK + {0xA26E, 0x258B}, //204 #LEFT FIVE EIGHTHS BLOCK + {0xA26F, 0x258A}, //205 #LEFT THREE QUARTERS BLOCK + {0xA270, 0x2589}, //206 #LEFT SEVEN EIGHTHS BLOCK + {0xA271, 0x253C}, //207 #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + {0xA272, 0x2534}, //208 #BOX DRAWINGS LIGHT UP AND HORIZONTAL + {0xA273, 0x252C}, //209 #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + {0xA274, 0x2524}, //210 #BOX DRAWINGS LIGHT VERTICAL AND LEFT + {0xA275, 0x251C}, //211 #BOX DRAWINGS LIGHT VERTICAL AND RIGHT + {0xA276, 0x2594}, //212 #UPPER ONE EIGHTH BLOCK + {0xA277, 0x2500}, //213 #BOX DRAWINGS LIGHT HORIZONTAL + {0xA278, 0x2502}, //214 #BOX DRAWINGS LIGHT VERTICAL + {0xA279, 0x2595}, //215 #RIGHT ONE EIGHTH BLOCK + {0xA27A, 0x250C}, //216 #BOX DRAWINGS LIGHT DOWN AND RIGHT + {0xA27B, 0x2510}, //217 #BOX DRAWINGS LIGHT DOWN AND LEFT + {0xA27C, 0x2514}, //218 #BOX DRAWINGS LIGHT UP AND RIGHT + {0xA27D, 0x2518}, //219 #BOX DRAWINGS LIGHT UP AND LEFT + {0xA27E, 0x256D}, //220 #BOX DRAWINGS LIGHT ARC DOWN AND RIGHT + {0xA2A1, 0x256E}, //221 #BOX DRAWINGS LIGHT ARC DOWN AND LEFT + {0xA2A2, 0x2570}, //222 #BOX DRAWINGS LIGHT ARC UP AND RIGHT + {0xA2A3, 0x256F}, //223 #BOX DRAWINGS LIGHT ARC UP AND LEFT + {0xA2A4, 0x2550}, //224 #BOX DRAWINGS DOUBLE HORIZONTAL + {0xA2A5, 0x255E}, //225 #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + {0xA2A6, 0x256A}, //226 #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + {0xA2A7, 0x2561}, //227 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + {0xA2A8, 0x25E2}, //228 #BLACK LOWER RIGHT TRIANGLE + {0xA2A9, 0x25E3}, //229 #BLACK LOWER LEFT TRIANGLE + {0xA2AA, 0x25E5}, //230 #BLACK UPPER RIGHT TRIANGLE + {0xA2AB, 0x25E4}, //231 #BLACK UPPER LEFT TRIANGLE + {0xA2AC, 0x2571}, //232 #BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT + {0xA2AD, 0x2572}, //233 #BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT + {0xA2AE, 0x2573}, //234 #BOX DRAWINGS LIGHT DIAGONAL CROSS + {0xA2AF, 0xFF10}, //235 #FULLWIDTH DIGIT ZERO + {0xA2B0, 0xFF11}, //236 #FULLWIDTH DIGIT ONE + {0xA2B1, 0xFF12}, //237 #FULLWIDTH DIGIT TWO + {0xA2B2, 0xFF13}, //238 #FULLWIDTH DIGIT THREE + {0xA2B3, 0xFF14}, //239 #FULLWIDTH DIGIT FOUR + {0xA2B4, 0xFF15}, //240 #FULLWIDTH DIGIT FIVE + {0xA2B5, 0xFF16}, //241 #FULLWIDTH DIGIT SIX + {0xA2B6, 0xFF17}, //242 #FULLWIDTH DIGIT SEVEN + {0xA2B7, 0xFF18}, //243 #FULLWIDTH DIGIT EIGHT + {0xA2B8, 0xFF19}, //244 #FULLWIDTH DIGIT NINE + {0xA2B9, 0x2160}, //245 #ROMAN NUMERAL ONE + {0xA2BA, 0x2161}, //246 #ROMAN NUMERAL TWO + {0xA2BB, 0x2162}, //247 #ROMAN NUMERAL THREE + {0xA2BC, 0x2163}, //248 #ROMAN NUMERAL FOUR + {0xA2BD, 0x2164}, //249 #ROMAN NUMERAL FIVE + {0xA2BE, 0x2165}, //250 #ROMAN NUMERAL SIX + {0xA2BF, 0x2166}, //251 #ROMAN NUMERAL SEVEN + {0xA2C0, 0x2167}, //252 #ROMAN NUMERAL EIGHT + {0xA2C1, 0x2168}, //253 #ROMAN NUMERAL NINE + {0xA2C2, 0x2169}, //254 #ROMAN NUMERAL TEN + {0xA2C3, 0x3021}, //255 #HANGZHOU NUMERAL ONE + {0xA2C4, 0x3022}, //256 #HANGZHOU NUMERAL TWO + {0xA2C5, 0x3023}, //257 #HANGZHOU NUMERAL THREE + {0xA2C6, 0x3024}, //258 #HANGZHOU NUMERAL FOUR + {0xA2C7, 0x3025}, //259 #HANGZHOU NUMERAL FIVE + {0xA2C8, 0x3026}, //260 #HANGZHOU NUMERAL SIX + {0xA2C9, 0x3027}, //261 #HANGZHOU NUMERAL SEVEN + {0xA2CA, 0x3028}, //262 #HANGZHOU NUMERAL EIGHT + {0xA2CB, 0x3029}, //263 #HANGZHOU NUMERAL NINE + {0xA2CC, 0x5341}, //264 #CJK UNIFIED IDEOGRAPH + {0xA2CD, 0x5344}, //265 #CJK UNIFIED IDEOGRAPH + {0xA2CE, 0x5345}, //266 #CJK UNIFIED IDEOGRAPH + {0xA2CF, 0xFF21}, //267 #FULLWIDTH LATIN CAPITAL LETTER A + {0xA2D0, 0xFF22}, //268 #FULLWIDTH LATIN CAPITAL LETTER B + {0xA2D1, 0xFF23}, //269 #FULLWIDTH LATIN CAPITAL LETTER C + {0xA2D2, 0xFF24}, //270 #FULLWIDTH LATIN CAPITAL LETTER D + {0xA2D3, 0xFF25}, //271 #FULLWIDTH LATIN CAPITAL LETTER E + {0xA2D4, 0xFF26}, //272 #FULLWIDTH LATIN CAPITAL LETTER F + {0xA2D5, 0xFF27}, //273 #FULLWIDTH LATIN CAPITAL LETTER G + {0xA2D6, 0xFF28}, //274 #FULLWIDTH LATIN CAPITAL LETTER H + {0xA2D7, 0xFF29}, //275 #FULLWIDTH LATIN CAPITAL LETTER I + {0xA2D8, 0xFF2A}, //276 #FULLWIDTH LATIN CAPITAL LETTER J + {0xA2D9, 0xFF2B}, //277 #FULLWIDTH LATIN CAPITAL LETTER K + {0xA2DA, 0xFF2C}, //278 #FULLWIDTH LATIN CAPITAL LETTER L + {0xA2DB, 0xFF2D}, //279 #FULLWIDTH LATIN CAPITAL LETTER M + {0xA2DC, 0xFF2E}, //280 #FULLWIDTH LATIN CAPITAL LETTER N + {0xA2DD, 0xFF2F}, //281 #FULLWIDTH LATIN CAPITAL LETTER O + {0xA2DE, 0xFF30}, //282 #FULLWIDTH LATIN CAPITAL LETTER P + {0xA2DF, 0xFF31}, //283 #FULLWIDTH LATIN CAPITAL LETTER Q + {0xA2E0, 0xFF32}, //284 #FULLWIDTH LATIN CAPITAL LETTER R + {0xA2E1, 0xFF33}, //285 #FULLWIDTH LATIN CAPITAL LETTER S + {0xA2E2, 0xFF34}, //286 #FULLWIDTH LATIN CAPITAL LETTER T + {0xA2E3, 0xFF35}, //287 #FULLWIDTH LATIN CAPITAL LETTER U + {0xA2E4, 0xFF36}, //288 #FULLWIDTH LATIN CAPITAL LETTER V + {0xA2E5, 0xFF37}, //289 #FULLWIDTH LATIN CAPITAL LETTER W + {0xA2E6, 0xFF38}, //290 #FULLWIDTH LATIN CAPITAL LETTER X + {0xA2E7, 0xFF39}, //291 #FULLWIDTH LATIN CAPITAL LETTER Y + {0xA2E8, 0xFF3A}, //292 #FULLWIDTH LATIN CAPITAL LETTER Z + {0xA2E9, 0xFF41}, //293 #FULLWIDTH LATIN SMALL LETTER A + {0xA2EA, 0xFF42}, //294 #FULLWIDTH LATIN SMALL LETTER B + {0xA2EB, 0xFF43}, //295 #FULLWIDTH LATIN SMALL LETTER C + {0xA2EC, 0xFF44}, //296 #FULLWIDTH LATIN SMALL LETTER D + {0xA2ED, 0xFF45}, //297 #FULLWIDTH LATIN SMALL LETTER E + {0xA2EE, 0xFF46}, //298 #FULLWIDTH LATIN SMALL LETTER F + {0xA2EF, 0xFF47}, //299 #FULLWIDTH LATIN SMALL LETTER G + {0xA2F0, 0xFF48}, //300 #FULLWIDTH LATIN SMALL LETTER H + {0xA2F1, 0xFF49}, //301 #FULLWIDTH LATIN SMALL LETTER I + {0xA2F2, 0xFF4A}, //302 #FULLWIDTH LATIN SMALL LETTER J + {0xA2F3, 0xFF4B}, //303 #FULLWIDTH LATIN SMALL LETTER K + {0xA2F4, 0xFF4C}, //304 #FULLWIDTH LATIN SMALL LETTER L + {0xA2F5, 0xFF4D}, //305 #FULLWIDTH LATIN SMALL LETTER M + {0xA2F6, 0xFF4E}, //306 #FULLWIDTH LATIN SMALL LETTER N + {0xA2F7, 0xFF4F}, //307 #FULLWIDTH LATIN SMALL LETTER O + {0xA2F8, 0xFF50}, //308 #FULLWIDTH LATIN SMALL LETTER P + {0xA2F9, 0xFF51}, //309 #FULLWIDTH LATIN SMALL LETTER Q + {0xA2FA, 0xFF52}, //310 #FULLWIDTH LATIN SMALL LETTER R + {0xA2FB, 0xFF53}, //311 #FULLWIDTH LATIN SMALL LETTER S + {0xA2FC, 0xFF54}, //312 #FULLWIDTH LATIN SMALL LETTER T + {0xA2FD, 0xFF55}, //313 #FULLWIDTH LATIN SMALL LETTER U + {0xA2FE, 0xFF56}, //314 #FULLWIDTH LATIN SMALL LETTER V + {0xA340, 0xFF57}, //315 #FULLWIDTH LATIN SMALL LETTER W + {0xA341, 0xFF58}, //316 #FULLWIDTH LATIN SMALL LETTER X + {0xA342, 0xFF59}, //317 #FULLWIDTH LATIN SMALL LETTER Y + {0xA343, 0xFF5A}, //318 #FULLWIDTH LATIN SMALL LETTER Z + {0xA344, 0x0391}, //319 #GREEK CAPITAL LETTER ALPHA + {0xA345, 0x0392}, //320 #GREEK CAPITAL LETTER BETA + {0xA346, 0x0393}, //321 #GREEK CAPITAL LETTER GAMMA + {0xA347, 0x0394}, //322 #GREEK CAPITAL LETTER DELTA + {0xA348, 0x0395}, //323 #GREEK CAPITAL LETTER EPSILON + {0xA349, 0x0396}, //324 #GREEK CAPITAL LETTER ZETA + {0xA34A, 0x0397}, //325 #GREEK CAPITAL LETTER ETA + {0xA34B, 0x0398}, //326 #GREEK CAPITAL LETTER THETA + {0xA34C, 0x0399}, //327 #GREEK CAPITAL LETTER IOTA + {0xA34D, 0x039A}, //328 #GREEK CAPITAL LETTER KAPPA + {0xA34E, 0x039B}, //329 #GREEK CAPITAL LETTER LAMDA + {0xA34F, 0x039C}, //330 #GREEK CAPITAL LETTER MU + {0xA350, 0x039D}, //331 #GREEK CAPITAL LETTER NU + {0xA351, 0x039E}, //332 #GREEK CAPITAL LETTER XI + {0xA352, 0x039F}, //333 #GREEK CAPITAL LETTER OMICRON + {0xA353, 0x03A0}, //334 #GREEK CAPITAL LETTER PI + {0xA354, 0x03A1}, //335 #GREEK CAPITAL LETTER RHO + {0xA355, 0x03A3}, //336 #GREEK CAPITAL LETTER SIGMA + {0xA356, 0x03A4}, //337 #GREEK CAPITAL LETTER TAU + {0xA357, 0x03A5}, //338 #GREEK CAPITAL LETTER UPSILON + {0xA358, 0x03A6}, //339 #GREEK CAPITAL LETTER PHI + {0xA359, 0x03A7}, //340 #GREEK CAPITAL LETTER CHI + {0xA35A, 0x03A8}, //341 #GREEK CAPITAL LETTER PSI + {0xA35B, 0x03A9}, //342 #GREEK CAPITAL LETTER OMEGA + {0xA35C, 0x03B1}, //343 #GREEK SMALL LETTER ALPHA + {0xA35D, 0x03B2}, //344 #GREEK SMALL LETTER BETA + {0xA35E, 0x03B3}, //345 #GREEK SMALL LETTER GAMMA + {0xA35F, 0x03B4}, //346 #GREEK SMALL LETTER DELTA + {0xA360, 0x03B5}, //347 #GREEK SMALL LETTER EPSILON + {0xA361, 0x03B6}, //348 #GREEK SMALL LETTER ZETA + {0xA362, 0x03B7}, //349 #GREEK SMALL LETTER ETA + {0xA363, 0x03B8}, //350 #GREEK SMALL LETTER THETA + {0xA364, 0x03B9}, //351 #GREEK SMALL LETTER IOTA + {0xA365, 0x03BA}, //352 #GREEK SMALL LETTER KAPPA + {0xA366, 0x03BB}, //353 #GREEK SMALL LETTER LAMDA + {0xA367, 0x03BC}, //354 #GREEK SMALL LETTER MU + {0xA368, 0x03BD}, //355 #GREEK SMALL LETTER NU + {0xA369, 0x03BE}, //356 #GREEK SMALL LETTER XI + {0xA36A, 0x03BF}, //357 #GREEK SMALL LETTER OMICRON + {0xA36B, 0x03C0}, //358 #GREEK SMALL LETTER PI + {0xA36C, 0x03C1}, //359 #GREEK SMALL LETTER RHO + {0xA36D, 0x03C3}, //360 #GREEK SMALL LETTER SIGMA + {0xA36E, 0x03C4}, //361 #GREEK SMALL LETTER TAU + {0xA36F, 0x03C5}, //362 #GREEK SMALL LETTER UPSILON + {0xA370, 0x03C6}, //363 #GREEK SMALL LETTER PHI + {0xA371, 0x03C7}, //364 #GREEK SMALL LETTER CHI + {0xA372, 0x03C8}, //365 #GREEK SMALL LETTER PSI + {0xA373, 0x03C9}, //366 #GREEK SMALL LETTER OMEGA + {0xA374, 0x3105}, //367 #BOPOMOFO LETTER B + {0xA375, 0x3106}, //368 #BOPOMOFO LETTER P + {0xA376, 0x3107}, //369 #BOPOMOFO LETTER M + {0xA377, 0x3108}, //370 #BOPOMOFO LETTER F + {0xA378, 0x3109}, //371 #BOPOMOFO LETTER D + {0xA379, 0x310A}, //372 #BOPOMOFO LETTER T + {0xA37A, 0x310B}, //373 #BOPOMOFO LETTER N + {0xA37B, 0x310C}, //374 #BOPOMOFO LETTER L + {0xA37C, 0x310D}, //375 #BOPOMOFO LETTER G + {0xA37D, 0x310E}, //376 #BOPOMOFO LETTER K + {0xA37E, 0x310F}, //377 #BOPOMOFO LETTER H + {0xA3A1, 0x3110}, //378 #BOPOMOFO LETTER J + {0xA3A2, 0x3111}, //379 #BOPOMOFO LETTER Q + {0xA3A3, 0x3112}, //380 #BOPOMOFO LETTER X + {0xA3A4, 0x3113}, //381 #BOPOMOFO LETTER ZH + {0xA3A5, 0x3114}, //382 #BOPOMOFO LETTER CH + {0xA3A6, 0x3115}, //383 #BOPOMOFO LETTER SH + {0xA3A7, 0x3116}, //384 #BOPOMOFO LETTER R + {0xA3A8, 0x3117}, //385 #BOPOMOFO LETTER Z + {0xA3A9, 0x3118}, //386 #BOPOMOFO LETTER C + {0xA3AA, 0x3119}, //387 #BOPOMOFO LETTER S + {0xA3AB, 0x311A}, //388 #BOPOMOFO LETTER A + {0xA3AC, 0x311B}, //389 #BOPOMOFO LETTER O + {0xA3AD, 0x311C}, //390 #BOPOMOFO LETTER E + {0xA3AE, 0x311D}, //391 #BOPOMOFO LETTER EH + {0xA3AF, 0x311E}, //392 #BOPOMOFO LETTER AI + {0xA3B0, 0x311F}, //393 #BOPOMOFO LETTER EI + {0xA3B1, 0x3120}, //394 #BOPOMOFO LETTER AU + {0xA3B2, 0x3121}, //395 #BOPOMOFO LETTER OU + {0xA3B3, 0x3122}, //396 #BOPOMOFO LETTER AN + {0xA3B4, 0x3123}, //397 #BOPOMOFO LETTER EN + {0xA3B5, 0x3124}, //398 #BOPOMOFO LETTER ANG + {0xA3B6, 0x3125}, //399 #BOPOMOFO LETTER ENG + {0xA3B7, 0x3126}, //400 #BOPOMOFO LETTER ER + {0xA3B8, 0x3127}, //401 #BOPOMOFO LETTER I + {0xA3B9, 0x3128}, //402 #BOPOMOFO LETTER U + {0xA3BA, 0x3129}, //403 #BOPOMOFO LETTER IU + {0xA3BB, 0x02D9}, //404 #DOT ABOVE + {0xA3BC, 0x02C9}, //405 #MODIFIER LETTER MACRON + {0xA3BD, 0x02CA}, //406 #MODIFIER LETTER ACUTE ACCENT + {0xA3BE, 0x02C7}, //407 #CARON + {0xA3BF, 0x02CB}, //408 #MODIFIER LETTER GRAVE ACCENT + {0xA3E1, 0x20AC}, //409 #EURO SIGN + {0xA440, 0x4E00}, //410 #CJK UNIFIED IDEOGRAPH + {0xA441, 0x4E59}, //411 #CJK UNIFIED IDEOGRAPH + {0xA442, 0x4E01}, //412 #CJK UNIFIED IDEOGRAPH + {0xA443, 0x4E03}, //413 #CJK UNIFIED IDEOGRAPH + {0xA444, 0x4E43}, //414 #CJK UNIFIED IDEOGRAPH + {0xA445, 0x4E5D}, //415 #CJK UNIFIED IDEOGRAPH + {0xA446, 0x4E86}, //416 #CJK UNIFIED IDEOGRAPH + {0xA447, 0x4E8C}, //417 #CJK UNIFIED IDEOGRAPH + {0xA448, 0x4EBA}, //418 #CJK UNIFIED IDEOGRAPH + {0xA449, 0x513F}, //419 #CJK UNIFIED IDEOGRAPH + {0xA44A, 0x5165}, //420 #CJK UNIFIED IDEOGRAPH + {0xA44B, 0x516B}, //421 #CJK UNIFIED IDEOGRAPH + {0xA44C, 0x51E0}, //422 #CJK UNIFIED IDEOGRAPH + {0xA44D, 0x5200}, //423 #CJK UNIFIED IDEOGRAPH + {0xA44E, 0x5201}, //424 #CJK UNIFIED IDEOGRAPH + {0xA44F, 0x529B}, //425 #CJK UNIFIED IDEOGRAPH + {0xA450, 0x5315}, //426 #CJK UNIFIED IDEOGRAPH + {0xA451, 0x5341}, //427 #CJK UNIFIED IDEOGRAPH + {0xA452, 0x535C}, //428 #CJK UNIFIED IDEOGRAPH + {0xA453, 0x53C8}, //429 #CJK UNIFIED IDEOGRAPH + {0xA454, 0x4E09}, //430 #CJK UNIFIED IDEOGRAPH + {0xA455, 0x4E0B}, //431 #CJK UNIFIED IDEOGRAPH + {0xA456, 0x4E08}, //432 #CJK UNIFIED IDEOGRAPH + {0xA457, 0x4E0A}, //433 #CJK UNIFIED IDEOGRAPH + {0xA458, 0x4E2B}, //434 #CJK UNIFIED IDEOGRAPH + {0xA459, 0x4E38}, //435 #CJK UNIFIED IDEOGRAPH + {0xA45A, 0x51E1}, //436 #CJK UNIFIED IDEOGRAPH + {0xA45B, 0x4E45}, //437 #CJK UNIFIED IDEOGRAPH + {0xA45C, 0x4E48}, //438 #CJK UNIFIED IDEOGRAPH + {0xA45D, 0x4E5F}, //439 #CJK UNIFIED IDEOGRAPH + {0xA45E, 0x4E5E}, //440 #CJK UNIFIED IDEOGRAPH + {0xA45F, 0x4E8E}, //441 #CJK UNIFIED IDEOGRAPH + {0xA460, 0x4EA1}, //442 #CJK UNIFIED IDEOGRAPH + {0xA461, 0x5140}, //443 #CJK UNIFIED IDEOGRAPH + {0xA462, 0x5203}, //444 #CJK UNIFIED IDEOGRAPH + {0xA463, 0x52FA}, //445 #CJK UNIFIED IDEOGRAPH + {0xA464, 0x5343}, //446 #CJK UNIFIED IDEOGRAPH + {0xA465, 0x53C9}, //447 #CJK UNIFIED IDEOGRAPH + {0xA466, 0x53E3}, //448 #CJK UNIFIED IDEOGRAPH + {0xA467, 0x571F}, //449 #CJK UNIFIED IDEOGRAPH + {0xA468, 0x58EB}, //450 #CJK UNIFIED IDEOGRAPH + {0xA469, 0x5915}, //451 #CJK UNIFIED IDEOGRAPH + {0xA46A, 0x5927}, //452 #CJK UNIFIED IDEOGRAPH + {0xA46B, 0x5973}, //453 #CJK UNIFIED IDEOGRAPH + {0xA46C, 0x5B50}, //454 #CJK UNIFIED IDEOGRAPH + {0xA46D, 0x5B51}, //455 #CJK UNIFIED IDEOGRAPH + {0xA46E, 0x5B53}, //456 #CJK UNIFIED IDEOGRAPH + {0xA46F, 0x5BF8}, //457 #CJK UNIFIED IDEOGRAPH + {0xA470, 0x5C0F}, //458 #CJK UNIFIED IDEOGRAPH + {0xA471, 0x5C22}, //459 #CJK UNIFIED IDEOGRAPH + {0xA472, 0x5C38}, //460 #CJK UNIFIED IDEOGRAPH + {0xA473, 0x5C71}, //461 #CJK UNIFIED IDEOGRAPH + {0xA474, 0x5DDD}, //462 #CJK UNIFIED IDEOGRAPH + {0xA475, 0x5DE5}, //463 #CJK UNIFIED IDEOGRAPH + {0xA476, 0x5DF1}, //464 #CJK UNIFIED IDEOGRAPH + {0xA477, 0x5DF2}, //465 #CJK UNIFIED IDEOGRAPH + {0xA478, 0x5DF3}, //466 #CJK UNIFIED IDEOGRAPH + {0xA479, 0x5DFE}, //467 #CJK UNIFIED IDEOGRAPH + {0xA47A, 0x5E72}, //468 #CJK UNIFIED IDEOGRAPH + {0xA47B, 0x5EFE}, //469 #CJK UNIFIED IDEOGRAPH + {0xA47C, 0x5F0B}, //470 #CJK UNIFIED IDEOGRAPH + {0xA47D, 0x5F13}, //471 #CJK UNIFIED IDEOGRAPH + {0xA47E, 0x624D}, //472 #CJK UNIFIED IDEOGRAPH + {0xA4A1, 0x4E11}, //473 #CJK UNIFIED IDEOGRAPH + {0xA4A2, 0x4E10}, //474 #CJK UNIFIED IDEOGRAPH + {0xA4A3, 0x4E0D}, //475 #CJK UNIFIED IDEOGRAPH + {0xA4A4, 0x4E2D}, //476 #CJK UNIFIED IDEOGRAPH + {0xA4A5, 0x4E30}, //477 #CJK UNIFIED IDEOGRAPH + {0xA4A6, 0x4E39}, //478 #CJK UNIFIED IDEOGRAPH + {0xA4A7, 0x4E4B}, //479 #CJK UNIFIED IDEOGRAPH + {0xA4A8, 0x5C39}, //480 #CJK UNIFIED IDEOGRAPH + {0xA4A9, 0x4E88}, //481 #CJK UNIFIED IDEOGRAPH + {0xA4AA, 0x4E91}, //482 #CJK UNIFIED IDEOGRAPH + {0xA4AB, 0x4E95}, //483 #CJK UNIFIED IDEOGRAPH + {0xA4AC, 0x4E92}, //484 #CJK UNIFIED IDEOGRAPH + {0xA4AD, 0x4E94}, //485 #CJK UNIFIED IDEOGRAPH + {0xA4AE, 0x4EA2}, //486 #CJK UNIFIED IDEOGRAPH + {0xA4AF, 0x4EC1}, //487 #CJK UNIFIED IDEOGRAPH + {0xA4B0, 0x4EC0}, //488 #CJK UNIFIED IDEOGRAPH + {0xA4B1, 0x4EC3}, //489 #CJK UNIFIED IDEOGRAPH + {0xA4B2, 0x4EC6}, //490 #CJK UNIFIED IDEOGRAPH + {0xA4B3, 0x4EC7}, //491 #CJK UNIFIED IDEOGRAPH + {0xA4B4, 0x4ECD}, //492 #CJK UNIFIED IDEOGRAPH + {0xA4B5, 0x4ECA}, //493 #CJK UNIFIED IDEOGRAPH + {0xA4B6, 0x4ECB}, //494 #CJK UNIFIED IDEOGRAPH + {0xA4B7, 0x4EC4}, //495 #CJK UNIFIED IDEOGRAPH + {0xA4B8, 0x5143}, //496 #CJK UNIFIED IDEOGRAPH + {0xA4B9, 0x5141}, //497 #CJK UNIFIED IDEOGRAPH + {0xA4BA, 0x5167}, //498 #CJK UNIFIED IDEOGRAPH + {0xA4BB, 0x516D}, //499 #CJK UNIFIED IDEOGRAPH + {0xA4BC, 0x516E}, //500 #CJK UNIFIED IDEOGRAPH + {0xA4BD, 0x516C}, //501 #CJK UNIFIED IDEOGRAPH + {0xA4BE, 0x5197}, //502 #CJK UNIFIED IDEOGRAPH + {0xA4BF, 0x51F6}, //503 #CJK UNIFIED IDEOGRAPH + {0xA4C0, 0x5206}, //504 #CJK UNIFIED IDEOGRAPH + {0xA4C1, 0x5207}, //505 #CJK UNIFIED IDEOGRAPH + {0xA4C2, 0x5208}, //506 #CJK UNIFIED IDEOGRAPH + {0xA4C3, 0x52FB}, //507 #CJK UNIFIED IDEOGRAPH + {0xA4C4, 0x52FE}, //508 #CJK UNIFIED IDEOGRAPH + {0xA4C5, 0x52FF}, //509 #CJK UNIFIED IDEOGRAPH + {0xA4C6, 0x5316}, //510 #CJK UNIFIED IDEOGRAPH + {0xA4C7, 0x5339}, //511 #CJK UNIFIED IDEOGRAPH + {0xA4C8, 0x5348}, //512 #CJK UNIFIED IDEOGRAPH + {0xA4C9, 0x5347}, //513 #CJK UNIFIED IDEOGRAPH + {0xA4CA, 0x5345}, //514 #CJK UNIFIED IDEOGRAPH + {0xA4CB, 0x535E}, //515 #CJK UNIFIED IDEOGRAPH + {0xA4CC, 0x5384}, //516 #CJK UNIFIED IDEOGRAPH + {0xA4CD, 0x53CB}, //517 #CJK UNIFIED IDEOGRAPH + {0xA4CE, 0x53CA}, //518 #CJK UNIFIED IDEOGRAPH + {0xA4CF, 0x53CD}, //519 #CJK UNIFIED IDEOGRAPH + {0xA4D0, 0x58EC}, //520 #CJK UNIFIED IDEOGRAPH + {0xA4D1, 0x5929}, //521 #CJK UNIFIED IDEOGRAPH + {0xA4D2, 0x592B}, //522 #CJK UNIFIED IDEOGRAPH + {0xA4D3, 0x592A}, //523 #CJK UNIFIED IDEOGRAPH + {0xA4D4, 0x592D}, //524 #CJK UNIFIED IDEOGRAPH + {0xA4D5, 0x5B54}, //525 #CJK UNIFIED IDEOGRAPH + {0xA4D6, 0x5C11}, //526 #CJK UNIFIED IDEOGRAPH + {0xA4D7, 0x5C24}, //527 #CJK UNIFIED IDEOGRAPH + {0xA4D8, 0x5C3A}, //528 #CJK UNIFIED IDEOGRAPH + {0xA4D9, 0x5C6F}, //529 #CJK UNIFIED IDEOGRAPH + {0xA4DA, 0x5DF4}, //530 #CJK UNIFIED IDEOGRAPH + {0xA4DB, 0x5E7B}, //531 #CJK UNIFIED IDEOGRAPH + {0xA4DC, 0x5EFF}, //532 #CJK UNIFIED IDEOGRAPH + {0xA4DD, 0x5F14}, //533 #CJK UNIFIED IDEOGRAPH + {0xA4DE, 0x5F15}, //534 #CJK UNIFIED IDEOGRAPH + {0xA4DF, 0x5FC3}, //535 #CJK UNIFIED IDEOGRAPH + {0xA4E0, 0x6208}, //536 #CJK UNIFIED IDEOGRAPH + {0xA4E1, 0x6236}, //537 #CJK UNIFIED IDEOGRAPH + {0xA4E2, 0x624B}, //538 #CJK UNIFIED IDEOGRAPH + {0xA4E3, 0x624E}, //539 #CJK UNIFIED IDEOGRAPH + {0xA4E4, 0x652F}, //540 #CJK UNIFIED IDEOGRAPH + {0xA4E5, 0x6587}, //541 #CJK UNIFIED IDEOGRAPH + {0xA4E6, 0x6597}, //542 #CJK UNIFIED IDEOGRAPH + {0xA4E7, 0x65A4}, //543 #CJK UNIFIED IDEOGRAPH + {0xA4E8, 0x65B9}, //544 #CJK UNIFIED IDEOGRAPH + {0xA4E9, 0x65E5}, //545 #CJK UNIFIED IDEOGRAPH + {0xA4EA, 0x66F0}, //546 #CJK UNIFIED IDEOGRAPH + {0xA4EB, 0x6708}, //547 #CJK UNIFIED IDEOGRAPH + {0xA4EC, 0x6728}, //548 #CJK UNIFIED IDEOGRAPH + {0xA4ED, 0x6B20}, //549 #CJK UNIFIED IDEOGRAPH + {0xA4EE, 0x6B62}, //550 #CJK UNIFIED IDEOGRAPH + {0xA4EF, 0x6B79}, //551 #CJK UNIFIED IDEOGRAPH + {0xA4F0, 0x6BCB}, //552 #CJK UNIFIED IDEOGRAPH + {0xA4F1, 0x6BD4}, //553 #CJK UNIFIED IDEOGRAPH + {0xA4F2, 0x6BDB}, //554 #CJK UNIFIED IDEOGRAPH + {0xA4F3, 0x6C0F}, //555 #CJK UNIFIED IDEOGRAPH + {0xA4F4, 0x6C34}, //556 #CJK UNIFIED IDEOGRAPH + {0xA4F5, 0x706B}, //557 #CJK UNIFIED IDEOGRAPH + {0xA4F6, 0x722A}, //558 #CJK UNIFIED IDEOGRAPH + {0xA4F7, 0x7236}, //559 #CJK UNIFIED IDEOGRAPH + {0xA4F8, 0x723B}, //560 #CJK UNIFIED IDEOGRAPH + {0xA4F9, 0x7247}, //561 #CJK UNIFIED IDEOGRAPH + {0xA4FA, 0x7259}, //562 #CJK UNIFIED IDEOGRAPH + {0xA4FB, 0x725B}, //563 #CJK UNIFIED IDEOGRAPH + {0xA4FC, 0x72AC}, //564 #CJK UNIFIED IDEOGRAPH + {0xA4FD, 0x738B}, //565 #CJK UNIFIED IDEOGRAPH + {0xA4FE, 0x4E19}, //566 #CJK UNIFIED IDEOGRAPH + {0xA540, 0x4E16}, //567 #CJK UNIFIED IDEOGRAPH + {0xA541, 0x4E15}, //568 #CJK UNIFIED IDEOGRAPH + {0xA542, 0x4E14}, //569 #CJK UNIFIED IDEOGRAPH + {0xA543, 0x4E18}, //570 #CJK UNIFIED IDEOGRAPH + {0xA544, 0x4E3B}, //571 #CJK UNIFIED IDEOGRAPH + {0xA545, 0x4E4D}, //572 #CJK UNIFIED IDEOGRAPH + {0xA546, 0x4E4F}, //573 #CJK UNIFIED IDEOGRAPH + {0xA547, 0x4E4E}, //574 #CJK UNIFIED IDEOGRAPH + {0xA548, 0x4EE5}, //575 #CJK UNIFIED IDEOGRAPH + {0xA549, 0x4ED8}, //576 #CJK UNIFIED IDEOGRAPH + {0xA54A, 0x4ED4}, //577 #CJK UNIFIED IDEOGRAPH + {0xA54B, 0x4ED5}, //578 #CJK UNIFIED IDEOGRAPH + {0xA54C, 0x4ED6}, //579 #CJK UNIFIED IDEOGRAPH + {0xA54D, 0x4ED7}, //580 #CJK UNIFIED IDEOGRAPH + {0xA54E, 0x4EE3}, //581 #CJK UNIFIED IDEOGRAPH + {0xA54F, 0x4EE4}, //582 #CJK UNIFIED IDEOGRAPH + {0xA550, 0x4ED9}, //583 #CJK UNIFIED IDEOGRAPH + {0xA551, 0x4EDE}, //584 #CJK UNIFIED IDEOGRAPH + {0xA552, 0x5145}, //585 #CJK UNIFIED IDEOGRAPH + {0xA553, 0x5144}, //586 #CJK UNIFIED IDEOGRAPH + {0xA554, 0x5189}, //587 #CJK UNIFIED IDEOGRAPH + {0xA555, 0x518A}, //588 #CJK UNIFIED IDEOGRAPH + {0xA556, 0x51AC}, //589 #CJK UNIFIED IDEOGRAPH + {0xA557, 0x51F9}, //590 #CJK UNIFIED IDEOGRAPH + {0xA558, 0x51FA}, //591 #CJK UNIFIED IDEOGRAPH + {0xA559, 0x51F8}, //592 #CJK UNIFIED IDEOGRAPH + {0xA55A, 0x520A}, //593 #CJK UNIFIED IDEOGRAPH + {0xA55B, 0x52A0}, //594 #CJK UNIFIED IDEOGRAPH + {0xA55C, 0x529F}, //595 #CJK UNIFIED IDEOGRAPH + {0xA55D, 0x5305}, //596 #CJK UNIFIED IDEOGRAPH + {0xA55E, 0x5306}, //597 #CJK UNIFIED IDEOGRAPH + {0xA55F, 0x5317}, //598 #CJK UNIFIED IDEOGRAPH + {0xA560, 0x531D}, //599 #CJK UNIFIED IDEOGRAPH + {0xA561, 0x4EDF}, //600 #CJK UNIFIED IDEOGRAPH + {0xA562, 0x534A}, //601 #CJK UNIFIED IDEOGRAPH + {0xA563, 0x5349}, //602 #CJK UNIFIED IDEOGRAPH + {0xA564, 0x5361}, //603 #CJK UNIFIED IDEOGRAPH + {0xA565, 0x5360}, //604 #CJK UNIFIED IDEOGRAPH + {0xA566, 0x536F}, //605 #CJK UNIFIED IDEOGRAPH + {0xA567, 0x536E}, //606 #CJK UNIFIED IDEOGRAPH + {0xA568, 0x53BB}, //607 #CJK UNIFIED IDEOGRAPH + {0xA569, 0x53EF}, //608 #CJK UNIFIED IDEOGRAPH + {0xA56A, 0x53E4}, //609 #CJK UNIFIED IDEOGRAPH + {0xA56B, 0x53F3}, //610 #CJK UNIFIED IDEOGRAPH + {0xA56C, 0x53EC}, //611 #CJK UNIFIED IDEOGRAPH + {0xA56D, 0x53EE}, //612 #CJK UNIFIED IDEOGRAPH + {0xA56E, 0x53E9}, //613 #CJK UNIFIED IDEOGRAPH + {0xA56F, 0x53E8}, //614 #CJK UNIFIED IDEOGRAPH + {0xA570, 0x53FC}, //615 #CJK UNIFIED IDEOGRAPH + {0xA571, 0x53F8}, //616 #CJK UNIFIED IDEOGRAPH + {0xA572, 0x53F5}, //617 #CJK UNIFIED IDEOGRAPH + {0xA573, 0x53EB}, //618 #CJK UNIFIED IDEOGRAPH + {0xA574, 0x53E6}, //619 #CJK UNIFIED IDEOGRAPH + {0xA575, 0x53EA}, //620 #CJK UNIFIED IDEOGRAPH + {0xA576, 0x53F2}, //621 #CJK UNIFIED IDEOGRAPH + {0xA577, 0x53F1}, //622 #CJK UNIFIED IDEOGRAPH + {0xA578, 0x53F0}, //623 #CJK UNIFIED IDEOGRAPH + {0xA579, 0x53E5}, //624 #CJK UNIFIED IDEOGRAPH + {0xA57A, 0x53ED}, //625 #CJK UNIFIED IDEOGRAPH + {0xA57B, 0x53FB}, //626 #CJK UNIFIED IDEOGRAPH + {0xA57C, 0x56DB}, //627 #CJK UNIFIED IDEOGRAPH + {0xA57D, 0x56DA}, //628 #CJK UNIFIED IDEOGRAPH + {0xA57E, 0x5916}, //629 #CJK UNIFIED IDEOGRAPH + {0xA5A1, 0x592E}, //630 #CJK UNIFIED IDEOGRAPH + {0xA5A2, 0x5931}, //631 #CJK UNIFIED IDEOGRAPH + {0xA5A3, 0x5974}, //632 #CJK UNIFIED IDEOGRAPH + {0xA5A4, 0x5976}, //633 #CJK UNIFIED IDEOGRAPH + {0xA5A5, 0x5B55}, //634 #CJK UNIFIED IDEOGRAPH + {0xA5A6, 0x5B83}, //635 #CJK UNIFIED IDEOGRAPH + {0xA5A7, 0x5C3C}, //636 #CJK UNIFIED IDEOGRAPH + {0xA5A8, 0x5DE8}, //637 #CJK UNIFIED IDEOGRAPH + {0xA5A9, 0x5DE7}, //638 #CJK UNIFIED IDEOGRAPH + {0xA5AA, 0x5DE6}, //639 #CJK UNIFIED IDEOGRAPH + {0xA5AB, 0x5E02}, //640 #CJK UNIFIED IDEOGRAPH + {0xA5AC, 0x5E03}, //641 #CJK UNIFIED IDEOGRAPH + {0xA5AD, 0x5E73}, //642 #CJK UNIFIED IDEOGRAPH + {0xA5AE, 0x5E7C}, //643 #CJK UNIFIED IDEOGRAPH + {0xA5AF, 0x5F01}, //644 #CJK UNIFIED IDEOGRAPH + {0xA5B0, 0x5F18}, //645 #CJK UNIFIED IDEOGRAPH + {0xA5B1, 0x5F17}, //646 #CJK UNIFIED IDEOGRAPH + {0xA5B2, 0x5FC5}, //647 #CJK UNIFIED IDEOGRAPH + {0xA5B3, 0x620A}, //648 #CJK UNIFIED IDEOGRAPH + {0xA5B4, 0x6253}, //649 #CJK UNIFIED IDEOGRAPH + {0xA5B5, 0x6254}, //650 #CJK UNIFIED IDEOGRAPH + {0xA5B6, 0x6252}, //651 #CJK UNIFIED IDEOGRAPH + {0xA5B7, 0x6251}, //652 #CJK UNIFIED IDEOGRAPH + {0xA5B8, 0x65A5}, //653 #CJK UNIFIED IDEOGRAPH + {0xA5B9, 0x65E6}, //654 #CJK UNIFIED IDEOGRAPH + {0xA5BA, 0x672E}, //655 #CJK UNIFIED IDEOGRAPH + {0xA5BB, 0x672C}, //656 #CJK UNIFIED IDEOGRAPH + {0xA5BC, 0x672A}, //657 #CJK UNIFIED IDEOGRAPH + {0xA5BD, 0x672B}, //658 #CJK UNIFIED IDEOGRAPH + {0xA5BE, 0x672D}, //659 #CJK UNIFIED IDEOGRAPH + {0xA5BF, 0x6B63}, //660 #CJK UNIFIED IDEOGRAPH + {0xA5C0, 0x6BCD}, //661 #CJK UNIFIED IDEOGRAPH + {0xA5C1, 0x6C11}, //662 #CJK UNIFIED IDEOGRAPH + {0xA5C2, 0x6C10}, //663 #CJK UNIFIED IDEOGRAPH + {0xA5C3, 0x6C38}, //664 #CJK UNIFIED IDEOGRAPH + {0xA5C4, 0x6C41}, //665 #CJK UNIFIED IDEOGRAPH + {0xA5C5, 0x6C40}, //666 #CJK UNIFIED IDEOGRAPH + {0xA5C6, 0x6C3E}, //667 #CJK UNIFIED IDEOGRAPH + {0xA5C7, 0x72AF}, //668 #CJK UNIFIED IDEOGRAPH + {0xA5C8, 0x7384}, //669 #CJK UNIFIED IDEOGRAPH + {0xA5C9, 0x7389}, //670 #CJK UNIFIED IDEOGRAPH + {0xA5CA, 0x74DC}, //671 #CJK UNIFIED IDEOGRAPH + {0xA5CB, 0x74E6}, //672 #CJK UNIFIED IDEOGRAPH + {0xA5CC, 0x7518}, //673 #CJK UNIFIED IDEOGRAPH + {0xA5CD, 0x751F}, //674 #CJK UNIFIED IDEOGRAPH + {0xA5CE, 0x7528}, //675 #CJK UNIFIED IDEOGRAPH + {0xA5CF, 0x7529}, //676 #CJK UNIFIED IDEOGRAPH + {0xA5D0, 0x7530}, //677 #CJK UNIFIED IDEOGRAPH + {0xA5D1, 0x7531}, //678 #CJK UNIFIED IDEOGRAPH + {0xA5D2, 0x7532}, //679 #CJK UNIFIED IDEOGRAPH + {0xA5D3, 0x7533}, //680 #CJK UNIFIED IDEOGRAPH + {0xA5D4, 0x758B}, //681 #CJK UNIFIED IDEOGRAPH + {0xA5D5, 0x767D}, //682 #CJK UNIFIED IDEOGRAPH + {0xA5D6, 0x76AE}, //683 #CJK UNIFIED IDEOGRAPH + {0xA5D7, 0x76BF}, //684 #CJK UNIFIED IDEOGRAPH + {0xA5D8, 0x76EE}, //685 #CJK UNIFIED IDEOGRAPH + {0xA5D9, 0x77DB}, //686 #CJK UNIFIED IDEOGRAPH + {0xA5DA, 0x77E2}, //687 #CJK UNIFIED IDEOGRAPH + {0xA5DB, 0x77F3}, //688 #CJK UNIFIED IDEOGRAPH + {0xA5DC, 0x793A}, //689 #CJK UNIFIED IDEOGRAPH + {0xA5DD, 0x79BE}, //690 #CJK UNIFIED IDEOGRAPH + {0xA5DE, 0x7A74}, //691 #CJK UNIFIED IDEOGRAPH + {0xA5DF, 0x7ACB}, //692 #CJK UNIFIED IDEOGRAPH + {0xA5E0, 0x4E1E}, //693 #CJK UNIFIED IDEOGRAPH + {0xA5E1, 0x4E1F}, //694 #CJK UNIFIED IDEOGRAPH + {0xA5E2, 0x4E52}, //695 #CJK UNIFIED IDEOGRAPH + {0xA5E3, 0x4E53}, //696 #CJK UNIFIED IDEOGRAPH + {0xA5E4, 0x4E69}, //697 #CJK UNIFIED IDEOGRAPH + {0xA5E5, 0x4E99}, //698 #CJK UNIFIED IDEOGRAPH + {0xA5E6, 0x4EA4}, //699 #CJK UNIFIED IDEOGRAPH + {0xA5E7, 0x4EA6}, //700 #CJK UNIFIED IDEOGRAPH + {0xA5E8, 0x4EA5}, //701 #CJK UNIFIED IDEOGRAPH + {0xA5E9, 0x4EFF}, //702 #CJK UNIFIED IDEOGRAPH + {0xA5EA, 0x4F09}, //703 #CJK UNIFIED IDEOGRAPH + {0xA5EB, 0x4F19}, //704 #CJK UNIFIED IDEOGRAPH + {0xA5EC, 0x4F0A}, //705 #CJK UNIFIED IDEOGRAPH + {0xA5ED, 0x4F15}, //706 #CJK UNIFIED IDEOGRAPH + {0xA5EE, 0x4F0D}, //707 #CJK UNIFIED IDEOGRAPH + {0xA5EF, 0x4F10}, //708 #CJK UNIFIED IDEOGRAPH + {0xA5F0, 0x4F11}, //709 #CJK UNIFIED IDEOGRAPH + {0xA5F1, 0x4F0F}, //710 #CJK UNIFIED IDEOGRAPH + {0xA5F2, 0x4EF2}, //711 #CJK UNIFIED IDEOGRAPH + {0xA5F3, 0x4EF6}, //712 #CJK UNIFIED IDEOGRAPH + {0xA5F4, 0x4EFB}, //713 #CJK UNIFIED IDEOGRAPH + {0xA5F5, 0x4EF0}, //714 #CJK UNIFIED IDEOGRAPH + {0xA5F6, 0x4EF3}, //715 #CJK UNIFIED IDEOGRAPH + {0xA5F7, 0x4EFD}, //716 #CJK UNIFIED IDEOGRAPH + {0xA5F8, 0x4F01}, //717 #CJK UNIFIED IDEOGRAPH + {0xA5F9, 0x4F0B}, //718 #CJK UNIFIED IDEOGRAPH + {0xA5FA, 0x5149}, //719 #CJK UNIFIED IDEOGRAPH + {0xA5FB, 0x5147}, //720 #CJK UNIFIED IDEOGRAPH + {0xA5FC, 0x5146}, //721 #CJK UNIFIED IDEOGRAPH + {0xA5FD, 0x5148}, //722 #CJK UNIFIED IDEOGRAPH + {0xA5FE, 0x5168}, //723 #CJK UNIFIED IDEOGRAPH + {0xA640, 0x5171}, //724 #CJK UNIFIED IDEOGRAPH + {0xA641, 0x518D}, //725 #CJK UNIFIED IDEOGRAPH + {0xA642, 0x51B0}, //726 #CJK UNIFIED IDEOGRAPH + {0xA643, 0x5217}, //727 #CJK UNIFIED IDEOGRAPH + {0xA644, 0x5211}, //728 #CJK UNIFIED IDEOGRAPH + {0xA645, 0x5212}, //729 #CJK UNIFIED IDEOGRAPH + {0xA646, 0x520E}, //730 #CJK UNIFIED IDEOGRAPH + {0xA647, 0x5216}, //731 #CJK UNIFIED IDEOGRAPH + {0xA648, 0x52A3}, //732 #CJK UNIFIED IDEOGRAPH + {0xA649, 0x5308}, //733 #CJK UNIFIED IDEOGRAPH + {0xA64A, 0x5321}, //734 #CJK UNIFIED IDEOGRAPH + {0xA64B, 0x5320}, //735 #CJK UNIFIED IDEOGRAPH + {0xA64C, 0x5370}, //736 #CJK UNIFIED IDEOGRAPH + {0xA64D, 0x5371}, //737 #CJK UNIFIED IDEOGRAPH + {0xA64E, 0x5409}, //738 #CJK UNIFIED IDEOGRAPH + {0xA64F, 0x540F}, //739 #CJK UNIFIED IDEOGRAPH + {0xA650, 0x540C}, //740 #CJK UNIFIED IDEOGRAPH + {0xA651, 0x540A}, //741 #CJK UNIFIED IDEOGRAPH + {0xA652, 0x5410}, //742 #CJK UNIFIED IDEOGRAPH + {0xA653, 0x5401}, //743 #CJK UNIFIED IDEOGRAPH + {0xA654, 0x540B}, //744 #CJK UNIFIED IDEOGRAPH + {0xA655, 0x5404}, //745 #CJK UNIFIED IDEOGRAPH + {0xA656, 0x5411}, //746 #CJK UNIFIED IDEOGRAPH + {0xA657, 0x540D}, //747 #CJK UNIFIED IDEOGRAPH + {0xA658, 0x5408}, //748 #CJK UNIFIED IDEOGRAPH + {0xA659, 0x5403}, //749 #CJK UNIFIED IDEOGRAPH + {0xA65A, 0x540E}, //750 #CJK UNIFIED IDEOGRAPH + {0xA65B, 0x5406}, //751 #CJK UNIFIED IDEOGRAPH + {0xA65C, 0x5412}, //752 #CJK UNIFIED IDEOGRAPH + {0xA65D, 0x56E0}, //753 #CJK UNIFIED IDEOGRAPH + {0xA65E, 0x56DE}, //754 #CJK UNIFIED IDEOGRAPH + {0xA65F, 0x56DD}, //755 #CJK UNIFIED IDEOGRAPH + {0xA660, 0x5733}, //756 #CJK UNIFIED IDEOGRAPH + {0xA661, 0x5730}, //757 #CJK UNIFIED IDEOGRAPH + {0xA662, 0x5728}, //758 #CJK UNIFIED IDEOGRAPH + {0xA663, 0x572D}, //759 #CJK UNIFIED IDEOGRAPH + {0xA664, 0x572C}, //760 #CJK UNIFIED IDEOGRAPH + {0xA665, 0x572F}, //761 #CJK UNIFIED IDEOGRAPH + {0xA666, 0x5729}, //762 #CJK UNIFIED IDEOGRAPH + {0xA667, 0x5919}, //763 #CJK UNIFIED IDEOGRAPH + {0xA668, 0x591A}, //764 #CJK UNIFIED IDEOGRAPH + {0xA669, 0x5937}, //765 #CJK UNIFIED IDEOGRAPH + {0xA66A, 0x5938}, //766 #CJK UNIFIED IDEOGRAPH + {0xA66B, 0x5984}, //767 #CJK UNIFIED IDEOGRAPH + {0xA66C, 0x5978}, //768 #CJK UNIFIED IDEOGRAPH + {0xA66D, 0x5983}, //769 #CJK UNIFIED IDEOGRAPH + {0xA66E, 0x597D}, //770 #CJK UNIFIED IDEOGRAPH + {0xA66F, 0x5979}, //771 #CJK UNIFIED IDEOGRAPH + {0xA670, 0x5982}, //772 #CJK UNIFIED IDEOGRAPH + {0xA671, 0x5981}, //773 #CJK UNIFIED IDEOGRAPH + {0xA672, 0x5B57}, //774 #CJK UNIFIED IDEOGRAPH + {0xA673, 0x5B58}, //775 #CJK UNIFIED IDEOGRAPH + {0xA674, 0x5B87}, //776 #CJK UNIFIED IDEOGRAPH + {0xA675, 0x5B88}, //777 #CJK UNIFIED IDEOGRAPH + {0xA676, 0x5B85}, //778 #CJK UNIFIED IDEOGRAPH + {0xA677, 0x5B89}, //779 #CJK UNIFIED IDEOGRAPH + {0xA678, 0x5BFA}, //780 #CJK UNIFIED IDEOGRAPH + {0xA679, 0x5C16}, //781 #CJK UNIFIED IDEOGRAPH + {0xA67A, 0x5C79}, //782 #CJK UNIFIED IDEOGRAPH + {0xA67B, 0x5DDE}, //783 #CJK UNIFIED IDEOGRAPH + {0xA67C, 0x5E06}, //784 #CJK UNIFIED IDEOGRAPH + {0xA67D, 0x5E76}, //785 #CJK UNIFIED IDEOGRAPH + {0xA67E, 0x5E74}, //786 #CJK UNIFIED IDEOGRAPH + {0xA6A1, 0x5F0F}, //787 #CJK UNIFIED IDEOGRAPH + {0xA6A2, 0x5F1B}, //788 #CJK UNIFIED IDEOGRAPH + {0xA6A3, 0x5FD9}, //789 #CJK UNIFIED IDEOGRAPH + {0xA6A4, 0x5FD6}, //790 #CJK UNIFIED IDEOGRAPH + {0xA6A5, 0x620E}, //791 #CJK UNIFIED IDEOGRAPH + {0xA6A6, 0x620C}, //792 #CJK UNIFIED IDEOGRAPH + {0xA6A7, 0x620D}, //793 #CJK UNIFIED IDEOGRAPH + {0xA6A8, 0x6210}, //794 #CJK UNIFIED IDEOGRAPH + {0xA6A9, 0x6263}, //795 #CJK UNIFIED IDEOGRAPH + {0xA6AA, 0x625B}, //796 #CJK UNIFIED IDEOGRAPH + {0xA6AB, 0x6258}, //797 #CJK UNIFIED IDEOGRAPH + {0xA6AC, 0x6536}, //798 #CJK UNIFIED IDEOGRAPH + {0xA6AD, 0x65E9}, //799 #CJK UNIFIED IDEOGRAPH + {0xA6AE, 0x65E8}, //800 #CJK UNIFIED IDEOGRAPH + {0xA6AF, 0x65EC}, //801 #CJK UNIFIED IDEOGRAPH + {0xA6B0, 0x65ED}, //802 #CJK UNIFIED IDEOGRAPH + {0xA6B1, 0x66F2}, //803 #CJK UNIFIED IDEOGRAPH + {0xA6B2, 0x66F3}, //804 #CJK UNIFIED IDEOGRAPH + {0xA6B3, 0x6709}, //805 #CJK UNIFIED IDEOGRAPH + {0xA6B4, 0x673D}, //806 #CJK UNIFIED IDEOGRAPH + {0xA6B5, 0x6734}, //807 #CJK UNIFIED IDEOGRAPH + {0xA6B6, 0x6731}, //808 #CJK UNIFIED IDEOGRAPH + {0xA6B7, 0x6735}, //809 #CJK UNIFIED IDEOGRAPH + {0xA6B8, 0x6B21}, //810 #CJK UNIFIED IDEOGRAPH + {0xA6B9, 0x6B64}, //811 #CJK UNIFIED IDEOGRAPH + {0xA6BA, 0x6B7B}, //812 #CJK UNIFIED IDEOGRAPH + {0xA6BB, 0x6C16}, //813 #CJK UNIFIED IDEOGRAPH + {0xA6BC, 0x6C5D}, //814 #CJK UNIFIED IDEOGRAPH + {0xA6BD, 0x6C57}, //815 #CJK UNIFIED IDEOGRAPH + {0xA6BE, 0x6C59}, //816 #CJK UNIFIED IDEOGRAPH + {0xA6BF, 0x6C5F}, //817 #CJK UNIFIED IDEOGRAPH + {0xA6C0, 0x6C60}, //818 #CJK UNIFIED IDEOGRAPH + {0xA6C1, 0x6C50}, //819 #CJK UNIFIED IDEOGRAPH + {0xA6C2, 0x6C55}, //820 #CJK UNIFIED IDEOGRAPH + {0xA6C3, 0x6C61}, //821 #CJK UNIFIED IDEOGRAPH + {0xA6C4, 0x6C5B}, //822 #CJK UNIFIED IDEOGRAPH + {0xA6C5, 0x6C4D}, //823 #CJK UNIFIED IDEOGRAPH + {0xA6C6, 0x6C4E}, //824 #CJK UNIFIED IDEOGRAPH + {0xA6C7, 0x7070}, //825 #CJK UNIFIED IDEOGRAPH + {0xA6C8, 0x725F}, //826 #CJK UNIFIED IDEOGRAPH + {0xA6C9, 0x725D}, //827 #CJK UNIFIED IDEOGRAPH + {0xA6CA, 0x767E}, //828 #CJK UNIFIED IDEOGRAPH + {0xA6CB, 0x7AF9}, //829 #CJK UNIFIED IDEOGRAPH + {0xA6CC, 0x7C73}, //830 #CJK UNIFIED IDEOGRAPH + {0xA6CD, 0x7CF8}, //831 #CJK UNIFIED IDEOGRAPH + {0xA6CE, 0x7F36}, //832 #CJK UNIFIED IDEOGRAPH + {0xA6CF, 0x7F8A}, //833 #CJK UNIFIED IDEOGRAPH + {0xA6D0, 0x7FBD}, //834 #CJK UNIFIED IDEOGRAPH + {0xA6D1, 0x8001}, //835 #CJK UNIFIED IDEOGRAPH + {0xA6D2, 0x8003}, //836 #CJK UNIFIED IDEOGRAPH + {0xA6D3, 0x800C}, //837 #CJK UNIFIED IDEOGRAPH + {0xA6D4, 0x8012}, //838 #CJK UNIFIED IDEOGRAPH + {0xA6D5, 0x8033}, //839 #CJK UNIFIED IDEOGRAPH + {0xA6D6, 0x807F}, //840 #CJK UNIFIED IDEOGRAPH + {0xA6D7, 0x8089}, //841 #CJK UNIFIED IDEOGRAPH + {0xA6D8, 0x808B}, //842 #CJK UNIFIED IDEOGRAPH + {0xA6D9, 0x808C}, //843 #CJK UNIFIED IDEOGRAPH + {0xA6DA, 0x81E3}, //844 #CJK UNIFIED IDEOGRAPH + {0xA6DB, 0x81EA}, //845 #CJK UNIFIED IDEOGRAPH + {0xA6DC, 0x81F3}, //846 #CJK UNIFIED IDEOGRAPH + {0xA6DD, 0x81FC}, //847 #CJK UNIFIED IDEOGRAPH + {0xA6DE, 0x820C}, //848 #CJK UNIFIED IDEOGRAPH + {0xA6DF, 0x821B}, //849 #CJK UNIFIED IDEOGRAPH + {0xA6E0, 0x821F}, //850 #CJK UNIFIED IDEOGRAPH + {0xA6E1, 0x826E}, //851 #CJK UNIFIED IDEOGRAPH + {0xA6E2, 0x8272}, //852 #CJK UNIFIED IDEOGRAPH + {0xA6E3, 0x827E}, //853 #CJK UNIFIED IDEOGRAPH + {0xA6E4, 0x866B}, //854 #CJK UNIFIED IDEOGRAPH + {0xA6E5, 0x8840}, //855 #CJK UNIFIED IDEOGRAPH + {0xA6E6, 0x884C}, //856 #CJK UNIFIED IDEOGRAPH + {0xA6E7, 0x8863}, //857 #CJK UNIFIED IDEOGRAPH + {0xA6E8, 0x897F}, //858 #CJK UNIFIED IDEOGRAPH + {0xA6E9, 0x9621}, //859 #CJK UNIFIED IDEOGRAPH + {0xA6EA, 0x4E32}, //860 #CJK UNIFIED IDEOGRAPH + {0xA6EB, 0x4EA8}, //861 #CJK UNIFIED IDEOGRAPH + {0xA6EC, 0x4F4D}, //862 #CJK UNIFIED IDEOGRAPH + {0xA6ED, 0x4F4F}, //863 #CJK UNIFIED IDEOGRAPH + {0xA6EE, 0x4F47}, //864 #CJK UNIFIED IDEOGRAPH + {0xA6EF, 0x4F57}, //865 #CJK UNIFIED IDEOGRAPH + {0xA6F0, 0x4F5E}, //866 #CJK UNIFIED IDEOGRAPH + {0xA6F1, 0x4F34}, //867 #CJK UNIFIED IDEOGRAPH + {0xA6F2, 0x4F5B}, //868 #CJK UNIFIED IDEOGRAPH + {0xA6F3, 0x4F55}, //869 #CJK UNIFIED IDEOGRAPH + {0xA6F4, 0x4F30}, //870 #CJK UNIFIED IDEOGRAPH + {0xA6F5, 0x4F50}, //871 #CJK UNIFIED IDEOGRAPH + {0xA6F6, 0x4F51}, //872 #CJK UNIFIED IDEOGRAPH + {0xA6F7, 0x4F3D}, //873 #CJK UNIFIED IDEOGRAPH + {0xA6F8, 0x4F3A}, //874 #CJK UNIFIED IDEOGRAPH + {0xA6F9, 0x4F38}, //875 #CJK UNIFIED IDEOGRAPH + {0xA6FA, 0x4F43}, //876 #CJK UNIFIED IDEOGRAPH + {0xA6FB, 0x4F54}, //877 #CJK UNIFIED IDEOGRAPH + {0xA6FC, 0x4F3C}, //878 #CJK UNIFIED IDEOGRAPH + {0xA6FD, 0x4F46}, //879 #CJK UNIFIED IDEOGRAPH + {0xA6FE, 0x4F63}, //880 #CJK UNIFIED IDEOGRAPH + {0xA740, 0x4F5C}, //881 #CJK UNIFIED IDEOGRAPH + {0xA741, 0x4F60}, //882 #CJK UNIFIED IDEOGRAPH + {0xA742, 0x4F2F}, //883 #CJK UNIFIED IDEOGRAPH + {0xA743, 0x4F4E}, //884 #CJK UNIFIED IDEOGRAPH + {0xA744, 0x4F36}, //885 #CJK UNIFIED IDEOGRAPH + {0xA745, 0x4F59}, //886 #CJK UNIFIED IDEOGRAPH + {0xA746, 0x4F5D}, //887 #CJK UNIFIED IDEOGRAPH + {0xA747, 0x4F48}, //888 #CJK UNIFIED IDEOGRAPH + {0xA748, 0x4F5A}, //889 #CJK UNIFIED IDEOGRAPH + {0xA749, 0x514C}, //890 #CJK UNIFIED IDEOGRAPH + {0xA74A, 0x514B}, //891 #CJK UNIFIED IDEOGRAPH + {0xA74B, 0x514D}, //892 #CJK UNIFIED IDEOGRAPH + {0xA74C, 0x5175}, //893 #CJK UNIFIED IDEOGRAPH + {0xA74D, 0x51B6}, //894 #CJK UNIFIED IDEOGRAPH + {0xA74E, 0x51B7}, //895 #CJK UNIFIED IDEOGRAPH + {0xA74F, 0x5225}, //896 #CJK UNIFIED IDEOGRAPH + {0xA750, 0x5224}, //897 #CJK UNIFIED IDEOGRAPH + {0xA751, 0x5229}, //898 #CJK UNIFIED IDEOGRAPH + {0xA752, 0x522A}, //899 #CJK UNIFIED IDEOGRAPH + {0xA753, 0x5228}, //900 #CJK UNIFIED IDEOGRAPH + {0xA754, 0x52AB}, //901 #CJK UNIFIED IDEOGRAPH + {0xA755, 0x52A9}, //902 #CJK UNIFIED IDEOGRAPH + {0xA756, 0x52AA}, //903 #CJK UNIFIED IDEOGRAPH + {0xA757, 0x52AC}, //904 #CJK UNIFIED IDEOGRAPH + {0xA758, 0x5323}, //905 #CJK UNIFIED IDEOGRAPH + {0xA759, 0x5373}, //906 #CJK UNIFIED IDEOGRAPH + {0xA75A, 0x5375}, //907 #CJK UNIFIED IDEOGRAPH + {0xA75B, 0x541D}, //908 #CJK UNIFIED IDEOGRAPH + {0xA75C, 0x542D}, //909 #CJK UNIFIED IDEOGRAPH + {0xA75D, 0x541E}, //910 #CJK UNIFIED IDEOGRAPH + {0xA75E, 0x543E}, //911 #CJK UNIFIED IDEOGRAPH + {0xA75F, 0x5426}, //912 #CJK UNIFIED IDEOGRAPH + {0xA760, 0x544E}, //913 #CJK UNIFIED IDEOGRAPH + {0xA761, 0x5427}, //914 #CJK UNIFIED IDEOGRAPH + {0xA762, 0x5446}, //915 #CJK UNIFIED IDEOGRAPH + {0xA763, 0x5443}, //916 #CJK UNIFIED IDEOGRAPH + {0xA764, 0x5433}, //917 #CJK UNIFIED IDEOGRAPH + {0xA765, 0x5448}, //918 #CJK UNIFIED IDEOGRAPH + {0xA766, 0x5442}, //919 #CJK UNIFIED IDEOGRAPH + {0xA767, 0x541B}, //920 #CJK UNIFIED IDEOGRAPH + {0xA768, 0x5429}, //921 #CJK UNIFIED IDEOGRAPH + {0xA769, 0x544A}, //922 #CJK UNIFIED IDEOGRAPH + {0xA76A, 0x5439}, //923 #CJK UNIFIED IDEOGRAPH + {0xA76B, 0x543B}, //924 #CJK UNIFIED IDEOGRAPH + {0xA76C, 0x5438}, //925 #CJK UNIFIED IDEOGRAPH + {0xA76D, 0x542E}, //926 #CJK UNIFIED IDEOGRAPH + {0xA76E, 0x5435}, //927 #CJK UNIFIED IDEOGRAPH + {0xA76F, 0x5436}, //928 #CJK UNIFIED IDEOGRAPH + {0xA770, 0x5420}, //929 #CJK UNIFIED IDEOGRAPH + {0xA771, 0x543C}, //930 #CJK UNIFIED IDEOGRAPH + {0xA772, 0x5440}, //931 #CJK UNIFIED IDEOGRAPH + {0xA773, 0x5431}, //932 #CJK UNIFIED IDEOGRAPH + {0xA774, 0x542B}, //933 #CJK UNIFIED IDEOGRAPH + {0xA775, 0x541F}, //934 #CJK UNIFIED IDEOGRAPH + {0xA776, 0x542C}, //935 #CJK UNIFIED IDEOGRAPH + {0xA777, 0x56EA}, //936 #CJK UNIFIED IDEOGRAPH + {0xA778, 0x56F0}, //937 #CJK UNIFIED IDEOGRAPH + {0xA779, 0x56E4}, //938 #CJK UNIFIED IDEOGRAPH + {0xA77A, 0x56EB}, //939 #CJK UNIFIED IDEOGRAPH + {0xA77B, 0x574A}, //940 #CJK UNIFIED IDEOGRAPH + {0xA77C, 0x5751}, //941 #CJK UNIFIED IDEOGRAPH + {0xA77D, 0x5740}, //942 #CJK UNIFIED IDEOGRAPH + {0xA77E, 0x574D}, //943 #CJK UNIFIED IDEOGRAPH + {0xA7A1, 0x5747}, //944 #CJK UNIFIED IDEOGRAPH + {0xA7A2, 0x574E}, //945 #CJK UNIFIED IDEOGRAPH + {0xA7A3, 0x573E}, //946 #CJK UNIFIED IDEOGRAPH + {0xA7A4, 0x5750}, //947 #CJK UNIFIED IDEOGRAPH + {0xA7A5, 0x574F}, //948 #CJK UNIFIED IDEOGRAPH + {0xA7A6, 0x573B}, //949 #CJK UNIFIED IDEOGRAPH + {0xA7A7, 0x58EF}, //950 #CJK UNIFIED IDEOGRAPH + {0xA7A8, 0x593E}, //951 #CJK UNIFIED IDEOGRAPH + {0xA7A9, 0x599D}, //952 #CJK UNIFIED IDEOGRAPH + {0xA7AA, 0x5992}, //953 #CJK UNIFIED IDEOGRAPH + {0xA7AB, 0x59A8}, //954 #CJK UNIFIED IDEOGRAPH + {0xA7AC, 0x599E}, //955 #CJK UNIFIED IDEOGRAPH + {0xA7AD, 0x59A3}, //956 #CJK UNIFIED IDEOGRAPH + {0xA7AE, 0x5999}, //957 #CJK UNIFIED IDEOGRAPH + {0xA7AF, 0x5996}, //958 #CJK UNIFIED IDEOGRAPH + {0xA7B0, 0x598D}, //959 #CJK UNIFIED IDEOGRAPH + {0xA7B1, 0x59A4}, //960 #CJK UNIFIED IDEOGRAPH + {0xA7B2, 0x5993}, //961 #CJK UNIFIED IDEOGRAPH + {0xA7B3, 0x598A}, //962 #CJK UNIFIED IDEOGRAPH + {0xA7B4, 0x59A5}, //963 #CJK UNIFIED IDEOGRAPH + {0xA7B5, 0x5B5D}, //964 #CJK UNIFIED IDEOGRAPH + {0xA7B6, 0x5B5C}, //965 #CJK UNIFIED IDEOGRAPH + {0xA7B7, 0x5B5A}, //966 #CJK UNIFIED IDEOGRAPH + {0xA7B8, 0x5B5B}, //967 #CJK UNIFIED IDEOGRAPH + {0xA7B9, 0x5B8C}, //968 #CJK UNIFIED IDEOGRAPH + {0xA7BA, 0x5B8B}, //969 #CJK UNIFIED IDEOGRAPH + {0xA7BB, 0x5B8F}, //970 #CJK UNIFIED IDEOGRAPH + {0xA7BC, 0x5C2C}, //971 #CJK UNIFIED IDEOGRAPH + {0xA7BD, 0x5C40}, //972 #CJK UNIFIED IDEOGRAPH + {0xA7BE, 0x5C41}, //973 #CJK UNIFIED IDEOGRAPH + {0xA7BF, 0x5C3F}, //974 #CJK UNIFIED IDEOGRAPH + {0xA7C0, 0x5C3E}, //975 #CJK UNIFIED IDEOGRAPH + {0xA7C1, 0x5C90}, //976 #CJK UNIFIED IDEOGRAPH + {0xA7C2, 0x5C91}, //977 #CJK UNIFIED IDEOGRAPH + {0xA7C3, 0x5C94}, //978 #CJK UNIFIED IDEOGRAPH + {0xA7C4, 0x5C8C}, //979 #CJK UNIFIED IDEOGRAPH + {0xA7C5, 0x5DEB}, //980 #CJK UNIFIED IDEOGRAPH + {0xA7C6, 0x5E0C}, //981 #CJK UNIFIED IDEOGRAPH + {0xA7C7, 0x5E8F}, //982 #CJK UNIFIED IDEOGRAPH + {0xA7C8, 0x5E87}, //983 #CJK UNIFIED IDEOGRAPH + {0xA7C9, 0x5E8A}, //984 #CJK UNIFIED IDEOGRAPH + {0xA7CA, 0x5EF7}, //985 #CJK UNIFIED IDEOGRAPH + {0xA7CB, 0x5F04}, //986 #CJK UNIFIED IDEOGRAPH + {0xA7CC, 0x5F1F}, //987 #CJK UNIFIED IDEOGRAPH + {0xA7CD, 0x5F64}, //988 #CJK UNIFIED IDEOGRAPH + {0xA7CE, 0x5F62}, //989 #CJK UNIFIED IDEOGRAPH + {0xA7CF, 0x5F77}, //990 #CJK UNIFIED IDEOGRAPH + {0xA7D0, 0x5F79}, //991 #CJK UNIFIED IDEOGRAPH + {0xA7D1, 0x5FD8}, //992 #CJK UNIFIED IDEOGRAPH + {0xA7D2, 0x5FCC}, //993 #CJK UNIFIED IDEOGRAPH + {0xA7D3, 0x5FD7}, //994 #CJK UNIFIED IDEOGRAPH + {0xA7D4, 0x5FCD}, //995 #CJK UNIFIED IDEOGRAPH + {0xA7D5, 0x5FF1}, //996 #CJK UNIFIED IDEOGRAPH + {0xA7D6, 0x5FEB}, //997 #CJK UNIFIED IDEOGRAPH + {0xA7D7, 0x5FF8}, //998 #CJK UNIFIED IDEOGRAPH + {0xA7D8, 0x5FEA}, //999 #CJK UNIFIED IDEOGRAPH + {0xA7D9, 0x6212}, //1000 #CJK UNIFIED IDEOGRAPH + {0xA7DA, 0x6211}, //1001 #CJK UNIFIED IDEOGRAPH + {0xA7DB, 0x6284}, //1002 #CJK UNIFIED IDEOGRAPH + {0xA7DC, 0x6297}, //1003 #CJK UNIFIED IDEOGRAPH + {0xA7DD, 0x6296}, //1004 #CJK UNIFIED IDEOGRAPH + {0xA7DE, 0x6280}, //1005 #CJK UNIFIED IDEOGRAPH + {0xA7DF, 0x6276}, //1006 #CJK UNIFIED IDEOGRAPH + {0xA7E0, 0x6289}, //1007 #CJK UNIFIED IDEOGRAPH + {0xA7E1, 0x626D}, //1008 #CJK UNIFIED IDEOGRAPH + {0xA7E2, 0x628A}, //1009 #CJK UNIFIED IDEOGRAPH + {0xA7E3, 0x627C}, //1010 #CJK UNIFIED IDEOGRAPH + {0xA7E4, 0x627E}, //1011 #CJK UNIFIED IDEOGRAPH + {0xA7E5, 0x6279}, //1012 #CJK UNIFIED IDEOGRAPH + {0xA7E6, 0x6273}, //1013 #CJK UNIFIED IDEOGRAPH + {0xA7E7, 0x6292}, //1014 #CJK UNIFIED IDEOGRAPH + {0xA7E8, 0x626F}, //1015 #CJK UNIFIED IDEOGRAPH + {0xA7E9, 0x6298}, //1016 #CJK UNIFIED IDEOGRAPH + {0xA7EA, 0x626E}, //1017 #CJK UNIFIED IDEOGRAPH + {0xA7EB, 0x6295}, //1018 #CJK UNIFIED IDEOGRAPH + {0xA7EC, 0x6293}, //1019 #CJK UNIFIED IDEOGRAPH + {0xA7ED, 0x6291}, //1020 #CJK UNIFIED IDEOGRAPH + {0xA7EE, 0x6286}, //1021 #CJK UNIFIED IDEOGRAPH + {0xA7EF, 0x6539}, //1022 #CJK UNIFIED IDEOGRAPH + {0xA7F0, 0x653B}, //1023 #CJK UNIFIED IDEOGRAPH + {0xA7F1, 0x6538}, //1024 #CJK UNIFIED IDEOGRAPH + {0xA7F2, 0x65F1}, //1025 #CJK UNIFIED IDEOGRAPH + {0xA7F3, 0x66F4}, //1026 #CJK UNIFIED IDEOGRAPH + {0xA7F4, 0x675F}, //1027 #CJK UNIFIED IDEOGRAPH + {0xA7F5, 0x674E}, //1028 #CJK UNIFIED IDEOGRAPH + {0xA7F6, 0x674F}, //1029 #CJK UNIFIED IDEOGRAPH + {0xA7F7, 0x6750}, //1030 #CJK UNIFIED IDEOGRAPH + {0xA7F8, 0x6751}, //1031 #CJK UNIFIED IDEOGRAPH + {0xA7F9, 0x675C}, //1032 #CJK UNIFIED IDEOGRAPH + {0xA7FA, 0x6756}, //1033 #CJK UNIFIED IDEOGRAPH + {0xA7FB, 0x675E}, //1034 #CJK UNIFIED IDEOGRAPH + {0xA7FC, 0x6749}, //1035 #CJK UNIFIED IDEOGRAPH + {0xA7FD, 0x6746}, //1036 #CJK UNIFIED IDEOGRAPH + {0xA7FE, 0x6760}, //1037 #CJK UNIFIED IDEOGRAPH + {0xA840, 0x6753}, //1038 #CJK UNIFIED IDEOGRAPH + {0xA841, 0x6757}, //1039 #CJK UNIFIED IDEOGRAPH + {0xA842, 0x6B65}, //1040 #CJK UNIFIED IDEOGRAPH + {0xA843, 0x6BCF}, //1041 #CJK UNIFIED IDEOGRAPH + {0xA844, 0x6C42}, //1042 #CJK UNIFIED IDEOGRAPH + {0xA845, 0x6C5E}, //1043 #CJK UNIFIED IDEOGRAPH + {0xA846, 0x6C99}, //1044 #CJK UNIFIED IDEOGRAPH + {0xA847, 0x6C81}, //1045 #CJK UNIFIED IDEOGRAPH + {0xA848, 0x6C88}, //1046 #CJK UNIFIED IDEOGRAPH + {0xA849, 0x6C89}, //1047 #CJK UNIFIED IDEOGRAPH + {0xA84A, 0x6C85}, //1048 #CJK UNIFIED IDEOGRAPH + {0xA84B, 0x6C9B}, //1049 #CJK UNIFIED IDEOGRAPH + {0xA84C, 0x6C6A}, //1050 #CJK UNIFIED IDEOGRAPH + {0xA84D, 0x6C7A}, //1051 #CJK UNIFIED IDEOGRAPH + {0xA84E, 0x6C90}, //1052 #CJK UNIFIED IDEOGRAPH + {0xA84F, 0x6C70}, //1053 #CJK UNIFIED IDEOGRAPH + {0xA850, 0x6C8C}, //1054 #CJK UNIFIED IDEOGRAPH + {0xA851, 0x6C68}, //1055 #CJK UNIFIED IDEOGRAPH + {0xA852, 0x6C96}, //1056 #CJK UNIFIED IDEOGRAPH + {0xA853, 0x6C92}, //1057 #CJK UNIFIED IDEOGRAPH + {0xA854, 0x6C7D}, //1058 #CJK UNIFIED IDEOGRAPH + {0xA855, 0x6C83}, //1059 #CJK UNIFIED IDEOGRAPH + {0xA856, 0x6C72}, //1060 #CJK UNIFIED IDEOGRAPH + {0xA857, 0x6C7E}, //1061 #CJK UNIFIED IDEOGRAPH + {0xA858, 0x6C74}, //1062 #CJK UNIFIED IDEOGRAPH + {0xA859, 0x6C86}, //1063 #CJK UNIFIED IDEOGRAPH + {0xA85A, 0x6C76}, //1064 #CJK UNIFIED IDEOGRAPH + {0xA85B, 0x6C8D}, //1065 #CJK UNIFIED IDEOGRAPH + {0xA85C, 0x6C94}, //1066 #CJK UNIFIED IDEOGRAPH + {0xA85D, 0x6C98}, //1067 #CJK UNIFIED IDEOGRAPH + {0xA85E, 0x6C82}, //1068 #CJK UNIFIED IDEOGRAPH + {0xA85F, 0x7076}, //1069 #CJK UNIFIED IDEOGRAPH + {0xA860, 0x707C}, //1070 #CJK UNIFIED IDEOGRAPH + {0xA861, 0x707D}, //1071 #CJK UNIFIED IDEOGRAPH + {0xA862, 0x7078}, //1072 #CJK UNIFIED IDEOGRAPH + {0xA863, 0x7262}, //1073 #CJK UNIFIED IDEOGRAPH + {0xA864, 0x7261}, //1074 #CJK UNIFIED IDEOGRAPH + {0xA865, 0x7260}, //1075 #CJK UNIFIED IDEOGRAPH + {0xA866, 0x72C4}, //1076 #CJK UNIFIED IDEOGRAPH + {0xA867, 0x72C2}, //1077 #CJK UNIFIED IDEOGRAPH + {0xA868, 0x7396}, //1078 #CJK UNIFIED IDEOGRAPH + {0xA869, 0x752C}, //1079 #CJK UNIFIED IDEOGRAPH + {0xA86A, 0x752B}, //1080 #CJK UNIFIED IDEOGRAPH + {0xA86B, 0x7537}, //1081 #CJK UNIFIED IDEOGRAPH + {0xA86C, 0x7538}, //1082 #CJK UNIFIED IDEOGRAPH + {0xA86D, 0x7682}, //1083 #CJK UNIFIED IDEOGRAPH + {0xA86E, 0x76EF}, //1084 #CJK UNIFIED IDEOGRAPH + {0xA86F, 0x77E3}, //1085 #CJK UNIFIED IDEOGRAPH + {0xA870, 0x79C1}, //1086 #CJK UNIFIED IDEOGRAPH + {0xA871, 0x79C0}, //1087 #CJK UNIFIED IDEOGRAPH + {0xA872, 0x79BF}, //1088 #CJK UNIFIED IDEOGRAPH + {0xA873, 0x7A76}, //1089 #CJK UNIFIED IDEOGRAPH + {0xA874, 0x7CFB}, //1090 #CJK UNIFIED IDEOGRAPH + {0xA875, 0x7F55}, //1091 #CJK UNIFIED IDEOGRAPH + {0xA876, 0x8096}, //1092 #CJK UNIFIED IDEOGRAPH + {0xA877, 0x8093}, //1093 #CJK UNIFIED IDEOGRAPH + {0xA878, 0x809D}, //1094 #CJK UNIFIED IDEOGRAPH + {0xA879, 0x8098}, //1095 #CJK UNIFIED IDEOGRAPH + {0xA87A, 0x809B}, //1096 #CJK UNIFIED IDEOGRAPH + {0xA87B, 0x809A}, //1097 #CJK UNIFIED IDEOGRAPH + {0xA87C, 0x80B2}, //1098 #CJK UNIFIED IDEOGRAPH + {0xA87D, 0x826F}, //1099 #CJK UNIFIED IDEOGRAPH + {0xA87E, 0x8292}, //1100 #CJK UNIFIED IDEOGRAPH + {0xA8A1, 0x828B}, //1101 #CJK UNIFIED IDEOGRAPH + {0xA8A2, 0x828D}, //1102 #CJK UNIFIED IDEOGRAPH + {0xA8A3, 0x898B}, //1103 #CJK UNIFIED IDEOGRAPH + {0xA8A4, 0x89D2}, //1104 #CJK UNIFIED IDEOGRAPH + {0xA8A5, 0x8A00}, //1105 #CJK UNIFIED IDEOGRAPH + {0xA8A6, 0x8C37}, //1106 #CJK UNIFIED IDEOGRAPH + {0xA8A7, 0x8C46}, //1107 #CJK UNIFIED IDEOGRAPH + {0xA8A8, 0x8C55}, //1108 #CJK UNIFIED IDEOGRAPH + {0xA8A9, 0x8C9D}, //1109 #CJK UNIFIED IDEOGRAPH + {0xA8AA, 0x8D64}, //1110 #CJK UNIFIED IDEOGRAPH + {0xA8AB, 0x8D70}, //1111 #CJK UNIFIED IDEOGRAPH + {0xA8AC, 0x8DB3}, //1112 #CJK UNIFIED IDEOGRAPH + {0xA8AD, 0x8EAB}, //1113 #CJK UNIFIED IDEOGRAPH + {0xA8AE, 0x8ECA}, //1114 #CJK UNIFIED IDEOGRAPH + {0xA8AF, 0x8F9B}, //1115 #CJK UNIFIED IDEOGRAPH + {0xA8B0, 0x8FB0}, //1116 #CJK UNIFIED IDEOGRAPH + {0xA8B1, 0x8FC2}, //1117 #CJK UNIFIED IDEOGRAPH + {0xA8B2, 0x8FC6}, //1118 #CJK UNIFIED IDEOGRAPH + {0xA8B3, 0x8FC5}, //1119 #CJK UNIFIED IDEOGRAPH + {0xA8B4, 0x8FC4}, //1120 #CJK UNIFIED IDEOGRAPH + {0xA8B5, 0x5DE1}, //1121 #CJK UNIFIED IDEOGRAPH + {0xA8B6, 0x9091}, //1122 #CJK UNIFIED IDEOGRAPH + {0xA8B7, 0x90A2}, //1123 #CJK UNIFIED IDEOGRAPH + {0xA8B8, 0x90AA}, //1124 #CJK UNIFIED IDEOGRAPH + {0xA8B9, 0x90A6}, //1125 #CJK UNIFIED IDEOGRAPH + {0xA8BA, 0x90A3}, //1126 #CJK UNIFIED IDEOGRAPH + {0xA8BB, 0x9149}, //1127 #CJK UNIFIED IDEOGRAPH + {0xA8BC, 0x91C6}, //1128 #CJK UNIFIED IDEOGRAPH + {0xA8BD, 0x91CC}, //1129 #CJK UNIFIED IDEOGRAPH + {0xA8BE, 0x9632}, //1130 #CJK UNIFIED IDEOGRAPH + {0xA8BF, 0x962E}, //1131 #CJK UNIFIED IDEOGRAPH + {0xA8C0, 0x9631}, //1132 #CJK UNIFIED IDEOGRAPH + {0xA8C1, 0x962A}, //1133 #CJK UNIFIED IDEOGRAPH + {0xA8C2, 0x962C}, //1134 #CJK UNIFIED IDEOGRAPH + {0xA8C3, 0x4E26}, //1135 #CJK UNIFIED IDEOGRAPH + {0xA8C4, 0x4E56}, //1136 #CJK UNIFIED IDEOGRAPH + {0xA8C5, 0x4E73}, //1137 #CJK UNIFIED IDEOGRAPH + {0xA8C6, 0x4E8B}, //1138 #CJK UNIFIED IDEOGRAPH + {0xA8C7, 0x4E9B}, //1139 #CJK UNIFIED IDEOGRAPH + {0xA8C8, 0x4E9E}, //1140 #CJK UNIFIED IDEOGRAPH + {0xA8C9, 0x4EAB}, //1141 #CJK UNIFIED IDEOGRAPH + {0xA8CA, 0x4EAC}, //1142 #CJK UNIFIED IDEOGRAPH + {0xA8CB, 0x4F6F}, //1143 #CJK UNIFIED IDEOGRAPH + {0xA8CC, 0x4F9D}, //1144 #CJK UNIFIED IDEOGRAPH + {0xA8CD, 0x4F8D}, //1145 #CJK UNIFIED IDEOGRAPH + {0xA8CE, 0x4F73}, //1146 #CJK UNIFIED IDEOGRAPH + {0xA8CF, 0x4F7F}, //1147 #CJK UNIFIED IDEOGRAPH + {0xA8D0, 0x4F6C}, //1148 #CJK UNIFIED IDEOGRAPH + {0xA8D1, 0x4F9B}, //1149 #CJK UNIFIED IDEOGRAPH + {0xA8D2, 0x4F8B}, //1150 #CJK UNIFIED IDEOGRAPH + {0xA8D3, 0x4F86}, //1151 #CJK UNIFIED IDEOGRAPH + {0xA8D4, 0x4F83}, //1152 #CJK UNIFIED IDEOGRAPH + {0xA8D5, 0x4F70}, //1153 #CJK UNIFIED IDEOGRAPH + {0xA8D6, 0x4F75}, //1154 #CJK UNIFIED IDEOGRAPH + {0xA8D7, 0x4F88}, //1155 #CJK UNIFIED IDEOGRAPH + {0xA8D8, 0x4F69}, //1156 #CJK UNIFIED IDEOGRAPH + {0xA8D9, 0x4F7B}, //1157 #CJK UNIFIED IDEOGRAPH + {0xA8DA, 0x4F96}, //1158 #CJK UNIFIED IDEOGRAPH + {0xA8DB, 0x4F7E}, //1159 #CJK UNIFIED IDEOGRAPH + {0xA8DC, 0x4F8F}, //1160 #CJK UNIFIED IDEOGRAPH + {0xA8DD, 0x4F91}, //1161 #CJK UNIFIED IDEOGRAPH + {0xA8DE, 0x4F7A}, //1162 #CJK UNIFIED IDEOGRAPH + {0xA8DF, 0x5154}, //1163 #CJK UNIFIED IDEOGRAPH + {0xA8E0, 0x5152}, //1164 #CJK UNIFIED IDEOGRAPH + {0xA8E1, 0x5155}, //1165 #CJK UNIFIED IDEOGRAPH + {0xA8E2, 0x5169}, //1166 #CJK UNIFIED IDEOGRAPH + {0xA8E3, 0x5177}, //1167 #CJK UNIFIED IDEOGRAPH + {0xA8E4, 0x5176}, //1168 #CJK UNIFIED IDEOGRAPH + {0xA8E5, 0x5178}, //1169 #CJK UNIFIED IDEOGRAPH + {0xA8E6, 0x51BD}, //1170 #CJK UNIFIED IDEOGRAPH + {0xA8E7, 0x51FD}, //1171 #CJK UNIFIED IDEOGRAPH + {0xA8E8, 0x523B}, //1172 #CJK UNIFIED IDEOGRAPH + {0xA8E9, 0x5238}, //1173 #CJK UNIFIED IDEOGRAPH + {0xA8EA, 0x5237}, //1174 #CJK UNIFIED IDEOGRAPH + {0xA8EB, 0x523A}, //1175 #CJK UNIFIED IDEOGRAPH + {0xA8EC, 0x5230}, //1176 #CJK UNIFIED IDEOGRAPH + {0xA8ED, 0x522E}, //1177 #CJK UNIFIED IDEOGRAPH + {0xA8EE, 0x5236}, //1178 #CJK UNIFIED IDEOGRAPH + {0xA8EF, 0x5241}, //1179 #CJK UNIFIED IDEOGRAPH + {0xA8F0, 0x52BE}, //1180 #CJK UNIFIED IDEOGRAPH + {0xA8F1, 0x52BB}, //1181 #CJK UNIFIED IDEOGRAPH + {0xA8F2, 0x5352}, //1182 #CJK UNIFIED IDEOGRAPH + {0xA8F3, 0x5354}, //1183 #CJK UNIFIED IDEOGRAPH + {0xA8F4, 0x5353}, //1184 #CJK UNIFIED IDEOGRAPH + {0xA8F5, 0x5351}, //1185 #CJK UNIFIED IDEOGRAPH + {0xA8F6, 0x5366}, //1186 #CJK UNIFIED IDEOGRAPH + {0xA8F7, 0x5377}, //1187 #CJK UNIFIED IDEOGRAPH + {0xA8F8, 0x5378}, //1188 #CJK UNIFIED IDEOGRAPH + {0xA8F9, 0x5379}, //1189 #CJK UNIFIED IDEOGRAPH + {0xA8FA, 0x53D6}, //1190 #CJK UNIFIED IDEOGRAPH + {0xA8FB, 0x53D4}, //1191 #CJK UNIFIED IDEOGRAPH + {0xA8FC, 0x53D7}, //1192 #CJK UNIFIED IDEOGRAPH + {0xA8FD, 0x5473}, //1193 #CJK UNIFIED IDEOGRAPH + {0xA8FE, 0x5475}, //1194 #CJK UNIFIED IDEOGRAPH + {0xA940, 0x5496}, //1195 #CJK UNIFIED IDEOGRAPH + {0xA941, 0x5478}, //1196 #CJK UNIFIED IDEOGRAPH + {0xA942, 0x5495}, //1197 #CJK UNIFIED IDEOGRAPH + {0xA943, 0x5480}, //1198 #CJK UNIFIED IDEOGRAPH + {0xA944, 0x547B}, //1199 #CJK UNIFIED IDEOGRAPH + {0xA945, 0x5477}, //1200 #CJK UNIFIED IDEOGRAPH + {0xA946, 0x5484}, //1201 #CJK UNIFIED IDEOGRAPH + {0xA947, 0x5492}, //1202 #CJK UNIFIED IDEOGRAPH + {0xA948, 0x5486}, //1203 #CJK UNIFIED IDEOGRAPH + {0xA949, 0x547C}, //1204 #CJK UNIFIED IDEOGRAPH + {0xA94A, 0x5490}, //1205 #CJK UNIFIED IDEOGRAPH + {0xA94B, 0x5471}, //1206 #CJK UNIFIED IDEOGRAPH + {0xA94C, 0x5476}, //1207 #CJK UNIFIED IDEOGRAPH + {0xA94D, 0x548C}, //1208 #CJK UNIFIED IDEOGRAPH + {0xA94E, 0x549A}, //1209 #CJK UNIFIED IDEOGRAPH + {0xA94F, 0x5462}, //1210 #CJK UNIFIED IDEOGRAPH + {0xA950, 0x5468}, //1211 #CJK UNIFIED IDEOGRAPH + {0xA951, 0x548B}, //1212 #CJK UNIFIED IDEOGRAPH + {0xA952, 0x547D}, //1213 #CJK UNIFIED IDEOGRAPH + {0xA953, 0x548E}, //1214 #CJK UNIFIED IDEOGRAPH + {0xA954, 0x56FA}, //1215 #CJK UNIFIED IDEOGRAPH + {0xA955, 0x5783}, //1216 #CJK UNIFIED IDEOGRAPH + {0xA956, 0x5777}, //1217 #CJK UNIFIED IDEOGRAPH + {0xA957, 0x576A}, //1218 #CJK UNIFIED IDEOGRAPH + {0xA958, 0x5769}, //1219 #CJK UNIFIED IDEOGRAPH + {0xA959, 0x5761}, //1220 #CJK UNIFIED IDEOGRAPH + {0xA95A, 0x5766}, //1221 #CJK UNIFIED IDEOGRAPH + {0xA95B, 0x5764}, //1222 #CJK UNIFIED IDEOGRAPH + {0xA95C, 0x577C}, //1223 #CJK UNIFIED IDEOGRAPH + {0xA95D, 0x591C}, //1224 #CJK UNIFIED IDEOGRAPH + {0xA95E, 0x5949}, //1225 #CJK UNIFIED IDEOGRAPH + {0xA95F, 0x5947}, //1226 #CJK UNIFIED IDEOGRAPH + {0xA960, 0x5948}, //1227 #CJK UNIFIED IDEOGRAPH + {0xA961, 0x5944}, //1228 #CJK UNIFIED IDEOGRAPH + {0xA962, 0x5954}, //1229 #CJK UNIFIED IDEOGRAPH + {0xA963, 0x59BE}, //1230 #CJK UNIFIED IDEOGRAPH + {0xA964, 0x59BB}, //1231 #CJK UNIFIED IDEOGRAPH + {0xA965, 0x59D4}, //1232 #CJK UNIFIED IDEOGRAPH + {0xA966, 0x59B9}, //1233 #CJK UNIFIED IDEOGRAPH + {0xA967, 0x59AE}, //1234 #CJK UNIFIED IDEOGRAPH + {0xA968, 0x59D1}, //1235 #CJK UNIFIED IDEOGRAPH + {0xA969, 0x59C6}, //1236 #CJK UNIFIED IDEOGRAPH + {0xA96A, 0x59D0}, //1237 #CJK UNIFIED IDEOGRAPH + {0xA96B, 0x59CD}, //1238 #CJK UNIFIED IDEOGRAPH + {0xA96C, 0x59CB}, //1239 #CJK UNIFIED IDEOGRAPH + {0xA96D, 0x59D3}, //1240 #CJK UNIFIED IDEOGRAPH + {0xA96E, 0x59CA}, //1241 #CJK UNIFIED IDEOGRAPH + {0xA96F, 0x59AF}, //1242 #CJK UNIFIED IDEOGRAPH + {0xA970, 0x59B3}, //1243 #CJK UNIFIED IDEOGRAPH + {0xA971, 0x59D2}, //1244 #CJK UNIFIED IDEOGRAPH + {0xA972, 0x59C5}, //1245 #CJK UNIFIED IDEOGRAPH + {0xA973, 0x5B5F}, //1246 #CJK UNIFIED IDEOGRAPH + {0xA974, 0x5B64}, //1247 #CJK UNIFIED IDEOGRAPH + {0xA975, 0x5B63}, //1248 #CJK UNIFIED IDEOGRAPH + {0xA976, 0x5B97}, //1249 #CJK UNIFIED IDEOGRAPH + {0xA977, 0x5B9A}, //1250 #CJK UNIFIED IDEOGRAPH + {0xA978, 0x5B98}, //1251 #CJK UNIFIED IDEOGRAPH + {0xA979, 0x5B9C}, //1252 #CJK UNIFIED IDEOGRAPH + {0xA97A, 0x5B99}, //1253 #CJK UNIFIED IDEOGRAPH + {0xA97B, 0x5B9B}, //1254 #CJK UNIFIED IDEOGRAPH + {0xA97C, 0x5C1A}, //1255 #CJK UNIFIED IDEOGRAPH + {0xA97D, 0x5C48}, //1256 #CJK UNIFIED IDEOGRAPH + {0xA97E, 0x5C45}, //1257 #CJK UNIFIED IDEOGRAPH + {0xA9A1, 0x5C46}, //1258 #CJK UNIFIED IDEOGRAPH + {0xA9A2, 0x5CB7}, //1259 #CJK UNIFIED IDEOGRAPH + {0xA9A3, 0x5CA1}, //1260 #CJK UNIFIED IDEOGRAPH + {0xA9A4, 0x5CB8}, //1261 #CJK UNIFIED IDEOGRAPH + {0xA9A5, 0x5CA9}, //1262 #CJK UNIFIED IDEOGRAPH + {0xA9A6, 0x5CAB}, //1263 #CJK UNIFIED IDEOGRAPH + {0xA9A7, 0x5CB1}, //1264 #CJK UNIFIED IDEOGRAPH + {0xA9A8, 0x5CB3}, //1265 #CJK UNIFIED IDEOGRAPH + {0xA9A9, 0x5E18}, //1266 #CJK UNIFIED IDEOGRAPH + {0xA9AA, 0x5E1A}, //1267 #CJK UNIFIED IDEOGRAPH + {0xA9AB, 0x5E16}, //1268 #CJK UNIFIED IDEOGRAPH + {0xA9AC, 0x5E15}, //1269 #CJK UNIFIED IDEOGRAPH + {0xA9AD, 0x5E1B}, //1270 #CJK UNIFIED IDEOGRAPH + {0xA9AE, 0x5E11}, //1271 #CJK UNIFIED IDEOGRAPH + {0xA9AF, 0x5E78}, //1272 #CJK UNIFIED IDEOGRAPH + {0xA9B0, 0x5E9A}, //1273 #CJK UNIFIED IDEOGRAPH + {0xA9B1, 0x5E97}, //1274 #CJK UNIFIED IDEOGRAPH + {0xA9B2, 0x5E9C}, //1275 #CJK UNIFIED IDEOGRAPH + {0xA9B3, 0x5E95}, //1276 #CJK UNIFIED IDEOGRAPH + {0xA9B4, 0x5E96}, //1277 #CJK UNIFIED IDEOGRAPH + {0xA9B5, 0x5EF6}, //1278 #CJK UNIFIED IDEOGRAPH + {0xA9B6, 0x5F26}, //1279 #CJK UNIFIED IDEOGRAPH + {0xA9B7, 0x5F27}, //1280 #CJK UNIFIED IDEOGRAPH + {0xA9B8, 0x5F29}, //1281 #CJK UNIFIED IDEOGRAPH + {0xA9B9, 0x5F80}, //1282 #CJK UNIFIED IDEOGRAPH + {0xA9BA, 0x5F81}, //1283 #CJK UNIFIED IDEOGRAPH + {0xA9BB, 0x5F7F}, //1284 #CJK UNIFIED IDEOGRAPH + {0xA9BC, 0x5F7C}, //1285 #CJK UNIFIED IDEOGRAPH + {0xA9BD, 0x5FDD}, //1286 #CJK UNIFIED IDEOGRAPH + {0xA9BE, 0x5FE0}, //1287 #CJK UNIFIED IDEOGRAPH + {0xA9BF, 0x5FFD}, //1288 #CJK UNIFIED IDEOGRAPH + {0xA9C0, 0x5FF5}, //1289 #CJK UNIFIED IDEOGRAPH + {0xA9C1, 0x5FFF}, //1290 #CJK UNIFIED IDEOGRAPH + {0xA9C2, 0x600F}, //1291 #CJK UNIFIED IDEOGRAPH + {0xA9C3, 0x6014}, //1292 #CJK UNIFIED IDEOGRAPH + {0xA9C4, 0x602F}, //1293 #CJK UNIFIED IDEOGRAPH + {0xA9C5, 0x6035}, //1294 #CJK UNIFIED IDEOGRAPH + {0xA9C6, 0x6016}, //1295 #CJK UNIFIED IDEOGRAPH + {0xA9C7, 0x602A}, //1296 #CJK UNIFIED IDEOGRAPH + {0xA9C8, 0x6015}, //1297 #CJK UNIFIED IDEOGRAPH + {0xA9C9, 0x6021}, //1298 #CJK UNIFIED IDEOGRAPH + {0xA9CA, 0x6027}, //1299 #CJK UNIFIED IDEOGRAPH + {0xA9CB, 0x6029}, //1300 #CJK UNIFIED IDEOGRAPH + {0xA9CC, 0x602B}, //1301 #CJK UNIFIED IDEOGRAPH + {0xA9CD, 0x601B}, //1302 #CJK UNIFIED IDEOGRAPH + {0xA9CE, 0x6216}, //1303 #CJK UNIFIED IDEOGRAPH + {0xA9CF, 0x6215}, //1304 #CJK UNIFIED IDEOGRAPH + {0xA9D0, 0x623F}, //1305 #CJK UNIFIED IDEOGRAPH + {0xA9D1, 0x623E}, //1306 #CJK UNIFIED IDEOGRAPH + {0xA9D2, 0x6240}, //1307 #CJK UNIFIED IDEOGRAPH + {0xA9D3, 0x627F}, //1308 #CJK UNIFIED IDEOGRAPH + {0xA9D4, 0x62C9}, //1309 #CJK UNIFIED IDEOGRAPH + {0xA9D5, 0x62CC}, //1310 #CJK UNIFIED IDEOGRAPH + {0xA9D6, 0x62C4}, //1311 #CJK UNIFIED IDEOGRAPH + {0xA9D7, 0x62BF}, //1312 #CJK UNIFIED IDEOGRAPH + {0xA9D8, 0x62C2}, //1313 #CJK UNIFIED IDEOGRAPH + {0xA9D9, 0x62B9}, //1314 #CJK UNIFIED IDEOGRAPH + {0xA9DA, 0x62D2}, //1315 #CJK UNIFIED IDEOGRAPH + {0xA9DB, 0x62DB}, //1316 #CJK UNIFIED IDEOGRAPH + {0xA9DC, 0x62AB}, //1317 #CJK UNIFIED IDEOGRAPH + {0xA9DD, 0x62D3}, //1318 #CJK UNIFIED IDEOGRAPH + {0xA9DE, 0x62D4}, //1319 #CJK UNIFIED IDEOGRAPH + {0xA9DF, 0x62CB}, //1320 #CJK UNIFIED IDEOGRAPH + {0xA9E0, 0x62C8}, //1321 #CJK UNIFIED IDEOGRAPH + {0xA9E1, 0x62A8}, //1322 #CJK UNIFIED IDEOGRAPH + {0xA9E2, 0x62BD}, //1323 #CJK UNIFIED IDEOGRAPH + {0xA9E3, 0x62BC}, //1324 #CJK UNIFIED IDEOGRAPH + {0xA9E4, 0x62D0}, //1325 #CJK UNIFIED IDEOGRAPH + {0xA9E5, 0x62D9}, //1326 #CJK UNIFIED IDEOGRAPH + {0xA9E6, 0x62C7}, //1327 #CJK UNIFIED IDEOGRAPH + {0xA9E7, 0x62CD}, //1328 #CJK UNIFIED IDEOGRAPH + {0xA9E8, 0x62B5}, //1329 #CJK UNIFIED IDEOGRAPH + {0xA9E9, 0x62DA}, //1330 #CJK UNIFIED IDEOGRAPH + {0xA9EA, 0x62B1}, //1331 #CJK UNIFIED IDEOGRAPH + {0xA9EB, 0x62D8}, //1332 #CJK UNIFIED IDEOGRAPH + {0xA9EC, 0x62D6}, //1333 #CJK UNIFIED IDEOGRAPH + {0xA9ED, 0x62D7}, //1334 #CJK UNIFIED IDEOGRAPH + {0xA9EE, 0x62C6}, //1335 #CJK UNIFIED IDEOGRAPH + {0xA9EF, 0x62AC}, //1336 #CJK UNIFIED IDEOGRAPH + {0xA9F0, 0x62CE}, //1337 #CJK UNIFIED IDEOGRAPH + {0xA9F1, 0x653E}, //1338 #CJK UNIFIED IDEOGRAPH + {0xA9F2, 0x65A7}, //1339 #CJK UNIFIED IDEOGRAPH + {0xA9F3, 0x65BC}, //1340 #CJK UNIFIED IDEOGRAPH + {0xA9F4, 0x65FA}, //1341 #CJK UNIFIED IDEOGRAPH + {0xA9F5, 0x6614}, //1342 #CJK UNIFIED IDEOGRAPH + {0xA9F6, 0x6613}, //1343 #CJK UNIFIED IDEOGRAPH + {0xA9F7, 0x660C}, //1344 #CJK UNIFIED IDEOGRAPH + {0xA9F8, 0x6606}, //1345 #CJK UNIFIED IDEOGRAPH + {0xA9F9, 0x6602}, //1346 #CJK UNIFIED IDEOGRAPH + {0xA9FA, 0x660E}, //1347 #CJK UNIFIED IDEOGRAPH + {0xA9FB, 0x6600}, //1348 #CJK UNIFIED IDEOGRAPH + {0xA9FC, 0x660F}, //1349 #CJK UNIFIED IDEOGRAPH + {0xA9FD, 0x6615}, //1350 #CJK UNIFIED IDEOGRAPH + {0xA9FE, 0x660A}, //1351 #CJK UNIFIED IDEOGRAPH + {0xAA40, 0x6607}, //1352 #CJK UNIFIED IDEOGRAPH + {0xAA41, 0x670D}, //1353 #CJK UNIFIED IDEOGRAPH + {0xAA42, 0x670B}, //1354 #CJK UNIFIED IDEOGRAPH + {0xAA43, 0x676D}, //1355 #CJK UNIFIED IDEOGRAPH + {0xAA44, 0x678B}, //1356 #CJK UNIFIED IDEOGRAPH + {0xAA45, 0x6795}, //1357 #CJK UNIFIED IDEOGRAPH + {0xAA46, 0x6771}, //1358 #CJK UNIFIED IDEOGRAPH + {0xAA47, 0x679C}, //1359 #CJK UNIFIED IDEOGRAPH + {0xAA48, 0x6773}, //1360 #CJK UNIFIED IDEOGRAPH + {0xAA49, 0x6777}, //1361 #CJK UNIFIED IDEOGRAPH + {0xAA4A, 0x6787}, //1362 #CJK UNIFIED IDEOGRAPH + {0xAA4B, 0x679D}, //1363 #CJK UNIFIED IDEOGRAPH + {0xAA4C, 0x6797}, //1364 #CJK UNIFIED IDEOGRAPH + {0xAA4D, 0x676F}, //1365 #CJK UNIFIED IDEOGRAPH + {0xAA4E, 0x6770}, //1366 #CJK UNIFIED IDEOGRAPH + {0xAA4F, 0x677F}, //1367 #CJK UNIFIED IDEOGRAPH + {0xAA50, 0x6789}, //1368 #CJK UNIFIED IDEOGRAPH + {0xAA51, 0x677E}, //1369 #CJK UNIFIED IDEOGRAPH + {0xAA52, 0x6790}, //1370 #CJK UNIFIED IDEOGRAPH + {0xAA53, 0x6775}, //1371 #CJK UNIFIED IDEOGRAPH + {0xAA54, 0x679A}, //1372 #CJK UNIFIED IDEOGRAPH + {0xAA55, 0x6793}, //1373 #CJK UNIFIED IDEOGRAPH + {0xAA56, 0x677C}, //1374 #CJK UNIFIED IDEOGRAPH + {0xAA57, 0x676A}, //1375 #CJK UNIFIED IDEOGRAPH + {0xAA58, 0x6772}, //1376 #CJK UNIFIED IDEOGRAPH + {0xAA59, 0x6B23}, //1377 #CJK UNIFIED IDEOGRAPH + {0xAA5A, 0x6B66}, //1378 #CJK UNIFIED IDEOGRAPH + {0xAA5B, 0x6B67}, //1379 #CJK UNIFIED IDEOGRAPH + {0xAA5C, 0x6B7F}, //1380 #CJK UNIFIED IDEOGRAPH + {0xAA5D, 0x6C13}, //1381 #CJK UNIFIED IDEOGRAPH + {0xAA5E, 0x6C1B}, //1382 #CJK UNIFIED IDEOGRAPH + {0xAA5F, 0x6CE3}, //1383 #CJK UNIFIED IDEOGRAPH + {0xAA60, 0x6CE8}, //1384 #CJK UNIFIED IDEOGRAPH + {0xAA61, 0x6CF3}, //1385 #CJK UNIFIED IDEOGRAPH + {0xAA62, 0x6CB1}, //1386 #CJK UNIFIED IDEOGRAPH + {0xAA63, 0x6CCC}, //1387 #CJK UNIFIED IDEOGRAPH + {0xAA64, 0x6CE5}, //1388 #CJK UNIFIED IDEOGRAPH + {0xAA65, 0x6CB3}, //1389 #CJK UNIFIED IDEOGRAPH + {0xAA66, 0x6CBD}, //1390 #CJK UNIFIED IDEOGRAPH + {0xAA67, 0x6CBE}, //1391 #CJK UNIFIED IDEOGRAPH + {0xAA68, 0x6CBC}, //1392 #CJK UNIFIED IDEOGRAPH + {0xAA69, 0x6CE2}, //1393 #CJK UNIFIED IDEOGRAPH + {0xAA6A, 0x6CAB}, //1394 #CJK UNIFIED IDEOGRAPH + {0xAA6B, 0x6CD5}, //1395 #CJK UNIFIED IDEOGRAPH + {0xAA6C, 0x6CD3}, //1396 #CJK UNIFIED IDEOGRAPH + {0xAA6D, 0x6CB8}, //1397 #CJK UNIFIED IDEOGRAPH + {0xAA6E, 0x6CC4}, //1398 #CJK UNIFIED IDEOGRAPH + {0xAA6F, 0x6CB9}, //1399 #CJK UNIFIED IDEOGRAPH + {0xAA70, 0x6CC1}, //1400 #CJK UNIFIED IDEOGRAPH + {0xAA71, 0x6CAE}, //1401 #CJK UNIFIED IDEOGRAPH + {0xAA72, 0x6CD7}, //1402 #CJK UNIFIED IDEOGRAPH + {0xAA73, 0x6CC5}, //1403 #CJK UNIFIED IDEOGRAPH + {0xAA74, 0x6CF1}, //1404 #CJK UNIFIED IDEOGRAPH + {0xAA75, 0x6CBF}, //1405 #CJK UNIFIED IDEOGRAPH + {0xAA76, 0x6CBB}, //1406 #CJK UNIFIED IDEOGRAPH + {0xAA77, 0x6CE1}, //1407 #CJK UNIFIED IDEOGRAPH + {0xAA78, 0x6CDB}, //1408 #CJK UNIFIED IDEOGRAPH + {0xAA79, 0x6CCA}, //1409 #CJK UNIFIED IDEOGRAPH + {0xAA7A, 0x6CAC}, //1410 #CJK UNIFIED IDEOGRAPH + {0xAA7B, 0x6CEF}, //1411 #CJK UNIFIED IDEOGRAPH + {0xAA7C, 0x6CDC}, //1412 #CJK UNIFIED IDEOGRAPH + {0xAA7D, 0x6CD6}, //1413 #CJK UNIFIED IDEOGRAPH + {0xAA7E, 0x6CE0}, //1414 #CJK UNIFIED IDEOGRAPH + {0xAAA1, 0x7095}, //1415 #CJK UNIFIED IDEOGRAPH + {0xAAA2, 0x708E}, //1416 #CJK UNIFIED IDEOGRAPH + {0xAAA3, 0x7092}, //1417 #CJK UNIFIED IDEOGRAPH + {0xAAA4, 0x708A}, //1418 #CJK UNIFIED IDEOGRAPH + {0xAAA5, 0x7099}, //1419 #CJK UNIFIED IDEOGRAPH + {0xAAA6, 0x722C}, //1420 #CJK UNIFIED IDEOGRAPH + {0xAAA7, 0x722D}, //1421 #CJK UNIFIED IDEOGRAPH + {0xAAA8, 0x7238}, //1422 #CJK UNIFIED IDEOGRAPH + {0xAAA9, 0x7248}, //1423 #CJK UNIFIED IDEOGRAPH + {0xAAAA, 0x7267}, //1424 #CJK UNIFIED IDEOGRAPH + {0xAAAB, 0x7269}, //1425 #CJK UNIFIED IDEOGRAPH + {0xAAAC, 0x72C0}, //1426 #CJK UNIFIED IDEOGRAPH + {0xAAAD, 0x72CE}, //1427 #CJK UNIFIED IDEOGRAPH + {0xAAAE, 0x72D9}, //1428 #CJK UNIFIED IDEOGRAPH + {0xAAAF, 0x72D7}, //1429 #CJK UNIFIED IDEOGRAPH + {0xAAB0, 0x72D0}, //1430 #CJK UNIFIED IDEOGRAPH + {0xAAB1, 0x73A9}, //1431 #CJK UNIFIED IDEOGRAPH + {0xAAB2, 0x73A8}, //1432 #CJK UNIFIED IDEOGRAPH + {0xAAB3, 0x739F}, //1433 #CJK UNIFIED IDEOGRAPH + {0xAAB4, 0x73AB}, //1434 #CJK UNIFIED IDEOGRAPH + {0xAAB5, 0x73A5}, //1435 #CJK UNIFIED IDEOGRAPH + {0xAAB6, 0x753D}, //1436 #CJK UNIFIED IDEOGRAPH + {0xAAB7, 0x759D}, //1437 #CJK UNIFIED IDEOGRAPH + {0xAAB8, 0x7599}, //1438 #CJK UNIFIED IDEOGRAPH + {0xAAB9, 0x759A}, //1439 #CJK UNIFIED IDEOGRAPH + {0xAABA, 0x7684}, //1440 #CJK UNIFIED IDEOGRAPH + {0xAABB, 0x76C2}, //1441 #CJK UNIFIED IDEOGRAPH + {0xAABC, 0x76F2}, //1442 #CJK UNIFIED IDEOGRAPH + {0xAABD, 0x76F4}, //1443 #CJK UNIFIED IDEOGRAPH + {0xAABE, 0x77E5}, //1444 #CJK UNIFIED IDEOGRAPH + {0xAABF, 0x77FD}, //1445 #CJK UNIFIED IDEOGRAPH + {0xAAC0, 0x793E}, //1446 #CJK UNIFIED IDEOGRAPH + {0xAAC1, 0x7940}, //1447 #CJK UNIFIED IDEOGRAPH + {0xAAC2, 0x7941}, //1448 #CJK UNIFIED IDEOGRAPH + {0xAAC3, 0x79C9}, //1449 #CJK UNIFIED IDEOGRAPH + {0xAAC4, 0x79C8}, //1450 #CJK UNIFIED IDEOGRAPH + {0xAAC5, 0x7A7A}, //1451 #CJK UNIFIED IDEOGRAPH + {0xAAC6, 0x7A79}, //1452 #CJK UNIFIED IDEOGRAPH + {0xAAC7, 0x7AFA}, //1453 #CJK UNIFIED IDEOGRAPH + {0xAAC8, 0x7CFE}, //1454 #CJK UNIFIED IDEOGRAPH + {0xAAC9, 0x7F54}, //1455 #CJK UNIFIED IDEOGRAPH + {0xAACA, 0x7F8C}, //1456 #CJK UNIFIED IDEOGRAPH + {0xAACB, 0x7F8B}, //1457 #CJK UNIFIED IDEOGRAPH + {0xAACC, 0x8005}, //1458 #CJK UNIFIED IDEOGRAPH + {0xAACD, 0x80BA}, //1459 #CJK UNIFIED IDEOGRAPH + {0xAACE, 0x80A5}, //1460 #CJK UNIFIED IDEOGRAPH + {0xAACF, 0x80A2}, //1461 #CJK UNIFIED IDEOGRAPH + {0xAAD0, 0x80B1}, //1462 #CJK UNIFIED IDEOGRAPH + {0xAAD1, 0x80A1}, //1463 #CJK UNIFIED IDEOGRAPH + {0xAAD2, 0x80AB}, //1464 #CJK UNIFIED IDEOGRAPH + {0xAAD3, 0x80A9}, //1465 #CJK UNIFIED IDEOGRAPH + {0xAAD4, 0x80B4}, //1466 #CJK UNIFIED IDEOGRAPH + {0xAAD5, 0x80AA}, //1467 #CJK UNIFIED IDEOGRAPH + {0xAAD6, 0x80AF}, //1468 #CJK UNIFIED IDEOGRAPH + {0xAAD7, 0x81E5}, //1469 #CJK UNIFIED IDEOGRAPH + {0xAAD8, 0x81FE}, //1470 #CJK UNIFIED IDEOGRAPH + {0xAAD9, 0x820D}, //1471 #CJK UNIFIED IDEOGRAPH + {0xAADA, 0x82B3}, //1472 #CJK UNIFIED IDEOGRAPH + {0xAADB, 0x829D}, //1473 #CJK UNIFIED IDEOGRAPH + {0xAADC, 0x8299}, //1474 #CJK UNIFIED IDEOGRAPH + {0xAADD, 0x82AD}, //1475 #CJK UNIFIED IDEOGRAPH + {0xAADE, 0x82BD}, //1476 #CJK UNIFIED IDEOGRAPH + {0xAADF, 0x829F}, //1477 #CJK UNIFIED IDEOGRAPH + {0xAAE0, 0x82B9}, //1478 #CJK UNIFIED IDEOGRAPH + {0xAAE1, 0x82B1}, //1479 #CJK UNIFIED IDEOGRAPH + {0xAAE2, 0x82AC}, //1480 #CJK UNIFIED IDEOGRAPH + {0xAAE3, 0x82A5}, //1481 #CJK UNIFIED IDEOGRAPH + {0xAAE4, 0x82AF}, //1482 #CJK UNIFIED IDEOGRAPH + {0xAAE5, 0x82B8}, //1483 #CJK UNIFIED IDEOGRAPH + {0xAAE6, 0x82A3}, //1484 #CJK UNIFIED IDEOGRAPH + {0xAAE7, 0x82B0}, //1485 #CJK UNIFIED IDEOGRAPH + {0xAAE8, 0x82BE}, //1486 #CJK UNIFIED IDEOGRAPH + {0xAAE9, 0x82B7}, //1487 #CJK UNIFIED IDEOGRAPH + {0xAAEA, 0x864E}, //1488 #CJK UNIFIED IDEOGRAPH + {0xAAEB, 0x8671}, //1489 #CJK UNIFIED IDEOGRAPH + {0xAAEC, 0x521D}, //1490 #CJK UNIFIED IDEOGRAPH + {0xAAED, 0x8868}, //1491 #CJK UNIFIED IDEOGRAPH + {0xAAEE, 0x8ECB}, //1492 #CJK UNIFIED IDEOGRAPH + {0xAAEF, 0x8FCE}, //1493 #CJK UNIFIED IDEOGRAPH + {0xAAF0, 0x8FD4}, //1494 #CJK UNIFIED IDEOGRAPH + {0xAAF1, 0x8FD1}, //1495 #CJK UNIFIED IDEOGRAPH + {0xAAF2, 0x90B5}, //1496 #CJK UNIFIED IDEOGRAPH + {0xAAF3, 0x90B8}, //1497 #CJK UNIFIED IDEOGRAPH + {0xAAF4, 0x90B1}, //1498 #CJK UNIFIED IDEOGRAPH + {0xAAF5, 0x90B6}, //1499 #CJK UNIFIED IDEOGRAPH + {0xAAF6, 0x91C7}, //1500 #CJK UNIFIED IDEOGRAPH + {0xAAF7, 0x91D1}, //1501 #CJK UNIFIED IDEOGRAPH + {0xAAF8, 0x9577}, //1502 #CJK UNIFIED IDEOGRAPH + {0xAAF9, 0x9580}, //1503 #CJK UNIFIED IDEOGRAPH + {0xAAFA, 0x961C}, //1504 #CJK UNIFIED IDEOGRAPH + {0xAAFB, 0x9640}, //1505 #CJK UNIFIED IDEOGRAPH + {0xAAFC, 0x963F}, //1506 #CJK UNIFIED IDEOGRAPH + {0xAAFD, 0x963B}, //1507 #CJK UNIFIED IDEOGRAPH + {0xAAFE, 0x9644}, //1508 #CJK UNIFIED IDEOGRAPH + {0xAB40, 0x9642}, //1509 #CJK UNIFIED IDEOGRAPH + {0xAB41, 0x96B9}, //1510 #CJK UNIFIED IDEOGRAPH + {0xAB42, 0x96E8}, //1511 #CJK UNIFIED IDEOGRAPH + {0xAB43, 0x9752}, //1512 #CJK UNIFIED IDEOGRAPH + {0xAB44, 0x975E}, //1513 #CJK UNIFIED IDEOGRAPH + {0xAB45, 0x4E9F}, //1514 #CJK UNIFIED IDEOGRAPH + {0xAB46, 0x4EAD}, //1515 #CJK UNIFIED IDEOGRAPH + {0xAB47, 0x4EAE}, //1516 #CJK UNIFIED IDEOGRAPH + {0xAB48, 0x4FE1}, //1517 #CJK UNIFIED IDEOGRAPH + {0xAB49, 0x4FB5}, //1518 #CJK UNIFIED IDEOGRAPH + {0xAB4A, 0x4FAF}, //1519 #CJK UNIFIED IDEOGRAPH + {0xAB4B, 0x4FBF}, //1520 #CJK UNIFIED IDEOGRAPH + {0xAB4C, 0x4FE0}, //1521 #CJK UNIFIED IDEOGRAPH + {0xAB4D, 0x4FD1}, //1522 #CJK UNIFIED IDEOGRAPH + {0xAB4E, 0x4FCF}, //1523 #CJK UNIFIED IDEOGRAPH + {0xAB4F, 0x4FDD}, //1524 #CJK UNIFIED IDEOGRAPH + {0xAB50, 0x4FC3}, //1525 #CJK UNIFIED IDEOGRAPH + {0xAB51, 0x4FB6}, //1526 #CJK UNIFIED IDEOGRAPH + {0xAB52, 0x4FD8}, //1527 #CJK UNIFIED IDEOGRAPH + {0xAB53, 0x4FDF}, //1528 #CJK UNIFIED IDEOGRAPH + {0xAB54, 0x4FCA}, //1529 #CJK UNIFIED IDEOGRAPH + {0xAB55, 0x4FD7}, //1530 #CJK UNIFIED IDEOGRAPH + {0xAB56, 0x4FAE}, //1531 #CJK UNIFIED IDEOGRAPH + {0xAB57, 0x4FD0}, //1532 #CJK UNIFIED IDEOGRAPH + {0xAB58, 0x4FC4}, //1533 #CJK UNIFIED IDEOGRAPH + {0xAB59, 0x4FC2}, //1534 #CJK UNIFIED IDEOGRAPH + {0xAB5A, 0x4FDA}, //1535 #CJK UNIFIED IDEOGRAPH + {0xAB5B, 0x4FCE}, //1536 #CJK UNIFIED IDEOGRAPH + {0xAB5C, 0x4FDE}, //1537 #CJK UNIFIED IDEOGRAPH + {0xAB5D, 0x4FB7}, //1538 #CJK UNIFIED IDEOGRAPH + {0xAB5E, 0x5157}, //1539 #CJK UNIFIED IDEOGRAPH + {0xAB5F, 0x5192}, //1540 #CJK UNIFIED IDEOGRAPH + {0xAB60, 0x5191}, //1541 #CJK UNIFIED IDEOGRAPH + {0xAB61, 0x51A0}, //1542 #CJK UNIFIED IDEOGRAPH + {0xAB62, 0x524E}, //1543 #CJK UNIFIED IDEOGRAPH + {0xAB63, 0x5243}, //1544 #CJK UNIFIED IDEOGRAPH + {0xAB64, 0x524A}, //1545 #CJK UNIFIED IDEOGRAPH + {0xAB65, 0x524D}, //1546 #CJK UNIFIED IDEOGRAPH + {0xAB66, 0x524C}, //1547 #CJK UNIFIED IDEOGRAPH + {0xAB67, 0x524B}, //1548 #CJK UNIFIED IDEOGRAPH + {0xAB68, 0x5247}, //1549 #CJK UNIFIED IDEOGRAPH + {0xAB69, 0x52C7}, //1550 #CJK UNIFIED IDEOGRAPH + {0xAB6A, 0x52C9}, //1551 #CJK UNIFIED IDEOGRAPH + {0xAB6B, 0x52C3}, //1552 #CJK UNIFIED IDEOGRAPH + {0xAB6C, 0x52C1}, //1553 #CJK UNIFIED IDEOGRAPH + {0xAB6D, 0x530D}, //1554 #CJK UNIFIED IDEOGRAPH + {0xAB6E, 0x5357}, //1555 #CJK UNIFIED IDEOGRAPH + {0xAB6F, 0x537B}, //1556 #CJK UNIFIED IDEOGRAPH + {0xAB70, 0x539A}, //1557 #CJK UNIFIED IDEOGRAPH + {0xAB71, 0x53DB}, //1558 #CJK UNIFIED IDEOGRAPH + {0xAB72, 0x54AC}, //1559 #CJK UNIFIED IDEOGRAPH + {0xAB73, 0x54C0}, //1560 #CJK UNIFIED IDEOGRAPH + {0xAB74, 0x54A8}, //1561 #CJK UNIFIED IDEOGRAPH + {0xAB75, 0x54CE}, //1562 #CJK UNIFIED IDEOGRAPH + {0xAB76, 0x54C9}, //1563 #CJK UNIFIED IDEOGRAPH + {0xAB77, 0x54B8}, //1564 #CJK UNIFIED IDEOGRAPH + {0xAB78, 0x54A6}, //1565 #CJK UNIFIED IDEOGRAPH + {0xAB79, 0x54B3}, //1566 #CJK UNIFIED IDEOGRAPH + {0xAB7A, 0x54C7}, //1567 #CJK UNIFIED IDEOGRAPH + {0xAB7B, 0x54C2}, //1568 #CJK UNIFIED IDEOGRAPH + {0xAB7C, 0x54BD}, //1569 #CJK UNIFIED IDEOGRAPH + {0xAB7D, 0x54AA}, //1570 #CJK UNIFIED IDEOGRAPH + {0xAB7E, 0x54C1}, //1571 #CJK UNIFIED IDEOGRAPH + {0xABA1, 0x54C4}, //1572 #CJK UNIFIED IDEOGRAPH + {0xABA2, 0x54C8}, //1573 #CJK UNIFIED IDEOGRAPH + {0xABA3, 0x54AF}, //1574 #CJK UNIFIED IDEOGRAPH + {0xABA4, 0x54AB}, //1575 #CJK UNIFIED IDEOGRAPH + {0xABA5, 0x54B1}, //1576 #CJK UNIFIED IDEOGRAPH + {0xABA6, 0x54BB}, //1577 #CJK UNIFIED IDEOGRAPH + {0xABA7, 0x54A9}, //1578 #CJK UNIFIED IDEOGRAPH + {0xABA8, 0x54A7}, //1579 #CJK UNIFIED IDEOGRAPH + {0xABA9, 0x54BF}, //1580 #CJK UNIFIED IDEOGRAPH + {0xABAA, 0x56FF}, //1581 #CJK UNIFIED IDEOGRAPH + {0xABAB, 0x5782}, //1582 #CJK UNIFIED IDEOGRAPH + {0xABAC, 0x578B}, //1583 #CJK UNIFIED IDEOGRAPH + {0xABAD, 0x57A0}, //1584 #CJK UNIFIED IDEOGRAPH + {0xABAE, 0x57A3}, //1585 #CJK UNIFIED IDEOGRAPH + {0xABAF, 0x57A2}, //1586 #CJK UNIFIED IDEOGRAPH + {0xABB0, 0x57CE}, //1587 #CJK UNIFIED IDEOGRAPH + {0xABB1, 0x57AE}, //1588 #CJK UNIFIED IDEOGRAPH + {0xABB2, 0x5793}, //1589 #CJK UNIFIED IDEOGRAPH + {0xABB3, 0x5955}, //1590 #CJK UNIFIED IDEOGRAPH + {0xABB4, 0x5951}, //1591 #CJK UNIFIED IDEOGRAPH + {0xABB5, 0x594F}, //1592 #CJK UNIFIED IDEOGRAPH + {0xABB6, 0x594E}, //1593 #CJK UNIFIED IDEOGRAPH + {0xABB7, 0x5950}, //1594 #CJK UNIFIED IDEOGRAPH + {0xABB8, 0x59DC}, //1595 #CJK UNIFIED IDEOGRAPH + {0xABB9, 0x59D8}, //1596 #CJK UNIFIED IDEOGRAPH + {0xABBA, 0x59FF}, //1597 #CJK UNIFIED IDEOGRAPH + {0xABBB, 0x59E3}, //1598 #CJK UNIFIED IDEOGRAPH + {0xABBC, 0x59E8}, //1599 #CJK UNIFIED IDEOGRAPH + {0xABBD, 0x5A03}, //1600 #CJK UNIFIED IDEOGRAPH + {0xABBE, 0x59E5}, //1601 #CJK UNIFIED IDEOGRAPH + {0xABBF, 0x59EA}, //1602 #CJK UNIFIED IDEOGRAPH + {0xABC0, 0x59DA}, //1603 #CJK UNIFIED IDEOGRAPH + {0xABC1, 0x59E6}, //1604 #CJK UNIFIED IDEOGRAPH + {0xABC2, 0x5A01}, //1605 #CJK UNIFIED IDEOGRAPH + {0xABC3, 0x59FB}, //1606 #CJK UNIFIED IDEOGRAPH + {0xABC4, 0x5B69}, //1607 #CJK UNIFIED IDEOGRAPH + {0xABC5, 0x5BA3}, //1608 #CJK UNIFIED IDEOGRAPH + {0xABC6, 0x5BA6}, //1609 #CJK UNIFIED IDEOGRAPH + {0xABC7, 0x5BA4}, //1610 #CJK UNIFIED IDEOGRAPH + {0xABC8, 0x5BA2}, //1611 #CJK UNIFIED IDEOGRAPH + {0xABC9, 0x5BA5}, //1612 #CJK UNIFIED IDEOGRAPH + {0xABCA, 0x5C01}, //1613 #CJK UNIFIED IDEOGRAPH + {0xABCB, 0x5C4E}, //1614 #CJK UNIFIED IDEOGRAPH + {0xABCC, 0x5C4F}, //1615 #CJK UNIFIED IDEOGRAPH + {0xABCD, 0x5C4D}, //1616 #CJK UNIFIED IDEOGRAPH + {0xABCE, 0x5C4B}, //1617 #CJK UNIFIED IDEOGRAPH + {0xABCF, 0x5CD9}, //1618 #CJK UNIFIED IDEOGRAPH + {0xABD0, 0x5CD2}, //1619 #CJK UNIFIED IDEOGRAPH + {0xABD1, 0x5DF7}, //1620 #CJK UNIFIED IDEOGRAPH + {0xABD2, 0x5E1D}, //1621 #CJK UNIFIED IDEOGRAPH + {0xABD3, 0x5E25}, //1622 #CJK UNIFIED IDEOGRAPH + {0xABD4, 0x5E1F}, //1623 #CJK UNIFIED IDEOGRAPH + {0xABD5, 0x5E7D}, //1624 #CJK UNIFIED IDEOGRAPH + {0xABD6, 0x5EA0}, //1625 #CJK UNIFIED IDEOGRAPH + {0xABD7, 0x5EA6}, //1626 #CJK UNIFIED IDEOGRAPH + {0xABD8, 0x5EFA}, //1627 #CJK UNIFIED IDEOGRAPH + {0xABD9, 0x5F08}, //1628 #CJK UNIFIED IDEOGRAPH + {0xABDA, 0x5F2D}, //1629 #CJK UNIFIED IDEOGRAPH + {0xABDB, 0x5F65}, //1630 #CJK UNIFIED IDEOGRAPH + {0xABDC, 0x5F88}, //1631 #CJK UNIFIED IDEOGRAPH + {0xABDD, 0x5F85}, //1632 #CJK UNIFIED IDEOGRAPH + {0xABDE, 0x5F8A}, //1633 #CJK UNIFIED IDEOGRAPH + {0xABDF, 0x5F8B}, //1634 #CJK UNIFIED IDEOGRAPH + {0xABE0, 0x5F87}, //1635 #CJK UNIFIED IDEOGRAPH + {0xABE1, 0x5F8C}, //1636 #CJK UNIFIED IDEOGRAPH + {0xABE2, 0x5F89}, //1637 #CJK UNIFIED IDEOGRAPH + {0xABE3, 0x6012}, //1638 #CJK UNIFIED IDEOGRAPH + {0xABE4, 0x601D}, //1639 #CJK UNIFIED IDEOGRAPH + {0xABE5, 0x6020}, //1640 #CJK UNIFIED IDEOGRAPH + {0xABE6, 0x6025}, //1641 #CJK UNIFIED IDEOGRAPH + {0xABE7, 0x600E}, //1642 #CJK UNIFIED IDEOGRAPH + {0xABE8, 0x6028}, //1643 #CJK UNIFIED IDEOGRAPH + {0xABE9, 0x604D}, //1644 #CJK UNIFIED IDEOGRAPH + {0xABEA, 0x6070}, //1645 #CJK UNIFIED IDEOGRAPH + {0xABEB, 0x6068}, //1646 #CJK UNIFIED IDEOGRAPH + {0xABEC, 0x6062}, //1647 #CJK UNIFIED IDEOGRAPH + {0xABED, 0x6046}, //1648 #CJK UNIFIED IDEOGRAPH + {0xABEE, 0x6043}, //1649 #CJK UNIFIED IDEOGRAPH + {0xABEF, 0x606C}, //1650 #CJK UNIFIED IDEOGRAPH + {0xABF0, 0x606B}, //1651 #CJK UNIFIED IDEOGRAPH + {0xABF1, 0x606A}, //1652 #CJK UNIFIED IDEOGRAPH + {0xABF2, 0x6064}, //1653 #CJK UNIFIED IDEOGRAPH + {0xABF3, 0x6241}, //1654 #CJK UNIFIED IDEOGRAPH + {0xABF4, 0x62DC}, //1655 #CJK UNIFIED IDEOGRAPH + {0xABF5, 0x6316}, //1656 #CJK UNIFIED IDEOGRAPH + {0xABF6, 0x6309}, //1657 #CJK UNIFIED IDEOGRAPH + {0xABF7, 0x62FC}, //1658 #CJK UNIFIED IDEOGRAPH + {0xABF8, 0x62ED}, //1659 #CJK UNIFIED IDEOGRAPH + {0xABF9, 0x6301}, //1660 #CJK UNIFIED IDEOGRAPH + {0xABFA, 0x62EE}, //1661 #CJK UNIFIED IDEOGRAPH + {0xABFB, 0x62FD}, //1662 #CJK UNIFIED IDEOGRAPH + {0xABFC, 0x6307}, //1663 #CJK UNIFIED IDEOGRAPH + {0xABFD, 0x62F1}, //1664 #CJK UNIFIED IDEOGRAPH + {0xABFE, 0x62F7}, //1665 #CJK UNIFIED IDEOGRAPH + {0xAC40, 0x62EF}, //1666 #CJK UNIFIED IDEOGRAPH + {0xAC41, 0x62EC}, //1667 #CJK UNIFIED IDEOGRAPH + {0xAC42, 0x62FE}, //1668 #CJK UNIFIED IDEOGRAPH + {0xAC43, 0x62F4}, //1669 #CJK UNIFIED IDEOGRAPH + {0xAC44, 0x6311}, //1670 #CJK UNIFIED IDEOGRAPH + {0xAC45, 0x6302}, //1671 #CJK UNIFIED IDEOGRAPH + {0xAC46, 0x653F}, //1672 #CJK UNIFIED IDEOGRAPH + {0xAC47, 0x6545}, //1673 #CJK UNIFIED IDEOGRAPH + {0xAC48, 0x65AB}, //1674 #CJK UNIFIED IDEOGRAPH + {0xAC49, 0x65BD}, //1675 #CJK UNIFIED IDEOGRAPH + {0xAC4A, 0x65E2}, //1676 #CJK UNIFIED IDEOGRAPH + {0xAC4B, 0x6625}, //1677 #CJK UNIFIED IDEOGRAPH + {0xAC4C, 0x662D}, //1678 #CJK UNIFIED IDEOGRAPH + {0xAC4D, 0x6620}, //1679 #CJK UNIFIED IDEOGRAPH + {0xAC4E, 0x6627}, //1680 #CJK UNIFIED IDEOGRAPH + {0xAC4F, 0x662F}, //1681 #CJK UNIFIED IDEOGRAPH + {0xAC50, 0x661F}, //1682 #CJK UNIFIED IDEOGRAPH + {0xAC51, 0x6628}, //1683 #CJK UNIFIED IDEOGRAPH + {0xAC52, 0x6631}, //1684 #CJK UNIFIED IDEOGRAPH + {0xAC53, 0x6624}, //1685 #CJK UNIFIED IDEOGRAPH + {0xAC54, 0x66F7}, //1686 #CJK UNIFIED IDEOGRAPH + {0xAC55, 0x67FF}, //1687 #CJK UNIFIED IDEOGRAPH + {0xAC56, 0x67D3}, //1688 #CJK UNIFIED IDEOGRAPH + {0xAC57, 0x67F1}, //1689 #CJK UNIFIED IDEOGRAPH + {0xAC58, 0x67D4}, //1690 #CJK UNIFIED IDEOGRAPH + {0xAC59, 0x67D0}, //1691 #CJK UNIFIED IDEOGRAPH + {0xAC5A, 0x67EC}, //1692 #CJK UNIFIED IDEOGRAPH + {0xAC5B, 0x67B6}, //1693 #CJK UNIFIED IDEOGRAPH + {0xAC5C, 0x67AF}, //1694 #CJK UNIFIED IDEOGRAPH + {0xAC5D, 0x67F5}, //1695 #CJK UNIFIED IDEOGRAPH + {0xAC5E, 0x67E9}, //1696 #CJK UNIFIED IDEOGRAPH + {0xAC5F, 0x67EF}, //1697 #CJK UNIFIED IDEOGRAPH + {0xAC60, 0x67C4}, //1698 #CJK UNIFIED IDEOGRAPH + {0xAC61, 0x67D1}, //1699 #CJK UNIFIED IDEOGRAPH + {0xAC62, 0x67B4}, //1700 #CJK UNIFIED IDEOGRAPH + {0xAC63, 0x67DA}, //1701 #CJK UNIFIED IDEOGRAPH + {0xAC64, 0x67E5}, //1702 #CJK UNIFIED IDEOGRAPH + {0xAC65, 0x67B8}, //1703 #CJK UNIFIED IDEOGRAPH + {0xAC66, 0x67CF}, //1704 #CJK UNIFIED IDEOGRAPH + {0xAC67, 0x67DE}, //1705 #CJK UNIFIED IDEOGRAPH + {0xAC68, 0x67F3}, //1706 #CJK UNIFIED IDEOGRAPH + {0xAC69, 0x67B0}, //1707 #CJK UNIFIED IDEOGRAPH + {0xAC6A, 0x67D9}, //1708 #CJK UNIFIED IDEOGRAPH + {0xAC6B, 0x67E2}, //1709 #CJK UNIFIED IDEOGRAPH + {0xAC6C, 0x67DD}, //1710 #CJK UNIFIED IDEOGRAPH + {0xAC6D, 0x67D2}, //1711 #CJK UNIFIED IDEOGRAPH + {0xAC6E, 0x6B6A}, //1712 #CJK UNIFIED IDEOGRAPH + {0xAC6F, 0x6B83}, //1713 #CJK UNIFIED IDEOGRAPH + {0xAC70, 0x6B86}, //1714 #CJK UNIFIED IDEOGRAPH + {0xAC71, 0x6BB5}, //1715 #CJK UNIFIED IDEOGRAPH + {0xAC72, 0x6BD2}, //1716 #CJK UNIFIED IDEOGRAPH + {0xAC73, 0x6BD7}, //1717 #CJK UNIFIED IDEOGRAPH + {0xAC74, 0x6C1F}, //1718 #CJK UNIFIED IDEOGRAPH + {0xAC75, 0x6CC9}, //1719 #CJK UNIFIED IDEOGRAPH + {0xAC76, 0x6D0B}, //1720 #CJK UNIFIED IDEOGRAPH + {0xAC77, 0x6D32}, //1721 #CJK UNIFIED IDEOGRAPH + {0xAC78, 0x6D2A}, //1722 #CJK UNIFIED IDEOGRAPH + {0xAC79, 0x6D41}, //1723 #CJK UNIFIED IDEOGRAPH + {0xAC7A, 0x6D25}, //1724 #CJK UNIFIED IDEOGRAPH + {0xAC7B, 0x6D0C}, //1725 #CJK UNIFIED IDEOGRAPH + {0xAC7C, 0x6D31}, //1726 #CJK UNIFIED IDEOGRAPH + {0xAC7D, 0x6D1E}, //1727 #CJK UNIFIED IDEOGRAPH + {0xAC7E, 0x6D17}, //1728 #CJK UNIFIED IDEOGRAPH + {0xACA1, 0x6D3B}, //1729 #CJK UNIFIED IDEOGRAPH + {0xACA2, 0x6D3D}, //1730 #CJK UNIFIED IDEOGRAPH + {0xACA3, 0x6D3E}, //1731 #CJK UNIFIED IDEOGRAPH + {0xACA4, 0x6D36}, //1732 #CJK UNIFIED IDEOGRAPH + {0xACA5, 0x6D1B}, //1733 #CJK UNIFIED IDEOGRAPH + {0xACA6, 0x6CF5}, //1734 #CJK UNIFIED IDEOGRAPH + {0xACA7, 0x6D39}, //1735 #CJK UNIFIED IDEOGRAPH + {0xACA8, 0x6D27}, //1736 #CJK UNIFIED IDEOGRAPH + {0xACA9, 0x6D38}, //1737 #CJK UNIFIED IDEOGRAPH + {0xACAA, 0x6D29}, //1738 #CJK UNIFIED IDEOGRAPH + {0xACAB, 0x6D2E}, //1739 #CJK UNIFIED IDEOGRAPH + {0xACAC, 0x6D35}, //1740 #CJK UNIFIED IDEOGRAPH + {0xACAD, 0x6D0E}, //1741 #CJK UNIFIED IDEOGRAPH + {0xACAE, 0x6D2B}, //1742 #CJK UNIFIED IDEOGRAPH + {0xACAF, 0x70AB}, //1743 #CJK UNIFIED IDEOGRAPH + {0xACB0, 0x70BA}, //1744 #CJK UNIFIED IDEOGRAPH + {0xACB1, 0x70B3}, //1745 #CJK UNIFIED IDEOGRAPH + {0xACB2, 0x70AC}, //1746 #CJK UNIFIED IDEOGRAPH + {0xACB3, 0x70AF}, //1747 #CJK UNIFIED IDEOGRAPH + {0xACB4, 0x70AD}, //1748 #CJK UNIFIED IDEOGRAPH + {0xACB5, 0x70B8}, //1749 #CJK UNIFIED IDEOGRAPH + {0xACB6, 0x70AE}, //1750 #CJK UNIFIED IDEOGRAPH + {0xACB7, 0x70A4}, //1751 #CJK UNIFIED IDEOGRAPH + {0xACB8, 0x7230}, //1752 #CJK UNIFIED IDEOGRAPH + {0xACB9, 0x7272}, //1753 #CJK UNIFIED IDEOGRAPH + {0xACBA, 0x726F}, //1754 #CJK UNIFIED IDEOGRAPH + {0xACBB, 0x7274}, //1755 #CJK UNIFIED IDEOGRAPH + {0xACBC, 0x72E9}, //1756 #CJK UNIFIED IDEOGRAPH + {0xACBD, 0x72E0}, //1757 #CJK UNIFIED IDEOGRAPH + {0xACBE, 0x72E1}, //1758 #CJK UNIFIED IDEOGRAPH + {0xACBF, 0x73B7}, //1759 #CJK UNIFIED IDEOGRAPH + {0xACC0, 0x73CA}, //1760 #CJK UNIFIED IDEOGRAPH + {0xACC1, 0x73BB}, //1761 #CJK UNIFIED IDEOGRAPH + {0xACC2, 0x73B2}, //1762 #CJK UNIFIED IDEOGRAPH + {0xACC3, 0x73CD}, //1763 #CJK UNIFIED IDEOGRAPH + {0xACC4, 0x73C0}, //1764 #CJK UNIFIED IDEOGRAPH + {0xACC5, 0x73B3}, //1765 #CJK UNIFIED IDEOGRAPH + {0xACC6, 0x751A}, //1766 #CJK UNIFIED IDEOGRAPH + {0xACC7, 0x752D}, //1767 #CJK UNIFIED IDEOGRAPH + {0xACC8, 0x754F}, //1768 #CJK UNIFIED IDEOGRAPH + {0xACC9, 0x754C}, //1769 #CJK UNIFIED IDEOGRAPH + {0xACCA, 0x754E}, //1770 #CJK UNIFIED IDEOGRAPH + {0xACCB, 0x754B}, //1771 #CJK UNIFIED IDEOGRAPH + {0xACCC, 0x75AB}, //1772 #CJK UNIFIED IDEOGRAPH + {0xACCD, 0x75A4}, //1773 #CJK UNIFIED IDEOGRAPH + {0xACCE, 0x75A5}, //1774 #CJK UNIFIED IDEOGRAPH + {0xACCF, 0x75A2}, //1775 #CJK UNIFIED IDEOGRAPH + {0xACD0, 0x75A3}, //1776 #CJK UNIFIED IDEOGRAPH + {0xACD1, 0x7678}, //1777 #CJK UNIFIED IDEOGRAPH + {0xACD2, 0x7686}, //1778 #CJK UNIFIED IDEOGRAPH + {0xACD3, 0x7687}, //1779 #CJK UNIFIED IDEOGRAPH + {0xACD4, 0x7688}, //1780 #CJK UNIFIED IDEOGRAPH + {0xACD5, 0x76C8}, //1781 #CJK UNIFIED IDEOGRAPH + {0xACD6, 0x76C6}, //1782 #CJK UNIFIED IDEOGRAPH + {0xACD7, 0x76C3}, //1783 #CJK UNIFIED IDEOGRAPH + {0xACD8, 0x76C5}, //1784 #CJK UNIFIED IDEOGRAPH + {0xACD9, 0x7701}, //1785 #CJK UNIFIED IDEOGRAPH + {0xACDA, 0x76F9}, //1786 #CJK UNIFIED IDEOGRAPH + {0xACDB, 0x76F8}, //1787 #CJK UNIFIED IDEOGRAPH + {0xACDC, 0x7709}, //1788 #CJK UNIFIED IDEOGRAPH + {0xACDD, 0x770B}, //1789 #CJK UNIFIED IDEOGRAPH + {0xACDE, 0x76FE}, //1790 #CJK UNIFIED IDEOGRAPH + {0xACDF, 0x76FC}, //1791 #CJK UNIFIED IDEOGRAPH + {0xACE0, 0x7707}, //1792 #CJK UNIFIED IDEOGRAPH + {0xACE1, 0x77DC}, //1793 #CJK UNIFIED IDEOGRAPH + {0xACE2, 0x7802}, //1794 #CJK UNIFIED IDEOGRAPH + {0xACE3, 0x7814}, //1795 #CJK UNIFIED IDEOGRAPH + {0xACE4, 0x780C}, //1796 #CJK UNIFIED IDEOGRAPH + {0xACE5, 0x780D}, //1797 #CJK UNIFIED IDEOGRAPH + {0xACE6, 0x7946}, //1798 #CJK UNIFIED IDEOGRAPH + {0xACE7, 0x7949}, //1799 #CJK UNIFIED IDEOGRAPH + {0xACE8, 0x7948}, //1800 #CJK UNIFIED IDEOGRAPH + {0xACE9, 0x7947}, //1801 #CJK UNIFIED IDEOGRAPH + {0xACEA, 0x79B9}, //1802 #CJK UNIFIED IDEOGRAPH + {0xACEB, 0x79BA}, //1803 #CJK UNIFIED IDEOGRAPH + {0xACEC, 0x79D1}, //1804 #CJK UNIFIED IDEOGRAPH + {0xACED, 0x79D2}, //1805 #CJK UNIFIED IDEOGRAPH + {0xACEE, 0x79CB}, //1806 #CJK UNIFIED IDEOGRAPH + {0xACEF, 0x7A7F}, //1807 #CJK UNIFIED IDEOGRAPH + {0xACF0, 0x7A81}, //1808 #CJK UNIFIED IDEOGRAPH + {0xACF1, 0x7AFF}, //1809 #CJK UNIFIED IDEOGRAPH + {0xACF2, 0x7AFD}, //1810 #CJK UNIFIED IDEOGRAPH + {0xACF3, 0x7C7D}, //1811 #CJK UNIFIED IDEOGRAPH + {0xACF4, 0x7D02}, //1812 #CJK UNIFIED IDEOGRAPH + {0xACF5, 0x7D05}, //1813 #CJK UNIFIED IDEOGRAPH + {0xACF6, 0x7D00}, //1814 #CJK UNIFIED IDEOGRAPH + {0xACF7, 0x7D09}, //1815 #CJK UNIFIED IDEOGRAPH + {0xACF8, 0x7D07}, //1816 #CJK UNIFIED IDEOGRAPH + {0xACF9, 0x7D04}, //1817 #CJK UNIFIED IDEOGRAPH + {0xACFA, 0x7D06}, //1818 #CJK UNIFIED IDEOGRAPH + {0xACFB, 0x7F38}, //1819 #CJK UNIFIED IDEOGRAPH + {0xACFC, 0x7F8E}, //1820 #CJK UNIFIED IDEOGRAPH + {0xACFD, 0x7FBF}, //1821 #CJK UNIFIED IDEOGRAPH + {0xACFE, 0x8004}, //1822 #CJK UNIFIED IDEOGRAPH + {0xAD40, 0x8010}, //1823 #CJK UNIFIED IDEOGRAPH + {0xAD41, 0x800D}, //1824 #CJK UNIFIED IDEOGRAPH + {0xAD42, 0x8011}, //1825 #CJK UNIFIED IDEOGRAPH + {0xAD43, 0x8036}, //1826 #CJK UNIFIED IDEOGRAPH + {0xAD44, 0x80D6}, //1827 #CJK UNIFIED IDEOGRAPH + {0xAD45, 0x80E5}, //1828 #CJK UNIFIED IDEOGRAPH + {0xAD46, 0x80DA}, //1829 #CJK UNIFIED IDEOGRAPH + {0xAD47, 0x80C3}, //1830 #CJK UNIFIED IDEOGRAPH + {0xAD48, 0x80C4}, //1831 #CJK UNIFIED IDEOGRAPH + {0xAD49, 0x80CC}, //1832 #CJK UNIFIED IDEOGRAPH + {0xAD4A, 0x80E1}, //1833 #CJK UNIFIED IDEOGRAPH + {0xAD4B, 0x80DB}, //1834 #CJK UNIFIED IDEOGRAPH + {0xAD4C, 0x80CE}, //1835 #CJK UNIFIED IDEOGRAPH + {0xAD4D, 0x80DE}, //1836 #CJK UNIFIED IDEOGRAPH + {0xAD4E, 0x80E4}, //1837 #CJK UNIFIED IDEOGRAPH + {0xAD4F, 0x80DD}, //1838 #CJK UNIFIED IDEOGRAPH + {0xAD50, 0x81F4}, //1839 #CJK UNIFIED IDEOGRAPH + {0xAD51, 0x8222}, //1840 #CJK UNIFIED IDEOGRAPH + {0xAD52, 0x82E7}, //1841 #CJK UNIFIED IDEOGRAPH + {0xAD53, 0x8303}, //1842 #CJK UNIFIED IDEOGRAPH + {0xAD54, 0x8305}, //1843 #CJK UNIFIED IDEOGRAPH + {0xAD55, 0x82E3}, //1844 #CJK UNIFIED IDEOGRAPH + {0xAD56, 0x82DB}, //1845 #CJK UNIFIED IDEOGRAPH + {0xAD57, 0x82E6}, //1846 #CJK UNIFIED IDEOGRAPH + {0xAD58, 0x8304}, //1847 #CJK UNIFIED IDEOGRAPH + {0xAD59, 0x82E5}, //1848 #CJK UNIFIED IDEOGRAPH + {0xAD5A, 0x8302}, //1849 #CJK UNIFIED IDEOGRAPH + {0xAD5B, 0x8309}, //1850 #CJK UNIFIED IDEOGRAPH + {0xAD5C, 0x82D2}, //1851 #CJK UNIFIED IDEOGRAPH + {0xAD5D, 0x82D7}, //1852 #CJK UNIFIED IDEOGRAPH + {0xAD5E, 0x82F1}, //1853 #CJK UNIFIED IDEOGRAPH + {0xAD5F, 0x8301}, //1854 #CJK UNIFIED IDEOGRAPH + {0xAD60, 0x82DC}, //1855 #CJK UNIFIED IDEOGRAPH + {0xAD61, 0x82D4}, //1856 #CJK UNIFIED IDEOGRAPH + {0xAD62, 0x82D1}, //1857 #CJK UNIFIED IDEOGRAPH + {0xAD63, 0x82DE}, //1858 #CJK UNIFIED IDEOGRAPH + {0xAD64, 0x82D3}, //1859 #CJK UNIFIED IDEOGRAPH + {0xAD65, 0x82DF}, //1860 #CJK UNIFIED IDEOGRAPH + {0xAD66, 0x82EF}, //1861 #CJK UNIFIED IDEOGRAPH + {0xAD67, 0x8306}, //1862 #CJK UNIFIED IDEOGRAPH + {0xAD68, 0x8650}, //1863 #CJK UNIFIED IDEOGRAPH + {0xAD69, 0x8679}, //1864 #CJK UNIFIED IDEOGRAPH + {0xAD6A, 0x867B}, //1865 #CJK UNIFIED IDEOGRAPH + {0xAD6B, 0x867A}, //1866 #CJK UNIFIED IDEOGRAPH + {0xAD6C, 0x884D}, //1867 #CJK UNIFIED IDEOGRAPH + {0xAD6D, 0x886B}, //1868 #CJK UNIFIED IDEOGRAPH + {0xAD6E, 0x8981}, //1869 #CJK UNIFIED IDEOGRAPH + {0xAD6F, 0x89D4}, //1870 #CJK UNIFIED IDEOGRAPH + {0xAD70, 0x8A08}, //1871 #CJK UNIFIED IDEOGRAPH + {0xAD71, 0x8A02}, //1872 #CJK UNIFIED IDEOGRAPH + {0xAD72, 0x8A03}, //1873 #CJK UNIFIED IDEOGRAPH + {0xAD73, 0x8C9E}, //1874 #CJK UNIFIED IDEOGRAPH + {0xAD74, 0x8CA0}, //1875 #CJK UNIFIED IDEOGRAPH + {0xAD75, 0x8D74}, //1876 #CJK UNIFIED IDEOGRAPH + {0xAD76, 0x8D73}, //1877 #CJK UNIFIED IDEOGRAPH + {0xAD77, 0x8DB4}, //1878 #CJK UNIFIED IDEOGRAPH + {0xAD78, 0x8ECD}, //1879 #CJK UNIFIED IDEOGRAPH + {0xAD79, 0x8ECC}, //1880 #CJK UNIFIED IDEOGRAPH + {0xAD7A, 0x8FF0}, //1881 #CJK UNIFIED IDEOGRAPH + {0xAD7B, 0x8FE6}, //1882 #CJK UNIFIED IDEOGRAPH + {0xAD7C, 0x8FE2}, //1883 #CJK UNIFIED IDEOGRAPH + {0xAD7D, 0x8FEA}, //1884 #CJK UNIFIED IDEOGRAPH + {0xAD7E, 0x8FE5}, //1885 #CJK UNIFIED IDEOGRAPH + {0xADA1, 0x8FED}, //1886 #CJK UNIFIED IDEOGRAPH + {0xADA2, 0x8FEB}, //1887 #CJK UNIFIED IDEOGRAPH + {0xADA3, 0x8FE4}, //1888 #CJK UNIFIED IDEOGRAPH + {0xADA4, 0x8FE8}, //1889 #CJK UNIFIED IDEOGRAPH + {0xADA5, 0x90CA}, //1890 #CJK UNIFIED IDEOGRAPH + {0xADA6, 0x90CE}, //1891 #CJK UNIFIED IDEOGRAPH + {0xADA7, 0x90C1}, //1892 #CJK UNIFIED IDEOGRAPH + {0xADA8, 0x90C3}, //1893 #CJK UNIFIED IDEOGRAPH + {0xADA9, 0x914B}, //1894 #CJK UNIFIED IDEOGRAPH + {0xADAA, 0x914A}, //1895 #CJK UNIFIED IDEOGRAPH + {0xADAB, 0x91CD}, //1896 #CJK UNIFIED IDEOGRAPH + {0xADAC, 0x9582}, //1897 #CJK UNIFIED IDEOGRAPH + {0xADAD, 0x9650}, //1898 #CJK UNIFIED IDEOGRAPH + {0xADAE, 0x964B}, //1899 #CJK UNIFIED IDEOGRAPH + {0xADAF, 0x964C}, //1900 #CJK UNIFIED IDEOGRAPH + {0xADB0, 0x964D}, //1901 #CJK UNIFIED IDEOGRAPH + {0xADB1, 0x9762}, //1902 #CJK UNIFIED IDEOGRAPH + {0xADB2, 0x9769}, //1903 #CJK UNIFIED IDEOGRAPH + {0xADB3, 0x97CB}, //1904 #CJK UNIFIED IDEOGRAPH + {0xADB4, 0x97ED}, //1905 #CJK UNIFIED IDEOGRAPH + {0xADB5, 0x97F3}, //1906 #CJK UNIFIED IDEOGRAPH + {0xADB6, 0x9801}, //1907 #CJK UNIFIED IDEOGRAPH + {0xADB7, 0x98A8}, //1908 #CJK UNIFIED IDEOGRAPH + {0xADB8, 0x98DB}, //1909 #CJK UNIFIED IDEOGRAPH + {0xADB9, 0x98DF}, //1910 #CJK UNIFIED IDEOGRAPH + {0xADBA, 0x9996}, //1911 #CJK UNIFIED IDEOGRAPH + {0xADBB, 0x9999}, //1912 #CJK UNIFIED IDEOGRAPH + {0xADBC, 0x4E58}, //1913 #CJK UNIFIED IDEOGRAPH + {0xADBD, 0x4EB3}, //1914 #CJK UNIFIED IDEOGRAPH + {0xADBE, 0x500C}, //1915 #CJK UNIFIED IDEOGRAPH + {0xADBF, 0x500D}, //1916 #CJK UNIFIED IDEOGRAPH + {0xADC0, 0x5023}, //1917 #CJK UNIFIED IDEOGRAPH + {0xADC1, 0x4FEF}, //1918 #CJK UNIFIED IDEOGRAPH + {0xADC2, 0x5026}, //1919 #CJK UNIFIED IDEOGRAPH + {0xADC3, 0x5025}, //1920 #CJK UNIFIED IDEOGRAPH + {0xADC4, 0x4FF8}, //1921 #CJK UNIFIED IDEOGRAPH + {0xADC5, 0x5029}, //1922 #CJK UNIFIED IDEOGRAPH + {0xADC6, 0x5016}, //1923 #CJK UNIFIED IDEOGRAPH + {0xADC7, 0x5006}, //1924 #CJK UNIFIED IDEOGRAPH + {0xADC8, 0x503C}, //1925 #CJK UNIFIED IDEOGRAPH + {0xADC9, 0x501F}, //1926 #CJK UNIFIED IDEOGRAPH + {0xADCA, 0x501A}, //1927 #CJK UNIFIED IDEOGRAPH + {0xADCB, 0x5012}, //1928 #CJK UNIFIED IDEOGRAPH + {0xADCC, 0x5011}, //1929 #CJK UNIFIED IDEOGRAPH + {0xADCD, 0x4FFA}, //1930 #CJK UNIFIED IDEOGRAPH + {0xADCE, 0x5000}, //1931 #CJK UNIFIED IDEOGRAPH + {0xADCF, 0x5014}, //1932 #CJK UNIFIED IDEOGRAPH + {0xADD0, 0x5028}, //1933 #CJK UNIFIED IDEOGRAPH + {0xADD1, 0x4FF1}, //1934 #CJK UNIFIED IDEOGRAPH + {0xADD2, 0x5021}, //1935 #CJK UNIFIED IDEOGRAPH + {0xADD3, 0x500B}, //1936 #CJK UNIFIED IDEOGRAPH + {0xADD4, 0x5019}, //1937 #CJK UNIFIED IDEOGRAPH + {0xADD5, 0x5018}, //1938 #CJK UNIFIED IDEOGRAPH + {0xADD6, 0x4FF3}, //1939 #CJK UNIFIED IDEOGRAPH + {0xADD7, 0x4FEE}, //1940 #CJK UNIFIED IDEOGRAPH + {0xADD8, 0x502D}, //1941 #CJK UNIFIED IDEOGRAPH + {0xADD9, 0x502A}, //1942 #CJK UNIFIED IDEOGRAPH + {0xADDA, 0x4FFE}, //1943 #CJK UNIFIED IDEOGRAPH + {0xADDB, 0x502B}, //1944 #CJK UNIFIED IDEOGRAPH + {0xADDC, 0x5009}, //1945 #CJK UNIFIED IDEOGRAPH + {0xADDD, 0x517C}, //1946 #CJK UNIFIED IDEOGRAPH + {0xADDE, 0x51A4}, //1947 #CJK UNIFIED IDEOGRAPH + {0xADDF, 0x51A5}, //1948 #CJK UNIFIED IDEOGRAPH + {0xADE0, 0x51A2}, //1949 #CJK UNIFIED IDEOGRAPH + {0xADE1, 0x51CD}, //1950 #CJK UNIFIED IDEOGRAPH + {0xADE2, 0x51CC}, //1951 #CJK UNIFIED IDEOGRAPH + {0xADE3, 0x51C6}, //1952 #CJK UNIFIED IDEOGRAPH + {0xADE4, 0x51CB}, //1953 #CJK UNIFIED IDEOGRAPH + {0xADE5, 0x5256}, //1954 #CJK UNIFIED IDEOGRAPH + {0xADE6, 0x525C}, //1955 #CJK UNIFIED IDEOGRAPH + {0xADE7, 0x5254}, //1956 #CJK UNIFIED IDEOGRAPH + {0xADE8, 0x525B}, //1957 #CJK UNIFIED IDEOGRAPH + {0xADE9, 0x525D}, //1958 #CJK UNIFIED IDEOGRAPH + {0xADEA, 0x532A}, //1959 #CJK UNIFIED IDEOGRAPH + {0xADEB, 0x537F}, //1960 #CJK UNIFIED IDEOGRAPH + {0xADEC, 0x539F}, //1961 #CJK UNIFIED IDEOGRAPH + {0xADED, 0x539D}, //1962 #CJK UNIFIED IDEOGRAPH + {0xADEE, 0x53DF}, //1963 #CJK UNIFIED IDEOGRAPH + {0xADEF, 0x54E8}, //1964 #CJK UNIFIED IDEOGRAPH + {0xADF0, 0x5510}, //1965 #CJK UNIFIED IDEOGRAPH + {0xADF1, 0x5501}, //1966 #CJK UNIFIED IDEOGRAPH + {0xADF2, 0x5537}, //1967 #CJK UNIFIED IDEOGRAPH + {0xADF3, 0x54FC}, //1968 #CJK UNIFIED IDEOGRAPH + {0xADF4, 0x54E5}, //1969 #CJK UNIFIED IDEOGRAPH + {0xADF5, 0x54F2}, //1970 #CJK UNIFIED IDEOGRAPH + {0xADF6, 0x5506}, //1971 #CJK UNIFIED IDEOGRAPH + {0xADF7, 0x54FA}, //1972 #CJK UNIFIED IDEOGRAPH + {0xADF8, 0x5514}, //1973 #CJK UNIFIED IDEOGRAPH + {0xADF9, 0x54E9}, //1974 #CJK UNIFIED IDEOGRAPH + {0xADFA, 0x54ED}, //1975 #CJK UNIFIED IDEOGRAPH + {0xADFB, 0x54E1}, //1976 #CJK UNIFIED IDEOGRAPH + {0xADFC, 0x5509}, //1977 #CJK UNIFIED IDEOGRAPH + {0xADFD, 0x54EE}, //1978 #CJK UNIFIED IDEOGRAPH + {0xADFE, 0x54EA}, //1979 #CJK UNIFIED IDEOGRAPH + {0xAE40, 0x54E6}, //1980 #CJK UNIFIED IDEOGRAPH + {0xAE41, 0x5527}, //1981 #CJK UNIFIED IDEOGRAPH + {0xAE42, 0x5507}, //1982 #CJK UNIFIED IDEOGRAPH + {0xAE43, 0x54FD}, //1983 #CJK UNIFIED IDEOGRAPH + {0xAE44, 0x550F}, //1984 #CJK UNIFIED IDEOGRAPH + {0xAE45, 0x5703}, //1985 #CJK UNIFIED IDEOGRAPH + {0xAE46, 0x5704}, //1986 #CJK UNIFIED IDEOGRAPH + {0xAE47, 0x57C2}, //1987 #CJK UNIFIED IDEOGRAPH + {0xAE48, 0x57D4}, //1988 #CJK UNIFIED IDEOGRAPH + {0xAE49, 0x57CB}, //1989 #CJK UNIFIED IDEOGRAPH + {0xAE4A, 0x57C3}, //1990 #CJK UNIFIED IDEOGRAPH + {0xAE4B, 0x5809}, //1991 #CJK UNIFIED IDEOGRAPH + {0xAE4C, 0x590F}, //1992 #CJK UNIFIED IDEOGRAPH + {0xAE4D, 0x5957}, //1993 #CJK UNIFIED IDEOGRAPH + {0xAE4E, 0x5958}, //1994 #CJK UNIFIED IDEOGRAPH + {0xAE4F, 0x595A}, //1995 #CJK UNIFIED IDEOGRAPH + {0xAE50, 0x5A11}, //1996 #CJK UNIFIED IDEOGRAPH + {0xAE51, 0x5A18}, //1997 #CJK UNIFIED IDEOGRAPH + {0xAE52, 0x5A1C}, //1998 #CJK UNIFIED IDEOGRAPH + {0xAE53, 0x5A1F}, //1999 #CJK UNIFIED IDEOGRAPH + {0xAE54, 0x5A1B}, //2000 #CJK UNIFIED IDEOGRAPH + {0xAE55, 0x5A13}, //2001 #CJK UNIFIED IDEOGRAPH + {0xAE56, 0x59EC}, //2002 #CJK UNIFIED IDEOGRAPH + {0xAE57, 0x5A20}, //2003 #CJK UNIFIED IDEOGRAPH + {0xAE58, 0x5A23}, //2004 #CJK UNIFIED IDEOGRAPH + {0xAE59, 0x5A29}, //2005 #CJK UNIFIED IDEOGRAPH + {0xAE5A, 0x5A25}, //2006 #CJK UNIFIED IDEOGRAPH + {0xAE5B, 0x5A0C}, //2007 #CJK UNIFIED IDEOGRAPH + {0xAE5C, 0x5A09}, //2008 #CJK UNIFIED IDEOGRAPH + {0xAE5D, 0x5B6B}, //2009 #CJK UNIFIED IDEOGRAPH + {0xAE5E, 0x5C58}, //2010 #CJK UNIFIED IDEOGRAPH + {0xAE5F, 0x5BB0}, //2011 #CJK UNIFIED IDEOGRAPH + {0xAE60, 0x5BB3}, //2012 #CJK UNIFIED IDEOGRAPH + {0xAE61, 0x5BB6}, //2013 #CJK UNIFIED IDEOGRAPH + {0xAE62, 0x5BB4}, //2014 #CJK UNIFIED IDEOGRAPH + {0xAE63, 0x5BAE}, //2015 #CJK UNIFIED IDEOGRAPH + {0xAE64, 0x5BB5}, //2016 #CJK UNIFIED IDEOGRAPH + {0xAE65, 0x5BB9}, //2017 #CJK UNIFIED IDEOGRAPH + {0xAE66, 0x5BB8}, //2018 #CJK UNIFIED IDEOGRAPH + {0xAE67, 0x5C04}, //2019 #CJK UNIFIED IDEOGRAPH + {0xAE68, 0x5C51}, //2020 #CJK UNIFIED IDEOGRAPH + {0xAE69, 0x5C55}, //2021 #CJK UNIFIED IDEOGRAPH + {0xAE6A, 0x5C50}, //2022 #CJK UNIFIED IDEOGRAPH + {0xAE6B, 0x5CED}, //2023 #CJK UNIFIED IDEOGRAPH + {0xAE6C, 0x5CFD}, //2024 #CJK UNIFIED IDEOGRAPH + {0xAE6D, 0x5CFB}, //2025 #CJK UNIFIED IDEOGRAPH + {0xAE6E, 0x5CEA}, //2026 #CJK UNIFIED IDEOGRAPH + {0xAE6F, 0x5CE8}, //2027 #CJK UNIFIED IDEOGRAPH + {0xAE70, 0x5CF0}, //2028 #CJK UNIFIED IDEOGRAPH + {0xAE71, 0x5CF6}, //2029 #CJK UNIFIED IDEOGRAPH + {0xAE72, 0x5D01}, //2030 #CJK UNIFIED IDEOGRAPH + {0xAE73, 0x5CF4}, //2031 #CJK UNIFIED IDEOGRAPH + {0xAE74, 0x5DEE}, //2032 #CJK UNIFIED IDEOGRAPH + {0xAE75, 0x5E2D}, //2033 #CJK UNIFIED IDEOGRAPH + {0xAE76, 0x5E2B}, //2034 #CJK UNIFIED IDEOGRAPH + {0xAE77, 0x5EAB}, //2035 #CJK UNIFIED IDEOGRAPH + {0xAE78, 0x5EAD}, //2036 #CJK UNIFIED IDEOGRAPH + {0xAE79, 0x5EA7}, //2037 #CJK UNIFIED IDEOGRAPH + {0xAE7A, 0x5F31}, //2038 #CJK UNIFIED IDEOGRAPH + {0xAE7B, 0x5F92}, //2039 #CJK UNIFIED IDEOGRAPH + {0xAE7C, 0x5F91}, //2040 #CJK UNIFIED IDEOGRAPH + {0xAE7D, 0x5F90}, //2041 #CJK UNIFIED IDEOGRAPH + {0xAE7E, 0x6059}, //2042 #CJK UNIFIED IDEOGRAPH + {0xAEA1, 0x6063}, //2043 #CJK UNIFIED IDEOGRAPH + {0xAEA2, 0x6065}, //2044 #CJK UNIFIED IDEOGRAPH + {0xAEA3, 0x6050}, //2045 #CJK UNIFIED IDEOGRAPH + {0xAEA4, 0x6055}, //2046 #CJK UNIFIED IDEOGRAPH + {0xAEA5, 0x606D}, //2047 #CJK UNIFIED IDEOGRAPH + {0xAEA6, 0x6069}, //2048 #CJK UNIFIED IDEOGRAPH + {0xAEA7, 0x606F}, //2049 #CJK UNIFIED IDEOGRAPH + {0xAEA8, 0x6084}, //2050 #CJK UNIFIED IDEOGRAPH + {0xAEA9, 0x609F}, //2051 #CJK UNIFIED IDEOGRAPH + {0xAEAA, 0x609A}, //2052 #CJK UNIFIED IDEOGRAPH + {0xAEAB, 0x608D}, //2053 #CJK UNIFIED IDEOGRAPH + {0xAEAC, 0x6094}, //2054 #CJK UNIFIED IDEOGRAPH + {0xAEAD, 0x608C}, //2055 #CJK UNIFIED IDEOGRAPH + {0xAEAE, 0x6085}, //2056 #CJK UNIFIED IDEOGRAPH + {0xAEAF, 0x6096}, //2057 #CJK UNIFIED IDEOGRAPH + {0xAEB0, 0x6247}, //2058 #CJK UNIFIED IDEOGRAPH + {0xAEB1, 0x62F3}, //2059 #CJK UNIFIED IDEOGRAPH + {0xAEB2, 0x6308}, //2060 #CJK UNIFIED IDEOGRAPH + {0xAEB3, 0x62FF}, //2061 #CJK UNIFIED IDEOGRAPH + {0xAEB4, 0x634E}, //2062 #CJK UNIFIED IDEOGRAPH + {0xAEB5, 0x633E}, //2063 #CJK UNIFIED IDEOGRAPH + {0xAEB6, 0x632F}, //2064 #CJK UNIFIED IDEOGRAPH + {0xAEB7, 0x6355}, //2065 #CJK UNIFIED IDEOGRAPH + {0xAEB8, 0x6342}, //2066 #CJK UNIFIED IDEOGRAPH + {0xAEB9, 0x6346}, //2067 #CJK UNIFIED IDEOGRAPH + {0xAEBA, 0x634F}, //2068 #CJK UNIFIED IDEOGRAPH + {0xAEBB, 0x6349}, //2069 #CJK UNIFIED IDEOGRAPH + {0xAEBC, 0x633A}, //2070 #CJK UNIFIED IDEOGRAPH + {0xAEBD, 0x6350}, //2071 #CJK UNIFIED IDEOGRAPH + {0xAEBE, 0x633D}, //2072 #CJK UNIFIED IDEOGRAPH + {0xAEBF, 0x632A}, //2073 #CJK UNIFIED IDEOGRAPH + {0xAEC0, 0x632B}, //2074 #CJK UNIFIED IDEOGRAPH + {0xAEC1, 0x6328}, //2075 #CJK UNIFIED IDEOGRAPH + {0xAEC2, 0x634D}, //2076 #CJK UNIFIED IDEOGRAPH + {0xAEC3, 0x634C}, //2077 #CJK UNIFIED IDEOGRAPH + {0xAEC4, 0x6548}, //2078 #CJK UNIFIED IDEOGRAPH + {0xAEC5, 0x6549}, //2079 #CJK UNIFIED IDEOGRAPH + {0xAEC6, 0x6599}, //2080 #CJK UNIFIED IDEOGRAPH + {0xAEC7, 0x65C1}, //2081 #CJK UNIFIED IDEOGRAPH + {0xAEC8, 0x65C5}, //2082 #CJK UNIFIED IDEOGRAPH + {0xAEC9, 0x6642}, //2083 #CJK UNIFIED IDEOGRAPH + {0xAECA, 0x6649}, //2084 #CJK UNIFIED IDEOGRAPH + {0xAECB, 0x664F}, //2085 #CJK UNIFIED IDEOGRAPH + {0xAECC, 0x6643}, //2086 #CJK UNIFIED IDEOGRAPH + {0xAECD, 0x6652}, //2087 #CJK UNIFIED IDEOGRAPH + {0xAECE, 0x664C}, //2088 #CJK UNIFIED IDEOGRAPH + {0xAECF, 0x6645}, //2089 #CJK UNIFIED IDEOGRAPH + {0xAED0, 0x6641}, //2090 #CJK UNIFIED IDEOGRAPH + {0xAED1, 0x66F8}, //2091 #CJK UNIFIED IDEOGRAPH + {0xAED2, 0x6714}, //2092 #CJK UNIFIED IDEOGRAPH + {0xAED3, 0x6715}, //2093 #CJK UNIFIED IDEOGRAPH + {0xAED4, 0x6717}, //2094 #CJK UNIFIED IDEOGRAPH + {0xAED5, 0x6821}, //2095 #CJK UNIFIED IDEOGRAPH + {0xAED6, 0x6838}, //2096 #CJK UNIFIED IDEOGRAPH + {0xAED7, 0x6848}, //2097 #CJK UNIFIED IDEOGRAPH + {0xAED8, 0x6846}, //2098 #CJK UNIFIED IDEOGRAPH + {0xAED9, 0x6853}, //2099 #CJK UNIFIED IDEOGRAPH + {0xAEDA, 0x6839}, //2100 #CJK UNIFIED IDEOGRAPH + {0xAEDB, 0x6842}, //2101 #CJK UNIFIED IDEOGRAPH + {0xAEDC, 0x6854}, //2102 #CJK UNIFIED IDEOGRAPH + {0xAEDD, 0x6829}, //2103 #CJK UNIFIED IDEOGRAPH + {0xAEDE, 0x68B3}, //2104 #CJK UNIFIED IDEOGRAPH + {0xAEDF, 0x6817}, //2105 #CJK UNIFIED IDEOGRAPH + {0xAEE0, 0x684C}, //2106 #CJK UNIFIED IDEOGRAPH + {0xAEE1, 0x6851}, //2107 #CJK UNIFIED IDEOGRAPH + {0xAEE2, 0x683D}, //2108 #CJK UNIFIED IDEOGRAPH + {0xAEE3, 0x67F4}, //2109 #CJK UNIFIED IDEOGRAPH + {0xAEE4, 0x6850}, //2110 #CJK UNIFIED IDEOGRAPH + {0xAEE5, 0x6840}, //2111 #CJK UNIFIED IDEOGRAPH + {0xAEE6, 0x683C}, //2112 #CJK UNIFIED IDEOGRAPH + {0xAEE7, 0x6843}, //2113 #CJK UNIFIED IDEOGRAPH + {0xAEE8, 0x682A}, //2114 #CJK UNIFIED IDEOGRAPH + {0xAEE9, 0x6845}, //2115 #CJK UNIFIED IDEOGRAPH + {0xAEEA, 0x6813}, //2116 #CJK UNIFIED IDEOGRAPH + {0xAEEB, 0x6818}, //2117 #CJK UNIFIED IDEOGRAPH + {0xAEEC, 0x6841}, //2118 #CJK UNIFIED IDEOGRAPH + {0xAEED, 0x6B8A}, //2119 #CJK UNIFIED IDEOGRAPH + {0xAEEE, 0x6B89}, //2120 #CJK UNIFIED IDEOGRAPH + {0xAEEF, 0x6BB7}, //2121 #CJK UNIFIED IDEOGRAPH + {0xAEF0, 0x6C23}, //2122 #CJK UNIFIED IDEOGRAPH + {0xAEF1, 0x6C27}, //2123 #CJK UNIFIED IDEOGRAPH + {0xAEF2, 0x6C28}, //2124 #CJK UNIFIED IDEOGRAPH + {0xAEF3, 0x6C26}, //2125 #CJK UNIFIED IDEOGRAPH + {0xAEF4, 0x6C24}, //2126 #CJK UNIFIED IDEOGRAPH + {0xAEF5, 0x6CF0}, //2127 #CJK UNIFIED IDEOGRAPH + {0xAEF6, 0x6D6A}, //2128 #CJK UNIFIED IDEOGRAPH + {0xAEF7, 0x6D95}, //2129 #CJK UNIFIED IDEOGRAPH + {0xAEF8, 0x6D88}, //2130 #CJK UNIFIED IDEOGRAPH + {0xAEF9, 0x6D87}, //2131 #CJK UNIFIED IDEOGRAPH + {0xAEFA, 0x6D66}, //2132 #CJK UNIFIED IDEOGRAPH + {0xAEFB, 0x6D78}, //2133 #CJK UNIFIED IDEOGRAPH + {0xAEFC, 0x6D77}, //2134 #CJK UNIFIED IDEOGRAPH + {0xAEFD, 0x6D59}, //2135 #CJK UNIFIED IDEOGRAPH + {0xAEFE, 0x6D93}, //2136 #CJK UNIFIED IDEOGRAPH + {0xAF40, 0x6D6C}, //2137 #CJK UNIFIED IDEOGRAPH + {0xAF41, 0x6D89}, //2138 #CJK UNIFIED IDEOGRAPH + {0xAF42, 0x6D6E}, //2139 #CJK UNIFIED IDEOGRAPH + {0xAF43, 0x6D5A}, //2140 #CJK UNIFIED IDEOGRAPH + {0xAF44, 0x6D74}, //2141 #CJK UNIFIED IDEOGRAPH + {0xAF45, 0x6D69}, //2142 #CJK UNIFIED IDEOGRAPH + {0xAF46, 0x6D8C}, //2143 #CJK UNIFIED IDEOGRAPH + {0xAF47, 0x6D8A}, //2144 #CJK UNIFIED IDEOGRAPH + {0xAF48, 0x6D79}, //2145 #CJK UNIFIED IDEOGRAPH + {0xAF49, 0x6D85}, //2146 #CJK UNIFIED IDEOGRAPH + {0xAF4A, 0x6D65}, //2147 #CJK UNIFIED IDEOGRAPH + {0xAF4B, 0x6D94}, //2148 #CJK UNIFIED IDEOGRAPH + {0xAF4C, 0x70CA}, //2149 #CJK UNIFIED IDEOGRAPH + {0xAF4D, 0x70D8}, //2150 #CJK UNIFIED IDEOGRAPH + {0xAF4E, 0x70E4}, //2151 #CJK UNIFIED IDEOGRAPH + {0xAF4F, 0x70D9}, //2152 #CJK UNIFIED IDEOGRAPH + {0xAF50, 0x70C8}, //2153 #CJK UNIFIED IDEOGRAPH + {0xAF51, 0x70CF}, //2154 #CJK UNIFIED IDEOGRAPH + {0xAF52, 0x7239}, //2155 #CJK UNIFIED IDEOGRAPH + {0xAF53, 0x7279}, //2156 #CJK UNIFIED IDEOGRAPH + {0xAF54, 0x72FC}, //2157 #CJK UNIFIED IDEOGRAPH + {0xAF55, 0x72F9}, //2158 #CJK UNIFIED IDEOGRAPH + {0xAF56, 0x72FD}, //2159 #CJK UNIFIED IDEOGRAPH + {0xAF57, 0x72F8}, //2160 #CJK UNIFIED IDEOGRAPH + {0xAF58, 0x72F7}, //2161 #CJK UNIFIED IDEOGRAPH + {0xAF59, 0x7386}, //2162 #CJK UNIFIED IDEOGRAPH + {0xAF5A, 0x73ED}, //2163 #CJK UNIFIED IDEOGRAPH + {0xAF5B, 0x7409}, //2164 #CJK UNIFIED IDEOGRAPH + {0xAF5C, 0x73EE}, //2165 #CJK UNIFIED IDEOGRAPH + {0xAF5D, 0x73E0}, //2166 #CJK UNIFIED IDEOGRAPH + {0xAF5E, 0x73EA}, //2167 #CJK UNIFIED IDEOGRAPH + {0xAF5F, 0x73DE}, //2168 #CJK UNIFIED IDEOGRAPH + {0xAF60, 0x7554}, //2169 #CJK UNIFIED IDEOGRAPH + {0xAF61, 0x755D}, //2170 #CJK UNIFIED IDEOGRAPH + {0xAF62, 0x755C}, //2171 #CJK UNIFIED IDEOGRAPH + {0xAF63, 0x755A}, //2172 #CJK UNIFIED IDEOGRAPH + {0xAF64, 0x7559}, //2173 #CJK UNIFIED IDEOGRAPH + {0xAF65, 0x75BE}, //2174 #CJK UNIFIED IDEOGRAPH + {0xAF66, 0x75C5}, //2175 #CJK UNIFIED IDEOGRAPH + {0xAF67, 0x75C7}, //2176 #CJK UNIFIED IDEOGRAPH + {0xAF68, 0x75B2}, //2177 #CJK UNIFIED IDEOGRAPH + {0xAF69, 0x75B3}, //2178 #CJK UNIFIED IDEOGRAPH + {0xAF6A, 0x75BD}, //2179 #CJK UNIFIED IDEOGRAPH + {0xAF6B, 0x75BC}, //2180 #CJK UNIFIED IDEOGRAPH + {0xAF6C, 0x75B9}, //2181 #CJK UNIFIED IDEOGRAPH + {0xAF6D, 0x75C2}, //2182 #CJK UNIFIED IDEOGRAPH + {0xAF6E, 0x75B8}, //2183 #CJK UNIFIED IDEOGRAPH + {0xAF6F, 0x768B}, //2184 #CJK UNIFIED IDEOGRAPH + {0xAF70, 0x76B0}, //2185 #CJK UNIFIED IDEOGRAPH + {0xAF71, 0x76CA}, //2186 #CJK UNIFIED IDEOGRAPH + {0xAF72, 0x76CD}, //2187 #CJK UNIFIED IDEOGRAPH + {0xAF73, 0x76CE}, //2188 #CJK UNIFIED IDEOGRAPH + {0xAF74, 0x7729}, //2189 #CJK UNIFIED IDEOGRAPH + {0xAF75, 0x771F}, //2190 #CJK UNIFIED IDEOGRAPH + {0xAF76, 0x7720}, //2191 #CJK UNIFIED IDEOGRAPH + {0xAF77, 0x7728}, //2192 #CJK UNIFIED IDEOGRAPH + {0xAF78, 0x77E9}, //2193 #CJK UNIFIED IDEOGRAPH + {0xAF79, 0x7830}, //2194 #CJK UNIFIED IDEOGRAPH + {0xAF7A, 0x7827}, //2195 #CJK UNIFIED IDEOGRAPH + {0xAF7B, 0x7838}, //2196 #CJK UNIFIED IDEOGRAPH + {0xAF7C, 0x781D}, //2197 #CJK UNIFIED IDEOGRAPH + {0xAF7D, 0x7834}, //2198 #CJK UNIFIED IDEOGRAPH + {0xAF7E, 0x7837}, //2199 #CJK UNIFIED IDEOGRAPH + {0xAFA1, 0x7825}, //2200 #CJK UNIFIED IDEOGRAPH + {0xAFA2, 0x782D}, //2201 #CJK UNIFIED IDEOGRAPH + {0xAFA3, 0x7820}, //2202 #CJK UNIFIED IDEOGRAPH + {0xAFA4, 0x781F}, //2203 #CJK UNIFIED IDEOGRAPH + {0xAFA5, 0x7832}, //2204 #CJK UNIFIED IDEOGRAPH + {0xAFA6, 0x7955}, //2205 #CJK UNIFIED IDEOGRAPH + {0xAFA7, 0x7950}, //2206 #CJK UNIFIED IDEOGRAPH + {0xAFA8, 0x7960}, //2207 #CJK UNIFIED IDEOGRAPH + {0xAFA9, 0x795F}, //2208 #CJK UNIFIED IDEOGRAPH + {0xAFAA, 0x7956}, //2209 #CJK UNIFIED IDEOGRAPH + {0xAFAB, 0x795E}, //2210 #CJK UNIFIED IDEOGRAPH + {0xAFAC, 0x795D}, //2211 #CJK UNIFIED IDEOGRAPH + {0xAFAD, 0x7957}, //2212 #CJK UNIFIED IDEOGRAPH + {0xAFAE, 0x795A}, //2213 #CJK UNIFIED IDEOGRAPH + {0xAFAF, 0x79E4}, //2214 #CJK UNIFIED IDEOGRAPH + {0xAFB0, 0x79E3}, //2215 #CJK UNIFIED IDEOGRAPH + {0xAFB1, 0x79E7}, //2216 #CJK UNIFIED IDEOGRAPH + {0xAFB2, 0x79DF}, //2217 #CJK UNIFIED IDEOGRAPH + {0xAFB3, 0x79E6}, //2218 #CJK UNIFIED IDEOGRAPH + {0xAFB4, 0x79E9}, //2219 #CJK UNIFIED IDEOGRAPH + {0xAFB5, 0x79D8}, //2220 #CJK UNIFIED IDEOGRAPH + {0xAFB6, 0x7A84}, //2221 #CJK UNIFIED IDEOGRAPH + {0xAFB7, 0x7A88}, //2222 #CJK UNIFIED IDEOGRAPH + {0xAFB8, 0x7AD9}, //2223 #CJK UNIFIED IDEOGRAPH + {0xAFB9, 0x7B06}, //2224 #CJK UNIFIED IDEOGRAPH + {0xAFBA, 0x7B11}, //2225 #CJK UNIFIED IDEOGRAPH + {0xAFBB, 0x7C89}, //2226 #CJK UNIFIED IDEOGRAPH + {0xAFBC, 0x7D21}, //2227 #CJK UNIFIED IDEOGRAPH + {0xAFBD, 0x7D17}, //2228 #CJK UNIFIED IDEOGRAPH + {0xAFBE, 0x7D0B}, //2229 #CJK UNIFIED IDEOGRAPH + {0xAFBF, 0x7D0A}, //2230 #CJK UNIFIED IDEOGRAPH + {0xAFC0, 0x7D20}, //2231 #CJK UNIFIED IDEOGRAPH + {0xAFC1, 0x7D22}, //2232 #CJK UNIFIED IDEOGRAPH + {0xAFC2, 0x7D14}, //2233 #CJK UNIFIED IDEOGRAPH + {0xAFC3, 0x7D10}, //2234 #CJK UNIFIED IDEOGRAPH + {0xAFC4, 0x7D15}, //2235 #CJK UNIFIED IDEOGRAPH + {0xAFC5, 0x7D1A}, //2236 #CJK UNIFIED IDEOGRAPH + {0xAFC6, 0x7D1C}, //2237 #CJK UNIFIED IDEOGRAPH + {0xAFC7, 0x7D0D}, //2238 #CJK UNIFIED IDEOGRAPH + {0xAFC8, 0x7D19}, //2239 #CJK UNIFIED IDEOGRAPH + {0xAFC9, 0x7D1B}, //2240 #CJK UNIFIED IDEOGRAPH + {0xAFCA, 0x7F3A}, //2241 #CJK UNIFIED IDEOGRAPH + {0xAFCB, 0x7F5F}, //2242 #CJK UNIFIED IDEOGRAPH + {0xAFCC, 0x7F94}, //2243 #CJK UNIFIED IDEOGRAPH + {0xAFCD, 0x7FC5}, //2244 #CJK UNIFIED IDEOGRAPH + {0xAFCE, 0x7FC1}, //2245 #CJK UNIFIED IDEOGRAPH + {0xAFCF, 0x8006}, //2246 #CJK UNIFIED IDEOGRAPH + {0xAFD0, 0x8018}, //2247 #CJK UNIFIED IDEOGRAPH + {0xAFD1, 0x8015}, //2248 #CJK UNIFIED IDEOGRAPH + {0xAFD2, 0x8019}, //2249 #CJK UNIFIED IDEOGRAPH + {0xAFD3, 0x8017}, //2250 #CJK UNIFIED IDEOGRAPH + {0xAFD4, 0x803D}, //2251 #CJK UNIFIED IDEOGRAPH + {0xAFD5, 0x803F}, //2252 #CJK UNIFIED IDEOGRAPH + {0xAFD6, 0x80F1}, //2253 #CJK UNIFIED IDEOGRAPH + {0xAFD7, 0x8102}, //2254 #CJK UNIFIED IDEOGRAPH + {0xAFD8, 0x80F0}, //2255 #CJK UNIFIED IDEOGRAPH + {0xAFD9, 0x8105}, //2256 #CJK UNIFIED IDEOGRAPH + {0xAFDA, 0x80ED}, //2257 #CJK UNIFIED IDEOGRAPH + {0xAFDB, 0x80F4}, //2258 #CJK UNIFIED IDEOGRAPH + {0xAFDC, 0x8106}, //2259 #CJK UNIFIED IDEOGRAPH + {0xAFDD, 0x80F8}, //2260 #CJK UNIFIED IDEOGRAPH + {0xAFDE, 0x80F3}, //2261 #CJK UNIFIED IDEOGRAPH + {0xAFDF, 0x8108}, //2262 #CJK UNIFIED IDEOGRAPH + {0xAFE0, 0x80FD}, //2263 #CJK UNIFIED IDEOGRAPH + {0xAFE1, 0x810A}, //2264 #CJK UNIFIED IDEOGRAPH + {0xAFE2, 0x80FC}, //2265 #CJK UNIFIED IDEOGRAPH + {0xAFE3, 0x80EF}, //2266 #CJK UNIFIED IDEOGRAPH + {0xAFE4, 0x81ED}, //2267 #CJK UNIFIED IDEOGRAPH + {0xAFE5, 0x81EC}, //2268 #CJK UNIFIED IDEOGRAPH + {0xAFE6, 0x8200}, //2269 #CJK UNIFIED IDEOGRAPH + {0xAFE7, 0x8210}, //2270 #CJK UNIFIED IDEOGRAPH + {0xAFE8, 0x822A}, //2271 #CJK UNIFIED IDEOGRAPH + {0xAFE9, 0x822B}, //2272 #CJK UNIFIED IDEOGRAPH + {0xAFEA, 0x8228}, //2273 #CJK UNIFIED IDEOGRAPH + {0xAFEB, 0x822C}, //2274 #CJK UNIFIED IDEOGRAPH + {0xAFEC, 0x82BB}, //2275 #CJK UNIFIED IDEOGRAPH + {0xAFED, 0x832B}, //2276 #CJK UNIFIED IDEOGRAPH + {0xAFEE, 0x8352}, //2277 #CJK UNIFIED IDEOGRAPH + {0xAFEF, 0x8354}, //2278 #CJK UNIFIED IDEOGRAPH + {0xAFF0, 0x834A}, //2279 #CJK UNIFIED IDEOGRAPH + {0xAFF1, 0x8338}, //2280 #CJK UNIFIED IDEOGRAPH + {0xAFF2, 0x8350}, //2281 #CJK UNIFIED IDEOGRAPH + {0xAFF3, 0x8349}, //2282 #CJK UNIFIED IDEOGRAPH + {0xAFF4, 0x8335}, //2283 #CJK UNIFIED IDEOGRAPH + {0xAFF5, 0x8334}, //2284 #CJK UNIFIED IDEOGRAPH + {0xAFF6, 0x834F}, //2285 #CJK UNIFIED IDEOGRAPH + {0xAFF7, 0x8332}, //2286 #CJK UNIFIED IDEOGRAPH + {0xAFF8, 0x8339}, //2287 #CJK UNIFIED IDEOGRAPH + {0xAFF9, 0x8336}, //2288 #CJK UNIFIED IDEOGRAPH + {0xAFFA, 0x8317}, //2289 #CJK UNIFIED IDEOGRAPH + {0xAFFB, 0x8340}, //2290 #CJK UNIFIED IDEOGRAPH + {0xAFFC, 0x8331}, //2291 #CJK UNIFIED IDEOGRAPH + {0xAFFD, 0x8328}, //2292 #CJK UNIFIED IDEOGRAPH + {0xAFFE, 0x8343}, //2293 #CJK UNIFIED IDEOGRAPH + {0xB040, 0x8654}, //2294 #CJK UNIFIED IDEOGRAPH + {0xB041, 0x868A}, //2295 #CJK UNIFIED IDEOGRAPH + {0xB042, 0x86AA}, //2296 #CJK UNIFIED IDEOGRAPH + {0xB043, 0x8693}, //2297 #CJK UNIFIED IDEOGRAPH + {0xB044, 0x86A4}, //2298 #CJK UNIFIED IDEOGRAPH + {0xB045, 0x86A9}, //2299 #CJK UNIFIED IDEOGRAPH + {0xB046, 0x868C}, //2300 #CJK UNIFIED IDEOGRAPH + {0xB047, 0x86A3}, //2301 #CJK UNIFIED IDEOGRAPH + {0xB048, 0x869C}, //2302 #CJK UNIFIED IDEOGRAPH + {0xB049, 0x8870}, //2303 #CJK UNIFIED IDEOGRAPH + {0xB04A, 0x8877}, //2304 #CJK UNIFIED IDEOGRAPH + {0xB04B, 0x8881}, //2305 #CJK UNIFIED IDEOGRAPH + {0xB04C, 0x8882}, //2306 #CJK UNIFIED IDEOGRAPH + {0xB04D, 0x887D}, //2307 #CJK UNIFIED IDEOGRAPH + {0xB04E, 0x8879}, //2308 #CJK UNIFIED IDEOGRAPH + {0xB04F, 0x8A18}, //2309 #CJK UNIFIED IDEOGRAPH + {0xB050, 0x8A10}, //2310 #CJK UNIFIED IDEOGRAPH + {0xB051, 0x8A0E}, //2311 #CJK UNIFIED IDEOGRAPH + {0xB052, 0x8A0C}, //2312 #CJK UNIFIED IDEOGRAPH + {0xB053, 0x8A15}, //2313 #CJK UNIFIED IDEOGRAPH + {0xB054, 0x8A0A}, //2314 #CJK UNIFIED IDEOGRAPH + {0xB055, 0x8A17}, //2315 #CJK UNIFIED IDEOGRAPH + {0xB056, 0x8A13}, //2316 #CJK UNIFIED IDEOGRAPH + {0xB057, 0x8A16}, //2317 #CJK UNIFIED IDEOGRAPH + {0xB058, 0x8A0F}, //2318 #CJK UNIFIED IDEOGRAPH + {0xB059, 0x8A11}, //2319 #CJK UNIFIED IDEOGRAPH + {0xB05A, 0x8C48}, //2320 #CJK UNIFIED IDEOGRAPH + {0xB05B, 0x8C7A}, //2321 #CJK UNIFIED IDEOGRAPH + {0xB05C, 0x8C79}, //2322 #CJK UNIFIED IDEOGRAPH + {0xB05D, 0x8CA1}, //2323 #CJK UNIFIED IDEOGRAPH + {0xB05E, 0x8CA2}, //2324 #CJK UNIFIED IDEOGRAPH + {0xB05F, 0x8D77}, //2325 #CJK UNIFIED IDEOGRAPH + {0xB060, 0x8EAC}, //2326 #CJK UNIFIED IDEOGRAPH + {0xB061, 0x8ED2}, //2327 #CJK UNIFIED IDEOGRAPH + {0xB062, 0x8ED4}, //2328 #CJK UNIFIED IDEOGRAPH + {0xB063, 0x8ECF}, //2329 #CJK UNIFIED IDEOGRAPH + {0xB064, 0x8FB1}, //2330 #CJK UNIFIED IDEOGRAPH + {0xB065, 0x9001}, //2331 #CJK UNIFIED IDEOGRAPH + {0xB066, 0x9006}, //2332 #CJK UNIFIED IDEOGRAPH + {0xB067, 0x8FF7}, //2333 #CJK UNIFIED IDEOGRAPH + {0xB068, 0x9000}, //2334 #CJK UNIFIED IDEOGRAPH + {0xB069, 0x8FFA}, //2335 #CJK UNIFIED IDEOGRAPH + {0xB06A, 0x8FF4}, //2336 #CJK UNIFIED IDEOGRAPH + {0xB06B, 0x9003}, //2337 #CJK UNIFIED IDEOGRAPH + {0xB06C, 0x8FFD}, //2338 #CJK UNIFIED IDEOGRAPH + {0xB06D, 0x9005}, //2339 #CJK UNIFIED IDEOGRAPH + {0xB06E, 0x8FF8}, //2340 #CJK UNIFIED IDEOGRAPH + {0xB06F, 0x9095}, //2341 #CJK UNIFIED IDEOGRAPH + {0xB070, 0x90E1}, //2342 #CJK UNIFIED IDEOGRAPH + {0xB071, 0x90DD}, //2343 #CJK UNIFIED IDEOGRAPH + {0xB072, 0x90E2}, //2344 #CJK UNIFIED IDEOGRAPH + {0xB073, 0x9152}, //2345 #CJK UNIFIED IDEOGRAPH + {0xB074, 0x914D}, //2346 #CJK UNIFIED IDEOGRAPH + {0xB075, 0x914C}, //2347 #CJK UNIFIED IDEOGRAPH + {0xB076, 0x91D8}, //2348 #CJK UNIFIED IDEOGRAPH + {0xB077, 0x91DD}, //2349 #CJK UNIFIED IDEOGRAPH + {0xB078, 0x91D7}, //2350 #CJK UNIFIED IDEOGRAPH + {0xB079, 0x91DC}, //2351 #CJK UNIFIED IDEOGRAPH + {0xB07A, 0x91D9}, //2352 #CJK UNIFIED IDEOGRAPH + {0xB07B, 0x9583}, //2353 #CJK UNIFIED IDEOGRAPH + {0xB07C, 0x9662}, //2354 #CJK UNIFIED IDEOGRAPH + {0xB07D, 0x9663}, //2355 #CJK UNIFIED IDEOGRAPH + {0xB07E, 0x9661}, //2356 #CJK UNIFIED IDEOGRAPH + {0xB0A1, 0x965B}, //2357 #CJK UNIFIED IDEOGRAPH + {0xB0A2, 0x965D}, //2358 #CJK UNIFIED IDEOGRAPH + {0xB0A3, 0x9664}, //2359 #CJK UNIFIED IDEOGRAPH + {0xB0A4, 0x9658}, //2360 #CJK UNIFIED IDEOGRAPH + {0xB0A5, 0x965E}, //2361 #CJK UNIFIED IDEOGRAPH + {0xB0A6, 0x96BB}, //2362 #CJK UNIFIED IDEOGRAPH + {0xB0A7, 0x98E2}, //2363 #CJK UNIFIED IDEOGRAPH + {0xB0A8, 0x99AC}, //2364 #CJK UNIFIED IDEOGRAPH + {0xB0A9, 0x9AA8}, //2365 #CJK UNIFIED IDEOGRAPH + {0xB0AA, 0x9AD8}, //2366 #CJK UNIFIED IDEOGRAPH + {0xB0AB, 0x9B25}, //2367 #CJK UNIFIED IDEOGRAPH + {0xB0AC, 0x9B32}, //2368 #CJK UNIFIED IDEOGRAPH + {0xB0AD, 0x9B3C}, //2369 #CJK UNIFIED IDEOGRAPH + {0xB0AE, 0x4E7E}, //2370 #CJK UNIFIED IDEOGRAPH + {0xB0AF, 0x507A}, //2371 #CJK UNIFIED IDEOGRAPH + {0xB0B0, 0x507D}, //2372 #CJK UNIFIED IDEOGRAPH + {0xB0B1, 0x505C}, //2373 #CJK UNIFIED IDEOGRAPH + {0xB0B2, 0x5047}, //2374 #CJK UNIFIED IDEOGRAPH + {0xB0B3, 0x5043}, //2375 #CJK UNIFIED IDEOGRAPH + {0xB0B4, 0x504C}, //2376 #CJK UNIFIED IDEOGRAPH + {0xB0B5, 0x505A}, //2377 #CJK UNIFIED IDEOGRAPH + {0xB0B6, 0x5049}, //2378 #CJK UNIFIED IDEOGRAPH + {0xB0B7, 0x5065}, //2379 #CJK UNIFIED IDEOGRAPH + {0xB0B8, 0x5076}, //2380 #CJK UNIFIED IDEOGRAPH + {0xB0B9, 0x504E}, //2381 #CJK UNIFIED IDEOGRAPH + {0xB0BA, 0x5055}, //2382 #CJK UNIFIED IDEOGRAPH + {0xB0BB, 0x5075}, //2383 #CJK UNIFIED IDEOGRAPH + {0xB0BC, 0x5074}, //2384 #CJK UNIFIED IDEOGRAPH + {0xB0BD, 0x5077}, //2385 #CJK UNIFIED IDEOGRAPH + {0xB0BE, 0x504F}, //2386 #CJK UNIFIED IDEOGRAPH + {0xB0BF, 0x500F}, //2387 #CJK UNIFIED IDEOGRAPH + {0xB0C0, 0x506F}, //2388 #CJK UNIFIED IDEOGRAPH + {0xB0C1, 0x506D}, //2389 #CJK UNIFIED IDEOGRAPH + {0xB0C2, 0x515C}, //2390 #CJK UNIFIED IDEOGRAPH + {0xB0C3, 0x5195}, //2391 #CJK UNIFIED IDEOGRAPH + {0xB0C4, 0x51F0}, //2392 #CJK UNIFIED IDEOGRAPH + {0xB0C5, 0x526A}, //2393 #CJK UNIFIED IDEOGRAPH + {0xB0C6, 0x526F}, //2394 #CJK UNIFIED IDEOGRAPH + {0xB0C7, 0x52D2}, //2395 #CJK UNIFIED IDEOGRAPH + {0xB0C8, 0x52D9}, //2396 #CJK UNIFIED IDEOGRAPH + {0xB0C9, 0x52D8}, //2397 #CJK UNIFIED IDEOGRAPH + {0xB0CA, 0x52D5}, //2398 #CJK UNIFIED IDEOGRAPH + {0xB0CB, 0x5310}, //2399 #CJK UNIFIED IDEOGRAPH + {0xB0CC, 0x530F}, //2400 #CJK UNIFIED IDEOGRAPH + {0xB0CD, 0x5319}, //2401 #CJK UNIFIED IDEOGRAPH + {0xB0CE, 0x533F}, //2402 #CJK UNIFIED IDEOGRAPH + {0xB0CF, 0x5340}, //2403 #CJK UNIFIED IDEOGRAPH + {0xB0D0, 0x533E}, //2404 #CJK UNIFIED IDEOGRAPH + {0xB0D1, 0x53C3}, //2405 #CJK UNIFIED IDEOGRAPH + {0xB0D2, 0x66FC}, //2406 #CJK UNIFIED IDEOGRAPH + {0xB0D3, 0x5546}, //2407 #CJK UNIFIED IDEOGRAPH + {0xB0D4, 0x556A}, //2408 #CJK UNIFIED IDEOGRAPH + {0xB0D5, 0x5566}, //2409 #CJK UNIFIED IDEOGRAPH + {0xB0D6, 0x5544}, //2410 #CJK UNIFIED IDEOGRAPH + {0xB0D7, 0x555E}, //2411 #CJK UNIFIED IDEOGRAPH + {0xB0D8, 0x5561}, //2412 #CJK UNIFIED IDEOGRAPH + {0xB0D9, 0x5543}, //2413 #CJK UNIFIED IDEOGRAPH + {0xB0DA, 0x554A}, //2414 #CJK UNIFIED IDEOGRAPH + {0xB0DB, 0x5531}, //2415 #CJK UNIFIED IDEOGRAPH + {0xB0DC, 0x5556}, //2416 #CJK UNIFIED IDEOGRAPH + {0xB0DD, 0x554F}, //2417 #CJK UNIFIED IDEOGRAPH + {0xB0DE, 0x5555}, //2418 #CJK UNIFIED IDEOGRAPH + {0xB0DF, 0x552F}, //2419 #CJK UNIFIED IDEOGRAPH + {0xB0E0, 0x5564}, //2420 #CJK UNIFIED IDEOGRAPH + {0xB0E1, 0x5538}, //2421 #CJK UNIFIED IDEOGRAPH + {0xB0E2, 0x552E}, //2422 #CJK UNIFIED IDEOGRAPH + {0xB0E3, 0x555C}, //2423 #CJK UNIFIED IDEOGRAPH + {0xB0E4, 0x552C}, //2424 #CJK UNIFIED IDEOGRAPH + {0xB0E5, 0x5563}, //2425 #CJK UNIFIED IDEOGRAPH + {0xB0E6, 0x5533}, //2426 #CJK UNIFIED IDEOGRAPH + {0xB0E7, 0x5541}, //2427 #CJK UNIFIED IDEOGRAPH + {0xB0E8, 0x5557}, //2428 #CJK UNIFIED IDEOGRAPH + {0xB0E9, 0x5708}, //2429 #CJK UNIFIED IDEOGRAPH + {0xB0EA, 0x570B}, //2430 #CJK UNIFIED IDEOGRAPH + {0xB0EB, 0x5709}, //2431 #CJK UNIFIED IDEOGRAPH + {0xB0EC, 0x57DF}, //2432 #CJK UNIFIED IDEOGRAPH + {0xB0ED, 0x5805}, //2433 #CJK UNIFIED IDEOGRAPH + {0xB0EE, 0x580A}, //2434 #CJK UNIFIED IDEOGRAPH + {0xB0EF, 0x5806}, //2435 #CJK UNIFIED IDEOGRAPH + {0xB0F0, 0x57E0}, //2436 #CJK UNIFIED IDEOGRAPH + {0xB0F1, 0x57E4}, //2437 #CJK UNIFIED IDEOGRAPH + {0xB0F2, 0x57FA}, //2438 #CJK UNIFIED IDEOGRAPH + {0xB0F3, 0x5802}, //2439 #CJK UNIFIED IDEOGRAPH + {0xB0F4, 0x5835}, //2440 #CJK UNIFIED IDEOGRAPH + {0xB0F5, 0x57F7}, //2441 #CJK UNIFIED IDEOGRAPH + {0xB0F6, 0x57F9}, //2442 #CJK UNIFIED IDEOGRAPH + {0xB0F7, 0x5920}, //2443 #CJK UNIFIED IDEOGRAPH + {0xB0F8, 0x5962}, //2444 #CJK UNIFIED IDEOGRAPH + {0xB0F9, 0x5A36}, //2445 #CJK UNIFIED IDEOGRAPH + {0xB0FA, 0x5A41}, //2446 #CJK UNIFIED IDEOGRAPH + {0xB0FB, 0x5A49}, //2447 #CJK UNIFIED IDEOGRAPH + {0xB0FC, 0x5A66}, //2448 #CJK UNIFIED IDEOGRAPH + {0xB0FD, 0x5A6A}, //2449 #CJK UNIFIED IDEOGRAPH + {0xB0FE, 0x5A40}, //2450 #CJK UNIFIED IDEOGRAPH + {0xB140, 0x5A3C}, //2451 #CJK UNIFIED IDEOGRAPH + {0xB141, 0x5A62}, //2452 #CJK UNIFIED IDEOGRAPH + {0xB142, 0x5A5A}, //2453 #CJK UNIFIED IDEOGRAPH + {0xB143, 0x5A46}, //2454 #CJK UNIFIED IDEOGRAPH + {0xB144, 0x5A4A}, //2455 #CJK UNIFIED IDEOGRAPH + {0xB145, 0x5B70}, //2456 #CJK UNIFIED IDEOGRAPH + {0xB146, 0x5BC7}, //2457 #CJK UNIFIED IDEOGRAPH + {0xB147, 0x5BC5}, //2458 #CJK UNIFIED IDEOGRAPH + {0xB148, 0x5BC4}, //2459 #CJK UNIFIED IDEOGRAPH + {0xB149, 0x5BC2}, //2460 #CJK UNIFIED IDEOGRAPH + {0xB14A, 0x5BBF}, //2461 #CJK UNIFIED IDEOGRAPH + {0xB14B, 0x5BC6}, //2462 #CJK UNIFIED IDEOGRAPH + {0xB14C, 0x5C09}, //2463 #CJK UNIFIED IDEOGRAPH + {0xB14D, 0x5C08}, //2464 #CJK UNIFIED IDEOGRAPH + {0xB14E, 0x5C07}, //2465 #CJK UNIFIED IDEOGRAPH + {0xB14F, 0x5C60}, //2466 #CJK UNIFIED IDEOGRAPH + {0xB150, 0x5C5C}, //2467 #CJK UNIFIED IDEOGRAPH + {0xB151, 0x5C5D}, //2468 #CJK UNIFIED IDEOGRAPH + {0xB152, 0x5D07}, //2469 #CJK UNIFIED IDEOGRAPH + {0xB153, 0x5D06}, //2470 #CJK UNIFIED IDEOGRAPH + {0xB154, 0x5D0E}, //2471 #CJK UNIFIED IDEOGRAPH + {0xB155, 0x5D1B}, //2472 #CJK UNIFIED IDEOGRAPH + {0xB156, 0x5D16}, //2473 #CJK UNIFIED IDEOGRAPH + {0xB157, 0x5D22}, //2474 #CJK UNIFIED IDEOGRAPH + {0xB158, 0x5D11}, //2475 #CJK UNIFIED IDEOGRAPH + {0xB159, 0x5D29}, //2476 #CJK UNIFIED IDEOGRAPH + {0xB15A, 0x5D14}, //2477 #CJK UNIFIED IDEOGRAPH + {0xB15B, 0x5D19}, //2478 #CJK UNIFIED IDEOGRAPH + {0xB15C, 0x5D24}, //2479 #CJK UNIFIED IDEOGRAPH + {0xB15D, 0x5D27}, //2480 #CJK UNIFIED IDEOGRAPH + {0xB15E, 0x5D17}, //2481 #CJK UNIFIED IDEOGRAPH + {0xB15F, 0x5DE2}, //2482 #CJK UNIFIED IDEOGRAPH + {0xB160, 0x5E38}, //2483 #CJK UNIFIED IDEOGRAPH + {0xB161, 0x5E36}, //2484 #CJK UNIFIED IDEOGRAPH + {0xB162, 0x5E33}, //2485 #CJK UNIFIED IDEOGRAPH + {0xB163, 0x5E37}, //2486 #CJK UNIFIED IDEOGRAPH + {0xB164, 0x5EB7}, //2487 #CJK UNIFIED IDEOGRAPH + {0xB165, 0x5EB8}, //2488 #CJK UNIFIED IDEOGRAPH + {0xB166, 0x5EB6}, //2489 #CJK UNIFIED IDEOGRAPH + {0xB167, 0x5EB5}, //2490 #CJK UNIFIED IDEOGRAPH + {0xB168, 0x5EBE}, //2491 #CJK UNIFIED IDEOGRAPH + {0xB169, 0x5F35}, //2492 #CJK UNIFIED IDEOGRAPH + {0xB16A, 0x5F37}, //2493 #CJK UNIFIED IDEOGRAPH + {0xB16B, 0x5F57}, //2494 #CJK UNIFIED IDEOGRAPH + {0xB16C, 0x5F6C}, //2495 #CJK UNIFIED IDEOGRAPH + {0xB16D, 0x5F69}, //2496 #CJK UNIFIED IDEOGRAPH + {0xB16E, 0x5F6B}, //2497 #CJK UNIFIED IDEOGRAPH + {0xB16F, 0x5F97}, //2498 #CJK UNIFIED IDEOGRAPH + {0xB170, 0x5F99}, //2499 #CJK UNIFIED IDEOGRAPH + {0xB171, 0x5F9E}, //2500 #CJK UNIFIED IDEOGRAPH + {0xB172, 0x5F98}, //2501 #CJK UNIFIED IDEOGRAPH + {0xB173, 0x5FA1}, //2502 #CJK UNIFIED IDEOGRAPH + {0xB174, 0x5FA0}, //2503 #CJK UNIFIED IDEOGRAPH + {0xB175, 0x5F9C}, //2504 #CJK UNIFIED IDEOGRAPH + {0xB176, 0x607F}, //2505 #CJK UNIFIED IDEOGRAPH + {0xB177, 0x60A3}, //2506 #CJK UNIFIED IDEOGRAPH + {0xB178, 0x6089}, //2507 #CJK UNIFIED IDEOGRAPH + {0xB179, 0x60A0}, //2508 #CJK UNIFIED IDEOGRAPH + {0xB17A, 0x60A8}, //2509 #CJK UNIFIED IDEOGRAPH + {0xB17B, 0x60CB}, //2510 #CJK UNIFIED IDEOGRAPH + {0xB17C, 0x60B4}, //2511 #CJK UNIFIED IDEOGRAPH + {0xB17D, 0x60E6}, //2512 #CJK UNIFIED IDEOGRAPH + {0xB17E, 0x60BD}, //2513 #CJK UNIFIED IDEOGRAPH + {0xB1A1, 0x60C5}, //2514 #CJK UNIFIED IDEOGRAPH + {0xB1A2, 0x60BB}, //2515 #CJK UNIFIED IDEOGRAPH + {0xB1A3, 0x60B5}, //2516 #CJK UNIFIED IDEOGRAPH + {0xB1A4, 0x60DC}, //2517 #CJK UNIFIED IDEOGRAPH + {0xB1A5, 0x60BC}, //2518 #CJK UNIFIED IDEOGRAPH + {0xB1A6, 0x60D8}, //2519 #CJK UNIFIED IDEOGRAPH + {0xB1A7, 0x60D5}, //2520 #CJK UNIFIED IDEOGRAPH + {0xB1A8, 0x60C6}, //2521 #CJK UNIFIED IDEOGRAPH + {0xB1A9, 0x60DF}, //2522 #CJK UNIFIED IDEOGRAPH + {0xB1AA, 0x60B8}, //2523 #CJK UNIFIED IDEOGRAPH + {0xB1AB, 0x60DA}, //2524 #CJK UNIFIED IDEOGRAPH + {0xB1AC, 0x60C7}, //2525 #CJK UNIFIED IDEOGRAPH + {0xB1AD, 0x621A}, //2526 #CJK UNIFIED IDEOGRAPH + {0xB1AE, 0x621B}, //2527 #CJK UNIFIED IDEOGRAPH + {0xB1AF, 0x6248}, //2528 #CJK UNIFIED IDEOGRAPH + {0xB1B0, 0x63A0}, //2529 #CJK UNIFIED IDEOGRAPH + {0xB1B1, 0x63A7}, //2530 #CJK UNIFIED IDEOGRAPH + {0xB1B2, 0x6372}, //2531 #CJK UNIFIED IDEOGRAPH + {0xB1B3, 0x6396}, //2532 #CJK UNIFIED IDEOGRAPH + {0xB1B4, 0x63A2}, //2533 #CJK UNIFIED IDEOGRAPH + {0xB1B5, 0x63A5}, //2534 #CJK UNIFIED IDEOGRAPH + {0xB1B6, 0x6377}, //2535 #CJK UNIFIED IDEOGRAPH + {0xB1B7, 0x6367}, //2536 #CJK UNIFIED IDEOGRAPH + {0xB1B8, 0x6398}, //2537 #CJK UNIFIED IDEOGRAPH + {0xB1B9, 0x63AA}, //2538 #CJK UNIFIED IDEOGRAPH + {0xB1BA, 0x6371}, //2539 #CJK UNIFIED IDEOGRAPH + {0xB1BB, 0x63A9}, //2540 #CJK UNIFIED IDEOGRAPH + {0xB1BC, 0x6389}, //2541 #CJK UNIFIED IDEOGRAPH + {0xB1BD, 0x6383}, //2542 #CJK UNIFIED IDEOGRAPH + {0xB1BE, 0x639B}, //2543 #CJK UNIFIED IDEOGRAPH + {0xB1BF, 0x636B}, //2544 #CJK UNIFIED IDEOGRAPH + {0xB1C0, 0x63A8}, //2545 #CJK UNIFIED IDEOGRAPH + {0xB1C1, 0x6384}, //2546 #CJK UNIFIED IDEOGRAPH + {0xB1C2, 0x6388}, //2547 #CJK UNIFIED IDEOGRAPH + {0xB1C3, 0x6399}, //2548 #CJK UNIFIED IDEOGRAPH + {0xB1C4, 0x63A1}, //2549 #CJK UNIFIED IDEOGRAPH + {0xB1C5, 0x63AC}, //2550 #CJK UNIFIED IDEOGRAPH + {0xB1C6, 0x6392}, //2551 #CJK UNIFIED IDEOGRAPH + {0xB1C7, 0x638F}, //2552 #CJK UNIFIED IDEOGRAPH + {0xB1C8, 0x6380}, //2553 #CJK UNIFIED IDEOGRAPH + {0xB1C9, 0x637B}, //2554 #CJK UNIFIED IDEOGRAPH + {0xB1CA, 0x6369}, //2555 #CJK UNIFIED IDEOGRAPH + {0xB1CB, 0x6368}, //2556 #CJK UNIFIED IDEOGRAPH + {0xB1CC, 0x637A}, //2557 #CJK UNIFIED IDEOGRAPH + {0xB1CD, 0x655D}, //2558 #CJK UNIFIED IDEOGRAPH + {0xB1CE, 0x6556}, //2559 #CJK UNIFIED IDEOGRAPH + {0xB1CF, 0x6551}, //2560 #CJK UNIFIED IDEOGRAPH + {0xB1D0, 0x6559}, //2561 #CJK UNIFIED IDEOGRAPH + {0xB1D1, 0x6557}, //2562 #CJK UNIFIED IDEOGRAPH + {0xB1D2, 0x555F}, //2563 #CJK UNIFIED IDEOGRAPH + {0xB1D3, 0x654F}, //2564 #CJK UNIFIED IDEOGRAPH + {0xB1D4, 0x6558}, //2565 #CJK UNIFIED IDEOGRAPH + {0xB1D5, 0x6555}, //2566 #CJK UNIFIED IDEOGRAPH + {0xB1D6, 0x6554}, //2567 #CJK UNIFIED IDEOGRAPH + {0xB1D7, 0x659C}, //2568 #CJK UNIFIED IDEOGRAPH + {0xB1D8, 0x659B}, //2569 #CJK UNIFIED IDEOGRAPH + {0xB1D9, 0x65AC}, //2570 #CJK UNIFIED IDEOGRAPH + {0xB1DA, 0x65CF}, //2571 #CJK UNIFIED IDEOGRAPH + {0xB1DB, 0x65CB}, //2572 #CJK UNIFIED IDEOGRAPH + {0xB1DC, 0x65CC}, //2573 #CJK UNIFIED IDEOGRAPH + {0xB1DD, 0x65CE}, //2574 #CJK UNIFIED IDEOGRAPH + {0xB1DE, 0x665D}, //2575 #CJK UNIFIED IDEOGRAPH + {0xB1DF, 0x665A}, //2576 #CJK UNIFIED IDEOGRAPH + {0xB1E0, 0x6664}, //2577 #CJK UNIFIED IDEOGRAPH + {0xB1E1, 0x6668}, //2578 #CJK UNIFIED IDEOGRAPH + {0xB1E2, 0x6666}, //2579 #CJK UNIFIED IDEOGRAPH + {0xB1E3, 0x665E}, //2580 #CJK UNIFIED IDEOGRAPH + {0xB1E4, 0x66F9}, //2581 #CJK UNIFIED IDEOGRAPH + {0xB1E5, 0x52D7}, //2582 #CJK UNIFIED IDEOGRAPH + {0xB1E6, 0x671B}, //2583 #CJK UNIFIED IDEOGRAPH + {0xB1E7, 0x6881}, //2584 #CJK UNIFIED IDEOGRAPH + {0xB1E8, 0x68AF}, //2585 #CJK UNIFIED IDEOGRAPH + {0xB1E9, 0x68A2}, //2586 #CJK UNIFIED IDEOGRAPH + {0xB1EA, 0x6893}, //2587 #CJK UNIFIED IDEOGRAPH + {0xB1EB, 0x68B5}, //2588 #CJK UNIFIED IDEOGRAPH + {0xB1EC, 0x687F}, //2589 #CJK UNIFIED IDEOGRAPH + {0xB1ED, 0x6876}, //2590 #CJK UNIFIED IDEOGRAPH + {0xB1EE, 0x68B1}, //2591 #CJK UNIFIED IDEOGRAPH + {0xB1EF, 0x68A7}, //2592 #CJK UNIFIED IDEOGRAPH + {0xB1F0, 0x6897}, //2593 #CJK UNIFIED IDEOGRAPH + {0xB1F1, 0x68B0}, //2594 #CJK UNIFIED IDEOGRAPH + {0xB1F2, 0x6883}, //2595 #CJK UNIFIED IDEOGRAPH + {0xB1F3, 0x68C4}, //2596 #CJK UNIFIED IDEOGRAPH + {0xB1F4, 0x68AD}, //2597 #CJK UNIFIED IDEOGRAPH + {0xB1F5, 0x6886}, //2598 #CJK UNIFIED IDEOGRAPH + {0xB1F6, 0x6885}, //2599 #CJK UNIFIED IDEOGRAPH + {0xB1F7, 0x6894}, //2600 #CJK UNIFIED IDEOGRAPH + {0xB1F8, 0x689D}, //2601 #CJK UNIFIED IDEOGRAPH + {0xB1F9, 0x68A8}, //2602 #CJK UNIFIED IDEOGRAPH + {0xB1FA, 0x689F}, //2603 #CJK UNIFIED IDEOGRAPH + {0xB1FB, 0x68A1}, //2604 #CJK UNIFIED IDEOGRAPH + {0xB1FC, 0x6882}, //2605 #CJK UNIFIED IDEOGRAPH + {0xB1FD, 0x6B32}, //2606 #CJK UNIFIED IDEOGRAPH + {0xB1FE, 0x6BBA}, //2607 #CJK UNIFIED IDEOGRAPH + {0xB240, 0x6BEB}, //2608 #CJK UNIFIED IDEOGRAPH + {0xB241, 0x6BEC}, //2609 #CJK UNIFIED IDEOGRAPH + {0xB242, 0x6C2B}, //2610 #CJK UNIFIED IDEOGRAPH + {0xB243, 0x6D8E}, //2611 #CJK UNIFIED IDEOGRAPH + {0xB244, 0x6DBC}, //2612 #CJK UNIFIED IDEOGRAPH + {0xB245, 0x6DF3}, //2613 #CJK UNIFIED IDEOGRAPH + {0xB246, 0x6DD9}, //2614 #CJK UNIFIED IDEOGRAPH + {0xB247, 0x6DB2}, //2615 #CJK UNIFIED IDEOGRAPH + {0xB248, 0x6DE1}, //2616 #CJK UNIFIED IDEOGRAPH + {0xB249, 0x6DCC}, //2617 #CJK UNIFIED IDEOGRAPH + {0xB24A, 0x6DE4}, //2618 #CJK UNIFIED IDEOGRAPH + {0xB24B, 0x6DFB}, //2619 #CJK UNIFIED IDEOGRAPH + {0xB24C, 0x6DFA}, //2620 #CJK UNIFIED IDEOGRAPH + {0xB24D, 0x6E05}, //2621 #CJK UNIFIED IDEOGRAPH + {0xB24E, 0x6DC7}, //2622 #CJK UNIFIED IDEOGRAPH + {0xB24F, 0x6DCB}, //2623 #CJK UNIFIED IDEOGRAPH + {0xB250, 0x6DAF}, //2624 #CJK UNIFIED IDEOGRAPH + {0xB251, 0x6DD1}, //2625 #CJK UNIFIED IDEOGRAPH + {0xB252, 0x6DAE}, //2626 #CJK UNIFIED IDEOGRAPH + {0xB253, 0x6DDE}, //2627 #CJK UNIFIED IDEOGRAPH + {0xB254, 0x6DF9}, //2628 #CJK UNIFIED IDEOGRAPH + {0xB255, 0x6DB8}, //2629 #CJK UNIFIED IDEOGRAPH + {0xB256, 0x6DF7}, //2630 #CJK UNIFIED IDEOGRAPH + {0xB257, 0x6DF5}, //2631 #CJK UNIFIED IDEOGRAPH + {0xB258, 0x6DC5}, //2632 #CJK UNIFIED IDEOGRAPH + {0xB259, 0x6DD2}, //2633 #CJK UNIFIED IDEOGRAPH + {0xB25A, 0x6E1A}, //2634 #CJK UNIFIED IDEOGRAPH + {0xB25B, 0x6DB5}, //2635 #CJK UNIFIED IDEOGRAPH + {0xB25C, 0x6DDA}, //2636 #CJK UNIFIED IDEOGRAPH + {0xB25D, 0x6DEB}, //2637 #CJK UNIFIED IDEOGRAPH + {0xB25E, 0x6DD8}, //2638 #CJK UNIFIED IDEOGRAPH + {0xB25F, 0x6DEA}, //2639 #CJK UNIFIED IDEOGRAPH + {0xB260, 0x6DF1}, //2640 #CJK UNIFIED IDEOGRAPH + {0xB261, 0x6DEE}, //2641 #CJK UNIFIED IDEOGRAPH + {0xB262, 0x6DE8}, //2642 #CJK UNIFIED IDEOGRAPH + {0xB263, 0x6DC6}, //2643 #CJK UNIFIED IDEOGRAPH + {0xB264, 0x6DC4}, //2644 #CJK UNIFIED IDEOGRAPH + {0xB265, 0x6DAA}, //2645 #CJK UNIFIED IDEOGRAPH + {0xB266, 0x6DEC}, //2646 #CJK UNIFIED IDEOGRAPH + {0xB267, 0x6DBF}, //2647 #CJK UNIFIED IDEOGRAPH + {0xB268, 0x6DE6}, //2648 #CJK UNIFIED IDEOGRAPH + {0xB269, 0x70F9}, //2649 #CJK UNIFIED IDEOGRAPH + {0xB26A, 0x7109}, //2650 #CJK UNIFIED IDEOGRAPH + {0xB26B, 0x710A}, //2651 #CJK UNIFIED IDEOGRAPH + {0xB26C, 0x70FD}, //2652 #CJK UNIFIED IDEOGRAPH + {0xB26D, 0x70EF}, //2653 #CJK UNIFIED IDEOGRAPH + {0xB26E, 0x723D}, //2654 #CJK UNIFIED IDEOGRAPH + {0xB26F, 0x727D}, //2655 #CJK UNIFIED IDEOGRAPH + {0xB270, 0x7281}, //2656 #CJK UNIFIED IDEOGRAPH + {0xB271, 0x731C}, //2657 #CJK UNIFIED IDEOGRAPH + {0xB272, 0x731B}, //2658 #CJK UNIFIED IDEOGRAPH + {0xB273, 0x7316}, //2659 #CJK UNIFIED IDEOGRAPH + {0xB274, 0x7313}, //2660 #CJK UNIFIED IDEOGRAPH + {0xB275, 0x7319}, //2661 #CJK UNIFIED IDEOGRAPH + {0xB276, 0x7387}, //2662 #CJK UNIFIED IDEOGRAPH + {0xB277, 0x7405}, //2663 #CJK UNIFIED IDEOGRAPH + {0xB278, 0x740A}, //2664 #CJK UNIFIED IDEOGRAPH + {0xB279, 0x7403}, //2665 #CJK UNIFIED IDEOGRAPH + {0xB27A, 0x7406}, //2666 #CJK UNIFIED IDEOGRAPH + {0xB27B, 0x73FE}, //2667 #CJK UNIFIED IDEOGRAPH + {0xB27C, 0x740D}, //2668 #CJK UNIFIED IDEOGRAPH + {0xB27D, 0x74E0}, //2669 #CJK UNIFIED IDEOGRAPH + {0xB27E, 0x74F6}, //2670 #CJK UNIFIED IDEOGRAPH + {0xB2A1, 0x74F7}, //2671 #CJK UNIFIED IDEOGRAPH + {0xB2A2, 0x751C}, //2672 #CJK UNIFIED IDEOGRAPH + {0xB2A3, 0x7522}, //2673 #CJK UNIFIED IDEOGRAPH + {0xB2A4, 0x7565}, //2674 #CJK UNIFIED IDEOGRAPH + {0xB2A5, 0x7566}, //2675 #CJK UNIFIED IDEOGRAPH + {0xB2A6, 0x7562}, //2676 #CJK UNIFIED IDEOGRAPH + {0xB2A7, 0x7570}, //2677 #CJK UNIFIED IDEOGRAPH + {0xB2A8, 0x758F}, //2678 #CJK UNIFIED IDEOGRAPH + {0xB2A9, 0x75D4}, //2679 #CJK UNIFIED IDEOGRAPH + {0xB2AA, 0x75D5}, //2680 #CJK UNIFIED IDEOGRAPH + {0xB2AB, 0x75B5}, //2681 #CJK UNIFIED IDEOGRAPH + {0xB2AC, 0x75CA}, //2682 #CJK UNIFIED IDEOGRAPH + {0xB2AD, 0x75CD}, //2683 #CJK UNIFIED IDEOGRAPH + {0xB2AE, 0x768E}, //2684 #CJK UNIFIED IDEOGRAPH + {0xB2AF, 0x76D4}, //2685 #CJK UNIFIED IDEOGRAPH + {0xB2B0, 0x76D2}, //2686 #CJK UNIFIED IDEOGRAPH + {0xB2B1, 0x76DB}, //2687 #CJK UNIFIED IDEOGRAPH + {0xB2B2, 0x7737}, //2688 #CJK UNIFIED IDEOGRAPH + {0xB2B3, 0x773E}, //2689 #CJK UNIFIED IDEOGRAPH + {0xB2B4, 0x773C}, //2690 #CJK UNIFIED IDEOGRAPH + {0xB2B5, 0x7736}, //2691 #CJK UNIFIED IDEOGRAPH + {0xB2B6, 0x7738}, //2692 #CJK UNIFIED IDEOGRAPH + {0xB2B7, 0x773A}, //2693 #CJK UNIFIED IDEOGRAPH + {0xB2B8, 0x786B}, //2694 #CJK UNIFIED IDEOGRAPH + {0xB2B9, 0x7843}, //2695 #CJK UNIFIED IDEOGRAPH + {0xB2BA, 0x784E}, //2696 #CJK UNIFIED IDEOGRAPH + {0xB2BB, 0x7965}, //2697 #CJK UNIFIED IDEOGRAPH + {0xB2BC, 0x7968}, //2698 #CJK UNIFIED IDEOGRAPH + {0xB2BD, 0x796D}, //2699 #CJK UNIFIED IDEOGRAPH + {0xB2BE, 0x79FB}, //2700 #CJK UNIFIED IDEOGRAPH + {0xB2BF, 0x7A92}, //2701 #CJK UNIFIED IDEOGRAPH + {0xB2C0, 0x7A95}, //2702 #CJK UNIFIED IDEOGRAPH + {0xB2C1, 0x7B20}, //2703 #CJK UNIFIED IDEOGRAPH + {0xB2C2, 0x7B28}, //2704 #CJK UNIFIED IDEOGRAPH + {0xB2C3, 0x7B1B}, //2705 #CJK UNIFIED IDEOGRAPH + {0xB2C4, 0x7B2C}, //2706 #CJK UNIFIED IDEOGRAPH + {0xB2C5, 0x7B26}, //2707 #CJK UNIFIED IDEOGRAPH + {0xB2C6, 0x7B19}, //2708 #CJK UNIFIED IDEOGRAPH + {0xB2C7, 0x7B1E}, //2709 #CJK UNIFIED IDEOGRAPH + {0xB2C8, 0x7B2E}, //2710 #CJK UNIFIED IDEOGRAPH + {0xB2C9, 0x7C92}, //2711 #CJK UNIFIED IDEOGRAPH + {0xB2CA, 0x7C97}, //2712 #CJK UNIFIED IDEOGRAPH + {0xB2CB, 0x7C95}, //2713 #CJK UNIFIED IDEOGRAPH + {0xB2CC, 0x7D46}, //2714 #CJK UNIFIED IDEOGRAPH + {0xB2CD, 0x7D43}, //2715 #CJK UNIFIED IDEOGRAPH + {0xB2CE, 0x7D71}, //2716 #CJK UNIFIED IDEOGRAPH + {0xB2CF, 0x7D2E}, //2717 #CJK UNIFIED IDEOGRAPH + {0xB2D0, 0x7D39}, //2718 #CJK UNIFIED IDEOGRAPH + {0xB2D1, 0x7D3C}, //2719 #CJK UNIFIED IDEOGRAPH + {0xB2D2, 0x7D40}, //2720 #CJK UNIFIED IDEOGRAPH + {0xB2D3, 0x7D30}, //2721 #CJK UNIFIED IDEOGRAPH + {0xB2D4, 0x7D33}, //2722 #CJK UNIFIED IDEOGRAPH + {0xB2D5, 0x7D44}, //2723 #CJK UNIFIED IDEOGRAPH + {0xB2D6, 0x7D2F}, //2724 #CJK UNIFIED IDEOGRAPH + {0xB2D7, 0x7D42}, //2725 #CJK UNIFIED IDEOGRAPH + {0xB2D8, 0x7D32}, //2726 #CJK UNIFIED IDEOGRAPH + {0xB2D9, 0x7D31}, //2727 #CJK UNIFIED IDEOGRAPH + {0xB2DA, 0x7F3D}, //2728 #CJK UNIFIED IDEOGRAPH + {0xB2DB, 0x7F9E}, //2729 #CJK UNIFIED IDEOGRAPH + {0xB2DC, 0x7F9A}, //2730 #CJK UNIFIED IDEOGRAPH + {0xB2DD, 0x7FCC}, //2731 #CJK UNIFIED IDEOGRAPH + {0xB2DE, 0x7FCE}, //2732 #CJK UNIFIED IDEOGRAPH + {0xB2DF, 0x7FD2}, //2733 #CJK UNIFIED IDEOGRAPH + {0xB2E0, 0x801C}, //2734 #CJK UNIFIED IDEOGRAPH + {0xB2E1, 0x804A}, //2735 #CJK UNIFIED IDEOGRAPH + {0xB2E2, 0x8046}, //2736 #CJK UNIFIED IDEOGRAPH + {0xB2E3, 0x812F}, //2737 #CJK UNIFIED IDEOGRAPH + {0xB2E4, 0x8116}, //2738 #CJK UNIFIED IDEOGRAPH + {0xB2E5, 0x8123}, //2739 #CJK UNIFIED IDEOGRAPH + {0xB2E6, 0x812B}, //2740 #CJK UNIFIED IDEOGRAPH + {0xB2E7, 0x8129}, //2741 #CJK UNIFIED IDEOGRAPH + {0xB2E8, 0x8130}, //2742 #CJK UNIFIED IDEOGRAPH + {0xB2E9, 0x8124}, //2743 #CJK UNIFIED IDEOGRAPH + {0xB2EA, 0x8202}, //2744 #CJK UNIFIED IDEOGRAPH + {0xB2EB, 0x8235}, //2745 #CJK UNIFIED IDEOGRAPH + {0xB2EC, 0x8237}, //2746 #CJK UNIFIED IDEOGRAPH + {0xB2ED, 0x8236}, //2747 #CJK UNIFIED IDEOGRAPH + {0xB2EE, 0x8239}, //2748 #CJK UNIFIED IDEOGRAPH + {0xB2EF, 0x838E}, //2749 #CJK UNIFIED IDEOGRAPH + {0xB2F0, 0x839E}, //2750 #CJK UNIFIED IDEOGRAPH + {0xB2F1, 0x8398}, //2751 #CJK UNIFIED IDEOGRAPH + {0xB2F2, 0x8378}, //2752 #CJK UNIFIED IDEOGRAPH + {0xB2F3, 0x83A2}, //2753 #CJK UNIFIED IDEOGRAPH + {0xB2F4, 0x8396}, //2754 #CJK UNIFIED IDEOGRAPH + {0xB2F5, 0x83BD}, //2755 #CJK UNIFIED IDEOGRAPH + {0xB2F6, 0x83AB}, //2756 #CJK UNIFIED IDEOGRAPH + {0xB2F7, 0x8392}, //2757 #CJK UNIFIED IDEOGRAPH + {0xB2F8, 0x838A}, //2758 #CJK UNIFIED IDEOGRAPH + {0xB2F9, 0x8393}, //2759 #CJK UNIFIED IDEOGRAPH + {0xB2FA, 0x8389}, //2760 #CJK UNIFIED IDEOGRAPH + {0xB2FB, 0x83A0}, //2761 #CJK UNIFIED IDEOGRAPH + {0xB2FC, 0x8377}, //2762 #CJK UNIFIED IDEOGRAPH + {0xB2FD, 0x837B}, //2763 #CJK UNIFIED IDEOGRAPH + {0xB2FE, 0x837C}, //2764 #CJK UNIFIED IDEOGRAPH + {0xB340, 0x8386}, //2765 #CJK UNIFIED IDEOGRAPH + {0xB341, 0x83A7}, //2766 #CJK UNIFIED IDEOGRAPH + {0xB342, 0x8655}, //2767 #CJK UNIFIED IDEOGRAPH + {0xB343, 0x5F6A}, //2768 #CJK UNIFIED IDEOGRAPH + {0xB344, 0x86C7}, //2769 #CJK UNIFIED IDEOGRAPH + {0xB345, 0x86C0}, //2770 #CJK UNIFIED IDEOGRAPH + {0xB346, 0x86B6}, //2771 #CJK UNIFIED IDEOGRAPH + {0xB347, 0x86C4}, //2772 #CJK UNIFIED IDEOGRAPH + {0xB348, 0x86B5}, //2773 #CJK UNIFIED IDEOGRAPH + {0xB349, 0x86C6}, //2774 #CJK UNIFIED IDEOGRAPH + {0xB34A, 0x86CB}, //2775 #CJK UNIFIED IDEOGRAPH + {0xB34B, 0x86B1}, //2776 #CJK UNIFIED IDEOGRAPH + {0xB34C, 0x86AF}, //2777 #CJK UNIFIED IDEOGRAPH + {0xB34D, 0x86C9}, //2778 #CJK UNIFIED IDEOGRAPH + {0xB34E, 0x8853}, //2779 #CJK UNIFIED IDEOGRAPH + {0xB34F, 0x889E}, //2780 #CJK UNIFIED IDEOGRAPH + {0xB350, 0x8888}, //2781 #CJK UNIFIED IDEOGRAPH + {0xB351, 0x88AB}, //2782 #CJK UNIFIED IDEOGRAPH + {0xB352, 0x8892}, //2783 #CJK UNIFIED IDEOGRAPH + {0xB353, 0x8896}, //2784 #CJK UNIFIED IDEOGRAPH + {0xB354, 0x888D}, //2785 #CJK UNIFIED IDEOGRAPH + {0xB355, 0x888B}, //2786 #CJK UNIFIED IDEOGRAPH + {0xB356, 0x8993}, //2787 #CJK UNIFIED IDEOGRAPH + {0xB357, 0x898F}, //2788 #CJK UNIFIED IDEOGRAPH + {0xB358, 0x8A2A}, //2789 #CJK UNIFIED IDEOGRAPH + {0xB359, 0x8A1D}, //2790 #CJK UNIFIED IDEOGRAPH + {0xB35A, 0x8A23}, //2791 #CJK UNIFIED IDEOGRAPH + {0xB35B, 0x8A25}, //2792 #CJK UNIFIED IDEOGRAPH + {0xB35C, 0x8A31}, //2793 #CJK UNIFIED IDEOGRAPH + {0xB35D, 0x8A2D}, //2794 #CJK UNIFIED IDEOGRAPH + {0xB35E, 0x8A1F}, //2795 #CJK UNIFIED IDEOGRAPH + {0xB35F, 0x8A1B}, //2796 #CJK UNIFIED IDEOGRAPH + {0xB360, 0x8A22}, //2797 #CJK UNIFIED IDEOGRAPH + {0xB361, 0x8C49}, //2798 #CJK UNIFIED IDEOGRAPH + {0xB362, 0x8C5A}, //2799 #CJK UNIFIED IDEOGRAPH + {0xB363, 0x8CA9}, //2800 #CJK UNIFIED IDEOGRAPH + {0xB364, 0x8CAC}, //2801 #CJK UNIFIED IDEOGRAPH + {0xB365, 0x8CAB}, //2802 #CJK UNIFIED IDEOGRAPH + {0xB366, 0x8CA8}, //2803 #CJK UNIFIED IDEOGRAPH + {0xB367, 0x8CAA}, //2804 #CJK UNIFIED IDEOGRAPH + {0xB368, 0x8CA7}, //2805 #CJK UNIFIED IDEOGRAPH + {0xB369, 0x8D67}, //2806 #CJK UNIFIED IDEOGRAPH + {0xB36A, 0x8D66}, //2807 #CJK UNIFIED IDEOGRAPH + {0xB36B, 0x8DBE}, //2808 #CJK UNIFIED IDEOGRAPH + {0xB36C, 0x8DBA}, //2809 #CJK UNIFIED IDEOGRAPH + {0xB36D, 0x8EDB}, //2810 #CJK UNIFIED IDEOGRAPH + {0xB36E, 0x8EDF}, //2811 #CJK UNIFIED IDEOGRAPH + {0xB36F, 0x9019}, //2812 #CJK UNIFIED IDEOGRAPH + {0xB370, 0x900D}, //2813 #CJK UNIFIED IDEOGRAPH + {0xB371, 0x901A}, //2814 #CJK UNIFIED IDEOGRAPH + {0xB372, 0x9017}, //2815 #CJK UNIFIED IDEOGRAPH + {0xB373, 0x9023}, //2816 #CJK UNIFIED IDEOGRAPH + {0xB374, 0x901F}, //2817 #CJK UNIFIED IDEOGRAPH + {0xB375, 0x901D}, //2818 #CJK UNIFIED IDEOGRAPH + {0xB376, 0x9010}, //2819 #CJK UNIFIED IDEOGRAPH + {0xB377, 0x9015}, //2820 #CJK UNIFIED IDEOGRAPH + {0xB378, 0x901E}, //2821 #CJK UNIFIED IDEOGRAPH + {0xB379, 0x9020}, //2822 #CJK UNIFIED IDEOGRAPH + {0xB37A, 0x900F}, //2823 #CJK UNIFIED IDEOGRAPH + {0xB37B, 0x9022}, //2824 #CJK UNIFIED IDEOGRAPH + {0xB37C, 0x9016}, //2825 #CJK UNIFIED IDEOGRAPH + {0xB37D, 0x901B}, //2826 #CJK UNIFIED IDEOGRAPH + {0xB37E, 0x9014}, //2827 #CJK UNIFIED IDEOGRAPH + {0xB3A1, 0x90E8}, //2828 #CJK UNIFIED IDEOGRAPH + {0xB3A2, 0x90ED}, //2829 #CJK UNIFIED IDEOGRAPH + {0xB3A3, 0x90FD}, //2830 #CJK UNIFIED IDEOGRAPH + {0xB3A4, 0x9157}, //2831 #CJK UNIFIED IDEOGRAPH + {0xB3A5, 0x91CE}, //2832 #CJK UNIFIED IDEOGRAPH + {0xB3A6, 0x91F5}, //2833 #CJK UNIFIED IDEOGRAPH + {0xB3A7, 0x91E6}, //2834 #CJK UNIFIED IDEOGRAPH + {0xB3A8, 0x91E3}, //2835 #CJK UNIFIED IDEOGRAPH + {0xB3A9, 0x91E7}, //2836 #CJK UNIFIED IDEOGRAPH + {0xB3AA, 0x91ED}, //2837 #CJK UNIFIED IDEOGRAPH + {0xB3AB, 0x91E9}, //2838 #CJK UNIFIED IDEOGRAPH + {0xB3AC, 0x9589}, //2839 #CJK UNIFIED IDEOGRAPH + {0xB3AD, 0x966A}, //2840 #CJK UNIFIED IDEOGRAPH + {0xB3AE, 0x9675}, //2841 #CJK UNIFIED IDEOGRAPH + {0xB3AF, 0x9673}, //2842 #CJK UNIFIED IDEOGRAPH + {0xB3B0, 0x9678}, //2843 #CJK UNIFIED IDEOGRAPH + {0xB3B1, 0x9670}, //2844 #CJK UNIFIED IDEOGRAPH + {0xB3B2, 0x9674}, //2845 #CJK UNIFIED IDEOGRAPH + {0xB3B3, 0x9676}, //2846 #CJK UNIFIED IDEOGRAPH + {0xB3B4, 0x9677}, //2847 #CJK UNIFIED IDEOGRAPH + {0xB3B5, 0x966C}, //2848 #CJK UNIFIED IDEOGRAPH + {0xB3B6, 0x96C0}, //2849 #CJK UNIFIED IDEOGRAPH + {0xB3B7, 0x96EA}, //2850 #CJK UNIFIED IDEOGRAPH + {0xB3B8, 0x96E9}, //2851 #CJK UNIFIED IDEOGRAPH + {0xB3B9, 0x7AE0}, //2852 #CJK UNIFIED IDEOGRAPH + {0xB3BA, 0x7ADF}, //2853 #CJK UNIFIED IDEOGRAPH + {0xB3BB, 0x9802}, //2854 #CJK UNIFIED IDEOGRAPH + {0xB3BC, 0x9803}, //2855 #CJK UNIFIED IDEOGRAPH + {0xB3BD, 0x9B5A}, //2856 #CJK UNIFIED IDEOGRAPH + {0xB3BE, 0x9CE5}, //2857 #CJK UNIFIED IDEOGRAPH + {0xB3BF, 0x9E75}, //2858 #CJK UNIFIED IDEOGRAPH + {0xB3C0, 0x9E7F}, //2859 #CJK UNIFIED IDEOGRAPH + {0xB3C1, 0x9EA5}, //2860 #CJK UNIFIED IDEOGRAPH + {0xB3C2, 0x9EBB}, //2861 #CJK UNIFIED IDEOGRAPH + {0xB3C3, 0x50A2}, //2862 #CJK UNIFIED IDEOGRAPH + {0xB3C4, 0x508D}, //2863 #CJK UNIFIED IDEOGRAPH + {0xB3C5, 0x5085}, //2864 #CJK UNIFIED IDEOGRAPH + {0xB3C6, 0x5099}, //2865 #CJK UNIFIED IDEOGRAPH + {0xB3C7, 0x5091}, //2866 #CJK UNIFIED IDEOGRAPH + {0xB3C8, 0x5080}, //2867 #CJK UNIFIED IDEOGRAPH + {0xB3C9, 0x5096}, //2868 #CJK UNIFIED IDEOGRAPH + {0xB3CA, 0x5098}, //2869 #CJK UNIFIED IDEOGRAPH + {0xB3CB, 0x509A}, //2870 #CJK UNIFIED IDEOGRAPH + {0xB3CC, 0x6700}, //2871 #CJK UNIFIED IDEOGRAPH + {0xB3CD, 0x51F1}, //2872 #CJK UNIFIED IDEOGRAPH + {0xB3CE, 0x5272}, //2873 #CJK UNIFIED IDEOGRAPH + {0xB3CF, 0x5274}, //2874 #CJK UNIFIED IDEOGRAPH + {0xB3D0, 0x5275}, //2875 #CJK UNIFIED IDEOGRAPH + {0xB3D1, 0x5269}, //2876 #CJK UNIFIED IDEOGRAPH + {0xB3D2, 0x52DE}, //2877 #CJK UNIFIED IDEOGRAPH + {0xB3D3, 0x52DD}, //2878 #CJK UNIFIED IDEOGRAPH + {0xB3D4, 0x52DB}, //2879 #CJK UNIFIED IDEOGRAPH + {0xB3D5, 0x535A}, //2880 #CJK UNIFIED IDEOGRAPH + {0xB3D6, 0x53A5}, //2881 #CJK UNIFIED IDEOGRAPH + {0xB3D7, 0x557B}, //2882 #CJK UNIFIED IDEOGRAPH + {0xB3D8, 0x5580}, //2883 #CJK UNIFIED IDEOGRAPH + {0xB3D9, 0x55A7}, //2884 #CJK UNIFIED IDEOGRAPH + {0xB3DA, 0x557C}, //2885 #CJK UNIFIED IDEOGRAPH + {0xB3DB, 0x558A}, //2886 #CJK UNIFIED IDEOGRAPH + {0xB3DC, 0x559D}, //2887 #CJK UNIFIED IDEOGRAPH + {0xB3DD, 0x5598}, //2888 #CJK UNIFIED IDEOGRAPH + {0xB3DE, 0x5582}, //2889 #CJK UNIFIED IDEOGRAPH + {0xB3DF, 0x559C}, //2890 #CJK UNIFIED IDEOGRAPH + {0xB3E0, 0x55AA}, //2891 #CJK UNIFIED IDEOGRAPH + {0xB3E1, 0x5594}, //2892 #CJK UNIFIED IDEOGRAPH + {0xB3E2, 0x5587}, //2893 #CJK UNIFIED IDEOGRAPH + {0xB3E3, 0x558B}, //2894 #CJK UNIFIED IDEOGRAPH + {0xB3E4, 0x5583}, //2895 #CJK UNIFIED IDEOGRAPH + {0xB3E5, 0x55B3}, //2896 #CJK UNIFIED IDEOGRAPH + {0xB3E6, 0x55AE}, //2897 #CJK UNIFIED IDEOGRAPH + {0xB3E7, 0x559F}, //2898 #CJK UNIFIED IDEOGRAPH + {0xB3E8, 0x553E}, //2899 #CJK UNIFIED IDEOGRAPH + {0xB3E9, 0x55B2}, //2900 #CJK UNIFIED IDEOGRAPH + {0xB3EA, 0x559A}, //2901 #CJK UNIFIED IDEOGRAPH + {0xB3EB, 0x55BB}, //2902 #CJK UNIFIED IDEOGRAPH + {0xB3EC, 0x55AC}, //2903 #CJK UNIFIED IDEOGRAPH + {0xB3ED, 0x55B1}, //2904 #CJK UNIFIED IDEOGRAPH + {0xB3EE, 0x557E}, //2905 #CJK UNIFIED IDEOGRAPH + {0xB3EF, 0x5589}, //2906 #CJK UNIFIED IDEOGRAPH + {0xB3F0, 0x55AB}, //2907 #CJK UNIFIED IDEOGRAPH + {0xB3F1, 0x5599}, //2908 #CJK UNIFIED IDEOGRAPH + {0xB3F2, 0x570D}, //2909 #CJK UNIFIED IDEOGRAPH + {0xB3F3, 0x582F}, //2910 #CJK UNIFIED IDEOGRAPH + {0xB3F4, 0x582A}, //2911 #CJK UNIFIED IDEOGRAPH + {0xB3F5, 0x5834}, //2912 #CJK UNIFIED IDEOGRAPH + {0xB3F6, 0x5824}, //2913 #CJK UNIFIED IDEOGRAPH + {0xB3F7, 0x5830}, //2914 #CJK UNIFIED IDEOGRAPH + {0xB3F8, 0x5831}, //2915 #CJK UNIFIED IDEOGRAPH + {0xB3F9, 0x5821}, //2916 #CJK UNIFIED IDEOGRAPH + {0xB3FA, 0x581D}, //2917 #CJK UNIFIED IDEOGRAPH + {0xB3FB, 0x5820}, //2918 #CJK UNIFIED IDEOGRAPH + {0xB3FC, 0x58F9}, //2919 #CJK UNIFIED IDEOGRAPH + {0xB3FD, 0x58FA}, //2920 #CJK UNIFIED IDEOGRAPH + {0xB3FE, 0x5960}, //2921 #CJK UNIFIED IDEOGRAPH + {0xB440, 0x5A77}, //2922 #CJK UNIFIED IDEOGRAPH + {0xB441, 0x5A9A}, //2923 #CJK UNIFIED IDEOGRAPH + {0xB442, 0x5A7F}, //2924 #CJK UNIFIED IDEOGRAPH + {0xB443, 0x5A92}, //2925 #CJK UNIFIED IDEOGRAPH + {0xB444, 0x5A9B}, //2926 #CJK UNIFIED IDEOGRAPH + {0xB445, 0x5AA7}, //2927 #CJK UNIFIED IDEOGRAPH + {0xB446, 0x5B73}, //2928 #CJK UNIFIED IDEOGRAPH + {0xB447, 0x5B71}, //2929 #CJK UNIFIED IDEOGRAPH + {0xB448, 0x5BD2}, //2930 #CJK UNIFIED IDEOGRAPH + {0xB449, 0x5BCC}, //2931 #CJK UNIFIED IDEOGRAPH + {0xB44A, 0x5BD3}, //2932 #CJK UNIFIED IDEOGRAPH + {0xB44B, 0x5BD0}, //2933 #CJK UNIFIED IDEOGRAPH + {0xB44C, 0x5C0A}, //2934 #CJK UNIFIED IDEOGRAPH + {0xB44D, 0x5C0B}, //2935 #CJK UNIFIED IDEOGRAPH + {0xB44E, 0x5C31}, //2936 #CJK UNIFIED IDEOGRAPH + {0xB44F, 0x5D4C}, //2937 #CJK UNIFIED IDEOGRAPH + {0xB450, 0x5D50}, //2938 #CJK UNIFIED IDEOGRAPH + {0xB451, 0x5D34}, //2939 #CJK UNIFIED IDEOGRAPH + {0xB452, 0x5D47}, //2940 #CJK UNIFIED IDEOGRAPH + {0xB453, 0x5DFD}, //2941 #CJK UNIFIED IDEOGRAPH + {0xB454, 0x5E45}, //2942 #CJK UNIFIED IDEOGRAPH + {0xB455, 0x5E3D}, //2943 #CJK UNIFIED IDEOGRAPH + {0xB456, 0x5E40}, //2944 #CJK UNIFIED IDEOGRAPH + {0xB457, 0x5E43}, //2945 #CJK UNIFIED IDEOGRAPH + {0xB458, 0x5E7E}, //2946 #CJK UNIFIED IDEOGRAPH + {0xB459, 0x5ECA}, //2947 #CJK UNIFIED IDEOGRAPH + {0xB45A, 0x5EC1}, //2948 #CJK UNIFIED IDEOGRAPH + {0xB45B, 0x5EC2}, //2949 #CJK UNIFIED IDEOGRAPH + {0xB45C, 0x5EC4}, //2950 #CJK UNIFIED IDEOGRAPH + {0xB45D, 0x5F3C}, //2951 #CJK UNIFIED IDEOGRAPH + {0xB45E, 0x5F6D}, //2952 #CJK UNIFIED IDEOGRAPH + {0xB45F, 0x5FA9}, //2953 #CJK UNIFIED IDEOGRAPH + {0xB460, 0x5FAA}, //2954 #CJK UNIFIED IDEOGRAPH + {0xB461, 0x5FA8}, //2955 #CJK UNIFIED IDEOGRAPH + {0xB462, 0x60D1}, //2956 #CJK UNIFIED IDEOGRAPH + {0xB463, 0x60E1}, //2957 #CJK UNIFIED IDEOGRAPH + {0xB464, 0x60B2}, //2958 #CJK UNIFIED IDEOGRAPH + {0xB465, 0x60B6}, //2959 #CJK UNIFIED IDEOGRAPH + {0xB466, 0x60E0}, //2960 #CJK UNIFIED IDEOGRAPH + {0xB467, 0x611C}, //2961 #CJK UNIFIED IDEOGRAPH + {0xB468, 0x6123}, //2962 #CJK UNIFIED IDEOGRAPH + {0xB469, 0x60FA}, //2963 #CJK UNIFIED IDEOGRAPH + {0xB46A, 0x6115}, //2964 #CJK UNIFIED IDEOGRAPH + {0xB46B, 0x60F0}, //2965 #CJK UNIFIED IDEOGRAPH + {0xB46C, 0x60FB}, //2966 #CJK UNIFIED IDEOGRAPH + {0xB46D, 0x60F4}, //2967 #CJK UNIFIED IDEOGRAPH + {0xB46E, 0x6168}, //2968 #CJK UNIFIED IDEOGRAPH + {0xB46F, 0x60F1}, //2969 #CJK UNIFIED IDEOGRAPH + {0xB470, 0x610E}, //2970 #CJK UNIFIED IDEOGRAPH + {0xB471, 0x60F6}, //2971 #CJK UNIFIED IDEOGRAPH + {0xB472, 0x6109}, //2972 #CJK UNIFIED IDEOGRAPH + {0xB473, 0x6100}, //2973 #CJK UNIFIED IDEOGRAPH + {0xB474, 0x6112}, //2974 #CJK UNIFIED IDEOGRAPH + {0xB475, 0x621F}, //2975 #CJK UNIFIED IDEOGRAPH + {0xB476, 0x6249}, //2976 #CJK UNIFIED IDEOGRAPH + {0xB477, 0x63A3}, //2977 #CJK UNIFIED IDEOGRAPH + {0xB478, 0x638C}, //2978 #CJK UNIFIED IDEOGRAPH + {0xB479, 0x63CF}, //2979 #CJK UNIFIED IDEOGRAPH + {0xB47A, 0x63C0}, //2980 #CJK UNIFIED IDEOGRAPH + {0xB47B, 0x63E9}, //2981 #CJK UNIFIED IDEOGRAPH + {0xB47C, 0x63C9}, //2982 #CJK UNIFIED IDEOGRAPH + {0xB47D, 0x63C6}, //2983 #CJK UNIFIED IDEOGRAPH + {0xB47E, 0x63CD}, //2984 #CJK UNIFIED IDEOGRAPH + {0xB4A1, 0x63D2}, //2985 #CJK UNIFIED IDEOGRAPH + {0xB4A2, 0x63E3}, //2986 #CJK UNIFIED IDEOGRAPH + {0xB4A3, 0x63D0}, //2987 #CJK UNIFIED IDEOGRAPH + {0xB4A4, 0x63E1}, //2988 #CJK UNIFIED IDEOGRAPH + {0xB4A5, 0x63D6}, //2989 #CJK UNIFIED IDEOGRAPH + {0xB4A6, 0x63ED}, //2990 #CJK UNIFIED IDEOGRAPH + {0xB4A7, 0x63EE}, //2991 #CJK UNIFIED IDEOGRAPH + {0xB4A8, 0x6376}, //2992 #CJK UNIFIED IDEOGRAPH + {0xB4A9, 0x63F4}, //2993 #CJK UNIFIED IDEOGRAPH + {0xB4AA, 0x63EA}, //2994 #CJK UNIFIED IDEOGRAPH + {0xB4AB, 0x63DB}, //2995 #CJK UNIFIED IDEOGRAPH + {0xB4AC, 0x6452}, //2996 #CJK UNIFIED IDEOGRAPH + {0xB4AD, 0x63DA}, //2997 #CJK UNIFIED IDEOGRAPH + {0xB4AE, 0x63F9}, //2998 #CJK UNIFIED IDEOGRAPH + {0xB4AF, 0x655E}, //2999 #CJK UNIFIED IDEOGRAPH + {0xB4B0, 0x6566}, //3000 #CJK UNIFIED IDEOGRAPH + {0xB4B1, 0x6562}, //3001 #CJK UNIFIED IDEOGRAPH + {0xB4B2, 0x6563}, //3002 #CJK UNIFIED IDEOGRAPH + {0xB4B3, 0x6591}, //3003 #CJK UNIFIED IDEOGRAPH + {0xB4B4, 0x6590}, //3004 #CJK UNIFIED IDEOGRAPH + {0xB4B5, 0x65AF}, //3005 #CJK UNIFIED IDEOGRAPH + {0xB4B6, 0x666E}, //3006 #CJK UNIFIED IDEOGRAPH + {0xB4B7, 0x6670}, //3007 #CJK UNIFIED IDEOGRAPH + {0xB4B8, 0x6674}, //3008 #CJK UNIFIED IDEOGRAPH + {0xB4B9, 0x6676}, //3009 #CJK UNIFIED IDEOGRAPH + {0xB4BA, 0x666F}, //3010 #CJK UNIFIED IDEOGRAPH + {0xB4BB, 0x6691}, //3011 #CJK UNIFIED IDEOGRAPH + {0xB4BC, 0x667A}, //3012 #CJK UNIFIED IDEOGRAPH + {0xB4BD, 0x667E}, //3013 #CJK UNIFIED IDEOGRAPH + {0xB4BE, 0x6677}, //3014 #CJK UNIFIED IDEOGRAPH + {0xB4BF, 0x66FE}, //3015 #CJK UNIFIED IDEOGRAPH + {0xB4C0, 0x66FF}, //3016 #CJK UNIFIED IDEOGRAPH + {0xB4C1, 0x671F}, //3017 #CJK UNIFIED IDEOGRAPH + {0xB4C2, 0x671D}, //3018 #CJK UNIFIED IDEOGRAPH + {0xB4C3, 0x68FA}, //3019 #CJK UNIFIED IDEOGRAPH + {0xB4C4, 0x68D5}, //3020 #CJK UNIFIED IDEOGRAPH + {0xB4C5, 0x68E0}, //3021 #CJK UNIFIED IDEOGRAPH + {0xB4C6, 0x68D8}, //3022 #CJK UNIFIED IDEOGRAPH + {0xB4C7, 0x68D7}, //3023 #CJK UNIFIED IDEOGRAPH + {0xB4C8, 0x6905}, //3024 #CJK UNIFIED IDEOGRAPH + {0xB4C9, 0x68DF}, //3025 #CJK UNIFIED IDEOGRAPH + {0xB4CA, 0x68F5}, //3026 #CJK UNIFIED IDEOGRAPH + {0xB4CB, 0x68EE}, //3027 #CJK UNIFIED IDEOGRAPH + {0xB4CC, 0x68E7}, //3028 #CJK UNIFIED IDEOGRAPH + {0xB4CD, 0x68F9}, //3029 #CJK UNIFIED IDEOGRAPH + {0xB4CE, 0x68D2}, //3030 #CJK UNIFIED IDEOGRAPH + {0xB4CF, 0x68F2}, //3031 #CJK UNIFIED IDEOGRAPH + {0xB4D0, 0x68E3}, //3032 #CJK UNIFIED IDEOGRAPH + {0xB4D1, 0x68CB}, //3033 #CJK UNIFIED IDEOGRAPH + {0xB4D2, 0x68CD}, //3034 #CJK UNIFIED IDEOGRAPH + {0xB4D3, 0x690D}, //3035 #CJK UNIFIED IDEOGRAPH + {0xB4D4, 0x6912}, //3036 #CJK UNIFIED IDEOGRAPH + {0xB4D5, 0x690E}, //3037 #CJK UNIFIED IDEOGRAPH + {0xB4D6, 0x68C9}, //3038 #CJK UNIFIED IDEOGRAPH + {0xB4D7, 0x68DA}, //3039 #CJK UNIFIED IDEOGRAPH + {0xB4D8, 0x696E}, //3040 #CJK UNIFIED IDEOGRAPH + {0xB4D9, 0x68FB}, //3041 #CJK UNIFIED IDEOGRAPH + {0xB4DA, 0x6B3E}, //3042 #CJK UNIFIED IDEOGRAPH + {0xB4DB, 0x6B3A}, //3043 #CJK UNIFIED IDEOGRAPH + {0xB4DC, 0x6B3D}, //3044 #CJK UNIFIED IDEOGRAPH + {0xB4DD, 0x6B98}, //3045 #CJK UNIFIED IDEOGRAPH + {0xB4DE, 0x6B96}, //3046 #CJK UNIFIED IDEOGRAPH + {0xB4DF, 0x6BBC}, //3047 #CJK UNIFIED IDEOGRAPH + {0xB4E0, 0x6BEF}, //3048 #CJK UNIFIED IDEOGRAPH + {0xB4E1, 0x6C2E}, //3049 #CJK UNIFIED IDEOGRAPH + {0xB4E2, 0x6C2F}, //3050 #CJK UNIFIED IDEOGRAPH + {0xB4E3, 0x6C2C}, //3051 #CJK UNIFIED IDEOGRAPH + {0xB4E4, 0x6E2F}, //3052 #CJK UNIFIED IDEOGRAPH + {0xB4E5, 0x6E38}, //3053 #CJK UNIFIED IDEOGRAPH + {0xB4E6, 0x6E54}, //3054 #CJK UNIFIED IDEOGRAPH + {0xB4E7, 0x6E21}, //3055 #CJK UNIFIED IDEOGRAPH + {0xB4E8, 0x6E32}, //3056 #CJK UNIFIED IDEOGRAPH + {0xB4E9, 0x6E67}, //3057 #CJK UNIFIED IDEOGRAPH + {0xB4EA, 0x6E4A}, //3058 #CJK UNIFIED IDEOGRAPH + {0xB4EB, 0x6E20}, //3059 #CJK UNIFIED IDEOGRAPH + {0xB4EC, 0x6E25}, //3060 #CJK UNIFIED IDEOGRAPH + {0xB4ED, 0x6E23}, //3061 #CJK UNIFIED IDEOGRAPH + {0xB4EE, 0x6E1B}, //3062 #CJK UNIFIED IDEOGRAPH + {0xB4EF, 0x6E5B}, //3063 #CJK UNIFIED IDEOGRAPH + {0xB4F0, 0x6E58}, //3064 #CJK UNIFIED IDEOGRAPH + {0xB4F1, 0x6E24}, //3065 #CJK UNIFIED IDEOGRAPH + {0xB4F2, 0x6E56}, //3066 #CJK UNIFIED IDEOGRAPH + {0xB4F3, 0x6E6E}, //3067 #CJK UNIFIED IDEOGRAPH + {0xB4F4, 0x6E2D}, //3068 #CJK UNIFIED IDEOGRAPH + {0xB4F5, 0x6E26}, //3069 #CJK UNIFIED IDEOGRAPH + {0xB4F6, 0x6E6F}, //3070 #CJK UNIFIED IDEOGRAPH + {0xB4F7, 0x6E34}, //3071 #CJK UNIFIED IDEOGRAPH + {0xB4F8, 0x6E4D}, //3072 #CJK UNIFIED IDEOGRAPH + {0xB4F9, 0x6E3A}, //3073 #CJK UNIFIED IDEOGRAPH + {0xB4FA, 0x6E2C}, //3074 #CJK UNIFIED IDEOGRAPH + {0xB4FB, 0x6E43}, //3075 #CJK UNIFIED IDEOGRAPH + {0xB4FC, 0x6E1D}, //3076 #CJK UNIFIED IDEOGRAPH + {0xB4FD, 0x6E3E}, //3077 #CJK UNIFIED IDEOGRAPH + {0xB4FE, 0x6ECB}, //3078 #CJK UNIFIED IDEOGRAPH + {0xB540, 0x6E89}, //3079 #CJK UNIFIED IDEOGRAPH + {0xB541, 0x6E19}, //3080 #CJK UNIFIED IDEOGRAPH + {0xB542, 0x6E4E}, //3081 #CJK UNIFIED IDEOGRAPH + {0xB543, 0x6E63}, //3082 #CJK UNIFIED IDEOGRAPH + {0xB544, 0x6E44}, //3083 #CJK UNIFIED IDEOGRAPH + {0xB545, 0x6E72}, //3084 #CJK UNIFIED IDEOGRAPH + {0xB546, 0x6E69}, //3085 #CJK UNIFIED IDEOGRAPH + {0xB547, 0x6E5F}, //3086 #CJK UNIFIED IDEOGRAPH + {0xB548, 0x7119}, //3087 #CJK UNIFIED IDEOGRAPH + {0xB549, 0x711A}, //3088 #CJK UNIFIED IDEOGRAPH + {0xB54A, 0x7126}, //3089 #CJK UNIFIED IDEOGRAPH + {0xB54B, 0x7130}, //3090 #CJK UNIFIED IDEOGRAPH + {0xB54C, 0x7121}, //3091 #CJK UNIFIED IDEOGRAPH + {0xB54D, 0x7136}, //3092 #CJK UNIFIED IDEOGRAPH + {0xB54E, 0x716E}, //3093 #CJK UNIFIED IDEOGRAPH + {0xB54F, 0x711C}, //3094 #CJK UNIFIED IDEOGRAPH + {0xB550, 0x724C}, //3095 #CJK UNIFIED IDEOGRAPH + {0xB551, 0x7284}, //3096 #CJK UNIFIED IDEOGRAPH + {0xB552, 0x7280}, //3097 #CJK UNIFIED IDEOGRAPH + {0xB553, 0x7336}, //3098 #CJK UNIFIED IDEOGRAPH + {0xB554, 0x7325}, //3099 #CJK UNIFIED IDEOGRAPH + {0xB555, 0x7334}, //3100 #CJK UNIFIED IDEOGRAPH + {0xB556, 0x7329}, //3101 #CJK UNIFIED IDEOGRAPH + {0xB557, 0x743A}, //3102 #CJK UNIFIED IDEOGRAPH + {0xB558, 0x742A}, //3103 #CJK UNIFIED IDEOGRAPH + {0xB559, 0x7433}, //3104 #CJK UNIFIED IDEOGRAPH + {0xB55A, 0x7422}, //3105 #CJK UNIFIED IDEOGRAPH + {0xB55B, 0x7425}, //3106 #CJK UNIFIED IDEOGRAPH + {0xB55C, 0x7435}, //3107 #CJK UNIFIED IDEOGRAPH + {0xB55D, 0x7436}, //3108 #CJK UNIFIED IDEOGRAPH + {0xB55E, 0x7434}, //3109 #CJK UNIFIED IDEOGRAPH + {0xB55F, 0x742F}, //3110 #CJK UNIFIED IDEOGRAPH + {0xB560, 0x741B}, //3111 #CJK UNIFIED IDEOGRAPH + {0xB561, 0x7426}, //3112 #CJK UNIFIED IDEOGRAPH + {0xB562, 0x7428}, //3113 #CJK UNIFIED IDEOGRAPH + {0xB563, 0x7525}, //3114 #CJK UNIFIED IDEOGRAPH + {0xB564, 0x7526}, //3115 #CJK UNIFIED IDEOGRAPH + {0xB565, 0x756B}, //3116 #CJK UNIFIED IDEOGRAPH + {0xB566, 0x756A}, //3117 #CJK UNIFIED IDEOGRAPH + {0xB567, 0x75E2}, //3118 #CJK UNIFIED IDEOGRAPH + {0xB568, 0x75DB}, //3119 #CJK UNIFIED IDEOGRAPH + {0xB569, 0x75E3}, //3120 #CJK UNIFIED IDEOGRAPH + {0xB56A, 0x75D9}, //3121 #CJK UNIFIED IDEOGRAPH + {0xB56B, 0x75D8}, //3122 #CJK UNIFIED IDEOGRAPH + {0xB56C, 0x75DE}, //3123 #CJK UNIFIED IDEOGRAPH + {0xB56D, 0x75E0}, //3124 #CJK UNIFIED IDEOGRAPH + {0xB56E, 0x767B}, //3125 #CJK UNIFIED IDEOGRAPH + {0xB56F, 0x767C}, //3126 #CJK UNIFIED IDEOGRAPH + {0xB570, 0x7696}, //3127 #CJK UNIFIED IDEOGRAPH + {0xB571, 0x7693}, //3128 #CJK UNIFIED IDEOGRAPH + {0xB572, 0x76B4}, //3129 #CJK UNIFIED IDEOGRAPH + {0xB573, 0x76DC}, //3130 #CJK UNIFIED IDEOGRAPH + {0xB574, 0x774F}, //3131 #CJK UNIFIED IDEOGRAPH + {0xB575, 0x77ED}, //3132 #CJK UNIFIED IDEOGRAPH + {0xB576, 0x785D}, //3133 #CJK UNIFIED IDEOGRAPH + {0xB577, 0x786C}, //3134 #CJK UNIFIED IDEOGRAPH + {0xB578, 0x786F}, //3135 #CJK UNIFIED IDEOGRAPH + {0xB579, 0x7A0D}, //3136 #CJK UNIFIED IDEOGRAPH + {0xB57A, 0x7A08}, //3137 #CJK UNIFIED IDEOGRAPH + {0xB57B, 0x7A0B}, //3138 #CJK UNIFIED IDEOGRAPH + {0xB57C, 0x7A05}, //3139 #CJK UNIFIED IDEOGRAPH + {0xB57D, 0x7A00}, //3140 #CJK UNIFIED IDEOGRAPH + {0xB57E, 0x7A98}, //3141 #CJK UNIFIED IDEOGRAPH + {0xB5A1, 0x7A97}, //3142 #CJK UNIFIED IDEOGRAPH + {0xB5A2, 0x7A96}, //3143 #CJK UNIFIED IDEOGRAPH + {0xB5A3, 0x7AE5}, //3144 #CJK UNIFIED IDEOGRAPH + {0xB5A4, 0x7AE3}, //3145 #CJK UNIFIED IDEOGRAPH + {0xB5A5, 0x7B49}, //3146 #CJK UNIFIED IDEOGRAPH + {0xB5A6, 0x7B56}, //3147 #CJK UNIFIED IDEOGRAPH + {0xB5A7, 0x7B46}, //3148 #CJK UNIFIED IDEOGRAPH + {0xB5A8, 0x7B50}, //3149 #CJK UNIFIED IDEOGRAPH + {0xB5A9, 0x7B52}, //3150 #CJK UNIFIED IDEOGRAPH + {0xB5AA, 0x7B54}, //3151 #CJK UNIFIED IDEOGRAPH + {0xB5AB, 0x7B4D}, //3152 #CJK UNIFIED IDEOGRAPH + {0xB5AC, 0x7B4B}, //3153 #CJK UNIFIED IDEOGRAPH + {0xB5AD, 0x7B4F}, //3154 #CJK UNIFIED IDEOGRAPH + {0xB5AE, 0x7B51}, //3155 #CJK UNIFIED IDEOGRAPH + {0xB5AF, 0x7C9F}, //3156 #CJK UNIFIED IDEOGRAPH + {0xB5B0, 0x7CA5}, //3157 #CJK UNIFIED IDEOGRAPH + {0xB5B1, 0x7D5E}, //3158 #CJK UNIFIED IDEOGRAPH + {0xB5B2, 0x7D50}, //3159 #CJK UNIFIED IDEOGRAPH + {0xB5B3, 0x7D68}, //3160 #CJK UNIFIED IDEOGRAPH + {0xB5B4, 0x7D55}, //3161 #CJK UNIFIED IDEOGRAPH + {0xB5B5, 0x7D2B}, //3162 #CJK UNIFIED IDEOGRAPH + {0xB5B6, 0x7D6E}, //3163 #CJK UNIFIED IDEOGRAPH + {0xB5B7, 0x7D72}, //3164 #CJK UNIFIED IDEOGRAPH + {0xB5B8, 0x7D61}, //3165 #CJK UNIFIED IDEOGRAPH + {0xB5B9, 0x7D66}, //3166 #CJK UNIFIED IDEOGRAPH + {0xB5BA, 0x7D62}, //3167 #CJK UNIFIED IDEOGRAPH + {0xB5BB, 0x7D70}, //3168 #CJK UNIFIED IDEOGRAPH + {0xB5BC, 0x7D73}, //3169 #CJK UNIFIED IDEOGRAPH + {0xB5BD, 0x5584}, //3170 #CJK UNIFIED IDEOGRAPH + {0xB5BE, 0x7FD4}, //3171 #CJK UNIFIED IDEOGRAPH + {0xB5BF, 0x7FD5}, //3172 #CJK UNIFIED IDEOGRAPH + {0xB5C0, 0x800B}, //3173 #CJK UNIFIED IDEOGRAPH + {0xB5C1, 0x8052}, //3174 #CJK UNIFIED IDEOGRAPH + {0xB5C2, 0x8085}, //3175 #CJK UNIFIED IDEOGRAPH + {0xB5C3, 0x8155}, //3176 #CJK UNIFIED IDEOGRAPH + {0xB5C4, 0x8154}, //3177 #CJK UNIFIED IDEOGRAPH + {0xB5C5, 0x814B}, //3178 #CJK UNIFIED IDEOGRAPH + {0xB5C6, 0x8151}, //3179 #CJK UNIFIED IDEOGRAPH + {0xB5C7, 0x814E}, //3180 #CJK UNIFIED IDEOGRAPH + {0xB5C8, 0x8139}, //3181 #CJK UNIFIED IDEOGRAPH + {0xB5C9, 0x8146}, //3182 #CJK UNIFIED IDEOGRAPH + {0xB5CA, 0x813E}, //3183 #CJK UNIFIED IDEOGRAPH + {0xB5CB, 0x814C}, //3184 #CJK UNIFIED IDEOGRAPH + {0xB5CC, 0x8153}, //3185 #CJK UNIFIED IDEOGRAPH + {0xB5CD, 0x8174}, //3186 #CJK UNIFIED IDEOGRAPH + {0xB5CE, 0x8212}, //3187 #CJK UNIFIED IDEOGRAPH + {0xB5CF, 0x821C}, //3188 #CJK UNIFIED IDEOGRAPH + {0xB5D0, 0x83E9}, //3189 #CJK UNIFIED IDEOGRAPH + {0xB5D1, 0x8403}, //3190 #CJK UNIFIED IDEOGRAPH + {0xB5D2, 0x83F8}, //3191 #CJK UNIFIED IDEOGRAPH + {0xB5D3, 0x840D}, //3192 #CJK UNIFIED IDEOGRAPH + {0xB5D4, 0x83E0}, //3193 #CJK UNIFIED IDEOGRAPH + {0xB5D5, 0x83C5}, //3194 #CJK UNIFIED IDEOGRAPH + {0xB5D6, 0x840B}, //3195 #CJK UNIFIED IDEOGRAPH + {0xB5D7, 0x83C1}, //3196 #CJK UNIFIED IDEOGRAPH + {0xB5D8, 0x83EF}, //3197 #CJK UNIFIED IDEOGRAPH + {0xB5D9, 0x83F1}, //3198 #CJK UNIFIED IDEOGRAPH + {0xB5DA, 0x83F4}, //3199 #CJK UNIFIED IDEOGRAPH + {0xB5DB, 0x8457}, //3200 #CJK UNIFIED IDEOGRAPH + {0xB5DC, 0x840A}, //3201 #CJK UNIFIED IDEOGRAPH + {0xB5DD, 0x83F0}, //3202 #CJK UNIFIED IDEOGRAPH + {0xB5DE, 0x840C}, //3203 #CJK UNIFIED IDEOGRAPH + {0xB5DF, 0x83CC}, //3204 #CJK UNIFIED IDEOGRAPH + {0xB5E0, 0x83FD}, //3205 #CJK UNIFIED IDEOGRAPH + {0xB5E1, 0x83F2}, //3206 #CJK UNIFIED IDEOGRAPH + {0xB5E2, 0x83CA}, //3207 #CJK UNIFIED IDEOGRAPH + {0xB5E3, 0x8438}, //3208 #CJK UNIFIED IDEOGRAPH + {0xB5E4, 0x840E}, //3209 #CJK UNIFIED IDEOGRAPH + {0xB5E5, 0x8404}, //3210 #CJK UNIFIED IDEOGRAPH + {0xB5E6, 0x83DC}, //3211 #CJK UNIFIED IDEOGRAPH + {0xB5E7, 0x8407}, //3212 #CJK UNIFIED IDEOGRAPH + {0xB5E8, 0x83D4}, //3213 #CJK UNIFIED IDEOGRAPH + {0xB5E9, 0x83DF}, //3214 #CJK UNIFIED IDEOGRAPH + {0xB5EA, 0x865B}, //3215 #CJK UNIFIED IDEOGRAPH + {0xB5EB, 0x86DF}, //3216 #CJK UNIFIED IDEOGRAPH + {0xB5EC, 0x86D9}, //3217 #CJK UNIFIED IDEOGRAPH + {0xB5ED, 0x86ED}, //3218 #CJK UNIFIED IDEOGRAPH + {0xB5EE, 0x86D4}, //3219 #CJK UNIFIED IDEOGRAPH + {0xB5EF, 0x86DB}, //3220 #CJK UNIFIED IDEOGRAPH + {0xB5F0, 0x86E4}, //3221 #CJK UNIFIED IDEOGRAPH + {0xB5F1, 0x86D0}, //3222 #CJK UNIFIED IDEOGRAPH + {0xB5F2, 0x86DE}, //3223 #CJK UNIFIED IDEOGRAPH + {0xB5F3, 0x8857}, //3224 #CJK UNIFIED IDEOGRAPH + {0xB5F4, 0x88C1}, //3225 #CJK UNIFIED IDEOGRAPH + {0xB5F5, 0x88C2}, //3226 #CJK UNIFIED IDEOGRAPH + {0xB5F6, 0x88B1}, //3227 #CJK UNIFIED IDEOGRAPH + {0xB5F7, 0x8983}, //3228 #CJK UNIFIED IDEOGRAPH + {0xB5F8, 0x8996}, //3229 #CJK UNIFIED IDEOGRAPH + {0xB5F9, 0x8A3B}, //3230 #CJK UNIFIED IDEOGRAPH + {0xB5FA, 0x8A60}, //3231 #CJK UNIFIED IDEOGRAPH + {0xB5FB, 0x8A55}, //3232 #CJK UNIFIED IDEOGRAPH + {0xB5FC, 0x8A5E}, //3233 #CJK UNIFIED IDEOGRAPH + {0xB5FD, 0x8A3C}, //3234 #CJK UNIFIED IDEOGRAPH + {0xB5FE, 0x8A41}, //3235 #CJK UNIFIED IDEOGRAPH + {0xB640, 0x8A54}, //3236 #CJK UNIFIED IDEOGRAPH + {0xB641, 0x8A5B}, //3237 #CJK UNIFIED IDEOGRAPH + {0xB642, 0x8A50}, //3238 #CJK UNIFIED IDEOGRAPH + {0xB643, 0x8A46}, //3239 #CJK UNIFIED IDEOGRAPH + {0xB644, 0x8A34}, //3240 #CJK UNIFIED IDEOGRAPH + {0xB645, 0x8A3A}, //3241 #CJK UNIFIED IDEOGRAPH + {0xB646, 0x8A36}, //3242 #CJK UNIFIED IDEOGRAPH + {0xB647, 0x8A56}, //3243 #CJK UNIFIED IDEOGRAPH + {0xB648, 0x8C61}, //3244 #CJK UNIFIED IDEOGRAPH + {0xB649, 0x8C82}, //3245 #CJK UNIFIED IDEOGRAPH + {0xB64A, 0x8CAF}, //3246 #CJK UNIFIED IDEOGRAPH + {0xB64B, 0x8CBC}, //3247 #CJK UNIFIED IDEOGRAPH + {0xB64C, 0x8CB3}, //3248 #CJK UNIFIED IDEOGRAPH + {0xB64D, 0x8CBD}, //3249 #CJK UNIFIED IDEOGRAPH + {0xB64E, 0x8CC1}, //3250 #CJK UNIFIED IDEOGRAPH + {0xB64F, 0x8CBB}, //3251 #CJK UNIFIED IDEOGRAPH + {0xB650, 0x8CC0}, //3252 #CJK UNIFIED IDEOGRAPH + {0xB651, 0x8CB4}, //3253 #CJK UNIFIED IDEOGRAPH + {0xB652, 0x8CB7}, //3254 #CJK UNIFIED IDEOGRAPH + {0xB653, 0x8CB6}, //3255 #CJK UNIFIED IDEOGRAPH + {0xB654, 0x8CBF}, //3256 #CJK UNIFIED IDEOGRAPH + {0xB655, 0x8CB8}, //3257 #CJK UNIFIED IDEOGRAPH + {0xB656, 0x8D8A}, //3258 #CJK UNIFIED IDEOGRAPH + {0xB657, 0x8D85}, //3259 #CJK UNIFIED IDEOGRAPH + {0xB658, 0x8D81}, //3260 #CJK UNIFIED IDEOGRAPH + {0xB659, 0x8DCE}, //3261 #CJK UNIFIED IDEOGRAPH + {0xB65A, 0x8DDD}, //3262 #CJK UNIFIED IDEOGRAPH + {0xB65B, 0x8DCB}, //3263 #CJK UNIFIED IDEOGRAPH + {0xB65C, 0x8DDA}, //3264 #CJK UNIFIED IDEOGRAPH + {0xB65D, 0x8DD1}, //3265 #CJK UNIFIED IDEOGRAPH + {0xB65E, 0x8DCC}, //3266 #CJK UNIFIED IDEOGRAPH + {0xB65F, 0x8DDB}, //3267 #CJK UNIFIED IDEOGRAPH + {0xB660, 0x8DC6}, //3268 #CJK UNIFIED IDEOGRAPH + {0xB661, 0x8EFB}, //3269 #CJK UNIFIED IDEOGRAPH + {0xB662, 0x8EF8}, //3270 #CJK UNIFIED IDEOGRAPH + {0xB663, 0x8EFC}, //3271 #CJK UNIFIED IDEOGRAPH + {0xB664, 0x8F9C}, //3272 #CJK UNIFIED IDEOGRAPH + {0xB665, 0x902E}, //3273 #CJK UNIFIED IDEOGRAPH + {0xB666, 0x9035}, //3274 #CJK UNIFIED IDEOGRAPH + {0xB667, 0x9031}, //3275 #CJK UNIFIED IDEOGRAPH + {0xB668, 0x9038}, //3276 #CJK UNIFIED IDEOGRAPH + {0xB669, 0x9032}, //3277 #CJK UNIFIED IDEOGRAPH + {0xB66A, 0x9036}, //3278 #CJK UNIFIED IDEOGRAPH + {0xB66B, 0x9102}, //3279 #CJK UNIFIED IDEOGRAPH + {0xB66C, 0x90F5}, //3280 #CJK UNIFIED IDEOGRAPH + {0xB66D, 0x9109}, //3281 #CJK UNIFIED IDEOGRAPH + {0xB66E, 0x90FE}, //3282 #CJK UNIFIED IDEOGRAPH + {0xB66F, 0x9163}, //3283 #CJK UNIFIED IDEOGRAPH + {0xB670, 0x9165}, //3284 #CJK UNIFIED IDEOGRAPH + {0xB671, 0x91CF}, //3285 #CJK UNIFIED IDEOGRAPH + {0xB672, 0x9214}, //3286 #CJK UNIFIED IDEOGRAPH + {0xB673, 0x9215}, //3287 #CJK UNIFIED IDEOGRAPH + {0xB674, 0x9223}, //3288 #CJK UNIFIED IDEOGRAPH + {0xB675, 0x9209}, //3289 #CJK UNIFIED IDEOGRAPH + {0xB676, 0x921E}, //3290 #CJK UNIFIED IDEOGRAPH + {0xB677, 0x920D}, //3291 #CJK UNIFIED IDEOGRAPH + {0xB678, 0x9210}, //3292 #CJK UNIFIED IDEOGRAPH + {0xB679, 0x9207}, //3293 #CJK UNIFIED IDEOGRAPH + {0xB67A, 0x9211}, //3294 #CJK UNIFIED IDEOGRAPH + {0xB67B, 0x9594}, //3295 #CJK UNIFIED IDEOGRAPH + {0xB67C, 0x958F}, //3296 #CJK UNIFIED IDEOGRAPH + {0xB67D, 0x958B}, //3297 #CJK UNIFIED IDEOGRAPH + {0xB67E, 0x9591}, //3298 #CJK UNIFIED IDEOGRAPH + {0xB6A1, 0x9593}, //3299 #CJK UNIFIED IDEOGRAPH + {0xB6A2, 0x9592}, //3300 #CJK UNIFIED IDEOGRAPH + {0xB6A3, 0x958E}, //3301 #CJK UNIFIED IDEOGRAPH + {0xB6A4, 0x968A}, //3302 #CJK UNIFIED IDEOGRAPH + {0xB6A5, 0x968E}, //3303 #CJK UNIFIED IDEOGRAPH + {0xB6A6, 0x968B}, //3304 #CJK UNIFIED IDEOGRAPH + {0xB6A7, 0x967D}, //3305 #CJK UNIFIED IDEOGRAPH + {0xB6A8, 0x9685}, //3306 #CJK UNIFIED IDEOGRAPH + {0xB6A9, 0x9686}, //3307 #CJK UNIFIED IDEOGRAPH + {0xB6AA, 0x968D}, //3308 #CJK UNIFIED IDEOGRAPH + {0xB6AB, 0x9672}, //3309 #CJK UNIFIED IDEOGRAPH + {0xB6AC, 0x9684}, //3310 #CJK UNIFIED IDEOGRAPH + {0xB6AD, 0x96C1}, //3311 #CJK UNIFIED IDEOGRAPH + {0xB6AE, 0x96C5}, //3312 #CJK UNIFIED IDEOGRAPH + {0xB6AF, 0x96C4}, //3313 #CJK UNIFIED IDEOGRAPH + {0xB6B0, 0x96C6}, //3314 #CJK UNIFIED IDEOGRAPH + {0xB6B1, 0x96C7}, //3315 #CJK UNIFIED IDEOGRAPH + {0xB6B2, 0x96EF}, //3316 #CJK UNIFIED IDEOGRAPH + {0xB6B3, 0x96F2}, //3317 #CJK UNIFIED IDEOGRAPH + {0xB6B4, 0x97CC}, //3318 #CJK UNIFIED IDEOGRAPH + {0xB6B5, 0x9805}, //3319 #CJK UNIFIED IDEOGRAPH + {0xB6B6, 0x9806}, //3320 #CJK UNIFIED IDEOGRAPH + {0xB6B7, 0x9808}, //3321 #CJK UNIFIED IDEOGRAPH + {0xB6B8, 0x98E7}, //3322 #CJK UNIFIED IDEOGRAPH + {0xB6B9, 0x98EA}, //3323 #CJK UNIFIED IDEOGRAPH + {0xB6BA, 0x98EF}, //3324 #CJK UNIFIED IDEOGRAPH + {0xB6BB, 0x98E9}, //3325 #CJK UNIFIED IDEOGRAPH + {0xB6BC, 0x98F2}, //3326 #CJK UNIFIED IDEOGRAPH + {0xB6BD, 0x98ED}, //3327 #CJK UNIFIED IDEOGRAPH + {0xB6BE, 0x99AE}, //3328 #CJK UNIFIED IDEOGRAPH + {0xB6BF, 0x99AD}, //3329 #CJK UNIFIED IDEOGRAPH + {0xB6C0, 0x9EC3}, //3330 #CJK UNIFIED IDEOGRAPH + {0xB6C1, 0x9ECD}, //3331 #CJK UNIFIED IDEOGRAPH + {0xB6C2, 0x9ED1}, //3332 #CJK UNIFIED IDEOGRAPH + {0xB6C3, 0x4E82}, //3333 #CJK UNIFIED IDEOGRAPH + {0xB6C4, 0x50AD}, //3334 #CJK UNIFIED IDEOGRAPH + {0xB6C5, 0x50B5}, //3335 #CJK UNIFIED IDEOGRAPH + {0xB6C6, 0x50B2}, //3336 #CJK UNIFIED IDEOGRAPH + {0xB6C7, 0x50B3}, //3337 #CJK UNIFIED IDEOGRAPH + {0xB6C8, 0x50C5}, //3338 #CJK UNIFIED IDEOGRAPH + {0xB6C9, 0x50BE}, //3339 #CJK UNIFIED IDEOGRAPH + {0xB6CA, 0x50AC}, //3340 #CJK UNIFIED IDEOGRAPH + {0xB6CB, 0x50B7}, //3341 #CJK UNIFIED IDEOGRAPH + {0xB6CC, 0x50BB}, //3342 #CJK UNIFIED IDEOGRAPH + {0xB6CD, 0x50AF}, //3343 #CJK UNIFIED IDEOGRAPH + {0xB6CE, 0x50C7}, //3344 #CJK UNIFIED IDEOGRAPH + {0xB6CF, 0x527F}, //3345 #CJK UNIFIED IDEOGRAPH + {0xB6D0, 0x5277}, //3346 #CJK UNIFIED IDEOGRAPH + {0xB6D1, 0x527D}, //3347 #CJK UNIFIED IDEOGRAPH + {0xB6D2, 0x52DF}, //3348 #CJK UNIFIED IDEOGRAPH + {0xB6D3, 0x52E6}, //3349 #CJK UNIFIED IDEOGRAPH + {0xB6D4, 0x52E4}, //3350 #CJK UNIFIED IDEOGRAPH + {0xB6D5, 0x52E2}, //3351 #CJK UNIFIED IDEOGRAPH + {0xB6D6, 0x52E3}, //3352 #CJK UNIFIED IDEOGRAPH + {0xB6D7, 0x532F}, //3353 #CJK UNIFIED IDEOGRAPH + {0xB6D8, 0x55DF}, //3354 #CJK UNIFIED IDEOGRAPH + {0xB6D9, 0x55E8}, //3355 #CJK UNIFIED IDEOGRAPH + {0xB6DA, 0x55D3}, //3356 #CJK UNIFIED IDEOGRAPH + {0xB6DB, 0x55E6}, //3357 #CJK UNIFIED IDEOGRAPH + {0xB6DC, 0x55CE}, //3358 #CJK UNIFIED IDEOGRAPH + {0xB6DD, 0x55DC}, //3359 #CJK UNIFIED IDEOGRAPH + {0xB6DE, 0x55C7}, //3360 #CJK UNIFIED IDEOGRAPH + {0xB6DF, 0x55D1}, //3361 #CJK UNIFIED IDEOGRAPH + {0xB6E0, 0x55E3}, //3362 #CJK UNIFIED IDEOGRAPH + {0xB6E1, 0x55E4}, //3363 #CJK UNIFIED IDEOGRAPH + {0xB6E2, 0x55EF}, //3364 #CJK UNIFIED IDEOGRAPH + {0xB6E3, 0x55DA}, //3365 #CJK UNIFIED IDEOGRAPH + {0xB6E4, 0x55E1}, //3366 #CJK UNIFIED IDEOGRAPH + {0xB6E5, 0x55C5}, //3367 #CJK UNIFIED IDEOGRAPH + {0xB6E6, 0x55C6}, //3368 #CJK UNIFIED IDEOGRAPH + {0xB6E7, 0x55E5}, //3369 #CJK UNIFIED IDEOGRAPH + {0xB6E8, 0x55C9}, //3370 #CJK UNIFIED IDEOGRAPH + {0xB6E9, 0x5712}, //3371 #CJK UNIFIED IDEOGRAPH + {0xB6EA, 0x5713}, //3372 #CJK UNIFIED IDEOGRAPH + {0xB6EB, 0x585E}, //3373 #CJK UNIFIED IDEOGRAPH + {0xB6EC, 0x5851}, //3374 #CJK UNIFIED IDEOGRAPH + {0xB6ED, 0x5858}, //3375 #CJK UNIFIED IDEOGRAPH + {0xB6EE, 0x5857}, //3376 #CJK UNIFIED IDEOGRAPH + {0xB6EF, 0x585A}, //3377 #CJK UNIFIED IDEOGRAPH + {0xB6F0, 0x5854}, //3378 #CJK UNIFIED IDEOGRAPH + {0xB6F1, 0x586B}, //3379 #CJK UNIFIED IDEOGRAPH + {0xB6F2, 0x584C}, //3380 #CJK UNIFIED IDEOGRAPH + {0xB6F3, 0x586D}, //3381 #CJK UNIFIED IDEOGRAPH + {0xB6F4, 0x584A}, //3382 #CJK UNIFIED IDEOGRAPH + {0xB6F5, 0x5862}, //3383 #CJK UNIFIED IDEOGRAPH + {0xB6F6, 0x5852}, //3384 #CJK UNIFIED IDEOGRAPH + {0xB6F7, 0x584B}, //3385 #CJK UNIFIED IDEOGRAPH + {0xB6F8, 0x5967}, //3386 #CJK UNIFIED IDEOGRAPH + {0xB6F9, 0x5AC1}, //3387 #CJK UNIFIED IDEOGRAPH + {0xB6FA, 0x5AC9}, //3388 #CJK UNIFIED IDEOGRAPH + {0xB6FB, 0x5ACC}, //3389 #CJK UNIFIED IDEOGRAPH + {0xB6FC, 0x5ABE}, //3390 #CJK UNIFIED IDEOGRAPH + {0xB6FD, 0x5ABD}, //3391 #CJK UNIFIED IDEOGRAPH + {0xB6FE, 0x5ABC}, //3392 #CJK UNIFIED IDEOGRAPH + {0xB740, 0x5AB3}, //3393 #CJK UNIFIED IDEOGRAPH + {0xB741, 0x5AC2}, //3394 #CJK UNIFIED IDEOGRAPH + {0xB742, 0x5AB2}, //3395 #CJK UNIFIED IDEOGRAPH + {0xB743, 0x5D69}, //3396 #CJK UNIFIED IDEOGRAPH + {0xB744, 0x5D6F}, //3397 #CJK UNIFIED IDEOGRAPH + {0xB745, 0x5E4C}, //3398 #CJK UNIFIED IDEOGRAPH + {0xB746, 0x5E79}, //3399 #CJK UNIFIED IDEOGRAPH + {0xB747, 0x5EC9}, //3400 #CJK UNIFIED IDEOGRAPH + {0xB748, 0x5EC8}, //3401 #CJK UNIFIED IDEOGRAPH + {0xB749, 0x5F12}, //3402 #CJK UNIFIED IDEOGRAPH + {0xB74A, 0x5F59}, //3403 #CJK UNIFIED IDEOGRAPH + {0xB74B, 0x5FAC}, //3404 #CJK UNIFIED IDEOGRAPH + {0xB74C, 0x5FAE}, //3405 #CJK UNIFIED IDEOGRAPH + {0xB74D, 0x611A}, //3406 #CJK UNIFIED IDEOGRAPH + {0xB74E, 0x610F}, //3407 #CJK UNIFIED IDEOGRAPH + {0xB74F, 0x6148}, //3408 #CJK UNIFIED IDEOGRAPH + {0xB750, 0x611F}, //3409 #CJK UNIFIED IDEOGRAPH + {0xB751, 0x60F3}, //3410 #CJK UNIFIED IDEOGRAPH + {0xB752, 0x611B}, //3411 #CJK UNIFIED IDEOGRAPH + {0xB753, 0x60F9}, //3412 #CJK UNIFIED IDEOGRAPH + {0xB754, 0x6101}, //3413 #CJK UNIFIED IDEOGRAPH + {0xB755, 0x6108}, //3414 #CJK UNIFIED IDEOGRAPH + {0xB756, 0x614E}, //3415 #CJK UNIFIED IDEOGRAPH + {0xB757, 0x614C}, //3416 #CJK UNIFIED IDEOGRAPH + {0xB758, 0x6144}, //3417 #CJK UNIFIED IDEOGRAPH + {0xB759, 0x614D}, //3418 #CJK UNIFIED IDEOGRAPH + {0xB75A, 0x613E}, //3419 #CJK UNIFIED IDEOGRAPH + {0xB75B, 0x6134}, //3420 #CJK UNIFIED IDEOGRAPH + {0xB75C, 0x6127}, //3421 #CJK UNIFIED IDEOGRAPH + {0xB75D, 0x610D}, //3422 #CJK UNIFIED IDEOGRAPH + {0xB75E, 0x6106}, //3423 #CJK UNIFIED IDEOGRAPH + {0xB75F, 0x6137}, //3424 #CJK UNIFIED IDEOGRAPH + {0xB760, 0x6221}, //3425 #CJK UNIFIED IDEOGRAPH + {0xB761, 0x6222}, //3426 #CJK UNIFIED IDEOGRAPH + {0xB762, 0x6413}, //3427 #CJK UNIFIED IDEOGRAPH + {0xB763, 0x643E}, //3428 #CJK UNIFIED IDEOGRAPH + {0xB764, 0x641E}, //3429 #CJK UNIFIED IDEOGRAPH + {0xB765, 0x642A}, //3430 #CJK UNIFIED IDEOGRAPH + {0xB766, 0x642D}, //3431 #CJK UNIFIED IDEOGRAPH + {0xB767, 0x643D}, //3432 #CJK UNIFIED IDEOGRAPH + {0xB768, 0x642C}, //3433 #CJK UNIFIED IDEOGRAPH + {0xB769, 0x640F}, //3434 #CJK UNIFIED IDEOGRAPH + {0xB76A, 0x641C}, //3435 #CJK UNIFIED IDEOGRAPH + {0xB76B, 0x6414}, //3436 #CJK UNIFIED IDEOGRAPH + {0xB76C, 0x640D}, //3437 #CJK UNIFIED IDEOGRAPH + {0xB76D, 0x6436}, //3438 #CJK UNIFIED IDEOGRAPH + {0xB76E, 0x6416}, //3439 #CJK UNIFIED IDEOGRAPH + {0xB76F, 0x6417}, //3440 #CJK UNIFIED IDEOGRAPH + {0xB770, 0x6406}, //3441 #CJK UNIFIED IDEOGRAPH + {0xB771, 0x656C}, //3442 #CJK UNIFIED IDEOGRAPH + {0xB772, 0x659F}, //3443 #CJK UNIFIED IDEOGRAPH + {0xB773, 0x65B0}, //3444 #CJK UNIFIED IDEOGRAPH + {0xB774, 0x6697}, //3445 #CJK UNIFIED IDEOGRAPH + {0xB775, 0x6689}, //3446 #CJK UNIFIED IDEOGRAPH + {0xB776, 0x6687}, //3447 #CJK UNIFIED IDEOGRAPH + {0xB777, 0x6688}, //3448 #CJK UNIFIED IDEOGRAPH + {0xB778, 0x6696}, //3449 #CJK UNIFIED IDEOGRAPH + {0xB779, 0x6684}, //3450 #CJK UNIFIED IDEOGRAPH + {0xB77A, 0x6698}, //3451 #CJK UNIFIED IDEOGRAPH + {0xB77B, 0x668D}, //3452 #CJK UNIFIED IDEOGRAPH + {0xB77C, 0x6703}, //3453 #CJK UNIFIED IDEOGRAPH + {0xB77D, 0x6994}, //3454 #CJK UNIFIED IDEOGRAPH + {0xB77E, 0x696D}, //3455 #CJK UNIFIED IDEOGRAPH + {0xB7A1, 0x695A}, //3456 #CJK UNIFIED IDEOGRAPH + {0xB7A2, 0x6977}, //3457 #CJK UNIFIED IDEOGRAPH + {0xB7A3, 0x6960}, //3458 #CJK UNIFIED IDEOGRAPH + {0xB7A4, 0x6954}, //3459 #CJK UNIFIED IDEOGRAPH + {0xB7A5, 0x6975}, //3460 #CJK UNIFIED IDEOGRAPH + {0xB7A6, 0x6930}, //3461 #CJK UNIFIED IDEOGRAPH + {0xB7A7, 0x6982}, //3462 #CJK UNIFIED IDEOGRAPH + {0xB7A8, 0x694A}, //3463 #CJK UNIFIED IDEOGRAPH + {0xB7A9, 0x6968}, //3464 #CJK UNIFIED IDEOGRAPH + {0xB7AA, 0x696B}, //3465 #CJK UNIFIED IDEOGRAPH + {0xB7AB, 0x695E}, //3466 #CJK UNIFIED IDEOGRAPH + {0xB7AC, 0x6953}, //3467 #CJK UNIFIED IDEOGRAPH + {0xB7AD, 0x6979}, //3468 #CJK UNIFIED IDEOGRAPH + {0xB7AE, 0x6986}, //3469 #CJK UNIFIED IDEOGRAPH + {0xB7AF, 0x695D}, //3470 #CJK UNIFIED IDEOGRAPH + {0xB7B0, 0x6963}, //3471 #CJK UNIFIED IDEOGRAPH + {0xB7B1, 0x695B}, //3472 #CJK UNIFIED IDEOGRAPH + {0xB7B2, 0x6B47}, //3473 #CJK UNIFIED IDEOGRAPH + {0xB7B3, 0x6B72}, //3474 #CJK UNIFIED IDEOGRAPH + {0xB7B4, 0x6BC0}, //3475 #CJK UNIFIED IDEOGRAPH + {0xB7B5, 0x6BBF}, //3476 #CJK UNIFIED IDEOGRAPH + {0xB7B6, 0x6BD3}, //3477 #CJK UNIFIED IDEOGRAPH + {0xB7B7, 0x6BFD}, //3478 #CJK UNIFIED IDEOGRAPH + {0xB7B8, 0x6EA2}, //3479 #CJK UNIFIED IDEOGRAPH + {0xB7B9, 0x6EAF}, //3480 #CJK UNIFIED IDEOGRAPH + {0xB7BA, 0x6ED3}, //3481 #CJK UNIFIED IDEOGRAPH + {0xB7BB, 0x6EB6}, //3482 #CJK UNIFIED IDEOGRAPH + {0xB7BC, 0x6EC2}, //3483 #CJK UNIFIED IDEOGRAPH + {0xB7BD, 0x6E90}, //3484 #CJK UNIFIED IDEOGRAPH + {0xB7BE, 0x6E9D}, //3485 #CJK UNIFIED IDEOGRAPH + {0xB7BF, 0x6EC7}, //3486 #CJK UNIFIED IDEOGRAPH + {0xB7C0, 0x6EC5}, //3487 #CJK UNIFIED IDEOGRAPH + {0xB7C1, 0x6EA5}, //3488 #CJK UNIFIED IDEOGRAPH + {0xB7C2, 0x6E98}, //3489 #CJK UNIFIED IDEOGRAPH + {0xB7C3, 0x6EBC}, //3490 #CJK UNIFIED IDEOGRAPH + {0xB7C4, 0x6EBA}, //3491 #CJK UNIFIED IDEOGRAPH + {0xB7C5, 0x6EAB}, //3492 #CJK UNIFIED IDEOGRAPH + {0xB7C6, 0x6ED1}, //3493 #CJK UNIFIED IDEOGRAPH + {0xB7C7, 0x6E96}, //3494 #CJK UNIFIED IDEOGRAPH + {0xB7C8, 0x6E9C}, //3495 #CJK UNIFIED IDEOGRAPH + {0xB7C9, 0x6EC4}, //3496 #CJK UNIFIED IDEOGRAPH + {0xB7CA, 0x6ED4}, //3497 #CJK UNIFIED IDEOGRAPH + {0xB7CB, 0x6EAA}, //3498 #CJK UNIFIED IDEOGRAPH + {0xB7CC, 0x6EA7}, //3499 #CJK UNIFIED IDEOGRAPH + {0xB7CD, 0x6EB4}, //3500 #CJK UNIFIED IDEOGRAPH + {0xB7CE, 0x714E}, //3501 #CJK UNIFIED IDEOGRAPH + {0xB7CF, 0x7159}, //3502 #CJK UNIFIED IDEOGRAPH + {0xB7D0, 0x7169}, //3503 #CJK UNIFIED IDEOGRAPH + {0xB7D1, 0x7164}, //3504 #CJK UNIFIED IDEOGRAPH + {0xB7D2, 0x7149}, //3505 #CJK UNIFIED IDEOGRAPH + {0xB7D3, 0x7167}, //3506 #CJK UNIFIED IDEOGRAPH + {0xB7D4, 0x715C}, //3507 #CJK UNIFIED IDEOGRAPH + {0xB7D5, 0x716C}, //3508 #CJK UNIFIED IDEOGRAPH + {0xB7D6, 0x7166}, //3509 #CJK UNIFIED IDEOGRAPH + {0xB7D7, 0x714C}, //3510 #CJK UNIFIED IDEOGRAPH + {0xB7D8, 0x7165}, //3511 #CJK UNIFIED IDEOGRAPH + {0xB7D9, 0x715E}, //3512 #CJK UNIFIED IDEOGRAPH + {0xB7DA, 0x7146}, //3513 #CJK UNIFIED IDEOGRAPH + {0xB7DB, 0x7168}, //3514 #CJK UNIFIED IDEOGRAPH + {0xB7DC, 0x7156}, //3515 #CJK UNIFIED IDEOGRAPH + {0xB7DD, 0x723A}, //3516 #CJK UNIFIED IDEOGRAPH + {0xB7DE, 0x7252}, //3517 #CJK UNIFIED IDEOGRAPH + {0xB7DF, 0x7337}, //3518 #CJK UNIFIED IDEOGRAPH + {0xB7E0, 0x7345}, //3519 #CJK UNIFIED IDEOGRAPH + {0xB7E1, 0x733F}, //3520 #CJK UNIFIED IDEOGRAPH + {0xB7E2, 0x733E}, //3521 #CJK UNIFIED IDEOGRAPH + {0xB7E3, 0x746F}, //3522 #CJK UNIFIED IDEOGRAPH + {0xB7E4, 0x745A}, //3523 #CJK UNIFIED IDEOGRAPH + {0xB7E5, 0x7455}, //3524 #CJK UNIFIED IDEOGRAPH + {0xB7E6, 0x745F}, //3525 #CJK UNIFIED IDEOGRAPH + {0xB7E7, 0x745E}, //3526 #CJK UNIFIED IDEOGRAPH + {0xB7E8, 0x7441}, //3527 #CJK UNIFIED IDEOGRAPH + {0xB7E9, 0x743F}, //3528 #CJK UNIFIED IDEOGRAPH + {0xB7EA, 0x7459}, //3529 #CJK UNIFIED IDEOGRAPH + {0xB7EB, 0x745B}, //3530 #CJK UNIFIED IDEOGRAPH + {0xB7EC, 0x745C}, //3531 #CJK UNIFIED IDEOGRAPH + {0xB7ED, 0x7576}, //3532 #CJK UNIFIED IDEOGRAPH + {0xB7EE, 0x7578}, //3533 #CJK UNIFIED IDEOGRAPH + {0xB7EF, 0x7600}, //3534 #CJK UNIFIED IDEOGRAPH + {0xB7F0, 0x75F0}, //3535 #CJK UNIFIED IDEOGRAPH + {0xB7F1, 0x7601}, //3536 #CJK UNIFIED IDEOGRAPH + {0xB7F2, 0x75F2}, //3537 #CJK UNIFIED IDEOGRAPH + {0xB7F3, 0x75F1}, //3538 #CJK UNIFIED IDEOGRAPH + {0xB7F4, 0x75FA}, //3539 #CJK UNIFIED IDEOGRAPH + {0xB7F5, 0x75FF}, //3540 #CJK UNIFIED IDEOGRAPH + {0xB7F6, 0x75F4}, //3541 #CJK UNIFIED IDEOGRAPH + {0xB7F7, 0x75F3}, //3542 #CJK UNIFIED IDEOGRAPH + {0xB7F8, 0x76DE}, //3543 #CJK UNIFIED IDEOGRAPH + {0xB7F9, 0x76DF}, //3544 #CJK UNIFIED IDEOGRAPH + {0xB7FA, 0x775B}, //3545 #CJK UNIFIED IDEOGRAPH + {0xB7FB, 0x776B}, //3546 #CJK UNIFIED IDEOGRAPH + {0xB7FC, 0x7766}, //3547 #CJK UNIFIED IDEOGRAPH + {0xB7FD, 0x775E}, //3548 #CJK UNIFIED IDEOGRAPH + {0xB7FE, 0x7763}, //3549 #CJK UNIFIED IDEOGRAPH + {0xB840, 0x7779}, //3550 #CJK UNIFIED IDEOGRAPH + {0xB841, 0x776A}, //3551 #CJK UNIFIED IDEOGRAPH + {0xB842, 0x776C}, //3552 #CJK UNIFIED IDEOGRAPH + {0xB843, 0x775C}, //3553 #CJK UNIFIED IDEOGRAPH + {0xB844, 0x7765}, //3554 #CJK UNIFIED IDEOGRAPH + {0xB845, 0x7768}, //3555 #CJK UNIFIED IDEOGRAPH + {0xB846, 0x7762}, //3556 #CJK UNIFIED IDEOGRAPH + {0xB847, 0x77EE}, //3557 #CJK UNIFIED IDEOGRAPH + {0xB848, 0x788E}, //3558 #CJK UNIFIED IDEOGRAPH + {0xB849, 0x78B0}, //3559 #CJK UNIFIED IDEOGRAPH + {0xB84A, 0x7897}, //3560 #CJK UNIFIED IDEOGRAPH + {0xB84B, 0x7898}, //3561 #CJK UNIFIED IDEOGRAPH + {0xB84C, 0x788C}, //3562 #CJK UNIFIED IDEOGRAPH + {0xB84D, 0x7889}, //3563 #CJK UNIFIED IDEOGRAPH + {0xB84E, 0x787C}, //3564 #CJK UNIFIED IDEOGRAPH + {0xB84F, 0x7891}, //3565 #CJK UNIFIED IDEOGRAPH + {0xB850, 0x7893}, //3566 #CJK UNIFIED IDEOGRAPH + {0xB851, 0x787F}, //3567 #CJK UNIFIED IDEOGRAPH + {0xB852, 0x797A}, //3568 #CJK UNIFIED IDEOGRAPH + {0xB853, 0x797F}, //3569 #CJK UNIFIED IDEOGRAPH + {0xB854, 0x7981}, //3570 #CJK UNIFIED IDEOGRAPH + {0xB855, 0x842C}, //3571 #CJK UNIFIED IDEOGRAPH + {0xB856, 0x79BD}, //3572 #CJK UNIFIED IDEOGRAPH + {0xB857, 0x7A1C}, //3573 #CJK UNIFIED IDEOGRAPH + {0xB858, 0x7A1A}, //3574 #CJK UNIFIED IDEOGRAPH + {0xB859, 0x7A20}, //3575 #CJK UNIFIED IDEOGRAPH + {0xB85A, 0x7A14}, //3576 #CJK UNIFIED IDEOGRAPH + {0xB85B, 0x7A1F}, //3577 #CJK UNIFIED IDEOGRAPH + {0xB85C, 0x7A1E}, //3578 #CJK UNIFIED IDEOGRAPH + {0xB85D, 0x7A9F}, //3579 #CJK UNIFIED IDEOGRAPH + {0xB85E, 0x7AA0}, //3580 #CJK UNIFIED IDEOGRAPH + {0xB85F, 0x7B77}, //3581 #CJK UNIFIED IDEOGRAPH + {0xB860, 0x7BC0}, //3582 #CJK UNIFIED IDEOGRAPH + {0xB861, 0x7B60}, //3583 #CJK UNIFIED IDEOGRAPH + {0xB862, 0x7B6E}, //3584 #CJK UNIFIED IDEOGRAPH + {0xB863, 0x7B67}, //3585 #CJK UNIFIED IDEOGRAPH + {0xB864, 0x7CB1}, //3586 #CJK UNIFIED IDEOGRAPH + {0xB865, 0x7CB3}, //3587 #CJK UNIFIED IDEOGRAPH + {0xB866, 0x7CB5}, //3588 #CJK UNIFIED IDEOGRAPH + {0xB867, 0x7D93}, //3589 #CJK UNIFIED IDEOGRAPH + {0xB868, 0x7D79}, //3590 #CJK UNIFIED IDEOGRAPH + {0xB869, 0x7D91}, //3591 #CJK UNIFIED IDEOGRAPH + {0xB86A, 0x7D81}, //3592 #CJK UNIFIED IDEOGRAPH + {0xB86B, 0x7D8F}, //3593 #CJK UNIFIED IDEOGRAPH + {0xB86C, 0x7D5B}, //3594 #CJK UNIFIED IDEOGRAPH + {0xB86D, 0x7F6E}, //3595 #CJK UNIFIED IDEOGRAPH + {0xB86E, 0x7F69}, //3596 #CJK UNIFIED IDEOGRAPH + {0xB86F, 0x7F6A}, //3597 #CJK UNIFIED IDEOGRAPH + {0xB870, 0x7F72}, //3598 #CJK UNIFIED IDEOGRAPH + {0xB871, 0x7FA9}, //3599 #CJK UNIFIED IDEOGRAPH + {0xB872, 0x7FA8}, //3600 #CJK UNIFIED IDEOGRAPH + {0xB873, 0x7FA4}, //3601 #CJK UNIFIED IDEOGRAPH + {0xB874, 0x8056}, //3602 #CJK UNIFIED IDEOGRAPH + {0xB875, 0x8058}, //3603 #CJK UNIFIED IDEOGRAPH + {0xB876, 0x8086}, //3604 #CJK UNIFIED IDEOGRAPH + {0xB877, 0x8084}, //3605 #CJK UNIFIED IDEOGRAPH + {0xB878, 0x8171}, //3606 #CJK UNIFIED IDEOGRAPH + {0xB879, 0x8170}, //3607 #CJK UNIFIED IDEOGRAPH + {0xB87A, 0x8178}, //3608 #CJK UNIFIED IDEOGRAPH + {0xB87B, 0x8165}, //3609 #CJK UNIFIED IDEOGRAPH + {0xB87C, 0x816E}, //3610 #CJK UNIFIED IDEOGRAPH + {0xB87D, 0x8173}, //3611 #CJK UNIFIED IDEOGRAPH + {0xB87E, 0x816B}, //3612 #CJK UNIFIED IDEOGRAPH + {0xB8A1, 0x8179}, //3613 #CJK UNIFIED IDEOGRAPH + {0xB8A2, 0x817A}, //3614 #CJK UNIFIED IDEOGRAPH + {0xB8A3, 0x8166}, //3615 #CJK UNIFIED IDEOGRAPH + {0xB8A4, 0x8205}, //3616 #CJK UNIFIED IDEOGRAPH + {0xB8A5, 0x8247}, //3617 #CJK UNIFIED IDEOGRAPH + {0xB8A6, 0x8482}, //3618 #CJK UNIFIED IDEOGRAPH + {0xB8A7, 0x8477}, //3619 #CJK UNIFIED IDEOGRAPH + {0xB8A8, 0x843D}, //3620 #CJK UNIFIED IDEOGRAPH + {0xB8A9, 0x8431}, //3621 #CJK UNIFIED IDEOGRAPH + {0xB8AA, 0x8475}, //3622 #CJK UNIFIED IDEOGRAPH + {0xB8AB, 0x8466}, //3623 #CJK UNIFIED IDEOGRAPH + {0xB8AC, 0x846B}, //3624 #CJK UNIFIED IDEOGRAPH + {0xB8AD, 0x8449}, //3625 #CJK UNIFIED IDEOGRAPH + {0xB8AE, 0x846C}, //3626 #CJK UNIFIED IDEOGRAPH + {0xB8AF, 0x845B}, //3627 #CJK UNIFIED IDEOGRAPH + {0xB8B0, 0x843C}, //3628 #CJK UNIFIED IDEOGRAPH + {0xB8B1, 0x8435}, //3629 #CJK UNIFIED IDEOGRAPH + {0xB8B2, 0x8461}, //3630 #CJK UNIFIED IDEOGRAPH + {0xB8B3, 0x8463}, //3631 #CJK UNIFIED IDEOGRAPH + {0xB8B4, 0x8469}, //3632 #CJK UNIFIED IDEOGRAPH + {0xB8B5, 0x846D}, //3633 #CJK UNIFIED IDEOGRAPH + {0xB8B6, 0x8446}, //3634 #CJK UNIFIED IDEOGRAPH + {0xB8B7, 0x865E}, //3635 #CJK UNIFIED IDEOGRAPH + {0xB8B8, 0x865C}, //3636 #CJK UNIFIED IDEOGRAPH + {0xB8B9, 0x865F}, //3637 #CJK UNIFIED IDEOGRAPH + {0xB8BA, 0x86F9}, //3638 #CJK UNIFIED IDEOGRAPH + {0xB8BB, 0x8713}, //3639 #CJK UNIFIED IDEOGRAPH + {0xB8BC, 0x8708}, //3640 #CJK UNIFIED IDEOGRAPH + {0xB8BD, 0x8707}, //3641 #CJK UNIFIED IDEOGRAPH + {0xB8BE, 0x8700}, //3642 #CJK UNIFIED IDEOGRAPH + {0xB8BF, 0x86FE}, //3643 #CJK UNIFIED IDEOGRAPH + {0xB8C0, 0x86FB}, //3644 #CJK UNIFIED IDEOGRAPH + {0xB8C1, 0x8702}, //3645 #CJK UNIFIED IDEOGRAPH + {0xB8C2, 0x8703}, //3646 #CJK UNIFIED IDEOGRAPH + {0xB8C3, 0x8706}, //3647 #CJK UNIFIED IDEOGRAPH + {0xB8C4, 0x870A}, //3648 #CJK UNIFIED IDEOGRAPH + {0xB8C5, 0x8859}, //3649 #CJK UNIFIED IDEOGRAPH + {0xB8C6, 0x88DF}, //3650 #CJK UNIFIED IDEOGRAPH + {0xB8C7, 0x88D4}, //3651 #CJK UNIFIED IDEOGRAPH + {0xB8C8, 0x88D9}, //3652 #CJK UNIFIED IDEOGRAPH + {0xB8C9, 0x88DC}, //3653 #CJK UNIFIED IDEOGRAPH + {0xB8CA, 0x88D8}, //3654 #CJK UNIFIED IDEOGRAPH + {0xB8CB, 0x88DD}, //3655 #CJK UNIFIED IDEOGRAPH + {0xB8CC, 0x88E1}, //3656 #CJK UNIFIED IDEOGRAPH + {0xB8CD, 0x88CA}, //3657 #CJK UNIFIED IDEOGRAPH + {0xB8CE, 0x88D5}, //3658 #CJK UNIFIED IDEOGRAPH + {0xB8CF, 0x88D2}, //3659 #CJK UNIFIED IDEOGRAPH + {0xB8D0, 0x899C}, //3660 #CJK UNIFIED IDEOGRAPH + {0xB8D1, 0x89E3}, //3661 #CJK UNIFIED IDEOGRAPH + {0xB8D2, 0x8A6B}, //3662 #CJK UNIFIED IDEOGRAPH + {0xB8D3, 0x8A72}, //3663 #CJK UNIFIED IDEOGRAPH + {0xB8D4, 0x8A73}, //3664 #CJK UNIFIED IDEOGRAPH + {0xB8D5, 0x8A66}, //3665 #CJK UNIFIED IDEOGRAPH + {0xB8D6, 0x8A69}, //3666 #CJK UNIFIED IDEOGRAPH + {0xB8D7, 0x8A70}, //3667 #CJK UNIFIED IDEOGRAPH + {0xB8D8, 0x8A87}, //3668 #CJK UNIFIED IDEOGRAPH + {0xB8D9, 0x8A7C}, //3669 #CJK UNIFIED IDEOGRAPH + {0xB8DA, 0x8A63}, //3670 #CJK UNIFIED IDEOGRAPH + {0xB8DB, 0x8AA0}, //3671 #CJK UNIFIED IDEOGRAPH + {0xB8DC, 0x8A71}, //3672 #CJK UNIFIED IDEOGRAPH + {0xB8DD, 0x8A85}, //3673 #CJK UNIFIED IDEOGRAPH + {0xB8DE, 0x8A6D}, //3674 #CJK UNIFIED IDEOGRAPH + {0xB8DF, 0x8A62}, //3675 #CJK UNIFIED IDEOGRAPH + {0xB8E0, 0x8A6E}, //3676 #CJK UNIFIED IDEOGRAPH + {0xB8E1, 0x8A6C}, //3677 #CJK UNIFIED IDEOGRAPH + {0xB8E2, 0x8A79}, //3678 #CJK UNIFIED IDEOGRAPH + {0xB8E3, 0x8A7B}, //3679 #CJK UNIFIED IDEOGRAPH + {0xB8E4, 0x8A3E}, //3680 #CJK UNIFIED IDEOGRAPH + {0xB8E5, 0x8A68}, //3681 #CJK UNIFIED IDEOGRAPH + {0xB8E6, 0x8C62}, //3682 #CJK UNIFIED IDEOGRAPH + {0xB8E7, 0x8C8A}, //3683 #CJK UNIFIED IDEOGRAPH + {0xB8E8, 0x8C89}, //3684 #CJK UNIFIED IDEOGRAPH + {0xB8E9, 0x8CCA}, //3685 #CJK UNIFIED IDEOGRAPH + {0xB8EA, 0x8CC7}, //3686 #CJK UNIFIED IDEOGRAPH + {0xB8EB, 0x8CC8}, //3687 #CJK UNIFIED IDEOGRAPH + {0xB8EC, 0x8CC4}, //3688 #CJK UNIFIED IDEOGRAPH + {0xB8ED, 0x8CB2}, //3689 #CJK UNIFIED IDEOGRAPH + {0xB8EE, 0x8CC3}, //3690 #CJK UNIFIED IDEOGRAPH + {0xB8EF, 0x8CC2}, //3691 #CJK UNIFIED IDEOGRAPH + {0xB8F0, 0x8CC5}, //3692 #CJK UNIFIED IDEOGRAPH + {0xB8F1, 0x8DE1}, //3693 #CJK UNIFIED IDEOGRAPH + {0xB8F2, 0x8DDF}, //3694 #CJK UNIFIED IDEOGRAPH + {0xB8F3, 0x8DE8}, //3695 #CJK UNIFIED IDEOGRAPH + {0xB8F4, 0x8DEF}, //3696 #CJK UNIFIED IDEOGRAPH + {0xB8F5, 0x8DF3}, //3697 #CJK UNIFIED IDEOGRAPH + {0xB8F6, 0x8DFA}, //3698 #CJK UNIFIED IDEOGRAPH + {0xB8F7, 0x8DEA}, //3699 #CJK UNIFIED IDEOGRAPH + {0xB8F8, 0x8DE4}, //3700 #CJK UNIFIED IDEOGRAPH + {0xB8F9, 0x8DE6}, //3701 #CJK UNIFIED IDEOGRAPH + {0xB8FA, 0x8EB2}, //3702 #CJK UNIFIED IDEOGRAPH + {0xB8FB, 0x8F03}, //3703 #CJK UNIFIED IDEOGRAPH + {0xB8FC, 0x8F09}, //3704 #CJK UNIFIED IDEOGRAPH + {0xB8FD, 0x8EFE}, //3705 #CJK UNIFIED IDEOGRAPH + {0xB8FE, 0x8F0A}, //3706 #CJK UNIFIED IDEOGRAPH + {0xB940, 0x8F9F}, //3707 #CJK UNIFIED IDEOGRAPH + {0xB941, 0x8FB2}, //3708 #CJK UNIFIED IDEOGRAPH + {0xB942, 0x904B}, //3709 #CJK UNIFIED IDEOGRAPH + {0xB943, 0x904A}, //3710 #CJK UNIFIED IDEOGRAPH + {0xB944, 0x9053}, //3711 #CJK UNIFIED IDEOGRAPH + {0xB945, 0x9042}, //3712 #CJK UNIFIED IDEOGRAPH + {0xB946, 0x9054}, //3713 #CJK UNIFIED IDEOGRAPH + {0xB947, 0x903C}, //3714 #CJK UNIFIED IDEOGRAPH + {0xB948, 0x9055}, //3715 #CJK UNIFIED IDEOGRAPH + {0xB949, 0x9050}, //3716 #CJK UNIFIED IDEOGRAPH + {0xB94A, 0x9047}, //3717 #CJK UNIFIED IDEOGRAPH + {0xB94B, 0x904F}, //3718 #CJK UNIFIED IDEOGRAPH + {0xB94C, 0x904E}, //3719 #CJK UNIFIED IDEOGRAPH + {0xB94D, 0x904D}, //3720 #CJK UNIFIED IDEOGRAPH + {0xB94E, 0x9051}, //3721 #CJK UNIFIED IDEOGRAPH + {0xB94F, 0x903E}, //3722 #CJK UNIFIED IDEOGRAPH + {0xB950, 0x9041}, //3723 #CJK UNIFIED IDEOGRAPH + {0xB951, 0x9112}, //3724 #CJK UNIFIED IDEOGRAPH + {0xB952, 0x9117}, //3725 #CJK UNIFIED IDEOGRAPH + {0xB953, 0x916C}, //3726 #CJK UNIFIED IDEOGRAPH + {0xB954, 0x916A}, //3727 #CJK UNIFIED IDEOGRAPH + {0xB955, 0x9169}, //3728 #CJK UNIFIED IDEOGRAPH + {0xB956, 0x91C9}, //3729 #CJK UNIFIED IDEOGRAPH + {0xB957, 0x9237}, //3730 #CJK UNIFIED IDEOGRAPH + {0xB958, 0x9257}, //3731 #CJK UNIFIED IDEOGRAPH + {0xB959, 0x9238}, //3732 #CJK UNIFIED IDEOGRAPH + {0xB95A, 0x923D}, //3733 #CJK UNIFIED IDEOGRAPH + {0xB95B, 0x9240}, //3734 #CJK UNIFIED IDEOGRAPH + {0xB95C, 0x923E}, //3735 #CJK UNIFIED IDEOGRAPH + {0xB95D, 0x925B}, //3736 #CJK UNIFIED IDEOGRAPH + {0xB95E, 0x924B}, //3737 #CJK UNIFIED IDEOGRAPH + {0xB95F, 0x9264}, //3738 #CJK UNIFIED IDEOGRAPH + {0xB960, 0x9251}, //3739 #CJK UNIFIED IDEOGRAPH + {0xB961, 0x9234}, //3740 #CJK UNIFIED IDEOGRAPH + {0xB962, 0x9249}, //3741 #CJK UNIFIED IDEOGRAPH + {0xB963, 0x924D}, //3742 #CJK UNIFIED IDEOGRAPH + {0xB964, 0x9245}, //3743 #CJK UNIFIED IDEOGRAPH + {0xB965, 0x9239}, //3744 #CJK UNIFIED IDEOGRAPH + {0xB966, 0x923F}, //3745 #CJK UNIFIED IDEOGRAPH + {0xB967, 0x925A}, //3746 #CJK UNIFIED IDEOGRAPH + {0xB968, 0x9598}, //3747 #CJK UNIFIED IDEOGRAPH + {0xB969, 0x9698}, //3748 #CJK UNIFIED IDEOGRAPH + {0xB96A, 0x9694}, //3749 #CJK UNIFIED IDEOGRAPH + {0xB96B, 0x9695}, //3750 #CJK UNIFIED IDEOGRAPH + {0xB96C, 0x96CD}, //3751 #CJK UNIFIED IDEOGRAPH + {0xB96D, 0x96CB}, //3752 #CJK UNIFIED IDEOGRAPH + {0xB96E, 0x96C9}, //3753 #CJK UNIFIED IDEOGRAPH + {0xB96F, 0x96CA}, //3754 #CJK UNIFIED IDEOGRAPH + {0xB970, 0x96F7}, //3755 #CJK UNIFIED IDEOGRAPH + {0xB971, 0x96FB}, //3756 #CJK UNIFIED IDEOGRAPH + {0xB972, 0x96F9}, //3757 #CJK UNIFIED IDEOGRAPH + {0xB973, 0x96F6}, //3758 #CJK UNIFIED IDEOGRAPH + {0xB974, 0x9756}, //3759 #CJK UNIFIED IDEOGRAPH + {0xB975, 0x9774}, //3760 #CJK UNIFIED IDEOGRAPH + {0xB976, 0x9776}, //3761 #CJK UNIFIED IDEOGRAPH + {0xB977, 0x9810}, //3762 #CJK UNIFIED IDEOGRAPH + {0xB978, 0x9811}, //3763 #CJK UNIFIED IDEOGRAPH + {0xB979, 0x9813}, //3764 #CJK UNIFIED IDEOGRAPH + {0xB97A, 0x980A}, //3765 #CJK UNIFIED IDEOGRAPH + {0xB97B, 0x9812}, //3766 #CJK UNIFIED IDEOGRAPH + {0xB97C, 0x980C}, //3767 #CJK UNIFIED IDEOGRAPH + {0xB97D, 0x98FC}, //3768 #CJK UNIFIED IDEOGRAPH + {0xB97E, 0x98F4}, //3769 #CJK UNIFIED IDEOGRAPH + {0xB9A1, 0x98FD}, //3770 #CJK UNIFIED IDEOGRAPH + {0xB9A2, 0x98FE}, //3771 #CJK UNIFIED IDEOGRAPH + {0xB9A3, 0x99B3}, //3772 #CJK UNIFIED IDEOGRAPH + {0xB9A4, 0x99B1}, //3773 #CJK UNIFIED IDEOGRAPH + {0xB9A5, 0x99B4}, //3774 #CJK UNIFIED IDEOGRAPH + {0xB9A6, 0x9AE1}, //3775 #CJK UNIFIED IDEOGRAPH + {0xB9A7, 0x9CE9}, //3776 #CJK UNIFIED IDEOGRAPH + {0xB9A8, 0x9E82}, //3777 #CJK UNIFIED IDEOGRAPH + {0xB9A9, 0x9F0E}, //3778 #CJK UNIFIED IDEOGRAPH + {0xB9AA, 0x9F13}, //3779 #CJK UNIFIED IDEOGRAPH + {0xB9AB, 0x9F20}, //3780 #CJK UNIFIED IDEOGRAPH + {0xB9AC, 0x50E7}, //3781 #CJK UNIFIED IDEOGRAPH + {0xB9AD, 0x50EE}, //3782 #CJK UNIFIED IDEOGRAPH + {0xB9AE, 0x50E5}, //3783 #CJK UNIFIED IDEOGRAPH + {0xB9AF, 0x50D6}, //3784 #CJK UNIFIED IDEOGRAPH + {0xB9B0, 0x50ED}, //3785 #CJK UNIFIED IDEOGRAPH + {0xB9B1, 0x50DA}, //3786 #CJK UNIFIED IDEOGRAPH + {0xB9B2, 0x50D5}, //3787 #CJK UNIFIED IDEOGRAPH + {0xB9B3, 0x50CF}, //3788 #CJK UNIFIED IDEOGRAPH + {0xB9B4, 0x50D1}, //3789 #CJK UNIFIED IDEOGRAPH + {0xB9B5, 0x50F1}, //3790 #CJK UNIFIED IDEOGRAPH + {0xB9B6, 0x50CE}, //3791 #CJK UNIFIED IDEOGRAPH + {0xB9B7, 0x50E9}, //3792 #CJK UNIFIED IDEOGRAPH + {0xB9B8, 0x5162}, //3793 #CJK UNIFIED IDEOGRAPH + {0xB9B9, 0x51F3}, //3794 #CJK UNIFIED IDEOGRAPH + {0xB9BA, 0x5283}, //3795 #CJK UNIFIED IDEOGRAPH + {0xB9BB, 0x5282}, //3796 #CJK UNIFIED IDEOGRAPH + {0xB9BC, 0x5331}, //3797 #CJK UNIFIED IDEOGRAPH + {0xB9BD, 0x53AD}, //3798 #CJK UNIFIED IDEOGRAPH + {0xB9BE, 0x55FE}, //3799 #CJK UNIFIED IDEOGRAPH + {0xB9BF, 0x5600}, //3800 #CJK UNIFIED IDEOGRAPH + {0xB9C0, 0x561B}, //3801 #CJK UNIFIED IDEOGRAPH + {0xB9C1, 0x5617}, //3802 #CJK UNIFIED IDEOGRAPH + {0xB9C2, 0x55FD}, //3803 #CJK UNIFIED IDEOGRAPH + {0xB9C3, 0x5614}, //3804 #CJK UNIFIED IDEOGRAPH + {0xB9C4, 0x5606}, //3805 #CJK UNIFIED IDEOGRAPH + {0xB9C5, 0x5609}, //3806 #CJK UNIFIED IDEOGRAPH + {0xB9C6, 0x560D}, //3807 #CJK UNIFIED IDEOGRAPH + {0xB9C7, 0x560E}, //3808 #CJK UNIFIED IDEOGRAPH + {0xB9C8, 0x55F7}, //3809 #CJK UNIFIED IDEOGRAPH + {0xB9C9, 0x5616}, //3810 #CJK UNIFIED IDEOGRAPH + {0xB9CA, 0x561F}, //3811 #CJK UNIFIED IDEOGRAPH + {0xB9CB, 0x5608}, //3812 #CJK UNIFIED IDEOGRAPH + {0xB9CC, 0x5610}, //3813 #CJK UNIFIED IDEOGRAPH + {0xB9CD, 0x55F6}, //3814 #CJK UNIFIED IDEOGRAPH + {0xB9CE, 0x5718}, //3815 #CJK UNIFIED IDEOGRAPH + {0xB9CF, 0x5716}, //3816 #CJK UNIFIED IDEOGRAPH + {0xB9D0, 0x5875}, //3817 #CJK UNIFIED IDEOGRAPH + {0xB9D1, 0x587E}, //3818 #CJK UNIFIED IDEOGRAPH + {0xB9D2, 0x5883}, //3819 #CJK UNIFIED IDEOGRAPH + {0xB9D3, 0x5893}, //3820 #CJK UNIFIED IDEOGRAPH + {0xB9D4, 0x588A}, //3821 #CJK UNIFIED IDEOGRAPH + {0xB9D5, 0x5879}, //3822 #CJK UNIFIED IDEOGRAPH + {0xB9D6, 0x5885}, //3823 #CJK UNIFIED IDEOGRAPH + {0xB9D7, 0x587D}, //3824 #CJK UNIFIED IDEOGRAPH + {0xB9D8, 0x58FD}, //3825 #CJK UNIFIED IDEOGRAPH + {0xB9D9, 0x5925}, //3826 #CJK UNIFIED IDEOGRAPH + {0xB9DA, 0x5922}, //3827 #CJK UNIFIED IDEOGRAPH + {0xB9DB, 0x5924}, //3828 #CJK UNIFIED IDEOGRAPH + {0xB9DC, 0x596A}, //3829 #CJK UNIFIED IDEOGRAPH + {0xB9DD, 0x5969}, //3830 #CJK UNIFIED IDEOGRAPH + {0xB9DE, 0x5AE1}, //3831 #CJK UNIFIED IDEOGRAPH + {0xB9DF, 0x5AE6}, //3832 #CJK UNIFIED IDEOGRAPH + {0xB9E0, 0x5AE9}, //3833 #CJK UNIFIED IDEOGRAPH + {0xB9E1, 0x5AD7}, //3834 #CJK UNIFIED IDEOGRAPH + {0xB9E2, 0x5AD6}, //3835 #CJK UNIFIED IDEOGRAPH + {0xB9E3, 0x5AD8}, //3836 #CJK UNIFIED IDEOGRAPH + {0xB9E4, 0x5AE3}, //3837 #CJK UNIFIED IDEOGRAPH + {0xB9E5, 0x5B75}, //3838 #CJK UNIFIED IDEOGRAPH + {0xB9E6, 0x5BDE}, //3839 #CJK UNIFIED IDEOGRAPH + {0xB9E7, 0x5BE7}, //3840 #CJK UNIFIED IDEOGRAPH + {0xB9E8, 0x5BE1}, //3841 #CJK UNIFIED IDEOGRAPH + {0xB9E9, 0x5BE5}, //3842 #CJK UNIFIED IDEOGRAPH + {0xB9EA, 0x5BE6}, //3843 #CJK UNIFIED IDEOGRAPH + {0xB9EB, 0x5BE8}, //3844 #CJK UNIFIED IDEOGRAPH + {0xB9EC, 0x5BE2}, //3845 #CJK UNIFIED IDEOGRAPH + {0xB9ED, 0x5BE4}, //3846 #CJK UNIFIED IDEOGRAPH + {0xB9EE, 0x5BDF}, //3847 #CJK UNIFIED IDEOGRAPH + {0xB9EF, 0x5C0D}, //3848 #CJK UNIFIED IDEOGRAPH + {0xB9F0, 0x5C62}, //3849 #CJK UNIFIED IDEOGRAPH + {0xB9F1, 0x5D84}, //3850 #CJK UNIFIED IDEOGRAPH + {0xB9F2, 0x5D87}, //3851 #CJK UNIFIED IDEOGRAPH + {0xB9F3, 0x5E5B}, //3852 #CJK UNIFIED IDEOGRAPH + {0xB9F4, 0x5E63}, //3853 #CJK UNIFIED IDEOGRAPH + {0xB9F5, 0x5E55}, //3854 #CJK UNIFIED IDEOGRAPH + {0xB9F6, 0x5E57}, //3855 #CJK UNIFIED IDEOGRAPH + {0xB9F7, 0x5E54}, //3856 #CJK UNIFIED IDEOGRAPH + {0xB9F8, 0x5ED3}, //3857 #CJK UNIFIED IDEOGRAPH + {0xB9F9, 0x5ED6}, //3858 #CJK UNIFIED IDEOGRAPH + {0xB9FA, 0x5F0A}, //3859 #CJK UNIFIED IDEOGRAPH + {0xB9FB, 0x5F46}, //3860 #CJK UNIFIED IDEOGRAPH + {0xB9FC, 0x5F70}, //3861 #CJK UNIFIED IDEOGRAPH + {0xB9FD, 0x5FB9}, //3862 #CJK UNIFIED IDEOGRAPH + {0xB9FE, 0x6147}, //3863 #CJK UNIFIED IDEOGRAPH + {0xBA40, 0x613F}, //3864 #CJK UNIFIED IDEOGRAPH + {0xBA41, 0x614B}, //3865 #CJK UNIFIED IDEOGRAPH + {0xBA42, 0x6177}, //3866 #CJK UNIFIED IDEOGRAPH + {0xBA43, 0x6162}, //3867 #CJK UNIFIED IDEOGRAPH + {0xBA44, 0x6163}, //3868 #CJK UNIFIED IDEOGRAPH + {0xBA45, 0x615F}, //3869 #CJK UNIFIED IDEOGRAPH + {0xBA46, 0x615A}, //3870 #CJK UNIFIED IDEOGRAPH + {0xBA47, 0x6158}, //3871 #CJK UNIFIED IDEOGRAPH + {0xBA48, 0x6175}, //3872 #CJK UNIFIED IDEOGRAPH + {0xBA49, 0x622A}, //3873 #CJK UNIFIED IDEOGRAPH + {0xBA4A, 0x6487}, //3874 #CJK UNIFIED IDEOGRAPH + {0xBA4B, 0x6458}, //3875 #CJK UNIFIED IDEOGRAPH + {0xBA4C, 0x6454}, //3876 #CJK UNIFIED IDEOGRAPH + {0xBA4D, 0x64A4}, //3877 #CJK UNIFIED IDEOGRAPH + {0xBA4E, 0x6478}, //3878 #CJK UNIFIED IDEOGRAPH + {0xBA4F, 0x645F}, //3879 #CJK UNIFIED IDEOGRAPH + {0xBA50, 0x647A}, //3880 #CJK UNIFIED IDEOGRAPH + {0xBA51, 0x6451}, //3881 #CJK UNIFIED IDEOGRAPH + {0xBA52, 0x6467}, //3882 #CJK UNIFIED IDEOGRAPH + {0xBA53, 0x6434}, //3883 #CJK UNIFIED IDEOGRAPH + {0xBA54, 0x646D}, //3884 #CJK UNIFIED IDEOGRAPH + {0xBA55, 0x647B}, //3885 #CJK UNIFIED IDEOGRAPH + {0xBA56, 0x6572}, //3886 #CJK UNIFIED IDEOGRAPH + {0xBA57, 0x65A1}, //3887 #CJK UNIFIED IDEOGRAPH + {0xBA58, 0x65D7}, //3888 #CJK UNIFIED IDEOGRAPH + {0xBA59, 0x65D6}, //3889 #CJK UNIFIED IDEOGRAPH + {0xBA5A, 0x66A2}, //3890 #CJK UNIFIED IDEOGRAPH + {0xBA5B, 0x66A8}, //3891 #CJK UNIFIED IDEOGRAPH + {0xBA5C, 0x669D}, //3892 #CJK UNIFIED IDEOGRAPH + {0xBA5D, 0x699C}, //3893 #CJK UNIFIED IDEOGRAPH + {0xBA5E, 0x69A8}, //3894 #CJK UNIFIED IDEOGRAPH + {0xBA5F, 0x6995}, //3895 #CJK UNIFIED IDEOGRAPH + {0xBA60, 0x69C1}, //3896 #CJK UNIFIED IDEOGRAPH + {0xBA61, 0x69AE}, //3897 #CJK UNIFIED IDEOGRAPH + {0xBA62, 0x69D3}, //3898 #CJK UNIFIED IDEOGRAPH + {0xBA63, 0x69CB}, //3899 #CJK UNIFIED IDEOGRAPH + {0xBA64, 0x699B}, //3900 #CJK UNIFIED IDEOGRAPH + {0xBA65, 0x69B7}, //3901 #CJK UNIFIED IDEOGRAPH + {0xBA66, 0x69BB}, //3902 #CJK UNIFIED IDEOGRAPH + {0xBA67, 0x69AB}, //3903 #CJK UNIFIED IDEOGRAPH + {0xBA68, 0x69B4}, //3904 #CJK UNIFIED IDEOGRAPH + {0xBA69, 0x69D0}, //3905 #CJK UNIFIED IDEOGRAPH + {0xBA6A, 0x69CD}, //3906 #CJK UNIFIED IDEOGRAPH + {0xBA6B, 0x69AD}, //3907 #CJK UNIFIED IDEOGRAPH + {0xBA6C, 0x69CC}, //3908 #CJK UNIFIED IDEOGRAPH + {0xBA6D, 0x69A6}, //3909 #CJK UNIFIED IDEOGRAPH + {0xBA6E, 0x69C3}, //3910 #CJK UNIFIED IDEOGRAPH + {0xBA6F, 0x69A3}, //3911 #CJK UNIFIED IDEOGRAPH + {0xBA70, 0x6B49}, //3912 #CJK UNIFIED IDEOGRAPH + {0xBA71, 0x6B4C}, //3913 #CJK UNIFIED IDEOGRAPH + {0xBA72, 0x6C33}, //3914 #CJK UNIFIED IDEOGRAPH + {0xBA73, 0x6F33}, //3915 #CJK UNIFIED IDEOGRAPH + {0xBA74, 0x6F14}, //3916 #CJK UNIFIED IDEOGRAPH + {0xBA75, 0x6EFE}, //3917 #CJK UNIFIED IDEOGRAPH + {0xBA76, 0x6F13}, //3918 #CJK UNIFIED IDEOGRAPH + {0xBA77, 0x6EF4}, //3919 #CJK UNIFIED IDEOGRAPH + {0xBA78, 0x6F29}, //3920 #CJK UNIFIED IDEOGRAPH + {0xBA79, 0x6F3E}, //3921 #CJK UNIFIED IDEOGRAPH + {0xBA7A, 0x6F20}, //3922 #CJK UNIFIED IDEOGRAPH + {0xBA7B, 0x6F2C}, //3923 #CJK UNIFIED IDEOGRAPH + {0xBA7C, 0x6F0F}, //3924 #CJK UNIFIED IDEOGRAPH + {0xBA7D, 0x6F02}, //3925 #CJK UNIFIED IDEOGRAPH + {0xBA7E, 0x6F22}, //3926 #CJK UNIFIED IDEOGRAPH + {0xBAA1, 0x6EFF}, //3927 #CJK UNIFIED IDEOGRAPH + {0xBAA2, 0x6EEF}, //3928 #CJK UNIFIED IDEOGRAPH + {0xBAA3, 0x6F06}, //3929 #CJK UNIFIED IDEOGRAPH + {0xBAA4, 0x6F31}, //3930 #CJK UNIFIED IDEOGRAPH + {0xBAA5, 0x6F38}, //3931 #CJK UNIFIED IDEOGRAPH + {0xBAA6, 0x6F32}, //3932 #CJK UNIFIED IDEOGRAPH + {0xBAA7, 0x6F23}, //3933 #CJK UNIFIED IDEOGRAPH + {0xBAA8, 0x6F15}, //3934 #CJK UNIFIED IDEOGRAPH + {0xBAA9, 0x6F2B}, //3935 #CJK UNIFIED IDEOGRAPH + {0xBAAA, 0x6F2F}, //3936 #CJK UNIFIED IDEOGRAPH + {0xBAAB, 0x6F88}, //3937 #CJK UNIFIED IDEOGRAPH + {0xBAAC, 0x6F2A}, //3938 #CJK UNIFIED IDEOGRAPH + {0xBAAD, 0x6EEC}, //3939 #CJK UNIFIED IDEOGRAPH + {0xBAAE, 0x6F01}, //3940 #CJK UNIFIED IDEOGRAPH + {0xBAAF, 0x6EF2}, //3941 #CJK UNIFIED IDEOGRAPH + {0xBAB0, 0x6ECC}, //3942 #CJK UNIFIED IDEOGRAPH + {0xBAB1, 0x6EF7}, //3943 #CJK UNIFIED IDEOGRAPH + {0xBAB2, 0x7194}, //3944 #CJK UNIFIED IDEOGRAPH + {0xBAB3, 0x7199}, //3945 #CJK UNIFIED IDEOGRAPH + {0xBAB4, 0x717D}, //3946 #CJK UNIFIED IDEOGRAPH + {0xBAB5, 0x718A}, //3947 #CJK UNIFIED IDEOGRAPH + {0xBAB6, 0x7184}, //3948 #CJK UNIFIED IDEOGRAPH + {0xBAB7, 0x7192}, //3949 #CJK UNIFIED IDEOGRAPH + {0xBAB8, 0x723E}, //3950 #CJK UNIFIED IDEOGRAPH + {0xBAB9, 0x7292}, //3951 #CJK UNIFIED IDEOGRAPH + {0xBABA, 0x7296}, //3952 #CJK UNIFIED IDEOGRAPH + {0xBABB, 0x7344}, //3953 #CJK UNIFIED IDEOGRAPH + {0xBABC, 0x7350}, //3954 #CJK UNIFIED IDEOGRAPH + {0xBABD, 0x7464}, //3955 #CJK UNIFIED IDEOGRAPH + {0xBABE, 0x7463}, //3956 #CJK UNIFIED IDEOGRAPH + {0xBABF, 0x746A}, //3957 #CJK UNIFIED IDEOGRAPH + {0xBAC0, 0x7470}, //3958 #CJK UNIFIED IDEOGRAPH + {0xBAC1, 0x746D}, //3959 #CJK UNIFIED IDEOGRAPH + {0xBAC2, 0x7504}, //3960 #CJK UNIFIED IDEOGRAPH + {0xBAC3, 0x7591}, //3961 #CJK UNIFIED IDEOGRAPH + {0xBAC4, 0x7627}, //3962 #CJK UNIFIED IDEOGRAPH + {0xBAC5, 0x760D}, //3963 #CJK UNIFIED IDEOGRAPH + {0xBAC6, 0x760B}, //3964 #CJK UNIFIED IDEOGRAPH + {0xBAC7, 0x7609}, //3965 #CJK UNIFIED IDEOGRAPH + {0xBAC8, 0x7613}, //3966 #CJK UNIFIED IDEOGRAPH + {0xBAC9, 0x76E1}, //3967 #CJK UNIFIED IDEOGRAPH + {0xBACA, 0x76E3}, //3968 #CJK UNIFIED IDEOGRAPH + {0xBACB, 0x7784}, //3969 #CJK UNIFIED IDEOGRAPH + {0xBACC, 0x777D}, //3970 #CJK UNIFIED IDEOGRAPH + {0xBACD, 0x777F}, //3971 #CJK UNIFIED IDEOGRAPH + {0xBACE, 0x7761}, //3972 #CJK UNIFIED IDEOGRAPH + {0xBACF, 0x78C1}, //3973 #CJK UNIFIED IDEOGRAPH + {0xBAD0, 0x789F}, //3974 #CJK UNIFIED IDEOGRAPH + {0xBAD1, 0x78A7}, //3975 #CJK UNIFIED IDEOGRAPH + {0xBAD2, 0x78B3}, //3976 #CJK UNIFIED IDEOGRAPH + {0xBAD3, 0x78A9}, //3977 #CJK UNIFIED IDEOGRAPH + {0xBAD4, 0x78A3}, //3978 #CJK UNIFIED IDEOGRAPH + {0xBAD5, 0x798E}, //3979 #CJK UNIFIED IDEOGRAPH + {0xBAD6, 0x798F}, //3980 #CJK UNIFIED IDEOGRAPH + {0xBAD7, 0x798D}, //3981 #CJK UNIFIED IDEOGRAPH + {0xBAD8, 0x7A2E}, //3982 #CJK UNIFIED IDEOGRAPH + {0xBAD9, 0x7A31}, //3983 #CJK UNIFIED IDEOGRAPH + {0xBADA, 0x7AAA}, //3984 #CJK UNIFIED IDEOGRAPH + {0xBADB, 0x7AA9}, //3985 #CJK UNIFIED IDEOGRAPH + {0xBADC, 0x7AED}, //3986 #CJK UNIFIED IDEOGRAPH + {0xBADD, 0x7AEF}, //3987 #CJK UNIFIED IDEOGRAPH + {0xBADE, 0x7BA1}, //3988 #CJK UNIFIED IDEOGRAPH + {0xBADF, 0x7B95}, //3989 #CJK UNIFIED IDEOGRAPH + {0xBAE0, 0x7B8B}, //3990 #CJK UNIFIED IDEOGRAPH + {0xBAE1, 0x7B75}, //3991 #CJK UNIFIED IDEOGRAPH + {0xBAE2, 0x7B97}, //3992 #CJK UNIFIED IDEOGRAPH + {0xBAE3, 0x7B9D}, //3993 #CJK UNIFIED IDEOGRAPH + {0xBAE4, 0x7B94}, //3994 #CJK UNIFIED IDEOGRAPH + {0xBAE5, 0x7B8F}, //3995 #CJK UNIFIED IDEOGRAPH + {0xBAE6, 0x7BB8}, //3996 #CJK UNIFIED IDEOGRAPH + {0xBAE7, 0x7B87}, //3997 #CJK UNIFIED IDEOGRAPH + {0xBAE8, 0x7B84}, //3998 #CJK UNIFIED IDEOGRAPH + {0xBAE9, 0x7CB9}, //3999 #CJK UNIFIED IDEOGRAPH + {0xBAEA, 0x7CBD}, //4000 #CJK UNIFIED IDEOGRAPH + {0xBAEB, 0x7CBE}, //4001 #CJK UNIFIED IDEOGRAPH + {0xBAEC, 0x7DBB}, //4002 #CJK UNIFIED IDEOGRAPH + {0xBAED, 0x7DB0}, //4003 #CJK UNIFIED IDEOGRAPH + {0xBAEE, 0x7D9C}, //4004 #CJK UNIFIED IDEOGRAPH + {0xBAEF, 0x7DBD}, //4005 #CJK UNIFIED IDEOGRAPH + {0xBAF0, 0x7DBE}, //4006 #CJK UNIFIED IDEOGRAPH + {0xBAF1, 0x7DA0}, //4007 #CJK UNIFIED IDEOGRAPH + {0xBAF2, 0x7DCA}, //4008 #CJK UNIFIED IDEOGRAPH + {0xBAF3, 0x7DB4}, //4009 #CJK UNIFIED IDEOGRAPH + {0xBAF4, 0x7DB2}, //4010 #CJK UNIFIED IDEOGRAPH + {0xBAF5, 0x7DB1}, //4011 #CJK UNIFIED IDEOGRAPH + {0xBAF6, 0x7DBA}, //4012 #CJK UNIFIED IDEOGRAPH + {0xBAF7, 0x7DA2}, //4013 #CJK UNIFIED IDEOGRAPH + {0xBAF8, 0x7DBF}, //4014 #CJK UNIFIED IDEOGRAPH + {0xBAF9, 0x7DB5}, //4015 #CJK UNIFIED IDEOGRAPH + {0xBAFA, 0x7DB8}, //4016 #CJK UNIFIED IDEOGRAPH + {0xBAFB, 0x7DAD}, //4017 #CJK UNIFIED IDEOGRAPH + {0xBAFC, 0x7DD2}, //4018 #CJK UNIFIED IDEOGRAPH + {0xBAFD, 0x7DC7}, //4019 #CJK UNIFIED IDEOGRAPH + {0xBAFE, 0x7DAC}, //4020 #CJK UNIFIED IDEOGRAPH + {0xBB40, 0x7F70}, //4021 #CJK UNIFIED IDEOGRAPH + {0xBB41, 0x7FE0}, //4022 #CJK UNIFIED IDEOGRAPH + {0xBB42, 0x7FE1}, //4023 #CJK UNIFIED IDEOGRAPH + {0xBB43, 0x7FDF}, //4024 #CJK UNIFIED IDEOGRAPH + {0xBB44, 0x805E}, //4025 #CJK UNIFIED IDEOGRAPH + {0xBB45, 0x805A}, //4026 #CJK UNIFIED IDEOGRAPH + {0xBB46, 0x8087}, //4027 #CJK UNIFIED IDEOGRAPH + {0xBB47, 0x8150}, //4028 #CJK UNIFIED IDEOGRAPH + {0xBB48, 0x8180}, //4029 #CJK UNIFIED IDEOGRAPH + {0xBB49, 0x818F}, //4030 #CJK UNIFIED IDEOGRAPH + {0xBB4A, 0x8188}, //4031 #CJK UNIFIED IDEOGRAPH + {0xBB4B, 0x818A}, //4032 #CJK UNIFIED IDEOGRAPH + {0xBB4C, 0x817F}, //4033 #CJK UNIFIED IDEOGRAPH + {0xBB4D, 0x8182}, //4034 #CJK UNIFIED IDEOGRAPH + {0xBB4E, 0x81E7}, //4035 #CJK UNIFIED IDEOGRAPH + {0xBB4F, 0x81FA}, //4036 #CJK UNIFIED IDEOGRAPH + {0xBB50, 0x8207}, //4037 #CJK UNIFIED IDEOGRAPH + {0xBB51, 0x8214}, //4038 #CJK UNIFIED IDEOGRAPH + {0xBB52, 0x821E}, //4039 #CJK UNIFIED IDEOGRAPH + {0xBB53, 0x824B}, //4040 #CJK UNIFIED IDEOGRAPH + {0xBB54, 0x84C9}, //4041 #CJK UNIFIED IDEOGRAPH + {0xBB55, 0x84BF}, //4042 #CJK UNIFIED IDEOGRAPH + {0xBB56, 0x84C6}, //4043 #CJK UNIFIED IDEOGRAPH + {0xBB57, 0x84C4}, //4044 #CJK UNIFIED IDEOGRAPH + {0xBB58, 0x8499}, //4045 #CJK UNIFIED IDEOGRAPH + {0xBB59, 0x849E}, //4046 #CJK UNIFIED IDEOGRAPH + {0xBB5A, 0x84B2}, //4047 #CJK UNIFIED IDEOGRAPH + {0xBB5B, 0x849C}, //4048 #CJK UNIFIED IDEOGRAPH + {0xBB5C, 0x84CB}, //4049 #CJK UNIFIED IDEOGRAPH + {0xBB5D, 0x84B8}, //4050 #CJK UNIFIED IDEOGRAPH + {0xBB5E, 0x84C0}, //4051 #CJK UNIFIED IDEOGRAPH + {0xBB5F, 0x84D3}, //4052 #CJK UNIFIED IDEOGRAPH + {0xBB60, 0x8490}, //4053 #CJK UNIFIED IDEOGRAPH + {0xBB61, 0x84BC}, //4054 #CJK UNIFIED IDEOGRAPH + {0xBB62, 0x84D1}, //4055 #CJK UNIFIED IDEOGRAPH + {0xBB63, 0x84CA}, //4056 #CJK UNIFIED IDEOGRAPH + {0xBB64, 0x873F}, //4057 #CJK UNIFIED IDEOGRAPH + {0xBB65, 0x871C}, //4058 #CJK UNIFIED IDEOGRAPH + {0xBB66, 0x873B}, //4059 #CJK UNIFIED IDEOGRAPH + {0xBB67, 0x8722}, //4060 #CJK UNIFIED IDEOGRAPH + {0xBB68, 0x8725}, //4061 #CJK UNIFIED IDEOGRAPH + {0xBB69, 0x8734}, //4062 #CJK UNIFIED IDEOGRAPH + {0xBB6A, 0x8718}, //4063 #CJK UNIFIED IDEOGRAPH + {0xBB6B, 0x8755}, //4064 #CJK UNIFIED IDEOGRAPH + {0xBB6C, 0x8737}, //4065 #CJK UNIFIED IDEOGRAPH + {0xBB6D, 0x8729}, //4066 #CJK UNIFIED IDEOGRAPH + {0xBB6E, 0x88F3}, //4067 #CJK UNIFIED IDEOGRAPH + {0xBB6F, 0x8902}, //4068 #CJK UNIFIED IDEOGRAPH + {0xBB70, 0x88F4}, //4069 #CJK UNIFIED IDEOGRAPH + {0xBB71, 0x88F9}, //4070 #CJK UNIFIED IDEOGRAPH + {0xBB72, 0x88F8}, //4071 #CJK UNIFIED IDEOGRAPH + {0xBB73, 0x88FD}, //4072 #CJK UNIFIED IDEOGRAPH + {0xBB74, 0x88E8}, //4073 #CJK UNIFIED IDEOGRAPH + {0xBB75, 0x891A}, //4074 #CJK UNIFIED IDEOGRAPH + {0xBB76, 0x88EF}, //4075 #CJK UNIFIED IDEOGRAPH + {0xBB77, 0x8AA6}, //4076 #CJK UNIFIED IDEOGRAPH + {0xBB78, 0x8A8C}, //4077 #CJK UNIFIED IDEOGRAPH + {0xBB79, 0x8A9E}, //4078 #CJK UNIFIED IDEOGRAPH + {0xBB7A, 0x8AA3}, //4079 #CJK UNIFIED IDEOGRAPH + {0xBB7B, 0x8A8D}, //4080 #CJK UNIFIED IDEOGRAPH + {0xBB7C, 0x8AA1}, //4081 #CJK UNIFIED IDEOGRAPH + {0xBB7D, 0x8A93}, //4082 #CJK UNIFIED IDEOGRAPH + {0xBB7E, 0x8AA4}, //4083 #CJK UNIFIED IDEOGRAPH + {0xBBA1, 0x8AAA}, //4084 #CJK UNIFIED IDEOGRAPH + {0xBBA2, 0x8AA5}, //4085 #CJK UNIFIED IDEOGRAPH + {0xBBA3, 0x8AA8}, //4086 #CJK UNIFIED IDEOGRAPH + {0xBBA4, 0x8A98}, //4087 #CJK UNIFIED IDEOGRAPH + {0xBBA5, 0x8A91}, //4088 #CJK UNIFIED IDEOGRAPH + {0xBBA6, 0x8A9A}, //4089 #CJK UNIFIED IDEOGRAPH + {0xBBA7, 0x8AA7}, //4090 #CJK UNIFIED IDEOGRAPH + {0xBBA8, 0x8C6A}, //4091 #CJK UNIFIED IDEOGRAPH + {0xBBA9, 0x8C8D}, //4092 #CJK UNIFIED IDEOGRAPH + {0xBBAA, 0x8C8C}, //4093 #CJK UNIFIED IDEOGRAPH + {0xBBAB, 0x8CD3}, //4094 #CJK UNIFIED IDEOGRAPH + {0xBBAC, 0x8CD1}, //4095 #CJK UNIFIED IDEOGRAPH + {0xBBAD, 0x8CD2}, //4096 #CJK UNIFIED IDEOGRAPH + {0xBBAE, 0x8D6B}, //4097 #CJK UNIFIED IDEOGRAPH + {0xBBAF, 0x8D99}, //4098 #CJK UNIFIED IDEOGRAPH + {0xBBB0, 0x8D95}, //4099 #CJK UNIFIED IDEOGRAPH + {0xBBB1, 0x8DFC}, //4100 #CJK UNIFIED IDEOGRAPH + {0xBBB2, 0x8F14}, //4101 #CJK UNIFIED IDEOGRAPH + {0xBBB3, 0x8F12}, //4102 #CJK UNIFIED IDEOGRAPH + {0xBBB4, 0x8F15}, //4103 #CJK UNIFIED IDEOGRAPH + {0xBBB5, 0x8F13}, //4104 #CJK UNIFIED IDEOGRAPH + {0xBBB6, 0x8FA3}, //4105 #CJK UNIFIED IDEOGRAPH + {0xBBB7, 0x9060}, //4106 #CJK UNIFIED IDEOGRAPH + {0xBBB8, 0x9058}, //4107 #CJK UNIFIED IDEOGRAPH + {0xBBB9, 0x905C}, //4108 #CJK UNIFIED IDEOGRAPH + {0xBBBA, 0x9063}, //4109 #CJK UNIFIED IDEOGRAPH + {0xBBBB, 0x9059}, //4110 #CJK UNIFIED IDEOGRAPH + {0xBBBC, 0x905E}, //4111 #CJK UNIFIED IDEOGRAPH + {0xBBBD, 0x9062}, //4112 #CJK UNIFIED IDEOGRAPH + {0xBBBE, 0x905D}, //4113 #CJK UNIFIED IDEOGRAPH + {0xBBBF, 0x905B}, //4114 #CJK UNIFIED IDEOGRAPH + {0xBBC0, 0x9119}, //4115 #CJK UNIFIED IDEOGRAPH + {0xBBC1, 0x9118}, //4116 #CJK UNIFIED IDEOGRAPH + {0xBBC2, 0x911E}, //4117 #CJK UNIFIED IDEOGRAPH + {0xBBC3, 0x9175}, //4118 #CJK UNIFIED IDEOGRAPH + {0xBBC4, 0x9178}, //4119 #CJK UNIFIED IDEOGRAPH + {0xBBC5, 0x9177}, //4120 #CJK UNIFIED IDEOGRAPH + {0xBBC6, 0x9174}, //4121 #CJK UNIFIED IDEOGRAPH + {0xBBC7, 0x9278}, //4122 #CJK UNIFIED IDEOGRAPH + {0xBBC8, 0x9280}, //4123 #CJK UNIFIED IDEOGRAPH + {0xBBC9, 0x9285}, //4124 #CJK UNIFIED IDEOGRAPH + {0xBBCA, 0x9298}, //4125 #CJK UNIFIED IDEOGRAPH + {0xBBCB, 0x9296}, //4126 #CJK UNIFIED IDEOGRAPH + {0xBBCC, 0x927B}, //4127 #CJK UNIFIED IDEOGRAPH + {0xBBCD, 0x9293}, //4128 #CJK UNIFIED IDEOGRAPH + {0xBBCE, 0x929C}, //4129 #CJK UNIFIED IDEOGRAPH + {0xBBCF, 0x92A8}, //4130 #CJK UNIFIED IDEOGRAPH + {0xBBD0, 0x927C}, //4131 #CJK UNIFIED IDEOGRAPH + {0xBBD1, 0x9291}, //4132 #CJK UNIFIED IDEOGRAPH + {0xBBD2, 0x95A1}, //4133 #CJK UNIFIED IDEOGRAPH + {0xBBD3, 0x95A8}, //4134 #CJK UNIFIED IDEOGRAPH + {0xBBD4, 0x95A9}, //4135 #CJK UNIFIED IDEOGRAPH + {0xBBD5, 0x95A3}, //4136 #CJK UNIFIED IDEOGRAPH + {0xBBD6, 0x95A5}, //4137 #CJK UNIFIED IDEOGRAPH + {0xBBD7, 0x95A4}, //4138 #CJK UNIFIED IDEOGRAPH + {0xBBD8, 0x9699}, //4139 #CJK UNIFIED IDEOGRAPH + {0xBBD9, 0x969C}, //4140 #CJK UNIFIED IDEOGRAPH + {0xBBDA, 0x969B}, //4141 #CJK UNIFIED IDEOGRAPH + {0xBBDB, 0x96CC}, //4142 #CJK UNIFIED IDEOGRAPH + {0xBBDC, 0x96D2}, //4143 #CJK UNIFIED IDEOGRAPH + {0xBBDD, 0x9700}, //4144 #CJK UNIFIED IDEOGRAPH + {0xBBDE, 0x977C}, //4145 #CJK UNIFIED IDEOGRAPH + {0xBBDF, 0x9785}, //4146 #CJK UNIFIED IDEOGRAPH + {0xBBE0, 0x97F6}, //4147 #CJK UNIFIED IDEOGRAPH + {0xBBE1, 0x9817}, //4148 #CJK UNIFIED IDEOGRAPH + {0xBBE2, 0x9818}, //4149 #CJK UNIFIED IDEOGRAPH + {0xBBE3, 0x98AF}, //4150 #CJK UNIFIED IDEOGRAPH + {0xBBE4, 0x98B1}, //4151 #CJK UNIFIED IDEOGRAPH + {0xBBE5, 0x9903}, //4152 #CJK UNIFIED IDEOGRAPH + {0xBBE6, 0x9905}, //4153 #CJK UNIFIED IDEOGRAPH + {0xBBE7, 0x990C}, //4154 #CJK UNIFIED IDEOGRAPH + {0xBBE8, 0x9909}, //4155 #CJK UNIFIED IDEOGRAPH + {0xBBE9, 0x99C1}, //4156 #CJK UNIFIED IDEOGRAPH + {0xBBEA, 0x9AAF}, //4157 #CJK UNIFIED IDEOGRAPH + {0xBBEB, 0x9AB0}, //4158 #CJK UNIFIED IDEOGRAPH + {0xBBEC, 0x9AE6}, //4159 #CJK UNIFIED IDEOGRAPH + {0xBBED, 0x9B41}, //4160 #CJK UNIFIED IDEOGRAPH + {0xBBEE, 0x9B42}, //4161 #CJK UNIFIED IDEOGRAPH + {0xBBEF, 0x9CF4}, //4162 #CJK UNIFIED IDEOGRAPH + {0xBBF0, 0x9CF6}, //4163 #CJK UNIFIED IDEOGRAPH + {0xBBF1, 0x9CF3}, //4164 #CJK UNIFIED IDEOGRAPH + {0xBBF2, 0x9EBC}, //4165 #CJK UNIFIED IDEOGRAPH + {0xBBF3, 0x9F3B}, //4166 #CJK UNIFIED IDEOGRAPH + {0xBBF4, 0x9F4A}, //4167 #CJK UNIFIED IDEOGRAPH + {0xBBF5, 0x5104}, //4168 #CJK UNIFIED IDEOGRAPH + {0xBBF6, 0x5100}, //4169 #CJK UNIFIED IDEOGRAPH + {0xBBF7, 0x50FB}, //4170 #CJK UNIFIED IDEOGRAPH + {0xBBF8, 0x50F5}, //4171 #CJK UNIFIED IDEOGRAPH + {0xBBF9, 0x50F9}, //4172 #CJK UNIFIED IDEOGRAPH + {0xBBFA, 0x5102}, //4173 #CJK UNIFIED IDEOGRAPH + {0xBBFB, 0x5108}, //4174 #CJK UNIFIED IDEOGRAPH + {0xBBFC, 0x5109}, //4175 #CJK UNIFIED IDEOGRAPH + {0xBBFD, 0x5105}, //4176 #CJK UNIFIED IDEOGRAPH + {0xBBFE, 0x51DC}, //4177 #CJK UNIFIED IDEOGRAPH + {0xBC40, 0x5287}, //4178 #CJK UNIFIED IDEOGRAPH + {0xBC41, 0x5288}, //4179 #CJK UNIFIED IDEOGRAPH + {0xBC42, 0x5289}, //4180 #CJK UNIFIED IDEOGRAPH + {0xBC43, 0x528D}, //4181 #CJK UNIFIED IDEOGRAPH + {0xBC44, 0x528A}, //4182 #CJK UNIFIED IDEOGRAPH + {0xBC45, 0x52F0}, //4183 #CJK UNIFIED IDEOGRAPH + {0xBC46, 0x53B2}, //4184 #CJK UNIFIED IDEOGRAPH + {0xBC47, 0x562E}, //4185 #CJK UNIFIED IDEOGRAPH + {0xBC48, 0x563B}, //4186 #CJK UNIFIED IDEOGRAPH + {0xBC49, 0x5639}, //4187 #CJK UNIFIED IDEOGRAPH + {0xBC4A, 0x5632}, //4188 #CJK UNIFIED IDEOGRAPH + {0xBC4B, 0x563F}, //4189 #CJK UNIFIED IDEOGRAPH + {0xBC4C, 0x5634}, //4190 #CJK UNIFIED IDEOGRAPH + {0xBC4D, 0x5629}, //4191 #CJK UNIFIED IDEOGRAPH + {0xBC4E, 0x5653}, //4192 #CJK UNIFIED IDEOGRAPH + {0xBC4F, 0x564E}, //4193 #CJK UNIFIED IDEOGRAPH + {0xBC50, 0x5657}, //4194 #CJK UNIFIED IDEOGRAPH + {0xBC51, 0x5674}, //4195 #CJK UNIFIED IDEOGRAPH + {0xBC52, 0x5636}, //4196 #CJK UNIFIED IDEOGRAPH + {0xBC53, 0x562F}, //4197 #CJK UNIFIED IDEOGRAPH + {0xBC54, 0x5630}, //4198 #CJK UNIFIED IDEOGRAPH + {0xBC55, 0x5880}, //4199 #CJK UNIFIED IDEOGRAPH + {0xBC56, 0x589F}, //4200 #CJK UNIFIED IDEOGRAPH + {0xBC57, 0x589E}, //4201 #CJK UNIFIED IDEOGRAPH + {0xBC58, 0x58B3}, //4202 #CJK UNIFIED IDEOGRAPH + {0xBC59, 0x589C}, //4203 #CJK UNIFIED IDEOGRAPH + {0xBC5A, 0x58AE}, //4204 #CJK UNIFIED IDEOGRAPH + {0xBC5B, 0x58A9}, //4205 #CJK UNIFIED IDEOGRAPH + {0xBC5C, 0x58A6}, //4206 #CJK UNIFIED IDEOGRAPH + {0xBC5D, 0x596D}, //4207 #CJK UNIFIED IDEOGRAPH + {0xBC5E, 0x5B09}, //4208 #CJK UNIFIED IDEOGRAPH + {0xBC5F, 0x5AFB}, //4209 #CJK UNIFIED IDEOGRAPH + {0xBC60, 0x5B0B}, //4210 #CJK UNIFIED IDEOGRAPH + {0xBC61, 0x5AF5}, //4211 #CJK UNIFIED IDEOGRAPH + {0xBC62, 0x5B0C}, //4212 #CJK UNIFIED IDEOGRAPH + {0xBC63, 0x5B08}, //4213 #CJK UNIFIED IDEOGRAPH + {0xBC64, 0x5BEE}, //4214 #CJK UNIFIED IDEOGRAPH + {0xBC65, 0x5BEC}, //4215 #CJK UNIFIED IDEOGRAPH + {0xBC66, 0x5BE9}, //4216 #CJK UNIFIED IDEOGRAPH + {0xBC67, 0x5BEB}, //4217 #CJK UNIFIED IDEOGRAPH + {0xBC68, 0x5C64}, //4218 #CJK UNIFIED IDEOGRAPH + {0xBC69, 0x5C65}, //4219 #CJK UNIFIED IDEOGRAPH + {0xBC6A, 0x5D9D}, //4220 #CJK UNIFIED IDEOGRAPH + {0xBC6B, 0x5D94}, //4221 #CJK UNIFIED IDEOGRAPH + {0xBC6C, 0x5E62}, //4222 #CJK UNIFIED IDEOGRAPH + {0xBC6D, 0x5E5F}, //4223 #CJK UNIFIED IDEOGRAPH + {0xBC6E, 0x5E61}, //4224 #CJK UNIFIED IDEOGRAPH + {0xBC6F, 0x5EE2}, //4225 #CJK UNIFIED IDEOGRAPH + {0xBC70, 0x5EDA}, //4226 #CJK UNIFIED IDEOGRAPH + {0xBC71, 0x5EDF}, //4227 #CJK UNIFIED IDEOGRAPH + {0xBC72, 0x5EDD}, //4228 #CJK UNIFIED IDEOGRAPH + {0xBC73, 0x5EE3}, //4229 #CJK UNIFIED IDEOGRAPH + {0xBC74, 0x5EE0}, //4230 #CJK UNIFIED IDEOGRAPH + {0xBC75, 0x5F48}, //4231 #CJK UNIFIED IDEOGRAPH + {0xBC76, 0x5F71}, //4232 #CJK UNIFIED IDEOGRAPH + {0xBC77, 0x5FB7}, //4233 #CJK UNIFIED IDEOGRAPH + {0xBC78, 0x5FB5}, //4234 #CJK UNIFIED IDEOGRAPH + {0xBC79, 0x6176}, //4235 #CJK UNIFIED IDEOGRAPH + {0xBC7A, 0x6167}, //4236 #CJK UNIFIED IDEOGRAPH + {0xBC7B, 0x616E}, //4237 #CJK UNIFIED IDEOGRAPH + {0xBC7C, 0x615D}, //4238 #CJK UNIFIED IDEOGRAPH + {0xBC7D, 0x6155}, //4239 #CJK UNIFIED IDEOGRAPH + {0xBC7E, 0x6182}, //4240 #CJK UNIFIED IDEOGRAPH + {0xBCA1, 0x617C}, //4241 #CJK UNIFIED IDEOGRAPH + {0xBCA2, 0x6170}, //4242 #CJK UNIFIED IDEOGRAPH + {0xBCA3, 0x616B}, //4243 #CJK UNIFIED IDEOGRAPH + {0xBCA4, 0x617E}, //4244 #CJK UNIFIED IDEOGRAPH + {0xBCA5, 0x61A7}, //4245 #CJK UNIFIED IDEOGRAPH + {0xBCA6, 0x6190}, //4246 #CJK UNIFIED IDEOGRAPH + {0xBCA7, 0x61AB}, //4247 #CJK UNIFIED IDEOGRAPH + {0xBCA8, 0x618E}, //4248 #CJK UNIFIED IDEOGRAPH + {0xBCA9, 0x61AC}, //4249 #CJK UNIFIED IDEOGRAPH + {0xBCAA, 0x619A}, //4250 #CJK UNIFIED IDEOGRAPH + {0xBCAB, 0x61A4}, //4251 #CJK UNIFIED IDEOGRAPH + {0xBCAC, 0x6194}, //4252 #CJK UNIFIED IDEOGRAPH + {0xBCAD, 0x61AE}, //4253 #CJK UNIFIED IDEOGRAPH + {0xBCAE, 0x622E}, //4254 #CJK UNIFIED IDEOGRAPH + {0xBCAF, 0x6469}, //4255 #CJK UNIFIED IDEOGRAPH + {0xBCB0, 0x646F}, //4256 #CJK UNIFIED IDEOGRAPH + {0xBCB1, 0x6479}, //4257 #CJK UNIFIED IDEOGRAPH + {0xBCB2, 0x649E}, //4258 #CJK UNIFIED IDEOGRAPH + {0xBCB3, 0x64B2}, //4259 #CJK UNIFIED IDEOGRAPH + {0xBCB4, 0x6488}, //4260 #CJK UNIFIED IDEOGRAPH + {0xBCB5, 0x6490}, //4261 #CJK UNIFIED IDEOGRAPH + {0xBCB6, 0x64B0}, //4262 #CJK UNIFIED IDEOGRAPH + {0xBCB7, 0x64A5}, //4263 #CJK UNIFIED IDEOGRAPH + {0xBCB8, 0x6493}, //4264 #CJK UNIFIED IDEOGRAPH + {0xBCB9, 0x6495}, //4265 #CJK UNIFIED IDEOGRAPH + {0xBCBA, 0x64A9}, //4266 #CJK UNIFIED IDEOGRAPH + {0xBCBB, 0x6492}, //4267 #CJK UNIFIED IDEOGRAPH + {0xBCBC, 0x64AE}, //4268 #CJK UNIFIED IDEOGRAPH + {0xBCBD, 0x64AD}, //4269 #CJK UNIFIED IDEOGRAPH + {0xBCBE, 0x64AB}, //4270 #CJK UNIFIED IDEOGRAPH + {0xBCBF, 0x649A}, //4271 #CJK UNIFIED IDEOGRAPH + {0xBCC0, 0x64AC}, //4272 #CJK UNIFIED IDEOGRAPH + {0xBCC1, 0x6499}, //4273 #CJK UNIFIED IDEOGRAPH + {0xBCC2, 0x64A2}, //4274 #CJK UNIFIED IDEOGRAPH + {0xBCC3, 0x64B3}, //4275 #CJK UNIFIED IDEOGRAPH + {0xBCC4, 0x6575}, //4276 #CJK UNIFIED IDEOGRAPH + {0xBCC5, 0x6577}, //4277 #CJK UNIFIED IDEOGRAPH + {0xBCC6, 0x6578}, //4278 #CJK UNIFIED IDEOGRAPH + {0xBCC7, 0x66AE}, //4279 #CJK UNIFIED IDEOGRAPH + {0xBCC8, 0x66AB}, //4280 #CJK UNIFIED IDEOGRAPH + {0xBCC9, 0x66B4}, //4281 #CJK UNIFIED IDEOGRAPH + {0xBCCA, 0x66B1}, //4282 #CJK UNIFIED IDEOGRAPH + {0xBCCB, 0x6A23}, //4283 #CJK UNIFIED IDEOGRAPH + {0xBCCC, 0x6A1F}, //4284 #CJK UNIFIED IDEOGRAPH + {0xBCCD, 0x69E8}, //4285 #CJK UNIFIED IDEOGRAPH + {0xBCCE, 0x6A01}, //4286 #CJK UNIFIED IDEOGRAPH + {0xBCCF, 0x6A1E}, //4287 #CJK UNIFIED IDEOGRAPH + {0xBCD0, 0x6A19}, //4288 #CJK UNIFIED IDEOGRAPH + {0xBCD1, 0x69FD}, //4289 #CJK UNIFIED IDEOGRAPH + {0xBCD2, 0x6A21}, //4290 #CJK UNIFIED IDEOGRAPH + {0xBCD3, 0x6A13}, //4291 #CJK UNIFIED IDEOGRAPH + {0xBCD4, 0x6A0A}, //4292 #CJK UNIFIED IDEOGRAPH + {0xBCD5, 0x69F3}, //4293 #CJK UNIFIED IDEOGRAPH + {0xBCD6, 0x6A02}, //4294 #CJK UNIFIED IDEOGRAPH + {0xBCD7, 0x6A05}, //4295 #CJK UNIFIED IDEOGRAPH + {0xBCD8, 0x69ED}, //4296 #CJK UNIFIED IDEOGRAPH + {0xBCD9, 0x6A11}, //4297 #CJK UNIFIED IDEOGRAPH + {0xBCDA, 0x6B50}, //4298 #CJK UNIFIED IDEOGRAPH + {0xBCDB, 0x6B4E}, //4299 #CJK UNIFIED IDEOGRAPH + {0xBCDC, 0x6BA4}, //4300 #CJK UNIFIED IDEOGRAPH + {0xBCDD, 0x6BC5}, //4301 #CJK UNIFIED IDEOGRAPH + {0xBCDE, 0x6BC6}, //4302 #CJK UNIFIED IDEOGRAPH + {0xBCDF, 0x6F3F}, //4303 #CJK UNIFIED IDEOGRAPH + {0xBCE0, 0x6F7C}, //4304 #CJK UNIFIED IDEOGRAPH + {0xBCE1, 0x6F84}, //4305 #CJK UNIFIED IDEOGRAPH + {0xBCE2, 0x6F51}, //4306 #CJK UNIFIED IDEOGRAPH + {0xBCE3, 0x6F66}, //4307 #CJK UNIFIED IDEOGRAPH + {0xBCE4, 0x6F54}, //4308 #CJK UNIFIED IDEOGRAPH + {0xBCE5, 0x6F86}, //4309 #CJK UNIFIED IDEOGRAPH + {0xBCE6, 0x6F6D}, //4310 #CJK UNIFIED IDEOGRAPH + {0xBCE7, 0x6F5B}, //4311 #CJK UNIFIED IDEOGRAPH + {0xBCE8, 0x6F78}, //4312 #CJK UNIFIED IDEOGRAPH + {0xBCE9, 0x6F6E}, //4313 #CJK UNIFIED IDEOGRAPH + {0xBCEA, 0x6F8E}, //4314 #CJK UNIFIED IDEOGRAPH + {0xBCEB, 0x6F7A}, //4315 #CJK UNIFIED IDEOGRAPH + {0xBCEC, 0x6F70}, //4316 #CJK UNIFIED IDEOGRAPH + {0xBCED, 0x6F64}, //4317 #CJK UNIFIED IDEOGRAPH + {0xBCEE, 0x6F97}, //4318 #CJK UNIFIED IDEOGRAPH + {0xBCEF, 0x6F58}, //4319 #CJK UNIFIED IDEOGRAPH + {0xBCF0, 0x6ED5}, //4320 #CJK UNIFIED IDEOGRAPH + {0xBCF1, 0x6F6F}, //4321 #CJK UNIFIED IDEOGRAPH + {0xBCF2, 0x6F60}, //4322 #CJK UNIFIED IDEOGRAPH + {0xBCF3, 0x6F5F}, //4323 #CJK UNIFIED IDEOGRAPH + {0xBCF4, 0x719F}, //4324 #CJK UNIFIED IDEOGRAPH + {0xBCF5, 0x71AC}, //4325 #CJK UNIFIED IDEOGRAPH + {0xBCF6, 0x71B1}, //4326 #CJK UNIFIED IDEOGRAPH + {0xBCF7, 0x71A8}, //4327 #CJK UNIFIED IDEOGRAPH + {0xBCF8, 0x7256}, //4328 #CJK UNIFIED IDEOGRAPH + {0xBCF9, 0x729B}, //4329 #CJK UNIFIED IDEOGRAPH + {0xBCFA, 0x734E}, //4330 #CJK UNIFIED IDEOGRAPH + {0xBCFB, 0x7357}, //4331 #CJK UNIFIED IDEOGRAPH + {0xBCFC, 0x7469}, //4332 #CJK UNIFIED IDEOGRAPH + {0xBCFD, 0x748B}, //4333 #CJK UNIFIED IDEOGRAPH + {0xBCFE, 0x7483}, //4334 #CJK UNIFIED IDEOGRAPH + {0xBD40, 0x747E}, //4335 #CJK UNIFIED IDEOGRAPH + {0xBD41, 0x7480}, //4336 #CJK UNIFIED IDEOGRAPH + {0xBD42, 0x757F}, //4337 #CJK UNIFIED IDEOGRAPH + {0xBD43, 0x7620}, //4338 #CJK UNIFIED IDEOGRAPH + {0xBD44, 0x7629}, //4339 #CJK UNIFIED IDEOGRAPH + {0xBD45, 0x761F}, //4340 #CJK UNIFIED IDEOGRAPH + {0xBD46, 0x7624}, //4341 #CJK UNIFIED IDEOGRAPH + {0xBD47, 0x7626}, //4342 #CJK UNIFIED IDEOGRAPH + {0xBD48, 0x7621}, //4343 #CJK UNIFIED IDEOGRAPH + {0xBD49, 0x7622}, //4344 #CJK UNIFIED IDEOGRAPH + {0xBD4A, 0x769A}, //4345 #CJK UNIFIED IDEOGRAPH + {0xBD4B, 0x76BA}, //4346 #CJK UNIFIED IDEOGRAPH + {0xBD4C, 0x76E4}, //4347 #CJK UNIFIED IDEOGRAPH + {0xBD4D, 0x778E}, //4348 #CJK UNIFIED IDEOGRAPH + {0xBD4E, 0x7787}, //4349 #CJK UNIFIED IDEOGRAPH + {0xBD4F, 0x778C}, //4350 #CJK UNIFIED IDEOGRAPH + {0xBD50, 0x7791}, //4351 #CJK UNIFIED IDEOGRAPH + {0xBD51, 0x778B}, //4352 #CJK UNIFIED IDEOGRAPH + {0xBD52, 0x78CB}, //4353 #CJK UNIFIED IDEOGRAPH + {0xBD53, 0x78C5}, //4354 #CJK UNIFIED IDEOGRAPH + {0xBD54, 0x78BA}, //4355 #CJK UNIFIED IDEOGRAPH + {0xBD55, 0x78CA}, //4356 #CJK UNIFIED IDEOGRAPH + {0xBD56, 0x78BE}, //4357 #CJK UNIFIED IDEOGRAPH + {0xBD57, 0x78D5}, //4358 #CJK UNIFIED IDEOGRAPH + {0xBD58, 0x78BC}, //4359 #CJK UNIFIED IDEOGRAPH + {0xBD59, 0x78D0}, //4360 #CJK UNIFIED IDEOGRAPH + {0xBD5A, 0x7A3F}, //4361 #CJK UNIFIED IDEOGRAPH + {0xBD5B, 0x7A3C}, //4362 #CJK UNIFIED IDEOGRAPH + {0xBD5C, 0x7A40}, //4363 #CJK UNIFIED IDEOGRAPH + {0xBD5D, 0x7A3D}, //4364 #CJK UNIFIED IDEOGRAPH + {0xBD5E, 0x7A37}, //4365 #CJK UNIFIED IDEOGRAPH + {0xBD5F, 0x7A3B}, //4366 #CJK UNIFIED IDEOGRAPH + {0xBD60, 0x7AAF}, //4367 #CJK UNIFIED IDEOGRAPH + {0xBD61, 0x7AAE}, //4368 #CJK UNIFIED IDEOGRAPH + {0xBD62, 0x7BAD}, //4369 #CJK UNIFIED IDEOGRAPH + {0xBD63, 0x7BB1}, //4370 #CJK UNIFIED IDEOGRAPH + {0xBD64, 0x7BC4}, //4371 #CJK UNIFIED IDEOGRAPH + {0xBD65, 0x7BB4}, //4372 #CJK UNIFIED IDEOGRAPH + {0xBD66, 0x7BC6}, //4373 #CJK UNIFIED IDEOGRAPH + {0xBD67, 0x7BC7}, //4374 #CJK UNIFIED IDEOGRAPH + {0xBD68, 0x7BC1}, //4375 #CJK UNIFIED IDEOGRAPH + {0xBD69, 0x7BA0}, //4376 #CJK UNIFIED IDEOGRAPH + {0xBD6A, 0x7BCC}, //4377 #CJK UNIFIED IDEOGRAPH + {0xBD6B, 0x7CCA}, //4378 #CJK UNIFIED IDEOGRAPH + {0xBD6C, 0x7DE0}, //4379 #CJK UNIFIED IDEOGRAPH + {0xBD6D, 0x7DF4}, //4380 #CJK UNIFIED IDEOGRAPH + {0xBD6E, 0x7DEF}, //4381 #CJK UNIFIED IDEOGRAPH + {0xBD6F, 0x7DFB}, //4382 #CJK UNIFIED IDEOGRAPH + {0xBD70, 0x7DD8}, //4383 #CJK UNIFIED IDEOGRAPH + {0xBD71, 0x7DEC}, //4384 #CJK UNIFIED IDEOGRAPH + {0xBD72, 0x7DDD}, //4385 #CJK UNIFIED IDEOGRAPH + {0xBD73, 0x7DE8}, //4386 #CJK UNIFIED IDEOGRAPH + {0xBD74, 0x7DE3}, //4387 #CJK UNIFIED IDEOGRAPH + {0xBD75, 0x7DDA}, //4388 #CJK UNIFIED IDEOGRAPH + {0xBD76, 0x7DDE}, //4389 #CJK UNIFIED IDEOGRAPH + {0xBD77, 0x7DE9}, //4390 #CJK UNIFIED IDEOGRAPH + {0xBD78, 0x7D9E}, //4391 #CJK UNIFIED IDEOGRAPH + {0xBD79, 0x7DD9}, //4392 #CJK UNIFIED IDEOGRAPH + {0xBD7A, 0x7DF2}, //4393 #CJK UNIFIED IDEOGRAPH + {0xBD7B, 0x7DF9}, //4394 #CJK UNIFIED IDEOGRAPH + {0xBD7C, 0x7F75}, //4395 #CJK UNIFIED IDEOGRAPH + {0xBD7D, 0x7F77}, //4396 #CJK UNIFIED IDEOGRAPH + {0xBD7E, 0x7FAF}, //4397 #CJK UNIFIED IDEOGRAPH + {0xBDA1, 0x7FE9}, //4398 #CJK UNIFIED IDEOGRAPH + {0xBDA2, 0x8026}, //4399 #CJK UNIFIED IDEOGRAPH + {0xBDA3, 0x819B}, //4400 #CJK UNIFIED IDEOGRAPH + {0xBDA4, 0x819C}, //4401 #CJK UNIFIED IDEOGRAPH + {0xBDA5, 0x819D}, //4402 #CJK UNIFIED IDEOGRAPH + {0xBDA6, 0x81A0}, //4403 #CJK UNIFIED IDEOGRAPH + {0xBDA7, 0x819A}, //4404 #CJK UNIFIED IDEOGRAPH + {0xBDA8, 0x8198}, //4405 #CJK UNIFIED IDEOGRAPH + {0xBDA9, 0x8517}, //4406 #CJK UNIFIED IDEOGRAPH + {0xBDAA, 0x853D}, //4407 #CJK UNIFIED IDEOGRAPH + {0xBDAB, 0x851A}, //4408 #CJK UNIFIED IDEOGRAPH + {0xBDAC, 0x84EE}, //4409 #CJK UNIFIED IDEOGRAPH + {0xBDAD, 0x852C}, //4410 #CJK UNIFIED IDEOGRAPH + {0xBDAE, 0x852D}, //4411 #CJK UNIFIED IDEOGRAPH + {0xBDAF, 0x8513}, //4412 #CJK UNIFIED IDEOGRAPH + {0xBDB0, 0x8511}, //4413 #CJK UNIFIED IDEOGRAPH + {0xBDB1, 0x8523}, //4414 #CJK UNIFIED IDEOGRAPH + {0xBDB2, 0x8521}, //4415 #CJK UNIFIED IDEOGRAPH + {0xBDB3, 0x8514}, //4416 #CJK UNIFIED IDEOGRAPH + {0xBDB4, 0x84EC}, //4417 #CJK UNIFIED IDEOGRAPH + {0xBDB5, 0x8525}, //4418 #CJK UNIFIED IDEOGRAPH + {0xBDB6, 0x84FF}, //4419 #CJK UNIFIED IDEOGRAPH + {0xBDB7, 0x8506}, //4420 #CJK UNIFIED IDEOGRAPH + {0xBDB8, 0x8782}, //4421 #CJK UNIFIED IDEOGRAPH + {0xBDB9, 0x8774}, //4422 #CJK UNIFIED IDEOGRAPH + {0xBDBA, 0x8776}, //4423 #CJK UNIFIED IDEOGRAPH + {0xBDBB, 0x8760}, //4424 #CJK UNIFIED IDEOGRAPH + {0xBDBC, 0x8766}, //4425 #CJK UNIFIED IDEOGRAPH + {0xBDBD, 0x8778}, //4426 #CJK UNIFIED IDEOGRAPH + {0xBDBE, 0x8768}, //4427 #CJK UNIFIED IDEOGRAPH + {0xBDBF, 0x8759}, //4428 #CJK UNIFIED IDEOGRAPH + {0xBDC0, 0x8757}, //4429 #CJK UNIFIED IDEOGRAPH + {0xBDC1, 0x874C}, //4430 #CJK UNIFIED IDEOGRAPH + {0xBDC2, 0x8753}, //4431 #CJK UNIFIED IDEOGRAPH + {0xBDC3, 0x885B}, //4432 #CJK UNIFIED IDEOGRAPH + {0xBDC4, 0x885D}, //4433 #CJK UNIFIED IDEOGRAPH + {0xBDC5, 0x8910}, //4434 #CJK UNIFIED IDEOGRAPH + {0xBDC6, 0x8907}, //4435 #CJK UNIFIED IDEOGRAPH + {0xBDC7, 0x8912}, //4436 #CJK UNIFIED IDEOGRAPH + {0xBDC8, 0x8913}, //4437 #CJK UNIFIED IDEOGRAPH + {0xBDC9, 0x8915}, //4438 #CJK UNIFIED IDEOGRAPH + {0xBDCA, 0x890A}, //4439 #CJK UNIFIED IDEOGRAPH + {0xBDCB, 0x8ABC}, //4440 #CJK UNIFIED IDEOGRAPH + {0xBDCC, 0x8AD2}, //4441 #CJK UNIFIED IDEOGRAPH + {0xBDCD, 0x8AC7}, //4442 #CJK UNIFIED IDEOGRAPH + {0xBDCE, 0x8AC4}, //4443 #CJK UNIFIED IDEOGRAPH + {0xBDCF, 0x8A95}, //4444 #CJK UNIFIED IDEOGRAPH + {0xBDD0, 0x8ACB}, //4445 #CJK UNIFIED IDEOGRAPH + {0xBDD1, 0x8AF8}, //4446 #CJK UNIFIED IDEOGRAPH + {0xBDD2, 0x8AB2}, //4447 #CJK UNIFIED IDEOGRAPH + {0xBDD3, 0x8AC9}, //4448 #CJK UNIFIED IDEOGRAPH + {0xBDD4, 0x8AC2}, //4449 #CJK UNIFIED IDEOGRAPH + {0xBDD5, 0x8ABF}, //4450 #CJK UNIFIED IDEOGRAPH + {0xBDD6, 0x8AB0}, //4451 #CJK UNIFIED IDEOGRAPH + {0xBDD7, 0x8AD6}, //4452 #CJK UNIFIED IDEOGRAPH + {0xBDD8, 0x8ACD}, //4453 #CJK UNIFIED IDEOGRAPH + {0xBDD9, 0x8AB6}, //4454 #CJK UNIFIED IDEOGRAPH + {0xBDDA, 0x8AB9}, //4455 #CJK UNIFIED IDEOGRAPH + {0xBDDB, 0x8ADB}, //4456 #CJK UNIFIED IDEOGRAPH + {0xBDDC, 0x8C4C}, //4457 #CJK UNIFIED IDEOGRAPH + {0xBDDD, 0x8C4E}, //4458 #CJK UNIFIED IDEOGRAPH + {0xBDDE, 0x8C6C}, //4459 #CJK UNIFIED IDEOGRAPH + {0xBDDF, 0x8CE0}, //4460 #CJK UNIFIED IDEOGRAPH + {0xBDE0, 0x8CDE}, //4461 #CJK UNIFIED IDEOGRAPH + {0xBDE1, 0x8CE6}, //4462 #CJK UNIFIED IDEOGRAPH + {0xBDE2, 0x8CE4}, //4463 #CJK UNIFIED IDEOGRAPH + {0xBDE3, 0x8CEC}, //4464 #CJK UNIFIED IDEOGRAPH + {0xBDE4, 0x8CED}, //4465 #CJK UNIFIED IDEOGRAPH + {0xBDE5, 0x8CE2}, //4466 #CJK UNIFIED IDEOGRAPH + {0xBDE6, 0x8CE3}, //4467 #CJK UNIFIED IDEOGRAPH + {0xBDE7, 0x8CDC}, //4468 #CJK UNIFIED IDEOGRAPH + {0xBDE8, 0x8CEA}, //4469 #CJK UNIFIED IDEOGRAPH + {0xBDE9, 0x8CE1}, //4470 #CJK UNIFIED IDEOGRAPH + {0xBDEA, 0x8D6D}, //4471 #CJK UNIFIED IDEOGRAPH + {0xBDEB, 0x8D9F}, //4472 #CJK UNIFIED IDEOGRAPH + {0xBDEC, 0x8DA3}, //4473 #CJK UNIFIED IDEOGRAPH + {0xBDED, 0x8E2B}, //4474 #CJK UNIFIED IDEOGRAPH + {0xBDEE, 0x8E10}, //4475 #CJK UNIFIED IDEOGRAPH + {0xBDEF, 0x8E1D}, //4476 #CJK UNIFIED IDEOGRAPH + {0xBDF0, 0x8E22}, //4477 #CJK UNIFIED IDEOGRAPH + {0xBDF1, 0x8E0F}, //4478 #CJK UNIFIED IDEOGRAPH + {0xBDF2, 0x8E29}, //4479 #CJK UNIFIED IDEOGRAPH + {0xBDF3, 0x8E1F}, //4480 #CJK UNIFIED IDEOGRAPH + {0xBDF4, 0x8E21}, //4481 #CJK UNIFIED IDEOGRAPH + {0xBDF5, 0x8E1E}, //4482 #CJK UNIFIED IDEOGRAPH + {0xBDF6, 0x8EBA}, //4483 #CJK UNIFIED IDEOGRAPH + {0xBDF7, 0x8F1D}, //4484 #CJK UNIFIED IDEOGRAPH + {0xBDF8, 0x8F1B}, //4485 #CJK UNIFIED IDEOGRAPH + {0xBDF9, 0x8F1F}, //4486 #CJK UNIFIED IDEOGRAPH + {0xBDFA, 0x8F29}, //4487 #CJK UNIFIED IDEOGRAPH + {0xBDFB, 0x8F26}, //4488 #CJK UNIFIED IDEOGRAPH + {0xBDFC, 0x8F2A}, //4489 #CJK UNIFIED IDEOGRAPH + {0xBDFD, 0x8F1C}, //4490 #CJK UNIFIED IDEOGRAPH + {0xBDFE, 0x8F1E}, //4491 #CJK UNIFIED IDEOGRAPH + {0xBE40, 0x8F25}, //4492 #CJK UNIFIED IDEOGRAPH + {0xBE41, 0x9069}, //4493 #CJK UNIFIED IDEOGRAPH + {0xBE42, 0x906E}, //4494 #CJK UNIFIED IDEOGRAPH + {0xBE43, 0x9068}, //4495 #CJK UNIFIED IDEOGRAPH + {0xBE44, 0x906D}, //4496 #CJK UNIFIED IDEOGRAPH + {0xBE45, 0x9077}, //4497 #CJK UNIFIED IDEOGRAPH + {0xBE46, 0x9130}, //4498 #CJK UNIFIED IDEOGRAPH + {0xBE47, 0x912D}, //4499 #CJK UNIFIED IDEOGRAPH + {0xBE48, 0x9127}, //4500 #CJK UNIFIED IDEOGRAPH + {0xBE49, 0x9131}, //4501 #CJK UNIFIED IDEOGRAPH + {0xBE4A, 0x9187}, //4502 #CJK UNIFIED IDEOGRAPH + {0xBE4B, 0x9189}, //4503 #CJK UNIFIED IDEOGRAPH + {0xBE4C, 0x918B}, //4504 #CJK UNIFIED IDEOGRAPH + {0xBE4D, 0x9183}, //4505 #CJK UNIFIED IDEOGRAPH + {0xBE4E, 0x92C5}, //4506 #CJK UNIFIED IDEOGRAPH + {0xBE4F, 0x92BB}, //4507 #CJK UNIFIED IDEOGRAPH + {0xBE50, 0x92B7}, //4508 #CJK UNIFIED IDEOGRAPH + {0xBE51, 0x92EA}, //4509 #CJK UNIFIED IDEOGRAPH + {0xBE52, 0x92AC}, //4510 #CJK UNIFIED IDEOGRAPH + {0xBE53, 0x92E4}, //4511 #CJK UNIFIED IDEOGRAPH + {0xBE54, 0x92C1}, //4512 #CJK UNIFIED IDEOGRAPH + {0xBE55, 0x92B3}, //4513 #CJK UNIFIED IDEOGRAPH + {0xBE56, 0x92BC}, //4514 #CJK UNIFIED IDEOGRAPH + {0xBE57, 0x92D2}, //4515 #CJK UNIFIED IDEOGRAPH + {0xBE58, 0x92C7}, //4516 #CJK UNIFIED IDEOGRAPH + {0xBE59, 0x92F0}, //4517 #CJK UNIFIED IDEOGRAPH + {0xBE5A, 0x92B2}, //4518 #CJK UNIFIED IDEOGRAPH + {0xBE5B, 0x95AD}, //4519 #CJK UNIFIED IDEOGRAPH + {0xBE5C, 0x95B1}, //4520 #CJK UNIFIED IDEOGRAPH + {0xBE5D, 0x9704}, //4521 #CJK UNIFIED IDEOGRAPH + {0xBE5E, 0x9706}, //4522 #CJK UNIFIED IDEOGRAPH + {0xBE5F, 0x9707}, //4523 #CJK UNIFIED IDEOGRAPH + {0xBE60, 0x9709}, //4524 #CJK UNIFIED IDEOGRAPH + {0xBE61, 0x9760}, //4525 #CJK UNIFIED IDEOGRAPH + {0xBE62, 0x978D}, //4526 #CJK UNIFIED IDEOGRAPH + {0xBE63, 0x978B}, //4527 #CJK UNIFIED IDEOGRAPH + {0xBE64, 0x978F}, //4528 #CJK UNIFIED IDEOGRAPH + {0xBE65, 0x9821}, //4529 #CJK UNIFIED IDEOGRAPH + {0xBE66, 0x982B}, //4530 #CJK UNIFIED IDEOGRAPH + {0xBE67, 0x981C}, //4531 #CJK UNIFIED IDEOGRAPH + {0xBE68, 0x98B3}, //4532 #CJK UNIFIED IDEOGRAPH + {0xBE69, 0x990A}, //4533 #CJK UNIFIED IDEOGRAPH + {0xBE6A, 0x9913}, //4534 #CJK UNIFIED IDEOGRAPH + {0xBE6B, 0x9912}, //4535 #CJK UNIFIED IDEOGRAPH + {0xBE6C, 0x9918}, //4536 #CJK UNIFIED IDEOGRAPH + {0xBE6D, 0x99DD}, //4537 #CJK UNIFIED IDEOGRAPH + {0xBE6E, 0x99D0}, //4538 #CJK UNIFIED IDEOGRAPH + {0xBE6F, 0x99DF}, //4539 #CJK UNIFIED IDEOGRAPH + {0xBE70, 0x99DB}, //4540 #CJK UNIFIED IDEOGRAPH + {0xBE71, 0x99D1}, //4541 #CJK UNIFIED IDEOGRAPH + {0xBE72, 0x99D5}, //4542 #CJK UNIFIED IDEOGRAPH + {0xBE73, 0x99D2}, //4543 #CJK UNIFIED IDEOGRAPH + {0xBE74, 0x99D9}, //4544 #CJK UNIFIED IDEOGRAPH + {0xBE75, 0x9AB7}, //4545 #CJK UNIFIED IDEOGRAPH + {0xBE76, 0x9AEE}, //4546 #CJK UNIFIED IDEOGRAPH + {0xBE77, 0x9AEF}, //4547 #CJK UNIFIED IDEOGRAPH + {0xBE78, 0x9B27}, //4548 #CJK UNIFIED IDEOGRAPH + {0xBE79, 0x9B45}, //4549 #CJK UNIFIED IDEOGRAPH + {0xBE7A, 0x9B44}, //4550 #CJK UNIFIED IDEOGRAPH + {0xBE7B, 0x9B77}, //4551 #CJK UNIFIED IDEOGRAPH + {0xBE7C, 0x9B6F}, //4552 #CJK UNIFIED IDEOGRAPH + {0xBE7D, 0x9D06}, //4553 #CJK UNIFIED IDEOGRAPH + {0xBE7E, 0x9D09}, //4554 #CJK UNIFIED IDEOGRAPH + {0xBEA1, 0x9D03}, //4555 #CJK UNIFIED IDEOGRAPH + {0xBEA2, 0x9EA9}, //4556 #CJK UNIFIED IDEOGRAPH + {0xBEA3, 0x9EBE}, //4557 #CJK UNIFIED IDEOGRAPH + {0xBEA4, 0x9ECE}, //4558 #CJK UNIFIED IDEOGRAPH + {0xBEA5, 0x58A8}, //4559 #CJK UNIFIED IDEOGRAPH + {0xBEA6, 0x9F52}, //4560 #CJK UNIFIED IDEOGRAPH + {0xBEA7, 0x5112}, //4561 #CJK UNIFIED IDEOGRAPH + {0xBEA8, 0x5118}, //4562 #CJK UNIFIED IDEOGRAPH + {0xBEA9, 0x5114}, //4563 #CJK UNIFIED IDEOGRAPH + {0xBEAA, 0x5110}, //4564 #CJK UNIFIED IDEOGRAPH + {0xBEAB, 0x5115}, //4565 #CJK UNIFIED IDEOGRAPH + {0xBEAC, 0x5180}, //4566 #CJK UNIFIED IDEOGRAPH + {0xBEAD, 0x51AA}, //4567 #CJK UNIFIED IDEOGRAPH + {0xBEAE, 0x51DD}, //4568 #CJK UNIFIED IDEOGRAPH + {0xBEAF, 0x5291}, //4569 #CJK UNIFIED IDEOGRAPH + {0xBEB0, 0x5293}, //4570 #CJK UNIFIED IDEOGRAPH + {0xBEB1, 0x52F3}, //4571 #CJK UNIFIED IDEOGRAPH + {0xBEB2, 0x5659}, //4572 #CJK UNIFIED IDEOGRAPH + {0xBEB3, 0x566B}, //4573 #CJK UNIFIED IDEOGRAPH + {0xBEB4, 0x5679}, //4574 #CJK UNIFIED IDEOGRAPH + {0xBEB5, 0x5669}, //4575 #CJK UNIFIED IDEOGRAPH + {0xBEB6, 0x5664}, //4576 #CJK UNIFIED IDEOGRAPH + {0xBEB7, 0x5678}, //4577 #CJK UNIFIED IDEOGRAPH + {0xBEB8, 0x566A}, //4578 #CJK UNIFIED IDEOGRAPH + {0xBEB9, 0x5668}, //4579 #CJK UNIFIED IDEOGRAPH + {0xBEBA, 0x5665}, //4580 #CJK UNIFIED IDEOGRAPH + {0xBEBB, 0x5671}, //4581 #CJK UNIFIED IDEOGRAPH + {0xBEBC, 0x566F}, //4582 #CJK UNIFIED IDEOGRAPH + {0xBEBD, 0x566C}, //4583 #CJK UNIFIED IDEOGRAPH + {0xBEBE, 0x5662}, //4584 #CJK UNIFIED IDEOGRAPH + {0xBEBF, 0x5676}, //4585 #CJK UNIFIED IDEOGRAPH + {0xBEC0, 0x58C1}, //4586 #CJK UNIFIED IDEOGRAPH + {0xBEC1, 0x58BE}, //4587 #CJK UNIFIED IDEOGRAPH + {0xBEC2, 0x58C7}, //4588 #CJK UNIFIED IDEOGRAPH + {0xBEC3, 0x58C5}, //4589 #CJK UNIFIED IDEOGRAPH + {0xBEC4, 0x596E}, //4590 #CJK UNIFIED IDEOGRAPH + {0xBEC5, 0x5B1D}, //4591 #CJK UNIFIED IDEOGRAPH + {0xBEC6, 0x5B34}, //4592 #CJK UNIFIED IDEOGRAPH + {0xBEC7, 0x5B78}, //4593 #CJK UNIFIED IDEOGRAPH + {0xBEC8, 0x5BF0}, //4594 #CJK UNIFIED IDEOGRAPH + {0xBEC9, 0x5C0E}, //4595 #CJK UNIFIED IDEOGRAPH + {0xBECA, 0x5F4A}, //4596 #CJK UNIFIED IDEOGRAPH + {0xBECB, 0x61B2}, //4597 #CJK UNIFIED IDEOGRAPH + {0xBECC, 0x6191}, //4598 #CJK UNIFIED IDEOGRAPH + {0xBECD, 0x61A9}, //4599 #CJK UNIFIED IDEOGRAPH + {0xBECE, 0x618A}, //4600 #CJK UNIFIED IDEOGRAPH + {0xBECF, 0x61CD}, //4601 #CJK UNIFIED IDEOGRAPH + {0xBED0, 0x61B6}, //4602 #CJK UNIFIED IDEOGRAPH + {0xBED1, 0x61BE}, //4603 #CJK UNIFIED IDEOGRAPH + {0xBED2, 0x61CA}, //4604 #CJK UNIFIED IDEOGRAPH + {0xBED3, 0x61C8}, //4605 #CJK UNIFIED IDEOGRAPH + {0xBED4, 0x6230}, //4606 #CJK UNIFIED IDEOGRAPH + {0xBED5, 0x64C5}, //4607 #CJK UNIFIED IDEOGRAPH + {0xBED6, 0x64C1}, //4608 #CJK UNIFIED IDEOGRAPH + {0xBED7, 0x64CB}, //4609 #CJK UNIFIED IDEOGRAPH + {0xBED8, 0x64BB}, //4610 #CJK UNIFIED IDEOGRAPH + {0xBED9, 0x64BC}, //4611 #CJK UNIFIED IDEOGRAPH + {0xBEDA, 0x64DA}, //4612 #CJK UNIFIED IDEOGRAPH + {0xBEDB, 0x64C4}, //4613 #CJK UNIFIED IDEOGRAPH + {0xBEDC, 0x64C7}, //4614 #CJK UNIFIED IDEOGRAPH + {0xBEDD, 0x64C2}, //4615 #CJK UNIFIED IDEOGRAPH + {0xBEDE, 0x64CD}, //4616 #CJK UNIFIED IDEOGRAPH + {0xBEDF, 0x64BF}, //4617 #CJK UNIFIED IDEOGRAPH + {0xBEE0, 0x64D2}, //4618 #CJK UNIFIED IDEOGRAPH + {0xBEE1, 0x64D4}, //4619 #CJK UNIFIED IDEOGRAPH + {0xBEE2, 0x64BE}, //4620 #CJK UNIFIED IDEOGRAPH + {0xBEE3, 0x6574}, //4621 #CJK UNIFIED IDEOGRAPH + {0xBEE4, 0x66C6}, //4622 #CJK UNIFIED IDEOGRAPH + {0xBEE5, 0x66C9}, //4623 #CJK UNIFIED IDEOGRAPH + {0xBEE6, 0x66B9}, //4624 #CJK UNIFIED IDEOGRAPH + {0xBEE7, 0x66C4}, //4625 #CJK UNIFIED IDEOGRAPH + {0xBEE8, 0x66C7}, //4626 #CJK UNIFIED IDEOGRAPH + {0xBEE9, 0x66B8}, //4627 #CJK UNIFIED IDEOGRAPH + {0xBEEA, 0x6A3D}, //4628 #CJK UNIFIED IDEOGRAPH + {0xBEEB, 0x6A38}, //4629 #CJK UNIFIED IDEOGRAPH + {0xBEEC, 0x6A3A}, //4630 #CJK UNIFIED IDEOGRAPH + {0xBEED, 0x6A59}, //4631 #CJK UNIFIED IDEOGRAPH + {0xBEEE, 0x6A6B}, //4632 #CJK UNIFIED IDEOGRAPH + {0xBEEF, 0x6A58}, //4633 #CJK UNIFIED IDEOGRAPH + {0xBEF0, 0x6A39}, //4634 #CJK UNIFIED IDEOGRAPH + {0xBEF1, 0x6A44}, //4635 #CJK UNIFIED IDEOGRAPH + {0xBEF2, 0x6A62}, //4636 #CJK UNIFIED IDEOGRAPH + {0xBEF3, 0x6A61}, //4637 #CJK UNIFIED IDEOGRAPH + {0xBEF4, 0x6A4B}, //4638 #CJK UNIFIED IDEOGRAPH + {0xBEF5, 0x6A47}, //4639 #CJK UNIFIED IDEOGRAPH + {0xBEF6, 0x6A35}, //4640 #CJK UNIFIED IDEOGRAPH + {0xBEF7, 0x6A5F}, //4641 #CJK UNIFIED IDEOGRAPH + {0xBEF8, 0x6A48}, //4642 #CJK UNIFIED IDEOGRAPH + {0xBEF9, 0x6B59}, //4643 #CJK UNIFIED IDEOGRAPH + {0xBEFA, 0x6B77}, //4644 #CJK UNIFIED IDEOGRAPH + {0xBEFB, 0x6C05}, //4645 #CJK UNIFIED IDEOGRAPH + {0xBEFC, 0x6FC2}, //4646 #CJK UNIFIED IDEOGRAPH + {0xBEFD, 0x6FB1}, //4647 #CJK UNIFIED IDEOGRAPH + {0xBEFE, 0x6FA1}, //4648 #CJK UNIFIED IDEOGRAPH + {0xBF40, 0x6FC3}, //4649 #CJK UNIFIED IDEOGRAPH + {0xBF41, 0x6FA4}, //4650 #CJK UNIFIED IDEOGRAPH + {0xBF42, 0x6FC1}, //4651 #CJK UNIFIED IDEOGRAPH + {0xBF43, 0x6FA7}, //4652 #CJK UNIFIED IDEOGRAPH + {0xBF44, 0x6FB3}, //4653 #CJK UNIFIED IDEOGRAPH + {0xBF45, 0x6FC0}, //4654 #CJK UNIFIED IDEOGRAPH + {0xBF46, 0x6FB9}, //4655 #CJK UNIFIED IDEOGRAPH + {0xBF47, 0x6FB6}, //4656 #CJK UNIFIED IDEOGRAPH + {0xBF48, 0x6FA6}, //4657 #CJK UNIFIED IDEOGRAPH + {0xBF49, 0x6FA0}, //4658 #CJK UNIFIED IDEOGRAPH + {0xBF4A, 0x6FB4}, //4659 #CJK UNIFIED IDEOGRAPH + {0xBF4B, 0x71BE}, //4660 #CJK UNIFIED IDEOGRAPH + {0xBF4C, 0x71C9}, //4661 #CJK UNIFIED IDEOGRAPH + {0xBF4D, 0x71D0}, //4662 #CJK UNIFIED IDEOGRAPH + {0xBF4E, 0x71D2}, //4663 #CJK UNIFIED IDEOGRAPH + {0xBF4F, 0x71C8}, //4664 #CJK UNIFIED IDEOGRAPH + {0xBF50, 0x71D5}, //4665 #CJK UNIFIED IDEOGRAPH + {0xBF51, 0x71B9}, //4666 #CJK UNIFIED IDEOGRAPH + {0xBF52, 0x71CE}, //4667 #CJK UNIFIED IDEOGRAPH + {0xBF53, 0x71D9}, //4668 #CJK UNIFIED IDEOGRAPH + {0xBF54, 0x71DC}, //4669 #CJK UNIFIED IDEOGRAPH + {0xBF55, 0x71C3}, //4670 #CJK UNIFIED IDEOGRAPH + {0xBF56, 0x71C4}, //4671 #CJK UNIFIED IDEOGRAPH + {0xBF57, 0x7368}, //4672 #CJK UNIFIED IDEOGRAPH + {0xBF58, 0x749C}, //4673 #CJK UNIFIED IDEOGRAPH + {0xBF59, 0x74A3}, //4674 #CJK UNIFIED IDEOGRAPH + {0xBF5A, 0x7498}, //4675 #CJK UNIFIED IDEOGRAPH + {0xBF5B, 0x749F}, //4676 #CJK UNIFIED IDEOGRAPH + {0xBF5C, 0x749E}, //4677 #CJK UNIFIED IDEOGRAPH + {0xBF5D, 0x74E2}, //4678 #CJK UNIFIED IDEOGRAPH + {0xBF5E, 0x750C}, //4679 #CJK UNIFIED IDEOGRAPH + {0xBF5F, 0x750D}, //4680 #CJK UNIFIED IDEOGRAPH + {0xBF60, 0x7634}, //4681 #CJK UNIFIED IDEOGRAPH + {0xBF61, 0x7638}, //4682 #CJK UNIFIED IDEOGRAPH + {0xBF62, 0x763A}, //4683 #CJK UNIFIED IDEOGRAPH + {0xBF63, 0x76E7}, //4684 #CJK UNIFIED IDEOGRAPH + {0xBF64, 0x76E5}, //4685 #CJK UNIFIED IDEOGRAPH + {0xBF65, 0x77A0}, //4686 #CJK UNIFIED IDEOGRAPH + {0xBF66, 0x779E}, //4687 #CJK UNIFIED IDEOGRAPH + {0xBF67, 0x779F}, //4688 #CJK UNIFIED IDEOGRAPH + {0xBF68, 0x77A5}, //4689 #CJK UNIFIED IDEOGRAPH + {0xBF69, 0x78E8}, //4690 #CJK UNIFIED IDEOGRAPH + {0xBF6A, 0x78DA}, //4691 #CJK UNIFIED IDEOGRAPH + {0xBF6B, 0x78EC}, //4692 #CJK UNIFIED IDEOGRAPH + {0xBF6C, 0x78E7}, //4693 #CJK UNIFIED IDEOGRAPH + {0xBF6D, 0x79A6}, //4694 #CJK UNIFIED IDEOGRAPH + {0xBF6E, 0x7A4D}, //4695 #CJK UNIFIED IDEOGRAPH + {0xBF6F, 0x7A4E}, //4696 #CJK UNIFIED IDEOGRAPH + {0xBF70, 0x7A46}, //4697 #CJK UNIFIED IDEOGRAPH + {0xBF71, 0x7A4C}, //4698 #CJK UNIFIED IDEOGRAPH + {0xBF72, 0x7A4B}, //4699 #CJK UNIFIED IDEOGRAPH + {0xBF73, 0x7ABA}, //4700 #CJK UNIFIED IDEOGRAPH + {0xBF74, 0x7BD9}, //4701 #CJK UNIFIED IDEOGRAPH + {0xBF75, 0x7C11}, //4702 #CJK UNIFIED IDEOGRAPH + {0xBF76, 0x7BC9}, //4703 #CJK UNIFIED IDEOGRAPH + {0xBF77, 0x7BE4}, //4704 #CJK UNIFIED IDEOGRAPH + {0xBF78, 0x7BDB}, //4705 #CJK UNIFIED IDEOGRAPH + {0xBF79, 0x7BE1}, //4706 #CJK UNIFIED IDEOGRAPH + {0xBF7A, 0x7BE9}, //4707 #CJK UNIFIED IDEOGRAPH + {0xBF7B, 0x7BE6}, //4708 #CJK UNIFIED IDEOGRAPH + {0xBF7C, 0x7CD5}, //4709 #CJK UNIFIED IDEOGRAPH + {0xBF7D, 0x7CD6}, //4710 #CJK UNIFIED IDEOGRAPH + {0xBF7E, 0x7E0A}, //4711 #CJK UNIFIED IDEOGRAPH + {0xBFA1, 0x7E11}, //4712 #CJK UNIFIED IDEOGRAPH + {0xBFA2, 0x7E08}, //4713 #CJK UNIFIED IDEOGRAPH + {0xBFA3, 0x7E1B}, //4714 #CJK UNIFIED IDEOGRAPH + {0xBFA4, 0x7E23}, //4715 #CJK UNIFIED IDEOGRAPH + {0xBFA5, 0x7E1E}, //4716 #CJK UNIFIED IDEOGRAPH + {0xBFA6, 0x7E1D}, //4717 #CJK UNIFIED IDEOGRAPH + {0xBFA7, 0x7E09}, //4718 #CJK UNIFIED IDEOGRAPH + {0xBFA8, 0x7E10}, //4719 #CJK UNIFIED IDEOGRAPH + {0xBFA9, 0x7F79}, //4720 #CJK UNIFIED IDEOGRAPH + {0xBFAA, 0x7FB2}, //4721 #CJK UNIFIED IDEOGRAPH + {0xBFAB, 0x7FF0}, //4722 #CJK UNIFIED IDEOGRAPH + {0xBFAC, 0x7FF1}, //4723 #CJK UNIFIED IDEOGRAPH + {0xBFAD, 0x7FEE}, //4724 #CJK UNIFIED IDEOGRAPH + {0xBFAE, 0x8028}, //4725 #CJK UNIFIED IDEOGRAPH + {0xBFAF, 0x81B3}, //4726 #CJK UNIFIED IDEOGRAPH + {0xBFB0, 0x81A9}, //4727 #CJK UNIFIED IDEOGRAPH + {0xBFB1, 0x81A8}, //4728 #CJK UNIFIED IDEOGRAPH + {0xBFB2, 0x81FB}, //4729 #CJK UNIFIED IDEOGRAPH + {0xBFB3, 0x8208}, //4730 #CJK UNIFIED IDEOGRAPH + {0xBFB4, 0x8258}, //4731 #CJK UNIFIED IDEOGRAPH + {0xBFB5, 0x8259}, //4732 #CJK UNIFIED IDEOGRAPH + {0xBFB6, 0x854A}, //4733 #CJK UNIFIED IDEOGRAPH + {0xBFB7, 0x8559}, //4734 #CJK UNIFIED IDEOGRAPH + {0xBFB8, 0x8548}, //4735 #CJK UNIFIED IDEOGRAPH + {0xBFB9, 0x8568}, //4736 #CJK UNIFIED IDEOGRAPH + {0xBFBA, 0x8569}, //4737 #CJK UNIFIED IDEOGRAPH + {0xBFBB, 0x8543}, //4738 #CJK UNIFIED IDEOGRAPH + {0xBFBC, 0x8549}, //4739 #CJK UNIFIED IDEOGRAPH + {0xBFBD, 0x856D}, //4740 #CJK UNIFIED IDEOGRAPH + {0xBFBE, 0x856A}, //4741 #CJK UNIFIED IDEOGRAPH + {0xBFBF, 0x855E}, //4742 #CJK UNIFIED IDEOGRAPH + {0xBFC0, 0x8783}, //4743 #CJK UNIFIED IDEOGRAPH + {0xBFC1, 0x879F}, //4744 #CJK UNIFIED IDEOGRAPH + {0xBFC2, 0x879E}, //4745 #CJK UNIFIED IDEOGRAPH + {0xBFC3, 0x87A2}, //4746 #CJK UNIFIED IDEOGRAPH + {0xBFC4, 0x878D}, //4747 #CJK UNIFIED IDEOGRAPH + {0xBFC5, 0x8861}, //4748 #CJK UNIFIED IDEOGRAPH + {0xBFC6, 0x892A}, //4749 #CJK UNIFIED IDEOGRAPH + {0xBFC7, 0x8932}, //4750 #CJK UNIFIED IDEOGRAPH + {0xBFC8, 0x8925}, //4751 #CJK UNIFIED IDEOGRAPH + {0xBFC9, 0x892B}, //4752 #CJK UNIFIED IDEOGRAPH + {0xBFCA, 0x8921}, //4753 #CJK UNIFIED IDEOGRAPH + {0xBFCB, 0x89AA}, //4754 #CJK UNIFIED IDEOGRAPH + {0xBFCC, 0x89A6}, //4755 #CJK UNIFIED IDEOGRAPH + {0xBFCD, 0x8AE6}, //4756 #CJK UNIFIED IDEOGRAPH + {0xBFCE, 0x8AFA}, //4757 #CJK UNIFIED IDEOGRAPH + {0xBFCF, 0x8AEB}, //4758 #CJK UNIFIED IDEOGRAPH + {0xBFD0, 0x8AF1}, //4759 #CJK UNIFIED IDEOGRAPH + {0xBFD1, 0x8B00}, //4760 #CJK UNIFIED IDEOGRAPH + {0xBFD2, 0x8ADC}, //4761 #CJK UNIFIED IDEOGRAPH + {0xBFD3, 0x8AE7}, //4762 #CJK UNIFIED IDEOGRAPH + {0xBFD4, 0x8AEE}, //4763 #CJK UNIFIED IDEOGRAPH + {0xBFD5, 0x8AFE}, //4764 #CJK UNIFIED IDEOGRAPH + {0xBFD6, 0x8B01}, //4765 #CJK UNIFIED IDEOGRAPH + {0xBFD7, 0x8B02}, //4766 #CJK UNIFIED IDEOGRAPH + {0xBFD8, 0x8AF7}, //4767 #CJK UNIFIED IDEOGRAPH + {0xBFD9, 0x8AED}, //4768 #CJK UNIFIED IDEOGRAPH + {0xBFDA, 0x8AF3}, //4769 #CJK UNIFIED IDEOGRAPH + {0xBFDB, 0x8AF6}, //4770 #CJK UNIFIED IDEOGRAPH + {0xBFDC, 0x8AFC}, //4771 #CJK UNIFIED IDEOGRAPH + {0xBFDD, 0x8C6B}, //4772 #CJK UNIFIED IDEOGRAPH + {0xBFDE, 0x8C6D}, //4773 #CJK UNIFIED IDEOGRAPH + {0xBFDF, 0x8C93}, //4774 #CJK UNIFIED IDEOGRAPH + {0xBFE0, 0x8CF4}, //4775 #CJK UNIFIED IDEOGRAPH + {0xBFE1, 0x8E44}, //4776 #CJK UNIFIED IDEOGRAPH + {0xBFE2, 0x8E31}, //4777 #CJK UNIFIED IDEOGRAPH + {0xBFE3, 0x8E34}, //4778 #CJK UNIFIED IDEOGRAPH + {0xBFE4, 0x8E42}, //4779 #CJK UNIFIED IDEOGRAPH + {0xBFE5, 0x8E39}, //4780 #CJK UNIFIED IDEOGRAPH + {0xBFE6, 0x8E35}, //4781 #CJK UNIFIED IDEOGRAPH + {0xBFE7, 0x8F3B}, //4782 #CJK UNIFIED IDEOGRAPH + {0xBFE8, 0x8F2F}, //4783 #CJK UNIFIED IDEOGRAPH + {0xBFE9, 0x8F38}, //4784 #CJK UNIFIED IDEOGRAPH + {0xBFEA, 0x8F33}, //4785 #CJK UNIFIED IDEOGRAPH + {0xBFEB, 0x8FA8}, //4786 #CJK UNIFIED IDEOGRAPH + {0xBFEC, 0x8FA6}, //4787 #CJK UNIFIED IDEOGRAPH + {0xBFED, 0x9075}, //4788 #CJK UNIFIED IDEOGRAPH + {0xBFEE, 0x9074}, //4789 #CJK UNIFIED IDEOGRAPH + {0xBFEF, 0x9078}, //4790 #CJK UNIFIED IDEOGRAPH + {0xBFF0, 0x9072}, //4791 #CJK UNIFIED IDEOGRAPH + {0xBFF1, 0x907C}, //4792 #CJK UNIFIED IDEOGRAPH + {0xBFF2, 0x907A}, //4793 #CJK UNIFIED IDEOGRAPH + {0xBFF3, 0x9134}, //4794 #CJK UNIFIED IDEOGRAPH + {0xBFF4, 0x9192}, //4795 #CJK UNIFIED IDEOGRAPH + {0xBFF5, 0x9320}, //4796 #CJK UNIFIED IDEOGRAPH + {0xBFF6, 0x9336}, //4797 #CJK UNIFIED IDEOGRAPH + {0xBFF7, 0x92F8}, //4798 #CJK UNIFIED IDEOGRAPH + {0xBFF8, 0x9333}, //4799 #CJK UNIFIED IDEOGRAPH + {0xBFF9, 0x932F}, //4800 #CJK UNIFIED IDEOGRAPH + {0xBFFA, 0x9322}, //4801 #CJK UNIFIED IDEOGRAPH + {0xBFFB, 0x92FC}, //4802 #CJK UNIFIED IDEOGRAPH + {0xBFFC, 0x932B}, //4803 #CJK UNIFIED IDEOGRAPH + {0xBFFD, 0x9304}, //4804 #CJK UNIFIED IDEOGRAPH + {0xBFFE, 0x931A}, //4805 #CJK UNIFIED IDEOGRAPH + {0xC040, 0x9310}, //4806 #CJK UNIFIED IDEOGRAPH + {0xC041, 0x9326}, //4807 #CJK UNIFIED IDEOGRAPH + {0xC042, 0x9321}, //4808 #CJK UNIFIED IDEOGRAPH + {0xC043, 0x9315}, //4809 #CJK UNIFIED IDEOGRAPH + {0xC044, 0x932E}, //4810 #CJK UNIFIED IDEOGRAPH + {0xC045, 0x9319}, //4811 #CJK UNIFIED IDEOGRAPH + {0xC046, 0x95BB}, //4812 #CJK UNIFIED IDEOGRAPH + {0xC047, 0x96A7}, //4813 #CJK UNIFIED IDEOGRAPH + {0xC048, 0x96A8}, //4814 #CJK UNIFIED IDEOGRAPH + {0xC049, 0x96AA}, //4815 #CJK UNIFIED IDEOGRAPH + {0xC04A, 0x96D5}, //4816 #CJK UNIFIED IDEOGRAPH + {0xC04B, 0x970E}, //4817 #CJK UNIFIED IDEOGRAPH + {0xC04C, 0x9711}, //4818 #CJK UNIFIED IDEOGRAPH + {0xC04D, 0x9716}, //4819 #CJK UNIFIED IDEOGRAPH + {0xC04E, 0x970D}, //4820 #CJK UNIFIED IDEOGRAPH + {0xC04F, 0x9713}, //4821 #CJK UNIFIED IDEOGRAPH + {0xC050, 0x970F}, //4822 #CJK UNIFIED IDEOGRAPH + {0xC051, 0x975B}, //4823 #CJK UNIFIED IDEOGRAPH + {0xC052, 0x975C}, //4824 #CJK UNIFIED IDEOGRAPH + {0xC053, 0x9766}, //4825 #CJK UNIFIED IDEOGRAPH + {0xC054, 0x9798}, //4826 #CJK UNIFIED IDEOGRAPH + {0xC055, 0x9830}, //4827 #CJK UNIFIED IDEOGRAPH + {0xC056, 0x9838}, //4828 #CJK UNIFIED IDEOGRAPH + {0xC057, 0x983B}, //4829 #CJK UNIFIED IDEOGRAPH + {0xC058, 0x9837}, //4830 #CJK UNIFIED IDEOGRAPH + {0xC059, 0x982D}, //4831 #CJK UNIFIED IDEOGRAPH + {0xC05A, 0x9839}, //4832 #CJK UNIFIED IDEOGRAPH + {0xC05B, 0x9824}, //4833 #CJK UNIFIED IDEOGRAPH + {0xC05C, 0x9910}, //4834 #CJK UNIFIED IDEOGRAPH + {0xC05D, 0x9928}, //4835 #CJK UNIFIED IDEOGRAPH + {0xC05E, 0x991E}, //4836 #CJK UNIFIED IDEOGRAPH + {0xC05F, 0x991B}, //4837 #CJK UNIFIED IDEOGRAPH + {0xC060, 0x9921}, //4838 #CJK UNIFIED IDEOGRAPH + {0xC061, 0x991A}, //4839 #CJK UNIFIED IDEOGRAPH + {0xC062, 0x99ED}, //4840 #CJK UNIFIED IDEOGRAPH + {0xC063, 0x99E2}, //4841 #CJK UNIFIED IDEOGRAPH + {0xC064, 0x99F1}, //4842 #CJK UNIFIED IDEOGRAPH + {0xC065, 0x9AB8}, //4843 #CJK UNIFIED IDEOGRAPH + {0xC066, 0x9ABC}, //4844 #CJK UNIFIED IDEOGRAPH + {0xC067, 0x9AFB}, //4845 #CJK UNIFIED IDEOGRAPH + {0xC068, 0x9AED}, //4846 #CJK UNIFIED IDEOGRAPH + {0xC069, 0x9B28}, //4847 #CJK UNIFIED IDEOGRAPH + {0xC06A, 0x9B91}, //4848 #CJK UNIFIED IDEOGRAPH + {0xC06B, 0x9D15}, //4849 #CJK UNIFIED IDEOGRAPH + {0xC06C, 0x9D23}, //4850 #CJK UNIFIED IDEOGRAPH + {0xC06D, 0x9D26}, //4851 #CJK UNIFIED IDEOGRAPH + {0xC06E, 0x9D28}, //4852 #CJK UNIFIED IDEOGRAPH + {0xC06F, 0x9D12}, //4853 #CJK UNIFIED IDEOGRAPH + {0xC070, 0x9D1B}, //4854 #CJK UNIFIED IDEOGRAPH + {0xC071, 0x9ED8}, //4855 #CJK UNIFIED IDEOGRAPH + {0xC072, 0x9ED4}, //4856 #CJK UNIFIED IDEOGRAPH + {0xC073, 0x9F8D}, //4857 #CJK UNIFIED IDEOGRAPH + {0xC074, 0x9F9C}, //4858 #CJK UNIFIED IDEOGRAPH + {0xC075, 0x512A}, //4859 #CJK UNIFIED IDEOGRAPH + {0xC076, 0x511F}, //4860 #CJK UNIFIED IDEOGRAPH + {0xC077, 0x5121}, //4861 #CJK UNIFIED IDEOGRAPH + {0xC078, 0x5132}, //4862 #CJK UNIFIED IDEOGRAPH + {0xC079, 0x52F5}, //4863 #CJK UNIFIED IDEOGRAPH + {0xC07A, 0x568E}, //4864 #CJK UNIFIED IDEOGRAPH + {0xC07B, 0x5680}, //4865 #CJK UNIFIED IDEOGRAPH + {0xC07C, 0x5690}, //4866 #CJK UNIFIED IDEOGRAPH + {0xC07D, 0x5685}, //4867 #CJK UNIFIED IDEOGRAPH + {0xC07E, 0x5687}, //4868 #CJK UNIFIED IDEOGRAPH + {0xC0A1, 0x568F}, //4869 #CJK UNIFIED IDEOGRAPH + {0xC0A2, 0x58D5}, //4870 #CJK UNIFIED IDEOGRAPH + {0xC0A3, 0x58D3}, //4871 #CJK UNIFIED IDEOGRAPH + {0xC0A4, 0x58D1}, //4872 #CJK UNIFIED IDEOGRAPH + {0xC0A5, 0x58CE}, //4873 #CJK UNIFIED IDEOGRAPH + {0xC0A6, 0x5B30}, //4874 #CJK UNIFIED IDEOGRAPH + {0xC0A7, 0x5B2A}, //4875 #CJK UNIFIED IDEOGRAPH + {0xC0A8, 0x5B24}, //4876 #CJK UNIFIED IDEOGRAPH + {0xC0A9, 0x5B7A}, //4877 #CJK UNIFIED IDEOGRAPH + {0xC0AA, 0x5C37}, //4878 #CJK UNIFIED IDEOGRAPH + {0xC0AB, 0x5C68}, //4879 #CJK UNIFIED IDEOGRAPH + {0xC0AC, 0x5DBC}, //4880 #CJK UNIFIED IDEOGRAPH + {0xC0AD, 0x5DBA}, //4881 #CJK UNIFIED IDEOGRAPH + {0xC0AE, 0x5DBD}, //4882 #CJK UNIFIED IDEOGRAPH + {0xC0AF, 0x5DB8}, //4883 #CJK UNIFIED IDEOGRAPH + {0xC0B0, 0x5E6B}, //4884 #CJK UNIFIED IDEOGRAPH + {0xC0B1, 0x5F4C}, //4885 #CJK UNIFIED IDEOGRAPH + {0xC0B2, 0x5FBD}, //4886 #CJK UNIFIED IDEOGRAPH + {0xC0B3, 0x61C9}, //4887 #CJK UNIFIED IDEOGRAPH + {0xC0B4, 0x61C2}, //4888 #CJK UNIFIED IDEOGRAPH + {0xC0B5, 0x61C7}, //4889 #CJK UNIFIED IDEOGRAPH + {0xC0B6, 0x61E6}, //4890 #CJK UNIFIED IDEOGRAPH + {0xC0B7, 0x61CB}, //4891 #CJK UNIFIED IDEOGRAPH + {0xC0B8, 0x6232}, //4892 #CJK UNIFIED IDEOGRAPH + {0xC0B9, 0x6234}, //4893 #CJK UNIFIED IDEOGRAPH + {0xC0BA, 0x64CE}, //4894 #CJK UNIFIED IDEOGRAPH + {0xC0BB, 0x64CA}, //4895 #CJK UNIFIED IDEOGRAPH + {0xC0BC, 0x64D8}, //4896 #CJK UNIFIED IDEOGRAPH + {0xC0BD, 0x64E0}, //4897 #CJK UNIFIED IDEOGRAPH + {0xC0BE, 0x64F0}, //4898 #CJK UNIFIED IDEOGRAPH + {0xC0BF, 0x64E6}, //4899 #CJK UNIFIED IDEOGRAPH + {0xC0C0, 0x64EC}, //4900 #CJK UNIFIED IDEOGRAPH + {0xC0C1, 0x64F1}, //4901 #CJK UNIFIED IDEOGRAPH + {0xC0C2, 0x64E2}, //4902 #CJK UNIFIED IDEOGRAPH + {0xC0C3, 0x64ED}, //4903 #CJK UNIFIED IDEOGRAPH + {0xC0C4, 0x6582}, //4904 #CJK UNIFIED IDEOGRAPH + {0xC0C5, 0x6583}, //4905 #CJK UNIFIED IDEOGRAPH + {0xC0C6, 0x66D9}, //4906 #CJK UNIFIED IDEOGRAPH + {0xC0C7, 0x66D6}, //4907 #CJK UNIFIED IDEOGRAPH + {0xC0C8, 0x6A80}, //4908 #CJK UNIFIED IDEOGRAPH + {0xC0C9, 0x6A94}, //4909 #CJK UNIFIED IDEOGRAPH + {0xC0CA, 0x6A84}, //4910 #CJK UNIFIED IDEOGRAPH + {0xC0CB, 0x6AA2}, //4911 #CJK UNIFIED IDEOGRAPH + {0xC0CC, 0x6A9C}, //4912 #CJK UNIFIED IDEOGRAPH + {0xC0CD, 0x6ADB}, //4913 #CJK UNIFIED IDEOGRAPH + {0xC0CE, 0x6AA3}, //4914 #CJK UNIFIED IDEOGRAPH + {0xC0CF, 0x6A7E}, //4915 #CJK UNIFIED IDEOGRAPH + {0xC0D0, 0x6A97}, //4916 #CJK UNIFIED IDEOGRAPH + {0xC0D1, 0x6A90}, //4917 #CJK UNIFIED IDEOGRAPH + {0xC0D2, 0x6AA0}, //4918 #CJK UNIFIED IDEOGRAPH + {0xC0D3, 0x6B5C}, //4919 #CJK UNIFIED IDEOGRAPH + {0xC0D4, 0x6BAE}, //4920 #CJK UNIFIED IDEOGRAPH + {0xC0D5, 0x6BDA}, //4921 #CJK UNIFIED IDEOGRAPH + {0xC0D6, 0x6C08}, //4922 #CJK UNIFIED IDEOGRAPH + {0xC0D7, 0x6FD8}, //4923 #CJK UNIFIED IDEOGRAPH + {0xC0D8, 0x6FF1}, //4924 #CJK UNIFIED IDEOGRAPH + {0xC0D9, 0x6FDF}, //4925 #CJK UNIFIED IDEOGRAPH + {0xC0DA, 0x6FE0}, //4926 #CJK UNIFIED IDEOGRAPH + {0xC0DB, 0x6FDB}, //4927 #CJK UNIFIED IDEOGRAPH + {0xC0DC, 0x6FE4}, //4928 #CJK UNIFIED IDEOGRAPH + {0xC0DD, 0x6FEB}, //4929 #CJK UNIFIED IDEOGRAPH + {0xC0DE, 0x6FEF}, //4930 #CJK UNIFIED IDEOGRAPH + {0xC0DF, 0x6F80}, //4931 #CJK UNIFIED IDEOGRAPH + {0xC0E0, 0x6FEC}, //4932 #CJK UNIFIED IDEOGRAPH + {0xC0E1, 0x6FE1}, //4933 #CJK UNIFIED IDEOGRAPH + {0xC0E2, 0x6FE9}, //4934 #CJK UNIFIED IDEOGRAPH + {0xC0E3, 0x6FD5}, //4935 #CJK UNIFIED IDEOGRAPH + {0xC0E4, 0x6FEE}, //4936 #CJK UNIFIED IDEOGRAPH + {0xC0E5, 0x6FF0}, //4937 #CJK UNIFIED IDEOGRAPH + {0xC0E6, 0x71E7}, //4938 #CJK UNIFIED IDEOGRAPH + {0xC0E7, 0x71DF}, //4939 #CJK UNIFIED IDEOGRAPH + {0xC0E8, 0x71EE}, //4940 #CJK UNIFIED IDEOGRAPH + {0xC0E9, 0x71E6}, //4941 #CJK UNIFIED IDEOGRAPH + {0xC0EA, 0x71E5}, //4942 #CJK UNIFIED IDEOGRAPH + {0xC0EB, 0x71ED}, //4943 #CJK UNIFIED IDEOGRAPH + {0xC0EC, 0x71EC}, //4944 #CJK UNIFIED IDEOGRAPH + {0xC0ED, 0x71F4}, //4945 #CJK UNIFIED IDEOGRAPH + {0xC0EE, 0x71E0}, //4946 #CJK UNIFIED IDEOGRAPH + {0xC0EF, 0x7235}, //4947 #CJK UNIFIED IDEOGRAPH + {0xC0F0, 0x7246}, //4948 #CJK UNIFIED IDEOGRAPH + {0xC0F1, 0x7370}, //4949 #CJK UNIFIED IDEOGRAPH + {0xC0F2, 0x7372}, //4950 #CJK UNIFIED IDEOGRAPH + {0xC0F3, 0x74A9}, //4951 #CJK UNIFIED IDEOGRAPH + {0xC0F4, 0x74B0}, //4952 #CJK UNIFIED IDEOGRAPH + {0xC0F5, 0x74A6}, //4953 #CJK UNIFIED IDEOGRAPH + {0xC0F6, 0x74A8}, //4954 #CJK UNIFIED IDEOGRAPH + {0xC0F7, 0x7646}, //4955 #CJK UNIFIED IDEOGRAPH + {0xC0F8, 0x7642}, //4956 #CJK UNIFIED IDEOGRAPH + {0xC0F9, 0x764C}, //4957 #CJK UNIFIED IDEOGRAPH + {0xC0FA, 0x76EA}, //4958 #CJK UNIFIED IDEOGRAPH + {0xC0FB, 0x77B3}, //4959 #CJK UNIFIED IDEOGRAPH + {0xC0FC, 0x77AA}, //4960 #CJK UNIFIED IDEOGRAPH + {0xC0FD, 0x77B0}, //4961 #CJK UNIFIED IDEOGRAPH + {0xC0FE, 0x77AC}, //4962 #CJK UNIFIED IDEOGRAPH + {0xC140, 0x77A7}, //4963 #CJK UNIFIED IDEOGRAPH + {0xC141, 0x77AD}, //4964 #CJK UNIFIED IDEOGRAPH + {0xC142, 0x77EF}, //4965 #CJK UNIFIED IDEOGRAPH + {0xC143, 0x78F7}, //4966 #CJK UNIFIED IDEOGRAPH + {0xC144, 0x78FA}, //4967 #CJK UNIFIED IDEOGRAPH + {0xC145, 0x78F4}, //4968 #CJK UNIFIED IDEOGRAPH + {0xC146, 0x78EF}, //4969 #CJK UNIFIED IDEOGRAPH + {0xC147, 0x7901}, //4970 #CJK UNIFIED IDEOGRAPH + {0xC148, 0x79A7}, //4971 #CJK UNIFIED IDEOGRAPH + {0xC149, 0x79AA}, //4972 #CJK UNIFIED IDEOGRAPH + {0xC14A, 0x7A57}, //4973 #CJK UNIFIED IDEOGRAPH + {0xC14B, 0x7ABF}, //4974 #CJK UNIFIED IDEOGRAPH + {0xC14C, 0x7C07}, //4975 #CJK UNIFIED IDEOGRAPH + {0xC14D, 0x7C0D}, //4976 #CJK UNIFIED IDEOGRAPH + {0xC14E, 0x7BFE}, //4977 #CJK UNIFIED IDEOGRAPH + {0xC14F, 0x7BF7}, //4978 #CJK UNIFIED IDEOGRAPH + {0xC150, 0x7C0C}, //4979 #CJK UNIFIED IDEOGRAPH + {0xC151, 0x7BE0}, //4980 #CJK UNIFIED IDEOGRAPH + {0xC152, 0x7CE0}, //4981 #CJK UNIFIED IDEOGRAPH + {0xC153, 0x7CDC}, //4982 #CJK UNIFIED IDEOGRAPH + {0xC154, 0x7CDE}, //4983 #CJK UNIFIED IDEOGRAPH + {0xC155, 0x7CE2}, //4984 #CJK UNIFIED IDEOGRAPH + {0xC156, 0x7CDF}, //4985 #CJK UNIFIED IDEOGRAPH + {0xC157, 0x7CD9}, //4986 #CJK UNIFIED IDEOGRAPH + {0xC158, 0x7CDD}, //4987 #CJK UNIFIED IDEOGRAPH + {0xC159, 0x7E2E}, //4988 #CJK UNIFIED IDEOGRAPH + {0xC15A, 0x7E3E}, //4989 #CJK UNIFIED IDEOGRAPH + {0xC15B, 0x7E46}, //4990 #CJK UNIFIED IDEOGRAPH + {0xC15C, 0x7E37}, //4991 #CJK UNIFIED IDEOGRAPH + {0xC15D, 0x7E32}, //4992 #CJK UNIFIED IDEOGRAPH + {0xC15E, 0x7E43}, //4993 #CJK UNIFIED IDEOGRAPH + {0xC15F, 0x7E2B}, //4994 #CJK UNIFIED IDEOGRAPH + {0xC160, 0x7E3D}, //4995 #CJK UNIFIED IDEOGRAPH + {0xC161, 0x7E31}, //4996 #CJK UNIFIED IDEOGRAPH + {0xC162, 0x7E45}, //4997 #CJK UNIFIED IDEOGRAPH + {0xC163, 0x7E41}, //4998 #CJK UNIFIED IDEOGRAPH + {0xC164, 0x7E34}, //4999 #CJK UNIFIED IDEOGRAPH + {0xC165, 0x7E39}, //5000 #CJK UNIFIED IDEOGRAPH + {0xC166, 0x7E48}, //5001 #CJK UNIFIED IDEOGRAPH + {0xC167, 0x7E35}, //5002 #CJK UNIFIED IDEOGRAPH + {0xC168, 0x7E3F}, //5003 #CJK UNIFIED IDEOGRAPH + {0xC169, 0x7E2F}, //5004 #CJK UNIFIED IDEOGRAPH + {0xC16A, 0x7F44}, //5005 #CJK UNIFIED IDEOGRAPH + {0xC16B, 0x7FF3}, //5006 #CJK UNIFIED IDEOGRAPH + {0xC16C, 0x7FFC}, //5007 #CJK UNIFIED IDEOGRAPH + {0xC16D, 0x8071}, //5008 #CJK UNIFIED IDEOGRAPH + {0xC16E, 0x8072}, //5009 #CJK UNIFIED IDEOGRAPH + {0xC16F, 0x8070}, //5010 #CJK UNIFIED IDEOGRAPH + {0xC170, 0x806F}, //5011 #CJK UNIFIED IDEOGRAPH + {0xC171, 0x8073}, //5012 #CJK UNIFIED IDEOGRAPH + {0xC172, 0x81C6}, //5013 #CJK UNIFIED IDEOGRAPH + {0xC173, 0x81C3}, //5014 #CJK UNIFIED IDEOGRAPH + {0xC174, 0x81BA}, //5015 #CJK UNIFIED IDEOGRAPH + {0xC175, 0x81C2}, //5016 #CJK UNIFIED IDEOGRAPH + {0xC176, 0x81C0}, //5017 #CJK UNIFIED IDEOGRAPH + {0xC177, 0x81BF}, //5018 #CJK UNIFIED IDEOGRAPH + {0xC178, 0x81BD}, //5019 #CJK UNIFIED IDEOGRAPH + {0xC179, 0x81C9}, //5020 #CJK UNIFIED IDEOGRAPH + {0xC17A, 0x81BE}, //5021 #CJK UNIFIED IDEOGRAPH + {0xC17B, 0x81E8}, //5022 #CJK UNIFIED IDEOGRAPH + {0xC17C, 0x8209}, //5023 #CJK UNIFIED IDEOGRAPH + {0xC17D, 0x8271}, //5024 #CJK UNIFIED IDEOGRAPH + {0xC17E, 0x85AA}, //5025 #CJK UNIFIED IDEOGRAPH + {0xC1A1, 0x8584}, //5026 #CJK UNIFIED IDEOGRAPH + {0xC1A2, 0x857E}, //5027 #CJK UNIFIED IDEOGRAPH + {0xC1A3, 0x859C}, //5028 #CJK UNIFIED IDEOGRAPH + {0xC1A4, 0x8591}, //5029 #CJK UNIFIED IDEOGRAPH + {0xC1A5, 0x8594}, //5030 #CJK UNIFIED IDEOGRAPH + {0xC1A6, 0x85AF}, //5031 #CJK UNIFIED IDEOGRAPH + {0xC1A7, 0x859B}, //5032 #CJK UNIFIED IDEOGRAPH + {0xC1A8, 0x8587}, //5033 #CJK UNIFIED IDEOGRAPH + {0xC1A9, 0x85A8}, //5034 #CJK UNIFIED IDEOGRAPH + {0xC1AA, 0x858A}, //5035 #CJK UNIFIED IDEOGRAPH + {0xC1AB, 0x8667}, //5036 #CJK UNIFIED IDEOGRAPH + {0xC1AC, 0x87C0}, //5037 #CJK UNIFIED IDEOGRAPH + {0xC1AD, 0x87D1}, //5038 #CJK UNIFIED IDEOGRAPH + {0xC1AE, 0x87B3}, //5039 #CJK UNIFIED IDEOGRAPH + {0xC1AF, 0x87D2}, //5040 #CJK UNIFIED IDEOGRAPH + {0xC1B0, 0x87C6}, //5041 #CJK UNIFIED IDEOGRAPH + {0xC1B1, 0x87AB}, //5042 #CJK UNIFIED IDEOGRAPH + {0xC1B2, 0x87BB}, //5043 #CJK UNIFIED IDEOGRAPH + {0xC1B3, 0x87BA}, //5044 #CJK UNIFIED IDEOGRAPH + {0xC1B4, 0x87C8}, //5045 #CJK UNIFIED IDEOGRAPH + {0xC1B5, 0x87CB}, //5046 #CJK UNIFIED IDEOGRAPH + {0xC1B6, 0x893B}, //5047 #CJK UNIFIED IDEOGRAPH + {0xC1B7, 0x8936}, //5048 #CJK UNIFIED IDEOGRAPH + {0xC1B8, 0x8944}, //5049 #CJK UNIFIED IDEOGRAPH + {0xC1B9, 0x8938}, //5050 #CJK UNIFIED IDEOGRAPH + {0xC1BA, 0x893D}, //5051 #CJK UNIFIED IDEOGRAPH + {0xC1BB, 0x89AC}, //5052 #CJK UNIFIED IDEOGRAPH + {0xC1BC, 0x8B0E}, //5053 #CJK UNIFIED IDEOGRAPH + {0xC1BD, 0x8B17}, //5054 #CJK UNIFIED IDEOGRAPH + {0xC1BE, 0x8B19}, //5055 #CJK UNIFIED IDEOGRAPH + {0xC1BF, 0x8B1B}, //5056 #CJK UNIFIED IDEOGRAPH + {0xC1C0, 0x8B0A}, //5057 #CJK UNIFIED IDEOGRAPH + {0xC1C1, 0x8B20}, //5058 #CJK UNIFIED IDEOGRAPH + {0xC1C2, 0x8B1D}, //5059 #CJK UNIFIED IDEOGRAPH + {0xC1C3, 0x8B04}, //5060 #CJK UNIFIED IDEOGRAPH + {0xC1C4, 0x8B10}, //5061 #CJK UNIFIED IDEOGRAPH + {0xC1C5, 0x8C41}, //5062 #CJK UNIFIED IDEOGRAPH + {0xC1C6, 0x8C3F}, //5063 #CJK UNIFIED IDEOGRAPH + {0xC1C7, 0x8C73}, //5064 #CJK UNIFIED IDEOGRAPH + {0xC1C8, 0x8CFA}, //5065 #CJK UNIFIED IDEOGRAPH + {0xC1C9, 0x8CFD}, //5066 #CJK UNIFIED IDEOGRAPH + {0xC1CA, 0x8CFC}, //5067 #CJK UNIFIED IDEOGRAPH + {0xC1CB, 0x8CF8}, //5068 #CJK UNIFIED IDEOGRAPH + {0xC1CC, 0x8CFB}, //5069 #CJK UNIFIED IDEOGRAPH + {0xC1CD, 0x8DA8}, //5070 #CJK UNIFIED IDEOGRAPH + {0xC1CE, 0x8E49}, //5071 #CJK UNIFIED IDEOGRAPH + {0xC1CF, 0x8E4B}, //5072 #CJK UNIFIED IDEOGRAPH + {0xC1D0, 0x8E48}, //5073 #CJK UNIFIED IDEOGRAPH + {0xC1D1, 0x8E4A}, //5074 #CJK UNIFIED IDEOGRAPH + {0xC1D2, 0x8F44}, //5075 #CJK UNIFIED IDEOGRAPH + {0xC1D3, 0x8F3E}, //5076 #CJK UNIFIED IDEOGRAPH + {0xC1D4, 0x8F42}, //5077 #CJK UNIFIED IDEOGRAPH + {0xC1D5, 0x8F45}, //5078 #CJK UNIFIED IDEOGRAPH + {0xC1D6, 0x8F3F}, //5079 #CJK UNIFIED IDEOGRAPH + {0xC1D7, 0x907F}, //5080 #CJK UNIFIED IDEOGRAPH + {0xC1D8, 0x907D}, //5081 #CJK UNIFIED IDEOGRAPH + {0xC1D9, 0x9084}, //5082 #CJK UNIFIED IDEOGRAPH + {0xC1DA, 0x9081}, //5083 #CJK UNIFIED IDEOGRAPH + {0xC1DB, 0x9082}, //5084 #CJK UNIFIED IDEOGRAPH + {0xC1DC, 0x9080}, //5085 #CJK UNIFIED IDEOGRAPH + {0xC1DD, 0x9139}, //5086 #CJK UNIFIED IDEOGRAPH + {0xC1DE, 0x91A3}, //5087 #CJK UNIFIED IDEOGRAPH + {0xC1DF, 0x919E}, //5088 #CJK UNIFIED IDEOGRAPH + {0xC1E0, 0x919C}, //5089 #CJK UNIFIED IDEOGRAPH + {0xC1E1, 0x934D}, //5090 #CJK UNIFIED IDEOGRAPH + {0xC1E2, 0x9382}, //5091 #CJK UNIFIED IDEOGRAPH + {0xC1E3, 0x9328}, //5092 #CJK UNIFIED IDEOGRAPH + {0xC1E4, 0x9375}, //5093 #CJK UNIFIED IDEOGRAPH + {0xC1E5, 0x934A}, //5094 #CJK UNIFIED IDEOGRAPH + {0xC1E6, 0x9365}, //5095 #CJK UNIFIED IDEOGRAPH + {0xC1E7, 0x934B}, //5096 #CJK UNIFIED IDEOGRAPH + {0xC1E8, 0x9318}, //5097 #CJK UNIFIED IDEOGRAPH + {0xC1E9, 0x937E}, //5098 #CJK UNIFIED IDEOGRAPH + {0xC1EA, 0x936C}, //5099 #CJK UNIFIED IDEOGRAPH + {0xC1EB, 0x935B}, //5100 #CJK UNIFIED IDEOGRAPH + {0xC1EC, 0x9370}, //5101 #CJK UNIFIED IDEOGRAPH + {0xC1ED, 0x935A}, //5102 #CJK UNIFIED IDEOGRAPH + {0xC1EE, 0x9354}, //5103 #CJK UNIFIED IDEOGRAPH + {0xC1EF, 0x95CA}, //5104 #CJK UNIFIED IDEOGRAPH + {0xC1F0, 0x95CB}, //5105 #CJK UNIFIED IDEOGRAPH + {0xC1F1, 0x95CC}, //5106 #CJK UNIFIED IDEOGRAPH + {0xC1F2, 0x95C8}, //5107 #CJK UNIFIED IDEOGRAPH + {0xC1F3, 0x95C6}, //5108 #CJK UNIFIED IDEOGRAPH + {0xC1F4, 0x96B1}, //5109 #CJK UNIFIED IDEOGRAPH + {0xC1F5, 0x96B8}, //5110 #CJK UNIFIED IDEOGRAPH + {0xC1F6, 0x96D6}, //5111 #CJK UNIFIED IDEOGRAPH + {0xC1F7, 0x971C}, //5112 #CJK UNIFIED IDEOGRAPH + {0xC1F8, 0x971E}, //5113 #CJK UNIFIED IDEOGRAPH + {0xC1F9, 0x97A0}, //5114 #CJK UNIFIED IDEOGRAPH + {0xC1FA, 0x97D3}, //5115 #CJK UNIFIED IDEOGRAPH + {0xC1FB, 0x9846}, //5116 #CJK UNIFIED IDEOGRAPH + {0xC1FC, 0x98B6}, //5117 #CJK UNIFIED IDEOGRAPH + {0xC1FD, 0x9935}, //5118 #CJK UNIFIED IDEOGRAPH + {0xC1FE, 0x9A01}, //5119 #CJK UNIFIED IDEOGRAPH + {0xC240, 0x99FF}, //5120 #CJK UNIFIED IDEOGRAPH + {0xC241, 0x9BAE}, //5121 #CJK UNIFIED IDEOGRAPH + {0xC242, 0x9BAB}, //5122 #CJK UNIFIED IDEOGRAPH + {0xC243, 0x9BAA}, //5123 #CJK UNIFIED IDEOGRAPH + {0xC244, 0x9BAD}, //5124 #CJK UNIFIED IDEOGRAPH + {0xC245, 0x9D3B}, //5125 #CJK UNIFIED IDEOGRAPH + {0xC246, 0x9D3F}, //5126 #CJK UNIFIED IDEOGRAPH + {0xC247, 0x9E8B}, //5127 #CJK UNIFIED IDEOGRAPH + {0xC248, 0x9ECF}, //5128 #CJK UNIFIED IDEOGRAPH + {0xC249, 0x9EDE}, //5129 #CJK UNIFIED IDEOGRAPH + {0xC24A, 0x9EDC}, //5130 #CJK UNIFIED IDEOGRAPH + {0xC24B, 0x9EDD}, //5131 #CJK UNIFIED IDEOGRAPH + {0xC24C, 0x9EDB}, //5132 #CJK UNIFIED IDEOGRAPH + {0xC24D, 0x9F3E}, //5133 #CJK UNIFIED IDEOGRAPH + {0xC24E, 0x9F4B}, //5134 #CJK UNIFIED IDEOGRAPH + {0xC24F, 0x53E2}, //5135 #CJK UNIFIED IDEOGRAPH + {0xC250, 0x5695}, //5136 #CJK UNIFIED IDEOGRAPH + {0xC251, 0x56AE}, //5137 #CJK UNIFIED IDEOGRAPH + {0xC252, 0x58D9}, //5138 #CJK UNIFIED IDEOGRAPH + {0xC253, 0x58D8}, //5139 #CJK UNIFIED IDEOGRAPH + {0xC254, 0x5B38}, //5140 #CJK UNIFIED IDEOGRAPH + {0xC255, 0x5F5D}, //5141 #CJK UNIFIED IDEOGRAPH + {0xC256, 0x61E3}, //5142 #CJK UNIFIED IDEOGRAPH + {0xC257, 0x6233}, //5143 #CJK UNIFIED IDEOGRAPH + {0xC258, 0x64F4}, //5144 #CJK UNIFIED IDEOGRAPH + {0xC259, 0x64F2}, //5145 #CJK UNIFIED IDEOGRAPH + {0xC25A, 0x64FE}, //5146 #CJK UNIFIED IDEOGRAPH + {0xC25B, 0x6506}, //5147 #CJK UNIFIED IDEOGRAPH + {0xC25C, 0x64FA}, //5148 #CJK UNIFIED IDEOGRAPH + {0xC25D, 0x64FB}, //5149 #CJK UNIFIED IDEOGRAPH + {0xC25E, 0x64F7}, //5150 #CJK UNIFIED IDEOGRAPH + {0xC25F, 0x65B7}, //5151 #CJK UNIFIED IDEOGRAPH + {0xC260, 0x66DC}, //5152 #CJK UNIFIED IDEOGRAPH + {0xC261, 0x6726}, //5153 #CJK UNIFIED IDEOGRAPH + {0xC262, 0x6AB3}, //5154 #CJK UNIFIED IDEOGRAPH + {0xC263, 0x6AAC}, //5155 #CJK UNIFIED IDEOGRAPH + {0xC264, 0x6AC3}, //5156 #CJK UNIFIED IDEOGRAPH + {0xC265, 0x6ABB}, //5157 #CJK UNIFIED IDEOGRAPH + {0xC266, 0x6AB8}, //5158 #CJK UNIFIED IDEOGRAPH + {0xC267, 0x6AC2}, //5159 #CJK UNIFIED IDEOGRAPH + {0xC268, 0x6AAE}, //5160 #CJK UNIFIED IDEOGRAPH + {0xC269, 0x6AAF}, //5161 #CJK UNIFIED IDEOGRAPH + {0xC26A, 0x6B5F}, //5162 #CJK UNIFIED IDEOGRAPH + {0xC26B, 0x6B78}, //5163 #CJK UNIFIED IDEOGRAPH + {0xC26C, 0x6BAF}, //5164 #CJK UNIFIED IDEOGRAPH + {0xC26D, 0x7009}, //5165 #CJK UNIFIED IDEOGRAPH + {0xC26E, 0x700B}, //5166 #CJK UNIFIED IDEOGRAPH + {0xC26F, 0x6FFE}, //5167 #CJK UNIFIED IDEOGRAPH + {0xC270, 0x7006}, //5168 #CJK UNIFIED IDEOGRAPH + {0xC271, 0x6FFA}, //5169 #CJK UNIFIED IDEOGRAPH + {0xC272, 0x7011}, //5170 #CJK UNIFIED IDEOGRAPH + {0xC273, 0x700F}, //5171 #CJK UNIFIED IDEOGRAPH + {0xC274, 0x71FB}, //5172 #CJK UNIFIED IDEOGRAPH + {0xC275, 0x71FC}, //5173 #CJK UNIFIED IDEOGRAPH + {0xC276, 0x71FE}, //5174 #CJK UNIFIED IDEOGRAPH + {0xC277, 0x71F8}, //5175 #CJK UNIFIED IDEOGRAPH + {0xC278, 0x7377}, //5176 #CJK UNIFIED IDEOGRAPH + {0xC279, 0x7375}, //5177 #CJK UNIFIED IDEOGRAPH + {0xC27A, 0x74A7}, //5178 #CJK UNIFIED IDEOGRAPH + {0xC27B, 0x74BF}, //5179 #CJK UNIFIED IDEOGRAPH + {0xC27C, 0x7515}, //5180 #CJK UNIFIED IDEOGRAPH + {0xC27D, 0x7656}, //5181 #CJK UNIFIED IDEOGRAPH + {0xC27E, 0x7658}, //5182 #CJK UNIFIED IDEOGRAPH + {0xC2A1, 0x7652}, //5183 #CJK UNIFIED IDEOGRAPH + {0xC2A2, 0x77BD}, //5184 #CJK UNIFIED IDEOGRAPH + {0xC2A3, 0x77BF}, //5185 #CJK UNIFIED IDEOGRAPH + {0xC2A4, 0x77BB}, //5186 #CJK UNIFIED IDEOGRAPH + {0xC2A5, 0x77BC}, //5187 #CJK UNIFIED IDEOGRAPH + {0xC2A6, 0x790E}, //5188 #CJK UNIFIED IDEOGRAPH + {0xC2A7, 0x79AE}, //5189 #CJK UNIFIED IDEOGRAPH + {0xC2A8, 0x7A61}, //5190 #CJK UNIFIED IDEOGRAPH + {0xC2A9, 0x7A62}, //5191 #CJK UNIFIED IDEOGRAPH + {0xC2AA, 0x7A60}, //5192 #CJK UNIFIED IDEOGRAPH + {0xC2AB, 0x7AC4}, //5193 #CJK UNIFIED IDEOGRAPH + {0xC2AC, 0x7AC5}, //5194 #CJK UNIFIED IDEOGRAPH + {0xC2AD, 0x7C2B}, //5195 #CJK UNIFIED IDEOGRAPH + {0xC2AE, 0x7C27}, //5196 #CJK UNIFIED IDEOGRAPH + {0xC2AF, 0x7C2A}, //5197 #CJK UNIFIED IDEOGRAPH + {0xC2B0, 0x7C1E}, //5198 #CJK UNIFIED IDEOGRAPH + {0xC2B1, 0x7C23}, //5199 #CJK UNIFIED IDEOGRAPH + {0xC2B2, 0x7C21}, //5200 #CJK UNIFIED IDEOGRAPH + {0xC2B3, 0x7CE7}, //5201 #CJK UNIFIED IDEOGRAPH + {0xC2B4, 0x7E54}, //5202 #CJK UNIFIED IDEOGRAPH + {0xC2B5, 0x7E55}, //5203 #CJK UNIFIED IDEOGRAPH + {0xC2B6, 0x7E5E}, //5204 #CJK UNIFIED IDEOGRAPH + {0xC2B7, 0x7E5A}, //5205 #CJK UNIFIED IDEOGRAPH + {0xC2B8, 0x7E61}, //5206 #CJK UNIFIED IDEOGRAPH + {0xC2B9, 0x7E52}, //5207 #CJK UNIFIED IDEOGRAPH + {0xC2BA, 0x7E59}, //5208 #CJK UNIFIED IDEOGRAPH + {0xC2BB, 0x7F48}, //5209 #CJK UNIFIED IDEOGRAPH + {0xC2BC, 0x7FF9}, //5210 #CJK UNIFIED IDEOGRAPH + {0xC2BD, 0x7FFB}, //5211 #CJK UNIFIED IDEOGRAPH + {0xC2BE, 0x8077}, //5212 #CJK UNIFIED IDEOGRAPH + {0xC2BF, 0x8076}, //5213 #CJK UNIFIED IDEOGRAPH + {0xC2C0, 0x81CD}, //5214 #CJK UNIFIED IDEOGRAPH + {0xC2C1, 0x81CF}, //5215 #CJK UNIFIED IDEOGRAPH + {0xC2C2, 0x820A}, //5216 #CJK UNIFIED IDEOGRAPH + {0xC2C3, 0x85CF}, //5217 #CJK UNIFIED IDEOGRAPH + {0xC2C4, 0x85A9}, //5218 #CJK UNIFIED IDEOGRAPH + {0xC2C5, 0x85CD}, //5219 #CJK UNIFIED IDEOGRAPH + {0xC2C6, 0x85D0}, //5220 #CJK UNIFIED IDEOGRAPH + {0xC2C7, 0x85C9}, //5221 #CJK UNIFIED IDEOGRAPH + {0xC2C8, 0x85B0}, //5222 #CJK UNIFIED IDEOGRAPH + {0xC2C9, 0x85BA}, //5223 #CJK UNIFIED IDEOGRAPH + {0xC2CA, 0x85B9}, //5224 #CJK UNIFIED IDEOGRAPH + {0xC2CB, 0x85A6}, //5225 #CJK UNIFIED IDEOGRAPH + {0xC2CC, 0x87EF}, //5226 #CJK UNIFIED IDEOGRAPH + {0xC2CD, 0x87EC}, //5227 #CJK UNIFIED IDEOGRAPH + {0xC2CE, 0x87F2}, //5228 #CJK UNIFIED IDEOGRAPH + {0xC2CF, 0x87E0}, //5229 #CJK UNIFIED IDEOGRAPH + {0xC2D0, 0x8986}, //5230 #CJK UNIFIED IDEOGRAPH + {0xC2D1, 0x89B2}, //5231 #CJK UNIFIED IDEOGRAPH + {0xC2D2, 0x89F4}, //5232 #CJK UNIFIED IDEOGRAPH + {0xC2D3, 0x8B28}, //5233 #CJK UNIFIED IDEOGRAPH + {0xC2D4, 0x8B39}, //5234 #CJK UNIFIED IDEOGRAPH + {0xC2D5, 0x8B2C}, //5235 #CJK UNIFIED IDEOGRAPH + {0xC2D6, 0x8B2B}, //5236 #CJK UNIFIED IDEOGRAPH + {0xC2D7, 0x8C50}, //5237 #CJK UNIFIED IDEOGRAPH + {0xC2D8, 0x8D05}, //5238 #CJK UNIFIED IDEOGRAPH + {0xC2D9, 0x8E59}, //5239 #CJK UNIFIED IDEOGRAPH + {0xC2DA, 0x8E63}, //5240 #CJK UNIFIED IDEOGRAPH + {0xC2DB, 0x8E66}, //5241 #CJK UNIFIED IDEOGRAPH + {0xC2DC, 0x8E64}, //5242 #CJK UNIFIED IDEOGRAPH + {0xC2DD, 0x8E5F}, //5243 #CJK UNIFIED IDEOGRAPH + {0xC2DE, 0x8E55}, //5244 #CJK UNIFIED IDEOGRAPH + {0xC2DF, 0x8EC0}, //5245 #CJK UNIFIED IDEOGRAPH + {0xC2E0, 0x8F49}, //5246 #CJK UNIFIED IDEOGRAPH + {0xC2E1, 0x8F4D}, //5247 #CJK UNIFIED IDEOGRAPH + {0xC2E2, 0x9087}, //5248 #CJK UNIFIED IDEOGRAPH + {0xC2E3, 0x9083}, //5249 #CJK UNIFIED IDEOGRAPH + {0xC2E4, 0x9088}, //5250 #CJK UNIFIED IDEOGRAPH + {0xC2E5, 0x91AB}, //5251 #CJK UNIFIED IDEOGRAPH + {0xC2E6, 0x91AC}, //5252 #CJK UNIFIED IDEOGRAPH + {0xC2E7, 0x91D0}, //5253 #CJK UNIFIED IDEOGRAPH + {0xC2E8, 0x9394}, //5254 #CJK UNIFIED IDEOGRAPH + {0xC2E9, 0x938A}, //5255 #CJK UNIFIED IDEOGRAPH + {0xC2EA, 0x9396}, //5256 #CJK UNIFIED IDEOGRAPH + {0xC2EB, 0x93A2}, //5257 #CJK UNIFIED IDEOGRAPH + {0xC2EC, 0x93B3}, //5258 #CJK UNIFIED IDEOGRAPH + {0xC2ED, 0x93AE}, //5259 #CJK UNIFIED IDEOGRAPH + {0xC2EE, 0x93AC}, //5260 #CJK UNIFIED IDEOGRAPH + {0xC2EF, 0x93B0}, //5261 #CJK UNIFIED IDEOGRAPH + {0xC2F0, 0x9398}, //5262 #CJK UNIFIED IDEOGRAPH + {0xC2F1, 0x939A}, //5263 #CJK UNIFIED IDEOGRAPH + {0xC2F2, 0x9397}, //5264 #CJK UNIFIED IDEOGRAPH + {0xC2F3, 0x95D4}, //5265 #CJK UNIFIED IDEOGRAPH + {0xC2F4, 0x95D6}, //5266 #CJK UNIFIED IDEOGRAPH + {0xC2F5, 0x95D0}, //5267 #CJK UNIFIED IDEOGRAPH + {0xC2F6, 0x95D5}, //5268 #CJK UNIFIED IDEOGRAPH + {0xC2F7, 0x96E2}, //5269 #CJK UNIFIED IDEOGRAPH + {0xC2F8, 0x96DC}, //5270 #CJK UNIFIED IDEOGRAPH + {0xC2F9, 0x96D9}, //5271 #CJK UNIFIED IDEOGRAPH + {0xC2FA, 0x96DB}, //5272 #CJK UNIFIED IDEOGRAPH + {0xC2FB, 0x96DE}, //5273 #CJK UNIFIED IDEOGRAPH + {0xC2FC, 0x9724}, //5274 #CJK UNIFIED IDEOGRAPH + {0xC2FD, 0x97A3}, //5275 #CJK UNIFIED IDEOGRAPH + {0xC2FE, 0x97A6}, //5276 #CJK UNIFIED IDEOGRAPH + {0xC340, 0x97AD}, //5277 #CJK UNIFIED IDEOGRAPH + {0xC341, 0x97F9}, //5278 #CJK UNIFIED IDEOGRAPH + {0xC342, 0x984D}, //5279 #CJK UNIFIED IDEOGRAPH + {0xC343, 0x984F}, //5280 #CJK UNIFIED IDEOGRAPH + {0xC344, 0x984C}, //5281 #CJK UNIFIED IDEOGRAPH + {0xC345, 0x984E}, //5282 #CJK UNIFIED IDEOGRAPH + {0xC346, 0x9853}, //5283 #CJK UNIFIED IDEOGRAPH + {0xC347, 0x98BA}, //5284 #CJK UNIFIED IDEOGRAPH + {0xC348, 0x993E}, //5285 #CJK UNIFIED IDEOGRAPH + {0xC349, 0x993F}, //5286 #CJK UNIFIED IDEOGRAPH + {0xC34A, 0x993D}, //5287 #CJK UNIFIED IDEOGRAPH + {0xC34B, 0x992E}, //5288 #CJK UNIFIED IDEOGRAPH + {0xC34C, 0x99A5}, //5289 #CJK UNIFIED IDEOGRAPH + {0xC34D, 0x9A0E}, //5290 #CJK UNIFIED IDEOGRAPH + {0xC34E, 0x9AC1}, //5291 #CJK UNIFIED IDEOGRAPH + {0xC34F, 0x9B03}, //5292 #CJK UNIFIED IDEOGRAPH + {0xC350, 0x9B06}, //5293 #CJK UNIFIED IDEOGRAPH + {0xC351, 0x9B4F}, //5294 #CJK UNIFIED IDEOGRAPH + {0xC352, 0x9B4E}, //5295 #CJK UNIFIED IDEOGRAPH + {0xC353, 0x9B4D}, //5296 #CJK UNIFIED IDEOGRAPH + {0xC354, 0x9BCA}, //5297 #CJK UNIFIED IDEOGRAPH + {0xC355, 0x9BC9}, //5298 #CJK UNIFIED IDEOGRAPH + {0xC356, 0x9BFD}, //5299 #CJK UNIFIED IDEOGRAPH + {0xC357, 0x9BC8}, //5300 #CJK UNIFIED IDEOGRAPH + {0xC358, 0x9BC0}, //5301 #CJK UNIFIED IDEOGRAPH + {0xC359, 0x9D51}, //5302 #CJK UNIFIED IDEOGRAPH + {0xC35A, 0x9D5D}, //5303 #CJK UNIFIED IDEOGRAPH + {0xC35B, 0x9D60}, //5304 #CJK UNIFIED IDEOGRAPH + {0xC35C, 0x9EE0}, //5305 #CJK UNIFIED IDEOGRAPH + {0xC35D, 0x9F15}, //5306 #CJK UNIFIED IDEOGRAPH + {0xC35E, 0x9F2C}, //5307 #CJK UNIFIED IDEOGRAPH + {0xC35F, 0x5133}, //5308 #CJK UNIFIED IDEOGRAPH + {0xC360, 0x56A5}, //5309 #CJK UNIFIED IDEOGRAPH + {0xC361, 0x58DE}, //5310 #CJK UNIFIED IDEOGRAPH + {0xC362, 0x58DF}, //5311 #CJK UNIFIED IDEOGRAPH + {0xC363, 0x58E2}, //5312 #CJK UNIFIED IDEOGRAPH + {0xC364, 0x5BF5}, //5313 #CJK UNIFIED IDEOGRAPH + {0xC365, 0x9F90}, //5314 #CJK UNIFIED IDEOGRAPH + {0xC366, 0x5EEC}, //5315 #CJK UNIFIED IDEOGRAPH + {0xC367, 0x61F2}, //5316 #CJK UNIFIED IDEOGRAPH + {0xC368, 0x61F7}, //5317 #CJK UNIFIED IDEOGRAPH + {0xC369, 0x61F6}, //5318 #CJK UNIFIED IDEOGRAPH + {0xC36A, 0x61F5}, //5319 #CJK UNIFIED IDEOGRAPH + {0xC36B, 0x6500}, //5320 #CJK UNIFIED IDEOGRAPH + {0xC36C, 0x650F}, //5321 #CJK UNIFIED IDEOGRAPH + {0xC36D, 0x66E0}, //5322 #CJK UNIFIED IDEOGRAPH + {0xC36E, 0x66DD}, //5323 #CJK UNIFIED IDEOGRAPH + {0xC36F, 0x6AE5}, //5324 #CJK UNIFIED IDEOGRAPH + {0xC370, 0x6ADD}, //5325 #CJK UNIFIED IDEOGRAPH + {0xC371, 0x6ADA}, //5326 #CJK UNIFIED IDEOGRAPH + {0xC372, 0x6AD3}, //5327 #CJK UNIFIED IDEOGRAPH + {0xC373, 0x701B}, //5328 #CJK UNIFIED IDEOGRAPH + {0xC374, 0x701F}, //5329 #CJK UNIFIED IDEOGRAPH + {0xC375, 0x7028}, //5330 #CJK UNIFIED IDEOGRAPH + {0xC376, 0x701A}, //5331 #CJK UNIFIED IDEOGRAPH + {0xC377, 0x701D}, //5332 #CJK UNIFIED IDEOGRAPH + {0xC378, 0x7015}, //5333 #CJK UNIFIED IDEOGRAPH + {0xC379, 0x7018}, //5334 #CJK UNIFIED IDEOGRAPH + {0xC37A, 0x7206}, //5335 #CJK UNIFIED IDEOGRAPH + {0xC37B, 0x720D}, //5336 #CJK UNIFIED IDEOGRAPH + {0xC37C, 0x7258}, //5337 #CJK UNIFIED IDEOGRAPH + {0xC37D, 0x72A2}, //5338 #CJK UNIFIED IDEOGRAPH + {0xC37E, 0x7378}, //5339 #CJK UNIFIED IDEOGRAPH + {0xC3A1, 0x737A}, //5340 #CJK UNIFIED IDEOGRAPH + {0xC3A2, 0x74BD}, //5341 #CJK UNIFIED IDEOGRAPH + {0xC3A3, 0x74CA}, //5342 #CJK UNIFIED IDEOGRAPH + {0xC3A4, 0x74E3}, //5343 #CJK UNIFIED IDEOGRAPH + {0xC3A5, 0x7587}, //5344 #CJK UNIFIED IDEOGRAPH + {0xC3A6, 0x7586}, //5345 #CJK UNIFIED IDEOGRAPH + {0xC3A7, 0x765F}, //5346 #CJK UNIFIED IDEOGRAPH + {0xC3A8, 0x7661}, //5347 #CJK UNIFIED IDEOGRAPH + {0xC3A9, 0x77C7}, //5348 #CJK UNIFIED IDEOGRAPH + {0xC3AA, 0x7919}, //5349 #CJK UNIFIED IDEOGRAPH + {0xC3AB, 0x79B1}, //5350 #CJK UNIFIED IDEOGRAPH + {0xC3AC, 0x7A6B}, //5351 #CJK UNIFIED IDEOGRAPH + {0xC3AD, 0x7A69}, //5352 #CJK UNIFIED IDEOGRAPH + {0xC3AE, 0x7C3E}, //5353 #CJK UNIFIED IDEOGRAPH + {0xC3AF, 0x7C3F}, //5354 #CJK UNIFIED IDEOGRAPH + {0xC3B0, 0x7C38}, //5355 #CJK UNIFIED IDEOGRAPH + {0xC3B1, 0x7C3D}, //5356 #CJK UNIFIED IDEOGRAPH + {0xC3B2, 0x7C37}, //5357 #CJK UNIFIED IDEOGRAPH + {0xC3B3, 0x7C40}, //5358 #CJK UNIFIED IDEOGRAPH + {0xC3B4, 0x7E6B}, //5359 #CJK UNIFIED IDEOGRAPH + {0xC3B5, 0x7E6D}, //5360 #CJK UNIFIED IDEOGRAPH + {0xC3B6, 0x7E79}, //5361 #CJK UNIFIED IDEOGRAPH + {0xC3B7, 0x7E69}, //5362 #CJK UNIFIED IDEOGRAPH + {0xC3B8, 0x7E6A}, //5363 #CJK UNIFIED IDEOGRAPH + {0xC3B9, 0x7F85}, //5364 #CJK UNIFIED IDEOGRAPH + {0xC3BA, 0x7E73}, //5365 #CJK UNIFIED IDEOGRAPH + {0xC3BB, 0x7FB6}, //5366 #CJK UNIFIED IDEOGRAPH + {0xC3BC, 0x7FB9}, //5367 #CJK UNIFIED IDEOGRAPH + {0xC3BD, 0x7FB8}, //5368 #CJK UNIFIED IDEOGRAPH + {0xC3BE, 0x81D8}, //5369 #CJK UNIFIED IDEOGRAPH + {0xC3BF, 0x85E9}, //5370 #CJK UNIFIED IDEOGRAPH + {0xC3C0, 0x85DD}, //5371 #CJK UNIFIED IDEOGRAPH + {0xC3C1, 0x85EA}, //5372 #CJK UNIFIED IDEOGRAPH + {0xC3C2, 0x85D5}, //5373 #CJK UNIFIED IDEOGRAPH + {0xC3C3, 0x85E4}, //5374 #CJK UNIFIED IDEOGRAPH + {0xC3C4, 0x85E5}, //5375 #CJK UNIFIED IDEOGRAPH + {0xC3C5, 0x85F7}, //5376 #CJK UNIFIED IDEOGRAPH + {0xC3C6, 0x87FB}, //5377 #CJK UNIFIED IDEOGRAPH + {0xC3C7, 0x8805}, //5378 #CJK UNIFIED IDEOGRAPH + {0xC3C8, 0x880D}, //5379 #CJK UNIFIED IDEOGRAPH + {0xC3C9, 0x87F9}, //5380 #CJK UNIFIED IDEOGRAPH + {0xC3CA, 0x87FE}, //5381 #CJK UNIFIED IDEOGRAPH + {0xC3CB, 0x8960}, //5382 #CJK UNIFIED IDEOGRAPH + {0xC3CC, 0x895F}, //5383 #CJK UNIFIED IDEOGRAPH + {0xC3CD, 0x8956}, //5384 #CJK UNIFIED IDEOGRAPH + {0xC3CE, 0x895E}, //5385 #CJK UNIFIED IDEOGRAPH + {0xC3CF, 0x8B41}, //5386 #CJK UNIFIED IDEOGRAPH + {0xC3D0, 0x8B5C}, //5387 #CJK UNIFIED IDEOGRAPH + {0xC3D1, 0x8B58}, //5388 #CJK UNIFIED IDEOGRAPH + {0xC3D2, 0x8B49}, //5389 #CJK UNIFIED IDEOGRAPH + {0xC3D3, 0x8B5A}, //5390 #CJK UNIFIED IDEOGRAPH + {0xC3D4, 0x8B4E}, //5391 #CJK UNIFIED IDEOGRAPH + {0xC3D5, 0x8B4F}, //5392 #CJK UNIFIED IDEOGRAPH + {0xC3D6, 0x8B46}, //5393 #CJK UNIFIED IDEOGRAPH + {0xC3D7, 0x8B59}, //5394 #CJK UNIFIED IDEOGRAPH + {0xC3D8, 0x8D08}, //5395 #CJK UNIFIED IDEOGRAPH + {0xC3D9, 0x8D0A}, //5396 #CJK UNIFIED IDEOGRAPH + {0xC3DA, 0x8E7C}, //5397 #CJK UNIFIED IDEOGRAPH + {0xC3DB, 0x8E72}, //5398 #CJK UNIFIED IDEOGRAPH + {0xC3DC, 0x8E87}, //5399 #CJK UNIFIED IDEOGRAPH + {0xC3DD, 0x8E76}, //5400 #CJK UNIFIED IDEOGRAPH + {0xC3DE, 0x8E6C}, //5401 #CJK UNIFIED IDEOGRAPH + {0xC3DF, 0x8E7A}, //5402 #CJK UNIFIED IDEOGRAPH + {0xC3E0, 0x8E74}, //5403 #CJK UNIFIED IDEOGRAPH + {0xC3E1, 0x8F54}, //5404 #CJK UNIFIED IDEOGRAPH + {0xC3E2, 0x8F4E}, //5405 #CJK UNIFIED IDEOGRAPH + {0xC3E3, 0x8FAD}, //5406 #CJK UNIFIED IDEOGRAPH + {0xC3E4, 0x908A}, //5407 #CJK UNIFIED IDEOGRAPH + {0xC3E5, 0x908B}, //5408 #CJK UNIFIED IDEOGRAPH + {0xC3E6, 0x91B1}, //5409 #CJK UNIFIED IDEOGRAPH + {0xC3E7, 0x91AE}, //5410 #CJK UNIFIED IDEOGRAPH + {0xC3E8, 0x93E1}, //5411 #CJK UNIFIED IDEOGRAPH + {0xC3E9, 0x93D1}, //5412 #CJK UNIFIED IDEOGRAPH + {0xC3EA, 0x93DF}, //5413 #CJK UNIFIED IDEOGRAPH + {0xC3EB, 0x93C3}, //5414 #CJK UNIFIED IDEOGRAPH + {0xC3EC, 0x93C8}, //5415 #CJK UNIFIED IDEOGRAPH + {0xC3ED, 0x93DC}, //5416 #CJK UNIFIED IDEOGRAPH + {0xC3EE, 0x93DD}, //5417 #CJK UNIFIED IDEOGRAPH + {0xC3EF, 0x93D6}, //5418 #CJK UNIFIED IDEOGRAPH + {0xC3F0, 0x93E2}, //5419 #CJK UNIFIED IDEOGRAPH + {0xC3F1, 0x93CD}, //5420 #CJK UNIFIED IDEOGRAPH + {0xC3F2, 0x93D8}, //5421 #CJK UNIFIED IDEOGRAPH + {0xC3F3, 0x93E4}, //5422 #CJK UNIFIED IDEOGRAPH + {0xC3F4, 0x93D7}, //5423 #CJK UNIFIED IDEOGRAPH + {0xC3F5, 0x93E8}, //5424 #CJK UNIFIED IDEOGRAPH + {0xC3F6, 0x95DC}, //5425 #CJK UNIFIED IDEOGRAPH + {0xC3F7, 0x96B4}, //5426 #CJK UNIFIED IDEOGRAPH + {0xC3F8, 0x96E3}, //5427 #CJK UNIFIED IDEOGRAPH + {0xC3F9, 0x972A}, //5428 #CJK UNIFIED IDEOGRAPH + {0xC3FA, 0x9727}, //5429 #CJK UNIFIED IDEOGRAPH + {0xC3FB, 0x9761}, //5430 #CJK UNIFIED IDEOGRAPH + {0xC3FC, 0x97DC}, //5431 #CJK UNIFIED IDEOGRAPH + {0xC3FD, 0x97FB}, //5432 #CJK UNIFIED IDEOGRAPH + {0xC3FE, 0x985E}, //5433 #CJK UNIFIED IDEOGRAPH + {0xC440, 0x9858}, //5434 #CJK UNIFIED IDEOGRAPH + {0xC441, 0x985B}, //5435 #CJK UNIFIED IDEOGRAPH + {0xC442, 0x98BC}, //5436 #CJK UNIFIED IDEOGRAPH + {0xC443, 0x9945}, //5437 #CJK UNIFIED IDEOGRAPH + {0xC444, 0x9949}, //5438 #CJK UNIFIED IDEOGRAPH + {0xC445, 0x9A16}, //5439 #CJK UNIFIED IDEOGRAPH + {0xC446, 0x9A19}, //5440 #CJK UNIFIED IDEOGRAPH + {0xC447, 0x9B0D}, //5441 #CJK UNIFIED IDEOGRAPH + {0xC448, 0x9BE8}, //5442 #CJK UNIFIED IDEOGRAPH + {0xC449, 0x9BE7}, //5443 #CJK UNIFIED IDEOGRAPH + {0xC44A, 0x9BD6}, //5444 #CJK UNIFIED IDEOGRAPH + {0xC44B, 0x9BDB}, //5445 #CJK UNIFIED IDEOGRAPH + {0xC44C, 0x9D89}, //5446 #CJK UNIFIED IDEOGRAPH + {0xC44D, 0x9D61}, //5447 #CJK UNIFIED IDEOGRAPH + {0xC44E, 0x9D72}, //5448 #CJK UNIFIED IDEOGRAPH + {0xC44F, 0x9D6A}, //5449 #CJK UNIFIED IDEOGRAPH + {0xC450, 0x9D6C}, //5450 #CJK UNIFIED IDEOGRAPH + {0xC451, 0x9E92}, //5451 #CJK UNIFIED IDEOGRAPH + {0xC452, 0x9E97}, //5452 #CJK UNIFIED IDEOGRAPH + {0xC453, 0x9E93}, //5453 #CJK UNIFIED IDEOGRAPH + {0xC454, 0x9EB4}, //5454 #CJK UNIFIED IDEOGRAPH + {0xC455, 0x52F8}, //5455 #CJK UNIFIED IDEOGRAPH + {0xC456, 0x56A8}, //5456 #CJK UNIFIED IDEOGRAPH + {0xC457, 0x56B7}, //5457 #CJK UNIFIED IDEOGRAPH + {0xC458, 0x56B6}, //5458 #CJK UNIFIED IDEOGRAPH + {0xC459, 0x56B4}, //5459 #CJK UNIFIED IDEOGRAPH + {0xC45A, 0x56BC}, //5460 #CJK UNIFIED IDEOGRAPH + {0xC45B, 0x58E4}, //5461 #CJK UNIFIED IDEOGRAPH + {0xC45C, 0x5B40}, //5462 #CJK UNIFIED IDEOGRAPH + {0xC45D, 0x5B43}, //5463 #CJK UNIFIED IDEOGRAPH + {0xC45E, 0x5B7D}, //5464 #CJK UNIFIED IDEOGRAPH + {0xC45F, 0x5BF6}, //5465 #CJK UNIFIED IDEOGRAPH + {0xC460, 0x5DC9}, //5466 #CJK UNIFIED IDEOGRAPH + {0xC461, 0x61F8}, //5467 #CJK UNIFIED IDEOGRAPH + {0xC462, 0x61FA}, //5468 #CJK UNIFIED IDEOGRAPH + {0xC463, 0x6518}, //5469 #CJK UNIFIED IDEOGRAPH + {0xC464, 0x6514}, //5470 #CJK UNIFIED IDEOGRAPH + {0xC465, 0x6519}, //5471 #CJK UNIFIED IDEOGRAPH + {0xC466, 0x66E6}, //5472 #CJK UNIFIED IDEOGRAPH + {0xC467, 0x6727}, //5473 #CJK UNIFIED IDEOGRAPH + {0xC468, 0x6AEC}, //5474 #CJK UNIFIED IDEOGRAPH + {0xC469, 0x703E}, //5475 #CJK UNIFIED IDEOGRAPH + {0xC46A, 0x7030}, //5476 #CJK UNIFIED IDEOGRAPH + {0xC46B, 0x7032}, //5477 #CJK UNIFIED IDEOGRAPH + {0xC46C, 0x7210}, //5478 #CJK UNIFIED IDEOGRAPH + {0xC46D, 0x737B}, //5479 #CJK UNIFIED IDEOGRAPH + {0xC46E, 0x74CF}, //5480 #CJK UNIFIED IDEOGRAPH + {0xC46F, 0x7662}, //5481 #CJK UNIFIED IDEOGRAPH + {0xC470, 0x7665}, //5482 #CJK UNIFIED IDEOGRAPH + {0xC471, 0x7926}, //5483 #CJK UNIFIED IDEOGRAPH + {0xC472, 0x792A}, //5484 #CJK UNIFIED IDEOGRAPH + {0xC473, 0x792C}, //5485 #CJK UNIFIED IDEOGRAPH + {0xC474, 0x792B}, //5486 #CJK UNIFIED IDEOGRAPH + {0xC475, 0x7AC7}, //5487 #CJK UNIFIED IDEOGRAPH + {0xC476, 0x7AF6}, //5488 #CJK UNIFIED IDEOGRAPH + {0xC477, 0x7C4C}, //5489 #CJK UNIFIED IDEOGRAPH + {0xC478, 0x7C43}, //5490 #CJK UNIFIED IDEOGRAPH + {0xC479, 0x7C4D}, //5491 #CJK UNIFIED IDEOGRAPH + {0xC47A, 0x7CEF}, //5492 #CJK UNIFIED IDEOGRAPH + {0xC47B, 0x7CF0}, //5493 #CJK UNIFIED IDEOGRAPH + {0xC47C, 0x8FAE}, //5494 #CJK UNIFIED IDEOGRAPH + {0xC47D, 0x7E7D}, //5495 #CJK UNIFIED IDEOGRAPH + {0xC47E, 0x7E7C}, //5496 #CJK UNIFIED IDEOGRAPH + {0xC4A1, 0x7E82}, //5497 #CJK UNIFIED IDEOGRAPH + {0xC4A2, 0x7F4C}, //5498 #CJK UNIFIED IDEOGRAPH + {0xC4A3, 0x8000}, //5499 #CJK UNIFIED IDEOGRAPH + {0xC4A4, 0x81DA}, //5500 #CJK UNIFIED IDEOGRAPH + {0xC4A5, 0x8266}, //5501 #CJK UNIFIED IDEOGRAPH + {0xC4A6, 0x85FB}, //5502 #CJK UNIFIED IDEOGRAPH + {0xC4A7, 0x85F9}, //5503 #CJK UNIFIED IDEOGRAPH + {0xC4A8, 0x8611}, //5504 #CJK UNIFIED IDEOGRAPH + {0xC4A9, 0x85FA}, //5505 #CJK UNIFIED IDEOGRAPH + {0xC4AA, 0x8606}, //5506 #CJK UNIFIED IDEOGRAPH + {0xC4AB, 0x860B}, //5507 #CJK UNIFIED IDEOGRAPH + {0xC4AC, 0x8607}, //5508 #CJK UNIFIED IDEOGRAPH + {0xC4AD, 0x860A}, //5509 #CJK UNIFIED IDEOGRAPH + {0xC4AE, 0x8814}, //5510 #CJK UNIFIED IDEOGRAPH + {0xC4AF, 0x8815}, //5511 #CJK UNIFIED IDEOGRAPH + {0xC4B0, 0x8964}, //5512 #CJK UNIFIED IDEOGRAPH + {0xC4B1, 0x89BA}, //5513 #CJK UNIFIED IDEOGRAPH + {0xC4B2, 0x89F8}, //5514 #CJK UNIFIED IDEOGRAPH + {0xC4B3, 0x8B70}, //5515 #CJK UNIFIED IDEOGRAPH + {0xC4B4, 0x8B6C}, //5516 #CJK UNIFIED IDEOGRAPH + {0xC4B5, 0x8B66}, //5517 #CJK UNIFIED IDEOGRAPH + {0xC4B6, 0x8B6F}, //5518 #CJK UNIFIED IDEOGRAPH + {0xC4B7, 0x8B5F}, //5519 #CJK UNIFIED IDEOGRAPH + {0xC4B8, 0x8B6B}, //5520 #CJK UNIFIED IDEOGRAPH + {0xC4B9, 0x8D0F}, //5521 #CJK UNIFIED IDEOGRAPH + {0xC4BA, 0x8D0D}, //5522 #CJK UNIFIED IDEOGRAPH + {0xC4BB, 0x8E89}, //5523 #CJK UNIFIED IDEOGRAPH + {0xC4BC, 0x8E81}, //5524 #CJK UNIFIED IDEOGRAPH + {0xC4BD, 0x8E85}, //5525 #CJK UNIFIED IDEOGRAPH + {0xC4BE, 0x8E82}, //5526 #CJK UNIFIED IDEOGRAPH + {0xC4BF, 0x91B4}, //5527 #CJK UNIFIED IDEOGRAPH + {0xC4C0, 0x91CB}, //5528 #CJK UNIFIED IDEOGRAPH + {0xC4C1, 0x9418}, //5529 #CJK UNIFIED IDEOGRAPH + {0xC4C2, 0x9403}, //5530 #CJK UNIFIED IDEOGRAPH + {0xC4C3, 0x93FD}, //5531 #CJK UNIFIED IDEOGRAPH + {0xC4C4, 0x95E1}, //5532 #CJK UNIFIED IDEOGRAPH + {0xC4C5, 0x9730}, //5533 #CJK UNIFIED IDEOGRAPH + {0xC4C6, 0x98C4}, //5534 #CJK UNIFIED IDEOGRAPH + {0xC4C7, 0x9952}, //5535 #CJK UNIFIED IDEOGRAPH + {0xC4C8, 0x9951}, //5536 #CJK UNIFIED IDEOGRAPH + {0xC4C9, 0x99A8}, //5537 #CJK UNIFIED IDEOGRAPH + {0xC4CA, 0x9A2B}, //5538 #CJK UNIFIED IDEOGRAPH + {0xC4CB, 0x9A30}, //5539 #CJK UNIFIED IDEOGRAPH + {0xC4CC, 0x9A37}, //5540 #CJK UNIFIED IDEOGRAPH + {0xC4CD, 0x9A35}, //5541 #CJK UNIFIED IDEOGRAPH + {0xC4CE, 0x9C13}, //5542 #CJK UNIFIED IDEOGRAPH + {0xC4CF, 0x9C0D}, //5543 #CJK UNIFIED IDEOGRAPH + {0xC4D0, 0x9E79}, //5544 #CJK UNIFIED IDEOGRAPH + {0xC4D1, 0x9EB5}, //5545 #CJK UNIFIED IDEOGRAPH + {0xC4D2, 0x9EE8}, //5546 #CJK UNIFIED IDEOGRAPH + {0xC4D3, 0x9F2F}, //5547 #CJK UNIFIED IDEOGRAPH + {0xC4D4, 0x9F5F}, //5548 #CJK UNIFIED IDEOGRAPH + {0xC4D5, 0x9F63}, //5549 #CJK UNIFIED IDEOGRAPH + {0xC4D6, 0x9F61}, //5550 #CJK UNIFIED IDEOGRAPH + {0xC4D7, 0x5137}, //5551 #CJK UNIFIED IDEOGRAPH + {0xC4D8, 0x5138}, //5552 #CJK UNIFIED IDEOGRAPH + {0xC4D9, 0x56C1}, //5553 #CJK UNIFIED IDEOGRAPH + {0xC4DA, 0x56C0}, //5554 #CJK UNIFIED IDEOGRAPH + {0xC4DB, 0x56C2}, //5555 #CJK UNIFIED IDEOGRAPH + {0xC4DC, 0x5914}, //5556 #CJK UNIFIED IDEOGRAPH + {0xC4DD, 0x5C6C}, //5557 #CJK UNIFIED IDEOGRAPH + {0xC4DE, 0x5DCD}, //5558 #CJK UNIFIED IDEOGRAPH + {0xC4DF, 0x61FC}, //5559 #CJK UNIFIED IDEOGRAPH + {0xC4E0, 0x61FE}, //5560 #CJK UNIFIED IDEOGRAPH + {0xC4E1, 0x651D}, //5561 #CJK UNIFIED IDEOGRAPH + {0xC4E2, 0x651C}, //5562 #CJK UNIFIED IDEOGRAPH + {0xC4E3, 0x6595}, //5563 #CJK UNIFIED IDEOGRAPH + {0xC4E4, 0x66E9}, //5564 #CJK UNIFIED IDEOGRAPH + {0xC4E5, 0x6AFB}, //5565 #CJK UNIFIED IDEOGRAPH + {0xC4E6, 0x6B04}, //5566 #CJK UNIFIED IDEOGRAPH + {0xC4E7, 0x6AFA}, //5567 #CJK UNIFIED IDEOGRAPH + {0xC4E8, 0x6BB2}, //5568 #CJK UNIFIED IDEOGRAPH + {0xC4E9, 0x704C}, //5569 #CJK UNIFIED IDEOGRAPH + {0xC4EA, 0x721B}, //5570 #CJK UNIFIED IDEOGRAPH + {0xC4EB, 0x72A7}, //5571 #CJK UNIFIED IDEOGRAPH + {0xC4EC, 0x74D6}, //5572 #CJK UNIFIED IDEOGRAPH + {0xC4ED, 0x74D4}, //5573 #CJK UNIFIED IDEOGRAPH + {0xC4EE, 0x7669}, //5574 #CJK UNIFIED IDEOGRAPH + {0xC4EF, 0x77D3}, //5575 #CJK UNIFIED IDEOGRAPH + {0xC4F0, 0x7C50}, //5576 #CJK UNIFIED IDEOGRAPH + {0xC4F1, 0x7E8F}, //5577 #CJK UNIFIED IDEOGRAPH + {0xC4F2, 0x7E8C}, //5578 #CJK UNIFIED IDEOGRAPH + {0xC4F3, 0x7FBC}, //5579 #CJK UNIFIED IDEOGRAPH + {0xC4F4, 0x8617}, //5580 #CJK UNIFIED IDEOGRAPH + {0xC4F5, 0x862D}, //5581 #CJK UNIFIED IDEOGRAPH + {0xC4F6, 0x861A}, //5582 #CJK UNIFIED IDEOGRAPH + {0xC4F7, 0x8823}, //5583 #CJK UNIFIED IDEOGRAPH + {0xC4F8, 0x8822}, //5584 #CJK UNIFIED IDEOGRAPH + {0xC4F9, 0x8821}, //5585 #CJK UNIFIED IDEOGRAPH + {0xC4FA, 0x881F}, //5586 #CJK UNIFIED IDEOGRAPH + {0xC4FB, 0x896A}, //5587 #CJK UNIFIED IDEOGRAPH + {0xC4FC, 0x896C}, //5588 #CJK UNIFIED IDEOGRAPH + {0xC4FD, 0x89BD}, //5589 #CJK UNIFIED IDEOGRAPH + {0xC4FE, 0x8B74}, //5590 #CJK UNIFIED IDEOGRAPH + {0xC540, 0x8B77}, //5591 #CJK UNIFIED IDEOGRAPH + {0xC541, 0x8B7D}, //5592 #CJK UNIFIED IDEOGRAPH + {0xC542, 0x8D13}, //5593 #CJK UNIFIED IDEOGRAPH + {0xC543, 0x8E8A}, //5594 #CJK UNIFIED IDEOGRAPH + {0xC544, 0x8E8D}, //5595 #CJK UNIFIED IDEOGRAPH + {0xC545, 0x8E8B}, //5596 #CJK UNIFIED IDEOGRAPH + {0xC546, 0x8F5F}, //5597 #CJK UNIFIED IDEOGRAPH + {0xC547, 0x8FAF}, //5598 #CJK UNIFIED IDEOGRAPH + {0xC548, 0x91BA}, //5599 #CJK UNIFIED IDEOGRAPH + {0xC549, 0x942E}, //5600 #CJK UNIFIED IDEOGRAPH + {0xC54A, 0x9433}, //5601 #CJK UNIFIED IDEOGRAPH + {0xC54B, 0x9435}, //5602 #CJK UNIFIED IDEOGRAPH + {0xC54C, 0x943A}, //5603 #CJK UNIFIED IDEOGRAPH + {0xC54D, 0x9438}, //5604 #CJK UNIFIED IDEOGRAPH + {0xC54E, 0x9432}, //5605 #CJK UNIFIED IDEOGRAPH + {0xC54F, 0x942B}, //5606 #CJK UNIFIED IDEOGRAPH + {0xC550, 0x95E2}, //5607 #CJK UNIFIED IDEOGRAPH + {0xC551, 0x9738}, //5608 #CJK UNIFIED IDEOGRAPH + {0xC552, 0x9739}, //5609 #CJK UNIFIED IDEOGRAPH + {0xC553, 0x9732}, //5610 #CJK UNIFIED IDEOGRAPH + {0xC554, 0x97FF}, //5611 #CJK UNIFIED IDEOGRAPH + {0xC555, 0x9867}, //5612 #CJK UNIFIED IDEOGRAPH + {0xC556, 0x9865}, //5613 #CJK UNIFIED IDEOGRAPH + {0xC557, 0x9957}, //5614 #CJK UNIFIED IDEOGRAPH + {0xC558, 0x9A45}, //5615 #CJK UNIFIED IDEOGRAPH + {0xC559, 0x9A43}, //5616 #CJK UNIFIED IDEOGRAPH + {0xC55A, 0x9A40}, //5617 #CJK UNIFIED IDEOGRAPH + {0xC55B, 0x9A3E}, //5618 #CJK UNIFIED IDEOGRAPH + {0xC55C, 0x9ACF}, //5619 #CJK UNIFIED IDEOGRAPH + {0xC55D, 0x9B54}, //5620 #CJK UNIFIED IDEOGRAPH + {0xC55E, 0x9B51}, //5621 #CJK UNIFIED IDEOGRAPH + {0xC55F, 0x9C2D}, //5622 #CJK UNIFIED IDEOGRAPH + {0xC560, 0x9C25}, //5623 #CJK UNIFIED IDEOGRAPH + {0xC561, 0x9DAF}, //5624 #CJK UNIFIED IDEOGRAPH + {0xC562, 0x9DB4}, //5625 #CJK UNIFIED IDEOGRAPH + {0xC563, 0x9DC2}, //5626 #CJK UNIFIED IDEOGRAPH + {0xC564, 0x9DB8}, //5627 #CJK UNIFIED IDEOGRAPH + {0xC565, 0x9E9D}, //5628 #CJK UNIFIED IDEOGRAPH + {0xC566, 0x9EEF}, //5629 #CJK UNIFIED IDEOGRAPH + {0xC567, 0x9F19}, //5630 #CJK UNIFIED IDEOGRAPH + {0xC568, 0x9F5C}, //5631 #CJK UNIFIED IDEOGRAPH + {0xC569, 0x9F66}, //5632 #CJK UNIFIED IDEOGRAPH + {0xC56A, 0x9F67}, //5633 #CJK UNIFIED IDEOGRAPH + {0xC56B, 0x513C}, //5634 #CJK UNIFIED IDEOGRAPH + {0xC56C, 0x513B}, //5635 #CJK UNIFIED IDEOGRAPH + {0xC56D, 0x56C8}, //5636 #CJK UNIFIED IDEOGRAPH + {0xC56E, 0x56CA}, //5637 #CJK UNIFIED IDEOGRAPH + {0xC56F, 0x56C9}, //5638 #CJK UNIFIED IDEOGRAPH + {0xC570, 0x5B7F}, //5639 #CJK UNIFIED IDEOGRAPH + {0xC571, 0x5DD4}, //5640 #CJK UNIFIED IDEOGRAPH + {0xC572, 0x5DD2}, //5641 #CJK UNIFIED IDEOGRAPH + {0xC573, 0x5F4E}, //5642 #CJK UNIFIED IDEOGRAPH + {0xC574, 0x61FF}, //5643 #CJK UNIFIED IDEOGRAPH + {0xC575, 0x6524}, //5644 #CJK UNIFIED IDEOGRAPH + {0xC576, 0x6B0A}, //5645 #CJK UNIFIED IDEOGRAPH + {0xC577, 0x6B61}, //5646 #CJK UNIFIED IDEOGRAPH + {0xC578, 0x7051}, //5647 #CJK UNIFIED IDEOGRAPH + {0xC579, 0x7058}, //5648 #CJK UNIFIED IDEOGRAPH + {0xC57A, 0x7380}, //5649 #CJK UNIFIED IDEOGRAPH + {0xC57B, 0x74E4}, //5650 #CJK UNIFIED IDEOGRAPH + {0xC57C, 0x758A}, //5651 #CJK UNIFIED IDEOGRAPH + {0xC57D, 0x766E}, //5652 #CJK UNIFIED IDEOGRAPH + {0xC57E, 0x766C}, //5653 #CJK UNIFIED IDEOGRAPH + {0xC5A1, 0x79B3}, //5654 #CJK UNIFIED IDEOGRAPH + {0xC5A2, 0x7C60}, //5655 #CJK UNIFIED IDEOGRAPH + {0xC5A3, 0x7C5F}, //5656 #CJK UNIFIED IDEOGRAPH + {0xC5A4, 0x807E}, //5657 #CJK UNIFIED IDEOGRAPH + {0xC5A5, 0x807D}, //5658 #CJK UNIFIED IDEOGRAPH + {0xC5A6, 0x81DF}, //5659 #CJK UNIFIED IDEOGRAPH + {0xC5A7, 0x8972}, //5660 #CJK UNIFIED IDEOGRAPH + {0xC5A8, 0x896F}, //5661 #CJK UNIFIED IDEOGRAPH + {0xC5A9, 0x89FC}, //5662 #CJK UNIFIED IDEOGRAPH + {0xC5AA, 0x8B80}, //5663 #CJK UNIFIED IDEOGRAPH + {0xC5AB, 0x8D16}, //5664 #CJK UNIFIED IDEOGRAPH + {0xC5AC, 0x8D17}, //5665 #CJK UNIFIED IDEOGRAPH + {0xC5AD, 0x8E91}, //5666 #CJK UNIFIED IDEOGRAPH + {0xC5AE, 0x8E93}, //5667 #CJK UNIFIED IDEOGRAPH + {0xC5AF, 0x8F61}, //5668 #CJK UNIFIED IDEOGRAPH + {0xC5B0, 0x9148}, //5669 #CJK UNIFIED IDEOGRAPH + {0xC5B1, 0x9444}, //5670 #CJK UNIFIED IDEOGRAPH + {0xC5B2, 0x9451}, //5671 #CJK UNIFIED IDEOGRAPH + {0xC5B3, 0x9452}, //5672 #CJK UNIFIED IDEOGRAPH + {0xC5B4, 0x973D}, //5673 #CJK UNIFIED IDEOGRAPH + {0xC5B5, 0x973E}, //5674 #CJK UNIFIED IDEOGRAPH + {0xC5B6, 0x97C3}, //5675 #CJK UNIFIED IDEOGRAPH + {0xC5B7, 0x97C1}, //5676 #CJK UNIFIED IDEOGRAPH + {0xC5B8, 0x986B}, //5677 #CJK UNIFIED IDEOGRAPH + {0xC5B9, 0x9955}, //5678 #CJK UNIFIED IDEOGRAPH + {0xC5BA, 0x9A55}, //5679 #CJK UNIFIED IDEOGRAPH + {0xC5BB, 0x9A4D}, //5680 #CJK UNIFIED IDEOGRAPH + {0xC5BC, 0x9AD2}, //5681 #CJK UNIFIED IDEOGRAPH + {0xC5BD, 0x9B1A}, //5682 #CJK UNIFIED IDEOGRAPH + {0xC5BE, 0x9C49}, //5683 #CJK UNIFIED IDEOGRAPH + {0xC5BF, 0x9C31}, //5684 #CJK UNIFIED IDEOGRAPH + {0xC5C0, 0x9C3E}, //5685 #CJK UNIFIED IDEOGRAPH + {0xC5C1, 0x9C3B}, //5686 #CJK UNIFIED IDEOGRAPH + {0xC5C2, 0x9DD3}, //5687 #CJK UNIFIED IDEOGRAPH + {0xC5C3, 0x9DD7}, //5688 #CJK UNIFIED IDEOGRAPH + {0xC5C4, 0x9F34}, //5689 #CJK UNIFIED IDEOGRAPH + {0xC5C5, 0x9F6C}, //5690 #CJK UNIFIED IDEOGRAPH + {0xC5C6, 0x9F6A}, //5691 #CJK UNIFIED IDEOGRAPH + {0xC5C7, 0x9F94}, //5692 #CJK UNIFIED IDEOGRAPH + {0xC5C8, 0x56CC}, //5693 #CJK UNIFIED IDEOGRAPH + {0xC5C9, 0x5DD6}, //5694 #CJK UNIFIED IDEOGRAPH + {0xC5CA, 0x6200}, //5695 #CJK UNIFIED IDEOGRAPH + {0xC5CB, 0x6523}, //5696 #CJK UNIFIED IDEOGRAPH + {0xC5CC, 0x652B}, //5697 #CJK UNIFIED IDEOGRAPH + {0xC5CD, 0x652A}, //5698 #CJK UNIFIED IDEOGRAPH + {0xC5CE, 0x66EC}, //5699 #CJK UNIFIED IDEOGRAPH + {0xC5CF, 0x6B10}, //5700 #CJK UNIFIED IDEOGRAPH + {0xC5D0, 0x74DA}, //5701 #CJK UNIFIED IDEOGRAPH + {0xC5D1, 0x7ACA}, //5702 #CJK UNIFIED IDEOGRAPH + {0xC5D2, 0x7C64}, //5703 #CJK UNIFIED IDEOGRAPH + {0xC5D3, 0x7C63}, //5704 #CJK UNIFIED IDEOGRAPH + {0xC5D4, 0x7C65}, //5705 #CJK UNIFIED IDEOGRAPH + {0xC5D5, 0x7E93}, //5706 #CJK UNIFIED IDEOGRAPH + {0xC5D6, 0x7E96}, //5707 #CJK UNIFIED IDEOGRAPH + {0xC5D7, 0x7E94}, //5708 #CJK UNIFIED IDEOGRAPH + {0xC5D8, 0x81E2}, //5709 #CJK UNIFIED IDEOGRAPH + {0xC5D9, 0x8638}, //5710 #CJK UNIFIED IDEOGRAPH + {0xC5DA, 0x863F}, //5711 #CJK UNIFIED IDEOGRAPH + {0xC5DB, 0x8831}, //5712 #CJK UNIFIED IDEOGRAPH + {0xC5DC, 0x8B8A}, //5713 #CJK UNIFIED IDEOGRAPH + {0xC5DD, 0x9090}, //5714 #CJK UNIFIED IDEOGRAPH + {0xC5DE, 0x908F}, //5715 #CJK UNIFIED IDEOGRAPH + {0xC5DF, 0x9463}, //5716 #CJK UNIFIED IDEOGRAPH + {0xC5E0, 0x9460}, //5717 #CJK UNIFIED IDEOGRAPH + {0xC5E1, 0x9464}, //5718 #CJK UNIFIED IDEOGRAPH + {0xC5E2, 0x9768}, //5719 #CJK UNIFIED IDEOGRAPH + {0xC5E3, 0x986F}, //5720 #CJK UNIFIED IDEOGRAPH + {0xC5E4, 0x995C}, //5721 #CJK UNIFIED IDEOGRAPH + {0xC5E5, 0x9A5A}, //5722 #CJK UNIFIED IDEOGRAPH + {0xC5E6, 0x9A5B}, //5723 #CJK UNIFIED IDEOGRAPH + {0xC5E7, 0x9A57}, //5724 #CJK UNIFIED IDEOGRAPH + {0xC5E8, 0x9AD3}, //5725 #CJK UNIFIED IDEOGRAPH + {0xC5E9, 0x9AD4}, //5726 #CJK UNIFIED IDEOGRAPH + {0xC5EA, 0x9AD1}, //5727 #CJK UNIFIED IDEOGRAPH + {0xC5EB, 0x9C54}, //5728 #CJK UNIFIED IDEOGRAPH + {0xC5EC, 0x9C57}, //5729 #CJK UNIFIED IDEOGRAPH + {0xC5ED, 0x9C56}, //5730 #CJK UNIFIED IDEOGRAPH + {0xC5EE, 0x9DE5}, //5731 #CJK UNIFIED IDEOGRAPH + {0xC5EF, 0x9E9F}, //5732 #CJK UNIFIED IDEOGRAPH + {0xC5F0, 0x9EF4}, //5733 #CJK UNIFIED IDEOGRAPH + {0xC5F1, 0x56D1}, //5734 #CJK UNIFIED IDEOGRAPH + {0xC5F2, 0x58E9}, //5735 #CJK UNIFIED IDEOGRAPH + {0xC5F3, 0x652C}, //5736 #CJK UNIFIED IDEOGRAPH + {0xC5F4, 0x705E}, //5737 #CJK UNIFIED IDEOGRAPH + {0xC5F5, 0x7671}, //5738 #CJK UNIFIED IDEOGRAPH + {0xC5F6, 0x7672}, //5739 #CJK UNIFIED IDEOGRAPH + {0xC5F7, 0x77D7}, //5740 #CJK UNIFIED IDEOGRAPH + {0xC5F8, 0x7F50}, //5741 #CJK UNIFIED IDEOGRAPH + {0xC5F9, 0x7F88}, //5742 #CJK UNIFIED IDEOGRAPH + {0xC5FA, 0x8836}, //5743 #CJK UNIFIED IDEOGRAPH + {0xC5FB, 0x8839}, //5744 #CJK UNIFIED IDEOGRAPH + {0xC5FC, 0x8862}, //5745 #CJK UNIFIED IDEOGRAPH + {0xC5FD, 0x8B93}, //5746 #CJK UNIFIED IDEOGRAPH + {0xC5FE, 0x8B92}, //5747 #CJK UNIFIED IDEOGRAPH + {0xC640, 0x8B96}, //5748 #CJK UNIFIED IDEOGRAPH + {0xC641, 0x8277}, //5749 #CJK UNIFIED IDEOGRAPH + {0xC642, 0x8D1B}, //5750 #CJK UNIFIED IDEOGRAPH + {0xC643, 0x91C0}, //5751 #CJK UNIFIED IDEOGRAPH + {0xC644, 0x946A}, //5752 #CJK UNIFIED IDEOGRAPH + {0xC645, 0x9742}, //5753 #CJK UNIFIED IDEOGRAPH + {0xC646, 0x9748}, //5754 #CJK UNIFIED IDEOGRAPH + {0xC647, 0x9744}, //5755 #CJK UNIFIED IDEOGRAPH + {0xC648, 0x97C6}, //5756 #CJK UNIFIED IDEOGRAPH + {0xC649, 0x9870}, //5757 #CJK UNIFIED IDEOGRAPH + {0xC64A, 0x9A5F}, //5758 #CJK UNIFIED IDEOGRAPH + {0xC64B, 0x9B22}, //5759 #CJK UNIFIED IDEOGRAPH + {0xC64C, 0x9B58}, //5760 #CJK UNIFIED IDEOGRAPH + {0xC64D, 0x9C5F}, //5761 #CJK UNIFIED IDEOGRAPH + {0xC64E, 0x9DF9}, //5762 #CJK UNIFIED IDEOGRAPH + {0xC64F, 0x9DFA}, //5763 #CJK UNIFIED IDEOGRAPH + {0xC650, 0x9E7C}, //5764 #CJK UNIFIED IDEOGRAPH + {0xC651, 0x9E7D}, //5765 #CJK UNIFIED IDEOGRAPH + {0xC652, 0x9F07}, //5766 #CJK UNIFIED IDEOGRAPH + {0xC653, 0x9F77}, //5767 #CJK UNIFIED IDEOGRAPH + {0xC654, 0x9F72}, //5768 #CJK UNIFIED IDEOGRAPH + {0xC655, 0x5EF3}, //5769 #CJK UNIFIED IDEOGRAPH + {0xC656, 0x6B16}, //5770 #CJK UNIFIED IDEOGRAPH + {0xC657, 0x7063}, //5771 #CJK UNIFIED IDEOGRAPH + {0xC658, 0x7C6C}, //5772 #CJK UNIFIED IDEOGRAPH + {0xC659, 0x7C6E}, //5773 #CJK UNIFIED IDEOGRAPH + {0xC65A, 0x883B}, //5774 #CJK UNIFIED IDEOGRAPH + {0xC65B, 0x89C0}, //5775 #CJK UNIFIED IDEOGRAPH + {0xC65C, 0x8EA1}, //5776 #CJK UNIFIED IDEOGRAPH + {0xC65D, 0x91C1}, //5777 #CJK UNIFIED IDEOGRAPH + {0xC65E, 0x9472}, //5778 #CJK UNIFIED IDEOGRAPH + {0xC65F, 0x9470}, //5779 #CJK UNIFIED IDEOGRAPH + {0xC660, 0x9871}, //5780 #CJK UNIFIED IDEOGRAPH + {0xC661, 0x995E}, //5781 #CJK UNIFIED IDEOGRAPH + {0xC662, 0x9AD6}, //5782 #CJK UNIFIED IDEOGRAPH + {0xC663, 0x9B23}, //5783 #CJK UNIFIED IDEOGRAPH + {0xC664, 0x9ECC}, //5784 #CJK UNIFIED IDEOGRAPH + {0xC665, 0x7064}, //5785 #CJK UNIFIED IDEOGRAPH + {0xC666, 0x77DA}, //5786 #CJK UNIFIED IDEOGRAPH + {0xC667, 0x8B9A}, //5787 #CJK UNIFIED IDEOGRAPH + {0xC668, 0x9477}, //5788 #CJK UNIFIED IDEOGRAPH + {0xC669, 0x97C9}, //5789 #CJK UNIFIED IDEOGRAPH + {0xC66A, 0x9A62}, //5790 #CJK UNIFIED IDEOGRAPH + {0xC66B, 0x9A65}, //5791 #CJK UNIFIED IDEOGRAPH + {0xC66C, 0x7E9C}, //5792 #CJK UNIFIED IDEOGRAPH + {0xC66D, 0x8B9C}, //5793 #CJK UNIFIED IDEOGRAPH + {0xC66E, 0x8EAA}, //5794 #CJK UNIFIED IDEOGRAPH + {0xC66F, 0x91C5}, //5795 #CJK UNIFIED IDEOGRAPH + {0xC670, 0x947D}, //5796 #CJK UNIFIED IDEOGRAPH + {0xC671, 0x947E}, //5797 #CJK UNIFIED IDEOGRAPH + {0xC672, 0x947C}, //5798 #CJK UNIFIED IDEOGRAPH + {0xC673, 0x9C77}, //5799 #CJK UNIFIED IDEOGRAPH + {0xC674, 0x9C78}, //5800 #CJK UNIFIED IDEOGRAPH + {0xC675, 0x9EF7}, //5801 #CJK UNIFIED IDEOGRAPH + {0xC676, 0x8C54}, //5802 #CJK UNIFIED IDEOGRAPH + {0xC677, 0x947F}, //5803 #CJK UNIFIED IDEOGRAPH + {0xC678, 0x9E1A}, //5804 #CJK UNIFIED IDEOGRAPH + {0xC679, 0x7228}, //5805 #CJK UNIFIED IDEOGRAPH + {0xC67A, 0x9A6A}, //5806 #CJK UNIFIED IDEOGRAPH + {0xC67B, 0x9B31}, //5807 #CJK UNIFIED IDEOGRAPH + {0xC67C, 0x9E1B}, //5808 #CJK UNIFIED IDEOGRAPH + {0xC67D, 0x9E1E}, //5809 #CJK UNIFIED IDEOGRAPH + {0xC67E, 0x7C72}, //5810 #CJK UNIFIED IDEOGRAPH + {0xC940, 0x4E42}, //5811 #CJK UNIFIED IDEOGRAPH + {0xC941, 0x4E5C}, //5812 #CJK UNIFIED IDEOGRAPH + {0xC942, 0x51F5}, //5813 #CJK UNIFIED IDEOGRAPH + {0xC943, 0x531A}, //5814 #CJK UNIFIED IDEOGRAPH + {0xC944, 0x5382}, //5815 #CJK UNIFIED IDEOGRAPH + {0xC945, 0x4E07}, //5816 #CJK UNIFIED IDEOGRAPH + {0xC946, 0x4E0C}, //5817 #CJK UNIFIED IDEOGRAPH + {0xC947, 0x4E47}, //5818 #CJK UNIFIED IDEOGRAPH + {0xC948, 0x4E8D}, //5819 #CJK UNIFIED IDEOGRAPH + {0xC949, 0x56D7}, //5820 #CJK UNIFIED IDEOGRAPH + {0xC94A, 0xFA0C}, //5821 #CJK COMPATIBILITY IDEOGRAPH + {0xC94B, 0x5C6E}, //5822 #CJK UNIFIED IDEOGRAPH + {0xC94C, 0x5F73}, //5823 #CJK UNIFIED IDEOGRAPH + {0xC94D, 0x4E0F}, //5824 #CJK UNIFIED IDEOGRAPH + {0xC94E, 0x5187}, //5825 #CJK UNIFIED IDEOGRAPH + {0xC94F, 0x4E0E}, //5826 #CJK UNIFIED IDEOGRAPH + {0xC950, 0x4E2E}, //5827 #CJK UNIFIED IDEOGRAPH + {0xC951, 0x4E93}, //5828 #CJK UNIFIED IDEOGRAPH + {0xC952, 0x4EC2}, //5829 #CJK UNIFIED IDEOGRAPH + {0xC953, 0x4EC9}, //5830 #CJK UNIFIED IDEOGRAPH + {0xC954, 0x4EC8}, //5831 #CJK UNIFIED IDEOGRAPH + {0xC955, 0x5198}, //5832 #CJK UNIFIED IDEOGRAPH + {0xC956, 0x52FC}, //5833 #CJK UNIFIED IDEOGRAPH + {0xC957, 0x536C}, //5834 #CJK UNIFIED IDEOGRAPH + {0xC958, 0x53B9}, //5835 #CJK UNIFIED IDEOGRAPH + {0xC959, 0x5720}, //5836 #CJK UNIFIED IDEOGRAPH + {0xC95A, 0x5903}, //5837 #CJK UNIFIED IDEOGRAPH + {0xC95B, 0x592C}, //5838 #CJK UNIFIED IDEOGRAPH + {0xC95C, 0x5C10}, //5839 #CJK UNIFIED IDEOGRAPH + {0xC95D, 0x5DFF}, //5840 #CJK UNIFIED IDEOGRAPH + {0xC95E, 0x65E1}, //5841 #CJK UNIFIED IDEOGRAPH + {0xC95F, 0x6BB3}, //5842 #CJK UNIFIED IDEOGRAPH + {0xC960, 0x6BCC}, //5843 #CJK UNIFIED IDEOGRAPH + {0xC961, 0x6C14}, //5844 #CJK UNIFIED IDEOGRAPH + {0xC962, 0x723F}, //5845 #CJK UNIFIED IDEOGRAPH + {0xC963, 0x4E31}, //5846 #CJK UNIFIED IDEOGRAPH + {0xC964, 0x4E3C}, //5847 #CJK UNIFIED IDEOGRAPH + {0xC965, 0x4EE8}, //5848 #CJK UNIFIED IDEOGRAPH + {0xC966, 0x4EDC}, //5849 #CJK UNIFIED IDEOGRAPH + {0xC967, 0x4EE9}, //5850 #CJK UNIFIED IDEOGRAPH + {0xC968, 0x4EE1}, //5851 #CJK UNIFIED IDEOGRAPH + {0xC969, 0x4EDD}, //5852 #CJK UNIFIED IDEOGRAPH + {0xC96A, 0x4EDA}, //5853 #CJK UNIFIED IDEOGRAPH + {0xC96B, 0x520C}, //5854 #CJK UNIFIED IDEOGRAPH + {0xC96C, 0x531C}, //5855 #CJK UNIFIED IDEOGRAPH + {0xC96D, 0x534C}, //5856 #CJK UNIFIED IDEOGRAPH + {0xC96E, 0x5722}, //5857 #CJK UNIFIED IDEOGRAPH + {0xC96F, 0x5723}, //5858 #CJK UNIFIED IDEOGRAPH + {0xC970, 0x5917}, //5859 #CJK UNIFIED IDEOGRAPH + {0xC971, 0x592F}, //5860 #CJK UNIFIED IDEOGRAPH + {0xC972, 0x5B81}, //5861 #CJK UNIFIED IDEOGRAPH + {0xC973, 0x5B84}, //5862 #CJK UNIFIED IDEOGRAPH + {0xC974, 0x5C12}, //5863 #CJK UNIFIED IDEOGRAPH + {0xC975, 0x5C3B}, //5864 #CJK UNIFIED IDEOGRAPH + {0xC976, 0x5C74}, //5865 #CJK UNIFIED IDEOGRAPH + {0xC977, 0x5C73}, //5866 #CJK UNIFIED IDEOGRAPH + {0xC978, 0x5E04}, //5867 #CJK UNIFIED IDEOGRAPH + {0xC979, 0x5E80}, //5868 #CJK UNIFIED IDEOGRAPH + {0xC97A, 0x5E82}, //5869 #CJK UNIFIED IDEOGRAPH + {0xC97B, 0x5FC9}, //5870 #CJK UNIFIED IDEOGRAPH + {0xC97C, 0x6209}, //5871 #CJK UNIFIED IDEOGRAPH + {0xC97D, 0x6250}, //5872 #CJK UNIFIED IDEOGRAPH + {0xC97E, 0x6C15}, //5873 #CJK UNIFIED IDEOGRAPH + {0xC9A1, 0x6C36}, //5874 #CJK UNIFIED IDEOGRAPH + {0xC9A2, 0x6C43}, //5875 #CJK UNIFIED IDEOGRAPH + {0xC9A3, 0x6C3F}, //5876 #CJK UNIFIED IDEOGRAPH + {0xC9A4, 0x6C3B}, //5877 #CJK UNIFIED IDEOGRAPH + {0xC9A5, 0x72AE}, //5878 #CJK UNIFIED IDEOGRAPH + {0xC9A6, 0x72B0}, //5879 #CJK UNIFIED IDEOGRAPH + {0xC9A7, 0x738A}, //5880 #CJK UNIFIED IDEOGRAPH + {0xC9A8, 0x79B8}, //5881 #CJK UNIFIED IDEOGRAPH + {0xC9A9, 0x808A}, //5882 #CJK UNIFIED IDEOGRAPH + {0xC9AA, 0x961E}, //5883 #CJK UNIFIED IDEOGRAPH + {0xC9AB, 0x4F0E}, //5884 #CJK UNIFIED IDEOGRAPH + {0xC9AC, 0x4F18}, //5885 #CJK UNIFIED IDEOGRAPH + {0xC9AD, 0x4F2C}, //5886 #CJK UNIFIED IDEOGRAPH + {0xC9AE, 0x4EF5}, //5887 #CJK UNIFIED IDEOGRAPH + {0xC9AF, 0x4F14}, //5888 #CJK UNIFIED IDEOGRAPH + {0xC9B0, 0x4EF1}, //5889 #CJK UNIFIED IDEOGRAPH + {0xC9B1, 0x4F00}, //5890 #CJK UNIFIED IDEOGRAPH + {0xC9B2, 0x4EF7}, //5891 #CJK UNIFIED IDEOGRAPH + {0xC9B3, 0x4F08}, //5892 #CJK UNIFIED IDEOGRAPH + {0xC9B4, 0x4F1D}, //5893 #CJK UNIFIED IDEOGRAPH + {0xC9B5, 0x4F02}, //5894 #CJK UNIFIED IDEOGRAPH + {0xC9B6, 0x4F05}, //5895 #CJK UNIFIED IDEOGRAPH + {0xC9B7, 0x4F22}, //5896 #CJK UNIFIED IDEOGRAPH + {0xC9B8, 0x4F13}, //5897 #CJK UNIFIED IDEOGRAPH + {0xC9B9, 0x4F04}, //5898 #CJK UNIFIED IDEOGRAPH + {0xC9BA, 0x4EF4}, //5899 #CJK UNIFIED IDEOGRAPH + {0xC9BB, 0x4F12}, //5900 #CJK UNIFIED IDEOGRAPH + {0xC9BC, 0x51B1}, //5901 #CJK UNIFIED IDEOGRAPH + {0xC9BD, 0x5213}, //5902 #CJK UNIFIED IDEOGRAPH + {0xC9BE, 0x5209}, //5903 #CJK UNIFIED IDEOGRAPH + {0xC9BF, 0x5210}, //5904 #CJK UNIFIED IDEOGRAPH + {0xC9C0, 0x52A6}, //5905 #CJK UNIFIED IDEOGRAPH + {0xC9C1, 0x5322}, //5906 #CJK UNIFIED IDEOGRAPH + {0xC9C2, 0x531F}, //5907 #CJK UNIFIED IDEOGRAPH + {0xC9C3, 0x534D}, //5908 #CJK UNIFIED IDEOGRAPH + {0xC9C4, 0x538A}, //5909 #CJK UNIFIED IDEOGRAPH + {0xC9C5, 0x5407}, //5910 #CJK UNIFIED IDEOGRAPH + {0xC9C6, 0x56E1}, //5911 #CJK UNIFIED IDEOGRAPH + {0xC9C7, 0x56DF}, //5912 #CJK UNIFIED IDEOGRAPH + {0xC9C8, 0x572E}, //5913 #CJK UNIFIED IDEOGRAPH + {0xC9C9, 0x572A}, //5914 #CJK UNIFIED IDEOGRAPH + {0xC9CA, 0x5734}, //5915 #CJK UNIFIED IDEOGRAPH + {0xC9CB, 0x593C}, //5916 #CJK UNIFIED IDEOGRAPH + {0xC9CC, 0x5980}, //5917 #CJK UNIFIED IDEOGRAPH + {0xC9CD, 0x597C}, //5918 #CJK UNIFIED IDEOGRAPH + {0xC9CE, 0x5985}, //5919 #CJK UNIFIED IDEOGRAPH + {0xC9CF, 0x597B}, //5920 #CJK UNIFIED IDEOGRAPH + {0xC9D0, 0x597E}, //5921 #CJK UNIFIED IDEOGRAPH + {0xC9D1, 0x5977}, //5922 #CJK UNIFIED IDEOGRAPH + {0xC9D2, 0x597F}, //5923 #CJK UNIFIED IDEOGRAPH + {0xC9D3, 0x5B56}, //5924 #CJK UNIFIED IDEOGRAPH + {0xC9D4, 0x5C15}, //5925 #CJK UNIFIED IDEOGRAPH + {0xC9D5, 0x5C25}, //5926 #CJK UNIFIED IDEOGRAPH + {0xC9D6, 0x5C7C}, //5927 #CJK UNIFIED IDEOGRAPH + {0xC9D7, 0x5C7A}, //5928 #CJK UNIFIED IDEOGRAPH + {0xC9D8, 0x5C7B}, //5929 #CJK UNIFIED IDEOGRAPH + {0xC9D9, 0x5C7E}, //5930 #CJK UNIFIED IDEOGRAPH + {0xC9DA, 0x5DDF}, //5931 #CJK UNIFIED IDEOGRAPH + {0xC9DB, 0x5E75}, //5932 #CJK UNIFIED IDEOGRAPH + {0xC9DC, 0x5E84}, //5933 #CJK UNIFIED IDEOGRAPH + {0xC9DD, 0x5F02}, //5934 #CJK UNIFIED IDEOGRAPH + {0xC9DE, 0x5F1A}, //5935 #CJK UNIFIED IDEOGRAPH + {0xC9DF, 0x5F74}, //5936 #CJK UNIFIED IDEOGRAPH + {0xC9E0, 0x5FD5}, //5937 #CJK UNIFIED IDEOGRAPH + {0xC9E1, 0x5FD4}, //5938 #CJK UNIFIED IDEOGRAPH + {0xC9E2, 0x5FCF}, //5939 #CJK UNIFIED IDEOGRAPH + {0xC9E3, 0x625C}, //5940 #CJK UNIFIED IDEOGRAPH + {0xC9E4, 0x625E}, //5941 #CJK UNIFIED IDEOGRAPH + {0xC9E5, 0x6264}, //5942 #CJK UNIFIED IDEOGRAPH + {0xC9E6, 0x6261}, //5943 #CJK UNIFIED IDEOGRAPH + {0xC9E7, 0x6266}, //5944 #CJK UNIFIED IDEOGRAPH + {0xC9E8, 0x6262}, //5945 #CJK UNIFIED IDEOGRAPH + {0xC9E9, 0x6259}, //5946 #CJK UNIFIED IDEOGRAPH + {0xC9EA, 0x6260}, //5947 #CJK UNIFIED IDEOGRAPH + {0xC9EB, 0x625A}, //5948 #CJK UNIFIED IDEOGRAPH + {0xC9EC, 0x6265}, //5949 #CJK UNIFIED IDEOGRAPH + {0xC9ED, 0x65EF}, //5950 #CJK UNIFIED IDEOGRAPH + {0xC9EE, 0x65EE}, //5951 #CJK UNIFIED IDEOGRAPH + {0xC9EF, 0x673E}, //5952 #CJK UNIFIED IDEOGRAPH + {0xC9F0, 0x6739}, //5953 #CJK UNIFIED IDEOGRAPH + {0xC9F1, 0x6738}, //5954 #CJK UNIFIED IDEOGRAPH + {0xC9F2, 0x673B}, //5955 #CJK UNIFIED IDEOGRAPH + {0xC9F3, 0x673A}, //5956 #CJK UNIFIED IDEOGRAPH + {0xC9F4, 0x673F}, //5957 #CJK UNIFIED IDEOGRAPH + {0xC9F5, 0x673C}, //5958 #CJK UNIFIED IDEOGRAPH + {0xC9F6, 0x6733}, //5959 #CJK UNIFIED IDEOGRAPH + {0xC9F7, 0x6C18}, //5960 #CJK UNIFIED IDEOGRAPH + {0xC9F8, 0x6C46}, //5961 #CJK UNIFIED IDEOGRAPH + {0xC9F9, 0x6C52}, //5962 #CJK UNIFIED IDEOGRAPH + {0xC9FA, 0x6C5C}, //5963 #CJK UNIFIED IDEOGRAPH + {0xC9FB, 0x6C4F}, //5964 #CJK UNIFIED IDEOGRAPH + {0xC9FC, 0x6C4A}, //5965 #CJK UNIFIED IDEOGRAPH + {0xC9FD, 0x6C54}, //5966 #CJK UNIFIED IDEOGRAPH + {0xC9FE, 0x6C4B}, //5967 #CJK UNIFIED IDEOGRAPH + {0xCA40, 0x6C4C}, //5968 #CJK UNIFIED IDEOGRAPH + {0xCA41, 0x7071}, //5969 #CJK UNIFIED IDEOGRAPH + {0xCA42, 0x725E}, //5970 #CJK UNIFIED IDEOGRAPH + {0xCA43, 0x72B4}, //5971 #CJK UNIFIED IDEOGRAPH + {0xCA44, 0x72B5}, //5972 #CJK UNIFIED IDEOGRAPH + {0xCA45, 0x738E}, //5973 #CJK UNIFIED IDEOGRAPH + {0xCA46, 0x752A}, //5974 #CJK UNIFIED IDEOGRAPH + {0xCA47, 0x767F}, //5975 #CJK UNIFIED IDEOGRAPH + {0xCA48, 0x7A75}, //5976 #CJK UNIFIED IDEOGRAPH + {0xCA49, 0x7F51}, //5977 #CJK UNIFIED IDEOGRAPH + {0xCA4A, 0x8278}, //5978 #CJK UNIFIED IDEOGRAPH + {0xCA4B, 0x827C}, //5979 #CJK UNIFIED IDEOGRAPH + {0xCA4C, 0x8280}, //5980 #CJK UNIFIED IDEOGRAPH + {0xCA4D, 0x827D}, //5981 #CJK UNIFIED IDEOGRAPH + {0xCA4E, 0x827F}, //5982 #CJK UNIFIED IDEOGRAPH + {0xCA4F, 0x864D}, //5983 #CJK UNIFIED IDEOGRAPH + {0xCA50, 0x897E}, //5984 #CJK UNIFIED IDEOGRAPH + {0xCA51, 0x9099}, //5985 #CJK UNIFIED IDEOGRAPH + {0xCA52, 0x9097}, //5986 #CJK UNIFIED IDEOGRAPH + {0xCA53, 0x9098}, //5987 #CJK UNIFIED IDEOGRAPH + {0xCA54, 0x909B}, //5988 #CJK UNIFIED IDEOGRAPH + {0xCA55, 0x9094}, //5989 #CJK UNIFIED IDEOGRAPH + {0xCA56, 0x9622}, //5990 #CJK UNIFIED IDEOGRAPH + {0xCA57, 0x9624}, //5991 #CJK UNIFIED IDEOGRAPH + {0xCA58, 0x9620}, //5992 #CJK UNIFIED IDEOGRAPH + {0xCA59, 0x9623}, //5993 #CJK UNIFIED IDEOGRAPH + {0xCA5A, 0x4F56}, //5994 #CJK UNIFIED IDEOGRAPH + {0xCA5B, 0x4F3B}, //5995 #CJK UNIFIED IDEOGRAPH + {0xCA5C, 0x4F62}, //5996 #CJK UNIFIED IDEOGRAPH + {0xCA5D, 0x4F49}, //5997 #CJK UNIFIED IDEOGRAPH + {0xCA5E, 0x4F53}, //5998 #CJK UNIFIED IDEOGRAPH + {0xCA5F, 0x4F64}, //5999 #CJK UNIFIED IDEOGRAPH + {0xCA60, 0x4F3E}, //6000 #CJK UNIFIED IDEOGRAPH + {0xCA61, 0x4F67}, //6001 #CJK UNIFIED IDEOGRAPH + {0xCA62, 0x4F52}, //6002 #CJK UNIFIED IDEOGRAPH + {0xCA63, 0x4F5F}, //6003 #CJK UNIFIED IDEOGRAPH + {0xCA64, 0x4F41}, //6004 #CJK UNIFIED IDEOGRAPH + {0xCA65, 0x4F58}, //6005 #CJK UNIFIED IDEOGRAPH + {0xCA66, 0x4F2D}, //6006 #CJK UNIFIED IDEOGRAPH + {0xCA67, 0x4F33}, //6007 #CJK UNIFIED IDEOGRAPH + {0xCA68, 0x4F3F}, //6008 #CJK UNIFIED IDEOGRAPH + {0xCA69, 0x4F61}, //6009 #CJK UNIFIED IDEOGRAPH + {0xCA6A, 0x518F}, //6010 #CJK UNIFIED IDEOGRAPH + {0xCA6B, 0x51B9}, //6011 #CJK UNIFIED IDEOGRAPH + {0xCA6C, 0x521C}, //6012 #CJK UNIFIED IDEOGRAPH + {0xCA6D, 0x521E}, //6013 #CJK UNIFIED IDEOGRAPH + {0xCA6E, 0x5221}, //6014 #CJK UNIFIED IDEOGRAPH + {0xCA6F, 0x52AD}, //6015 #CJK UNIFIED IDEOGRAPH + {0xCA70, 0x52AE}, //6016 #CJK UNIFIED IDEOGRAPH + {0xCA71, 0x5309}, //6017 #CJK UNIFIED IDEOGRAPH + {0xCA72, 0x5363}, //6018 #CJK UNIFIED IDEOGRAPH + {0xCA73, 0x5372}, //6019 #CJK UNIFIED IDEOGRAPH + {0xCA74, 0x538E}, //6020 #CJK UNIFIED IDEOGRAPH + {0xCA75, 0x538F}, //6021 #CJK UNIFIED IDEOGRAPH + {0xCA76, 0x5430}, //6022 #CJK UNIFIED IDEOGRAPH + {0xCA77, 0x5437}, //6023 #CJK UNIFIED IDEOGRAPH + {0xCA78, 0x542A}, //6024 #CJK UNIFIED IDEOGRAPH + {0xCA79, 0x5454}, //6025 #CJK UNIFIED IDEOGRAPH + {0xCA7A, 0x5445}, //6026 #CJK UNIFIED IDEOGRAPH + {0xCA7B, 0x5419}, //6027 #CJK UNIFIED IDEOGRAPH + {0xCA7C, 0x541C}, //6028 #CJK UNIFIED IDEOGRAPH + {0xCA7D, 0x5425}, //6029 #CJK UNIFIED IDEOGRAPH + {0xCA7E, 0x5418}, //6030 #CJK UNIFIED IDEOGRAPH + {0xCAA1, 0x543D}, //6031 #CJK UNIFIED IDEOGRAPH + {0xCAA2, 0x544F}, //6032 #CJK UNIFIED IDEOGRAPH + {0xCAA3, 0x5441}, //6033 #CJK UNIFIED IDEOGRAPH + {0xCAA4, 0x5428}, //6034 #CJK UNIFIED IDEOGRAPH + {0xCAA5, 0x5424}, //6035 #CJK UNIFIED IDEOGRAPH + {0xCAA6, 0x5447}, //6036 #CJK UNIFIED IDEOGRAPH + {0xCAA7, 0x56EE}, //6037 #CJK UNIFIED IDEOGRAPH + {0xCAA8, 0x56E7}, //6038 #CJK UNIFIED IDEOGRAPH + {0xCAA9, 0x56E5}, //6039 #CJK UNIFIED IDEOGRAPH + {0xCAAA, 0x5741}, //6040 #CJK UNIFIED IDEOGRAPH + {0xCAAB, 0x5745}, //6041 #CJK UNIFIED IDEOGRAPH + {0xCAAC, 0x574C}, //6042 #CJK UNIFIED IDEOGRAPH + {0xCAAD, 0x5749}, //6043 #CJK UNIFIED IDEOGRAPH + {0xCAAE, 0x574B}, //6044 #CJK UNIFIED IDEOGRAPH + {0xCAAF, 0x5752}, //6045 #CJK UNIFIED IDEOGRAPH + {0xCAB0, 0x5906}, //6046 #CJK UNIFIED IDEOGRAPH + {0xCAB1, 0x5940}, //6047 #CJK UNIFIED IDEOGRAPH + {0xCAB2, 0x59A6}, //6048 #CJK UNIFIED IDEOGRAPH + {0xCAB3, 0x5998}, //6049 #CJK UNIFIED IDEOGRAPH + {0xCAB4, 0x59A0}, //6050 #CJK UNIFIED IDEOGRAPH + {0xCAB5, 0x5997}, //6051 #CJK UNIFIED IDEOGRAPH + {0xCAB6, 0x598E}, //6052 #CJK UNIFIED IDEOGRAPH + {0xCAB7, 0x59A2}, //6053 #CJK UNIFIED IDEOGRAPH + {0xCAB8, 0x5990}, //6054 #CJK UNIFIED IDEOGRAPH + {0xCAB9, 0x598F}, //6055 #CJK UNIFIED IDEOGRAPH + {0xCABA, 0x59A7}, //6056 #CJK UNIFIED IDEOGRAPH + {0xCABB, 0x59A1}, //6057 #CJK UNIFIED IDEOGRAPH + {0xCABC, 0x5B8E}, //6058 #CJK UNIFIED IDEOGRAPH + {0xCABD, 0x5B92}, //6059 #CJK UNIFIED IDEOGRAPH + {0xCABE, 0x5C28}, //6060 #CJK UNIFIED IDEOGRAPH + {0xCABF, 0x5C2A}, //6061 #CJK UNIFIED IDEOGRAPH + {0xCAC0, 0x5C8D}, //6062 #CJK UNIFIED IDEOGRAPH + {0xCAC1, 0x5C8F}, //6063 #CJK UNIFIED IDEOGRAPH + {0xCAC2, 0x5C88}, //6064 #CJK UNIFIED IDEOGRAPH + {0xCAC3, 0x5C8B}, //6065 #CJK UNIFIED IDEOGRAPH + {0xCAC4, 0x5C89}, //6066 #CJK UNIFIED IDEOGRAPH + {0xCAC5, 0x5C92}, //6067 #CJK UNIFIED IDEOGRAPH + {0xCAC6, 0x5C8A}, //6068 #CJK UNIFIED IDEOGRAPH + {0xCAC7, 0x5C86}, //6069 #CJK UNIFIED IDEOGRAPH + {0xCAC8, 0x5C93}, //6070 #CJK UNIFIED IDEOGRAPH + {0xCAC9, 0x5C95}, //6071 #CJK UNIFIED IDEOGRAPH + {0xCACA, 0x5DE0}, //6072 #CJK UNIFIED IDEOGRAPH + {0xCACB, 0x5E0A}, //6073 #CJK UNIFIED IDEOGRAPH + {0xCACC, 0x5E0E}, //6074 #CJK UNIFIED IDEOGRAPH + {0xCACD, 0x5E8B}, //6075 #CJK UNIFIED IDEOGRAPH + {0xCACE, 0x5E89}, //6076 #CJK UNIFIED IDEOGRAPH + {0xCACF, 0x5E8C}, //6077 #CJK UNIFIED IDEOGRAPH + {0xCAD0, 0x5E88}, //6078 #CJK UNIFIED IDEOGRAPH + {0xCAD1, 0x5E8D}, //6079 #CJK UNIFIED IDEOGRAPH + {0xCAD2, 0x5F05}, //6080 #CJK UNIFIED IDEOGRAPH + {0xCAD3, 0x5F1D}, //6081 #CJK UNIFIED IDEOGRAPH + {0xCAD4, 0x5F78}, //6082 #CJK UNIFIED IDEOGRAPH + {0xCAD5, 0x5F76}, //6083 #CJK UNIFIED IDEOGRAPH + {0xCAD6, 0x5FD2}, //6084 #CJK UNIFIED IDEOGRAPH + {0xCAD7, 0x5FD1}, //6085 #CJK UNIFIED IDEOGRAPH + {0xCAD8, 0x5FD0}, //6086 #CJK UNIFIED IDEOGRAPH + {0xCAD9, 0x5FED}, //6087 #CJK UNIFIED IDEOGRAPH + {0xCADA, 0x5FE8}, //6088 #CJK UNIFIED IDEOGRAPH + {0xCADB, 0x5FEE}, //6089 #CJK UNIFIED IDEOGRAPH + {0xCADC, 0x5FF3}, //6090 #CJK UNIFIED IDEOGRAPH + {0xCADD, 0x5FE1}, //6091 #CJK UNIFIED IDEOGRAPH + {0xCADE, 0x5FE4}, //6092 #CJK UNIFIED IDEOGRAPH + {0xCADF, 0x5FE3}, //6093 #CJK UNIFIED IDEOGRAPH + {0xCAE0, 0x5FFA}, //6094 #CJK UNIFIED IDEOGRAPH + {0xCAE1, 0x5FEF}, //6095 #CJK UNIFIED IDEOGRAPH + {0xCAE2, 0x5FF7}, //6096 #CJK UNIFIED IDEOGRAPH + {0xCAE3, 0x5FFB}, //6097 #CJK UNIFIED IDEOGRAPH + {0xCAE4, 0x6000}, //6098 #CJK UNIFIED IDEOGRAPH + {0xCAE5, 0x5FF4}, //6099 #CJK UNIFIED IDEOGRAPH + {0xCAE6, 0x623A}, //6100 #CJK UNIFIED IDEOGRAPH + {0xCAE7, 0x6283}, //6101 #CJK UNIFIED IDEOGRAPH + {0xCAE8, 0x628C}, //6102 #CJK UNIFIED IDEOGRAPH + {0xCAE9, 0x628E}, //6103 #CJK UNIFIED IDEOGRAPH + {0xCAEA, 0x628F}, //6104 #CJK UNIFIED IDEOGRAPH + {0xCAEB, 0x6294}, //6105 #CJK UNIFIED IDEOGRAPH + {0xCAEC, 0x6287}, //6106 #CJK UNIFIED IDEOGRAPH + {0xCAED, 0x6271}, //6107 #CJK UNIFIED IDEOGRAPH + {0xCAEE, 0x627B}, //6108 #CJK UNIFIED IDEOGRAPH + {0xCAEF, 0x627A}, //6109 #CJK UNIFIED IDEOGRAPH + {0xCAF0, 0x6270}, //6110 #CJK UNIFIED IDEOGRAPH + {0xCAF1, 0x6281}, //6111 #CJK UNIFIED IDEOGRAPH + {0xCAF2, 0x6288}, //6112 #CJK UNIFIED IDEOGRAPH + {0xCAF3, 0x6277}, //6113 #CJK UNIFIED IDEOGRAPH + {0xCAF4, 0x627D}, //6114 #CJK UNIFIED IDEOGRAPH + {0xCAF5, 0x6272}, //6115 #CJK UNIFIED IDEOGRAPH + {0xCAF6, 0x6274}, //6116 #CJK UNIFIED IDEOGRAPH + {0xCAF7, 0x6537}, //6117 #CJK UNIFIED IDEOGRAPH + {0xCAF8, 0x65F0}, //6118 #CJK UNIFIED IDEOGRAPH + {0xCAF9, 0x65F4}, //6119 #CJK UNIFIED IDEOGRAPH + {0xCAFA, 0x65F3}, //6120 #CJK UNIFIED IDEOGRAPH + {0xCAFB, 0x65F2}, //6121 #CJK UNIFIED IDEOGRAPH + {0xCAFC, 0x65F5}, //6122 #CJK UNIFIED IDEOGRAPH + {0xCAFD, 0x6745}, //6123 #CJK UNIFIED IDEOGRAPH + {0xCAFE, 0x6747}, //6124 #CJK UNIFIED IDEOGRAPH + {0xCB40, 0x6759}, //6125 #CJK UNIFIED IDEOGRAPH + {0xCB41, 0x6755}, //6126 #CJK UNIFIED IDEOGRAPH + {0xCB42, 0x674C}, //6127 #CJK UNIFIED IDEOGRAPH + {0xCB43, 0x6748}, //6128 #CJK UNIFIED IDEOGRAPH + {0xCB44, 0x675D}, //6129 #CJK UNIFIED IDEOGRAPH + {0xCB45, 0x674D}, //6130 #CJK UNIFIED IDEOGRAPH + {0xCB46, 0x675A}, //6131 #CJK UNIFIED IDEOGRAPH + {0xCB47, 0x674B}, //6132 #CJK UNIFIED IDEOGRAPH + {0xCB48, 0x6BD0}, //6133 #CJK UNIFIED IDEOGRAPH + {0xCB49, 0x6C19}, //6134 #CJK UNIFIED IDEOGRAPH + {0xCB4A, 0x6C1A}, //6135 #CJK UNIFIED IDEOGRAPH + {0xCB4B, 0x6C78}, //6136 #CJK UNIFIED IDEOGRAPH + {0xCB4C, 0x6C67}, //6137 #CJK UNIFIED IDEOGRAPH + {0xCB4D, 0x6C6B}, //6138 #CJK UNIFIED IDEOGRAPH + {0xCB4E, 0x6C84}, //6139 #CJK UNIFIED IDEOGRAPH + {0xCB4F, 0x6C8B}, //6140 #CJK UNIFIED IDEOGRAPH + {0xCB50, 0x6C8F}, //6141 #CJK UNIFIED IDEOGRAPH + {0xCB51, 0x6C71}, //6142 #CJK UNIFIED IDEOGRAPH + {0xCB52, 0x6C6F}, //6143 #CJK UNIFIED IDEOGRAPH + {0xCB53, 0x6C69}, //6144 #CJK UNIFIED IDEOGRAPH + {0xCB54, 0x6C9A}, //6145 #CJK UNIFIED IDEOGRAPH + {0xCB55, 0x6C6D}, //6146 #CJK UNIFIED IDEOGRAPH + {0xCB56, 0x6C87}, //6147 #CJK UNIFIED IDEOGRAPH + {0xCB57, 0x6C95}, //6148 #CJK UNIFIED IDEOGRAPH + {0xCB58, 0x6C9C}, //6149 #CJK UNIFIED IDEOGRAPH + {0xCB59, 0x6C66}, //6150 #CJK UNIFIED IDEOGRAPH + {0xCB5A, 0x6C73}, //6151 #CJK UNIFIED IDEOGRAPH + {0xCB5B, 0x6C65}, //6152 #CJK UNIFIED IDEOGRAPH + {0xCB5C, 0x6C7B}, //6153 #CJK UNIFIED IDEOGRAPH + {0xCB5D, 0x6C8E}, //6154 #CJK UNIFIED IDEOGRAPH + {0xCB5E, 0x7074}, //6155 #CJK UNIFIED IDEOGRAPH + {0xCB5F, 0x707A}, //6156 #CJK UNIFIED IDEOGRAPH + {0xCB60, 0x7263}, //6157 #CJK UNIFIED IDEOGRAPH + {0xCB61, 0x72BF}, //6158 #CJK UNIFIED IDEOGRAPH + {0xCB62, 0x72BD}, //6159 #CJK UNIFIED IDEOGRAPH + {0xCB63, 0x72C3}, //6160 #CJK UNIFIED IDEOGRAPH + {0xCB64, 0x72C6}, //6161 #CJK UNIFIED IDEOGRAPH + {0xCB65, 0x72C1}, //6162 #CJK UNIFIED IDEOGRAPH + {0xCB66, 0x72BA}, //6163 #CJK UNIFIED IDEOGRAPH + {0xCB67, 0x72C5}, //6164 #CJK UNIFIED IDEOGRAPH + {0xCB68, 0x7395}, //6165 #CJK UNIFIED IDEOGRAPH + {0xCB69, 0x7397}, //6166 #CJK UNIFIED IDEOGRAPH + {0xCB6A, 0x7393}, //6167 #CJK UNIFIED IDEOGRAPH + {0xCB6B, 0x7394}, //6168 #CJK UNIFIED IDEOGRAPH + {0xCB6C, 0x7392}, //6169 #CJK UNIFIED IDEOGRAPH + {0xCB6D, 0x753A}, //6170 #CJK UNIFIED IDEOGRAPH + {0xCB6E, 0x7539}, //6171 #CJK UNIFIED IDEOGRAPH + {0xCB6F, 0x7594}, //6172 #CJK UNIFIED IDEOGRAPH + {0xCB70, 0x7595}, //6173 #CJK UNIFIED IDEOGRAPH + {0xCB71, 0x7681}, //6174 #CJK UNIFIED IDEOGRAPH + {0xCB72, 0x793D}, //6175 #CJK UNIFIED IDEOGRAPH + {0xCB73, 0x8034}, //6176 #CJK UNIFIED IDEOGRAPH + {0xCB74, 0x8095}, //6177 #CJK UNIFIED IDEOGRAPH + {0xCB75, 0x8099}, //6178 #CJK UNIFIED IDEOGRAPH + {0xCB76, 0x8090}, //6179 #CJK UNIFIED IDEOGRAPH + {0xCB77, 0x8092}, //6180 #CJK UNIFIED IDEOGRAPH + {0xCB78, 0x809C}, //6181 #CJK UNIFIED IDEOGRAPH + {0xCB79, 0x8290}, //6182 #CJK UNIFIED IDEOGRAPH + {0xCB7A, 0x828F}, //6183 #CJK UNIFIED IDEOGRAPH + {0xCB7B, 0x8285}, //6184 #CJK UNIFIED IDEOGRAPH + {0xCB7C, 0x828E}, //6185 #CJK UNIFIED IDEOGRAPH + {0xCB7D, 0x8291}, //6186 #CJK UNIFIED IDEOGRAPH + {0xCB7E, 0x8293}, //6187 #CJK UNIFIED IDEOGRAPH + {0xCBA1, 0x828A}, //6188 #CJK UNIFIED IDEOGRAPH + {0xCBA2, 0x8283}, //6189 #CJK UNIFIED IDEOGRAPH + {0xCBA3, 0x8284}, //6190 #CJK UNIFIED IDEOGRAPH + {0xCBA4, 0x8C78}, //6191 #CJK UNIFIED IDEOGRAPH + {0xCBA5, 0x8FC9}, //6192 #CJK UNIFIED IDEOGRAPH + {0xCBA6, 0x8FBF}, //6193 #CJK UNIFIED IDEOGRAPH + {0xCBA7, 0x909F}, //6194 #CJK UNIFIED IDEOGRAPH + {0xCBA8, 0x90A1}, //6195 #CJK UNIFIED IDEOGRAPH + {0xCBA9, 0x90A5}, //6196 #CJK UNIFIED IDEOGRAPH + {0xCBAA, 0x909E}, //6197 #CJK UNIFIED IDEOGRAPH + {0xCBAB, 0x90A7}, //6198 #CJK UNIFIED IDEOGRAPH + {0xCBAC, 0x90A0}, //6199 #CJK UNIFIED IDEOGRAPH + {0xCBAD, 0x9630}, //6200 #CJK UNIFIED IDEOGRAPH + {0xCBAE, 0x9628}, //6201 #CJK UNIFIED IDEOGRAPH + {0xCBAF, 0x962F}, //6202 #CJK UNIFIED IDEOGRAPH + {0xCBB0, 0x962D}, //6203 #CJK UNIFIED IDEOGRAPH + {0xCBB1, 0x4E33}, //6204 #CJK UNIFIED IDEOGRAPH + {0xCBB2, 0x4F98}, //6205 #CJK UNIFIED IDEOGRAPH + {0xCBB3, 0x4F7C}, //6206 #CJK UNIFIED IDEOGRAPH + {0xCBB4, 0x4F85}, //6207 #CJK UNIFIED IDEOGRAPH + {0xCBB5, 0x4F7D}, //6208 #CJK UNIFIED IDEOGRAPH + {0xCBB6, 0x4F80}, //6209 #CJK UNIFIED IDEOGRAPH + {0xCBB7, 0x4F87}, //6210 #CJK UNIFIED IDEOGRAPH + {0xCBB8, 0x4F76}, //6211 #CJK UNIFIED IDEOGRAPH + {0xCBB9, 0x4F74}, //6212 #CJK UNIFIED IDEOGRAPH + {0xCBBA, 0x4F89}, //6213 #CJK UNIFIED IDEOGRAPH + {0xCBBB, 0x4F84}, //6214 #CJK UNIFIED IDEOGRAPH + {0xCBBC, 0x4F77}, //6215 #CJK UNIFIED IDEOGRAPH + {0xCBBD, 0x4F4C}, //6216 #CJK UNIFIED IDEOGRAPH + {0xCBBE, 0x4F97}, //6217 #CJK UNIFIED IDEOGRAPH + {0xCBBF, 0x4F6A}, //6218 #CJK UNIFIED IDEOGRAPH + {0xCBC0, 0x4F9A}, //6219 #CJK UNIFIED IDEOGRAPH + {0xCBC1, 0x4F79}, //6220 #CJK UNIFIED IDEOGRAPH + {0xCBC2, 0x4F81}, //6221 #CJK UNIFIED IDEOGRAPH + {0xCBC3, 0x4F78}, //6222 #CJK UNIFIED IDEOGRAPH + {0xCBC4, 0x4F90}, //6223 #CJK UNIFIED IDEOGRAPH + {0xCBC5, 0x4F9C}, //6224 #CJK UNIFIED IDEOGRAPH + {0xCBC6, 0x4F94}, //6225 #CJK UNIFIED IDEOGRAPH + {0xCBC7, 0x4F9E}, //6226 #CJK UNIFIED IDEOGRAPH + {0xCBC8, 0x4F92}, //6227 #CJK UNIFIED IDEOGRAPH + {0xCBC9, 0x4F82}, //6228 #CJK UNIFIED IDEOGRAPH + {0xCBCA, 0x4F95}, //6229 #CJK UNIFIED IDEOGRAPH + {0xCBCB, 0x4F6B}, //6230 #CJK UNIFIED IDEOGRAPH + {0xCBCC, 0x4F6E}, //6231 #CJK UNIFIED IDEOGRAPH + {0xCBCD, 0x519E}, //6232 #CJK UNIFIED IDEOGRAPH + {0xCBCE, 0x51BC}, //6233 #CJK UNIFIED IDEOGRAPH + {0xCBCF, 0x51BE}, //6234 #CJK UNIFIED IDEOGRAPH + {0xCBD0, 0x5235}, //6235 #CJK UNIFIED IDEOGRAPH + {0xCBD1, 0x5232}, //6236 #CJK UNIFIED IDEOGRAPH + {0xCBD2, 0x5233}, //6237 #CJK UNIFIED IDEOGRAPH + {0xCBD3, 0x5246}, //6238 #CJK UNIFIED IDEOGRAPH + {0xCBD4, 0x5231}, //6239 #CJK UNIFIED IDEOGRAPH + {0xCBD5, 0x52BC}, //6240 #CJK UNIFIED IDEOGRAPH + {0xCBD6, 0x530A}, //6241 #CJK UNIFIED IDEOGRAPH + {0xCBD7, 0x530B}, //6242 #CJK UNIFIED IDEOGRAPH + {0xCBD8, 0x533C}, //6243 #CJK UNIFIED IDEOGRAPH + {0xCBD9, 0x5392}, //6244 #CJK UNIFIED IDEOGRAPH + {0xCBDA, 0x5394}, //6245 #CJK UNIFIED IDEOGRAPH + {0xCBDB, 0x5487}, //6246 #CJK UNIFIED IDEOGRAPH + {0xCBDC, 0x547F}, //6247 #CJK UNIFIED IDEOGRAPH + {0xCBDD, 0x5481}, //6248 #CJK UNIFIED IDEOGRAPH + {0xCBDE, 0x5491}, //6249 #CJK UNIFIED IDEOGRAPH + {0xCBDF, 0x5482}, //6250 #CJK UNIFIED IDEOGRAPH + {0xCBE0, 0x5488}, //6251 #CJK UNIFIED IDEOGRAPH + {0xCBE1, 0x546B}, //6252 #CJK UNIFIED IDEOGRAPH + {0xCBE2, 0x547A}, //6253 #CJK UNIFIED IDEOGRAPH + {0xCBE3, 0x547E}, //6254 #CJK UNIFIED IDEOGRAPH + {0xCBE4, 0x5465}, //6255 #CJK UNIFIED IDEOGRAPH + {0xCBE5, 0x546C}, //6256 #CJK UNIFIED IDEOGRAPH + {0xCBE6, 0x5474}, //6257 #CJK UNIFIED IDEOGRAPH + {0xCBE7, 0x5466}, //6258 #CJK UNIFIED IDEOGRAPH + {0xCBE8, 0x548D}, //6259 #CJK UNIFIED IDEOGRAPH + {0xCBE9, 0x546F}, //6260 #CJK UNIFIED IDEOGRAPH + {0xCBEA, 0x5461}, //6261 #CJK UNIFIED IDEOGRAPH + {0xCBEB, 0x5460}, //6262 #CJK UNIFIED IDEOGRAPH + {0xCBEC, 0x5498}, //6263 #CJK UNIFIED IDEOGRAPH + {0xCBED, 0x5463}, //6264 #CJK UNIFIED IDEOGRAPH + {0xCBEE, 0x5467}, //6265 #CJK UNIFIED IDEOGRAPH + {0xCBEF, 0x5464}, //6266 #CJK UNIFIED IDEOGRAPH + {0xCBF0, 0x56F7}, //6267 #CJK UNIFIED IDEOGRAPH + {0xCBF1, 0x56F9}, //6268 #CJK UNIFIED IDEOGRAPH + {0xCBF2, 0x576F}, //6269 #CJK UNIFIED IDEOGRAPH + {0xCBF3, 0x5772}, //6270 #CJK UNIFIED IDEOGRAPH + {0xCBF4, 0x576D}, //6271 #CJK UNIFIED IDEOGRAPH + {0xCBF5, 0x576B}, //6272 #CJK UNIFIED IDEOGRAPH + {0xCBF6, 0x5771}, //6273 #CJK UNIFIED IDEOGRAPH + {0xCBF7, 0x5770}, //6274 #CJK UNIFIED IDEOGRAPH + {0xCBF8, 0x5776}, //6275 #CJK UNIFIED IDEOGRAPH + {0xCBF9, 0x5780}, //6276 #CJK UNIFIED IDEOGRAPH + {0xCBFA, 0x5775}, //6277 #CJK UNIFIED IDEOGRAPH + {0xCBFB, 0x577B}, //6278 #CJK UNIFIED IDEOGRAPH + {0xCBFC, 0x5773}, //6279 #CJK UNIFIED IDEOGRAPH + {0xCBFD, 0x5774}, //6280 #CJK UNIFIED IDEOGRAPH + {0xCBFE, 0x5762}, //6281 #CJK UNIFIED IDEOGRAPH + {0xCC40, 0x5768}, //6282 #CJK UNIFIED IDEOGRAPH + {0xCC41, 0x577D}, //6283 #CJK UNIFIED IDEOGRAPH + {0xCC42, 0x590C}, //6284 #CJK UNIFIED IDEOGRAPH + {0xCC43, 0x5945}, //6285 #CJK UNIFIED IDEOGRAPH + {0xCC44, 0x59B5}, //6286 #CJK UNIFIED IDEOGRAPH + {0xCC45, 0x59BA}, //6287 #CJK UNIFIED IDEOGRAPH + {0xCC46, 0x59CF}, //6288 #CJK UNIFIED IDEOGRAPH + {0xCC47, 0x59CE}, //6289 #CJK UNIFIED IDEOGRAPH + {0xCC48, 0x59B2}, //6290 #CJK UNIFIED IDEOGRAPH + {0xCC49, 0x59CC}, //6291 #CJK UNIFIED IDEOGRAPH + {0xCC4A, 0x59C1}, //6292 #CJK UNIFIED IDEOGRAPH + {0xCC4B, 0x59B6}, //6293 #CJK UNIFIED IDEOGRAPH + {0xCC4C, 0x59BC}, //6294 #CJK UNIFIED IDEOGRAPH + {0xCC4D, 0x59C3}, //6295 #CJK UNIFIED IDEOGRAPH + {0xCC4E, 0x59D6}, //6296 #CJK UNIFIED IDEOGRAPH + {0xCC4F, 0x59B1}, //6297 #CJK UNIFIED IDEOGRAPH + {0xCC50, 0x59BD}, //6298 #CJK UNIFIED IDEOGRAPH + {0xCC51, 0x59C0}, //6299 #CJK UNIFIED IDEOGRAPH + {0xCC52, 0x59C8}, //6300 #CJK UNIFIED IDEOGRAPH + {0xCC53, 0x59B4}, //6301 #CJK UNIFIED IDEOGRAPH + {0xCC54, 0x59C7}, //6302 #CJK UNIFIED IDEOGRAPH + {0xCC55, 0x5B62}, //6303 #CJK UNIFIED IDEOGRAPH + {0xCC56, 0x5B65}, //6304 #CJK UNIFIED IDEOGRAPH + {0xCC57, 0x5B93}, //6305 #CJK UNIFIED IDEOGRAPH + {0xCC58, 0x5B95}, //6306 #CJK UNIFIED IDEOGRAPH + {0xCC59, 0x5C44}, //6307 #CJK UNIFIED IDEOGRAPH + {0xCC5A, 0x5C47}, //6308 #CJK UNIFIED IDEOGRAPH + {0xCC5B, 0x5CAE}, //6309 #CJK UNIFIED IDEOGRAPH + {0xCC5C, 0x5CA4}, //6310 #CJK UNIFIED IDEOGRAPH + {0xCC5D, 0x5CA0}, //6311 #CJK UNIFIED IDEOGRAPH + {0xCC5E, 0x5CB5}, //6312 #CJK UNIFIED IDEOGRAPH + {0xCC5F, 0x5CAF}, //6313 #CJK UNIFIED IDEOGRAPH + {0xCC60, 0x5CA8}, //6314 #CJK UNIFIED IDEOGRAPH + {0xCC61, 0x5CAC}, //6315 #CJK UNIFIED IDEOGRAPH + {0xCC62, 0x5C9F}, //6316 #CJK UNIFIED IDEOGRAPH + {0xCC63, 0x5CA3}, //6317 #CJK UNIFIED IDEOGRAPH + {0xCC64, 0x5CAD}, //6318 #CJK UNIFIED IDEOGRAPH + {0xCC65, 0x5CA2}, //6319 #CJK UNIFIED IDEOGRAPH + {0xCC66, 0x5CAA}, //6320 #CJK UNIFIED IDEOGRAPH + {0xCC67, 0x5CA7}, //6321 #CJK UNIFIED IDEOGRAPH + {0xCC68, 0x5C9D}, //6322 #CJK UNIFIED IDEOGRAPH + {0xCC69, 0x5CA5}, //6323 #CJK UNIFIED IDEOGRAPH + {0xCC6A, 0x5CB6}, //6324 #CJK UNIFIED IDEOGRAPH + {0xCC6B, 0x5CB0}, //6325 #CJK UNIFIED IDEOGRAPH + {0xCC6C, 0x5CA6}, //6326 #CJK UNIFIED IDEOGRAPH + {0xCC6D, 0x5E17}, //6327 #CJK UNIFIED IDEOGRAPH + {0xCC6E, 0x5E14}, //6328 #CJK UNIFIED IDEOGRAPH + {0xCC6F, 0x5E19}, //6329 #CJK UNIFIED IDEOGRAPH + {0xCC70, 0x5F28}, //6330 #CJK UNIFIED IDEOGRAPH + {0xCC71, 0x5F22}, //6331 #CJK UNIFIED IDEOGRAPH + {0xCC72, 0x5F23}, //6332 #CJK UNIFIED IDEOGRAPH + {0xCC73, 0x5F24}, //6333 #CJK UNIFIED IDEOGRAPH + {0xCC74, 0x5F54}, //6334 #CJK UNIFIED IDEOGRAPH + {0xCC75, 0x5F82}, //6335 #CJK UNIFIED IDEOGRAPH + {0xCC76, 0x5F7E}, //6336 #CJK UNIFIED IDEOGRAPH + {0xCC77, 0x5F7D}, //6337 #CJK UNIFIED IDEOGRAPH + {0xCC78, 0x5FDE}, //6338 #CJK UNIFIED IDEOGRAPH + {0xCC79, 0x5FE5}, //6339 #CJK UNIFIED IDEOGRAPH + {0xCC7A, 0x602D}, //6340 #CJK UNIFIED IDEOGRAPH + {0xCC7B, 0x6026}, //6341 #CJK UNIFIED IDEOGRAPH + {0xCC7C, 0x6019}, //6342 #CJK UNIFIED IDEOGRAPH + {0xCC7D, 0x6032}, //6343 #CJK UNIFIED IDEOGRAPH + {0xCC7E, 0x600B}, //6344 #CJK UNIFIED IDEOGRAPH + {0xCCA1, 0x6034}, //6345 #CJK UNIFIED IDEOGRAPH + {0xCCA2, 0x600A}, //6346 #CJK UNIFIED IDEOGRAPH + {0xCCA3, 0x6017}, //6347 #CJK UNIFIED IDEOGRAPH + {0xCCA4, 0x6033}, //6348 #CJK UNIFIED IDEOGRAPH + {0xCCA5, 0x601A}, //6349 #CJK UNIFIED IDEOGRAPH + {0xCCA6, 0x601E}, //6350 #CJK UNIFIED IDEOGRAPH + {0xCCA7, 0x602C}, //6351 #CJK UNIFIED IDEOGRAPH + {0xCCA8, 0x6022}, //6352 #CJK UNIFIED IDEOGRAPH + {0xCCA9, 0x600D}, //6353 #CJK UNIFIED IDEOGRAPH + {0xCCAA, 0x6010}, //6354 #CJK UNIFIED IDEOGRAPH + {0xCCAB, 0x602E}, //6355 #CJK UNIFIED IDEOGRAPH + {0xCCAC, 0x6013}, //6356 #CJK UNIFIED IDEOGRAPH + {0xCCAD, 0x6011}, //6357 #CJK UNIFIED IDEOGRAPH + {0xCCAE, 0x600C}, //6358 #CJK UNIFIED IDEOGRAPH + {0xCCAF, 0x6009}, //6359 #CJK UNIFIED IDEOGRAPH + {0xCCB0, 0x601C}, //6360 #CJK UNIFIED IDEOGRAPH + {0xCCB1, 0x6214}, //6361 #CJK UNIFIED IDEOGRAPH + {0xCCB2, 0x623D}, //6362 #CJK UNIFIED IDEOGRAPH + {0xCCB3, 0x62AD}, //6363 #CJK UNIFIED IDEOGRAPH + {0xCCB4, 0x62B4}, //6364 #CJK UNIFIED IDEOGRAPH + {0xCCB5, 0x62D1}, //6365 #CJK UNIFIED IDEOGRAPH + {0xCCB6, 0x62BE}, //6366 #CJK UNIFIED IDEOGRAPH + {0xCCB7, 0x62AA}, //6367 #CJK UNIFIED IDEOGRAPH + {0xCCB8, 0x62B6}, //6368 #CJK UNIFIED IDEOGRAPH + {0xCCB9, 0x62CA}, //6369 #CJK UNIFIED IDEOGRAPH + {0xCCBA, 0x62AE}, //6370 #CJK UNIFIED IDEOGRAPH + {0xCCBB, 0x62B3}, //6371 #CJK UNIFIED IDEOGRAPH + {0xCCBC, 0x62AF}, //6372 #CJK UNIFIED IDEOGRAPH + {0xCCBD, 0x62BB}, //6373 #CJK UNIFIED IDEOGRAPH + {0xCCBE, 0x62A9}, //6374 #CJK UNIFIED IDEOGRAPH + {0xCCBF, 0x62B0}, //6375 #CJK UNIFIED IDEOGRAPH + {0xCCC0, 0x62B8}, //6376 #CJK UNIFIED IDEOGRAPH + {0xCCC1, 0x653D}, //6377 #CJK UNIFIED IDEOGRAPH + {0xCCC2, 0x65A8}, //6378 #CJK UNIFIED IDEOGRAPH + {0xCCC3, 0x65BB}, //6379 #CJK UNIFIED IDEOGRAPH + {0xCCC4, 0x6609}, //6380 #CJK UNIFIED IDEOGRAPH + {0xCCC5, 0x65FC}, //6381 #CJK UNIFIED IDEOGRAPH + {0xCCC6, 0x6604}, //6382 #CJK UNIFIED IDEOGRAPH + {0xCCC7, 0x6612}, //6383 #CJK UNIFIED IDEOGRAPH + {0xCCC8, 0x6608}, //6384 #CJK UNIFIED IDEOGRAPH + {0xCCC9, 0x65FB}, //6385 #CJK UNIFIED IDEOGRAPH + {0xCCCA, 0x6603}, //6386 #CJK UNIFIED IDEOGRAPH + {0xCCCB, 0x660B}, //6387 #CJK UNIFIED IDEOGRAPH + {0xCCCC, 0x660D}, //6388 #CJK UNIFIED IDEOGRAPH + {0xCCCD, 0x6605}, //6389 #CJK UNIFIED IDEOGRAPH + {0xCCCE, 0x65FD}, //6390 #CJK UNIFIED IDEOGRAPH + {0xCCCF, 0x6611}, //6391 #CJK UNIFIED IDEOGRAPH + {0xCCD0, 0x6610}, //6392 #CJK UNIFIED IDEOGRAPH + {0xCCD1, 0x66F6}, //6393 #CJK UNIFIED IDEOGRAPH + {0xCCD2, 0x670A}, //6394 #CJK UNIFIED IDEOGRAPH + {0xCCD3, 0x6785}, //6395 #CJK UNIFIED IDEOGRAPH + {0xCCD4, 0x676C}, //6396 #CJK UNIFIED IDEOGRAPH + {0xCCD5, 0x678E}, //6397 #CJK UNIFIED IDEOGRAPH + {0xCCD6, 0x6792}, //6398 #CJK UNIFIED IDEOGRAPH + {0xCCD7, 0x6776}, //6399 #CJK UNIFIED IDEOGRAPH + {0xCCD8, 0x677B}, //6400 #CJK UNIFIED IDEOGRAPH + {0xCCD9, 0x6798}, //6401 #CJK UNIFIED IDEOGRAPH + {0xCCDA, 0x6786}, //6402 #CJK UNIFIED IDEOGRAPH + {0xCCDB, 0x6784}, //6403 #CJK UNIFIED IDEOGRAPH + {0xCCDC, 0x6774}, //6404 #CJK UNIFIED IDEOGRAPH + {0xCCDD, 0x678D}, //6405 #CJK UNIFIED IDEOGRAPH + {0xCCDE, 0x678C}, //6406 #CJK UNIFIED IDEOGRAPH + {0xCCDF, 0x677A}, //6407 #CJK UNIFIED IDEOGRAPH + {0xCCE0, 0x679F}, //6408 #CJK UNIFIED IDEOGRAPH + {0xCCE1, 0x6791}, //6409 #CJK UNIFIED IDEOGRAPH + {0xCCE2, 0x6799}, //6410 #CJK UNIFIED IDEOGRAPH + {0xCCE3, 0x6783}, //6411 #CJK UNIFIED IDEOGRAPH + {0xCCE4, 0x677D}, //6412 #CJK UNIFIED IDEOGRAPH + {0xCCE5, 0x6781}, //6413 #CJK UNIFIED IDEOGRAPH + {0xCCE6, 0x6778}, //6414 #CJK UNIFIED IDEOGRAPH + {0xCCE7, 0x6779}, //6415 #CJK UNIFIED IDEOGRAPH + {0xCCE8, 0x6794}, //6416 #CJK UNIFIED IDEOGRAPH + {0xCCE9, 0x6B25}, //6417 #CJK UNIFIED IDEOGRAPH + {0xCCEA, 0x6B80}, //6418 #CJK UNIFIED IDEOGRAPH + {0xCCEB, 0x6B7E}, //6419 #CJK UNIFIED IDEOGRAPH + {0xCCEC, 0x6BDE}, //6420 #CJK UNIFIED IDEOGRAPH + {0xCCED, 0x6C1D}, //6421 #CJK UNIFIED IDEOGRAPH + {0xCCEE, 0x6C93}, //6422 #CJK UNIFIED IDEOGRAPH + {0xCCEF, 0x6CEC}, //6423 #CJK UNIFIED IDEOGRAPH + {0xCCF0, 0x6CEB}, //6424 #CJK UNIFIED IDEOGRAPH + {0xCCF1, 0x6CEE}, //6425 #CJK UNIFIED IDEOGRAPH + {0xCCF2, 0x6CD9}, //6426 #CJK UNIFIED IDEOGRAPH + {0xCCF3, 0x6CB6}, //6427 #CJK UNIFIED IDEOGRAPH + {0xCCF4, 0x6CD4}, //6428 #CJK UNIFIED IDEOGRAPH + {0xCCF5, 0x6CAD}, //6429 #CJK UNIFIED IDEOGRAPH + {0xCCF6, 0x6CE7}, //6430 #CJK UNIFIED IDEOGRAPH + {0xCCF7, 0x6CB7}, //6431 #CJK UNIFIED IDEOGRAPH + {0xCCF8, 0x6CD0}, //6432 #CJK UNIFIED IDEOGRAPH + {0xCCF9, 0x6CC2}, //6433 #CJK UNIFIED IDEOGRAPH + {0xCCFA, 0x6CBA}, //6434 #CJK UNIFIED IDEOGRAPH + {0xCCFB, 0x6CC3}, //6435 #CJK UNIFIED IDEOGRAPH + {0xCCFC, 0x6CC6}, //6436 #CJK UNIFIED IDEOGRAPH + {0xCCFD, 0x6CED}, //6437 #CJK UNIFIED IDEOGRAPH + {0xCCFE, 0x6CF2}, //6438 #CJK UNIFIED IDEOGRAPH + {0xCD40, 0x6CD2}, //6439 #CJK UNIFIED IDEOGRAPH + {0xCD41, 0x6CDD}, //6440 #CJK UNIFIED IDEOGRAPH + {0xCD42, 0x6CB4}, //6441 #CJK UNIFIED IDEOGRAPH + {0xCD43, 0x6C8A}, //6442 #CJK UNIFIED IDEOGRAPH + {0xCD44, 0x6C9D}, //6443 #CJK UNIFIED IDEOGRAPH + {0xCD45, 0x6C80}, //6444 #CJK UNIFIED IDEOGRAPH + {0xCD46, 0x6CDE}, //6445 #CJK UNIFIED IDEOGRAPH + {0xCD47, 0x6CC0}, //6446 #CJK UNIFIED IDEOGRAPH + {0xCD48, 0x6D30}, //6447 #CJK UNIFIED IDEOGRAPH + {0xCD49, 0x6CCD}, //6448 #CJK UNIFIED IDEOGRAPH + {0xCD4A, 0x6CC7}, //6449 #CJK UNIFIED IDEOGRAPH + {0xCD4B, 0x6CB0}, //6450 #CJK UNIFIED IDEOGRAPH + {0xCD4C, 0x6CF9}, //6451 #CJK UNIFIED IDEOGRAPH + {0xCD4D, 0x6CCF}, //6452 #CJK UNIFIED IDEOGRAPH + {0xCD4E, 0x6CE9}, //6453 #CJK UNIFIED IDEOGRAPH + {0xCD4F, 0x6CD1}, //6454 #CJK UNIFIED IDEOGRAPH + {0xCD50, 0x7094}, //6455 #CJK UNIFIED IDEOGRAPH + {0xCD51, 0x7098}, //6456 #CJK UNIFIED IDEOGRAPH + {0xCD52, 0x7085}, //6457 #CJK UNIFIED IDEOGRAPH + {0xCD53, 0x7093}, //6458 #CJK UNIFIED IDEOGRAPH + {0xCD54, 0x7086}, //6459 #CJK UNIFIED IDEOGRAPH + {0xCD55, 0x7084}, //6460 #CJK UNIFIED IDEOGRAPH + {0xCD56, 0x7091}, //6461 #CJK UNIFIED IDEOGRAPH + {0xCD57, 0x7096}, //6462 #CJK UNIFIED IDEOGRAPH + {0xCD58, 0x7082}, //6463 #CJK UNIFIED IDEOGRAPH + {0xCD59, 0x709A}, //6464 #CJK UNIFIED IDEOGRAPH + {0xCD5A, 0x7083}, //6465 #CJK UNIFIED IDEOGRAPH + {0xCD5B, 0x726A}, //6466 #CJK UNIFIED IDEOGRAPH + {0xCD5C, 0x72D6}, //6467 #CJK UNIFIED IDEOGRAPH + {0xCD5D, 0x72CB}, //6468 #CJK UNIFIED IDEOGRAPH + {0xCD5E, 0x72D8}, //6469 #CJK UNIFIED IDEOGRAPH + {0xCD5F, 0x72C9}, //6470 #CJK UNIFIED IDEOGRAPH + {0xCD60, 0x72DC}, //6471 #CJK UNIFIED IDEOGRAPH + {0xCD61, 0x72D2}, //6472 #CJK UNIFIED IDEOGRAPH + {0xCD62, 0x72D4}, //6473 #CJK UNIFIED IDEOGRAPH + {0xCD63, 0x72DA}, //6474 #CJK UNIFIED IDEOGRAPH + {0xCD64, 0x72CC}, //6475 #CJK UNIFIED IDEOGRAPH + {0xCD65, 0x72D1}, //6476 #CJK UNIFIED IDEOGRAPH + {0xCD66, 0x73A4}, //6477 #CJK UNIFIED IDEOGRAPH + {0xCD67, 0x73A1}, //6478 #CJK UNIFIED IDEOGRAPH + {0xCD68, 0x73AD}, //6479 #CJK UNIFIED IDEOGRAPH + {0xCD69, 0x73A6}, //6480 #CJK UNIFIED IDEOGRAPH + {0xCD6A, 0x73A2}, //6481 #CJK UNIFIED IDEOGRAPH + {0xCD6B, 0x73A0}, //6482 #CJK UNIFIED IDEOGRAPH + {0xCD6C, 0x73AC}, //6483 #CJK UNIFIED IDEOGRAPH + {0xCD6D, 0x739D}, //6484 #CJK UNIFIED IDEOGRAPH + {0xCD6E, 0x74DD}, //6485 #CJK UNIFIED IDEOGRAPH + {0xCD6F, 0x74E8}, //6486 #CJK UNIFIED IDEOGRAPH + {0xCD70, 0x753F}, //6487 #CJK UNIFIED IDEOGRAPH + {0xCD71, 0x7540}, //6488 #CJK UNIFIED IDEOGRAPH + {0xCD72, 0x753E}, //6489 #CJK UNIFIED IDEOGRAPH + {0xCD73, 0x758C}, //6490 #CJK UNIFIED IDEOGRAPH + {0xCD74, 0x7598}, //6491 #CJK UNIFIED IDEOGRAPH + {0xCD75, 0x76AF}, //6492 #CJK UNIFIED IDEOGRAPH + {0xCD76, 0x76F3}, //6493 #CJK UNIFIED IDEOGRAPH + {0xCD77, 0x76F1}, //6494 #CJK UNIFIED IDEOGRAPH + {0xCD78, 0x76F0}, //6495 #CJK UNIFIED IDEOGRAPH + {0xCD79, 0x76F5}, //6496 #CJK UNIFIED IDEOGRAPH + {0xCD7A, 0x77F8}, //6497 #CJK UNIFIED IDEOGRAPH + {0xCD7B, 0x77FC}, //6498 #CJK UNIFIED IDEOGRAPH + {0xCD7C, 0x77F9}, //6499 #CJK UNIFIED IDEOGRAPH + {0xCD7D, 0x77FB}, //6500 #CJK UNIFIED IDEOGRAPH + {0xCD7E, 0x77FA}, //6501 #CJK UNIFIED IDEOGRAPH + {0xCDA1, 0x77F7}, //6502 #CJK UNIFIED IDEOGRAPH + {0xCDA2, 0x7942}, //6503 #CJK UNIFIED IDEOGRAPH + {0xCDA3, 0x793F}, //6504 #CJK UNIFIED IDEOGRAPH + {0xCDA4, 0x79C5}, //6505 #CJK UNIFIED IDEOGRAPH + {0xCDA5, 0x7A78}, //6506 #CJK UNIFIED IDEOGRAPH + {0xCDA6, 0x7A7B}, //6507 #CJK UNIFIED IDEOGRAPH + {0xCDA7, 0x7AFB}, //6508 #CJK UNIFIED IDEOGRAPH + {0xCDA8, 0x7C75}, //6509 #CJK UNIFIED IDEOGRAPH + {0xCDA9, 0x7CFD}, //6510 #CJK UNIFIED IDEOGRAPH + {0xCDAA, 0x8035}, //6511 #CJK UNIFIED IDEOGRAPH + {0xCDAB, 0x808F}, //6512 #CJK UNIFIED IDEOGRAPH + {0xCDAC, 0x80AE}, //6513 #CJK UNIFIED IDEOGRAPH + {0xCDAD, 0x80A3}, //6514 #CJK UNIFIED IDEOGRAPH + {0xCDAE, 0x80B8}, //6515 #CJK UNIFIED IDEOGRAPH + {0xCDAF, 0x80B5}, //6516 #CJK UNIFIED IDEOGRAPH + {0xCDB0, 0x80AD}, //6517 #CJK UNIFIED IDEOGRAPH + {0xCDB1, 0x8220}, //6518 #CJK UNIFIED IDEOGRAPH + {0xCDB2, 0x82A0}, //6519 #CJK UNIFIED IDEOGRAPH + {0xCDB3, 0x82C0}, //6520 #CJK UNIFIED IDEOGRAPH + {0xCDB4, 0x82AB}, //6521 #CJK UNIFIED IDEOGRAPH + {0xCDB5, 0x829A}, //6522 #CJK UNIFIED IDEOGRAPH + {0xCDB6, 0x8298}, //6523 #CJK UNIFIED IDEOGRAPH + {0xCDB7, 0x829B}, //6524 #CJK UNIFIED IDEOGRAPH + {0xCDB8, 0x82B5}, //6525 #CJK UNIFIED IDEOGRAPH + {0xCDB9, 0x82A7}, //6526 #CJK UNIFIED IDEOGRAPH + {0xCDBA, 0x82AE}, //6527 #CJK UNIFIED IDEOGRAPH + {0xCDBB, 0x82BC}, //6528 #CJK UNIFIED IDEOGRAPH + {0xCDBC, 0x829E}, //6529 #CJK UNIFIED IDEOGRAPH + {0xCDBD, 0x82BA}, //6530 #CJK UNIFIED IDEOGRAPH + {0xCDBE, 0x82B4}, //6531 #CJK UNIFIED IDEOGRAPH + {0xCDBF, 0x82A8}, //6532 #CJK UNIFIED IDEOGRAPH + {0xCDC0, 0x82A1}, //6533 #CJK UNIFIED IDEOGRAPH + {0xCDC1, 0x82A9}, //6534 #CJK UNIFIED IDEOGRAPH + {0xCDC2, 0x82C2}, //6535 #CJK UNIFIED IDEOGRAPH + {0xCDC3, 0x82A4}, //6536 #CJK UNIFIED IDEOGRAPH + {0xCDC4, 0x82C3}, //6537 #CJK UNIFIED IDEOGRAPH + {0xCDC5, 0x82B6}, //6538 #CJK UNIFIED IDEOGRAPH + {0xCDC6, 0x82A2}, //6539 #CJK UNIFIED IDEOGRAPH + {0xCDC7, 0x8670}, //6540 #CJK UNIFIED IDEOGRAPH + {0xCDC8, 0x866F}, //6541 #CJK UNIFIED IDEOGRAPH + {0xCDC9, 0x866D}, //6542 #CJK UNIFIED IDEOGRAPH + {0xCDCA, 0x866E}, //6543 #CJK UNIFIED IDEOGRAPH + {0xCDCB, 0x8C56}, //6544 #CJK UNIFIED IDEOGRAPH + {0xCDCC, 0x8FD2}, //6545 #CJK UNIFIED IDEOGRAPH + {0xCDCD, 0x8FCB}, //6546 #CJK UNIFIED IDEOGRAPH + {0xCDCE, 0x8FD3}, //6547 #CJK UNIFIED IDEOGRAPH + {0xCDCF, 0x8FCD}, //6548 #CJK UNIFIED IDEOGRAPH + {0xCDD0, 0x8FD6}, //6549 #CJK UNIFIED IDEOGRAPH + {0xCDD1, 0x8FD5}, //6550 #CJK UNIFIED IDEOGRAPH + {0xCDD2, 0x8FD7}, //6551 #CJK UNIFIED IDEOGRAPH + {0xCDD3, 0x90B2}, //6552 #CJK UNIFIED IDEOGRAPH + {0xCDD4, 0x90B4}, //6553 #CJK UNIFIED IDEOGRAPH + {0xCDD5, 0x90AF}, //6554 #CJK UNIFIED IDEOGRAPH + {0xCDD6, 0x90B3}, //6555 #CJK UNIFIED IDEOGRAPH + {0xCDD7, 0x90B0}, //6556 #CJK UNIFIED IDEOGRAPH + {0xCDD8, 0x9639}, //6557 #CJK UNIFIED IDEOGRAPH + {0xCDD9, 0x963D}, //6558 #CJK UNIFIED IDEOGRAPH + {0xCDDA, 0x963C}, //6559 #CJK UNIFIED IDEOGRAPH + {0xCDDB, 0x963A}, //6560 #CJK UNIFIED IDEOGRAPH + {0xCDDC, 0x9643}, //6561 #CJK UNIFIED IDEOGRAPH + {0xCDDD, 0x4FCD}, //6562 #CJK UNIFIED IDEOGRAPH + {0xCDDE, 0x4FC5}, //6563 #CJK UNIFIED IDEOGRAPH + {0xCDDF, 0x4FD3}, //6564 #CJK UNIFIED IDEOGRAPH + {0xCDE0, 0x4FB2}, //6565 #CJK UNIFIED IDEOGRAPH + {0xCDE1, 0x4FC9}, //6566 #CJK UNIFIED IDEOGRAPH + {0xCDE2, 0x4FCB}, //6567 #CJK UNIFIED IDEOGRAPH + {0xCDE3, 0x4FC1}, //6568 #CJK UNIFIED IDEOGRAPH + {0xCDE4, 0x4FD4}, //6569 #CJK UNIFIED IDEOGRAPH + {0xCDE5, 0x4FDC}, //6570 #CJK UNIFIED IDEOGRAPH + {0xCDE6, 0x4FD9}, //6571 #CJK UNIFIED IDEOGRAPH + {0xCDE7, 0x4FBB}, //6572 #CJK UNIFIED IDEOGRAPH + {0xCDE8, 0x4FB3}, //6573 #CJK UNIFIED IDEOGRAPH + {0xCDE9, 0x4FDB}, //6574 #CJK UNIFIED IDEOGRAPH + {0xCDEA, 0x4FC7}, //6575 #CJK UNIFIED IDEOGRAPH + {0xCDEB, 0x4FD6}, //6576 #CJK UNIFIED IDEOGRAPH + {0xCDEC, 0x4FBA}, //6577 #CJK UNIFIED IDEOGRAPH + {0xCDED, 0x4FC0}, //6578 #CJK UNIFIED IDEOGRAPH + {0xCDEE, 0x4FB9}, //6579 #CJK UNIFIED IDEOGRAPH + {0xCDEF, 0x4FEC}, //6580 #CJK UNIFIED IDEOGRAPH + {0xCDF0, 0x5244}, //6581 #CJK UNIFIED IDEOGRAPH + {0xCDF1, 0x5249}, //6582 #CJK UNIFIED IDEOGRAPH + {0xCDF2, 0x52C0}, //6583 #CJK UNIFIED IDEOGRAPH + {0xCDF3, 0x52C2}, //6584 #CJK UNIFIED IDEOGRAPH + {0xCDF4, 0x533D}, //6585 #CJK UNIFIED IDEOGRAPH + {0xCDF5, 0x537C}, //6586 #CJK UNIFIED IDEOGRAPH + {0xCDF6, 0x5397}, //6587 #CJK UNIFIED IDEOGRAPH + {0xCDF7, 0x5396}, //6588 #CJK UNIFIED IDEOGRAPH + {0xCDF8, 0x5399}, //6589 #CJK UNIFIED IDEOGRAPH + {0xCDF9, 0x5398}, //6590 #CJK UNIFIED IDEOGRAPH + {0xCDFA, 0x54BA}, //6591 #CJK UNIFIED IDEOGRAPH + {0xCDFB, 0x54A1}, //6592 #CJK UNIFIED IDEOGRAPH + {0xCDFC, 0x54AD}, //6593 #CJK UNIFIED IDEOGRAPH + {0xCDFD, 0x54A5}, //6594 #CJK UNIFIED IDEOGRAPH + {0xCDFE, 0x54CF}, //6595 #CJK UNIFIED IDEOGRAPH + {0xCE40, 0x54C3}, //6596 #CJK UNIFIED IDEOGRAPH + {0xCE41, 0x830D}, //6597 #CJK UNIFIED IDEOGRAPH + {0xCE42, 0x54B7}, //6598 #CJK UNIFIED IDEOGRAPH + {0xCE43, 0x54AE}, //6599 #CJK UNIFIED IDEOGRAPH + {0xCE44, 0x54D6}, //6600 #CJK UNIFIED IDEOGRAPH + {0xCE45, 0x54B6}, //6601 #CJK UNIFIED IDEOGRAPH + {0xCE46, 0x54C5}, //6602 #CJK UNIFIED IDEOGRAPH + {0xCE47, 0x54C6}, //6603 #CJK UNIFIED IDEOGRAPH + {0xCE48, 0x54A0}, //6604 #CJK UNIFIED IDEOGRAPH + {0xCE49, 0x5470}, //6605 #CJK UNIFIED IDEOGRAPH + {0xCE4A, 0x54BC}, //6606 #CJK UNIFIED IDEOGRAPH + {0xCE4B, 0x54A2}, //6607 #CJK UNIFIED IDEOGRAPH + {0xCE4C, 0x54BE}, //6608 #CJK UNIFIED IDEOGRAPH + {0xCE4D, 0x5472}, //6609 #CJK UNIFIED IDEOGRAPH + {0xCE4E, 0x54DE}, //6610 #CJK UNIFIED IDEOGRAPH + {0xCE4F, 0x54B0}, //6611 #CJK UNIFIED IDEOGRAPH + {0xCE50, 0x57B5}, //6612 #CJK UNIFIED IDEOGRAPH + {0xCE51, 0x579E}, //6613 #CJK UNIFIED IDEOGRAPH + {0xCE52, 0x579F}, //6614 #CJK UNIFIED IDEOGRAPH + {0xCE53, 0x57A4}, //6615 #CJK UNIFIED IDEOGRAPH + {0xCE54, 0x578C}, //6616 #CJK UNIFIED IDEOGRAPH + {0xCE55, 0x5797}, //6617 #CJK UNIFIED IDEOGRAPH + {0xCE56, 0x579D}, //6618 #CJK UNIFIED IDEOGRAPH + {0xCE57, 0x579B}, //6619 #CJK UNIFIED IDEOGRAPH + {0xCE58, 0x5794}, //6620 #CJK UNIFIED IDEOGRAPH + {0xCE59, 0x5798}, //6621 #CJK UNIFIED IDEOGRAPH + {0xCE5A, 0x578F}, //6622 #CJK UNIFIED IDEOGRAPH + {0xCE5B, 0x5799}, //6623 #CJK UNIFIED IDEOGRAPH + {0xCE5C, 0x57A5}, //6624 #CJK UNIFIED IDEOGRAPH + {0xCE5D, 0x579A}, //6625 #CJK UNIFIED IDEOGRAPH + {0xCE5E, 0x5795}, //6626 #CJK UNIFIED IDEOGRAPH + {0xCE5F, 0x58F4}, //6627 #CJK UNIFIED IDEOGRAPH + {0xCE60, 0x590D}, //6628 #CJK UNIFIED IDEOGRAPH + {0xCE61, 0x5953}, //6629 #CJK UNIFIED IDEOGRAPH + {0xCE62, 0x59E1}, //6630 #CJK UNIFIED IDEOGRAPH + {0xCE63, 0x59DE}, //6631 #CJK UNIFIED IDEOGRAPH + {0xCE64, 0x59EE}, //6632 #CJK UNIFIED IDEOGRAPH + {0xCE65, 0x5A00}, //6633 #CJK UNIFIED IDEOGRAPH + {0xCE66, 0x59F1}, //6634 #CJK UNIFIED IDEOGRAPH + {0xCE67, 0x59DD}, //6635 #CJK UNIFIED IDEOGRAPH + {0xCE68, 0x59FA}, //6636 #CJK UNIFIED IDEOGRAPH + {0xCE69, 0x59FD}, //6637 #CJK UNIFIED IDEOGRAPH + {0xCE6A, 0x59FC}, //6638 #CJK UNIFIED IDEOGRAPH + {0xCE6B, 0x59F6}, //6639 #CJK UNIFIED IDEOGRAPH + {0xCE6C, 0x59E4}, //6640 #CJK UNIFIED IDEOGRAPH + {0xCE6D, 0x59F2}, //6641 #CJK UNIFIED IDEOGRAPH + {0xCE6E, 0x59F7}, //6642 #CJK UNIFIED IDEOGRAPH + {0xCE6F, 0x59DB}, //6643 #CJK UNIFIED IDEOGRAPH + {0xCE70, 0x59E9}, //6644 #CJK UNIFIED IDEOGRAPH + {0xCE71, 0x59F3}, //6645 #CJK UNIFIED IDEOGRAPH + {0xCE72, 0x59F5}, //6646 #CJK UNIFIED IDEOGRAPH + {0xCE73, 0x59E0}, //6647 #CJK UNIFIED IDEOGRAPH + {0xCE74, 0x59FE}, //6648 #CJK UNIFIED IDEOGRAPH + {0xCE75, 0x59F4}, //6649 #CJK UNIFIED IDEOGRAPH + {0xCE76, 0x59ED}, //6650 #CJK UNIFIED IDEOGRAPH + {0xCE77, 0x5BA8}, //6651 #CJK UNIFIED IDEOGRAPH + {0xCE78, 0x5C4C}, //6652 #CJK UNIFIED IDEOGRAPH + {0xCE79, 0x5CD0}, //6653 #CJK UNIFIED IDEOGRAPH + {0xCE7A, 0x5CD8}, //6654 #CJK UNIFIED IDEOGRAPH + {0xCE7B, 0x5CCC}, //6655 #CJK UNIFIED IDEOGRAPH + {0xCE7C, 0x5CD7}, //6656 #CJK UNIFIED IDEOGRAPH + {0xCE7D, 0x5CCB}, //6657 #CJK UNIFIED IDEOGRAPH + {0xCE7E, 0x5CDB}, //6658 #CJK UNIFIED IDEOGRAPH + {0xCEA1, 0x5CDE}, //6659 #CJK UNIFIED IDEOGRAPH + {0xCEA2, 0x5CDA}, //6660 #CJK UNIFIED IDEOGRAPH + {0xCEA3, 0x5CC9}, //6661 #CJK UNIFIED IDEOGRAPH + {0xCEA4, 0x5CC7}, //6662 #CJK UNIFIED IDEOGRAPH + {0xCEA5, 0x5CCA}, //6663 #CJK UNIFIED IDEOGRAPH + {0xCEA6, 0x5CD6}, //6664 #CJK UNIFIED IDEOGRAPH + {0xCEA7, 0x5CD3}, //6665 #CJK UNIFIED IDEOGRAPH + {0xCEA8, 0x5CD4}, //6666 #CJK UNIFIED IDEOGRAPH + {0xCEA9, 0x5CCF}, //6667 #CJK UNIFIED IDEOGRAPH + {0xCEAA, 0x5CC8}, //6668 #CJK UNIFIED IDEOGRAPH + {0xCEAB, 0x5CC6}, //6669 #CJK UNIFIED IDEOGRAPH + {0xCEAC, 0x5CCE}, //6670 #CJK UNIFIED IDEOGRAPH + {0xCEAD, 0x5CDF}, //6671 #CJK UNIFIED IDEOGRAPH + {0xCEAE, 0x5CF8}, //6672 #CJK UNIFIED IDEOGRAPH + {0xCEAF, 0x5DF9}, //6673 #CJK UNIFIED IDEOGRAPH + {0xCEB0, 0x5E21}, //6674 #CJK UNIFIED IDEOGRAPH + {0xCEB1, 0x5E22}, //6675 #CJK UNIFIED IDEOGRAPH + {0xCEB2, 0x5E23}, //6676 #CJK UNIFIED IDEOGRAPH + {0xCEB3, 0x5E20}, //6677 #CJK UNIFIED IDEOGRAPH + {0xCEB4, 0x5E24}, //6678 #CJK UNIFIED IDEOGRAPH + {0xCEB5, 0x5EB0}, //6679 #CJK UNIFIED IDEOGRAPH + {0xCEB6, 0x5EA4}, //6680 #CJK UNIFIED IDEOGRAPH + {0xCEB7, 0x5EA2}, //6681 #CJK UNIFIED IDEOGRAPH + {0xCEB8, 0x5E9B}, //6682 #CJK UNIFIED IDEOGRAPH + {0xCEB9, 0x5EA3}, //6683 #CJK UNIFIED IDEOGRAPH + {0xCEBA, 0x5EA5}, //6684 #CJK UNIFIED IDEOGRAPH + {0xCEBB, 0x5F07}, //6685 #CJK UNIFIED IDEOGRAPH + {0xCEBC, 0x5F2E}, //6686 #CJK UNIFIED IDEOGRAPH + {0xCEBD, 0x5F56}, //6687 #CJK UNIFIED IDEOGRAPH + {0xCEBE, 0x5F86}, //6688 #CJK UNIFIED IDEOGRAPH + {0xCEBF, 0x6037}, //6689 #CJK UNIFIED IDEOGRAPH + {0xCEC0, 0x6039}, //6690 #CJK UNIFIED IDEOGRAPH + {0xCEC1, 0x6054}, //6691 #CJK UNIFIED IDEOGRAPH + {0xCEC2, 0x6072}, //6692 #CJK UNIFIED IDEOGRAPH + {0xCEC3, 0x605E}, //6693 #CJK UNIFIED IDEOGRAPH + {0xCEC4, 0x6045}, //6694 #CJK UNIFIED IDEOGRAPH + {0xCEC5, 0x6053}, //6695 #CJK UNIFIED IDEOGRAPH + {0xCEC6, 0x6047}, //6696 #CJK UNIFIED IDEOGRAPH + {0xCEC7, 0x6049}, //6697 #CJK UNIFIED IDEOGRAPH + {0xCEC8, 0x605B}, //6698 #CJK UNIFIED IDEOGRAPH + {0xCEC9, 0x604C}, //6699 #CJK UNIFIED IDEOGRAPH + {0xCECA, 0x6040}, //6700 #CJK UNIFIED IDEOGRAPH + {0xCECB, 0x6042}, //6701 #CJK UNIFIED IDEOGRAPH + {0xCECC, 0x605F}, //6702 #CJK UNIFIED IDEOGRAPH + {0xCECD, 0x6024}, //6703 #CJK UNIFIED IDEOGRAPH + {0xCECE, 0x6044}, //6704 #CJK UNIFIED IDEOGRAPH + {0xCECF, 0x6058}, //6705 #CJK UNIFIED IDEOGRAPH + {0xCED0, 0x6066}, //6706 #CJK UNIFIED IDEOGRAPH + {0xCED1, 0x606E}, //6707 #CJK UNIFIED IDEOGRAPH + {0xCED2, 0x6242}, //6708 #CJK UNIFIED IDEOGRAPH + {0xCED3, 0x6243}, //6709 #CJK UNIFIED IDEOGRAPH + {0xCED4, 0x62CF}, //6710 #CJK UNIFIED IDEOGRAPH + {0xCED5, 0x630D}, //6711 #CJK UNIFIED IDEOGRAPH + {0xCED6, 0x630B}, //6712 #CJK UNIFIED IDEOGRAPH + {0xCED7, 0x62F5}, //6713 #CJK UNIFIED IDEOGRAPH + {0xCED8, 0x630E}, //6714 #CJK UNIFIED IDEOGRAPH + {0xCED9, 0x6303}, //6715 #CJK UNIFIED IDEOGRAPH + {0xCEDA, 0x62EB}, //6716 #CJK UNIFIED IDEOGRAPH + {0xCEDB, 0x62F9}, //6717 #CJK UNIFIED IDEOGRAPH + {0xCEDC, 0x630F}, //6718 #CJK UNIFIED IDEOGRAPH + {0xCEDD, 0x630C}, //6719 #CJK UNIFIED IDEOGRAPH + {0xCEDE, 0x62F8}, //6720 #CJK UNIFIED IDEOGRAPH + {0xCEDF, 0x62F6}, //6721 #CJK UNIFIED IDEOGRAPH + {0xCEE0, 0x6300}, //6722 #CJK UNIFIED IDEOGRAPH + {0xCEE1, 0x6313}, //6723 #CJK UNIFIED IDEOGRAPH + {0xCEE2, 0x6314}, //6724 #CJK UNIFIED IDEOGRAPH + {0xCEE3, 0x62FA}, //6725 #CJK UNIFIED IDEOGRAPH + {0xCEE4, 0x6315}, //6726 #CJK UNIFIED IDEOGRAPH + {0xCEE5, 0x62FB}, //6727 #CJK UNIFIED IDEOGRAPH + {0xCEE6, 0x62F0}, //6728 #CJK UNIFIED IDEOGRAPH + {0xCEE7, 0x6541}, //6729 #CJK UNIFIED IDEOGRAPH + {0xCEE8, 0x6543}, //6730 #CJK UNIFIED IDEOGRAPH + {0xCEE9, 0x65AA}, //6731 #CJK UNIFIED IDEOGRAPH + {0xCEEA, 0x65BF}, //6732 #CJK UNIFIED IDEOGRAPH + {0xCEEB, 0x6636}, //6733 #CJK UNIFIED IDEOGRAPH + {0xCEEC, 0x6621}, //6734 #CJK UNIFIED IDEOGRAPH + {0xCEED, 0x6632}, //6735 #CJK UNIFIED IDEOGRAPH + {0xCEEE, 0x6635}, //6736 #CJK UNIFIED IDEOGRAPH + {0xCEEF, 0x661C}, //6737 #CJK UNIFIED IDEOGRAPH + {0xCEF0, 0x6626}, //6738 #CJK UNIFIED IDEOGRAPH + {0xCEF1, 0x6622}, //6739 #CJK UNIFIED IDEOGRAPH + {0xCEF2, 0x6633}, //6740 #CJK UNIFIED IDEOGRAPH + {0xCEF3, 0x662B}, //6741 #CJK UNIFIED IDEOGRAPH + {0xCEF4, 0x663A}, //6742 #CJK UNIFIED IDEOGRAPH + {0xCEF5, 0x661D}, //6743 #CJK UNIFIED IDEOGRAPH + {0xCEF6, 0x6634}, //6744 #CJK UNIFIED IDEOGRAPH + {0xCEF7, 0x6639}, //6745 #CJK UNIFIED IDEOGRAPH + {0xCEF8, 0x662E}, //6746 #CJK UNIFIED IDEOGRAPH + {0xCEF9, 0x670F}, //6747 #CJK UNIFIED IDEOGRAPH + {0xCEFA, 0x6710}, //6748 #CJK UNIFIED IDEOGRAPH + {0xCEFB, 0x67C1}, //6749 #CJK UNIFIED IDEOGRAPH + {0xCEFC, 0x67F2}, //6750 #CJK UNIFIED IDEOGRAPH + {0xCEFD, 0x67C8}, //6751 #CJK UNIFIED IDEOGRAPH + {0xCEFE, 0x67BA}, //6752 #CJK UNIFIED IDEOGRAPH + {0xCF40, 0x67DC}, //6753 #CJK UNIFIED IDEOGRAPH + {0xCF41, 0x67BB}, //6754 #CJK UNIFIED IDEOGRAPH + {0xCF42, 0x67F8}, //6755 #CJK UNIFIED IDEOGRAPH + {0xCF43, 0x67D8}, //6756 #CJK UNIFIED IDEOGRAPH + {0xCF44, 0x67C0}, //6757 #CJK UNIFIED IDEOGRAPH + {0xCF45, 0x67B7}, //6758 #CJK UNIFIED IDEOGRAPH + {0xCF46, 0x67C5}, //6759 #CJK UNIFIED IDEOGRAPH + {0xCF47, 0x67EB}, //6760 #CJK UNIFIED IDEOGRAPH + {0xCF48, 0x67E4}, //6761 #CJK UNIFIED IDEOGRAPH + {0xCF49, 0x67DF}, //6762 #CJK UNIFIED IDEOGRAPH + {0xCF4A, 0x67B5}, //6763 #CJK UNIFIED IDEOGRAPH + {0xCF4B, 0x67CD}, //6764 #CJK UNIFIED IDEOGRAPH + {0xCF4C, 0x67B3}, //6765 #CJK UNIFIED IDEOGRAPH + {0xCF4D, 0x67F7}, //6766 #CJK UNIFIED IDEOGRAPH + {0xCF4E, 0x67F6}, //6767 #CJK UNIFIED IDEOGRAPH + {0xCF4F, 0x67EE}, //6768 #CJK UNIFIED IDEOGRAPH + {0xCF50, 0x67E3}, //6769 #CJK UNIFIED IDEOGRAPH + {0xCF51, 0x67C2}, //6770 #CJK UNIFIED IDEOGRAPH + {0xCF52, 0x67B9}, //6771 #CJK UNIFIED IDEOGRAPH + {0xCF53, 0x67CE}, //6772 #CJK UNIFIED IDEOGRAPH + {0xCF54, 0x67E7}, //6773 #CJK UNIFIED IDEOGRAPH + {0xCF55, 0x67F0}, //6774 #CJK UNIFIED IDEOGRAPH + {0xCF56, 0x67B2}, //6775 #CJK UNIFIED IDEOGRAPH + {0xCF57, 0x67FC}, //6776 #CJK UNIFIED IDEOGRAPH + {0xCF58, 0x67C6}, //6777 #CJK UNIFIED IDEOGRAPH + {0xCF59, 0x67ED}, //6778 #CJK UNIFIED IDEOGRAPH + {0xCF5A, 0x67CC}, //6779 #CJK UNIFIED IDEOGRAPH + {0xCF5B, 0x67AE}, //6780 #CJK UNIFIED IDEOGRAPH + {0xCF5C, 0x67E6}, //6781 #CJK UNIFIED IDEOGRAPH + {0xCF5D, 0x67DB}, //6782 #CJK UNIFIED IDEOGRAPH + {0xCF5E, 0x67FA}, //6783 #CJK UNIFIED IDEOGRAPH + {0xCF5F, 0x67C9}, //6784 #CJK UNIFIED IDEOGRAPH + {0xCF60, 0x67CA}, //6785 #CJK UNIFIED IDEOGRAPH + {0xCF61, 0x67C3}, //6786 #CJK UNIFIED IDEOGRAPH + {0xCF62, 0x67EA}, //6787 #CJK UNIFIED IDEOGRAPH + {0xCF63, 0x67CB}, //6788 #CJK UNIFIED IDEOGRAPH + {0xCF64, 0x6B28}, //6789 #CJK UNIFIED IDEOGRAPH + {0xCF65, 0x6B82}, //6790 #CJK UNIFIED IDEOGRAPH + {0xCF66, 0x6B84}, //6791 #CJK UNIFIED IDEOGRAPH + {0xCF67, 0x6BB6}, //6792 #CJK UNIFIED IDEOGRAPH + {0xCF68, 0x6BD6}, //6793 #CJK UNIFIED IDEOGRAPH + {0xCF69, 0x6BD8}, //6794 #CJK UNIFIED IDEOGRAPH + {0xCF6A, 0x6BE0}, //6795 #CJK UNIFIED IDEOGRAPH + {0xCF6B, 0x6C20}, //6796 #CJK UNIFIED IDEOGRAPH + {0xCF6C, 0x6C21}, //6797 #CJK UNIFIED IDEOGRAPH + {0xCF6D, 0x6D28}, //6798 #CJK UNIFIED IDEOGRAPH + {0xCF6E, 0x6D34}, //6799 #CJK UNIFIED IDEOGRAPH + {0xCF6F, 0x6D2D}, //6800 #CJK UNIFIED IDEOGRAPH + {0xCF70, 0x6D1F}, //6801 #CJK UNIFIED IDEOGRAPH + {0xCF71, 0x6D3C}, //6802 #CJK UNIFIED IDEOGRAPH + {0xCF72, 0x6D3F}, //6803 #CJK UNIFIED IDEOGRAPH + {0xCF73, 0x6D12}, //6804 #CJK UNIFIED IDEOGRAPH + {0xCF74, 0x6D0A}, //6805 #CJK UNIFIED IDEOGRAPH + {0xCF75, 0x6CDA}, //6806 #CJK UNIFIED IDEOGRAPH + {0xCF76, 0x6D33}, //6807 #CJK UNIFIED IDEOGRAPH + {0xCF77, 0x6D04}, //6808 #CJK UNIFIED IDEOGRAPH + {0xCF78, 0x6D19}, //6809 #CJK UNIFIED IDEOGRAPH + {0xCF79, 0x6D3A}, //6810 #CJK UNIFIED IDEOGRAPH + {0xCF7A, 0x6D1A}, //6811 #CJK UNIFIED IDEOGRAPH + {0xCF7B, 0x6D11}, //6812 #CJK UNIFIED IDEOGRAPH + {0xCF7C, 0x6D00}, //6813 #CJK UNIFIED IDEOGRAPH + {0xCF7D, 0x6D1D}, //6814 #CJK UNIFIED IDEOGRAPH + {0xCF7E, 0x6D42}, //6815 #CJK UNIFIED IDEOGRAPH + {0xCFA1, 0x6D01}, //6816 #CJK UNIFIED IDEOGRAPH + {0xCFA2, 0x6D18}, //6817 #CJK UNIFIED IDEOGRAPH + {0xCFA3, 0x6D37}, //6818 #CJK UNIFIED IDEOGRAPH + {0xCFA4, 0x6D03}, //6819 #CJK UNIFIED IDEOGRAPH + {0xCFA5, 0x6D0F}, //6820 #CJK UNIFIED IDEOGRAPH + {0xCFA6, 0x6D40}, //6821 #CJK UNIFIED IDEOGRAPH + {0xCFA7, 0x6D07}, //6822 #CJK UNIFIED IDEOGRAPH + {0xCFA8, 0x6D20}, //6823 #CJK UNIFIED IDEOGRAPH + {0xCFA9, 0x6D2C}, //6824 #CJK UNIFIED IDEOGRAPH + {0xCFAA, 0x6D08}, //6825 #CJK UNIFIED IDEOGRAPH + {0xCFAB, 0x6D22}, //6826 #CJK UNIFIED IDEOGRAPH + {0xCFAC, 0x6D09}, //6827 #CJK UNIFIED IDEOGRAPH + {0xCFAD, 0x6D10}, //6828 #CJK UNIFIED IDEOGRAPH + {0xCFAE, 0x70B7}, //6829 #CJK UNIFIED IDEOGRAPH + {0xCFAF, 0x709F}, //6830 #CJK UNIFIED IDEOGRAPH + {0xCFB0, 0x70BE}, //6831 #CJK UNIFIED IDEOGRAPH + {0xCFB1, 0x70B1}, //6832 #CJK UNIFIED IDEOGRAPH + {0xCFB2, 0x70B0}, //6833 #CJK UNIFIED IDEOGRAPH + {0xCFB3, 0x70A1}, //6834 #CJK UNIFIED IDEOGRAPH + {0xCFB4, 0x70B4}, //6835 #CJK UNIFIED IDEOGRAPH + {0xCFB5, 0x70B5}, //6836 #CJK UNIFIED IDEOGRAPH + {0xCFB6, 0x70A9}, //6837 #CJK UNIFIED IDEOGRAPH + {0xCFB7, 0x7241}, //6838 #CJK UNIFIED IDEOGRAPH + {0xCFB8, 0x7249}, //6839 #CJK UNIFIED IDEOGRAPH + {0xCFB9, 0x724A}, //6840 #CJK UNIFIED IDEOGRAPH + {0xCFBA, 0x726C}, //6841 #CJK UNIFIED IDEOGRAPH + {0xCFBB, 0x7270}, //6842 #CJK UNIFIED IDEOGRAPH + {0xCFBC, 0x7273}, //6843 #CJK UNIFIED IDEOGRAPH + {0xCFBD, 0x726E}, //6844 #CJK UNIFIED IDEOGRAPH + {0xCFBE, 0x72CA}, //6845 #CJK UNIFIED IDEOGRAPH + {0xCFBF, 0x72E4}, //6846 #CJK UNIFIED IDEOGRAPH + {0xCFC0, 0x72E8}, //6847 #CJK UNIFIED IDEOGRAPH + {0xCFC1, 0x72EB}, //6848 #CJK UNIFIED IDEOGRAPH + {0xCFC2, 0x72DF}, //6849 #CJK UNIFIED IDEOGRAPH + {0xCFC3, 0x72EA}, //6850 #CJK UNIFIED IDEOGRAPH + {0xCFC4, 0x72E6}, //6851 #CJK UNIFIED IDEOGRAPH + {0xCFC5, 0x72E3}, //6852 #CJK UNIFIED IDEOGRAPH + {0xCFC6, 0x7385}, //6853 #CJK UNIFIED IDEOGRAPH + {0xCFC7, 0x73CC}, //6854 #CJK UNIFIED IDEOGRAPH + {0xCFC8, 0x73C2}, //6855 #CJK UNIFIED IDEOGRAPH + {0xCFC9, 0x73C8}, //6856 #CJK UNIFIED IDEOGRAPH + {0xCFCA, 0x73C5}, //6857 #CJK UNIFIED IDEOGRAPH + {0xCFCB, 0x73B9}, //6858 #CJK UNIFIED IDEOGRAPH + {0xCFCC, 0x73B6}, //6859 #CJK UNIFIED IDEOGRAPH + {0xCFCD, 0x73B5}, //6860 #CJK UNIFIED IDEOGRAPH + {0xCFCE, 0x73B4}, //6861 #CJK UNIFIED IDEOGRAPH + {0xCFCF, 0x73EB}, //6862 #CJK UNIFIED IDEOGRAPH + {0xCFD0, 0x73BF}, //6863 #CJK UNIFIED IDEOGRAPH + {0xCFD1, 0x73C7}, //6864 #CJK UNIFIED IDEOGRAPH + {0xCFD2, 0x73BE}, //6865 #CJK UNIFIED IDEOGRAPH + {0xCFD3, 0x73C3}, //6866 #CJK UNIFIED IDEOGRAPH + {0xCFD4, 0x73C6}, //6867 #CJK UNIFIED IDEOGRAPH + {0xCFD5, 0x73B8}, //6868 #CJK UNIFIED IDEOGRAPH + {0xCFD6, 0x73CB}, //6869 #CJK UNIFIED IDEOGRAPH + {0xCFD7, 0x74EC}, //6870 #CJK UNIFIED IDEOGRAPH + {0xCFD8, 0x74EE}, //6871 #CJK UNIFIED IDEOGRAPH + {0xCFD9, 0x752E}, //6872 #CJK UNIFIED IDEOGRAPH + {0xCFDA, 0x7547}, //6873 #CJK UNIFIED IDEOGRAPH + {0xCFDB, 0x7548}, //6874 #CJK UNIFIED IDEOGRAPH + {0xCFDC, 0x75A7}, //6875 #CJK UNIFIED IDEOGRAPH + {0xCFDD, 0x75AA}, //6876 #CJK UNIFIED IDEOGRAPH + {0xCFDE, 0x7679}, //6877 #CJK UNIFIED IDEOGRAPH + {0xCFDF, 0x76C4}, //6878 #CJK UNIFIED IDEOGRAPH + {0xCFE0, 0x7708}, //6879 #CJK UNIFIED IDEOGRAPH + {0xCFE1, 0x7703}, //6880 #CJK UNIFIED IDEOGRAPH + {0xCFE2, 0x7704}, //6881 #CJK UNIFIED IDEOGRAPH + {0xCFE3, 0x7705}, //6882 #CJK UNIFIED IDEOGRAPH + {0xCFE4, 0x770A}, //6883 #CJK UNIFIED IDEOGRAPH + {0xCFE5, 0x76F7}, //6884 #CJK UNIFIED IDEOGRAPH + {0xCFE6, 0x76FB}, //6885 #CJK UNIFIED IDEOGRAPH + {0xCFE7, 0x76FA}, //6886 #CJK UNIFIED IDEOGRAPH + {0xCFE8, 0x77E7}, //6887 #CJK UNIFIED IDEOGRAPH + {0xCFE9, 0x77E8}, //6888 #CJK UNIFIED IDEOGRAPH + {0xCFEA, 0x7806}, //6889 #CJK UNIFIED IDEOGRAPH + {0xCFEB, 0x7811}, //6890 #CJK UNIFIED IDEOGRAPH + {0xCFEC, 0x7812}, //6891 #CJK UNIFIED IDEOGRAPH + {0xCFED, 0x7805}, //6892 #CJK UNIFIED IDEOGRAPH + {0xCFEE, 0x7810}, //6893 #CJK UNIFIED IDEOGRAPH + {0xCFEF, 0x780F}, //6894 #CJK UNIFIED IDEOGRAPH + {0xCFF0, 0x780E}, //6895 #CJK UNIFIED IDEOGRAPH + {0xCFF1, 0x7809}, //6896 #CJK UNIFIED IDEOGRAPH + {0xCFF2, 0x7803}, //6897 #CJK UNIFIED IDEOGRAPH + {0xCFF3, 0x7813}, //6898 #CJK UNIFIED IDEOGRAPH + {0xCFF4, 0x794A}, //6899 #CJK UNIFIED IDEOGRAPH + {0xCFF5, 0x794C}, //6900 #CJK UNIFIED IDEOGRAPH + {0xCFF6, 0x794B}, //6901 #CJK UNIFIED IDEOGRAPH + {0xCFF7, 0x7945}, //6902 #CJK UNIFIED IDEOGRAPH + {0xCFF8, 0x7944}, //6903 #CJK UNIFIED IDEOGRAPH + {0xCFF9, 0x79D5}, //6904 #CJK UNIFIED IDEOGRAPH + {0xCFFA, 0x79CD}, //6905 #CJK UNIFIED IDEOGRAPH + {0xCFFB, 0x79CF}, //6906 #CJK UNIFIED IDEOGRAPH + {0xCFFC, 0x79D6}, //6907 #CJK UNIFIED IDEOGRAPH + {0xCFFD, 0x79CE}, //6908 #CJK UNIFIED IDEOGRAPH + {0xCFFE, 0x7A80}, //6909 #CJK UNIFIED IDEOGRAPH + {0xD040, 0x7A7E}, //6910 #CJK UNIFIED IDEOGRAPH + {0xD041, 0x7AD1}, //6911 #CJK UNIFIED IDEOGRAPH + {0xD042, 0x7B00}, //6912 #CJK UNIFIED IDEOGRAPH + {0xD043, 0x7B01}, //6913 #CJK UNIFIED IDEOGRAPH + {0xD044, 0x7C7A}, //6914 #CJK UNIFIED IDEOGRAPH + {0xD045, 0x7C78}, //6915 #CJK UNIFIED IDEOGRAPH + {0xD046, 0x7C79}, //6916 #CJK UNIFIED IDEOGRAPH + {0xD047, 0x7C7F}, //6917 #CJK UNIFIED IDEOGRAPH + {0xD048, 0x7C80}, //6918 #CJK UNIFIED IDEOGRAPH + {0xD049, 0x7C81}, //6919 #CJK UNIFIED IDEOGRAPH + {0xD04A, 0x7D03}, //6920 #CJK UNIFIED IDEOGRAPH + {0xD04B, 0x7D08}, //6921 #CJK UNIFIED IDEOGRAPH + {0xD04C, 0x7D01}, //6922 #CJK UNIFIED IDEOGRAPH + {0xD04D, 0x7F58}, //6923 #CJK UNIFIED IDEOGRAPH + {0xD04E, 0x7F91}, //6924 #CJK UNIFIED IDEOGRAPH + {0xD04F, 0x7F8D}, //6925 #CJK UNIFIED IDEOGRAPH + {0xD050, 0x7FBE}, //6926 #CJK UNIFIED IDEOGRAPH + {0xD051, 0x8007}, //6927 #CJK UNIFIED IDEOGRAPH + {0xD052, 0x800E}, //6928 #CJK UNIFIED IDEOGRAPH + {0xD053, 0x800F}, //6929 #CJK UNIFIED IDEOGRAPH + {0xD054, 0x8014}, //6930 #CJK UNIFIED IDEOGRAPH + {0xD055, 0x8037}, //6931 #CJK UNIFIED IDEOGRAPH + {0xD056, 0x80D8}, //6932 #CJK UNIFIED IDEOGRAPH + {0xD057, 0x80C7}, //6933 #CJK UNIFIED IDEOGRAPH + {0xD058, 0x80E0}, //6934 #CJK UNIFIED IDEOGRAPH + {0xD059, 0x80D1}, //6935 #CJK UNIFIED IDEOGRAPH + {0xD05A, 0x80C8}, //6936 #CJK UNIFIED IDEOGRAPH + {0xD05B, 0x80C2}, //6937 #CJK UNIFIED IDEOGRAPH + {0xD05C, 0x80D0}, //6938 #CJK UNIFIED IDEOGRAPH + {0xD05D, 0x80C5}, //6939 #CJK UNIFIED IDEOGRAPH + {0xD05E, 0x80E3}, //6940 #CJK UNIFIED IDEOGRAPH + {0xD05F, 0x80D9}, //6941 #CJK UNIFIED IDEOGRAPH + {0xD060, 0x80DC}, //6942 #CJK UNIFIED IDEOGRAPH + {0xD061, 0x80CA}, //6943 #CJK UNIFIED IDEOGRAPH + {0xD062, 0x80D5}, //6944 #CJK UNIFIED IDEOGRAPH + {0xD063, 0x80C9}, //6945 #CJK UNIFIED IDEOGRAPH + {0xD064, 0x80CF}, //6946 #CJK UNIFIED IDEOGRAPH + {0xD065, 0x80D7}, //6947 #CJK UNIFIED IDEOGRAPH + {0xD066, 0x80E6}, //6948 #CJK UNIFIED IDEOGRAPH + {0xD067, 0x80CD}, //6949 #CJK UNIFIED IDEOGRAPH + {0xD068, 0x81FF}, //6950 #CJK UNIFIED IDEOGRAPH + {0xD069, 0x8221}, //6951 #CJK UNIFIED IDEOGRAPH + {0xD06A, 0x8294}, //6952 #CJK UNIFIED IDEOGRAPH + {0xD06B, 0x82D9}, //6953 #CJK UNIFIED IDEOGRAPH + {0xD06C, 0x82FE}, //6954 #CJK UNIFIED IDEOGRAPH + {0xD06D, 0x82F9}, //6955 #CJK UNIFIED IDEOGRAPH + {0xD06E, 0x8307}, //6956 #CJK UNIFIED IDEOGRAPH + {0xD06F, 0x82E8}, //6957 #CJK UNIFIED IDEOGRAPH + {0xD070, 0x8300}, //6958 #CJK UNIFIED IDEOGRAPH + {0xD071, 0x82D5}, //6959 #CJK UNIFIED IDEOGRAPH + {0xD072, 0x833A}, //6960 #CJK UNIFIED IDEOGRAPH + {0xD073, 0x82EB}, //6961 #CJK UNIFIED IDEOGRAPH + {0xD074, 0x82D6}, //6962 #CJK UNIFIED IDEOGRAPH + {0xD075, 0x82F4}, //6963 #CJK UNIFIED IDEOGRAPH + {0xD076, 0x82EC}, //6964 #CJK UNIFIED IDEOGRAPH + {0xD077, 0x82E1}, //6965 #CJK UNIFIED IDEOGRAPH + {0xD078, 0x82F2}, //6966 #CJK UNIFIED IDEOGRAPH + {0xD079, 0x82F5}, //6967 #CJK UNIFIED IDEOGRAPH + {0xD07A, 0x830C}, //6968 #CJK UNIFIED IDEOGRAPH + {0xD07B, 0x82FB}, //6969 #CJK UNIFIED IDEOGRAPH + {0xD07C, 0x82F6}, //6970 #CJK UNIFIED IDEOGRAPH + {0xD07D, 0x82F0}, //6971 #CJK UNIFIED IDEOGRAPH + {0xD07E, 0x82EA}, //6972 #CJK UNIFIED IDEOGRAPH + {0xD0A1, 0x82E4}, //6973 #CJK UNIFIED IDEOGRAPH + {0xD0A2, 0x82E0}, //6974 #CJK UNIFIED IDEOGRAPH + {0xD0A3, 0x82FA}, //6975 #CJK UNIFIED IDEOGRAPH + {0xD0A4, 0x82F3}, //6976 #CJK UNIFIED IDEOGRAPH + {0xD0A5, 0x82ED}, //6977 #CJK UNIFIED IDEOGRAPH + {0xD0A6, 0x8677}, //6978 #CJK UNIFIED IDEOGRAPH + {0xD0A7, 0x8674}, //6979 #CJK UNIFIED IDEOGRAPH + {0xD0A8, 0x867C}, //6980 #CJK UNIFIED IDEOGRAPH + {0xD0A9, 0x8673}, //6981 #CJK UNIFIED IDEOGRAPH + {0xD0AA, 0x8841}, //6982 #CJK UNIFIED IDEOGRAPH + {0xD0AB, 0x884E}, //6983 #CJK UNIFIED IDEOGRAPH + {0xD0AC, 0x8867}, //6984 #CJK UNIFIED IDEOGRAPH + {0xD0AD, 0x886A}, //6985 #CJK UNIFIED IDEOGRAPH + {0xD0AE, 0x8869}, //6986 #CJK UNIFIED IDEOGRAPH + {0xD0AF, 0x89D3}, //6987 #CJK UNIFIED IDEOGRAPH + {0xD0B0, 0x8A04}, //6988 #CJK UNIFIED IDEOGRAPH + {0xD0B1, 0x8A07}, //6989 #CJK UNIFIED IDEOGRAPH + {0xD0B2, 0x8D72}, //6990 #CJK UNIFIED IDEOGRAPH + {0xD0B3, 0x8FE3}, //6991 #CJK UNIFIED IDEOGRAPH + {0xD0B4, 0x8FE1}, //6992 #CJK UNIFIED IDEOGRAPH + {0xD0B5, 0x8FEE}, //6993 #CJK UNIFIED IDEOGRAPH + {0xD0B6, 0x8FE0}, //6994 #CJK UNIFIED IDEOGRAPH + {0xD0B7, 0x90F1}, //6995 #CJK UNIFIED IDEOGRAPH + {0xD0B8, 0x90BD}, //6996 #CJK UNIFIED IDEOGRAPH + {0xD0B9, 0x90BF}, //6997 #CJK UNIFIED IDEOGRAPH + {0xD0BA, 0x90D5}, //6998 #CJK UNIFIED IDEOGRAPH + {0xD0BB, 0x90C5}, //6999 #CJK UNIFIED IDEOGRAPH + {0xD0BC, 0x90BE}, //7000 #CJK UNIFIED IDEOGRAPH + {0xD0BD, 0x90C7}, //7001 #CJK UNIFIED IDEOGRAPH + {0xD0BE, 0x90CB}, //7002 #CJK UNIFIED IDEOGRAPH + {0xD0BF, 0x90C8}, //7003 #CJK UNIFIED IDEOGRAPH + {0xD0C0, 0x91D4}, //7004 #CJK UNIFIED IDEOGRAPH + {0xD0C1, 0x91D3}, //7005 #CJK UNIFIED IDEOGRAPH + {0xD0C2, 0x9654}, //7006 #CJK UNIFIED IDEOGRAPH + {0xD0C3, 0x964F}, //7007 #CJK UNIFIED IDEOGRAPH + {0xD0C4, 0x9651}, //7008 #CJK UNIFIED IDEOGRAPH + {0xD0C5, 0x9653}, //7009 #CJK UNIFIED IDEOGRAPH + {0xD0C6, 0x964A}, //7010 #CJK UNIFIED IDEOGRAPH + {0xD0C7, 0x964E}, //7011 #CJK UNIFIED IDEOGRAPH + {0xD0C8, 0x501E}, //7012 #CJK UNIFIED IDEOGRAPH + {0xD0C9, 0x5005}, //7013 #CJK UNIFIED IDEOGRAPH + {0xD0CA, 0x5007}, //7014 #CJK UNIFIED IDEOGRAPH + {0xD0CB, 0x5013}, //7015 #CJK UNIFIED IDEOGRAPH + {0xD0CC, 0x5022}, //7016 #CJK UNIFIED IDEOGRAPH + {0xD0CD, 0x5030}, //7017 #CJK UNIFIED IDEOGRAPH + {0xD0CE, 0x501B}, //7018 #CJK UNIFIED IDEOGRAPH + {0xD0CF, 0x4FF5}, //7019 #CJK UNIFIED IDEOGRAPH + {0xD0D0, 0x4FF4}, //7020 #CJK UNIFIED IDEOGRAPH + {0xD0D1, 0x5033}, //7021 #CJK UNIFIED IDEOGRAPH + {0xD0D2, 0x5037}, //7022 #CJK UNIFIED IDEOGRAPH + {0xD0D3, 0x502C}, //7023 #CJK UNIFIED IDEOGRAPH + {0xD0D4, 0x4FF6}, //7024 #CJK UNIFIED IDEOGRAPH + {0xD0D5, 0x4FF7}, //7025 #CJK UNIFIED IDEOGRAPH + {0xD0D6, 0x5017}, //7026 #CJK UNIFIED IDEOGRAPH + {0xD0D7, 0x501C}, //7027 #CJK UNIFIED IDEOGRAPH + {0xD0D8, 0x5020}, //7028 #CJK UNIFIED IDEOGRAPH + {0xD0D9, 0x5027}, //7029 #CJK UNIFIED IDEOGRAPH + {0xD0DA, 0x5035}, //7030 #CJK UNIFIED IDEOGRAPH + {0xD0DB, 0x502F}, //7031 #CJK UNIFIED IDEOGRAPH + {0xD0DC, 0x5031}, //7032 #CJK UNIFIED IDEOGRAPH + {0xD0DD, 0x500E}, //7033 #CJK UNIFIED IDEOGRAPH + {0xD0DE, 0x515A}, //7034 #CJK UNIFIED IDEOGRAPH + {0xD0DF, 0x5194}, //7035 #CJK UNIFIED IDEOGRAPH + {0xD0E0, 0x5193}, //7036 #CJK UNIFIED IDEOGRAPH + {0xD0E1, 0x51CA}, //7037 #CJK UNIFIED IDEOGRAPH + {0xD0E2, 0x51C4}, //7038 #CJK UNIFIED IDEOGRAPH + {0xD0E3, 0x51C5}, //7039 #CJK UNIFIED IDEOGRAPH + {0xD0E4, 0x51C8}, //7040 #CJK UNIFIED IDEOGRAPH + {0xD0E5, 0x51CE}, //7041 #CJK UNIFIED IDEOGRAPH + {0xD0E6, 0x5261}, //7042 #CJK UNIFIED IDEOGRAPH + {0xD0E7, 0x525A}, //7043 #CJK UNIFIED IDEOGRAPH + {0xD0E8, 0x5252}, //7044 #CJK UNIFIED IDEOGRAPH + {0xD0E9, 0x525E}, //7045 #CJK UNIFIED IDEOGRAPH + {0xD0EA, 0x525F}, //7046 #CJK UNIFIED IDEOGRAPH + {0xD0EB, 0x5255}, //7047 #CJK UNIFIED IDEOGRAPH + {0xD0EC, 0x5262}, //7048 #CJK UNIFIED IDEOGRAPH + {0xD0ED, 0x52CD}, //7049 #CJK UNIFIED IDEOGRAPH + {0xD0EE, 0x530E}, //7050 #CJK UNIFIED IDEOGRAPH + {0xD0EF, 0x539E}, //7051 #CJK UNIFIED IDEOGRAPH + {0xD0F0, 0x5526}, //7052 #CJK UNIFIED IDEOGRAPH + {0xD0F1, 0x54E2}, //7053 #CJK UNIFIED IDEOGRAPH + {0xD0F2, 0x5517}, //7054 #CJK UNIFIED IDEOGRAPH + {0xD0F3, 0x5512}, //7055 #CJK UNIFIED IDEOGRAPH + {0xD0F4, 0x54E7}, //7056 #CJK UNIFIED IDEOGRAPH + {0xD0F5, 0x54F3}, //7057 #CJK UNIFIED IDEOGRAPH + {0xD0F6, 0x54E4}, //7058 #CJK UNIFIED IDEOGRAPH + {0xD0F7, 0x551A}, //7059 #CJK UNIFIED IDEOGRAPH + {0xD0F8, 0x54FF}, //7060 #CJK UNIFIED IDEOGRAPH + {0xD0F9, 0x5504}, //7061 #CJK UNIFIED IDEOGRAPH + {0xD0FA, 0x5508}, //7062 #CJK UNIFIED IDEOGRAPH + {0xD0FB, 0x54EB}, //7063 #CJK UNIFIED IDEOGRAPH + {0xD0FC, 0x5511}, //7064 #CJK UNIFIED IDEOGRAPH + {0xD0FD, 0x5505}, //7065 #CJK UNIFIED IDEOGRAPH + {0xD0FE, 0x54F1}, //7066 #CJK UNIFIED IDEOGRAPH + {0xD140, 0x550A}, //7067 #CJK UNIFIED IDEOGRAPH + {0xD141, 0x54FB}, //7068 #CJK UNIFIED IDEOGRAPH + {0xD142, 0x54F7}, //7069 #CJK UNIFIED IDEOGRAPH + {0xD143, 0x54F8}, //7070 #CJK UNIFIED IDEOGRAPH + {0xD144, 0x54E0}, //7071 #CJK UNIFIED IDEOGRAPH + {0xD145, 0x550E}, //7072 #CJK UNIFIED IDEOGRAPH + {0xD146, 0x5503}, //7073 #CJK UNIFIED IDEOGRAPH + {0xD147, 0x550B}, //7074 #CJK UNIFIED IDEOGRAPH + {0xD148, 0x5701}, //7075 #CJK UNIFIED IDEOGRAPH + {0xD149, 0x5702}, //7076 #CJK UNIFIED IDEOGRAPH + {0xD14A, 0x57CC}, //7077 #CJK UNIFIED IDEOGRAPH + {0xD14B, 0x5832}, //7078 #CJK UNIFIED IDEOGRAPH + {0xD14C, 0x57D5}, //7079 #CJK UNIFIED IDEOGRAPH + {0xD14D, 0x57D2}, //7080 #CJK UNIFIED IDEOGRAPH + {0xD14E, 0x57BA}, //7081 #CJK UNIFIED IDEOGRAPH + {0xD14F, 0x57C6}, //7082 #CJK UNIFIED IDEOGRAPH + {0xD150, 0x57BD}, //7083 #CJK UNIFIED IDEOGRAPH + {0xD151, 0x57BC}, //7084 #CJK UNIFIED IDEOGRAPH + {0xD152, 0x57B8}, //7085 #CJK UNIFIED IDEOGRAPH + {0xD153, 0x57B6}, //7086 #CJK UNIFIED IDEOGRAPH + {0xD154, 0x57BF}, //7087 #CJK UNIFIED IDEOGRAPH + {0xD155, 0x57C7}, //7088 #CJK UNIFIED IDEOGRAPH + {0xD156, 0x57D0}, //7089 #CJK UNIFIED IDEOGRAPH + {0xD157, 0x57B9}, //7090 #CJK UNIFIED IDEOGRAPH + {0xD158, 0x57C1}, //7091 #CJK UNIFIED IDEOGRAPH + {0xD159, 0x590E}, //7092 #CJK UNIFIED IDEOGRAPH + {0xD15A, 0x594A}, //7093 #CJK UNIFIED IDEOGRAPH + {0xD15B, 0x5A19}, //7094 #CJK UNIFIED IDEOGRAPH + {0xD15C, 0x5A16}, //7095 #CJK UNIFIED IDEOGRAPH + {0xD15D, 0x5A2D}, //7096 #CJK UNIFIED IDEOGRAPH + {0xD15E, 0x5A2E}, //7097 #CJK UNIFIED IDEOGRAPH + {0xD15F, 0x5A15}, //7098 #CJK UNIFIED IDEOGRAPH + {0xD160, 0x5A0F}, //7099 #CJK UNIFIED IDEOGRAPH + {0xD161, 0x5A17}, //7100 #CJK UNIFIED IDEOGRAPH + {0xD162, 0x5A0A}, //7101 #CJK UNIFIED IDEOGRAPH + {0xD163, 0x5A1E}, //7102 #CJK UNIFIED IDEOGRAPH + {0xD164, 0x5A33}, //7103 #CJK UNIFIED IDEOGRAPH + {0xD165, 0x5B6C}, //7104 #CJK UNIFIED IDEOGRAPH + {0xD166, 0x5BA7}, //7105 #CJK UNIFIED IDEOGRAPH + {0xD167, 0x5BAD}, //7106 #CJK UNIFIED IDEOGRAPH + {0xD168, 0x5BAC}, //7107 #CJK UNIFIED IDEOGRAPH + {0xD169, 0x5C03}, //7108 #CJK UNIFIED IDEOGRAPH + {0xD16A, 0x5C56}, //7109 #CJK UNIFIED IDEOGRAPH + {0xD16B, 0x5C54}, //7110 #CJK UNIFIED IDEOGRAPH + {0xD16C, 0x5CEC}, //7111 #CJK UNIFIED IDEOGRAPH + {0xD16D, 0x5CFF}, //7112 #CJK UNIFIED IDEOGRAPH + {0xD16E, 0x5CEE}, //7113 #CJK UNIFIED IDEOGRAPH + {0xD16F, 0x5CF1}, //7114 #CJK UNIFIED IDEOGRAPH + {0xD170, 0x5CF7}, //7115 #CJK UNIFIED IDEOGRAPH + {0xD171, 0x5D00}, //7116 #CJK UNIFIED IDEOGRAPH + {0xD172, 0x5CF9}, //7117 #CJK UNIFIED IDEOGRAPH + {0xD173, 0x5E29}, //7118 #CJK UNIFIED IDEOGRAPH + {0xD174, 0x5E28}, //7119 #CJK UNIFIED IDEOGRAPH + {0xD175, 0x5EA8}, //7120 #CJK UNIFIED IDEOGRAPH + {0xD176, 0x5EAE}, //7121 #CJK UNIFIED IDEOGRAPH + {0xD177, 0x5EAA}, //7122 #CJK UNIFIED IDEOGRAPH + {0xD178, 0x5EAC}, //7123 #CJK UNIFIED IDEOGRAPH + {0xD179, 0x5F33}, //7124 #CJK UNIFIED IDEOGRAPH + {0xD17A, 0x5F30}, //7125 #CJK UNIFIED IDEOGRAPH + {0xD17B, 0x5F67}, //7126 #CJK UNIFIED IDEOGRAPH + {0xD17C, 0x605D}, //7127 #CJK UNIFIED IDEOGRAPH + {0xD17D, 0x605A}, //7128 #CJK UNIFIED IDEOGRAPH + {0xD17E, 0x6067}, //7129 #CJK UNIFIED IDEOGRAPH + {0xD1A1, 0x6041}, //7130 #CJK UNIFIED IDEOGRAPH + {0xD1A2, 0x60A2}, //7131 #CJK UNIFIED IDEOGRAPH + {0xD1A3, 0x6088}, //7132 #CJK UNIFIED IDEOGRAPH + {0xD1A4, 0x6080}, //7133 #CJK UNIFIED IDEOGRAPH + {0xD1A5, 0x6092}, //7134 #CJK UNIFIED IDEOGRAPH + {0xD1A6, 0x6081}, //7135 #CJK UNIFIED IDEOGRAPH + {0xD1A7, 0x609D}, //7136 #CJK UNIFIED IDEOGRAPH + {0xD1A8, 0x6083}, //7137 #CJK UNIFIED IDEOGRAPH + {0xD1A9, 0x6095}, //7138 #CJK UNIFIED IDEOGRAPH + {0xD1AA, 0x609B}, //7139 #CJK UNIFIED IDEOGRAPH + {0xD1AB, 0x6097}, //7140 #CJK UNIFIED IDEOGRAPH + {0xD1AC, 0x6087}, //7141 #CJK UNIFIED IDEOGRAPH + {0xD1AD, 0x609C}, //7142 #CJK UNIFIED IDEOGRAPH + {0xD1AE, 0x608E}, //7143 #CJK UNIFIED IDEOGRAPH + {0xD1AF, 0x6219}, //7144 #CJK UNIFIED IDEOGRAPH + {0xD1B0, 0x6246}, //7145 #CJK UNIFIED IDEOGRAPH + {0xD1B1, 0x62F2}, //7146 #CJK UNIFIED IDEOGRAPH + {0xD1B2, 0x6310}, //7147 #CJK UNIFIED IDEOGRAPH + {0xD1B3, 0x6356}, //7148 #CJK UNIFIED IDEOGRAPH + {0xD1B4, 0x632C}, //7149 #CJK UNIFIED IDEOGRAPH + {0xD1B5, 0x6344}, //7150 #CJK UNIFIED IDEOGRAPH + {0xD1B6, 0x6345}, //7151 #CJK UNIFIED IDEOGRAPH + {0xD1B7, 0x6336}, //7152 #CJK UNIFIED IDEOGRAPH + {0xD1B8, 0x6343}, //7153 #CJK UNIFIED IDEOGRAPH + {0xD1B9, 0x63E4}, //7154 #CJK UNIFIED IDEOGRAPH + {0xD1BA, 0x6339}, //7155 #CJK UNIFIED IDEOGRAPH + {0xD1BB, 0x634B}, //7156 #CJK UNIFIED IDEOGRAPH + {0xD1BC, 0x634A}, //7157 #CJK UNIFIED IDEOGRAPH + {0xD1BD, 0x633C}, //7158 #CJK UNIFIED IDEOGRAPH + {0xD1BE, 0x6329}, //7159 #CJK UNIFIED IDEOGRAPH + {0xD1BF, 0x6341}, //7160 #CJK UNIFIED IDEOGRAPH + {0xD1C0, 0x6334}, //7161 #CJK UNIFIED IDEOGRAPH + {0xD1C1, 0x6358}, //7162 #CJK UNIFIED IDEOGRAPH + {0xD1C2, 0x6354}, //7163 #CJK UNIFIED IDEOGRAPH + {0xD1C3, 0x6359}, //7164 #CJK UNIFIED IDEOGRAPH + {0xD1C4, 0x632D}, //7165 #CJK UNIFIED IDEOGRAPH + {0xD1C5, 0x6347}, //7166 #CJK UNIFIED IDEOGRAPH + {0xD1C6, 0x6333}, //7167 #CJK UNIFIED IDEOGRAPH + {0xD1C7, 0x635A}, //7168 #CJK UNIFIED IDEOGRAPH + {0xD1C8, 0x6351}, //7169 #CJK UNIFIED IDEOGRAPH + {0xD1C9, 0x6338}, //7170 #CJK UNIFIED IDEOGRAPH + {0xD1CA, 0x6357}, //7171 #CJK UNIFIED IDEOGRAPH + {0xD1CB, 0x6340}, //7172 #CJK UNIFIED IDEOGRAPH + {0xD1CC, 0x6348}, //7173 #CJK UNIFIED IDEOGRAPH + {0xD1CD, 0x654A}, //7174 #CJK UNIFIED IDEOGRAPH + {0xD1CE, 0x6546}, //7175 #CJK UNIFIED IDEOGRAPH + {0xD1CF, 0x65C6}, //7176 #CJK UNIFIED IDEOGRAPH + {0xD1D0, 0x65C3}, //7177 #CJK UNIFIED IDEOGRAPH + {0xD1D1, 0x65C4}, //7178 #CJK UNIFIED IDEOGRAPH + {0xD1D2, 0x65C2}, //7179 #CJK UNIFIED IDEOGRAPH + {0xD1D3, 0x664A}, //7180 #CJK UNIFIED IDEOGRAPH + {0xD1D4, 0x665F}, //7181 #CJK UNIFIED IDEOGRAPH + {0xD1D5, 0x6647}, //7182 #CJK UNIFIED IDEOGRAPH + {0xD1D6, 0x6651}, //7183 #CJK UNIFIED IDEOGRAPH + {0xD1D7, 0x6712}, //7184 #CJK UNIFIED IDEOGRAPH + {0xD1D8, 0x6713}, //7185 #CJK UNIFIED IDEOGRAPH + {0xD1D9, 0x681F}, //7186 #CJK UNIFIED IDEOGRAPH + {0xD1DA, 0x681A}, //7187 #CJK UNIFIED IDEOGRAPH + {0xD1DB, 0x6849}, //7188 #CJK UNIFIED IDEOGRAPH + {0xD1DC, 0x6832}, //7189 #CJK UNIFIED IDEOGRAPH + {0xD1DD, 0x6833}, //7190 #CJK UNIFIED IDEOGRAPH + {0xD1DE, 0x683B}, //7191 #CJK UNIFIED IDEOGRAPH + {0xD1DF, 0x684B}, //7192 #CJK UNIFIED IDEOGRAPH + {0xD1E0, 0x684F}, //7193 #CJK UNIFIED IDEOGRAPH + {0xD1E1, 0x6816}, //7194 #CJK UNIFIED IDEOGRAPH + {0xD1E2, 0x6831}, //7195 #CJK UNIFIED IDEOGRAPH + {0xD1E3, 0x681C}, //7196 #CJK UNIFIED IDEOGRAPH + {0xD1E4, 0x6835}, //7197 #CJK UNIFIED IDEOGRAPH + {0xD1E5, 0x682B}, //7198 #CJK UNIFIED IDEOGRAPH + {0xD1E6, 0x682D}, //7199 #CJK UNIFIED IDEOGRAPH + {0xD1E7, 0x682F}, //7200 #CJK UNIFIED IDEOGRAPH + {0xD1E8, 0x684E}, //7201 #CJK UNIFIED IDEOGRAPH + {0xD1E9, 0x6844}, //7202 #CJK UNIFIED IDEOGRAPH + {0xD1EA, 0x6834}, //7203 #CJK UNIFIED IDEOGRAPH + {0xD1EB, 0x681D}, //7204 #CJK UNIFIED IDEOGRAPH + {0xD1EC, 0x6812}, //7205 #CJK UNIFIED IDEOGRAPH + {0xD1ED, 0x6814}, //7206 #CJK UNIFIED IDEOGRAPH + {0xD1EE, 0x6826}, //7207 #CJK UNIFIED IDEOGRAPH + {0xD1EF, 0x6828}, //7208 #CJK UNIFIED IDEOGRAPH + {0xD1F0, 0x682E}, //7209 #CJK UNIFIED IDEOGRAPH + {0xD1F1, 0x684D}, //7210 #CJK UNIFIED IDEOGRAPH + {0xD1F2, 0x683A}, //7211 #CJK UNIFIED IDEOGRAPH + {0xD1F3, 0x6825}, //7212 #CJK UNIFIED IDEOGRAPH + {0xD1F4, 0x6820}, //7213 #CJK UNIFIED IDEOGRAPH + {0xD1F5, 0x6B2C}, //7214 #CJK UNIFIED IDEOGRAPH + {0xD1F6, 0x6B2F}, //7215 #CJK UNIFIED IDEOGRAPH + {0xD1F7, 0x6B2D}, //7216 #CJK UNIFIED IDEOGRAPH + {0xD1F8, 0x6B31}, //7217 #CJK UNIFIED IDEOGRAPH + {0xD1F9, 0x6B34}, //7218 #CJK UNIFIED IDEOGRAPH + {0xD1FA, 0x6B6D}, //7219 #CJK UNIFIED IDEOGRAPH + {0xD1FB, 0x8082}, //7220 #CJK UNIFIED IDEOGRAPH + {0xD1FC, 0x6B88}, //7221 #CJK UNIFIED IDEOGRAPH + {0xD1FD, 0x6BE6}, //7222 #CJK UNIFIED IDEOGRAPH + {0xD1FE, 0x6BE4}, //7223 #CJK UNIFIED IDEOGRAPH + {0xD240, 0x6BE8}, //7224 #CJK UNIFIED IDEOGRAPH + {0xD241, 0x6BE3}, //7225 #CJK UNIFIED IDEOGRAPH + {0xD242, 0x6BE2}, //7226 #CJK UNIFIED IDEOGRAPH + {0xD243, 0x6BE7}, //7227 #CJK UNIFIED IDEOGRAPH + {0xD244, 0x6C25}, //7228 #CJK UNIFIED IDEOGRAPH + {0xD245, 0x6D7A}, //7229 #CJK UNIFIED IDEOGRAPH + {0xD246, 0x6D63}, //7230 #CJK UNIFIED IDEOGRAPH + {0xD247, 0x6D64}, //7231 #CJK UNIFIED IDEOGRAPH + {0xD248, 0x6D76}, //7232 #CJK UNIFIED IDEOGRAPH + {0xD249, 0x6D0D}, //7233 #CJK UNIFIED IDEOGRAPH + {0xD24A, 0x6D61}, //7234 #CJK UNIFIED IDEOGRAPH + {0xD24B, 0x6D92}, //7235 #CJK UNIFIED IDEOGRAPH + {0xD24C, 0x6D58}, //7236 #CJK UNIFIED IDEOGRAPH + {0xD24D, 0x6D62}, //7237 #CJK UNIFIED IDEOGRAPH + {0xD24E, 0x6D6D}, //7238 #CJK UNIFIED IDEOGRAPH + {0xD24F, 0x6D6F}, //7239 #CJK UNIFIED IDEOGRAPH + {0xD250, 0x6D91}, //7240 #CJK UNIFIED IDEOGRAPH + {0xD251, 0x6D8D}, //7241 #CJK UNIFIED IDEOGRAPH + {0xD252, 0x6DEF}, //7242 #CJK UNIFIED IDEOGRAPH + {0xD253, 0x6D7F}, //7243 #CJK UNIFIED IDEOGRAPH + {0xD254, 0x6D86}, //7244 #CJK UNIFIED IDEOGRAPH + {0xD255, 0x6D5E}, //7245 #CJK UNIFIED IDEOGRAPH + {0xD256, 0x6D67}, //7246 #CJK UNIFIED IDEOGRAPH + {0xD257, 0x6D60}, //7247 #CJK UNIFIED IDEOGRAPH + {0xD258, 0x6D97}, //7248 #CJK UNIFIED IDEOGRAPH + {0xD259, 0x6D70}, //7249 #CJK UNIFIED IDEOGRAPH + {0xD25A, 0x6D7C}, //7250 #CJK UNIFIED IDEOGRAPH + {0xD25B, 0x6D5F}, //7251 #CJK UNIFIED IDEOGRAPH + {0xD25C, 0x6D82}, //7252 #CJK UNIFIED IDEOGRAPH + {0xD25D, 0x6D98}, //7253 #CJK UNIFIED IDEOGRAPH + {0xD25E, 0x6D2F}, //7254 #CJK UNIFIED IDEOGRAPH + {0xD25F, 0x6D68}, //7255 #CJK UNIFIED IDEOGRAPH + {0xD260, 0x6D8B}, //7256 #CJK UNIFIED IDEOGRAPH + {0xD261, 0x6D7E}, //7257 #CJK UNIFIED IDEOGRAPH + {0xD262, 0x6D80}, //7258 #CJK UNIFIED IDEOGRAPH + {0xD263, 0x6D84}, //7259 #CJK UNIFIED IDEOGRAPH + {0xD264, 0x6D16}, //7260 #CJK UNIFIED IDEOGRAPH + {0xD265, 0x6D83}, //7261 #CJK UNIFIED IDEOGRAPH + {0xD266, 0x6D7B}, //7262 #CJK UNIFIED IDEOGRAPH + {0xD267, 0x6D7D}, //7263 #CJK UNIFIED IDEOGRAPH + {0xD268, 0x6D75}, //7264 #CJK UNIFIED IDEOGRAPH + {0xD269, 0x6D90}, //7265 #CJK UNIFIED IDEOGRAPH + {0xD26A, 0x70DC}, //7266 #CJK UNIFIED IDEOGRAPH + {0xD26B, 0x70D3}, //7267 #CJK UNIFIED IDEOGRAPH + {0xD26C, 0x70D1}, //7268 #CJK UNIFIED IDEOGRAPH + {0xD26D, 0x70DD}, //7269 #CJK UNIFIED IDEOGRAPH + {0xD26E, 0x70CB}, //7270 #CJK UNIFIED IDEOGRAPH + {0xD26F, 0x7F39}, //7271 #CJK UNIFIED IDEOGRAPH + {0xD270, 0x70E2}, //7272 #CJK UNIFIED IDEOGRAPH + {0xD271, 0x70D7}, //7273 #CJK UNIFIED IDEOGRAPH + {0xD272, 0x70D2}, //7274 #CJK UNIFIED IDEOGRAPH + {0xD273, 0x70DE}, //7275 #CJK UNIFIED IDEOGRAPH + {0xD274, 0x70E0}, //7276 #CJK UNIFIED IDEOGRAPH + {0xD275, 0x70D4}, //7277 #CJK UNIFIED IDEOGRAPH + {0xD276, 0x70CD}, //7278 #CJK UNIFIED IDEOGRAPH + {0xD277, 0x70C5}, //7279 #CJK UNIFIED IDEOGRAPH + {0xD278, 0x70C6}, //7280 #CJK UNIFIED IDEOGRAPH + {0xD279, 0x70C7}, //7281 #CJK UNIFIED IDEOGRAPH + {0xD27A, 0x70DA}, //7282 #CJK UNIFIED IDEOGRAPH + {0xD27B, 0x70CE}, //7283 #CJK UNIFIED IDEOGRAPH + {0xD27C, 0x70E1}, //7284 #CJK UNIFIED IDEOGRAPH + {0xD27D, 0x7242}, //7285 #CJK UNIFIED IDEOGRAPH + {0xD27E, 0x7278}, //7286 #CJK UNIFIED IDEOGRAPH + {0xD2A1, 0x7277}, //7287 #CJK UNIFIED IDEOGRAPH + {0xD2A2, 0x7276}, //7288 #CJK UNIFIED IDEOGRAPH + {0xD2A3, 0x7300}, //7289 #CJK UNIFIED IDEOGRAPH + {0xD2A4, 0x72FA}, //7290 #CJK UNIFIED IDEOGRAPH + {0xD2A5, 0x72F4}, //7291 #CJK UNIFIED IDEOGRAPH + {0xD2A6, 0x72FE}, //7292 #CJK UNIFIED IDEOGRAPH + {0xD2A7, 0x72F6}, //7293 #CJK UNIFIED IDEOGRAPH + {0xD2A8, 0x72F3}, //7294 #CJK UNIFIED IDEOGRAPH + {0xD2A9, 0x72FB}, //7295 #CJK UNIFIED IDEOGRAPH + {0xD2AA, 0x7301}, //7296 #CJK UNIFIED IDEOGRAPH + {0xD2AB, 0x73D3}, //7297 #CJK UNIFIED IDEOGRAPH + {0xD2AC, 0x73D9}, //7298 #CJK UNIFIED IDEOGRAPH + {0xD2AD, 0x73E5}, //7299 #CJK UNIFIED IDEOGRAPH + {0xD2AE, 0x73D6}, //7300 #CJK UNIFIED IDEOGRAPH + {0xD2AF, 0x73BC}, //7301 #CJK UNIFIED IDEOGRAPH + {0xD2B0, 0x73E7}, //7302 #CJK UNIFIED IDEOGRAPH + {0xD2B1, 0x73E3}, //7303 #CJK UNIFIED IDEOGRAPH + {0xD2B2, 0x73E9}, //7304 #CJK UNIFIED IDEOGRAPH + {0xD2B3, 0x73DC}, //7305 #CJK UNIFIED IDEOGRAPH + {0xD2B4, 0x73D2}, //7306 #CJK UNIFIED IDEOGRAPH + {0xD2B5, 0x73DB}, //7307 #CJK UNIFIED IDEOGRAPH + {0xD2B6, 0x73D4}, //7308 #CJK UNIFIED IDEOGRAPH + {0xD2B7, 0x73DD}, //7309 #CJK UNIFIED IDEOGRAPH + {0xD2B8, 0x73DA}, //7310 #CJK UNIFIED IDEOGRAPH + {0xD2B9, 0x73D7}, //7311 #CJK UNIFIED IDEOGRAPH + {0xD2BA, 0x73D8}, //7312 #CJK UNIFIED IDEOGRAPH + {0xD2BB, 0x73E8}, //7313 #CJK UNIFIED IDEOGRAPH + {0xD2BC, 0x74DE}, //7314 #CJK UNIFIED IDEOGRAPH + {0xD2BD, 0x74DF}, //7315 #CJK UNIFIED IDEOGRAPH + {0xD2BE, 0x74F4}, //7316 #CJK UNIFIED IDEOGRAPH + {0xD2BF, 0x74F5}, //7317 #CJK UNIFIED IDEOGRAPH + {0xD2C0, 0x7521}, //7318 #CJK UNIFIED IDEOGRAPH + {0xD2C1, 0x755B}, //7319 #CJK UNIFIED IDEOGRAPH + {0xD2C2, 0x755F}, //7320 #CJK UNIFIED IDEOGRAPH + {0xD2C3, 0x75B0}, //7321 #CJK UNIFIED IDEOGRAPH + {0xD2C4, 0x75C1}, //7322 #CJK UNIFIED IDEOGRAPH + {0xD2C5, 0x75BB}, //7323 #CJK UNIFIED IDEOGRAPH + {0xD2C6, 0x75C4}, //7324 #CJK UNIFIED IDEOGRAPH + {0xD2C7, 0x75C0}, //7325 #CJK UNIFIED IDEOGRAPH + {0xD2C8, 0x75BF}, //7326 #CJK UNIFIED IDEOGRAPH + {0xD2C9, 0x75B6}, //7327 #CJK UNIFIED IDEOGRAPH + {0xD2CA, 0x75BA}, //7328 #CJK UNIFIED IDEOGRAPH + {0xD2CB, 0x768A}, //7329 #CJK UNIFIED IDEOGRAPH + {0xD2CC, 0x76C9}, //7330 #CJK UNIFIED IDEOGRAPH + {0xD2CD, 0x771D}, //7331 #CJK UNIFIED IDEOGRAPH + {0xD2CE, 0x771B}, //7332 #CJK UNIFIED IDEOGRAPH + {0xD2CF, 0x7710}, //7333 #CJK UNIFIED IDEOGRAPH + {0xD2D0, 0x7713}, //7334 #CJK UNIFIED IDEOGRAPH + {0xD2D1, 0x7712}, //7335 #CJK UNIFIED IDEOGRAPH + {0xD2D2, 0x7723}, //7336 #CJK UNIFIED IDEOGRAPH + {0xD2D3, 0x7711}, //7337 #CJK UNIFIED IDEOGRAPH + {0xD2D4, 0x7715}, //7338 #CJK UNIFIED IDEOGRAPH + {0xD2D5, 0x7719}, //7339 #CJK UNIFIED IDEOGRAPH + {0xD2D6, 0x771A}, //7340 #CJK UNIFIED IDEOGRAPH + {0xD2D7, 0x7722}, //7341 #CJK UNIFIED IDEOGRAPH + {0xD2D8, 0x7727}, //7342 #CJK UNIFIED IDEOGRAPH + {0xD2D9, 0x7823}, //7343 #CJK UNIFIED IDEOGRAPH + {0xD2DA, 0x782C}, //7344 #CJK UNIFIED IDEOGRAPH + {0xD2DB, 0x7822}, //7345 #CJK UNIFIED IDEOGRAPH + {0xD2DC, 0x7835}, //7346 #CJK UNIFIED IDEOGRAPH + {0xD2DD, 0x782F}, //7347 #CJK UNIFIED IDEOGRAPH + {0xD2DE, 0x7828}, //7348 #CJK UNIFIED IDEOGRAPH + {0xD2DF, 0x782E}, //7349 #CJK UNIFIED IDEOGRAPH + {0xD2E0, 0x782B}, //7350 #CJK UNIFIED IDEOGRAPH + {0xD2E1, 0x7821}, //7351 #CJK UNIFIED IDEOGRAPH + {0xD2E2, 0x7829}, //7352 #CJK UNIFIED IDEOGRAPH + {0xD2E3, 0x7833}, //7353 #CJK UNIFIED IDEOGRAPH + {0xD2E4, 0x782A}, //7354 #CJK UNIFIED IDEOGRAPH + {0xD2E5, 0x7831}, //7355 #CJK UNIFIED IDEOGRAPH + {0xD2E6, 0x7954}, //7356 #CJK UNIFIED IDEOGRAPH + {0xD2E7, 0x795B}, //7357 #CJK UNIFIED IDEOGRAPH + {0xD2E8, 0x794F}, //7358 #CJK UNIFIED IDEOGRAPH + {0xD2E9, 0x795C}, //7359 #CJK UNIFIED IDEOGRAPH + {0xD2EA, 0x7953}, //7360 #CJK UNIFIED IDEOGRAPH + {0xD2EB, 0x7952}, //7361 #CJK UNIFIED IDEOGRAPH + {0xD2EC, 0x7951}, //7362 #CJK UNIFIED IDEOGRAPH + {0xD2ED, 0x79EB}, //7363 #CJK UNIFIED IDEOGRAPH + {0xD2EE, 0x79EC}, //7364 #CJK UNIFIED IDEOGRAPH + {0xD2EF, 0x79E0}, //7365 #CJK UNIFIED IDEOGRAPH + {0xD2F0, 0x79EE}, //7366 #CJK UNIFIED IDEOGRAPH + {0xD2F1, 0x79ED}, //7367 #CJK UNIFIED IDEOGRAPH + {0xD2F2, 0x79EA}, //7368 #CJK UNIFIED IDEOGRAPH + {0xD2F3, 0x79DC}, //7369 #CJK UNIFIED IDEOGRAPH + {0xD2F4, 0x79DE}, //7370 #CJK UNIFIED IDEOGRAPH + {0xD2F5, 0x79DD}, //7371 #CJK UNIFIED IDEOGRAPH + {0xD2F6, 0x7A86}, //7372 #CJK UNIFIED IDEOGRAPH + {0xD2F7, 0x7A89}, //7373 #CJK UNIFIED IDEOGRAPH + {0xD2F8, 0x7A85}, //7374 #CJK UNIFIED IDEOGRAPH + {0xD2F9, 0x7A8B}, //7375 #CJK UNIFIED IDEOGRAPH + {0xD2FA, 0x7A8C}, //7376 #CJK UNIFIED IDEOGRAPH + {0xD2FB, 0x7A8A}, //7377 #CJK UNIFIED IDEOGRAPH + {0xD2FC, 0x7A87}, //7378 #CJK UNIFIED IDEOGRAPH + {0xD2FD, 0x7AD8}, //7379 #CJK UNIFIED IDEOGRAPH + {0xD2FE, 0x7B10}, //7380 #CJK UNIFIED IDEOGRAPH + {0xD340, 0x7B04}, //7381 #CJK UNIFIED IDEOGRAPH + {0xD341, 0x7B13}, //7382 #CJK UNIFIED IDEOGRAPH + {0xD342, 0x7B05}, //7383 #CJK UNIFIED IDEOGRAPH + {0xD343, 0x7B0F}, //7384 #CJK UNIFIED IDEOGRAPH + {0xD344, 0x7B08}, //7385 #CJK UNIFIED IDEOGRAPH + {0xD345, 0x7B0A}, //7386 #CJK UNIFIED IDEOGRAPH + {0xD346, 0x7B0E}, //7387 #CJK UNIFIED IDEOGRAPH + {0xD347, 0x7B09}, //7388 #CJK UNIFIED IDEOGRAPH + {0xD348, 0x7B12}, //7389 #CJK UNIFIED IDEOGRAPH + {0xD349, 0x7C84}, //7390 #CJK UNIFIED IDEOGRAPH + {0xD34A, 0x7C91}, //7391 #CJK UNIFIED IDEOGRAPH + {0xD34B, 0x7C8A}, //7392 #CJK UNIFIED IDEOGRAPH + {0xD34C, 0x7C8C}, //7393 #CJK UNIFIED IDEOGRAPH + {0xD34D, 0x7C88}, //7394 #CJK UNIFIED IDEOGRAPH + {0xD34E, 0x7C8D}, //7395 #CJK UNIFIED IDEOGRAPH + {0xD34F, 0x7C85}, //7396 #CJK UNIFIED IDEOGRAPH + {0xD350, 0x7D1E}, //7397 #CJK UNIFIED IDEOGRAPH + {0xD351, 0x7D1D}, //7398 #CJK UNIFIED IDEOGRAPH + {0xD352, 0x7D11}, //7399 #CJK UNIFIED IDEOGRAPH + {0xD353, 0x7D0E}, //7400 #CJK UNIFIED IDEOGRAPH + {0xD354, 0x7D18}, //7401 #CJK UNIFIED IDEOGRAPH + {0xD355, 0x7D16}, //7402 #CJK UNIFIED IDEOGRAPH + {0xD356, 0x7D13}, //7403 #CJK UNIFIED IDEOGRAPH + {0xD357, 0x7D1F}, //7404 #CJK UNIFIED IDEOGRAPH + {0xD358, 0x7D12}, //7405 #CJK UNIFIED IDEOGRAPH + {0xD359, 0x7D0F}, //7406 #CJK UNIFIED IDEOGRAPH + {0xD35A, 0x7D0C}, //7407 #CJK UNIFIED IDEOGRAPH + {0xD35B, 0x7F5C}, //7408 #CJK UNIFIED IDEOGRAPH + {0xD35C, 0x7F61}, //7409 #CJK UNIFIED IDEOGRAPH + {0xD35D, 0x7F5E}, //7410 #CJK UNIFIED IDEOGRAPH + {0xD35E, 0x7F60}, //7411 #CJK UNIFIED IDEOGRAPH + {0xD35F, 0x7F5D}, //7412 #CJK UNIFIED IDEOGRAPH + {0xD360, 0x7F5B}, //7413 #CJK UNIFIED IDEOGRAPH + {0xD361, 0x7F96}, //7414 #CJK UNIFIED IDEOGRAPH + {0xD362, 0x7F92}, //7415 #CJK UNIFIED IDEOGRAPH + {0xD363, 0x7FC3}, //7416 #CJK UNIFIED IDEOGRAPH + {0xD364, 0x7FC2}, //7417 #CJK UNIFIED IDEOGRAPH + {0xD365, 0x7FC0}, //7418 #CJK UNIFIED IDEOGRAPH + {0xD366, 0x8016}, //7419 #CJK UNIFIED IDEOGRAPH + {0xD367, 0x803E}, //7420 #CJK UNIFIED IDEOGRAPH + {0xD368, 0x8039}, //7421 #CJK UNIFIED IDEOGRAPH + {0xD369, 0x80FA}, //7422 #CJK UNIFIED IDEOGRAPH + {0xD36A, 0x80F2}, //7423 #CJK UNIFIED IDEOGRAPH + {0xD36B, 0x80F9}, //7424 #CJK UNIFIED IDEOGRAPH + {0xD36C, 0x80F5}, //7425 #CJK UNIFIED IDEOGRAPH + {0xD36D, 0x8101}, //7426 #CJK UNIFIED IDEOGRAPH + {0xD36E, 0x80FB}, //7427 #CJK UNIFIED IDEOGRAPH + {0xD36F, 0x8100}, //7428 #CJK UNIFIED IDEOGRAPH + {0xD370, 0x8201}, //7429 #CJK UNIFIED IDEOGRAPH + {0xD371, 0x822F}, //7430 #CJK UNIFIED IDEOGRAPH + {0xD372, 0x8225}, //7431 #CJK UNIFIED IDEOGRAPH + {0xD373, 0x8333}, //7432 #CJK UNIFIED IDEOGRAPH + {0xD374, 0x832D}, //7433 #CJK UNIFIED IDEOGRAPH + {0xD375, 0x8344}, //7434 #CJK UNIFIED IDEOGRAPH + {0xD376, 0x8319}, //7435 #CJK UNIFIED IDEOGRAPH + {0xD377, 0x8351}, //7436 #CJK UNIFIED IDEOGRAPH + {0xD378, 0x8325}, //7437 #CJK UNIFIED IDEOGRAPH + {0xD379, 0x8356}, //7438 #CJK UNIFIED IDEOGRAPH + {0xD37A, 0x833F}, //7439 #CJK UNIFIED IDEOGRAPH + {0xD37B, 0x8341}, //7440 #CJK UNIFIED IDEOGRAPH + {0xD37C, 0x8326}, //7441 #CJK UNIFIED IDEOGRAPH + {0xD37D, 0x831C}, //7442 #CJK UNIFIED IDEOGRAPH + {0xD37E, 0x8322}, //7443 #CJK UNIFIED IDEOGRAPH + {0xD3A1, 0x8342}, //7444 #CJK UNIFIED IDEOGRAPH + {0xD3A2, 0x834E}, //7445 #CJK UNIFIED IDEOGRAPH + {0xD3A3, 0x831B}, //7446 #CJK UNIFIED IDEOGRAPH + {0xD3A4, 0x832A}, //7447 #CJK UNIFIED IDEOGRAPH + {0xD3A5, 0x8308}, //7448 #CJK UNIFIED IDEOGRAPH + {0xD3A6, 0x833C}, //7449 #CJK UNIFIED IDEOGRAPH + {0xD3A7, 0x834D}, //7450 #CJK UNIFIED IDEOGRAPH + {0xD3A8, 0x8316}, //7451 #CJK UNIFIED IDEOGRAPH + {0xD3A9, 0x8324}, //7452 #CJK UNIFIED IDEOGRAPH + {0xD3AA, 0x8320}, //7453 #CJK UNIFIED IDEOGRAPH + {0xD3AB, 0x8337}, //7454 #CJK UNIFIED IDEOGRAPH + {0xD3AC, 0x832F}, //7455 #CJK UNIFIED IDEOGRAPH + {0xD3AD, 0x8329}, //7456 #CJK UNIFIED IDEOGRAPH + {0xD3AE, 0x8347}, //7457 #CJK UNIFIED IDEOGRAPH + {0xD3AF, 0x8345}, //7458 #CJK UNIFIED IDEOGRAPH + {0xD3B0, 0x834C}, //7459 #CJK UNIFIED IDEOGRAPH + {0xD3B1, 0x8353}, //7460 #CJK UNIFIED IDEOGRAPH + {0xD3B2, 0x831E}, //7461 #CJK UNIFIED IDEOGRAPH + {0xD3B3, 0x832C}, //7462 #CJK UNIFIED IDEOGRAPH + {0xD3B4, 0x834B}, //7463 #CJK UNIFIED IDEOGRAPH + {0xD3B5, 0x8327}, //7464 #CJK UNIFIED IDEOGRAPH + {0xD3B6, 0x8348}, //7465 #CJK UNIFIED IDEOGRAPH + {0xD3B7, 0x8653}, //7466 #CJK UNIFIED IDEOGRAPH + {0xD3B8, 0x8652}, //7467 #CJK UNIFIED IDEOGRAPH + {0xD3B9, 0x86A2}, //7468 #CJK UNIFIED IDEOGRAPH + {0xD3BA, 0x86A8}, //7469 #CJK UNIFIED IDEOGRAPH + {0xD3BB, 0x8696}, //7470 #CJK UNIFIED IDEOGRAPH + {0xD3BC, 0x868D}, //7471 #CJK UNIFIED IDEOGRAPH + {0xD3BD, 0x8691}, //7472 #CJK UNIFIED IDEOGRAPH + {0xD3BE, 0x869E}, //7473 #CJK UNIFIED IDEOGRAPH + {0xD3BF, 0x8687}, //7474 #CJK UNIFIED IDEOGRAPH + {0xD3C0, 0x8697}, //7475 #CJK UNIFIED IDEOGRAPH + {0xD3C1, 0x8686}, //7476 #CJK UNIFIED IDEOGRAPH + {0xD3C2, 0x868B}, //7477 #CJK UNIFIED IDEOGRAPH + {0xD3C3, 0x869A}, //7478 #CJK UNIFIED IDEOGRAPH + {0xD3C4, 0x8685}, //7479 #CJK UNIFIED IDEOGRAPH + {0xD3C5, 0x86A5}, //7480 #CJK UNIFIED IDEOGRAPH + {0xD3C6, 0x8699}, //7481 #CJK UNIFIED IDEOGRAPH + {0xD3C7, 0x86A1}, //7482 #CJK UNIFIED IDEOGRAPH + {0xD3C8, 0x86A7}, //7483 #CJK UNIFIED IDEOGRAPH + {0xD3C9, 0x8695}, //7484 #CJK UNIFIED IDEOGRAPH + {0xD3CA, 0x8698}, //7485 #CJK UNIFIED IDEOGRAPH + {0xD3CB, 0x868E}, //7486 #CJK UNIFIED IDEOGRAPH + {0xD3CC, 0x869D}, //7487 #CJK UNIFIED IDEOGRAPH + {0xD3CD, 0x8690}, //7488 #CJK UNIFIED IDEOGRAPH + {0xD3CE, 0x8694}, //7489 #CJK UNIFIED IDEOGRAPH + {0xD3CF, 0x8843}, //7490 #CJK UNIFIED IDEOGRAPH + {0xD3D0, 0x8844}, //7491 #CJK UNIFIED IDEOGRAPH + {0xD3D1, 0x886D}, //7492 #CJK UNIFIED IDEOGRAPH + {0xD3D2, 0x8875}, //7493 #CJK UNIFIED IDEOGRAPH + {0xD3D3, 0x8876}, //7494 #CJK UNIFIED IDEOGRAPH + {0xD3D4, 0x8872}, //7495 #CJK UNIFIED IDEOGRAPH + {0xD3D5, 0x8880}, //7496 #CJK UNIFIED IDEOGRAPH + {0xD3D6, 0x8871}, //7497 #CJK UNIFIED IDEOGRAPH + {0xD3D7, 0x887F}, //7498 #CJK UNIFIED IDEOGRAPH + {0xD3D8, 0x886F}, //7499 #CJK UNIFIED IDEOGRAPH + {0xD3D9, 0x8883}, //7500 #CJK UNIFIED IDEOGRAPH + {0xD3DA, 0x887E}, //7501 #CJK UNIFIED IDEOGRAPH + {0xD3DB, 0x8874}, //7502 #CJK UNIFIED IDEOGRAPH + {0xD3DC, 0x887C}, //7503 #CJK UNIFIED IDEOGRAPH + {0xD3DD, 0x8A12}, //7504 #CJK UNIFIED IDEOGRAPH + {0xD3DE, 0x8C47}, //7505 #CJK UNIFIED IDEOGRAPH + {0xD3DF, 0x8C57}, //7506 #CJK UNIFIED IDEOGRAPH + {0xD3E0, 0x8C7B}, //7507 #CJK UNIFIED IDEOGRAPH + {0xD3E1, 0x8CA4}, //7508 #CJK UNIFIED IDEOGRAPH + {0xD3E2, 0x8CA3}, //7509 #CJK UNIFIED IDEOGRAPH + {0xD3E3, 0x8D76}, //7510 #CJK UNIFIED IDEOGRAPH + {0xD3E4, 0x8D78}, //7511 #CJK UNIFIED IDEOGRAPH + {0xD3E5, 0x8DB5}, //7512 #CJK UNIFIED IDEOGRAPH + {0xD3E6, 0x8DB7}, //7513 #CJK UNIFIED IDEOGRAPH + {0xD3E7, 0x8DB6}, //7514 #CJK UNIFIED IDEOGRAPH + {0xD3E8, 0x8ED1}, //7515 #CJK UNIFIED IDEOGRAPH + {0xD3E9, 0x8ED3}, //7516 #CJK UNIFIED IDEOGRAPH + {0xD3EA, 0x8FFE}, //7517 #CJK UNIFIED IDEOGRAPH + {0xD3EB, 0x8FF5}, //7518 #CJK UNIFIED IDEOGRAPH + {0xD3EC, 0x9002}, //7519 #CJK UNIFIED IDEOGRAPH + {0xD3ED, 0x8FFF}, //7520 #CJK UNIFIED IDEOGRAPH + {0xD3EE, 0x8FFB}, //7521 #CJK UNIFIED IDEOGRAPH + {0xD3EF, 0x9004}, //7522 #CJK UNIFIED IDEOGRAPH + {0xD3F0, 0x8FFC}, //7523 #CJK UNIFIED IDEOGRAPH + {0xD3F1, 0x8FF6}, //7524 #CJK UNIFIED IDEOGRAPH + {0xD3F2, 0x90D6}, //7525 #CJK UNIFIED IDEOGRAPH + {0xD3F3, 0x90E0}, //7526 #CJK UNIFIED IDEOGRAPH + {0xD3F4, 0x90D9}, //7527 #CJK UNIFIED IDEOGRAPH + {0xD3F5, 0x90DA}, //7528 #CJK UNIFIED IDEOGRAPH + {0xD3F6, 0x90E3}, //7529 #CJK UNIFIED IDEOGRAPH + {0xD3F7, 0x90DF}, //7530 #CJK UNIFIED IDEOGRAPH + {0xD3F8, 0x90E5}, //7531 #CJK UNIFIED IDEOGRAPH + {0xD3F9, 0x90D8}, //7532 #CJK UNIFIED IDEOGRAPH + {0xD3FA, 0x90DB}, //7533 #CJK UNIFIED IDEOGRAPH + {0xD3FB, 0x90D7}, //7534 #CJK UNIFIED IDEOGRAPH + {0xD3FC, 0x90DC}, //7535 #CJK UNIFIED IDEOGRAPH + {0xD3FD, 0x90E4}, //7536 #CJK UNIFIED IDEOGRAPH + {0xD3FE, 0x9150}, //7537 #CJK UNIFIED IDEOGRAPH + {0xD440, 0x914E}, //7538 #CJK UNIFIED IDEOGRAPH + {0xD441, 0x914F}, //7539 #CJK UNIFIED IDEOGRAPH + {0xD442, 0x91D5}, //7540 #CJK UNIFIED IDEOGRAPH + {0xD443, 0x91E2}, //7541 #CJK UNIFIED IDEOGRAPH + {0xD444, 0x91DA}, //7542 #CJK UNIFIED IDEOGRAPH + {0xD445, 0x965C}, //7543 #CJK UNIFIED IDEOGRAPH + {0xD446, 0x965F}, //7544 #CJK UNIFIED IDEOGRAPH + {0xD447, 0x96BC}, //7545 #CJK UNIFIED IDEOGRAPH + {0xD448, 0x98E3}, //7546 #CJK UNIFIED IDEOGRAPH + {0xD449, 0x9ADF}, //7547 #CJK UNIFIED IDEOGRAPH + {0xD44A, 0x9B2F}, //7548 #CJK UNIFIED IDEOGRAPH + {0xD44B, 0x4E7F}, //7549 #CJK UNIFIED IDEOGRAPH + {0xD44C, 0x5070}, //7550 #CJK UNIFIED IDEOGRAPH + {0xD44D, 0x506A}, //7551 #CJK UNIFIED IDEOGRAPH + {0xD44E, 0x5061}, //7552 #CJK UNIFIED IDEOGRAPH + {0xD44F, 0x505E}, //7553 #CJK UNIFIED IDEOGRAPH + {0xD450, 0x5060}, //7554 #CJK UNIFIED IDEOGRAPH + {0xD451, 0x5053}, //7555 #CJK UNIFIED IDEOGRAPH + {0xD452, 0x504B}, //7556 #CJK UNIFIED IDEOGRAPH + {0xD453, 0x505D}, //7557 #CJK UNIFIED IDEOGRAPH + {0xD454, 0x5072}, //7558 #CJK UNIFIED IDEOGRAPH + {0xD455, 0x5048}, //7559 #CJK UNIFIED IDEOGRAPH + {0xD456, 0x504D}, //7560 #CJK UNIFIED IDEOGRAPH + {0xD457, 0x5041}, //7561 #CJK UNIFIED IDEOGRAPH + {0xD458, 0x505B}, //7562 #CJK UNIFIED IDEOGRAPH + {0xD459, 0x504A}, //7563 #CJK UNIFIED IDEOGRAPH + {0xD45A, 0x5062}, //7564 #CJK UNIFIED IDEOGRAPH + {0xD45B, 0x5015}, //7565 #CJK UNIFIED IDEOGRAPH + {0xD45C, 0x5045}, //7566 #CJK UNIFIED IDEOGRAPH + {0xD45D, 0x505F}, //7567 #CJK UNIFIED IDEOGRAPH + {0xD45E, 0x5069}, //7568 #CJK UNIFIED IDEOGRAPH + {0xD45F, 0x506B}, //7569 #CJK UNIFIED IDEOGRAPH + {0xD460, 0x5063}, //7570 #CJK UNIFIED IDEOGRAPH + {0xD461, 0x5064}, //7571 #CJK UNIFIED IDEOGRAPH + {0xD462, 0x5046}, //7572 #CJK UNIFIED IDEOGRAPH + {0xD463, 0x5040}, //7573 #CJK UNIFIED IDEOGRAPH + {0xD464, 0x506E}, //7574 #CJK UNIFIED IDEOGRAPH + {0xD465, 0x5073}, //7575 #CJK UNIFIED IDEOGRAPH + {0xD466, 0x5057}, //7576 #CJK UNIFIED IDEOGRAPH + {0xD467, 0x5051}, //7577 #CJK UNIFIED IDEOGRAPH + {0xD468, 0x51D0}, //7578 #CJK UNIFIED IDEOGRAPH + {0xD469, 0x526B}, //7579 #CJK UNIFIED IDEOGRAPH + {0xD46A, 0x526D}, //7580 #CJK UNIFIED IDEOGRAPH + {0xD46B, 0x526C}, //7581 #CJK UNIFIED IDEOGRAPH + {0xD46C, 0x526E}, //7582 #CJK UNIFIED IDEOGRAPH + {0xD46D, 0x52D6}, //7583 #CJK UNIFIED IDEOGRAPH + {0xD46E, 0x52D3}, //7584 #CJK UNIFIED IDEOGRAPH + {0xD46F, 0x532D}, //7585 #CJK UNIFIED IDEOGRAPH + {0xD470, 0x539C}, //7586 #CJK UNIFIED IDEOGRAPH + {0xD471, 0x5575}, //7587 #CJK UNIFIED IDEOGRAPH + {0xD472, 0x5576}, //7588 #CJK UNIFIED IDEOGRAPH + {0xD473, 0x553C}, //7589 #CJK UNIFIED IDEOGRAPH + {0xD474, 0x554D}, //7590 #CJK UNIFIED IDEOGRAPH + {0xD475, 0x5550}, //7591 #CJK UNIFIED IDEOGRAPH + {0xD476, 0x5534}, //7592 #CJK UNIFIED IDEOGRAPH + {0xD477, 0x552A}, //7593 #CJK UNIFIED IDEOGRAPH + {0xD478, 0x5551}, //7594 #CJK UNIFIED IDEOGRAPH + {0xD479, 0x5562}, //7595 #CJK UNIFIED IDEOGRAPH + {0xD47A, 0x5536}, //7596 #CJK UNIFIED IDEOGRAPH + {0xD47B, 0x5535}, //7597 #CJK UNIFIED IDEOGRAPH + {0xD47C, 0x5530}, //7598 #CJK UNIFIED IDEOGRAPH + {0xD47D, 0x5552}, //7599 #CJK UNIFIED IDEOGRAPH + {0xD47E, 0x5545}, //7600 #CJK UNIFIED IDEOGRAPH + {0xD4A1, 0x550C}, //7601 #CJK UNIFIED IDEOGRAPH + {0xD4A2, 0x5532}, //7602 #CJK UNIFIED IDEOGRAPH + {0xD4A3, 0x5565}, //7603 #CJK UNIFIED IDEOGRAPH + {0xD4A4, 0x554E}, //7604 #CJK UNIFIED IDEOGRAPH + {0xD4A5, 0x5539}, //7605 #CJK UNIFIED IDEOGRAPH + {0xD4A6, 0x5548}, //7606 #CJK UNIFIED IDEOGRAPH + {0xD4A7, 0x552D}, //7607 #CJK UNIFIED IDEOGRAPH + {0xD4A8, 0x553B}, //7608 #CJK UNIFIED IDEOGRAPH + {0xD4A9, 0x5540}, //7609 #CJK UNIFIED IDEOGRAPH + {0xD4AA, 0x554B}, //7610 #CJK UNIFIED IDEOGRAPH + {0xD4AB, 0x570A}, //7611 #CJK UNIFIED IDEOGRAPH + {0xD4AC, 0x5707}, //7612 #CJK UNIFIED IDEOGRAPH + {0xD4AD, 0x57FB}, //7613 #CJK UNIFIED IDEOGRAPH + {0xD4AE, 0x5814}, //7614 #CJK UNIFIED IDEOGRAPH + {0xD4AF, 0x57E2}, //7615 #CJK UNIFIED IDEOGRAPH + {0xD4B0, 0x57F6}, //7616 #CJK UNIFIED IDEOGRAPH + {0xD4B1, 0x57DC}, //7617 #CJK UNIFIED IDEOGRAPH + {0xD4B2, 0x57F4}, //7618 #CJK UNIFIED IDEOGRAPH + {0xD4B3, 0x5800}, //7619 #CJK UNIFIED IDEOGRAPH + {0xD4B4, 0x57ED}, //7620 #CJK UNIFIED IDEOGRAPH + {0xD4B5, 0x57FD}, //7621 #CJK UNIFIED IDEOGRAPH + {0xD4B6, 0x5808}, //7622 #CJK UNIFIED IDEOGRAPH + {0xD4B7, 0x57F8}, //7623 #CJK UNIFIED IDEOGRAPH + {0xD4B8, 0x580B}, //7624 #CJK UNIFIED IDEOGRAPH + {0xD4B9, 0x57F3}, //7625 #CJK UNIFIED IDEOGRAPH + {0xD4BA, 0x57CF}, //7626 #CJK UNIFIED IDEOGRAPH + {0xD4BB, 0x5807}, //7627 #CJK UNIFIED IDEOGRAPH + {0xD4BC, 0x57EE}, //7628 #CJK UNIFIED IDEOGRAPH + {0xD4BD, 0x57E3}, //7629 #CJK UNIFIED IDEOGRAPH + {0xD4BE, 0x57F2}, //7630 #CJK UNIFIED IDEOGRAPH + {0xD4BF, 0x57E5}, //7631 #CJK UNIFIED IDEOGRAPH + {0xD4C0, 0x57EC}, //7632 #CJK UNIFIED IDEOGRAPH + {0xD4C1, 0x57E1}, //7633 #CJK UNIFIED IDEOGRAPH + {0xD4C2, 0x580E}, //7634 #CJK UNIFIED IDEOGRAPH + {0xD4C3, 0x57FC}, //7635 #CJK UNIFIED IDEOGRAPH + {0xD4C4, 0x5810}, //7636 #CJK UNIFIED IDEOGRAPH + {0xD4C5, 0x57E7}, //7637 #CJK UNIFIED IDEOGRAPH + {0xD4C6, 0x5801}, //7638 #CJK UNIFIED IDEOGRAPH + {0xD4C7, 0x580C}, //7639 #CJK UNIFIED IDEOGRAPH + {0xD4C8, 0x57F1}, //7640 #CJK UNIFIED IDEOGRAPH + {0xD4C9, 0x57E9}, //7641 #CJK UNIFIED IDEOGRAPH + {0xD4CA, 0x57F0}, //7642 #CJK UNIFIED IDEOGRAPH + {0xD4CB, 0x580D}, //7643 #CJK UNIFIED IDEOGRAPH + {0xD4CC, 0x5804}, //7644 #CJK UNIFIED IDEOGRAPH + {0xD4CD, 0x595C}, //7645 #CJK UNIFIED IDEOGRAPH + {0xD4CE, 0x5A60}, //7646 #CJK UNIFIED IDEOGRAPH + {0xD4CF, 0x5A58}, //7647 #CJK UNIFIED IDEOGRAPH + {0xD4D0, 0x5A55}, //7648 #CJK UNIFIED IDEOGRAPH + {0xD4D1, 0x5A67}, //7649 #CJK UNIFIED IDEOGRAPH + {0xD4D2, 0x5A5E}, //7650 #CJK UNIFIED IDEOGRAPH + {0xD4D3, 0x5A38}, //7651 #CJK UNIFIED IDEOGRAPH + {0xD4D4, 0x5A35}, //7652 #CJK UNIFIED IDEOGRAPH + {0xD4D5, 0x5A6D}, //7653 #CJK UNIFIED IDEOGRAPH + {0xD4D6, 0x5A50}, //7654 #CJK UNIFIED IDEOGRAPH + {0xD4D7, 0x5A5F}, //7655 #CJK UNIFIED IDEOGRAPH + {0xD4D8, 0x5A65}, //7656 #CJK UNIFIED IDEOGRAPH + {0xD4D9, 0x5A6C}, //7657 #CJK UNIFIED IDEOGRAPH + {0xD4DA, 0x5A53}, //7658 #CJK UNIFIED IDEOGRAPH + {0xD4DB, 0x5A64}, //7659 #CJK UNIFIED IDEOGRAPH + {0xD4DC, 0x5A57}, //7660 #CJK UNIFIED IDEOGRAPH + {0xD4DD, 0x5A43}, //7661 #CJK UNIFIED IDEOGRAPH + {0xD4DE, 0x5A5D}, //7662 #CJK UNIFIED IDEOGRAPH + {0xD4DF, 0x5A52}, //7663 #CJK UNIFIED IDEOGRAPH + {0xD4E0, 0x5A44}, //7664 #CJK UNIFIED IDEOGRAPH + {0xD4E1, 0x5A5B}, //7665 #CJK UNIFIED IDEOGRAPH + {0xD4E2, 0x5A48}, //7666 #CJK UNIFIED IDEOGRAPH + {0xD4E3, 0x5A8E}, //7667 #CJK UNIFIED IDEOGRAPH + {0xD4E4, 0x5A3E}, //7668 #CJK UNIFIED IDEOGRAPH + {0xD4E5, 0x5A4D}, //7669 #CJK UNIFIED IDEOGRAPH + {0xD4E6, 0x5A39}, //7670 #CJK UNIFIED IDEOGRAPH + {0xD4E7, 0x5A4C}, //7671 #CJK UNIFIED IDEOGRAPH + {0xD4E8, 0x5A70}, //7672 #CJK UNIFIED IDEOGRAPH + {0xD4E9, 0x5A69}, //7673 #CJK UNIFIED IDEOGRAPH + {0xD4EA, 0x5A47}, //7674 #CJK UNIFIED IDEOGRAPH + {0xD4EB, 0x5A51}, //7675 #CJK UNIFIED IDEOGRAPH + {0xD4EC, 0x5A56}, //7676 #CJK UNIFIED IDEOGRAPH + {0xD4ED, 0x5A42}, //7677 #CJK UNIFIED IDEOGRAPH + {0xD4EE, 0x5A5C}, //7678 #CJK UNIFIED IDEOGRAPH + {0xD4EF, 0x5B72}, //7679 #CJK UNIFIED IDEOGRAPH + {0xD4F0, 0x5B6E}, //7680 #CJK UNIFIED IDEOGRAPH + {0xD4F1, 0x5BC1}, //7681 #CJK UNIFIED IDEOGRAPH + {0xD4F2, 0x5BC0}, //7682 #CJK UNIFIED IDEOGRAPH + {0xD4F3, 0x5C59}, //7683 #CJK UNIFIED IDEOGRAPH + {0xD4F4, 0x5D1E}, //7684 #CJK UNIFIED IDEOGRAPH + {0xD4F5, 0x5D0B}, //7685 #CJK UNIFIED IDEOGRAPH + {0xD4F6, 0x5D1D}, //7686 #CJK UNIFIED IDEOGRAPH + {0xD4F7, 0x5D1A}, //7687 #CJK UNIFIED IDEOGRAPH + {0xD4F8, 0x5D20}, //7688 #CJK UNIFIED IDEOGRAPH + {0xD4F9, 0x5D0C}, //7689 #CJK UNIFIED IDEOGRAPH + {0xD4FA, 0x5D28}, //7690 #CJK UNIFIED IDEOGRAPH + {0xD4FB, 0x5D0D}, //7691 #CJK UNIFIED IDEOGRAPH + {0xD4FC, 0x5D26}, //7692 #CJK UNIFIED IDEOGRAPH + {0xD4FD, 0x5D25}, //7693 #CJK UNIFIED IDEOGRAPH + {0xD4FE, 0x5D0F}, //7694 #CJK UNIFIED IDEOGRAPH + {0xD540, 0x5D30}, //7695 #CJK UNIFIED IDEOGRAPH + {0xD541, 0x5D12}, //7696 #CJK UNIFIED IDEOGRAPH + {0xD542, 0x5D23}, //7697 #CJK UNIFIED IDEOGRAPH + {0xD543, 0x5D1F}, //7698 #CJK UNIFIED IDEOGRAPH + {0xD544, 0x5D2E}, //7699 #CJK UNIFIED IDEOGRAPH + {0xD545, 0x5E3E}, //7700 #CJK UNIFIED IDEOGRAPH + {0xD546, 0x5E34}, //7701 #CJK UNIFIED IDEOGRAPH + {0xD547, 0x5EB1}, //7702 #CJK UNIFIED IDEOGRAPH + {0xD548, 0x5EB4}, //7703 #CJK UNIFIED IDEOGRAPH + {0xD549, 0x5EB9}, //7704 #CJK UNIFIED IDEOGRAPH + {0xD54A, 0x5EB2}, //7705 #CJK UNIFIED IDEOGRAPH + {0xD54B, 0x5EB3}, //7706 #CJK UNIFIED IDEOGRAPH + {0xD54C, 0x5F36}, //7707 #CJK UNIFIED IDEOGRAPH + {0xD54D, 0x5F38}, //7708 #CJK UNIFIED IDEOGRAPH + {0xD54E, 0x5F9B}, //7709 #CJK UNIFIED IDEOGRAPH + {0xD54F, 0x5F96}, //7710 #CJK UNIFIED IDEOGRAPH + {0xD550, 0x5F9F}, //7711 #CJK UNIFIED IDEOGRAPH + {0xD551, 0x608A}, //7712 #CJK UNIFIED IDEOGRAPH + {0xD552, 0x6090}, //7713 #CJK UNIFIED IDEOGRAPH + {0xD553, 0x6086}, //7714 #CJK UNIFIED IDEOGRAPH + {0xD554, 0x60BE}, //7715 #CJK UNIFIED IDEOGRAPH + {0xD555, 0x60B0}, //7716 #CJK UNIFIED IDEOGRAPH + {0xD556, 0x60BA}, //7717 #CJK UNIFIED IDEOGRAPH + {0xD557, 0x60D3}, //7718 #CJK UNIFIED IDEOGRAPH + {0xD558, 0x60D4}, //7719 #CJK UNIFIED IDEOGRAPH + {0xD559, 0x60CF}, //7720 #CJK UNIFIED IDEOGRAPH + {0xD55A, 0x60E4}, //7721 #CJK UNIFIED IDEOGRAPH + {0xD55B, 0x60D9}, //7722 #CJK UNIFIED IDEOGRAPH + {0xD55C, 0x60DD}, //7723 #CJK UNIFIED IDEOGRAPH + {0xD55D, 0x60C8}, //7724 #CJK UNIFIED IDEOGRAPH + {0xD55E, 0x60B1}, //7725 #CJK UNIFIED IDEOGRAPH + {0xD55F, 0x60DB}, //7726 #CJK UNIFIED IDEOGRAPH + {0xD560, 0x60B7}, //7727 #CJK UNIFIED IDEOGRAPH + {0xD561, 0x60CA}, //7728 #CJK UNIFIED IDEOGRAPH + {0xD562, 0x60BF}, //7729 #CJK UNIFIED IDEOGRAPH + {0xD563, 0x60C3}, //7730 #CJK UNIFIED IDEOGRAPH + {0xD564, 0x60CD}, //7731 #CJK UNIFIED IDEOGRAPH + {0xD565, 0x60C0}, //7732 #CJK UNIFIED IDEOGRAPH + {0xD566, 0x6332}, //7733 #CJK UNIFIED IDEOGRAPH + {0xD567, 0x6365}, //7734 #CJK UNIFIED IDEOGRAPH + {0xD568, 0x638A}, //7735 #CJK UNIFIED IDEOGRAPH + {0xD569, 0x6382}, //7736 #CJK UNIFIED IDEOGRAPH + {0xD56A, 0x637D}, //7737 #CJK UNIFIED IDEOGRAPH + {0xD56B, 0x63BD}, //7738 #CJK UNIFIED IDEOGRAPH + {0xD56C, 0x639E}, //7739 #CJK UNIFIED IDEOGRAPH + {0xD56D, 0x63AD}, //7740 #CJK UNIFIED IDEOGRAPH + {0xD56E, 0x639D}, //7741 #CJK UNIFIED IDEOGRAPH + {0xD56F, 0x6397}, //7742 #CJK UNIFIED IDEOGRAPH + {0xD570, 0x63AB}, //7743 #CJK UNIFIED IDEOGRAPH + {0xD571, 0x638E}, //7744 #CJK UNIFIED IDEOGRAPH + {0xD572, 0x636F}, //7745 #CJK UNIFIED IDEOGRAPH + {0xD573, 0x6387}, //7746 #CJK UNIFIED IDEOGRAPH + {0xD574, 0x6390}, //7747 #CJK UNIFIED IDEOGRAPH + {0xD575, 0x636E}, //7748 #CJK UNIFIED IDEOGRAPH + {0xD576, 0x63AF}, //7749 #CJK UNIFIED IDEOGRAPH + {0xD577, 0x6375}, //7750 #CJK UNIFIED IDEOGRAPH + {0xD578, 0x639C}, //7751 #CJK UNIFIED IDEOGRAPH + {0xD579, 0x636D}, //7752 #CJK UNIFIED IDEOGRAPH + {0xD57A, 0x63AE}, //7753 #CJK UNIFIED IDEOGRAPH + {0xD57B, 0x637C}, //7754 #CJK UNIFIED IDEOGRAPH + {0xD57C, 0x63A4}, //7755 #CJK UNIFIED IDEOGRAPH + {0xD57D, 0x633B}, //7756 #CJK UNIFIED IDEOGRAPH + {0xD57E, 0x639F}, //7757 #CJK UNIFIED IDEOGRAPH + {0xD5A1, 0x6378}, //7758 #CJK UNIFIED IDEOGRAPH + {0xD5A2, 0x6385}, //7759 #CJK UNIFIED IDEOGRAPH + {0xD5A3, 0x6381}, //7760 #CJK UNIFIED IDEOGRAPH + {0xD5A4, 0x6391}, //7761 #CJK UNIFIED IDEOGRAPH + {0xD5A5, 0x638D}, //7762 #CJK UNIFIED IDEOGRAPH + {0xD5A6, 0x6370}, //7763 #CJK UNIFIED IDEOGRAPH + {0xD5A7, 0x6553}, //7764 #CJK UNIFIED IDEOGRAPH + {0xD5A8, 0x65CD}, //7765 #CJK UNIFIED IDEOGRAPH + {0xD5A9, 0x6665}, //7766 #CJK UNIFIED IDEOGRAPH + {0xD5AA, 0x6661}, //7767 #CJK UNIFIED IDEOGRAPH + {0xD5AB, 0x665B}, //7768 #CJK UNIFIED IDEOGRAPH + {0xD5AC, 0x6659}, //7769 #CJK UNIFIED IDEOGRAPH + {0xD5AD, 0x665C}, //7770 #CJK UNIFIED IDEOGRAPH + {0xD5AE, 0x6662}, //7771 #CJK UNIFIED IDEOGRAPH + {0xD5AF, 0x6718}, //7772 #CJK UNIFIED IDEOGRAPH + {0xD5B0, 0x6879}, //7773 #CJK UNIFIED IDEOGRAPH + {0xD5B1, 0x6887}, //7774 #CJK UNIFIED IDEOGRAPH + {0xD5B2, 0x6890}, //7775 #CJK UNIFIED IDEOGRAPH + {0xD5B3, 0x689C}, //7776 #CJK UNIFIED IDEOGRAPH + {0xD5B4, 0x686D}, //7777 #CJK UNIFIED IDEOGRAPH + {0xD5B5, 0x686E}, //7778 #CJK UNIFIED IDEOGRAPH + {0xD5B6, 0x68AE}, //7779 #CJK UNIFIED IDEOGRAPH + {0xD5B7, 0x68AB}, //7780 #CJK UNIFIED IDEOGRAPH + {0xD5B8, 0x6956}, //7781 #CJK UNIFIED IDEOGRAPH + {0xD5B9, 0x686F}, //7782 #CJK UNIFIED IDEOGRAPH + {0xD5BA, 0x68A3}, //7783 #CJK UNIFIED IDEOGRAPH + {0xD5BB, 0x68AC}, //7784 #CJK UNIFIED IDEOGRAPH + {0xD5BC, 0x68A9}, //7785 #CJK UNIFIED IDEOGRAPH + {0xD5BD, 0x6875}, //7786 #CJK UNIFIED IDEOGRAPH + {0xD5BE, 0x6874}, //7787 #CJK UNIFIED IDEOGRAPH + {0xD5BF, 0x68B2}, //7788 #CJK UNIFIED IDEOGRAPH + {0xD5C0, 0x688F}, //7789 #CJK UNIFIED IDEOGRAPH + {0xD5C1, 0x6877}, //7790 #CJK UNIFIED IDEOGRAPH + {0xD5C2, 0x6892}, //7791 #CJK UNIFIED IDEOGRAPH + {0xD5C3, 0x687C}, //7792 #CJK UNIFIED IDEOGRAPH + {0xD5C4, 0x686B}, //7793 #CJK UNIFIED IDEOGRAPH + {0xD5C5, 0x6872}, //7794 #CJK UNIFIED IDEOGRAPH + {0xD5C6, 0x68AA}, //7795 #CJK UNIFIED IDEOGRAPH + {0xD5C7, 0x6880}, //7796 #CJK UNIFIED IDEOGRAPH + {0xD5C8, 0x6871}, //7797 #CJK UNIFIED IDEOGRAPH + {0xD5C9, 0x687E}, //7798 #CJK UNIFIED IDEOGRAPH + {0xD5CA, 0x689B}, //7799 #CJK UNIFIED IDEOGRAPH + {0xD5CB, 0x6896}, //7800 #CJK UNIFIED IDEOGRAPH + {0xD5CC, 0x688B}, //7801 #CJK UNIFIED IDEOGRAPH + {0xD5CD, 0x68A0}, //7802 #CJK UNIFIED IDEOGRAPH + {0xD5CE, 0x6889}, //7803 #CJK UNIFIED IDEOGRAPH + {0xD5CF, 0x68A4}, //7804 #CJK UNIFIED IDEOGRAPH + {0xD5D0, 0x6878}, //7805 #CJK UNIFIED IDEOGRAPH + {0xD5D1, 0x687B}, //7806 #CJK UNIFIED IDEOGRAPH + {0xD5D2, 0x6891}, //7807 #CJK UNIFIED IDEOGRAPH + {0xD5D3, 0x688C}, //7808 #CJK UNIFIED IDEOGRAPH + {0xD5D4, 0x688A}, //7809 #CJK UNIFIED IDEOGRAPH + {0xD5D5, 0x687D}, //7810 #CJK UNIFIED IDEOGRAPH + {0xD5D6, 0x6B36}, //7811 #CJK UNIFIED IDEOGRAPH + {0xD5D7, 0x6B33}, //7812 #CJK UNIFIED IDEOGRAPH + {0xD5D8, 0x6B37}, //7813 #CJK UNIFIED IDEOGRAPH + {0xD5D9, 0x6B38}, //7814 #CJK UNIFIED IDEOGRAPH + {0xD5DA, 0x6B91}, //7815 #CJK UNIFIED IDEOGRAPH + {0xD5DB, 0x6B8F}, //7816 #CJK UNIFIED IDEOGRAPH + {0xD5DC, 0x6B8D}, //7817 #CJK UNIFIED IDEOGRAPH + {0xD5DD, 0x6B8E}, //7818 #CJK UNIFIED IDEOGRAPH + {0xD5DE, 0x6B8C}, //7819 #CJK UNIFIED IDEOGRAPH + {0xD5DF, 0x6C2A}, //7820 #CJK UNIFIED IDEOGRAPH + {0xD5E0, 0x6DC0}, //7821 #CJK UNIFIED IDEOGRAPH + {0xD5E1, 0x6DAB}, //7822 #CJK UNIFIED IDEOGRAPH + {0xD5E2, 0x6DB4}, //7823 #CJK UNIFIED IDEOGRAPH + {0xD5E3, 0x6DB3}, //7824 #CJK UNIFIED IDEOGRAPH + {0xD5E4, 0x6E74}, //7825 #CJK UNIFIED IDEOGRAPH + {0xD5E5, 0x6DAC}, //7826 #CJK UNIFIED IDEOGRAPH + {0xD5E6, 0x6DE9}, //7827 #CJK UNIFIED IDEOGRAPH + {0xD5E7, 0x6DE2}, //7828 #CJK UNIFIED IDEOGRAPH + {0xD5E8, 0x6DB7}, //7829 #CJK UNIFIED IDEOGRAPH + {0xD5E9, 0x6DF6}, //7830 #CJK UNIFIED IDEOGRAPH + {0xD5EA, 0x6DD4}, //7831 #CJK UNIFIED IDEOGRAPH + {0xD5EB, 0x6E00}, //7832 #CJK UNIFIED IDEOGRAPH + {0xD5EC, 0x6DC8}, //7833 #CJK UNIFIED IDEOGRAPH + {0xD5ED, 0x6DE0}, //7834 #CJK UNIFIED IDEOGRAPH + {0xD5EE, 0x6DDF}, //7835 #CJK UNIFIED IDEOGRAPH + {0xD5EF, 0x6DD6}, //7836 #CJK UNIFIED IDEOGRAPH + {0xD5F0, 0x6DBE}, //7837 #CJK UNIFIED IDEOGRAPH + {0xD5F1, 0x6DE5}, //7838 #CJK UNIFIED IDEOGRAPH + {0xD5F2, 0x6DDC}, //7839 #CJK UNIFIED IDEOGRAPH + {0xD5F3, 0x6DDD}, //7840 #CJK UNIFIED IDEOGRAPH + {0xD5F4, 0x6DDB}, //7841 #CJK UNIFIED IDEOGRAPH + {0xD5F5, 0x6DF4}, //7842 #CJK UNIFIED IDEOGRAPH + {0xD5F6, 0x6DCA}, //7843 #CJK UNIFIED IDEOGRAPH + {0xD5F7, 0x6DBD}, //7844 #CJK UNIFIED IDEOGRAPH + {0xD5F8, 0x6DED}, //7845 #CJK UNIFIED IDEOGRAPH + {0xD5F9, 0x6DF0}, //7846 #CJK UNIFIED IDEOGRAPH + {0xD5FA, 0x6DBA}, //7847 #CJK UNIFIED IDEOGRAPH + {0xD5FB, 0x6DD5}, //7848 #CJK UNIFIED IDEOGRAPH + {0xD5FC, 0x6DC2}, //7849 #CJK UNIFIED IDEOGRAPH + {0xD5FD, 0x6DCF}, //7850 #CJK UNIFIED IDEOGRAPH + {0xD5FE, 0x6DC9}, //7851 #CJK UNIFIED IDEOGRAPH + {0xD640, 0x6DD0}, //7852 #CJK UNIFIED IDEOGRAPH + {0xD641, 0x6DF2}, //7853 #CJK UNIFIED IDEOGRAPH + {0xD642, 0x6DD3}, //7854 #CJK UNIFIED IDEOGRAPH + {0xD643, 0x6DFD}, //7855 #CJK UNIFIED IDEOGRAPH + {0xD644, 0x6DD7}, //7856 #CJK UNIFIED IDEOGRAPH + {0xD645, 0x6DCD}, //7857 #CJK UNIFIED IDEOGRAPH + {0xD646, 0x6DE3}, //7858 #CJK UNIFIED IDEOGRAPH + {0xD647, 0x6DBB}, //7859 #CJK UNIFIED IDEOGRAPH + {0xD648, 0x70FA}, //7860 #CJK UNIFIED IDEOGRAPH + {0xD649, 0x710D}, //7861 #CJK UNIFIED IDEOGRAPH + {0xD64A, 0x70F7}, //7862 #CJK UNIFIED IDEOGRAPH + {0xD64B, 0x7117}, //7863 #CJK UNIFIED IDEOGRAPH + {0xD64C, 0x70F4}, //7864 #CJK UNIFIED IDEOGRAPH + {0xD64D, 0x710C}, //7865 #CJK UNIFIED IDEOGRAPH + {0xD64E, 0x70F0}, //7866 #CJK UNIFIED IDEOGRAPH + {0xD64F, 0x7104}, //7867 #CJK UNIFIED IDEOGRAPH + {0xD650, 0x70F3}, //7868 #CJK UNIFIED IDEOGRAPH + {0xD651, 0x7110}, //7869 #CJK UNIFIED IDEOGRAPH + {0xD652, 0x70FC}, //7870 #CJK UNIFIED IDEOGRAPH + {0xD653, 0x70FF}, //7871 #CJK UNIFIED IDEOGRAPH + {0xD654, 0x7106}, //7872 #CJK UNIFIED IDEOGRAPH + {0xD655, 0x7113}, //7873 #CJK UNIFIED IDEOGRAPH + {0xD656, 0x7100}, //7874 #CJK UNIFIED IDEOGRAPH + {0xD657, 0x70F8}, //7875 #CJK UNIFIED IDEOGRAPH + {0xD658, 0x70F6}, //7876 #CJK UNIFIED IDEOGRAPH + {0xD659, 0x710B}, //7877 #CJK UNIFIED IDEOGRAPH + {0xD65A, 0x7102}, //7878 #CJK UNIFIED IDEOGRAPH + {0xD65B, 0x710E}, //7879 #CJK UNIFIED IDEOGRAPH + {0xD65C, 0x727E}, //7880 #CJK UNIFIED IDEOGRAPH + {0xD65D, 0x727B}, //7881 #CJK UNIFIED IDEOGRAPH + {0xD65E, 0x727C}, //7882 #CJK UNIFIED IDEOGRAPH + {0xD65F, 0x727F}, //7883 #CJK UNIFIED IDEOGRAPH + {0xD660, 0x731D}, //7884 #CJK UNIFIED IDEOGRAPH + {0xD661, 0x7317}, //7885 #CJK UNIFIED IDEOGRAPH + {0xD662, 0x7307}, //7886 #CJK UNIFIED IDEOGRAPH + {0xD663, 0x7311}, //7887 #CJK UNIFIED IDEOGRAPH + {0xD664, 0x7318}, //7888 #CJK UNIFIED IDEOGRAPH + {0xD665, 0x730A}, //7889 #CJK UNIFIED IDEOGRAPH + {0xD666, 0x7308}, //7890 #CJK UNIFIED IDEOGRAPH + {0xD667, 0x72FF}, //7891 #CJK UNIFIED IDEOGRAPH + {0xD668, 0x730F}, //7892 #CJK UNIFIED IDEOGRAPH + {0xD669, 0x731E}, //7893 #CJK UNIFIED IDEOGRAPH + {0xD66A, 0x7388}, //7894 #CJK UNIFIED IDEOGRAPH + {0xD66B, 0x73F6}, //7895 #CJK UNIFIED IDEOGRAPH + {0xD66C, 0x73F8}, //7896 #CJK UNIFIED IDEOGRAPH + {0xD66D, 0x73F5}, //7897 #CJK UNIFIED IDEOGRAPH + {0xD66E, 0x7404}, //7898 #CJK UNIFIED IDEOGRAPH + {0xD66F, 0x7401}, //7899 #CJK UNIFIED IDEOGRAPH + {0xD670, 0x73FD}, //7900 #CJK UNIFIED IDEOGRAPH + {0xD671, 0x7407}, //7901 #CJK UNIFIED IDEOGRAPH + {0xD672, 0x7400}, //7902 #CJK UNIFIED IDEOGRAPH + {0xD673, 0x73FA}, //7903 #CJK UNIFIED IDEOGRAPH + {0xD674, 0x73FC}, //7904 #CJK UNIFIED IDEOGRAPH + {0xD675, 0x73FF}, //7905 #CJK UNIFIED IDEOGRAPH + {0xD676, 0x740C}, //7906 #CJK UNIFIED IDEOGRAPH + {0xD677, 0x740B}, //7907 #CJK UNIFIED IDEOGRAPH + {0xD678, 0x73F4}, //7908 #CJK UNIFIED IDEOGRAPH + {0xD679, 0x7408}, //7909 #CJK UNIFIED IDEOGRAPH + {0xD67A, 0x7564}, //7910 #CJK UNIFIED IDEOGRAPH + {0xD67B, 0x7563}, //7911 #CJK UNIFIED IDEOGRAPH + {0xD67C, 0x75CE}, //7912 #CJK UNIFIED IDEOGRAPH + {0xD67D, 0x75D2}, //7913 #CJK UNIFIED IDEOGRAPH + {0xD67E, 0x75CF}, //7914 #CJK UNIFIED IDEOGRAPH + {0xD6A1, 0x75CB}, //7915 #CJK UNIFIED IDEOGRAPH + {0xD6A2, 0x75CC}, //7916 #CJK UNIFIED IDEOGRAPH + {0xD6A3, 0x75D1}, //7917 #CJK UNIFIED IDEOGRAPH + {0xD6A4, 0x75D0}, //7918 #CJK UNIFIED IDEOGRAPH + {0xD6A5, 0x768F}, //7919 #CJK UNIFIED IDEOGRAPH + {0xD6A6, 0x7689}, //7920 #CJK UNIFIED IDEOGRAPH + {0xD6A7, 0x76D3}, //7921 #CJK UNIFIED IDEOGRAPH + {0xD6A8, 0x7739}, //7922 #CJK UNIFIED IDEOGRAPH + {0xD6A9, 0x772F}, //7923 #CJK UNIFIED IDEOGRAPH + {0xD6AA, 0x772D}, //7924 #CJK UNIFIED IDEOGRAPH + {0xD6AB, 0x7731}, //7925 #CJK UNIFIED IDEOGRAPH + {0xD6AC, 0x7732}, //7926 #CJK UNIFIED IDEOGRAPH + {0xD6AD, 0x7734}, //7927 #CJK UNIFIED IDEOGRAPH + {0xD6AE, 0x7733}, //7928 #CJK UNIFIED IDEOGRAPH + {0xD6AF, 0x773D}, //7929 #CJK UNIFIED IDEOGRAPH + {0xD6B0, 0x7725}, //7930 #CJK UNIFIED IDEOGRAPH + {0xD6B1, 0x773B}, //7931 #CJK UNIFIED IDEOGRAPH + {0xD6B2, 0x7735}, //7932 #CJK UNIFIED IDEOGRAPH + {0xD6B3, 0x7848}, //7933 #CJK UNIFIED IDEOGRAPH + {0xD6B4, 0x7852}, //7934 #CJK UNIFIED IDEOGRAPH + {0xD6B5, 0x7849}, //7935 #CJK UNIFIED IDEOGRAPH + {0xD6B6, 0x784D}, //7936 #CJK UNIFIED IDEOGRAPH + {0xD6B7, 0x784A}, //7937 #CJK UNIFIED IDEOGRAPH + {0xD6B8, 0x784C}, //7938 #CJK UNIFIED IDEOGRAPH + {0xD6B9, 0x7826}, //7939 #CJK UNIFIED IDEOGRAPH + {0xD6BA, 0x7845}, //7940 #CJK UNIFIED IDEOGRAPH + {0xD6BB, 0x7850}, //7941 #CJK UNIFIED IDEOGRAPH + {0xD6BC, 0x7964}, //7942 #CJK UNIFIED IDEOGRAPH + {0xD6BD, 0x7967}, //7943 #CJK UNIFIED IDEOGRAPH + {0xD6BE, 0x7969}, //7944 #CJK UNIFIED IDEOGRAPH + {0xD6BF, 0x796A}, //7945 #CJK UNIFIED IDEOGRAPH + {0xD6C0, 0x7963}, //7946 #CJK UNIFIED IDEOGRAPH + {0xD6C1, 0x796B}, //7947 #CJK UNIFIED IDEOGRAPH + {0xD6C2, 0x7961}, //7948 #CJK UNIFIED IDEOGRAPH + {0xD6C3, 0x79BB}, //7949 #CJK UNIFIED IDEOGRAPH + {0xD6C4, 0x79FA}, //7950 #CJK UNIFIED IDEOGRAPH + {0xD6C5, 0x79F8}, //7951 #CJK UNIFIED IDEOGRAPH + {0xD6C6, 0x79F6}, //7952 #CJK UNIFIED IDEOGRAPH + {0xD6C7, 0x79F7}, //7953 #CJK UNIFIED IDEOGRAPH + {0xD6C8, 0x7A8F}, //7954 #CJK UNIFIED IDEOGRAPH + {0xD6C9, 0x7A94}, //7955 #CJK UNIFIED IDEOGRAPH + {0xD6CA, 0x7A90}, //7956 #CJK UNIFIED IDEOGRAPH + {0xD6CB, 0x7B35}, //7957 #CJK UNIFIED IDEOGRAPH + {0xD6CC, 0x7B47}, //7958 #CJK UNIFIED IDEOGRAPH + {0xD6CD, 0x7B34}, //7959 #CJK UNIFIED IDEOGRAPH + {0xD6CE, 0x7B25}, //7960 #CJK UNIFIED IDEOGRAPH + {0xD6CF, 0x7B30}, //7961 #CJK UNIFIED IDEOGRAPH + {0xD6D0, 0x7B22}, //7962 #CJK UNIFIED IDEOGRAPH + {0xD6D1, 0x7B24}, //7963 #CJK UNIFIED IDEOGRAPH + {0xD6D2, 0x7B33}, //7964 #CJK UNIFIED IDEOGRAPH + {0xD6D3, 0x7B18}, //7965 #CJK UNIFIED IDEOGRAPH + {0xD6D4, 0x7B2A}, //7966 #CJK UNIFIED IDEOGRAPH + {0xD6D5, 0x7B1D}, //7967 #CJK UNIFIED IDEOGRAPH + {0xD6D6, 0x7B31}, //7968 #CJK UNIFIED IDEOGRAPH + {0xD6D7, 0x7B2B}, //7969 #CJK UNIFIED IDEOGRAPH + {0xD6D8, 0x7B2D}, //7970 #CJK UNIFIED IDEOGRAPH + {0xD6D9, 0x7B2F}, //7971 #CJK UNIFIED IDEOGRAPH + {0xD6DA, 0x7B32}, //7972 #CJK UNIFIED IDEOGRAPH + {0xD6DB, 0x7B38}, //7973 #CJK UNIFIED IDEOGRAPH + {0xD6DC, 0x7B1A}, //7974 #CJK UNIFIED IDEOGRAPH + {0xD6DD, 0x7B23}, //7975 #CJK UNIFIED IDEOGRAPH + {0xD6DE, 0x7C94}, //7976 #CJK UNIFIED IDEOGRAPH + {0xD6DF, 0x7C98}, //7977 #CJK UNIFIED IDEOGRAPH + {0xD6E0, 0x7C96}, //7978 #CJK UNIFIED IDEOGRAPH + {0xD6E1, 0x7CA3}, //7979 #CJK UNIFIED IDEOGRAPH + {0xD6E2, 0x7D35}, //7980 #CJK UNIFIED IDEOGRAPH + {0xD6E3, 0x7D3D}, //7981 #CJK UNIFIED IDEOGRAPH + {0xD6E4, 0x7D38}, //7982 #CJK UNIFIED IDEOGRAPH + {0xD6E5, 0x7D36}, //7983 #CJK UNIFIED IDEOGRAPH + {0xD6E6, 0x7D3A}, //7984 #CJK UNIFIED IDEOGRAPH + {0xD6E7, 0x7D45}, //7985 #CJK UNIFIED IDEOGRAPH + {0xD6E8, 0x7D2C}, //7986 #CJK UNIFIED IDEOGRAPH + {0xD6E9, 0x7D29}, //7987 #CJK UNIFIED IDEOGRAPH + {0xD6EA, 0x7D41}, //7988 #CJK UNIFIED IDEOGRAPH + {0xD6EB, 0x7D47}, //7989 #CJK UNIFIED IDEOGRAPH + {0xD6EC, 0x7D3E}, //7990 #CJK UNIFIED IDEOGRAPH + {0xD6ED, 0x7D3F}, //7991 #CJK UNIFIED IDEOGRAPH + {0xD6EE, 0x7D4A}, //7992 #CJK UNIFIED IDEOGRAPH + {0xD6EF, 0x7D3B}, //7993 #CJK UNIFIED IDEOGRAPH + {0xD6F0, 0x7D28}, //7994 #CJK UNIFIED IDEOGRAPH + {0xD6F1, 0x7F63}, //7995 #CJK UNIFIED IDEOGRAPH + {0xD6F2, 0x7F95}, //7996 #CJK UNIFIED IDEOGRAPH + {0xD6F3, 0x7F9C}, //7997 #CJK UNIFIED IDEOGRAPH + {0xD6F4, 0x7F9D}, //7998 #CJK UNIFIED IDEOGRAPH + {0xD6F5, 0x7F9B}, //7999 #CJK UNIFIED IDEOGRAPH + {0xD6F6, 0x7FCA}, //8000 #CJK UNIFIED IDEOGRAPH + {0xD6F7, 0x7FCB}, //8001 #CJK UNIFIED IDEOGRAPH + {0xD6F8, 0x7FCD}, //8002 #CJK UNIFIED IDEOGRAPH + {0xD6F9, 0x7FD0}, //8003 #CJK UNIFIED IDEOGRAPH + {0xD6FA, 0x7FD1}, //8004 #CJK UNIFIED IDEOGRAPH + {0xD6FB, 0x7FC7}, //8005 #CJK UNIFIED IDEOGRAPH + {0xD6FC, 0x7FCF}, //8006 #CJK UNIFIED IDEOGRAPH + {0xD6FD, 0x7FC9}, //8007 #CJK UNIFIED IDEOGRAPH + {0xD6FE, 0x801F}, //8008 #CJK UNIFIED IDEOGRAPH + {0xD740, 0x801E}, //8009 #CJK UNIFIED IDEOGRAPH + {0xD741, 0x801B}, //8010 #CJK UNIFIED IDEOGRAPH + {0xD742, 0x8047}, //8011 #CJK UNIFIED IDEOGRAPH + {0xD743, 0x8043}, //8012 #CJK UNIFIED IDEOGRAPH + {0xD744, 0x8048}, //8013 #CJK UNIFIED IDEOGRAPH + {0xD745, 0x8118}, //8014 #CJK UNIFIED IDEOGRAPH + {0xD746, 0x8125}, //8015 #CJK UNIFIED IDEOGRAPH + {0xD747, 0x8119}, //8016 #CJK UNIFIED IDEOGRAPH + {0xD748, 0x811B}, //8017 #CJK UNIFIED IDEOGRAPH + {0xD749, 0x812D}, //8018 #CJK UNIFIED IDEOGRAPH + {0xD74A, 0x811F}, //8019 #CJK UNIFIED IDEOGRAPH + {0xD74B, 0x812C}, //8020 #CJK UNIFIED IDEOGRAPH + {0xD74C, 0x811E}, //8021 #CJK UNIFIED IDEOGRAPH + {0xD74D, 0x8121}, //8022 #CJK UNIFIED IDEOGRAPH + {0xD74E, 0x8115}, //8023 #CJK UNIFIED IDEOGRAPH + {0xD74F, 0x8127}, //8024 #CJK UNIFIED IDEOGRAPH + {0xD750, 0x811D}, //8025 #CJK UNIFIED IDEOGRAPH + {0xD751, 0x8122}, //8026 #CJK UNIFIED IDEOGRAPH + {0xD752, 0x8211}, //8027 #CJK UNIFIED IDEOGRAPH + {0xD753, 0x8238}, //8028 #CJK UNIFIED IDEOGRAPH + {0xD754, 0x8233}, //8029 #CJK UNIFIED IDEOGRAPH + {0xD755, 0x823A}, //8030 #CJK UNIFIED IDEOGRAPH + {0xD756, 0x8234}, //8031 #CJK UNIFIED IDEOGRAPH + {0xD757, 0x8232}, //8032 #CJK UNIFIED IDEOGRAPH + {0xD758, 0x8274}, //8033 #CJK UNIFIED IDEOGRAPH + {0xD759, 0x8390}, //8034 #CJK UNIFIED IDEOGRAPH + {0xD75A, 0x83A3}, //8035 #CJK UNIFIED IDEOGRAPH + {0xD75B, 0x83A8}, //8036 #CJK UNIFIED IDEOGRAPH + {0xD75C, 0x838D}, //8037 #CJK UNIFIED IDEOGRAPH + {0xD75D, 0x837A}, //8038 #CJK UNIFIED IDEOGRAPH + {0xD75E, 0x8373}, //8039 #CJK UNIFIED IDEOGRAPH + {0xD75F, 0x83A4}, //8040 #CJK UNIFIED IDEOGRAPH + {0xD760, 0x8374}, //8041 #CJK UNIFIED IDEOGRAPH + {0xD761, 0x838F}, //8042 #CJK UNIFIED IDEOGRAPH + {0xD762, 0x8381}, //8043 #CJK UNIFIED IDEOGRAPH + {0xD763, 0x8395}, //8044 #CJK UNIFIED IDEOGRAPH + {0xD764, 0x8399}, //8045 #CJK UNIFIED IDEOGRAPH + {0xD765, 0x8375}, //8046 #CJK UNIFIED IDEOGRAPH + {0xD766, 0x8394}, //8047 #CJK UNIFIED IDEOGRAPH + {0xD767, 0x83A9}, //8048 #CJK UNIFIED IDEOGRAPH + {0xD768, 0x837D}, //8049 #CJK UNIFIED IDEOGRAPH + {0xD769, 0x8383}, //8050 #CJK UNIFIED IDEOGRAPH + {0xD76A, 0x838C}, //8051 #CJK UNIFIED IDEOGRAPH + {0xD76B, 0x839D}, //8052 #CJK UNIFIED IDEOGRAPH + {0xD76C, 0x839B}, //8053 #CJK UNIFIED IDEOGRAPH + {0xD76D, 0x83AA}, //8054 #CJK UNIFIED IDEOGRAPH + {0xD76E, 0x838B}, //8055 #CJK UNIFIED IDEOGRAPH + {0xD76F, 0x837E}, //8056 #CJK UNIFIED IDEOGRAPH + {0xD770, 0x83A5}, //8057 #CJK UNIFIED IDEOGRAPH + {0xD771, 0x83AF}, //8058 #CJK UNIFIED IDEOGRAPH + {0xD772, 0x8388}, //8059 #CJK UNIFIED IDEOGRAPH + {0xD773, 0x8397}, //8060 #CJK UNIFIED IDEOGRAPH + {0xD774, 0x83B0}, //8061 #CJK UNIFIED IDEOGRAPH + {0xD775, 0x837F}, //8062 #CJK UNIFIED IDEOGRAPH + {0xD776, 0x83A6}, //8063 #CJK UNIFIED IDEOGRAPH + {0xD777, 0x8387}, //8064 #CJK UNIFIED IDEOGRAPH + {0xD778, 0x83AE}, //8065 #CJK UNIFIED IDEOGRAPH + {0xD779, 0x8376}, //8066 #CJK UNIFIED IDEOGRAPH + {0xD77A, 0x839A}, //8067 #CJK UNIFIED IDEOGRAPH + {0xD77B, 0x8659}, //8068 #CJK UNIFIED IDEOGRAPH + {0xD77C, 0x8656}, //8069 #CJK UNIFIED IDEOGRAPH + {0xD77D, 0x86BF}, //8070 #CJK UNIFIED IDEOGRAPH + {0xD77E, 0x86B7}, //8071 #CJK UNIFIED IDEOGRAPH + {0xD7A1, 0x86C2}, //8072 #CJK UNIFIED IDEOGRAPH + {0xD7A2, 0x86C1}, //8073 #CJK UNIFIED IDEOGRAPH + {0xD7A3, 0x86C5}, //8074 #CJK UNIFIED IDEOGRAPH + {0xD7A4, 0x86BA}, //8075 #CJK UNIFIED IDEOGRAPH + {0xD7A5, 0x86B0}, //8076 #CJK UNIFIED IDEOGRAPH + {0xD7A6, 0x86C8}, //8077 #CJK UNIFIED IDEOGRAPH + {0xD7A7, 0x86B9}, //8078 #CJK UNIFIED IDEOGRAPH + {0xD7A8, 0x86B3}, //8079 #CJK UNIFIED IDEOGRAPH + {0xD7A9, 0x86B8}, //8080 #CJK UNIFIED IDEOGRAPH + {0xD7AA, 0x86CC}, //8081 #CJK UNIFIED IDEOGRAPH + {0xD7AB, 0x86B4}, //8082 #CJK UNIFIED IDEOGRAPH + {0xD7AC, 0x86BB}, //8083 #CJK UNIFIED IDEOGRAPH + {0xD7AD, 0x86BC}, //8084 #CJK UNIFIED IDEOGRAPH + {0xD7AE, 0x86C3}, //8085 #CJK UNIFIED IDEOGRAPH + {0xD7AF, 0x86BD}, //8086 #CJK UNIFIED IDEOGRAPH + {0xD7B0, 0x86BE}, //8087 #CJK UNIFIED IDEOGRAPH + {0xD7B1, 0x8852}, //8088 #CJK UNIFIED IDEOGRAPH + {0xD7B2, 0x8889}, //8089 #CJK UNIFIED IDEOGRAPH + {0xD7B3, 0x8895}, //8090 #CJK UNIFIED IDEOGRAPH + {0xD7B4, 0x88A8}, //8091 #CJK UNIFIED IDEOGRAPH + {0xD7B5, 0x88A2}, //8092 #CJK UNIFIED IDEOGRAPH + {0xD7B6, 0x88AA}, //8093 #CJK UNIFIED IDEOGRAPH + {0xD7B7, 0x889A}, //8094 #CJK UNIFIED IDEOGRAPH + {0xD7B8, 0x8891}, //8095 #CJK UNIFIED IDEOGRAPH + {0xD7B9, 0x88A1}, //8096 #CJK UNIFIED IDEOGRAPH + {0xD7BA, 0x889F}, //8097 #CJK UNIFIED IDEOGRAPH + {0xD7BB, 0x8898}, //8098 #CJK UNIFIED IDEOGRAPH + {0xD7BC, 0x88A7}, //8099 #CJK UNIFIED IDEOGRAPH + {0xD7BD, 0x8899}, //8100 #CJK UNIFIED IDEOGRAPH + {0xD7BE, 0x889B}, //8101 #CJK UNIFIED IDEOGRAPH + {0xD7BF, 0x8897}, //8102 #CJK UNIFIED IDEOGRAPH + {0xD7C0, 0x88A4}, //8103 #CJK UNIFIED IDEOGRAPH + {0xD7C1, 0x88AC}, //8104 #CJK UNIFIED IDEOGRAPH + {0xD7C2, 0x888C}, //8105 #CJK UNIFIED IDEOGRAPH + {0xD7C3, 0x8893}, //8106 #CJK UNIFIED IDEOGRAPH + {0xD7C4, 0x888E}, //8107 #CJK UNIFIED IDEOGRAPH + {0xD7C5, 0x8982}, //8108 #CJK UNIFIED IDEOGRAPH + {0xD7C6, 0x89D6}, //8109 #CJK UNIFIED IDEOGRAPH + {0xD7C7, 0x89D9}, //8110 #CJK UNIFIED IDEOGRAPH + {0xD7C8, 0x89D5}, //8111 #CJK UNIFIED IDEOGRAPH + {0xD7C9, 0x8A30}, //8112 #CJK UNIFIED IDEOGRAPH + {0xD7CA, 0x8A27}, //8113 #CJK UNIFIED IDEOGRAPH + {0xD7CB, 0x8A2C}, //8114 #CJK UNIFIED IDEOGRAPH + {0xD7CC, 0x8A1E}, //8115 #CJK UNIFIED IDEOGRAPH + {0xD7CD, 0x8C39}, //8116 #CJK UNIFIED IDEOGRAPH + {0xD7CE, 0x8C3B}, //8117 #CJK UNIFIED IDEOGRAPH + {0xD7CF, 0x8C5C}, //8118 #CJK UNIFIED IDEOGRAPH + {0xD7D0, 0x8C5D}, //8119 #CJK UNIFIED IDEOGRAPH + {0xD7D1, 0x8C7D}, //8120 #CJK UNIFIED IDEOGRAPH + {0xD7D2, 0x8CA5}, //8121 #CJK UNIFIED IDEOGRAPH + {0xD7D3, 0x8D7D}, //8122 #CJK UNIFIED IDEOGRAPH + {0xD7D4, 0x8D7B}, //8123 #CJK UNIFIED IDEOGRAPH + {0xD7D5, 0x8D79}, //8124 #CJK UNIFIED IDEOGRAPH + {0xD7D6, 0x8DBC}, //8125 #CJK UNIFIED IDEOGRAPH + {0xD7D7, 0x8DC2}, //8126 #CJK UNIFIED IDEOGRAPH + {0xD7D8, 0x8DB9}, //8127 #CJK UNIFIED IDEOGRAPH + {0xD7D9, 0x8DBF}, //8128 #CJK UNIFIED IDEOGRAPH + {0xD7DA, 0x8DC1}, //8129 #CJK UNIFIED IDEOGRAPH + {0xD7DB, 0x8ED8}, //8130 #CJK UNIFIED IDEOGRAPH + {0xD7DC, 0x8EDE}, //8131 #CJK UNIFIED IDEOGRAPH + {0xD7DD, 0x8EDD}, //8132 #CJK UNIFIED IDEOGRAPH + {0xD7DE, 0x8EDC}, //8133 #CJK UNIFIED IDEOGRAPH + {0xD7DF, 0x8ED7}, //8134 #CJK UNIFIED IDEOGRAPH + {0xD7E0, 0x8EE0}, //8135 #CJK UNIFIED IDEOGRAPH + {0xD7E1, 0x8EE1}, //8136 #CJK UNIFIED IDEOGRAPH + {0xD7E2, 0x9024}, //8137 #CJK UNIFIED IDEOGRAPH + {0xD7E3, 0x900B}, //8138 #CJK UNIFIED IDEOGRAPH + {0xD7E4, 0x9011}, //8139 #CJK UNIFIED IDEOGRAPH + {0xD7E5, 0x901C}, //8140 #CJK UNIFIED IDEOGRAPH + {0xD7E6, 0x900C}, //8141 #CJK UNIFIED IDEOGRAPH + {0xD7E7, 0x9021}, //8142 #CJK UNIFIED IDEOGRAPH + {0xD7E8, 0x90EF}, //8143 #CJK UNIFIED IDEOGRAPH + {0xD7E9, 0x90EA}, //8144 #CJK UNIFIED IDEOGRAPH + {0xD7EA, 0x90F0}, //8145 #CJK UNIFIED IDEOGRAPH + {0xD7EB, 0x90F4}, //8146 #CJK UNIFIED IDEOGRAPH + {0xD7EC, 0x90F2}, //8147 #CJK UNIFIED IDEOGRAPH + {0xD7ED, 0x90F3}, //8148 #CJK UNIFIED IDEOGRAPH + {0xD7EE, 0x90D4}, //8149 #CJK UNIFIED IDEOGRAPH + {0xD7EF, 0x90EB}, //8150 #CJK UNIFIED IDEOGRAPH + {0xD7F0, 0x90EC}, //8151 #CJK UNIFIED IDEOGRAPH + {0xD7F1, 0x90E9}, //8152 #CJK UNIFIED IDEOGRAPH + {0xD7F2, 0x9156}, //8153 #CJK UNIFIED IDEOGRAPH + {0xD7F3, 0x9158}, //8154 #CJK UNIFIED IDEOGRAPH + {0xD7F4, 0x915A}, //8155 #CJK UNIFIED IDEOGRAPH + {0xD7F5, 0x9153}, //8156 #CJK UNIFIED IDEOGRAPH + {0xD7F6, 0x9155}, //8157 #CJK UNIFIED IDEOGRAPH + {0xD7F7, 0x91EC}, //8158 #CJK UNIFIED IDEOGRAPH + {0xD7F8, 0x91F4}, //8159 #CJK UNIFIED IDEOGRAPH + {0xD7F9, 0x91F1}, //8160 #CJK UNIFIED IDEOGRAPH + {0xD7FA, 0x91F3}, //8161 #CJK UNIFIED IDEOGRAPH + {0xD7FB, 0x91F8}, //8162 #CJK UNIFIED IDEOGRAPH + {0xD7FC, 0x91E4}, //8163 #CJK UNIFIED IDEOGRAPH + {0xD7FD, 0x91F9}, //8164 #CJK UNIFIED IDEOGRAPH + {0xD7FE, 0x91EA}, //8165 #CJK UNIFIED IDEOGRAPH + {0xD840, 0x91EB}, //8166 #CJK UNIFIED IDEOGRAPH + {0xD841, 0x91F7}, //8167 #CJK UNIFIED IDEOGRAPH + {0xD842, 0x91E8}, //8168 #CJK UNIFIED IDEOGRAPH + {0xD843, 0x91EE}, //8169 #CJK UNIFIED IDEOGRAPH + {0xD844, 0x957A}, //8170 #CJK UNIFIED IDEOGRAPH + {0xD845, 0x9586}, //8171 #CJK UNIFIED IDEOGRAPH + {0xD846, 0x9588}, //8172 #CJK UNIFIED IDEOGRAPH + {0xD847, 0x967C}, //8173 #CJK UNIFIED IDEOGRAPH + {0xD848, 0x966D}, //8174 #CJK UNIFIED IDEOGRAPH + {0xD849, 0x966B}, //8175 #CJK UNIFIED IDEOGRAPH + {0xD84A, 0x9671}, //8176 #CJK UNIFIED IDEOGRAPH + {0xD84B, 0x966F}, //8177 #CJK UNIFIED IDEOGRAPH + {0xD84C, 0x96BF}, //8178 #CJK UNIFIED IDEOGRAPH + {0xD84D, 0x976A}, //8179 #CJK UNIFIED IDEOGRAPH + {0xD84E, 0x9804}, //8180 #CJK UNIFIED IDEOGRAPH + {0xD84F, 0x98E5}, //8181 #CJK UNIFIED IDEOGRAPH + {0xD850, 0x9997}, //8182 #CJK UNIFIED IDEOGRAPH + {0xD851, 0x509B}, //8183 #CJK UNIFIED IDEOGRAPH + {0xD852, 0x5095}, //8184 #CJK UNIFIED IDEOGRAPH + {0xD853, 0x5094}, //8185 #CJK UNIFIED IDEOGRAPH + {0xD854, 0x509E}, //8186 #CJK UNIFIED IDEOGRAPH + {0xD855, 0x508B}, //8187 #CJK UNIFIED IDEOGRAPH + {0xD856, 0x50A3}, //8188 #CJK UNIFIED IDEOGRAPH + {0xD857, 0x5083}, //8189 #CJK UNIFIED IDEOGRAPH + {0xD858, 0x508C}, //8190 #CJK UNIFIED IDEOGRAPH + {0xD859, 0x508E}, //8191 #CJK UNIFIED IDEOGRAPH + {0xD85A, 0x509D}, //8192 #CJK UNIFIED IDEOGRAPH + {0xD85B, 0x5068}, //8193 #CJK UNIFIED IDEOGRAPH + {0xD85C, 0x509C}, //8194 #CJK UNIFIED IDEOGRAPH + {0xD85D, 0x5092}, //8195 #CJK UNIFIED IDEOGRAPH + {0xD85E, 0x5082}, //8196 #CJK UNIFIED IDEOGRAPH + {0xD85F, 0x5087}, //8197 #CJK UNIFIED IDEOGRAPH + {0xD860, 0x515F}, //8198 #CJK UNIFIED IDEOGRAPH + {0xD861, 0x51D4}, //8199 #CJK UNIFIED IDEOGRAPH + {0xD862, 0x5312}, //8200 #CJK UNIFIED IDEOGRAPH + {0xD863, 0x5311}, //8201 #CJK UNIFIED IDEOGRAPH + {0xD864, 0x53A4}, //8202 #CJK UNIFIED IDEOGRAPH + {0xD865, 0x53A7}, //8203 #CJK UNIFIED IDEOGRAPH + {0xD866, 0x5591}, //8204 #CJK UNIFIED IDEOGRAPH + {0xD867, 0x55A8}, //8205 #CJK UNIFIED IDEOGRAPH + {0xD868, 0x55A5}, //8206 #CJK UNIFIED IDEOGRAPH + {0xD869, 0x55AD}, //8207 #CJK UNIFIED IDEOGRAPH + {0xD86A, 0x5577}, //8208 #CJK UNIFIED IDEOGRAPH + {0xD86B, 0x5645}, //8209 #CJK UNIFIED IDEOGRAPH + {0xD86C, 0x55A2}, //8210 #CJK UNIFIED IDEOGRAPH + {0xD86D, 0x5593}, //8211 #CJK UNIFIED IDEOGRAPH + {0xD86E, 0x5588}, //8212 #CJK UNIFIED IDEOGRAPH + {0xD86F, 0x558F}, //8213 #CJK UNIFIED IDEOGRAPH + {0xD870, 0x55B5}, //8214 #CJK UNIFIED IDEOGRAPH + {0xD871, 0x5581}, //8215 #CJK UNIFIED IDEOGRAPH + {0xD872, 0x55A3}, //8216 #CJK UNIFIED IDEOGRAPH + {0xD873, 0x5592}, //8217 #CJK UNIFIED IDEOGRAPH + {0xD874, 0x55A4}, //8218 #CJK UNIFIED IDEOGRAPH + {0xD875, 0x557D}, //8219 #CJK UNIFIED IDEOGRAPH + {0xD876, 0x558C}, //8220 #CJK UNIFIED IDEOGRAPH + {0xD877, 0x55A6}, //8221 #CJK UNIFIED IDEOGRAPH + {0xD878, 0x557F}, //8222 #CJK UNIFIED IDEOGRAPH + {0xD879, 0x5595}, //8223 #CJK UNIFIED IDEOGRAPH + {0xD87A, 0x55A1}, //8224 #CJK UNIFIED IDEOGRAPH + {0xD87B, 0x558E}, //8225 #CJK UNIFIED IDEOGRAPH + {0xD87C, 0x570C}, //8226 #CJK UNIFIED IDEOGRAPH + {0xD87D, 0x5829}, //8227 #CJK UNIFIED IDEOGRAPH + {0xD87E, 0x5837}, //8228 #CJK UNIFIED IDEOGRAPH + {0xD8A1, 0x5819}, //8229 #CJK UNIFIED IDEOGRAPH + {0xD8A2, 0x581E}, //8230 #CJK UNIFIED IDEOGRAPH + {0xD8A3, 0x5827}, //8231 #CJK UNIFIED IDEOGRAPH + {0xD8A4, 0x5823}, //8232 #CJK UNIFIED IDEOGRAPH + {0xD8A5, 0x5828}, //8233 #CJK UNIFIED IDEOGRAPH + {0xD8A6, 0x57F5}, //8234 #CJK UNIFIED IDEOGRAPH + {0xD8A7, 0x5848}, //8235 #CJK UNIFIED IDEOGRAPH + {0xD8A8, 0x5825}, //8236 #CJK UNIFIED IDEOGRAPH + {0xD8A9, 0x581C}, //8237 #CJK UNIFIED IDEOGRAPH + {0xD8AA, 0x581B}, //8238 #CJK UNIFIED IDEOGRAPH + {0xD8AB, 0x5833}, //8239 #CJK UNIFIED IDEOGRAPH + {0xD8AC, 0x583F}, //8240 #CJK UNIFIED IDEOGRAPH + {0xD8AD, 0x5836}, //8241 #CJK UNIFIED IDEOGRAPH + {0xD8AE, 0x582E}, //8242 #CJK UNIFIED IDEOGRAPH + {0xD8AF, 0x5839}, //8243 #CJK UNIFIED IDEOGRAPH + {0xD8B0, 0x5838}, //8244 #CJK UNIFIED IDEOGRAPH + {0xD8B1, 0x582D}, //8245 #CJK UNIFIED IDEOGRAPH + {0xD8B2, 0x582C}, //8246 #CJK UNIFIED IDEOGRAPH + {0xD8B3, 0x583B}, //8247 #CJK UNIFIED IDEOGRAPH + {0xD8B4, 0x5961}, //8248 #CJK UNIFIED IDEOGRAPH + {0xD8B5, 0x5AAF}, //8249 #CJK UNIFIED IDEOGRAPH + {0xD8B6, 0x5A94}, //8250 #CJK UNIFIED IDEOGRAPH + {0xD8B7, 0x5A9F}, //8251 #CJK UNIFIED IDEOGRAPH + {0xD8B8, 0x5A7A}, //8252 #CJK UNIFIED IDEOGRAPH + {0xD8B9, 0x5AA2}, //8253 #CJK UNIFIED IDEOGRAPH + {0xD8BA, 0x5A9E}, //8254 #CJK UNIFIED IDEOGRAPH + {0xD8BB, 0x5A78}, //8255 #CJK UNIFIED IDEOGRAPH + {0xD8BC, 0x5AA6}, //8256 #CJK UNIFIED IDEOGRAPH + {0xD8BD, 0x5A7C}, //8257 #CJK UNIFIED IDEOGRAPH + {0xD8BE, 0x5AA5}, //8258 #CJK UNIFIED IDEOGRAPH + {0xD8BF, 0x5AAC}, //8259 #CJK UNIFIED IDEOGRAPH + {0xD8C0, 0x5A95}, //8260 #CJK UNIFIED IDEOGRAPH + {0xD8C1, 0x5AAE}, //8261 #CJK UNIFIED IDEOGRAPH + {0xD8C2, 0x5A37}, //8262 #CJK UNIFIED IDEOGRAPH + {0xD8C3, 0x5A84}, //8263 #CJK UNIFIED IDEOGRAPH + {0xD8C4, 0x5A8A}, //8264 #CJK UNIFIED IDEOGRAPH + {0xD8C5, 0x5A97}, //8265 #CJK UNIFIED IDEOGRAPH + {0xD8C6, 0x5A83}, //8266 #CJK UNIFIED IDEOGRAPH + {0xD8C7, 0x5A8B}, //8267 #CJK UNIFIED IDEOGRAPH + {0xD8C8, 0x5AA9}, //8268 #CJK UNIFIED IDEOGRAPH + {0xD8C9, 0x5A7B}, //8269 #CJK UNIFIED IDEOGRAPH + {0xD8CA, 0x5A7D}, //8270 #CJK UNIFIED IDEOGRAPH + {0xD8CB, 0x5A8C}, //8271 #CJK UNIFIED IDEOGRAPH + {0xD8CC, 0x5A9C}, //8272 #CJK UNIFIED IDEOGRAPH + {0xD8CD, 0x5A8F}, //8273 #CJK UNIFIED IDEOGRAPH + {0xD8CE, 0x5A93}, //8274 #CJK UNIFIED IDEOGRAPH + {0xD8CF, 0x5A9D}, //8275 #CJK UNIFIED IDEOGRAPH + {0xD8D0, 0x5BEA}, //8276 #CJK UNIFIED IDEOGRAPH + {0xD8D1, 0x5BCD}, //8277 #CJK UNIFIED IDEOGRAPH + {0xD8D2, 0x5BCB}, //8278 #CJK UNIFIED IDEOGRAPH + {0xD8D3, 0x5BD4}, //8279 #CJK UNIFIED IDEOGRAPH + {0xD8D4, 0x5BD1}, //8280 #CJK UNIFIED IDEOGRAPH + {0xD8D5, 0x5BCA}, //8281 #CJK UNIFIED IDEOGRAPH + {0xD8D6, 0x5BCE}, //8282 #CJK UNIFIED IDEOGRAPH + {0xD8D7, 0x5C0C}, //8283 #CJK UNIFIED IDEOGRAPH + {0xD8D8, 0x5C30}, //8284 #CJK UNIFIED IDEOGRAPH + {0xD8D9, 0x5D37}, //8285 #CJK UNIFIED IDEOGRAPH + {0xD8DA, 0x5D43}, //8286 #CJK UNIFIED IDEOGRAPH + {0xD8DB, 0x5D6B}, //8287 #CJK UNIFIED IDEOGRAPH + {0xD8DC, 0x5D41}, //8288 #CJK UNIFIED IDEOGRAPH + {0xD8DD, 0x5D4B}, //8289 #CJK UNIFIED IDEOGRAPH + {0xD8DE, 0x5D3F}, //8290 #CJK UNIFIED IDEOGRAPH + {0xD8DF, 0x5D35}, //8291 #CJK UNIFIED IDEOGRAPH + {0xD8E0, 0x5D51}, //8292 #CJK UNIFIED IDEOGRAPH + {0xD8E1, 0x5D4E}, //8293 #CJK UNIFIED IDEOGRAPH + {0xD8E2, 0x5D55}, //8294 #CJK UNIFIED IDEOGRAPH + {0xD8E3, 0x5D33}, //8295 #CJK UNIFIED IDEOGRAPH + {0xD8E4, 0x5D3A}, //8296 #CJK UNIFIED IDEOGRAPH + {0xD8E5, 0x5D52}, //8297 #CJK UNIFIED IDEOGRAPH + {0xD8E6, 0x5D3D}, //8298 #CJK UNIFIED IDEOGRAPH + {0xD8E7, 0x5D31}, //8299 #CJK UNIFIED IDEOGRAPH + {0xD8E8, 0x5D59}, //8300 #CJK UNIFIED IDEOGRAPH + {0xD8E9, 0x5D42}, //8301 #CJK UNIFIED IDEOGRAPH + {0xD8EA, 0x5D39}, //8302 #CJK UNIFIED IDEOGRAPH + {0xD8EB, 0x5D49}, //8303 #CJK UNIFIED IDEOGRAPH + {0xD8EC, 0x5D38}, //8304 #CJK UNIFIED IDEOGRAPH + {0xD8ED, 0x5D3C}, //8305 #CJK UNIFIED IDEOGRAPH + {0xD8EE, 0x5D32}, //8306 #CJK UNIFIED IDEOGRAPH + {0xD8EF, 0x5D36}, //8307 #CJK UNIFIED IDEOGRAPH + {0xD8F0, 0x5D40}, //8308 #CJK UNIFIED IDEOGRAPH + {0xD8F1, 0x5D45}, //8309 #CJK UNIFIED IDEOGRAPH + {0xD8F2, 0x5E44}, //8310 #CJK UNIFIED IDEOGRAPH + {0xD8F3, 0x5E41}, //8311 #CJK UNIFIED IDEOGRAPH + {0xD8F4, 0x5F58}, //8312 #CJK UNIFIED IDEOGRAPH + {0xD8F5, 0x5FA6}, //8313 #CJK UNIFIED IDEOGRAPH + {0xD8F6, 0x5FA5}, //8314 #CJK UNIFIED IDEOGRAPH + {0xD8F7, 0x5FAB}, //8315 #CJK UNIFIED IDEOGRAPH + {0xD8F8, 0x60C9}, //8316 #CJK UNIFIED IDEOGRAPH + {0xD8F9, 0x60B9}, //8317 #CJK UNIFIED IDEOGRAPH + {0xD8FA, 0x60CC}, //8318 #CJK UNIFIED IDEOGRAPH + {0xD8FB, 0x60E2}, //8319 #CJK UNIFIED IDEOGRAPH + {0xD8FC, 0x60CE}, //8320 #CJK UNIFIED IDEOGRAPH + {0xD8FD, 0x60C4}, //8321 #CJK UNIFIED IDEOGRAPH + {0xD8FE, 0x6114}, //8322 #CJK UNIFIED IDEOGRAPH + {0xD940, 0x60F2}, //8323 #CJK UNIFIED IDEOGRAPH + {0xD941, 0x610A}, //8324 #CJK UNIFIED IDEOGRAPH + {0xD942, 0x6116}, //8325 #CJK UNIFIED IDEOGRAPH + {0xD943, 0x6105}, //8326 #CJK UNIFIED IDEOGRAPH + {0xD944, 0x60F5}, //8327 #CJK UNIFIED IDEOGRAPH + {0xD945, 0x6113}, //8328 #CJK UNIFIED IDEOGRAPH + {0xD946, 0x60F8}, //8329 #CJK UNIFIED IDEOGRAPH + {0xD947, 0x60FC}, //8330 #CJK UNIFIED IDEOGRAPH + {0xD948, 0x60FE}, //8331 #CJK UNIFIED IDEOGRAPH + {0xD949, 0x60C1}, //8332 #CJK UNIFIED IDEOGRAPH + {0xD94A, 0x6103}, //8333 #CJK UNIFIED IDEOGRAPH + {0xD94B, 0x6118}, //8334 #CJK UNIFIED IDEOGRAPH + {0xD94C, 0x611D}, //8335 #CJK UNIFIED IDEOGRAPH + {0xD94D, 0x6110}, //8336 #CJK UNIFIED IDEOGRAPH + {0xD94E, 0x60FF}, //8337 #CJK UNIFIED IDEOGRAPH + {0xD94F, 0x6104}, //8338 #CJK UNIFIED IDEOGRAPH + {0xD950, 0x610B}, //8339 #CJK UNIFIED IDEOGRAPH + {0xD951, 0x624A}, //8340 #CJK UNIFIED IDEOGRAPH + {0xD952, 0x6394}, //8341 #CJK UNIFIED IDEOGRAPH + {0xD953, 0x63B1}, //8342 #CJK UNIFIED IDEOGRAPH + {0xD954, 0x63B0}, //8343 #CJK UNIFIED IDEOGRAPH + {0xD955, 0x63CE}, //8344 #CJK UNIFIED IDEOGRAPH + {0xD956, 0x63E5}, //8345 #CJK UNIFIED IDEOGRAPH + {0xD957, 0x63E8}, //8346 #CJK UNIFIED IDEOGRAPH + {0xD958, 0x63EF}, //8347 #CJK UNIFIED IDEOGRAPH + {0xD959, 0x63C3}, //8348 #CJK UNIFIED IDEOGRAPH + {0xD95A, 0x649D}, //8349 #CJK UNIFIED IDEOGRAPH + {0xD95B, 0x63F3}, //8350 #CJK UNIFIED IDEOGRAPH + {0xD95C, 0x63CA}, //8351 #CJK UNIFIED IDEOGRAPH + {0xD95D, 0x63E0}, //8352 #CJK UNIFIED IDEOGRAPH + {0xD95E, 0x63F6}, //8353 #CJK UNIFIED IDEOGRAPH + {0xD95F, 0x63D5}, //8354 #CJK UNIFIED IDEOGRAPH + {0xD960, 0x63F2}, //8355 #CJK UNIFIED IDEOGRAPH + {0xD961, 0x63F5}, //8356 #CJK UNIFIED IDEOGRAPH + {0xD962, 0x6461}, //8357 #CJK UNIFIED IDEOGRAPH + {0xD963, 0x63DF}, //8358 #CJK UNIFIED IDEOGRAPH + {0xD964, 0x63BE}, //8359 #CJK UNIFIED IDEOGRAPH + {0xD965, 0x63DD}, //8360 #CJK UNIFIED IDEOGRAPH + {0xD966, 0x63DC}, //8361 #CJK UNIFIED IDEOGRAPH + {0xD967, 0x63C4}, //8362 #CJK UNIFIED IDEOGRAPH + {0xD968, 0x63D8}, //8363 #CJK UNIFIED IDEOGRAPH + {0xD969, 0x63D3}, //8364 #CJK UNIFIED IDEOGRAPH + {0xD96A, 0x63C2}, //8365 #CJK UNIFIED IDEOGRAPH + {0xD96B, 0x63C7}, //8366 #CJK UNIFIED IDEOGRAPH + {0xD96C, 0x63CC}, //8367 #CJK UNIFIED IDEOGRAPH + {0xD96D, 0x63CB}, //8368 #CJK UNIFIED IDEOGRAPH + {0xD96E, 0x63C8}, //8369 #CJK UNIFIED IDEOGRAPH + {0xD96F, 0x63F0}, //8370 #CJK UNIFIED IDEOGRAPH + {0xD970, 0x63D7}, //8371 #CJK UNIFIED IDEOGRAPH + {0xD971, 0x63D9}, //8372 #CJK UNIFIED IDEOGRAPH + {0xD972, 0x6532}, //8373 #CJK UNIFIED IDEOGRAPH + {0xD973, 0x6567}, //8374 #CJK UNIFIED IDEOGRAPH + {0xD974, 0x656A}, //8375 #CJK UNIFIED IDEOGRAPH + {0xD975, 0x6564}, //8376 #CJK UNIFIED IDEOGRAPH + {0xD976, 0x655C}, //8377 #CJK UNIFIED IDEOGRAPH + {0xD977, 0x6568}, //8378 #CJK UNIFIED IDEOGRAPH + {0xD978, 0x6565}, //8379 #CJK UNIFIED IDEOGRAPH + {0xD979, 0x658C}, //8380 #CJK UNIFIED IDEOGRAPH + {0xD97A, 0x659D}, //8381 #CJK UNIFIED IDEOGRAPH + {0xD97B, 0x659E}, //8382 #CJK UNIFIED IDEOGRAPH + {0xD97C, 0x65AE}, //8383 #CJK UNIFIED IDEOGRAPH + {0xD97D, 0x65D0}, //8384 #CJK UNIFIED IDEOGRAPH + {0xD97E, 0x65D2}, //8385 #CJK UNIFIED IDEOGRAPH + {0xD9A1, 0x667C}, //8386 #CJK UNIFIED IDEOGRAPH + {0xD9A2, 0x666C}, //8387 #CJK UNIFIED IDEOGRAPH + {0xD9A3, 0x667B}, //8388 #CJK UNIFIED IDEOGRAPH + {0xD9A4, 0x6680}, //8389 #CJK UNIFIED IDEOGRAPH + {0xD9A5, 0x6671}, //8390 #CJK UNIFIED IDEOGRAPH + {0xD9A6, 0x6679}, //8391 #CJK UNIFIED IDEOGRAPH + {0xD9A7, 0x666A}, //8392 #CJK UNIFIED IDEOGRAPH + {0xD9A8, 0x6672}, //8393 #CJK UNIFIED IDEOGRAPH + {0xD9A9, 0x6701}, //8394 #CJK UNIFIED IDEOGRAPH + {0xD9AA, 0x690C}, //8395 #CJK UNIFIED IDEOGRAPH + {0xD9AB, 0x68D3}, //8396 #CJK UNIFIED IDEOGRAPH + {0xD9AC, 0x6904}, //8397 #CJK UNIFIED IDEOGRAPH + {0xD9AD, 0x68DC}, //8398 #CJK UNIFIED IDEOGRAPH + {0xD9AE, 0x692A}, //8399 #CJK UNIFIED IDEOGRAPH + {0xD9AF, 0x68EC}, //8400 #CJK UNIFIED IDEOGRAPH + {0xD9B0, 0x68EA}, //8401 #CJK UNIFIED IDEOGRAPH + {0xD9B1, 0x68F1}, //8402 #CJK UNIFIED IDEOGRAPH + {0xD9B2, 0x690F}, //8403 #CJK UNIFIED IDEOGRAPH + {0xD9B3, 0x68D6}, //8404 #CJK UNIFIED IDEOGRAPH + {0xD9B4, 0x68F7}, //8405 #CJK UNIFIED IDEOGRAPH + {0xD9B5, 0x68EB}, //8406 #CJK UNIFIED IDEOGRAPH + {0xD9B6, 0x68E4}, //8407 #CJK UNIFIED IDEOGRAPH + {0xD9B7, 0x68F6}, //8408 #CJK UNIFIED IDEOGRAPH + {0xD9B8, 0x6913}, //8409 #CJK UNIFIED IDEOGRAPH + {0xD9B9, 0x6910}, //8410 #CJK UNIFIED IDEOGRAPH + {0xD9BA, 0x68F3}, //8411 #CJK UNIFIED IDEOGRAPH + {0xD9BB, 0x68E1}, //8412 #CJK UNIFIED IDEOGRAPH + {0xD9BC, 0x6907}, //8413 #CJK UNIFIED IDEOGRAPH + {0xD9BD, 0x68CC}, //8414 #CJK UNIFIED IDEOGRAPH + {0xD9BE, 0x6908}, //8415 #CJK UNIFIED IDEOGRAPH + {0xD9BF, 0x6970}, //8416 #CJK UNIFIED IDEOGRAPH + {0xD9C0, 0x68B4}, //8417 #CJK UNIFIED IDEOGRAPH + {0xD9C1, 0x6911}, //8418 #CJK UNIFIED IDEOGRAPH + {0xD9C2, 0x68EF}, //8419 #CJK UNIFIED IDEOGRAPH + {0xD9C3, 0x68C6}, //8420 #CJK UNIFIED IDEOGRAPH + {0xD9C4, 0x6914}, //8421 #CJK UNIFIED IDEOGRAPH + {0xD9C5, 0x68F8}, //8422 #CJK UNIFIED IDEOGRAPH + {0xD9C6, 0x68D0}, //8423 #CJK UNIFIED IDEOGRAPH + {0xD9C7, 0x68FD}, //8424 #CJK UNIFIED IDEOGRAPH + {0xD9C8, 0x68FC}, //8425 #CJK UNIFIED IDEOGRAPH + {0xD9C9, 0x68E8}, //8426 #CJK UNIFIED IDEOGRAPH + {0xD9CA, 0x690B}, //8427 #CJK UNIFIED IDEOGRAPH + {0xD9CB, 0x690A}, //8428 #CJK UNIFIED IDEOGRAPH + {0xD9CC, 0x6917}, //8429 #CJK UNIFIED IDEOGRAPH + {0xD9CD, 0x68CE}, //8430 #CJK UNIFIED IDEOGRAPH + {0xD9CE, 0x68C8}, //8431 #CJK UNIFIED IDEOGRAPH + {0xD9CF, 0x68DD}, //8432 #CJK UNIFIED IDEOGRAPH + {0xD9D0, 0x68DE}, //8433 #CJK UNIFIED IDEOGRAPH + {0xD9D1, 0x68E6}, //8434 #CJK UNIFIED IDEOGRAPH + {0xD9D2, 0x68F4}, //8435 #CJK UNIFIED IDEOGRAPH + {0xD9D3, 0x68D1}, //8436 #CJK UNIFIED IDEOGRAPH + {0xD9D4, 0x6906}, //8437 #CJK UNIFIED IDEOGRAPH + {0xD9D5, 0x68D4}, //8438 #CJK UNIFIED IDEOGRAPH + {0xD9D6, 0x68E9}, //8439 #CJK UNIFIED IDEOGRAPH + {0xD9D7, 0x6915}, //8440 #CJK UNIFIED IDEOGRAPH + {0xD9D8, 0x6925}, //8441 #CJK UNIFIED IDEOGRAPH + {0xD9D9, 0x68C7}, //8442 #CJK UNIFIED IDEOGRAPH + {0xD9DA, 0x6B39}, //8443 #CJK UNIFIED IDEOGRAPH + {0xD9DB, 0x6B3B}, //8444 #CJK UNIFIED IDEOGRAPH + {0xD9DC, 0x6B3F}, //8445 #CJK UNIFIED IDEOGRAPH + {0xD9DD, 0x6B3C}, //8446 #CJK UNIFIED IDEOGRAPH + {0xD9DE, 0x6B94}, //8447 #CJK UNIFIED IDEOGRAPH + {0xD9DF, 0x6B97}, //8448 #CJK UNIFIED IDEOGRAPH + {0xD9E0, 0x6B99}, //8449 #CJK UNIFIED IDEOGRAPH + {0xD9E1, 0x6B95}, //8450 #CJK UNIFIED IDEOGRAPH + {0xD9E2, 0x6BBD}, //8451 #CJK UNIFIED IDEOGRAPH + {0xD9E3, 0x6BF0}, //8452 #CJK UNIFIED IDEOGRAPH + {0xD9E4, 0x6BF2}, //8453 #CJK UNIFIED IDEOGRAPH + {0xD9E5, 0x6BF3}, //8454 #CJK UNIFIED IDEOGRAPH + {0xD9E6, 0x6C30}, //8455 #CJK UNIFIED IDEOGRAPH + {0xD9E7, 0x6DFC}, //8456 #CJK UNIFIED IDEOGRAPH + {0xD9E8, 0x6E46}, //8457 #CJK UNIFIED IDEOGRAPH + {0xD9E9, 0x6E47}, //8458 #CJK UNIFIED IDEOGRAPH + {0xD9EA, 0x6E1F}, //8459 #CJK UNIFIED IDEOGRAPH + {0xD9EB, 0x6E49}, //8460 #CJK UNIFIED IDEOGRAPH + {0xD9EC, 0x6E88}, //8461 #CJK UNIFIED IDEOGRAPH + {0xD9ED, 0x6E3C}, //8462 #CJK UNIFIED IDEOGRAPH + {0xD9EE, 0x6E3D}, //8463 #CJK UNIFIED IDEOGRAPH + {0xD9EF, 0x6E45}, //8464 #CJK UNIFIED IDEOGRAPH + {0xD9F0, 0x6E62}, //8465 #CJK UNIFIED IDEOGRAPH + {0xD9F1, 0x6E2B}, //8466 #CJK UNIFIED IDEOGRAPH + {0xD9F2, 0x6E3F}, //8467 #CJK UNIFIED IDEOGRAPH + {0xD9F3, 0x6E41}, //8468 #CJK UNIFIED IDEOGRAPH + {0xD9F4, 0x6E5D}, //8469 #CJK UNIFIED IDEOGRAPH + {0xD9F5, 0x6E73}, //8470 #CJK UNIFIED IDEOGRAPH + {0xD9F6, 0x6E1C}, //8471 #CJK UNIFIED IDEOGRAPH + {0xD9F7, 0x6E33}, //8472 #CJK UNIFIED IDEOGRAPH + {0xD9F8, 0x6E4B}, //8473 #CJK UNIFIED IDEOGRAPH + {0xD9F9, 0x6E40}, //8474 #CJK UNIFIED IDEOGRAPH + {0xD9FA, 0x6E51}, //8475 #CJK UNIFIED IDEOGRAPH + {0xD9FB, 0x6E3B}, //8476 #CJK UNIFIED IDEOGRAPH + {0xD9FC, 0x6E03}, //8477 #CJK UNIFIED IDEOGRAPH + {0xD9FD, 0x6E2E}, //8478 #CJK UNIFIED IDEOGRAPH + {0xD9FE, 0x6E5E}, //8479 #CJK UNIFIED IDEOGRAPH + {0xDA40, 0x6E68}, //8480 #CJK UNIFIED IDEOGRAPH + {0xDA41, 0x6E5C}, //8481 #CJK UNIFIED IDEOGRAPH + {0xDA42, 0x6E61}, //8482 #CJK UNIFIED IDEOGRAPH + {0xDA43, 0x6E31}, //8483 #CJK UNIFIED IDEOGRAPH + {0xDA44, 0x6E28}, //8484 #CJK UNIFIED IDEOGRAPH + {0xDA45, 0x6E60}, //8485 #CJK UNIFIED IDEOGRAPH + {0xDA46, 0x6E71}, //8486 #CJK UNIFIED IDEOGRAPH + {0xDA47, 0x6E6B}, //8487 #CJK UNIFIED IDEOGRAPH + {0xDA48, 0x6E39}, //8488 #CJK UNIFIED IDEOGRAPH + {0xDA49, 0x6E22}, //8489 #CJK UNIFIED IDEOGRAPH + {0xDA4A, 0x6E30}, //8490 #CJK UNIFIED IDEOGRAPH + {0xDA4B, 0x6E53}, //8491 #CJK UNIFIED IDEOGRAPH + {0xDA4C, 0x6E65}, //8492 #CJK UNIFIED IDEOGRAPH + {0xDA4D, 0x6E27}, //8493 #CJK UNIFIED IDEOGRAPH + {0xDA4E, 0x6E78}, //8494 #CJK UNIFIED IDEOGRAPH + {0xDA4F, 0x6E64}, //8495 #CJK UNIFIED IDEOGRAPH + {0xDA50, 0x6E77}, //8496 #CJK UNIFIED IDEOGRAPH + {0xDA51, 0x6E55}, //8497 #CJK UNIFIED IDEOGRAPH + {0xDA52, 0x6E79}, //8498 #CJK UNIFIED IDEOGRAPH + {0xDA53, 0x6E52}, //8499 #CJK UNIFIED IDEOGRAPH + {0xDA54, 0x6E66}, //8500 #CJK UNIFIED IDEOGRAPH + {0xDA55, 0x6E35}, //8501 #CJK UNIFIED IDEOGRAPH + {0xDA56, 0x6E36}, //8502 #CJK UNIFIED IDEOGRAPH + {0xDA57, 0x6E5A}, //8503 #CJK UNIFIED IDEOGRAPH + {0xDA58, 0x7120}, //8504 #CJK UNIFIED IDEOGRAPH + {0xDA59, 0x711E}, //8505 #CJK UNIFIED IDEOGRAPH + {0xDA5A, 0x712F}, //8506 #CJK UNIFIED IDEOGRAPH + {0xDA5B, 0x70FB}, //8507 #CJK UNIFIED IDEOGRAPH + {0xDA5C, 0x712E}, //8508 #CJK UNIFIED IDEOGRAPH + {0xDA5D, 0x7131}, //8509 #CJK UNIFIED IDEOGRAPH + {0xDA5E, 0x7123}, //8510 #CJK UNIFIED IDEOGRAPH + {0xDA5F, 0x7125}, //8511 #CJK UNIFIED IDEOGRAPH + {0xDA60, 0x7122}, //8512 #CJK UNIFIED IDEOGRAPH + {0xDA61, 0x7132}, //8513 #CJK UNIFIED IDEOGRAPH + {0xDA62, 0x711F}, //8514 #CJK UNIFIED IDEOGRAPH + {0xDA63, 0x7128}, //8515 #CJK UNIFIED IDEOGRAPH + {0xDA64, 0x713A}, //8516 #CJK UNIFIED IDEOGRAPH + {0xDA65, 0x711B}, //8517 #CJK UNIFIED IDEOGRAPH + {0xDA66, 0x724B}, //8518 #CJK UNIFIED IDEOGRAPH + {0xDA67, 0x725A}, //8519 #CJK UNIFIED IDEOGRAPH + {0xDA68, 0x7288}, //8520 #CJK UNIFIED IDEOGRAPH + {0xDA69, 0x7289}, //8521 #CJK UNIFIED IDEOGRAPH + {0xDA6A, 0x7286}, //8522 #CJK UNIFIED IDEOGRAPH + {0xDA6B, 0x7285}, //8523 #CJK UNIFIED IDEOGRAPH + {0xDA6C, 0x728B}, //8524 #CJK UNIFIED IDEOGRAPH + {0xDA6D, 0x7312}, //8525 #CJK UNIFIED IDEOGRAPH + {0xDA6E, 0x730B}, //8526 #CJK UNIFIED IDEOGRAPH + {0xDA6F, 0x7330}, //8527 #CJK UNIFIED IDEOGRAPH + {0xDA70, 0x7322}, //8528 #CJK UNIFIED IDEOGRAPH + {0xDA71, 0x7331}, //8529 #CJK UNIFIED IDEOGRAPH + {0xDA72, 0x7333}, //8530 #CJK UNIFIED IDEOGRAPH + {0xDA73, 0x7327}, //8531 #CJK UNIFIED IDEOGRAPH + {0xDA74, 0x7332}, //8532 #CJK UNIFIED IDEOGRAPH + {0xDA75, 0x732D}, //8533 #CJK UNIFIED IDEOGRAPH + {0xDA76, 0x7326}, //8534 #CJK UNIFIED IDEOGRAPH + {0xDA77, 0x7323}, //8535 #CJK UNIFIED IDEOGRAPH + {0xDA78, 0x7335}, //8536 #CJK UNIFIED IDEOGRAPH + {0xDA79, 0x730C}, //8537 #CJK UNIFIED IDEOGRAPH + {0xDA7A, 0x742E}, //8538 #CJK UNIFIED IDEOGRAPH + {0xDA7B, 0x742C}, //8539 #CJK UNIFIED IDEOGRAPH + {0xDA7C, 0x7430}, //8540 #CJK UNIFIED IDEOGRAPH + {0xDA7D, 0x742B}, //8541 #CJK UNIFIED IDEOGRAPH + {0xDA7E, 0x7416}, //8542 #CJK UNIFIED IDEOGRAPH + {0xDAA1, 0x741A}, //8543 #CJK UNIFIED IDEOGRAPH + {0xDAA2, 0x7421}, //8544 #CJK UNIFIED IDEOGRAPH + {0xDAA3, 0x742D}, //8545 #CJK UNIFIED IDEOGRAPH + {0xDAA4, 0x7431}, //8546 #CJK UNIFIED IDEOGRAPH + {0xDAA5, 0x7424}, //8547 #CJK UNIFIED IDEOGRAPH + {0xDAA6, 0x7423}, //8548 #CJK UNIFIED IDEOGRAPH + {0xDAA7, 0x741D}, //8549 #CJK UNIFIED IDEOGRAPH + {0xDAA8, 0x7429}, //8550 #CJK UNIFIED IDEOGRAPH + {0xDAA9, 0x7420}, //8551 #CJK UNIFIED IDEOGRAPH + {0xDAAA, 0x7432}, //8552 #CJK UNIFIED IDEOGRAPH + {0xDAAB, 0x74FB}, //8553 #CJK UNIFIED IDEOGRAPH + {0xDAAC, 0x752F}, //8554 #CJK UNIFIED IDEOGRAPH + {0xDAAD, 0x756F}, //8555 #CJK UNIFIED IDEOGRAPH + {0xDAAE, 0x756C}, //8556 #CJK UNIFIED IDEOGRAPH + {0xDAAF, 0x75E7}, //8557 #CJK UNIFIED IDEOGRAPH + {0xDAB0, 0x75DA}, //8558 #CJK UNIFIED IDEOGRAPH + {0xDAB1, 0x75E1}, //8559 #CJK UNIFIED IDEOGRAPH + {0xDAB2, 0x75E6}, //8560 #CJK UNIFIED IDEOGRAPH + {0xDAB3, 0x75DD}, //8561 #CJK UNIFIED IDEOGRAPH + {0xDAB4, 0x75DF}, //8562 #CJK UNIFIED IDEOGRAPH + {0xDAB5, 0x75E4}, //8563 #CJK UNIFIED IDEOGRAPH + {0xDAB6, 0x75D7}, //8564 #CJK UNIFIED IDEOGRAPH + {0xDAB7, 0x7695}, //8565 #CJK UNIFIED IDEOGRAPH + {0xDAB8, 0x7692}, //8566 #CJK UNIFIED IDEOGRAPH + {0xDAB9, 0x76DA}, //8567 #CJK UNIFIED IDEOGRAPH + {0xDABA, 0x7746}, //8568 #CJK UNIFIED IDEOGRAPH + {0xDABB, 0x7747}, //8569 #CJK UNIFIED IDEOGRAPH + {0xDABC, 0x7744}, //8570 #CJK UNIFIED IDEOGRAPH + {0xDABD, 0x774D}, //8571 #CJK UNIFIED IDEOGRAPH + {0xDABE, 0x7745}, //8572 #CJK UNIFIED IDEOGRAPH + {0xDABF, 0x774A}, //8573 #CJK UNIFIED IDEOGRAPH + {0xDAC0, 0x774E}, //8574 #CJK UNIFIED IDEOGRAPH + {0xDAC1, 0x774B}, //8575 #CJK UNIFIED IDEOGRAPH + {0xDAC2, 0x774C}, //8576 #CJK UNIFIED IDEOGRAPH + {0xDAC3, 0x77DE}, //8577 #CJK UNIFIED IDEOGRAPH + {0xDAC4, 0x77EC}, //8578 #CJK UNIFIED IDEOGRAPH + {0xDAC5, 0x7860}, //8579 #CJK UNIFIED IDEOGRAPH + {0xDAC6, 0x7864}, //8580 #CJK UNIFIED IDEOGRAPH + {0xDAC7, 0x7865}, //8581 #CJK UNIFIED IDEOGRAPH + {0xDAC8, 0x785C}, //8582 #CJK UNIFIED IDEOGRAPH + {0xDAC9, 0x786D}, //8583 #CJK UNIFIED IDEOGRAPH + {0xDACA, 0x7871}, //8584 #CJK UNIFIED IDEOGRAPH + {0xDACB, 0x786A}, //8585 #CJK UNIFIED IDEOGRAPH + {0xDACC, 0x786E}, //8586 #CJK UNIFIED IDEOGRAPH + {0xDACD, 0x7870}, //8587 #CJK UNIFIED IDEOGRAPH + {0xDACE, 0x7869}, //8588 #CJK UNIFIED IDEOGRAPH + {0xDACF, 0x7868}, //8589 #CJK UNIFIED IDEOGRAPH + {0xDAD0, 0x785E}, //8590 #CJK UNIFIED IDEOGRAPH + {0xDAD1, 0x7862}, //8591 #CJK UNIFIED IDEOGRAPH + {0xDAD2, 0x7974}, //8592 #CJK UNIFIED IDEOGRAPH + {0xDAD3, 0x7973}, //8593 #CJK UNIFIED IDEOGRAPH + {0xDAD4, 0x7972}, //8594 #CJK UNIFIED IDEOGRAPH + {0xDAD5, 0x7970}, //8595 #CJK UNIFIED IDEOGRAPH + {0xDAD6, 0x7A02}, //8596 #CJK UNIFIED IDEOGRAPH + {0xDAD7, 0x7A0A}, //8597 #CJK UNIFIED IDEOGRAPH + {0xDAD8, 0x7A03}, //8598 #CJK UNIFIED IDEOGRAPH + {0xDAD9, 0x7A0C}, //8599 #CJK UNIFIED IDEOGRAPH + {0xDADA, 0x7A04}, //8600 #CJK UNIFIED IDEOGRAPH + {0xDADB, 0x7A99}, //8601 #CJK UNIFIED IDEOGRAPH + {0xDADC, 0x7AE6}, //8602 #CJK UNIFIED IDEOGRAPH + {0xDADD, 0x7AE4}, //8603 #CJK UNIFIED IDEOGRAPH + {0xDADE, 0x7B4A}, //8604 #CJK UNIFIED IDEOGRAPH + {0xDADF, 0x7B3B}, //8605 #CJK UNIFIED IDEOGRAPH + {0xDAE0, 0x7B44}, //8606 #CJK UNIFIED IDEOGRAPH + {0xDAE1, 0x7B48}, //8607 #CJK UNIFIED IDEOGRAPH + {0xDAE2, 0x7B4C}, //8608 #CJK UNIFIED IDEOGRAPH + {0xDAE3, 0x7B4E}, //8609 #CJK UNIFIED IDEOGRAPH + {0xDAE4, 0x7B40}, //8610 #CJK UNIFIED IDEOGRAPH + {0xDAE5, 0x7B58}, //8611 #CJK UNIFIED IDEOGRAPH + {0xDAE6, 0x7B45}, //8612 #CJK UNIFIED IDEOGRAPH + {0xDAE7, 0x7CA2}, //8613 #CJK UNIFIED IDEOGRAPH + {0xDAE8, 0x7C9E}, //8614 #CJK UNIFIED IDEOGRAPH + {0xDAE9, 0x7CA8}, //8615 #CJK UNIFIED IDEOGRAPH + {0xDAEA, 0x7CA1}, //8616 #CJK UNIFIED IDEOGRAPH + {0xDAEB, 0x7D58}, //8617 #CJK UNIFIED IDEOGRAPH + {0xDAEC, 0x7D6F}, //8618 #CJK UNIFIED IDEOGRAPH + {0xDAED, 0x7D63}, //8619 #CJK UNIFIED IDEOGRAPH + {0xDAEE, 0x7D53}, //8620 #CJK UNIFIED IDEOGRAPH + {0xDAEF, 0x7D56}, //8621 #CJK UNIFIED IDEOGRAPH + {0xDAF0, 0x7D67}, //8622 #CJK UNIFIED IDEOGRAPH + {0xDAF1, 0x7D6A}, //8623 #CJK UNIFIED IDEOGRAPH + {0xDAF2, 0x7D4F}, //8624 #CJK UNIFIED IDEOGRAPH + {0xDAF3, 0x7D6D}, //8625 #CJK UNIFIED IDEOGRAPH + {0xDAF4, 0x7D5C}, //8626 #CJK UNIFIED IDEOGRAPH + {0xDAF5, 0x7D6B}, //8627 #CJK UNIFIED IDEOGRAPH + {0xDAF6, 0x7D52}, //8628 #CJK UNIFIED IDEOGRAPH + {0xDAF7, 0x7D54}, //8629 #CJK UNIFIED IDEOGRAPH + {0xDAF8, 0x7D69}, //8630 #CJK UNIFIED IDEOGRAPH + {0xDAF9, 0x7D51}, //8631 #CJK UNIFIED IDEOGRAPH + {0xDAFA, 0x7D5F}, //8632 #CJK UNIFIED IDEOGRAPH + {0xDAFB, 0x7D4E}, //8633 #CJK UNIFIED IDEOGRAPH + {0xDAFC, 0x7F3E}, //8634 #CJK UNIFIED IDEOGRAPH + {0xDAFD, 0x7F3F}, //8635 #CJK UNIFIED IDEOGRAPH + {0xDAFE, 0x7F65}, //8636 #CJK UNIFIED IDEOGRAPH + {0xDB40, 0x7F66}, //8637 #CJK UNIFIED IDEOGRAPH + {0xDB41, 0x7FA2}, //8638 #CJK UNIFIED IDEOGRAPH + {0xDB42, 0x7FA0}, //8639 #CJK UNIFIED IDEOGRAPH + {0xDB43, 0x7FA1}, //8640 #CJK UNIFIED IDEOGRAPH + {0xDB44, 0x7FD7}, //8641 #CJK UNIFIED IDEOGRAPH + {0xDB45, 0x8051}, //8642 #CJK UNIFIED IDEOGRAPH + {0xDB46, 0x804F}, //8643 #CJK UNIFIED IDEOGRAPH + {0xDB47, 0x8050}, //8644 #CJK UNIFIED IDEOGRAPH + {0xDB48, 0x80FE}, //8645 #CJK UNIFIED IDEOGRAPH + {0xDB49, 0x80D4}, //8646 #CJK UNIFIED IDEOGRAPH + {0xDB4A, 0x8143}, //8647 #CJK UNIFIED IDEOGRAPH + {0xDB4B, 0x814A}, //8648 #CJK UNIFIED IDEOGRAPH + {0xDB4C, 0x8152}, //8649 #CJK UNIFIED IDEOGRAPH + {0xDB4D, 0x814F}, //8650 #CJK UNIFIED IDEOGRAPH + {0xDB4E, 0x8147}, //8651 #CJK UNIFIED IDEOGRAPH + {0xDB4F, 0x813D}, //8652 #CJK UNIFIED IDEOGRAPH + {0xDB50, 0x814D}, //8653 #CJK UNIFIED IDEOGRAPH + {0xDB51, 0x813A}, //8654 #CJK UNIFIED IDEOGRAPH + {0xDB52, 0x81E6}, //8655 #CJK UNIFIED IDEOGRAPH + {0xDB53, 0x81EE}, //8656 #CJK UNIFIED IDEOGRAPH + {0xDB54, 0x81F7}, //8657 #CJK UNIFIED IDEOGRAPH + {0xDB55, 0x81F8}, //8658 #CJK UNIFIED IDEOGRAPH + {0xDB56, 0x81F9}, //8659 #CJK UNIFIED IDEOGRAPH + {0xDB57, 0x8204}, //8660 #CJK UNIFIED IDEOGRAPH + {0xDB58, 0x823C}, //8661 #CJK UNIFIED IDEOGRAPH + {0xDB59, 0x823D}, //8662 #CJK UNIFIED IDEOGRAPH + {0xDB5A, 0x823F}, //8663 #CJK UNIFIED IDEOGRAPH + {0xDB5B, 0x8275}, //8664 #CJK UNIFIED IDEOGRAPH + {0xDB5C, 0x833B}, //8665 #CJK UNIFIED IDEOGRAPH + {0xDB5D, 0x83CF}, //8666 #CJK UNIFIED IDEOGRAPH + {0xDB5E, 0x83F9}, //8667 #CJK UNIFIED IDEOGRAPH + {0xDB5F, 0x8423}, //8668 #CJK UNIFIED IDEOGRAPH + {0xDB60, 0x83C0}, //8669 #CJK UNIFIED IDEOGRAPH + {0xDB61, 0x83E8}, //8670 #CJK UNIFIED IDEOGRAPH + {0xDB62, 0x8412}, //8671 #CJK UNIFIED IDEOGRAPH + {0xDB63, 0x83E7}, //8672 #CJK UNIFIED IDEOGRAPH + {0xDB64, 0x83E4}, //8673 #CJK UNIFIED IDEOGRAPH + {0xDB65, 0x83FC}, //8674 #CJK UNIFIED IDEOGRAPH + {0xDB66, 0x83F6}, //8675 #CJK UNIFIED IDEOGRAPH + {0xDB67, 0x8410}, //8676 #CJK UNIFIED IDEOGRAPH + {0xDB68, 0x83C6}, //8677 #CJK UNIFIED IDEOGRAPH + {0xDB69, 0x83C8}, //8678 #CJK UNIFIED IDEOGRAPH + {0xDB6A, 0x83EB}, //8679 #CJK UNIFIED IDEOGRAPH + {0xDB6B, 0x83E3}, //8680 #CJK UNIFIED IDEOGRAPH + {0xDB6C, 0x83BF}, //8681 #CJK UNIFIED IDEOGRAPH + {0xDB6D, 0x8401}, //8682 #CJK UNIFIED IDEOGRAPH + {0xDB6E, 0x83DD}, //8683 #CJK UNIFIED IDEOGRAPH + {0xDB6F, 0x83E5}, //8684 #CJK UNIFIED IDEOGRAPH + {0xDB70, 0x83D8}, //8685 #CJK UNIFIED IDEOGRAPH + {0xDB71, 0x83FF}, //8686 #CJK UNIFIED IDEOGRAPH + {0xDB72, 0x83E1}, //8687 #CJK UNIFIED IDEOGRAPH + {0xDB73, 0x83CB}, //8688 #CJK UNIFIED IDEOGRAPH + {0xDB74, 0x83CE}, //8689 #CJK UNIFIED IDEOGRAPH + {0xDB75, 0x83D6}, //8690 #CJK UNIFIED IDEOGRAPH + {0xDB76, 0x83F5}, //8691 #CJK UNIFIED IDEOGRAPH + {0xDB77, 0x83C9}, //8692 #CJK UNIFIED IDEOGRAPH + {0xDB78, 0x8409}, //8693 #CJK UNIFIED IDEOGRAPH + {0xDB79, 0x840F}, //8694 #CJK UNIFIED IDEOGRAPH + {0xDB7A, 0x83DE}, //8695 #CJK UNIFIED IDEOGRAPH + {0xDB7B, 0x8411}, //8696 #CJK UNIFIED IDEOGRAPH + {0xDB7C, 0x8406}, //8697 #CJK UNIFIED IDEOGRAPH + {0xDB7D, 0x83C2}, //8698 #CJK UNIFIED IDEOGRAPH + {0xDB7E, 0x83F3}, //8699 #CJK UNIFIED IDEOGRAPH + {0xDBA1, 0x83D5}, //8700 #CJK UNIFIED IDEOGRAPH + {0xDBA2, 0x83FA}, //8701 #CJK UNIFIED IDEOGRAPH + {0xDBA3, 0x83C7}, //8702 #CJK UNIFIED IDEOGRAPH + {0xDBA4, 0x83D1}, //8703 #CJK UNIFIED IDEOGRAPH + {0xDBA5, 0x83EA}, //8704 #CJK UNIFIED IDEOGRAPH + {0xDBA6, 0x8413}, //8705 #CJK UNIFIED IDEOGRAPH + {0xDBA7, 0x83C3}, //8706 #CJK UNIFIED IDEOGRAPH + {0xDBA8, 0x83EC}, //8707 #CJK UNIFIED IDEOGRAPH + {0xDBA9, 0x83EE}, //8708 #CJK UNIFIED IDEOGRAPH + {0xDBAA, 0x83C4}, //8709 #CJK UNIFIED IDEOGRAPH + {0xDBAB, 0x83FB}, //8710 #CJK UNIFIED IDEOGRAPH + {0xDBAC, 0x83D7}, //8711 #CJK UNIFIED IDEOGRAPH + {0xDBAD, 0x83E2}, //8712 #CJK UNIFIED IDEOGRAPH + {0xDBAE, 0x841B}, //8713 #CJK UNIFIED IDEOGRAPH + {0xDBAF, 0x83DB}, //8714 #CJK UNIFIED IDEOGRAPH + {0xDBB0, 0x83FE}, //8715 #CJK UNIFIED IDEOGRAPH + {0xDBB1, 0x86D8}, //8716 #CJK UNIFIED IDEOGRAPH + {0xDBB2, 0x86E2}, //8717 #CJK UNIFIED IDEOGRAPH + {0xDBB3, 0x86E6}, //8718 #CJK UNIFIED IDEOGRAPH + {0xDBB4, 0x86D3}, //8719 #CJK UNIFIED IDEOGRAPH + {0xDBB5, 0x86E3}, //8720 #CJK UNIFIED IDEOGRAPH + {0xDBB6, 0x86DA}, //8721 #CJK UNIFIED IDEOGRAPH + {0xDBB7, 0x86EA}, //8722 #CJK UNIFIED IDEOGRAPH + {0xDBB8, 0x86DD}, //8723 #CJK UNIFIED IDEOGRAPH + {0xDBB9, 0x86EB}, //8724 #CJK UNIFIED IDEOGRAPH + {0xDBBA, 0x86DC}, //8725 #CJK UNIFIED IDEOGRAPH + {0xDBBB, 0x86EC}, //8726 #CJK UNIFIED IDEOGRAPH + {0xDBBC, 0x86E9}, //8727 #CJK UNIFIED IDEOGRAPH + {0xDBBD, 0x86D7}, //8728 #CJK UNIFIED IDEOGRAPH + {0xDBBE, 0x86E8}, //8729 #CJK UNIFIED IDEOGRAPH + {0xDBBF, 0x86D1}, //8730 #CJK UNIFIED IDEOGRAPH + {0xDBC0, 0x8848}, //8731 #CJK UNIFIED IDEOGRAPH + {0xDBC1, 0x8856}, //8732 #CJK UNIFIED IDEOGRAPH + {0xDBC2, 0x8855}, //8733 #CJK UNIFIED IDEOGRAPH + {0xDBC3, 0x88BA}, //8734 #CJK UNIFIED IDEOGRAPH + {0xDBC4, 0x88D7}, //8735 #CJK UNIFIED IDEOGRAPH + {0xDBC5, 0x88B9}, //8736 #CJK UNIFIED IDEOGRAPH + {0xDBC6, 0x88B8}, //8737 #CJK UNIFIED IDEOGRAPH + {0xDBC7, 0x88C0}, //8738 #CJK UNIFIED IDEOGRAPH + {0xDBC8, 0x88BE}, //8739 #CJK UNIFIED IDEOGRAPH + {0xDBC9, 0x88B6}, //8740 #CJK UNIFIED IDEOGRAPH + {0xDBCA, 0x88BC}, //8741 #CJK UNIFIED IDEOGRAPH + {0xDBCB, 0x88B7}, //8742 #CJK UNIFIED IDEOGRAPH + {0xDBCC, 0x88BD}, //8743 #CJK UNIFIED IDEOGRAPH + {0xDBCD, 0x88B2}, //8744 #CJK UNIFIED IDEOGRAPH + {0xDBCE, 0x8901}, //8745 #CJK UNIFIED IDEOGRAPH + {0xDBCF, 0x88C9}, //8746 #CJK UNIFIED IDEOGRAPH + {0xDBD0, 0x8995}, //8747 #CJK UNIFIED IDEOGRAPH + {0xDBD1, 0x8998}, //8748 #CJK UNIFIED IDEOGRAPH + {0xDBD2, 0x8997}, //8749 #CJK UNIFIED IDEOGRAPH + {0xDBD3, 0x89DD}, //8750 #CJK UNIFIED IDEOGRAPH + {0xDBD4, 0x89DA}, //8751 #CJK UNIFIED IDEOGRAPH + {0xDBD5, 0x89DB}, //8752 #CJK UNIFIED IDEOGRAPH + {0xDBD6, 0x8A4E}, //8753 #CJK UNIFIED IDEOGRAPH + {0xDBD7, 0x8A4D}, //8754 #CJK UNIFIED IDEOGRAPH + {0xDBD8, 0x8A39}, //8755 #CJK UNIFIED IDEOGRAPH + {0xDBD9, 0x8A59}, //8756 #CJK UNIFIED IDEOGRAPH + {0xDBDA, 0x8A40}, //8757 #CJK UNIFIED IDEOGRAPH + {0xDBDB, 0x8A57}, //8758 #CJK UNIFIED IDEOGRAPH + {0xDBDC, 0x8A58}, //8759 #CJK UNIFIED IDEOGRAPH + {0xDBDD, 0x8A44}, //8760 #CJK UNIFIED IDEOGRAPH + {0xDBDE, 0x8A45}, //8761 #CJK UNIFIED IDEOGRAPH + {0xDBDF, 0x8A52}, //8762 #CJK UNIFIED IDEOGRAPH + {0xDBE0, 0x8A48}, //8763 #CJK UNIFIED IDEOGRAPH + {0xDBE1, 0x8A51}, //8764 #CJK UNIFIED IDEOGRAPH + {0xDBE2, 0x8A4A}, //8765 #CJK UNIFIED IDEOGRAPH + {0xDBE3, 0x8A4C}, //8766 #CJK UNIFIED IDEOGRAPH + {0xDBE4, 0x8A4F}, //8767 #CJK UNIFIED IDEOGRAPH + {0xDBE5, 0x8C5F}, //8768 #CJK UNIFIED IDEOGRAPH + {0xDBE6, 0x8C81}, //8769 #CJK UNIFIED IDEOGRAPH + {0xDBE7, 0x8C80}, //8770 #CJK UNIFIED IDEOGRAPH + {0xDBE8, 0x8CBA}, //8771 #CJK UNIFIED IDEOGRAPH + {0xDBE9, 0x8CBE}, //8772 #CJK UNIFIED IDEOGRAPH + {0xDBEA, 0x8CB0}, //8773 #CJK UNIFIED IDEOGRAPH + {0xDBEB, 0x8CB9}, //8774 #CJK UNIFIED IDEOGRAPH + {0xDBEC, 0x8CB5}, //8775 #CJK UNIFIED IDEOGRAPH + {0xDBED, 0x8D84}, //8776 #CJK UNIFIED IDEOGRAPH + {0xDBEE, 0x8D80}, //8777 #CJK UNIFIED IDEOGRAPH + {0xDBEF, 0x8D89}, //8778 #CJK UNIFIED IDEOGRAPH + {0xDBF0, 0x8DD8}, //8779 #CJK UNIFIED IDEOGRAPH + {0xDBF1, 0x8DD3}, //8780 #CJK UNIFIED IDEOGRAPH + {0xDBF2, 0x8DCD}, //8781 #CJK UNIFIED IDEOGRAPH + {0xDBF3, 0x8DC7}, //8782 #CJK UNIFIED IDEOGRAPH + {0xDBF4, 0x8DD6}, //8783 #CJK UNIFIED IDEOGRAPH + {0xDBF5, 0x8DDC}, //8784 #CJK UNIFIED IDEOGRAPH + {0xDBF6, 0x8DCF}, //8785 #CJK UNIFIED IDEOGRAPH + {0xDBF7, 0x8DD5}, //8786 #CJK UNIFIED IDEOGRAPH + {0xDBF8, 0x8DD9}, //8787 #CJK UNIFIED IDEOGRAPH + {0xDBF9, 0x8DC8}, //8788 #CJK UNIFIED IDEOGRAPH + {0xDBFA, 0x8DD7}, //8789 #CJK UNIFIED IDEOGRAPH + {0xDBFB, 0x8DC5}, //8790 #CJK UNIFIED IDEOGRAPH + {0xDBFC, 0x8EEF}, //8791 #CJK UNIFIED IDEOGRAPH + {0xDBFD, 0x8EF7}, //8792 #CJK UNIFIED IDEOGRAPH + {0xDBFE, 0x8EFA}, //8793 #CJK UNIFIED IDEOGRAPH + {0xDC40, 0x8EF9}, //8794 #CJK UNIFIED IDEOGRAPH + {0xDC41, 0x8EE6}, //8795 #CJK UNIFIED IDEOGRAPH + {0xDC42, 0x8EEE}, //8796 #CJK UNIFIED IDEOGRAPH + {0xDC43, 0x8EE5}, //8797 #CJK UNIFIED IDEOGRAPH + {0xDC44, 0x8EF5}, //8798 #CJK UNIFIED IDEOGRAPH + {0xDC45, 0x8EE7}, //8799 #CJK UNIFIED IDEOGRAPH + {0xDC46, 0x8EE8}, //8800 #CJK UNIFIED IDEOGRAPH + {0xDC47, 0x8EF6}, //8801 #CJK UNIFIED IDEOGRAPH + {0xDC48, 0x8EEB}, //8802 #CJK UNIFIED IDEOGRAPH + {0xDC49, 0x8EF1}, //8803 #CJK UNIFIED IDEOGRAPH + {0xDC4A, 0x8EEC}, //8804 #CJK UNIFIED IDEOGRAPH + {0xDC4B, 0x8EF4}, //8805 #CJK UNIFIED IDEOGRAPH + {0xDC4C, 0x8EE9}, //8806 #CJK UNIFIED IDEOGRAPH + {0xDC4D, 0x902D}, //8807 #CJK UNIFIED IDEOGRAPH + {0xDC4E, 0x9034}, //8808 #CJK UNIFIED IDEOGRAPH + {0xDC4F, 0x902F}, //8809 #CJK UNIFIED IDEOGRAPH + {0xDC50, 0x9106}, //8810 #CJK UNIFIED IDEOGRAPH + {0xDC51, 0x912C}, //8811 #CJK UNIFIED IDEOGRAPH + {0xDC52, 0x9104}, //8812 #CJK UNIFIED IDEOGRAPH + {0xDC53, 0x90FF}, //8813 #CJK UNIFIED IDEOGRAPH + {0xDC54, 0x90FC}, //8814 #CJK UNIFIED IDEOGRAPH + {0xDC55, 0x9108}, //8815 #CJK UNIFIED IDEOGRAPH + {0xDC56, 0x90F9}, //8816 #CJK UNIFIED IDEOGRAPH + {0xDC57, 0x90FB}, //8817 #CJK UNIFIED IDEOGRAPH + {0xDC58, 0x9101}, //8818 #CJK UNIFIED IDEOGRAPH + {0xDC59, 0x9100}, //8819 #CJK UNIFIED IDEOGRAPH + {0xDC5A, 0x9107}, //8820 #CJK UNIFIED IDEOGRAPH + {0xDC5B, 0x9105}, //8821 #CJK UNIFIED IDEOGRAPH + {0xDC5C, 0x9103}, //8822 #CJK UNIFIED IDEOGRAPH + {0xDC5D, 0x9161}, //8823 #CJK UNIFIED IDEOGRAPH + {0xDC5E, 0x9164}, //8824 #CJK UNIFIED IDEOGRAPH + {0xDC5F, 0x915F}, //8825 #CJK UNIFIED IDEOGRAPH + {0xDC60, 0x9162}, //8826 #CJK UNIFIED IDEOGRAPH + {0xDC61, 0x9160}, //8827 #CJK UNIFIED IDEOGRAPH + {0xDC62, 0x9201}, //8828 #CJK UNIFIED IDEOGRAPH + {0xDC63, 0x920A}, //8829 #CJK UNIFIED IDEOGRAPH + {0xDC64, 0x9225}, //8830 #CJK UNIFIED IDEOGRAPH + {0xDC65, 0x9203}, //8831 #CJK UNIFIED IDEOGRAPH + {0xDC66, 0x921A}, //8832 #CJK UNIFIED IDEOGRAPH + {0xDC67, 0x9226}, //8833 #CJK UNIFIED IDEOGRAPH + {0xDC68, 0x920F}, //8834 #CJK UNIFIED IDEOGRAPH + {0xDC69, 0x920C}, //8835 #CJK UNIFIED IDEOGRAPH + {0xDC6A, 0x9200}, //8836 #CJK UNIFIED IDEOGRAPH + {0xDC6B, 0x9212}, //8837 #CJK UNIFIED IDEOGRAPH + {0xDC6C, 0x91FF}, //8838 #CJK UNIFIED IDEOGRAPH + {0xDC6D, 0x91FD}, //8839 #CJK UNIFIED IDEOGRAPH + {0xDC6E, 0x9206}, //8840 #CJK UNIFIED IDEOGRAPH + {0xDC6F, 0x9204}, //8841 #CJK UNIFIED IDEOGRAPH + {0xDC70, 0x9227}, //8842 #CJK UNIFIED IDEOGRAPH + {0xDC71, 0x9202}, //8843 #CJK UNIFIED IDEOGRAPH + {0xDC72, 0x921C}, //8844 #CJK UNIFIED IDEOGRAPH + {0xDC73, 0x9224}, //8845 #CJK UNIFIED IDEOGRAPH + {0xDC74, 0x9219}, //8846 #CJK UNIFIED IDEOGRAPH + {0xDC75, 0x9217}, //8847 #CJK UNIFIED IDEOGRAPH + {0xDC76, 0x9205}, //8848 #CJK UNIFIED IDEOGRAPH + {0xDC77, 0x9216}, //8849 #CJK UNIFIED IDEOGRAPH + {0xDC78, 0x957B}, //8850 #CJK UNIFIED IDEOGRAPH + {0xDC79, 0x958D}, //8851 #CJK UNIFIED IDEOGRAPH + {0xDC7A, 0x958C}, //8852 #CJK UNIFIED IDEOGRAPH + {0xDC7B, 0x9590}, //8853 #CJK UNIFIED IDEOGRAPH + {0xDC7C, 0x9687}, //8854 #CJK UNIFIED IDEOGRAPH + {0xDC7D, 0x967E}, //8855 #CJK UNIFIED IDEOGRAPH + {0xDC7E, 0x9688}, //8856 #CJK UNIFIED IDEOGRAPH + {0xDCA1, 0x9689}, //8857 #CJK UNIFIED IDEOGRAPH + {0xDCA2, 0x9683}, //8858 #CJK UNIFIED IDEOGRAPH + {0xDCA3, 0x9680}, //8859 #CJK UNIFIED IDEOGRAPH + {0xDCA4, 0x96C2}, //8860 #CJK UNIFIED IDEOGRAPH + {0xDCA5, 0x96C8}, //8861 #CJK UNIFIED IDEOGRAPH + {0xDCA6, 0x96C3}, //8862 #CJK UNIFIED IDEOGRAPH + {0xDCA7, 0x96F1}, //8863 #CJK UNIFIED IDEOGRAPH + {0xDCA8, 0x96F0}, //8864 #CJK UNIFIED IDEOGRAPH + {0xDCA9, 0x976C}, //8865 #CJK UNIFIED IDEOGRAPH + {0xDCAA, 0x9770}, //8866 #CJK UNIFIED IDEOGRAPH + {0xDCAB, 0x976E}, //8867 #CJK UNIFIED IDEOGRAPH + {0xDCAC, 0x9807}, //8868 #CJK UNIFIED IDEOGRAPH + {0xDCAD, 0x98A9}, //8869 #CJK UNIFIED IDEOGRAPH + {0xDCAE, 0x98EB}, //8870 #CJK UNIFIED IDEOGRAPH + {0xDCAF, 0x9CE6}, //8871 #CJK UNIFIED IDEOGRAPH + {0xDCB0, 0x9EF9}, //8872 #CJK UNIFIED IDEOGRAPH + {0xDCB1, 0x4E83}, //8873 #CJK UNIFIED IDEOGRAPH + {0xDCB2, 0x4E84}, //8874 #CJK UNIFIED IDEOGRAPH + {0xDCB3, 0x4EB6}, //8875 #CJK UNIFIED IDEOGRAPH + {0xDCB4, 0x50BD}, //8876 #CJK UNIFIED IDEOGRAPH + {0xDCB5, 0x50BF}, //8877 #CJK UNIFIED IDEOGRAPH + {0xDCB6, 0x50C6}, //8878 #CJK UNIFIED IDEOGRAPH + {0xDCB7, 0x50AE}, //8879 #CJK UNIFIED IDEOGRAPH + {0xDCB8, 0x50C4}, //8880 #CJK UNIFIED IDEOGRAPH + {0xDCB9, 0x50CA}, //8881 #CJK UNIFIED IDEOGRAPH + {0xDCBA, 0x50B4}, //8882 #CJK UNIFIED IDEOGRAPH + {0xDCBB, 0x50C8}, //8883 #CJK UNIFIED IDEOGRAPH + {0xDCBC, 0x50C2}, //8884 #CJK UNIFIED IDEOGRAPH + {0xDCBD, 0x50B0}, //8885 #CJK UNIFIED IDEOGRAPH + {0xDCBE, 0x50C1}, //8886 #CJK UNIFIED IDEOGRAPH + {0xDCBF, 0x50BA}, //8887 #CJK UNIFIED IDEOGRAPH + {0xDCC0, 0x50B1}, //8888 #CJK UNIFIED IDEOGRAPH + {0xDCC1, 0x50CB}, //8889 #CJK UNIFIED IDEOGRAPH + {0xDCC2, 0x50C9}, //8890 #CJK UNIFIED IDEOGRAPH + {0xDCC3, 0x50B6}, //8891 #CJK UNIFIED IDEOGRAPH + {0xDCC4, 0x50B8}, //8892 #CJK UNIFIED IDEOGRAPH + {0xDCC5, 0x51D7}, //8893 #CJK UNIFIED IDEOGRAPH + {0xDCC6, 0x527A}, //8894 #CJK UNIFIED IDEOGRAPH + {0xDCC7, 0x5278}, //8895 #CJK UNIFIED IDEOGRAPH + {0xDCC8, 0x527B}, //8896 #CJK UNIFIED IDEOGRAPH + {0xDCC9, 0x527C}, //8897 #CJK UNIFIED IDEOGRAPH + {0xDCCA, 0x55C3}, //8898 #CJK UNIFIED IDEOGRAPH + {0xDCCB, 0x55DB}, //8899 #CJK UNIFIED IDEOGRAPH + {0xDCCC, 0x55CC}, //8900 #CJK UNIFIED IDEOGRAPH + {0xDCCD, 0x55D0}, //8901 #CJK UNIFIED IDEOGRAPH + {0xDCCE, 0x55CB}, //8902 #CJK UNIFIED IDEOGRAPH + {0xDCCF, 0x55CA}, //8903 #CJK UNIFIED IDEOGRAPH + {0xDCD0, 0x55DD}, //8904 #CJK UNIFIED IDEOGRAPH + {0xDCD1, 0x55C0}, //8905 #CJK UNIFIED IDEOGRAPH + {0xDCD2, 0x55D4}, //8906 #CJK UNIFIED IDEOGRAPH + {0xDCD3, 0x55C4}, //8907 #CJK UNIFIED IDEOGRAPH + {0xDCD4, 0x55E9}, //8908 #CJK UNIFIED IDEOGRAPH + {0xDCD5, 0x55BF}, //8909 #CJK UNIFIED IDEOGRAPH + {0xDCD6, 0x55D2}, //8910 #CJK UNIFIED IDEOGRAPH + {0xDCD7, 0x558D}, //8911 #CJK UNIFIED IDEOGRAPH + {0xDCD8, 0x55CF}, //8912 #CJK UNIFIED IDEOGRAPH + {0xDCD9, 0x55D5}, //8913 #CJK UNIFIED IDEOGRAPH + {0xDCDA, 0x55E2}, //8914 #CJK UNIFIED IDEOGRAPH + {0xDCDB, 0x55D6}, //8915 #CJK UNIFIED IDEOGRAPH + {0xDCDC, 0x55C8}, //8916 #CJK UNIFIED IDEOGRAPH + {0xDCDD, 0x55F2}, //8917 #CJK UNIFIED IDEOGRAPH + {0xDCDE, 0x55CD}, //8918 #CJK UNIFIED IDEOGRAPH + {0xDCDF, 0x55D9}, //8919 #CJK UNIFIED IDEOGRAPH + {0xDCE0, 0x55C2}, //8920 #CJK UNIFIED IDEOGRAPH + {0xDCE1, 0x5714}, //8921 #CJK UNIFIED IDEOGRAPH + {0xDCE2, 0x5853}, //8922 #CJK UNIFIED IDEOGRAPH + {0xDCE3, 0x5868}, //8923 #CJK UNIFIED IDEOGRAPH + {0xDCE4, 0x5864}, //8924 #CJK UNIFIED IDEOGRAPH + {0xDCE5, 0x584F}, //8925 #CJK UNIFIED IDEOGRAPH + {0xDCE6, 0x584D}, //8926 #CJK UNIFIED IDEOGRAPH + {0xDCE7, 0x5849}, //8927 #CJK UNIFIED IDEOGRAPH + {0xDCE8, 0x586F}, //8928 #CJK UNIFIED IDEOGRAPH + {0xDCE9, 0x5855}, //8929 #CJK UNIFIED IDEOGRAPH + {0xDCEA, 0x584E}, //8930 #CJK UNIFIED IDEOGRAPH + {0xDCEB, 0x585D}, //8931 #CJK UNIFIED IDEOGRAPH + {0xDCEC, 0x5859}, //8932 #CJK UNIFIED IDEOGRAPH + {0xDCED, 0x5865}, //8933 #CJK UNIFIED IDEOGRAPH + {0xDCEE, 0x585B}, //8934 #CJK UNIFIED IDEOGRAPH + {0xDCEF, 0x583D}, //8935 #CJK UNIFIED IDEOGRAPH + {0xDCF0, 0x5863}, //8936 #CJK UNIFIED IDEOGRAPH + {0xDCF1, 0x5871}, //8937 #CJK UNIFIED IDEOGRAPH + {0xDCF2, 0x58FC}, //8938 #CJK UNIFIED IDEOGRAPH + {0xDCF3, 0x5AC7}, //8939 #CJK UNIFIED IDEOGRAPH + {0xDCF4, 0x5AC4}, //8940 #CJK UNIFIED IDEOGRAPH + {0xDCF5, 0x5ACB}, //8941 #CJK UNIFIED IDEOGRAPH + {0xDCF6, 0x5ABA}, //8942 #CJK UNIFIED IDEOGRAPH + {0xDCF7, 0x5AB8}, //8943 #CJK UNIFIED IDEOGRAPH + {0xDCF8, 0x5AB1}, //8944 #CJK UNIFIED IDEOGRAPH + {0xDCF9, 0x5AB5}, //8945 #CJK UNIFIED IDEOGRAPH + {0xDCFA, 0x5AB0}, //8946 #CJK UNIFIED IDEOGRAPH + {0xDCFB, 0x5ABF}, //8947 #CJK UNIFIED IDEOGRAPH + {0xDCFC, 0x5AC8}, //8948 #CJK UNIFIED IDEOGRAPH + {0xDCFD, 0x5ABB}, //8949 #CJK UNIFIED IDEOGRAPH + {0xDCFE, 0x5AC6}, //8950 #CJK UNIFIED IDEOGRAPH + {0xDD40, 0x5AB7}, //8951 #CJK UNIFIED IDEOGRAPH + {0xDD41, 0x5AC0}, //8952 #CJK UNIFIED IDEOGRAPH + {0xDD42, 0x5ACA}, //8953 #CJK UNIFIED IDEOGRAPH + {0xDD43, 0x5AB4}, //8954 #CJK UNIFIED IDEOGRAPH + {0xDD44, 0x5AB6}, //8955 #CJK UNIFIED IDEOGRAPH + {0xDD45, 0x5ACD}, //8956 #CJK UNIFIED IDEOGRAPH + {0xDD46, 0x5AB9}, //8957 #CJK UNIFIED IDEOGRAPH + {0xDD47, 0x5A90}, //8958 #CJK UNIFIED IDEOGRAPH + {0xDD48, 0x5BD6}, //8959 #CJK UNIFIED IDEOGRAPH + {0xDD49, 0x5BD8}, //8960 #CJK UNIFIED IDEOGRAPH + {0xDD4A, 0x5BD9}, //8961 #CJK UNIFIED IDEOGRAPH + {0xDD4B, 0x5C1F}, //8962 #CJK UNIFIED IDEOGRAPH + {0xDD4C, 0x5C33}, //8963 #CJK UNIFIED IDEOGRAPH + {0xDD4D, 0x5D71}, //8964 #CJK UNIFIED IDEOGRAPH + {0xDD4E, 0x5D63}, //8965 #CJK UNIFIED IDEOGRAPH + {0xDD4F, 0x5D4A}, //8966 #CJK UNIFIED IDEOGRAPH + {0xDD50, 0x5D65}, //8967 #CJK UNIFIED IDEOGRAPH + {0xDD51, 0x5D72}, //8968 #CJK UNIFIED IDEOGRAPH + {0xDD52, 0x5D6C}, //8969 #CJK UNIFIED IDEOGRAPH + {0xDD53, 0x5D5E}, //8970 #CJK UNIFIED IDEOGRAPH + {0xDD54, 0x5D68}, //8971 #CJK UNIFIED IDEOGRAPH + {0xDD55, 0x5D67}, //8972 #CJK UNIFIED IDEOGRAPH + {0xDD56, 0x5D62}, //8973 #CJK UNIFIED IDEOGRAPH + {0xDD57, 0x5DF0}, //8974 #CJK UNIFIED IDEOGRAPH + {0xDD58, 0x5E4F}, //8975 #CJK UNIFIED IDEOGRAPH + {0xDD59, 0x5E4E}, //8976 #CJK UNIFIED IDEOGRAPH + {0xDD5A, 0x5E4A}, //8977 #CJK UNIFIED IDEOGRAPH + {0xDD5B, 0x5E4D}, //8978 #CJK UNIFIED IDEOGRAPH + {0xDD5C, 0x5E4B}, //8979 #CJK UNIFIED IDEOGRAPH + {0xDD5D, 0x5EC5}, //8980 #CJK UNIFIED IDEOGRAPH + {0xDD5E, 0x5ECC}, //8981 #CJK UNIFIED IDEOGRAPH + {0xDD5F, 0x5EC6}, //8982 #CJK UNIFIED IDEOGRAPH + {0xDD60, 0x5ECB}, //8983 #CJK UNIFIED IDEOGRAPH + {0xDD61, 0x5EC7}, //8984 #CJK UNIFIED IDEOGRAPH + {0xDD62, 0x5F40}, //8985 #CJK UNIFIED IDEOGRAPH + {0xDD63, 0x5FAF}, //8986 #CJK UNIFIED IDEOGRAPH + {0xDD64, 0x5FAD}, //8987 #CJK UNIFIED IDEOGRAPH + {0xDD65, 0x60F7}, //8988 #CJK UNIFIED IDEOGRAPH + {0xDD66, 0x6149}, //8989 #CJK UNIFIED IDEOGRAPH + {0xDD67, 0x614A}, //8990 #CJK UNIFIED IDEOGRAPH + {0xDD68, 0x612B}, //8991 #CJK UNIFIED IDEOGRAPH + {0xDD69, 0x6145}, //8992 #CJK UNIFIED IDEOGRAPH + {0xDD6A, 0x6136}, //8993 #CJK UNIFIED IDEOGRAPH + {0xDD6B, 0x6132}, //8994 #CJK UNIFIED IDEOGRAPH + {0xDD6C, 0x612E}, //8995 #CJK UNIFIED IDEOGRAPH + {0xDD6D, 0x6146}, //8996 #CJK UNIFIED IDEOGRAPH + {0xDD6E, 0x612F}, //8997 #CJK UNIFIED IDEOGRAPH + {0xDD6F, 0x614F}, //8998 #CJK UNIFIED IDEOGRAPH + {0xDD70, 0x6129}, //8999 #CJK UNIFIED IDEOGRAPH + {0xDD71, 0x6140}, //9000 #CJK UNIFIED IDEOGRAPH + {0xDD72, 0x6220}, //9001 #CJK UNIFIED IDEOGRAPH + {0xDD73, 0x9168}, //9002 #CJK UNIFIED IDEOGRAPH + {0xDD74, 0x6223}, //9003 #CJK UNIFIED IDEOGRAPH + {0xDD75, 0x6225}, //9004 #CJK UNIFIED IDEOGRAPH + {0xDD76, 0x6224}, //9005 #CJK UNIFIED IDEOGRAPH + {0xDD77, 0x63C5}, //9006 #CJK UNIFIED IDEOGRAPH + {0xDD78, 0x63F1}, //9007 #CJK UNIFIED IDEOGRAPH + {0xDD79, 0x63EB}, //9008 #CJK UNIFIED IDEOGRAPH + {0xDD7A, 0x6410}, //9009 #CJK UNIFIED IDEOGRAPH + {0xDD7B, 0x6412}, //9010 #CJK UNIFIED IDEOGRAPH + {0xDD7C, 0x6409}, //9011 #CJK UNIFIED IDEOGRAPH + {0xDD7D, 0x6420}, //9012 #CJK UNIFIED IDEOGRAPH + {0xDD7E, 0x6424}, //9013 #CJK UNIFIED IDEOGRAPH + {0xDDA1, 0x6433}, //9014 #CJK UNIFIED IDEOGRAPH + {0xDDA2, 0x6443}, //9015 #CJK UNIFIED IDEOGRAPH + {0xDDA3, 0x641F}, //9016 #CJK UNIFIED IDEOGRAPH + {0xDDA4, 0x6415}, //9017 #CJK UNIFIED IDEOGRAPH + {0xDDA5, 0x6418}, //9018 #CJK UNIFIED IDEOGRAPH + {0xDDA6, 0x6439}, //9019 #CJK UNIFIED IDEOGRAPH + {0xDDA7, 0x6437}, //9020 #CJK UNIFIED IDEOGRAPH + {0xDDA8, 0x6422}, //9021 #CJK UNIFIED IDEOGRAPH + {0xDDA9, 0x6423}, //9022 #CJK UNIFIED IDEOGRAPH + {0xDDAA, 0x640C}, //9023 #CJK UNIFIED IDEOGRAPH + {0xDDAB, 0x6426}, //9024 #CJK UNIFIED IDEOGRAPH + {0xDDAC, 0x6430}, //9025 #CJK UNIFIED IDEOGRAPH + {0xDDAD, 0x6428}, //9026 #CJK UNIFIED IDEOGRAPH + {0xDDAE, 0x6441}, //9027 #CJK UNIFIED IDEOGRAPH + {0xDDAF, 0x6435}, //9028 #CJK UNIFIED IDEOGRAPH + {0xDDB0, 0x642F}, //9029 #CJK UNIFIED IDEOGRAPH + {0xDDB1, 0x640A}, //9030 #CJK UNIFIED IDEOGRAPH + {0xDDB2, 0x641A}, //9031 #CJK UNIFIED IDEOGRAPH + {0xDDB3, 0x6440}, //9032 #CJK UNIFIED IDEOGRAPH + {0xDDB4, 0x6425}, //9033 #CJK UNIFIED IDEOGRAPH + {0xDDB5, 0x6427}, //9034 #CJK UNIFIED IDEOGRAPH + {0xDDB6, 0x640B}, //9035 #CJK UNIFIED IDEOGRAPH + {0xDDB7, 0x63E7}, //9036 #CJK UNIFIED IDEOGRAPH + {0xDDB8, 0x641B}, //9037 #CJK UNIFIED IDEOGRAPH + {0xDDB9, 0x642E}, //9038 #CJK UNIFIED IDEOGRAPH + {0xDDBA, 0x6421}, //9039 #CJK UNIFIED IDEOGRAPH + {0xDDBB, 0x640E}, //9040 #CJK UNIFIED IDEOGRAPH + {0xDDBC, 0x656F}, //9041 #CJK UNIFIED IDEOGRAPH + {0xDDBD, 0x6592}, //9042 #CJK UNIFIED IDEOGRAPH + {0xDDBE, 0x65D3}, //9043 #CJK UNIFIED IDEOGRAPH + {0xDDBF, 0x6686}, //9044 #CJK UNIFIED IDEOGRAPH + {0xDDC0, 0x668C}, //9045 #CJK UNIFIED IDEOGRAPH + {0xDDC1, 0x6695}, //9046 #CJK UNIFIED IDEOGRAPH + {0xDDC2, 0x6690}, //9047 #CJK UNIFIED IDEOGRAPH + {0xDDC3, 0x668B}, //9048 #CJK UNIFIED IDEOGRAPH + {0xDDC4, 0x668A}, //9049 #CJK UNIFIED IDEOGRAPH + {0xDDC5, 0x6699}, //9050 #CJK UNIFIED IDEOGRAPH + {0xDDC6, 0x6694}, //9051 #CJK UNIFIED IDEOGRAPH + {0xDDC7, 0x6678}, //9052 #CJK UNIFIED IDEOGRAPH + {0xDDC8, 0x6720}, //9053 #CJK UNIFIED IDEOGRAPH + {0xDDC9, 0x6966}, //9054 #CJK UNIFIED IDEOGRAPH + {0xDDCA, 0x695F}, //9055 #CJK UNIFIED IDEOGRAPH + {0xDDCB, 0x6938}, //9056 #CJK UNIFIED IDEOGRAPH + {0xDDCC, 0x694E}, //9057 #CJK UNIFIED IDEOGRAPH + {0xDDCD, 0x6962}, //9058 #CJK UNIFIED IDEOGRAPH + {0xDDCE, 0x6971}, //9059 #CJK UNIFIED IDEOGRAPH + {0xDDCF, 0x693F}, //9060 #CJK UNIFIED IDEOGRAPH + {0xDDD0, 0x6945}, //9061 #CJK UNIFIED IDEOGRAPH + {0xDDD1, 0x696A}, //9062 #CJK UNIFIED IDEOGRAPH + {0xDDD2, 0x6939}, //9063 #CJK UNIFIED IDEOGRAPH + {0xDDD3, 0x6942}, //9064 #CJK UNIFIED IDEOGRAPH + {0xDDD4, 0x6957}, //9065 #CJK UNIFIED IDEOGRAPH + {0xDDD5, 0x6959}, //9066 #CJK UNIFIED IDEOGRAPH + {0xDDD6, 0x697A}, //9067 #CJK UNIFIED IDEOGRAPH + {0xDDD7, 0x6948}, //9068 #CJK UNIFIED IDEOGRAPH + {0xDDD8, 0x6949}, //9069 #CJK UNIFIED IDEOGRAPH + {0xDDD9, 0x6935}, //9070 #CJK UNIFIED IDEOGRAPH + {0xDDDA, 0x696C}, //9071 #CJK UNIFIED IDEOGRAPH + {0xDDDB, 0x6933}, //9072 #CJK UNIFIED IDEOGRAPH + {0xDDDC, 0x693D}, //9073 #CJK UNIFIED IDEOGRAPH + {0xDDDD, 0x6965}, //9074 #CJK UNIFIED IDEOGRAPH + {0xDDDE, 0x68F0}, //9075 #CJK UNIFIED IDEOGRAPH + {0xDDDF, 0x6978}, //9076 #CJK UNIFIED IDEOGRAPH + {0xDDE0, 0x6934}, //9077 #CJK UNIFIED IDEOGRAPH + {0xDDE1, 0x6969}, //9078 #CJK UNIFIED IDEOGRAPH + {0xDDE2, 0x6940}, //9079 #CJK UNIFIED IDEOGRAPH + {0xDDE3, 0x696F}, //9080 #CJK UNIFIED IDEOGRAPH + {0xDDE4, 0x6944}, //9081 #CJK UNIFIED IDEOGRAPH + {0xDDE5, 0x6976}, //9082 #CJK UNIFIED IDEOGRAPH + {0xDDE6, 0x6958}, //9083 #CJK UNIFIED IDEOGRAPH + {0xDDE7, 0x6941}, //9084 #CJK UNIFIED IDEOGRAPH + {0xDDE8, 0x6974}, //9085 #CJK UNIFIED IDEOGRAPH + {0xDDE9, 0x694C}, //9086 #CJK UNIFIED IDEOGRAPH + {0xDDEA, 0x693B}, //9087 #CJK UNIFIED IDEOGRAPH + {0xDDEB, 0x694B}, //9088 #CJK UNIFIED IDEOGRAPH + {0xDDEC, 0x6937}, //9089 #CJK UNIFIED IDEOGRAPH + {0xDDED, 0x695C}, //9090 #CJK UNIFIED IDEOGRAPH + {0xDDEE, 0x694F}, //9091 #CJK UNIFIED IDEOGRAPH + {0xDDEF, 0x6951}, //9092 #CJK UNIFIED IDEOGRAPH + {0xDDF0, 0x6932}, //9093 #CJK UNIFIED IDEOGRAPH + {0xDDF1, 0x6952}, //9094 #CJK UNIFIED IDEOGRAPH + {0xDDF2, 0x692F}, //9095 #CJK UNIFIED IDEOGRAPH + {0xDDF3, 0x697B}, //9096 #CJK UNIFIED IDEOGRAPH + {0xDDF4, 0x693C}, //9097 #CJK UNIFIED IDEOGRAPH + {0xDDF5, 0x6B46}, //9098 #CJK UNIFIED IDEOGRAPH + {0xDDF6, 0x6B45}, //9099 #CJK UNIFIED IDEOGRAPH + {0xDDF7, 0x6B43}, //9100 #CJK UNIFIED IDEOGRAPH + {0xDDF8, 0x6B42}, //9101 #CJK UNIFIED IDEOGRAPH + {0xDDF9, 0x6B48}, //9102 #CJK UNIFIED IDEOGRAPH + {0xDDFA, 0x6B41}, //9103 #CJK UNIFIED IDEOGRAPH + {0xDDFB, 0x6B9B}, //9104 #CJK UNIFIED IDEOGRAPH + {0xDDFC, 0xFA0D}, //9105 #CJK COMPATIBILITY IDEOGRAPH + {0xDDFD, 0x6BFB}, //9106 #CJK UNIFIED IDEOGRAPH + {0xDDFE, 0x6BFC}, //9107 #CJK UNIFIED IDEOGRAPH + {0xDE40, 0x6BF9}, //9108 #CJK UNIFIED IDEOGRAPH + {0xDE41, 0x6BF7}, //9109 #CJK UNIFIED IDEOGRAPH + {0xDE42, 0x6BF8}, //9110 #CJK UNIFIED IDEOGRAPH + {0xDE43, 0x6E9B}, //9111 #CJK UNIFIED IDEOGRAPH + {0xDE44, 0x6ED6}, //9112 #CJK UNIFIED IDEOGRAPH + {0xDE45, 0x6EC8}, //9113 #CJK UNIFIED IDEOGRAPH + {0xDE46, 0x6E8F}, //9114 #CJK UNIFIED IDEOGRAPH + {0xDE47, 0x6EC0}, //9115 #CJK UNIFIED IDEOGRAPH + {0xDE48, 0x6E9F}, //9116 #CJK UNIFIED IDEOGRAPH + {0xDE49, 0x6E93}, //9117 #CJK UNIFIED IDEOGRAPH + {0xDE4A, 0x6E94}, //9118 #CJK UNIFIED IDEOGRAPH + {0xDE4B, 0x6EA0}, //9119 #CJK UNIFIED IDEOGRAPH + {0xDE4C, 0x6EB1}, //9120 #CJK UNIFIED IDEOGRAPH + {0xDE4D, 0x6EB9}, //9121 #CJK UNIFIED IDEOGRAPH + {0xDE4E, 0x6EC6}, //9122 #CJK UNIFIED IDEOGRAPH + {0xDE4F, 0x6ED2}, //9123 #CJK UNIFIED IDEOGRAPH + {0xDE50, 0x6EBD}, //9124 #CJK UNIFIED IDEOGRAPH + {0xDE51, 0x6EC1}, //9125 #CJK UNIFIED IDEOGRAPH + {0xDE52, 0x6E9E}, //9126 #CJK UNIFIED IDEOGRAPH + {0xDE53, 0x6EC9}, //9127 #CJK UNIFIED IDEOGRAPH + {0xDE54, 0x6EB7}, //9128 #CJK UNIFIED IDEOGRAPH + {0xDE55, 0x6EB0}, //9129 #CJK UNIFIED IDEOGRAPH + {0xDE56, 0x6ECD}, //9130 #CJK UNIFIED IDEOGRAPH + {0xDE57, 0x6EA6}, //9131 #CJK UNIFIED IDEOGRAPH + {0xDE58, 0x6ECF}, //9132 #CJK UNIFIED IDEOGRAPH + {0xDE59, 0x6EB2}, //9133 #CJK UNIFIED IDEOGRAPH + {0xDE5A, 0x6EBE}, //9134 #CJK UNIFIED IDEOGRAPH + {0xDE5B, 0x6EC3}, //9135 #CJK UNIFIED IDEOGRAPH + {0xDE5C, 0x6EDC}, //9136 #CJK UNIFIED IDEOGRAPH + {0xDE5D, 0x6ED8}, //9137 #CJK UNIFIED IDEOGRAPH + {0xDE5E, 0x6E99}, //9138 #CJK UNIFIED IDEOGRAPH + {0xDE5F, 0x6E92}, //9139 #CJK UNIFIED IDEOGRAPH + {0xDE60, 0x6E8E}, //9140 #CJK UNIFIED IDEOGRAPH + {0xDE61, 0x6E8D}, //9141 #CJK UNIFIED IDEOGRAPH + {0xDE62, 0x6EA4}, //9142 #CJK UNIFIED IDEOGRAPH + {0xDE63, 0x6EA1}, //9143 #CJK UNIFIED IDEOGRAPH + {0xDE64, 0x6EBF}, //9144 #CJK UNIFIED IDEOGRAPH + {0xDE65, 0x6EB3}, //9145 #CJK UNIFIED IDEOGRAPH + {0xDE66, 0x6ED0}, //9146 #CJK UNIFIED IDEOGRAPH + {0xDE67, 0x6ECA}, //9147 #CJK UNIFIED IDEOGRAPH + {0xDE68, 0x6E97}, //9148 #CJK UNIFIED IDEOGRAPH + {0xDE69, 0x6EAE}, //9149 #CJK UNIFIED IDEOGRAPH + {0xDE6A, 0x6EA3}, //9150 #CJK UNIFIED IDEOGRAPH + {0xDE6B, 0x7147}, //9151 #CJK UNIFIED IDEOGRAPH + {0xDE6C, 0x7154}, //9152 #CJK UNIFIED IDEOGRAPH + {0xDE6D, 0x7152}, //9153 #CJK UNIFIED IDEOGRAPH + {0xDE6E, 0x7163}, //9154 #CJK UNIFIED IDEOGRAPH + {0xDE6F, 0x7160}, //9155 #CJK UNIFIED IDEOGRAPH + {0xDE70, 0x7141}, //9156 #CJK UNIFIED IDEOGRAPH + {0xDE71, 0x715D}, //9157 #CJK UNIFIED IDEOGRAPH + {0xDE72, 0x7162}, //9158 #CJK UNIFIED IDEOGRAPH + {0xDE73, 0x7172}, //9159 #CJK UNIFIED IDEOGRAPH + {0xDE74, 0x7178}, //9160 #CJK UNIFIED IDEOGRAPH + {0xDE75, 0x716A}, //9161 #CJK UNIFIED IDEOGRAPH + {0xDE76, 0x7161}, //9162 #CJK UNIFIED IDEOGRAPH + {0xDE77, 0x7142}, //9163 #CJK UNIFIED IDEOGRAPH + {0xDE78, 0x7158}, //9164 #CJK UNIFIED IDEOGRAPH + {0xDE79, 0x7143}, //9165 #CJK UNIFIED IDEOGRAPH + {0xDE7A, 0x714B}, //9166 #CJK UNIFIED IDEOGRAPH + {0xDE7B, 0x7170}, //9167 #CJK UNIFIED IDEOGRAPH + {0xDE7C, 0x715F}, //9168 #CJK UNIFIED IDEOGRAPH + {0xDE7D, 0x7150}, //9169 #CJK UNIFIED IDEOGRAPH + {0xDE7E, 0x7153}, //9170 #CJK UNIFIED IDEOGRAPH + {0xDEA1, 0x7144}, //9171 #CJK UNIFIED IDEOGRAPH + {0xDEA2, 0x714D}, //9172 #CJK UNIFIED IDEOGRAPH + {0xDEA3, 0x715A}, //9173 #CJK UNIFIED IDEOGRAPH + {0xDEA4, 0x724F}, //9174 #CJK UNIFIED IDEOGRAPH + {0xDEA5, 0x728D}, //9175 #CJK UNIFIED IDEOGRAPH + {0xDEA6, 0x728C}, //9176 #CJK UNIFIED IDEOGRAPH + {0xDEA7, 0x7291}, //9177 #CJK UNIFIED IDEOGRAPH + {0xDEA8, 0x7290}, //9178 #CJK UNIFIED IDEOGRAPH + {0xDEA9, 0x728E}, //9179 #CJK UNIFIED IDEOGRAPH + {0xDEAA, 0x733C}, //9180 #CJK UNIFIED IDEOGRAPH + {0xDEAB, 0x7342}, //9181 #CJK UNIFIED IDEOGRAPH + {0xDEAC, 0x733B}, //9182 #CJK UNIFIED IDEOGRAPH + {0xDEAD, 0x733A}, //9183 #CJK UNIFIED IDEOGRAPH + {0xDEAE, 0x7340}, //9184 #CJK UNIFIED IDEOGRAPH + {0xDEAF, 0x734A}, //9185 #CJK UNIFIED IDEOGRAPH + {0xDEB0, 0x7349}, //9186 #CJK UNIFIED IDEOGRAPH + {0xDEB1, 0x7444}, //9187 #CJK UNIFIED IDEOGRAPH + {0xDEB2, 0x744A}, //9188 #CJK UNIFIED IDEOGRAPH + {0xDEB3, 0x744B}, //9189 #CJK UNIFIED IDEOGRAPH + {0xDEB4, 0x7452}, //9190 #CJK UNIFIED IDEOGRAPH + {0xDEB5, 0x7451}, //9191 #CJK UNIFIED IDEOGRAPH + {0xDEB6, 0x7457}, //9192 #CJK UNIFIED IDEOGRAPH + {0xDEB7, 0x7440}, //9193 #CJK UNIFIED IDEOGRAPH + {0xDEB8, 0x744F}, //9194 #CJK UNIFIED IDEOGRAPH + {0xDEB9, 0x7450}, //9195 #CJK UNIFIED IDEOGRAPH + {0xDEBA, 0x744E}, //9196 #CJK UNIFIED IDEOGRAPH + {0xDEBB, 0x7442}, //9197 #CJK UNIFIED IDEOGRAPH + {0xDEBC, 0x7446}, //9198 #CJK UNIFIED IDEOGRAPH + {0xDEBD, 0x744D}, //9199 #CJK UNIFIED IDEOGRAPH + {0xDEBE, 0x7454}, //9200 #CJK UNIFIED IDEOGRAPH + {0xDEBF, 0x74E1}, //9201 #CJK UNIFIED IDEOGRAPH + {0xDEC0, 0x74FF}, //9202 #CJK UNIFIED IDEOGRAPH + {0xDEC1, 0x74FE}, //9203 #CJK UNIFIED IDEOGRAPH + {0xDEC2, 0x74FD}, //9204 #CJK UNIFIED IDEOGRAPH + {0xDEC3, 0x751D}, //9205 #CJK UNIFIED IDEOGRAPH + {0xDEC4, 0x7579}, //9206 #CJK UNIFIED IDEOGRAPH + {0xDEC5, 0x7577}, //9207 #CJK UNIFIED IDEOGRAPH + {0xDEC6, 0x6983}, //9208 #CJK UNIFIED IDEOGRAPH + {0xDEC7, 0x75EF}, //9209 #CJK UNIFIED IDEOGRAPH + {0xDEC8, 0x760F}, //9210 #CJK UNIFIED IDEOGRAPH + {0xDEC9, 0x7603}, //9211 #CJK UNIFIED IDEOGRAPH + {0xDECA, 0x75F7}, //9212 #CJK UNIFIED IDEOGRAPH + {0xDECB, 0x75FE}, //9213 #CJK UNIFIED IDEOGRAPH + {0xDECC, 0x75FC}, //9214 #CJK UNIFIED IDEOGRAPH + {0xDECD, 0x75F9}, //9215 #CJK UNIFIED IDEOGRAPH + {0xDECE, 0x75F8}, //9216 #CJK UNIFIED IDEOGRAPH + {0xDECF, 0x7610}, //9217 #CJK UNIFIED IDEOGRAPH + {0xDED0, 0x75FB}, //9218 #CJK UNIFIED IDEOGRAPH + {0xDED1, 0x75F6}, //9219 #CJK UNIFIED IDEOGRAPH + {0xDED2, 0x75ED}, //9220 #CJK UNIFIED IDEOGRAPH + {0xDED3, 0x75F5}, //9221 #CJK UNIFIED IDEOGRAPH + {0xDED4, 0x75FD}, //9222 #CJK UNIFIED IDEOGRAPH + {0xDED5, 0x7699}, //9223 #CJK UNIFIED IDEOGRAPH + {0xDED6, 0x76B5}, //9224 #CJK UNIFIED IDEOGRAPH + {0xDED7, 0x76DD}, //9225 #CJK UNIFIED IDEOGRAPH + {0xDED8, 0x7755}, //9226 #CJK UNIFIED IDEOGRAPH + {0xDED9, 0x775F}, //9227 #CJK UNIFIED IDEOGRAPH + {0xDEDA, 0x7760}, //9228 #CJK UNIFIED IDEOGRAPH + {0xDEDB, 0x7752}, //9229 #CJK UNIFIED IDEOGRAPH + {0xDEDC, 0x7756}, //9230 #CJK UNIFIED IDEOGRAPH + {0xDEDD, 0x775A}, //9231 #CJK UNIFIED IDEOGRAPH + {0xDEDE, 0x7769}, //9232 #CJK UNIFIED IDEOGRAPH + {0xDEDF, 0x7767}, //9233 #CJK UNIFIED IDEOGRAPH + {0xDEE0, 0x7754}, //9234 #CJK UNIFIED IDEOGRAPH + {0xDEE1, 0x7759}, //9235 #CJK UNIFIED IDEOGRAPH + {0xDEE2, 0x776D}, //9236 #CJK UNIFIED IDEOGRAPH + {0xDEE3, 0x77E0}, //9237 #CJK UNIFIED IDEOGRAPH + {0xDEE4, 0x7887}, //9238 #CJK UNIFIED IDEOGRAPH + {0xDEE5, 0x789A}, //9239 #CJK UNIFIED IDEOGRAPH + {0xDEE6, 0x7894}, //9240 #CJK UNIFIED IDEOGRAPH + {0xDEE7, 0x788F}, //9241 #CJK UNIFIED IDEOGRAPH + {0xDEE8, 0x7884}, //9242 #CJK UNIFIED IDEOGRAPH + {0xDEE9, 0x7895}, //9243 #CJK UNIFIED IDEOGRAPH + {0xDEEA, 0x7885}, //9244 #CJK UNIFIED IDEOGRAPH + {0xDEEB, 0x7886}, //9245 #CJK UNIFIED IDEOGRAPH + {0xDEEC, 0x78A1}, //9246 #CJK UNIFIED IDEOGRAPH + {0xDEED, 0x7883}, //9247 #CJK UNIFIED IDEOGRAPH + {0xDEEE, 0x7879}, //9248 #CJK UNIFIED IDEOGRAPH + {0xDEEF, 0x7899}, //9249 #CJK UNIFIED IDEOGRAPH + {0xDEF0, 0x7880}, //9250 #CJK UNIFIED IDEOGRAPH + {0xDEF1, 0x7896}, //9251 #CJK UNIFIED IDEOGRAPH + {0xDEF2, 0x787B}, //9252 #CJK UNIFIED IDEOGRAPH + {0xDEF3, 0x797C}, //9253 #CJK UNIFIED IDEOGRAPH + {0xDEF4, 0x7982}, //9254 #CJK UNIFIED IDEOGRAPH + {0xDEF5, 0x797D}, //9255 #CJK UNIFIED IDEOGRAPH + {0xDEF6, 0x7979}, //9256 #CJK UNIFIED IDEOGRAPH + {0xDEF7, 0x7A11}, //9257 #CJK UNIFIED IDEOGRAPH + {0xDEF8, 0x7A18}, //9258 #CJK UNIFIED IDEOGRAPH + {0xDEF9, 0x7A19}, //9259 #CJK UNIFIED IDEOGRAPH + {0xDEFA, 0x7A12}, //9260 #CJK UNIFIED IDEOGRAPH + {0xDEFB, 0x7A17}, //9261 #CJK UNIFIED IDEOGRAPH + {0xDEFC, 0x7A15}, //9262 #CJK UNIFIED IDEOGRAPH + {0xDEFD, 0x7A22}, //9263 #CJK UNIFIED IDEOGRAPH + {0xDEFE, 0x7A13}, //9264 #CJK UNIFIED IDEOGRAPH + {0xDF40, 0x7A1B}, //9265 #CJK UNIFIED IDEOGRAPH + {0xDF41, 0x7A10}, //9266 #CJK UNIFIED IDEOGRAPH + {0xDF42, 0x7AA3}, //9267 #CJK UNIFIED IDEOGRAPH + {0xDF43, 0x7AA2}, //9268 #CJK UNIFIED IDEOGRAPH + {0xDF44, 0x7A9E}, //9269 #CJK UNIFIED IDEOGRAPH + {0xDF45, 0x7AEB}, //9270 #CJK UNIFIED IDEOGRAPH + {0xDF46, 0x7B66}, //9271 #CJK UNIFIED IDEOGRAPH + {0xDF47, 0x7B64}, //9272 #CJK UNIFIED IDEOGRAPH + {0xDF48, 0x7B6D}, //9273 #CJK UNIFIED IDEOGRAPH + {0xDF49, 0x7B74}, //9274 #CJK UNIFIED IDEOGRAPH + {0xDF4A, 0x7B69}, //9275 #CJK UNIFIED IDEOGRAPH + {0xDF4B, 0x7B72}, //9276 #CJK UNIFIED IDEOGRAPH + {0xDF4C, 0x7B65}, //9277 #CJK UNIFIED IDEOGRAPH + {0xDF4D, 0x7B73}, //9278 #CJK UNIFIED IDEOGRAPH + {0xDF4E, 0x7B71}, //9279 #CJK UNIFIED IDEOGRAPH + {0xDF4F, 0x7B70}, //9280 #CJK UNIFIED IDEOGRAPH + {0xDF50, 0x7B61}, //9281 #CJK UNIFIED IDEOGRAPH + {0xDF51, 0x7B78}, //9282 #CJK UNIFIED IDEOGRAPH + {0xDF52, 0x7B76}, //9283 #CJK UNIFIED IDEOGRAPH + {0xDF53, 0x7B63}, //9284 #CJK UNIFIED IDEOGRAPH + {0xDF54, 0x7CB2}, //9285 #CJK UNIFIED IDEOGRAPH + {0xDF55, 0x7CB4}, //9286 #CJK UNIFIED IDEOGRAPH + {0xDF56, 0x7CAF}, //9287 #CJK UNIFIED IDEOGRAPH + {0xDF57, 0x7D88}, //9288 #CJK UNIFIED IDEOGRAPH + {0xDF58, 0x7D86}, //9289 #CJK UNIFIED IDEOGRAPH + {0xDF59, 0x7D80}, //9290 #CJK UNIFIED IDEOGRAPH + {0xDF5A, 0x7D8D}, //9291 #CJK UNIFIED IDEOGRAPH + {0xDF5B, 0x7D7F}, //9292 #CJK UNIFIED IDEOGRAPH + {0xDF5C, 0x7D85}, //9293 #CJK UNIFIED IDEOGRAPH + {0xDF5D, 0x7D7A}, //9294 #CJK UNIFIED IDEOGRAPH + {0xDF5E, 0x7D8E}, //9295 #CJK UNIFIED IDEOGRAPH + {0xDF5F, 0x7D7B}, //9296 #CJK UNIFIED IDEOGRAPH + {0xDF60, 0x7D83}, //9297 #CJK UNIFIED IDEOGRAPH + {0xDF61, 0x7D7C}, //9298 #CJK UNIFIED IDEOGRAPH + {0xDF62, 0x7D8C}, //9299 #CJK UNIFIED IDEOGRAPH + {0xDF63, 0x7D94}, //9300 #CJK UNIFIED IDEOGRAPH + {0xDF64, 0x7D84}, //9301 #CJK UNIFIED IDEOGRAPH + {0xDF65, 0x7D7D}, //9302 #CJK UNIFIED IDEOGRAPH + {0xDF66, 0x7D92}, //9303 #CJK UNIFIED IDEOGRAPH + {0xDF67, 0x7F6D}, //9304 #CJK UNIFIED IDEOGRAPH + {0xDF68, 0x7F6B}, //9305 #CJK UNIFIED IDEOGRAPH + {0xDF69, 0x7F67}, //9306 #CJK UNIFIED IDEOGRAPH + {0xDF6A, 0x7F68}, //9307 #CJK UNIFIED IDEOGRAPH + {0xDF6B, 0x7F6C}, //9308 #CJK UNIFIED IDEOGRAPH + {0xDF6C, 0x7FA6}, //9309 #CJK UNIFIED IDEOGRAPH + {0xDF6D, 0x7FA5}, //9310 #CJK UNIFIED IDEOGRAPH + {0xDF6E, 0x7FA7}, //9311 #CJK UNIFIED IDEOGRAPH + {0xDF6F, 0x7FDB}, //9312 #CJK UNIFIED IDEOGRAPH + {0xDF70, 0x7FDC}, //9313 #CJK UNIFIED IDEOGRAPH + {0xDF71, 0x8021}, //9314 #CJK UNIFIED IDEOGRAPH + {0xDF72, 0x8164}, //9315 #CJK UNIFIED IDEOGRAPH + {0xDF73, 0x8160}, //9316 #CJK UNIFIED IDEOGRAPH + {0xDF74, 0x8177}, //9317 #CJK UNIFIED IDEOGRAPH + {0xDF75, 0x815C}, //9318 #CJK UNIFIED IDEOGRAPH + {0xDF76, 0x8169}, //9319 #CJK UNIFIED IDEOGRAPH + {0xDF77, 0x815B}, //9320 #CJK UNIFIED IDEOGRAPH + {0xDF78, 0x8162}, //9321 #CJK UNIFIED IDEOGRAPH + {0xDF79, 0x8172}, //9322 #CJK UNIFIED IDEOGRAPH + {0xDF7A, 0x6721}, //9323 #CJK UNIFIED IDEOGRAPH + {0xDF7B, 0x815E}, //9324 #CJK UNIFIED IDEOGRAPH + {0xDF7C, 0x8176}, //9325 #CJK UNIFIED IDEOGRAPH + {0xDF7D, 0x8167}, //9326 #CJK UNIFIED IDEOGRAPH + {0xDF7E, 0x816F}, //9327 #CJK UNIFIED IDEOGRAPH + {0xDFA1, 0x8144}, //9328 #CJK UNIFIED IDEOGRAPH + {0xDFA2, 0x8161}, //9329 #CJK UNIFIED IDEOGRAPH + {0xDFA3, 0x821D}, //9330 #CJK UNIFIED IDEOGRAPH + {0xDFA4, 0x8249}, //9331 #CJK UNIFIED IDEOGRAPH + {0xDFA5, 0x8244}, //9332 #CJK UNIFIED IDEOGRAPH + {0xDFA6, 0x8240}, //9333 #CJK UNIFIED IDEOGRAPH + {0xDFA7, 0x8242}, //9334 #CJK UNIFIED IDEOGRAPH + {0xDFA8, 0x8245}, //9335 #CJK UNIFIED IDEOGRAPH + {0xDFA9, 0x84F1}, //9336 #CJK UNIFIED IDEOGRAPH + {0xDFAA, 0x843F}, //9337 #CJK UNIFIED IDEOGRAPH + {0xDFAB, 0x8456}, //9338 #CJK UNIFIED IDEOGRAPH + {0xDFAC, 0x8476}, //9339 #CJK UNIFIED IDEOGRAPH + {0xDFAD, 0x8479}, //9340 #CJK UNIFIED IDEOGRAPH + {0xDFAE, 0x848F}, //9341 #CJK UNIFIED IDEOGRAPH + {0xDFAF, 0x848D}, //9342 #CJK UNIFIED IDEOGRAPH + {0xDFB0, 0x8465}, //9343 #CJK UNIFIED IDEOGRAPH + {0xDFB1, 0x8451}, //9344 #CJK UNIFIED IDEOGRAPH + {0xDFB2, 0x8440}, //9345 #CJK UNIFIED IDEOGRAPH + {0xDFB3, 0x8486}, //9346 #CJK UNIFIED IDEOGRAPH + {0xDFB4, 0x8467}, //9347 #CJK UNIFIED IDEOGRAPH + {0xDFB5, 0x8430}, //9348 #CJK UNIFIED IDEOGRAPH + {0xDFB6, 0x844D}, //9349 #CJK UNIFIED IDEOGRAPH + {0xDFB7, 0x847D}, //9350 #CJK UNIFIED IDEOGRAPH + {0xDFB8, 0x845A}, //9351 #CJK UNIFIED IDEOGRAPH + {0xDFB9, 0x8459}, //9352 #CJK UNIFIED IDEOGRAPH + {0xDFBA, 0x8474}, //9353 #CJK UNIFIED IDEOGRAPH + {0xDFBB, 0x8473}, //9354 #CJK UNIFIED IDEOGRAPH + {0xDFBC, 0x845D}, //9355 #CJK UNIFIED IDEOGRAPH + {0xDFBD, 0x8507}, //9356 #CJK UNIFIED IDEOGRAPH + {0xDFBE, 0x845E}, //9357 #CJK UNIFIED IDEOGRAPH + {0xDFBF, 0x8437}, //9358 #CJK UNIFIED IDEOGRAPH + {0xDFC0, 0x843A}, //9359 #CJK UNIFIED IDEOGRAPH + {0xDFC1, 0x8434}, //9360 #CJK UNIFIED IDEOGRAPH + {0xDFC2, 0x847A}, //9361 #CJK UNIFIED IDEOGRAPH + {0xDFC3, 0x8443}, //9362 #CJK UNIFIED IDEOGRAPH + {0xDFC4, 0x8478}, //9363 #CJK UNIFIED IDEOGRAPH + {0xDFC5, 0x8432}, //9364 #CJK UNIFIED IDEOGRAPH + {0xDFC6, 0x8445}, //9365 #CJK UNIFIED IDEOGRAPH + {0xDFC7, 0x8429}, //9366 #CJK UNIFIED IDEOGRAPH + {0xDFC8, 0x83D9}, //9367 #CJK UNIFIED IDEOGRAPH + {0xDFC9, 0x844B}, //9368 #CJK UNIFIED IDEOGRAPH + {0xDFCA, 0x842F}, //9369 #CJK UNIFIED IDEOGRAPH + {0xDFCB, 0x8442}, //9370 #CJK UNIFIED IDEOGRAPH + {0xDFCC, 0x842D}, //9371 #CJK UNIFIED IDEOGRAPH + {0xDFCD, 0x845F}, //9372 #CJK UNIFIED IDEOGRAPH + {0xDFCE, 0x8470}, //9373 #CJK UNIFIED IDEOGRAPH + {0xDFCF, 0x8439}, //9374 #CJK UNIFIED IDEOGRAPH + {0xDFD0, 0x844E}, //9375 #CJK UNIFIED IDEOGRAPH + {0xDFD1, 0x844C}, //9376 #CJK UNIFIED IDEOGRAPH + {0xDFD2, 0x8452}, //9377 #CJK UNIFIED IDEOGRAPH + {0xDFD3, 0x846F}, //9378 #CJK UNIFIED IDEOGRAPH + {0xDFD4, 0x84C5}, //9379 #CJK UNIFIED IDEOGRAPH + {0xDFD5, 0x848E}, //9380 #CJK UNIFIED IDEOGRAPH + {0xDFD6, 0x843B}, //9381 #CJK UNIFIED IDEOGRAPH + {0xDFD7, 0x8447}, //9382 #CJK UNIFIED IDEOGRAPH + {0xDFD8, 0x8436}, //9383 #CJK UNIFIED IDEOGRAPH + {0xDFD9, 0x8433}, //9384 #CJK UNIFIED IDEOGRAPH + {0xDFDA, 0x8468}, //9385 #CJK UNIFIED IDEOGRAPH + {0xDFDB, 0x847E}, //9386 #CJK UNIFIED IDEOGRAPH + {0xDFDC, 0x8444}, //9387 #CJK UNIFIED IDEOGRAPH + {0xDFDD, 0x842B}, //9388 #CJK UNIFIED IDEOGRAPH + {0xDFDE, 0x8460}, //9389 #CJK UNIFIED IDEOGRAPH + {0xDFDF, 0x8454}, //9390 #CJK UNIFIED IDEOGRAPH + {0xDFE0, 0x846E}, //9391 #CJK UNIFIED IDEOGRAPH + {0xDFE1, 0x8450}, //9392 #CJK UNIFIED IDEOGRAPH + {0xDFE2, 0x870B}, //9393 #CJK UNIFIED IDEOGRAPH + {0xDFE3, 0x8704}, //9394 #CJK UNIFIED IDEOGRAPH + {0xDFE4, 0x86F7}, //9395 #CJK UNIFIED IDEOGRAPH + {0xDFE5, 0x870C}, //9396 #CJK UNIFIED IDEOGRAPH + {0xDFE6, 0x86FA}, //9397 #CJK UNIFIED IDEOGRAPH + {0xDFE7, 0x86D6}, //9398 #CJK UNIFIED IDEOGRAPH + {0xDFE8, 0x86F5}, //9399 #CJK UNIFIED IDEOGRAPH + {0xDFE9, 0x874D}, //9400 #CJK UNIFIED IDEOGRAPH + {0xDFEA, 0x86F8}, //9401 #CJK UNIFIED IDEOGRAPH + {0xDFEB, 0x870E}, //9402 #CJK UNIFIED IDEOGRAPH + {0xDFEC, 0x8709}, //9403 #CJK UNIFIED IDEOGRAPH + {0xDFED, 0x8701}, //9404 #CJK UNIFIED IDEOGRAPH + {0xDFEE, 0x86F6}, //9405 #CJK UNIFIED IDEOGRAPH + {0xDFEF, 0x870D}, //9406 #CJK UNIFIED IDEOGRAPH + {0xDFF0, 0x8705}, //9407 #CJK UNIFIED IDEOGRAPH + {0xDFF1, 0x88D6}, //9408 #CJK UNIFIED IDEOGRAPH + {0xDFF2, 0x88CB}, //9409 #CJK UNIFIED IDEOGRAPH + {0xDFF3, 0x88CD}, //9410 #CJK UNIFIED IDEOGRAPH + {0xDFF4, 0x88CE}, //9411 #CJK UNIFIED IDEOGRAPH + {0xDFF5, 0x88DE}, //9412 #CJK UNIFIED IDEOGRAPH + {0xDFF6, 0x88DB}, //9413 #CJK UNIFIED IDEOGRAPH + {0xDFF7, 0x88DA}, //9414 #CJK UNIFIED IDEOGRAPH + {0xDFF8, 0x88CC}, //9415 #CJK UNIFIED IDEOGRAPH + {0xDFF9, 0x88D0}, //9416 #CJK UNIFIED IDEOGRAPH + {0xDFFA, 0x8985}, //9417 #CJK UNIFIED IDEOGRAPH + {0xDFFB, 0x899B}, //9418 #CJK UNIFIED IDEOGRAPH + {0xDFFC, 0x89DF}, //9419 #CJK UNIFIED IDEOGRAPH + {0xDFFD, 0x89E5}, //9420 #CJK UNIFIED IDEOGRAPH + {0xDFFE, 0x89E4}, //9421 #CJK UNIFIED IDEOGRAPH + {0xE040, 0x89E1}, //9422 #CJK UNIFIED IDEOGRAPH + {0xE041, 0x89E0}, //9423 #CJK UNIFIED IDEOGRAPH + {0xE042, 0x89E2}, //9424 #CJK UNIFIED IDEOGRAPH + {0xE043, 0x89DC}, //9425 #CJK UNIFIED IDEOGRAPH + {0xE044, 0x89E6}, //9426 #CJK UNIFIED IDEOGRAPH + {0xE045, 0x8A76}, //9427 #CJK UNIFIED IDEOGRAPH + {0xE046, 0x8A86}, //9428 #CJK UNIFIED IDEOGRAPH + {0xE047, 0x8A7F}, //9429 #CJK UNIFIED IDEOGRAPH + {0xE048, 0x8A61}, //9430 #CJK UNIFIED IDEOGRAPH + {0xE049, 0x8A3F}, //9431 #CJK UNIFIED IDEOGRAPH + {0xE04A, 0x8A77}, //9432 #CJK UNIFIED IDEOGRAPH + {0xE04B, 0x8A82}, //9433 #CJK UNIFIED IDEOGRAPH + {0xE04C, 0x8A84}, //9434 #CJK UNIFIED IDEOGRAPH + {0xE04D, 0x8A75}, //9435 #CJK UNIFIED IDEOGRAPH + {0xE04E, 0x8A83}, //9436 #CJK UNIFIED IDEOGRAPH + {0xE04F, 0x8A81}, //9437 #CJK UNIFIED IDEOGRAPH + {0xE050, 0x8A74}, //9438 #CJK UNIFIED IDEOGRAPH + {0xE051, 0x8A7A}, //9439 #CJK UNIFIED IDEOGRAPH + {0xE052, 0x8C3C}, //9440 #CJK UNIFIED IDEOGRAPH + {0xE053, 0x8C4B}, //9441 #CJK UNIFIED IDEOGRAPH + {0xE054, 0x8C4A}, //9442 #CJK UNIFIED IDEOGRAPH + {0xE055, 0x8C65}, //9443 #CJK UNIFIED IDEOGRAPH + {0xE056, 0x8C64}, //9444 #CJK UNIFIED IDEOGRAPH + {0xE057, 0x8C66}, //9445 #CJK UNIFIED IDEOGRAPH + {0xE058, 0x8C86}, //9446 #CJK UNIFIED IDEOGRAPH + {0xE059, 0x8C84}, //9447 #CJK UNIFIED IDEOGRAPH + {0xE05A, 0x8C85}, //9448 #CJK UNIFIED IDEOGRAPH + {0xE05B, 0x8CCC}, //9449 #CJK UNIFIED IDEOGRAPH + {0xE05C, 0x8D68}, //9450 #CJK UNIFIED IDEOGRAPH + {0xE05D, 0x8D69}, //9451 #CJK UNIFIED IDEOGRAPH + {0xE05E, 0x8D91}, //9452 #CJK UNIFIED IDEOGRAPH + {0xE05F, 0x8D8C}, //9453 #CJK UNIFIED IDEOGRAPH + {0xE060, 0x8D8E}, //9454 #CJK UNIFIED IDEOGRAPH + {0xE061, 0x8D8F}, //9455 #CJK UNIFIED IDEOGRAPH + {0xE062, 0x8D8D}, //9456 #CJK UNIFIED IDEOGRAPH + {0xE063, 0x8D93}, //9457 #CJK UNIFIED IDEOGRAPH + {0xE064, 0x8D94}, //9458 #CJK UNIFIED IDEOGRAPH + {0xE065, 0x8D90}, //9459 #CJK UNIFIED IDEOGRAPH + {0xE066, 0x8D92}, //9460 #CJK UNIFIED IDEOGRAPH + {0xE067, 0x8DF0}, //9461 #CJK UNIFIED IDEOGRAPH + {0xE068, 0x8DE0}, //9462 #CJK UNIFIED IDEOGRAPH + {0xE069, 0x8DEC}, //9463 #CJK UNIFIED IDEOGRAPH + {0xE06A, 0x8DF1}, //9464 #CJK UNIFIED IDEOGRAPH + {0xE06B, 0x8DEE}, //9465 #CJK UNIFIED IDEOGRAPH + {0xE06C, 0x8DD0}, //9466 #CJK UNIFIED IDEOGRAPH + {0xE06D, 0x8DE9}, //9467 #CJK UNIFIED IDEOGRAPH + {0xE06E, 0x8DE3}, //9468 #CJK UNIFIED IDEOGRAPH + {0xE06F, 0x8DE2}, //9469 #CJK UNIFIED IDEOGRAPH + {0xE070, 0x8DE7}, //9470 #CJK UNIFIED IDEOGRAPH + {0xE071, 0x8DF2}, //9471 #CJK UNIFIED IDEOGRAPH + {0xE072, 0x8DEB}, //9472 #CJK UNIFIED IDEOGRAPH + {0xE073, 0x8DF4}, //9473 #CJK UNIFIED IDEOGRAPH + {0xE074, 0x8F06}, //9474 #CJK UNIFIED IDEOGRAPH + {0xE075, 0x8EFF}, //9475 #CJK UNIFIED IDEOGRAPH + {0xE076, 0x8F01}, //9476 #CJK UNIFIED IDEOGRAPH + {0xE077, 0x8F00}, //9477 #CJK UNIFIED IDEOGRAPH + {0xE078, 0x8F05}, //9478 #CJK UNIFIED IDEOGRAPH + {0xE079, 0x8F07}, //9479 #CJK UNIFIED IDEOGRAPH + {0xE07A, 0x8F08}, //9480 #CJK UNIFIED IDEOGRAPH + {0xE07B, 0x8F02}, //9481 #CJK UNIFIED IDEOGRAPH + {0xE07C, 0x8F0B}, //9482 #CJK UNIFIED IDEOGRAPH + {0xE07D, 0x9052}, //9483 #CJK UNIFIED IDEOGRAPH + {0xE07E, 0x903F}, //9484 #CJK UNIFIED IDEOGRAPH + {0xE0A1, 0x9044}, //9485 #CJK UNIFIED IDEOGRAPH + {0xE0A2, 0x9049}, //9486 #CJK UNIFIED IDEOGRAPH + {0xE0A3, 0x903D}, //9487 #CJK UNIFIED IDEOGRAPH + {0xE0A4, 0x9110}, //9488 #CJK UNIFIED IDEOGRAPH + {0xE0A5, 0x910D}, //9489 #CJK UNIFIED IDEOGRAPH + {0xE0A6, 0x910F}, //9490 #CJK UNIFIED IDEOGRAPH + {0xE0A7, 0x9111}, //9491 #CJK UNIFIED IDEOGRAPH + {0xE0A8, 0x9116}, //9492 #CJK UNIFIED IDEOGRAPH + {0xE0A9, 0x9114}, //9493 #CJK UNIFIED IDEOGRAPH + {0xE0AA, 0x910B}, //9494 #CJK UNIFIED IDEOGRAPH + {0xE0AB, 0x910E}, //9495 #CJK UNIFIED IDEOGRAPH + {0xE0AC, 0x916E}, //9496 #CJK UNIFIED IDEOGRAPH + {0xE0AD, 0x916F}, //9497 #CJK UNIFIED IDEOGRAPH + {0xE0AE, 0x9248}, //9498 #CJK UNIFIED IDEOGRAPH + {0xE0AF, 0x9252}, //9499 #CJK UNIFIED IDEOGRAPH + {0xE0B0, 0x9230}, //9500 #CJK UNIFIED IDEOGRAPH + {0xE0B1, 0x923A}, //9501 #CJK UNIFIED IDEOGRAPH + {0xE0B2, 0x9266}, //9502 #CJK UNIFIED IDEOGRAPH + {0xE0B3, 0x9233}, //9503 #CJK UNIFIED IDEOGRAPH + {0xE0B4, 0x9265}, //9504 #CJK UNIFIED IDEOGRAPH + {0xE0B5, 0x925E}, //9505 #CJK UNIFIED IDEOGRAPH + {0xE0B6, 0x9283}, //9506 #CJK UNIFIED IDEOGRAPH + {0xE0B7, 0x922E}, //9507 #CJK UNIFIED IDEOGRAPH + {0xE0B8, 0x924A}, //9508 #CJK UNIFIED IDEOGRAPH + {0xE0B9, 0x9246}, //9509 #CJK UNIFIED IDEOGRAPH + {0xE0BA, 0x926D}, //9510 #CJK UNIFIED IDEOGRAPH + {0xE0BB, 0x926C}, //9511 #CJK UNIFIED IDEOGRAPH + {0xE0BC, 0x924F}, //9512 #CJK UNIFIED IDEOGRAPH + {0xE0BD, 0x9260}, //9513 #CJK UNIFIED IDEOGRAPH + {0xE0BE, 0x9267}, //9514 #CJK UNIFIED IDEOGRAPH + {0xE0BF, 0x926F}, //9515 #CJK UNIFIED IDEOGRAPH + {0xE0C0, 0x9236}, //9516 #CJK UNIFIED IDEOGRAPH + {0xE0C1, 0x9261}, //9517 #CJK UNIFIED IDEOGRAPH + {0xE0C2, 0x9270}, //9518 #CJK UNIFIED IDEOGRAPH + {0xE0C3, 0x9231}, //9519 #CJK UNIFIED IDEOGRAPH + {0xE0C4, 0x9254}, //9520 #CJK UNIFIED IDEOGRAPH + {0xE0C5, 0x9263}, //9521 #CJK UNIFIED IDEOGRAPH + {0xE0C6, 0x9250}, //9522 #CJK UNIFIED IDEOGRAPH + {0xE0C7, 0x9272}, //9523 #CJK UNIFIED IDEOGRAPH + {0xE0C8, 0x924E}, //9524 #CJK UNIFIED IDEOGRAPH + {0xE0C9, 0x9253}, //9525 #CJK UNIFIED IDEOGRAPH + {0xE0CA, 0x924C}, //9526 #CJK UNIFIED IDEOGRAPH + {0xE0CB, 0x9256}, //9527 #CJK UNIFIED IDEOGRAPH + {0xE0CC, 0x9232}, //9528 #CJK UNIFIED IDEOGRAPH + {0xE0CD, 0x959F}, //9529 #CJK UNIFIED IDEOGRAPH + {0xE0CE, 0x959C}, //9530 #CJK UNIFIED IDEOGRAPH + {0xE0CF, 0x959E}, //9531 #CJK UNIFIED IDEOGRAPH + {0xE0D0, 0x959B}, //9532 #CJK UNIFIED IDEOGRAPH + {0xE0D1, 0x9692}, //9533 #CJK UNIFIED IDEOGRAPH + {0xE0D2, 0x9693}, //9534 #CJK UNIFIED IDEOGRAPH + {0xE0D3, 0x9691}, //9535 #CJK UNIFIED IDEOGRAPH + {0xE0D4, 0x9697}, //9536 #CJK UNIFIED IDEOGRAPH + {0xE0D5, 0x96CE}, //9537 #CJK UNIFIED IDEOGRAPH + {0xE0D6, 0x96FA}, //9538 #CJK UNIFIED IDEOGRAPH + {0xE0D7, 0x96FD}, //9539 #CJK UNIFIED IDEOGRAPH + {0xE0D8, 0x96F8}, //9540 #CJK UNIFIED IDEOGRAPH + {0xE0D9, 0x96F5}, //9541 #CJK UNIFIED IDEOGRAPH + {0xE0DA, 0x9773}, //9542 #CJK UNIFIED IDEOGRAPH + {0xE0DB, 0x9777}, //9543 #CJK UNIFIED IDEOGRAPH + {0xE0DC, 0x9778}, //9544 #CJK UNIFIED IDEOGRAPH + {0xE0DD, 0x9772}, //9545 #CJK UNIFIED IDEOGRAPH + {0xE0DE, 0x980F}, //9546 #CJK UNIFIED IDEOGRAPH + {0xE0DF, 0x980D}, //9547 #CJK UNIFIED IDEOGRAPH + {0xE0E0, 0x980E}, //9548 #CJK UNIFIED IDEOGRAPH + {0xE0E1, 0x98AC}, //9549 #CJK UNIFIED IDEOGRAPH + {0xE0E2, 0x98F6}, //9550 #CJK UNIFIED IDEOGRAPH + {0xE0E3, 0x98F9}, //9551 #CJK UNIFIED IDEOGRAPH + {0xE0E4, 0x99AF}, //9552 #CJK UNIFIED IDEOGRAPH + {0xE0E5, 0x99B2}, //9553 #CJK UNIFIED IDEOGRAPH + {0xE0E6, 0x99B0}, //9554 #CJK UNIFIED IDEOGRAPH + {0xE0E7, 0x99B5}, //9555 #CJK UNIFIED IDEOGRAPH + {0xE0E8, 0x9AAD}, //9556 #CJK UNIFIED IDEOGRAPH + {0xE0E9, 0x9AAB}, //9557 #CJK UNIFIED IDEOGRAPH + {0xE0EA, 0x9B5B}, //9558 #CJK UNIFIED IDEOGRAPH + {0xE0EB, 0x9CEA}, //9559 #CJK UNIFIED IDEOGRAPH + {0xE0EC, 0x9CED}, //9560 #CJK UNIFIED IDEOGRAPH + {0xE0ED, 0x9CE7}, //9561 #CJK UNIFIED IDEOGRAPH + {0xE0EE, 0x9E80}, //9562 #CJK UNIFIED IDEOGRAPH + {0xE0EF, 0x9EFD}, //9563 #CJK UNIFIED IDEOGRAPH + {0xE0F0, 0x50E6}, //9564 #CJK UNIFIED IDEOGRAPH + {0xE0F1, 0x50D4}, //9565 #CJK UNIFIED IDEOGRAPH + {0xE0F2, 0x50D7}, //9566 #CJK UNIFIED IDEOGRAPH + {0xE0F3, 0x50E8}, //9567 #CJK UNIFIED IDEOGRAPH + {0xE0F4, 0x50F3}, //9568 #CJK UNIFIED IDEOGRAPH + {0xE0F5, 0x50DB}, //9569 #CJK UNIFIED IDEOGRAPH + {0xE0F6, 0x50EA}, //9570 #CJK UNIFIED IDEOGRAPH + {0xE0F7, 0x50DD}, //9571 #CJK UNIFIED IDEOGRAPH + {0xE0F8, 0x50E4}, //9572 #CJK UNIFIED IDEOGRAPH + {0xE0F9, 0x50D3}, //9573 #CJK UNIFIED IDEOGRAPH + {0xE0FA, 0x50EC}, //9574 #CJK UNIFIED IDEOGRAPH + {0xE0FB, 0x50F0}, //9575 #CJK UNIFIED IDEOGRAPH + {0xE0FC, 0x50EF}, //9576 #CJK UNIFIED IDEOGRAPH + {0xE0FD, 0x50E3}, //9577 #CJK UNIFIED IDEOGRAPH + {0xE0FE, 0x50E0}, //9578 #CJK UNIFIED IDEOGRAPH + {0xE140, 0x51D8}, //9579 #CJK UNIFIED IDEOGRAPH + {0xE141, 0x5280}, //9580 #CJK UNIFIED IDEOGRAPH + {0xE142, 0x5281}, //9581 #CJK UNIFIED IDEOGRAPH + {0xE143, 0x52E9}, //9582 #CJK UNIFIED IDEOGRAPH + {0xE144, 0x52EB}, //9583 #CJK UNIFIED IDEOGRAPH + {0xE145, 0x5330}, //9584 #CJK UNIFIED IDEOGRAPH + {0xE146, 0x53AC}, //9585 #CJK UNIFIED IDEOGRAPH + {0xE147, 0x5627}, //9586 #CJK UNIFIED IDEOGRAPH + {0xE148, 0x5615}, //9587 #CJK UNIFIED IDEOGRAPH + {0xE149, 0x560C}, //9588 #CJK UNIFIED IDEOGRAPH + {0xE14A, 0x5612}, //9589 #CJK UNIFIED IDEOGRAPH + {0xE14B, 0x55FC}, //9590 #CJK UNIFIED IDEOGRAPH + {0xE14C, 0x560F}, //9591 #CJK UNIFIED IDEOGRAPH + {0xE14D, 0x561C}, //9592 #CJK UNIFIED IDEOGRAPH + {0xE14E, 0x5601}, //9593 #CJK UNIFIED IDEOGRAPH + {0xE14F, 0x5613}, //9594 #CJK UNIFIED IDEOGRAPH + {0xE150, 0x5602}, //9595 #CJK UNIFIED IDEOGRAPH + {0xE151, 0x55FA}, //9596 #CJK UNIFIED IDEOGRAPH + {0xE152, 0x561D}, //9597 #CJK UNIFIED IDEOGRAPH + {0xE153, 0x5604}, //9598 #CJK UNIFIED IDEOGRAPH + {0xE154, 0x55FF}, //9599 #CJK UNIFIED IDEOGRAPH + {0xE155, 0x55F9}, //9600 #CJK UNIFIED IDEOGRAPH + {0xE156, 0x5889}, //9601 #CJK UNIFIED IDEOGRAPH + {0xE157, 0x587C}, //9602 #CJK UNIFIED IDEOGRAPH + {0xE158, 0x5890}, //9603 #CJK UNIFIED IDEOGRAPH + {0xE159, 0x5898}, //9604 #CJK UNIFIED IDEOGRAPH + {0xE15A, 0x5886}, //9605 #CJK UNIFIED IDEOGRAPH + {0xE15B, 0x5881}, //9606 #CJK UNIFIED IDEOGRAPH + {0xE15C, 0x587F}, //9607 #CJK UNIFIED IDEOGRAPH + {0xE15D, 0x5874}, //9608 #CJK UNIFIED IDEOGRAPH + {0xE15E, 0x588B}, //9609 #CJK UNIFIED IDEOGRAPH + {0xE15F, 0x587A}, //9610 #CJK UNIFIED IDEOGRAPH + {0xE160, 0x5887}, //9611 #CJK UNIFIED IDEOGRAPH + {0xE161, 0x5891}, //9612 #CJK UNIFIED IDEOGRAPH + {0xE162, 0x588E}, //9613 #CJK UNIFIED IDEOGRAPH + {0xE163, 0x5876}, //9614 #CJK UNIFIED IDEOGRAPH + {0xE164, 0x5882}, //9615 #CJK UNIFIED IDEOGRAPH + {0xE165, 0x5888}, //9616 #CJK UNIFIED IDEOGRAPH + {0xE166, 0x587B}, //9617 #CJK UNIFIED IDEOGRAPH + {0xE167, 0x5894}, //9618 #CJK UNIFIED IDEOGRAPH + {0xE168, 0x588F}, //9619 #CJK UNIFIED IDEOGRAPH + {0xE169, 0x58FE}, //9620 #CJK UNIFIED IDEOGRAPH + {0xE16A, 0x596B}, //9621 #CJK UNIFIED IDEOGRAPH + {0xE16B, 0x5ADC}, //9622 #CJK UNIFIED IDEOGRAPH + {0xE16C, 0x5AEE}, //9623 #CJK UNIFIED IDEOGRAPH + {0xE16D, 0x5AE5}, //9624 #CJK UNIFIED IDEOGRAPH + {0xE16E, 0x5AD5}, //9625 #CJK UNIFIED IDEOGRAPH + {0xE16F, 0x5AEA}, //9626 #CJK UNIFIED IDEOGRAPH + {0xE170, 0x5ADA}, //9627 #CJK UNIFIED IDEOGRAPH + {0xE171, 0x5AED}, //9628 #CJK UNIFIED IDEOGRAPH + {0xE172, 0x5AEB}, //9629 #CJK UNIFIED IDEOGRAPH + {0xE173, 0x5AF3}, //9630 #CJK UNIFIED IDEOGRAPH + {0xE174, 0x5AE2}, //9631 #CJK UNIFIED IDEOGRAPH + {0xE175, 0x5AE0}, //9632 #CJK UNIFIED IDEOGRAPH + {0xE176, 0x5ADB}, //9633 #CJK UNIFIED IDEOGRAPH + {0xE177, 0x5AEC}, //9634 #CJK UNIFIED IDEOGRAPH + {0xE178, 0x5ADE}, //9635 #CJK UNIFIED IDEOGRAPH + {0xE179, 0x5ADD}, //9636 #CJK UNIFIED IDEOGRAPH + {0xE17A, 0x5AD9}, //9637 #CJK UNIFIED IDEOGRAPH + {0xE17B, 0x5AE8}, //9638 #CJK UNIFIED IDEOGRAPH + {0xE17C, 0x5ADF}, //9639 #CJK UNIFIED IDEOGRAPH + {0xE17D, 0x5B77}, //9640 #CJK UNIFIED IDEOGRAPH + {0xE17E, 0x5BE0}, //9641 #CJK UNIFIED IDEOGRAPH + {0xE1A1, 0x5BE3}, //9642 #CJK UNIFIED IDEOGRAPH + {0xE1A2, 0x5C63}, //9643 #CJK UNIFIED IDEOGRAPH + {0xE1A3, 0x5D82}, //9644 #CJK UNIFIED IDEOGRAPH + {0xE1A4, 0x5D80}, //9645 #CJK UNIFIED IDEOGRAPH + {0xE1A5, 0x5D7D}, //9646 #CJK UNIFIED IDEOGRAPH + {0xE1A6, 0x5D86}, //9647 #CJK UNIFIED IDEOGRAPH + {0xE1A7, 0x5D7A}, //9648 #CJK UNIFIED IDEOGRAPH + {0xE1A8, 0x5D81}, //9649 #CJK UNIFIED IDEOGRAPH + {0xE1A9, 0x5D77}, //9650 #CJK UNIFIED IDEOGRAPH + {0xE1AA, 0x5D8A}, //9651 #CJK UNIFIED IDEOGRAPH + {0xE1AB, 0x5D89}, //9652 #CJK UNIFIED IDEOGRAPH + {0xE1AC, 0x5D88}, //9653 #CJK UNIFIED IDEOGRAPH + {0xE1AD, 0x5D7E}, //9654 #CJK UNIFIED IDEOGRAPH + {0xE1AE, 0x5D7C}, //9655 #CJK UNIFIED IDEOGRAPH + {0xE1AF, 0x5D8D}, //9656 #CJK UNIFIED IDEOGRAPH + {0xE1B0, 0x5D79}, //9657 #CJK UNIFIED IDEOGRAPH + {0xE1B1, 0x5D7F}, //9658 #CJK UNIFIED IDEOGRAPH + {0xE1B2, 0x5E58}, //9659 #CJK UNIFIED IDEOGRAPH + {0xE1B3, 0x5E59}, //9660 #CJK UNIFIED IDEOGRAPH + {0xE1B4, 0x5E53}, //9661 #CJK UNIFIED IDEOGRAPH + {0xE1B5, 0x5ED8}, //9662 #CJK UNIFIED IDEOGRAPH + {0xE1B6, 0x5ED1}, //9663 #CJK UNIFIED IDEOGRAPH + {0xE1B7, 0x5ED7}, //9664 #CJK UNIFIED IDEOGRAPH + {0xE1B8, 0x5ECE}, //9665 #CJK UNIFIED IDEOGRAPH + {0xE1B9, 0x5EDC}, //9666 #CJK UNIFIED IDEOGRAPH + {0xE1BA, 0x5ED5}, //9667 #CJK UNIFIED IDEOGRAPH + {0xE1BB, 0x5ED9}, //9668 #CJK UNIFIED IDEOGRAPH + {0xE1BC, 0x5ED2}, //9669 #CJK UNIFIED IDEOGRAPH + {0xE1BD, 0x5ED4}, //9670 #CJK UNIFIED IDEOGRAPH + {0xE1BE, 0x5F44}, //9671 #CJK UNIFIED IDEOGRAPH + {0xE1BF, 0x5F43}, //9672 #CJK UNIFIED IDEOGRAPH + {0xE1C0, 0x5F6F}, //9673 #CJK UNIFIED IDEOGRAPH + {0xE1C1, 0x5FB6}, //9674 #CJK UNIFIED IDEOGRAPH + {0xE1C2, 0x612C}, //9675 #CJK UNIFIED IDEOGRAPH + {0xE1C3, 0x6128}, //9676 #CJK UNIFIED IDEOGRAPH + {0xE1C4, 0x6141}, //9677 #CJK UNIFIED IDEOGRAPH + {0xE1C5, 0x615E}, //9678 #CJK UNIFIED IDEOGRAPH + {0xE1C6, 0x6171}, //9679 #CJK UNIFIED IDEOGRAPH + {0xE1C7, 0x6173}, //9680 #CJK UNIFIED IDEOGRAPH + {0xE1C8, 0x6152}, //9681 #CJK UNIFIED IDEOGRAPH + {0xE1C9, 0x6153}, //9682 #CJK UNIFIED IDEOGRAPH + {0xE1CA, 0x6172}, //9683 #CJK UNIFIED IDEOGRAPH + {0xE1CB, 0x616C}, //9684 #CJK UNIFIED IDEOGRAPH + {0xE1CC, 0x6180}, //9685 #CJK UNIFIED IDEOGRAPH + {0xE1CD, 0x6174}, //9686 #CJK UNIFIED IDEOGRAPH + {0xE1CE, 0x6154}, //9687 #CJK UNIFIED IDEOGRAPH + {0xE1CF, 0x617A}, //9688 #CJK UNIFIED IDEOGRAPH + {0xE1D0, 0x615B}, //9689 #CJK UNIFIED IDEOGRAPH + {0xE1D1, 0x6165}, //9690 #CJK UNIFIED IDEOGRAPH + {0xE1D2, 0x613B}, //9691 #CJK UNIFIED IDEOGRAPH + {0xE1D3, 0x616A}, //9692 #CJK UNIFIED IDEOGRAPH + {0xE1D4, 0x6161}, //9693 #CJK UNIFIED IDEOGRAPH + {0xE1D5, 0x6156}, //9694 #CJK UNIFIED IDEOGRAPH + {0xE1D6, 0x6229}, //9695 #CJK UNIFIED IDEOGRAPH + {0xE1D7, 0x6227}, //9696 #CJK UNIFIED IDEOGRAPH + {0xE1D8, 0x622B}, //9697 #CJK UNIFIED IDEOGRAPH + {0xE1D9, 0x642B}, //9698 #CJK UNIFIED IDEOGRAPH + {0xE1DA, 0x644D}, //9699 #CJK UNIFIED IDEOGRAPH + {0xE1DB, 0x645B}, //9700 #CJK UNIFIED IDEOGRAPH + {0xE1DC, 0x645D}, //9701 #CJK UNIFIED IDEOGRAPH + {0xE1DD, 0x6474}, //9702 #CJK UNIFIED IDEOGRAPH + {0xE1DE, 0x6476}, //9703 #CJK UNIFIED IDEOGRAPH + {0xE1DF, 0x6472}, //9704 #CJK UNIFIED IDEOGRAPH + {0xE1E0, 0x6473}, //9705 #CJK UNIFIED IDEOGRAPH + {0xE1E1, 0x647D}, //9706 #CJK UNIFIED IDEOGRAPH + {0xE1E2, 0x6475}, //9707 #CJK UNIFIED IDEOGRAPH + {0xE1E3, 0x6466}, //9708 #CJK UNIFIED IDEOGRAPH + {0xE1E4, 0x64A6}, //9709 #CJK UNIFIED IDEOGRAPH + {0xE1E5, 0x644E}, //9710 #CJK UNIFIED IDEOGRAPH + {0xE1E6, 0x6482}, //9711 #CJK UNIFIED IDEOGRAPH + {0xE1E7, 0x645E}, //9712 #CJK UNIFIED IDEOGRAPH + {0xE1E8, 0x645C}, //9713 #CJK UNIFIED IDEOGRAPH + {0xE1E9, 0x644B}, //9714 #CJK UNIFIED IDEOGRAPH + {0xE1EA, 0x6453}, //9715 #CJK UNIFIED IDEOGRAPH + {0xE1EB, 0x6460}, //9716 #CJK UNIFIED IDEOGRAPH + {0xE1EC, 0x6450}, //9717 #CJK UNIFIED IDEOGRAPH + {0xE1ED, 0x647F}, //9718 #CJK UNIFIED IDEOGRAPH + {0xE1EE, 0x643F}, //9719 #CJK UNIFIED IDEOGRAPH + {0xE1EF, 0x646C}, //9720 #CJK UNIFIED IDEOGRAPH + {0xE1F0, 0x646B}, //9721 #CJK UNIFIED IDEOGRAPH + {0xE1F1, 0x6459}, //9722 #CJK UNIFIED IDEOGRAPH + {0xE1F2, 0x6465}, //9723 #CJK UNIFIED IDEOGRAPH + {0xE1F3, 0x6477}, //9724 #CJK UNIFIED IDEOGRAPH + {0xE1F4, 0x6573}, //9725 #CJK UNIFIED IDEOGRAPH + {0xE1F5, 0x65A0}, //9726 #CJK UNIFIED IDEOGRAPH + {0xE1F6, 0x66A1}, //9727 #CJK UNIFIED IDEOGRAPH + {0xE1F7, 0x66A0}, //9728 #CJK UNIFIED IDEOGRAPH + {0xE1F8, 0x669F}, //9729 #CJK UNIFIED IDEOGRAPH + {0xE1F9, 0x6705}, //9730 #CJK UNIFIED IDEOGRAPH + {0xE1FA, 0x6704}, //9731 #CJK UNIFIED IDEOGRAPH + {0xE1FB, 0x6722}, //9732 #CJK UNIFIED IDEOGRAPH + {0xE1FC, 0x69B1}, //9733 #CJK UNIFIED IDEOGRAPH + {0xE1FD, 0x69B6}, //9734 #CJK UNIFIED IDEOGRAPH + {0xE1FE, 0x69C9}, //9735 #CJK UNIFIED IDEOGRAPH + {0xE240, 0x69A0}, //9736 #CJK UNIFIED IDEOGRAPH + {0xE241, 0x69CE}, //9737 #CJK UNIFIED IDEOGRAPH + {0xE242, 0x6996}, //9738 #CJK UNIFIED IDEOGRAPH + {0xE243, 0x69B0}, //9739 #CJK UNIFIED IDEOGRAPH + {0xE244, 0x69AC}, //9740 #CJK UNIFIED IDEOGRAPH + {0xE245, 0x69BC}, //9741 #CJK UNIFIED IDEOGRAPH + {0xE246, 0x6991}, //9742 #CJK UNIFIED IDEOGRAPH + {0xE247, 0x6999}, //9743 #CJK UNIFIED IDEOGRAPH + {0xE248, 0x698E}, //9744 #CJK UNIFIED IDEOGRAPH + {0xE249, 0x69A7}, //9745 #CJK UNIFIED IDEOGRAPH + {0xE24A, 0x698D}, //9746 #CJK UNIFIED IDEOGRAPH + {0xE24B, 0x69A9}, //9747 #CJK UNIFIED IDEOGRAPH + {0xE24C, 0x69BE}, //9748 #CJK UNIFIED IDEOGRAPH + {0xE24D, 0x69AF}, //9749 #CJK UNIFIED IDEOGRAPH + {0xE24E, 0x69BF}, //9750 #CJK UNIFIED IDEOGRAPH + {0xE24F, 0x69C4}, //9751 #CJK UNIFIED IDEOGRAPH + {0xE250, 0x69BD}, //9752 #CJK UNIFIED IDEOGRAPH + {0xE251, 0x69A4}, //9753 #CJK UNIFIED IDEOGRAPH + {0xE252, 0x69D4}, //9754 #CJK UNIFIED IDEOGRAPH + {0xE253, 0x69B9}, //9755 #CJK UNIFIED IDEOGRAPH + {0xE254, 0x69CA}, //9756 #CJK UNIFIED IDEOGRAPH + {0xE255, 0x699A}, //9757 #CJK UNIFIED IDEOGRAPH + {0xE256, 0x69CF}, //9758 #CJK UNIFIED IDEOGRAPH + {0xE257, 0x69B3}, //9759 #CJK UNIFIED IDEOGRAPH + {0xE258, 0x6993}, //9760 #CJK UNIFIED IDEOGRAPH + {0xE259, 0x69AA}, //9761 #CJK UNIFIED IDEOGRAPH + {0xE25A, 0x69A1}, //9762 #CJK UNIFIED IDEOGRAPH + {0xE25B, 0x699E}, //9763 #CJK UNIFIED IDEOGRAPH + {0xE25C, 0x69D9}, //9764 #CJK UNIFIED IDEOGRAPH + {0xE25D, 0x6997}, //9765 #CJK UNIFIED IDEOGRAPH + {0xE25E, 0x6990}, //9766 #CJK UNIFIED IDEOGRAPH + {0xE25F, 0x69C2}, //9767 #CJK UNIFIED IDEOGRAPH + {0xE260, 0x69B5}, //9768 #CJK UNIFIED IDEOGRAPH + {0xE261, 0x69A5}, //9769 #CJK UNIFIED IDEOGRAPH + {0xE262, 0x69C6}, //9770 #CJK UNIFIED IDEOGRAPH + {0xE263, 0x6B4A}, //9771 #CJK UNIFIED IDEOGRAPH + {0xE264, 0x6B4D}, //9772 #CJK UNIFIED IDEOGRAPH + {0xE265, 0x6B4B}, //9773 #CJK UNIFIED IDEOGRAPH + {0xE266, 0x6B9E}, //9774 #CJK UNIFIED IDEOGRAPH + {0xE267, 0x6B9F}, //9775 #CJK UNIFIED IDEOGRAPH + {0xE268, 0x6BA0}, //9776 #CJK UNIFIED IDEOGRAPH + {0xE269, 0x6BC3}, //9777 #CJK UNIFIED IDEOGRAPH + {0xE26A, 0x6BC4}, //9778 #CJK UNIFIED IDEOGRAPH + {0xE26B, 0x6BFE}, //9779 #CJK UNIFIED IDEOGRAPH + {0xE26C, 0x6ECE}, //9780 #CJK UNIFIED IDEOGRAPH + {0xE26D, 0x6EF5}, //9781 #CJK UNIFIED IDEOGRAPH + {0xE26E, 0x6EF1}, //9782 #CJK UNIFIED IDEOGRAPH + {0xE26F, 0x6F03}, //9783 #CJK UNIFIED IDEOGRAPH + {0xE270, 0x6F25}, //9784 #CJK UNIFIED IDEOGRAPH + {0xE271, 0x6EF8}, //9785 #CJK UNIFIED IDEOGRAPH + {0xE272, 0x6F37}, //9786 #CJK UNIFIED IDEOGRAPH + {0xE273, 0x6EFB}, //9787 #CJK UNIFIED IDEOGRAPH + {0xE274, 0x6F2E}, //9788 #CJK UNIFIED IDEOGRAPH + {0xE275, 0x6F09}, //9789 #CJK UNIFIED IDEOGRAPH + {0xE276, 0x6F4E}, //9790 #CJK UNIFIED IDEOGRAPH + {0xE277, 0x6F19}, //9791 #CJK UNIFIED IDEOGRAPH + {0xE278, 0x6F1A}, //9792 #CJK UNIFIED IDEOGRAPH + {0xE279, 0x6F27}, //9793 #CJK UNIFIED IDEOGRAPH + {0xE27A, 0x6F18}, //9794 #CJK UNIFIED IDEOGRAPH + {0xE27B, 0x6F3B}, //9795 #CJK UNIFIED IDEOGRAPH + {0xE27C, 0x6F12}, //9796 #CJK UNIFIED IDEOGRAPH + {0xE27D, 0x6EED}, //9797 #CJK UNIFIED IDEOGRAPH + {0xE27E, 0x6F0A}, //9798 #CJK UNIFIED IDEOGRAPH + {0xE2A1, 0x6F36}, //9799 #CJK UNIFIED IDEOGRAPH + {0xE2A2, 0x6F73}, //9800 #CJK UNIFIED IDEOGRAPH + {0xE2A3, 0x6EF9}, //9801 #CJK UNIFIED IDEOGRAPH + {0xE2A4, 0x6EEE}, //9802 #CJK UNIFIED IDEOGRAPH + {0xE2A5, 0x6F2D}, //9803 #CJK UNIFIED IDEOGRAPH + {0xE2A6, 0x6F40}, //9804 #CJK UNIFIED IDEOGRAPH + {0xE2A7, 0x6F30}, //9805 #CJK UNIFIED IDEOGRAPH + {0xE2A8, 0x6F3C}, //9806 #CJK UNIFIED IDEOGRAPH + {0xE2A9, 0x6F35}, //9807 #CJK UNIFIED IDEOGRAPH + {0xE2AA, 0x6EEB}, //9808 #CJK UNIFIED IDEOGRAPH + {0xE2AB, 0x6F07}, //9809 #CJK UNIFIED IDEOGRAPH + {0xE2AC, 0x6F0E}, //9810 #CJK UNIFIED IDEOGRAPH + {0xE2AD, 0x6F43}, //9811 #CJK UNIFIED IDEOGRAPH + {0xE2AE, 0x6F05}, //9812 #CJK UNIFIED IDEOGRAPH + {0xE2AF, 0x6EFD}, //9813 #CJK UNIFIED IDEOGRAPH + {0xE2B0, 0x6EF6}, //9814 #CJK UNIFIED IDEOGRAPH + {0xE2B1, 0x6F39}, //9815 #CJK UNIFIED IDEOGRAPH + {0xE2B2, 0x6F1C}, //9816 #CJK UNIFIED IDEOGRAPH + {0xE2B3, 0x6EFC}, //9817 #CJK UNIFIED IDEOGRAPH + {0xE2B4, 0x6F3A}, //9818 #CJK UNIFIED IDEOGRAPH + {0xE2B5, 0x6F1F}, //9819 #CJK UNIFIED IDEOGRAPH + {0xE2B6, 0x6F0D}, //9820 #CJK UNIFIED IDEOGRAPH + {0xE2B7, 0x6F1E}, //9821 #CJK UNIFIED IDEOGRAPH + {0xE2B8, 0x6F08}, //9822 #CJK UNIFIED IDEOGRAPH + {0xE2B9, 0x6F21}, //9823 #CJK UNIFIED IDEOGRAPH + {0xE2BA, 0x7187}, //9824 #CJK UNIFIED IDEOGRAPH + {0xE2BB, 0x7190}, //9825 #CJK UNIFIED IDEOGRAPH + {0xE2BC, 0x7189}, //9826 #CJK UNIFIED IDEOGRAPH + {0xE2BD, 0x7180}, //9827 #CJK UNIFIED IDEOGRAPH + {0xE2BE, 0x7185}, //9828 #CJK UNIFIED IDEOGRAPH + {0xE2BF, 0x7182}, //9829 #CJK UNIFIED IDEOGRAPH + {0xE2C0, 0x718F}, //9830 #CJK UNIFIED IDEOGRAPH + {0xE2C1, 0x717B}, //9831 #CJK UNIFIED IDEOGRAPH + {0xE2C2, 0x7186}, //9832 #CJK UNIFIED IDEOGRAPH + {0xE2C3, 0x7181}, //9833 #CJK UNIFIED IDEOGRAPH + {0xE2C4, 0x7197}, //9834 #CJK UNIFIED IDEOGRAPH + {0xE2C5, 0x7244}, //9835 #CJK UNIFIED IDEOGRAPH + {0xE2C6, 0x7253}, //9836 #CJK UNIFIED IDEOGRAPH + {0xE2C7, 0x7297}, //9837 #CJK UNIFIED IDEOGRAPH + {0xE2C8, 0x7295}, //9838 #CJK UNIFIED IDEOGRAPH + {0xE2C9, 0x7293}, //9839 #CJK UNIFIED IDEOGRAPH + {0xE2CA, 0x7343}, //9840 #CJK UNIFIED IDEOGRAPH + {0xE2CB, 0x734D}, //9841 #CJK UNIFIED IDEOGRAPH + {0xE2CC, 0x7351}, //9842 #CJK UNIFIED IDEOGRAPH + {0xE2CD, 0x734C}, //9843 #CJK UNIFIED IDEOGRAPH + {0xE2CE, 0x7462}, //9844 #CJK UNIFIED IDEOGRAPH + {0xE2CF, 0x7473}, //9845 #CJK UNIFIED IDEOGRAPH + {0xE2D0, 0x7471}, //9846 #CJK UNIFIED IDEOGRAPH + {0xE2D1, 0x7475}, //9847 #CJK UNIFIED IDEOGRAPH + {0xE2D2, 0x7472}, //9848 #CJK UNIFIED IDEOGRAPH + {0xE2D3, 0x7467}, //9849 #CJK UNIFIED IDEOGRAPH + {0xE2D4, 0x746E}, //9850 #CJK UNIFIED IDEOGRAPH + {0xE2D5, 0x7500}, //9851 #CJK UNIFIED IDEOGRAPH + {0xE2D6, 0x7502}, //9852 #CJK UNIFIED IDEOGRAPH + {0xE2D7, 0x7503}, //9853 #CJK UNIFIED IDEOGRAPH + {0xE2D8, 0x757D}, //9854 #CJK UNIFIED IDEOGRAPH + {0xE2D9, 0x7590}, //9855 #CJK UNIFIED IDEOGRAPH + {0xE2DA, 0x7616}, //9856 #CJK UNIFIED IDEOGRAPH + {0xE2DB, 0x7608}, //9857 #CJK UNIFIED IDEOGRAPH + {0xE2DC, 0x760C}, //9858 #CJK UNIFIED IDEOGRAPH + {0xE2DD, 0x7615}, //9859 #CJK UNIFIED IDEOGRAPH + {0xE2DE, 0x7611}, //9860 #CJK UNIFIED IDEOGRAPH + {0xE2DF, 0x760A}, //9861 #CJK UNIFIED IDEOGRAPH + {0xE2E0, 0x7614}, //9862 #CJK UNIFIED IDEOGRAPH + {0xE2E1, 0x76B8}, //9863 #CJK UNIFIED IDEOGRAPH + {0xE2E2, 0x7781}, //9864 #CJK UNIFIED IDEOGRAPH + {0xE2E3, 0x777C}, //9865 #CJK UNIFIED IDEOGRAPH + {0xE2E4, 0x7785}, //9866 #CJK UNIFIED IDEOGRAPH + {0xE2E5, 0x7782}, //9867 #CJK UNIFIED IDEOGRAPH + {0xE2E6, 0x776E}, //9868 #CJK UNIFIED IDEOGRAPH + {0xE2E7, 0x7780}, //9869 #CJK UNIFIED IDEOGRAPH + {0xE2E8, 0x776F}, //9870 #CJK UNIFIED IDEOGRAPH + {0xE2E9, 0x777E}, //9871 #CJK UNIFIED IDEOGRAPH + {0xE2EA, 0x7783}, //9872 #CJK UNIFIED IDEOGRAPH + {0xE2EB, 0x78B2}, //9873 #CJK UNIFIED IDEOGRAPH + {0xE2EC, 0x78AA}, //9874 #CJK UNIFIED IDEOGRAPH + {0xE2ED, 0x78B4}, //9875 #CJK UNIFIED IDEOGRAPH + {0xE2EE, 0x78AD}, //9876 #CJK UNIFIED IDEOGRAPH + {0xE2EF, 0x78A8}, //9877 #CJK UNIFIED IDEOGRAPH + {0xE2F0, 0x787E}, //9878 #CJK UNIFIED IDEOGRAPH + {0xE2F1, 0x78AB}, //9879 #CJK UNIFIED IDEOGRAPH + {0xE2F2, 0x789E}, //9880 #CJK UNIFIED IDEOGRAPH + {0xE2F3, 0x78A5}, //9881 #CJK UNIFIED IDEOGRAPH + {0xE2F4, 0x78A0}, //9882 #CJK UNIFIED IDEOGRAPH + {0xE2F5, 0x78AC}, //9883 #CJK UNIFIED IDEOGRAPH + {0xE2F6, 0x78A2}, //9884 #CJK UNIFIED IDEOGRAPH + {0xE2F7, 0x78A4}, //9885 #CJK UNIFIED IDEOGRAPH + {0xE2F8, 0x7998}, //9886 #CJK UNIFIED IDEOGRAPH + {0xE2F9, 0x798A}, //9887 #CJK UNIFIED IDEOGRAPH + {0xE2FA, 0x798B}, //9888 #CJK UNIFIED IDEOGRAPH + {0xE2FB, 0x7996}, //9889 #CJK UNIFIED IDEOGRAPH + {0xE2FC, 0x7995}, //9890 #CJK UNIFIED IDEOGRAPH + {0xE2FD, 0x7994}, //9891 #CJK UNIFIED IDEOGRAPH + {0xE2FE, 0x7993}, //9892 #CJK UNIFIED IDEOGRAPH + {0xE340, 0x7997}, //9893 #CJK UNIFIED IDEOGRAPH + {0xE341, 0x7988}, //9894 #CJK UNIFIED IDEOGRAPH + {0xE342, 0x7992}, //9895 #CJK UNIFIED IDEOGRAPH + {0xE343, 0x7990}, //9896 #CJK UNIFIED IDEOGRAPH + {0xE344, 0x7A2B}, //9897 #CJK UNIFIED IDEOGRAPH + {0xE345, 0x7A4A}, //9898 #CJK UNIFIED IDEOGRAPH + {0xE346, 0x7A30}, //9899 #CJK UNIFIED IDEOGRAPH + {0xE347, 0x7A2F}, //9900 #CJK UNIFIED IDEOGRAPH + {0xE348, 0x7A28}, //9901 #CJK UNIFIED IDEOGRAPH + {0xE349, 0x7A26}, //9902 #CJK UNIFIED IDEOGRAPH + {0xE34A, 0x7AA8}, //9903 #CJK UNIFIED IDEOGRAPH + {0xE34B, 0x7AAB}, //9904 #CJK UNIFIED IDEOGRAPH + {0xE34C, 0x7AAC}, //9905 #CJK UNIFIED IDEOGRAPH + {0xE34D, 0x7AEE}, //9906 #CJK UNIFIED IDEOGRAPH + {0xE34E, 0x7B88}, //9907 #CJK UNIFIED IDEOGRAPH + {0xE34F, 0x7B9C}, //9908 #CJK UNIFIED IDEOGRAPH + {0xE350, 0x7B8A}, //9909 #CJK UNIFIED IDEOGRAPH + {0xE351, 0x7B91}, //9910 #CJK UNIFIED IDEOGRAPH + {0xE352, 0x7B90}, //9911 #CJK UNIFIED IDEOGRAPH + {0xE353, 0x7B96}, //9912 #CJK UNIFIED IDEOGRAPH + {0xE354, 0x7B8D}, //9913 #CJK UNIFIED IDEOGRAPH + {0xE355, 0x7B8C}, //9914 #CJK UNIFIED IDEOGRAPH + {0xE356, 0x7B9B}, //9915 #CJK UNIFIED IDEOGRAPH + {0xE357, 0x7B8E}, //9916 #CJK UNIFIED IDEOGRAPH + {0xE358, 0x7B85}, //9917 #CJK UNIFIED IDEOGRAPH + {0xE359, 0x7B98}, //9918 #CJK UNIFIED IDEOGRAPH + {0xE35A, 0x5284}, //9919 #CJK UNIFIED IDEOGRAPH + {0xE35B, 0x7B99}, //9920 #CJK UNIFIED IDEOGRAPH + {0xE35C, 0x7BA4}, //9921 #CJK UNIFIED IDEOGRAPH + {0xE35D, 0x7B82}, //9922 #CJK UNIFIED IDEOGRAPH + {0xE35E, 0x7CBB}, //9923 #CJK UNIFIED IDEOGRAPH + {0xE35F, 0x7CBF}, //9924 #CJK UNIFIED IDEOGRAPH + {0xE360, 0x7CBC}, //9925 #CJK UNIFIED IDEOGRAPH + {0xE361, 0x7CBA}, //9926 #CJK UNIFIED IDEOGRAPH + {0xE362, 0x7DA7}, //9927 #CJK UNIFIED IDEOGRAPH + {0xE363, 0x7DB7}, //9928 #CJK UNIFIED IDEOGRAPH + {0xE364, 0x7DC2}, //9929 #CJK UNIFIED IDEOGRAPH + {0xE365, 0x7DA3}, //9930 #CJK UNIFIED IDEOGRAPH + {0xE366, 0x7DAA}, //9931 #CJK UNIFIED IDEOGRAPH + {0xE367, 0x7DC1}, //9932 #CJK UNIFIED IDEOGRAPH + {0xE368, 0x7DC0}, //9933 #CJK UNIFIED IDEOGRAPH + {0xE369, 0x7DC5}, //9934 #CJK UNIFIED IDEOGRAPH + {0xE36A, 0x7D9D}, //9935 #CJK UNIFIED IDEOGRAPH + {0xE36B, 0x7DCE}, //9936 #CJK UNIFIED IDEOGRAPH + {0xE36C, 0x7DC4}, //9937 #CJK UNIFIED IDEOGRAPH + {0xE36D, 0x7DC6}, //9938 #CJK UNIFIED IDEOGRAPH + {0xE36E, 0x7DCB}, //9939 #CJK UNIFIED IDEOGRAPH + {0xE36F, 0x7DCC}, //9940 #CJK UNIFIED IDEOGRAPH + {0xE370, 0x7DAF}, //9941 #CJK UNIFIED IDEOGRAPH + {0xE371, 0x7DB9}, //9942 #CJK UNIFIED IDEOGRAPH + {0xE372, 0x7D96}, //9943 #CJK UNIFIED IDEOGRAPH + {0xE373, 0x7DBC}, //9944 #CJK UNIFIED IDEOGRAPH + {0xE374, 0x7D9F}, //9945 #CJK UNIFIED IDEOGRAPH + {0xE375, 0x7DA6}, //9946 #CJK UNIFIED IDEOGRAPH + {0xE376, 0x7DAE}, //9947 #CJK UNIFIED IDEOGRAPH + {0xE377, 0x7DA9}, //9948 #CJK UNIFIED IDEOGRAPH + {0xE378, 0x7DA1}, //9949 #CJK UNIFIED IDEOGRAPH + {0xE379, 0x7DC9}, //9950 #CJK UNIFIED IDEOGRAPH + {0xE37A, 0x7F73}, //9951 #CJK UNIFIED IDEOGRAPH + {0xE37B, 0x7FE2}, //9952 #CJK UNIFIED IDEOGRAPH + {0xE37C, 0x7FE3}, //9953 #CJK UNIFIED IDEOGRAPH + {0xE37D, 0x7FE5}, //9954 #CJK UNIFIED IDEOGRAPH + {0xE37E, 0x7FDE}, //9955 #CJK UNIFIED IDEOGRAPH + {0xE3A1, 0x8024}, //9956 #CJK UNIFIED IDEOGRAPH + {0xE3A2, 0x805D}, //9957 #CJK UNIFIED IDEOGRAPH + {0xE3A3, 0x805C}, //9958 #CJK UNIFIED IDEOGRAPH + {0xE3A4, 0x8189}, //9959 #CJK UNIFIED IDEOGRAPH + {0xE3A5, 0x8186}, //9960 #CJK UNIFIED IDEOGRAPH + {0xE3A6, 0x8183}, //9961 #CJK UNIFIED IDEOGRAPH + {0xE3A7, 0x8187}, //9962 #CJK UNIFIED IDEOGRAPH + {0xE3A8, 0x818D}, //9963 #CJK UNIFIED IDEOGRAPH + {0xE3A9, 0x818C}, //9964 #CJK UNIFIED IDEOGRAPH + {0xE3AA, 0x818B}, //9965 #CJK UNIFIED IDEOGRAPH + {0xE3AB, 0x8215}, //9966 #CJK UNIFIED IDEOGRAPH + {0xE3AC, 0x8497}, //9967 #CJK UNIFIED IDEOGRAPH + {0xE3AD, 0x84A4}, //9968 #CJK UNIFIED IDEOGRAPH + {0xE3AE, 0x84A1}, //9969 #CJK UNIFIED IDEOGRAPH + {0xE3AF, 0x849F}, //9970 #CJK UNIFIED IDEOGRAPH + {0xE3B0, 0x84BA}, //9971 #CJK UNIFIED IDEOGRAPH + {0xE3B1, 0x84CE}, //9972 #CJK UNIFIED IDEOGRAPH + {0xE3B2, 0x84C2}, //9973 #CJK UNIFIED IDEOGRAPH + {0xE3B3, 0x84AC}, //9974 #CJK UNIFIED IDEOGRAPH + {0xE3B4, 0x84AE}, //9975 #CJK UNIFIED IDEOGRAPH + {0xE3B5, 0x84AB}, //9976 #CJK UNIFIED IDEOGRAPH + {0xE3B6, 0x84B9}, //9977 #CJK UNIFIED IDEOGRAPH + {0xE3B7, 0x84B4}, //9978 #CJK UNIFIED IDEOGRAPH + {0xE3B8, 0x84C1}, //9979 #CJK UNIFIED IDEOGRAPH + {0xE3B9, 0x84CD}, //9980 #CJK UNIFIED IDEOGRAPH + {0xE3BA, 0x84AA}, //9981 #CJK UNIFIED IDEOGRAPH + {0xE3BB, 0x849A}, //9982 #CJK UNIFIED IDEOGRAPH + {0xE3BC, 0x84B1}, //9983 #CJK UNIFIED IDEOGRAPH + {0xE3BD, 0x84D0}, //9984 #CJK UNIFIED IDEOGRAPH + {0xE3BE, 0x849D}, //9985 #CJK UNIFIED IDEOGRAPH + {0xE3BF, 0x84A7}, //9986 #CJK UNIFIED IDEOGRAPH + {0xE3C0, 0x84BB}, //9987 #CJK UNIFIED IDEOGRAPH + {0xE3C1, 0x84A2}, //9988 #CJK UNIFIED IDEOGRAPH + {0xE3C2, 0x8494}, //9989 #CJK UNIFIED IDEOGRAPH + {0xE3C3, 0x84C7}, //9990 #CJK UNIFIED IDEOGRAPH + {0xE3C4, 0x84CC}, //9991 #CJK UNIFIED IDEOGRAPH + {0xE3C5, 0x849B}, //9992 #CJK UNIFIED IDEOGRAPH + {0xE3C6, 0x84A9}, //9993 #CJK UNIFIED IDEOGRAPH + {0xE3C7, 0x84AF}, //9994 #CJK UNIFIED IDEOGRAPH + {0xE3C8, 0x84A8}, //9995 #CJK UNIFIED IDEOGRAPH + {0xE3C9, 0x84D6}, //9996 #CJK UNIFIED IDEOGRAPH + {0xE3CA, 0x8498}, //9997 #CJK UNIFIED IDEOGRAPH + {0xE3CB, 0x84B6}, //9998 #CJK UNIFIED IDEOGRAPH + {0xE3CC, 0x84CF}, //9999 #CJK UNIFIED IDEOGRAPH + {0xE3CD, 0x84A0}, //10000 #CJK UNIFIED IDEOGRAPH + {0xE3CE, 0x84D7}, //10001 #CJK UNIFIED IDEOGRAPH + {0xE3CF, 0x84D4}, //10002 #CJK UNIFIED IDEOGRAPH + {0xE3D0, 0x84D2}, //10003 #CJK UNIFIED IDEOGRAPH + {0xE3D1, 0x84DB}, //10004 #CJK UNIFIED IDEOGRAPH + {0xE3D2, 0x84B0}, //10005 #CJK UNIFIED IDEOGRAPH + {0xE3D3, 0x8491}, //10006 #CJK UNIFIED IDEOGRAPH + {0xE3D4, 0x8661}, //10007 #CJK UNIFIED IDEOGRAPH + {0xE3D5, 0x8733}, //10008 #CJK UNIFIED IDEOGRAPH + {0xE3D6, 0x8723}, //10009 #CJK UNIFIED IDEOGRAPH + {0xE3D7, 0x8728}, //10010 #CJK UNIFIED IDEOGRAPH + {0xE3D8, 0x876B}, //10011 #CJK UNIFIED IDEOGRAPH + {0xE3D9, 0x8740}, //10012 #CJK UNIFIED IDEOGRAPH + {0xE3DA, 0x872E}, //10013 #CJK UNIFIED IDEOGRAPH + {0xE3DB, 0x871E}, //10014 #CJK UNIFIED IDEOGRAPH + {0xE3DC, 0x8721}, //10015 #CJK UNIFIED IDEOGRAPH + {0xE3DD, 0x8719}, //10016 #CJK UNIFIED IDEOGRAPH + {0xE3DE, 0x871B}, //10017 #CJK UNIFIED IDEOGRAPH + {0xE3DF, 0x8743}, //10018 #CJK UNIFIED IDEOGRAPH + {0xE3E0, 0x872C}, //10019 #CJK UNIFIED IDEOGRAPH + {0xE3E1, 0x8741}, //10020 #CJK UNIFIED IDEOGRAPH + {0xE3E2, 0x873E}, //10021 #CJK UNIFIED IDEOGRAPH + {0xE3E3, 0x8746}, //10022 #CJK UNIFIED IDEOGRAPH + {0xE3E4, 0x8720}, //10023 #CJK UNIFIED IDEOGRAPH + {0xE3E5, 0x8732}, //10024 #CJK UNIFIED IDEOGRAPH + {0xE3E6, 0x872A}, //10025 #CJK UNIFIED IDEOGRAPH + {0xE3E7, 0x872D}, //10026 #CJK UNIFIED IDEOGRAPH + {0xE3E8, 0x873C}, //10027 #CJK UNIFIED IDEOGRAPH + {0xE3E9, 0x8712}, //10028 #CJK UNIFIED IDEOGRAPH + {0xE3EA, 0x873A}, //10029 #CJK UNIFIED IDEOGRAPH + {0xE3EB, 0x8731}, //10030 #CJK UNIFIED IDEOGRAPH + {0xE3EC, 0x8735}, //10031 #CJK UNIFIED IDEOGRAPH + {0xE3ED, 0x8742}, //10032 #CJK UNIFIED IDEOGRAPH + {0xE3EE, 0x8726}, //10033 #CJK UNIFIED IDEOGRAPH + {0xE3EF, 0x8727}, //10034 #CJK UNIFIED IDEOGRAPH + {0xE3F0, 0x8738}, //10035 #CJK UNIFIED IDEOGRAPH + {0xE3F1, 0x8724}, //10036 #CJK UNIFIED IDEOGRAPH + {0xE3F2, 0x871A}, //10037 #CJK UNIFIED IDEOGRAPH + {0xE3F3, 0x8730}, //10038 #CJK UNIFIED IDEOGRAPH + {0xE3F4, 0x8711}, //10039 #CJK UNIFIED IDEOGRAPH + {0xE3F5, 0x88F7}, //10040 #CJK UNIFIED IDEOGRAPH + {0xE3F6, 0x88E7}, //10041 #CJK UNIFIED IDEOGRAPH + {0xE3F7, 0x88F1}, //10042 #CJK UNIFIED IDEOGRAPH + {0xE3F8, 0x88F2}, //10043 #CJK UNIFIED IDEOGRAPH + {0xE3F9, 0x88FA}, //10044 #CJK UNIFIED IDEOGRAPH + {0xE3FA, 0x88FE}, //10045 #CJK UNIFIED IDEOGRAPH + {0xE3FB, 0x88EE}, //10046 #CJK UNIFIED IDEOGRAPH + {0xE3FC, 0x88FC}, //10047 #CJK UNIFIED IDEOGRAPH + {0xE3FD, 0x88F6}, //10048 #CJK UNIFIED IDEOGRAPH + {0xE3FE, 0x88FB}, //10049 #CJK UNIFIED IDEOGRAPH + {0xE440, 0x88F0}, //10050 #CJK UNIFIED IDEOGRAPH + {0xE441, 0x88EC}, //10051 #CJK UNIFIED IDEOGRAPH + {0xE442, 0x88EB}, //10052 #CJK UNIFIED IDEOGRAPH + {0xE443, 0x899D}, //10053 #CJK UNIFIED IDEOGRAPH + {0xE444, 0x89A1}, //10054 #CJK UNIFIED IDEOGRAPH + {0xE445, 0x899F}, //10055 #CJK UNIFIED IDEOGRAPH + {0xE446, 0x899E}, //10056 #CJK UNIFIED IDEOGRAPH + {0xE447, 0x89E9}, //10057 #CJK UNIFIED IDEOGRAPH + {0xE448, 0x89EB}, //10058 #CJK UNIFIED IDEOGRAPH + {0xE449, 0x89E8}, //10059 #CJK UNIFIED IDEOGRAPH + {0xE44A, 0x8AAB}, //10060 #CJK UNIFIED IDEOGRAPH + {0xE44B, 0x8A99}, //10061 #CJK UNIFIED IDEOGRAPH + {0xE44C, 0x8A8B}, //10062 #CJK UNIFIED IDEOGRAPH + {0xE44D, 0x8A92}, //10063 #CJK UNIFIED IDEOGRAPH + {0xE44E, 0x8A8F}, //10064 #CJK UNIFIED IDEOGRAPH + {0xE44F, 0x8A96}, //10065 #CJK UNIFIED IDEOGRAPH + {0xE450, 0x8C3D}, //10066 #CJK UNIFIED IDEOGRAPH + {0xE451, 0x8C68}, //10067 #CJK UNIFIED IDEOGRAPH + {0xE452, 0x8C69}, //10068 #CJK UNIFIED IDEOGRAPH + {0xE453, 0x8CD5}, //10069 #CJK UNIFIED IDEOGRAPH + {0xE454, 0x8CCF}, //10070 #CJK UNIFIED IDEOGRAPH + {0xE455, 0x8CD7}, //10071 #CJK UNIFIED IDEOGRAPH + {0xE456, 0x8D96}, //10072 #CJK UNIFIED IDEOGRAPH + {0xE457, 0x8E09}, //10073 #CJK UNIFIED IDEOGRAPH + {0xE458, 0x8E02}, //10074 #CJK UNIFIED IDEOGRAPH + {0xE459, 0x8DFF}, //10075 #CJK UNIFIED IDEOGRAPH + {0xE45A, 0x8E0D}, //10076 #CJK UNIFIED IDEOGRAPH + {0xE45B, 0x8DFD}, //10077 #CJK UNIFIED IDEOGRAPH + {0xE45C, 0x8E0A}, //10078 #CJK UNIFIED IDEOGRAPH + {0xE45D, 0x8E03}, //10079 #CJK UNIFIED IDEOGRAPH + {0xE45E, 0x8E07}, //10080 #CJK UNIFIED IDEOGRAPH + {0xE45F, 0x8E06}, //10081 #CJK UNIFIED IDEOGRAPH + {0xE460, 0x8E05}, //10082 #CJK UNIFIED IDEOGRAPH + {0xE461, 0x8DFE}, //10083 #CJK UNIFIED IDEOGRAPH + {0xE462, 0x8E00}, //10084 #CJK UNIFIED IDEOGRAPH + {0xE463, 0x8E04}, //10085 #CJK UNIFIED IDEOGRAPH + {0xE464, 0x8F10}, //10086 #CJK UNIFIED IDEOGRAPH + {0xE465, 0x8F11}, //10087 #CJK UNIFIED IDEOGRAPH + {0xE466, 0x8F0E}, //10088 #CJK UNIFIED IDEOGRAPH + {0xE467, 0x8F0D}, //10089 #CJK UNIFIED IDEOGRAPH + {0xE468, 0x9123}, //10090 #CJK UNIFIED IDEOGRAPH + {0xE469, 0x911C}, //10091 #CJK UNIFIED IDEOGRAPH + {0xE46A, 0x9120}, //10092 #CJK UNIFIED IDEOGRAPH + {0xE46B, 0x9122}, //10093 #CJK UNIFIED IDEOGRAPH + {0xE46C, 0x911F}, //10094 #CJK UNIFIED IDEOGRAPH + {0xE46D, 0x911D}, //10095 #CJK UNIFIED IDEOGRAPH + {0xE46E, 0x911A}, //10096 #CJK UNIFIED IDEOGRAPH + {0xE46F, 0x9124}, //10097 #CJK UNIFIED IDEOGRAPH + {0xE470, 0x9121}, //10098 #CJK UNIFIED IDEOGRAPH + {0xE471, 0x911B}, //10099 #CJK UNIFIED IDEOGRAPH + {0xE472, 0x917A}, //10100 #CJK UNIFIED IDEOGRAPH + {0xE473, 0x9172}, //10101 #CJK UNIFIED IDEOGRAPH + {0xE474, 0x9179}, //10102 #CJK UNIFIED IDEOGRAPH + {0xE475, 0x9173}, //10103 #CJK UNIFIED IDEOGRAPH + {0xE476, 0x92A5}, //10104 #CJK UNIFIED IDEOGRAPH + {0xE477, 0x92A4}, //10105 #CJK UNIFIED IDEOGRAPH + {0xE478, 0x9276}, //10106 #CJK UNIFIED IDEOGRAPH + {0xE479, 0x929B}, //10107 #CJK UNIFIED IDEOGRAPH + {0xE47A, 0x927A}, //10108 #CJK UNIFIED IDEOGRAPH + {0xE47B, 0x92A0}, //10109 #CJK UNIFIED IDEOGRAPH + {0xE47C, 0x9294}, //10110 #CJK UNIFIED IDEOGRAPH + {0xE47D, 0x92AA}, //10111 #CJK UNIFIED IDEOGRAPH + {0xE47E, 0x928D}, //10112 #CJK UNIFIED IDEOGRAPH + {0xE4A1, 0x92A6}, //10113 #CJK UNIFIED IDEOGRAPH + {0xE4A2, 0x929A}, //10114 #CJK UNIFIED IDEOGRAPH + {0xE4A3, 0x92AB}, //10115 #CJK UNIFIED IDEOGRAPH + {0xE4A4, 0x9279}, //10116 #CJK UNIFIED IDEOGRAPH + {0xE4A5, 0x9297}, //10117 #CJK UNIFIED IDEOGRAPH + {0xE4A6, 0x927F}, //10118 #CJK UNIFIED IDEOGRAPH + {0xE4A7, 0x92A3}, //10119 #CJK UNIFIED IDEOGRAPH + {0xE4A8, 0x92EE}, //10120 #CJK UNIFIED IDEOGRAPH + {0xE4A9, 0x928E}, //10121 #CJK UNIFIED IDEOGRAPH + {0xE4AA, 0x9282}, //10122 #CJK UNIFIED IDEOGRAPH + {0xE4AB, 0x9295}, //10123 #CJK UNIFIED IDEOGRAPH + {0xE4AC, 0x92A2}, //10124 #CJK UNIFIED IDEOGRAPH + {0xE4AD, 0x927D}, //10125 #CJK UNIFIED IDEOGRAPH + {0xE4AE, 0x9288}, //10126 #CJK UNIFIED IDEOGRAPH + {0xE4AF, 0x92A1}, //10127 #CJK UNIFIED IDEOGRAPH + {0xE4B0, 0x928A}, //10128 #CJK UNIFIED IDEOGRAPH + {0xE4B1, 0x9286}, //10129 #CJK UNIFIED IDEOGRAPH + {0xE4B2, 0x928C}, //10130 #CJK UNIFIED IDEOGRAPH + {0xE4B3, 0x9299}, //10131 #CJK UNIFIED IDEOGRAPH + {0xE4B4, 0x92A7}, //10132 #CJK UNIFIED IDEOGRAPH + {0xE4B5, 0x927E}, //10133 #CJK UNIFIED IDEOGRAPH + {0xE4B6, 0x9287}, //10134 #CJK UNIFIED IDEOGRAPH + {0xE4B7, 0x92A9}, //10135 #CJK UNIFIED IDEOGRAPH + {0xE4B8, 0x929D}, //10136 #CJK UNIFIED IDEOGRAPH + {0xE4B9, 0x928B}, //10137 #CJK UNIFIED IDEOGRAPH + {0xE4BA, 0x922D}, //10138 #CJK UNIFIED IDEOGRAPH + {0xE4BB, 0x969E}, //10139 #CJK UNIFIED IDEOGRAPH + {0xE4BC, 0x96A1}, //10140 #CJK UNIFIED IDEOGRAPH + {0xE4BD, 0x96FF}, //10141 #CJK UNIFIED IDEOGRAPH + {0xE4BE, 0x9758}, //10142 #CJK UNIFIED IDEOGRAPH + {0xE4BF, 0x977D}, //10143 #CJK UNIFIED IDEOGRAPH + {0xE4C0, 0x977A}, //10144 #CJK UNIFIED IDEOGRAPH + {0xE4C1, 0x977E}, //10145 #CJK UNIFIED IDEOGRAPH + {0xE4C2, 0x9783}, //10146 #CJK UNIFIED IDEOGRAPH + {0xE4C3, 0x9780}, //10147 #CJK UNIFIED IDEOGRAPH + {0xE4C4, 0x9782}, //10148 #CJK UNIFIED IDEOGRAPH + {0xE4C5, 0x977B}, //10149 #CJK UNIFIED IDEOGRAPH + {0xE4C6, 0x9784}, //10150 #CJK UNIFIED IDEOGRAPH + {0xE4C7, 0x9781}, //10151 #CJK UNIFIED IDEOGRAPH + {0xE4C8, 0x977F}, //10152 #CJK UNIFIED IDEOGRAPH + {0xE4C9, 0x97CE}, //10153 #CJK UNIFIED IDEOGRAPH + {0xE4CA, 0x97CD}, //10154 #CJK UNIFIED IDEOGRAPH + {0xE4CB, 0x9816}, //10155 #CJK UNIFIED IDEOGRAPH + {0xE4CC, 0x98AD}, //10156 #CJK UNIFIED IDEOGRAPH + {0xE4CD, 0x98AE}, //10157 #CJK UNIFIED IDEOGRAPH + {0xE4CE, 0x9902}, //10158 #CJK UNIFIED IDEOGRAPH + {0xE4CF, 0x9900}, //10159 #CJK UNIFIED IDEOGRAPH + {0xE4D0, 0x9907}, //10160 #CJK UNIFIED IDEOGRAPH + {0xE4D1, 0x999D}, //10161 #CJK UNIFIED IDEOGRAPH + {0xE4D2, 0x999C}, //10162 #CJK UNIFIED IDEOGRAPH + {0xE4D3, 0x99C3}, //10163 #CJK UNIFIED IDEOGRAPH + {0xE4D4, 0x99B9}, //10164 #CJK UNIFIED IDEOGRAPH + {0xE4D5, 0x99BB}, //10165 #CJK UNIFIED IDEOGRAPH + {0xE4D6, 0x99BA}, //10166 #CJK UNIFIED IDEOGRAPH + {0xE4D7, 0x99C2}, //10167 #CJK UNIFIED IDEOGRAPH + {0xE4D8, 0x99BD}, //10168 #CJK UNIFIED IDEOGRAPH + {0xE4D9, 0x99C7}, //10169 #CJK UNIFIED IDEOGRAPH + {0xE4DA, 0x9AB1}, //10170 #CJK UNIFIED IDEOGRAPH + {0xE4DB, 0x9AE3}, //10171 #CJK UNIFIED IDEOGRAPH + {0xE4DC, 0x9AE7}, //10172 #CJK UNIFIED IDEOGRAPH + {0xE4DD, 0x9B3E}, //10173 #CJK UNIFIED IDEOGRAPH + {0xE4DE, 0x9B3F}, //10174 #CJK UNIFIED IDEOGRAPH + {0xE4DF, 0x9B60}, //10175 #CJK UNIFIED IDEOGRAPH + {0xE4E0, 0x9B61}, //10176 #CJK UNIFIED IDEOGRAPH + {0xE4E1, 0x9B5F}, //10177 #CJK UNIFIED IDEOGRAPH + {0xE4E2, 0x9CF1}, //10178 #CJK UNIFIED IDEOGRAPH + {0xE4E3, 0x9CF2}, //10179 #CJK UNIFIED IDEOGRAPH + {0xE4E4, 0x9CF5}, //10180 #CJK UNIFIED IDEOGRAPH + {0xE4E5, 0x9EA7}, //10181 #CJK UNIFIED IDEOGRAPH + {0xE4E6, 0x50FF}, //10182 #CJK UNIFIED IDEOGRAPH + {0xE4E7, 0x5103}, //10183 #CJK UNIFIED IDEOGRAPH + {0xE4E8, 0x5130}, //10184 #CJK UNIFIED IDEOGRAPH + {0xE4E9, 0x50F8}, //10185 #CJK UNIFIED IDEOGRAPH + {0xE4EA, 0x5106}, //10186 #CJK UNIFIED IDEOGRAPH + {0xE4EB, 0x5107}, //10187 #CJK UNIFIED IDEOGRAPH + {0xE4EC, 0x50F6}, //10188 #CJK UNIFIED IDEOGRAPH + {0xE4ED, 0x50FE}, //10189 #CJK UNIFIED IDEOGRAPH + {0xE4EE, 0x510B}, //10190 #CJK UNIFIED IDEOGRAPH + {0xE4EF, 0x510C}, //10191 #CJK UNIFIED IDEOGRAPH + {0xE4F0, 0x50FD}, //10192 #CJK UNIFIED IDEOGRAPH + {0xE4F1, 0x510A}, //10193 #CJK UNIFIED IDEOGRAPH + {0xE4F2, 0x528B}, //10194 #CJK UNIFIED IDEOGRAPH + {0xE4F3, 0x528C}, //10195 #CJK UNIFIED IDEOGRAPH + {0xE4F4, 0x52F1}, //10196 #CJK UNIFIED IDEOGRAPH + {0xE4F5, 0x52EF}, //10197 #CJK UNIFIED IDEOGRAPH + {0xE4F6, 0x5648}, //10198 #CJK UNIFIED IDEOGRAPH + {0xE4F7, 0x5642}, //10199 #CJK UNIFIED IDEOGRAPH + {0xE4F8, 0x564C}, //10200 #CJK UNIFIED IDEOGRAPH + {0xE4F9, 0x5635}, //10201 #CJK UNIFIED IDEOGRAPH + {0xE4FA, 0x5641}, //10202 #CJK UNIFIED IDEOGRAPH + {0xE4FB, 0x564A}, //10203 #CJK UNIFIED IDEOGRAPH + {0xE4FC, 0x5649}, //10204 #CJK UNIFIED IDEOGRAPH + {0xE4FD, 0x5646}, //10205 #CJK UNIFIED IDEOGRAPH + {0xE4FE, 0x5658}, //10206 #CJK UNIFIED IDEOGRAPH + {0xE540, 0x565A}, //10207 #CJK UNIFIED IDEOGRAPH + {0xE541, 0x5640}, //10208 #CJK UNIFIED IDEOGRAPH + {0xE542, 0x5633}, //10209 #CJK UNIFIED IDEOGRAPH + {0xE543, 0x563D}, //10210 #CJK UNIFIED IDEOGRAPH + {0xE544, 0x562C}, //10211 #CJK UNIFIED IDEOGRAPH + {0xE545, 0x563E}, //10212 #CJK UNIFIED IDEOGRAPH + {0xE546, 0x5638}, //10213 #CJK UNIFIED IDEOGRAPH + {0xE547, 0x562A}, //10214 #CJK UNIFIED IDEOGRAPH + {0xE548, 0x563A}, //10215 #CJK UNIFIED IDEOGRAPH + {0xE549, 0x571A}, //10216 #CJK UNIFIED IDEOGRAPH + {0xE54A, 0x58AB}, //10217 #CJK UNIFIED IDEOGRAPH + {0xE54B, 0x589D}, //10218 #CJK UNIFIED IDEOGRAPH + {0xE54C, 0x58B1}, //10219 #CJK UNIFIED IDEOGRAPH + {0xE54D, 0x58A0}, //10220 #CJK UNIFIED IDEOGRAPH + {0xE54E, 0x58A3}, //10221 #CJK UNIFIED IDEOGRAPH + {0xE54F, 0x58AF}, //10222 #CJK UNIFIED IDEOGRAPH + {0xE550, 0x58AC}, //10223 #CJK UNIFIED IDEOGRAPH + {0xE551, 0x58A5}, //10224 #CJK UNIFIED IDEOGRAPH + {0xE552, 0x58A1}, //10225 #CJK UNIFIED IDEOGRAPH + {0xE553, 0x58FF}, //10226 #CJK UNIFIED IDEOGRAPH + {0xE554, 0x5AFF}, //10227 #CJK UNIFIED IDEOGRAPH + {0xE555, 0x5AF4}, //10228 #CJK UNIFIED IDEOGRAPH + {0xE556, 0x5AFD}, //10229 #CJK UNIFIED IDEOGRAPH + {0xE557, 0x5AF7}, //10230 #CJK UNIFIED IDEOGRAPH + {0xE558, 0x5AF6}, //10231 #CJK UNIFIED IDEOGRAPH + {0xE559, 0x5B03}, //10232 #CJK UNIFIED IDEOGRAPH + {0xE55A, 0x5AF8}, //10233 #CJK UNIFIED IDEOGRAPH + {0xE55B, 0x5B02}, //10234 #CJK UNIFIED IDEOGRAPH + {0xE55C, 0x5AF9}, //10235 #CJK UNIFIED IDEOGRAPH + {0xE55D, 0x5B01}, //10236 #CJK UNIFIED IDEOGRAPH + {0xE55E, 0x5B07}, //10237 #CJK UNIFIED IDEOGRAPH + {0xE55F, 0x5B05}, //10238 #CJK UNIFIED IDEOGRAPH + {0xE560, 0x5B0F}, //10239 #CJK UNIFIED IDEOGRAPH + {0xE561, 0x5C67}, //10240 #CJK UNIFIED IDEOGRAPH + {0xE562, 0x5D99}, //10241 #CJK UNIFIED IDEOGRAPH + {0xE563, 0x5D97}, //10242 #CJK UNIFIED IDEOGRAPH + {0xE564, 0x5D9F}, //10243 #CJK UNIFIED IDEOGRAPH + {0xE565, 0x5D92}, //10244 #CJK UNIFIED IDEOGRAPH + {0xE566, 0x5DA2}, //10245 #CJK UNIFIED IDEOGRAPH + {0xE567, 0x5D93}, //10246 #CJK UNIFIED IDEOGRAPH + {0xE568, 0x5D95}, //10247 #CJK UNIFIED IDEOGRAPH + {0xE569, 0x5DA0}, //10248 #CJK UNIFIED IDEOGRAPH + {0xE56A, 0x5D9C}, //10249 #CJK UNIFIED IDEOGRAPH + {0xE56B, 0x5DA1}, //10250 #CJK UNIFIED IDEOGRAPH + {0xE56C, 0x5D9A}, //10251 #CJK UNIFIED IDEOGRAPH + {0xE56D, 0x5D9E}, //10252 #CJK UNIFIED IDEOGRAPH + {0xE56E, 0x5E69}, //10253 #CJK UNIFIED IDEOGRAPH + {0xE56F, 0x5E5D}, //10254 #CJK UNIFIED IDEOGRAPH + {0xE570, 0x5E60}, //10255 #CJK UNIFIED IDEOGRAPH + {0xE571, 0x5E5C}, //10256 #CJK UNIFIED IDEOGRAPH + {0xE572, 0x7DF3}, //10257 #CJK UNIFIED IDEOGRAPH + {0xE573, 0x5EDB}, //10258 #CJK UNIFIED IDEOGRAPH + {0xE574, 0x5EDE}, //10259 #CJK UNIFIED IDEOGRAPH + {0xE575, 0x5EE1}, //10260 #CJK UNIFIED IDEOGRAPH + {0xE576, 0x5F49}, //10261 #CJK UNIFIED IDEOGRAPH + {0xE577, 0x5FB2}, //10262 #CJK UNIFIED IDEOGRAPH + {0xE578, 0x618B}, //10263 #CJK UNIFIED IDEOGRAPH + {0xE579, 0x6183}, //10264 #CJK UNIFIED IDEOGRAPH + {0xE57A, 0x6179}, //10265 #CJK UNIFIED IDEOGRAPH + {0xE57B, 0x61B1}, //10266 #CJK UNIFIED IDEOGRAPH + {0xE57C, 0x61B0}, //10267 #CJK UNIFIED IDEOGRAPH + {0xE57D, 0x61A2}, //10268 #CJK UNIFIED IDEOGRAPH + {0xE57E, 0x6189}, //10269 #CJK UNIFIED IDEOGRAPH + {0xE5A1, 0x619B}, //10270 #CJK UNIFIED IDEOGRAPH + {0xE5A2, 0x6193}, //10271 #CJK UNIFIED IDEOGRAPH + {0xE5A3, 0x61AF}, //10272 #CJK UNIFIED IDEOGRAPH + {0xE5A4, 0x61AD}, //10273 #CJK UNIFIED IDEOGRAPH + {0xE5A5, 0x619F}, //10274 #CJK UNIFIED IDEOGRAPH + {0xE5A6, 0x6192}, //10275 #CJK UNIFIED IDEOGRAPH + {0xE5A7, 0x61AA}, //10276 #CJK UNIFIED IDEOGRAPH + {0xE5A8, 0x61A1}, //10277 #CJK UNIFIED IDEOGRAPH + {0xE5A9, 0x618D}, //10278 #CJK UNIFIED IDEOGRAPH + {0xE5AA, 0x6166}, //10279 #CJK UNIFIED IDEOGRAPH + {0xE5AB, 0x61B3}, //10280 #CJK UNIFIED IDEOGRAPH + {0xE5AC, 0x622D}, //10281 #CJK UNIFIED IDEOGRAPH + {0xE5AD, 0x646E}, //10282 #CJK UNIFIED IDEOGRAPH + {0xE5AE, 0x6470}, //10283 #CJK UNIFIED IDEOGRAPH + {0xE5AF, 0x6496}, //10284 #CJK UNIFIED IDEOGRAPH + {0xE5B0, 0x64A0}, //10285 #CJK UNIFIED IDEOGRAPH + {0xE5B1, 0x6485}, //10286 #CJK UNIFIED IDEOGRAPH + {0xE5B2, 0x6497}, //10287 #CJK UNIFIED IDEOGRAPH + {0xE5B3, 0x649C}, //10288 #CJK UNIFIED IDEOGRAPH + {0xE5B4, 0x648F}, //10289 #CJK UNIFIED IDEOGRAPH + {0xE5B5, 0x648B}, //10290 #CJK UNIFIED IDEOGRAPH + {0xE5B6, 0x648A}, //10291 #CJK UNIFIED IDEOGRAPH + {0xE5B7, 0x648C}, //10292 #CJK UNIFIED IDEOGRAPH + {0xE5B8, 0x64A3}, //10293 #CJK UNIFIED IDEOGRAPH + {0xE5B9, 0x649F}, //10294 #CJK UNIFIED IDEOGRAPH + {0xE5BA, 0x6468}, //10295 #CJK UNIFIED IDEOGRAPH + {0xE5BB, 0x64B1}, //10296 #CJK UNIFIED IDEOGRAPH + {0xE5BC, 0x6498}, //10297 #CJK UNIFIED IDEOGRAPH + {0xE5BD, 0x6576}, //10298 #CJK UNIFIED IDEOGRAPH + {0xE5BE, 0x657A}, //10299 #CJK UNIFIED IDEOGRAPH + {0xE5BF, 0x6579}, //10300 #CJK UNIFIED IDEOGRAPH + {0xE5C0, 0x657B}, //10301 #CJK UNIFIED IDEOGRAPH + {0xE5C1, 0x65B2}, //10302 #CJK UNIFIED IDEOGRAPH + {0xE5C2, 0x65B3}, //10303 #CJK UNIFIED IDEOGRAPH + {0xE5C3, 0x66B5}, //10304 #CJK UNIFIED IDEOGRAPH + {0xE5C4, 0x66B0}, //10305 #CJK UNIFIED IDEOGRAPH + {0xE5C5, 0x66A9}, //10306 #CJK UNIFIED IDEOGRAPH + {0xE5C6, 0x66B2}, //10307 #CJK UNIFIED IDEOGRAPH + {0xE5C7, 0x66B7}, //10308 #CJK UNIFIED IDEOGRAPH + {0xE5C8, 0x66AA}, //10309 #CJK UNIFIED IDEOGRAPH + {0xE5C9, 0x66AF}, //10310 #CJK UNIFIED IDEOGRAPH + {0xE5CA, 0x6A00}, //10311 #CJK UNIFIED IDEOGRAPH + {0xE5CB, 0x6A06}, //10312 #CJK UNIFIED IDEOGRAPH + {0xE5CC, 0x6A17}, //10313 #CJK UNIFIED IDEOGRAPH + {0xE5CD, 0x69E5}, //10314 #CJK UNIFIED IDEOGRAPH + {0xE5CE, 0x69F8}, //10315 #CJK UNIFIED IDEOGRAPH + {0xE5CF, 0x6A15}, //10316 #CJK UNIFIED IDEOGRAPH + {0xE5D0, 0x69F1}, //10317 #CJK UNIFIED IDEOGRAPH + {0xE5D1, 0x69E4}, //10318 #CJK UNIFIED IDEOGRAPH + {0xE5D2, 0x6A20}, //10319 #CJK UNIFIED IDEOGRAPH + {0xE5D3, 0x69FF}, //10320 #CJK UNIFIED IDEOGRAPH + {0xE5D4, 0x69EC}, //10321 #CJK UNIFIED IDEOGRAPH + {0xE5D5, 0x69E2}, //10322 #CJK UNIFIED IDEOGRAPH + {0xE5D6, 0x6A1B}, //10323 #CJK UNIFIED IDEOGRAPH + {0xE5D7, 0x6A1D}, //10324 #CJK UNIFIED IDEOGRAPH + {0xE5D8, 0x69FE}, //10325 #CJK UNIFIED IDEOGRAPH + {0xE5D9, 0x6A27}, //10326 #CJK UNIFIED IDEOGRAPH + {0xE5DA, 0x69F2}, //10327 #CJK UNIFIED IDEOGRAPH + {0xE5DB, 0x69EE}, //10328 #CJK UNIFIED IDEOGRAPH + {0xE5DC, 0x6A14}, //10329 #CJK UNIFIED IDEOGRAPH + {0xE5DD, 0x69F7}, //10330 #CJK UNIFIED IDEOGRAPH + {0xE5DE, 0x69E7}, //10331 #CJK UNIFIED IDEOGRAPH + {0xE5DF, 0x6A40}, //10332 #CJK UNIFIED IDEOGRAPH + {0xE5E0, 0x6A08}, //10333 #CJK UNIFIED IDEOGRAPH + {0xE5E1, 0x69E6}, //10334 #CJK UNIFIED IDEOGRAPH + {0xE5E2, 0x69FB}, //10335 #CJK UNIFIED IDEOGRAPH + {0xE5E3, 0x6A0D}, //10336 #CJK UNIFIED IDEOGRAPH + {0xE5E4, 0x69FC}, //10337 #CJK UNIFIED IDEOGRAPH + {0xE5E5, 0x69EB}, //10338 #CJK UNIFIED IDEOGRAPH + {0xE5E6, 0x6A09}, //10339 #CJK UNIFIED IDEOGRAPH + {0xE5E7, 0x6A04}, //10340 #CJK UNIFIED IDEOGRAPH + {0xE5E8, 0x6A18}, //10341 #CJK UNIFIED IDEOGRAPH + {0xE5E9, 0x6A25}, //10342 #CJK UNIFIED IDEOGRAPH + {0xE5EA, 0x6A0F}, //10343 #CJK UNIFIED IDEOGRAPH + {0xE5EB, 0x69F6}, //10344 #CJK UNIFIED IDEOGRAPH + {0xE5EC, 0x6A26}, //10345 #CJK UNIFIED IDEOGRAPH + {0xE5ED, 0x6A07}, //10346 #CJK UNIFIED IDEOGRAPH + {0xE5EE, 0x69F4}, //10347 #CJK UNIFIED IDEOGRAPH + {0xE5EF, 0x6A16}, //10348 #CJK UNIFIED IDEOGRAPH + {0xE5F0, 0x6B51}, //10349 #CJK UNIFIED IDEOGRAPH + {0xE5F1, 0x6BA5}, //10350 #CJK UNIFIED IDEOGRAPH + {0xE5F2, 0x6BA3}, //10351 #CJK UNIFIED IDEOGRAPH + {0xE5F3, 0x6BA2}, //10352 #CJK UNIFIED IDEOGRAPH + {0xE5F4, 0x6BA6}, //10353 #CJK UNIFIED IDEOGRAPH + {0xE5F5, 0x6C01}, //10354 #CJK UNIFIED IDEOGRAPH + {0xE5F6, 0x6C00}, //10355 #CJK UNIFIED IDEOGRAPH + {0xE5F7, 0x6BFF}, //10356 #CJK UNIFIED IDEOGRAPH + {0xE5F8, 0x6C02}, //10357 #CJK UNIFIED IDEOGRAPH + {0xE5F9, 0x6F41}, //10358 #CJK UNIFIED IDEOGRAPH + {0xE5FA, 0x6F26}, //10359 #CJK UNIFIED IDEOGRAPH + {0xE5FB, 0x6F7E}, //10360 #CJK UNIFIED IDEOGRAPH + {0xE5FC, 0x6F87}, //10361 #CJK UNIFIED IDEOGRAPH + {0xE5FD, 0x6FC6}, //10362 #CJK UNIFIED IDEOGRAPH + {0xE5FE, 0x6F92}, //10363 #CJK UNIFIED IDEOGRAPH + {0xE640, 0x6F8D}, //10364 #CJK UNIFIED IDEOGRAPH + {0xE641, 0x6F89}, //10365 #CJK UNIFIED IDEOGRAPH + {0xE642, 0x6F8C}, //10366 #CJK UNIFIED IDEOGRAPH + {0xE643, 0x6F62}, //10367 #CJK UNIFIED IDEOGRAPH + {0xE644, 0x6F4F}, //10368 #CJK UNIFIED IDEOGRAPH + {0xE645, 0x6F85}, //10369 #CJK UNIFIED IDEOGRAPH + {0xE646, 0x6F5A}, //10370 #CJK UNIFIED IDEOGRAPH + {0xE647, 0x6F96}, //10371 #CJK UNIFIED IDEOGRAPH + {0xE648, 0x6F76}, //10372 #CJK UNIFIED IDEOGRAPH + {0xE649, 0x6F6C}, //10373 #CJK UNIFIED IDEOGRAPH + {0xE64A, 0x6F82}, //10374 #CJK UNIFIED IDEOGRAPH + {0xE64B, 0x6F55}, //10375 #CJK UNIFIED IDEOGRAPH + {0xE64C, 0x6F72}, //10376 #CJK UNIFIED IDEOGRAPH + {0xE64D, 0x6F52}, //10377 #CJK UNIFIED IDEOGRAPH + {0xE64E, 0x6F50}, //10378 #CJK UNIFIED IDEOGRAPH + {0xE64F, 0x6F57}, //10379 #CJK UNIFIED IDEOGRAPH + {0xE650, 0x6F94}, //10380 #CJK UNIFIED IDEOGRAPH + {0xE651, 0x6F93}, //10381 #CJK UNIFIED IDEOGRAPH + {0xE652, 0x6F5D}, //10382 #CJK UNIFIED IDEOGRAPH + {0xE653, 0x6F00}, //10383 #CJK UNIFIED IDEOGRAPH + {0xE654, 0x6F61}, //10384 #CJK UNIFIED IDEOGRAPH + {0xE655, 0x6F6B}, //10385 #CJK UNIFIED IDEOGRAPH + {0xE656, 0x6F7D}, //10386 #CJK UNIFIED IDEOGRAPH + {0xE657, 0x6F67}, //10387 #CJK UNIFIED IDEOGRAPH + {0xE658, 0x6F90}, //10388 #CJK UNIFIED IDEOGRAPH + {0xE659, 0x6F53}, //10389 #CJK UNIFIED IDEOGRAPH + {0xE65A, 0x6F8B}, //10390 #CJK UNIFIED IDEOGRAPH + {0xE65B, 0x6F69}, //10391 #CJK UNIFIED IDEOGRAPH + {0xE65C, 0x6F7F}, //10392 #CJK UNIFIED IDEOGRAPH + {0xE65D, 0x6F95}, //10393 #CJK UNIFIED IDEOGRAPH + {0xE65E, 0x6F63}, //10394 #CJK UNIFIED IDEOGRAPH + {0xE65F, 0x6F77}, //10395 #CJK UNIFIED IDEOGRAPH + {0xE660, 0x6F6A}, //10396 #CJK UNIFIED IDEOGRAPH + {0xE661, 0x6F7B}, //10397 #CJK UNIFIED IDEOGRAPH + {0xE662, 0x71B2}, //10398 #CJK UNIFIED IDEOGRAPH + {0xE663, 0x71AF}, //10399 #CJK UNIFIED IDEOGRAPH + {0xE664, 0x719B}, //10400 #CJK UNIFIED IDEOGRAPH + {0xE665, 0x71B0}, //10401 #CJK UNIFIED IDEOGRAPH + {0xE666, 0x71A0}, //10402 #CJK UNIFIED IDEOGRAPH + {0xE667, 0x719A}, //10403 #CJK UNIFIED IDEOGRAPH + {0xE668, 0x71A9}, //10404 #CJK UNIFIED IDEOGRAPH + {0xE669, 0x71B5}, //10405 #CJK UNIFIED IDEOGRAPH + {0xE66A, 0x719D}, //10406 #CJK UNIFIED IDEOGRAPH + {0xE66B, 0x71A5}, //10407 #CJK UNIFIED IDEOGRAPH + {0xE66C, 0x719E}, //10408 #CJK UNIFIED IDEOGRAPH + {0xE66D, 0x71A4}, //10409 #CJK UNIFIED IDEOGRAPH + {0xE66E, 0x71A1}, //10410 #CJK UNIFIED IDEOGRAPH + {0xE66F, 0x71AA}, //10411 #CJK UNIFIED IDEOGRAPH + {0xE670, 0x719C}, //10412 #CJK UNIFIED IDEOGRAPH + {0xE671, 0x71A7}, //10413 #CJK UNIFIED IDEOGRAPH + {0xE672, 0x71B3}, //10414 #CJK UNIFIED IDEOGRAPH + {0xE673, 0x7298}, //10415 #CJK UNIFIED IDEOGRAPH + {0xE674, 0x729A}, //10416 #CJK UNIFIED IDEOGRAPH + {0xE675, 0x7358}, //10417 #CJK UNIFIED IDEOGRAPH + {0xE676, 0x7352}, //10418 #CJK UNIFIED IDEOGRAPH + {0xE677, 0x735E}, //10419 #CJK UNIFIED IDEOGRAPH + {0xE678, 0x735F}, //10420 #CJK UNIFIED IDEOGRAPH + {0xE679, 0x7360}, //10421 #CJK UNIFIED IDEOGRAPH + {0xE67A, 0x735D}, //10422 #CJK UNIFIED IDEOGRAPH + {0xE67B, 0x735B}, //10423 #CJK UNIFIED IDEOGRAPH + {0xE67C, 0x7361}, //10424 #CJK UNIFIED IDEOGRAPH + {0xE67D, 0x735A}, //10425 #CJK UNIFIED IDEOGRAPH + {0xE67E, 0x7359}, //10426 #CJK UNIFIED IDEOGRAPH + {0xE6A1, 0x7362}, //10427 #CJK UNIFIED IDEOGRAPH + {0xE6A2, 0x7487}, //10428 #CJK UNIFIED IDEOGRAPH + {0xE6A3, 0x7489}, //10429 #CJK UNIFIED IDEOGRAPH + {0xE6A4, 0x748A}, //10430 #CJK UNIFIED IDEOGRAPH + {0xE6A5, 0x7486}, //10431 #CJK UNIFIED IDEOGRAPH + {0xE6A6, 0x7481}, //10432 #CJK UNIFIED IDEOGRAPH + {0xE6A7, 0x747D}, //10433 #CJK UNIFIED IDEOGRAPH + {0xE6A8, 0x7485}, //10434 #CJK UNIFIED IDEOGRAPH + {0xE6A9, 0x7488}, //10435 #CJK UNIFIED IDEOGRAPH + {0xE6AA, 0x747C}, //10436 #CJK UNIFIED IDEOGRAPH + {0xE6AB, 0x7479}, //10437 #CJK UNIFIED IDEOGRAPH + {0xE6AC, 0x7508}, //10438 #CJK UNIFIED IDEOGRAPH + {0xE6AD, 0x7507}, //10439 #CJK UNIFIED IDEOGRAPH + {0xE6AE, 0x757E}, //10440 #CJK UNIFIED IDEOGRAPH + {0xE6AF, 0x7625}, //10441 #CJK UNIFIED IDEOGRAPH + {0xE6B0, 0x761E}, //10442 #CJK UNIFIED IDEOGRAPH + {0xE6B1, 0x7619}, //10443 #CJK UNIFIED IDEOGRAPH + {0xE6B2, 0x761D}, //10444 #CJK UNIFIED IDEOGRAPH + {0xE6B3, 0x761C}, //10445 #CJK UNIFIED IDEOGRAPH + {0xE6B4, 0x7623}, //10446 #CJK UNIFIED IDEOGRAPH + {0xE6B5, 0x761A}, //10447 #CJK UNIFIED IDEOGRAPH + {0xE6B6, 0x7628}, //10448 #CJK UNIFIED IDEOGRAPH + {0xE6B7, 0x761B}, //10449 #CJK UNIFIED IDEOGRAPH + {0xE6B8, 0x769C}, //10450 #CJK UNIFIED IDEOGRAPH + {0xE6B9, 0x769D}, //10451 #CJK UNIFIED IDEOGRAPH + {0xE6BA, 0x769E}, //10452 #CJK UNIFIED IDEOGRAPH + {0xE6BB, 0x769B}, //10453 #CJK UNIFIED IDEOGRAPH + {0xE6BC, 0x778D}, //10454 #CJK UNIFIED IDEOGRAPH + {0xE6BD, 0x778F}, //10455 #CJK UNIFIED IDEOGRAPH + {0xE6BE, 0x7789}, //10456 #CJK UNIFIED IDEOGRAPH + {0xE6BF, 0x7788}, //10457 #CJK UNIFIED IDEOGRAPH + {0xE6C0, 0x78CD}, //10458 #CJK UNIFIED IDEOGRAPH + {0xE6C1, 0x78BB}, //10459 #CJK UNIFIED IDEOGRAPH + {0xE6C2, 0x78CF}, //10460 #CJK UNIFIED IDEOGRAPH + {0xE6C3, 0x78CC}, //10461 #CJK UNIFIED IDEOGRAPH + {0xE6C4, 0x78D1}, //10462 #CJK UNIFIED IDEOGRAPH + {0xE6C5, 0x78CE}, //10463 #CJK UNIFIED IDEOGRAPH + {0xE6C6, 0x78D4}, //10464 #CJK UNIFIED IDEOGRAPH + {0xE6C7, 0x78C8}, //10465 #CJK UNIFIED IDEOGRAPH + {0xE6C8, 0x78C3}, //10466 #CJK UNIFIED IDEOGRAPH + {0xE6C9, 0x78C4}, //10467 #CJK UNIFIED IDEOGRAPH + {0xE6CA, 0x78C9}, //10468 #CJK UNIFIED IDEOGRAPH + {0xE6CB, 0x799A}, //10469 #CJK UNIFIED IDEOGRAPH + {0xE6CC, 0x79A1}, //10470 #CJK UNIFIED IDEOGRAPH + {0xE6CD, 0x79A0}, //10471 #CJK UNIFIED IDEOGRAPH + {0xE6CE, 0x799C}, //10472 #CJK UNIFIED IDEOGRAPH + {0xE6CF, 0x79A2}, //10473 #CJK UNIFIED IDEOGRAPH + {0xE6D0, 0x799B}, //10474 #CJK UNIFIED IDEOGRAPH + {0xE6D1, 0x6B76}, //10475 #CJK UNIFIED IDEOGRAPH + {0xE6D2, 0x7A39}, //10476 #CJK UNIFIED IDEOGRAPH + {0xE6D3, 0x7AB2}, //10477 #CJK UNIFIED IDEOGRAPH + {0xE6D4, 0x7AB4}, //10478 #CJK UNIFIED IDEOGRAPH + {0xE6D5, 0x7AB3}, //10479 #CJK UNIFIED IDEOGRAPH + {0xE6D6, 0x7BB7}, //10480 #CJK UNIFIED IDEOGRAPH + {0xE6D7, 0x7BCB}, //10481 #CJK UNIFIED IDEOGRAPH + {0xE6D8, 0x7BBE}, //10482 #CJK UNIFIED IDEOGRAPH + {0xE6D9, 0x7BAC}, //10483 #CJK UNIFIED IDEOGRAPH + {0xE6DA, 0x7BCE}, //10484 #CJK UNIFIED IDEOGRAPH + {0xE6DB, 0x7BAF}, //10485 #CJK UNIFIED IDEOGRAPH + {0xE6DC, 0x7BB9}, //10486 #CJK UNIFIED IDEOGRAPH + {0xE6DD, 0x7BCA}, //10487 #CJK UNIFIED IDEOGRAPH + {0xE6DE, 0x7BB5}, //10488 #CJK UNIFIED IDEOGRAPH + {0xE6DF, 0x7CC5}, //10489 #CJK UNIFIED IDEOGRAPH + {0xE6E0, 0x7CC8}, //10490 #CJK UNIFIED IDEOGRAPH + {0xE6E1, 0x7CCC}, //10491 #CJK UNIFIED IDEOGRAPH + {0xE6E2, 0x7CCB}, //10492 #CJK UNIFIED IDEOGRAPH + {0xE6E3, 0x7DF7}, //10493 #CJK UNIFIED IDEOGRAPH + {0xE6E4, 0x7DDB}, //10494 #CJK UNIFIED IDEOGRAPH + {0xE6E5, 0x7DEA}, //10495 #CJK UNIFIED IDEOGRAPH + {0xE6E6, 0x7DE7}, //10496 #CJK UNIFIED IDEOGRAPH + {0xE6E7, 0x7DD7}, //10497 #CJK UNIFIED IDEOGRAPH + {0xE6E8, 0x7DE1}, //10498 #CJK UNIFIED IDEOGRAPH + {0xE6E9, 0x7E03}, //10499 #CJK UNIFIED IDEOGRAPH + {0xE6EA, 0x7DFA}, //10500 #CJK UNIFIED IDEOGRAPH + {0xE6EB, 0x7DE6}, //10501 #CJK UNIFIED IDEOGRAPH + {0xE6EC, 0x7DF6}, //10502 #CJK UNIFIED IDEOGRAPH + {0xE6ED, 0x7DF1}, //10503 #CJK UNIFIED IDEOGRAPH + {0xE6EE, 0x7DF0}, //10504 #CJK UNIFIED IDEOGRAPH + {0xE6EF, 0x7DEE}, //10505 #CJK UNIFIED IDEOGRAPH + {0xE6F0, 0x7DDF}, //10506 #CJK UNIFIED IDEOGRAPH + {0xE6F1, 0x7F76}, //10507 #CJK UNIFIED IDEOGRAPH + {0xE6F2, 0x7FAC}, //10508 #CJK UNIFIED IDEOGRAPH + {0xE6F3, 0x7FB0}, //10509 #CJK UNIFIED IDEOGRAPH + {0xE6F4, 0x7FAD}, //10510 #CJK UNIFIED IDEOGRAPH + {0xE6F5, 0x7FED}, //10511 #CJK UNIFIED IDEOGRAPH + {0xE6F6, 0x7FEB}, //10512 #CJK UNIFIED IDEOGRAPH + {0xE6F7, 0x7FEA}, //10513 #CJK UNIFIED IDEOGRAPH + {0xE6F8, 0x7FEC}, //10514 #CJK UNIFIED IDEOGRAPH + {0xE6F9, 0x7FE6}, //10515 #CJK UNIFIED IDEOGRAPH + {0xE6FA, 0x7FE8}, //10516 #CJK UNIFIED IDEOGRAPH + {0xE6FB, 0x8064}, //10517 #CJK UNIFIED IDEOGRAPH + {0xE6FC, 0x8067}, //10518 #CJK UNIFIED IDEOGRAPH + {0xE6FD, 0x81A3}, //10519 #CJK UNIFIED IDEOGRAPH + {0xE6FE, 0x819F}, //10520 #CJK UNIFIED IDEOGRAPH + {0xE740, 0x819E}, //10521 #CJK UNIFIED IDEOGRAPH + {0xE741, 0x8195}, //10522 #CJK UNIFIED IDEOGRAPH + {0xE742, 0x81A2}, //10523 #CJK UNIFIED IDEOGRAPH + {0xE743, 0x8199}, //10524 #CJK UNIFIED IDEOGRAPH + {0xE744, 0x8197}, //10525 #CJK UNIFIED IDEOGRAPH + {0xE745, 0x8216}, //10526 #CJK UNIFIED IDEOGRAPH + {0xE746, 0x824F}, //10527 #CJK UNIFIED IDEOGRAPH + {0xE747, 0x8253}, //10528 #CJK UNIFIED IDEOGRAPH + {0xE748, 0x8252}, //10529 #CJK UNIFIED IDEOGRAPH + {0xE749, 0x8250}, //10530 #CJK UNIFIED IDEOGRAPH + {0xE74A, 0x824E}, //10531 #CJK UNIFIED IDEOGRAPH + {0xE74B, 0x8251}, //10532 #CJK UNIFIED IDEOGRAPH + {0xE74C, 0x8524}, //10533 #CJK UNIFIED IDEOGRAPH + {0xE74D, 0x853B}, //10534 #CJK UNIFIED IDEOGRAPH + {0xE74E, 0x850F}, //10535 #CJK UNIFIED IDEOGRAPH + {0xE74F, 0x8500}, //10536 #CJK UNIFIED IDEOGRAPH + {0xE750, 0x8529}, //10537 #CJK UNIFIED IDEOGRAPH + {0xE751, 0x850E}, //10538 #CJK UNIFIED IDEOGRAPH + {0xE752, 0x8509}, //10539 #CJK UNIFIED IDEOGRAPH + {0xE753, 0x850D}, //10540 #CJK UNIFIED IDEOGRAPH + {0xE754, 0x851F}, //10541 #CJK UNIFIED IDEOGRAPH + {0xE755, 0x850A}, //10542 #CJK UNIFIED IDEOGRAPH + {0xE756, 0x8527}, //10543 #CJK UNIFIED IDEOGRAPH + {0xE757, 0x851C}, //10544 #CJK UNIFIED IDEOGRAPH + {0xE758, 0x84FB}, //10545 #CJK UNIFIED IDEOGRAPH + {0xE759, 0x852B}, //10546 #CJK UNIFIED IDEOGRAPH + {0xE75A, 0x84FA}, //10547 #CJK UNIFIED IDEOGRAPH + {0xE75B, 0x8508}, //10548 #CJK UNIFIED IDEOGRAPH + {0xE75C, 0x850C}, //10549 #CJK UNIFIED IDEOGRAPH + {0xE75D, 0x84F4}, //10550 #CJK UNIFIED IDEOGRAPH + {0xE75E, 0x852A}, //10551 #CJK UNIFIED IDEOGRAPH + {0xE75F, 0x84F2}, //10552 #CJK UNIFIED IDEOGRAPH + {0xE760, 0x8515}, //10553 #CJK UNIFIED IDEOGRAPH + {0xE761, 0x84F7}, //10554 #CJK UNIFIED IDEOGRAPH + {0xE762, 0x84EB}, //10555 #CJK UNIFIED IDEOGRAPH + {0xE763, 0x84F3}, //10556 #CJK UNIFIED IDEOGRAPH + {0xE764, 0x84FC}, //10557 #CJK UNIFIED IDEOGRAPH + {0xE765, 0x8512}, //10558 #CJK UNIFIED IDEOGRAPH + {0xE766, 0x84EA}, //10559 #CJK UNIFIED IDEOGRAPH + {0xE767, 0x84E9}, //10560 #CJK UNIFIED IDEOGRAPH + {0xE768, 0x8516}, //10561 #CJK UNIFIED IDEOGRAPH + {0xE769, 0x84FE}, //10562 #CJK UNIFIED IDEOGRAPH + {0xE76A, 0x8528}, //10563 #CJK UNIFIED IDEOGRAPH + {0xE76B, 0x851D}, //10564 #CJK UNIFIED IDEOGRAPH + {0xE76C, 0x852E}, //10565 #CJK UNIFIED IDEOGRAPH + {0xE76D, 0x8502}, //10566 #CJK UNIFIED IDEOGRAPH + {0xE76E, 0x84FD}, //10567 #CJK UNIFIED IDEOGRAPH + {0xE76F, 0x851E}, //10568 #CJK UNIFIED IDEOGRAPH + {0xE770, 0x84F6}, //10569 #CJK UNIFIED IDEOGRAPH + {0xE771, 0x8531}, //10570 #CJK UNIFIED IDEOGRAPH + {0xE772, 0x8526}, //10571 #CJK UNIFIED IDEOGRAPH + {0xE773, 0x84E7}, //10572 #CJK UNIFIED IDEOGRAPH + {0xE774, 0x84E8}, //10573 #CJK UNIFIED IDEOGRAPH + {0xE775, 0x84F0}, //10574 #CJK UNIFIED IDEOGRAPH + {0xE776, 0x84EF}, //10575 #CJK UNIFIED IDEOGRAPH + {0xE777, 0x84F9}, //10576 #CJK UNIFIED IDEOGRAPH + {0xE778, 0x8518}, //10577 #CJK UNIFIED IDEOGRAPH + {0xE779, 0x8520}, //10578 #CJK UNIFIED IDEOGRAPH + {0xE77A, 0x8530}, //10579 #CJK UNIFIED IDEOGRAPH + {0xE77B, 0x850B}, //10580 #CJK UNIFIED IDEOGRAPH + {0xE77C, 0x8519}, //10581 #CJK UNIFIED IDEOGRAPH + {0xE77D, 0x852F}, //10582 #CJK UNIFIED IDEOGRAPH + {0xE77E, 0x8662}, //10583 #CJK UNIFIED IDEOGRAPH + {0xE7A1, 0x8756}, //10584 #CJK UNIFIED IDEOGRAPH + {0xE7A2, 0x8763}, //10585 #CJK UNIFIED IDEOGRAPH + {0xE7A3, 0x8764}, //10586 #CJK UNIFIED IDEOGRAPH + {0xE7A4, 0x8777}, //10587 #CJK UNIFIED IDEOGRAPH + {0xE7A5, 0x87E1}, //10588 #CJK UNIFIED IDEOGRAPH + {0xE7A6, 0x8773}, //10589 #CJK UNIFIED IDEOGRAPH + {0xE7A7, 0x8758}, //10590 #CJK UNIFIED IDEOGRAPH + {0xE7A8, 0x8754}, //10591 #CJK UNIFIED IDEOGRAPH + {0xE7A9, 0x875B}, //10592 #CJK UNIFIED IDEOGRAPH + {0xE7AA, 0x8752}, //10593 #CJK UNIFIED IDEOGRAPH + {0xE7AB, 0x8761}, //10594 #CJK UNIFIED IDEOGRAPH + {0xE7AC, 0x875A}, //10595 #CJK UNIFIED IDEOGRAPH + {0xE7AD, 0x8751}, //10596 #CJK UNIFIED IDEOGRAPH + {0xE7AE, 0x875E}, //10597 #CJK UNIFIED IDEOGRAPH + {0xE7AF, 0x876D}, //10598 #CJK UNIFIED IDEOGRAPH + {0xE7B0, 0x876A}, //10599 #CJK UNIFIED IDEOGRAPH + {0xE7B1, 0x8750}, //10600 #CJK UNIFIED IDEOGRAPH + {0xE7B2, 0x874E}, //10601 #CJK UNIFIED IDEOGRAPH + {0xE7B3, 0x875F}, //10602 #CJK UNIFIED IDEOGRAPH + {0xE7B4, 0x875D}, //10603 #CJK UNIFIED IDEOGRAPH + {0xE7B5, 0x876F}, //10604 #CJK UNIFIED IDEOGRAPH + {0xE7B6, 0x876C}, //10605 #CJK UNIFIED IDEOGRAPH + {0xE7B7, 0x877A}, //10606 #CJK UNIFIED IDEOGRAPH + {0xE7B8, 0x876E}, //10607 #CJK UNIFIED IDEOGRAPH + {0xE7B9, 0x875C}, //10608 #CJK UNIFIED IDEOGRAPH + {0xE7BA, 0x8765}, //10609 #CJK UNIFIED IDEOGRAPH + {0xE7BB, 0x874F}, //10610 #CJK UNIFIED IDEOGRAPH + {0xE7BC, 0x877B}, //10611 #CJK UNIFIED IDEOGRAPH + {0xE7BD, 0x8775}, //10612 #CJK UNIFIED IDEOGRAPH + {0xE7BE, 0x8762}, //10613 #CJK UNIFIED IDEOGRAPH + {0xE7BF, 0x8767}, //10614 #CJK UNIFIED IDEOGRAPH + {0xE7C0, 0x8769}, //10615 #CJK UNIFIED IDEOGRAPH + {0xE7C1, 0x885A}, //10616 #CJK UNIFIED IDEOGRAPH + {0xE7C2, 0x8905}, //10617 #CJK UNIFIED IDEOGRAPH + {0xE7C3, 0x890C}, //10618 #CJK UNIFIED IDEOGRAPH + {0xE7C4, 0x8914}, //10619 #CJK UNIFIED IDEOGRAPH + {0xE7C5, 0x890B}, //10620 #CJK UNIFIED IDEOGRAPH + {0xE7C6, 0x8917}, //10621 #CJK UNIFIED IDEOGRAPH + {0xE7C7, 0x8918}, //10622 #CJK UNIFIED IDEOGRAPH + {0xE7C8, 0x8919}, //10623 #CJK UNIFIED IDEOGRAPH + {0xE7C9, 0x8906}, //10624 #CJK UNIFIED IDEOGRAPH + {0xE7CA, 0x8916}, //10625 #CJK UNIFIED IDEOGRAPH + {0xE7CB, 0x8911}, //10626 #CJK UNIFIED IDEOGRAPH + {0xE7CC, 0x890E}, //10627 #CJK UNIFIED IDEOGRAPH + {0xE7CD, 0x8909}, //10628 #CJK UNIFIED IDEOGRAPH + {0xE7CE, 0x89A2}, //10629 #CJK UNIFIED IDEOGRAPH + {0xE7CF, 0x89A4}, //10630 #CJK UNIFIED IDEOGRAPH + {0xE7D0, 0x89A3}, //10631 #CJK UNIFIED IDEOGRAPH + {0xE7D1, 0x89ED}, //10632 #CJK UNIFIED IDEOGRAPH + {0xE7D2, 0x89F0}, //10633 #CJK UNIFIED IDEOGRAPH + {0xE7D3, 0x89EC}, //10634 #CJK UNIFIED IDEOGRAPH + {0xE7D4, 0x8ACF}, //10635 #CJK UNIFIED IDEOGRAPH + {0xE7D5, 0x8AC6}, //10636 #CJK UNIFIED IDEOGRAPH + {0xE7D6, 0x8AB8}, //10637 #CJK UNIFIED IDEOGRAPH + {0xE7D7, 0x8AD3}, //10638 #CJK UNIFIED IDEOGRAPH + {0xE7D8, 0x8AD1}, //10639 #CJK UNIFIED IDEOGRAPH + {0xE7D9, 0x8AD4}, //10640 #CJK UNIFIED IDEOGRAPH + {0xE7DA, 0x8AD5}, //10641 #CJK UNIFIED IDEOGRAPH + {0xE7DB, 0x8ABB}, //10642 #CJK UNIFIED IDEOGRAPH + {0xE7DC, 0x8AD7}, //10643 #CJK UNIFIED IDEOGRAPH + {0xE7DD, 0x8ABE}, //10644 #CJK UNIFIED IDEOGRAPH + {0xE7DE, 0x8AC0}, //10645 #CJK UNIFIED IDEOGRAPH + {0xE7DF, 0x8AC5}, //10646 #CJK UNIFIED IDEOGRAPH + {0xE7E0, 0x8AD8}, //10647 #CJK UNIFIED IDEOGRAPH + {0xE7E1, 0x8AC3}, //10648 #CJK UNIFIED IDEOGRAPH + {0xE7E2, 0x8ABA}, //10649 #CJK UNIFIED IDEOGRAPH + {0xE7E3, 0x8ABD}, //10650 #CJK UNIFIED IDEOGRAPH + {0xE7E4, 0x8AD9}, //10651 #CJK UNIFIED IDEOGRAPH + {0xE7E5, 0x8C3E}, //10652 #CJK UNIFIED IDEOGRAPH + {0xE7E6, 0x8C4D}, //10653 #CJK UNIFIED IDEOGRAPH + {0xE7E7, 0x8C8F}, //10654 #CJK UNIFIED IDEOGRAPH + {0xE7E8, 0x8CE5}, //10655 #CJK UNIFIED IDEOGRAPH + {0xE7E9, 0x8CDF}, //10656 #CJK UNIFIED IDEOGRAPH + {0xE7EA, 0x8CD9}, //10657 #CJK UNIFIED IDEOGRAPH + {0xE7EB, 0x8CE8}, //10658 #CJK UNIFIED IDEOGRAPH + {0xE7EC, 0x8CDA}, //10659 #CJK UNIFIED IDEOGRAPH + {0xE7ED, 0x8CDD}, //10660 #CJK UNIFIED IDEOGRAPH + {0xE7EE, 0x8CE7}, //10661 #CJK UNIFIED IDEOGRAPH + {0xE7EF, 0x8DA0}, //10662 #CJK UNIFIED IDEOGRAPH + {0xE7F0, 0x8D9C}, //10663 #CJK UNIFIED IDEOGRAPH + {0xE7F1, 0x8DA1}, //10664 #CJK UNIFIED IDEOGRAPH + {0xE7F2, 0x8D9B}, //10665 #CJK UNIFIED IDEOGRAPH + {0xE7F3, 0x8E20}, //10666 #CJK UNIFIED IDEOGRAPH + {0xE7F4, 0x8E23}, //10667 #CJK UNIFIED IDEOGRAPH + {0xE7F5, 0x8E25}, //10668 #CJK UNIFIED IDEOGRAPH + {0xE7F6, 0x8E24}, //10669 #CJK UNIFIED IDEOGRAPH + {0xE7F7, 0x8E2E}, //10670 #CJK UNIFIED IDEOGRAPH + {0xE7F8, 0x8E15}, //10671 #CJK UNIFIED IDEOGRAPH + {0xE7F9, 0x8E1B}, //10672 #CJK UNIFIED IDEOGRAPH + {0xE7FA, 0x8E16}, //10673 #CJK UNIFIED IDEOGRAPH + {0xE7FB, 0x8E11}, //10674 #CJK UNIFIED IDEOGRAPH + {0xE7FC, 0x8E19}, //10675 #CJK UNIFIED IDEOGRAPH + {0xE7FD, 0x8E26}, //10676 #CJK UNIFIED IDEOGRAPH + {0xE7FE, 0x8E27}, //10677 #CJK UNIFIED IDEOGRAPH + {0xE840, 0x8E14}, //10678 #CJK UNIFIED IDEOGRAPH + {0xE841, 0x8E12}, //10679 #CJK UNIFIED IDEOGRAPH + {0xE842, 0x8E18}, //10680 #CJK UNIFIED IDEOGRAPH + {0xE843, 0x8E13}, //10681 #CJK UNIFIED IDEOGRAPH + {0xE844, 0x8E1C}, //10682 #CJK UNIFIED IDEOGRAPH + {0xE845, 0x8E17}, //10683 #CJK UNIFIED IDEOGRAPH + {0xE846, 0x8E1A}, //10684 #CJK UNIFIED IDEOGRAPH + {0xE847, 0x8F2C}, //10685 #CJK UNIFIED IDEOGRAPH + {0xE848, 0x8F24}, //10686 #CJK UNIFIED IDEOGRAPH + {0xE849, 0x8F18}, //10687 #CJK UNIFIED IDEOGRAPH + {0xE84A, 0x8F1A}, //10688 #CJK UNIFIED IDEOGRAPH + {0xE84B, 0x8F20}, //10689 #CJK UNIFIED IDEOGRAPH + {0xE84C, 0x8F23}, //10690 #CJK UNIFIED IDEOGRAPH + {0xE84D, 0x8F16}, //10691 #CJK UNIFIED IDEOGRAPH + {0xE84E, 0x8F17}, //10692 #CJK UNIFIED IDEOGRAPH + {0xE84F, 0x9073}, //10693 #CJK UNIFIED IDEOGRAPH + {0xE850, 0x9070}, //10694 #CJK UNIFIED IDEOGRAPH + {0xE851, 0x906F}, //10695 #CJK UNIFIED IDEOGRAPH + {0xE852, 0x9067}, //10696 #CJK UNIFIED IDEOGRAPH + {0xE853, 0x906B}, //10697 #CJK UNIFIED IDEOGRAPH + {0xE854, 0x912F}, //10698 #CJK UNIFIED IDEOGRAPH + {0xE855, 0x912B}, //10699 #CJK UNIFIED IDEOGRAPH + {0xE856, 0x9129}, //10700 #CJK UNIFIED IDEOGRAPH + {0xE857, 0x912A}, //10701 #CJK UNIFIED IDEOGRAPH + {0xE858, 0x9132}, //10702 #CJK UNIFIED IDEOGRAPH + {0xE859, 0x9126}, //10703 #CJK UNIFIED IDEOGRAPH + {0xE85A, 0x912E}, //10704 #CJK UNIFIED IDEOGRAPH + {0xE85B, 0x9185}, //10705 #CJK UNIFIED IDEOGRAPH + {0xE85C, 0x9186}, //10706 #CJK UNIFIED IDEOGRAPH + {0xE85D, 0x918A}, //10707 #CJK UNIFIED IDEOGRAPH + {0xE85E, 0x9181}, //10708 #CJK UNIFIED IDEOGRAPH + {0xE85F, 0x9182}, //10709 #CJK UNIFIED IDEOGRAPH + {0xE860, 0x9184}, //10710 #CJK UNIFIED IDEOGRAPH + {0xE861, 0x9180}, //10711 #CJK UNIFIED IDEOGRAPH + {0xE862, 0x92D0}, //10712 #CJK UNIFIED IDEOGRAPH + {0xE863, 0x92C3}, //10713 #CJK UNIFIED IDEOGRAPH + {0xE864, 0x92C4}, //10714 #CJK UNIFIED IDEOGRAPH + {0xE865, 0x92C0}, //10715 #CJK UNIFIED IDEOGRAPH + {0xE866, 0x92D9}, //10716 #CJK UNIFIED IDEOGRAPH + {0xE867, 0x92B6}, //10717 #CJK UNIFIED IDEOGRAPH + {0xE868, 0x92CF}, //10718 #CJK UNIFIED IDEOGRAPH + {0xE869, 0x92F1}, //10719 #CJK UNIFIED IDEOGRAPH + {0xE86A, 0x92DF}, //10720 #CJK UNIFIED IDEOGRAPH + {0xE86B, 0x92D8}, //10721 #CJK UNIFIED IDEOGRAPH + {0xE86C, 0x92E9}, //10722 #CJK UNIFIED IDEOGRAPH + {0xE86D, 0x92D7}, //10723 #CJK UNIFIED IDEOGRAPH + {0xE86E, 0x92DD}, //10724 #CJK UNIFIED IDEOGRAPH + {0xE86F, 0x92CC}, //10725 #CJK UNIFIED IDEOGRAPH + {0xE870, 0x92EF}, //10726 #CJK UNIFIED IDEOGRAPH + {0xE871, 0x92C2}, //10727 #CJK UNIFIED IDEOGRAPH + {0xE872, 0x92E8}, //10728 #CJK UNIFIED IDEOGRAPH + {0xE873, 0x92CA}, //10729 #CJK UNIFIED IDEOGRAPH + {0xE874, 0x92C8}, //10730 #CJK UNIFIED IDEOGRAPH + {0xE875, 0x92CE}, //10731 #CJK UNIFIED IDEOGRAPH + {0xE876, 0x92E6}, //10732 #CJK UNIFIED IDEOGRAPH + {0xE877, 0x92CD}, //10733 #CJK UNIFIED IDEOGRAPH + {0xE878, 0x92D5}, //10734 #CJK UNIFIED IDEOGRAPH + {0xE879, 0x92C9}, //10735 #CJK UNIFIED IDEOGRAPH + {0xE87A, 0x92E0}, //10736 #CJK UNIFIED IDEOGRAPH + {0xE87B, 0x92DE}, //10737 #CJK UNIFIED IDEOGRAPH + {0xE87C, 0x92E7}, //10738 #CJK UNIFIED IDEOGRAPH + {0xE87D, 0x92D1}, //10739 #CJK UNIFIED IDEOGRAPH + {0xE87E, 0x92D3}, //10740 #CJK UNIFIED IDEOGRAPH + {0xE8A1, 0x92B5}, //10741 #CJK UNIFIED IDEOGRAPH + {0xE8A2, 0x92E1}, //10742 #CJK UNIFIED IDEOGRAPH + {0xE8A3, 0x92C6}, //10743 #CJK UNIFIED IDEOGRAPH + {0xE8A4, 0x92B4}, //10744 #CJK UNIFIED IDEOGRAPH + {0xE8A5, 0x957C}, //10745 #CJK UNIFIED IDEOGRAPH + {0xE8A6, 0x95AC}, //10746 #CJK UNIFIED IDEOGRAPH + {0xE8A7, 0x95AB}, //10747 #CJK UNIFIED IDEOGRAPH + {0xE8A8, 0x95AE}, //10748 #CJK UNIFIED IDEOGRAPH + {0xE8A9, 0x95B0}, //10749 #CJK UNIFIED IDEOGRAPH + {0xE8AA, 0x96A4}, //10750 #CJK UNIFIED IDEOGRAPH + {0xE8AB, 0x96A2}, //10751 #CJK UNIFIED IDEOGRAPH + {0xE8AC, 0x96D3}, //10752 #CJK UNIFIED IDEOGRAPH + {0xE8AD, 0x9705}, //10753 #CJK UNIFIED IDEOGRAPH + {0xE8AE, 0x9708}, //10754 #CJK UNIFIED IDEOGRAPH + {0xE8AF, 0x9702}, //10755 #CJK UNIFIED IDEOGRAPH + {0xE8B0, 0x975A}, //10756 #CJK UNIFIED IDEOGRAPH + {0xE8B1, 0x978A}, //10757 #CJK UNIFIED IDEOGRAPH + {0xE8B2, 0x978E}, //10758 #CJK UNIFIED IDEOGRAPH + {0xE8B3, 0x9788}, //10759 #CJK UNIFIED IDEOGRAPH + {0xE8B4, 0x97D0}, //10760 #CJK UNIFIED IDEOGRAPH + {0xE8B5, 0x97CF}, //10761 #CJK UNIFIED IDEOGRAPH + {0xE8B6, 0x981E}, //10762 #CJK UNIFIED IDEOGRAPH + {0xE8B7, 0x981D}, //10763 #CJK UNIFIED IDEOGRAPH + {0xE8B8, 0x9826}, //10764 #CJK UNIFIED IDEOGRAPH + {0xE8B9, 0x9829}, //10765 #CJK UNIFIED IDEOGRAPH + {0xE8BA, 0x9828}, //10766 #CJK UNIFIED IDEOGRAPH + {0xE8BB, 0x9820}, //10767 #CJK UNIFIED IDEOGRAPH + {0xE8BC, 0x981B}, //10768 #CJK UNIFIED IDEOGRAPH + {0xE8BD, 0x9827}, //10769 #CJK UNIFIED IDEOGRAPH + {0xE8BE, 0x98B2}, //10770 #CJK UNIFIED IDEOGRAPH + {0xE8BF, 0x9908}, //10771 #CJK UNIFIED IDEOGRAPH + {0xE8C0, 0x98FA}, //10772 #CJK UNIFIED IDEOGRAPH + {0xE8C1, 0x9911}, //10773 #CJK UNIFIED IDEOGRAPH + {0xE8C2, 0x9914}, //10774 #CJK UNIFIED IDEOGRAPH + {0xE8C3, 0x9916}, //10775 #CJK UNIFIED IDEOGRAPH + {0xE8C4, 0x9917}, //10776 #CJK UNIFIED IDEOGRAPH + {0xE8C5, 0x9915}, //10777 #CJK UNIFIED IDEOGRAPH + {0xE8C6, 0x99DC}, //10778 #CJK UNIFIED IDEOGRAPH + {0xE8C7, 0x99CD}, //10779 #CJK UNIFIED IDEOGRAPH + {0xE8C8, 0x99CF}, //10780 #CJK UNIFIED IDEOGRAPH + {0xE8C9, 0x99D3}, //10781 #CJK UNIFIED IDEOGRAPH + {0xE8CA, 0x99D4}, //10782 #CJK UNIFIED IDEOGRAPH + {0xE8CB, 0x99CE}, //10783 #CJK UNIFIED IDEOGRAPH + {0xE8CC, 0x99C9}, //10784 #CJK UNIFIED IDEOGRAPH + {0xE8CD, 0x99D6}, //10785 #CJK UNIFIED IDEOGRAPH + {0xE8CE, 0x99D8}, //10786 #CJK UNIFIED IDEOGRAPH + {0xE8CF, 0x99CB}, //10787 #CJK UNIFIED IDEOGRAPH + {0xE8D0, 0x99D7}, //10788 #CJK UNIFIED IDEOGRAPH + {0xE8D1, 0x99CC}, //10789 #CJK UNIFIED IDEOGRAPH + {0xE8D2, 0x9AB3}, //10790 #CJK UNIFIED IDEOGRAPH + {0xE8D3, 0x9AEC}, //10791 #CJK UNIFIED IDEOGRAPH + {0xE8D4, 0x9AEB}, //10792 #CJK UNIFIED IDEOGRAPH + {0xE8D5, 0x9AF3}, //10793 #CJK UNIFIED IDEOGRAPH + {0xE8D6, 0x9AF2}, //10794 #CJK UNIFIED IDEOGRAPH + {0xE8D7, 0x9AF1}, //10795 #CJK UNIFIED IDEOGRAPH + {0xE8D8, 0x9B46}, //10796 #CJK UNIFIED IDEOGRAPH + {0xE8D9, 0x9B43}, //10797 #CJK UNIFIED IDEOGRAPH + {0xE8DA, 0x9B67}, //10798 #CJK UNIFIED IDEOGRAPH + {0xE8DB, 0x9B74}, //10799 #CJK UNIFIED IDEOGRAPH + {0xE8DC, 0x9B71}, //10800 #CJK UNIFIED IDEOGRAPH + {0xE8DD, 0x9B66}, //10801 #CJK UNIFIED IDEOGRAPH + {0xE8DE, 0x9B76}, //10802 #CJK UNIFIED IDEOGRAPH + {0xE8DF, 0x9B75}, //10803 #CJK UNIFIED IDEOGRAPH + {0xE8E0, 0x9B70}, //10804 #CJK UNIFIED IDEOGRAPH + {0xE8E1, 0x9B68}, //10805 #CJK UNIFIED IDEOGRAPH + {0xE8E2, 0x9B64}, //10806 #CJK UNIFIED IDEOGRAPH + {0xE8E3, 0x9B6C}, //10807 #CJK UNIFIED IDEOGRAPH + {0xE8E4, 0x9CFC}, //10808 #CJK UNIFIED IDEOGRAPH + {0xE8E5, 0x9CFA}, //10809 #CJK UNIFIED IDEOGRAPH + {0xE8E6, 0x9CFD}, //10810 #CJK UNIFIED IDEOGRAPH + {0xE8E7, 0x9CFF}, //10811 #CJK UNIFIED IDEOGRAPH + {0xE8E8, 0x9CF7}, //10812 #CJK UNIFIED IDEOGRAPH + {0xE8E9, 0x9D07}, //10813 #CJK UNIFIED IDEOGRAPH + {0xE8EA, 0x9D00}, //10814 #CJK UNIFIED IDEOGRAPH + {0xE8EB, 0x9CF9}, //10815 #CJK UNIFIED IDEOGRAPH + {0xE8EC, 0x9CFB}, //10816 #CJK UNIFIED IDEOGRAPH + {0xE8ED, 0x9D08}, //10817 #CJK UNIFIED IDEOGRAPH + {0xE8EE, 0x9D05}, //10818 #CJK UNIFIED IDEOGRAPH + {0xE8EF, 0x9D04}, //10819 #CJK UNIFIED IDEOGRAPH + {0xE8F0, 0x9E83}, //10820 #CJK UNIFIED IDEOGRAPH + {0xE8F1, 0x9ED3}, //10821 #CJK UNIFIED IDEOGRAPH + {0xE8F2, 0x9F0F}, //10822 #CJK UNIFIED IDEOGRAPH + {0xE8F3, 0x9F10}, //10823 #CJK UNIFIED IDEOGRAPH + {0xE8F4, 0x511C}, //10824 #CJK UNIFIED IDEOGRAPH + {0xE8F5, 0x5113}, //10825 #CJK UNIFIED IDEOGRAPH + {0xE8F6, 0x5117}, //10826 #CJK UNIFIED IDEOGRAPH + {0xE8F7, 0x511A}, //10827 #CJK UNIFIED IDEOGRAPH + {0xE8F8, 0x5111}, //10828 #CJK UNIFIED IDEOGRAPH + {0xE8F9, 0x51DE}, //10829 #CJK UNIFIED IDEOGRAPH + {0xE8FA, 0x5334}, //10830 #CJK UNIFIED IDEOGRAPH + {0xE8FB, 0x53E1}, //10831 #CJK UNIFIED IDEOGRAPH + {0xE8FC, 0x5670}, //10832 #CJK UNIFIED IDEOGRAPH + {0xE8FD, 0x5660}, //10833 #CJK UNIFIED IDEOGRAPH + {0xE8FE, 0x566E}, //10834 #CJK UNIFIED IDEOGRAPH + {0xE940, 0x5673}, //10835 #CJK UNIFIED IDEOGRAPH + {0xE941, 0x5666}, //10836 #CJK UNIFIED IDEOGRAPH + {0xE942, 0x5663}, //10837 #CJK UNIFIED IDEOGRAPH + {0xE943, 0x566D}, //10838 #CJK UNIFIED IDEOGRAPH + {0xE944, 0x5672}, //10839 #CJK UNIFIED IDEOGRAPH + {0xE945, 0x565E}, //10840 #CJK UNIFIED IDEOGRAPH + {0xE946, 0x5677}, //10841 #CJK UNIFIED IDEOGRAPH + {0xE947, 0x571C}, //10842 #CJK UNIFIED IDEOGRAPH + {0xE948, 0x571B}, //10843 #CJK UNIFIED IDEOGRAPH + {0xE949, 0x58C8}, //10844 #CJK UNIFIED IDEOGRAPH + {0xE94A, 0x58BD}, //10845 #CJK UNIFIED IDEOGRAPH + {0xE94B, 0x58C9}, //10846 #CJK UNIFIED IDEOGRAPH + {0xE94C, 0x58BF}, //10847 #CJK UNIFIED IDEOGRAPH + {0xE94D, 0x58BA}, //10848 #CJK UNIFIED IDEOGRAPH + {0xE94E, 0x58C2}, //10849 #CJK UNIFIED IDEOGRAPH + {0xE94F, 0x58BC}, //10850 #CJK UNIFIED IDEOGRAPH + {0xE950, 0x58C6}, //10851 #CJK UNIFIED IDEOGRAPH + {0xE951, 0x5B17}, //10852 #CJK UNIFIED IDEOGRAPH + {0xE952, 0x5B19}, //10853 #CJK UNIFIED IDEOGRAPH + {0xE953, 0x5B1B}, //10854 #CJK UNIFIED IDEOGRAPH + {0xE954, 0x5B21}, //10855 #CJK UNIFIED IDEOGRAPH + {0xE955, 0x5B14}, //10856 #CJK UNIFIED IDEOGRAPH + {0xE956, 0x5B13}, //10857 #CJK UNIFIED IDEOGRAPH + {0xE957, 0x5B10}, //10858 #CJK UNIFIED IDEOGRAPH + {0xE958, 0x5B16}, //10859 #CJK UNIFIED IDEOGRAPH + {0xE959, 0x5B28}, //10860 #CJK UNIFIED IDEOGRAPH + {0xE95A, 0x5B1A}, //10861 #CJK UNIFIED IDEOGRAPH + {0xE95B, 0x5B20}, //10862 #CJK UNIFIED IDEOGRAPH + {0xE95C, 0x5B1E}, //10863 #CJK UNIFIED IDEOGRAPH + {0xE95D, 0x5BEF}, //10864 #CJK UNIFIED IDEOGRAPH + {0xE95E, 0x5DAC}, //10865 #CJK UNIFIED IDEOGRAPH + {0xE95F, 0x5DB1}, //10866 #CJK UNIFIED IDEOGRAPH + {0xE960, 0x5DA9}, //10867 #CJK UNIFIED IDEOGRAPH + {0xE961, 0x5DA7}, //10868 #CJK UNIFIED IDEOGRAPH + {0xE962, 0x5DB5}, //10869 #CJK UNIFIED IDEOGRAPH + {0xE963, 0x5DB0}, //10870 #CJK UNIFIED IDEOGRAPH + {0xE964, 0x5DAE}, //10871 #CJK UNIFIED IDEOGRAPH + {0xE965, 0x5DAA}, //10872 #CJK UNIFIED IDEOGRAPH + {0xE966, 0x5DA8}, //10873 #CJK UNIFIED IDEOGRAPH + {0xE967, 0x5DB2}, //10874 #CJK UNIFIED IDEOGRAPH + {0xE968, 0x5DAD}, //10875 #CJK UNIFIED IDEOGRAPH + {0xE969, 0x5DAF}, //10876 #CJK UNIFIED IDEOGRAPH + {0xE96A, 0x5DB4}, //10877 #CJK UNIFIED IDEOGRAPH + {0xE96B, 0x5E67}, //10878 #CJK UNIFIED IDEOGRAPH + {0xE96C, 0x5E68}, //10879 #CJK UNIFIED IDEOGRAPH + {0xE96D, 0x5E66}, //10880 #CJK UNIFIED IDEOGRAPH + {0xE96E, 0x5E6F}, //10881 #CJK UNIFIED IDEOGRAPH + {0xE96F, 0x5EE9}, //10882 #CJK UNIFIED IDEOGRAPH + {0xE970, 0x5EE7}, //10883 #CJK UNIFIED IDEOGRAPH + {0xE971, 0x5EE6}, //10884 #CJK UNIFIED IDEOGRAPH + {0xE972, 0x5EE8}, //10885 #CJK UNIFIED IDEOGRAPH + {0xE973, 0x5EE5}, //10886 #CJK UNIFIED IDEOGRAPH + {0xE974, 0x5F4B}, //10887 #CJK UNIFIED IDEOGRAPH + {0xE975, 0x5FBC}, //10888 #CJK UNIFIED IDEOGRAPH + {0xE976, 0x619D}, //10889 #CJK UNIFIED IDEOGRAPH + {0xE977, 0x61A8}, //10890 #CJK UNIFIED IDEOGRAPH + {0xE978, 0x6196}, //10891 #CJK UNIFIED IDEOGRAPH + {0xE979, 0x61C5}, //10892 #CJK UNIFIED IDEOGRAPH + {0xE97A, 0x61B4}, //10893 #CJK UNIFIED IDEOGRAPH + {0xE97B, 0x61C6}, //10894 #CJK UNIFIED IDEOGRAPH + {0xE97C, 0x61C1}, //10895 #CJK UNIFIED IDEOGRAPH + {0xE97D, 0x61CC}, //10896 #CJK UNIFIED IDEOGRAPH + {0xE97E, 0x61BA}, //10897 #CJK UNIFIED IDEOGRAPH + {0xE9A1, 0x61BF}, //10898 #CJK UNIFIED IDEOGRAPH + {0xE9A2, 0x61B8}, //10899 #CJK UNIFIED IDEOGRAPH + {0xE9A3, 0x618C}, //10900 #CJK UNIFIED IDEOGRAPH + {0xE9A4, 0x64D7}, //10901 #CJK UNIFIED IDEOGRAPH + {0xE9A5, 0x64D6}, //10902 #CJK UNIFIED IDEOGRAPH + {0xE9A6, 0x64D0}, //10903 #CJK UNIFIED IDEOGRAPH + {0xE9A7, 0x64CF}, //10904 #CJK UNIFIED IDEOGRAPH + {0xE9A8, 0x64C9}, //10905 #CJK UNIFIED IDEOGRAPH + {0xE9A9, 0x64BD}, //10906 #CJK UNIFIED IDEOGRAPH + {0xE9AA, 0x6489}, //10907 #CJK UNIFIED IDEOGRAPH + {0xE9AB, 0x64C3}, //10908 #CJK UNIFIED IDEOGRAPH + {0xE9AC, 0x64DB}, //10909 #CJK UNIFIED IDEOGRAPH + {0xE9AD, 0x64F3}, //10910 #CJK UNIFIED IDEOGRAPH + {0xE9AE, 0x64D9}, //10911 #CJK UNIFIED IDEOGRAPH + {0xE9AF, 0x6533}, //10912 #CJK UNIFIED IDEOGRAPH + {0xE9B0, 0x657F}, //10913 #CJK UNIFIED IDEOGRAPH + {0xE9B1, 0x657C}, //10914 #CJK UNIFIED IDEOGRAPH + {0xE9B2, 0x65A2}, //10915 #CJK UNIFIED IDEOGRAPH + {0xE9B3, 0x66C8}, //10916 #CJK UNIFIED IDEOGRAPH + {0xE9B4, 0x66BE}, //10917 #CJK UNIFIED IDEOGRAPH + {0xE9B5, 0x66C0}, //10918 #CJK UNIFIED IDEOGRAPH + {0xE9B6, 0x66CA}, //10919 #CJK UNIFIED IDEOGRAPH + {0xE9B7, 0x66CB}, //10920 #CJK UNIFIED IDEOGRAPH + {0xE9B8, 0x66CF}, //10921 #CJK UNIFIED IDEOGRAPH + {0xE9B9, 0x66BD}, //10922 #CJK UNIFIED IDEOGRAPH + {0xE9BA, 0x66BB}, //10923 #CJK UNIFIED IDEOGRAPH + {0xE9BB, 0x66BA}, //10924 #CJK UNIFIED IDEOGRAPH + {0xE9BC, 0x66CC}, //10925 #CJK UNIFIED IDEOGRAPH + {0xE9BD, 0x6723}, //10926 #CJK UNIFIED IDEOGRAPH + {0xE9BE, 0x6A34}, //10927 #CJK UNIFIED IDEOGRAPH + {0xE9BF, 0x6A66}, //10928 #CJK UNIFIED IDEOGRAPH + {0xE9C0, 0x6A49}, //10929 #CJK UNIFIED IDEOGRAPH + {0xE9C1, 0x6A67}, //10930 #CJK UNIFIED IDEOGRAPH + {0xE9C2, 0x6A32}, //10931 #CJK UNIFIED IDEOGRAPH + {0xE9C3, 0x6A68}, //10932 #CJK UNIFIED IDEOGRAPH + {0xE9C4, 0x6A3E}, //10933 #CJK UNIFIED IDEOGRAPH + {0xE9C5, 0x6A5D}, //10934 #CJK UNIFIED IDEOGRAPH + {0xE9C6, 0x6A6D}, //10935 #CJK UNIFIED IDEOGRAPH + {0xE9C7, 0x6A76}, //10936 #CJK UNIFIED IDEOGRAPH + {0xE9C8, 0x6A5B}, //10937 #CJK UNIFIED IDEOGRAPH + {0xE9C9, 0x6A51}, //10938 #CJK UNIFIED IDEOGRAPH + {0xE9CA, 0x6A28}, //10939 #CJK UNIFIED IDEOGRAPH + {0xE9CB, 0x6A5A}, //10940 #CJK UNIFIED IDEOGRAPH + {0xE9CC, 0x6A3B}, //10941 #CJK UNIFIED IDEOGRAPH + {0xE9CD, 0x6A3F}, //10942 #CJK UNIFIED IDEOGRAPH + {0xE9CE, 0x6A41}, //10943 #CJK UNIFIED IDEOGRAPH + {0xE9CF, 0x6A6A}, //10944 #CJK UNIFIED IDEOGRAPH + {0xE9D0, 0x6A64}, //10945 #CJK UNIFIED IDEOGRAPH + {0xE9D1, 0x6A50}, //10946 #CJK UNIFIED IDEOGRAPH + {0xE9D2, 0x6A4F}, //10947 #CJK UNIFIED IDEOGRAPH + {0xE9D3, 0x6A54}, //10948 #CJK UNIFIED IDEOGRAPH + {0xE9D4, 0x6A6F}, //10949 #CJK UNIFIED IDEOGRAPH + {0xE9D5, 0x6A69}, //10950 #CJK UNIFIED IDEOGRAPH + {0xE9D6, 0x6A60}, //10951 #CJK UNIFIED IDEOGRAPH + {0xE9D7, 0x6A3C}, //10952 #CJK UNIFIED IDEOGRAPH + {0xE9D8, 0x6A5E}, //10953 #CJK UNIFIED IDEOGRAPH + {0xE9D9, 0x6A56}, //10954 #CJK UNIFIED IDEOGRAPH + {0xE9DA, 0x6A55}, //10955 #CJK UNIFIED IDEOGRAPH + {0xE9DB, 0x6A4D}, //10956 #CJK UNIFIED IDEOGRAPH + {0xE9DC, 0x6A4E}, //10957 #CJK UNIFIED IDEOGRAPH + {0xE9DD, 0x6A46}, //10958 #CJK UNIFIED IDEOGRAPH + {0xE9DE, 0x6B55}, //10959 #CJK UNIFIED IDEOGRAPH + {0xE9DF, 0x6B54}, //10960 #CJK UNIFIED IDEOGRAPH + {0xE9E0, 0x6B56}, //10961 #CJK UNIFIED IDEOGRAPH + {0xE9E1, 0x6BA7}, //10962 #CJK UNIFIED IDEOGRAPH + {0xE9E2, 0x6BAA}, //10963 #CJK UNIFIED IDEOGRAPH + {0xE9E3, 0x6BAB}, //10964 #CJK UNIFIED IDEOGRAPH + {0xE9E4, 0x6BC8}, //10965 #CJK UNIFIED IDEOGRAPH + {0xE9E5, 0x6BC7}, //10966 #CJK UNIFIED IDEOGRAPH + {0xE9E6, 0x6C04}, //10967 #CJK UNIFIED IDEOGRAPH + {0xE9E7, 0x6C03}, //10968 #CJK UNIFIED IDEOGRAPH + {0xE9E8, 0x6C06}, //10969 #CJK UNIFIED IDEOGRAPH + {0xE9E9, 0x6FAD}, //10970 #CJK UNIFIED IDEOGRAPH + {0xE9EA, 0x6FCB}, //10971 #CJK UNIFIED IDEOGRAPH + {0xE9EB, 0x6FA3}, //10972 #CJK UNIFIED IDEOGRAPH + {0xE9EC, 0x6FC7}, //10973 #CJK UNIFIED IDEOGRAPH + {0xE9ED, 0x6FBC}, //10974 #CJK UNIFIED IDEOGRAPH + {0xE9EE, 0x6FCE}, //10975 #CJK UNIFIED IDEOGRAPH + {0xE9EF, 0x6FC8}, //10976 #CJK UNIFIED IDEOGRAPH + {0xE9F0, 0x6F5E}, //10977 #CJK UNIFIED IDEOGRAPH + {0xE9F1, 0x6FC4}, //10978 #CJK UNIFIED IDEOGRAPH + {0xE9F2, 0x6FBD}, //10979 #CJK UNIFIED IDEOGRAPH + {0xE9F3, 0x6F9E}, //10980 #CJK UNIFIED IDEOGRAPH + {0xE9F4, 0x6FCA}, //10981 #CJK UNIFIED IDEOGRAPH + {0xE9F5, 0x6FA8}, //10982 #CJK UNIFIED IDEOGRAPH + {0xE9F6, 0x7004}, //10983 #CJK UNIFIED IDEOGRAPH + {0xE9F7, 0x6FA5}, //10984 #CJK UNIFIED IDEOGRAPH + {0xE9F8, 0x6FAE}, //10985 #CJK UNIFIED IDEOGRAPH + {0xE9F9, 0x6FBA}, //10986 #CJK UNIFIED IDEOGRAPH + {0xE9FA, 0x6FAC}, //10987 #CJK UNIFIED IDEOGRAPH + {0xE9FB, 0x6FAA}, //10988 #CJK UNIFIED IDEOGRAPH + {0xE9FC, 0x6FCF}, //10989 #CJK UNIFIED IDEOGRAPH + {0xE9FD, 0x6FBF}, //10990 #CJK UNIFIED IDEOGRAPH + {0xE9FE, 0x6FB8}, //10991 #CJK UNIFIED IDEOGRAPH + {0xEA40, 0x6FA2}, //10992 #CJK UNIFIED IDEOGRAPH + {0xEA41, 0x6FC9}, //10993 #CJK UNIFIED IDEOGRAPH + {0xEA42, 0x6FAB}, //10994 #CJK UNIFIED IDEOGRAPH + {0xEA43, 0x6FCD}, //10995 #CJK UNIFIED IDEOGRAPH + {0xEA44, 0x6FAF}, //10996 #CJK UNIFIED IDEOGRAPH + {0xEA45, 0x6FB2}, //10997 #CJK UNIFIED IDEOGRAPH + {0xEA46, 0x6FB0}, //10998 #CJK UNIFIED IDEOGRAPH + {0xEA47, 0x71C5}, //10999 #CJK UNIFIED IDEOGRAPH + {0xEA48, 0x71C2}, //11000 #CJK UNIFIED IDEOGRAPH + {0xEA49, 0x71BF}, //11001 #CJK UNIFIED IDEOGRAPH + {0xEA4A, 0x71B8}, //11002 #CJK UNIFIED IDEOGRAPH + {0xEA4B, 0x71D6}, //11003 #CJK UNIFIED IDEOGRAPH + {0xEA4C, 0x71C0}, //11004 #CJK UNIFIED IDEOGRAPH + {0xEA4D, 0x71C1}, //11005 #CJK UNIFIED IDEOGRAPH + {0xEA4E, 0x71CB}, //11006 #CJK UNIFIED IDEOGRAPH + {0xEA4F, 0x71D4}, //11007 #CJK UNIFIED IDEOGRAPH + {0xEA50, 0x71CA}, //11008 #CJK UNIFIED IDEOGRAPH + {0xEA51, 0x71C7}, //11009 #CJK UNIFIED IDEOGRAPH + {0xEA52, 0x71CF}, //11010 #CJK UNIFIED IDEOGRAPH + {0xEA53, 0x71BD}, //11011 #CJK UNIFIED IDEOGRAPH + {0xEA54, 0x71D8}, //11012 #CJK UNIFIED IDEOGRAPH + {0xEA55, 0x71BC}, //11013 #CJK UNIFIED IDEOGRAPH + {0xEA56, 0x71C6}, //11014 #CJK UNIFIED IDEOGRAPH + {0xEA57, 0x71DA}, //11015 #CJK UNIFIED IDEOGRAPH + {0xEA58, 0x71DB}, //11016 #CJK UNIFIED IDEOGRAPH + {0xEA59, 0x729D}, //11017 #CJK UNIFIED IDEOGRAPH + {0xEA5A, 0x729E}, //11018 #CJK UNIFIED IDEOGRAPH + {0xEA5B, 0x7369}, //11019 #CJK UNIFIED IDEOGRAPH + {0xEA5C, 0x7366}, //11020 #CJK UNIFIED IDEOGRAPH + {0xEA5D, 0x7367}, //11021 #CJK UNIFIED IDEOGRAPH + {0xEA5E, 0x736C}, //11022 #CJK UNIFIED IDEOGRAPH + {0xEA5F, 0x7365}, //11023 #CJK UNIFIED IDEOGRAPH + {0xEA60, 0x736B}, //11024 #CJK UNIFIED IDEOGRAPH + {0xEA61, 0x736A}, //11025 #CJK UNIFIED IDEOGRAPH + {0xEA62, 0x747F}, //11026 #CJK UNIFIED IDEOGRAPH + {0xEA63, 0x749A}, //11027 #CJK UNIFIED IDEOGRAPH + {0xEA64, 0x74A0}, //11028 #CJK UNIFIED IDEOGRAPH + {0xEA65, 0x7494}, //11029 #CJK UNIFIED IDEOGRAPH + {0xEA66, 0x7492}, //11030 #CJK UNIFIED IDEOGRAPH + {0xEA67, 0x7495}, //11031 #CJK UNIFIED IDEOGRAPH + {0xEA68, 0x74A1}, //11032 #CJK UNIFIED IDEOGRAPH + {0xEA69, 0x750B}, //11033 #CJK UNIFIED IDEOGRAPH + {0xEA6A, 0x7580}, //11034 #CJK UNIFIED IDEOGRAPH + {0xEA6B, 0x762F}, //11035 #CJK UNIFIED IDEOGRAPH + {0xEA6C, 0x762D}, //11036 #CJK UNIFIED IDEOGRAPH + {0xEA6D, 0x7631}, //11037 #CJK UNIFIED IDEOGRAPH + {0xEA6E, 0x763D}, //11038 #CJK UNIFIED IDEOGRAPH + {0xEA6F, 0x7633}, //11039 #CJK UNIFIED IDEOGRAPH + {0xEA70, 0x763C}, //11040 #CJK UNIFIED IDEOGRAPH + {0xEA71, 0x7635}, //11041 #CJK UNIFIED IDEOGRAPH + {0xEA72, 0x7632}, //11042 #CJK UNIFIED IDEOGRAPH + {0xEA73, 0x7630}, //11043 #CJK UNIFIED IDEOGRAPH + {0xEA74, 0x76BB}, //11044 #CJK UNIFIED IDEOGRAPH + {0xEA75, 0x76E6}, //11045 #CJK UNIFIED IDEOGRAPH + {0xEA76, 0x779A}, //11046 #CJK UNIFIED IDEOGRAPH + {0xEA77, 0x779D}, //11047 #CJK UNIFIED IDEOGRAPH + {0xEA78, 0x77A1}, //11048 #CJK UNIFIED IDEOGRAPH + {0xEA79, 0x779C}, //11049 #CJK UNIFIED IDEOGRAPH + {0xEA7A, 0x779B}, //11050 #CJK UNIFIED IDEOGRAPH + {0xEA7B, 0x77A2}, //11051 #CJK UNIFIED IDEOGRAPH + {0xEA7C, 0x77A3}, //11052 #CJK UNIFIED IDEOGRAPH + {0xEA7D, 0x7795}, //11053 #CJK UNIFIED IDEOGRAPH + {0xEA7E, 0x7799}, //11054 #CJK UNIFIED IDEOGRAPH + {0xEAA1, 0x7797}, //11055 #CJK UNIFIED IDEOGRAPH + {0xEAA2, 0x78DD}, //11056 #CJK UNIFIED IDEOGRAPH + {0xEAA3, 0x78E9}, //11057 #CJK UNIFIED IDEOGRAPH + {0xEAA4, 0x78E5}, //11058 #CJK UNIFIED IDEOGRAPH + {0xEAA5, 0x78EA}, //11059 #CJK UNIFIED IDEOGRAPH + {0xEAA6, 0x78DE}, //11060 #CJK UNIFIED IDEOGRAPH + {0xEAA7, 0x78E3}, //11061 #CJK UNIFIED IDEOGRAPH + {0xEAA8, 0x78DB}, //11062 #CJK UNIFIED IDEOGRAPH + {0xEAA9, 0x78E1}, //11063 #CJK UNIFIED IDEOGRAPH + {0xEAAA, 0x78E2}, //11064 #CJK UNIFIED IDEOGRAPH + {0xEAAB, 0x78ED}, //11065 #CJK UNIFIED IDEOGRAPH + {0xEAAC, 0x78DF}, //11066 #CJK UNIFIED IDEOGRAPH + {0xEAAD, 0x78E0}, //11067 #CJK UNIFIED IDEOGRAPH + {0xEAAE, 0x79A4}, //11068 #CJK UNIFIED IDEOGRAPH + {0xEAAF, 0x7A44}, //11069 #CJK UNIFIED IDEOGRAPH + {0xEAB0, 0x7A48}, //11070 #CJK UNIFIED IDEOGRAPH + {0xEAB1, 0x7A47}, //11071 #CJK UNIFIED IDEOGRAPH + {0xEAB2, 0x7AB6}, //11072 #CJK UNIFIED IDEOGRAPH + {0xEAB3, 0x7AB8}, //11073 #CJK UNIFIED IDEOGRAPH + {0xEAB4, 0x7AB5}, //11074 #CJK UNIFIED IDEOGRAPH + {0xEAB5, 0x7AB1}, //11075 #CJK UNIFIED IDEOGRAPH + {0xEAB6, 0x7AB7}, //11076 #CJK UNIFIED IDEOGRAPH + {0xEAB7, 0x7BDE}, //11077 #CJK UNIFIED IDEOGRAPH + {0xEAB8, 0x7BE3}, //11078 #CJK UNIFIED IDEOGRAPH + {0xEAB9, 0x7BE7}, //11079 #CJK UNIFIED IDEOGRAPH + {0xEABA, 0x7BDD}, //11080 #CJK UNIFIED IDEOGRAPH + {0xEABB, 0x7BD5}, //11081 #CJK UNIFIED IDEOGRAPH + {0xEABC, 0x7BE5}, //11082 #CJK UNIFIED IDEOGRAPH + {0xEABD, 0x7BDA}, //11083 #CJK UNIFIED IDEOGRAPH + {0xEABE, 0x7BE8}, //11084 #CJK UNIFIED IDEOGRAPH + {0xEABF, 0x7BF9}, //11085 #CJK UNIFIED IDEOGRAPH + {0xEAC0, 0x7BD4}, //11086 #CJK UNIFIED IDEOGRAPH + {0xEAC1, 0x7BEA}, //11087 #CJK UNIFIED IDEOGRAPH + {0xEAC2, 0x7BE2}, //11088 #CJK UNIFIED IDEOGRAPH + {0xEAC3, 0x7BDC}, //11089 #CJK UNIFIED IDEOGRAPH + {0xEAC4, 0x7BEB}, //11090 #CJK UNIFIED IDEOGRAPH + {0xEAC5, 0x7BD8}, //11091 #CJK UNIFIED IDEOGRAPH + {0xEAC6, 0x7BDF}, //11092 #CJK UNIFIED IDEOGRAPH + {0xEAC7, 0x7CD2}, //11093 #CJK UNIFIED IDEOGRAPH + {0xEAC8, 0x7CD4}, //11094 #CJK UNIFIED IDEOGRAPH + {0xEAC9, 0x7CD7}, //11095 #CJK UNIFIED IDEOGRAPH + {0xEACA, 0x7CD0}, //11096 #CJK UNIFIED IDEOGRAPH + {0xEACB, 0x7CD1}, //11097 #CJK UNIFIED IDEOGRAPH + {0xEACC, 0x7E12}, //11098 #CJK UNIFIED IDEOGRAPH + {0xEACD, 0x7E21}, //11099 #CJK UNIFIED IDEOGRAPH + {0xEACE, 0x7E17}, //11100 #CJK UNIFIED IDEOGRAPH + {0xEACF, 0x7E0C}, //11101 #CJK UNIFIED IDEOGRAPH + {0xEAD0, 0x7E1F}, //11102 #CJK UNIFIED IDEOGRAPH + {0xEAD1, 0x7E20}, //11103 #CJK UNIFIED IDEOGRAPH + {0xEAD2, 0x7E13}, //11104 #CJK UNIFIED IDEOGRAPH + {0xEAD3, 0x7E0E}, //11105 #CJK UNIFIED IDEOGRAPH + {0xEAD4, 0x7E1C}, //11106 #CJK UNIFIED IDEOGRAPH + {0xEAD5, 0x7E15}, //11107 #CJK UNIFIED IDEOGRAPH + {0xEAD6, 0x7E1A}, //11108 #CJK UNIFIED IDEOGRAPH + {0xEAD7, 0x7E22}, //11109 #CJK UNIFIED IDEOGRAPH + {0xEAD8, 0x7E0B}, //11110 #CJK UNIFIED IDEOGRAPH + {0xEAD9, 0x7E0F}, //11111 #CJK UNIFIED IDEOGRAPH + {0xEADA, 0x7E16}, //11112 #CJK UNIFIED IDEOGRAPH + {0xEADB, 0x7E0D}, //11113 #CJK UNIFIED IDEOGRAPH + {0xEADC, 0x7E14}, //11114 #CJK UNIFIED IDEOGRAPH + {0xEADD, 0x7E25}, //11115 #CJK UNIFIED IDEOGRAPH + {0xEADE, 0x7E24}, //11116 #CJK UNIFIED IDEOGRAPH + {0xEADF, 0x7F43}, //11117 #CJK UNIFIED IDEOGRAPH + {0xEAE0, 0x7F7B}, //11118 #CJK UNIFIED IDEOGRAPH + {0xEAE1, 0x7F7C}, //11119 #CJK UNIFIED IDEOGRAPH + {0xEAE2, 0x7F7A}, //11120 #CJK UNIFIED IDEOGRAPH + {0xEAE3, 0x7FB1}, //11121 #CJK UNIFIED IDEOGRAPH + {0xEAE4, 0x7FEF}, //11122 #CJK UNIFIED IDEOGRAPH + {0xEAE5, 0x802A}, //11123 #CJK UNIFIED IDEOGRAPH + {0xEAE6, 0x8029}, //11124 #CJK UNIFIED IDEOGRAPH + {0xEAE7, 0x806C}, //11125 #CJK UNIFIED IDEOGRAPH + {0xEAE8, 0x81B1}, //11126 #CJK UNIFIED IDEOGRAPH + {0xEAE9, 0x81A6}, //11127 #CJK UNIFIED IDEOGRAPH + {0xEAEA, 0x81AE}, //11128 #CJK UNIFIED IDEOGRAPH + {0xEAEB, 0x81B9}, //11129 #CJK UNIFIED IDEOGRAPH + {0xEAEC, 0x81B5}, //11130 #CJK UNIFIED IDEOGRAPH + {0xEAED, 0x81AB}, //11131 #CJK UNIFIED IDEOGRAPH + {0xEAEE, 0x81B0}, //11132 #CJK UNIFIED IDEOGRAPH + {0xEAEF, 0x81AC}, //11133 #CJK UNIFIED IDEOGRAPH + {0xEAF0, 0x81B4}, //11134 #CJK UNIFIED IDEOGRAPH + {0xEAF1, 0x81B2}, //11135 #CJK UNIFIED IDEOGRAPH + {0xEAF2, 0x81B7}, //11136 #CJK UNIFIED IDEOGRAPH + {0xEAF3, 0x81A7}, //11137 #CJK UNIFIED IDEOGRAPH + {0xEAF4, 0x81F2}, //11138 #CJK UNIFIED IDEOGRAPH + {0xEAF5, 0x8255}, //11139 #CJK UNIFIED IDEOGRAPH + {0xEAF6, 0x8256}, //11140 #CJK UNIFIED IDEOGRAPH + {0xEAF7, 0x8257}, //11141 #CJK UNIFIED IDEOGRAPH + {0xEAF8, 0x8556}, //11142 #CJK UNIFIED IDEOGRAPH + {0xEAF9, 0x8545}, //11143 #CJK UNIFIED IDEOGRAPH + {0xEAFA, 0x856B}, //11144 #CJK UNIFIED IDEOGRAPH + {0xEAFB, 0x854D}, //11145 #CJK UNIFIED IDEOGRAPH + {0xEAFC, 0x8553}, //11146 #CJK UNIFIED IDEOGRAPH + {0xEAFD, 0x8561}, //11147 #CJK UNIFIED IDEOGRAPH + {0xEAFE, 0x8558}, //11148 #CJK UNIFIED IDEOGRAPH + {0xEB40, 0x8540}, //11149 #CJK UNIFIED IDEOGRAPH + {0xEB41, 0x8546}, //11150 #CJK UNIFIED IDEOGRAPH + {0xEB42, 0x8564}, //11151 #CJK UNIFIED IDEOGRAPH + {0xEB43, 0x8541}, //11152 #CJK UNIFIED IDEOGRAPH + {0xEB44, 0x8562}, //11153 #CJK UNIFIED IDEOGRAPH + {0xEB45, 0x8544}, //11154 #CJK UNIFIED IDEOGRAPH + {0xEB46, 0x8551}, //11155 #CJK UNIFIED IDEOGRAPH + {0xEB47, 0x8547}, //11156 #CJK UNIFIED IDEOGRAPH + {0xEB48, 0x8563}, //11157 #CJK UNIFIED IDEOGRAPH + {0xEB49, 0x853E}, //11158 #CJK UNIFIED IDEOGRAPH + {0xEB4A, 0x855B}, //11159 #CJK UNIFIED IDEOGRAPH + {0xEB4B, 0x8571}, //11160 #CJK UNIFIED IDEOGRAPH + {0xEB4C, 0x854E}, //11161 #CJK UNIFIED IDEOGRAPH + {0xEB4D, 0x856E}, //11162 #CJK UNIFIED IDEOGRAPH + {0xEB4E, 0x8575}, //11163 #CJK UNIFIED IDEOGRAPH + {0xEB4F, 0x8555}, //11164 #CJK UNIFIED IDEOGRAPH + {0xEB50, 0x8567}, //11165 #CJK UNIFIED IDEOGRAPH + {0xEB51, 0x8560}, //11166 #CJK UNIFIED IDEOGRAPH + {0xEB52, 0x858C}, //11167 #CJK UNIFIED IDEOGRAPH + {0xEB53, 0x8566}, //11168 #CJK UNIFIED IDEOGRAPH + {0xEB54, 0x855D}, //11169 #CJK UNIFIED IDEOGRAPH + {0xEB55, 0x8554}, //11170 #CJK UNIFIED IDEOGRAPH + {0xEB56, 0x8565}, //11171 #CJK UNIFIED IDEOGRAPH + {0xEB57, 0x856C}, //11172 #CJK UNIFIED IDEOGRAPH + {0xEB58, 0x8663}, //11173 #CJK UNIFIED IDEOGRAPH + {0xEB59, 0x8665}, //11174 #CJK UNIFIED IDEOGRAPH + {0xEB5A, 0x8664}, //11175 #CJK UNIFIED IDEOGRAPH + {0xEB5B, 0x879B}, //11176 #CJK UNIFIED IDEOGRAPH + {0xEB5C, 0x878F}, //11177 #CJK UNIFIED IDEOGRAPH + {0xEB5D, 0x8797}, //11178 #CJK UNIFIED IDEOGRAPH + {0xEB5E, 0x8793}, //11179 #CJK UNIFIED IDEOGRAPH + {0xEB5F, 0x8792}, //11180 #CJK UNIFIED IDEOGRAPH + {0xEB60, 0x8788}, //11181 #CJK UNIFIED IDEOGRAPH + {0xEB61, 0x8781}, //11182 #CJK UNIFIED IDEOGRAPH + {0xEB62, 0x8796}, //11183 #CJK UNIFIED IDEOGRAPH + {0xEB63, 0x8798}, //11184 #CJK UNIFIED IDEOGRAPH + {0xEB64, 0x8779}, //11185 #CJK UNIFIED IDEOGRAPH + {0xEB65, 0x8787}, //11186 #CJK UNIFIED IDEOGRAPH + {0xEB66, 0x87A3}, //11187 #CJK UNIFIED IDEOGRAPH + {0xEB67, 0x8785}, //11188 #CJK UNIFIED IDEOGRAPH + {0xEB68, 0x8790}, //11189 #CJK UNIFIED IDEOGRAPH + {0xEB69, 0x8791}, //11190 #CJK UNIFIED IDEOGRAPH + {0xEB6A, 0x879D}, //11191 #CJK UNIFIED IDEOGRAPH + {0xEB6B, 0x8784}, //11192 #CJK UNIFIED IDEOGRAPH + {0xEB6C, 0x8794}, //11193 #CJK UNIFIED IDEOGRAPH + {0xEB6D, 0x879C}, //11194 #CJK UNIFIED IDEOGRAPH + {0xEB6E, 0x879A}, //11195 #CJK UNIFIED IDEOGRAPH + {0xEB6F, 0x8789}, //11196 #CJK UNIFIED IDEOGRAPH + {0xEB70, 0x891E}, //11197 #CJK UNIFIED IDEOGRAPH + {0xEB71, 0x8926}, //11198 #CJK UNIFIED IDEOGRAPH + {0xEB72, 0x8930}, //11199 #CJK UNIFIED IDEOGRAPH + {0xEB73, 0x892D}, //11200 #CJK UNIFIED IDEOGRAPH + {0xEB74, 0x892E}, //11201 #CJK UNIFIED IDEOGRAPH + {0xEB75, 0x8927}, //11202 #CJK UNIFIED IDEOGRAPH + {0xEB76, 0x8931}, //11203 #CJK UNIFIED IDEOGRAPH + {0xEB77, 0x8922}, //11204 #CJK UNIFIED IDEOGRAPH + {0xEB78, 0x8929}, //11205 #CJK UNIFIED IDEOGRAPH + {0xEB79, 0x8923}, //11206 #CJK UNIFIED IDEOGRAPH + {0xEB7A, 0x892F}, //11207 #CJK UNIFIED IDEOGRAPH + {0xEB7B, 0x892C}, //11208 #CJK UNIFIED IDEOGRAPH + {0xEB7C, 0x891F}, //11209 #CJK UNIFIED IDEOGRAPH + {0xEB7D, 0x89F1}, //11210 #CJK UNIFIED IDEOGRAPH + {0xEB7E, 0x8AE0}, //11211 #CJK UNIFIED IDEOGRAPH + {0xEBA1, 0x8AE2}, //11212 #CJK UNIFIED IDEOGRAPH + {0xEBA2, 0x8AF2}, //11213 #CJK UNIFIED IDEOGRAPH + {0xEBA3, 0x8AF4}, //11214 #CJK UNIFIED IDEOGRAPH + {0xEBA4, 0x8AF5}, //11215 #CJK UNIFIED IDEOGRAPH + {0xEBA5, 0x8ADD}, //11216 #CJK UNIFIED IDEOGRAPH + {0xEBA6, 0x8B14}, //11217 #CJK UNIFIED IDEOGRAPH + {0xEBA7, 0x8AE4}, //11218 #CJK UNIFIED IDEOGRAPH + {0xEBA8, 0x8ADF}, //11219 #CJK UNIFIED IDEOGRAPH + {0xEBA9, 0x8AF0}, //11220 #CJK UNIFIED IDEOGRAPH + {0xEBAA, 0x8AC8}, //11221 #CJK UNIFIED IDEOGRAPH + {0xEBAB, 0x8ADE}, //11222 #CJK UNIFIED IDEOGRAPH + {0xEBAC, 0x8AE1}, //11223 #CJK UNIFIED IDEOGRAPH + {0xEBAD, 0x8AE8}, //11224 #CJK UNIFIED IDEOGRAPH + {0xEBAE, 0x8AFF}, //11225 #CJK UNIFIED IDEOGRAPH + {0xEBAF, 0x8AEF}, //11226 #CJK UNIFIED IDEOGRAPH + {0xEBB0, 0x8AFB}, //11227 #CJK UNIFIED IDEOGRAPH + {0xEBB1, 0x8C91}, //11228 #CJK UNIFIED IDEOGRAPH + {0xEBB2, 0x8C92}, //11229 #CJK UNIFIED IDEOGRAPH + {0xEBB3, 0x8C90}, //11230 #CJK UNIFIED IDEOGRAPH + {0xEBB4, 0x8CF5}, //11231 #CJK UNIFIED IDEOGRAPH + {0xEBB5, 0x8CEE}, //11232 #CJK UNIFIED IDEOGRAPH + {0xEBB6, 0x8CF1}, //11233 #CJK UNIFIED IDEOGRAPH + {0xEBB7, 0x8CF0}, //11234 #CJK UNIFIED IDEOGRAPH + {0xEBB8, 0x8CF3}, //11235 #CJK UNIFIED IDEOGRAPH + {0xEBB9, 0x8D6C}, //11236 #CJK UNIFIED IDEOGRAPH + {0xEBBA, 0x8D6E}, //11237 #CJK UNIFIED IDEOGRAPH + {0xEBBB, 0x8DA5}, //11238 #CJK UNIFIED IDEOGRAPH + {0xEBBC, 0x8DA7}, //11239 #CJK UNIFIED IDEOGRAPH + {0xEBBD, 0x8E33}, //11240 #CJK UNIFIED IDEOGRAPH + {0xEBBE, 0x8E3E}, //11241 #CJK UNIFIED IDEOGRAPH + {0xEBBF, 0x8E38}, //11242 #CJK UNIFIED IDEOGRAPH + {0xEBC0, 0x8E40}, //11243 #CJK UNIFIED IDEOGRAPH + {0xEBC1, 0x8E45}, //11244 #CJK UNIFIED IDEOGRAPH + {0xEBC2, 0x8E36}, //11245 #CJK UNIFIED IDEOGRAPH + {0xEBC3, 0x8E3C}, //11246 #CJK UNIFIED IDEOGRAPH + {0xEBC4, 0x8E3D}, //11247 #CJK UNIFIED IDEOGRAPH + {0xEBC5, 0x8E41}, //11248 #CJK UNIFIED IDEOGRAPH + {0xEBC6, 0x8E30}, //11249 #CJK UNIFIED IDEOGRAPH + {0xEBC7, 0x8E3F}, //11250 #CJK UNIFIED IDEOGRAPH + {0xEBC8, 0x8EBD}, //11251 #CJK UNIFIED IDEOGRAPH + {0xEBC9, 0x8F36}, //11252 #CJK UNIFIED IDEOGRAPH + {0xEBCA, 0x8F2E}, //11253 #CJK UNIFIED IDEOGRAPH + {0xEBCB, 0x8F35}, //11254 #CJK UNIFIED IDEOGRAPH + {0xEBCC, 0x8F32}, //11255 #CJK UNIFIED IDEOGRAPH + {0xEBCD, 0x8F39}, //11256 #CJK UNIFIED IDEOGRAPH + {0xEBCE, 0x8F37}, //11257 #CJK UNIFIED IDEOGRAPH + {0xEBCF, 0x8F34}, //11258 #CJK UNIFIED IDEOGRAPH + {0xEBD0, 0x9076}, //11259 #CJK UNIFIED IDEOGRAPH + {0xEBD1, 0x9079}, //11260 #CJK UNIFIED IDEOGRAPH + {0xEBD2, 0x907B}, //11261 #CJK UNIFIED IDEOGRAPH + {0xEBD3, 0x9086}, //11262 #CJK UNIFIED IDEOGRAPH + {0xEBD4, 0x90FA}, //11263 #CJK UNIFIED IDEOGRAPH + {0xEBD5, 0x9133}, //11264 #CJK UNIFIED IDEOGRAPH + {0xEBD6, 0x9135}, //11265 #CJK UNIFIED IDEOGRAPH + {0xEBD7, 0x9136}, //11266 #CJK UNIFIED IDEOGRAPH + {0xEBD8, 0x9193}, //11267 #CJK UNIFIED IDEOGRAPH + {0xEBD9, 0x9190}, //11268 #CJK UNIFIED IDEOGRAPH + {0xEBDA, 0x9191}, //11269 #CJK UNIFIED IDEOGRAPH + {0xEBDB, 0x918D}, //11270 #CJK UNIFIED IDEOGRAPH + {0xEBDC, 0x918F}, //11271 #CJK UNIFIED IDEOGRAPH + {0xEBDD, 0x9327}, //11272 #CJK UNIFIED IDEOGRAPH + {0xEBDE, 0x931E}, //11273 #CJK UNIFIED IDEOGRAPH + {0xEBDF, 0x9308}, //11274 #CJK UNIFIED IDEOGRAPH + {0xEBE0, 0x931F}, //11275 #CJK UNIFIED IDEOGRAPH + {0xEBE1, 0x9306}, //11276 #CJK UNIFIED IDEOGRAPH + {0xEBE2, 0x930F}, //11277 #CJK UNIFIED IDEOGRAPH + {0xEBE3, 0x937A}, //11278 #CJK UNIFIED IDEOGRAPH + {0xEBE4, 0x9338}, //11279 #CJK UNIFIED IDEOGRAPH + {0xEBE5, 0x933C}, //11280 #CJK UNIFIED IDEOGRAPH + {0xEBE6, 0x931B}, //11281 #CJK UNIFIED IDEOGRAPH + {0xEBE7, 0x9323}, //11282 #CJK UNIFIED IDEOGRAPH + {0xEBE8, 0x9312}, //11283 #CJK UNIFIED IDEOGRAPH + {0xEBE9, 0x9301}, //11284 #CJK UNIFIED IDEOGRAPH + {0xEBEA, 0x9346}, //11285 #CJK UNIFIED IDEOGRAPH + {0xEBEB, 0x932D}, //11286 #CJK UNIFIED IDEOGRAPH + {0xEBEC, 0x930E}, //11287 #CJK UNIFIED IDEOGRAPH + {0xEBED, 0x930D}, //11288 #CJK UNIFIED IDEOGRAPH + {0xEBEE, 0x92CB}, //11289 #CJK UNIFIED IDEOGRAPH + {0xEBEF, 0x931D}, //11290 #CJK UNIFIED IDEOGRAPH + {0xEBF0, 0x92FA}, //11291 #CJK UNIFIED IDEOGRAPH + {0xEBF1, 0x9325}, //11292 #CJK UNIFIED IDEOGRAPH + {0xEBF2, 0x9313}, //11293 #CJK UNIFIED IDEOGRAPH + {0xEBF3, 0x92F9}, //11294 #CJK UNIFIED IDEOGRAPH + {0xEBF4, 0x92F7}, //11295 #CJK UNIFIED IDEOGRAPH + {0xEBF5, 0x9334}, //11296 #CJK UNIFIED IDEOGRAPH + {0xEBF6, 0x9302}, //11297 #CJK UNIFIED IDEOGRAPH + {0xEBF7, 0x9324}, //11298 #CJK UNIFIED IDEOGRAPH + {0xEBF8, 0x92FF}, //11299 #CJK UNIFIED IDEOGRAPH + {0xEBF9, 0x9329}, //11300 #CJK UNIFIED IDEOGRAPH + {0xEBFA, 0x9339}, //11301 #CJK UNIFIED IDEOGRAPH + {0xEBFB, 0x9335}, //11302 #CJK UNIFIED IDEOGRAPH + {0xEBFC, 0x932A}, //11303 #CJK UNIFIED IDEOGRAPH + {0xEBFD, 0x9314}, //11304 #CJK UNIFIED IDEOGRAPH + {0xEBFE, 0x930C}, //11305 #CJK UNIFIED IDEOGRAPH + {0xEC40, 0x930B}, //11306 #CJK UNIFIED IDEOGRAPH + {0xEC41, 0x92FE}, //11307 #CJK UNIFIED IDEOGRAPH + {0xEC42, 0x9309}, //11308 #CJK UNIFIED IDEOGRAPH + {0xEC43, 0x9300}, //11309 #CJK UNIFIED IDEOGRAPH + {0xEC44, 0x92FB}, //11310 #CJK UNIFIED IDEOGRAPH + {0xEC45, 0x9316}, //11311 #CJK UNIFIED IDEOGRAPH + {0xEC46, 0x95BC}, //11312 #CJK UNIFIED IDEOGRAPH + {0xEC47, 0x95CD}, //11313 #CJK UNIFIED IDEOGRAPH + {0xEC48, 0x95BE}, //11314 #CJK UNIFIED IDEOGRAPH + {0xEC49, 0x95B9}, //11315 #CJK UNIFIED IDEOGRAPH + {0xEC4A, 0x95BA}, //11316 #CJK UNIFIED IDEOGRAPH + {0xEC4B, 0x95B6}, //11317 #CJK UNIFIED IDEOGRAPH + {0xEC4C, 0x95BF}, //11318 #CJK UNIFIED IDEOGRAPH + {0xEC4D, 0x95B5}, //11319 #CJK UNIFIED IDEOGRAPH + {0xEC4E, 0x95BD}, //11320 #CJK UNIFIED IDEOGRAPH + {0xEC4F, 0x96A9}, //11321 #CJK UNIFIED IDEOGRAPH + {0xEC50, 0x96D4}, //11322 #CJK UNIFIED IDEOGRAPH + {0xEC51, 0x970B}, //11323 #CJK UNIFIED IDEOGRAPH + {0xEC52, 0x9712}, //11324 #CJK UNIFIED IDEOGRAPH + {0xEC53, 0x9710}, //11325 #CJK UNIFIED IDEOGRAPH + {0xEC54, 0x9799}, //11326 #CJK UNIFIED IDEOGRAPH + {0xEC55, 0x9797}, //11327 #CJK UNIFIED IDEOGRAPH + {0xEC56, 0x9794}, //11328 #CJK UNIFIED IDEOGRAPH + {0xEC57, 0x97F0}, //11329 #CJK UNIFIED IDEOGRAPH + {0xEC58, 0x97F8}, //11330 #CJK UNIFIED IDEOGRAPH + {0xEC59, 0x9835}, //11331 #CJK UNIFIED IDEOGRAPH + {0xEC5A, 0x982F}, //11332 #CJK UNIFIED IDEOGRAPH + {0xEC5B, 0x9832}, //11333 #CJK UNIFIED IDEOGRAPH + {0xEC5C, 0x9924}, //11334 #CJK UNIFIED IDEOGRAPH + {0xEC5D, 0x991F}, //11335 #CJK UNIFIED IDEOGRAPH + {0xEC5E, 0x9927}, //11336 #CJK UNIFIED IDEOGRAPH + {0xEC5F, 0x9929}, //11337 #CJK UNIFIED IDEOGRAPH + {0xEC60, 0x999E}, //11338 #CJK UNIFIED IDEOGRAPH + {0xEC61, 0x99EE}, //11339 #CJK UNIFIED IDEOGRAPH + {0xEC62, 0x99EC}, //11340 #CJK UNIFIED IDEOGRAPH + {0xEC63, 0x99E5}, //11341 #CJK UNIFIED IDEOGRAPH + {0xEC64, 0x99E4}, //11342 #CJK UNIFIED IDEOGRAPH + {0xEC65, 0x99F0}, //11343 #CJK UNIFIED IDEOGRAPH + {0xEC66, 0x99E3}, //11344 #CJK UNIFIED IDEOGRAPH + {0xEC67, 0x99EA}, //11345 #CJK UNIFIED IDEOGRAPH + {0xEC68, 0x99E9}, //11346 #CJK UNIFIED IDEOGRAPH + {0xEC69, 0x99E7}, //11347 #CJK UNIFIED IDEOGRAPH + {0xEC6A, 0x9AB9}, //11348 #CJK UNIFIED IDEOGRAPH + {0xEC6B, 0x9ABF}, //11349 #CJK UNIFIED IDEOGRAPH + {0xEC6C, 0x9AB4}, //11350 #CJK UNIFIED IDEOGRAPH + {0xEC6D, 0x9ABB}, //11351 #CJK UNIFIED IDEOGRAPH + {0xEC6E, 0x9AF6}, //11352 #CJK UNIFIED IDEOGRAPH + {0xEC6F, 0x9AFA}, //11353 #CJK UNIFIED IDEOGRAPH + {0xEC70, 0x9AF9}, //11354 #CJK UNIFIED IDEOGRAPH + {0xEC71, 0x9AF7}, //11355 #CJK UNIFIED IDEOGRAPH + {0xEC72, 0x9B33}, //11356 #CJK UNIFIED IDEOGRAPH + {0xEC73, 0x9B80}, //11357 #CJK UNIFIED IDEOGRAPH + {0xEC74, 0x9B85}, //11358 #CJK UNIFIED IDEOGRAPH + {0xEC75, 0x9B87}, //11359 #CJK UNIFIED IDEOGRAPH + {0xEC76, 0x9B7C}, //11360 #CJK UNIFIED IDEOGRAPH + {0xEC77, 0x9B7E}, //11361 #CJK UNIFIED IDEOGRAPH + {0xEC78, 0x9B7B}, //11362 #CJK UNIFIED IDEOGRAPH + {0xEC79, 0x9B82}, //11363 #CJK UNIFIED IDEOGRAPH + {0xEC7A, 0x9B93}, //11364 #CJK UNIFIED IDEOGRAPH + {0xEC7B, 0x9B92}, //11365 #CJK UNIFIED IDEOGRAPH + {0xEC7C, 0x9B90}, //11366 #CJK UNIFIED IDEOGRAPH + {0xEC7D, 0x9B7A}, //11367 #CJK UNIFIED IDEOGRAPH + {0xEC7E, 0x9B95}, //11368 #CJK UNIFIED IDEOGRAPH + {0xECA1, 0x9B7D}, //11369 #CJK UNIFIED IDEOGRAPH + {0xECA2, 0x9B88}, //11370 #CJK UNIFIED IDEOGRAPH + {0xECA3, 0x9D25}, //11371 #CJK UNIFIED IDEOGRAPH + {0xECA4, 0x9D17}, //11372 #CJK UNIFIED IDEOGRAPH + {0xECA5, 0x9D20}, //11373 #CJK UNIFIED IDEOGRAPH + {0xECA6, 0x9D1E}, //11374 #CJK UNIFIED IDEOGRAPH + {0xECA7, 0x9D14}, //11375 #CJK UNIFIED IDEOGRAPH + {0xECA8, 0x9D29}, //11376 #CJK UNIFIED IDEOGRAPH + {0xECA9, 0x9D1D}, //11377 #CJK UNIFIED IDEOGRAPH + {0xECAA, 0x9D18}, //11378 #CJK UNIFIED IDEOGRAPH + {0xECAB, 0x9D22}, //11379 #CJK UNIFIED IDEOGRAPH + {0xECAC, 0x9D10}, //11380 #CJK UNIFIED IDEOGRAPH + {0xECAD, 0x9D19}, //11381 #CJK UNIFIED IDEOGRAPH + {0xECAE, 0x9D1F}, //11382 #CJK UNIFIED IDEOGRAPH + {0xECAF, 0x9E88}, //11383 #CJK UNIFIED IDEOGRAPH + {0xECB0, 0x9E86}, //11384 #CJK UNIFIED IDEOGRAPH + {0xECB1, 0x9E87}, //11385 #CJK UNIFIED IDEOGRAPH + {0xECB2, 0x9EAE}, //11386 #CJK UNIFIED IDEOGRAPH + {0xECB3, 0x9EAD}, //11387 #CJK UNIFIED IDEOGRAPH + {0xECB4, 0x9ED5}, //11388 #CJK UNIFIED IDEOGRAPH + {0xECB5, 0x9ED6}, //11389 #CJK UNIFIED IDEOGRAPH + {0xECB6, 0x9EFA}, //11390 #CJK UNIFIED IDEOGRAPH + {0xECB7, 0x9F12}, //11391 #CJK UNIFIED IDEOGRAPH + {0xECB8, 0x9F3D}, //11392 #CJK UNIFIED IDEOGRAPH + {0xECB9, 0x5126}, //11393 #CJK UNIFIED IDEOGRAPH + {0xECBA, 0x5125}, //11394 #CJK UNIFIED IDEOGRAPH + {0xECBB, 0x5122}, //11395 #CJK UNIFIED IDEOGRAPH + {0xECBC, 0x5124}, //11396 #CJK UNIFIED IDEOGRAPH + {0xECBD, 0x5120}, //11397 #CJK UNIFIED IDEOGRAPH + {0xECBE, 0x5129}, //11398 #CJK UNIFIED IDEOGRAPH + {0xECBF, 0x52F4}, //11399 #CJK UNIFIED IDEOGRAPH + {0xECC0, 0x5693}, //11400 #CJK UNIFIED IDEOGRAPH + {0xECC1, 0x568C}, //11401 #CJK UNIFIED IDEOGRAPH + {0xECC2, 0x568D}, //11402 #CJK UNIFIED IDEOGRAPH + {0xECC3, 0x5686}, //11403 #CJK UNIFIED IDEOGRAPH + {0xECC4, 0x5684}, //11404 #CJK UNIFIED IDEOGRAPH + {0xECC5, 0x5683}, //11405 #CJK UNIFIED IDEOGRAPH + {0xECC6, 0x567E}, //11406 #CJK UNIFIED IDEOGRAPH + {0xECC7, 0x5682}, //11407 #CJK UNIFIED IDEOGRAPH + {0xECC8, 0x567F}, //11408 #CJK UNIFIED IDEOGRAPH + {0xECC9, 0x5681}, //11409 #CJK UNIFIED IDEOGRAPH + {0xECCA, 0x58D6}, //11410 #CJK UNIFIED IDEOGRAPH + {0xECCB, 0x58D4}, //11411 #CJK UNIFIED IDEOGRAPH + {0xECCC, 0x58CF}, //11412 #CJK UNIFIED IDEOGRAPH + {0xECCD, 0x58D2}, //11413 #CJK UNIFIED IDEOGRAPH + {0xECCE, 0x5B2D}, //11414 #CJK UNIFIED IDEOGRAPH + {0xECCF, 0x5B25}, //11415 #CJK UNIFIED IDEOGRAPH + {0xECD0, 0x5B32}, //11416 #CJK UNIFIED IDEOGRAPH + {0xECD1, 0x5B23}, //11417 #CJK UNIFIED IDEOGRAPH + {0xECD2, 0x5B2C}, //11418 #CJK UNIFIED IDEOGRAPH + {0xECD3, 0x5B27}, //11419 #CJK UNIFIED IDEOGRAPH + {0xECD4, 0x5B26}, //11420 #CJK UNIFIED IDEOGRAPH + {0xECD5, 0x5B2F}, //11421 #CJK UNIFIED IDEOGRAPH + {0xECD6, 0x5B2E}, //11422 #CJK UNIFIED IDEOGRAPH + {0xECD7, 0x5B7B}, //11423 #CJK UNIFIED IDEOGRAPH + {0xECD8, 0x5BF1}, //11424 #CJK UNIFIED IDEOGRAPH + {0xECD9, 0x5BF2}, //11425 #CJK UNIFIED IDEOGRAPH + {0xECDA, 0x5DB7}, //11426 #CJK UNIFIED IDEOGRAPH + {0xECDB, 0x5E6C}, //11427 #CJK UNIFIED IDEOGRAPH + {0xECDC, 0x5E6A}, //11428 #CJK UNIFIED IDEOGRAPH + {0xECDD, 0x5FBE}, //11429 #CJK UNIFIED IDEOGRAPH + {0xECDE, 0x5FBB}, //11430 #CJK UNIFIED IDEOGRAPH + {0xECDF, 0x61C3}, //11431 #CJK UNIFIED IDEOGRAPH + {0xECE0, 0x61B5}, //11432 #CJK UNIFIED IDEOGRAPH + {0xECE1, 0x61BC}, //11433 #CJK UNIFIED IDEOGRAPH + {0xECE2, 0x61E7}, //11434 #CJK UNIFIED IDEOGRAPH + {0xECE3, 0x61E0}, //11435 #CJK UNIFIED IDEOGRAPH + {0xECE4, 0x61E5}, //11436 #CJK UNIFIED IDEOGRAPH + {0xECE5, 0x61E4}, //11437 #CJK UNIFIED IDEOGRAPH + {0xECE6, 0x61E8}, //11438 #CJK UNIFIED IDEOGRAPH + {0xECE7, 0x61DE}, //11439 #CJK UNIFIED IDEOGRAPH + {0xECE8, 0x64EF}, //11440 #CJK UNIFIED IDEOGRAPH + {0xECE9, 0x64E9}, //11441 #CJK UNIFIED IDEOGRAPH + {0xECEA, 0x64E3}, //11442 #CJK UNIFIED IDEOGRAPH + {0xECEB, 0x64EB}, //11443 #CJK UNIFIED IDEOGRAPH + {0xECEC, 0x64E4}, //11444 #CJK UNIFIED IDEOGRAPH + {0xECED, 0x64E8}, //11445 #CJK UNIFIED IDEOGRAPH + {0xECEE, 0x6581}, //11446 #CJK UNIFIED IDEOGRAPH + {0xECEF, 0x6580}, //11447 #CJK UNIFIED IDEOGRAPH + {0xECF0, 0x65B6}, //11448 #CJK UNIFIED IDEOGRAPH + {0xECF1, 0x65DA}, //11449 #CJK UNIFIED IDEOGRAPH + {0xECF2, 0x66D2}, //11450 #CJK UNIFIED IDEOGRAPH + {0xECF3, 0x6A8D}, //11451 #CJK UNIFIED IDEOGRAPH + {0xECF4, 0x6A96}, //11452 #CJK UNIFIED IDEOGRAPH + {0xECF5, 0x6A81}, //11453 #CJK UNIFIED IDEOGRAPH + {0xECF6, 0x6AA5}, //11454 #CJK UNIFIED IDEOGRAPH + {0xECF7, 0x6A89}, //11455 #CJK UNIFIED IDEOGRAPH + {0xECF8, 0x6A9F}, //11456 #CJK UNIFIED IDEOGRAPH + {0xECF9, 0x6A9B}, //11457 #CJK UNIFIED IDEOGRAPH + {0xECFA, 0x6AA1}, //11458 #CJK UNIFIED IDEOGRAPH + {0xECFB, 0x6A9E}, //11459 #CJK UNIFIED IDEOGRAPH + {0xECFC, 0x6A87}, //11460 #CJK UNIFIED IDEOGRAPH + {0xECFD, 0x6A93}, //11461 #CJK UNIFIED IDEOGRAPH + {0xECFE, 0x6A8E}, //11462 #CJK UNIFIED IDEOGRAPH + {0xED40, 0x6A95}, //11463 #CJK UNIFIED IDEOGRAPH + {0xED41, 0x6A83}, //11464 #CJK UNIFIED IDEOGRAPH + {0xED42, 0x6AA8}, //11465 #CJK UNIFIED IDEOGRAPH + {0xED43, 0x6AA4}, //11466 #CJK UNIFIED IDEOGRAPH + {0xED44, 0x6A91}, //11467 #CJK UNIFIED IDEOGRAPH + {0xED45, 0x6A7F}, //11468 #CJK UNIFIED IDEOGRAPH + {0xED46, 0x6AA6}, //11469 #CJK UNIFIED IDEOGRAPH + {0xED47, 0x6A9A}, //11470 #CJK UNIFIED IDEOGRAPH + {0xED48, 0x6A85}, //11471 #CJK UNIFIED IDEOGRAPH + {0xED49, 0x6A8C}, //11472 #CJK UNIFIED IDEOGRAPH + {0xED4A, 0x6A92}, //11473 #CJK UNIFIED IDEOGRAPH + {0xED4B, 0x6B5B}, //11474 #CJK UNIFIED IDEOGRAPH + {0xED4C, 0x6BAD}, //11475 #CJK UNIFIED IDEOGRAPH + {0xED4D, 0x6C09}, //11476 #CJK UNIFIED IDEOGRAPH + {0xED4E, 0x6FCC}, //11477 #CJK UNIFIED IDEOGRAPH + {0xED4F, 0x6FA9}, //11478 #CJK UNIFIED IDEOGRAPH + {0xED50, 0x6FF4}, //11479 #CJK UNIFIED IDEOGRAPH + {0xED51, 0x6FD4}, //11480 #CJK UNIFIED IDEOGRAPH + {0xED52, 0x6FE3}, //11481 #CJK UNIFIED IDEOGRAPH + {0xED53, 0x6FDC}, //11482 #CJK UNIFIED IDEOGRAPH + {0xED54, 0x6FED}, //11483 #CJK UNIFIED IDEOGRAPH + {0xED55, 0x6FE7}, //11484 #CJK UNIFIED IDEOGRAPH + {0xED56, 0x6FE6}, //11485 #CJK UNIFIED IDEOGRAPH + {0xED57, 0x6FDE}, //11486 #CJK UNIFIED IDEOGRAPH + {0xED58, 0x6FF2}, //11487 #CJK UNIFIED IDEOGRAPH + {0xED59, 0x6FDD}, //11488 #CJK UNIFIED IDEOGRAPH + {0xED5A, 0x6FE2}, //11489 #CJK UNIFIED IDEOGRAPH + {0xED5B, 0x6FE8}, //11490 #CJK UNIFIED IDEOGRAPH + {0xED5C, 0x71E1}, //11491 #CJK UNIFIED IDEOGRAPH + {0xED5D, 0x71F1}, //11492 #CJK UNIFIED IDEOGRAPH + {0xED5E, 0x71E8}, //11493 #CJK UNIFIED IDEOGRAPH + {0xED5F, 0x71F2}, //11494 #CJK UNIFIED IDEOGRAPH + {0xED60, 0x71E4}, //11495 #CJK UNIFIED IDEOGRAPH + {0xED61, 0x71F0}, //11496 #CJK UNIFIED IDEOGRAPH + {0xED62, 0x71E2}, //11497 #CJK UNIFIED IDEOGRAPH + {0xED63, 0x7373}, //11498 #CJK UNIFIED IDEOGRAPH + {0xED64, 0x736E}, //11499 #CJK UNIFIED IDEOGRAPH + {0xED65, 0x736F}, //11500 #CJK UNIFIED IDEOGRAPH + {0xED66, 0x7497}, //11501 #CJK UNIFIED IDEOGRAPH + {0xED67, 0x74B2}, //11502 #CJK UNIFIED IDEOGRAPH + {0xED68, 0x74AB}, //11503 #CJK UNIFIED IDEOGRAPH + {0xED69, 0x7490}, //11504 #CJK UNIFIED IDEOGRAPH + {0xED6A, 0x74AA}, //11505 #CJK UNIFIED IDEOGRAPH + {0xED6B, 0x74AD}, //11506 #CJK UNIFIED IDEOGRAPH + {0xED6C, 0x74B1}, //11507 #CJK UNIFIED IDEOGRAPH + {0xED6D, 0x74A5}, //11508 #CJK UNIFIED IDEOGRAPH + {0xED6E, 0x74AF}, //11509 #CJK UNIFIED IDEOGRAPH + {0xED6F, 0x7510}, //11510 #CJK UNIFIED IDEOGRAPH + {0xED70, 0x7511}, //11511 #CJK UNIFIED IDEOGRAPH + {0xED71, 0x7512}, //11512 #CJK UNIFIED IDEOGRAPH + {0xED72, 0x750F}, //11513 #CJK UNIFIED IDEOGRAPH + {0xED73, 0x7584}, //11514 #CJK UNIFIED IDEOGRAPH + {0xED74, 0x7643}, //11515 #CJK UNIFIED IDEOGRAPH + {0xED75, 0x7648}, //11516 #CJK UNIFIED IDEOGRAPH + {0xED76, 0x7649}, //11517 #CJK UNIFIED IDEOGRAPH + {0xED77, 0x7647}, //11518 #CJK UNIFIED IDEOGRAPH + {0xED78, 0x76A4}, //11519 #CJK UNIFIED IDEOGRAPH + {0xED79, 0x76E9}, //11520 #CJK UNIFIED IDEOGRAPH + {0xED7A, 0x77B5}, //11521 #CJK UNIFIED IDEOGRAPH + {0xED7B, 0x77AB}, //11522 #CJK UNIFIED IDEOGRAPH + {0xED7C, 0x77B2}, //11523 #CJK UNIFIED IDEOGRAPH + {0xED7D, 0x77B7}, //11524 #CJK UNIFIED IDEOGRAPH + {0xED7E, 0x77B6}, //11525 #CJK UNIFIED IDEOGRAPH + {0xEDA1, 0x77B4}, //11526 #CJK UNIFIED IDEOGRAPH + {0xEDA2, 0x77B1}, //11527 #CJK UNIFIED IDEOGRAPH + {0xEDA3, 0x77A8}, //11528 #CJK UNIFIED IDEOGRAPH + {0xEDA4, 0x77F0}, //11529 #CJK UNIFIED IDEOGRAPH + {0xEDA5, 0x78F3}, //11530 #CJK UNIFIED IDEOGRAPH + {0xEDA6, 0x78FD}, //11531 #CJK UNIFIED IDEOGRAPH + {0xEDA7, 0x7902}, //11532 #CJK UNIFIED IDEOGRAPH + {0xEDA8, 0x78FB}, //11533 #CJK UNIFIED IDEOGRAPH + {0xEDA9, 0x78FC}, //11534 #CJK UNIFIED IDEOGRAPH + {0xEDAA, 0x78F2}, //11535 #CJK UNIFIED IDEOGRAPH + {0xEDAB, 0x7905}, //11536 #CJK UNIFIED IDEOGRAPH + {0xEDAC, 0x78F9}, //11537 #CJK UNIFIED IDEOGRAPH + {0xEDAD, 0x78FE}, //11538 #CJK UNIFIED IDEOGRAPH + {0xEDAE, 0x7904}, //11539 #CJK UNIFIED IDEOGRAPH + {0xEDAF, 0x79AB}, //11540 #CJK UNIFIED IDEOGRAPH + {0xEDB0, 0x79A8}, //11541 #CJK UNIFIED IDEOGRAPH + {0xEDB1, 0x7A5C}, //11542 #CJK UNIFIED IDEOGRAPH + {0xEDB2, 0x7A5B}, //11543 #CJK UNIFIED IDEOGRAPH + {0xEDB3, 0x7A56}, //11544 #CJK UNIFIED IDEOGRAPH + {0xEDB4, 0x7A58}, //11545 #CJK UNIFIED IDEOGRAPH + {0xEDB5, 0x7A54}, //11546 #CJK UNIFIED IDEOGRAPH + {0xEDB6, 0x7A5A}, //11547 #CJK UNIFIED IDEOGRAPH + {0xEDB7, 0x7ABE}, //11548 #CJK UNIFIED IDEOGRAPH + {0xEDB8, 0x7AC0}, //11549 #CJK UNIFIED IDEOGRAPH + {0xEDB9, 0x7AC1}, //11550 #CJK UNIFIED IDEOGRAPH + {0xEDBA, 0x7C05}, //11551 #CJK UNIFIED IDEOGRAPH + {0xEDBB, 0x7C0F}, //11552 #CJK UNIFIED IDEOGRAPH + {0xEDBC, 0x7BF2}, //11553 #CJK UNIFIED IDEOGRAPH + {0xEDBD, 0x7C00}, //11554 #CJK UNIFIED IDEOGRAPH + {0xEDBE, 0x7BFF}, //11555 #CJK UNIFIED IDEOGRAPH + {0xEDBF, 0x7BFB}, //11556 #CJK UNIFIED IDEOGRAPH + {0xEDC0, 0x7C0E}, //11557 #CJK UNIFIED IDEOGRAPH + {0xEDC1, 0x7BF4}, //11558 #CJK UNIFIED IDEOGRAPH + {0xEDC2, 0x7C0B}, //11559 #CJK UNIFIED IDEOGRAPH + {0xEDC3, 0x7BF3}, //11560 #CJK UNIFIED IDEOGRAPH + {0xEDC4, 0x7C02}, //11561 #CJK UNIFIED IDEOGRAPH + {0xEDC5, 0x7C09}, //11562 #CJK UNIFIED IDEOGRAPH + {0xEDC6, 0x7C03}, //11563 #CJK UNIFIED IDEOGRAPH + {0xEDC7, 0x7C01}, //11564 #CJK UNIFIED IDEOGRAPH + {0xEDC8, 0x7BF8}, //11565 #CJK UNIFIED IDEOGRAPH + {0xEDC9, 0x7BFD}, //11566 #CJK UNIFIED IDEOGRAPH + {0xEDCA, 0x7C06}, //11567 #CJK UNIFIED IDEOGRAPH + {0xEDCB, 0x7BF0}, //11568 #CJK UNIFIED IDEOGRAPH + {0xEDCC, 0x7BF1}, //11569 #CJK UNIFIED IDEOGRAPH + {0xEDCD, 0x7C10}, //11570 #CJK UNIFIED IDEOGRAPH + {0xEDCE, 0x7C0A}, //11571 #CJK UNIFIED IDEOGRAPH + {0xEDCF, 0x7CE8}, //11572 #CJK UNIFIED IDEOGRAPH + {0xEDD0, 0x7E2D}, //11573 #CJK UNIFIED IDEOGRAPH + {0xEDD1, 0x7E3C}, //11574 #CJK UNIFIED IDEOGRAPH + {0xEDD2, 0x7E42}, //11575 #CJK UNIFIED IDEOGRAPH + {0xEDD3, 0x7E33}, //11576 #CJK UNIFIED IDEOGRAPH + {0xEDD4, 0x9848}, //11577 #CJK UNIFIED IDEOGRAPH + {0xEDD5, 0x7E38}, //11578 #CJK UNIFIED IDEOGRAPH + {0xEDD6, 0x7E2A}, //11579 #CJK UNIFIED IDEOGRAPH + {0xEDD7, 0x7E49}, //11580 #CJK UNIFIED IDEOGRAPH + {0xEDD8, 0x7E40}, //11581 #CJK UNIFIED IDEOGRAPH + {0xEDD9, 0x7E47}, //11582 #CJK UNIFIED IDEOGRAPH + {0xEDDA, 0x7E29}, //11583 #CJK UNIFIED IDEOGRAPH + {0xEDDB, 0x7E4C}, //11584 #CJK UNIFIED IDEOGRAPH + {0xEDDC, 0x7E30}, //11585 #CJK UNIFIED IDEOGRAPH + {0xEDDD, 0x7E3B}, //11586 #CJK UNIFIED IDEOGRAPH + {0xEDDE, 0x7E36}, //11587 #CJK UNIFIED IDEOGRAPH + {0xEDDF, 0x7E44}, //11588 #CJK UNIFIED IDEOGRAPH + {0xEDE0, 0x7E3A}, //11589 #CJK UNIFIED IDEOGRAPH + {0xEDE1, 0x7F45}, //11590 #CJK UNIFIED IDEOGRAPH + {0xEDE2, 0x7F7F}, //11591 #CJK UNIFIED IDEOGRAPH + {0xEDE3, 0x7F7E}, //11592 #CJK UNIFIED IDEOGRAPH + {0xEDE4, 0x7F7D}, //11593 #CJK UNIFIED IDEOGRAPH + {0xEDE5, 0x7FF4}, //11594 #CJK UNIFIED IDEOGRAPH + {0xEDE6, 0x7FF2}, //11595 #CJK UNIFIED IDEOGRAPH + {0xEDE7, 0x802C}, //11596 #CJK UNIFIED IDEOGRAPH + {0xEDE8, 0x81BB}, //11597 #CJK UNIFIED IDEOGRAPH + {0xEDE9, 0x81C4}, //11598 #CJK UNIFIED IDEOGRAPH + {0xEDEA, 0x81CC}, //11599 #CJK UNIFIED IDEOGRAPH + {0xEDEB, 0x81CA}, //11600 #CJK UNIFIED IDEOGRAPH + {0xEDEC, 0x81C5}, //11601 #CJK UNIFIED IDEOGRAPH + {0xEDED, 0x81C7}, //11602 #CJK UNIFIED IDEOGRAPH + {0xEDEE, 0x81BC}, //11603 #CJK UNIFIED IDEOGRAPH + {0xEDEF, 0x81E9}, //11604 #CJK UNIFIED IDEOGRAPH + {0xEDF0, 0x825B}, //11605 #CJK UNIFIED IDEOGRAPH + {0xEDF1, 0x825A}, //11606 #CJK UNIFIED IDEOGRAPH + {0xEDF2, 0x825C}, //11607 #CJK UNIFIED IDEOGRAPH + {0xEDF3, 0x8583}, //11608 #CJK UNIFIED IDEOGRAPH + {0xEDF4, 0x8580}, //11609 #CJK UNIFIED IDEOGRAPH + {0xEDF5, 0x858F}, //11610 #CJK UNIFIED IDEOGRAPH + {0xEDF6, 0x85A7}, //11611 #CJK UNIFIED IDEOGRAPH + {0xEDF7, 0x8595}, //11612 #CJK UNIFIED IDEOGRAPH + {0xEDF8, 0x85A0}, //11613 #CJK UNIFIED IDEOGRAPH + {0xEDF9, 0x858B}, //11614 #CJK UNIFIED IDEOGRAPH + {0xEDFA, 0x85A3}, //11615 #CJK UNIFIED IDEOGRAPH + {0xEDFB, 0x857B}, //11616 #CJK UNIFIED IDEOGRAPH + {0xEDFC, 0x85A4}, //11617 #CJK UNIFIED IDEOGRAPH + {0xEDFD, 0x859A}, //11618 #CJK UNIFIED IDEOGRAPH + {0xEDFE, 0x859E}, //11619 #CJK UNIFIED IDEOGRAPH + {0xEE40, 0x8577}, //11620 #CJK UNIFIED IDEOGRAPH + {0xEE41, 0x857C}, //11621 #CJK UNIFIED IDEOGRAPH + {0xEE42, 0x8589}, //11622 #CJK UNIFIED IDEOGRAPH + {0xEE43, 0x85A1}, //11623 #CJK UNIFIED IDEOGRAPH + {0xEE44, 0x857A}, //11624 #CJK UNIFIED IDEOGRAPH + {0xEE45, 0x8578}, //11625 #CJK UNIFIED IDEOGRAPH + {0xEE46, 0x8557}, //11626 #CJK UNIFIED IDEOGRAPH + {0xEE47, 0x858E}, //11627 #CJK UNIFIED IDEOGRAPH + {0xEE48, 0x8596}, //11628 #CJK UNIFIED IDEOGRAPH + {0xEE49, 0x8586}, //11629 #CJK UNIFIED IDEOGRAPH + {0xEE4A, 0x858D}, //11630 #CJK UNIFIED IDEOGRAPH + {0xEE4B, 0x8599}, //11631 #CJK UNIFIED IDEOGRAPH + {0xEE4C, 0x859D}, //11632 #CJK UNIFIED IDEOGRAPH + {0xEE4D, 0x8581}, //11633 #CJK UNIFIED IDEOGRAPH + {0xEE4E, 0x85A2}, //11634 #CJK UNIFIED IDEOGRAPH + {0xEE4F, 0x8582}, //11635 #CJK UNIFIED IDEOGRAPH + {0xEE50, 0x8588}, //11636 #CJK UNIFIED IDEOGRAPH + {0xEE51, 0x8585}, //11637 #CJK UNIFIED IDEOGRAPH + {0xEE52, 0x8579}, //11638 #CJK UNIFIED IDEOGRAPH + {0xEE53, 0x8576}, //11639 #CJK UNIFIED IDEOGRAPH + {0xEE54, 0x8598}, //11640 #CJK UNIFIED IDEOGRAPH + {0xEE55, 0x8590}, //11641 #CJK UNIFIED IDEOGRAPH + {0xEE56, 0x859F}, //11642 #CJK UNIFIED IDEOGRAPH + {0xEE57, 0x8668}, //11643 #CJK UNIFIED IDEOGRAPH + {0xEE58, 0x87BE}, //11644 #CJK UNIFIED IDEOGRAPH + {0xEE59, 0x87AA}, //11645 #CJK UNIFIED IDEOGRAPH + {0xEE5A, 0x87AD}, //11646 #CJK UNIFIED IDEOGRAPH + {0xEE5B, 0x87C5}, //11647 #CJK UNIFIED IDEOGRAPH + {0xEE5C, 0x87B0}, //11648 #CJK UNIFIED IDEOGRAPH + {0xEE5D, 0x87AC}, //11649 #CJK UNIFIED IDEOGRAPH + {0xEE5E, 0x87B9}, //11650 #CJK UNIFIED IDEOGRAPH + {0xEE5F, 0x87B5}, //11651 #CJK UNIFIED IDEOGRAPH + {0xEE60, 0x87BC}, //11652 #CJK UNIFIED IDEOGRAPH + {0xEE61, 0x87AE}, //11653 #CJK UNIFIED IDEOGRAPH + {0xEE62, 0x87C9}, //11654 #CJK UNIFIED IDEOGRAPH + {0xEE63, 0x87C3}, //11655 #CJK UNIFIED IDEOGRAPH + {0xEE64, 0x87C2}, //11656 #CJK UNIFIED IDEOGRAPH + {0xEE65, 0x87CC}, //11657 #CJK UNIFIED IDEOGRAPH + {0xEE66, 0x87B7}, //11658 #CJK UNIFIED IDEOGRAPH + {0xEE67, 0x87AF}, //11659 #CJK UNIFIED IDEOGRAPH + {0xEE68, 0x87C4}, //11660 #CJK UNIFIED IDEOGRAPH + {0xEE69, 0x87CA}, //11661 #CJK UNIFIED IDEOGRAPH + {0xEE6A, 0x87B4}, //11662 #CJK UNIFIED IDEOGRAPH + {0xEE6B, 0x87B6}, //11663 #CJK UNIFIED IDEOGRAPH + {0xEE6C, 0x87BF}, //11664 #CJK UNIFIED IDEOGRAPH + {0xEE6D, 0x87B8}, //11665 #CJK UNIFIED IDEOGRAPH + {0xEE6E, 0x87BD}, //11666 #CJK UNIFIED IDEOGRAPH + {0xEE6F, 0x87DE}, //11667 #CJK UNIFIED IDEOGRAPH + {0xEE70, 0x87B2}, //11668 #CJK UNIFIED IDEOGRAPH + {0xEE71, 0x8935}, //11669 #CJK UNIFIED IDEOGRAPH + {0xEE72, 0x8933}, //11670 #CJK UNIFIED IDEOGRAPH + {0xEE73, 0x893C}, //11671 #CJK UNIFIED IDEOGRAPH + {0xEE74, 0x893E}, //11672 #CJK UNIFIED IDEOGRAPH + {0xEE75, 0x8941}, //11673 #CJK UNIFIED IDEOGRAPH + {0xEE76, 0x8952}, //11674 #CJK UNIFIED IDEOGRAPH + {0xEE77, 0x8937}, //11675 #CJK UNIFIED IDEOGRAPH + {0xEE78, 0x8942}, //11676 #CJK UNIFIED IDEOGRAPH + {0xEE79, 0x89AD}, //11677 #CJK UNIFIED IDEOGRAPH + {0xEE7A, 0x89AF}, //11678 #CJK UNIFIED IDEOGRAPH + {0xEE7B, 0x89AE}, //11679 #CJK UNIFIED IDEOGRAPH + {0xEE7C, 0x89F2}, //11680 #CJK UNIFIED IDEOGRAPH + {0xEE7D, 0x89F3}, //11681 #CJK UNIFIED IDEOGRAPH + {0xEE7E, 0x8B1E}, //11682 #CJK UNIFIED IDEOGRAPH + {0xEEA1, 0x8B18}, //11683 #CJK UNIFIED IDEOGRAPH + {0xEEA2, 0x8B16}, //11684 #CJK UNIFIED IDEOGRAPH + {0xEEA3, 0x8B11}, //11685 #CJK UNIFIED IDEOGRAPH + {0xEEA4, 0x8B05}, //11686 #CJK UNIFIED IDEOGRAPH + {0xEEA5, 0x8B0B}, //11687 #CJK UNIFIED IDEOGRAPH + {0xEEA6, 0x8B22}, //11688 #CJK UNIFIED IDEOGRAPH + {0xEEA7, 0x8B0F}, //11689 #CJK UNIFIED IDEOGRAPH + {0xEEA8, 0x8B12}, //11690 #CJK UNIFIED IDEOGRAPH + {0xEEA9, 0x8B15}, //11691 #CJK UNIFIED IDEOGRAPH + {0xEEAA, 0x8B07}, //11692 #CJK UNIFIED IDEOGRAPH + {0xEEAB, 0x8B0D}, //11693 #CJK UNIFIED IDEOGRAPH + {0xEEAC, 0x8B08}, //11694 #CJK UNIFIED IDEOGRAPH + {0xEEAD, 0x8B06}, //11695 #CJK UNIFIED IDEOGRAPH + {0xEEAE, 0x8B1C}, //11696 #CJK UNIFIED IDEOGRAPH + {0xEEAF, 0x8B13}, //11697 #CJK UNIFIED IDEOGRAPH + {0xEEB0, 0x8B1A}, //11698 #CJK UNIFIED IDEOGRAPH + {0xEEB1, 0x8C4F}, //11699 #CJK UNIFIED IDEOGRAPH + {0xEEB2, 0x8C70}, //11700 #CJK UNIFIED IDEOGRAPH + {0xEEB3, 0x8C72}, //11701 #CJK UNIFIED IDEOGRAPH + {0xEEB4, 0x8C71}, //11702 #CJK UNIFIED IDEOGRAPH + {0xEEB5, 0x8C6F}, //11703 #CJK UNIFIED IDEOGRAPH + {0xEEB6, 0x8C95}, //11704 #CJK UNIFIED IDEOGRAPH + {0xEEB7, 0x8C94}, //11705 #CJK UNIFIED IDEOGRAPH + {0xEEB8, 0x8CF9}, //11706 #CJK UNIFIED IDEOGRAPH + {0xEEB9, 0x8D6F}, //11707 #CJK UNIFIED IDEOGRAPH + {0xEEBA, 0x8E4E}, //11708 #CJK UNIFIED IDEOGRAPH + {0xEEBB, 0x8E4D}, //11709 #CJK UNIFIED IDEOGRAPH + {0xEEBC, 0x8E53}, //11710 #CJK UNIFIED IDEOGRAPH + {0xEEBD, 0x8E50}, //11711 #CJK UNIFIED IDEOGRAPH + {0xEEBE, 0x8E4C}, //11712 #CJK UNIFIED IDEOGRAPH + {0xEEBF, 0x8E47}, //11713 #CJK UNIFIED IDEOGRAPH + {0xEEC0, 0x8F43}, //11714 #CJK UNIFIED IDEOGRAPH + {0xEEC1, 0x8F40}, //11715 #CJK UNIFIED IDEOGRAPH + {0xEEC2, 0x9085}, //11716 #CJK UNIFIED IDEOGRAPH + {0xEEC3, 0x907E}, //11717 #CJK UNIFIED IDEOGRAPH + {0xEEC4, 0x9138}, //11718 #CJK UNIFIED IDEOGRAPH + {0xEEC5, 0x919A}, //11719 #CJK UNIFIED IDEOGRAPH + {0xEEC6, 0x91A2}, //11720 #CJK UNIFIED IDEOGRAPH + {0xEEC7, 0x919B}, //11721 #CJK UNIFIED IDEOGRAPH + {0xEEC8, 0x9199}, //11722 #CJK UNIFIED IDEOGRAPH + {0xEEC9, 0x919F}, //11723 #CJK UNIFIED IDEOGRAPH + {0xEECA, 0x91A1}, //11724 #CJK UNIFIED IDEOGRAPH + {0xEECB, 0x919D}, //11725 #CJK UNIFIED IDEOGRAPH + {0xEECC, 0x91A0}, //11726 #CJK UNIFIED IDEOGRAPH + {0xEECD, 0x93A1}, //11727 #CJK UNIFIED IDEOGRAPH + {0xEECE, 0x9383}, //11728 #CJK UNIFIED IDEOGRAPH + {0xEECF, 0x93AF}, //11729 #CJK UNIFIED IDEOGRAPH + {0xEED0, 0x9364}, //11730 #CJK UNIFIED IDEOGRAPH + {0xEED1, 0x9356}, //11731 #CJK UNIFIED IDEOGRAPH + {0xEED2, 0x9347}, //11732 #CJK UNIFIED IDEOGRAPH + {0xEED3, 0x937C}, //11733 #CJK UNIFIED IDEOGRAPH + {0xEED4, 0x9358}, //11734 #CJK UNIFIED IDEOGRAPH + {0xEED5, 0x935C}, //11735 #CJK UNIFIED IDEOGRAPH + {0xEED6, 0x9376}, //11736 #CJK UNIFIED IDEOGRAPH + {0xEED7, 0x9349}, //11737 #CJK UNIFIED IDEOGRAPH + {0xEED8, 0x9350}, //11738 #CJK UNIFIED IDEOGRAPH + {0xEED9, 0x9351}, //11739 #CJK UNIFIED IDEOGRAPH + {0xEEDA, 0x9360}, //11740 #CJK UNIFIED IDEOGRAPH + {0xEEDB, 0x936D}, //11741 #CJK UNIFIED IDEOGRAPH + {0xEEDC, 0x938F}, //11742 #CJK UNIFIED IDEOGRAPH + {0xEEDD, 0x934C}, //11743 #CJK UNIFIED IDEOGRAPH + {0xEEDE, 0x936A}, //11744 #CJK UNIFIED IDEOGRAPH + {0xEEDF, 0x9379}, //11745 #CJK UNIFIED IDEOGRAPH + {0xEEE0, 0x9357}, //11746 #CJK UNIFIED IDEOGRAPH + {0xEEE1, 0x9355}, //11747 #CJK UNIFIED IDEOGRAPH + {0xEEE2, 0x9352}, //11748 #CJK UNIFIED IDEOGRAPH + {0xEEE3, 0x934F}, //11749 #CJK UNIFIED IDEOGRAPH + {0xEEE4, 0x9371}, //11750 #CJK UNIFIED IDEOGRAPH + {0xEEE5, 0x9377}, //11751 #CJK UNIFIED IDEOGRAPH + {0xEEE6, 0x937B}, //11752 #CJK UNIFIED IDEOGRAPH + {0xEEE7, 0x9361}, //11753 #CJK UNIFIED IDEOGRAPH + {0xEEE8, 0x935E}, //11754 #CJK UNIFIED IDEOGRAPH + {0xEEE9, 0x9363}, //11755 #CJK UNIFIED IDEOGRAPH + {0xEEEA, 0x9367}, //11756 #CJK UNIFIED IDEOGRAPH + {0xEEEB, 0x9380}, //11757 #CJK UNIFIED IDEOGRAPH + {0xEEEC, 0x934E}, //11758 #CJK UNIFIED IDEOGRAPH + {0xEEED, 0x9359}, //11759 #CJK UNIFIED IDEOGRAPH + {0xEEEE, 0x95C7}, //11760 #CJK UNIFIED IDEOGRAPH + {0xEEEF, 0x95C0}, //11761 #CJK UNIFIED IDEOGRAPH + {0xEEF0, 0x95C9}, //11762 #CJK UNIFIED IDEOGRAPH + {0xEEF1, 0x95C3}, //11763 #CJK UNIFIED IDEOGRAPH + {0xEEF2, 0x95C5}, //11764 #CJK UNIFIED IDEOGRAPH + {0xEEF3, 0x95B7}, //11765 #CJK UNIFIED IDEOGRAPH + {0xEEF4, 0x96AE}, //11766 #CJK UNIFIED IDEOGRAPH + {0xEEF5, 0x96B0}, //11767 #CJK UNIFIED IDEOGRAPH + {0xEEF6, 0x96AC}, //11768 #CJK UNIFIED IDEOGRAPH + {0xEEF7, 0x9720}, //11769 #CJK UNIFIED IDEOGRAPH + {0xEEF8, 0x971F}, //11770 #CJK UNIFIED IDEOGRAPH + {0xEEF9, 0x9718}, //11771 #CJK UNIFIED IDEOGRAPH + {0xEEFA, 0x971D}, //11772 #CJK UNIFIED IDEOGRAPH + {0xEEFB, 0x9719}, //11773 #CJK UNIFIED IDEOGRAPH + {0xEEFC, 0x979A}, //11774 #CJK UNIFIED IDEOGRAPH + {0xEEFD, 0x97A1}, //11775 #CJK UNIFIED IDEOGRAPH + {0xEEFE, 0x979C}, //11776 #CJK UNIFIED IDEOGRAPH + {0xEF40, 0x979E}, //11777 #CJK UNIFIED IDEOGRAPH + {0xEF41, 0x979D}, //11778 #CJK UNIFIED IDEOGRAPH + {0xEF42, 0x97D5}, //11779 #CJK UNIFIED IDEOGRAPH + {0xEF43, 0x97D4}, //11780 #CJK UNIFIED IDEOGRAPH + {0xEF44, 0x97F1}, //11781 #CJK UNIFIED IDEOGRAPH + {0xEF45, 0x9841}, //11782 #CJK UNIFIED IDEOGRAPH + {0xEF46, 0x9844}, //11783 #CJK UNIFIED IDEOGRAPH + {0xEF47, 0x984A}, //11784 #CJK UNIFIED IDEOGRAPH + {0xEF48, 0x9849}, //11785 #CJK UNIFIED IDEOGRAPH + {0xEF49, 0x9845}, //11786 #CJK UNIFIED IDEOGRAPH + {0xEF4A, 0x9843}, //11787 #CJK UNIFIED IDEOGRAPH + {0xEF4B, 0x9925}, //11788 #CJK UNIFIED IDEOGRAPH + {0xEF4C, 0x992B}, //11789 #CJK UNIFIED IDEOGRAPH + {0xEF4D, 0x992C}, //11790 #CJK UNIFIED IDEOGRAPH + {0xEF4E, 0x992A}, //11791 #CJK UNIFIED IDEOGRAPH + {0xEF4F, 0x9933}, //11792 #CJK UNIFIED IDEOGRAPH + {0xEF50, 0x9932}, //11793 #CJK UNIFIED IDEOGRAPH + {0xEF51, 0x992F}, //11794 #CJK UNIFIED IDEOGRAPH + {0xEF52, 0x992D}, //11795 #CJK UNIFIED IDEOGRAPH + {0xEF53, 0x9931}, //11796 #CJK UNIFIED IDEOGRAPH + {0xEF54, 0x9930}, //11797 #CJK UNIFIED IDEOGRAPH + {0xEF55, 0x9998}, //11798 #CJK UNIFIED IDEOGRAPH + {0xEF56, 0x99A3}, //11799 #CJK UNIFIED IDEOGRAPH + {0xEF57, 0x99A1}, //11800 #CJK UNIFIED IDEOGRAPH + {0xEF58, 0x9A02}, //11801 #CJK UNIFIED IDEOGRAPH + {0xEF59, 0x99FA}, //11802 #CJK UNIFIED IDEOGRAPH + {0xEF5A, 0x99F4}, //11803 #CJK UNIFIED IDEOGRAPH + {0xEF5B, 0x99F7}, //11804 #CJK UNIFIED IDEOGRAPH + {0xEF5C, 0x99F9}, //11805 #CJK UNIFIED IDEOGRAPH + {0xEF5D, 0x99F8}, //11806 #CJK UNIFIED IDEOGRAPH + {0xEF5E, 0x99F6}, //11807 #CJK UNIFIED IDEOGRAPH + {0xEF5F, 0x99FB}, //11808 #CJK UNIFIED IDEOGRAPH + {0xEF60, 0x99FD}, //11809 #CJK UNIFIED IDEOGRAPH + {0xEF61, 0x99FE}, //11810 #CJK UNIFIED IDEOGRAPH + {0xEF62, 0x99FC}, //11811 #CJK UNIFIED IDEOGRAPH + {0xEF63, 0x9A03}, //11812 #CJK UNIFIED IDEOGRAPH + {0xEF64, 0x9ABE}, //11813 #CJK UNIFIED IDEOGRAPH + {0xEF65, 0x9AFE}, //11814 #CJK UNIFIED IDEOGRAPH + {0xEF66, 0x9AFD}, //11815 #CJK UNIFIED IDEOGRAPH + {0xEF67, 0x9B01}, //11816 #CJK UNIFIED IDEOGRAPH + {0xEF68, 0x9AFC}, //11817 #CJK UNIFIED IDEOGRAPH + {0xEF69, 0x9B48}, //11818 #CJK UNIFIED IDEOGRAPH + {0xEF6A, 0x9B9A}, //11819 #CJK UNIFIED IDEOGRAPH + {0xEF6B, 0x9BA8}, //11820 #CJK UNIFIED IDEOGRAPH + {0xEF6C, 0x9B9E}, //11821 #CJK UNIFIED IDEOGRAPH + {0xEF6D, 0x9B9B}, //11822 #CJK UNIFIED IDEOGRAPH + {0xEF6E, 0x9BA6}, //11823 #CJK UNIFIED IDEOGRAPH + {0xEF6F, 0x9BA1}, //11824 #CJK UNIFIED IDEOGRAPH + {0xEF70, 0x9BA5}, //11825 #CJK UNIFIED IDEOGRAPH + {0xEF71, 0x9BA4}, //11826 #CJK UNIFIED IDEOGRAPH + {0xEF72, 0x9B86}, //11827 #CJK UNIFIED IDEOGRAPH + {0xEF73, 0x9BA2}, //11828 #CJK UNIFIED IDEOGRAPH + {0xEF74, 0x9BA0}, //11829 #CJK UNIFIED IDEOGRAPH + {0xEF75, 0x9BAF}, //11830 #CJK UNIFIED IDEOGRAPH + {0xEF76, 0x9D33}, //11831 #CJK UNIFIED IDEOGRAPH + {0xEF77, 0x9D41}, //11832 #CJK UNIFIED IDEOGRAPH + {0xEF78, 0x9D67}, //11833 #CJK UNIFIED IDEOGRAPH + {0xEF79, 0x9D36}, //11834 #CJK UNIFIED IDEOGRAPH + {0xEF7A, 0x9D2E}, //11835 #CJK UNIFIED IDEOGRAPH + {0xEF7B, 0x9D2F}, //11836 #CJK UNIFIED IDEOGRAPH + {0xEF7C, 0x9D31}, //11837 #CJK UNIFIED IDEOGRAPH + {0xEF7D, 0x9D38}, //11838 #CJK UNIFIED IDEOGRAPH + {0xEF7E, 0x9D30}, //11839 #CJK UNIFIED IDEOGRAPH + {0xEFA1, 0x9D45}, //11840 #CJK UNIFIED IDEOGRAPH + {0xEFA2, 0x9D42}, //11841 #CJK UNIFIED IDEOGRAPH + {0xEFA3, 0x9D43}, //11842 #CJK UNIFIED IDEOGRAPH + {0xEFA4, 0x9D3E}, //11843 #CJK UNIFIED IDEOGRAPH + {0xEFA5, 0x9D37}, //11844 #CJK UNIFIED IDEOGRAPH + {0xEFA6, 0x9D40}, //11845 #CJK UNIFIED IDEOGRAPH + {0xEFA7, 0x9D3D}, //11846 #CJK UNIFIED IDEOGRAPH + {0xEFA8, 0x7FF5}, //11847 #CJK UNIFIED IDEOGRAPH + {0xEFA9, 0x9D2D}, //11848 #CJK UNIFIED IDEOGRAPH + {0xEFAA, 0x9E8A}, //11849 #CJK UNIFIED IDEOGRAPH + {0xEFAB, 0x9E89}, //11850 #CJK UNIFIED IDEOGRAPH + {0xEFAC, 0x9E8D}, //11851 #CJK UNIFIED IDEOGRAPH + {0xEFAD, 0x9EB0}, //11852 #CJK UNIFIED IDEOGRAPH + {0xEFAE, 0x9EC8}, //11853 #CJK UNIFIED IDEOGRAPH + {0xEFAF, 0x9EDA}, //11854 #CJK UNIFIED IDEOGRAPH + {0xEFB0, 0x9EFB}, //11855 #CJK UNIFIED IDEOGRAPH + {0xEFB1, 0x9EFF}, //11856 #CJK UNIFIED IDEOGRAPH + {0xEFB2, 0x9F24}, //11857 #CJK UNIFIED IDEOGRAPH + {0xEFB3, 0x9F23}, //11858 #CJK UNIFIED IDEOGRAPH + {0xEFB4, 0x9F22}, //11859 #CJK UNIFIED IDEOGRAPH + {0xEFB5, 0x9F54}, //11860 #CJK UNIFIED IDEOGRAPH + {0xEFB6, 0x9FA0}, //11861 #CJK UNIFIED IDEOGRAPH + {0xEFB7, 0x5131}, //11862 #CJK UNIFIED IDEOGRAPH + {0xEFB8, 0x512D}, //11863 #CJK UNIFIED IDEOGRAPH + {0xEFB9, 0x512E}, //11864 #CJK UNIFIED IDEOGRAPH + {0xEFBA, 0x5698}, //11865 #CJK UNIFIED IDEOGRAPH + {0xEFBB, 0x569C}, //11866 #CJK UNIFIED IDEOGRAPH + {0xEFBC, 0x5697}, //11867 #CJK UNIFIED IDEOGRAPH + {0xEFBD, 0x569A}, //11868 #CJK UNIFIED IDEOGRAPH + {0xEFBE, 0x569D}, //11869 #CJK UNIFIED IDEOGRAPH + {0xEFBF, 0x5699}, //11870 #CJK UNIFIED IDEOGRAPH + {0xEFC0, 0x5970}, //11871 #CJK UNIFIED IDEOGRAPH + {0xEFC1, 0x5B3C}, //11872 #CJK UNIFIED IDEOGRAPH + {0xEFC2, 0x5C69}, //11873 #CJK UNIFIED IDEOGRAPH + {0xEFC3, 0x5C6A}, //11874 #CJK UNIFIED IDEOGRAPH + {0xEFC4, 0x5DC0}, //11875 #CJK UNIFIED IDEOGRAPH + {0xEFC5, 0x5E6D}, //11876 #CJK UNIFIED IDEOGRAPH + {0xEFC6, 0x5E6E}, //11877 #CJK UNIFIED IDEOGRAPH + {0xEFC7, 0x61D8}, //11878 #CJK UNIFIED IDEOGRAPH + {0xEFC8, 0x61DF}, //11879 #CJK UNIFIED IDEOGRAPH + {0xEFC9, 0x61ED}, //11880 #CJK UNIFIED IDEOGRAPH + {0xEFCA, 0x61EE}, //11881 #CJK UNIFIED IDEOGRAPH + {0xEFCB, 0x61F1}, //11882 #CJK UNIFIED IDEOGRAPH + {0xEFCC, 0x61EA}, //11883 #CJK UNIFIED IDEOGRAPH + {0xEFCD, 0x61F0}, //11884 #CJK UNIFIED IDEOGRAPH + {0xEFCE, 0x61EB}, //11885 #CJK UNIFIED IDEOGRAPH + {0xEFCF, 0x61D6}, //11886 #CJK UNIFIED IDEOGRAPH + {0xEFD0, 0x61E9}, //11887 #CJK UNIFIED IDEOGRAPH + {0xEFD1, 0x64FF}, //11888 #CJK UNIFIED IDEOGRAPH + {0xEFD2, 0x6504}, //11889 #CJK UNIFIED IDEOGRAPH + {0xEFD3, 0x64FD}, //11890 #CJK UNIFIED IDEOGRAPH + {0xEFD4, 0x64F8}, //11891 #CJK UNIFIED IDEOGRAPH + {0xEFD5, 0x6501}, //11892 #CJK UNIFIED IDEOGRAPH + {0xEFD6, 0x6503}, //11893 #CJK UNIFIED IDEOGRAPH + {0xEFD7, 0x64FC}, //11894 #CJK UNIFIED IDEOGRAPH + {0xEFD8, 0x6594}, //11895 #CJK UNIFIED IDEOGRAPH + {0xEFD9, 0x65DB}, //11896 #CJK UNIFIED IDEOGRAPH + {0xEFDA, 0x66DA}, //11897 #CJK UNIFIED IDEOGRAPH + {0xEFDB, 0x66DB}, //11898 #CJK UNIFIED IDEOGRAPH + {0xEFDC, 0x66D8}, //11899 #CJK UNIFIED IDEOGRAPH + {0xEFDD, 0x6AC5}, //11900 #CJK UNIFIED IDEOGRAPH + {0xEFDE, 0x6AB9}, //11901 #CJK UNIFIED IDEOGRAPH + {0xEFDF, 0x6ABD}, //11902 #CJK UNIFIED IDEOGRAPH + {0xEFE0, 0x6AE1}, //11903 #CJK UNIFIED IDEOGRAPH + {0xEFE1, 0x6AC6}, //11904 #CJK UNIFIED IDEOGRAPH + {0xEFE2, 0x6ABA}, //11905 #CJK UNIFIED IDEOGRAPH + {0xEFE3, 0x6AB6}, //11906 #CJK UNIFIED IDEOGRAPH + {0xEFE4, 0x6AB7}, //11907 #CJK UNIFIED IDEOGRAPH + {0xEFE5, 0x6AC7}, //11908 #CJK UNIFIED IDEOGRAPH + {0xEFE6, 0x6AB4}, //11909 #CJK UNIFIED IDEOGRAPH + {0xEFE7, 0x6AAD}, //11910 #CJK UNIFIED IDEOGRAPH + {0xEFE8, 0x6B5E}, //11911 #CJK UNIFIED IDEOGRAPH + {0xEFE9, 0x6BC9}, //11912 #CJK UNIFIED IDEOGRAPH + {0xEFEA, 0x6C0B}, //11913 #CJK UNIFIED IDEOGRAPH + {0xEFEB, 0x7007}, //11914 #CJK UNIFIED IDEOGRAPH + {0xEFEC, 0x700C}, //11915 #CJK UNIFIED IDEOGRAPH + {0xEFED, 0x700D}, //11916 #CJK UNIFIED IDEOGRAPH + {0xEFEE, 0x7001}, //11917 #CJK UNIFIED IDEOGRAPH + {0xEFEF, 0x7005}, //11918 #CJK UNIFIED IDEOGRAPH + {0xEFF0, 0x7014}, //11919 #CJK UNIFIED IDEOGRAPH + {0xEFF1, 0x700E}, //11920 #CJK UNIFIED IDEOGRAPH + {0xEFF2, 0x6FFF}, //11921 #CJK UNIFIED IDEOGRAPH + {0xEFF3, 0x7000}, //11922 #CJK UNIFIED IDEOGRAPH + {0xEFF4, 0x6FFB}, //11923 #CJK UNIFIED IDEOGRAPH + {0xEFF5, 0x7026}, //11924 #CJK UNIFIED IDEOGRAPH + {0xEFF6, 0x6FFC}, //11925 #CJK UNIFIED IDEOGRAPH + {0xEFF7, 0x6FF7}, //11926 #CJK UNIFIED IDEOGRAPH + {0xEFF8, 0x700A}, //11927 #CJK UNIFIED IDEOGRAPH + {0xEFF9, 0x7201}, //11928 #CJK UNIFIED IDEOGRAPH + {0xEFFA, 0x71FF}, //11929 #CJK UNIFIED IDEOGRAPH + {0xEFFB, 0x71F9}, //11930 #CJK UNIFIED IDEOGRAPH + {0xEFFC, 0x7203}, //11931 #CJK UNIFIED IDEOGRAPH + {0xEFFD, 0x71FD}, //11932 #CJK UNIFIED IDEOGRAPH + {0xEFFE, 0x7376}, //11933 #CJK UNIFIED IDEOGRAPH + {0xF040, 0x74B8}, //11934 #CJK UNIFIED IDEOGRAPH + {0xF041, 0x74C0}, //11935 #CJK UNIFIED IDEOGRAPH + {0xF042, 0x74B5}, //11936 #CJK UNIFIED IDEOGRAPH + {0xF043, 0x74C1}, //11937 #CJK UNIFIED IDEOGRAPH + {0xF044, 0x74BE}, //11938 #CJK UNIFIED IDEOGRAPH + {0xF045, 0x74B6}, //11939 #CJK UNIFIED IDEOGRAPH + {0xF046, 0x74BB}, //11940 #CJK UNIFIED IDEOGRAPH + {0xF047, 0x74C2}, //11941 #CJK UNIFIED IDEOGRAPH + {0xF048, 0x7514}, //11942 #CJK UNIFIED IDEOGRAPH + {0xF049, 0x7513}, //11943 #CJK UNIFIED IDEOGRAPH + {0xF04A, 0x765C}, //11944 #CJK UNIFIED IDEOGRAPH + {0xF04B, 0x7664}, //11945 #CJK UNIFIED IDEOGRAPH + {0xF04C, 0x7659}, //11946 #CJK UNIFIED IDEOGRAPH + {0xF04D, 0x7650}, //11947 #CJK UNIFIED IDEOGRAPH + {0xF04E, 0x7653}, //11948 #CJK UNIFIED IDEOGRAPH + {0xF04F, 0x7657}, //11949 #CJK UNIFIED IDEOGRAPH + {0xF050, 0x765A}, //11950 #CJK UNIFIED IDEOGRAPH + {0xF051, 0x76A6}, //11951 #CJK UNIFIED IDEOGRAPH + {0xF052, 0x76BD}, //11952 #CJK UNIFIED IDEOGRAPH + {0xF053, 0x76EC}, //11953 #CJK UNIFIED IDEOGRAPH + {0xF054, 0x77C2}, //11954 #CJK UNIFIED IDEOGRAPH + {0xF055, 0x77BA}, //11955 #CJK UNIFIED IDEOGRAPH + {0xF056, 0x78FF}, //11956 #CJK UNIFIED IDEOGRAPH + {0xF057, 0x790C}, //11957 #CJK UNIFIED IDEOGRAPH + {0xF058, 0x7913}, //11958 #CJK UNIFIED IDEOGRAPH + {0xF059, 0x7914}, //11959 #CJK UNIFIED IDEOGRAPH + {0xF05A, 0x7909}, //11960 #CJK UNIFIED IDEOGRAPH + {0xF05B, 0x7910}, //11961 #CJK UNIFIED IDEOGRAPH + {0xF05C, 0x7912}, //11962 #CJK UNIFIED IDEOGRAPH + {0xF05D, 0x7911}, //11963 #CJK UNIFIED IDEOGRAPH + {0xF05E, 0x79AD}, //11964 #CJK UNIFIED IDEOGRAPH + {0xF05F, 0x79AC}, //11965 #CJK UNIFIED IDEOGRAPH + {0xF060, 0x7A5F}, //11966 #CJK UNIFIED IDEOGRAPH + {0xF061, 0x7C1C}, //11967 #CJK UNIFIED IDEOGRAPH + {0xF062, 0x7C29}, //11968 #CJK UNIFIED IDEOGRAPH + {0xF063, 0x7C19}, //11969 #CJK UNIFIED IDEOGRAPH + {0xF064, 0x7C20}, //11970 #CJK UNIFIED IDEOGRAPH + {0xF065, 0x7C1F}, //11971 #CJK UNIFIED IDEOGRAPH + {0xF066, 0x7C2D}, //11972 #CJK UNIFIED IDEOGRAPH + {0xF067, 0x7C1D}, //11973 #CJK UNIFIED IDEOGRAPH + {0xF068, 0x7C26}, //11974 #CJK UNIFIED IDEOGRAPH + {0xF069, 0x7C28}, //11975 #CJK UNIFIED IDEOGRAPH + {0xF06A, 0x7C22}, //11976 #CJK UNIFIED IDEOGRAPH + {0xF06B, 0x7C25}, //11977 #CJK UNIFIED IDEOGRAPH + {0xF06C, 0x7C30}, //11978 #CJK UNIFIED IDEOGRAPH + {0xF06D, 0x7E5C}, //11979 #CJK UNIFIED IDEOGRAPH + {0xF06E, 0x7E50}, //11980 #CJK UNIFIED IDEOGRAPH + {0xF06F, 0x7E56}, //11981 #CJK UNIFIED IDEOGRAPH + {0xF070, 0x7E63}, //11982 #CJK UNIFIED IDEOGRAPH + {0xF071, 0x7E58}, //11983 #CJK UNIFIED IDEOGRAPH + {0xF072, 0x7E62}, //11984 #CJK UNIFIED IDEOGRAPH + {0xF073, 0x7E5F}, //11985 #CJK UNIFIED IDEOGRAPH + {0xF074, 0x7E51}, //11986 #CJK UNIFIED IDEOGRAPH + {0xF075, 0x7E60}, //11987 #CJK UNIFIED IDEOGRAPH + {0xF076, 0x7E57}, //11988 #CJK UNIFIED IDEOGRAPH + {0xF077, 0x7E53}, //11989 #CJK UNIFIED IDEOGRAPH + {0xF078, 0x7FB5}, //11990 #CJK UNIFIED IDEOGRAPH + {0xF079, 0x7FB3}, //11991 #CJK UNIFIED IDEOGRAPH + {0xF07A, 0x7FF7}, //11992 #CJK UNIFIED IDEOGRAPH + {0xF07B, 0x7FF8}, //11993 #CJK UNIFIED IDEOGRAPH + {0xF07C, 0x8075}, //11994 #CJK UNIFIED IDEOGRAPH + {0xF07D, 0x81D1}, //11995 #CJK UNIFIED IDEOGRAPH + {0xF07E, 0x81D2}, //11996 #CJK UNIFIED IDEOGRAPH + {0xF0A1, 0x81D0}, //11997 #CJK UNIFIED IDEOGRAPH + {0xF0A2, 0x825F}, //11998 #CJK UNIFIED IDEOGRAPH + {0xF0A3, 0x825E}, //11999 #CJK UNIFIED IDEOGRAPH + {0xF0A4, 0x85B4}, //12000 #CJK UNIFIED IDEOGRAPH + {0xF0A5, 0x85C6}, //12001 #CJK UNIFIED IDEOGRAPH + {0xF0A6, 0x85C0}, //12002 #CJK UNIFIED IDEOGRAPH + {0xF0A7, 0x85C3}, //12003 #CJK UNIFIED IDEOGRAPH + {0xF0A8, 0x85C2}, //12004 #CJK UNIFIED IDEOGRAPH + {0xF0A9, 0x85B3}, //12005 #CJK UNIFIED IDEOGRAPH + {0xF0AA, 0x85B5}, //12006 #CJK UNIFIED IDEOGRAPH + {0xF0AB, 0x85BD}, //12007 #CJK UNIFIED IDEOGRAPH + {0xF0AC, 0x85C7}, //12008 #CJK UNIFIED IDEOGRAPH + {0xF0AD, 0x85C4}, //12009 #CJK UNIFIED IDEOGRAPH + {0xF0AE, 0x85BF}, //12010 #CJK UNIFIED IDEOGRAPH + {0xF0AF, 0x85CB}, //12011 #CJK UNIFIED IDEOGRAPH + {0xF0B0, 0x85CE}, //12012 #CJK UNIFIED IDEOGRAPH + {0xF0B1, 0x85C8}, //12013 #CJK UNIFIED IDEOGRAPH + {0xF0B2, 0x85C5}, //12014 #CJK UNIFIED IDEOGRAPH + {0xF0B3, 0x85B1}, //12015 #CJK UNIFIED IDEOGRAPH + {0xF0B4, 0x85B6}, //12016 #CJK UNIFIED IDEOGRAPH + {0xF0B5, 0x85D2}, //12017 #CJK UNIFIED IDEOGRAPH + {0xF0B6, 0x8624}, //12018 #CJK UNIFIED IDEOGRAPH + {0xF0B7, 0x85B8}, //12019 #CJK UNIFIED IDEOGRAPH + {0xF0B8, 0x85B7}, //12020 #CJK UNIFIED IDEOGRAPH + {0xF0B9, 0x85BE}, //12021 #CJK UNIFIED IDEOGRAPH + {0xF0BA, 0x8669}, //12022 #CJK UNIFIED IDEOGRAPH + {0xF0BB, 0x87E7}, //12023 #CJK UNIFIED IDEOGRAPH + {0xF0BC, 0x87E6}, //12024 #CJK UNIFIED IDEOGRAPH + {0xF0BD, 0x87E2}, //12025 #CJK UNIFIED IDEOGRAPH + {0xF0BE, 0x87DB}, //12026 #CJK UNIFIED IDEOGRAPH + {0xF0BF, 0x87EB}, //12027 #CJK UNIFIED IDEOGRAPH + {0xF0C0, 0x87EA}, //12028 #CJK UNIFIED IDEOGRAPH + {0xF0C1, 0x87E5}, //12029 #CJK UNIFIED IDEOGRAPH + {0xF0C2, 0x87DF}, //12030 #CJK UNIFIED IDEOGRAPH + {0xF0C3, 0x87F3}, //12031 #CJK UNIFIED IDEOGRAPH + {0xF0C4, 0x87E4}, //12032 #CJK UNIFIED IDEOGRAPH + {0xF0C5, 0x87D4}, //12033 #CJK UNIFIED IDEOGRAPH + {0xF0C6, 0x87DC}, //12034 #CJK UNIFIED IDEOGRAPH + {0xF0C7, 0x87D3}, //12035 #CJK UNIFIED IDEOGRAPH + {0xF0C8, 0x87ED}, //12036 #CJK UNIFIED IDEOGRAPH + {0xF0C9, 0x87D8}, //12037 #CJK UNIFIED IDEOGRAPH + {0xF0CA, 0x87E3}, //12038 #CJK UNIFIED IDEOGRAPH + {0xF0CB, 0x87A4}, //12039 #CJK UNIFIED IDEOGRAPH + {0xF0CC, 0x87D7}, //12040 #CJK UNIFIED IDEOGRAPH + {0xF0CD, 0x87D9}, //12041 #CJK UNIFIED IDEOGRAPH + {0xF0CE, 0x8801}, //12042 #CJK UNIFIED IDEOGRAPH + {0xF0CF, 0x87F4}, //12043 #CJK UNIFIED IDEOGRAPH + {0xF0D0, 0x87E8}, //12044 #CJK UNIFIED IDEOGRAPH + {0xF0D1, 0x87DD}, //12045 #CJK UNIFIED IDEOGRAPH + {0xF0D2, 0x8953}, //12046 #CJK UNIFIED IDEOGRAPH + {0xF0D3, 0x894B}, //12047 #CJK UNIFIED IDEOGRAPH + {0xF0D4, 0x894F}, //12048 #CJK UNIFIED IDEOGRAPH + {0xF0D5, 0x894C}, //12049 #CJK UNIFIED IDEOGRAPH + {0xF0D6, 0x8946}, //12050 #CJK UNIFIED IDEOGRAPH + {0xF0D7, 0x8950}, //12051 #CJK UNIFIED IDEOGRAPH + {0xF0D8, 0x8951}, //12052 #CJK UNIFIED IDEOGRAPH + {0xF0D9, 0x8949}, //12053 #CJK UNIFIED IDEOGRAPH + {0xF0DA, 0x8B2A}, //12054 #CJK UNIFIED IDEOGRAPH + {0xF0DB, 0x8B27}, //12055 #CJK UNIFIED IDEOGRAPH + {0xF0DC, 0x8B23}, //12056 #CJK UNIFIED IDEOGRAPH + {0xF0DD, 0x8B33}, //12057 #CJK UNIFIED IDEOGRAPH + {0xF0DE, 0x8B30}, //12058 #CJK UNIFIED IDEOGRAPH + {0xF0DF, 0x8B35}, //12059 #CJK UNIFIED IDEOGRAPH + {0xF0E0, 0x8B47}, //12060 #CJK UNIFIED IDEOGRAPH + {0xF0E1, 0x8B2F}, //12061 #CJK UNIFIED IDEOGRAPH + {0xF0E2, 0x8B3C}, //12062 #CJK UNIFIED IDEOGRAPH + {0xF0E3, 0x8B3E}, //12063 #CJK UNIFIED IDEOGRAPH + {0xF0E4, 0x8B31}, //12064 #CJK UNIFIED IDEOGRAPH + {0xF0E5, 0x8B25}, //12065 #CJK UNIFIED IDEOGRAPH + {0xF0E6, 0x8B37}, //12066 #CJK UNIFIED IDEOGRAPH + {0xF0E7, 0x8B26}, //12067 #CJK UNIFIED IDEOGRAPH + {0xF0E8, 0x8B36}, //12068 #CJK UNIFIED IDEOGRAPH + {0xF0E9, 0x8B2E}, //12069 #CJK UNIFIED IDEOGRAPH + {0xF0EA, 0x8B24}, //12070 #CJK UNIFIED IDEOGRAPH + {0xF0EB, 0x8B3B}, //12071 #CJK UNIFIED IDEOGRAPH + {0xF0EC, 0x8B3D}, //12072 #CJK UNIFIED IDEOGRAPH + {0xF0ED, 0x8B3A}, //12073 #CJK UNIFIED IDEOGRAPH + {0xF0EE, 0x8C42}, //12074 #CJK UNIFIED IDEOGRAPH + {0xF0EF, 0x8C75}, //12075 #CJK UNIFIED IDEOGRAPH + {0xF0F0, 0x8C99}, //12076 #CJK UNIFIED IDEOGRAPH + {0xF0F1, 0x8C98}, //12077 #CJK UNIFIED IDEOGRAPH + {0xF0F2, 0x8C97}, //12078 #CJK UNIFIED IDEOGRAPH + {0xF0F3, 0x8CFE}, //12079 #CJK UNIFIED IDEOGRAPH + {0xF0F4, 0x8D04}, //12080 #CJK UNIFIED IDEOGRAPH + {0xF0F5, 0x8D02}, //12081 #CJK UNIFIED IDEOGRAPH + {0xF0F6, 0x8D00}, //12082 #CJK UNIFIED IDEOGRAPH + {0xF0F7, 0x8E5C}, //12083 #CJK UNIFIED IDEOGRAPH + {0xF0F8, 0x8E62}, //12084 #CJK UNIFIED IDEOGRAPH + {0xF0F9, 0x8E60}, //12085 #CJK UNIFIED IDEOGRAPH + {0xF0FA, 0x8E57}, //12086 #CJK UNIFIED IDEOGRAPH + {0xF0FB, 0x8E56}, //12087 #CJK UNIFIED IDEOGRAPH + {0xF0FC, 0x8E5E}, //12088 #CJK UNIFIED IDEOGRAPH + {0xF0FD, 0x8E65}, //12089 #CJK UNIFIED IDEOGRAPH + {0xF0FE, 0x8E67}, //12090 #CJK UNIFIED IDEOGRAPH + {0xF140, 0x8E5B}, //12091 #CJK UNIFIED IDEOGRAPH + {0xF141, 0x8E5A}, //12092 #CJK UNIFIED IDEOGRAPH + {0xF142, 0x8E61}, //12093 #CJK UNIFIED IDEOGRAPH + {0xF143, 0x8E5D}, //12094 #CJK UNIFIED IDEOGRAPH + {0xF144, 0x8E69}, //12095 #CJK UNIFIED IDEOGRAPH + {0xF145, 0x8E54}, //12096 #CJK UNIFIED IDEOGRAPH + {0xF146, 0x8F46}, //12097 #CJK UNIFIED IDEOGRAPH + {0xF147, 0x8F47}, //12098 #CJK UNIFIED IDEOGRAPH + {0xF148, 0x8F48}, //12099 #CJK UNIFIED IDEOGRAPH + {0xF149, 0x8F4B}, //12100 #CJK UNIFIED IDEOGRAPH + {0xF14A, 0x9128}, //12101 #CJK UNIFIED IDEOGRAPH + {0xF14B, 0x913A}, //12102 #CJK UNIFIED IDEOGRAPH + {0xF14C, 0x913B}, //12103 #CJK UNIFIED IDEOGRAPH + {0xF14D, 0x913E}, //12104 #CJK UNIFIED IDEOGRAPH + {0xF14E, 0x91A8}, //12105 #CJK UNIFIED IDEOGRAPH + {0xF14F, 0x91A5}, //12106 #CJK UNIFIED IDEOGRAPH + {0xF150, 0x91A7}, //12107 #CJK UNIFIED IDEOGRAPH + {0xF151, 0x91AF}, //12108 #CJK UNIFIED IDEOGRAPH + {0xF152, 0x91AA}, //12109 #CJK UNIFIED IDEOGRAPH + {0xF153, 0x93B5}, //12110 #CJK UNIFIED IDEOGRAPH + {0xF154, 0x938C}, //12111 #CJK UNIFIED IDEOGRAPH + {0xF155, 0x9392}, //12112 #CJK UNIFIED IDEOGRAPH + {0xF156, 0x93B7}, //12113 #CJK UNIFIED IDEOGRAPH + {0xF157, 0x939B}, //12114 #CJK UNIFIED IDEOGRAPH + {0xF158, 0x939D}, //12115 #CJK UNIFIED IDEOGRAPH + {0xF159, 0x9389}, //12116 #CJK UNIFIED IDEOGRAPH + {0xF15A, 0x93A7}, //12117 #CJK UNIFIED IDEOGRAPH + {0xF15B, 0x938E}, //12118 #CJK UNIFIED IDEOGRAPH + {0xF15C, 0x93AA}, //12119 #CJK UNIFIED IDEOGRAPH + {0xF15D, 0x939E}, //12120 #CJK UNIFIED IDEOGRAPH + {0xF15E, 0x93A6}, //12121 #CJK UNIFIED IDEOGRAPH + {0xF15F, 0x9395}, //12122 #CJK UNIFIED IDEOGRAPH + {0xF160, 0x9388}, //12123 #CJK UNIFIED IDEOGRAPH + {0xF161, 0x9399}, //12124 #CJK UNIFIED IDEOGRAPH + {0xF162, 0x939F}, //12125 #CJK UNIFIED IDEOGRAPH + {0xF163, 0x938D}, //12126 #CJK UNIFIED IDEOGRAPH + {0xF164, 0x93B1}, //12127 #CJK UNIFIED IDEOGRAPH + {0xF165, 0x9391}, //12128 #CJK UNIFIED IDEOGRAPH + {0xF166, 0x93B2}, //12129 #CJK UNIFIED IDEOGRAPH + {0xF167, 0x93A4}, //12130 #CJK UNIFIED IDEOGRAPH + {0xF168, 0x93A8}, //12131 #CJK UNIFIED IDEOGRAPH + {0xF169, 0x93B4}, //12132 #CJK UNIFIED IDEOGRAPH + {0xF16A, 0x93A3}, //12133 #CJK UNIFIED IDEOGRAPH + {0xF16B, 0x93A5}, //12134 #CJK UNIFIED IDEOGRAPH + {0xF16C, 0x95D2}, //12135 #CJK UNIFIED IDEOGRAPH + {0xF16D, 0x95D3}, //12136 #CJK UNIFIED IDEOGRAPH + {0xF16E, 0x95D1}, //12137 #CJK UNIFIED IDEOGRAPH + {0xF16F, 0x96B3}, //12138 #CJK UNIFIED IDEOGRAPH + {0xF170, 0x96D7}, //12139 #CJK UNIFIED IDEOGRAPH + {0xF171, 0x96DA}, //12140 #CJK UNIFIED IDEOGRAPH + {0xF172, 0x5DC2}, //12141 #CJK UNIFIED IDEOGRAPH + {0xF173, 0x96DF}, //12142 #CJK UNIFIED IDEOGRAPH + {0xF174, 0x96D8}, //12143 #CJK UNIFIED IDEOGRAPH + {0xF175, 0x96DD}, //12144 #CJK UNIFIED IDEOGRAPH + {0xF176, 0x9723}, //12145 #CJK UNIFIED IDEOGRAPH + {0xF177, 0x9722}, //12146 #CJK UNIFIED IDEOGRAPH + {0xF178, 0x9725}, //12147 #CJK UNIFIED IDEOGRAPH + {0xF179, 0x97AC}, //12148 #CJK UNIFIED IDEOGRAPH + {0xF17A, 0x97AE}, //12149 #CJK UNIFIED IDEOGRAPH + {0xF17B, 0x97A8}, //12150 #CJK UNIFIED IDEOGRAPH + {0xF17C, 0x97AB}, //12151 #CJK UNIFIED IDEOGRAPH + {0xF17D, 0x97A4}, //12152 #CJK UNIFIED IDEOGRAPH + {0xF17E, 0x97AA}, //12153 #CJK UNIFIED IDEOGRAPH + {0xF1A1, 0x97A2}, //12154 #CJK UNIFIED IDEOGRAPH + {0xF1A2, 0x97A5}, //12155 #CJK UNIFIED IDEOGRAPH + {0xF1A3, 0x97D7}, //12156 #CJK UNIFIED IDEOGRAPH + {0xF1A4, 0x97D9}, //12157 #CJK UNIFIED IDEOGRAPH + {0xF1A5, 0x97D6}, //12158 #CJK UNIFIED IDEOGRAPH + {0xF1A6, 0x97D8}, //12159 #CJK UNIFIED IDEOGRAPH + {0xF1A7, 0x97FA}, //12160 #CJK UNIFIED IDEOGRAPH + {0xF1A8, 0x9850}, //12161 #CJK UNIFIED IDEOGRAPH + {0xF1A9, 0x9851}, //12162 #CJK UNIFIED IDEOGRAPH + {0xF1AA, 0x9852}, //12163 #CJK UNIFIED IDEOGRAPH + {0xF1AB, 0x98B8}, //12164 #CJK UNIFIED IDEOGRAPH + {0xF1AC, 0x9941}, //12165 #CJK UNIFIED IDEOGRAPH + {0xF1AD, 0x993C}, //12166 #CJK UNIFIED IDEOGRAPH + {0xF1AE, 0x993A}, //12167 #CJK UNIFIED IDEOGRAPH + {0xF1AF, 0x9A0F}, //12168 #CJK UNIFIED IDEOGRAPH + {0xF1B0, 0x9A0B}, //12169 #CJK UNIFIED IDEOGRAPH + {0xF1B1, 0x9A09}, //12170 #CJK UNIFIED IDEOGRAPH + {0xF1B2, 0x9A0D}, //12171 #CJK UNIFIED IDEOGRAPH + {0xF1B3, 0x9A04}, //12172 #CJK UNIFIED IDEOGRAPH + {0xF1B4, 0x9A11}, //12173 #CJK UNIFIED IDEOGRAPH + {0xF1B5, 0x9A0A}, //12174 #CJK UNIFIED IDEOGRAPH + {0xF1B6, 0x9A05}, //12175 #CJK UNIFIED IDEOGRAPH + {0xF1B7, 0x9A07}, //12176 #CJK UNIFIED IDEOGRAPH + {0xF1B8, 0x9A06}, //12177 #CJK UNIFIED IDEOGRAPH + {0xF1B9, 0x9AC0}, //12178 #CJK UNIFIED IDEOGRAPH + {0xF1BA, 0x9ADC}, //12179 #CJK UNIFIED IDEOGRAPH + {0xF1BB, 0x9B08}, //12180 #CJK UNIFIED IDEOGRAPH + {0xF1BC, 0x9B04}, //12181 #CJK UNIFIED IDEOGRAPH + {0xF1BD, 0x9B05}, //12182 #CJK UNIFIED IDEOGRAPH + {0xF1BE, 0x9B29}, //12183 #CJK UNIFIED IDEOGRAPH + {0xF1BF, 0x9B35}, //12184 #CJK UNIFIED IDEOGRAPH + {0xF1C0, 0x9B4A}, //12185 #CJK UNIFIED IDEOGRAPH + {0xF1C1, 0x9B4C}, //12186 #CJK UNIFIED IDEOGRAPH + {0xF1C2, 0x9B4B}, //12187 #CJK UNIFIED IDEOGRAPH + {0xF1C3, 0x9BC7}, //12188 #CJK UNIFIED IDEOGRAPH + {0xF1C4, 0x9BC6}, //12189 #CJK UNIFIED IDEOGRAPH + {0xF1C5, 0x9BC3}, //12190 #CJK UNIFIED IDEOGRAPH + {0xF1C6, 0x9BBF}, //12191 #CJK UNIFIED IDEOGRAPH + {0xF1C7, 0x9BC1}, //12192 #CJK UNIFIED IDEOGRAPH + {0xF1C8, 0x9BB5}, //12193 #CJK UNIFIED IDEOGRAPH + {0xF1C9, 0x9BB8}, //12194 #CJK UNIFIED IDEOGRAPH + {0xF1CA, 0x9BD3}, //12195 #CJK UNIFIED IDEOGRAPH + {0xF1CB, 0x9BB6}, //12196 #CJK UNIFIED IDEOGRAPH + {0xF1CC, 0x9BC4}, //12197 #CJK UNIFIED IDEOGRAPH + {0xF1CD, 0x9BB9}, //12198 #CJK UNIFIED IDEOGRAPH + {0xF1CE, 0x9BBD}, //12199 #CJK UNIFIED IDEOGRAPH + {0xF1CF, 0x9D5C}, //12200 #CJK UNIFIED IDEOGRAPH + {0xF1D0, 0x9D53}, //12201 #CJK UNIFIED IDEOGRAPH + {0xF1D1, 0x9D4F}, //12202 #CJK UNIFIED IDEOGRAPH + {0xF1D2, 0x9D4A}, //12203 #CJK UNIFIED IDEOGRAPH + {0xF1D3, 0x9D5B}, //12204 #CJK UNIFIED IDEOGRAPH + {0xF1D4, 0x9D4B}, //12205 #CJK UNIFIED IDEOGRAPH + {0xF1D5, 0x9D59}, //12206 #CJK UNIFIED IDEOGRAPH + {0xF1D6, 0x9D56}, //12207 #CJK UNIFIED IDEOGRAPH + {0xF1D7, 0x9D4C}, //12208 #CJK UNIFIED IDEOGRAPH + {0xF1D8, 0x9D57}, //12209 #CJK UNIFIED IDEOGRAPH + {0xF1D9, 0x9D52}, //12210 #CJK UNIFIED IDEOGRAPH + {0xF1DA, 0x9D54}, //12211 #CJK UNIFIED IDEOGRAPH + {0xF1DB, 0x9D5F}, //12212 #CJK UNIFIED IDEOGRAPH + {0xF1DC, 0x9D58}, //12213 #CJK UNIFIED IDEOGRAPH + {0xF1DD, 0x9D5A}, //12214 #CJK UNIFIED IDEOGRAPH + {0xF1DE, 0x9E8E}, //12215 #CJK UNIFIED IDEOGRAPH + {0xF1DF, 0x9E8C}, //12216 #CJK UNIFIED IDEOGRAPH + {0xF1E0, 0x9EDF}, //12217 #CJK UNIFIED IDEOGRAPH + {0xF1E1, 0x9F01}, //12218 #CJK UNIFIED IDEOGRAPH + {0xF1E2, 0x9F00}, //12219 #CJK UNIFIED IDEOGRAPH + {0xF1E3, 0x9F16}, //12220 #CJK UNIFIED IDEOGRAPH + {0xF1E4, 0x9F25}, //12221 #CJK UNIFIED IDEOGRAPH + {0xF1E5, 0x9F2B}, //12222 #CJK UNIFIED IDEOGRAPH + {0xF1E6, 0x9F2A}, //12223 #CJK UNIFIED IDEOGRAPH + {0xF1E7, 0x9F29}, //12224 #CJK UNIFIED IDEOGRAPH + {0xF1E8, 0x9F28}, //12225 #CJK UNIFIED IDEOGRAPH + {0xF1E9, 0x9F4C}, //12226 #CJK UNIFIED IDEOGRAPH + {0xF1EA, 0x9F55}, //12227 #CJK UNIFIED IDEOGRAPH + {0xF1EB, 0x5134}, //12228 #CJK UNIFIED IDEOGRAPH + {0xF1EC, 0x5135}, //12229 #CJK UNIFIED IDEOGRAPH + {0xF1ED, 0x5296}, //12230 #CJK UNIFIED IDEOGRAPH + {0xF1EE, 0x52F7}, //12231 #CJK UNIFIED IDEOGRAPH + {0xF1EF, 0x53B4}, //12232 #CJK UNIFIED IDEOGRAPH + {0xF1F0, 0x56AB}, //12233 #CJK UNIFIED IDEOGRAPH + {0xF1F1, 0x56AD}, //12234 #CJK UNIFIED IDEOGRAPH + {0xF1F2, 0x56A6}, //12235 #CJK UNIFIED IDEOGRAPH + {0xF1F3, 0x56A7}, //12236 #CJK UNIFIED IDEOGRAPH + {0xF1F4, 0x56AA}, //12237 #CJK UNIFIED IDEOGRAPH + {0xF1F5, 0x56AC}, //12238 #CJK UNIFIED IDEOGRAPH + {0xF1F6, 0x58DA}, //12239 #CJK UNIFIED IDEOGRAPH + {0xF1F7, 0x58DD}, //12240 #CJK UNIFIED IDEOGRAPH + {0xF1F8, 0x58DB}, //12241 #CJK UNIFIED IDEOGRAPH + {0xF1F9, 0x5912}, //12242 #CJK UNIFIED IDEOGRAPH + {0xF1FA, 0x5B3D}, //12243 #CJK UNIFIED IDEOGRAPH + {0xF1FB, 0x5B3E}, //12244 #CJK UNIFIED IDEOGRAPH + {0xF1FC, 0x5B3F}, //12245 #CJK UNIFIED IDEOGRAPH + {0xF1FD, 0x5DC3}, //12246 #CJK UNIFIED IDEOGRAPH + {0xF1FE, 0x5E70}, //12247 #CJK UNIFIED IDEOGRAPH + {0xF240, 0x5FBF}, //12248 #CJK UNIFIED IDEOGRAPH + {0xF241, 0x61FB}, //12249 #CJK UNIFIED IDEOGRAPH + {0xF242, 0x6507}, //12250 #CJK UNIFIED IDEOGRAPH + {0xF243, 0x6510}, //12251 #CJK UNIFIED IDEOGRAPH + {0xF244, 0x650D}, //12252 #CJK UNIFIED IDEOGRAPH + {0xF245, 0x6509}, //12253 #CJK UNIFIED IDEOGRAPH + {0xF246, 0x650C}, //12254 #CJK UNIFIED IDEOGRAPH + {0xF247, 0x650E}, //12255 #CJK UNIFIED IDEOGRAPH + {0xF248, 0x6584}, //12256 #CJK UNIFIED IDEOGRAPH + {0xF249, 0x65DE}, //12257 #CJK UNIFIED IDEOGRAPH + {0xF24A, 0x65DD}, //12258 #CJK UNIFIED IDEOGRAPH + {0xF24B, 0x66DE}, //12259 #CJK UNIFIED IDEOGRAPH + {0xF24C, 0x6AE7}, //12260 #CJK UNIFIED IDEOGRAPH + {0xF24D, 0x6AE0}, //12261 #CJK UNIFIED IDEOGRAPH + {0xF24E, 0x6ACC}, //12262 #CJK UNIFIED IDEOGRAPH + {0xF24F, 0x6AD1}, //12263 #CJK UNIFIED IDEOGRAPH + {0xF250, 0x6AD9}, //12264 #CJK UNIFIED IDEOGRAPH + {0xF251, 0x6ACB}, //12265 #CJK UNIFIED IDEOGRAPH + {0xF252, 0x6ADF}, //12266 #CJK UNIFIED IDEOGRAPH + {0xF253, 0x6ADC}, //12267 #CJK UNIFIED IDEOGRAPH + {0xF254, 0x6AD0}, //12268 #CJK UNIFIED IDEOGRAPH + {0xF255, 0x6AEB}, //12269 #CJK UNIFIED IDEOGRAPH + {0xF256, 0x6ACF}, //12270 #CJK UNIFIED IDEOGRAPH + {0xF257, 0x6ACD}, //12271 #CJK UNIFIED IDEOGRAPH + {0xF258, 0x6ADE}, //12272 #CJK UNIFIED IDEOGRAPH + {0xF259, 0x6B60}, //12273 #CJK UNIFIED IDEOGRAPH + {0xF25A, 0x6BB0}, //12274 #CJK UNIFIED IDEOGRAPH + {0xF25B, 0x6C0C}, //12275 #CJK UNIFIED IDEOGRAPH + {0xF25C, 0x7019}, //12276 #CJK UNIFIED IDEOGRAPH + {0xF25D, 0x7027}, //12277 #CJK UNIFIED IDEOGRAPH + {0xF25E, 0x7020}, //12278 #CJK UNIFIED IDEOGRAPH + {0xF25F, 0x7016}, //12279 #CJK UNIFIED IDEOGRAPH + {0xF260, 0x702B}, //12280 #CJK UNIFIED IDEOGRAPH + {0xF261, 0x7021}, //12281 #CJK UNIFIED IDEOGRAPH + {0xF262, 0x7022}, //12282 #CJK UNIFIED IDEOGRAPH + {0xF263, 0x7023}, //12283 #CJK UNIFIED IDEOGRAPH + {0xF264, 0x7029}, //12284 #CJK UNIFIED IDEOGRAPH + {0xF265, 0x7017}, //12285 #CJK UNIFIED IDEOGRAPH + {0xF266, 0x7024}, //12286 #CJK UNIFIED IDEOGRAPH + {0xF267, 0x701C}, //12287 #CJK UNIFIED IDEOGRAPH + {0xF268, 0x702A}, //12288 #CJK UNIFIED IDEOGRAPH + {0xF269, 0x720C}, //12289 #CJK UNIFIED IDEOGRAPH + {0xF26A, 0x720A}, //12290 #CJK UNIFIED IDEOGRAPH + {0xF26B, 0x7207}, //12291 #CJK UNIFIED IDEOGRAPH + {0xF26C, 0x7202}, //12292 #CJK UNIFIED IDEOGRAPH + {0xF26D, 0x7205}, //12293 #CJK UNIFIED IDEOGRAPH + {0xF26E, 0x72A5}, //12294 #CJK UNIFIED IDEOGRAPH + {0xF26F, 0x72A6}, //12295 #CJK UNIFIED IDEOGRAPH + {0xF270, 0x72A4}, //12296 #CJK UNIFIED IDEOGRAPH + {0xF271, 0x72A3}, //12297 #CJK UNIFIED IDEOGRAPH + {0xF272, 0x72A1}, //12298 #CJK UNIFIED IDEOGRAPH + {0xF273, 0x74CB}, //12299 #CJK UNIFIED IDEOGRAPH + {0xF274, 0x74C5}, //12300 #CJK UNIFIED IDEOGRAPH + {0xF275, 0x74B7}, //12301 #CJK UNIFIED IDEOGRAPH + {0xF276, 0x74C3}, //12302 #CJK UNIFIED IDEOGRAPH + {0xF277, 0x7516}, //12303 #CJK UNIFIED IDEOGRAPH + {0xF278, 0x7660}, //12304 #CJK UNIFIED IDEOGRAPH + {0xF279, 0x77C9}, //12305 #CJK UNIFIED IDEOGRAPH + {0xF27A, 0x77CA}, //12306 #CJK UNIFIED IDEOGRAPH + {0xF27B, 0x77C4}, //12307 #CJK UNIFIED IDEOGRAPH + {0xF27C, 0x77F1}, //12308 #CJK UNIFIED IDEOGRAPH + {0xF27D, 0x791D}, //12309 #CJK UNIFIED IDEOGRAPH + {0xF27E, 0x791B}, //12310 #CJK UNIFIED IDEOGRAPH + {0xF2A1, 0x7921}, //12311 #CJK UNIFIED IDEOGRAPH + {0xF2A2, 0x791C}, //12312 #CJK UNIFIED IDEOGRAPH + {0xF2A3, 0x7917}, //12313 #CJK UNIFIED IDEOGRAPH + {0xF2A4, 0x791E}, //12314 #CJK UNIFIED IDEOGRAPH + {0xF2A5, 0x79B0}, //12315 #CJK UNIFIED IDEOGRAPH + {0xF2A6, 0x7A67}, //12316 #CJK UNIFIED IDEOGRAPH + {0xF2A7, 0x7A68}, //12317 #CJK UNIFIED IDEOGRAPH + {0xF2A8, 0x7C33}, //12318 #CJK UNIFIED IDEOGRAPH + {0xF2A9, 0x7C3C}, //12319 #CJK UNIFIED IDEOGRAPH + {0xF2AA, 0x7C39}, //12320 #CJK UNIFIED IDEOGRAPH + {0xF2AB, 0x7C2C}, //12321 #CJK UNIFIED IDEOGRAPH + {0xF2AC, 0x7C3B}, //12322 #CJK UNIFIED IDEOGRAPH + {0xF2AD, 0x7CEC}, //12323 #CJK UNIFIED IDEOGRAPH + {0xF2AE, 0x7CEA}, //12324 #CJK UNIFIED IDEOGRAPH + {0xF2AF, 0x7E76}, //12325 #CJK UNIFIED IDEOGRAPH + {0xF2B0, 0x7E75}, //12326 #CJK UNIFIED IDEOGRAPH + {0xF2B1, 0x7E78}, //12327 #CJK UNIFIED IDEOGRAPH + {0xF2B2, 0x7E70}, //12328 #CJK UNIFIED IDEOGRAPH + {0xF2B3, 0x7E77}, //12329 #CJK UNIFIED IDEOGRAPH + {0xF2B4, 0x7E6F}, //12330 #CJK UNIFIED IDEOGRAPH + {0xF2B5, 0x7E7A}, //12331 #CJK UNIFIED IDEOGRAPH + {0xF2B6, 0x7E72}, //12332 #CJK UNIFIED IDEOGRAPH + {0xF2B7, 0x7E74}, //12333 #CJK UNIFIED IDEOGRAPH + {0xF2B8, 0x7E68}, //12334 #CJK UNIFIED IDEOGRAPH + {0xF2B9, 0x7F4B}, //12335 #CJK UNIFIED IDEOGRAPH + {0xF2BA, 0x7F4A}, //12336 #CJK UNIFIED IDEOGRAPH + {0xF2BB, 0x7F83}, //12337 #CJK UNIFIED IDEOGRAPH + {0xF2BC, 0x7F86}, //12338 #CJK UNIFIED IDEOGRAPH + {0xF2BD, 0x7FB7}, //12339 #CJK UNIFIED IDEOGRAPH + {0xF2BE, 0x7FFD}, //12340 #CJK UNIFIED IDEOGRAPH + {0xF2BF, 0x7FFE}, //12341 #CJK UNIFIED IDEOGRAPH + {0xF2C0, 0x8078}, //12342 #CJK UNIFIED IDEOGRAPH + {0xF2C1, 0x81D7}, //12343 #CJK UNIFIED IDEOGRAPH + {0xF2C2, 0x81D5}, //12344 #CJK UNIFIED IDEOGRAPH + {0xF2C3, 0x8264}, //12345 #CJK UNIFIED IDEOGRAPH + {0xF2C4, 0x8261}, //12346 #CJK UNIFIED IDEOGRAPH + {0xF2C5, 0x8263}, //12347 #CJK UNIFIED IDEOGRAPH + {0xF2C6, 0x85EB}, //12348 #CJK UNIFIED IDEOGRAPH + {0xF2C7, 0x85F1}, //12349 #CJK UNIFIED IDEOGRAPH + {0xF2C8, 0x85ED}, //12350 #CJK UNIFIED IDEOGRAPH + {0xF2C9, 0x85D9}, //12351 #CJK UNIFIED IDEOGRAPH + {0xF2CA, 0x85E1}, //12352 #CJK UNIFIED IDEOGRAPH + {0xF2CB, 0x85E8}, //12353 #CJK UNIFIED IDEOGRAPH + {0xF2CC, 0x85DA}, //12354 #CJK UNIFIED IDEOGRAPH + {0xF2CD, 0x85D7}, //12355 #CJK UNIFIED IDEOGRAPH + {0xF2CE, 0x85EC}, //12356 #CJK UNIFIED IDEOGRAPH + {0xF2CF, 0x85F2}, //12357 #CJK UNIFIED IDEOGRAPH + {0xF2D0, 0x85F8}, //12358 #CJK UNIFIED IDEOGRAPH + {0xF2D1, 0x85D8}, //12359 #CJK UNIFIED IDEOGRAPH + {0xF2D2, 0x85DF}, //12360 #CJK UNIFIED IDEOGRAPH + {0xF2D3, 0x85E3}, //12361 #CJK UNIFIED IDEOGRAPH + {0xF2D4, 0x85DC}, //12362 #CJK UNIFIED IDEOGRAPH + {0xF2D5, 0x85D1}, //12363 #CJK UNIFIED IDEOGRAPH + {0xF2D6, 0x85F0}, //12364 #CJK UNIFIED IDEOGRAPH + {0xF2D7, 0x85E6}, //12365 #CJK UNIFIED IDEOGRAPH + {0xF2D8, 0x85EF}, //12366 #CJK UNIFIED IDEOGRAPH + {0xF2D9, 0x85DE}, //12367 #CJK UNIFIED IDEOGRAPH + {0xF2DA, 0x85E2}, //12368 #CJK UNIFIED IDEOGRAPH + {0xF2DB, 0x8800}, //12369 #CJK UNIFIED IDEOGRAPH + {0xF2DC, 0x87FA}, //12370 #CJK UNIFIED IDEOGRAPH + {0xF2DD, 0x8803}, //12371 #CJK UNIFIED IDEOGRAPH + {0xF2DE, 0x87F6}, //12372 #CJK UNIFIED IDEOGRAPH + {0xF2DF, 0x87F7}, //12373 #CJK UNIFIED IDEOGRAPH + {0xF2E0, 0x8809}, //12374 #CJK UNIFIED IDEOGRAPH + {0xF2E1, 0x880C}, //12375 #CJK UNIFIED IDEOGRAPH + {0xF2E2, 0x880B}, //12376 #CJK UNIFIED IDEOGRAPH + {0xF2E3, 0x8806}, //12377 #CJK UNIFIED IDEOGRAPH + {0xF2E4, 0x87FC}, //12378 #CJK UNIFIED IDEOGRAPH + {0xF2E5, 0x8808}, //12379 #CJK UNIFIED IDEOGRAPH + {0xF2E6, 0x87FF}, //12380 #CJK UNIFIED IDEOGRAPH + {0xF2E7, 0x880A}, //12381 #CJK UNIFIED IDEOGRAPH + {0xF2E8, 0x8802}, //12382 #CJK UNIFIED IDEOGRAPH + {0xF2E9, 0x8962}, //12383 #CJK UNIFIED IDEOGRAPH + {0xF2EA, 0x895A}, //12384 #CJK UNIFIED IDEOGRAPH + {0xF2EB, 0x895B}, //12385 #CJK UNIFIED IDEOGRAPH + {0xF2EC, 0x8957}, //12386 #CJK UNIFIED IDEOGRAPH + {0xF2ED, 0x8961}, //12387 #CJK UNIFIED IDEOGRAPH + {0xF2EE, 0x895C}, //12388 #CJK UNIFIED IDEOGRAPH + {0xF2EF, 0x8958}, //12389 #CJK UNIFIED IDEOGRAPH + {0xF2F0, 0x895D}, //12390 #CJK UNIFIED IDEOGRAPH + {0xF2F1, 0x8959}, //12391 #CJK UNIFIED IDEOGRAPH + {0xF2F2, 0x8988}, //12392 #CJK UNIFIED IDEOGRAPH + {0xF2F3, 0x89B7}, //12393 #CJK UNIFIED IDEOGRAPH + {0xF2F4, 0x89B6}, //12394 #CJK UNIFIED IDEOGRAPH + {0xF2F5, 0x89F6}, //12395 #CJK UNIFIED IDEOGRAPH + {0xF2F6, 0x8B50}, //12396 #CJK UNIFIED IDEOGRAPH + {0xF2F7, 0x8B48}, //12397 #CJK UNIFIED IDEOGRAPH + {0xF2F8, 0x8B4A}, //12398 #CJK UNIFIED IDEOGRAPH + {0xF2F9, 0x8B40}, //12399 #CJK UNIFIED IDEOGRAPH + {0xF2FA, 0x8B53}, //12400 #CJK UNIFIED IDEOGRAPH + {0xF2FB, 0x8B56}, //12401 #CJK UNIFIED IDEOGRAPH + {0xF2FC, 0x8B54}, //12402 #CJK UNIFIED IDEOGRAPH + {0xF2FD, 0x8B4B}, //12403 #CJK UNIFIED IDEOGRAPH + {0xF2FE, 0x8B55}, //12404 #CJK UNIFIED IDEOGRAPH + {0xF340, 0x8B51}, //12405 #CJK UNIFIED IDEOGRAPH + {0xF341, 0x8B42}, //12406 #CJK UNIFIED IDEOGRAPH + {0xF342, 0x8B52}, //12407 #CJK UNIFIED IDEOGRAPH + {0xF343, 0x8B57}, //12408 #CJK UNIFIED IDEOGRAPH + {0xF344, 0x8C43}, //12409 #CJK UNIFIED IDEOGRAPH + {0xF345, 0x8C77}, //12410 #CJK UNIFIED IDEOGRAPH + {0xF346, 0x8C76}, //12411 #CJK UNIFIED IDEOGRAPH + {0xF347, 0x8C9A}, //12412 #CJK UNIFIED IDEOGRAPH + {0xF348, 0x8D06}, //12413 #CJK UNIFIED IDEOGRAPH + {0xF349, 0x8D07}, //12414 #CJK UNIFIED IDEOGRAPH + {0xF34A, 0x8D09}, //12415 #CJK UNIFIED IDEOGRAPH + {0xF34B, 0x8DAC}, //12416 #CJK UNIFIED IDEOGRAPH + {0xF34C, 0x8DAA}, //12417 #CJK UNIFIED IDEOGRAPH + {0xF34D, 0x8DAD}, //12418 #CJK UNIFIED IDEOGRAPH + {0xF34E, 0x8DAB}, //12419 #CJK UNIFIED IDEOGRAPH + {0xF34F, 0x8E6D}, //12420 #CJK UNIFIED IDEOGRAPH + {0xF350, 0x8E78}, //12421 #CJK UNIFIED IDEOGRAPH + {0xF351, 0x8E73}, //12422 #CJK UNIFIED IDEOGRAPH + {0xF352, 0x8E6A}, //12423 #CJK UNIFIED IDEOGRAPH + {0xF353, 0x8E6F}, //12424 #CJK UNIFIED IDEOGRAPH + {0xF354, 0x8E7B}, //12425 #CJK UNIFIED IDEOGRAPH + {0xF355, 0x8EC2}, //12426 #CJK UNIFIED IDEOGRAPH + {0xF356, 0x8F52}, //12427 #CJK UNIFIED IDEOGRAPH + {0xF357, 0x8F51}, //12428 #CJK UNIFIED IDEOGRAPH + {0xF358, 0x8F4F}, //12429 #CJK UNIFIED IDEOGRAPH + {0xF359, 0x8F50}, //12430 #CJK UNIFIED IDEOGRAPH + {0xF35A, 0x8F53}, //12431 #CJK UNIFIED IDEOGRAPH + {0xF35B, 0x8FB4}, //12432 #CJK UNIFIED IDEOGRAPH + {0xF35C, 0x9140}, //12433 #CJK UNIFIED IDEOGRAPH + {0xF35D, 0x913F}, //12434 #CJK UNIFIED IDEOGRAPH + {0xF35E, 0x91B0}, //12435 #CJK UNIFIED IDEOGRAPH + {0xF35F, 0x91AD}, //12436 #CJK UNIFIED IDEOGRAPH + {0xF360, 0x93DE}, //12437 #CJK UNIFIED IDEOGRAPH + {0xF361, 0x93C7}, //12438 #CJK UNIFIED IDEOGRAPH + {0xF362, 0x93CF}, //12439 #CJK UNIFIED IDEOGRAPH + {0xF363, 0x93C2}, //12440 #CJK UNIFIED IDEOGRAPH + {0xF364, 0x93DA}, //12441 #CJK UNIFIED IDEOGRAPH + {0xF365, 0x93D0}, //12442 #CJK UNIFIED IDEOGRAPH + {0xF366, 0x93F9}, //12443 #CJK UNIFIED IDEOGRAPH + {0xF367, 0x93EC}, //12444 #CJK UNIFIED IDEOGRAPH + {0xF368, 0x93CC}, //12445 #CJK UNIFIED IDEOGRAPH + {0xF369, 0x93D9}, //12446 #CJK UNIFIED IDEOGRAPH + {0xF36A, 0x93A9}, //12447 #CJK UNIFIED IDEOGRAPH + {0xF36B, 0x93E6}, //12448 #CJK UNIFIED IDEOGRAPH + {0xF36C, 0x93CA}, //12449 #CJK UNIFIED IDEOGRAPH + {0xF36D, 0x93D4}, //12450 #CJK UNIFIED IDEOGRAPH + {0xF36E, 0x93EE}, //12451 #CJK UNIFIED IDEOGRAPH + {0xF36F, 0x93E3}, //12452 #CJK UNIFIED IDEOGRAPH + {0xF370, 0x93D5}, //12453 #CJK UNIFIED IDEOGRAPH + {0xF371, 0x93C4}, //12454 #CJK UNIFIED IDEOGRAPH + {0xF372, 0x93CE}, //12455 #CJK UNIFIED IDEOGRAPH + {0xF373, 0x93C0}, //12456 #CJK UNIFIED IDEOGRAPH + {0xF374, 0x93D2}, //12457 #CJK UNIFIED IDEOGRAPH + {0xF375, 0x93E7}, //12458 #CJK UNIFIED IDEOGRAPH + {0xF376, 0x957D}, //12459 #CJK UNIFIED IDEOGRAPH + {0xF377, 0x95DA}, //12460 #CJK UNIFIED IDEOGRAPH + {0xF378, 0x95DB}, //12461 #CJK UNIFIED IDEOGRAPH + {0xF379, 0x96E1}, //12462 #CJK UNIFIED IDEOGRAPH + {0xF37A, 0x9729}, //12463 #CJK UNIFIED IDEOGRAPH + {0xF37B, 0x972B}, //12464 #CJK UNIFIED IDEOGRAPH + {0xF37C, 0x972C}, //12465 #CJK UNIFIED IDEOGRAPH + {0xF37D, 0x9728}, //12466 #CJK UNIFIED IDEOGRAPH + {0xF37E, 0x9726}, //12467 #CJK UNIFIED IDEOGRAPH + {0xF3A1, 0x97B3}, //12468 #CJK UNIFIED IDEOGRAPH + {0xF3A2, 0x97B7}, //12469 #CJK UNIFIED IDEOGRAPH + {0xF3A3, 0x97B6}, //12470 #CJK UNIFIED IDEOGRAPH + {0xF3A4, 0x97DD}, //12471 #CJK UNIFIED IDEOGRAPH + {0xF3A5, 0x97DE}, //12472 #CJK UNIFIED IDEOGRAPH + {0xF3A6, 0x97DF}, //12473 #CJK UNIFIED IDEOGRAPH + {0xF3A7, 0x985C}, //12474 #CJK UNIFIED IDEOGRAPH + {0xF3A8, 0x9859}, //12475 #CJK UNIFIED IDEOGRAPH + {0xF3A9, 0x985D}, //12476 #CJK UNIFIED IDEOGRAPH + {0xF3AA, 0x9857}, //12477 #CJK UNIFIED IDEOGRAPH + {0xF3AB, 0x98BF}, //12478 #CJK UNIFIED IDEOGRAPH + {0xF3AC, 0x98BD}, //12479 #CJK UNIFIED IDEOGRAPH + {0xF3AD, 0x98BB}, //12480 #CJK UNIFIED IDEOGRAPH + {0xF3AE, 0x98BE}, //12481 #CJK UNIFIED IDEOGRAPH + {0xF3AF, 0x9948}, //12482 #CJK UNIFIED IDEOGRAPH + {0xF3B0, 0x9947}, //12483 #CJK UNIFIED IDEOGRAPH + {0xF3B1, 0x9943}, //12484 #CJK UNIFIED IDEOGRAPH + {0xF3B2, 0x99A6}, //12485 #CJK UNIFIED IDEOGRAPH + {0xF3B3, 0x99A7}, //12486 #CJK UNIFIED IDEOGRAPH + {0xF3B4, 0x9A1A}, //12487 #CJK UNIFIED IDEOGRAPH + {0xF3B5, 0x9A15}, //12488 #CJK UNIFIED IDEOGRAPH + {0xF3B6, 0x9A25}, //12489 #CJK UNIFIED IDEOGRAPH + {0xF3B7, 0x9A1D}, //12490 #CJK UNIFIED IDEOGRAPH + {0xF3B8, 0x9A24}, //12491 #CJK UNIFIED IDEOGRAPH + {0xF3B9, 0x9A1B}, //12492 #CJK UNIFIED IDEOGRAPH + {0xF3BA, 0x9A22}, //12493 #CJK UNIFIED IDEOGRAPH + {0xF3BB, 0x9A20}, //12494 #CJK UNIFIED IDEOGRAPH + {0xF3BC, 0x9A27}, //12495 #CJK UNIFIED IDEOGRAPH + {0xF3BD, 0x9A23}, //12496 #CJK UNIFIED IDEOGRAPH + {0xF3BE, 0x9A1E}, //12497 #CJK UNIFIED IDEOGRAPH + {0xF3BF, 0x9A1C}, //12498 #CJK UNIFIED IDEOGRAPH + {0xF3C0, 0x9A14}, //12499 #CJK UNIFIED IDEOGRAPH + {0xF3C1, 0x9AC2}, //12500 #CJK UNIFIED IDEOGRAPH + {0xF3C2, 0x9B0B}, //12501 #CJK UNIFIED IDEOGRAPH + {0xF3C3, 0x9B0A}, //12502 #CJK UNIFIED IDEOGRAPH + {0xF3C4, 0x9B0E}, //12503 #CJK UNIFIED IDEOGRAPH + {0xF3C5, 0x9B0C}, //12504 #CJK UNIFIED IDEOGRAPH + {0xF3C6, 0x9B37}, //12505 #CJK UNIFIED IDEOGRAPH + {0xF3C7, 0x9BEA}, //12506 #CJK UNIFIED IDEOGRAPH + {0xF3C8, 0x9BEB}, //12507 #CJK UNIFIED IDEOGRAPH + {0xF3C9, 0x9BE0}, //12508 #CJK UNIFIED IDEOGRAPH + {0xF3CA, 0x9BDE}, //12509 #CJK UNIFIED IDEOGRAPH + {0xF3CB, 0x9BE4}, //12510 #CJK UNIFIED IDEOGRAPH + {0xF3CC, 0x9BE6}, //12511 #CJK UNIFIED IDEOGRAPH + {0xF3CD, 0x9BE2}, //12512 #CJK UNIFIED IDEOGRAPH + {0xF3CE, 0x9BF0}, //12513 #CJK UNIFIED IDEOGRAPH + {0xF3CF, 0x9BD4}, //12514 #CJK UNIFIED IDEOGRAPH + {0xF3D0, 0x9BD7}, //12515 #CJK UNIFIED IDEOGRAPH + {0xF3D1, 0x9BEC}, //12516 #CJK UNIFIED IDEOGRAPH + {0xF3D2, 0x9BDC}, //12517 #CJK UNIFIED IDEOGRAPH + {0xF3D3, 0x9BD9}, //12518 #CJK UNIFIED IDEOGRAPH + {0xF3D4, 0x9BE5}, //12519 #CJK UNIFIED IDEOGRAPH + {0xF3D5, 0x9BD5}, //12520 #CJK UNIFIED IDEOGRAPH + {0xF3D6, 0x9BE1}, //12521 #CJK UNIFIED IDEOGRAPH + {0xF3D7, 0x9BDA}, //12522 #CJK UNIFIED IDEOGRAPH + {0xF3D8, 0x9D77}, //12523 #CJK UNIFIED IDEOGRAPH + {0xF3D9, 0x9D81}, //12524 #CJK UNIFIED IDEOGRAPH + {0xF3DA, 0x9D8A}, //12525 #CJK UNIFIED IDEOGRAPH + {0xF3DB, 0x9D84}, //12526 #CJK UNIFIED IDEOGRAPH + {0xF3DC, 0x9D88}, //12527 #CJK UNIFIED IDEOGRAPH + {0xF3DD, 0x9D71}, //12528 #CJK UNIFIED IDEOGRAPH + {0xF3DE, 0x9D80}, //12529 #CJK UNIFIED IDEOGRAPH + {0xF3DF, 0x9D78}, //12530 #CJK UNIFIED IDEOGRAPH + {0xF3E0, 0x9D86}, //12531 #CJK UNIFIED IDEOGRAPH + {0xF3E1, 0x9D8B}, //12532 #CJK UNIFIED IDEOGRAPH + {0xF3E2, 0x9D8C}, //12533 #CJK UNIFIED IDEOGRAPH + {0xF3E3, 0x9D7D}, //12534 #CJK UNIFIED IDEOGRAPH + {0xF3E4, 0x9D6B}, //12535 #CJK UNIFIED IDEOGRAPH + {0xF3E5, 0x9D74}, //12536 #CJK UNIFIED IDEOGRAPH + {0xF3E6, 0x9D75}, //12537 #CJK UNIFIED IDEOGRAPH + {0xF3E7, 0x9D70}, //12538 #CJK UNIFIED IDEOGRAPH + {0xF3E8, 0x9D69}, //12539 #CJK UNIFIED IDEOGRAPH + {0xF3E9, 0x9D85}, //12540 #CJK UNIFIED IDEOGRAPH + {0xF3EA, 0x9D73}, //12541 #CJK UNIFIED IDEOGRAPH + {0xF3EB, 0x9D7B}, //12542 #CJK UNIFIED IDEOGRAPH + {0xF3EC, 0x9D82}, //12543 #CJK UNIFIED IDEOGRAPH + {0xF3ED, 0x9D6F}, //12544 #CJK UNIFIED IDEOGRAPH + {0xF3EE, 0x9D79}, //12545 #CJK UNIFIED IDEOGRAPH + {0xF3EF, 0x9D7F}, //12546 #CJK UNIFIED IDEOGRAPH + {0xF3F0, 0x9D87}, //12547 #CJK UNIFIED IDEOGRAPH + {0xF3F1, 0x9D68}, //12548 #CJK UNIFIED IDEOGRAPH + {0xF3F2, 0x9E94}, //12549 #CJK UNIFIED IDEOGRAPH + {0xF3F3, 0x9E91}, //12550 #CJK UNIFIED IDEOGRAPH + {0xF3F4, 0x9EC0}, //12551 #CJK UNIFIED IDEOGRAPH + {0xF3F5, 0x9EFC}, //12552 #CJK UNIFIED IDEOGRAPH + {0xF3F6, 0x9F2D}, //12553 #CJK UNIFIED IDEOGRAPH + {0xF3F7, 0x9F40}, //12554 #CJK UNIFIED IDEOGRAPH + {0xF3F8, 0x9F41}, //12555 #CJK UNIFIED IDEOGRAPH + {0xF3F9, 0x9F4D}, //12556 #CJK UNIFIED IDEOGRAPH + {0xF3FA, 0x9F56}, //12557 #CJK UNIFIED IDEOGRAPH + {0xF3FB, 0x9F57}, //12558 #CJK UNIFIED IDEOGRAPH + {0xF3FC, 0x9F58}, //12559 #CJK UNIFIED IDEOGRAPH + {0xF3FD, 0x5337}, //12560 #CJK UNIFIED IDEOGRAPH + {0xF3FE, 0x56B2}, //12561 #CJK UNIFIED IDEOGRAPH + {0xF440, 0x56B5}, //12562 #CJK UNIFIED IDEOGRAPH + {0xF441, 0x56B3}, //12563 #CJK UNIFIED IDEOGRAPH + {0xF442, 0x58E3}, //12564 #CJK UNIFIED IDEOGRAPH + {0xF443, 0x5B45}, //12565 #CJK UNIFIED IDEOGRAPH + {0xF444, 0x5DC6}, //12566 #CJK UNIFIED IDEOGRAPH + {0xF445, 0x5DC7}, //12567 #CJK UNIFIED IDEOGRAPH + {0xF446, 0x5EEE}, //12568 #CJK UNIFIED IDEOGRAPH + {0xF447, 0x5EEF}, //12569 #CJK UNIFIED IDEOGRAPH + {0xF448, 0x5FC0}, //12570 #CJK UNIFIED IDEOGRAPH + {0xF449, 0x5FC1}, //12571 #CJK UNIFIED IDEOGRAPH + {0xF44A, 0x61F9}, //12572 #CJK UNIFIED IDEOGRAPH + {0xF44B, 0x6517}, //12573 #CJK UNIFIED IDEOGRAPH + {0xF44C, 0x6516}, //12574 #CJK UNIFIED IDEOGRAPH + {0xF44D, 0x6515}, //12575 #CJK UNIFIED IDEOGRAPH + {0xF44E, 0x6513}, //12576 #CJK UNIFIED IDEOGRAPH + {0xF44F, 0x65DF}, //12577 #CJK UNIFIED IDEOGRAPH + {0xF450, 0x66E8}, //12578 #CJK UNIFIED IDEOGRAPH + {0xF451, 0x66E3}, //12579 #CJK UNIFIED IDEOGRAPH + {0xF452, 0x66E4}, //12580 #CJK UNIFIED IDEOGRAPH + {0xF453, 0x6AF3}, //12581 #CJK UNIFIED IDEOGRAPH + {0xF454, 0x6AF0}, //12582 #CJK UNIFIED IDEOGRAPH + {0xF455, 0x6AEA}, //12583 #CJK UNIFIED IDEOGRAPH + {0xF456, 0x6AE8}, //12584 #CJK UNIFIED IDEOGRAPH + {0xF457, 0x6AF9}, //12585 #CJK UNIFIED IDEOGRAPH + {0xF458, 0x6AF1}, //12586 #CJK UNIFIED IDEOGRAPH + {0xF459, 0x6AEE}, //12587 #CJK UNIFIED IDEOGRAPH + {0xF45A, 0x6AEF}, //12588 #CJK UNIFIED IDEOGRAPH + {0xF45B, 0x703C}, //12589 #CJK UNIFIED IDEOGRAPH + {0xF45C, 0x7035}, //12590 #CJK UNIFIED IDEOGRAPH + {0xF45D, 0x702F}, //12591 #CJK UNIFIED IDEOGRAPH + {0xF45E, 0x7037}, //12592 #CJK UNIFIED IDEOGRAPH + {0xF45F, 0x7034}, //12593 #CJK UNIFIED IDEOGRAPH + {0xF460, 0x7031}, //12594 #CJK UNIFIED IDEOGRAPH + {0xF461, 0x7042}, //12595 #CJK UNIFIED IDEOGRAPH + {0xF462, 0x7038}, //12596 #CJK UNIFIED IDEOGRAPH + {0xF463, 0x703F}, //12597 #CJK UNIFIED IDEOGRAPH + {0xF464, 0x703A}, //12598 #CJK UNIFIED IDEOGRAPH + {0xF465, 0x7039}, //12599 #CJK UNIFIED IDEOGRAPH + {0xF466, 0x7040}, //12600 #CJK UNIFIED IDEOGRAPH + {0xF467, 0x703B}, //12601 #CJK UNIFIED IDEOGRAPH + {0xF468, 0x7033}, //12602 #CJK UNIFIED IDEOGRAPH + {0xF469, 0x7041}, //12603 #CJK UNIFIED IDEOGRAPH + {0xF46A, 0x7213}, //12604 #CJK UNIFIED IDEOGRAPH + {0xF46B, 0x7214}, //12605 #CJK UNIFIED IDEOGRAPH + {0xF46C, 0x72A8}, //12606 #CJK UNIFIED IDEOGRAPH + {0xF46D, 0x737D}, //12607 #CJK UNIFIED IDEOGRAPH + {0xF46E, 0x737C}, //12608 #CJK UNIFIED IDEOGRAPH + {0xF46F, 0x74BA}, //12609 #CJK UNIFIED IDEOGRAPH + {0xF470, 0x76AB}, //12610 #CJK UNIFIED IDEOGRAPH + {0xF471, 0x76AA}, //12611 #CJK UNIFIED IDEOGRAPH + {0xF472, 0x76BE}, //12612 #CJK UNIFIED IDEOGRAPH + {0xF473, 0x76ED}, //12613 #CJK UNIFIED IDEOGRAPH + {0xF474, 0x77CC}, //12614 #CJK UNIFIED IDEOGRAPH + {0xF475, 0x77CE}, //12615 #CJK UNIFIED IDEOGRAPH + {0xF476, 0x77CF}, //12616 #CJK UNIFIED IDEOGRAPH + {0xF477, 0x77CD}, //12617 #CJK UNIFIED IDEOGRAPH + {0xF478, 0x77F2}, //12618 #CJK UNIFIED IDEOGRAPH + {0xF479, 0x7925}, //12619 #CJK UNIFIED IDEOGRAPH + {0xF47A, 0x7923}, //12620 #CJK UNIFIED IDEOGRAPH + {0xF47B, 0x7927}, //12621 #CJK UNIFIED IDEOGRAPH + {0xF47C, 0x7928}, //12622 #CJK UNIFIED IDEOGRAPH + {0xF47D, 0x7924}, //12623 #CJK UNIFIED IDEOGRAPH + {0xF47E, 0x7929}, //12624 #CJK UNIFIED IDEOGRAPH + {0xF4A1, 0x79B2}, //12625 #CJK UNIFIED IDEOGRAPH + {0xF4A2, 0x7A6E}, //12626 #CJK UNIFIED IDEOGRAPH + {0xF4A3, 0x7A6C}, //12627 #CJK UNIFIED IDEOGRAPH + {0xF4A4, 0x7A6D}, //12628 #CJK UNIFIED IDEOGRAPH + {0xF4A5, 0x7AF7}, //12629 #CJK UNIFIED IDEOGRAPH + {0xF4A6, 0x7C49}, //12630 #CJK UNIFIED IDEOGRAPH + {0xF4A7, 0x7C48}, //12631 #CJK UNIFIED IDEOGRAPH + {0xF4A8, 0x7C4A}, //12632 #CJK UNIFIED IDEOGRAPH + {0xF4A9, 0x7C47}, //12633 #CJK UNIFIED IDEOGRAPH + {0xF4AA, 0x7C45}, //12634 #CJK UNIFIED IDEOGRAPH + {0xF4AB, 0x7CEE}, //12635 #CJK UNIFIED IDEOGRAPH + {0xF4AC, 0x7E7B}, //12636 #CJK UNIFIED IDEOGRAPH + {0xF4AD, 0x7E7E}, //12637 #CJK UNIFIED IDEOGRAPH + {0xF4AE, 0x7E81}, //12638 #CJK UNIFIED IDEOGRAPH + {0xF4AF, 0x7E80}, //12639 #CJK UNIFIED IDEOGRAPH + {0xF4B0, 0x7FBA}, //12640 #CJK UNIFIED IDEOGRAPH + {0xF4B1, 0x7FFF}, //12641 #CJK UNIFIED IDEOGRAPH + {0xF4B2, 0x8079}, //12642 #CJK UNIFIED IDEOGRAPH + {0xF4B3, 0x81DB}, //12643 #CJK UNIFIED IDEOGRAPH + {0xF4B4, 0x81D9}, //12644 #CJK UNIFIED IDEOGRAPH + {0xF4B5, 0x820B}, //12645 #CJK UNIFIED IDEOGRAPH + {0xF4B6, 0x8268}, //12646 #CJK UNIFIED IDEOGRAPH + {0xF4B7, 0x8269}, //12647 #CJK UNIFIED IDEOGRAPH + {0xF4B8, 0x8622}, //12648 #CJK UNIFIED IDEOGRAPH + {0xF4B9, 0x85FF}, //12649 #CJK UNIFIED IDEOGRAPH + {0xF4BA, 0x8601}, //12650 #CJK UNIFIED IDEOGRAPH + {0xF4BB, 0x85FE}, //12651 #CJK UNIFIED IDEOGRAPH + {0xF4BC, 0x861B}, //12652 #CJK UNIFIED IDEOGRAPH + {0xF4BD, 0x8600}, //12653 #CJK UNIFIED IDEOGRAPH + {0xF4BE, 0x85F6}, //12654 #CJK UNIFIED IDEOGRAPH + {0xF4BF, 0x8604}, //12655 #CJK UNIFIED IDEOGRAPH + {0xF4C0, 0x8609}, //12656 #CJK UNIFIED IDEOGRAPH + {0xF4C1, 0x8605}, //12657 #CJK UNIFIED IDEOGRAPH + {0xF4C2, 0x860C}, //12658 #CJK UNIFIED IDEOGRAPH + {0xF4C3, 0x85FD}, //12659 #CJK UNIFIED IDEOGRAPH + {0xF4C4, 0x8819}, //12660 #CJK UNIFIED IDEOGRAPH + {0xF4C5, 0x8810}, //12661 #CJK UNIFIED IDEOGRAPH + {0xF4C6, 0x8811}, //12662 #CJK UNIFIED IDEOGRAPH + {0xF4C7, 0x8817}, //12663 #CJK UNIFIED IDEOGRAPH + {0xF4C8, 0x8813}, //12664 #CJK UNIFIED IDEOGRAPH + {0xF4C9, 0x8816}, //12665 #CJK UNIFIED IDEOGRAPH + {0xF4CA, 0x8963}, //12666 #CJK UNIFIED IDEOGRAPH + {0xF4CB, 0x8966}, //12667 #CJK UNIFIED IDEOGRAPH + {0xF4CC, 0x89B9}, //12668 #CJK UNIFIED IDEOGRAPH + {0xF4CD, 0x89F7}, //12669 #CJK UNIFIED IDEOGRAPH + {0xF4CE, 0x8B60}, //12670 #CJK UNIFIED IDEOGRAPH + {0xF4CF, 0x8B6A}, //12671 #CJK UNIFIED IDEOGRAPH + {0xF4D0, 0x8B5D}, //12672 #CJK UNIFIED IDEOGRAPH + {0xF4D1, 0x8B68}, //12673 #CJK UNIFIED IDEOGRAPH + {0xF4D2, 0x8B63}, //12674 #CJK UNIFIED IDEOGRAPH + {0xF4D3, 0x8B65}, //12675 #CJK UNIFIED IDEOGRAPH + {0xF4D4, 0x8B67}, //12676 #CJK UNIFIED IDEOGRAPH + {0xF4D5, 0x8B6D}, //12677 #CJK UNIFIED IDEOGRAPH + {0xF4D6, 0x8DAE}, //12678 #CJK UNIFIED IDEOGRAPH + {0xF4D7, 0x8E86}, //12679 #CJK UNIFIED IDEOGRAPH + {0xF4D8, 0x8E88}, //12680 #CJK UNIFIED IDEOGRAPH + {0xF4D9, 0x8E84}, //12681 #CJK UNIFIED IDEOGRAPH + {0xF4DA, 0x8F59}, //12682 #CJK UNIFIED IDEOGRAPH + {0xF4DB, 0x8F56}, //12683 #CJK UNIFIED IDEOGRAPH + {0xF4DC, 0x8F57}, //12684 #CJK UNIFIED IDEOGRAPH + {0xF4DD, 0x8F55}, //12685 #CJK UNIFIED IDEOGRAPH + {0xF4DE, 0x8F58}, //12686 #CJK UNIFIED IDEOGRAPH + {0xF4DF, 0x8F5A}, //12687 #CJK UNIFIED IDEOGRAPH + {0xF4E0, 0x908D}, //12688 #CJK UNIFIED IDEOGRAPH + {0xF4E1, 0x9143}, //12689 #CJK UNIFIED IDEOGRAPH + {0xF4E2, 0x9141}, //12690 #CJK UNIFIED IDEOGRAPH + {0xF4E3, 0x91B7}, //12691 #CJK UNIFIED IDEOGRAPH + {0xF4E4, 0x91B5}, //12692 #CJK UNIFIED IDEOGRAPH + {0xF4E5, 0x91B2}, //12693 #CJK UNIFIED IDEOGRAPH + {0xF4E6, 0x91B3}, //12694 #CJK UNIFIED IDEOGRAPH + {0xF4E7, 0x940B}, //12695 #CJK UNIFIED IDEOGRAPH + {0xF4E8, 0x9413}, //12696 #CJK UNIFIED IDEOGRAPH + {0xF4E9, 0x93FB}, //12697 #CJK UNIFIED IDEOGRAPH + {0xF4EA, 0x9420}, //12698 #CJK UNIFIED IDEOGRAPH + {0xF4EB, 0x940F}, //12699 #CJK UNIFIED IDEOGRAPH + {0xF4EC, 0x9414}, //12700 #CJK UNIFIED IDEOGRAPH + {0xF4ED, 0x93FE}, //12701 #CJK UNIFIED IDEOGRAPH + {0xF4EE, 0x9415}, //12702 #CJK UNIFIED IDEOGRAPH + {0xF4EF, 0x9410}, //12703 #CJK UNIFIED IDEOGRAPH + {0xF4F0, 0x9428}, //12704 #CJK UNIFIED IDEOGRAPH + {0xF4F1, 0x9419}, //12705 #CJK UNIFIED IDEOGRAPH + {0xF4F2, 0x940D}, //12706 #CJK UNIFIED IDEOGRAPH + {0xF4F3, 0x93F5}, //12707 #CJK UNIFIED IDEOGRAPH + {0xF4F4, 0x9400}, //12708 #CJK UNIFIED IDEOGRAPH + {0xF4F5, 0x93F7}, //12709 #CJK UNIFIED IDEOGRAPH + {0xF4F6, 0x9407}, //12710 #CJK UNIFIED IDEOGRAPH + {0xF4F7, 0x940E}, //12711 #CJK UNIFIED IDEOGRAPH + {0xF4F8, 0x9416}, //12712 #CJK UNIFIED IDEOGRAPH + {0xF4F9, 0x9412}, //12713 #CJK UNIFIED IDEOGRAPH + {0xF4FA, 0x93FA}, //12714 #CJK UNIFIED IDEOGRAPH + {0xF4FB, 0x9409}, //12715 #CJK UNIFIED IDEOGRAPH + {0xF4FC, 0x93F8}, //12716 #CJK UNIFIED IDEOGRAPH + {0xF4FD, 0x940A}, //12717 #CJK UNIFIED IDEOGRAPH + {0xF4FE, 0x93FF}, //12718 #CJK UNIFIED IDEOGRAPH + {0xF540, 0x93FC}, //12719 #CJK UNIFIED IDEOGRAPH + {0xF541, 0x940C}, //12720 #CJK UNIFIED IDEOGRAPH + {0xF542, 0x93F6}, //12721 #CJK UNIFIED IDEOGRAPH + {0xF543, 0x9411}, //12722 #CJK UNIFIED IDEOGRAPH + {0xF544, 0x9406}, //12723 #CJK UNIFIED IDEOGRAPH + {0xF545, 0x95DE}, //12724 #CJK UNIFIED IDEOGRAPH + {0xF546, 0x95E0}, //12725 #CJK UNIFIED IDEOGRAPH + {0xF547, 0x95DF}, //12726 #CJK UNIFIED IDEOGRAPH + {0xF548, 0x972E}, //12727 #CJK UNIFIED IDEOGRAPH + {0xF549, 0x972F}, //12728 #CJK UNIFIED IDEOGRAPH + {0xF54A, 0x97B9}, //12729 #CJK UNIFIED IDEOGRAPH + {0xF54B, 0x97BB}, //12730 #CJK UNIFIED IDEOGRAPH + {0xF54C, 0x97FD}, //12731 #CJK UNIFIED IDEOGRAPH + {0xF54D, 0x97FE}, //12732 #CJK UNIFIED IDEOGRAPH + {0xF54E, 0x9860}, //12733 #CJK UNIFIED IDEOGRAPH + {0xF54F, 0x9862}, //12734 #CJK UNIFIED IDEOGRAPH + {0xF550, 0x9863}, //12735 #CJK UNIFIED IDEOGRAPH + {0xF551, 0x985F}, //12736 #CJK UNIFIED IDEOGRAPH + {0xF552, 0x98C1}, //12737 #CJK UNIFIED IDEOGRAPH + {0xF553, 0x98C2}, //12738 #CJK UNIFIED IDEOGRAPH + {0xF554, 0x9950}, //12739 #CJK UNIFIED IDEOGRAPH + {0xF555, 0x994E}, //12740 #CJK UNIFIED IDEOGRAPH + {0xF556, 0x9959}, //12741 #CJK UNIFIED IDEOGRAPH + {0xF557, 0x994C}, //12742 #CJK UNIFIED IDEOGRAPH + {0xF558, 0x994B}, //12743 #CJK UNIFIED IDEOGRAPH + {0xF559, 0x9953}, //12744 #CJK UNIFIED IDEOGRAPH + {0xF55A, 0x9A32}, //12745 #CJK UNIFIED IDEOGRAPH + {0xF55B, 0x9A34}, //12746 #CJK UNIFIED IDEOGRAPH + {0xF55C, 0x9A31}, //12747 #CJK UNIFIED IDEOGRAPH + {0xF55D, 0x9A2C}, //12748 #CJK UNIFIED IDEOGRAPH + {0xF55E, 0x9A2A}, //12749 #CJK UNIFIED IDEOGRAPH + {0xF55F, 0x9A36}, //12750 #CJK UNIFIED IDEOGRAPH + {0xF560, 0x9A29}, //12751 #CJK UNIFIED IDEOGRAPH + {0xF561, 0x9A2E}, //12752 #CJK UNIFIED IDEOGRAPH + {0xF562, 0x9A38}, //12753 #CJK UNIFIED IDEOGRAPH + {0xF563, 0x9A2D}, //12754 #CJK UNIFIED IDEOGRAPH + {0xF564, 0x9AC7}, //12755 #CJK UNIFIED IDEOGRAPH + {0xF565, 0x9ACA}, //12756 #CJK UNIFIED IDEOGRAPH + {0xF566, 0x9AC6}, //12757 #CJK UNIFIED IDEOGRAPH + {0xF567, 0x9B10}, //12758 #CJK UNIFIED IDEOGRAPH + {0xF568, 0x9B12}, //12759 #CJK UNIFIED IDEOGRAPH + {0xF569, 0x9B11}, //12760 #CJK UNIFIED IDEOGRAPH + {0xF56A, 0x9C0B}, //12761 #CJK UNIFIED IDEOGRAPH + {0xF56B, 0x9C08}, //12762 #CJK UNIFIED IDEOGRAPH + {0xF56C, 0x9BF7}, //12763 #CJK UNIFIED IDEOGRAPH + {0xF56D, 0x9C05}, //12764 #CJK UNIFIED IDEOGRAPH + {0xF56E, 0x9C12}, //12765 #CJK UNIFIED IDEOGRAPH + {0xF56F, 0x9BF8}, //12766 #CJK UNIFIED IDEOGRAPH + {0xF570, 0x9C40}, //12767 #CJK UNIFIED IDEOGRAPH + {0xF571, 0x9C07}, //12768 #CJK UNIFIED IDEOGRAPH + {0xF572, 0x9C0E}, //12769 #CJK UNIFIED IDEOGRAPH + {0xF573, 0x9C06}, //12770 #CJK UNIFIED IDEOGRAPH + {0xF574, 0x9C17}, //12771 #CJK UNIFIED IDEOGRAPH + {0xF575, 0x9C14}, //12772 #CJK UNIFIED IDEOGRAPH + {0xF576, 0x9C09}, //12773 #CJK UNIFIED IDEOGRAPH + {0xF577, 0x9D9F}, //12774 #CJK UNIFIED IDEOGRAPH + {0xF578, 0x9D99}, //12775 #CJK UNIFIED IDEOGRAPH + {0xF579, 0x9DA4}, //12776 #CJK UNIFIED IDEOGRAPH + {0xF57A, 0x9D9D}, //12777 #CJK UNIFIED IDEOGRAPH + {0xF57B, 0x9D92}, //12778 #CJK UNIFIED IDEOGRAPH + {0xF57C, 0x9D98}, //12779 #CJK UNIFIED IDEOGRAPH + {0xF57D, 0x9D90}, //12780 #CJK UNIFIED IDEOGRAPH + {0xF57E, 0x9D9B}, //12781 #CJK UNIFIED IDEOGRAPH + {0xF5A1, 0x9DA0}, //12782 #CJK UNIFIED IDEOGRAPH + {0xF5A2, 0x9D94}, //12783 #CJK UNIFIED IDEOGRAPH + {0xF5A3, 0x9D9C}, //12784 #CJK UNIFIED IDEOGRAPH + {0xF5A4, 0x9DAA}, //12785 #CJK UNIFIED IDEOGRAPH + {0xF5A5, 0x9D97}, //12786 #CJK UNIFIED IDEOGRAPH + {0xF5A6, 0x9DA1}, //12787 #CJK UNIFIED IDEOGRAPH + {0xF5A7, 0x9D9A}, //12788 #CJK UNIFIED IDEOGRAPH + {0xF5A8, 0x9DA2}, //12789 #CJK UNIFIED IDEOGRAPH + {0xF5A9, 0x9DA8}, //12790 #CJK UNIFIED IDEOGRAPH + {0xF5AA, 0x9D9E}, //12791 #CJK UNIFIED IDEOGRAPH + {0xF5AB, 0x9DA3}, //12792 #CJK UNIFIED IDEOGRAPH + {0xF5AC, 0x9DBF}, //12793 #CJK UNIFIED IDEOGRAPH + {0xF5AD, 0x9DA9}, //12794 #CJK UNIFIED IDEOGRAPH + {0xF5AE, 0x9D96}, //12795 #CJK UNIFIED IDEOGRAPH + {0xF5AF, 0x9DA6}, //12796 #CJK UNIFIED IDEOGRAPH + {0xF5B0, 0x9DA7}, //12797 #CJK UNIFIED IDEOGRAPH + {0xF5B1, 0x9E99}, //12798 #CJK UNIFIED IDEOGRAPH + {0xF5B2, 0x9E9B}, //12799 #CJK UNIFIED IDEOGRAPH + {0xF5B3, 0x9E9A}, //12800 #CJK UNIFIED IDEOGRAPH + {0xF5B4, 0x9EE5}, //12801 #CJK UNIFIED IDEOGRAPH + {0xF5B5, 0x9EE4}, //12802 #CJK UNIFIED IDEOGRAPH + {0xF5B6, 0x9EE7}, //12803 #CJK UNIFIED IDEOGRAPH + {0xF5B7, 0x9EE6}, //12804 #CJK UNIFIED IDEOGRAPH + {0xF5B8, 0x9F30}, //12805 #CJK UNIFIED IDEOGRAPH + {0xF5B9, 0x9F2E}, //12806 #CJK UNIFIED IDEOGRAPH + {0xF5BA, 0x9F5B}, //12807 #CJK UNIFIED IDEOGRAPH + {0xF5BB, 0x9F60}, //12808 #CJK UNIFIED IDEOGRAPH + {0xF5BC, 0x9F5E}, //12809 #CJK UNIFIED IDEOGRAPH + {0xF5BD, 0x9F5D}, //12810 #CJK UNIFIED IDEOGRAPH + {0xF5BE, 0x9F59}, //12811 #CJK UNIFIED IDEOGRAPH + {0xF5BF, 0x9F91}, //12812 #CJK UNIFIED IDEOGRAPH + {0xF5C0, 0x513A}, //12813 #CJK UNIFIED IDEOGRAPH + {0xF5C1, 0x5139}, //12814 #CJK UNIFIED IDEOGRAPH + {0xF5C2, 0x5298}, //12815 #CJK UNIFIED IDEOGRAPH + {0xF5C3, 0x5297}, //12816 #CJK UNIFIED IDEOGRAPH + {0xF5C4, 0x56C3}, //12817 #CJK UNIFIED IDEOGRAPH + {0xF5C5, 0x56BD}, //12818 #CJK UNIFIED IDEOGRAPH + {0xF5C6, 0x56BE}, //12819 #CJK UNIFIED IDEOGRAPH + {0xF5C7, 0x5B48}, //12820 #CJK UNIFIED IDEOGRAPH + {0xF5C8, 0x5B47}, //12821 #CJK UNIFIED IDEOGRAPH + {0xF5C9, 0x5DCB}, //12822 #CJK UNIFIED IDEOGRAPH + {0xF5CA, 0x5DCF}, //12823 #CJK UNIFIED IDEOGRAPH + {0xF5CB, 0x5EF1}, //12824 #CJK UNIFIED IDEOGRAPH + {0xF5CC, 0x61FD}, //12825 #CJK UNIFIED IDEOGRAPH + {0xF5CD, 0x651B}, //12826 #CJK UNIFIED IDEOGRAPH + {0xF5CE, 0x6B02}, //12827 #CJK UNIFIED IDEOGRAPH + {0xF5CF, 0x6AFC}, //12828 #CJK UNIFIED IDEOGRAPH + {0xF5D0, 0x6B03}, //12829 #CJK UNIFIED IDEOGRAPH + {0xF5D1, 0x6AF8}, //12830 #CJK UNIFIED IDEOGRAPH + {0xF5D2, 0x6B00}, //12831 #CJK UNIFIED IDEOGRAPH + {0xF5D3, 0x7043}, //12832 #CJK UNIFIED IDEOGRAPH + {0xF5D4, 0x7044}, //12833 #CJK UNIFIED IDEOGRAPH + {0xF5D5, 0x704A}, //12834 #CJK UNIFIED IDEOGRAPH + {0xF5D6, 0x7048}, //12835 #CJK UNIFIED IDEOGRAPH + {0xF5D7, 0x7049}, //12836 #CJK UNIFIED IDEOGRAPH + {0xF5D8, 0x7045}, //12837 #CJK UNIFIED IDEOGRAPH + {0xF5D9, 0x7046}, //12838 #CJK UNIFIED IDEOGRAPH + {0xF5DA, 0x721D}, //12839 #CJK UNIFIED IDEOGRAPH + {0xF5DB, 0x721A}, //12840 #CJK UNIFIED IDEOGRAPH + {0xF5DC, 0x7219}, //12841 #CJK UNIFIED IDEOGRAPH + {0xF5DD, 0x737E}, //12842 #CJK UNIFIED IDEOGRAPH + {0xF5DE, 0x7517}, //12843 #CJK UNIFIED IDEOGRAPH + {0xF5DF, 0x766A}, //12844 #CJK UNIFIED IDEOGRAPH + {0xF5E0, 0x77D0}, //12845 #CJK UNIFIED IDEOGRAPH + {0xF5E1, 0x792D}, //12846 #CJK UNIFIED IDEOGRAPH + {0xF5E2, 0x7931}, //12847 #CJK UNIFIED IDEOGRAPH + {0xF5E3, 0x792F}, //12848 #CJK UNIFIED IDEOGRAPH + {0xF5E4, 0x7C54}, //12849 #CJK UNIFIED IDEOGRAPH + {0xF5E5, 0x7C53}, //12850 #CJK UNIFIED IDEOGRAPH + {0xF5E6, 0x7CF2}, //12851 #CJK UNIFIED IDEOGRAPH + {0xF5E7, 0x7E8A}, //12852 #CJK UNIFIED IDEOGRAPH + {0xF5E8, 0x7E87}, //12853 #CJK UNIFIED IDEOGRAPH + {0xF5E9, 0x7E88}, //12854 #CJK UNIFIED IDEOGRAPH + {0xF5EA, 0x7E8B}, //12855 #CJK UNIFIED IDEOGRAPH + {0xF5EB, 0x7E86}, //12856 #CJK UNIFIED IDEOGRAPH + {0xF5EC, 0x7E8D}, //12857 #CJK UNIFIED IDEOGRAPH + {0xF5ED, 0x7F4D}, //12858 #CJK UNIFIED IDEOGRAPH + {0xF5EE, 0x7FBB}, //12859 #CJK UNIFIED IDEOGRAPH + {0xF5EF, 0x8030}, //12860 #CJK UNIFIED IDEOGRAPH + {0xF5F0, 0x81DD}, //12861 #CJK UNIFIED IDEOGRAPH + {0xF5F1, 0x8618}, //12862 #CJK UNIFIED IDEOGRAPH + {0xF5F2, 0x862A}, //12863 #CJK UNIFIED IDEOGRAPH + {0xF5F3, 0x8626}, //12864 #CJK UNIFIED IDEOGRAPH + {0xF5F4, 0x861F}, //12865 #CJK UNIFIED IDEOGRAPH + {0xF5F5, 0x8623}, //12866 #CJK UNIFIED IDEOGRAPH + {0xF5F6, 0x861C}, //12867 #CJK UNIFIED IDEOGRAPH + {0xF5F7, 0x8619}, //12868 #CJK UNIFIED IDEOGRAPH + {0xF5F8, 0x8627}, //12869 #CJK UNIFIED IDEOGRAPH + {0xF5F9, 0x862E}, //12870 #CJK UNIFIED IDEOGRAPH + {0xF5FA, 0x8621}, //12871 #CJK UNIFIED IDEOGRAPH + {0xF5FB, 0x8620}, //12872 #CJK UNIFIED IDEOGRAPH + {0xF5FC, 0x8629}, //12873 #CJK UNIFIED IDEOGRAPH + {0xF5FD, 0x861E}, //12874 #CJK UNIFIED IDEOGRAPH + {0xF5FE, 0x8625}, //12875 #CJK UNIFIED IDEOGRAPH + {0xF640, 0x8829}, //12876 #CJK UNIFIED IDEOGRAPH + {0xF641, 0x881D}, //12877 #CJK UNIFIED IDEOGRAPH + {0xF642, 0x881B}, //12878 #CJK UNIFIED IDEOGRAPH + {0xF643, 0x8820}, //12879 #CJK UNIFIED IDEOGRAPH + {0xF644, 0x8824}, //12880 #CJK UNIFIED IDEOGRAPH + {0xF645, 0x881C}, //12881 #CJK UNIFIED IDEOGRAPH + {0xF646, 0x882B}, //12882 #CJK UNIFIED IDEOGRAPH + {0xF647, 0x884A}, //12883 #CJK UNIFIED IDEOGRAPH + {0xF648, 0x896D}, //12884 #CJK UNIFIED IDEOGRAPH + {0xF649, 0x8969}, //12885 #CJK UNIFIED IDEOGRAPH + {0xF64A, 0x896E}, //12886 #CJK UNIFIED IDEOGRAPH + {0xF64B, 0x896B}, //12887 #CJK UNIFIED IDEOGRAPH + {0xF64C, 0x89FA}, //12888 #CJK UNIFIED IDEOGRAPH + {0xF64D, 0x8B79}, //12889 #CJK UNIFIED IDEOGRAPH + {0xF64E, 0x8B78}, //12890 #CJK UNIFIED IDEOGRAPH + {0xF64F, 0x8B45}, //12891 #CJK UNIFIED IDEOGRAPH + {0xF650, 0x8B7A}, //12892 #CJK UNIFIED IDEOGRAPH + {0xF651, 0x8B7B}, //12893 #CJK UNIFIED IDEOGRAPH + {0xF652, 0x8D10}, //12894 #CJK UNIFIED IDEOGRAPH + {0xF653, 0x8D14}, //12895 #CJK UNIFIED IDEOGRAPH + {0xF654, 0x8DAF}, //12896 #CJK UNIFIED IDEOGRAPH + {0xF655, 0x8E8E}, //12897 #CJK UNIFIED IDEOGRAPH + {0xF656, 0x8E8C}, //12898 #CJK UNIFIED IDEOGRAPH + {0xF657, 0x8F5E}, //12899 #CJK UNIFIED IDEOGRAPH + {0xF658, 0x8F5B}, //12900 #CJK UNIFIED IDEOGRAPH + {0xF659, 0x8F5D}, //12901 #CJK UNIFIED IDEOGRAPH + {0xF65A, 0x9146}, //12902 #CJK UNIFIED IDEOGRAPH + {0xF65B, 0x9144}, //12903 #CJK UNIFIED IDEOGRAPH + {0xF65C, 0x9145}, //12904 #CJK UNIFIED IDEOGRAPH + {0xF65D, 0x91B9}, //12905 #CJK UNIFIED IDEOGRAPH + {0xF65E, 0x943F}, //12906 #CJK UNIFIED IDEOGRAPH + {0xF65F, 0x943B}, //12907 #CJK UNIFIED IDEOGRAPH + {0xF660, 0x9436}, //12908 #CJK UNIFIED IDEOGRAPH + {0xF661, 0x9429}, //12909 #CJK UNIFIED IDEOGRAPH + {0xF662, 0x943D}, //12910 #CJK UNIFIED IDEOGRAPH + {0xF663, 0x943C}, //12911 #CJK UNIFIED IDEOGRAPH + {0xF664, 0x9430}, //12912 #CJK UNIFIED IDEOGRAPH + {0xF665, 0x9439}, //12913 #CJK UNIFIED IDEOGRAPH + {0xF666, 0x942A}, //12914 #CJK UNIFIED IDEOGRAPH + {0xF667, 0x9437}, //12915 #CJK UNIFIED IDEOGRAPH + {0xF668, 0x942C}, //12916 #CJK UNIFIED IDEOGRAPH + {0xF669, 0x9440}, //12917 #CJK UNIFIED IDEOGRAPH + {0xF66A, 0x9431}, //12918 #CJK UNIFIED IDEOGRAPH + {0xF66B, 0x95E5}, //12919 #CJK UNIFIED IDEOGRAPH + {0xF66C, 0x95E4}, //12920 #CJK UNIFIED IDEOGRAPH + {0xF66D, 0x95E3}, //12921 #CJK UNIFIED IDEOGRAPH + {0xF66E, 0x9735}, //12922 #CJK UNIFIED IDEOGRAPH + {0xF66F, 0x973A}, //12923 #CJK UNIFIED IDEOGRAPH + {0xF670, 0x97BF}, //12924 #CJK UNIFIED IDEOGRAPH + {0xF671, 0x97E1}, //12925 #CJK UNIFIED IDEOGRAPH + {0xF672, 0x9864}, //12926 #CJK UNIFIED IDEOGRAPH + {0xF673, 0x98C9}, //12927 #CJK UNIFIED IDEOGRAPH + {0xF674, 0x98C6}, //12928 #CJK UNIFIED IDEOGRAPH + {0xF675, 0x98C0}, //12929 #CJK UNIFIED IDEOGRAPH + {0xF676, 0x9958}, //12930 #CJK UNIFIED IDEOGRAPH + {0xF677, 0x9956}, //12931 #CJK UNIFIED IDEOGRAPH + {0xF678, 0x9A39}, //12932 #CJK UNIFIED IDEOGRAPH + {0xF679, 0x9A3D}, //12933 #CJK UNIFIED IDEOGRAPH + {0xF67A, 0x9A46}, //12934 #CJK UNIFIED IDEOGRAPH + {0xF67B, 0x9A44}, //12935 #CJK UNIFIED IDEOGRAPH + {0xF67C, 0x9A42}, //12936 #CJK UNIFIED IDEOGRAPH + {0xF67D, 0x9A41}, //12937 #CJK UNIFIED IDEOGRAPH + {0xF67E, 0x9A3A}, //12938 #CJK UNIFIED IDEOGRAPH + {0xF6A1, 0x9A3F}, //12939 #CJK UNIFIED IDEOGRAPH + {0xF6A2, 0x9ACD}, //12940 #CJK UNIFIED IDEOGRAPH + {0xF6A3, 0x9B15}, //12941 #CJK UNIFIED IDEOGRAPH + {0xF6A4, 0x9B17}, //12942 #CJK UNIFIED IDEOGRAPH + {0xF6A5, 0x9B18}, //12943 #CJK UNIFIED IDEOGRAPH + {0xF6A6, 0x9B16}, //12944 #CJK UNIFIED IDEOGRAPH + {0xF6A7, 0x9B3A}, //12945 #CJK UNIFIED IDEOGRAPH + {0xF6A8, 0x9B52}, //12946 #CJK UNIFIED IDEOGRAPH + {0xF6A9, 0x9C2B}, //12947 #CJK UNIFIED IDEOGRAPH + {0xF6AA, 0x9C1D}, //12948 #CJK UNIFIED IDEOGRAPH + {0xF6AB, 0x9C1C}, //12949 #CJK UNIFIED IDEOGRAPH + {0xF6AC, 0x9C2C}, //12950 #CJK UNIFIED IDEOGRAPH + {0xF6AD, 0x9C23}, //12951 #CJK UNIFIED IDEOGRAPH + {0xF6AE, 0x9C28}, //12952 #CJK UNIFIED IDEOGRAPH + {0xF6AF, 0x9C29}, //12953 #CJK UNIFIED IDEOGRAPH + {0xF6B0, 0x9C24}, //12954 #CJK UNIFIED IDEOGRAPH + {0xF6B1, 0x9C21}, //12955 #CJK UNIFIED IDEOGRAPH + {0xF6B2, 0x9DB7}, //12956 #CJK UNIFIED IDEOGRAPH + {0xF6B3, 0x9DB6}, //12957 #CJK UNIFIED IDEOGRAPH + {0xF6B4, 0x9DBC}, //12958 #CJK UNIFIED IDEOGRAPH + {0xF6B5, 0x9DC1}, //12959 #CJK UNIFIED IDEOGRAPH + {0xF6B6, 0x9DC7}, //12960 #CJK UNIFIED IDEOGRAPH + {0xF6B7, 0x9DCA}, //12961 #CJK UNIFIED IDEOGRAPH + {0xF6B8, 0x9DCF}, //12962 #CJK UNIFIED IDEOGRAPH + {0xF6B9, 0x9DBE}, //12963 #CJK UNIFIED IDEOGRAPH + {0xF6BA, 0x9DC5}, //12964 #CJK UNIFIED IDEOGRAPH + {0xF6BB, 0x9DC3}, //12965 #CJK UNIFIED IDEOGRAPH + {0xF6BC, 0x9DBB}, //12966 #CJK UNIFIED IDEOGRAPH + {0xF6BD, 0x9DB5}, //12967 #CJK UNIFIED IDEOGRAPH + {0xF6BE, 0x9DCE}, //12968 #CJK UNIFIED IDEOGRAPH + {0xF6BF, 0x9DB9}, //12969 #CJK UNIFIED IDEOGRAPH + {0xF6C0, 0x9DBA}, //12970 #CJK UNIFIED IDEOGRAPH + {0xF6C1, 0x9DAC}, //12971 #CJK UNIFIED IDEOGRAPH + {0xF6C2, 0x9DC8}, //12972 #CJK UNIFIED IDEOGRAPH + {0xF6C3, 0x9DB1}, //12973 #CJK UNIFIED IDEOGRAPH + {0xF6C4, 0x9DAD}, //12974 #CJK UNIFIED IDEOGRAPH + {0xF6C5, 0x9DCC}, //12975 #CJK UNIFIED IDEOGRAPH + {0xF6C6, 0x9DB3}, //12976 #CJK UNIFIED IDEOGRAPH + {0xF6C7, 0x9DCD}, //12977 #CJK UNIFIED IDEOGRAPH + {0xF6C8, 0x9DB2}, //12978 #CJK UNIFIED IDEOGRAPH + {0xF6C9, 0x9E7A}, //12979 #CJK UNIFIED IDEOGRAPH + {0xF6CA, 0x9E9C}, //12980 #CJK UNIFIED IDEOGRAPH + {0xF6CB, 0x9EEB}, //12981 #CJK UNIFIED IDEOGRAPH + {0xF6CC, 0x9EEE}, //12982 #CJK UNIFIED IDEOGRAPH + {0xF6CD, 0x9EED}, //12983 #CJK UNIFIED IDEOGRAPH + {0xF6CE, 0x9F1B}, //12984 #CJK UNIFIED IDEOGRAPH + {0xF6CF, 0x9F18}, //12985 #CJK UNIFIED IDEOGRAPH + {0xF6D0, 0x9F1A}, //12986 #CJK UNIFIED IDEOGRAPH + {0xF6D1, 0x9F31}, //12987 #CJK UNIFIED IDEOGRAPH + {0xF6D2, 0x9F4E}, //12988 #CJK UNIFIED IDEOGRAPH + {0xF6D3, 0x9F65}, //12989 #CJK UNIFIED IDEOGRAPH + {0xF6D4, 0x9F64}, //12990 #CJK UNIFIED IDEOGRAPH + {0xF6D5, 0x9F92}, //12991 #CJK UNIFIED IDEOGRAPH + {0xF6D6, 0x4EB9}, //12992 #CJK UNIFIED IDEOGRAPH + {0xF6D7, 0x56C6}, //12993 #CJK UNIFIED IDEOGRAPH + {0xF6D8, 0x56C5}, //12994 #CJK UNIFIED IDEOGRAPH + {0xF6D9, 0x56CB}, //12995 #CJK UNIFIED IDEOGRAPH + {0xF6DA, 0x5971}, //12996 #CJK UNIFIED IDEOGRAPH + {0xF6DB, 0x5B4B}, //12997 #CJK UNIFIED IDEOGRAPH + {0xF6DC, 0x5B4C}, //12998 #CJK UNIFIED IDEOGRAPH + {0xF6DD, 0x5DD5}, //12999 #CJK UNIFIED IDEOGRAPH + {0xF6DE, 0x5DD1}, //13000 #CJK UNIFIED IDEOGRAPH + {0xF6DF, 0x5EF2}, //13001 #CJK UNIFIED IDEOGRAPH + {0xF6E0, 0x6521}, //13002 #CJK UNIFIED IDEOGRAPH + {0xF6E1, 0x6520}, //13003 #CJK UNIFIED IDEOGRAPH + {0xF6E2, 0x6526}, //13004 #CJK UNIFIED IDEOGRAPH + {0xF6E3, 0x6522}, //13005 #CJK UNIFIED IDEOGRAPH + {0xF6E4, 0x6B0B}, //13006 #CJK UNIFIED IDEOGRAPH + {0xF6E5, 0x6B08}, //13007 #CJK UNIFIED IDEOGRAPH + {0xF6E6, 0x6B09}, //13008 #CJK UNIFIED IDEOGRAPH + {0xF6E7, 0x6C0D}, //13009 #CJK UNIFIED IDEOGRAPH + {0xF6E8, 0x7055}, //13010 #CJK UNIFIED IDEOGRAPH + {0xF6E9, 0x7056}, //13011 #CJK UNIFIED IDEOGRAPH + {0xF6EA, 0x7057}, //13012 #CJK UNIFIED IDEOGRAPH + {0xF6EB, 0x7052}, //13013 #CJK UNIFIED IDEOGRAPH + {0xF6EC, 0x721E}, //13014 #CJK UNIFIED IDEOGRAPH + {0xF6ED, 0x721F}, //13015 #CJK UNIFIED IDEOGRAPH + {0xF6EE, 0x72A9}, //13016 #CJK UNIFIED IDEOGRAPH + {0xF6EF, 0x737F}, //13017 #CJK UNIFIED IDEOGRAPH + {0xF6F0, 0x74D8}, //13018 #CJK UNIFIED IDEOGRAPH + {0xF6F1, 0x74D5}, //13019 #CJK UNIFIED IDEOGRAPH + {0xF6F2, 0x74D9}, //13020 #CJK UNIFIED IDEOGRAPH + {0xF6F3, 0x74D7}, //13021 #CJK UNIFIED IDEOGRAPH + {0xF6F4, 0x766D}, //13022 #CJK UNIFIED IDEOGRAPH + {0xF6F5, 0x76AD}, //13023 #CJK UNIFIED IDEOGRAPH + {0xF6F6, 0x7935}, //13024 #CJK UNIFIED IDEOGRAPH + {0xF6F7, 0x79B4}, //13025 #CJK UNIFIED IDEOGRAPH + {0xF6F8, 0x7A70}, //13026 #CJK UNIFIED IDEOGRAPH + {0xF6F9, 0x7A71}, //13027 #CJK UNIFIED IDEOGRAPH + {0xF6FA, 0x7C57}, //13028 #CJK UNIFIED IDEOGRAPH + {0xF6FB, 0x7C5C}, //13029 #CJK UNIFIED IDEOGRAPH + {0xF6FC, 0x7C59}, //13030 #CJK UNIFIED IDEOGRAPH + {0xF6FD, 0x7C5B}, //13031 #CJK UNIFIED IDEOGRAPH + {0xF6FE, 0x7C5A}, //13032 #CJK UNIFIED IDEOGRAPH + {0xF740, 0x7CF4}, //13033 #CJK UNIFIED IDEOGRAPH + {0xF741, 0x7CF1}, //13034 #CJK UNIFIED IDEOGRAPH + {0xF742, 0x7E91}, //13035 #CJK UNIFIED IDEOGRAPH + {0xF743, 0x7F4F}, //13036 #CJK UNIFIED IDEOGRAPH + {0xF744, 0x7F87}, //13037 #CJK UNIFIED IDEOGRAPH + {0xF745, 0x81DE}, //13038 #CJK UNIFIED IDEOGRAPH + {0xF746, 0x826B}, //13039 #CJK UNIFIED IDEOGRAPH + {0xF747, 0x8634}, //13040 #CJK UNIFIED IDEOGRAPH + {0xF748, 0x8635}, //13041 #CJK UNIFIED IDEOGRAPH + {0xF749, 0x8633}, //13042 #CJK UNIFIED IDEOGRAPH + {0xF74A, 0x862C}, //13043 #CJK UNIFIED IDEOGRAPH + {0xF74B, 0x8632}, //13044 #CJK UNIFIED IDEOGRAPH + {0xF74C, 0x8636}, //13045 #CJK UNIFIED IDEOGRAPH + {0xF74D, 0x882C}, //13046 #CJK UNIFIED IDEOGRAPH + {0xF74E, 0x8828}, //13047 #CJK UNIFIED IDEOGRAPH + {0xF74F, 0x8826}, //13048 #CJK UNIFIED IDEOGRAPH + {0xF750, 0x882A}, //13049 #CJK UNIFIED IDEOGRAPH + {0xF751, 0x8825}, //13050 #CJK UNIFIED IDEOGRAPH + {0xF752, 0x8971}, //13051 #CJK UNIFIED IDEOGRAPH + {0xF753, 0x89BF}, //13052 #CJK UNIFIED IDEOGRAPH + {0xF754, 0x89BE}, //13053 #CJK UNIFIED IDEOGRAPH + {0xF755, 0x89FB}, //13054 #CJK UNIFIED IDEOGRAPH + {0xF756, 0x8B7E}, //13055 #CJK UNIFIED IDEOGRAPH + {0xF757, 0x8B84}, //13056 #CJK UNIFIED IDEOGRAPH + {0xF758, 0x8B82}, //13057 #CJK UNIFIED IDEOGRAPH + {0xF759, 0x8B86}, //13058 #CJK UNIFIED IDEOGRAPH + {0xF75A, 0x8B85}, //13059 #CJK UNIFIED IDEOGRAPH + {0xF75B, 0x8B7F}, //13060 #CJK UNIFIED IDEOGRAPH + {0xF75C, 0x8D15}, //13061 #CJK UNIFIED IDEOGRAPH + {0xF75D, 0x8E95}, //13062 #CJK UNIFIED IDEOGRAPH + {0xF75E, 0x8E94}, //13063 #CJK UNIFIED IDEOGRAPH + {0xF75F, 0x8E9A}, //13064 #CJK UNIFIED IDEOGRAPH + {0xF760, 0x8E92}, //13065 #CJK UNIFIED IDEOGRAPH + {0xF761, 0x8E90}, //13066 #CJK UNIFIED IDEOGRAPH + {0xF762, 0x8E96}, //13067 #CJK UNIFIED IDEOGRAPH + {0xF763, 0x8E97}, //13068 #CJK UNIFIED IDEOGRAPH + {0xF764, 0x8F60}, //13069 #CJK UNIFIED IDEOGRAPH + {0xF765, 0x8F62}, //13070 #CJK UNIFIED IDEOGRAPH + {0xF766, 0x9147}, //13071 #CJK UNIFIED IDEOGRAPH + {0xF767, 0x944C}, //13072 #CJK UNIFIED IDEOGRAPH + {0xF768, 0x9450}, //13073 #CJK UNIFIED IDEOGRAPH + {0xF769, 0x944A}, //13074 #CJK UNIFIED IDEOGRAPH + {0xF76A, 0x944B}, //13075 #CJK UNIFIED IDEOGRAPH + {0xF76B, 0x944F}, //13076 #CJK UNIFIED IDEOGRAPH + {0xF76C, 0x9447}, //13077 #CJK UNIFIED IDEOGRAPH + {0xF76D, 0x9445}, //13078 #CJK UNIFIED IDEOGRAPH + {0xF76E, 0x9448}, //13079 #CJK UNIFIED IDEOGRAPH + {0xF76F, 0x9449}, //13080 #CJK UNIFIED IDEOGRAPH + {0xF770, 0x9446}, //13081 #CJK UNIFIED IDEOGRAPH + {0xF771, 0x973F}, //13082 #CJK UNIFIED IDEOGRAPH + {0xF772, 0x97E3}, //13083 #CJK UNIFIED IDEOGRAPH + {0xF773, 0x986A}, //13084 #CJK UNIFIED IDEOGRAPH + {0xF774, 0x9869}, //13085 #CJK UNIFIED IDEOGRAPH + {0xF775, 0x98CB}, //13086 #CJK UNIFIED IDEOGRAPH + {0xF776, 0x9954}, //13087 #CJK UNIFIED IDEOGRAPH + {0xF777, 0x995B}, //13088 #CJK UNIFIED IDEOGRAPH + {0xF778, 0x9A4E}, //13089 #CJK UNIFIED IDEOGRAPH + {0xF779, 0x9A53}, //13090 #CJK UNIFIED IDEOGRAPH + {0xF77A, 0x9A54}, //13091 #CJK UNIFIED IDEOGRAPH + {0xF77B, 0x9A4C}, //13092 #CJK UNIFIED IDEOGRAPH + {0xF77C, 0x9A4F}, //13093 #CJK UNIFIED IDEOGRAPH + {0xF77D, 0x9A48}, //13094 #CJK UNIFIED IDEOGRAPH + {0xF77E, 0x9A4A}, //13095 #CJK UNIFIED IDEOGRAPH + {0xF7A1, 0x9A49}, //13096 #CJK UNIFIED IDEOGRAPH + {0xF7A2, 0x9A52}, //13097 #CJK UNIFIED IDEOGRAPH + {0xF7A3, 0x9A50}, //13098 #CJK UNIFIED IDEOGRAPH + {0xF7A4, 0x9AD0}, //13099 #CJK UNIFIED IDEOGRAPH + {0xF7A5, 0x9B19}, //13100 #CJK UNIFIED IDEOGRAPH + {0xF7A6, 0x9B2B}, //13101 #CJK UNIFIED IDEOGRAPH + {0xF7A7, 0x9B3B}, //13102 #CJK UNIFIED IDEOGRAPH + {0xF7A8, 0x9B56}, //13103 #CJK UNIFIED IDEOGRAPH + {0xF7A9, 0x9B55}, //13104 #CJK UNIFIED IDEOGRAPH + {0xF7AA, 0x9C46}, //13105 #CJK UNIFIED IDEOGRAPH + {0xF7AB, 0x9C48}, //13106 #CJK UNIFIED IDEOGRAPH + {0xF7AC, 0x9C3F}, //13107 #CJK UNIFIED IDEOGRAPH + {0xF7AD, 0x9C44}, //13108 #CJK UNIFIED IDEOGRAPH + {0xF7AE, 0x9C39}, //13109 #CJK UNIFIED IDEOGRAPH + {0xF7AF, 0x9C33}, //13110 #CJK UNIFIED IDEOGRAPH + {0xF7B0, 0x9C41}, //13111 #CJK UNIFIED IDEOGRAPH + {0xF7B1, 0x9C3C}, //13112 #CJK UNIFIED IDEOGRAPH + {0xF7B2, 0x9C37}, //13113 #CJK UNIFIED IDEOGRAPH + {0xF7B3, 0x9C34}, //13114 #CJK UNIFIED IDEOGRAPH + {0xF7B4, 0x9C32}, //13115 #CJK UNIFIED IDEOGRAPH + {0xF7B5, 0x9C3D}, //13116 #CJK UNIFIED IDEOGRAPH + {0xF7B6, 0x9C36}, //13117 #CJK UNIFIED IDEOGRAPH + {0xF7B7, 0x9DDB}, //13118 #CJK UNIFIED IDEOGRAPH + {0xF7B8, 0x9DD2}, //13119 #CJK UNIFIED IDEOGRAPH + {0xF7B9, 0x9DDE}, //13120 #CJK UNIFIED IDEOGRAPH + {0xF7BA, 0x9DDA}, //13121 #CJK UNIFIED IDEOGRAPH + {0xF7BB, 0x9DCB}, //13122 #CJK UNIFIED IDEOGRAPH + {0xF7BC, 0x9DD0}, //13123 #CJK UNIFIED IDEOGRAPH + {0xF7BD, 0x9DDC}, //13124 #CJK UNIFIED IDEOGRAPH + {0xF7BE, 0x9DD1}, //13125 #CJK UNIFIED IDEOGRAPH + {0xF7BF, 0x9DDF}, //13126 #CJK UNIFIED IDEOGRAPH + {0xF7C0, 0x9DE9}, //13127 #CJK UNIFIED IDEOGRAPH + {0xF7C1, 0x9DD9}, //13128 #CJK UNIFIED IDEOGRAPH + {0xF7C2, 0x9DD8}, //13129 #CJK UNIFIED IDEOGRAPH + {0xF7C3, 0x9DD6}, //13130 #CJK UNIFIED IDEOGRAPH + {0xF7C4, 0x9DF5}, //13131 #CJK UNIFIED IDEOGRAPH + {0xF7C5, 0x9DD5}, //13132 #CJK UNIFIED IDEOGRAPH + {0xF7C6, 0x9DDD}, //13133 #CJK UNIFIED IDEOGRAPH + {0xF7C7, 0x9EB6}, //13134 #CJK UNIFIED IDEOGRAPH + {0xF7C8, 0x9EF0}, //13135 #CJK UNIFIED IDEOGRAPH + {0xF7C9, 0x9F35}, //13136 #CJK UNIFIED IDEOGRAPH + {0xF7CA, 0x9F33}, //13137 #CJK UNIFIED IDEOGRAPH + {0xF7CB, 0x9F32}, //13138 #CJK UNIFIED IDEOGRAPH + {0xF7CC, 0x9F42}, //13139 #CJK UNIFIED IDEOGRAPH + {0xF7CD, 0x9F6B}, //13140 #CJK UNIFIED IDEOGRAPH + {0xF7CE, 0x9F95}, //13141 #CJK UNIFIED IDEOGRAPH + {0xF7CF, 0x9FA2}, //13142 #CJK UNIFIED IDEOGRAPH + {0xF7D0, 0x513D}, //13143 #CJK UNIFIED IDEOGRAPH + {0xF7D1, 0x5299}, //13144 #CJK UNIFIED IDEOGRAPH + {0xF7D2, 0x58E8}, //13145 #CJK UNIFIED IDEOGRAPH + {0xF7D3, 0x58E7}, //13146 #CJK UNIFIED IDEOGRAPH + {0xF7D4, 0x5972}, //13147 #CJK UNIFIED IDEOGRAPH + {0xF7D5, 0x5B4D}, //13148 #CJK UNIFIED IDEOGRAPH + {0xF7D6, 0x5DD8}, //13149 #CJK UNIFIED IDEOGRAPH + {0xF7D7, 0x882F}, //13150 #CJK UNIFIED IDEOGRAPH + {0xF7D8, 0x5F4F}, //13151 #CJK UNIFIED IDEOGRAPH + {0xF7D9, 0x6201}, //13152 #CJK UNIFIED IDEOGRAPH + {0xF7DA, 0x6203}, //13153 #CJK UNIFIED IDEOGRAPH + {0xF7DB, 0x6204}, //13154 #CJK UNIFIED IDEOGRAPH + {0xF7DC, 0x6529}, //13155 #CJK UNIFIED IDEOGRAPH + {0xF7DD, 0x6525}, //13156 #CJK UNIFIED IDEOGRAPH + {0xF7DE, 0x6596}, //13157 #CJK UNIFIED IDEOGRAPH + {0xF7DF, 0x66EB}, //13158 #CJK UNIFIED IDEOGRAPH + {0xF7E0, 0x6B11}, //13159 #CJK UNIFIED IDEOGRAPH + {0xF7E1, 0x6B12}, //13160 #CJK UNIFIED IDEOGRAPH + {0xF7E2, 0x6B0F}, //13161 #CJK UNIFIED IDEOGRAPH + {0xF7E3, 0x6BCA}, //13162 #CJK UNIFIED IDEOGRAPH + {0xF7E4, 0x705B}, //13163 #CJK UNIFIED IDEOGRAPH + {0xF7E5, 0x705A}, //13164 #CJK UNIFIED IDEOGRAPH + {0xF7E6, 0x7222}, //13165 #CJK UNIFIED IDEOGRAPH + {0xF7E7, 0x7382}, //13166 #CJK UNIFIED IDEOGRAPH + {0xF7E8, 0x7381}, //13167 #CJK UNIFIED IDEOGRAPH + {0xF7E9, 0x7383}, //13168 #CJK UNIFIED IDEOGRAPH + {0xF7EA, 0x7670}, //13169 #CJK UNIFIED IDEOGRAPH + {0xF7EB, 0x77D4}, //13170 #CJK UNIFIED IDEOGRAPH + {0xF7EC, 0x7C67}, //13171 #CJK UNIFIED IDEOGRAPH + {0xF7ED, 0x7C66}, //13172 #CJK UNIFIED IDEOGRAPH + {0xF7EE, 0x7E95}, //13173 #CJK UNIFIED IDEOGRAPH + {0xF7EF, 0x826C}, //13174 #CJK UNIFIED IDEOGRAPH + {0xF7F0, 0x863A}, //13175 #CJK UNIFIED IDEOGRAPH + {0xF7F1, 0x8640}, //13176 #CJK UNIFIED IDEOGRAPH + {0xF7F2, 0x8639}, //13177 #CJK UNIFIED IDEOGRAPH + {0xF7F3, 0x863C}, //13178 #CJK UNIFIED IDEOGRAPH + {0xF7F4, 0x8631}, //13179 #CJK UNIFIED IDEOGRAPH + {0xF7F5, 0x863B}, //13180 #CJK UNIFIED IDEOGRAPH + {0xF7F6, 0x863E}, //13181 #CJK UNIFIED IDEOGRAPH + {0xF7F7, 0x8830}, //13182 #CJK UNIFIED IDEOGRAPH + {0xF7F8, 0x8832}, //13183 #CJK UNIFIED IDEOGRAPH + {0xF7F9, 0x882E}, //13184 #CJK UNIFIED IDEOGRAPH + {0xF7FA, 0x8833}, //13185 #CJK UNIFIED IDEOGRAPH + {0xF7FB, 0x8976}, //13186 #CJK UNIFIED IDEOGRAPH + {0xF7FC, 0x8974}, //13187 #CJK UNIFIED IDEOGRAPH + {0xF7FD, 0x8973}, //13188 #CJK UNIFIED IDEOGRAPH + {0xF7FE, 0x89FE}, //13189 #CJK UNIFIED IDEOGRAPH + {0xF840, 0x8B8C}, //13190 #CJK UNIFIED IDEOGRAPH + {0xF841, 0x8B8E}, //13191 #CJK UNIFIED IDEOGRAPH + {0xF842, 0x8B8B}, //13192 #CJK UNIFIED IDEOGRAPH + {0xF843, 0x8B88}, //13193 #CJK UNIFIED IDEOGRAPH + {0xF844, 0x8C45}, //13194 #CJK UNIFIED IDEOGRAPH + {0xF845, 0x8D19}, //13195 #CJK UNIFIED IDEOGRAPH + {0xF846, 0x8E98}, //13196 #CJK UNIFIED IDEOGRAPH + {0xF847, 0x8F64}, //13197 #CJK UNIFIED IDEOGRAPH + {0xF848, 0x8F63}, //13198 #CJK UNIFIED IDEOGRAPH + {0xF849, 0x91BC}, //13199 #CJK UNIFIED IDEOGRAPH + {0xF84A, 0x9462}, //13200 #CJK UNIFIED IDEOGRAPH + {0xF84B, 0x9455}, //13201 #CJK UNIFIED IDEOGRAPH + {0xF84C, 0x945D}, //13202 #CJK UNIFIED IDEOGRAPH + {0xF84D, 0x9457}, //13203 #CJK UNIFIED IDEOGRAPH + {0xF84E, 0x945E}, //13204 #CJK UNIFIED IDEOGRAPH + {0xF84F, 0x97C4}, //13205 #CJK UNIFIED IDEOGRAPH + {0xF850, 0x97C5}, //13206 #CJK UNIFIED IDEOGRAPH + {0xF851, 0x9800}, //13207 #CJK UNIFIED IDEOGRAPH + {0xF852, 0x9A56}, //13208 #CJK UNIFIED IDEOGRAPH + {0xF853, 0x9A59}, //13209 #CJK UNIFIED IDEOGRAPH + {0xF854, 0x9B1E}, //13210 #CJK UNIFIED IDEOGRAPH + {0xF855, 0x9B1F}, //13211 #CJK UNIFIED IDEOGRAPH + {0xF856, 0x9B20}, //13212 #CJK UNIFIED IDEOGRAPH + {0xF857, 0x9C52}, //13213 #CJK UNIFIED IDEOGRAPH + {0xF858, 0x9C58}, //13214 #CJK UNIFIED IDEOGRAPH + {0xF859, 0x9C50}, //13215 #CJK UNIFIED IDEOGRAPH + {0xF85A, 0x9C4A}, //13216 #CJK UNIFIED IDEOGRAPH + {0xF85B, 0x9C4D}, //13217 #CJK UNIFIED IDEOGRAPH + {0xF85C, 0x9C4B}, //13218 #CJK UNIFIED IDEOGRAPH + {0xF85D, 0x9C55}, //13219 #CJK UNIFIED IDEOGRAPH + {0xF85E, 0x9C59}, //13220 #CJK UNIFIED IDEOGRAPH + {0xF85F, 0x9C4C}, //13221 #CJK UNIFIED IDEOGRAPH + {0xF860, 0x9C4E}, //13222 #CJK UNIFIED IDEOGRAPH + {0xF861, 0x9DFB}, //13223 #CJK UNIFIED IDEOGRAPH + {0xF862, 0x9DF7}, //13224 #CJK UNIFIED IDEOGRAPH + {0xF863, 0x9DEF}, //13225 #CJK UNIFIED IDEOGRAPH + {0xF864, 0x9DE3}, //13226 #CJK UNIFIED IDEOGRAPH + {0xF865, 0x9DEB}, //13227 #CJK UNIFIED IDEOGRAPH + {0xF866, 0x9DF8}, //13228 #CJK UNIFIED IDEOGRAPH + {0xF867, 0x9DE4}, //13229 #CJK UNIFIED IDEOGRAPH + {0xF868, 0x9DF6}, //13230 #CJK UNIFIED IDEOGRAPH + {0xF869, 0x9DE1}, //13231 #CJK UNIFIED IDEOGRAPH + {0xF86A, 0x9DEE}, //13232 #CJK UNIFIED IDEOGRAPH + {0xF86B, 0x9DE6}, //13233 #CJK UNIFIED IDEOGRAPH + {0xF86C, 0x9DF2}, //13234 #CJK UNIFIED IDEOGRAPH + {0xF86D, 0x9DF0}, //13235 #CJK UNIFIED IDEOGRAPH + {0xF86E, 0x9DE2}, //13236 #CJK UNIFIED IDEOGRAPH + {0xF86F, 0x9DEC}, //13237 #CJK UNIFIED IDEOGRAPH + {0xF870, 0x9DF4}, //13238 #CJK UNIFIED IDEOGRAPH + {0xF871, 0x9DF3}, //13239 #CJK UNIFIED IDEOGRAPH + {0xF872, 0x9DE8}, //13240 #CJK UNIFIED IDEOGRAPH + {0xF873, 0x9DED}, //13241 #CJK UNIFIED IDEOGRAPH + {0xF874, 0x9EC2}, //13242 #CJK UNIFIED IDEOGRAPH + {0xF875, 0x9ED0}, //13243 #CJK UNIFIED IDEOGRAPH + {0xF876, 0x9EF2}, //13244 #CJK UNIFIED IDEOGRAPH + {0xF877, 0x9EF3}, //13245 #CJK UNIFIED IDEOGRAPH + {0xF878, 0x9F06}, //13246 #CJK UNIFIED IDEOGRAPH + {0xF879, 0x9F1C}, //13247 #CJK UNIFIED IDEOGRAPH + {0xF87A, 0x9F38}, //13248 #CJK UNIFIED IDEOGRAPH + {0xF87B, 0x9F37}, //13249 #CJK UNIFIED IDEOGRAPH + {0xF87C, 0x9F36}, //13250 #CJK UNIFIED IDEOGRAPH + {0xF87D, 0x9F43}, //13251 #CJK UNIFIED IDEOGRAPH + {0xF87E, 0x9F4F}, //13252 #CJK UNIFIED IDEOGRAPH + {0xF8A1, 0x9F71}, //13253 #CJK UNIFIED IDEOGRAPH + {0xF8A2, 0x9F70}, //13254 #CJK UNIFIED IDEOGRAPH + {0xF8A3, 0x9F6E}, //13255 #CJK UNIFIED IDEOGRAPH + {0xF8A4, 0x9F6F}, //13256 #CJK UNIFIED IDEOGRAPH + {0xF8A5, 0x56D3}, //13257 #CJK UNIFIED IDEOGRAPH + {0xF8A6, 0x56CD}, //13258 #CJK UNIFIED IDEOGRAPH + {0xF8A7, 0x5B4E}, //13259 #CJK UNIFIED IDEOGRAPH + {0xF8A8, 0x5C6D}, //13260 #CJK UNIFIED IDEOGRAPH + {0xF8A9, 0x652D}, //13261 #CJK UNIFIED IDEOGRAPH + {0xF8AA, 0x66ED}, //13262 #CJK UNIFIED IDEOGRAPH + {0xF8AB, 0x66EE}, //13263 #CJK UNIFIED IDEOGRAPH + {0xF8AC, 0x6B13}, //13264 #CJK UNIFIED IDEOGRAPH + {0xF8AD, 0x705F}, //13265 #CJK UNIFIED IDEOGRAPH + {0xF8AE, 0x7061}, //13266 #CJK UNIFIED IDEOGRAPH + {0xF8AF, 0x705D}, //13267 #CJK UNIFIED IDEOGRAPH + {0xF8B0, 0x7060}, //13268 #CJK UNIFIED IDEOGRAPH + {0xF8B1, 0x7223}, //13269 #CJK UNIFIED IDEOGRAPH + {0xF8B2, 0x74DB}, //13270 #CJK UNIFIED IDEOGRAPH + {0xF8B3, 0x74E5}, //13271 #CJK UNIFIED IDEOGRAPH + {0xF8B4, 0x77D5}, //13272 #CJK UNIFIED IDEOGRAPH + {0xF8B5, 0x7938}, //13273 #CJK UNIFIED IDEOGRAPH + {0xF8B6, 0x79B7}, //13274 #CJK UNIFIED IDEOGRAPH + {0xF8B7, 0x79B6}, //13275 #CJK UNIFIED IDEOGRAPH + {0xF8B8, 0x7C6A}, //13276 #CJK UNIFIED IDEOGRAPH + {0xF8B9, 0x7E97}, //13277 #CJK UNIFIED IDEOGRAPH + {0xF8BA, 0x7F89}, //13278 #CJK UNIFIED IDEOGRAPH + {0xF8BB, 0x826D}, //13279 #CJK UNIFIED IDEOGRAPH + {0xF8BC, 0x8643}, //13280 #CJK UNIFIED IDEOGRAPH + {0xF8BD, 0x8838}, //13281 #CJK UNIFIED IDEOGRAPH + {0xF8BE, 0x8837}, //13282 #CJK UNIFIED IDEOGRAPH + {0xF8BF, 0x8835}, //13283 #CJK UNIFIED IDEOGRAPH + {0xF8C0, 0x884B}, //13284 #CJK UNIFIED IDEOGRAPH + {0xF8C1, 0x8B94}, //13285 #CJK UNIFIED IDEOGRAPH + {0xF8C2, 0x8B95}, //13286 #CJK UNIFIED IDEOGRAPH + {0xF8C3, 0x8E9E}, //13287 #CJK UNIFIED IDEOGRAPH + {0xF8C4, 0x8E9F}, //13288 #CJK UNIFIED IDEOGRAPH + {0xF8C5, 0x8EA0}, //13289 #CJK UNIFIED IDEOGRAPH + {0xF8C6, 0x8E9D}, //13290 #CJK UNIFIED IDEOGRAPH + {0xF8C7, 0x91BE}, //13291 #CJK UNIFIED IDEOGRAPH + {0xF8C8, 0x91BD}, //13292 #CJK UNIFIED IDEOGRAPH + {0xF8C9, 0x91C2}, //13293 #CJK UNIFIED IDEOGRAPH + {0xF8CA, 0x946B}, //13294 #CJK UNIFIED IDEOGRAPH + {0xF8CB, 0x9468}, //13295 #CJK UNIFIED IDEOGRAPH + {0xF8CC, 0x9469}, //13296 #CJK UNIFIED IDEOGRAPH + {0xF8CD, 0x96E5}, //13297 #CJK UNIFIED IDEOGRAPH + {0xF8CE, 0x9746}, //13298 #CJK UNIFIED IDEOGRAPH + {0xF8CF, 0x9743}, //13299 #CJK UNIFIED IDEOGRAPH + {0xF8D0, 0x9747}, //13300 #CJK UNIFIED IDEOGRAPH + {0xF8D1, 0x97C7}, //13301 #CJK UNIFIED IDEOGRAPH + {0xF8D2, 0x97E5}, //13302 #CJK UNIFIED IDEOGRAPH + {0xF8D3, 0x9A5E}, //13303 #CJK UNIFIED IDEOGRAPH + {0xF8D4, 0x9AD5}, //13304 #CJK UNIFIED IDEOGRAPH + {0xF8D5, 0x9B59}, //13305 #CJK UNIFIED IDEOGRAPH + {0xF8D6, 0x9C63}, //13306 #CJK UNIFIED IDEOGRAPH + {0xF8D7, 0x9C67}, //13307 #CJK UNIFIED IDEOGRAPH + {0xF8D8, 0x9C66}, //13308 #CJK UNIFIED IDEOGRAPH + {0xF8D9, 0x9C62}, //13309 #CJK UNIFIED IDEOGRAPH + {0xF8DA, 0x9C5E}, //13310 #CJK UNIFIED IDEOGRAPH + {0xF8DB, 0x9C60}, //13311 #CJK UNIFIED IDEOGRAPH + {0xF8DC, 0x9E02}, //13312 #CJK UNIFIED IDEOGRAPH + {0xF8DD, 0x9DFE}, //13313 #CJK UNIFIED IDEOGRAPH + {0xF8DE, 0x9E07}, //13314 #CJK UNIFIED IDEOGRAPH + {0xF8DF, 0x9E03}, //13315 #CJK UNIFIED IDEOGRAPH + {0xF8E0, 0x9E06}, //13316 #CJK UNIFIED IDEOGRAPH + {0xF8E1, 0x9E05}, //13317 #CJK UNIFIED IDEOGRAPH + {0xF8E2, 0x9E00}, //13318 #CJK UNIFIED IDEOGRAPH + {0xF8E3, 0x9E01}, //13319 #CJK UNIFIED IDEOGRAPH + {0xF8E4, 0x9E09}, //13320 #CJK UNIFIED IDEOGRAPH + {0xF8E5, 0x9DFF}, //13321 #CJK UNIFIED IDEOGRAPH + {0xF8E6, 0x9DFD}, //13322 #CJK UNIFIED IDEOGRAPH + {0xF8E7, 0x9E04}, //13323 #CJK UNIFIED IDEOGRAPH + {0xF8E8, 0x9EA0}, //13324 #CJK UNIFIED IDEOGRAPH + {0xF8E9, 0x9F1E}, //13325 #CJK UNIFIED IDEOGRAPH + {0xF8EA, 0x9F46}, //13326 #CJK UNIFIED IDEOGRAPH + {0xF8EB, 0x9F74}, //13327 #CJK UNIFIED IDEOGRAPH + {0xF8EC, 0x9F75}, //13328 #CJK UNIFIED IDEOGRAPH + {0xF8ED, 0x9F76}, //13329 #CJK UNIFIED IDEOGRAPH + {0xF8EE, 0x56D4}, //13330 #CJK UNIFIED IDEOGRAPH + {0xF8EF, 0x652E}, //13331 #CJK UNIFIED IDEOGRAPH + {0xF8F0, 0x65B8}, //13332 #CJK UNIFIED IDEOGRAPH + {0xF8F1, 0x6B18}, //13333 #CJK UNIFIED IDEOGRAPH + {0xF8F2, 0x6B19}, //13334 #CJK UNIFIED IDEOGRAPH + {0xF8F3, 0x6B17}, //13335 #CJK UNIFIED IDEOGRAPH + {0xF8F4, 0x6B1A}, //13336 #CJK UNIFIED IDEOGRAPH + {0xF8F5, 0x7062}, //13337 #CJK UNIFIED IDEOGRAPH + {0xF8F6, 0x7226}, //13338 #CJK UNIFIED IDEOGRAPH + {0xF8F7, 0x72AA}, //13339 #CJK UNIFIED IDEOGRAPH + {0xF8F8, 0x77D8}, //13340 #CJK UNIFIED IDEOGRAPH + {0xF8F9, 0x77D9}, //13341 #CJK UNIFIED IDEOGRAPH + {0xF8FA, 0x7939}, //13342 #CJK UNIFIED IDEOGRAPH + {0xF8FB, 0x7C69}, //13343 #CJK UNIFIED IDEOGRAPH + {0xF8FC, 0x7C6B}, //13344 #CJK UNIFIED IDEOGRAPH + {0xF8FD, 0x7CF6}, //13345 #CJK UNIFIED IDEOGRAPH + {0xF8FE, 0x7E9A}, //13346 #CJK UNIFIED IDEOGRAPH + {0xF940, 0x7E98}, //13347 #CJK UNIFIED IDEOGRAPH + {0xF941, 0x7E9B}, //13348 #CJK UNIFIED IDEOGRAPH + {0xF942, 0x7E99}, //13349 #CJK UNIFIED IDEOGRAPH + {0xF943, 0x81E0}, //13350 #CJK UNIFIED IDEOGRAPH + {0xF944, 0x81E1}, //13351 #CJK UNIFIED IDEOGRAPH + {0xF945, 0x8646}, //13352 #CJK UNIFIED IDEOGRAPH + {0xF946, 0x8647}, //13353 #CJK UNIFIED IDEOGRAPH + {0xF947, 0x8648}, //13354 #CJK UNIFIED IDEOGRAPH + {0xF948, 0x8979}, //13355 #CJK UNIFIED IDEOGRAPH + {0xF949, 0x897A}, //13356 #CJK UNIFIED IDEOGRAPH + {0xF94A, 0x897C}, //13357 #CJK UNIFIED IDEOGRAPH + {0xF94B, 0x897B}, //13358 #CJK UNIFIED IDEOGRAPH + {0xF94C, 0x89FF}, //13359 #CJK UNIFIED IDEOGRAPH + {0xF94D, 0x8B98}, //13360 #CJK UNIFIED IDEOGRAPH + {0xF94E, 0x8B99}, //13361 #CJK UNIFIED IDEOGRAPH + {0xF94F, 0x8EA5}, //13362 #CJK UNIFIED IDEOGRAPH + {0xF950, 0x8EA4}, //13363 #CJK UNIFIED IDEOGRAPH + {0xF951, 0x8EA3}, //13364 #CJK UNIFIED IDEOGRAPH + {0xF952, 0x946E}, //13365 #CJK UNIFIED IDEOGRAPH + {0xF953, 0x946D}, //13366 #CJK UNIFIED IDEOGRAPH + {0xF954, 0x946F}, //13367 #CJK UNIFIED IDEOGRAPH + {0xF955, 0x9471}, //13368 #CJK UNIFIED IDEOGRAPH + {0xF956, 0x9473}, //13369 #CJK UNIFIED IDEOGRAPH + {0xF957, 0x9749}, //13370 #CJK UNIFIED IDEOGRAPH + {0xF958, 0x9872}, //13371 #CJK UNIFIED IDEOGRAPH + {0xF959, 0x995F}, //13372 #CJK UNIFIED IDEOGRAPH + {0xF95A, 0x9C68}, //13373 #CJK UNIFIED IDEOGRAPH + {0xF95B, 0x9C6E}, //13374 #CJK UNIFIED IDEOGRAPH + {0xF95C, 0x9C6D}, //13375 #CJK UNIFIED IDEOGRAPH + {0xF95D, 0x9E0B}, //13376 #CJK UNIFIED IDEOGRAPH + {0xF95E, 0x9E0D}, //13377 #CJK UNIFIED IDEOGRAPH + {0xF95F, 0x9E10}, //13378 #CJK UNIFIED IDEOGRAPH + {0xF960, 0x9E0F}, //13379 #CJK UNIFIED IDEOGRAPH + {0xF961, 0x9E12}, //13380 #CJK UNIFIED IDEOGRAPH + {0xF962, 0x9E11}, //13381 #CJK UNIFIED IDEOGRAPH + {0xF963, 0x9EA1}, //13382 #CJK UNIFIED IDEOGRAPH + {0xF964, 0x9EF5}, //13383 #CJK UNIFIED IDEOGRAPH + {0xF965, 0x9F09}, //13384 #CJK UNIFIED IDEOGRAPH + {0xF966, 0x9F47}, //13385 #CJK UNIFIED IDEOGRAPH + {0xF967, 0x9F78}, //13386 #CJK UNIFIED IDEOGRAPH + {0xF968, 0x9F7B}, //13387 #CJK UNIFIED IDEOGRAPH + {0xF969, 0x9F7A}, //13388 #CJK UNIFIED IDEOGRAPH + {0xF96A, 0x9F79}, //13389 #CJK UNIFIED IDEOGRAPH + {0xF96B, 0x571E}, //13390 #CJK UNIFIED IDEOGRAPH + {0xF96C, 0x7066}, //13391 #CJK UNIFIED IDEOGRAPH + {0xF96D, 0x7C6F}, //13392 #CJK UNIFIED IDEOGRAPH + {0xF96E, 0x883C}, //13393 #CJK UNIFIED IDEOGRAPH + {0xF96F, 0x8DB2}, //13394 #CJK UNIFIED IDEOGRAPH + {0xF970, 0x8EA6}, //13395 #CJK UNIFIED IDEOGRAPH + {0xF971, 0x91C3}, //13396 #CJK UNIFIED IDEOGRAPH + {0xF972, 0x9474}, //13397 #CJK UNIFIED IDEOGRAPH + {0xF973, 0x9478}, //13398 #CJK UNIFIED IDEOGRAPH + {0xF974, 0x9476}, //13399 #CJK UNIFIED IDEOGRAPH + {0xF975, 0x9475}, //13400 #CJK UNIFIED IDEOGRAPH + {0xF976, 0x9A60}, //13401 #CJK UNIFIED IDEOGRAPH + {0xF977, 0x9C74}, //13402 #CJK UNIFIED IDEOGRAPH + {0xF978, 0x9C73}, //13403 #CJK UNIFIED IDEOGRAPH + {0xF979, 0x9C71}, //13404 #CJK UNIFIED IDEOGRAPH + {0xF97A, 0x9C75}, //13405 #CJK UNIFIED IDEOGRAPH + {0xF97B, 0x9E14}, //13406 #CJK UNIFIED IDEOGRAPH + {0xF97C, 0x9E13}, //13407 #CJK UNIFIED IDEOGRAPH + {0xF97D, 0x9EF6}, //13408 #CJK UNIFIED IDEOGRAPH + {0xF97E, 0x9F0A}, //13409 #CJK UNIFIED IDEOGRAPH + {0xF9A1, 0x9FA4}, //13410 #CJK UNIFIED IDEOGRAPH + {0xF9A2, 0x7068}, //13411 #CJK UNIFIED IDEOGRAPH + {0xF9A3, 0x7065}, //13412 #CJK UNIFIED IDEOGRAPH + {0xF9A4, 0x7CF7}, //13413 #CJK UNIFIED IDEOGRAPH + {0xF9A5, 0x866A}, //13414 #CJK UNIFIED IDEOGRAPH + {0xF9A6, 0x883E}, //13415 #CJK UNIFIED IDEOGRAPH + {0xF9A7, 0x883D}, //13416 #CJK UNIFIED IDEOGRAPH + {0xF9A8, 0x883F}, //13417 #CJK UNIFIED IDEOGRAPH + {0xF9A9, 0x8B9E}, //13418 #CJK UNIFIED IDEOGRAPH + {0xF9AA, 0x8C9C}, //13419 #CJK UNIFIED IDEOGRAPH + {0xF9AB, 0x8EA9}, //13420 #CJK UNIFIED IDEOGRAPH + {0xF9AC, 0x8EC9}, //13421 #CJK UNIFIED IDEOGRAPH + {0xF9AD, 0x974B}, //13422 #CJK UNIFIED IDEOGRAPH + {0xF9AE, 0x9873}, //13423 #CJK UNIFIED IDEOGRAPH + {0xF9AF, 0x9874}, //13424 #CJK UNIFIED IDEOGRAPH + {0xF9B0, 0x98CC}, //13425 #CJK UNIFIED IDEOGRAPH + {0xF9B1, 0x9961}, //13426 #CJK UNIFIED IDEOGRAPH + {0xF9B2, 0x99AB}, //13427 #CJK UNIFIED IDEOGRAPH + {0xF9B3, 0x9A64}, //13428 #CJK UNIFIED IDEOGRAPH + {0xF9B4, 0x9A66}, //13429 #CJK UNIFIED IDEOGRAPH + {0xF9B5, 0x9A67}, //13430 #CJK UNIFIED IDEOGRAPH + {0xF9B6, 0x9B24}, //13431 #CJK UNIFIED IDEOGRAPH + {0xF9B7, 0x9E15}, //13432 #CJK UNIFIED IDEOGRAPH + {0xF9B8, 0x9E17}, //13433 #CJK UNIFIED IDEOGRAPH + {0xF9B9, 0x9F48}, //13434 #CJK UNIFIED IDEOGRAPH + {0xF9BA, 0x6207}, //13435 #CJK UNIFIED IDEOGRAPH + {0xF9BB, 0x6B1E}, //13436 #CJK UNIFIED IDEOGRAPH + {0xF9BC, 0x7227}, //13437 #CJK UNIFIED IDEOGRAPH + {0xF9BD, 0x864C}, //13438 #CJK UNIFIED IDEOGRAPH + {0xF9BE, 0x8EA8}, //13439 #CJK UNIFIED IDEOGRAPH + {0xF9BF, 0x9482}, //13440 #CJK UNIFIED IDEOGRAPH + {0xF9C0, 0x9480}, //13441 #CJK UNIFIED IDEOGRAPH + {0xF9C1, 0x9481}, //13442 #CJK UNIFIED IDEOGRAPH + {0xF9C2, 0x9A69}, //13443 #CJK UNIFIED IDEOGRAPH + {0xF9C3, 0x9A68}, //13444 #CJK UNIFIED IDEOGRAPH + {0xF9C4, 0x9B2E}, //13445 #CJK UNIFIED IDEOGRAPH + {0xF9C5, 0x9E19}, //13446 #CJK UNIFIED IDEOGRAPH + {0xF9C6, 0x7229}, //13447 #CJK UNIFIED IDEOGRAPH + {0xF9C7, 0x864B}, //13448 #CJK UNIFIED IDEOGRAPH + {0xF9C8, 0x8B9F}, //13449 #CJK UNIFIED IDEOGRAPH + {0xF9C9, 0x9483}, //13450 #CJK UNIFIED IDEOGRAPH + {0xF9CA, 0x9C79}, //13451 #CJK UNIFIED IDEOGRAPH + {0xF9CB, 0x9EB7}, //13452 #CJK UNIFIED IDEOGRAPH + {0xF9CC, 0x7675}, //13453 #CJK UNIFIED IDEOGRAPH + {0xF9CD, 0x9A6B}, //13454 #CJK UNIFIED IDEOGRAPH + {0xF9CE, 0x9C7A}, //13455 #CJK UNIFIED IDEOGRAPH + {0xF9CF, 0x9E1D}, //13456 #CJK UNIFIED IDEOGRAPH + {0xF9D0, 0x7069}, //13457 #CJK UNIFIED IDEOGRAPH + {0xF9D1, 0x706A}, //13458 #CJK UNIFIED IDEOGRAPH + {0xF9D2, 0x9EA4}, //13459 #CJK UNIFIED IDEOGRAPH + {0xF9D3, 0x9F7E}, //13460 #CJK UNIFIED IDEOGRAPH + {0xF9D4, 0x9F49}, //13461 #CJK UNIFIED IDEOGRAPH + {0xF9D5, 0x9F98}, //13462 #CJK UNIFIED IDEOGRAPH + {0xF9D6, 0x7881}, //13463 #CJK UNIFIED IDEOGRAPH + {0xF9D7, 0x92B9}, //13464 #CJK UNIFIED IDEOGRAPH + {0xF9D8, 0x88CF}, //13465 #CJK UNIFIED IDEOGRAPH + {0xF9D9, 0x58BB}, //13466 #CJK UNIFIED IDEOGRAPH + {0xF9DA, 0x6052}, //13467 #CJK UNIFIED IDEOGRAPH + {0xF9DB, 0x7CA7}, //13468 #CJK UNIFIED IDEOGRAPH + {0xF9DC, 0x5AFA}, //13469 #CJK UNIFIED IDEOGRAPH + {0xF9DD, 0x2554}, //13470 #BOX DRAWINGS DOUBLE DOWN AND RIGHT + {0xF9DE, 0x2566}, //13471 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + {0xF9DF, 0x2557}, //13472 #BOX DRAWINGS DOUBLE DOWN AND LEFT + {0xF9E0, 0x2560}, //13473 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + {0xF9E1, 0x256C}, //13474 #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + {0xF9E2, 0x2563}, //13475 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT + {0xF9E3, 0x255A}, //13476 #BOX DRAWINGS DOUBLE UP AND RIGHT + {0xF9E4, 0x2569}, //13477 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL + {0xF9E5, 0x255D}, //13478 #BOX DRAWINGS DOUBLE UP AND LEFT + {0xF9E6, 0x2552}, //13479 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + {0xF9E7, 0x2564}, //13480 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + {0xF9E8, 0x2555}, //13481 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + {0xF9E9, 0x255E}, //13482 #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + {0xF9EA, 0x256A}, //13483 #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + {0xF9EB, 0x2561}, //13484 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + {0xF9EC, 0x2558}, //13485 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + {0xF9ED, 0x2567}, //13486 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + {0xF9EE, 0x255B}, //13487 #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + {0xF9EF, 0x2553}, //13488 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + {0xF9F0, 0x2565}, //13489 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + {0xF9F1, 0x2556}, //13490 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + {0xF9F2, 0x255F}, //13491 #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + {0xF9F3, 0x256B}, //13492 #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + {0xF9F4, 0x2562}, //13493 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + {0xF9F5, 0x2559}, //13494 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + {0xF9F6, 0x2568}, //13495 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + {0xF9F7, 0x255C}, //13496 #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + {0xF9F8, 0x2551}, //13497 #BOX DRAWINGS DOUBLE VERTICAL + {0xF9F9, 0x2550}, //13498 #BOX DRAWINGS DOUBLE HORIZONTAL + {0xF9FA, 0x256D}, //13499 #BOX DRAWINGS LIGHT ARC DOWN AND RIGHT + {0xF9FB, 0x256E}, //13500 #BOX DRAWINGS LIGHT ARC DOWN AND LEFT + {0xF9FC, 0x2570}, //13501 #BOX DRAWINGS LIGHT ARC UP AND RIGHT + {0xF9FD, 0x256F}, //13502 #BOX DRAWINGS LIGHT ARC UP AND LEFT + {0xF9FE, 0x2593}, //13503 #DARK SHADE +}; + +#endif // DRW_CPTABLE950_H diff --git a/extlib/libdxfrw/intern/drw_cptables.h b/extlib/libdxfrw/intern/drw_cptables.h new file mode 100644 index 0000000..2f7d758 --- /dev/null +++ b/extlib/libdxfrw/intern/drw_cptables.h @@ -0,0 +1,1330 @@ +#ifndef DRW_CPTABLES_H +#define DRW_CPTABLES_H + +//first entry in all tables are 0x80 +#define CPOFFSET 0x80 +#define CPLENGHTCOMMON 128 + +//Table 874 +static const int DRW_Table874[] = { + 0x20AC, //1 #EURO SIGN + 0x00 , //2 #UNDEFINED + 0x00 , //3 #UNDEFINED + 0x00 , //4 #UNDEFINED + 0x00 , //5 #UNDEFINED + 0x2026, //6 #HORIZONTAL ELLIPSIS + 0x00 , //7 #UNDEFINED + 0x00 , //8 #UNDEFINED + 0x00 , //9 #UNDEFINED + 0x00 , //10 #UNDEFINED + 0x00 , //11 #UNDEFINED + 0x00 , //12 #UNDEFINED + 0x00 , //13 #UNDEFINED + 0x00 , //14 #UNDEFINED + 0x00 , //15 #UNDEFINED + 0x00 , //16 #UNDEFINED + 0x00 , //17 #UNDEFINED + 0x2018, //18 #LEFT SINGLE QUOTATION MARK + 0x2019, //19 #RIGHT SINGLE QUOTATION MARK + 0x201C, //20 #LEFT DOUBLE QUOTATION MARK + 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK + 0x2022, //22 #BULLET + 0x2013, //23 #EN DASH + 0x2014, //24 #EM DASH + 0x00 , //25 #UNDEFINED + 0x00 , //26 #UNDEFINED + 0x00 , //27 #UNDEFINED + 0x00 , //28 #UNDEFINED + 0x00 , //29 #UNDEFINED + 0x00 , //30 #UNDEFINED + 0x00 , //31 #UNDEFINED + 0x00 , //32 #UNDEFINED + 0x00A0, //33 #NO-BREAK SPACE + 0x0E01, //34 #THAI CHARACTER KO KAI + 0x0E02, //35 #THAI CHARACTER KHO KHAI + 0x0E03, //36 #THAI CHARACTER KHO KHUAT + 0x0E04, //37 #THAI CHARACTER KHO KHWAI + 0x0E05, //38 #THAI CHARACTER KHO KHON + 0x0E06, //39 #THAI CHARACTER KHO RAKHANG + 0x0E07, //40 #THAI CHARACTER NGO NGU + 0x0E08, //41 #THAI CHARACTER CHO CHAN + 0x0E09, //42 #THAI CHARACTER CHO CHING + 0x0E0A, //43 #THAI CHARACTER CHO CHANG + 0x0E0B, //44 #THAI CHARACTER SO SO + 0x0E0C, //45 #THAI CHARACTER CHO CHOE + 0x0E0D, //46 #THAI CHARACTER YO YING + 0x0E0E, //47 #THAI CHARACTER DO CHADA + 0x0E0F, //48 #THAI CHARACTER TO PATAK + 0x0E10, //49 #THAI CHARACTER THO THAN + 0x0E11, //50 #THAI CHARACTER THO NANGMONTHO + 0x0E12, //51 #THAI CHARACTER THO PHUTHAO + 0x0E13, //52 #THAI CHARACTER NO NEN + 0x0E14, //53 #THAI CHARACTER DO DEK + 0x0E15, //54 #THAI CHARACTER TO TAO + 0x0E16, //55 #THAI CHARACTER THO THUNG + 0x0E17, //56 #THAI CHARACTER THO THAHAN + 0x0E18, //57 #THAI CHARACTER THO THONG + 0x0E19, //58 #THAI CHARACTER NO NU + 0x0E1A, //59 #THAI CHARACTER BO BAIMAI + 0x0E1B, //60 #THAI CHARACTER PO PLA + 0x0E1C, //61 #THAI CHARACTER PHO PHUNG + 0x0E1D, //62 #THAI CHARACTER FO FA + 0x0E1E, //63 #THAI CHARACTER PHO PHAN + 0x0E1F, //64 #THAI CHARACTER FO FAN + 0x0E20, //65 #THAI CHARACTER PHO SAMPHAO + 0x0E21, //66 #THAI CHARACTER MO MA + 0x0E22, //67 #THAI CHARACTER YO YAK + 0x0E23, //68 #THAI CHARACTER RO RUA + 0x0E24, //69 #THAI CHARACTER RU + 0x0E25, //70 #THAI CHARACTER LO LING + 0x0E26, //71 #THAI CHARACTER LU + 0x0E27, //72 #THAI CHARACTER WO WAEN + 0x0E28, //73 #THAI CHARACTER SO SALA + 0x0E29, //74 #THAI CHARACTER SO RUSI + 0x0E2A, //75 #THAI CHARACTER SO SUA + 0x0E2B, //76 #THAI CHARACTER HO HIP + 0x0E2C, //77 #THAI CHARACTER LO CHULA + 0x0E2D, //78 #THAI CHARACTER O ANG + 0x0E2E, //79 #THAI CHARACTER HO NOKHUK + 0x0E2F, //80 #THAI CHARACTER PAIYANNOI + 0x0E30, //81 #THAI CHARACTER SARA A + 0x0E31, //82 #THAI CHARACTER MAI HAN-AKAT + 0x0E32, //83 #THAI CHARACTER SARA AA + 0x0E33, //84 #THAI CHARACTER SARA AM + 0x0E34, //85 #THAI CHARACTER SARA I + 0x0E35, //86 #THAI CHARACTER SARA II + 0x0E36, //87 #THAI CHARACTER SARA UE + 0x0E37, //88 #THAI CHARACTER SARA UEE + 0x0E38, //89 #THAI CHARACTER SARA U + 0x0E39, //90 #THAI CHARACTER SARA UU + 0x0E3A, //91 #THAI CHARACTER PHINTHU + 0x00 , //92 #UNDEFINED + 0x00 , //93 #UNDEFINED + 0x00 , //94 #UNDEFINED + 0x00 , //95 #UNDEFINED + 0x0E3F, //96 #THAI CURRENCY SYMBOL BAHT + 0x0E40, //97 #THAI CHARACTER SARA E + 0x0E41, //98 #THAI CHARACTER SARA AE + 0x0E42, //99 #THAI CHARACTER SARA O + 0x0E43, //100 #THAI CHARACTER SARA AI MAIMUAN + 0x0E44, //101 #THAI CHARACTER SARA AI MAIMALAI + 0x0E45, //102 #THAI CHARACTER LAKKHANGYAO + 0x0E46, //103 #THAI CHARACTER MAIYAMOK + 0x0E47, //104 #THAI CHARACTER MAITAIKHU + 0x0E48, //105 #THAI CHARACTER MAI EK + 0x0E49, //106 #THAI CHARACTER MAI THO + 0x0E4A, //107 #THAI CHARACTER MAI TRI + 0x0E4B, //108 #THAI CHARACTER MAI CHATTAWA + 0x0E4C, //109 #THAI CHARACTER THANTHAKHAT + 0x0E4D, //110 #THAI CHARACTER NIKHAHIT + 0x0E4E, //111 #THAI CHARACTER YAMAKKAN + 0x0E4F, //112 #THAI CHARACTER FONGMAN + 0x0E50, //113 #THAI DIGIT ZERO + 0x0E51, //114 #THAI DIGIT ONE + 0x0E52, //115 #THAI DIGIT TWO + 0x0E53, //116 #THAI DIGIT THREE + 0x0E54, //117 #THAI DIGIT FOUR + 0x0E55, //118 #THAI DIGIT FIVE + 0x0E56, //119 #THAI DIGIT SIX + 0x0E57, //120 #THAI DIGIT SEVEN + 0x0E58, //121 #THAI DIGIT EIGHT + 0x0E59, //122 #THAI DIGIT NINE + 0x0E5A, //123 #THAI CHARACTER ANGKHANKHU + 0x0E5B, //124 #THAI CHARACTER KHOMUT + 0x00 , //125 #UNDEFINED + 0x00 , //126 #UNDEFINED + 0x00 , //127 #UNDEFINED + 0x00 //128 #UNDEFINED +}; + +//Table 1250 +static const int DRW_Table1250[] = { +0x20AC, //1 #EURO SIGN +0x00, //2 #UNDEFINED +0x201A, //3 #SINGLE LOW-9 QUOTATION MARK +0x00, //4 #UNDEFINED +0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK +0x2026, //6 #HORIZONTAL ELLIPSIS +0x2020, //7 #DAGGER +0x2021, //8 #DOUBLE DAGGER +0x00, //9 #UNDEFINED +0x2030, //10 #PER MILLE SIGN +0x0160, //11 #LATIN CAPITAL LETTER S WITH CARON +0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK +0x015A, //13 #LATIN CAPITAL LETTER S WITH ACUTE +0x0164, //14 #LATIN CAPITAL LETTER T WITH CARON +0x017D, //15 #LATIN CAPITAL LETTER Z WITH CARON +0x0179, //16 #LATIN CAPITAL LETTER Z WITH ACUTE +0x00, //17 #UNDEFINED +0x2018, //18 #LEFT SINGLE QUOTATION MARK +0x2019, //19 #RIGHT SINGLE QUOTATION MARK +0x201C, //20 #LEFT DOUBLE QUOTATION MARK +0x201D, //21 #RIGHT DOUBLE QUOTATION MARK +0x2022, //22 #BULLET +0x2013, //23 #EN DASH +0x2014, //24 #EM DASH +0x00, //25 #UNDEFINED +0x2122, //26 #TRADE MARK SIGN +0x0161, //27 #LATIN SMALL LETTER S WITH CARON +0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0x015B, //29 #LATIN SMALL LETTER S WITH ACUTE +0x0165, //30 #LATIN SMALL LETTER T WITH CARON +0x017E, //31 #LATIN SMALL LETTER Z WITH CARON +0x017A, //32 #LATIN SMALL LETTER Z WITH ACUTE +0x00A0, //33 #NO-BREAK SPACE +0x02C7, //34 #CARON +0x02D8, //35 #BREVE +0x0141, //36 #LATIN CAPITAL LETTER L WITH STROKE +0x00A4, //37 #CURRENCY SIGN +0x0104, //38 #LATIN CAPITAL LETTER A WITH OGONEK +0x00A6, //39 #BROKEN BAR +0x00A7, //40 #SECTION SIGN +0x00A8, //41 #DIAERESIS +0x00A9, //42 #COPYRIGHT SIGN +0x015E, //43 #LATIN CAPITAL LETTER S WITH CEDILLA +0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0x00AC, //45 #NOT SIGN +0x00AD, //46 #SOFT HYPHEN +0x00AE, //47 #REGISTERED SIGN +0x017B, //48 #LATIN CAPITAL LETTER Z WITH DOT ABOVE +0x00B0, //49 #DEGREE SIGN +0x00B1, //50 #PLUS-MINUS SIGN +0x02DB, //51 #OGONEK +0x0142, //52 #LATIN SMALL LETTER L WITH STROKE +0x00B4, //53 #ACUTE ACCENT +0x00B5, //54 #MICRO SIGN +0x00B6, //55 #PILCROW SIGN +0x00B7, //56 #MIDDLE DOT +0x00B8, //57 #CEDILLA +0x0105, //58 #LATIN SMALL LETTER A WITH OGONEK +0x015F, //59 #LATIN SMALL LETTER S WITH CEDILLA +0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0x013D, //61 #LATIN CAPITAL LETTER L WITH CARON +0x02DD, //62 #DOUBLE ACUTE ACCENT +0x013E, //63 #LATIN SMALL LETTER L WITH CARON +0x017C, //64 #LATIN SMALL LETTER Z WITH DOT ABOVE +0x0154, //65 #LATIN CAPITAL LETTER R WITH ACUTE +0x00C1, //66 #LATIN CAPITAL LETTER A WITH ACUTE +0x00C2, //67 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0x0102, //68 #LATIN CAPITAL LETTER A WITH BREVE +0x00C4, //69 #LATIN CAPITAL LETTER A WITH DIAERESIS +0x0139, //70 #LATIN CAPITAL LETTER L WITH ACUTE +0x0106, //71 #LATIN CAPITAL LETTER C WITH ACUTE +0x00C7, //72 #LATIN CAPITAL LETTER C WITH CEDILLA +0x010C, //73 #LATIN CAPITAL LETTER C WITH CARON +0x00C9, //74 #LATIN CAPITAL LETTER E WITH ACUTE +0x0118, //75 #LATIN CAPITAL LETTER E WITH OGONEK +0x00CB, //76 #LATIN CAPITAL LETTER E WITH DIAERESIS +0x011A, //77 #LATIN CAPITAL LETTER E WITH CARON +0x00CD, //78 #LATIN CAPITAL LETTER I WITH ACUTE +0x00CE, //79 #LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0x010E, //80 #LATIN CAPITAL LETTER D WITH CARON +0x0110, //81 #LATIN CAPITAL LETTER D WITH STROKE +0x0143, //82 #LATIN CAPITAL LETTER N WITH ACUTE +0x0147, //83 #LATIN CAPITAL LETTER N WITH CARON +0x00D3, //84 #LATIN CAPITAL LETTER O WITH ACUTE +0x00D4, //85 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0x0150, //86 #LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0x00D6, //87 #LATIN CAPITAL LETTER O WITH DIAERESIS +0x00D7, //88 #MULTIPLICATION SIGN +0x0158, //89 #LATIN CAPITAL LETTER R WITH CARON +0x016E, //90 #LATIN CAPITAL LETTER U WITH RING ABOVE +0x00DA, //91 #LATIN CAPITAL LETTER U WITH ACUTE +0x0170, //92 #LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0x00DC, //93 #LATIN CAPITAL LETTER U WITH DIAERESIS +0x00DD, //94 #LATIN CAPITAL LETTER Y WITH ACUTE +0x0162, //95 #LATIN CAPITAL LETTER T WITH CEDILLA +0x00DF, //96 #LATIN SMALL LETTER SHARP S +0x0155, //97 #LATIN SMALL LETTER R WITH ACUTE +0x00E1, //98 #LATIN SMALL LETTER A WITH ACUTE +0x00E2, //99 #LATIN SMALL LETTER A WITH CIRCUMFLEX +0x0103, //100 #LATIN SMALL LETTER A WITH BREVE +0x00E4, //101 #LATIN SMALL LETTER A WITH DIAERESIS +0x013A, //102 #LATIN SMALL LETTER L WITH ACUTE +0x0107, //103 #LATIN SMALL LETTER C WITH ACUTE +0x00E7, //104 #LATIN SMALL LETTER C WITH CEDILLA +0x010D, //105 #LATIN SMALL LETTER C WITH CARON +0x00E9, //106 #LATIN SMALL LETTER E WITH ACUTE +0x0119, //107 #LATIN SMALL LETTER E WITH OGONEK +0x00EB, //108 #LATIN SMALL LETTER E WITH DIAERESIS +0x011B, //109 #LATIN SMALL LETTER E WITH CARON +0x00ED, //110 #LATIN SMALL LETTER I WITH ACUTE +0x00EE, //111 #LATIN SMALL LETTER I WITH CIRCUMFLEX +0x010F, //112 #LATIN SMALL LETTER D WITH CARON +0x0111, //113 #LATIN SMALL LETTER D WITH STROKE +0x0144, //114 #LATIN SMALL LETTER N WITH ACUTE +0x0148, //115 #LATIN SMALL LETTER N WITH CARON +0x00F3, //116 #LATIN SMALL LETTER O WITH ACUTE +0x00F4, //117 #LATIN SMALL LETTER O WITH CIRCUMFLEX +0x0151, //118 #LATIN SMALL LETTER O WITH DOUBLE ACUTE +0x00F6, //119 #LATIN SMALL LETTER O WITH DIAERESIS +0x00F7, //120 #DIVISION SIGN +0x0159, //121 #LATIN SMALL LETTER R WITH CARON +0x016F, //122 #LATIN SMALL LETTER U WITH RING ABOVE +0x00FA, //123 #LATIN SMALL LETTER U WITH ACUTE +0x0171, //124 #LATIN SMALL LETTER U WITH DOUBLE ACUTE +0x00FC, //125 #LATIN SMALL LETTER U WITH DIAERESIS +0x00FD, //126 #LATIN SMALL LETTER Y WITH ACUTE +0x0163, //127 #LATIN SMALL LETTER T WITH CEDILLA +0x02D9 //128 #DOT ABOVE +}; + + +//Table 1251 +static const int DRW_Table1251[] = { + 0x0402, //1 #CYRILLIC CAPITAL LETTER DJE + 0x0403, //2 #CYRILLIC CAPITAL LETTER GJE + 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK + 0x0453, //4 #CYRILLIC SMALL LETTER GJE + 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK + 0x2026, //6 #HORIZONTAL ELLIPSIS + 0x2020, //7 #DAGGER + 0x2021, //8 #DOUBLE DAGGER + 0x20AC, //9 #EURO SIGN + 0x2030, //10 #PER MILLE SIGN + 0x0409, //11 #CYRILLIC CAPITAL LETTER LJE + 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0x040A, //13 #CYRILLIC CAPITAL LETTER NJE + 0x040C, //14 #CYRILLIC CAPITAL LETTER KJE + 0x040B, //15 #CYRILLIC CAPITAL LETTER TSHE + 0x040F, //16 #CYRILLIC CAPITAL LETTER DZHE + 0x0452, //17 #CYRILLIC SMALL LETTER DJE + 0x2018, //18 #LEFT SINGLE QUOTATION MARK + 0x2019, //19 #RIGHT SINGLE QUOTATION MARK + 0x201C, //20 #LEFT DOUBLE QUOTATION MARK + 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK + 0x2022, //22 #BULLET + 0x2013, //23 #EN DASH + 0x2014, //24 #EM DASH + 0x00, //25 #UNDEFINED + 0x2122, //26 #TRADE MARK SIGN + 0x0459, //27 #CYRILLIC SMALL LETTER LJE + 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 0x045A, //29 #CYRILLIC SMALL LETTER NJE + 0x045C, //30 #CYRILLIC SMALL LETTER KJE + 0x045B, //31 #CYRILLIC SMALL LETTER TSHE + 0x045F, //32 #CYRILLIC SMALL LETTER DZHE + 0x00A0, //33 #NO-BREAK SPACE + 0x040E, //34 #CYRILLIC CAPITAL LETTER SHORT U + 0x045E, //35 #CYRILLIC SMALL LETTER SHORT U + 0x0408, //36 #CYRILLIC CAPITAL LETTER JE + 0x00A4, //37 #CURRENCY SIGN + 0x0490, //38 #CYRILLIC CAPITAL LETTER GHE WITH UPTURN + 0x00A6, //39 #BROKEN BAR + 0x00A7, //40 #SECTION SIGN + 0x0401, //41 #CYRILLIC CAPITAL LETTER IO + 0x00A9, //42 #COPYRIGHT SIGN + 0x0404, //43 #CYRILLIC CAPITAL LETTER UKRAINIAN IE + 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00AC, //45 #NOT SIGN + 0x00AD, //46 #SOFT HYPHEN + 0x00AE, //47 #REGISTERED SIGN + 0x0407, //48 #CYRILLIC CAPITAL LETTER YI + 0x00B0, //49 #DEGREE SIGN + 0x00B1, //50 #PLUS-MINUS SIGN + 0x0406, //51 #CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + 0x0456, //52 #CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + 0x0491, //53 #CYRILLIC SMALL LETTER GHE WITH UPTURN + 0x00B5, //54 #MICRO SIGN + 0x00B6, //55 #PILCROW SIGN + 0x00B7, //56 #MIDDLE DOT + 0x0451, //57 #CYRILLIC SMALL LETTER IO + 0x2116, //58 #NUMERO SIGN + 0x0454, //59 #CYRILLIC SMALL LETTER UKRAINIAN IE + 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x0458, //61 #CYRILLIC SMALL LETTER JE + 0x0405, //62 #CYRILLIC CAPITAL LETTER DZE + 0x0455, //63 #CYRILLIC SMALL LETTER DZE + 0x0457, //64 #CYRILLIC SMALL LETTER YI + 0x0410, //65 #CYRILLIC CAPITAL LETTER A + 0x0411, //66 #CYRILLIC CAPITAL LETTER BE + 0x0412, //67 #CYRILLIC CAPITAL LETTER VE + 0x0413, //68 #CYRILLIC CAPITAL LETTER GHE + 0x0414, //69 #CYRILLIC CAPITAL LETTER DE + 0x0415, //70 #CYRILLIC CAPITAL LETTER IE + 0x0416, //71 #CYRILLIC CAPITAL LETTER ZHE + 0x0417, //72 #CYRILLIC CAPITAL LETTER ZE + 0x0418, //73 #CYRILLIC CAPITAL LETTER I + 0x0419, //74 #CYRILLIC CAPITAL LETTER SHORT I + 0x041A, //75 #CYRILLIC CAPITAL LETTER KA + 0x041B, //76 #CYRILLIC CAPITAL LETTER EL + 0x041C, //77 #CYRILLIC CAPITAL LETTER EM + 0x041D, //78 #CYRILLIC CAPITAL LETTER EN + 0x041E, //79 #CYRILLIC CAPITAL LETTER O + 0x041F, //80 #CYRILLIC CAPITAL LETTER PE + 0x0420, //81 #CYRILLIC CAPITAL LETTER ER + 0x0421, //82 #CYRILLIC CAPITAL LETTER ES + 0x0422, //83 #CYRILLIC CAPITAL LETTER TE + 0x0423, //84 #CYRILLIC CAPITAL LETTER U + 0x0424, //85 #CYRILLIC CAPITAL LETTER EF + 0x0425, //86 #CYRILLIC CAPITAL LETTER HA + 0x0426, //87 #CYRILLIC CAPITAL LETTER TSE + 0x0427, //88 #CYRILLIC CAPITAL LETTER CHE + 0x0428, //89 #CYRILLIC CAPITAL LETTER SHA + 0x0429, //90 #CYRILLIC CAPITAL LETTER SHCHA + 0x042A, //91 #CYRILLIC CAPITAL LETTER HARD SIGN + 0x042B, //92 #CYRILLIC CAPITAL LETTER YERU + 0x042C, //93 #CYRILLIC CAPITAL LETTER SOFT SIGN + 0x042D, //94 #CYRILLIC CAPITAL LETTER E + 0x042E, //95 #CYRILLIC CAPITAL LETTER YU + 0x042F, //96 #CYRILLIC CAPITAL LETTER YA + 0x0430, //97 #CYRILLIC SMALL LETTER A + 0x0431, //98 #CYRILLIC SMALL LETTER BE + 0x0432, //99 #CYRILLIC SMALL LETTER VE + 0x0433, //100 #CYRILLIC SMALL LETTER GHE + 0x0434, //101 #CYRILLIC SMALL LETTER DE + 0x0435, //102 #CYRILLIC SMALL LETTER IE + 0x0436, //103 #CYRILLIC SMALL LETTER ZHE + 0x0437, //104 #CYRILLIC SMALL LETTER ZE + 0x0438, //105 #CYRILLIC SMALL LETTER I + 0x0439, //106 #CYRILLIC SMALL LETTER SHORT I + 0x043A, //107 #CYRILLIC SMALL LETTER KA + 0x043B, //108 #CYRILLIC SMALL LETTER EL + 0x043C, //109 #CYRILLIC SMALL LETTER EM + 0x043D, //110 #CYRILLIC SMALL LETTER EN + 0x043E, //111 #CYRILLIC SMALL LETTER O + 0x043F, //112 #CYRILLIC SMALL LETTER PE + 0x0440, //113 #CYRILLIC SMALL LETTER ER + 0x0441, //114 #CYRILLIC SMALL LETTER ES + 0x0442, //115 #CYRILLIC SMALL LETTER TE + 0x0443, //116 #CYRILLIC SMALL LETTER U + 0x0444, //117 #CYRILLIC SMALL LETTER EF + 0x0445, //118 #CYRILLIC SMALL LETTER HA + 0x0446, //119 #CYRILLIC SMALL LETTER TSE + 0x0447, //120 #CYRILLIC SMALL LETTER CHE + 0x0448, //121 #CYRILLIC SMALL LETTER SHA + 0x0449, //122 #CYRILLIC SMALL LETTER SHCHA + 0x044A, //123 #CYRILLIC SMALL LETTER HARD SIGN + 0x044B, //124 #CYRILLIC SMALL LETTER YERU + 0x044C, //125 #CYRILLIC SMALL LETTER SOFT SIGN + 0x044D, //126 #CYRILLIC SMALL LETTER E + 0x044E, //127 #CYRILLIC SMALL LETTER YU + 0x044F //128 #CYRILLIC SMALL LETTER YA +}; + + +//Table 1252 +static const int DRW_Table1252[] = { + 0x20AC, //1 #EURO SIGN + 0x00, //2 #UNDEFINED + 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK + 0x0192, //4 #LATIN SMALL LETTER F WITH HOOK + 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK + 0x2026, //6 #HORIZONTAL ELLIPSIS + 0x2020, //7 #DAGGER + 0x2021, //8 #DOUBLE DAGGER + 0x02C6, //9 #MODIFIER LETTER CIRCUMFLEX ACCENT + 0x2030, //10 #PER MILLE SIGN + 0x0160, //11 #LATIN CAPITAL LETTER S WITH CARON + 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0x0152, //13 #LATIN CAPITAL LIGATURE OE + 0x00, //14 #UNDEFINED + 0x017D, //15 #LATIN CAPITAL LETTER Z WITH CARON + 0x00, //16 #UNDEFINED + 0x00, //17 #UNDEFINED + 0x2018, //18 #LEFT SINGLE QUOTATION MARK + 0x2019, //19 #RIGHT SINGLE QUOTATION MARK + 0x201C, //20 #LEFT DOUBLE QUOTATION MARK + 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK + 0x2022, //22 #BULLET + 0x2013, //23 #EN DASH + 0x2014, //24 #EM DASH + 0x02DC, //25 #SMALL TILDE + 0x2122, //26 #TRADE MARK SIGN + 0x0161, //27 #LATIN SMALL LETTER S WITH CARON + 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 0x0153, //29 #LATIN SMALL LIGATURE OE + 0x00, //30 #UNDEFINED + 0x017E, //31 #LATIN SMALL LETTER Z WITH CARON + 0x0178, //32 #LATIN CAPITAL LETTER Y WITH DIAERESIS + 0x00A0, //33 #NO-BREAK SPACE + 0x00A1, //34 #INVERTED EXCLAMATION MARK + 0x00A2, //35 #CENT SIGN + 0x00A3, //36 #POUND SIGN + 0x00A4, //37 #CURRENCY SIGN + 0x00A5, //38 #YEN SIGN + 0x00A6, //39 #BROKEN BAR + 0x00A7, //40 #SECTION SIGN + 0x00A8, //41 #DIAERESIS + 0x00A9, //42 #COPYRIGHT SIGN + 0x00AA, //43 #FEMININE ORDINAL INDICATOR + 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00AC, //45 #NOT SIGN + 0x00AD, //46 #SOFT HYPHEN + 0x00AE, //47 #REGISTERED SIGN + 0x00AF, //48 #MACRON + 0x00B0, //49 #DEGREE SIGN + 0x00B1, //50 #PLUS-MINUS SIGN + 0x00B2, //51 #SUPERSCRIPT TWO + 0x00B3, //52 #SUPERSCRIPT THREE + 0x00B4, //53 #ACUTE ACCENT + 0x00B5, //54 #MICRO SIGN + 0x00B6, //55 #PILCROW SIGN + 0x00B7, //56 #MIDDLE DOT + 0x00B8, //57 #CEDILLA + 0x00B9, //58 #SUPERSCRIPT ONE + 0x00BA, //59 #MASCULINE ORDINAL INDICATOR + 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00BC, //61 #VULGAR FRACTION ONE QUARTER + 0x00BD, //62 #VULGAR FRACTION ONE HALF + 0x00BE, //63 #VULGAR FRACTION THREE QUARTERS + 0x00BF, //64 #INVERTED QUESTION MARK + 0x00C0, //65 #LATIN CAPITAL LETTER A WITH GRAVE + 0x00C1, //66 #LATIN CAPITAL LETTER A WITH ACUTE + 0x00C2, //67 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00C3, //68 #LATIN CAPITAL LETTER A WITH TILDE + 0x00C4, //69 #LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00C5, //70 #LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00C6, //71 #LATIN CAPITAL LETTER AE + 0x00C7, //72 #LATIN CAPITAL LETTER C WITH CEDILLA + 0x00C8, //73 #LATIN CAPITAL LETTER E WITH GRAVE + 0x00C9, //74 #LATIN CAPITAL LETTER E WITH ACUTE + 0x00CA, //75 #LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00CB, //76 #LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00CC, //77 #LATIN CAPITAL LETTER I WITH GRAVE + 0x00CD, //78 #LATIN CAPITAL LETTER I WITH ACUTE + 0x00CE, //79 #LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00CF, //80 #LATIN CAPITAL LETTER I WITH DIAERESIS + 0x00D0, //81 #LATIN CAPITAL LETTER ETH + 0x00D1, //82 #LATIN CAPITAL LETTER N WITH TILDE + 0x00D2, //83 #LATIN CAPITAL LETTER O WITH GRAVE + 0x00D3, //84 #LATIN CAPITAL LETTER O WITH ACUTE + 0x00D4, //85 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00D5, //86 #LATIN CAPITAL LETTER O WITH TILDE + 0x00D6, //87 #LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00D7, //88 #MULTIPLICATION SIGN + 0x00D8, //89 #LATIN CAPITAL LETTER O WITH STROKE + 0x00D9, //90 #LATIN CAPITAL LETTER U WITH GRAVE + 0x00DA, //91 #LATIN CAPITAL LETTER U WITH ACUTE + 0x00DB, //92 #LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x00DC, //93 #LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00DD, //94 #LATIN CAPITAL LETTER Y WITH ACUTE + 0x00DE, //95 #LATIN CAPITAL LETTER THORN + 0x00DF, //96 #LATIN SMALL LETTER SHARP S + 0x00E0, //97 #LATIN SMALL LETTER A WITH GRAVE + 0x00E1, //98 #LATIN SMALL LETTER A WITH ACUTE + 0x00E2, //99 #LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00E3, //100 #LATIN SMALL LETTER A WITH TILDE + 0x00E4, //101 #LATIN SMALL LETTER A WITH DIAERESIS + 0x00E5, //102 #LATIN SMALL LETTER A WITH RING ABOVE + 0x00E6, //103 #LATIN SMALL LETTER AE + 0x00E7, //104 #LATIN SMALL LETTER C WITH CEDILLA + 0x00E8, //105 #LATIN SMALL LETTER E WITH GRAVE + 0x00E9, //106 #LATIN SMALL LETTER E WITH ACUTE + 0x00EA, //107 #LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00EB, //108 #LATIN SMALL LETTER E WITH DIAERESIS + 0x00EC, //109 #LATIN SMALL LETTER I WITH GRAVE + 0x00ED, //110 #LATIN SMALL LETTER I WITH ACUTE + 0x00EE, //111 #LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00EF, //112 #LATIN SMALL LETTER I WITH DIAERESIS + 0x00F0, //113 #LATIN SMALL LETTER ETH + 0x00F1, //114 #LATIN SMALL LETTER N WITH TILDE + 0x00F2, //115 #LATIN SMALL LETTER O WITH GRAVE + 0x00F3, //116 #LATIN SMALL LETTER O WITH ACUTE + 0x00F4, //117 #LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00F5, //118 #LATIN SMALL LETTER O WITH TILDE + 0x00F6, //119 #LATIN SMALL LETTER O WITH DIAERESIS + 0x00F7, //120 #DIVISION SIGN + 0x00F8, //121 #LATIN SMALL LETTER O WITH STROKE + 0x00F9, //122 #LATIN SMALL LETTER U WITH GRAVE + 0x00FA, //123 #LATIN SMALL LETTER U WITH ACUTE + 0x00FB, //124 #LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00FC, //125 #LATIN SMALL LETTER U WITH DIAERESIS + 0x00FD, //126 #LATIN SMALL LETTER Y WITH ACUTE + 0x00FE, //127 #LATIN SMALL LETTER THORN + 0x00FF //128 #LATIN SMALL LETTER Y WITH DIAERESIS +}; + +//Table 1253 +static const int DRW_Table1253[] = { + 0x20AC, //1 #EURO SIGN + 0x00 , //2 #UNDEFINED + 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK + 0x0192, //4 #LATIN SMALL LETTER F WITH HOOK + 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK + 0x2026, //6 #HORIZONTAL ELLIPSIS + 0x2020, //7 #DAGGER + 0x2021, //8 #DOUBLE DAGGER + 0x00 , //9 #UNDEFINED + 0x2030, //10 #PER MILLE SIGN + 0x00 , //11 #UNDEFINED + 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0x00 , //13 #UNDEFINED + 0x00 , //14 #UNDEFINED + 0x00 , //15 #UNDEFINED + 0x00 , //16 #UNDEFINED + 0x00 , //17 #UNDEFINED + 0x2018, //18 #LEFT SINGLE QUOTATION MARK + 0x2019, //19 #RIGHT SINGLE QUOTATION MARK + 0x201C, //20 #LEFT DOUBLE QUOTATION MARK + 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK + 0x2022, //22 #BULLET + 0x2013, //23 #EN DASH + 0x2014, //24 #EM DASH + 0x00 , //25 #UNDEFINED + 0x2122, //26 #TRADE MARK SIGN + 0x00 , //27 #UNDEFINED + 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 0x00 , //29 #UNDEFINED + 0x00 , //30 #UNDEFINED + 0x00 , //31 #UNDEFINED + 0x00 , //32 #UNDEFINED + 0x00A0, //33 #NO-BREAK SPACE + 0x0385, //34 #GREEK DIALYTIKA TONOS + 0x0386, //35 #GREEK CAPITAL LETTER ALPHA WITH TONOS + 0x00A3, //36 #POUND SIGN + 0x00A4, //37 #CURRENCY SIGN + 0x00A5, //38 #YEN SIGN + 0x00A6, //39 #BROKEN BAR + 0x00A7, //40 #SECTION SIGN + 0x00A8, //41 #DIAERESIS + 0x00A9, //42 #COPYRIGHT SIGN + 0x00 , //43 #UNDEFINED + 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00AC, //45 #NOT SIGN + 0x00AD, //46 #SOFT HYPHEN + 0x00AE, //47 #REGISTERED SIGN + 0x2015, //48 #HORIZONTAL BAR + 0x00B0, //49 #DEGREE SIGN + 0x00B1, //50 #PLUS-MINUS SIGN + 0x00B2, //51 #SUPERSCRIPT TWO + 0x00B3, //52 #SUPERSCRIPT THREE + 0x0384, //53 #GREEK TONOS + 0x00B5, //54 #MICRO SIGN + 0x00B6, //55 #PILCROW SIGN + 0x00B7, //56 #MIDDLE DOT + 0x0388, //57 #GREEK CAPITAL LETTER EPSILON WITH TONOS + 0x0389, //58 #GREEK CAPITAL LETTER ETA WITH TONOS + 0x038A, //59 #GREEK CAPITAL LETTER IOTA WITH TONOS + 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x038C, //61 #GREEK CAPITAL LETTER OMICRON WITH TONOS + 0x00BD, //62 #VULGAR FRACTION ONE HALF + 0x038E, //63 #GREEK CAPITAL LETTER UPSILON WITH TONOS + 0x038F, //64 #GREEK CAPITAL LETTER OMEGA WITH TONOS + 0x0390, //65 #GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + 0x0391, //66 #GREEK CAPITAL LETTER ALPHA + 0x0392, //67 #GREEK CAPITAL LETTER BETA + 0x0393, //68 #GREEK CAPITAL LETTER GAMMA + 0x0394, //69 #GREEK CAPITAL LETTER DELTA + 0x0395, //70 #GREEK CAPITAL LETTER EPSILON + 0x0396, //71 #GREEK CAPITAL LETTER ZETA + 0x0397, //72 #GREEK CAPITAL LETTER ETA + 0x0398, //73 #GREEK CAPITAL LETTER THETA + 0x0399, //74 #GREEK CAPITAL LETTER IOTA + 0x039A, //75 #GREEK CAPITAL LETTER KAPPA + 0x039B, //76 #GREEK CAPITAL LETTER LAMDA + 0x039C, //77 #GREEK CAPITAL LETTER MU + 0x039D, //78 #GREEK CAPITAL LETTER NU + 0x039E, //79 #GREEK CAPITAL LETTER XI + 0x039F, //80 #GREEK CAPITAL LETTER OMICRON + 0x03A0, //81 #GREEK CAPITAL LETTER PI + 0x03A1, //82 #GREEK CAPITAL LETTER RHO + 0x00 , //83 #UNDEFINED + 0x03A3, //84 #GREEK CAPITAL LETTER SIGMA + 0x03A4, //85 #GREEK CAPITAL LETTER TAU + 0x03A5, //86 #GREEK CAPITAL LETTER UPSILON + 0x03A6, //87 #GREEK CAPITAL LETTER PHI + 0x03A7, //88 #GREEK CAPITAL LETTER CHI + 0x03A8, //89 #GREEK CAPITAL LETTER PSI + 0x03A9, //90 #GREEK CAPITAL LETTER OMEGA + 0x03AA, //91 #GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + 0x03AB, //92 #GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + 0x03AC, //93 #GREEK SMALL LETTER ALPHA WITH TONOS + 0x03AD, //94 #GREEK SMALL LETTER EPSILON WITH TONOS + 0x03AE, //95 #GREEK SMALL LETTER ETA WITH TONOS + 0x03AF, //96 #GREEK SMALL LETTER IOTA WITH TONOS + 0x03B0, //97 #GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + 0x03B1, //98 #GREEK SMALL LETTER ALPHA + 0x03B2, //99 #GREEK SMALL LETTER BETA + 0x03B3, //100 #GREEK SMALL LETTER GAMMA + 0x03B4, //101 #GREEK SMALL LETTER DELTA + 0x03B5, //102 #GREEK SMALL LETTER EPSILON + 0x03B6, //103 #GREEK SMALL LETTER ZETA + 0x03B7, //104 #GREEK SMALL LETTER ETA + 0x03B8, //105 #GREEK SMALL LETTER THETA + 0x03B9, //106 #GREEK SMALL LETTER IOTA + 0x03BA, //107 #GREEK SMALL LETTER KAPPA + 0x03BB, //108 #GREEK SMALL LETTER LAMDA + 0x03BC, //109 #GREEK SMALL LETTER MU + 0x03BD, //110 #GREEK SMALL LETTER NU + 0x03BE, //111 #GREEK SMALL LETTER XI + 0x03BF, //112 #GREEK SMALL LETTER OMICRON + 0x03C0, //113 #GREEK SMALL LETTER PI + 0x03C1, //114 #GREEK SMALL LETTER RHO + 0x03C2, //115 #GREEK SMALL LETTER FINAL SIGMA + 0x03C3, //116 #GREEK SMALL LETTER SIGMA + 0x03C4, //117 #GREEK SMALL LETTER TAU + 0x03C5, //118 #GREEK SMALL LETTER UPSILON + 0x03C6, //119 #GREEK SMALL LETTER PHI + 0x03C7, //120 #GREEK SMALL LETTER CHI + 0x03C8, //121 #GREEK SMALL LETTER PSI + 0x03C9, //122 #GREEK SMALL LETTER OMEGA + 0x03CA, //123 #GREEK SMALL LETTER IOTA WITH DIALYTIKA + 0x03CB, //124 #GREEK SMALL LETTER UPSILON WITH DIALYTIKA + 0x03CC, //125 #GREEK SMALL LETTER OMICRON WITH TONOS + 0x03CD, //126 #GREEK SMALL LETTER UPSILON WITH TONOS + 0x03CE, //127 #GREEK SMALL LETTER OMEGA WITH TONOS + 0x00 //128 #UNDEFINED +}; + +//Table 1254 +static const int DRW_Table1254[] = { + 0x20AC, //1 #EURO SIGN + 0x00 , //2 #UNDEFINED + 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK + 0x0192, //4 #LATIN SMALL LETTER F WITH HOOK + 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK + 0x2026, //6 #HORIZONTAL ELLIPSIS + 0x2020, //7 #DAGGER + 0x2021, //8 #DOUBLE DAGGER + 0x02C6, //9 #MODIFIER LETTER CIRCUMFLEX ACCENT + 0x2030, //10 #PER MILLE SIGN + 0x0160, //11 #LATIN CAPITAL LETTER S WITH CARON + 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0x0152, //13 #LATIN CAPITAL LIGATURE OE + 0x00 , //14 #UNDEFINED + 0x00 , //15 #UNDEFINED + 0x00 , //16 #UNDEFINED + 0x00 , //17 #UNDEFINED + 0x2018, //18 #LEFT SINGLE QUOTATION MARK + 0x2019, //19 #RIGHT SINGLE QUOTATION MARK + 0x201C, //20 #LEFT DOUBLE QUOTATION MARK + 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK + 0x2022, //22 #BULLET + 0x2013, //23 #EN DASH + 0x2014, //24 #EM DASH + 0x02DC, //25 #SMALL TILDE + 0x2122, //26 #TRADE MARK SIGN + 0x0161, //27 #LATIN SMALL LETTER S WITH CARON + 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 0x0153, //29 #LATIN SMALL LIGATURE OE + 0x00 , //30 #UNDEFINED + 0x00 , //31 #UNDEFINED + 0x0178, //32 #LATIN CAPITAL LETTER Y WITH DIAERESIS + 0x00A0, //33 #NO-BREAK SPACE + 0x00A1, //34 #INVERTED EXCLAMATION MARK + 0x00A2, //35 #CENT SIGN + 0x00A3, //36 #POUND SIGN + 0x00A4, //37 #CURRENCY SIGN + 0x00A5, //38 #YEN SIGN + 0x00A6, //39 #BROKEN BAR + 0x00A7, //40 #SECTION SIGN + 0x00A8, //41 #DIAERESIS + 0x00A9, //42 #COPYRIGHT SIGN + 0x00AA, //43 #FEMININE ORDINAL INDICATOR + 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00AC, //45 #NOT SIGN + 0x00AD, //46 #SOFT HYPHEN + 0x00AE, //47 #REGISTERED SIGN + 0x00AF, //48 #MACRON + 0x00B0, //49 #DEGREE SIGN + 0x00B1, //50 #PLUS-MINUS SIGN + 0x00B2, //51 #SUPERSCRIPT TWO + 0x00B3, //52 #SUPERSCRIPT THREE + 0x00B4, //53 #ACUTE ACCENT + 0x00B5, //54 #MICRO SIGN + 0x00B6, //55 #PILCROW SIGN + 0x00B7, //56 #MIDDLE DOT + 0x00B8, //57 #CEDILLA + 0x00B9, //58 #SUPERSCRIPT ONE + 0x00BA, //59 #MASCULINE ORDINAL INDICATOR + 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00BC, //61 #VULGAR FRACTION ONE QUARTER + 0x00BD, //62 #VULGAR FRACTION ONE HALF + 0x00BE, //63 #VULGAR FRACTION THREE QUARTERS + 0x00BF, //64 #INVERTED QUESTION MARK + 0x00C0, //65 #LATIN CAPITAL LETTER A WITH GRAVE + 0x00C1, //66 #LATIN CAPITAL LETTER A WITH ACUTE + 0x00C2, //67 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00C3, //68 #LATIN CAPITAL LETTER A WITH TILDE + 0x00C4, //69 #LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00C5, //70 #LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00C6, //71 #LATIN CAPITAL LETTER AE + 0x00C7, //72 #LATIN CAPITAL LETTER C WITH CEDILLA + 0x00C8, //73 #LATIN CAPITAL LETTER E WITH GRAVE + 0x00C9, //74 #LATIN CAPITAL LETTER E WITH ACUTE + 0x00CA, //75 #LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00CB, //76 #LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00CC, //77 #LATIN CAPITAL LETTER I WITH GRAVE + 0x00CD, //78 #LATIN CAPITAL LETTER I WITH ACUTE + 0x00CE, //79 #LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00CF, //80 #LATIN CAPITAL LETTER I WITH DIAERESIS + 0x011E, //81 #LATIN CAPITAL LETTER G WITH BREVE + 0x00D1, //82 #LATIN CAPITAL LETTER N WITH TILDE + 0x00D2, //83 #LATIN CAPITAL LETTER O WITH GRAVE + 0x00D3, //84 #LATIN CAPITAL LETTER O WITH ACUTE + 0x00D4, //85 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00D5, //86 #LATIN CAPITAL LETTER O WITH TILDE + 0x00D6, //87 #LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00D7, //88 #MULTIPLICATION SIGN + 0x00D8, //89 #LATIN CAPITAL LETTER O WITH STROKE + 0x00D9, //90 #LATIN CAPITAL LETTER U WITH GRAVE + 0x00DA, //91 #LATIN CAPITAL LETTER U WITH ACUTE + 0x00DB, //92 #LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x00DC, //93 #LATIN CAPITAL LETTER U WITH DIAERESIS + 0x0130, //94 #LATIN CAPITAL LETTER I WITH DOT ABOVE + 0x015E, //95 #LATIN CAPITAL LETTER S WITH CEDILLA + 0x00DF, //96 #LATIN SMALL LETTER SHARP S + 0x00E0, //97 #LATIN SMALL LETTER A WITH GRAVE + 0x00E1, //98 #LATIN SMALL LETTER A WITH ACUTE + 0x00E2, //99 #LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00E3, //100 #LATIN SMALL LETTER A WITH TILDE + 0x00E4, //101 #LATIN SMALL LETTER A WITH DIAERESIS + 0x00E5, //102 #LATIN SMALL LETTER A WITH RING ABOVE + 0x00E6, //103 #LATIN SMALL LETTER AE + 0x00E7, //104 #LATIN SMALL LETTER C WITH CEDILLA + 0x00E8, //105 #LATIN SMALL LETTER E WITH GRAVE + 0x00E9, //106 #LATIN SMALL LETTER E WITH ACUTE + 0x00EA, //107 #LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00EB, //108 #LATIN SMALL LETTER E WITH DIAERESIS + 0x00EC, //109 #LATIN SMALL LETTER I WITH GRAVE + 0x00ED, //110 #LATIN SMALL LETTER I WITH ACUTE + 0x00EE, //111 #LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00EF, //112 #LATIN SMALL LETTER I WITH DIAERESIS + 0x011F, //113 #LATIN SMALL LETTER G WITH BREVE + 0x00F1, //114 #LATIN SMALL LETTER N WITH TILDE + 0x00F2, //115 #LATIN SMALL LETTER O WITH GRAVE + 0x00F3, //116 #LATIN SMALL LETTER O WITH ACUTE + 0x00F4, //117 #LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00F5, //118 #LATIN SMALL LETTER O WITH TILDE + 0x00F6, //119 #LATIN SMALL LETTER O WITH DIAERESIS + 0x00F7, //120 #DIVISION SIGN + 0x00F8, //121 #LATIN SMALL LETTER O WITH STROKE + 0x00F9, //122 #LATIN SMALL LETTER U WITH GRAVE + 0x00FA, //123 #LATIN SMALL LETTER U WITH ACUTE + 0x00FB, //124 #LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00FC, //125 #LATIN SMALL LETTER U WITH DIAERESIS + 0x0131, //126 #LATIN SMALL LETTER DOTLESS I + 0x015F, //127 #LATIN SMALL LETTER S WITH CEDILLA + 0x00FF //128 #LATIN SMALL LETTER Y WITH DIAERESIS +}; + +//Table 1255 +static const int DRW_Table1255[] = { + 0x20AC, //1 #EURO SIGN + 0x00 , //2 #UNDEFINED + 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK + 0x0192, //4 #LATIN SMALL LETTER F WITH HOOK + 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK + 0x2026, //6 #HORIZONTAL ELLIPSIS + 0x2020, //7 #DAGGER + 0x2021, //8 #DOUBLE DAGGER + 0x02C6, //9 #MODIFIER LETTER CIRCUMFLEX ACCENT + 0x2030, //10 #PER MILLE SIGN + 0x00 , //11 #UNDEFINED + 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0x00 , //13 #UNDEFINED + 0x00 , //14 #UNDEFINED + 0x00 , //15 #UNDEFINED + 0x00 , //16 #UNDEFINED + 0x00 , //17 #UNDEFINED + 0x2018, //18 #LEFT SINGLE QUOTATION MARK + 0x2019, //19 #RIGHT SINGLE QUOTATION MARK + 0x201C, //20 #LEFT DOUBLE QUOTATION MARK + 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK + 0x2022, //22 #BULLET + 0x2013, //23 #EN DASH + 0x2014, //24 #EM DASH + 0x02DC, //25 #SMALL TILDE + 0x2122, //26 #TRADE MARK SIGN + 0x00 , //27 #UNDEFINED + 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 0x00 , //29 #UNDEFINED + 0x00 , //30 #UNDEFINED + 0x00 , //31 #UNDEFINED + 0x00 , //32 #UNDEFINED + 0x00A0, //33 #NO-BREAK SPACE + 0x00A1, //34 #INVERTED EXCLAMATION MARK + 0x00A2, //35 #CENT SIGN + 0x00A3, //36 #POUND SIGN + 0x20AA, //37 #NEW SHEQEL SIGN + 0x00A5, //38 #YEN SIGN + 0x00A6, //39 #BROKEN BAR + 0x00A7, //40 #SECTION SIGN + 0x00A8, //41 #DIAERESIS + 0x00A9, //42 #COPYRIGHT SIGN + 0x00D7, //43 #MULTIPLICATION SIGN + 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00AC, //45 #NOT SIGN + 0x00AD, //46 #SOFT HYPHEN + 0x00AE, //47 #REGISTERED SIGN + 0x00AF, //48 #MACRON + 0x00B0, //49 #DEGREE SIGN + 0x00B1, //50 #PLUS-MINUS SIGN + 0x00B2, //51 #SUPERSCRIPT TWO + 0x00B3, //52 #SUPERSCRIPT THREE + 0x00B4, //53 #ACUTE ACCENT + 0x00B5, //54 #MICRO SIGN + 0x00B6, //55 #PILCROW SIGN + 0x00B7, //56 #MIDDLE DOT + 0x00B8, //57 #CEDILLA + 0x00B9, //58 #SUPERSCRIPT ONE + 0x00F7, //59 #DIVISION SIGN + 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00BC, //61 #VULGAR FRACTION ONE QUARTER + 0x00BD, //62 #VULGAR FRACTION ONE HALF + 0x00BE, //63 #VULGAR FRACTION THREE QUARTERS + 0x00BF, //64 #INVERTED QUESTION MARK + 0x05B0, //65 #HEBREW POINT SHEVA + 0x05B1, //66 #HEBREW POINT HATAF SEGOL + 0x05B2, //67 #HEBREW POINT HATAF PATAH + 0x05B3, //68 #HEBREW POINT HATAF QAMATS + 0x05B4, //69 #HEBREW POINT HIRIQ + 0x05B5, //70 #HEBREW POINT TSERE + 0x05B6, //71 #HEBREW POINT SEGOL + 0x05B7, //72 #HEBREW POINT PATAH + 0x05B8, //73 #HEBREW POINT QAMATS + 0x05B9, //74 #HEBREW POINT HOLAM + 0x00 , //75 #UNDEFINED + 0x05BB, //76 #HEBREW POINT QUBUTS + 0x05BC, //77 #HEBREW POINT DAGESH OR MAPIQ + 0x05BD, //78 #HEBREW POINT METEG + 0x05BE, //79 #HEBREW PUNCTUATION MAQAF + 0x05BF, //80 #HEBREW POINT RAFE + 0x05C0, //81 #HEBREW PUNCTUATION PASEQ + 0x05C1, //82 #HEBREW POINT SHIN DOT + 0x05C2, //83 #HEBREW POINT SIN DOT + 0x05C3, //84 #HEBREW PUNCTUATION SOF PASUQ + 0x05F0, //85 #HEBREW LIGATURE YIDDISH DOUBLE VAV + 0x05F1, //86 #HEBREW LIGATURE YIDDISH VAV YOD + 0x05F2, //87 #HEBREW LIGATURE YIDDISH DOUBLE YOD + 0x05F3, //88 #HEBREW PUNCTUATION GERESH + 0x05F4, //89 #HEBREW PUNCTUATION GERSHAYIM + 0x00 , //90 #UNDEFINED + 0x00 , //91 #UNDEFINED + 0x00 , //92 #UNDEFINED + 0x00 , //93 #UNDEFINED + 0x00 , //94 #UNDEFINED + 0x00 , //95 #UNDEFINED + 0x00 , //96 #UNDEFINED + 0x05D0, //97 #HEBREW LETTER ALEF + 0x05D1, //98 #HEBREW LETTER BET + 0x05D2, //99 #HEBREW LETTER GIMEL + 0x05D3, //100 #HEBREW LETTER DALET + 0x05D4, //101 #HEBREW LETTER HE + 0x05D5, //102 #HEBREW LETTER VAV + 0x05D6, //103 #HEBREW LETTER ZAYIN + 0x05D7, //104 #HEBREW LETTER HET + 0x05D8, //105 #HEBREW LETTER TET + 0x05D9, //106 #HEBREW LETTER YOD + 0x05DA, //107 #HEBREW LETTER FINAL KAF + 0x05DB, //108 #HEBREW LETTER KAF + 0x05DC, //109 #HEBREW LETTER LAMED + 0x05DD, //110 #HEBREW LETTER FINAL MEM + 0x05DE, //111 #HEBREW LETTER MEM + 0x05DF, //112 #HEBREW LETTER FINAL NUN + 0x05E0, //113 #HEBREW LETTER NUN + 0x05E1, //114 #HEBREW LETTER SAMEKH + 0x05E2, //115 #HEBREW LETTER AYIN + 0x05E3, //116 #HEBREW LETTER FINAL PE + 0x05E4, //117 #HEBREW LETTER PE + 0x05E5, //118 #HEBREW LETTER FINAL TSADI + 0x05E6, //119 #HEBREW LETTER TSADI + 0x05E7, //120 #HEBREW LETTER QOF + 0x05E8, //121 #HEBREW LETTER RESH + 0x05E9, //122 #HEBREW LETTER SHIN + 0x05EA, //123 #HEBREW LETTER TAV + 0x00 , //124 #UNDEFINED + 0x00 , //125 #UNDEFINED + 0x200E, //126 #LEFT-TO-RIGHT MARK + 0x200F, //127 #RIGHT-TO-LEFT MARK + 0x00 //128 #UNDEFINED +}; + +//Table 1256 +static const int DRW_Table1256[] = { + 0x20AC, //1 #EURO SIGN + 0x067E, //2 #ARABIC LETTER PEH + 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK + 0x0192, //4 #LATIN SMALL LETTER F WITH HOOK + 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK + 0x2026, //6 #HORIZONTAL ELLIPSIS + 0x2020, //7 #DAGGER + 0x2021, //8 #DOUBLE DAGGER + 0x02C6, //9 #MODIFIER LETTER CIRCUMFLEX ACCENT + 0x2030, //10 #PER MILLE SIGN + 0x0679, //11 #ARABIC LETTER TTEH + 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0x0152, //13 #LATIN CAPITAL LIGATURE OE + 0x0686, //14 #ARABIC LETTER TCHEH + 0x0698, //15 #ARABIC LETTER JEH + 0x0688, //16 #ARABIC LETTER DDAL + 0x06AF, //17 #ARABIC LETTER GAF + 0x2018, //18 #LEFT SINGLE QUOTATION MARK + 0x2019, //19 #RIGHT SINGLE QUOTATION MARK + 0x201C, //20 #LEFT DOUBLE QUOTATION MARK + 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK + 0x2022, //22 #BULLET + 0x2013, //23 #EN DASH + 0x2014, //24 #EM DASH + 0x06A9, //25 #ARABIC LETTER KEHEH + 0x2122, //26 #TRADE MARK SIGN + 0x0691, //27 #ARABIC LETTER RREH + 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 0x0153, //29 #LATIN SMALL LIGATURE OE + 0x200C, //30 #ZERO WIDTH NON-JOINER + 0x200D, //31 #ZERO WIDTH JOINER + 0x06BA, //32 #ARABIC LETTER NOON GHUNNA + 0x00A0, //33 #NO-BREAK SPACE + 0x060C, //34 #ARABIC COMMA + 0x00A2, //35 #CENT SIGN + 0x00A3, //36 #POUND SIGN + 0x00A4, //37 #CURRENCY SIGN + 0x00A5, //38 #YEN SIGN + 0x00A6, //39 #BROKEN BAR + 0x00A7, //40 #SECTION SIGN + 0x00A8, //41 #DIAERESIS + 0x00A9, //42 #COPYRIGHT SIGN + 0x06BE, //43 #ARABIC LETTER HEH DOACHASHMEE + 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00AC, //45 #NOT SIGN + 0x00AD, //46 #SOFT HYPHEN + 0x00AE, //47 #REGISTERED SIGN + 0x00AF, //48 #MACRON + 0x00B0, //49 #DEGREE SIGN + 0x00B1, //50 #PLUS-MINUS SIGN + 0x00B2, //51 #SUPERSCRIPT TWO + 0x00B3, //52 #SUPERSCRIPT THREE + 0x00B4, //53 #ACUTE ACCENT + 0x00B5, //54 #MICRO SIGN + 0x00B6, //55 #PILCROW SIGN + 0x00B7, //56 #MIDDLE DOT + 0x00B8, //57 #CEDILLA + 0x00B9, //58 #SUPERSCRIPT ONE + 0x061B, //59 #ARABIC SEMICOLON + 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00BC, //61 #VULGAR FRACTION ONE QUARTER + 0x00BD, //62 #VULGAR FRACTION ONE HALF + 0x00BE, //63 #VULGAR FRACTION THREE QUARTERS + 0x061F, //64 #ARABIC QUESTION MARK + 0x06C1, //65 #ARABIC LETTER HEH GOAL + 0x0621, //66 #ARABIC LETTER HAMZA + 0x0622, //67 #ARABIC LETTER ALEF WITH MADDA ABOVE + 0x0623, //68 #ARABIC LETTER ALEF WITH HAMZA ABOVE + 0x0624, //69 #ARABIC LETTER WAW WITH HAMZA ABOVE + 0x0625, //70 #ARABIC LETTER ALEF WITH HAMZA BELOW + 0x0626, //71 #ARABIC LETTER YEH WITH HAMZA ABOVE + 0x0627, //72 #ARABIC LETTER ALEF + 0x0628, //73 #ARABIC LETTER BEH + 0x0629, //74 #ARABIC LETTER TEH MARBUTA + 0x062A, //75 #ARABIC LETTER TEH + 0x062B, //76 #ARABIC LETTER THEH + 0x062C, //77 #ARABIC LETTER JEEM + 0x062D, //78 #ARABIC LETTER HAH + 0x062E, //79 #ARABIC LETTER KHAH + 0x062F, //80 #ARABIC LETTER DAL + 0x0630, //81 #ARABIC LETTER THAL + 0x0631, //82 #ARABIC LETTER REH + 0x0632, //83 #ARABIC LETTER ZAIN + 0x0633, //84 #ARABIC LETTER SEEN + 0x0634, //85 #ARABIC LETTER SHEEN + 0x0635, //86 #ARABIC LETTER SAD + 0x0636, //87 #ARABIC LETTER DAD + 0x00D7, //88 #MULTIPLICATION SIGN + 0x0637, //89 #ARABIC LETTER TAH + 0x0638, //90 #ARABIC LETTER ZAH + 0x0639, //91 #ARABIC LETTER AIN + 0x063A, //92 #ARABIC LETTER GHAIN + 0x0640, //93 #ARABIC TATWEEL + 0x0641, //94 #ARABIC LETTER FEH + 0x0642, //95 #ARABIC LETTER QAF + 0x0643, //96 #ARABIC LETTER KAF + 0x00E0, //97 #LATIN SMALL LETTER A WITH GRAVE + 0x0644, //98 #ARABIC LETTER LAM + 0x00E2, //99 #LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0645, //100 #ARABIC LETTER MEEM + 0x0646, //101 #ARABIC LETTER NOON + 0x0647, //102 #ARABIC LETTER HEH + 0x0648, //103 #ARABIC LETTER WAW + 0x00E7, //104 #LATIN SMALL LETTER C WITH CEDILLA + 0x00E8, //105 #LATIN SMALL LETTER E WITH GRAVE + 0x00E9, //106 #LATIN SMALL LETTER E WITH ACUTE + 0x00EA, //107 #LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00EB, //108 #LATIN SMALL LETTER E WITH DIAERESIS + 0x0649, //109 #ARABIC LETTER ALEF MAKSURA + 0x064A, //110 #ARABIC LETTER YEH + 0x00EE, //111 #LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00EF, //112 #LATIN SMALL LETTER I WITH DIAERESIS + 0x064B, //113 #ARABIC FATHATAN + 0x064C, //114 #ARABIC DAMMATAN + 0x064D, //115 #ARABIC KASRATAN + 0x064E, //116 #ARABIC FATHA + 0x00F4, //117 #LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x064F, //118 #ARABIC DAMMA + 0x0650, //119 #ARABIC KASRA + 0x00F7, //120 #DIVISION SIGN + 0x0651, //121 #ARABIC SHADDA + 0x00F9, //122 #LATIN SMALL LETTER U WITH GRAVE + 0x0652, //123 #ARABIC SUKUN + 0x00FB, //124 #LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00FC, //125 #LATIN SMALL LETTER U WITH DIAERESIS + 0x200E, //126 #LEFT-TO-RIGHT MARK + 0x200F, //127 #RIGHT-TO-LEFT MARK + 0x06D2 //128 #ARABIC LETTER YEH BARREE +}; + +//Table 1257 +static const int DRW_Table1257[] = { + 0x20AC, //1 #EURO SIGN + 0x00 , //2 #UNDEFINED + 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK + 0x00 , //4 #UNDEFINED + 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK + 0x2026, //6 #HORIZONTAL ELLIPSIS + 0x2020, //7 #DAGGER + 0x2021, //8 #DOUBLE DAGGER + 0x00 , //9 #UNDEFINED + 0x2030, //10 #PER MILLE SIGN + 0x00 , //11 #UNDEFINED + 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0x00 , //13 #UNDEFINED + 0x00A8, //14 #DIAERESIS + 0x02C7, //15 #CARON + 0x00B8, //16 #CEDILLA + 0x00 , //17 #UNDEFINED + 0x2018, //18 #LEFT SINGLE QUOTATION MARK + 0x2019, //19 #RIGHT SINGLE QUOTATION MARK + 0x201C, //20 #LEFT DOUBLE QUOTATION MARK + 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK + 0x2022, //22 #BULLET + 0x2013, //23 #EN DASH + 0x2014, //24 #EM DASH + 0x00 , //25 #UNDEFINED + 0x2122, //26 #TRADE MARK SIGN + 0x00 , //27 #UNDEFINED + 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 0x00 , //29 #UNDEFINED + 0x00AF, //30 #MACRON + 0x02DB, //31 #OGONEK + 0x00 , //32 #UNDEFINED + 0x00A0, //33 #NO-BREAK SPACE + 0x00 , //34 #UNDEFINED + 0x00A2, //35 #CENT SIGN + 0x00A3, //36 #POUND SIGN + 0x00A4, //37 #CURRENCY SIGN + 0x00 , //38 #UNDEFINED + 0x00A6, //39 #BROKEN BAR + 0x00A7, //40 #SECTION SIGN + 0x00D8, //41 #LATIN CAPITAL LETTER O WITH STROKE + 0x00A9, //42 #COPYRIGHT SIGN + 0x0156, //43 #LATIN CAPITAL LETTER R WITH CEDILLA + 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00AC, //45 #NOT SIGN + 0x00AD, //46 #SOFT HYPHEN + 0x00AE, //47 #REGISTERED SIGN + 0x00C6, //48 #LATIN CAPITAL LETTER AE + 0x00B0, //49 #DEGREE SIGN + 0x00B1, //50 #PLUS-MINUS SIGN + 0x00B2, //51 #SUPERSCRIPT TWO + 0x00B3, //52 #SUPERSCRIPT THREE + 0x00B4, //53 #ACUTE ACCENT + 0x00B5, //54 #MICRO SIGN + 0x00B6, //55 #PILCROW SIGN + 0x00B7, //56 #MIDDLE DOT + 0x00F8, //57 #LATIN SMALL LETTER O WITH STROKE + 0x00B9, //58 #SUPERSCRIPT ONE + 0x0157, //59 #LATIN SMALL LETTER R WITH CEDILLA + 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00BC, //61 #VULGAR FRACTION ONE QUARTER + 0x00BD, //62 #VULGAR FRACTION ONE HALF + 0x00BE, //63 #VULGAR FRACTION THREE QUARTERS + 0x00E6, //64 #LATIN SMALL LETTER AE + 0x0104, //65 #LATIN CAPITAL LETTER A WITH OGONEK + 0x012E, //66 #LATIN CAPITAL LETTER I WITH OGONEK + 0x0100, //67 #LATIN CAPITAL LETTER A WITH MACRON + 0x0106, //68 #LATIN CAPITAL LETTER C WITH ACUTE + 0x00C4, //69 #LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00C5, //70 #LATIN CAPITAL LETTER A WITH RING ABOVE + 0x0118, //71 #LATIN CAPITAL LETTER E WITH OGONEK + 0x0112, //72 #LATIN CAPITAL LETTER E WITH MACRON + 0x010C, //73 #LATIN CAPITAL LETTER C WITH CARON + 0x00C9, //74 #LATIN CAPITAL LETTER E WITH ACUTE + 0x0179, //75 #LATIN CAPITAL LETTER Z WITH ACUTE + 0x0116, //76 #LATIN CAPITAL LETTER E WITH DOT ABOVE + 0x0122, //77 #LATIN CAPITAL LETTER G WITH CEDILLA + 0x0136, //78 #LATIN CAPITAL LETTER K WITH CEDILLA + 0x012A, //79 #LATIN CAPITAL LETTER I WITH MACRON + 0x013B, //80 #LATIN CAPITAL LETTER L WITH CEDILLA + 0x0160, //81 #LATIN CAPITAL LETTER S WITH CARON + 0x0143, //82 #LATIN CAPITAL LETTER N WITH ACUTE + 0x0145, //83 #LATIN CAPITAL LETTER N WITH CEDILLA + 0x00D3, //84 #LATIN CAPITAL LETTER O WITH ACUTE + 0x014C, //85 #LATIN CAPITAL LETTER O WITH MACRON + 0x00D5, //86 #LATIN CAPITAL LETTER O WITH TILDE + 0x00D6, //87 #LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00D7, //88 #MULTIPLICATION SIGN + 0x0172, //89 #LATIN CAPITAL LETTER U WITH OGONEK + 0x0141, //90 #LATIN CAPITAL LETTER L WITH STROKE + 0x015A, //91 #LATIN CAPITAL LETTER S WITH ACUTE + 0x016A, //92 #LATIN CAPITAL LETTER U WITH MACRON + 0x00DC, //93 #LATIN CAPITAL LETTER U WITH DIAERESIS + 0x017B, //94 #LATIN CAPITAL LETTER Z WITH DOT ABOVE + 0x017D, //95 #LATIN CAPITAL LETTER Z WITH CARON + 0x00DF, //96 #LATIN SMALL LETTER SHARP S + 0x0105, //97 #LATIN SMALL LETTER A WITH OGONEK + 0x012F, //98 #LATIN SMALL LETTER I WITH OGONEK + 0x0101, //99 #LATIN SMALL LETTER A WITH MACRON + 0x0107, //100 #LATIN SMALL LETTER C WITH ACUTE + 0x00E4, //101 #LATIN SMALL LETTER A WITH DIAERESIS + 0x00E5, //102 #LATIN SMALL LETTER A WITH RING ABOVE + 0x0119, //103 #LATIN SMALL LETTER E WITH OGONEK + 0x0113, //104 #LATIN SMALL LETTER E WITH MACRON + 0x010D, //105 #LATIN SMALL LETTER C WITH CARON + 0x00E9, //106 #LATIN SMALL LETTER E WITH ACUTE + 0x017A, //107 #LATIN SMALL LETTER Z WITH ACUTE + 0x0117, //108 #LATIN SMALL LETTER E WITH DOT ABOVE + 0x0123, //109 #LATIN SMALL LETTER G WITH CEDILLA + 0x0137, //110 #LATIN SMALL LETTER K WITH CEDILLA + 0x012B, //111 #LATIN SMALL LETTER I WITH MACRON + 0x013C, //112 #LATIN SMALL LETTER L WITH CEDILLA + 0x0161, //113 #LATIN SMALL LETTER S WITH CARON + 0x0144, //114 #LATIN SMALL LETTER N WITH ACUTE + 0x0146, //115 #LATIN SMALL LETTER N WITH CEDILLA + 0x00F3, //116 #LATIN SMALL LETTER O WITH ACUTE + 0x014D, //117 #LATIN SMALL LETTER O WITH MACRON + 0x00F5, //118 #LATIN SMALL LETTER O WITH TILDE + 0x00F6, //119 #LATIN SMALL LETTER O WITH DIAERESIS + 0x00F7, //120 #DIVISION SIGN + 0x0173, //121 #LATIN SMALL LETTER U WITH OGONEK + 0x0142, //122 #LATIN SMALL LETTER L WITH STROKE + 0x015B, //123 #LATIN SMALL LETTER S WITH ACUTE + 0x016B, //124 #LATIN SMALL LETTER U WITH MACRON + 0x00FC, //125 #LATIN SMALL LETTER U WITH DIAERESIS + 0x017C, //126 #LATIN SMALL LETTER Z WITH DOT ABOVE + 0x017E, //127 #LATIN SMALL LETTER Z WITH CARON + 0x02D9 //128 #DOT ABOVE +}; + +//Table 1258 +static const int DRW_Table1258[] = { + 0x20AC, //1 #EURO SIGN + 0x00 , //2 #UNDEFINED + 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK + 0x0192, //4 #LATIN SMALL LETTER F WITH HOOK + 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK + 0x2026, //6 #HORIZONTAL ELLIPSIS + 0x2020, //7 #DAGGER + 0x2021, //8 #DOUBLE DAGGER + 0x02C6, //9 #MODIFIER LETTER CIRCUMFLEX ACCENT + 0x2030, //10 #PER MILLE SIGN + 0x00 , //11 #UNDEFINED + 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0x0152, //13 #LATIN CAPITAL LIGATURE OE + 0x00 , //14 #UNDEFINED + 0x00 , //15 #UNDEFINED + 0x00 , //16 #UNDEFINED + 0x00 , //17 #UNDEFINED + 0x2018, //18 #LEFT SINGLE QUOTATION MARK + 0x2019, //19 #RIGHT SINGLE QUOTATION MARK + 0x201C, //20 #LEFT DOUBLE QUOTATION MARK + 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK + 0x2022, //22 #BULLET + 0x2013, //23 #EN DASH + 0x2014, //24 #EM DASH + 0x02DC, //25 #SMALL TILDE + 0x2122, //26 #TRADE MARK SIGN + 0x00 , //27 #UNDEFINED + 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 0x0153, //29 #LATIN SMALL LIGATURE OE + 0x00 , //30 #UNDEFINED + 0x00 , //31 #UNDEFINED + 0x0178, //32 #LATIN CAPITAL LETTER Y WITH DIAERESIS + 0x00A0, //33 #NO-BREAK SPACE + 0x00A1, //34 #INVERTED EXCLAMATION MARK + 0x00A2, //35 #CENT SIGN + 0x00A3, //36 #POUND SIGN + 0x00A4, //37 #CURRENCY SIGN + 0x00A5, //38 #YEN SIGN + 0x00A6, //39 #BROKEN BAR + 0x00A7, //40 #SECTION SIGN + 0x00A8, //41 #DIAERESIS + 0x00A9, //42 #COPYRIGHT SIGN + 0x00AA, //43 #FEMININE ORDINAL INDICATOR + 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00AC, //45 #NOT SIGN + 0x00AD, //46 #SOFT HYPHEN + 0x00AE, //47 #REGISTERED SIGN + 0x00AF, //48 #MACRON + 0x00B0, //49 #DEGREE SIGN + 0x00B1, //50 #PLUS-MINUS SIGN + 0x00B2, //51 #SUPERSCRIPT TWO + 0x00B3, //52 #SUPERSCRIPT THREE + 0x00B4, //53 #ACUTE ACCENT + 0x00B5, //54 #MICRO SIGN + 0x00B6, //55 #PILCROW SIGN + 0x00B7, //56 #MIDDLE DOT + 0x00B8, //57 #CEDILLA + 0x00B9, //58 #SUPERSCRIPT ONE + 0x00BA, //59 #MASCULINE ORDINAL INDICATOR + 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00BC, //61 #VULGAR FRACTION ONE QUARTER + 0x00BD, //62 #VULGAR FRACTION ONE HALF + 0x00BE, //63 #VULGAR FRACTION THREE QUARTERS + 0x00BF, //64 #INVERTED QUESTION MARK + 0x00C0, //65 #LATIN CAPITAL LETTER A WITH GRAVE + 0x00C1, //66 #LATIN CAPITAL LETTER A WITH ACUTE + 0x00C2, //67 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x0102, //68 #LATIN CAPITAL LETTER A WITH BREVE + 0x00C4, //69 #LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00C5, //70 #LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00C6, //71 #LATIN CAPITAL LETTER AE + 0x00C7, //72 #LATIN CAPITAL LETTER C WITH CEDILLA + 0x00C8, //73 #LATIN CAPITAL LETTER E WITH GRAVE + 0x00C9, //74 #LATIN CAPITAL LETTER E WITH ACUTE + 0x00CA, //75 #LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00CB, //76 #LATIN CAPITAL LETTER E WITH DIAERESIS + 0x0300, //77 #COMBINING GRAVE ACCENT + 0x00CD, //78 #LATIN CAPITAL LETTER I WITH ACUTE + 0x00CE, //79 #LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00CF, //80 #LATIN CAPITAL LETTER I WITH DIAERESIS + 0x0110, //81 #LATIN CAPITAL LETTER D WITH STROKE + 0x00D1, //82 #LATIN CAPITAL LETTER N WITH TILDE + 0x0309, //83 #COMBINING HOOK ABOVE + 0x00D3, //84 #LATIN CAPITAL LETTER O WITH ACUTE + 0x00D4, //85 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x01A0, //86 #LATIN CAPITAL LETTER O WITH HORN + 0x00D6, //87 #LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00D7, //88 #MULTIPLICATION SIGN + 0x00D8, //89 #LATIN CAPITAL LETTER O WITH STROKE + 0x00D9, //90 #LATIN CAPITAL LETTER U WITH GRAVE + 0x00DA, //91 #LATIN CAPITAL LETTER U WITH ACUTE + 0x00DB, //92 #LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x00DC, //93 #LATIN CAPITAL LETTER U WITH DIAERESIS + 0x01AF, //94 #LATIN CAPITAL LETTER U WITH HORN + 0x0303, //95 #COMBINING TILDE + 0x00DF, //96 #LATIN SMALL LETTER SHARP S + 0x00E0, //97 #LATIN SMALL LETTER A WITH GRAVE + 0x00E1, //98 #LATIN SMALL LETTER A WITH ACUTE + 0x00E2, //99 #LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0103, //100 #LATIN SMALL LETTER A WITH BREVE + 0x00E4, //101 #LATIN SMALL LETTER A WITH DIAERESIS + 0x00E5, //102 #LATIN SMALL LETTER A WITH RING ABOVE + 0x00E6, //103 #LATIN SMALL LETTER AE + 0x00E7, //104 #LATIN SMALL LETTER C WITH CEDILLA + 0x00E8, //105 #LATIN SMALL LETTER E WITH GRAVE + 0x00E9, //106 #LATIN SMALL LETTER E WITH ACUTE + 0x00EA, //107 #LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00EB, //108 #LATIN SMALL LETTER E WITH DIAERESIS + 0x0301, //109 #COMBINING ACUTE ACCENT + 0x00ED, //110 #LATIN SMALL LETTER I WITH ACUTE + 0x00EE, //111 #LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00EF, //112 #LATIN SMALL LETTER I WITH DIAERESIS + 0x0111, //113 #LATIN SMALL LETTER D WITH STROKE + 0x00F1, //114 #LATIN SMALL LETTER N WITH TILDE + 0x0323, //115 #COMBINING DOT BELOW + 0x00F3, //116 #LATIN SMALL LETTER O WITH ACUTE + 0x00F4, //117 #LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x01A1, //118 #LATIN SMALL LETTER O WITH HORN + 0x00F6, //119 #LATIN SMALL LETTER O WITH DIAERESIS + 0x00F7, //120 #DIVISION SIGN + 0x00F8, //121 #LATIN SMALL LETTER O WITH STROKE + 0x00F9, //122 #LATIN SMALL LETTER U WITH GRAVE + 0x00FA, //123 #LATIN SMALL LETTER U WITH ACUTE + 0x00FB, //124 #LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00FC, //125 #LATIN SMALL LETTER U WITH DIAERESIS + 0x01B0, //126 #LATIN SMALL LETTER U WITH HORN + 0x20AB, //127 #DONG SIGN + 0x00FF //128 #LATIN SMALL LETTER Y WITH DIAERESIS +}; + +#endif // DRW_CPTABLES_H diff --git a/extlib/libdxfrw/intern/drw_dbg.cpp b/extlib/libdxfrw/intern/drw_dbg.cpp new file mode 100644 index 0000000..d999edf --- /dev/null +++ b/extlib/libdxfrw/intern/drw_dbg.cpp @@ -0,0 +1,164 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include "drw_dbg.h" + +DRW_dbg *DRW_dbg::instance= NULL; + +/*********private clases*************/ +class print_none { +public: + virtual void printS(std::string s){(void)s;} + virtual void printI(long long int i){(void)i;} + virtual void printUI(long long unsigned int i){(void)i;} + virtual void printD(double d){(void)d;} + virtual void printH(long long int i){(void)i;} + virtual void printB(int i){(void)i;} + virtual void printHL(int c, int s, int h){(void)c;(void)s;(void)h;} + virtual void printPT(double x, double y, double z){(void)x;(void)y;(void)z;} + print_none(){} + virtual ~print_none(){} +}; + +class print_debug : public print_none { +public: + virtual void printS(std::string s); + virtual void printI(long long int i); + virtual void printUI(long long unsigned int i); + virtual void printD(double d); + virtual void printH(long long int i); + virtual void printB(int i); + virtual void printHL(int c, int s, int h); + virtual void printPT(double x, double y, double z); + print_debug(); + virtual ~print_debug(){} +private: + std::ios_base::fmtflags flags; +}; + +/********* debug class *************/ +DRW_dbg *DRW_dbg::getInstance(){ + if (instance == NULL){ + instance = new DRW_dbg; + } + return instance; +} + +DRW_dbg::DRW_dbg(){ + level = NONE; + prClass = new print_none; + flags = std::cerr.flags(); +} + +void DRW_dbg::setLevel(LEVEL lvl){ + level = lvl; + delete prClass; + switch (level){ + case DEBUG: + prClass = new print_debug; + break; + default: + prClass = new print_none; + } +} + +DRW_dbg::LEVEL DRW_dbg::getLevel(){ + return level; +} + +void DRW_dbg::print(std::string s){ + prClass->printS(s); +} + +void DRW_dbg::print(int i){ + prClass->printI(i); +} + +void DRW_dbg::print(unsigned int i){ + prClass->printUI(i); +} + +void DRW_dbg::print(long long int i){ + prClass->printI(i); +} + +void DRW_dbg::print(long unsigned int i){ + prClass->printUI(i); +} + +void DRW_dbg::print(long long unsigned int i){ + prClass->printUI(i); +} + +void DRW_dbg::print(double d){ + prClass->printD(d); +} + +void DRW_dbg::printH(long long int i){ + prClass->printH(i); +} + +void DRW_dbg::printB(int i){ + prClass->printB(i); +} +void DRW_dbg::printHL(int c, int s, int h){ + prClass->printHL(c, s, h); +} + +void DRW_dbg::printPT(double x, double y, double z){ + prClass->printPT(x, y, z); +} + +print_debug::print_debug(){ + flags = std::cerr.flags(); +} + +void print_debug::printS(std::string s){ + std::cerr << s; +} + +void print_debug::printI(long long int i){ + std::cerr << i; +} + +void print_debug::printUI(long long unsigned int i){ + std::cerr << i; +} + +void print_debug::printD(double d){ + std::cerr << std::fixed << d; +} + +void print_debug::printH(long long i){ + std::cerr << "0x" << std::setw(2) << std::setfill('0'); + std::cerr << std::hex << i; + std::cerr.flags(flags); +} + +void print_debug::printB(int i){ + std::cerr << std::setw(8) << std::setfill('0'); + std::cerr << std::setbase(2) << i; + std::cerr.flags(flags); +} + +void print_debug::printHL(int c, int s, int h){ + std::cerr << c << '.' << s << '.'; + std::cerr << "0x" << std::setw(2) << std::setfill('0'); + std::cerr << std::hex << h; + std::cerr.flags(flags); +} + +void print_debug::printPT(double x, double y, double z){ + std::cerr << std::fixed << "x: " << x << ", y: " << y << ", z: "<< z; +} diff --git a/extlib/libdxfrw/intern/drw_dbg.h b/extlib/libdxfrw/intern/drw_dbg.h new file mode 100644 index 0000000..a494c9c --- /dev/null +++ b/extlib/libdxfrw/intern/drw_dbg.h @@ -0,0 +1,61 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DRW_DBG_H +#define DRW_DBG_H + +#include +#include +//#include + +#define DRW_DBGSL(a) DRW_dbg::getInstance()->setLevel(a) +#define DRW_DBGGL DRW_dbg::getInstance()->getLevel() +#define DRW_DBG(a) DRW_dbg::getInstance()->print(a) +#define DRW_DBGH(a) DRW_dbg::getInstance()->printH(a) +#define DRW_DBGB(a) DRW_dbg::getInstance()->printB(a) +#define DRW_DBGHL(a, b, c) DRW_dbg::getInstance()->printHL(a, b ,c) +#define DRW_DBGPT(a, b, c) DRW_dbg::getInstance()->printPT(a, b, c) + + +class print_none; + +class DRW_dbg { +public: + enum LEVEL { + NONE, + DEBUG + }; + void setLevel(LEVEL lvl); + LEVEL getLevel(); + static DRW_dbg *getInstance(); + void print(std::string s); + void print(int i); + void print(unsigned int i); + void print(long long int i); + void print(long unsigned int i); + void print(long long unsigned int i); + void print(double d); + void printH(long long int i); + void printB(int i); + void printHL(int c, int s, int h); + void printPT(double x, double y, double z); + +private: + DRW_dbg(); + static DRW_dbg *instance; + LEVEL level; + std::ios_base::fmtflags flags; + print_none* prClass; +}; + + +#endif // DRW_DBG_H diff --git a/extlib/libdxfrw/intern/drw_textcodec.cpp b/extlib/libdxfrw/intern/drw_textcodec.cpp new file mode 100644 index 0000000..673c79c --- /dev/null +++ b/extlib/libdxfrw/intern/drw_textcodec.cpp @@ -0,0 +1,535 @@ +#include "drw_textcodec.h" +#include +#include +#include +#include "../drw_base.h" +#include "drw_cptables.h" +#include "drw_cptable932.h" +#include "drw_cptable936.h" +#include "drw_cptable949.h" +#include "drw_cptable950.h" + +DRW_TextCodec::DRW_TextCodec() { + version = DRW::AC1021; + conv = new DRW_Converter(NULL, 0); +} + +DRW_TextCodec::~DRW_TextCodec() { + delete conv; +} + +void DRW_TextCodec::setVersion(int v, bool dxfFormat){ + if (v == DRW::AC1009 || v == DRW::AC1006) { + version = DRW::AC1009; + cp = "ANSI_1252"; + setCodePage(&cp, dxfFormat); + } else if (v == DRW::AC1012 || v == DRW::AC1014 + || v == DRW::AC1015 || v == DRW::AC1018) { + version = DRW::AC1015; +// if (cp.empty()) { //codepage not set, initialize + cp = "ANSI_1252"; + setCodePage(&cp, dxfFormat); +// } + } else { + version = DRW::AC1021; + if (dxfFormat) + cp = "UTF-8";//RLZ: can be UCS2 or UTF-16 16bits per char + else + cp = "UTF-16";//RLZ: can be UCS2 or UTF-16 16bits per char + setCodePage(&cp, dxfFormat); + } +} + +void DRW_TextCodec::setVersion(std::string *v, bool dxfFormat){ + std::string versionStr = *v; + if (versionStr == "AC1009" || versionStr == "AC1006") { + setVersion(DRW::AC1009, dxfFormat); + } else if (versionStr == "AC1012" || versionStr == "AC1014" + || versionStr == "AC1015" || versionStr == "AC1018") { + setVersion(DRW::AC1015, dxfFormat); + } + setVersion(DRW::AC1021, dxfFormat); +} + +void DRW_TextCodec::setCodePage(std::string *c, bool dxfFormat){ + cp = correctCodePage(*c); + delete conv; + if (version == DRW::AC1009 || version == DRW::AC1015) { + if (cp == "ANSI_874") + conv = new DRW_ConvTable(DRW_Table874, CPLENGHTCOMMON); + else if (cp == "ANSI_932") + conv = new DRW_Conv932Table(DRW_Table932, DRW_LeadTable932, + DRW_DoubleTable932, CPLENGHT932); + else if (cp == "ANSI_936") + conv = new DRW_ConvDBCSTable(DRW_Table936, DRW_LeadTable936, + DRW_DoubleTable936, CPLENGHT936); + else if (cp == "ANSI_949") + conv = new DRW_ConvDBCSTable(DRW_Table949, DRW_LeadTable949, + DRW_DoubleTable949, CPLENGHT949); + else if (cp == "ANSI_950") + conv = new DRW_ConvDBCSTable(DRW_Table950, DRW_LeadTable950, + DRW_DoubleTable950, CPLENGHT950); + else if (cp == "ANSI_1250") + conv = new DRW_ConvTable(DRW_Table1250, CPLENGHTCOMMON); + else if (cp == "ANSI_1251") + conv = new DRW_ConvTable(DRW_Table1251, CPLENGHTCOMMON); + else if (cp == "ANSI_1253") + conv = new DRW_ConvTable(DRW_Table1253, CPLENGHTCOMMON); + else if (cp == "ANSI_1254") + conv = new DRW_ConvTable(DRW_Table1254, CPLENGHTCOMMON); + else if (cp == "ANSI_1255") + conv = new DRW_ConvTable(DRW_Table1255, CPLENGHTCOMMON); + else if (cp == "ANSI_1256") + conv = new DRW_ConvTable(DRW_Table1256, CPLENGHTCOMMON); + else if (cp == "ANSI_1257") + conv = new DRW_ConvTable(DRW_Table1257, CPLENGHTCOMMON); + else if (cp == "ANSI_1258") + conv = new DRW_ConvTable(DRW_Table1258, CPLENGHTCOMMON); + else if (cp == "UTF-8") { //DXF older than 2007 are write in win codepages + cp = "ANSI_1252"; + conv = new DRW_Converter(NULL, 0); + } else + conv = new DRW_ConvTable(DRW_Table1252, CPLENGHTCOMMON); + } else { + if (dxfFormat) + conv = new DRW_Converter(NULL, 0);//utf16 to utf8 + else + conv = new DRW_ConvUTF16();//utf16 to utf8 + } +} + +std::string DRW_TextCodec::toUtf8(std::string s) { + return conv->toUtf8(&s); +} + +std::string DRW_TextCodec::fromUtf8(std::string s) { + return conv->fromUtf8(&s); +} + +std::string DRW_Converter::toUtf8(std::string *s) { + std::string result; + int j = 0; + unsigned int i= 0; + for (i=0; i < s->length(); i++) { + unsigned char c = s->at(i); + if (c < 0x80) { //ascii check for /U+???? + if (c == '\\' && i+6 < s->length() && s->at(i+1) == 'U' && s->at(i+2) == '+') { + result += s->substr(j,i-j); + result += encodeText(s->substr(i,7)); + i +=6; + j = i+1; + } + } else if (c < 0xE0 ) {//2 bits + i++; + } else if (c < 0xF0 ) {//3 bits + i +=2; + } else if (c < 0xF8 ) {//4 bits + i +=3; + } + } + result += s->substr(j); + + return result; +} + +std::string DRW_ConvTable::fromUtf8(std::string *s) { + std::string result; + bool notFound; + int code; + + int j = 0; + for (unsigned int i=0; i < s->length(); i++) { + unsigned char c = s->at(i); + if (c > 0x7F) { //need to decode + result += s->substr(j,i-j); + std::string part1 = s->substr(i,4); + int l; + code = decodeNum(part1, &l); + j = i+l; + i = j - 1; + notFound = true; + for (int k=0; ksubstr(j); + + return result; +} + +std::string DRW_ConvTable::toUtf8(std::string *s) { + std::string res; + std::string::iterator it; + for ( it=s->begin() ; it < s->end(); ++it ) { + unsigned char c = *it; + if (c < 0x80) { + //check for \U+ encoded text + if (c == '\\') { + if (it+6 < s->end() && *(it+1) == 'U' && *(it+2) == '+') { + res += encodeText(std::string(it, it+7)); + it +=6; + } else { + res +=c; //no \U+ encoded text write + } + } else + res +=c; //c!='\' ascii char write + } else {//end c < 0x80 + res += encodeNum(table[c-0x80]); //translate from table + } + } //end for + + return res; +} + +std::string DRW_Converter::encodeText(std::string stmp){ + int code; +#if defined(__APPLE__) + int Succeeded = sscanf (&( stmp.substr(3,4)[0]), "%x", &code ); + if ( !Succeeded || Succeeded == EOF ) + code = 0; +#else + std::istringstream sd(stmp.substr(3,4)); + sd >> std::hex >> code; +#endif + return encodeNum(code); +} + +std::string DRW_Converter::decodeText(int c){ + std::string res = "\\U+"; + std::string num; +#if defined(__APPLE__) + std::string str(16, '\0'); + snprintf (&(str[0]), 16, "%04X", c ); + num = str; +#else + std::stringstream ss; + ss << std::uppercase << std::setfill('0') << std::setw(4) << std::hex << c; + ss >> num; +#endif + res += num; + return res; +} + +std::string DRW_Converter::encodeNum(int c){ + unsigned char ret[5]; + if (c < 128) { // 0-7F US-ASCII 7 bits + ret[0] = c; + ret[1] = 0; + } else if (c < 0x800) { //80-07FF 2 bytes + ret[0] = 0xC0 | (c >> 6); + ret[1] = 0x80 | (c & 0x3f); + ret[2] = 0; + } else if (c< 0x10000) { //800-FFFF 3 bytes + ret[0] = 0xe0 | (c >> 12); + ret[1] = 0x80 | ((c >> 6) & 0x3f); + ret[2] = 0x80 | (c & 0x3f); + ret[3] = 0; + } else { //10000-10FFFF 4 bytes + ret[0] = 0xf0 | (c >> 18); + ret[1] = 0x80 | ((c >> 12) & 0x3f); + ret[2] = 0x80 | ((c >> 6) & 0x3f); + ret[3] = 0x80 | (c & 0x3f); + ret[4] = 0; + } + return std::string((char*)ret); +} + +/** 's' is a string with at least 4 bytes lenght +** returned 'b' is byte lenght of encoded char: 2,3 or 4 +**/ +int DRW_Converter::decodeNum(std::string s, int *b){ + int code= 0; + unsigned char c = s.at(0); + if ( (c& 0xE0) == 0xC0) { //2 bytes + code = ( c&0x1F)<<6; + code = (s.at(1) &0x3F) | code; + *b = 2; + } else if ( (c& 0xF0) == 0xE0) { //3 bytes + code = ( c&0x0F)<<12; + code = ((s.at(1) &0x3F)<<6) | code; + code = (s.at(2) &0x3F) | code; + *b = 3; + } else if ( (c& 0xF8) == 0xF0) { //4 bytes + code = ( c&0x07)<<18; + code = ((s.at(1) &0x3F)<<12) | code; + code = ((s.at(2) &0x3F)<<6) | code; + code = (s.at(3) &0x3F) | code; + *b = 4; + } + + return code; +} + + +std::string DRW_ConvDBCSTable::fromUtf8(std::string *s) { + std::string result; + bool notFound; + int code; + + int j = 0; + for (unsigned int i=0; i < s->length(); i++) { + unsigned char c = s->at(i); + if (c > 0x7F) { //need to decode + result += s->substr(j,i-j); + std::string part1 = s->substr(i,4); + int l; + code = decodeNum(part1, &l); + j = i+l; + i = j - 1; + notFound = true; + for (int k=0; k> 8; + d[1] = data & 0xFF; + d[2]= '\0'; + result += d; //translate from table + notFound = false; + break; + } + } + if (notFound) + result += decodeText(code); + } //direct conversion + } + result += s->substr(j); + + return result; +} + +std::string DRW_ConvDBCSTable::toUtf8(std::string *s) { + std::string res; + std::string::iterator it; + for ( it=s->begin() ; it < s->end(); ++it ) { + bool notFound = true; + unsigned char c = *it; + if (c < 0x80) { + notFound = false; + //check for \U+ encoded text + if (c == '\\') { + if (it+6 < s->end() && *(it+1) == 'U' && *(it+2) == '+') { + res += encodeText(std::string(it, it+7)); + it +=6; + } else { + res +=c; //no \U+ encoded text write + } + } else + res +=c; //c!='\' ascii char write + } else if(c == 0x80 ){//1 byte table + notFound = false; + res += encodeNum(0x20AC);//euro sign + } else {//2 bytes + ++it; + int code = (c << 8) | (unsigned char )(*it); + int sta = leadTable[c-0x81]; + int end = leadTable[c-0x80]; + for (int k=sta; klength(); i++) { + unsigned char c = s->at(i); + if (c > 0x7F) { //need to decode + result += s->substr(j,i-j); + std::string part1 = s->substr(i,4); + int l; + code = decodeNum(part1, &l); + j = i+l; + i = j - 1; + notFound = true; + // 1 byte table + if (code > 0xff60 && code < 0xFFA0) { + result += code - CPOFFSET932; //translate from table + notFound = false; + } + if (notFound && ( code<0xF8 || (code>0x390 && code<0x542) || + (code>0x200F && code<0x9FA1) || code>0xF928 )) { + for (int k=0; k> 8; + d[1] = data & 0xFF; + d[2]= '\0'; + result += d; //translate from table + notFound = false; + break; + } + } + } + if (notFound) + result += decodeText(code); + } //direct conversion + } + result += s->substr(j); + + return result; +} + +std::string DRW_Conv932Table::toUtf8(std::string *s) { + std::string res; + std::string::iterator it; + for ( it=s->begin() ; it < s->end(); ++it ) { + bool notFound = true; + unsigned char c = *it; + if (c < 0x80) { + notFound = false; + //check for \U+ encoded text + if (c == '\\') { + if (it+6 < s->end() && *(it+1) == 'U' && *(it+2) == '+') { + res += encodeText(std::string(it, it+7)); + it +=6; + } else { + res +=c; //no \U+ encoded text write + } + } else + res +=c; //c!='\' ascii char write + } else if(c > 0xA0 && c < 0xE0 ){//1 byte table + notFound = false; + res += encodeNum(c + CPOFFSET932); //translate from table + } else {//2 bytes + ++it; + int code = (c << 8) | (unsigned char )(*it); + int sta; + int end=0; + if (c > 0x80 && c < 0xA0) { + sta = DRW_LeadTable932[c-0x81]; + end = DRW_LeadTable932[c-0x80]; + } else if (c > 0xDF && c < 0xFD){ + sta = DRW_LeadTable932[c-0xC1]; + end = DRW_LeadTable932[c-0xC0]; + } + if (end > 0) { + for (int k=sta; kbegin() ; it < s->end(); ++it ) { + unsigned char c1 = *it; + unsigned char c2 = *(++it); + duint16 ch = (c2 <<8) | c1; + res +=encodeNum(ch); + } //end for + + return res; +} + +std::string DRW_TextCodec::correctCodePage(const std::string& s) { + //stringstream cause crash in OS/X, bug#3597944 + std::string cp=s; + transform(cp.begin(), cp.end(), cp.begin(), toupper); + //Latin/Thai + if (cp=="ANSI_874" || cp=="CP874" || cp=="ISO8859-11" || cp=="TIS-620") { + return "ANSI_874"; + //Central Europe and Eastern Europe + } else if (cp=="ANSI_1250" || cp=="CP1250" || cp=="ISO8859-2") { + return "ANSI_1250"; + //Cyrillic script + } else if (cp=="ANSI_1251" || cp=="CP1251" || cp=="ISO8859-5" || cp=="KOI8-R" || + cp=="KOI8-U" || cp=="IBM 866") { + return "ANSI_1251"; + //Western Europe + } else if (cp=="ANSI_1252" || cp=="CP1252" || cp=="LATIN1" || cp=="ISO-8859-1" || + cp=="CP819" || cp=="CSISO" || cp=="IBM819" || cp=="ISO_8859-1" || cp=="APPLE ROMAN" || + cp=="ISO8859-1" || cp=="ISO8859-15" || cp=="ISO-IR-100" || cp=="L1" || cp=="IBM 850") { + return "ANSI_1252"; + //Greek + } else if (cp=="ANSI_1253" || cp=="CP1253" || cp=="iso8859-7") { + return "ANSI_1253"; + //Turkish + } else if (cp=="ANSI_1254" || cp=="CP1254" || cp=="iso8859-9" || cp=="iso8859-3") { + return "ANSI_1254"; + //Hebrew + } else if (cp=="ANSI_1255" || cp=="CP1255" || cp=="iso8859-8") { + return "ANSI_1255"; + //Arabic + } else if (cp=="ANSI_1256" || cp=="CP1256" || cp=="ISO8859-6") { + return "ANSI_1256"; + //Baltic + } else if (cp=="ANSI_1257" || cp=="CP1257" || cp=="ISO8859-4" || cp=="ISO8859-10" || cp=="ISO8859-13") { + return "ANSI_1257"; + //Vietnamese + } else if (cp=="ANSI_1258" || cp=="CP1258") { + return "ANSI_1258"; + + //Japanese + } else if (cp=="ANSI_932" || cp=="SHIFT-JIS" || cp=="SHIFT_JIS" || cp=="CSSHIFTJIS" || + cp=="CSWINDOWS31J" || cp=="MS_KANJI" || cp=="X-MS-CP932" || cp=="X-SJIS" || + cp=="EUCJP" || cp=="EUC-JP" || cp=="CSEUCPKDFMTJAPANESE" || cp=="X-EUC" || + cp=="X-EUC-JP" || cp=="JIS7") { + return "ANSI_932"; + //Chinese PRC GBK (XGB) simplified + } else if (cp=="ANSI_936" || cp=="GBK" || cp=="GB2312" || cp=="CHINESE" || cp=="CN-GB" || + cp=="CSGB2312" || cp=="CSGB231280" || cp=="CSISO58BG231280" || + cp=="GB_2312-80" || cp=="GB231280" || cp=="GB2312-80" || + cp=="ISO-IR-58" || cp=="GB18030") { + return "ANSI_936"; + //Korean + } else if (cp=="ANSI_949" || cp=="EUCKR") { + return "ANSI_949"; + //Chinese Big5 (Taiwan, Hong Kong SAR) + } else if (cp=="ANSI_950" || cp=="BIG5" || cp=="CN-BIG5" || cp=="CSBIG5" || + cp=="X-X-BIG5" || cp=="BIG5-HKSCS") { + return "ANSI_950"; + +//celtic +/* } else if (cp=="ISO8859-14") { + return "ISO8859-14"; + } else if (cp=="TSCII") { + return "TSCII"; //tamil + }*/ + + } else if (cp=="UTF-8" || cp=="UTF8" || cp=="UTF8-BIT") { + return "UTF-8"; + } else if (cp=="UTF-16" || cp=="UTF16" || cp=="UTF16-BIT") { + return "UTF-16"; + } + + return "ANSI_1252"; +} diff --git a/extlib/libdxfrw/intern/drw_textcodec.h b/extlib/libdxfrw/intern/drw_textcodec.h new file mode 100644 index 0000000..0a6d39d --- /dev/null +++ b/extlib/libdxfrw/intern/drw_textcodec.h @@ -0,0 +1,91 @@ +#ifndef DRW_TEXTCODEC_H +#define DRW_TEXTCODEC_H + +#include + +class DRW_Converter; + +class DRW_TextCodec +{ +public: + DRW_TextCodec(); + ~DRW_TextCodec(); + std::string fromUtf8(std::string s); + std::string toUtf8(std::string s); + int getVersion(){return version;} + void setVersion(std::string *v, bool dxfFormat); + void setVersion(int v, bool dxfFormat); + void setCodePage(std::string *c, bool dxfFormat); + void setCodePage(std::string c, bool dxfFormat){setCodePage(&c, dxfFormat);} + std::string getCodePage(){return cp;} + +private: + std::string correctCodePage(const std::string& s); + +private: + int version; + std::string cp; + DRW_Converter *conv; +}; + +class DRW_Converter +{ +public: + DRW_Converter(const int *t, int l){table = t; + cpLenght = l;} + virtual ~DRW_Converter(){} + virtual std::string fromUtf8(std::string *s) {return *s;} + virtual std::string toUtf8(std::string *s); + std::string encodeText(std::string stmp); + std::string decodeText(int c); + std::string encodeNum(int c); + int decodeNum(std::string s, int *b); + const int *table; + int cpLenght; +}; + +class DRW_ConvUTF16 : public DRW_Converter { +public: + DRW_ConvUTF16():DRW_Converter(NULL, 0) {} + virtual std::string fromUtf8(std::string *s); + virtual std::string toUtf8(std::string *s); +}; + +class DRW_ConvTable : public DRW_Converter { +public: + DRW_ConvTable(const int *t, int l):DRW_Converter(t, l) {} + virtual std::string fromUtf8(std::string *s); + virtual std::string toUtf8(std::string *s); +}; + +class DRW_ConvDBCSTable : public DRW_Converter { +public: + DRW_ConvDBCSTable(const int *t, const int *lt, const int dt[][2], int l):DRW_Converter(t, l) { + leadTable = lt; + doubleTable = dt; + } + + virtual std::string fromUtf8(std::string *s); + virtual std::string toUtf8(std::string *s); +private: + const int *leadTable; + const int (*doubleTable)[2]; + +}; + +class DRW_Conv932Table : public DRW_Converter { +public: + DRW_Conv932Table(const int *t, const int *lt, const int dt[][2], int l):DRW_Converter(t, l) { + leadTable = lt; + doubleTable = dt; + } + + virtual std::string fromUtf8(std::string *s); + virtual std::string toUtf8(std::string *s); +private: + const int *leadTable; + const int (*doubleTable)[2]; + +}; + +#endif // DRW_TEXTCODEC_H diff --git a/extlib/libdxfrw/intern/dwgbuffer.cpp b/extlib/libdxfrw/intern/dwgbuffer.cpp new file mode 100644 index 0000000..a8d9b68 --- /dev/null +++ b/extlib/libdxfrw/intern/dwgbuffer.cpp @@ -0,0 +1,923 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + + +#include "dwgbuffer.h" +#include "../libdwgr.h" +#include "drw_textcodec.h" +#include "drw_dbg.h" +//#include +/*#include +#include +#include +#include "dwgreader.h"*/ +//#include "dxfwriter.h" + + +//#define FIRSTHANDLE 48 + +/*enum sections { + secUnknown, + secHeader, + secTables, + secBlocks, + secEntities, + secObjects +};*/ + +static unsigned int crctable[256]= { +0x0000,0xC0C1,0xC181,0x0140,0xC301,0x03C0,0x0280,0xC241, +0xC601,0x06C0,0x0780,0xC741,0x0500,0xC5C1,0xC481,0x0440, +0xCC01,0x0CC0,0x0D80,0xCD41,0x0F00,0xCFC1,0xCE81,0x0E40, +0x0A00,0xCAC1,0xCB81,0x0B40,0xC901,0x09C0,0x0880,0xC841, +0xD801,0x18C0,0x1980,0xD941,0x1B00,0xDBC1,0xDA81,0x1A40, +0x1E00,0xDEC1,0xDF81,0x1F40,0xDD01,0x1DC0,0x1C80,0xDC41, +0x1400,0xD4C1,0xD581,0x1540,0xD701,0x17C0,0x1680,0xD641, +0xD201,0x12C0,0x1380,0xD341,0x1100,0xD1C1,0xD081,0x1040, +0xF001,0x30C0,0x3180,0xF141,0x3300,0xF3C1,0xF281,0x3240, +0x3600,0xF6C1,0xF781,0x3740,0xF501,0x35C0,0x3480,0xF441, +0x3C00,0xFCC1,0xFD81,0x3D40,0xFF01,0x3FC0,0x3E80,0xFE41, +0xFA01,0x3AC0,0x3B80,0xFB41,0x3900,0xF9C1,0xF881,0x3840, +0x2800,0xE8C1,0xE981,0x2940,0xEB01,0x2BC0,0x2A80,0xEA41, +0xEE01,0x2EC0,0x2F80,0xEF41,0x2D00,0xEDC1,0xEC81,0x2C40, +0xE401,0x24C0,0x2580,0xE541,0x2700,0xE7C1,0xE681,0x2640, +0x2200,0xE2C1,0xE381,0x2340,0xE101,0x21C0,0x2080,0xE041, +0xA001,0x60C0,0x6180,0xA141,0x6300,0xA3C1,0xA281,0x6240, +0x6600,0xA6C1,0xA781,0x6740,0xA501,0x65C0,0x6480,0xA441, +0x6C00,0xACC1,0xAD81,0x6D40,0xAF01,0x6FC0,0x6E80,0xAE41, +0xAA01,0x6AC0,0x6B80,0xAB41,0x6900,0xA9C1,0xA881,0x6840, +0x7800,0xB8C1,0xB981,0x7940,0xBB01,0x7BC0,0x7A80,0xBA41, +0xBE01,0x7EC0,0x7F80,0xBF41,0x7D00,0xBDC1,0xBC81,0x7C40, +0xB401,0x74C0,0x7580,0xB541,0x7700,0xB7C1,0xB681,0x7640, +0x7200,0xB2C1,0xB381,0x7340,0xB101,0x71C0,0x7080,0xB041, +0x5000,0x90C1,0x9181,0x5140,0x9301,0x53C0,0x5280,0x9241, +0x9601,0x56C0,0x5780,0x9741,0x5500,0x95C1,0x9481,0x5440, +0x9C01,0x5CC0,0x5D80,0x9D41,0x5F00,0x9FC1,0x9E81,0x5E40, +0x5A00,0x9AC1,0x9B81,0x5B40,0x9901,0x59C0,0x5880,0x9841, +0x8801,0x48C0,0x4980,0x8941,0x4B00,0x8BC1,0x8A81,0x4A40, +0x4E00,0x8EC1,0x8F81,0x4F40,0x8D01,0x4DC0,0x4C80,0x8C41, +0x4400,0x84C1,0x8581,0x4540,0x8701,0x47C0,0x4680,0x8641, +0x8201,0x42C0,0x4380,0x8341,0x4100,0x81C1,0x8081,0x4040 }; + +static unsigned int crc32Table[256] ={ +0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, +0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, +0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, +0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, +0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, +0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, +0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, +0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, +0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, +0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, +0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, +0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, +0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, +0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, +0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, +0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, +0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, +0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, +0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, +0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, +0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, +0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, +0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, +0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, +0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, +0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, +0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, +0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, +0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, +0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, +0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, +0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d}; + +union typeCast { + char buf[8]; + duint16 i16; + duint32 i32; + duint64 i64; + ddouble64 d64; +}; + +bool dwgFileStream::setPos(duint64 p){ + if (p >= sz) + return false; + + stream->seekg(p); + return stream->good(); +} + +bool dwgFileStream::read(duint8* s, duint64 n){ + stream->read (reinterpret_cast(s),n); + return stream->good(); +} + +bool dwgCharStream::setPos(duint64 p){ + if (p > size()) { + isOk = false; + return false; + } + + pos = p; + return true; +} + +bool dwgCharStream::read(duint8* s, duint64 n){ + if ( n > (sz - pos) ) { + isOk = false; + return false; + } + for (duint64 i=0; isize(); + bitPos = 0; +} + +dwgBuffer::dwgBuffer( const dwgBuffer& org ){ + filestr = org.filestr->clone(); + decoder = org.decoder; + maxSize = filestr->size(); + currByte = org.currByte; + bitPos = org.bitPos; +} + +dwgBuffer& dwgBuffer::operator=( const dwgBuffer& org ){ + filestr = org.filestr->clone(); + decoder = org.decoder; + maxSize = filestr->size(); + currByte = org.currByte; + bitPos = org.bitPos; + return *this; +} + +dwgBuffer::~dwgBuffer(){ + delete filestr; +} + +/**Gets the current byte position in buffer **/ +duint64 dwgBuffer::getPosition(){ + if (bitPos != 0) + return filestr->getPos() -1; + return filestr->getPos(); + } + +/**Sets the buffer position in pos byte, reset the bit position **/ +bool dwgBuffer::setPosition(duint64 pos){ + bitPos = 0; +/* if (pos>=maxSize) + return false;*/ + return filestr->setPos(pos); +// return true; +} + +//RLZ: Fails if ... ??? +void dwgBuffer::setBitPos(duint8 pos){ + if (pos>7) + return; + if (pos != 0 && bitPos == 0){ + duint8 buffer; + filestr->read (&buffer,1); + currByte = buffer; + } + if (pos == 0 && bitPos != 0){//reset current byte + filestr->setPos(filestr->getPos()-1); + } + bitPos = pos; +} + +bool dwgBuffer::moveBitPos(dint32 size){ + if (size == 0) return true; + + dint32 b= size + bitPos; + filestr->setPos(getPosition() + (b >> 3) ); + bitPos = b & 7; + + if (bitPos != 0){ + filestr->read (&currByte,1); + } + return filestr->good(); +} + +/**Reads one Bit returns a char with value 0/1 (B) **/ +duint8 dwgBuffer::getBit(){ + duint8 buffer; + duint8 ret = 0; + if (bitPos == 0){ + filestr->read (&buffer,1); + currByte = buffer; + } + + ret = (currByte >> (7 - bitPos) & 1); + bitPos +=1; + if (bitPos == 8) + bitPos = 0; + + return ret; +} + +/**Reads one Bit returns a bool value 0==false 1==true (B) **/ +bool dwgBuffer::getBoolBit(){ + return (getBit() != 0); +} + +/**Reads two Bits returns a char (BB) **/ +duint8 dwgBuffer::get2Bits(){ + duint8 buffer; + duint8 ret = 0; + if (bitPos == 0){ + filestr->read (&buffer,1); + currByte = buffer; + } + + bitPos +=2; + if (bitPos < 9) + ret = currByte >>(8 - bitPos); + else {//read one bit per byte + ret = currByte << 1; + filestr->read (&buffer,1); + currByte = buffer; + bitPos = 1; + ret = ret | currByte >> 7; + } + if (bitPos == 8) + bitPos = 0; + ret = ret & 3; + return ret; +} + +/**Reads thee Bits returns a char (3B) **/ +//RLZ: todo verify this +duint8 dwgBuffer::get3Bits(){ + duint8 buffer; + duint8 ret = 0; + if (bitPos == 0){ + filestr->read (&buffer,1); + currByte = buffer; + } + + bitPos +=3; + if (bitPos < 9) + ret = currByte >>(8 - bitPos); + else {//read one bit per byte + ret = currByte << 1; + filestr->read (&buffer,1); + currByte = buffer; + bitPos = 1; + ret = ret | currByte >> 7; + } + if (bitPos == 8) + bitPos = 0; + ret = ret & 7; + return ret; +} + +/**Reads tree Bits returns a char (3B) for R24 **/ +//to be written + +/**Reads compresed Short (max. 16 + 2 bits) little-endian order, returns a UNsigned 16 bits (BS) **/ +duint16 dwgBuffer::getBitShort(){ + duint8 b = get2Bits(); + if (b == 0) + return getRawShort16(); + else if (b== 1) + return getRawChar8(); + else if (b == 2) + return 0; + else + return 256; +} +/**Reads compresed Short (max. 16 + 2 bits) little-endian order, returns a signed 16 bits (BS) **/ +dint16 dwgBuffer::getSBitShort(){ + duint8 b = get2Bits(); + if (b == 0) + return (dint16)getRawShort16(); + else if (b== 1) + return (dint16)getRawChar8(); + else if (b == 2) + return 0; + else + return 256; +} + +/**Reads compresed 32 bits Int (max. 32 + 2 bits) little-endian order, returns a signed 32 bits (BL) **/ +//to be written +dint32 dwgBuffer::getBitLong(){ + dint8 b = get2Bits(); + if (b == 0) + return getRawLong32(); + else if (b== 1) + return getRawChar8(); + else //if (b == 2) + return 0; +} + +/**Reads compresed 64 bits Int (max. 56 + 3 bits) little-endian order, returns a unsigned 64 bits (BLL) **/ +duint64 dwgBuffer::getBitLongLong(){ + dint8 b = get3Bits(); + duint64 ret=0; + for (duint8 i=0; iread (buffer,8); + } + double* ret = reinterpret_cast( buffer ); + return *ret; + } + // if (b == 2) + return 0.0; +} + +/**Reads 3 compresed Double (max. 64 + 2 bits) returns a DRW_Coord of floating point double of 64 bits (3BD) **/ +DRW_Coord dwgBuffer::get3BitDouble(){ + DRW_Coord crd; + crd.x = getBitDouble(); + crd.y = getBitDouble(); + crd.z = getBitDouble(); + return crd; +} + +/**Reads raw char 8 bits returns a unsigned char (RC) **/ +duint8 dwgBuffer::getRawChar8(){ + duint8 ret; + duint8 buffer; + filestr->read (&buffer,1); + if (bitPos == 0) + return buffer; + else { + ret = currByte << bitPos; + currByte = buffer; + ret = ret | (currByte >>(8 - bitPos)); + } + return ret; +} + +/**Reads raw short 16 bits little-endian order, returns a unsigned short (RS) **/ +duint16 dwgBuffer::getRawShort16(){ + duint8 buffer[2]; + duint16 ret; + + filestr->read (buffer,2); + if (bitPos == 0) { + /* no offset directly swap bytes for little-endian */ + ret = (buffer[1] << 8) | (buffer[0] & 0x00FF); + } else { + ret = (buffer[0] << 8) | (buffer[1] & 0x00FF); + /* apply offset */ + ret = ret >> (8 - bitPos); + ret = ret | (currByte << (8 + bitPos)); + currByte = buffer[1]; + /* swap bytes for little-endian */ + ret = (ret << 8) | (ret >> 8); + } + return ret; +} + +/**Reads raw double IEEE standard 64 bits returns a double (RD) **/ +double dwgBuffer::getRawDouble(){ + duint8 buffer[8]; + if (bitPos == 0) + filestr->read (buffer,8); + else { + for (int i = 0; i < 8; i++) + buffer[i] = getRawChar8(); + } + double* nOffset = reinterpret_cast( buffer ); + return *nOffset; +} + +/**Reads 2 raw double IEEE standard 64 bits returns a DRW_Coord of floating point double 64 bits (2RD) **/ +DRW_Coord dwgBuffer::get2RawDouble(){ + DRW_Coord crd; + crd.x = getRawDouble(); + crd.y = getRawDouble(); + return crd; +} + + +/**Reads raw int 32 bits little-endian order, returns a unsigned int (RL) **/ +duint32 dwgBuffer::getRawLong32(){ + duint16 tmp1 = getRawShort16(); + duint16 tmp2 = getRawShort16(); + duint32 ret = (tmp2 << 16) | (tmp1 & 0x0000FFFF); + + return ret; +} + +/**Reads raw int 64 bits little-endian order, returns a unsigned long long (RLL) **/ +duint64 dwgBuffer::getRawLong64(){ + duint32 tmp1 = getRawLong32(); + duint64 tmp2 = getRawLong32(); + duint64 ret = (tmp2 << 32) | (tmp1 & 0x00000000FFFFFFFF); + + return ret; +} + +/**Reads modular unsigner int, char based, compresed form, little-endian order, returns a unsigned int (U-MC) **/ +duint32 dwgBuffer::getUModularChar(){ + std::vector buffer; + duint32 result =0; + for (int i=0; i<4;i++){ + duint8 b= getRawChar8(); + buffer.push_back(b & 0x7F); + if (! (b & 0x80)) + break; + } + int offset = 0; + for (unsigned int i=0; i buffer; + dint32 result =0; + for (int i=0; i<4;i++){ + duint8 b= getRawChar8(); + buffer.push_back(b & 0x7F); + if (! (b & 0x80)) + break; + } + dint8 b= buffer.back(); + if (b & 0x40) { + negative = true; + buffer.pop_back(); + buffer.push_back(b & 0x3F); + } + + int offset = 0; + for (unsigned int i=0; i buffer; + dint32 result =0; + for (int i=0; i<2;i++){ + duint16 b= getRawShort16(); + buffer.push_back(b & 0x7FFF); + if (! (b & 0x8000)) + break; + } + + //only positive ? +/* dint8 b= buffer.back(); + if (! (b & 0x40)) { + negative = true; + buffer.pop_back(); + buffer.push_back(b & 0x3F); + }*/ + + int offset = 0; + for (unsigned int i=0; i> 4) & 0x0F; + hl.size = data & 0x0F; + hl.ref=0; + for (int i=0; i< hl.size;i++){ + hl.ref = (hl.ref << 8) | getRawChar8(); + } + return hl; +} + +dwgHandle dwgBuffer::getOffsetHandle(duint32 href){ //H + dwgHandle hl = getHandle(); + + if (hl.code > 5){ + if (hl.code == 0x0C) + hl.ref = href - hl.ref; + else if (hl.code == 0x0A) + hl.ref = href + hl.ref; + else if (hl.code == 0x08) + hl.ref = href - 1; + else if (hl.code == 0x06) + hl.ref = href + 1; +//all are soft pointer reference change to 7 (without offset) + hl.code = 7; + } + return hl; +} + +//internal until 2004 +std::string dwgBuffer::get8bitStr(){ + duint16 textSize = getBitShort(); + if (textSize == 0) + return std::string(); + duint8 *tmpBuffer = new duint8[textSize]; + bool good = getBytes(tmpBuffer, textSize); + if (!good) + return std::string(); + +/* filestr->read (buffer,textSize); + if (!filestr->good()) + return std::string(); + + duint8 tmp; + if (bitPos != 0){ + for (int i=0; i> (8 - bitPos)); + currByte = tmp; + } + }*/ + std::string str(reinterpret_cast(tmpBuffer), textSize); + delete[]tmpBuffer; + + return str; +} + +//internal since 2007 //pending: are 2 bytes null terminated?? +//nullTerm = true if string are 2 bytes null terminated from the stream +std::string dwgBuffer::get16bitStr(duint16 textSize, bool nullTerm){ + if (textSize == 0) + return std::string(); + textSize *=2; + duint16 ts = textSize; + if (nullTerm) + ts += 2; + duint8 *tmpBuffer = new duint8[textSize + 2]; + bool good = getBytes(tmpBuffer, ts); + if (!good) + return std::string(); + if (!nullTerm) { + tmpBuffer[textSize] = '\0'; + tmpBuffer[textSize + 1] = '\0'; + } + std::string str(reinterpret_cast(tmpBuffer), ts); + delete[]tmpBuffer; + + return str; +} + +//T 8 bit text converted from codepage to utf8 +std::string dwgBuffer::getCP8Text(){ + std::string strData; + strData = get8bitStr();//RLZ correct these function + if (decoder == NULL) + return strData; + + return decoder->toUtf8(strData); +} + +//TU unicode 16 bit (UCS) text converted to utf8 +/**Reads 2-bytes char (UCS2, NULL terminated) and convert to std::string (only for Latin-1) + ts= total input size in bytes. +**/ +std::string dwgBuffer::getUCSStr(duint16 ts){ + std::string strData; + if (ts<4) //at least 1 char + return std::string(); + strData = get16bitStr(ts/2, false); + if (decoder == NULL) + return strData; + + return decoder->toUtf8(strData); +} + +//TU unicode 16 bit (UCS) text converted to utf8 +//nullTerm = true if string are 2 bytes null terminated from the stream +std::string dwgBuffer::getUCSText(bool nullTerm){ + std::string strData; + duint16 ts = getBitShort(); + if (ts == 0) + return std::string(); + + strData = get16bitStr(ts, nullTerm); + if (decoder == NULL) + return strData; + + return decoder->toUtf8(strData); +} + +//RLZ: read a T or TU if version is 2007+ +//nullTerm = true if string are 2 bytes null terminated from the stream +std::string dwgBuffer::getVariableText(DRW::Version v, bool nullTerm){//TV + if (v > DRW::AC1018) + return getUCSText(nullTerm); + return getCP8Text(); +} +duint16 dwgBuffer::getObjType(DRW::Version v){//OT + if (v > DRW::AC1021) { + duint8 b = get2Bits(); + if (b == 0) + return getRawChar8(); + else if (b== 1){ + return (getRawChar8() + 0x01F0); + } else //b == 2 + return getRawShort16(); + } + return getBitShort(); +} + +/* Bit Extrusion +* For R2000+, this is a single bit, If the single bit is 1, +* the extrusion value is assumed to be 0,0,1 and no explicit +* extrusion is stored. If the single bit is 0, then it will +* be followed by 3BD. +* For R13-R14 this is 3BD. +*/ +DRW_Coord dwgBuffer::getExtrusion(bool b_R2000_style) { + DRW_Coord ext(0.0,0.0,1.0); + if ( b_R2000_style ) + /* If the bit is one, the extrusion value is assumed to be 0,0,1*/ + if ( getBit() == 1 ) + return ext; + /*R13-R14 or bit == 0*/ + ext.x = getBitDouble(); + ext.y = getBitDouble(); + ext.z = getBitDouble(); + return ext; +} + +/**Reads compresed Double with default (max. 64 + 2 bits) returns a floating point double of 64 bits (DD) **/ +double dwgBuffer::getDefaultDouble(double d){ + dint8 b = get2Bits(); + if (b == 0) + return d; + else if (b == 1){ + duint8 buffer[4]; + char *tmp; + if (bitPos != 0) { + for (int i = 0; i < 4; i++) + buffer[i] = getRawChar8(); + } else { + filestr->read (buffer,4); + } + tmp = reinterpret_cast(&d); + for (int i = 0; i < 4; i++) + tmp[i] = buffer[i]; + double ret = *reinterpret_cast( tmp ); + return ret; + } else if (b == 2){ + duint8 buffer[6]; + char *tmp; + if (bitPos != 0) { + for (int i = 0; i < 6; i++) + buffer[i] = getRawChar8(); + } else { + filestr->read (buffer,6); + } + tmp = reinterpret_cast(&d); + for (int i = 2; i < 6; i++) + tmp[i-2] = buffer[i]; + tmp[4] = buffer[0]; + tmp[5] = buffer[1]; + double ret = *reinterpret_cast( tmp ); + return ret; + } + // if (b == 3) return a full raw double + return getRawDouble(); +} + + +/* BitThickness +* For R13-R14, this is a BD. +* For R2000+, this is a single bit, If the bit is one, +* the thickness value is assumed to be 0.0, if not a BD follow +*/ +double dwgBuffer::getThickness(bool b_R2000_style) { + if ( b_R2000_style ) + /* If the bit is one, the thickness value is assumed to be 0.0.*/ + if ( getBit() == 1 ) + return 0.0; + /*R13-R14 or bit == 0*/ + return getBitDouble(); +} + +/* CmColor (CMC) +* For R15 and earlier call directly BS as ACIS color. +* For R2004+, can be CMC or ENC +* RGB value, first 4bits 0xC0 => ByLayer, 0xC1 => ByBlock, 0xC2 => RGB, 0xC3 => last 4 are ACIS +*/ +duint32 dwgBuffer::getCmColor(DRW::Version v) { + if (v < DRW::AC1018) //2000- + return getSBitShort(); + duint16 idx = getBitShort(); + duint32 rgb = getBitLong(); + duint8 cb = getRawChar8(); + duint8 type = rgb >> 24; + DRW_DBG("\ntype COLOR: "); DRW_DBGH(type); + DRW_DBG("\nindex COLOR: "); DRW_DBGH(idx); + DRW_DBG("\nRGB COLOR: "); DRW_DBGH(rgb); + DRW_DBG("\nbyte COLOR: "); DRW_DBGH(cb); + if (cb&1){ + std::string colorName = getVariableText(v, false); + DRW_DBG("\ncolorName: "); DRW_DBG(colorName); + } + if (cb&2){ + std::string bookName = getVariableText(v, false); + DRW_DBG("\nbookName: "); DRW_DBG(bookName); + } + switch (type) { + case 0xC0: + return 256;//ByLayer + break; + case 0xC1: + return 0;//ByBlock + break; + case 0xC2: + return 256;//RGB RLZ TODO + break; + case 0xC3: + return rgb&0xFF;//ACIS + break; + default: + break; + } + //check cb if strings follows RLZ TODO + return 256; //default return ByLayer +} + +/* EnColor (ENC) +* For R15 and earlier call directly BS as ACIS color. +* For R2004+, can be CMC or ENC +* RGB value, first 4bits 0xC0 => ByLayer, 0xC1 => ByBlock, 0xC2 => RGB, 0xC3 => last 4 are ACIS +*/ +duint32 dwgBuffer::getEnColor(DRW::Version v) { + if (v < DRW::AC1018) //2000- + return getSBitShort(); + duint32 rgb = 0; + duint32 cb = 0; + duint16 idx = getBitShort(); + DRW_DBG("idx reads COLOR: "); DRW_DBGH(idx); + duint16 flags = idx>>8; + idx = idx & 0x1FF; //RLZ: warning this is correct? + DRW_DBG("\nflag COLOR: "); DRW_DBGH(flags); + DRW_DBG(", index COLOR: "); DRW_DBGH(idx); +// if (flags & 0x80) { +// rgb = getBitLong(); +// DRW_DBG("\nRGB COLOR: "); DRW_DBGH(rgb); +// } + if (flags & 0x20) { + cb = getBitLong(); + DRW_DBG("\nTransparency COLOR: "); DRW_DBGH(cb); + } + if (flags & 0x40) + DRW_DBG("\nacdbColor COLOR are present"); + else { + if (flags & 0x80) { + rgb = getBitLong(); + DRW_DBG("\nRGB COLOR: "); DRW_DBGH(rgb); + } + } + +/* if (flags & 0x80) + return getBitLong();*/ + + return idx; //default return ByLayer +} + + +/**Reads raw short 16 bits big-endian order, returns a unsigned short crc & size **/ +duint16 dwgBuffer::getBERawShort16(){ + char buffer[2]; + buffer[0] = getRawChar8(); + buffer[1] = getRawChar8(); + duint16 size = (buffer[0] << 8) | (buffer[1] & 0xFF); + return size; +} + +/* reads "size" bytes and stores in "buf" return false if fail */ +bool dwgBuffer::getBytes(unsigned char *buf, int size){ + duint8 tmp; + filestr->read (buf,size); + if (!filestr->good()) + return false; + + if (bitPos != 0){ + for (int i=0; i> (8 - bitPos)); + currByte = tmp; + } + } + return true; +} + +duint16 dwgBuffer::crc8(duint16 dx,dint32 start,dint32 end){ + int pos = filestr->getPos(); + filestr->setPos(start); + int n = end-start; + duint8 *tmpBuf = new duint8[n]; + duint8 *p = tmpBuf; + filestr->read (tmpBuf,n); + filestr->setPos(pos); + if (!filestr->good()) + return 0; + + duint8 al; + + while (n-- > 0) { + al = (duint8)((*p) ^ ((dint8)(dx & 0xFF))); + dx = (dx>>8) & 0xFF; + dx = dx ^ crctable[al & 0xFF]; + p++; + } + delete[]tmpBuf; + return(dx); +} + +duint32 dwgBuffer::crc32(duint32 seed,dint32 start,dint32 end){ + int pos = filestr->getPos(); + filestr->setPos(start); + int n = end-start; + duint8 *tmpBuf = new duint8[n]; + duint8 *p = tmpBuf; + filestr->read (tmpBuf,n); + filestr->setPos(pos); + if (!filestr->good()) + return 0; + + duint32 invertedCrc = ~seed; + while (n-- > 0) { + duint8 data = *p++; + invertedCrc = (invertedCrc >> 8) ^ crc32Table[(invertedCrc ^ data) & 0xff]; + } + delete[]tmpBuf; + return ~invertedCrc; +} + + +/*std::string dwgBuffer::getBytes(int size){ + char buffer[size]; + char tmp; + filestr->read (buffer,size); + if (!filestr->good()) + return NULL; + + if (bitPos != 0){ + for (int i=0; i<=size;i++){ + tmp = buffer[i]; + buffer[i] = (currByte << bitPos) | (tmp >> (8 - bitPos)); + currByte = tmp; + } + } + std::string st; + for (int i=0; i. ** +******************************************************************************/ + +#ifndef DWGBUFFER_H +#define DWGBUFFER_H + +#include +#include +#include "../drw_base.h" + +class DRW_Coord; +class DRW_TextCodec; + +class dwgBasicStream{ +protected: + dwgBasicStream(){} +public: + virtual ~dwgBasicStream(){} + virtual bool read(duint8* s, duint64 n) = 0; + virtual duint64 size() = 0; + virtual duint64 getPos() = 0; + virtual bool setPos(duint64 p) = 0; + virtual bool good() = 0; + virtual dwgBasicStream* clone() = 0; +}; + +class dwgFileStream: public dwgBasicStream{ +public: + dwgFileStream(std::ifstream *s){ + stream =s; + stream->seekg (0, std::ios::end); + sz = stream->tellg(); + stream->seekg(0, std::ios_base::beg); + } + virtual ~dwgFileStream(){} + virtual bool read(duint8* s, duint64 n); + virtual duint64 size(){return sz;} + virtual duint64 getPos(){return stream->tellg();} + virtual bool setPos(duint64 p); + virtual bool good(){return stream->good();} + virtual dwgBasicStream* clone(){return new dwgFileStream(stream);} +private: + std::ifstream *stream; + duint64 sz; +}; + +class dwgCharStream: public dwgBasicStream{ +public: + dwgCharStream(duint8 *buf, int s){ + stream =buf; + sz = s; + pos = 0; + isOk = true; + } + virtual ~dwgCharStream(){} + virtual bool read(duint8* s, duint64 n); + virtual duint64 size(){return sz;} + virtual duint64 getPos(){return pos;} + virtual bool setPos(duint64 p); + virtual bool good(){return isOk;} + virtual dwgBasicStream* clone(){return new dwgCharStream(stream, sz);} +private: + duint8 *stream; + duint64 sz; + duint64 pos; + bool isOk; +}; + +class dwgBuffer { +public: + dwgBuffer(std::ifstream *stream, DRW_TextCodec *decoder = NULL); + dwgBuffer(duint8 *buf, int size, DRW_TextCodec *decoder= NULL); + dwgBuffer( const dwgBuffer& org ); + dwgBuffer& operator=( const dwgBuffer& org ); + ~dwgBuffer(); + duint64 size(){return filestr->size();} + bool setPosition(duint64 pos); + duint64 getPosition(); + void resetPosition(){setPosition(0); setBitPos(0);} + void setBitPos(duint8 pos); + duint8 getBitPos(){return bitPos;} + bool moveBitPos(dint32 size); + + duint8 getBit(); //B + bool getBoolBit(); //B as bool + duint8 get2Bits(); //BB + duint8 get3Bits(); //3B + duint16 getBitShort(); //BS + dint16 getSBitShort(); //BS + dint32 getBitLong(); //BL + duint64 getBitLongLong(); //BLL (R24) + double getBitDouble(); //BD + //2BD => call BD 2 times + DRW_Coord get3BitDouble(); //3BD + duint8 getRawChar8(); //RC + duint16 getRawShort16(); //RS + double getRawDouble(); //RD + duint32 getRawLong32(); //RL + duint64 getRawLong64(); //RLL + DRW_Coord get2RawDouble(); //2RD + //3RD => call RD 3 times + duint32 getUModularChar(); //UMC, unsigned for offsets in 1015 + dint32 getModularChar(); //MC + dint32 getModularShort(); //MS + dwgHandle getHandle(); //H + dwgHandle getOffsetHandle(duint32 href); //H converted to hard + UTF8STRING getVariableText(DRW::Version v, bool nullTerm = true); //TV => call TU for 2007+ or T for previous versions + UTF8STRING getCP8Text(); //T 8 bit text converted from codepage to utf8 + UTF8STRING getUCSText(bool nullTerm = true); //TU unicode 16 bit (UCS) text converted to utf8 + UTF8STRING getUCSStr(duint16 ts); + + duint16 getObjType(DRW::Version v); //OT + + //X, U, SN, + + DRW_Coord getExtrusion(bool b_R2000_style); //BE + double getDefaultDouble(double d); //DD + double getThickness(bool b_R2000_style);//BT + //3DD + duint32 getCmColor(DRW::Version v); //CMC + duint32 getEnColor(DRW::Version v); //ENC + //TC + + duint16 getBERawShort16(); //RS big-endian order + + bool isGood(){return filestr->good();} + bool getBytes(duint8 *buf, int size); + int numRemainingBytes(){return (maxSize- filestr->getPos());} + + duint16 crc8(duint16 dx,dint32 start,dint32 end); + duint32 crc32(duint32 seed,dint32 start,dint32 end); + +// duint8 getCurrByte(){return currByte;} + DRW_TextCodec *decoder; + +private: + dwgBasicStream *filestr; + int maxSize; + duint8 currByte; + duint8 bitPos; + + UTF8STRING get8bitStr(); + UTF8STRING get16bitStr(duint16 textSize, bool nullTerm = true); +}; + +#endif // DWGBUFFER_H diff --git a/extlib/libdxfrw/intern/dwgreader.cpp b/extlib/libdxfrw/intern/dwgreader.cpp new file mode 100644 index 0000000..da6ac35 --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader.cpp @@ -0,0 +1,1294 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include +#include +#include +#include "dwgreader.h" +#include "drw_textcodec.h" +#include "drw_dbg.h" + +dwgReader::~dwgReader(){ + for (std::map::iterator it=ltypemap.begin(); it!=ltypemap.end(); ++it) + delete(it->second); + for (std::map::iterator it=layermap.begin(); it!=layermap.end(); ++it) + delete(it->second); + for (std::map::iterator it=blockmap.begin(); it!=blockmap.end(); ++it) + delete(it->second); + for (std::map::iterator it=stylemap.begin(); it!=stylemap.end(); ++it) + delete(it->second); + for (std::map::iterator it=dimstylemap.begin(); it!=dimstylemap.end(); ++it) + delete(it->second); + for (std::map::iterator it=vportmap.begin(); it!=vportmap.end(); ++it) + delete(it->second); + for (std::map::iterator it=classesmap.begin(); it!=classesmap.end(); ++it) + delete(it->second); + for (std::map::iterator it=blockRecordmap.begin(); it!=blockRecordmap.end(); ++it) + delete(it->second); + for (std::map::iterator it=appIdmap.begin(); it!=appIdmap.end(); ++it) + delete(it->second); + + delete fileBuf; +} + +void dwgReader::parseAttribs(DRW_Entity* e){ + if (e != NULL){ + duint32 ltref =e->lTypeH.ref; + duint32 lyref =e->layerH.ref; + std::map::iterator lt_it = ltypemap.find(ltref); + if (lt_it != ltypemap.end()){ + e->lineType = (lt_it->second)->name; + } + std::map::iterator ly_it = layermap.find(lyref); + if (ly_it != layermap.end()){ + e->layer = (ly_it->second)->name; + } + } +} + +std::string dwgReader::findTableName(DRW::TTYPE table, dint32 handle){ + std::string name; + switch (table){ + case DRW::STYLE:{ + std::map::iterator st_it = stylemap.find(handle); + if (st_it != stylemap.end()) + name = (st_it->second)->name; + break;} + case DRW::DIMSTYLE:{ + std::map::iterator ds_it = dimstylemap.find(handle); + if (ds_it != dimstylemap.end()) + name = (ds_it->second)->name; + break;} + case DRW::BLOCK_RECORD:{ //use DRW_Block because name are more correct +// std::map::iterator bk_it = blockmap.find(handle); +// if (bk_it != blockmap.end()) + std::map::iterator bk_it = blockRecordmap.find(handle); + if (bk_it != blockRecordmap.end()) + name = (bk_it->second)->name; + break;} +/* case DRW::VPORT:{ + std::map::iterator vp_it = vportmap.find(handle); + if (vp_it != vportmap.end()) + name = (vp_it->second)->name; + break;}*/ + case DRW::LAYER:{ + std::map::iterator ly_it = layermap.find(handle); + if (ly_it != layermap.end()) + name = (ly_it->second)->name; + break;} + case DRW::LTYPE:{ + std::map::iterator lt_it = ltypemap.find(handle); + if (lt_it != ltypemap.end()) + name = (lt_it->second)->name; + break;} + default: + break; + } + return name; +} + +bool dwgReader::readDwgHeader(DRW_Header& hdr, dwgBuffer *buf, dwgBuffer *hBuf){ + bool ret = hdr.parseDwg(version, buf, hBuf, maintenanceVersion); + //RLZ: copy objectControl handles + return ret; +} + +//RLZ: TODO add check instead print +bool dwgReader::checkSentinel(dwgBuffer *buf, enum secEnum::DWGSection, bool start){ + DRW_UNUSED(start); + for (int i=0; i<16;i++) { + DRW_DBGH(buf->getRawChar8()); DRW_DBG(" "); + } + return true; +} + +/*********** objects map ************************/ +/** Note: object map are split in sections with max size 2035? + * heach section are 2 bytes size + data bytes + 2 bytes crc + * size value are data bytes + 2 and to calculate crc are used + * 2 bytes size + data bytes + * last section are 2 bytes size + 2 bytes crc (size value always 2) +**/ +bool dwgReader::readDwgHandles(dwgBuffer *dbuf, duint32 offset, duint32 size) { + DRW_DBG("\ndwgReader::readDwgHandles\n"); + if (!dbuf->setPosition(offset)) + return false; + + duint32 maxPos = offset + size; + DRW_DBG("\nSection HANDLES offset= "); DRW_DBG(offset); + DRW_DBG("\nSection HANDLES size= "); DRW_DBG(size); + DRW_DBG("\nSection HANDLES maxPos= "); DRW_DBG(maxPos); + + int startPos = offset; + + while (maxPos > dbuf->getPosition()) { + DRW_DBG("\nstart handles section buf->curPosition()= "); DRW_DBG(dbuf->getPosition()); DRW_DBG("\n"); + duint16 size = dbuf->getBERawShort16(); + DRW_DBG("object map section size= "); DRW_DBG(size); DRW_DBG("\n"); + dbuf->setPosition(startPos); + duint8 *tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + if (size != 2){ + buff.setPosition(2); + int lastHandle = 0; + int lastLoc = 0; + //read data + while(buff.getPosition()< size){ + lastHandle += buff.getUModularChar(); + DRW_DBG("object map lastHandle= "); DRW_DBGH(lastHandle); + lastLoc += buff.getModularChar(); + DRW_DBG(" lastLoc= "); DRW_DBG(lastLoc); DRW_DBG("\n"); + ObjectMap[lastHandle]= objHandle(0, lastHandle, lastLoc); + } + } + //verify crc + duint16 crcCalc = buff.crc8(0xc0c1,0,size); + delete[]tmpByteStr; + duint16 crcRead = dbuf->getBERawShort16(); + DRW_DBG("object map section crc8 read= "); DRW_DBG(crcRead); + DRW_DBG("\nobject map section crc8 calculated= "); DRW_DBG(crcCalc); + DRW_DBG("\nobject section buf->curPosition()= "); DRW_DBG(dbuf->getPosition()); DRW_DBG("\n"); + startPos = dbuf->getPosition(); + } + + bool ret = dbuf->isGood(); + return ret; +} + +/*********** objects ************************/ +/** + * Reads all the object referenced in the object map section of the DWG file + * (using their object file offsets) + */ +bool dwgReader::readDwgTables(DRW_Header& hdr, dwgBuffer *dbuf) { + DRW_DBG("\ndwgReader::readDwgTables start\n"); + bool ret = true; + bool ret2 = true; + objHandle oc; + std::map::iterator mit; + dint16 oType; + duint32 bs = 0; //bit size of handle stream 2010+ + duint8 *tmpByteStr; + + //parse linetypes, start with linetype Control + mit = ObjectMap.find(hdr.linetypeCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: LineType control not found\n"); + ret = false; + } else { + DRW_DBG("\n**********Parsing LineType control*******\n"); + oc = mit->second; + ObjectMap.erase(mit); + DRW_ObjControl ltControl; + dbuf->setPosition(oc.loc); + int csize = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[csize]; + dbuf->getBytes(tmpByteStr, csize); + dwgBuffer cbuff(tmpByteStr, csize, &decoder); + //verify if object are correct + oType = cbuff.getObjType(version); + if (oType != 0x38) { + DRW_DBG("\nWARNING: Not LineType control object, found oType "); + DRW_DBG(oType); DRW_DBG(" instead 0x38\n"); + ret = false; + } else { //reset position + cbuff.resetPosition(); + ret2 = ltControl.parseDwg(version, &cbuff, bs); + if(ret) + ret = ret2; + } + delete[]tmpByteStr; + for (std::list::iterator it=ltControl.hadlesList.begin(); it != ltControl.hadlesList.end(); ++it){ + mit = ObjectMap.find(*it); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: LineType not found\n"); + ret = false; + } else { + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("\nLineType Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" loc.: "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_LType *lt = new DRW_LType(); + dbuf->setPosition(oc.loc); + int lsize = dbuf->getModularShort(); + DRW_DBG("LineType size in bytes= "); DRW_DBG(lsize); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[lsize]; + dbuf->getBytes(tmpByteStr, lsize); + dwgBuffer lbuff(tmpByteStr, lsize, &decoder); + ret2 = lt->parseDwg(version, &lbuff, bs); + ltypemap[lt->handle] = lt; + if(ret) + ret = ret2; + delete[]tmpByteStr; + } + } + } + + //parse layers, start with layer Control + mit = ObjectMap.find(hdr.layerCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Layer control not found\n"); + ret = false; + } else { + DRW_DBG("\n**********Parsing Layer control*******\n"); + oc = mit->second; + ObjectMap.erase(mit); + DRW_ObjControl layControl; + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + //verify if object are correct + oType = buff.getObjType(version); + if (oType != 0x32) { + DRW_DBG("\nWARNING: Not Layer control object, found oType "); + DRW_DBG(oType); DRW_DBG(" instead 0x32\n"); + ret = false; + } else { //reset position + buff.resetPosition(); + ret2 = layControl.parseDwg(version, &buff, bs); + if(ret) + ret = ret2; + } + delete[]tmpByteStr; + for (std::list::iterator it=layControl.hadlesList.begin(); it != layControl.hadlesList.end(); ++it){ + mit = ObjectMap.find(*it); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Layer not found\n"); + ret = false; + } else { + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("Layer Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_Layer *la = new DRW_Layer(); + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + ret2 = la->parseDwg(version, &buff, bs); + layermap[la->handle] = la; + if(ret) + ret = ret2; + delete[]tmpByteStr; + } + } + } + + //set linetype in layer + for (std::map::iterator it=layermap.begin(); it!=layermap.end(); ++it) { + DRW_Layer *ly = it->second; + duint32 ref =ly->lTypeH.ref; + std::map::iterator lt_it = ltypemap.find(ref); + if (lt_it != ltypemap.end()){ + ly->lineType = (lt_it->second)->name; + } + } + + //parse text styles, start with style Control + mit = ObjectMap.find(hdr.styleCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Style control not found\n"); + ret = false; + } else { + DRW_DBG("\n**********Parsing Style control*******\n"); + oc = mit->second; + ObjectMap.erase(mit); + DRW_ObjControl styControl; + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + //verify if object are correct + oType = buff.getObjType(version); + if (oType != 0x34) { + DRW_DBG("\nWARNING: Not Text Style control object, found oType "); + DRW_DBG(oType); DRW_DBG(" instead 0x34\n"); + ret = false; + } else { //reset position + buff.resetPosition(); + ret2 = styControl.parseDwg(version, &buff, bs); + if(ret) + ret = ret2; + } + delete[]tmpByteStr; + for (std::list::iterator it=styControl.hadlesList.begin(); it != styControl.hadlesList.end(); ++it){ + mit = ObjectMap.find(*it); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Style not found\n"); + ret = false; + } else { + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("Style Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_Textstyle *sty = new DRW_Textstyle(); + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + ret2 = sty->parseDwg(version, &buff, bs); + stylemap[sty->handle] = sty; + if(ret) + ret = ret2; + delete[]tmpByteStr; + } + } + } + + //parse dim styles, start with dimstyle Control + mit = ObjectMap.find(hdr.dimstyleCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Dimension Style control not found\n"); + ret = false; + } else { + DRW_DBG("\n**********Parsing Dimension Style control*******\n"); + oc = mit->second; + ObjectMap.erase(mit); + DRW_ObjControl dimstyControl; + dbuf->setPosition(oc.loc); + duint32 size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + //verify if object are correct + oType = buff.getObjType(version); + if (oType != 0x44) { + DRW_DBG("\nWARNING: Not Dim Style control object, found oType "); + DRW_DBG(oType); DRW_DBG(" instead 0x44\n"); + ret = false; + } else { //reset position + buff.resetPosition(); + ret2 = dimstyControl.parseDwg(version, &buff, bs); + if(ret) + ret = ret2; + } + delete[]tmpByteStr; + for (std::list::iterator it=dimstyControl.hadlesList.begin(); it != dimstyControl.hadlesList.end(); ++it){ + mit = ObjectMap.find(*it); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Dimension Style not found\n"); + ret = false; + } else { + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("Dimstyle Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_Dimstyle *sty = new DRW_Dimstyle(); + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + ret2 = sty->parseDwg(version, &buff, bs); + dimstylemap[sty->handle] = sty; + if(ret) + ret = ret2; + delete[]tmpByteStr; + } + } + } + + //parse vports, start with vports Control + mit = ObjectMap.find(hdr.vportCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: vports control not found\n"); + ret = false; + } else { + DRW_DBG("\n**********Parsing vports control*******\n"); + oc = mit->second; + ObjectMap.erase(mit); + DRW_ObjControl vportControl; + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + //verify if object are correct + oType = buff.getObjType(version); + if (oType != 0x40) { + DRW_DBG("\nWARNING: Not VPorts control object, found oType: "); + DRW_DBG(oType); DRW_DBG(" instead 0x40\n"); + ret = false; + } else { //reset position + buff.resetPosition(); + ret2 = vportControl.parseDwg(version, &buff, bs); + if(ret) + ret = ret2; + } + delete[]tmpByteStr; + for (std::list::iterator it=vportControl.hadlesList.begin(); it != vportControl.hadlesList.end(); ++it){ + mit = ObjectMap.find(*it); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: vport not found\n"); + ret = false; + } else { + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("Vport Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_Vport *vp = new DRW_Vport(); + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + ret2 = vp->parseDwg(version, &buff, bs); + vportmap[vp->handle] = vp; + if(ret) + ret = ret2; + delete[]tmpByteStr; + } + } + } + + //parse Block_records , start with Block_record Control + mit = ObjectMap.find(hdr.blockCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Block_record control not found\n"); + ret = false; + } else { + DRW_DBG("\n**********Parsing Block_record control*******\n"); + oc = mit->second; + ObjectMap.erase(mit); + DRW_ObjControl blockControl; + dbuf->setPosition(oc.loc); + int csize = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[csize]; + dbuf->getBytes(tmpByteStr, csize); + dwgBuffer buff(tmpByteStr, csize, &decoder); + //verify if object are correct + oType = buff.getObjType(version); + if (oType != 0x30) { + DRW_DBG("\nWARNING: Not Block Record control object, found oType "); + DRW_DBG(oType); DRW_DBG(" instead 0x30\n"); + ret = false; + } else { //reset position + buff.resetPosition(); + ret2 = blockControl.parseDwg(version, &buff, bs); + if(ret) + ret = ret2; + } + delete[]tmpByteStr; + for (std::list::iterator it=blockControl.hadlesList.begin(); it != blockControl.hadlesList.end(); ++it){ + mit = ObjectMap.find(*it); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: block record not found\n"); + ret = false; + } else { + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("block record Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_Block_Record *br = new DRW_Block_Record(); + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + ret2 = br->parseDwg(version, &buff, bs); + blockRecordmap[br->handle] = br; + if(ret) + ret = ret2; + delete[]tmpByteStr; + } + } + } + + //parse appId , start with appId Control + mit = ObjectMap.find(hdr.appidCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: AppId control not found\n"); + ret = false; + } else { + DRW_DBG("\n**********Parsing AppId control*******\n"); + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("AppId Control Obj Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_ObjControl appIdControl; + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + //verify if object are correct + oType = buff.getObjType(version); + if (oType != 0x42) { + DRW_DBG("\nWARNING: Not AppId control object, found oType "); + DRW_DBG(oType); DRW_DBG(" instead 0x42\n"); + ret = false; + } else { //reset position + buff.resetPosition(); + ret2 = appIdControl.parseDwg(version, &buff, bs); + if(ret) + ret = ret2; + } + delete[]tmpByteStr; + for (std::list::iterator it=appIdControl.hadlesList.begin(); it != appIdControl.hadlesList.end(); ++it){ + mit = ObjectMap.find(*it); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: AppId not found\n"); + ret = false; + } else { + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("AppId Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_AppId *ai = new DRW_AppId(); + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + ret2 = ai->parseDwg(version, &buff, bs); + appIdmap[ai->handle] = ai; + if(ret) + ret = ret2; + delete[]tmpByteStr; + } + } + } + + //RLZ: parse remaining object controls, TODO: implement all + if (DRW_DBGGL == DRW_dbg::DEBUG){ + mit = ObjectMap.find(hdr.viewCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: View control not found\n"); + ret = false; + } else { + DRW_DBG("\n**********Parsing View control*******\n"); + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("View Control Obj Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_ObjControl viewControl; + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + //verify if object are correct + oType = buff.getObjType(version); + if (oType != 0x3C) { + DRW_DBG("\nWARNING: Not View control object, found oType "); + DRW_DBG(oType); DRW_DBG(" instead 0x3C\n"); + ret = false; + } else { //reset position + buff.resetPosition(); + ret2 = viewControl.parseDwg(version, &buff, bs); + if(ret) + ret = ret2; + } + delete[]tmpByteStr; + } + + mit = ObjectMap.find(hdr.ucsCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Ucs control not found\n"); + ret = false; + } else { + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("\n**********Parsing Ucs control*******\n"); + DRW_DBG("Ucs Control Obj Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_ObjControl ucsControl; + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + //verify if object are correct + oType = buff.getObjType(version); + if (oType != 0x3E) { + DRW_DBG("\nWARNING: Not Ucs control object, found oType "); + DRW_DBG(oType); DRW_DBG(" instead 0x3E\n"); + ret = false; + } else { //reset position + buff.resetPosition(); + ret2 = ucsControl.parseDwg(version, &buff, bs); + if(ret) + ret = ret2; + } + delete[]tmpByteStr; + } + + if (version < DRW::AC1018) {//r2000- + mit = ObjectMap.find(hdr.vpEntHeaderCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: vpEntHeader control not found\n"); + ret = false; + } else { + DRW_DBG("\n**********Parsing vpEntHeader control*******\n"); + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("vpEntHeader Control Obj Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_ObjControl vpEntHeaderCtrl; + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + //verify if object are correct + oType = buff.getObjType(version); + if (oType != 0x46) { + DRW_DBG("\nWARNING: Not vpEntHeader control object, found oType "); + DRW_DBG(oType); DRW_DBG(" instead 0x46\n"); + ret = false; + } else { //reset position + buff.resetPosition(); +/* RLZ: writeme ret2 = vpEntHeader.parseDwg(version, &buff, bs); + if(ret) + ret = ret2;*/ + } + delete[]tmpByteStr; + } + } + } + + return ret; +} + +bool dwgReader::readDwgBlocks(DRW_Interface& intfa, dwgBuffer *dbuf){ + bool ret = true; + bool ret2 = true; + duint32 bs =0; + duint8 *tmpByteStr; + std::map::iterator mit; + DRW_DBG("\nobject map total size= "); DRW_DBG(ObjectMap.size()); + + for (std::map::iterator it=blockRecordmap.begin(); it != blockRecordmap.end(); ++it){ + DRW_Block_Record* bkr= it->second; + DRW_DBG("\nParsing Block, record handle= "); DRW_DBGH(it->first); DRW_DBG(" Name= "); DRW_DBG(bkr->name); DRW_DBG("\n"); + DRW_DBG("\nFinding Block, handle= "); DRW_DBGH(bkr->block); DRW_DBG("\n"); + mit = ObjectMap.find(bkr->block); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: block entity not found\n"); + ret = false; + continue; + } + objHandle oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("Block Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" Location: "); DRW_DBG(oc.loc); DRW_DBG("\n"); + if ( !(dbuf->setPosition(oc.loc)) ){ + DRW_DBG("Bad Location reading blocks\n"); + ret = false; + continue; + } + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + DRW_Block bk; + ret2 = bk.parseDwg(version, &buff, bs); + delete[]tmpByteStr; + ret = ret && ret2; + parseAttribs(&bk); + //complete block entity with block record data + bk.basePoint = bkr->basePoint; + bk.flags = bkr->flags; + intfa.addBlock(bk); + //and update block record name + bkr->name = bk.name; + + /**read & send block entities**/ + // in dwg code 330 are not set like dxf in ModelSpace & PaperSpace, set it (RLZ: only tested in 2000) + if (bk.parentHandle == DRW::NoHandle) { + // in dwg code 330 are not set like dxf in ModelSpace & PaperSpace, set it + bk.parentHandle= bkr->handle; + //and do not send block entities like dxf + } else { + if (version < DRW::AC1018) { //pre 2004 + duint32 nextH = bkr->firstEH; + while (nextH != 0){ + mit = ObjectMap.find(nextH); + if (mit==ObjectMap.end()) { + nextH = bkr->lastEH;//end while if entity not foud + DRW_DBG("\nWARNING: Entity of block not found\n"); + ret = false; + continue; + } else {//foud entity reads it + oc = mit->second; + ObjectMap.erase(mit); + ret2 = readDwgEntity(dbuf, oc, intfa); + ret = ret && ret2; + } + if (nextH == bkr->lastEH) + nextH = 0; //redundant, but prevent read errors + else + nextH = nextEntLink; + } + } else {//2004+ + for (std::vector::iterator it = bkr->entMap.begin() ; it != bkr->entMap.end(); ++it){ + duint32 nextH = *it; + mit = ObjectMap.find(nextH); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Entity of block not found\n"); + ret = false; + continue; + } else {//foud entity reads it + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("\nBlocks, parsing entity: "); DRW_DBGH(oc.handle); DRW_DBG(", pos: "); DRW_DBG(oc.loc); DRW_DBG("\n"); + ret2 = readDwgEntity(dbuf, oc, intfa); + ret = ret && ret2; + } + } + }//end 2004+ + } + + //end block entity, really needed to parse a dummy entity?? + mit = ObjectMap.find(bkr->endBlock); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: end block entity not found\n"); + ret = false; + continue; + } + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("End block Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" Location: "); DRW_DBG(oc.loc); DRW_DBG("\n"); + dbuf->setPosition(oc.loc); + size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff1(tmpByteStr, size, &decoder); + DRW_Block end; + end.isEnd = true; + ret2 = end.parseDwg(version, &buff1, bs); + delete[]tmpByteStr; + ret = ret && ret2; + if (bk.parentHandle == DRW::NoHandle) bk.parentHandle= bkr->handle; + parseAttribs(&end); + intfa.endBlock(); + } + + return ret; +} + +bool dwgReader::readPlineVertex(DRW_Polyline& pline, dwgBuffer *dbuf){ + bool ret = true; + bool ret2 = true; + objHandle oc; + duint32 bs = 0; + std::map::iterator mit; + + if (version < DRW::AC1018) { //pre 2004 + duint32 nextH = pline.firstEH; + while (nextH != 0){ + mit = ObjectMap.find(nextH); + if (mit==ObjectMap.end()) { + nextH = pline.lastEH;//end while if entity not foud + DRW_DBG("\nWARNING: pline vertex not found\n"); + ret = false; + continue; + } else {//foud entity reads it + oc = mit->second; + ObjectMap.erase(mit); + DRW_Vertex vt; + dbuf->setPosition(oc.loc); + //RLZ: verify if pos is ok + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) {//2010+ + bs = dbuf->getUModularChar(); + } + duint8 *tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + dint16 oType = buff.getObjType(version); + buff.resetPosition(); + DRW_DBG(" object type= "); DRW_DBG(oType); DRW_DBG("\n"); + ret2 = vt.parseDwg(version, &buff, bs, pline.basePoint.z); + delete[]tmpByteStr; + pline.addVertex(vt); + nextEntLink = vt.nextEntLink; \ + prevEntLink = vt.prevEntLink; + ret = ret && ret2; + } + if (nextH == pline.lastEH) + nextH = 0; //redundant, but prevent read errors + else + nextH = nextEntLink; + } + } else {//2004+ + for (std::list::iterator it = pline.hadlesList.begin() ; it != pline.hadlesList.end(); ++it){ + duint32 nextH = *it; + mit = ObjectMap.find(nextH); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Entity of block not found\n"); + ret = false; + continue; + } else {//foud entity reads it + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("\nPline vertex, parsing entity: "); DRW_DBGH(oc.handle); DRW_DBG(", pos: "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_Vertex vt; + dbuf->setPosition(oc.loc); + //RLZ: verify if pos is ok + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) {//2010+ + bs = dbuf->getUModularChar(); + } + duint8 *tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + dint16 oType = buff.getObjType(version); + buff.resetPosition(); + DRW_DBG(" object type= "); DRW_DBG(oType); DRW_DBG("\n"); + ret2 = vt.parseDwg(version, &buff, bs, pline.basePoint.z); + delete[]tmpByteStr; + pline.addVertex(vt); + nextEntLink = vt.nextEntLink; \ + prevEntLink = vt.prevEntLink; + ret = ret && ret2; + } + } + }//end 2004+ + DRW_DBG("\nRemoved SEQEND entity: "); DRW_DBGH(pline.seqEndH.ref);DRW_DBG("\n"); + ObjectMap.erase(pline.seqEndH.ref); + + return ret; +} + +bool dwgReader::readDwgEntities(DRW_Interface& intfa, dwgBuffer *dbuf){ + bool ret = true; + bool ret2 = true; + + DRW_DBG("\nobject map total size= "); DRW_DBG(ObjectMap.size()); + std::map::iterator itB=ObjectMap.begin(); + std::map::iterator itE=ObjectMap.end(); + while (itB != itE){ + ret2 = readDwgEntity(dbuf, itB->second, intfa); + ObjectMap.erase(itB); + itB=ObjectMap.begin(); + if (ret) + ret = ret2; + } + return ret; +} + +/** + * Reads a dwg drawing entity (dwg object entity) given its offset in the file + */ +bool dwgReader::readDwgEntity(dwgBuffer *dbuf, objHandle& obj, DRW_Interface& intfa){ + bool ret = true; + duint32 bs = 0; + +#define ENTRY_PARSE(e) \ + ret = e.parseDwg(version, &buff, bs); \ + parseAttribs(&e); \ + nextEntLink = e.nextEntLink; \ + prevEntLink = e.prevEntLink; + + nextEntLink = prevEntLink = 0;// set to 0 to skip unimplemented entities + dbuf->setPosition(obj.loc); + //verify if position is ok: + if (!dbuf->isGood()){ + DRW_DBG(" Warning: readDwgEntity, bad location\n"); + return false; + } + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) {//2010+ + bs = dbuf->getUModularChar(); + } + duint8 *tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + //verify if getBytes is ok: + if (!dbuf->isGood()){ + DRW_DBG(" Warning: readDwgEntity, bad size\n"); + delete[]tmpByteStr; + return false; + } + dwgBuffer buff(tmpByteStr, size, &decoder); + dint16 oType = buff.getObjType(version); + buff.resetPosition(); + + if (oType > 499){ + std::map::iterator it = classesmap.find(oType); + if (it == classesmap.end()){//fail, not found in classes set error + DRW_DBG("Class "); DRW_DBG(oType);DRW_DBG("not found, handle: "); DRW_DBG(obj.handle); DRW_DBG("\n"); + delete[]tmpByteStr; + return false; + } else { + DRW_Class *cl = it->second; + if (cl->dwgType != 0) + oType = cl->dwgType; + } + } + + obj.type = oType; + switch (oType){ + case 17: { + DRW_Arc e; + ENTRY_PARSE(e) + intfa.addArc(e); + break; } + case 18: { + DRW_Circle e; + ENTRY_PARSE(e) + intfa.addCircle(e); + break; } + case 19:{ + DRW_Line e; + ENTRY_PARSE(e) + intfa.addLine(e); + break;} + case 27: { + DRW_Point e; + ENTRY_PARSE(e) + intfa.addPoint(e); + break; } + case 35: { + DRW_Ellipse e; + ENTRY_PARSE(e) + intfa.addEllipse(e); + break; } + case 7: + case 8: {//minsert = 8 + DRW_Insert e; + ENTRY_PARSE(e) + e.name = findTableName(DRW::BLOCK_RECORD, e.blockRecH.ref);//RLZ: find as block or blockrecord (ps & ps0) + intfa.addInsert(e); + break; } + case 77: { + DRW_LWPolyline e; + ENTRY_PARSE(e) + intfa.addLWPolyline(e); + break; } + case 1: { + DRW_Text e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::STYLE, e.styleH.ref); + intfa.addText(e); + break; } + case 44: { + DRW_MText e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::STYLE, e.styleH.ref); + intfa.addMText(e); + break; } + case 28: { + DRW_3Dface e; + ENTRY_PARSE(e) + intfa.add3dFace(e); + break; } + case 20: { + DRW_DimOrdinate e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::DIMSTYLE, e.dimStyleH.ref); + intfa.addDimOrdinate(&e); + break; } + case 21: { + DRW_DimLinear e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::DIMSTYLE, e.dimStyleH.ref); + intfa.addDimLinear(&e); + break; } + case 22: { + DRW_DimAligned e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::DIMSTYLE, e.dimStyleH.ref); + intfa.addDimAlign(&e); + break; } + case 23: { + DRW_DimAngular3p e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::DIMSTYLE, e.dimStyleH.ref); + intfa.addDimAngular3P(&e); + break; } + case 24: { + DRW_DimAngular e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::DIMSTYLE, e.dimStyleH.ref); + intfa.addDimAngular(&e); + break; } + case 25: { + DRW_DimRadial e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::DIMSTYLE, e.dimStyleH.ref); + intfa.addDimRadial(&e); + break; } + case 26: { + DRW_DimDiametric e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::DIMSTYLE, e.dimStyleH.ref); + intfa.addDimDiametric(&e); + break; } + case 45: { + DRW_Leader e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::DIMSTYLE, e.dimStyleH.ref); + intfa.addLeader(&e); + break; } + case 31: { + DRW_Solid e; + ENTRY_PARSE(e) + intfa.addSolid(e); + break; } + case 78: { + DRW_Hatch e; + ENTRY_PARSE(e) + intfa.addHatch(&e); + break; } + case 32: { + DRW_Trace e; + ENTRY_PARSE(e) + intfa.addTrace(e); + break; } + case 34: { + DRW_Viewport e; + ENTRY_PARSE(e) + intfa.addViewport(e); + break; } + case 36: { + DRW_Spline e; + ENTRY_PARSE(e) + intfa.addSpline(&e); + break; } + case 40: { + DRW_Ray e; + ENTRY_PARSE(e) + intfa.addRay(e); + break; } + case 15: // pline 2D + case 16: // pline 3D + case 29: { // pline PFACE + DRW_Polyline e; + ENTRY_PARSE(e) + readPlineVertex(e, dbuf); + intfa.addPolyline(e); + break; } +// case 30: { +// DRW_Polyline e;// MESH (not pline) +// ENTRY_PARSE(e) +// intfa.addRay(e); +// break; } + case 41: { + DRW_Xline e; + ENTRY_PARSE(e) + intfa.addXline(e); + break; } + case 101: { + DRW_Image e; + ENTRY_PARSE(e) + intfa.addImage(&e); + break; } + + default: + //not supported or are object add to remaining map + objObjectMap[obj.handle]= obj; + break; + } + if (!ret){ + DRW_DBG("Warning: Entity type "); DRW_DBG(oType);DRW_DBG("has failed, handle: "); DRW_DBG(obj.handle); DRW_DBG("\n"); + } + delete[]tmpByteStr; + return ret; +} + +bool dwgReader::readDwgObjects(DRW_Interface& intfa, dwgBuffer *dbuf){ + bool ret = true; + bool ret2 = true; + + duint32 i=0; + DRW_DBG("\nentities map total size= "); DRW_DBG(ObjectMap.size()); + DRW_DBG("\nobjects map total size= "); DRW_DBG(objObjectMap.size()); + std::map::iterator itB=objObjectMap.begin(); + std::map::iterator itE=objObjectMap.end(); + while (itB != itE){ + ret2 = readDwgObject(dbuf, itB->second, intfa); + objObjectMap.erase(itB); + itB=objObjectMap.begin(); + if (ret) + ret = ret2; + } + if (DRW_DBGGL == DRW_dbg::DEBUG) { + for (std::map::iterator it=remainingMap.begin(); it != remainingMap.end(); ++it){ + DRW_DBG("\nnum.# "); DRW_DBG(i++); DRW_DBG(" Remaining object Handle, loc, type= "); DRW_DBG(it->first); + DRW_DBG(" "); DRW_DBG(it->second.loc); DRW_DBG(" "); DRW_DBG(it->second.type); + } + DRW_DBG("\n"); + } + return ret; +} + +/** + * Reads a dwg drawing object (dwg object object) given its offset in the file + */ +bool dwgReader::readDwgObject(dwgBuffer *dbuf, objHandle& obj, DRW_Interface& intfa){ + bool ret = true; + duint32 bs = 0; + + dbuf->setPosition(obj.loc); + //verify if position is ok: + if (!dbuf->isGood()){ + DRW_DBG(" Warning: readDwgObject, bad location\n"); + return false; + } + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) {//2010+ + bs = dbuf->getUModularChar(); + } + duint8 *tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + //verify if getBytes is ok: + if (!dbuf->isGood()){ + DRW_DBG(" Warning: readDwgObject, bad size\n"); + delete[]tmpByteStr; + return false; + } + dwgBuffer buff(tmpByteStr, size, &decoder); + //oType are set parsing entities + dint16 oType = obj.type; + + switch (oType){ + case 102: { + DRW_ImageDef e; + ret = e.parseDwg(version, &buff, bs); + intfa.linkImage(&e); + break; } + default: + //not supported object or entity add to remaining map for debug + remainingMap[obj.handle]= obj; + break; + } + if (!ret){ + DRW_DBG("Warning: Object type "); DRW_DBG(oType);DRW_DBG("has failed, handle: "); DRW_DBG(obj.handle); DRW_DBG("\n"); + } + delete[]tmpByteStr; + return ret; +} + + + +bool DRW_ObjControl::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ +int unkData=0; + bool ret = DRW_TableEntry::parseDwg(version, buf, NULL, bs); + DRW_DBG("\n***************************** parsing object control entry *********************************************\n"); + if (!ret) + return ret; + //last parsed is: XDic Missing Flag 2004+ + int numEntries = buf->getBitLong(); + DRW_DBG(" num entries: "); DRW_DBG(numEntries); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + +// if (oType == 68 && version== DRW::AC1015){//V2000 dimstyle seems have one unknown byte hard handle counter?? + if (oType == 68 && version > DRW::AC1014){//dimstyle seems have one unknown byte hard handle counter?? + unkData = buf->getRawChar8(); + DRW_DBG(" unknown v2000 byte: "); DRW_DBG( unkData); DRW_DBG("\n"); + } + if (version > DRW::AC1018){//from v2007+ have a bit for strings follows (ObjControl do not have) + int stringBit = buf->getBit(); + DRW_DBG(" string bit for v2007+: "); DRW_DBG( stringBit); DRW_DBG("\n"); + } + + dwgHandle objectH = buf->getHandle(); + DRW_DBG(" NULL Handle: "); DRW_DBGHL(objectH.code, objectH.size, objectH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + +// if (oType == 56 && version== DRW::AC1015){//linetype in 2004 seems not have XDicObjH or NULL handle + if (xDictFlag !=1){//linetype in 2004 seems not have XDicObjH or NULL handle + dwgHandle XDicObjH = buf->getHandle(); + DRW_DBG(" XDicObj control Handle: "); DRW_DBGHL(XDicObjH.code, XDicObjH.size, XDicObjH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } +//add 2 for modelspace, paperspace blocks & bylayer, byblock linetypes + numEntries = ((oType == 48) || (oType == 56)) ? (numEntries +2) : numEntries; + + for (int i =0; i< numEntries; i++){ + objectH = buf->getOffsetHandle(handle); + if (objectH.ref != 0) //in vports R14 I found some NULL handles + hadlesList.push_back (objectH.ref); + DRW_DBG(" objectH Handle: "); DRW_DBGHL(objectH.code, objectH.size, objectH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + + for (int i =0; i< unkData; i++){ + objectH = buf->getOffsetHandle(handle); + DRW_DBG(" unknown Handle: "); DRW_DBGHL(objectH.code, objectH.size, objectH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + return buf->isGood(); +} diff --git a/extlib/libdxfrw/intern/dwgreader.h b/extlib/libdxfrw/intern/dwgreader.h new file mode 100644 index 0000000..9f34885 --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader.h @@ -0,0 +1,203 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DWGREADER_H +#define DWGREADER_H + +#include +#include +#include "drw_textcodec.h" +#include "dwgutil.h" +#include "dwgbuffer.h" +#include "../libdwgr.h" + +class objHandle{ +public: + objHandle(){ handle = type = loc = 0; } + objHandle(duint32 t, duint32 h, duint32 l){ + type = t; + handle = h; + loc = l; + } + duint32 type; + duint32 handle; + duint32 loc; +}; + +//until 2000 = 2000- +//since 2004 except 2007 = 2004+ +// 2007 = 2007 +// pages of section +/* 2000-: No pages, only sections + * 2004+: Id, page number (index) + * size, size of page in file stream + * address, address in file stream + * dataSize, data size for this page + * startOffset, start offset for this page + * cSize, compresed size of data + * uSize, uncompresed size of data + * 2007: page Id, pageCount & pages + * size, size in file + * dataSize + * startOffset, start position in decompresed data stream + * cSize, compresed size of data + * uSize, uncompresed size of data + * address, address in file stream + * */ +class dwgPageInfo { +public: + dwgPageInfo(){} + dwgPageInfo(duint64 i, duint64 ad, duint32 sz){ + Id=i; address=ad; size=sz; + } + ~dwgPageInfo(){} + duint64 Id; + duint64 address; //in file stream, for rd18, rd21 + duint64 size; //in file stream, for rd18, rd21 + duint64 dataSize; //for rd18, rd21 + duint32 startOffset; //for rd18, rd21 + duint64 cSize; //compresed page size, for rd21 + duint64 uSize; //uncompresed page size, for rd21 +}; + +// sections of file +/* 2000-: No pages, only section Id, size & address in file + * 2004+: Id, Section Id + * size, total size of uncompresed data + * pageCount & pages, number of pages in section + * maxSize, max decompressed Size per page + * compresed, (1 = no, 2 = yes, normally 2) + * encrypted, (0 = no, 1 = yes, 2 = unknown) + * name, read & stored but not used + * 2007: same as 2004+ except encoding, saved in compresed field + * */ +class dwgSectionInfo { +public: + dwgSectionInfo(){ + compresed = 1;//1=no, 2=yes + encrypted = 0;//??? + pageCount = 0; + Id=-1; + } + ~dwgSectionInfo(){} + dint32 Id; //section Id, 2000- rd15 rd18 + std::string name; //section name rd18 + duint32 compresed;//is compresed? 1=no, 2=yes rd18, rd21(encoding) + duint32 encrypted;//encrypted (doc: 0=no, 1=yes, 2=unkn) on read: objects 0 and encrypted yes rd18 + std::mappages;//index, size, offset + duint64 size;//size of section, 2000- rd15, rd18, rd21 (data size) + duint64 pageCount; //number of pages (dwgPageInfo) in section rd18, rd21 + duint64 maxSize; //max decompressed size (needed??) rd18 rd21 + duint64 address; //address (seek) , 2000- +}; + + +//! Class to handle dwg obj control entries +/*! +* Class to handle dwg obj control entries +* @author Rallaz +*/ +class DRW_ObjControl : public DRW_TableEntry { +public: + DRW_ObjControl() { reset();} + + void reset(){ + } + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + std::listhadlesList; +}; + + +class dwgReader { + friend class dwgR; +public: + dwgReader(std::ifstream *stream, dwgR *p){ + fileBuf = new dwgBuffer(stream); + parent = p; + decoder.setVersion(DRW::AC1021, false);//default 2007 in utf8(no convert) + decoder.setCodePage("UTF-16", false); +// blockCtrl=0; //RLZ: temporary +// blockCtrl=layerCtrl=styleCtrl=linetypeCtrl=viewCtrl=0; +// ucsCtrl=vportCtrl=appidCtrl=dimstyleCtrl=vpEntHeaderCtrl=0; + nextEntLink = prevEntLink = 0; + maintenanceVersion=0; + } + virtual ~dwgReader(); + +protected: + virtual bool readMetaData() = 0; + virtual bool readPreview(){return false;} + virtual bool readFileHeader() = 0; + virtual bool readDwgHeader(DRW_Header& hdr)=0; + virtual bool readDwgClasses() = 0; + virtual bool readDwgHandles() = 0; + virtual bool readDwgTables(DRW_Header& hdr)=0; + virtual bool readDwgBlocks(DRW_Interface& intfa) = 0; + virtual bool readDwgEntities(DRW_Interface& intfa) = 0; + virtual bool readDwgObjects(DRW_Interface& intfa) = 0; + + virtual bool readDwgEntity(dwgBuffer *dbuf, objHandle& obj, DRW_Interface& intfa); + bool readDwgObject(dwgBuffer *dbuf, objHandle& obj, DRW_Interface& intfa); + void parseAttribs(DRW_Entity* e); + std::string findTableName(DRW::TTYPE table, dint32 handle); + + void setCodePage(std::string *c){decoder.setCodePage(c, false);} + std::string getCodePage(){ return decoder.getCodePage();} + bool readDwgHeader(DRW_Header& hdr, dwgBuffer *buf, dwgBuffer *hBuf); + bool readDwgHandles(dwgBuffer *dbuf, duint32 offset, duint32 size); + bool readDwgTables(DRW_Header& hdr, dwgBuffer *dbuf); + bool checkSentinel(dwgBuffer *buf, enum secEnum::DWGSection, bool start); + + bool readDwgBlocks(DRW_Interface& intfa, dwgBuffer *dbuf); + bool readDwgEntities(DRW_Interface& intfa, dwgBuffer *dbuf); + bool readDwgObjects(DRW_Interface& intfa, dwgBuffer *dbuf); + bool readPlineVertex(DRW_Polyline& pline, dwgBuffer *dbuf); + +public: + std::mapObjectMap; + std::mapobjObjectMap; //stores the ojects & entities not read in readDwgEntities + std::mapremainingMap; //stores the ojects & entities not read in all proces, for debug only + std::map ltypemap; + std::map layermap; + std::map blockmap; + std::map stylemap; + std::map dimstylemap; + std::map vportmap; + std::map blockRecordmap; + std::map appIdmap; +// duint32 currBlock; + duint8 maintenanceVersion; + +protected: + dwgBuffer *fileBuf; + dwgR *parent; + DRW::Version version; + +//seeker (position) for the beginning sentinel of the image data (R13 to R15) + duint32 previewImagePos; + +//sections map + std::mapsections; + std::map classesmap; + +protected: + DRW_TextCodec decoder; + +protected: +// duint32 blockCtrl; + duint32 nextEntLink; + duint32 prevEntLink; +}; + + + +#endif // DWGREADER_H diff --git a/extlib/libdxfrw/intern/dwgreader15.cpp b/extlib/libdxfrw/intern/dwgreader15.cpp new file mode 100644 index 0000000..41bbe9b --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader15.cpp @@ -0,0 +1,198 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include +#include +#include +#include "drw_dbg.h" +#include "dwgreader15.h" +#include "drw_textcodec.h" +#include "../libdwgr.h" + +bool dwgReader15::readMetaData() { + version = parent->getVersion(); + decoder.setVersion(version, false); + DRW_DBG("dwgReader15::readMetaData\n"); + if (! fileBuf->setPosition(13)) + return false; + previewImagePos = fileBuf->getRawLong32(); + DRW_DBG("previewImagePos (seekerImageData) = "); DRW_DBG(previewImagePos); + /* MEASUREMENT system variable 2 bytes*/ + duint16 meas = fileBuf->getRawShort16(); + DRW_DBG("\nMEASUREMENT (0 = English, 1 = Metric)= "); DRW_DBG(meas); + duint16 cp = fileBuf->getRawShort16(); + DRW_DBG("\ncodepage= "); DRW_DBG(cp); DRW_DBG("\n"); + if (cp == 29) //TODO RLZ: locate wath code page and correct this + decoder.setCodePage("ANSI_1252", false); + if (cp == 30) + decoder.setCodePage("ANSI_1252", false); + return true; +} + +bool dwgReader15::readFileHeader() { + bool ret = true; + DRW_DBG("dwgReader15::readFileHeader\n"); + if (! fileBuf->setPosition(21)) + return false; + duint32 count = fileBuf->getRawLong32(); + DRW_DBG("count records= "); DRW_DBG(count); DRW_DBG("\n"); + + for (unsigned int i = 0; i < count; i++) { + duint8 rec = fileBuf->getRawChar8(); + duint32 address = fileBuf->getRawLong32(); + duint32 size = fileBuf->getRawLong32(); + dwgSectionInfo si; + si.Id = rec; + si.size = size; + si.address = address; + if (rec == 0) { + DRW_DBG("\nSection HEADERS address= "); + DRW_DBG(address); DRW_DBG(" size= "); DRW_DBG(size); + sections[secEnum::HEADER] = si; + } else if (rec == 1) { + DRW_DBG("\nSection CLASSES address= "); + DRW_DBG(address); DRW_DBG(" size= "); DRW_DBG(size); + sections[secEnum::CLASSES] = si; + } else if (rec == 2) { + DRW_DBG("\nSection OBJECTS (handles) address= "); + DRW_DBG(address); DRW_DBG(" size= "); DRW_DBG(size); + sections[secEnum::HANDLES] = si; + } else if (rec == 3) { + DRW_DBG("\nSection UNKNOWN address= "); + DRW_DBG(address); DRW_DBG(" size= "); DRW_DBG(size); + sections[secEnum::UNKNOWNS] = si; + } else if (rec == 4) { + DRW_DBG("\nSection R14DATA (AcDb:Template) address= "); + DRW_DBG(address); DRW_DBG(" size= "); DRW_DBG(size); + sections[secEnum::TEMPLATE] = si; + } else if (rec == 5) { + DRW_DBG("\nSection R14REC5 (AcDb:AuxHeader) address= "); + DRW_DBG(address); DRW_DBG(" size= "); DRW_DBG(size); + sections[secEnum::AUXHEADER] = si; + } else { + std::cerr << "\nUnsupported section number\n"; + } + } + if (! fileBuf->isGood()) + return false; + DRW_DBG("\nposition after read section locator records= "); DRW_DBG(fileBuf->getPosition()); + DRW_DBG(", bit are= "); DRW_DBG(fileBuf->getBitPos()); + duint32 ckcrc = fileBuf->crc8(0,0,fileBuf->getPosition()); + DRW_DBG("\nfile header crc8 0 result= "); DRW_DBG(ckcrc); + switch (count){ + case 3: + ckcrc = ckcrc ^ 0xA598; + break; + case 4: + ckcrc = ckcrc ^ 0x8101; + break; + case 5: + ckcrc = ckcrc ^ 0x3CC4; + break; + case 6: + ckcrc = ckcrc ^ 0x8461; + } + DRW_DBG("\nfile header crc8 xor result= "); DRW_DBG(ckcrc); + DRW_DBG("\nfile header CRC= "); DRW_DBG(fileBuf->getRawShort16()); + DRW_DBG("\nfile header sentinel= "); + checkSentinel(fileBuf, secEnum::FILEHEADER, false); + + DRW_DBG("\nposition after read file header sentinel= "); DRW_DBG(fileBuf->getPosition()); + DRW_DBG(", bit are= "); DRW_DBG(fileBuf->getBitPos()); + + DRW_DBG("\ndwgReader15::readFileHeader END\n"); + return ret; +} + +bool dwgReader15::readDwgHeader(DRW_Header& hdr){ + DRW_DBG("dwgReader15::readDwgHeader\n"); + dwgSectionInfo si = sections[secEnum::HEADER]; + if (si.Id<0)//not found, ends + return false; + if (!fileBuf->setPosition(si.address)) + return false; + duint8 *tmpByteStr = new duint8[si.size]; + fileBuf->getBytes(tmpByteStr, si.size); + dwgBuffer buff(tmpByteStr, si.size, &decoder); + DRW_DBG("Header section sentinel= "); + checkSentinel(&buff, secEnum::HEADER, true); + bool ret = dwgReader::readDwgHeader(hdr, &buff, &buff); + delete[]tmpByteStr; + return ret; +} + + +bool dwgReader15::readDwgClasses(){ + DRW_DBG("\ndwgReader15::readDwgClasses\n"); + dwgSectionInfo si = sections[secEnum::CLASSES]; + if (si.Id<0)//not found, ends + return false; + if (!fileBuf->setPosition(si.address)) + return false; + + DRW_DBG("classes section sentinel= "); + checkSentinel(fileBuf, secEnum::CLASSES, true); + + duint32 size = fileBuf->getRawLong32(); + if (size != (si.size - 38)) { + DRW_DBG("\nWARNING dwgReader15::readDwgClasses size are "); DRW_DBG(size); + DRW_DBG(" and secSize - 38 are "); DRW_DBG(si.size - 38); DRW_DBG("\n"); + } + duint8 *tmpByteStr = new duint8[size]; + fileBuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + size--; //reduce 1 byte instead of check pos + bitPos + while (size > buff.getPosition()) { + DRW_Class *cl = new DRW_Class(); + cl->parseDwg(version, &buff, &buff); + classesmap[cl->classNum] = cl; + } + DRW_DBG("\nCRC: "); DRW_DBGH(fileBuf->getRawShort16()); + DRW_DBG("\nclasses section end sentinel= "); + checkSentinel(fileBuf, secEnum::CLASSES, false); + bool ret = buff.isGood(); + delete[]tmpByteStr; + return ret; +} + +bool dwgReader15::readDwgHandles() { + DRW_DBG("\ndwgReader15::readDwgHandles\n"); + dwgSectionInfo si = sections[secEnum::HANDLES]; + if (si.Id<0)//not found, ends + return false; + + bool ret = dwgReader::readDwgHandles(fileBuf, si.address, si.size); + return ret; +} + +/*********** objects ************************/ +/** + * Reads all the object referenced in the object map section of the DWG file + * (using their object file offsets) + */ +bool dwgReader15::readDwgTables(DRW_Header& hdr) { + bool ret = dwgReader::readDwgTables(hdr, fileBuf); + + return ret; +} + +/** + * Reads all the object referenced in the object map section of the DWG file + * (using their object file offsets) + */ +bool dwgReader15::readDwgBlocks(DRW_Interface& intfa) { + bool ret = true; + ret = dwgReader::readDwgBlocks(intfa, fileBuf); + return ret; +} diff --git a/extlib/libdxfrw/intern/dwgreader15.h b/extlib/libdxfrw/intern/dwgreader15.h new file mode 100644 index 0000000..8b3dc24 --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader15.h @@ -0,0 +1,47 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DWGREADER15_H +#define DWGREADER15_H + +#include +#include +#include "drw_textcodec.h" +#include "dwgbuffer.h" +#include "dwgreader.h" + +class dwgReader15 : public dwgReader { +public: + dwgReader15(std::ifstream *stream, dwgR *p):dwgReader(stream, p){ } + virtual ~dwgReader15() {} + bool readMetaData(); + bool readFileHeader(); + bool readDwgHeader(DRW_Header& hdr); + bool readDwgClasses(); + bool readDwgHandles(); + bool readDwgTables(DRW_Header& hdr); + bool readDwgBlocks(DRW_Interface& intfa); + bool readDwgEntities(DRW_Interface& intfa){ + bool ret = true; + ret = dwgReader::readDwgEntities(intfa, fileBuf); + return ret; + } + bool readDwgObjects(DRW_Interface& intfa){ + bool ret = true; + ret = dwgReader::readDwgObjects(intfa, fileBuf); + return ret; + } +// bool readDwgEntity(objHandle& obj, DRW_Interface& intfa); +}; + + +#endif // DWGREADER15_H diff --git a/extlib/libdxfrw/intern/dwgreader18.cpp b/extlib/libdxfrw/intern/dwgreader18.cpp new file mode 100644 index 0000000..d91b92e --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader18.cpp @@ -0,0 +1,594 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include +#include +#include +#include "drw_dbg.h" +#include "dwgreader18.h" +#include "dwgutil.h" +#include "drw_textcodec.h" +#include "../libdwgr.h" + +void dwgReader18::genMagicNumber(){ + int size =0x114; + duint8 *tmpMagicStr = new duint8[size]; + duint8 *p = tmpMagicStr; + int rSeed =1; + while (size--) { + rSeed *= 0x343fd; + rSeed += 0x269ec3; + *p++ = static_cast(rSeed >> 0x10); + } + int j = 0; + size =0x114; + for (int i=0; i< size;i++) { + DRW_DBGH(tmpMagicStr[i]); + if (j == 15) { + DRW_DBG("\n"); + j = 0; + } else { + DRW_DBG(", "); + j++; + } + } + delete[]tmpMagicStr; +} + +duint32 dwgReader18::checksum(duint32 seed, duint8* data, duint32 sz){ + duint32 size = sz; + duint32 sum1 = seed & 0xffff; + duint32 sum2 = seed >> 0x10; + while (size != 0) { +// duint32 chunkSize = min(0x15b0, size); + duint32 chunkSize = 0x15b0 < size? 0x15b0:size; + size -= chunkSize; + for (duint32 i = 0; i < chunkSize; i++) { + sum1 += *data++; + sum2 += sum1; + } + sum1 %= 0xFFF1; + sum2 %= 0xFFF1; + } + return (sum2 << 0x10) | (sum1 & 0xffff); +} + + //called: Section page map: 0x41630e3b +void dwgReader18::parseSysPage(duint8 *decompSec, duint32 decompSize){ + DRW_DBG("\nparseSysPage:\n "); + duint32 compSize = fileBuf->getRawLong32(); + DRW_DBG("Compressed size= "); DRW_DBG(compSize); DRW_DBG(", "); DRW_DBGH(compSize); + DRW_DBG("\nCompression type= "); DRW_DBGH(fileBuf->getRawLong32()); + DRW_DBG("\nSection page checksum= "); DRW_DBGH(fileBuf->getRawLong32()); DRW_DBG("\n"); + + duint8 hdrData[20]; + fileBuf->moveBitPos(-160); + fileBuf->getBytes(hdrData, 20); + for (duint8 i= 16; i<20; ++i) + hdrData[i]=0; + duint32 calcsH = checksum(0, hdrData, 20); + DRW_DBG("Calc hdr checksum= "); DRW_DBGH(calcsH); + duint8 *tmpCompSec = new duint8[compSize]; + fileBuf->getBytes(tmpCompSec, compSize); + duint32 calcsD = checksum(calcsH, tmpCompSec, compSize); + DRW_DBG("\nCalc data checksum= "); DRW_DBGH(calcsD); DRW_DBG("\n"); + +#ifdef DRW_DBG_DUMP + for (unsigned int i=0, j=0; i< compSize;i++) { + DRW_DBGH( (unsigned char)compSec[i]); + if (j == 7) { DRW_DBG("\n"); j = 0; + } else { DRW_DBG(", "); j++; } + } DRW_DBG("\n"); +#endif + DRW_DBG("decompresing "); DRW_DBG(compSize); DRW_DBG(" bytes in "); DRW_DBG(decompSize); DRW_DBG(" bytes\n"); + dwgCompressor comp; + comp.decompress18(tmpCompSec, decompSec, compSize, decompSize); +#ifdef DRW_DBG_DUMP + for (unsigned int i=0, j=0; i< decompSize;i++) { + DRW_DBGH( decompSec[i]); + if (j == 7) { DRW_DBG("\n"); j = 0; + } else { DRW_DBG(", "); j++; } + } DRW_DBG("\n"); +#endif + delete[]tmpCompSec; +} + + //called ???: Section map: 0x4163003b +bool dwgReader18::parseDataPage(dwgSectionInfo si/*, duint8 *dData*/){ + DRW_DBG("\nparseDataPage\n "); + objData = new duint8 [si.pageCount * si.maxSize]; + + for (std::map::iterator it=si.pages.begin(); it!=si.pages.end(); ++it){ + dwgPageInfo pi = it->second; + if (!fileBuf->setPosition(pi.address)) + return false; + //decript section header + duint8 hdrData[32]; + fileBuf->getBytes(hdrData, 32); + dwgCompressor::decrypt18Hdr(hdrData, 32, pi.address); + DRW_DBG("Section "); DRW_DBG(si.name); DRW_DBG(" page header=\n"); + for (unsigned int i=0, j=0; i< 32;i++) { + DRW_DBGH( (unsigned char)hdrData[i]); + if (j == 7) { + DRW_DBG("\n"); + j = 0; + } else { + DRW_DBG(", "); + j++; + } + } DRW_DBG("\n"); + + DRW_DBG("\n Page number= "); DRW_DBGH(pi.Id); + DRW_DBG("\n size in file= "); DRW_DBGH(pi.size); + DRW_DBG("\n address in file= "); DRW_DBGH(pi.address); + DRW_DBG("\n Data size= "); DRW_DBGH(pi.dataSize); + DRW_DBG("\n Start offset= "); DRW_DBGH(pi.startOffset); DRW_DBG("\n"); + dwgBuffer bufHdr(hdrData, 32, &decoder); + DRW_DBG(" section page type= "); DRW_DBGH(bufHdr.getRawLong32()); + DRW_DBG("\n section number= "); DRW_DBGH(bufHdr.getRawLong32()); + pi.cSize = bufHdr.getRawLong32(); + DRW_DBG("\n data size (compressed)= "); DRW_DBGH(pi.cSize); DRW_DBG(" dec "); DRW_DBG(pi.cSize); + pi.uSize = bufHdr.getRawLong32(); + DRW_DBG("\n page size (decompressed)= "); DRW_DBGH(pi.uSize); DRW_DBG(" dec "); DRW_DBG(pi.uSize); + DRW_DBG("\n start offset (in decompressed buffer)= "); DRW_DBGH(bufHdr.getRawLong32()); + DRW_DBG("\n unknown= "); DRW_DBGH(bufHdr.getRawLong32()); + DRW_DBG("\n header checksum= "); DRW_DBGH(bufHdr.getRawLong32()); + DRW_DBG("\n data checksum= "); DRW_DBGH(bufHdr.getRawLong32()); DRW_DBG("\n"); + + //get compresed data + duint8 *cData = new duint8[pi.cSize]; + if (!fileBuf->setPosition(pi.address+32)) + return false; + fileBuf->getBytes(cData, pi.cSize); + + //calculate checksum + duint32 calcsD = checksum(0, cData, pi.cSize); + for (duint8 i= 24; i<28; ++i) + hdrData[i]=0; + duint32 calcsH = checksum(calcsD, hdrData, 32); + DRW_DBG("Calc header checksum= "); DRW_DBGH(calcsH); + DRW_DBG("\nCalc data checksum= "); DRW_DBGH(calcsD); DRW_DBG("\n"); + + duint8* oData = objData + pi.startOffset; + pi.uSize = si.maxSize; + DRW_DBG("decompresing "); DRW_DBG(pi.cSize); DRW_DBG(" bytes in "); DRW_DBG(pi.uSize); DRW_DBG(" bytes\n"); + dwgCompressor comp; + comp.decompress18(cData, oData, pi.cSize, pi.uSize); + delete[]cData; + } + return true; +} + +bool dwgReader18::readMetaData() { + version = parent->getVersion(); + decoder.setVersion(version, false); + DRW_DBG("dwgReader18::readMetaData\n"); + if (! fileBuf->setPosition(11)) + return false; + maintenanceVersion = fileBuf->getRawChar8(); + DRW_DBG("maintenance verion= "); DRW_DBGH(maintenanceVersion); + DRW_DBG("\nbyte at 0x0C= "); DRW_DBGH(fileBuf->getRawChar8()); + previewImagePos = fileBuf->getRawLong32(); //+ page header size (0x20). + DRW_DBG("\npreviewImagePos (seekerImageData) = "); DRW_DBG(previewImagePos); + DRW_DBG("\napp Dwg version= "); DRW_DBGH(fileBuf->getRawChar8()); DRW_DBG(", "); + DRW_DBG("\napp maintenance version= "); DRW_DBGH(fileBuf->getRawChar8()); + duint16 cp = fileBuf->getRawShort16(); + DRW_DBG("\ncodepage= "); DRW_DBG(cp); + if (cp == 30) + decoder.setCodePage("ANSI_1252", false); + DRW_DBG("\n3 0x00 bytes(seems 0x00, appDwgV & appMaintV) = "); DRW_DBGH(fileBuf->getRawChar8()); DRW_DBG(", "); + DRW_DBGH(fileBuf->getRawChar8()); DRW_DBG(", "); DRW_DBGH(fileBuf->getRawChar8()); + securityFlags = fileBuf->getRawLong32(); + DRW_DBG("\nsecurity flags= "); DRW_DBG(securityFlags); + // UNKNOWN SECTION 4 bytes + duint32 uk = fileBuf->getRawLong32(); + DRW_DBG("\nUNKNOWN SECTION ( 4 bytes) = "); DRW_DBG(uk); + duint32 sumInfoAddr = fileBuf->getRawLong32(); + DRW_DBG("\nsummary Info Address= "); DRW_DBG(sumInfoAddr); + duint32 vbaAdd = fileBuf->getRawLong32(); + DRW_DBG("\nVBA address= "); DRW_DBGH(vbaAdd); + DRW_DBG("\npos 0x28 are 0x00000080= "); DRW_DBGH(fileBuf->getRawLong32()); + DRW_DBG("\n"); + return true; +} + +bool dwgReader18::readFileHeader() { + + if (! fileBuf->setPosition(0x80)) + return false; + +// genMagicNumber(); DBG("\n"); DBG("\n"); + DRW_DBG("Encripted Header Data=\n"); + duint8 byteStr[0x6C]; + int size =0x6C; + for (int i=0, j=0; i< 0x6C;i++) { + duint8 ch = fileBuf->getRawChar8(); + DRW_DBGH(ch); + if (j == 15) { + DRW_DBG("\n"); + j = 0; + } else { + DRW_DBG(", "); + j++; + } + byteStr[i] = DRW_magicNum18[i] ^ ch; + } + DRW_DBG("\n"); + +// size =0x6C; + DRW_DBG("Decripted Header Data=\n"); + for (int i=0, j = 0; i< size;i++) { + DRW_DBGH( (unsigned char)byteStr[i]); + if (j == 15) { + DRW_DBG("\n"); + j = 0; + } else { + DRW_DBG(", "); + j++; + } + } + dwgBuffer buff(byteStr, 0x6C, &decoder); + std::string name = reinterpret_cast(byteStr); + DRW_DBG("\nFile ID string (AcFssFcAJMB)= "); DRW_DBG(name.c_str()); + //ID string + NULL = 12 + buff.setPosition(12); + DRW_DBG("\n0x00 long= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\n0x6c long= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\n0x04 long= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\nRoot tree node gap= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\nLowermost left tree node gap= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\nLowermost right tree node gap= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\nUnknown long (1)= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\nLast section page Id= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\nLast section page end address 64b= "); DRW_DBGH(buff.getRawLong64()); + DRW_DBG("\nStart of second header data address 64b= "); DRW_DBGH(buff.getRawLong64()); + DRW_DBG("\nGap amount= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\nSection page amount= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\n0x20 long= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\n0x80 long= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\n0x40 long= "); DRW_DBGH(buff.getRawLong32()); + dint32 secPageMapId = buff.getRawLong32(); + DRW_DBG("\nSection Page Map Id= "); DRW_DBGH(secPageMapId); + duint64 secPageMapAddr = buff.getRawLong64()+0x100; + DRW_DBG("\nSection Page Map address 64b= "); DRW_DBGH(secPageMapAddr); + DRW_DBG("\nSection Page Map address 64b dec= "); DRW_DBG(secPageMapAddr); + duint32 secMapId = buff.getRawLong32(); + DRW_DBG("\nSection Map Id= "); DRW_DBGH(secMapId); + DRW_DBG("\nSection page array size= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\nGap array size= "); DRW_DBGH(buff.getRawLong32()); + //TODO: verify CRC + DRW_DBG("\nCRC32= "); DRW_DBGH(buff.getRawLong32()); + for (duint8 i = 0x68; i < 0x6c; ++i) + byteStr[i] = '\0'; +// byteStr[i] = '\0'; + duint32 crcCalc = buff.crc32(0x00,0,0x6C); + DRW_DBG("\nCRC32 calculated= "); DRW_DBGH(crcCalc); + + DRW_DBG("\nEnd Encrypted Data. Reads 0x14 bytes, equal to magic number:\n"); + for (int i=0, j=0; i< 0x14;i++) { + DRW_DBG("magic num: "); DRW_DBGH( (unsigned char)DRW_magicNumEnd18[i]); + DRW_DBG(",read "); DRW_DBGH( (unsigned char)fileBuf->getRawChar8()); + if (j == 3) { + DRW_DBG("\n"); + j = 0; + } else { + DRW_DBG(", "); + j++; + } + } +// At this point are parsed the first 256 bytes + DRW_DBG("\nJump to Section Page Map address: "); DRW_DBGH(secPageMapAddr); + + if (! fileBuf->setPosition(secPageMapAddr)) + return false; + duint32 pageType = fileBuf->getRawLong32(); + DRW_DBG("\nSection page type= "); DRW_DBGH(pageType); + duint32 decompSize = fileBuf->getRawLong32(); + DRW_DBG("\nDecompressed size= "); DRW_DBG(decompSize); DRW_DBG(", "); DRW_DBGH(decompSize); + if (pageType != 0x41630e3b){ + //bad page type, ends + DRW_DBG("Warning, bad page type, was expected 0x41630e3b instead of"); DRW_DBGH(pageType); DRW_DBG("\n"); + return false; + } + duint8 *tmpDecompSec = new duint8[decompSize]; + parseSysPage(tmpDecompSec, decompSize); + +//parses "Section page map" decompresed data + dwgBuffer buff2(tmpDecompSec, decompSize, &decoder); + duint32 address = 0x100; + //stores temporaly info of all pages: + std::mapsectionPageMapTmp; + + for (unsigned int i = 0; i < decompSize;) { + dint32 id = buff2.getRawLong32();//RLZ bad can be +/- + duint32 size = buff2.getRawLong32(); + i += 8; + DRW_DBG("Page num= "); DRW_DBG(id); DRW_DBG(" size= "); DRW_DBGH(size); + DRW_DBG(" address= "); DRW_DBGH(address); DRW_DBG("\n"); + //TODO num can be negative indicating gap +// duint64 ind = id > 0 ? id : -id; + if (id < 0){ + DRW_DBG("Parent= "); DRW_DBG(buff2.getRawLong32()); + DRW_DBG("\nLeft= "); DRW_DBG(buff2.getRawLong32()); + DRW_DBG(", Right= "); DRW_DBG(buff2.getRawLong32()); + DRW_DBG(", 0x00= ");DRW_DBGH(buff2.getRawLong32()); DRW_DBG("\n"); + i += 16; + } + + sectionPageMapTmp[id] = dwgPageInfo(id, address, size); + address += size; + } + delete[]tmpDecompSec; + + DRW_DBG("\n*** dwgReader18: Processing Data Section Map ***\n"); + dwgPageInfo sectionMap = sectionPageMapTmp[secMapId]; + if (!fileBuf->setPosition(sectionMap.address)) + return false; + pageType = fileBuf->getRawLong32(); + DRW_DBG("\nSection page type= "); DRW_DBGH(pageType); + decompSize = fileBuf->getRawLong32(); + DRW_DBG("\nDecompressed size= "); DRW_DBG(decompSize); DRW_DBG(", "); DRW_DBGH(decompSize); + if (pageType != 0x4163003b){ + //bad page type, ends + DRW_DBG("Warning, bad page type, was expected 0x4163003b instead of"); DRW_DBGH(pageType); DRW_DBG("\n"); + return false; + } + tmpDecompSec = new duint8[decompSize]; + parseSysPage(tmpDecompSec, decompSize); + +//reads sections: + DRW_DBG("\n*** dwgReader18: reads sections:"); + dwgBuffer buff3(tmpDecompSec, decompSize, &decoder); + duint32 numDescriptions = buff3.getRawLong32(); + DRW_DBG("\nnumDescriptions (sections)= "); DRW_DBG(numDescriptions); + DRW_DBG("\n0x02 long= "); DRW_DBGH(buff3.getRawLong32()); + DRW_DBG("\n0x00007400 long= "); DRW_DBGH(buff3.getRawLong32()); + DRW_DBG("\n0x00 long= "); DRW_DBGH(buff3.getRawLong32()); + DRW_DBG("\nunknown long (numDescriptions?)= "); DRW_DBG(buff3.getRawLong32()); DRW_DBG("\n"); + + for (unsigned int i = 0; i < numDescriptions; i++) { + dwgSectionInfo secInfo; + secInfo.size = buff3.getRawLong64(); + DRW_DBG("\nSize of section= "); DRW_DBGH(secInfo.size); + secInfo.pageCount = buff3.getRawLong32(); + DRW_DBG("\nPage count= "); DRW_DBGH(secInfo.pageCount); + secInfo.maxSize = buff3.getRawLong32(); + DRW_DBG("\nMax Decompressed Size= "); DRW_DBGH(secInfo.maxSize); + DRW_DBG("\nunknown long= "); DRW_DBGH(buff3.getRawLong32()); + secInfo.compresed = buff3.getRawLong32(); + DRW_DBG("\nis Compressed? 1:no, 2:yes= "); DRW_DBGH(secInfo.compresed); + secInfo.Id = buff3.getRawLong32(); + DRW_DBG("\nSection Id= "); DRW_DBGH(secInfo.Id); + secInfo.encrypted = buff3.getRawLong32(); + //encrypted (doc: 0 no, 1 yes, 2 unkn) on read: objects 0 and encrypted yes + DRW_DBG("\nEncrypted= "); DRW_DBGH(secInfo.encrypted); + duint8 nameCStr[64]; + buff3.getBytes(nameCStr, 64); + secInfo.name = reinterpret_cast(nameCStr); + DRW_DBG("\nSection std::Name= "); DRW_DBG( secInfo.name.c_str() ); DRW_DBG("\n"); + for (unsigned int i = 0; i < secInfo.pageCount; i++){ + duint32 pn = buff3.getRawLong32(); + dwgPageInfo pi = sectionPageMapTmp[pn]; //get a copy + DRW_DBG(" reading pag num = "); DRW_DBGH(pn); + pi.dataSize = buff3.getRawLong32(); + pi.startOffset = buff3.getRawLong64(); + secInfo.pages[pn]= pi;//complete copy in secInfo + DRW_DBG("\n Page number= "); DRW_DBGH(secInfo.pages[pn].Id); + DRW_DBG("\n size in file= "); DRW_DBGH(secInfo.pages[pn].size); + DRW_DBG("\n address in file= "); DRW_DBGH(secInfo.pages[pn].address); + DRW_DBG("\n Data size= "); DRW_DBGH(secInfo.pages[pn].dataSize); + DRW_DBG("\n Start offset= "); DRW_DBGH(secInfo.pages[pn].startOffset); DRW_DBG("\n"); + } + //do not save empty section + if (!secInfo.name.empty()) { + DRW_DBG("Saved section Name= "); DRW_DBG( secInfo.name.c_str() ); DRW_DBG("\n"); + sections[secEnum::getEnum(secInfo.name)] = secInfo; + } + } + delete[]tmpDecompSec; + + if (! fileBuf->isGood()) + return false; + DRW_DBG("\ndwgReader18::readFileHeader END\n\n"); + return true; +} + +bool dwgReader18::readDwgHeader(DRW_Header& hdr){ + DRW_DBG("dwgReader18::readDwgHeader\n"); + dwgSectionInfo si = sections[secEnum::HEADER]; + if (si.Id<0)//not found, ends + return false; + bool ret = parseDataPage(si/*, objData*/); + //global store for uncompressed data of all pages + uncompSize=si.size; + if (ret) { + dwgBuffer dataBuf(objData, si.size, &decoder); + DRW_DBG("Header section sentinel= "); + checkSentinel(&dataBuf, secEnum::HEADER, true); + if (version == DRW::AC1018){ + ret = dwgReader::readDwgHeader(hdr, &dataBuf, &dataBuf); + } else { + dwgBuffer handleBuf(objData, si.size, &decoder); + ret = dwgReader::readDwgHeader(hdr, &dataBuf, &handleBuf); + } + } + //Cleanup: global store for uncompressed data of all pages + if (objData != NULL){ + delete[] objData; + objData = NULL; + } + return ret; +} + + +bool dwgReader18::readDwgClasses(){ + DRW_DBG("\ndwgReader18::readDwgClasses\n"); + dwgSectionInfo si = sections[secEnum::CLASSES]; + if (si.Id<0)//not found, ends + return false; + bool ret = parseDataPage(si/*, objData*/); + //global store for uncompressed data of all pages + uncompSize=si.size; + if (ret) { + + dwgBuffer dataBuf(objData, uncompSize, &decoder); + + DRW_DBG("classes section sentinel= "); + checkSentinel(&dataBuf, secEnum::CLASSES, true); + + duint32 size = dataBuf.getRawLong32(); + DRW_DBG("\ndata size in bytes "); DRW_DBG(size); + if (version > DRW::AC1021 && maintenanceVersion > 3) { //2010+ + duint32 hSize = dataBuf.getRawLong32(); + DRW_DBG("\n2010+ & MV> 3, higth 32b: "); DRW_DBG(hSize); + } + duint32 bitSize = 0; + if (version > DRW::AC1021) {//2007+ + bitSize = dataBuf.getRawLong32(); + DRW_DBG("\ntotal size in bits "); DRW_DBG(bitSize); +} + duint32 maxClassNum = dataBuf.getBitShort(); + DRW_DBG("\nMaximum class number "); DRW_DBG(maxClassNum); + DRW_DBG("\nRc 1 "); DRW_DBG(dataBuf.getRawChar8()); + DRW_DBG("\nRc 2 "); DRW_DBG(dataBuf.getRawChar8()); + DRW_DBG("\nBit "); DRW_DBG(dataBuf.getBit()); + + /*******************************/ + dwgBuffer *strBuf = &dataBuf; + dwgBuffer strBuff(objData, uncompSize, &decoder); + //prepare string stream for 2007+ + if (version > DRW::AC1021) {//2007+ + strBuf = &strBuff; + duint32 strStartPos = bitSize+191;//size in bits + 24 bytes (sn+size+hSize) - 1 bit (endbit) + DRW_DBG("\nstrStartPos: "); DRW_DBG(strStartPos); + strBuff.setPosition(strStartPos >> 3); + strBuff.setBitPos(strStartPos & 7); + DRW_DBG("\nclasses strings buff.getPosition: "); DRW_DBG(strBuff.getPosition()); + DRW_DBG("\nclasses strings buff.getBitPos: "); DRW_DBG(strBuff.getBitPos()); + DRW_DBG("\nendBit "); DRW_DBG(strBuff.getBit()); + strStartPos -= 16;//decrement 16 bits + DRW_DBG("\nstrStartPos: "); DRW_DBG(strStartPos); + strBuff.setPosition(strStartPos >> 3); + strBuff.setBitPos(strStartPos & 7); + DRW_DBG("\nclasses strings buff.getPosition: "); DRW_DBG(strBuff.getPosition()); + DRW_DBG("\nclasses strings buff.getBitPos: "); DRW_DBG(strBuff.getBitPos()); + duint32 strDataSize = strBuff.getRawShort16(); + DRW_DBG("\nstrDataSize: "); DRW_DBG(strDataSize); + if (strDataSize & 0x8000) { + strStartPos -= 16;//decrement 16 bits + strDataSize &= 0x7FFF; //strip 0x8000; + strBuff.setPosition(strStartPos >> 3); + strBuff.setBitPos(strStartPos & 7); + duint32 hiSize = strBuff.getRawShort16(); + strDataSize |= (hiSize << 15); + } + strStartPos -= strDataSize; + DRW_DBG("\nstrStartPos: "); DRW_DBG(strStartPos); + strBuff.setPosition(strStartPos >> 3); + strBuff.setBitPos(strStartPos & 7); + DRW_DBG("\nclasses strings buff.getPosition: "); DRW_DBG(strBuff.getPosition()); + DRW_DBG("\nclasses strings buff.getBitPos: "); DRW_DBG(strBuff.getBitPos()); + } + + /*******************************/ + + duint32 endDataPos = maxClassNum-499; + DRW_DBG("\nbuff.getPosition: "); DRW_DBG(dataBuf.getPosition()); + for (duint32 i= 0; iparseDwg(version, &dataBuf, strBuf); + classesmap[cl->classNum] = cl; + DRW_DBG("\nbuff.getPosition: "); DRW_DBG(dataBuf.getPosition()); + } + DRW_DBG("\nend classes data buff.getPosition: "); DRW_DBG(dataBuf.getPosition()); + DRW_DBG("\nend classes data buff.getBitPos: "); DRW_DBG(dataBuf.getBitPos()); + DRW_DBG("\nend classes strings buff.getPosition: "); DRW_DBG(strBuf->getPosition()); + DRW_DBG("\nend classes strings buff.getBitPos: "); DRW_DBG(strBuf->getBitPos()); + +/***************/ + + strBuf->setPosition(strBuf->getPosition()+1);//skip remaining bits + DRW_DBG("\nCRC: "); DRW_DBGH(strBuf->getRawShort16()); + if (version > DRW::AC1018){ + DRW_DBG("\nunknown CRC: "); DRW_DBGH(strBuf->getRawShort16()); + } + DRW_DBG("\nclasses section end sentinel= "); + checkSentinel(strBuf, secEnum::CLASSES, false); + + ret = strBuf->isGood(); + } + //Cleanup: global store for uncompressed data of all pages + if (objData != NULL){ + delete[] objData; + objData = NULL; + } + return ret; +} + + +/*********** objects map ************************/ +/** Note: object map are split in sections with max size 2035? + * heach section are 2 bytes size + data bytes + 2 bytes crc + * size value are data bytes + 2 and to calculate crc are used + * 2 bytes size + data bytes + * last section are 2 bytes size + 2 bytes crc (size value always 2) +**/ +bool dwgReader18::readDwgHandles() { + DRW_DBG("\ndwgReader18::readDwgHandles\n"); + dwgSectionInfo si = sections[secEnum::HANDLES]; + if (si.Id<0)//not found, ends + return false; + bool ret = parseDataPage(si); + //global store for uncompressed data of all pages + uncompSize=si.size; + if (ret) { + + dwgBuffer dataBuf(objData, uncompSize, &decoder); + + ret = dwgReader::readDwgHandles(&dataBuf, 0, si.size); + } + //Cleanup: global store for uncompressed data of all pages + if (objData != NULL){ + delete[] objData; + objData = NULL; + uncompSize = 0; + } + return ret; +} + + +/*********** objects ************************/ +/** + * Reads all the object referenced in the object map section of the DWG file + * (using their object file offsets) + */ +bool dwgReader18::readDwgTables(DRW_Header& hdr) { + DRW_DBG("\ndwgReader18::readDwgTables\n"); + dwgSectionInfo si = sections[secEnum::OBJECTS]; + + if (si.Id<0)//not found, ends + return false; + bool ret = parseDataPage(si/*, objData*/); + //global store for uncompressed data of all pages + uncompSize=si.size; + if (ret) { + + dwgBuffer dataBuf(objData, uncompSize, &decoder); + + ret = dwgReader::readDwgTables(hdr, &dataBuf); + + } + //Do not delete objData in this point, needed in the remaining code + return ret; +} diff --git a/extlib/libdxfrw/intern/dwgreader18.h b/extlib/libdxfrw/intern/dwgreader18.h new file mode 100644 index 0000000..4b66313 --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader18.h @@ -0,0 +1,99 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DWGREADER18_H +#define DWGREADER18_H + +#include +#include +#include "dwgreader.h" +//#include "../drw_textcodec.h" +#include "dwgbuffer.h" + +static const int DRW_magicNum18[] = { + 0x29, 0x23, 0xbe, 0x84, 0xe1, 0x6c, 0xd6, 0xae, + 0x52, 0x90, 0x49, 0xf1, 0xf1, 0xbb, 0xe9, 0xeb, + 0xb3, 0xa6, 0xdb, 0x3c, 0x87, 0x0c, 0x3e, 0x99, + 0x24, 0x5e, 0x0d, 0x1c, 0x06, 0xb7, 0x47, 0xde, + 0xb3, 0x12, 0x4d, 0xc8, 0x43, 0xbb, 0x8b, 0xa6, + 0x1f, 0x03, 0x5a, 0x7d, 0x09, 0x38, 0x25, 0x1f, + 0x5d, 0xd4, 0xcb, 0xfc, 0x96, 0xf5, 0x45, 0x3b, + 0x13, 0x0d, 0x89, 0x0a, 0x1c, 0xdb, 0xae, 0x32, + 0x20, 0x9a, 0x50, 0xee, 0x40, 0x78, 0x36, 0xfd, + 0x12, 0x49, 0x32, 0xf6, 0x9e, 0x7d, 0x49, 0xdc, + 0xad, 0x4f, 0x14, 0xf2, 0x44, 0x40, 0x66, 0xd0, + 0x6b, 0xc4, 0x30, 0xb7, 0x32, 0x3b, 0xa1, 0x22, + 0xf6, 0x22, 0x91, 0x9d, 0xe1, 0x8b, 0x1f, 0xda, + 0xb0, 0xca, 0x99, 0x02 +}; + +static const int DRW_magicNumEnd18[] = { + 0xf8, 0x46, 0x6a, 0x04, 0x96, 0x73, 0x0e, 0xd9, + 0x16, 0x2f, 0x67, 0x68, 0xd4, 0xf7, 0x4a, 0x4a, + 0xd0, 0x57, 0x68, 0x76}; + +class dwgReader18 : public dwgReader { +public: + dwgReader18(std::ifstream *stream, dwgR *p):dwgReader(stream, p){ + objData = NULL; + } + virtual ~dwgReader18(){ + if (objData != NULL) + delete[] objData; + } + bool readMetaData(); + bool readFileHeader(); + bool readDwgHeader(DRW_Header& hdr); + bool readDwgClasses(); + bool readDwgHandles(); + bool readDwgTables(DRW_Header& hdr); + bool readDwgBlocks(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, uncompSize, &decoder); + ret = dwgReader::readDwgBlocks(intfa, &dataBuf); + return ret; + } + + virtual bool readDwgEntities(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, uncompSize, &decoder); + ret = dwgReader::readDwgEntities(intfa, &dataBuf); + return ret; + } + virtual bool readDwgObjects(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, uncompSize, &decoder); + ret = dwgReader::readDwgObjects(intfa, &dataBuf); + return ret; + } + +// bool readDwgEntity(objHandle& obj, DRW_Interface& intfa){ +// bool ret = true; +// return ret; +// } + +protected: + duint8 *objData; + duint64 uncompSize; + +private: + void genMagicNumber(); +// dwgBuffer* bufObj; + void parseSysPage(duint8 *decompSec, duint32 decompSize); //called: Section page map: 0x41630e3b + bool parseDataPage(dwgSectionInfo si/*, duint8 *dData*/); //called ???: Section map: 0x4163003b + duint32 checksum(duint32 seed, duint8* data, duint32 sz); + +private: +duint32 securityFlags; +}; + +#endif // DWGREADER18_H diff --git a/extlib/libdxfrw/intern/dwgreader21.cpp b/extlib/libdxfrw/intern/dwgreader21.cpp new file mode 100644 index 0000000..9d4f23c --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader21.cpp @@ -0,0 +1,487 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include +#include +#include +#include "drw_dbg.h" +#include "dwgreader21.h" +#include "drw_textcodec.h" +#include "../libdwgr.h" + +bool dwgReader21::readMetaData() { + version = parent->getVersion(); + decoder.setVersion(version, false); + DRW_DBG("dwgReader21::readFileHeader()\n"); + DRW_DBG("dwgReader21::parsing metadata\n"); + if (! fileBuf->setPosition(11)) + return false; + maintenanceVersion = fileBuf->getRawChar8(); + DRW_DBG("maintenance verion= "); DRW_DBGH(maintenanceVersion); + DRW_DBG("\nbyte at 0x0C= "); DRW_DBG(fileBuf->getRawChar8()); + previewImagePos = fileBuf->getRawLong32(); + DRW_DBG("previewImagePos (seekerImageData) = "); DRW_DBG(previewImagePos); + DRW_DBG("\n\napp writer version= "); DRW_DBGH(fileBuf->getRawChar8()); + DRW_DBG("\napp writer maintenance version= "); DRW_DBGH(fileBuf->getRawChar8()); + duint16 cp = fileBuf->getRawShort16(); + DRW_DBG("\ncodepage= "); DRW_DBG(cp); + if (cp == 30) + decoder.setCodePage("ANSI_1252", false); + /* UNKNOUWN SECTION 2 bytes*/ + DRW_DBG("\nUNKNOWN SECTION= "); DRW_DBG(fileBuf->getRawShort16()); + DRW_DBG("\nUNKNOUWN SECTION 3b= "); DRW_DBG(fileBuf->getRawChar8()); + duint32 secType = fileBuf->getRawLong32(); + DRW_DBG("\nsecurity type flag= "); DRW_DBGH(secType); + /* UNKNOWN2 SECTION 4 bytes*/ + DRW_DBG("\nUNKNOWN SECTION 4bytes= "); DRW_DBG(fileBuf->getRawLong32()); + + DRW_DBG("\nSummary info address= "); DRW_DBGH(fileBuf->getRawLong32()); + DRW_DBG("\nVBA project address= "); DRW_DBGH(fileBuf->getRawLong32()); + DRW_DBG("\n0x00000080 32b= "); DRW_DBGH(fileBuf->getRawLong32()); + DRW_DBG("\nApp info address= "); DRW_DBGH(fileBuf->getRawLong32()); + //current position are 0x30 from here to 0x80 are undocumented + DRW_DBG("\nAnother address? = "); DRW_DBGH(fileBuf->getRawLong32()); + return true; +} + +bool dwgReader21::parseSysPage(duint64 sizeCompressed, duint64 sizeUncompressed, duint64 correctionFactor, duint64 offset, duint8 *decompData){ + //round to 8 + duint64 alsize = (sizeCompressed + 7) &(-8); + //minimum RS chunk: + duint32 chunks = (((alsize * correctionFactor)+238)/239); + duint64 fpsize = chunks * 255; + + if (! fileBuf->setPosition(offset)) + return false; + duint8 *tmpDataRaw = new duint8[fpsize]; + fileBuf->getBytes(tmpDataRaw, fpsize); + duint8 *tmpDataRS = new duint8[fpsize]; + dwgRSCodec::decode239I(tmpDataRaw, tmpDataRS, fpsize/255); + dwgCompressor::decompress21(tmpDataRS, decompData, sizeCompressed, sizeUncompressed); + delete[]tmpDataRaw; + delete[]tmpDataRS; + return true; +} + +bool dwgReader21::parseDataPage(dwgSectionInfo si, duint8 *dData){ + DRW_DBG("parseDataPage, section size: "); DRW_DBG(si.size); + for (std::map::iterator it=si.pages.begin(); it!=si.pages.end(); ++it){ + dwgPageInfo pi = it->second; + if (!fileBuf->setPosition(pi.address)) + return false; + + duint8 *tmpPageRaw = new duint8[pi.size]; + fileBuf->getBytes(tmpPageRaw, pi.size); + #ifdef DRW_DBG_DUMP + DRW_DBG("\nSection OBJECTS raw data=\n"); + for (unsigned int i=0, j=0; i< pi.size;i++) { + DRW_DBGH( (unsigned char)tmpPageRaw[i]); + if (j == 7) { DRW_DBG("\n"); j = 0; + } else { DRW_DBG(", "); j++; } + } DRW_DBG("\n"); + #endif + + duint8 *tmpPageRS = new duint8[pi.size]; + duint8 chunks =pi.size / 255; + dwgRSCodec::decode251I(tmpPageRaw, tmpPageRS, chunks); + #ifdef DRW_DBG_DUMP + DRW_DBG("\nSection OBJECTS RS data=\n"); + for (unsigned int i=0, j=0; i< pi.size;i++) { + DRW_DBGH( (unsigned char)tmpPageRS[i]); + if (j == 7) { DRW_DBG("\n"); j = 0; + } else { DRW_DBG(", "); j++; } + } DRW_DBG("\n"); + #endif + + DRW_DBG("\npage uncomp size: "); DRW_DBG(pi.uSize); DRW_DBG(" comp size: "); DRW_DBG(pi.cSize); + DRW_DBG("\noffset: "); DRW_DBG(pi.startOffset); + duint8 *pageData = dData + pi.startOffset; + dwgCompressor::decompress21(tmpPageRS, pageData, pi.cSize, pi.uSize); + + #ifdef DRW_DBG_DUMP + DRW_DBG("\n\nSection OBJECTS decompresed data=\n"); + for (unsigned int i=0, j=0; i< pi.uSize;i++) { + DRW_DBGH( (unsigned char)pageData[i]); + if (j == 7) { DRW_DBG("\n"); j = 0; + } else { DRW_DBG(", "); j++; } + } DRW_DBG("\n"); + #endif + + delete[]tmpPageRaw; + delete[]tmpPageRS; + } + DRW_DBG("\n"); + return true; +} + +bool dwgReader21::readFileHeader() { + + DRW_DBG("\n\ndwgReader21::parsing file header\n"); + if (! fileBuf->setPosition(0x80)) + return false; + duint8 fileHdrRaw[0x2FD];//0x3D8 + fileBuf->getBytes(fileHdrRaw, 0x2FD); + duint8 fileHdrdRS[0x2CD]; + dwgRSCodec::decode239I(fileHdrRaw, fileHdrdRS, 3); + +#ifdef DRW_DBG_DUMP + DRW_DBG("\ndwgReader21::parsed Reed Solomon decode:\n"); + int j = 0; + for (int i=0, j=0; i<0x2CD; i++){ + DRW_DBGH( (unsigned char)fileHdrdRS[i]); + if (j== 15){ j=0; DRW_DBG("\n"); + } else{ j++; DRW_DBG(", "); } + } DRW_DBG("\n"); +#endif + + dwgBuffer fileHdrBuf(fileHdrdRS, 0x2CD, &decoder); + DRW_DBG("\nCRC 64b= "); DRW_DBGH(fileHdrBuf.getRawLong64()); + DRW_DBG("\nunknown key 64b= "); DRW_DBGH(fileHdrBuf.getRawLong64()); + DRW_DBG("\ncomp data CRC 64b= "); DRW_DBGH(fileHdrBuf.getRawLong64()); + dint32 fileHdrCompLength = fileHdrBuf.getRawLong32(); + DRW_DBG("\ncompr len 4bytes= "); DRW_DBG(fileHdrCompLength); + dint32 fileHdrCompLength2 = fileHdrBuf.getRawLong32(); + DRW_DBG("\nlength2 4bytes= "); DRW_DBG(fileHdrCompLength2); + + int fileHdrDataLength = 0x110; + duint8 *fileHdrData; + if (fileHdrCompLength < 0) { + fileHdrDataLength = fileHdrCompLength * -1; + fileHdrData = new duint8[fileHdrDataLength]; + fileHdrBuf.getBytes(fileHdrData, fileHdrDataLength); + }else { + DRW_DBG("\ndwgReader21:: file header are compresed:\n"); + duint8 *compByteStr = new duint8[fileHdrCompLength]; + fileHdrBuf.getBytes(compByteStr, fileHdrCompLength); + fileHdrData = new duint8[fileHdrDataLength]; + dwgCompressor::decompress21(compByteStr, fileHdrData, fileHdrCompLength, fileHdrDataLength); + delete[] compByteStr; + } + +#ifdef DRW_DBG_DUMP + DRW_DBG("\ndwgReader21::parsed file header:\n"); + for (int i=0, j=0; isectionPageMapTmp; + +// dwgPageInfo *m_pages= new dwgPageInfo[PagesMaxId+1]; + while (PagesMapSizeUncompressed > i ) { + duint64 size = PagesMapBuf.getRawLong64(); + dint64 id = PagesMapBuf.getRawLong64(); + duint64 ind = id > 0 ? id : -id; + i += 16; + + DRW_DBG("Page gap= "); DRW_DBG(id); DRW_DBG(" Page num= "); DRW_DBG(ind); DRW_DBG(" size= "); DRW_DBGH(size); + DRW_DBG(" address= "); DRW_DBGH(address); DRW_DBG("\n"); + sectionPageMapTmp[ind] = dwgPageInfo(ind, address,size); + address += size; + //TODO num can be negative indicating gap +// seek += offset; + } + delete[]PagesMapData; + + DRW_DBG("\n*** dwgReader21: Processing Section Map ***\n"); + duint8 *SectionsMapData = new duint8[SectionsMapSizeUncompressed]; + dwgPageInfo sectionMap = sectionPageMapTmp[SectionsMapId]; + ret = parseSysPage(SectionsMapSizeCompressed, SectionsMapSizeUncompressed, SectionsMapCorrectionFactor, sectionMap.address, SectionsMapData); + if (!ret) + return false; + +//reads sections: + //Note: compressed value are not stored in file then, commpresed field are use to store + // encoding value + dwgBuffer SectionsMapBuf(SectionsMapData, SectionsMapSizeUncompressed, &decoder); + duint8 nextId =1; + while(SectionsMapBuf.getPosition() < SectionsMapBuf.size()){ + dwgSectionInfo secInfo; + secInfo.size = SectionsMapBuf.getRawLong64(); + DRW_DBG("\nSize of section (data size)= "); DRW_DBGH(secInfo.size); + secInfo.maxSize = SectionsMapBuf.getRawLong64(); + DRW_DBG("\nMax Decompressed Size= "); DRW_DBGH(secInfo.maxSize); + secInfo.encrypted = SectionsMapBuf.getRawLong64(); + //encrypted (doc: 0 no, 1 yes, 2 unkn) on read: objects 0 and encrypted yes + DRW_DBG("\nencription= "); DRW_DBGH(secInfo.encrypted); + DRW_DBG("\nHashCode = "); DRW_DBGH(SectionsMapBuf.getRawLong64()); + duint64 SectionNameLength = SectionsMapBuf.getRawLong64(); + DRW_DBG("\nSectionNameLength = "); DRW_DBG(SectionNameLength); + DRW_DBG("\nUnknown = "); DRW_DBGH(SectionsMapBuf.getRawLong64()); + secInfo.compresed = SectionsMapBuf.getRawLong64(); + DRW_DBG("\nEncoding (compresed) = "); DRW_DBGH(secInfo.compresed); + secInfo.pageCount = SectionsMapBuf.getRawLong64(); + DRW_DBG("\nPage count= "); DRW_DBGH(secInfo.pageCount); + secInfo.name = SectionsMapBuf.getUCSStr(SectionNameLength); + DRW_DBG("\nSection name = "); DRW_DBG(secInfo.name); DRW_DBG("\n"); + + for (unsigned int i=0; i< secInfo.pageCount; i++){ + duint64 po = SectionsMapBuf.getRawLong64(); + duint32 ds = SectionsMapBuf.getRawLong64(); + duint32 pn = SectionsMapBuf.getRawLong64(); + DRW_DBG(" pag Id = "); DRW_DBGH(pn); DRW_DBG(" data size = "); DRW_DBGH(ds); + dwgPageInfo pi = sectionPageMapTmp[pn]; //get a copy + pi.dataSize = ds; + pi.startOffset = po; + pi.uSize = SectionsMapBuf.getRawLong64(); + pi.cSize = SectionsMapBuf.getRawLong64(); + secInfo.pages[pn]= pi;//complete copy in secInfo + DRW_DBG("\n Page number= "); DRW_DBGH(secInfo.pages[pn].Id); + DRW_DBG("\n address in file= "); DRW_DBGH(secInfo.pages[pn].address); + DRW_DBG("\n size in file= "); DRW_DBGH(secInfo.pages[pn].size); + DRW_DBG("\n Data size= "); DRW_DBGH(secInfo.pages[pn].dataSize); + DRW_DBG("\n Start offset= "); DRW_DBGH(secInfo.pages[pn].startOffset); + DRW_DBG("\n Page uncompressed size = "); DRW_DBGH(secInfo.pages[pn].uSize); + DRW_DBG("\n Page compressed size = "); DRW_DBGH(secInfo.pages[pn].cSize); + + DRW_DBG("\n Page checksum = "); DRW_DBGH(SectionsMapBuf.getRawLong64()); + DRW_DBG("\n Page CRC = "); DRW_DBGH(SectionsMapBuf.getRawLong64()); DRW_DBG("\n"); + } + + if (!secInfo.name.empty()) { + secInfo.Id = nextId++; + DRW_DBG("Saved section Name= "); DRW_DBG( secInfo.name.c_str() ); DRW_DBG("\n"); + sections[secEnum::getEnum(secInfo.name)] = secInfo; + } + } + delete[]SectionsMapData; + + if (! fileBuf->isGood()) + return false; + + DRW_DBG("\ndwgReader21::readFileHeader END\n"); + return true; +} + +bool dwgReader21::readDwgHeader(DRW_Header& hdr){ + DRW_DBG("\ndwgReader21::readDwgHeader\n"); + dwgSectionInfo si = sections[secEnum::HEADER]; + if (si.Id<0)//not found, ends + return false; + DRW_DBG("\nprepare section of size "); DRW_DBG(si.size);DRW_DBG("\n"); + duint8 *tmpHeaderData = new duint8[si.size]; + bool ret = dwgReader21::parseDataPage(si, tmpHeaderData); + if (!ret) { + delete[]tmpHeaderData; + return ret; + } + + dwgBuffer dataBuf(tmpHeaderData, si.size, &decoder); + dwgBuffer handleBuf(tmpHeaderData, si.size, &decoder); + DRW_DBG("Header section sentinel= "); + checkSentinel(&dataBuf, secEnum::HEADER, true); + ret = dwgReader::readDwgHeader(hdr, &dataBuf, &handleBuf); + delete[]tmpHeaderData; + return ret; +} + +bool dwgReader21::readDwgClasses(){ + DRW_DBG("\ndwgReader21::readDwgClasses"); + dwgSectionInfo si = sections[secEnum::CLASSES]; + if (si.Id<0)//not found, ends + return false; + + DRW_DBG("\nprepare section of size "); DRW_DBG(si.size);DRW_DBG("\n"); + duint8 *tmpClassesData = new duint8[si.size]; + bool ret = dwgReader21::parseDataPage(si, tmpClassesData); + if (!ret) + return ret; + + dwgBuffer buff(tmpClassesData, si.size, &decoder); + DRW_DBG("classes section sentinel= "); + checkSentinel(&buff, secEnum::CLASSES, true); + + duint32 size = buff.getRawLong32(); + DRW_DBG("\ndata size in bytes "); DRW_DBG(size); + + duint32 bitSize = buff.getRawLong32(); + DRW_DBG("\ntotal size in bits "); DRW_DBG(bitSize); + + duint32 maxClassNum = buff.getBitShort(); + DRW_DBG("\nMaximum class number "); DRW_DBG(maxClassNum); + DRW_DBG("\nRc 1 "); DRW_DBG(buff.getRawChar8()); + DRW_DBG("\nRc 2 "); DRW_DBG(buff.getRawChar8()); + DRW_DBG("\nBit "); DRW_DBG(buff.getBit()); + + /*******************************/ + //prepare string stream + dwgBuffer strBuff(tmpClassesData, si.size, &decoder); + duint32 strStartPos = bitSize + 159;//size in bits + 20 bytes (sn+size) - 1 bit (endbit) + DRW_DBG("\nstrStartPos: "); DRW_DBG(strStartPos); + strBuff.setPosition(strStartPos >> 3); + strBuff.setBitPos(strStartPos & 7); + DRW_DBG("\nclasses strings buff.getPosition: "); DRW_DBG(strBuff.getPosition()); + DRW_DBG("\nclasses strings buff.getBitPos: "); DRW_DBG(strBuff.getBitPos()); + DRW_DBG("\nendBit "); DRW_DBG(strBuff.getBit()); + strStartPos -= 16;//decrement 16 bits + DRW_DBG("\nstrStartPos: "); DRW_DBG(strStartPos); + strBuff.setPosition(strStartPos >> 3); + strBuff.setBitPos(strStartPos & 7); + DRW_DBG("\nclasses strings buff.getPosition: "); DRW_DBG(strBuff.getPosition()); + DRW_DBG("\nclasses strings buff.getBitPos: "); DRW_DBG(strBuff.getBitPos()); + duint32 strDataSize = strBuff.getRawShort16(); + DRW_DBG("\nstrDataSize: "); DRW_DBG(strDataSize); + if (strDataSize & 0x8000) { + strStartPos -= 16;//decrement 16 bits + strDataSize &= 0x7FFF; //strip 0x8000; + strBuff.setPosition(strStartPos >> 3); + strBuff.setBitPos(strStartPos & 7); + duint32 hiSize = strBuff.getRawShort16(); + strDataSize |= (hiSize << 15); + } + strStartPos -= strDataSize; + DRW_DBG("\nstrStartPos: "); DRW_DBG(strStartPos); + strBuff.setPosition(strStartPos >> 3); + strBuff.setBitPos(strStartPos & 7); + DRW_DBG("\nclasses strings buff.getPosition: "); DRW_DBG(strBuff.getPosition()); + DRW_DBG("\nclasses strings buff.getBitPos: "); DRW_DBG(strBuff.getBitPos()); + + + /*******************************/ + + duint32 endDataPos = maxClassNum-499; + DRW_DBG("\nbuff.getPosition: "); DRW_DBG(buff.getPosition()); + for (duint32 i= 0; iparseDwg(version, &buff, &strBuff); + classesmap[cl->classNum] = cl; + DRW_DBG("\nbuff.getPosition: "); DRW_DBG(buff.getPosition()); + } + DRW_DBG("\nend classes data buff.getPosition: "); DRW_DBG(buff.getPosition()); + DRW_DBG("\nend classes data buff.getBitPos: "); DRW_DBG(buff.getBitPos()); + + buff.setPosition(size+20);//sizeVal+sn+32bSize + DRW_DBG("\nCRC: "); DRW_DBGH(buff.getRawShort16()); + DRW_DBG("\nclasses section end sentinel= "); + checkSentinel(&buff, secEnum::CLASSES, true); + delete[]tmpClassesData; + return buff.isGood(); +} + + +bool dwgReader21::readDwgHandles(){ + DRW_DBG("\ndwgReader21::readDwgHandles"); + dwgSectionInfo si = sections[secEnum::HANDLES]; + if (si.Id<0)//not found, ends + return false; + + DRW_DBG("\nprepare section of size "); DRW_DBG(si.size);DRW_DBG("\n"); + duint8 *tmpHandlesData = new duint8[si.size]; + bool ret = dwgReader21::parseDataPage(si, tmpHandlesData); + if (!ret) + return ret; + + dwgBuffer dataBuf(tmpHandlesData, si.size, &decoder); + + ret = dwgReader::readDwgHandles(&dataBuf, 0, si.size); + delete[]tmpHandlesData; + return ret; +} + +/*********** objects ************************/ +/** + * Reads all the object referenced in the object map section of the DWG file + * (using their object file offsets) + */ +bool dwgReader21::readDwgTables(DRW_Header& hdr) { + DRW_DBG("\ndwgReader21::readDwgTables\n"); + dwgSectionInfo si = sections[secEnum::OBJECTS]; + if (si.Id<0)//not found, ends + return false; + + DRW_DBG("\nprepare section of size "); DRW_DBG(si.size);DRW_DBG("\n"); + dataSize = si.size; + objData = new duint8 [dataSize]; + bool ret = dwgReader21::parseDataPage(si, objData); + if (!ret) + return ret; + + DRW_DBG("readDwgTables total data size= "); DRW_DBG(dataSize); DRW_DBG("\n"); + dwgBuffer dataBuf(objData, dataSize, &decoder); + ret = dwgReader::readDwgTables(hdr, &dataBuf); + + return ret; +} + + +bool dwgReader21::readDwgBlocks(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, dataSize, &decoder); + ret = dwgReader::readDwgBlocks(intfa, &dataBuf); + return ret; + + return false; +} diff --git a/extlib/libdxfrw/intern/dwgreader21.h b/extlib/libdxfrw/intern/dwgreader21.h new file mode 100644 index 0000000..9cecd69 --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader21.h @@ -0,0 +1,65 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DWGREADER21_H +#define DWGREADER21_H + +#include +#include +#include "drw_textcodec.h" +#include "dwgbuffer.h" +#include "dwgreader.h" + +//reader for AC1021 aka v2007, chapter 5 +class dwgReader21 : public dwgReader { +public: + dwgReader21(std::ifstream *stream, dwgR *p):dwgReader(stream, p){ + objData = NULL; + dataSize = 0; + } + virtual ~dwgReader21(){ + if (objData != NULL) + delete[] objData; + } + bool readMetaData(); + bool readFileHeader(); + bool readDwgHeader(DRW_Header& hdr); + bool readDwgClasses(); + bool readDwgHandles(); + bool readDwgTables(DRW_Header& hdr); + bool readDwgBlocks(DRW_Interface& intfa); + virtual bool readDwgEntities(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, dataSize, &decoder); + ret = dwgReader::readDwgEntities(intfa, &dataBuf); + return ret; + } + virtual bool readDwgObjects(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, dataSize, &decoder); + ret = dwgReader::readDwgObjects(intfa, &dataBuf); + return ret; + } +//bool readDwgEntity(objHandle& obj, DRW_Interface& intfa){ +// return false; +//} + +private: + bool parseSysPage(duint64 sizeCompressed, duint64 sizeUncompressed, duint64 correctionFactor, duint64 offset, duint8 *decompData); + bool parseDataPage(dwgSectionInfo si, duint8 *dData); + + duint8 *objData; + duint64 dataSize; + +}; + +#endif // DWGREADER21_H diff --git a/extlib/libdxfrw/intern/dwgreader24.cpp b/extlib/libdxfrw/intern/dwgreader24.cpp new file mode 100644 index 0000000..295032c --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader24.cpp @@ -0,0 +1,43 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include +#include +#include +#include "drw_dbg.h" +#include "dwgreader24.h" +#include "drw_textcodec.h" +#include "../libdwgr.h" + + +bool dwgReader24::readFileHeader() { + DRW_DBG("dwgReader24::readFileHeader\n"); + bool ret = dwgReader18::readFileHeader(); + DRW_DBG("dwgReader24::readFileHeader END\n"); + return ret; +} + +bool dwgReader24::readDwgHeader(DRW_Header& hdr){ + DRW_DBG("dwgReader24::readDwgHeader\n"); + bool ret = dwgReader18::readDwgHeader(hdr); + DRW_DBG("dwgReader24::readDwgHeader END\n"); + return ret; +} + +bool dwgReader24::readDwgClasses(){ + DRW_DBG("\ndwgReader24::readDwgClasses"); + bool ret = dwgReader18::readDwgClasses(); + DRW_DBG("\ndwgReader24::readDwgClasses END\n"); + return ret; +} diff --git a/extlib/libdxfrw/intern/dwgreader24.h b/extlib/libdxfrw/intern/dwgreader24.h new file mode 100644 index 0000000..36ac7fe --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader24.h @@ -0,0 +1,56 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DWGREADER24_H +#define DWGREADER24_H + +#include +#include +#include "drw_textcodec.h" +#include "dwgbuffer.h" +#include "dwgreader18.h" + +class dwgReader24 : public dwgReader18 { +public: + dwgReader24(std::ifstream *stream, dwgR *p):dwgReader18(stream, p){ } + virtual ~dwgReader24(){} + bool readFileHeader(); + bool readDwgHeader(DRW_Header& hdr); + bool readDwgClasses(); +// bool readDwgHandles(){return false;} +// bool readDwgTables(){return false;} + bool readDwgBlocks(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, uncompSize, &decoder); + ret = dwgReader::readDwgBlocks(intfa, &dataBuf); + return ret; + } + virtual bool readDwgEntities(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, uncompSize, &decoder); + ret = dwgReader::readDwgEntities(intfa, &dataBuf); + return ret; + } + virtual bool readDwgObjects(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, uncompSize, &decoder); + ret = dwgReader::readDwgObjects(intfa, &dataBuf); + return ret; + } + +// bool readDwgEntity(objHandle& obj, DRW_Interface& intfa){ +// DRW_UNUSED(obj); +// DRW_UNUSED(intfa); +// return false;} +}; + +#endif // DWGREADER24_H diff --git a/extlib/libdxfrw/intern/dwgreader27.cpp b/extlib/libdxfrw/intern/dwgreader27.cpp new file mode 100644 index 0000000..dea68f6 --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader27.cpp @@ -0,0 +1,43 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include +#include +#include +#include "drw_dbg.h" +#include "dwgreader27.h" +#include "drw_textcodec.h" +#include "../libdwgr.h" + + +bool dwgReader27::readFileHeader() { + DRW_DBG("dwgReader27::readFileHeader\n"); + bool ret = dwgReader18::readFileHeader(); + DRW_DBG("dwgReader27::readFileHeader END\n"); + return ret; +} + +bool dwgReader27::readDwgHeader(DRW_Header& hdr){ + DRW_DBG("dwgReader27::readDwgHeader\n"); + bool ret = dwgReader18::readDwgHeader(hdr); + DRW_DBG("dwgReader27::readDwgHeader END\n"); + return ret; +} + +bool dwgReader27::readDwgClasses(){ + DRW_DBG("dwgReader27::readDwgClasses"); + bool ret = dwgReader18::readDwgClasses(); + DRW_DBG("\ndwgReader27::readDwgClasses END\n"); + return ret; +} diff --git a/extlib/libdxfrw/intern/dwgreader27.h b/extlib/libdxfrw/intern/dwgreader27.h new file mode 100644 index 0000000..676cdc1 --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader27.h @@ -0,0 +1,55 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DWGREADER27_H +#define DWGREADER27_H + +#include +#include +#include "drw_textcodec.h" +#include "dwgbuffer.h" +#include "dwgreader18.h" + +class dwgReader27 : public dwgReader18 { +public: + dwgReader27(std::ifstream *stream, dwgR *p):dwgReader18(stream, p){ } + virtual ~dwgReader27(){} + bool readFileHeader(); + bool readDwgHeader(DRW_Header& hdr); + bool readDwgClasses(); +// bool readDwgHandles(){return false;} +// bool readDwgTables(){return false;} + bool readDwgBlocks(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, uncompSize, &decoder); + ret = dwgReader::readDwgBlocks(intfa, &dataBuf); + return ret; + } + virtual bool readDwgEntities(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, uncompSize, &decoder); + ret = dwgReader::readDwgEntities(intfa, &dataBuf); + return ret; + } + virtual bool readDwgObjects(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, uncompSize, &decoder); + ret = dwgReader::readDwgObjects(intfa, &dataBuf); + return ret; + } +// bool readDwgEntity(objHandle& obj, DRW_Interface& intfa){ +// DRW_UNUSED(obj); +// DRW_UNUSED(intfa); +// return false;} +}; + +#endif // DWGREADER21_H diff --git a/extlib/libdxfrw/intern/dwgutil.cpp b/extlib/libdxfrw/intern/dwgutil.cpp new file mode 100644 index 0000000..10121cf --- /dev/null +++ b/extlib/libdxfrw/intern/dwgutil.cpp @@ -0,0 +1,694 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include "drw_dbg.h" +#include "dwgutil.h" +#include "rscodec.h" +#include "../libdwgr.h" + +/** utility function + * convert a int to string in hex + **/ +namespace DRW { +std::string toHexStr(int n){ +#if defined(__APPLE__) + char buffer[9]= {'\0'}; + snprintf(buffer,9, "%X", n); + return std::string(buffer); +#else + std::ostringstream Convert; + Convert << std::uppercase << std::hex << n; + return Convert.str(); +#endif +} +} + +/** + * @brief dwgRSCodec::decode239I + * @param in : input data (at least 255*blk bytes) + * @param out : output data (at least 239*blk bytes) + * @param blk number of codewords ( 1 cw == 255 bytes) + */ +void dwgRSCodec::decode239I(unsigned char *in, unsigned char *out, duint32 blk){ + int k=0; + unsigned char data[255]; + RScodec rsc(0x96, 8, 8); //(255, 239) + for (duint32 i=0; i> 2) | (bufC[pos++] << 6); + *ll = (fb & 0x03); + return cont; +} + +duint32 dwgCompressor::longCompressionOffset(){ + duint32 cont = 0; + duint8 ll = bufC[pos++]; + while (ll == 0x00){ + cont += 0xFF; + ll = bufC[pos++]; + } + cont += ll; + return cont; +} + +duint32 dwgCompressor::long20CompressionOffset(){ +// duint32 cont = 0; + duint32 cont = 0x0F; + duint8 ll = bufC[pos++]; + while (ll == 0x00){ +// cont += 0xFF; + ll = bufC[pos++]; + } + cont += ll; + return cont; +} + +duint32 dwgCompressor::litLength18(){ + duint32 cont=0; + duint8 ll = bufC[pos++]; + //no literal length, this byte is next opCode + if (ll > 0x0F) { + pos--; + return 0; + } + + if (ll == 0x00) { + cont = 0x0F; + ll = bufC[pos++]; + while (ll == 0x00){//repeat until ll != 0x00 + cont +=0xFF; + ll = bufC[pos++]; + } + } + cont +=ll; + cont +=3; //already sum 3 + return cont; +} + +void dwgCompressor::decompress18(duint8 *cbuf, duint8 *dbuf, duint32 csize, duint32 dsize){ + bufC = cbuf; + bufD = dbuf; + sizeC = csize -2; + sizeD = dsize; + DRW_DBG("dwgCompressor::decompress, last 2 bytes: "); + DRW_DBGH(bufC[sizeC]);DRW_DBGH(bufC[sizeC+1]);DRW_DBG("\n"); + sizeC = csize; + + duint32 compBytes; + duint32 compOffset; + duint32 litCount; + + pos=0; //current position in compresed buffer + rpos=0; //current position in resulting decompresed buffer + litCount = litLength18(); + //copy first lileral lenght + for (duint32 i=0; i < litCount; ++i) { + bufD[rpos++] = bufC[pos++]; + } + + while (pos < csize && (rpos < dsize+1)){//rpos < dsize to prevent crash more robust are needed + duint8 oc = bufC[pos++]; //next opcode + if (oc == 0x10){ + compBytes = longCompressionOffset()+ 9; + compOffset = twoByteOffset(&litCount) + 0x3FFF; + if (litCount == 0) + litCount= litLength18(); + } else if (oc > 0x11 && oc< 0x20){ + compBytes = (oc & 0x0F) + 2; + compOffset = twoByteOffset(&litCount) + 0x3FFF; + if (litCount == 0) + litCount= litLength18(); + } else if (oc == 0x20){ + compBytes = longCompressionOffset() + 0x21; + compOffset = twoByteOffset(&litCount); + if (litCount == 0) + litCount= litLength18(); + else + oc = 0x00; + } else if (oc > 0x20 && oc< 0x40){ + compBytes = oc - 0x1E; + compOffset = twoByteOffset(&litCount); + if (litCount == 0) + litCount= litLength18(); + } else if ( oc > 0x3F){ + compBytes = ((oc & 0xF0) >> 4) - 1; + duint8 ll2 = bufC[pos++]; + compOffset = (ll2 << 2) | ((oc & 0x0C) >> 2); + litCount = oc & 0x03; + if (litCount < 1){ + litCount= litLength18();} + } else if (oc == 0x11){ + DRW_DBG("dwgCompressor::decompress, end of input stream, Cpos: "); + DRW_DBG(pos);DRW_DBG(", Dpos: ");DRW_DBG(rpos);DRW_DBG("\n"); + return; //end of input stream + } else { //ll < 0x10 + DRW_DBG("WARNING dwgCompressor::decompress, failed, illegal char, Cpos: "); + DRW_DBG(pos);DRW_DBG(", Dpos: ");DRW_DBG(rpos);DRW_DBG("\n"); + return; //fails, not valid + } + //copy "compresed data", TODO Needed verify out of bounds + duint32 remaining = sizeD - (litCount+rpos); + if (remaining < compBytes){ + compBytes = remaining; + DRW_DBG("WARNING dwgCompressor::decompress, bad compBytes size, Cpos: "); + DRW_DBG(pos);DRW_DBG(", Dpos: ");DRW_DBG(rpos);DRW_DBG("\n"); + } + for (duint32 i=0, j= rpos - compOffset -1; i < compBytes; i++) { + bufD[rpos++] = bufD[j++]; + } + //copy "uncompresed data", TODO Needed verify out of bounds + for (duint32 i=0; i < litCount; i++) { + bufD[rpos++] = bufC[pos++]; + } + } + DRW_DBG("WARNING dwgCompressor::decompress, bad out, Cpos: ");DRW_DBG(pos);DRW_DBG(", Dpos: ");DRW_DBG(rpos);DRW_DBG("\n"); +} + + +void dwgCompressor::decrypt18Hdr(duint8 *buf, duint32 size, duint32 offset){ + duint8 max = size / 4; + duint32 secMask = 0x4164536b ^ offset; + duint32* pHdr = (duint32*)buf; + for (duint8 j = 0; j < max; j++) + *pHdr++ ^= secMask; +} + +/*void dwgCompressor::decrypt18Data(duint8 *buf, duint32 size, duint32 offset){ + duint8 max = size / 4; + duint32 secMask = 0x4164536b ^ offset; + duint32* pHdr = (duint32*)buf; + for (duint8 j = 0; j < max; j++) + *pHdr++ ^= secMask; +}*/ + +duint32 dwgCompressor::litLength21(duint8 *cbuf, duint8 oc, duint32 *si){ + + duint32 srcIndex=*si; + + duint32 length = oc + 8; + if (length == 0x17) { + duint32 n = cbuf[srcIndex++]; + length += n; + if (n == 0xff) { + do { + n = cbuf[srcIndex++]; + n |= (duint32)(cbuf[srcIndex++] << 8); + length += n; + } while (n == 0xffff); + } + } + + *si = srcIndex; + return length; +} + +void dwgCompressor::decompress21(duint8 *cbuf, duint8 *dbuf, duint32 csize, duint32 dsize){ + duint32 srcIndex=0; + duint32 dstIndex=0; + duint32 length=0; + duint32 sourceOffset; + duint8 opCode; + + opCode = cbuf[srcIndex++]; + if ((opCode >> 4) == 2){ + srcIndex = srcIndex +2; + length = cbuf[srcIndex++] & 0x07; + } + + while (srcIndex < csize && (dstIndex < dsize+1)){//dstIndex < dsize to prevent crash more robust are needed + if (length == 0) + length = litLength21(cbuf, opCode, &srcIndex); + copyCompBytes21(cbuf, dbuf, length, srcIndex, dstIndex); + srcIndex += length; + dstIndex += length; + if (dstIndex >=dsize) break; //check if last chunk are compresed & terminate + + length = 0; + opCode = cbuf[srcIndex++]; + readInstructions21(cbuf, &srcIndex, &opCode, &sourceOffset, &length); + while (true) { + //prevent crash with corrupted data + if (sourceOffset > dstIndex){ + DRW_DBG("\nWARNING dwgCompressor::decompress21 => sourceOffset> dstIndex.\n"); + DRW_DBG("csize = "); DRW_DBG(csize); DRW_DBG(" srcIndex = "); DRW_DBG(srcIndex); + DRW_DBG("\ndsize = "); DRW_DBG(dsize); DRW_DBG(" dstIndex = "); DRW_DBG(dstIndex); + sourceOffset = dstIndex; + } + //prevent crash with corrupted data + if (length > dsize - dstIndex){ + DRW_DBG("\nWARNING dwgCompressor::decompress21 => length > dsize - dstIndex.\n"); + DRW_DBG("csize = "); DRW_DBG(csize); DRW_DBG(" srcIndex = "); DRW_DBG(srcIndex); + DRW_DBG("\ndsize = "); DRW_DBG(dsize); DRW_DBG(" dstIndex = "); DRW_DBG(dstIndex); + length = dsize - dstIndex; + srcIndex = csize;//force exit + } + sourceOffset = dstIndex-sourceOffset; + for (duint32 i=0; i< length; i++) + dbuf[dstIndex++] = dbuf[sourceOffset+i]; + + length = opCode & 7; + if ((length != 0) || (srcIndex >= csize)) { + break; + } + opCode = cbuf[srcIndex++]; + if ((opCode >> 4) == 0) { + break; + } + if ((opCode >> 4) == 15) { + opCode &= 15; + } + readInstructions21(cbuf, &srcIndex, &opCode, &sourceOffset, &length); + } + } + DRW_DBG("\ncsize = "); DRW_DBG(csize); DRW_DBG(" srcIndex = "); DRW_DBG(srcIndex); + DRW_DBG("\ndsize = "); DRW_DBG(dsize); DRW_DBG(" dstIndex = "); DRW_DBG(dstIndex);DRW_DBG("\n"); +} + +void dwgCompressor::readInstructions21(duint8 *cbuf, duint32 *si, duint8 *oc, duint32 *so, duint32 *l){ + duint32 length; + duint32 srcIndex = *si; + duint32 sourceOffset; + unsigned char opCode = *oc; + switch ((opCode >> 4)) { + case 0: + length = (opCode & 0xf) + 0x13; + sourceOffset = cbuf[srcIndex++]; + opCode = cbuf[srcIndex++]; + length = ((opCode >> 3) & 0x10) + length; + sourceOffset = ((opCode & 0x78) << 5) + 1 + sourceOffset; + break; + case 1: + length = (opCode & 0xf) + 3; + sourceOffset = cbuf[srcIndex++]; + opCode = cbuf[srcIndex++]; + sourceOffset = ((opCode & 0xf8) << 5) + 1 + sourceOffset; + break; + case 2: + sourceOffset = cbuf[srcIndex++]; + sourceOffset = ((cbuf[srcIndex++] << 8) & 0xff00) | sourceOffset; + length = opCode & 7; + if ((opCode & 8) == 0) { + opCode = cbuf[srcIndex++]; + length = (opCode & 0xf8) + length; + } else { + sourceOffset++; + length = (cbuf[srcIndex++] << 3) + length; + opCode = cbuf[srcIndex++]; + length = (((opCode & 0xf8) << 8) + length) + 0x100; + } + break; + default: + length = opCode >> 4; + sourceOffset = opCode & 15; + opCode = cbuf[srcIndex++]; + sourceOffset = (((opCode & 0xf8) << 1) + sourceOffset) + 1; + break; + } + *oc = opCode; + *si = srcIndex; + *so = sourceOffset; + *l = length; +} + + +void dwgCompressor::copyCompBytes21(duint8 *cbuf, duint8 *dbuf, duint32 l, duint32 si, duint32 di){ + duint32 length =l; + duint32 dix = di; + duint32 six = si; + + while (length > 31){ + //in doc: 16-31, 0-15 + for (duint32 i = six+24; i. ** +******************************************************************************/ + +#ifndef DWGUTIL_H +#define DWGUTIL_H + +#include "../drw_base.h" + +namespace DRW { +std::string toHexStr(int n); +} + +class dwgRSCodec { +public: + dwgRSCodec(){} + ~dwgRSCodec(){} + static void decode239I(duint8 *in, duint8 *out, duint32 blk); + static void decode251I(duint8 *in, duint8 *out, duint32 blk); +}; + +class dwgCompressor { +public: + dwgCompressor(){} + ~dwgCompressor(){} + + void decompress18(duint8 *cbuf, duint8 *dbuf, duint32 csize, duint32 dsize); + static void decrypt18Hdr(duint8 *buf, duint32 size, duint32 offset); +// static void decrypt18Data(duint8 *buf, duint32 size, duint32 offset); + static void decompress21(duint8 *cbuf, duint8 *dbuf, duint32 csize, duint32 dsize); + +private: + duint32 litLength18(); + static duint32 litLength21(duint8 *cbuf, duint8 oc, duint32 *si); + static void copyCompBytes21(duint8 *cbuf, duint8 *dbuf, duint32 l, duint32 si, duint32 di); + static void readInstructions21(duint8 *cbuf, duint32 *si, duint8 *oc, duint32 *so, duint32 *l); + + duint32 longCompressionOffset(); + duint32 long20CompressionOffset(); + duint32 twoByteOffset(duint32 *ll); + + duint8 *bufC; + duint8 *bufD; + duint32 sizeC; + duint32 sizeD; + duint32 pos; + duint32 rpos; + +}; + +class secEnum { +public: + enum DWGSection { + UNKNOWNS, /*!< UNKNOWN section. */ + FILEHEADER, /*!< File Header (in R3-R15*/ + HEADER, /*!< AcDb:Header */ + CLASSES, /*!< AcDb:Classes */ + SUMARYINFO, /*!< AcDb:SummaryInfo */ + PREVIEW, /*!< AcDb:Preview */ + VBAPROY, /*!< AcDb:VBAProject */ + APPINFO, /*!< AcDb:AppInfo */ + FILEDEP, /*!< AcDb:FileDepList */ + REVHISTORY, /*!< AcDb:RevHistory */ + SECURITY, /*!< AcDb:Security */ + OBJECTS, /*!< AcDb:AcDbObjects */ + OBJFREESPACE, /*!< AcDb:ObjFreeSpace */ + TEMPLATE, /*!< AcDb:Template */ + HANDLES, /*!< AcDb:Handles */ + PROTOTYPE, /*!< AcDb:AcDsPrototype_1b */ + AUXHEADER, /*!< AcDb:AuxHeader, in (R13-R15) second file header */ + SIGNATURE, /*!< AcDb:Signature */ + APPINFOHISTORY, /*!< AcDb:AppInfoHistory (in ac1021 may be a renamed section?*/ + EXTEDATA, /*!< Extended Entity Data */ + PROXYGRAPHICS /*!< PROXY ENTITY GRAPHICS */ + }; + + secEnum(){} + ~secEnum(){} + + static DWGSection getEnum(std::string nameSec); +}; + +#endif // DWGUTIL_H diff --git a/extlib/libdxfrw/intern/dxfreader.cpp b/extlib/libdxfrw/intern/dxfreader.cpp new file mode 100644 index 0000000..84f8641 --- /dev/null +++ b/extlib/libdxfrw/intern/dxfreader.cpp @@ -0,0 +1,263 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include +#include +#include "dxfreader.h" +#include "drw_textcodec.h" +#include "drw_dbg.h" + +bool dxfReader::readRec(int *codeData) { +// std::string text; + int code; + + if (!readCode(&code)) + return false; + *codeData = code; + + if (code < 10) + readString(); + else if (code < 60) + readDouble(); + else if (code < 80) + readInt16(); + else if (code > 89 && code < 100) //TODO this is an int 32b + readInt32(); + else if (code == 100 || code == 102 || code == 105) + readString(); + else if (code > 109 && code < 150) //skip not used at the v2012 + readDouble(); + else if (code > 159 && code < 170) //skip not used at the v2012 + readInt64(); + else if (code < 180) + readInt16(); + else if (code > 209 && code < 240) //skip not used at the v2012 + readDouble(); + else if (code > 269 && code < 290) //skip not used at the v2012 + readInt16(); + else if (code < 300) //TODO this is a boolean indicator, int in Binary? + readBool(); + else if (code < 370) + readString(); + else if (code < 390) + readInt16(); + else if (code < 400) + readString(); + else if (code < 410) + readInt16(); + else if (code < 420) + readString(); + else if (code < 430) //TODO this is an int 32b + readInt32(); + else if (code < 440) + readString(); + else if (code < 450) //TODO this is an int 32b + readInt32(); + else if (code < 460) //TODO this is long?? + readInt32(); + else if (code < 470) //TODO this is a floating point double precision?? + readDouble(); + else if (code < 481) + readString(); + else if (code > 998 && code < 1009) //skip not used at the v2012 + readString(); + else if (code < 1060) //TODO this is a floating point double precision?? + readDouble(); + else if (code < 1071) + readInt16(); + else if (code == 1071) //TODO this is an int 32b + readInt32(); + else if (skip) + //skip safely this dxf entry ( ok for ascii dxf) + readString(); + else + //break in binary files because the conduct is unpredictable + return false; + + return (filestr->good()); +} +int dxfReader::getHandleString(){ + int res; +#if defined(__APPLE__) + int Succeeded = sscanf ( strData.c_str(), "%x", &res ); + if ( !Succeeded || Succeeded == EOF ) + res = 0; +#else + std::istringstream Convert(strData); + if ( !(Convert >> std::hex >>res) ) + res = 0; +#endif + return res; +} + +bool dxfReaderBinary::readCode(int *code) { + unsigned short *int16p; + char buffer[2]; + filestr->read(buffer,2); + int16p = (unsigned short *) buffer; +//exist a 32bits int (code 90) with 2 bytes??? + if ((*code == 90) && (*int16p>2000)){ + DRW_DBG(*code); DRW_DBG(" de 16bits\n"); + filestr->seekg(-4, std::ios_base::cur); + filestr->read(buffer,2); + int16p = (unsigned short *) buffer; + } + *code = *int16p; + DRW_DBG(*code); DRW_DBG("\n"); + + return (filestr->good()); +} + +bool dxfReaderBinary::readString() { + type = STRING; + std::getline(*filestr, strData, '\0'); + DRW_DBG(strData); DRW_DBG("\n"); + return (filestr->good()); +} + +bool dxfReaderBinary::readString(std::string *text) { + type = STRING; + std::getline(*filestr, *text, '\0'); + DRW_DBG(*text); DRW_DBG("\n"); + return (filestr->good()); +} + +bool dxfReaderBinary::readInt16() { + type = INT32; + char buffer[2]; + filestr->read(buffer,2); + intData = (int)((buffer[1] << 8) | buffer[0]); + DRW_DBG(intData); DRW_DBG("\n"); + return (filestr->good()); +} + +bool dxfReaderBinary::readInt32() { + type = INT32; + unsigned int *int32p; + char buffer[4]; + filestr->read(buffer,4); + int32p = (unsigned int *) buffer; + intData = *int32p; + DRW_DBG(intData); DRW_DBG("\n"); + return (filestr->good()); +} + +bool dxfReaderBinary::readInt64() { + type = INT64; + unsigned long long int *int64p; //64 bits integer pointer + char buffer[8]; + filestr->read(buffer,8); + int64p = (unsigned long long int *) buffer; + int64 = *int64p; + DRW_DBG(int64); DRW_DBG(" int64\n"); + return (filestr->good()); +} + +bool dxfReaderBinary::readDouble() { + type = DOUBLE; + double *result; + char buffer[8]; + filestr->read(buffer,8); + result = (double *) buffer; + doubleData = *result; + DRW_DBG(doubleData); DRW_DBG("\n"); + return (filestr->good()); +} + +//saved as int or add a bool member?? +bool dxfReaderBinary::readBool() { + char buffer[1]; + filestr->read(buffer,1); + intData = (int)(buffer[0]); + DRW_DBG(intData); DRW_DBG("\n"); + return (filestr->good()); +} + +bool dxfReaderAscii::readCode(int *code) { + std::string text; + std::getline(*filestr, text); + *code = atoi(text.c_str()); + DRW_DBG(*code); DRW_DBG("\n"); + return (filestr->good()); +} +bool dxfReaderAscii::readString(std::string *text) { + type = STRING; + std::getline(*filestr, *text); + if (!text->empty() && text->at(text->size()-1) == '\r') + text->erase(text->size()-1); + return (filestr->good()); +} + +bool dxfReaderAscii::readString() { + type = STRING; + std::getline(*filestr, strData); + if (!strData.empty() && strData.at(strData.size()-1) == '\r') + strData.erase(strData.size()-1); + DRW_DBG(strData); DRW_DBG("\n"); + return (filestr->good()); +} + +bool dxfReaderAscii::readInt16() { + type = INT32; + std::string text; + if (readString(&text)){ + intData = atoi(text.c_str()); + DRW_DBG(intData); DRW_DBG("\n"); + return true; + } else + return false; +} + +bool dxfReaderAscii::readInt32() { + type = INT32; + return readInt16(); +} + +bool dxfReaderAscii::readInt64() { + type = INT64; + return readInt16(); +} + +bool dxfReaderAscii::readDouble() { + type = DOUBLE; + std::string text; + if (readString(&text)){ +#if defined(__APPLE__) + int succeeded=sscanf( & (text[0]), "%lg", &doubleData); + if(succeeded != 1) { + DRW_DBG("dxfReaderAscii::readDouble(): reading double error: "); + DRW_DBG(text); + DRW_DBG('\n'); + } +#else + std::istringstream sd(text); + sd >> doubleData; + DRW_DBG(doubleData); DRW_DBG('\n'); +#endif + return true; + } else + return false; +} + +//saved as int or add a bool member?? +bool dxfReaderAscii::readBool() { + type = BOOL; + std::string text; + if (readString(&text)){ + intData = atoi(text.c_str()); + DRW_DBG(intData); DRW_DBG("\n"); + return true; + } else + return false; +} diff --git a/extlib/libdxfrw/intern/dxfreader.h b/extlib/libdxfrw/intern/dxfreader.h new file mode 100644 index 0000000..bcb3c1a --- /dev/null +++ b/extlib/libdxfrw/intern/dxfreader.h @@ -0,0 +1,99 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DXFREADER_H +#define DXFREADER_H + +#include "drw_textcodec.h" + +class dxfReader { +public: + enum TYPE { + STRING, + INT32, + INT64, + DOUBLE, + BOOL, + INVALID + }; + enum TYPE type; +public: + dxfReader(std::ifstream *stream){ + filestr = stream; + type = INVALID; + } + virtual ~dxfReader(){} + bool readRec(int *code); + + std::string getString() {return strData;} + int getHandleString();//Convert hex string to int + std::string toUtf8String(std::string t) {return decoder.toUtf8(t);} + std::string getUtf8String() {return decoder.toUtf8(strData);} + double getDouble() {return doubleData;} + int getInt32() {return intData;} + unsigned long long int getInt64() {return int64;} + bool getBool() { return (intData==0) ? false : true;} + int getVersion(){return decoder.getVersion();} + void setVersion(std::string *v, bool dxfFormat){decoder.setVersion(v, dxfFormat);} + void setCodePage(std::string *c){decoder.setCodePage(c, true);} + std::string getCodePage(){ return decoder.getCodePage();} + +protected: + virtual bool readCode(int *code) = 0; //return true if sucesful (not EOF) + virtual bool readString(std::string *text) = 0; + virtual bool readString() = 0; + virtual bool readInt16() = 0; + virtual bool readInt32() = 0; + virtual bool readInt64() = 0; + virtual bool readDouble() = 0; + virtual bool readBool() = 0; + +protected: + std::ifstream *filestr; + std::string strData; + double doubleData; + signed int intData; //32 bits integer + unsigned long long int int64; //64 bits integer + bool skip; //set to true for ascii dxf, false for binary +private: + DRW_TextCodec decoder; +}; + +class dxfReaderBinary : public dxfReader { +public: + dxfReaderBinary(std::ifstream *stream):dxfReader(stream){skip = false; } + virtual ~dxfReaderBinary() {} + virtual bool readCode(int *code); + virtual bool readString(std::string *text); + virtual bool readString(); + virtual bool readInt16(); + virtual bool readInt32(); + virtual bool readInt64(); + virtual bool readDouble(); + virtual bool readBool(); +}; + +class dxfReaderAscii : public dxfReader { +public: + dxfReaderAscii(std::ifstream *stream):dxfReader(stream){skip = true; } + virtual ~dxfReaderAscii(){} + virtual bool readCode(int *code); + virtual bool readString(std::string *text); + virtual bool readString(); + virtual bool readInt16(); + virtual bool readDouble(); + virtual bool readInt32(); + virtual bool readInt64(); + virtual bool readBool(); +}; + +#endif // DXFREADER_H diff --git a/extlib/libdxfrw/intern/dxfwriter.cpp b/extlib/libdxfrw/intern/dxfwriter.cpp new file mode 100644 index 0000000..b31d69a --- /dev/null +++ b/extlib/libdxfrw/intern/dxfwriter.cpp @@ -0,0 +1,269 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include +#include +#include "dxfwriter.h" + +//RLZ TODO change std::endl to x0D x0A (13 10) +/*bool dxfWriter::readRec(int *codeData, bool skip) { +// std::string text; + int code; + +#ifdef DRW_DBG + count = count+2; //DBG +#endif + + if (!readCode(&code)) + return false; + *codeData = code; + + if (code < 10) + readString(); + else if (code < 60) + readDouble(); + else if (code < 80) + readInt(); + else if (code > 89 && code < 100) //TODO this is an int 32b + readInt32(); + else if (code == 100 || code == 102 || code == 105) + readString(); + else if (code > 109 && code < 150) //skip not used at the v2012 + readDouble(); + else if (code > 159 && code < 170) //skip not used at the v2012 + readInt64(); + else if (code < 180) + readInt(); + else if (code > 209 && code < 240) //skip not used at the v2012 + readDouble(); + else if (code > 269 && code < 290) //skip not used at the v2012 + readInt(); + else if (code < 300) //TODO this is a boolean indicator, int in Binary? + readBool(); + else if (code < 370) + readString(); + else if (code < 390) + readInt(); + else if (code < 400) + readString(); + else if (code < 410) + readInt(); + else if (code < 420) + readString(); + else if (code < 430) //TODO this is an int 32b + readInt32(); + else if (code < 440) + readString(); + else if (code < 450) //TODO this is an int 32b + readInt32(); + else if (code < 460) //TODO this is long?? + readInt(); + else if (code < 470) //TODO this is a floating point double precision?? + readDouble(); + else if (code < 481) + readString(); + else if (code > 998 && code < 1009) //skip not used at the v2012 + readString(); + else if (code < 1060) //TODO this is a floating point double precision?? + readDouble(); + else if (code < 1071) + readInt(); + else if (code == 1071) //TODO this is an int 32b + readInt32(); + else if (skip) + //skip safely this dxf entry ( ok for ascii dxf) + readString(); + else + //break in binary files because the conduct is unpredictable + return false; + + return (filestr->good()); +}*/ + +bool dxfWriter::writeUtf8String(int code, std::string text) { + std::string t = encoder.fromUtf8(text); + return writeString(code, t); +} + +bool dxfWriter::writeUtf8Caps(int code, std::string text) { + std::string strname = text; + std::transform(strname.begin(), strname.end(), strname.begin(),::toupper); + std::string t = encoder.fromUtf8(strname); + return writeString(code, t); +} + +bool dxfWriterBinary::writeString(int code, std::string text) { + char bufcode[2]; + bufcode[0] =code & 0xFF; + bufcode[1] =code >> 8; + filestr->write(bufcode, 2); + *filestr << text << '\0'; + return (filestr->good()); +} + +/*bool dxfWriterBinary::readCode(int *code) { + unsigned short *int16p; + char buffer[2]; + filestr->read(buffer,2); + int16p = (unsigned short *) buffer; +//exist a 32bits int (code 90) with 2 bytes??? + if ((*code == 90) && (*int16p>2000)){ + DBG(*code); DBG(" de 16bits\n"); + filestr->seekg(-4, std::ios_base::cur); + filestr->read(buffer,2); + int16p = (unsigned short *) buffer; + } + *code = *int16p; + DBG(*code); DBG("\n"); + + return (filestr->good()); +}*/ + +/*bool dxfWriterBinary::readString() { + std::getline(*filestr, strData, '\0'); + DBG(strData); DBG("\n"); + return (filestr->good()); +}*/ + +/*bool dxfWriterBinary::readString(std::string *text) { + std::getline(*filestr, *text, '\0'); + DBG(*text); DBG("\n"); + return (filestr->good()); +}*/ + +bool dxfWriterBinary::writeInt16(int code, int data) { + char bufcode[2]; + char buffer[2]; + bufcode[0] =code & 0xFF; + bufcode[1] =code >> 8; + buffer[0] =data & 0xFF; + buffer[1] =data >> 8; + filestr->write(bufcode, 2); + filestr->write(buffer, 2); + return (filestr->good()); +} + +bool dxfWriterBinary::writeInt32(int code, int data) { + char buffer[4]; + buffer[0] =code & 0xFF; + buffer[1] =code >> 8; + filestr->write(buffer, 2); + + buffer[0] =data & 0xFF; + buffer[1] =data >> 8; + buffer[2] =data >> 16; + buffer[3] =data >> 24; + filestr->write(buffer, 4); + return (filestr->good()); +} + +bool dxfWriterBinary::writeInt64(int code, unsigned long long int data) { + char buffer[8]; + buffer[0] =code & 0xFF; + buffer[1] =code >> 8; + filestr->write(buffer, 2); + + buffer[0] =data & 0xFF; + buffer[1] =data >> 8; + buffer[2] =data >> 16; + buffer[3] =data >> 24; + buffer[4] =data >> 32; + buffer[5] =data >> 40; + buffer[6] =data >> 48; + buffer[7] =data >> 56; + filestr->write(buffer, 8); + return (filestr->good()); +} + +bool dxfWriterBinary::writeDouble(int code, double data) { + char bufcode[2]; + char buffer[8]; + bufcode[0] =code & 0xFF; + bufcode[1] =code >> 8; + filestr->write(bufcode, 2); + + unsigned char *val; + val = (unsigned char *) &data; + for (int i=0; i<8; i++) { + buffer[i] =val[i]; + } + filestr->write(buffer, 8); + return (filestr->good()); +} + +//saved as int or add a bool member?? +bool dxfWriterBinary::writeBool(int code, bool data) { + char buffer[1]; + char bufcode[2]; + bufcode[0] =code & 0xFF; + bufcode[1] =code >> 8; + filestr->write(bufcode, 2); + buffer[0] = data; + filestr->write(buffer, 1); + return (filestr->good()); +} + +dxfWriterAscii::dxfWriterAscii(std::ofstream *stream):dxfWriter(stream){ + filestr->precision(16); +} + +bool dxfWriterAscii::writeString(int code, std::string text) { +// *filestr << code << std::endl << text << std::endl ; + filestr->width(3); + *filestr << std::right << code << std::endl; + filestr->width(0); + *filestr << std::left << text << std::endl; + /* std::getline(*filestr, strData, '\0'); + DBG(strData); DBG("\n");*/ + return (filestr->good()); +} + +bool dxfWriterAscii::writeInt16(int code, int data) { +// *filestr << std::right << code << std::endl << data << std::endl; + filestr->width(3); + *filestr << std::right << code << std::endl; + filestr->width(5); + *filestr << data << std::endl; + return (filestr->good()); +} + +bool dxfWriterAscii::writeInt32(int code, int data) { + return writeInt16(code, data); +} + +bool dxfWriterAscii::writeInt64(int code, unsigned long long int data) { +// *filestr << code << std::endl << data << std::endl; + filestr->width(3); + *filestr << std::right << code << std::endl; + filestr->width(5); + *filestr << data << std::endl; + return (filestr->good()); +} + +bool dxfWriterAscii::writeDouble(int code, double data) { +// std::streamsize prec = filestr->precision(); +// filestr->precision(12); +// *filestr << code << std::endl << data << std::endl; + filestr->width(3); + *filestr << std::right << code << std::endl; + *filestr << data << std::endl; +// filestr->precision(prec); + return (filestr->good()); +} + +//saved as int or add a bool member?? +bool dxfWriterAscii::writeBool(int code, bool data) { + *filestr << code << std::endl << data << std::endl; + return (filestr->good()); +} diff --git a/extlib/libdxfrw/intern/dxfwriter.h b/extlib/libdxfrw/intern/dxfwriter.h new file mode 100644 index 0000000..2af464b --- /dev/null +++ b/extlib/libdxfrw/intern/dxfwriter.h @@ -0,0 +1,64 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DXFWRITER_H +#define DXFWRITER_H + +#include "drw_textcodec.h" + +class dxfWriter { +public: + dxfWriter(std::ofstream *stream){filestr = stream; /*count =0;*/} + virtual ~dxfWriter(){} + virtual bool writeString(int code, std::string text) = 0; + bool writeUtf8String(int code, std::string text); + bool writeUtf8Caps(int code, std::string text); + std::string fromUtf8String(std::string t) {return encoder.fromUtf8(t);} + virtual bool writeInt16(int code, int data) = 0; + virtual bool writeInt32(int code, int data) = 0; + virtual bool writeInt64(int code, unsigned long long int data) = 0; + virtual bool writeDouble(int code, double data) = 0; + virtual bool writeBool(int code, bool data) = 0; + void setVersion(std::string *v, bool dxfFormat){encoder.setVersion(v, dxfFormat);} + void setCodePage(std::string *c){encoder.setCodePage(c, true);} + std::string getCodePage(){return encoder.getCodePage();} +protected: + std::ofstream *filestr; +private: + DRW_TextCodec encoder; +}; + +class dxfWriterBinary : public dxfWriter { +public: + dxfWriterBinary(std::ofstream *stream):dxfWriter(stream){} + virtual ~dxfWriterBinary() {} + virtual bool writeString(int code, std::string text); + virtual bool writeInt16(int code, int data); + virtual bool writeInt32(int code, int data); + virtual bool writeInt64(int code, unsigned long long int data); + virtual bool writeDouble(int code, double data); + virtual bool writeBool(int code, bool data); +}; + +class dxfWriterAscii : public dxfWriter { +public: + dxfWriterAscii(std::ofstream *stream); + virtual ~dxfWriterAscii(){} + virtual bool writeString(int code, std::string text); + virtual bool writeInt16(int code, int data); + virtual bool writeInt32(int code, int data); + virtual bool writeInt64(int code, unsigned long long int data); + virtual bool writeDouble(int code, double data); + virtual bool writeBool(int code, bool data); +}; + +#endif // DXFWRITER_H diff --git a/extlib/libdxfrw/intern/rscodec.cpp b/extlib/libdxfrw/intern/rscodec.cpp new file mode 100644 index 0000000..78926f3 --- /dev/null +++ b/extlib/libdxfrw/intern/rscodec.cpp @@ -0,0 +1,401 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2014 J.F. Soriano (Rallaz), rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +/** + * Reed-Solomon codec + * Reed Solomon code lifted from encoder/decoder for Reed-Solomon written by Simon Rockliff + * + * Original code: + * This program may be freely modified and/or given to whoever wants it. + * A condition of such distribution is that the author's contribution be + * acknowledged by his name being left in the comments heading the program, + * however no responsibility is accepted for any financial or other loss which + * may result from some unforseen errors or malfunctioning of the program + * during use. + * Simon Rockliff, 26th June 1991 + */ + + +#include "rscodec.h" +#include // std::nothrow +#include + +RScodec::RScodec(unsigned int pp, int mm, int tt) { + this->mm = mm; + this->tt = tt; + nn = (1<polynomial form alpha_to[] contains j=alpha**i; + polynomial form -> index form index_of[j=alpha**i] = i + alpha=2 is the primitive element of GF(2^mm) +*/ +void RScodec::RSgenerate_gf(unsigned int pp) { + int i, mask ; + int pb; + + mask = 1 ; + alpha_to[mm] = 0 ; + for (i=0; i>(mm-1-i)) & 1; + if (pb!=0) { + alpha_to[mm] ^= mask; + } + mask <<= 1 ; + } + index_of[alpha_to[mm]] = mm ; + mask >>= 1 ; + for (i=mm+1; i= mask) { + alpha_to[i] = alpha_to[mm] ^ ((alpha_to[i-1]^mask)<<1) ; + } else alpha_to[i] = alpha_to[i-1]<<1 ; + index_of[alpha_to[i]] = i ; + } + index_of[0] = -1 ; +} + + +/* Obtain the generator polynomial of the tt-error correcting, length + nn=(2^mm -1) Reed Solomon code from the product of (X+alpha**i), i=1..2*tt +*/ +void RScodec::RSgen_poly() { + int i,j ; + int tmp; + int bb = nn-kk;; //nn-kk length of parity data + + gg[0] = 2 ; /* primitive element alpha = 2 for GF(2**mm) */ + gg[1] = 1 ; /* g(x) = (X+alpha) initially */ + for (i=2; i<=bb; i++) { + gg[i] = 1 ; + for (j=i-1; j>0; j--) + if (gg[j] != 0) { + if (gg[j]<0) { isOk=false; return; } + tmp = (index_of[gg[j]]+i)%nn; + if (tmp<0) { isOk=false; return; } + gg[j] = gg[j-1]^ alpha_to[tmp] ; + } else { + gg[j] = gg[j-1] ; + } + gg[0] = alpha_to[(index_of[gg[0]]+i)%nn] ; /* gg[0] can never be zero */ + } + /* convert gg[] to index form for quicker encoding */ + for (i=0; i<=bb; i++) gg[i] = index_of[gg[i]] ; +} + +int RScodec::calcDecode(unsigned char* data, int* recd, int** elp, int* d, int* l, int* u_lu, int* s, int* root, int* loc, int* z, int* err, int* reg, int bb) +{ + if (!isOk) return -1; + int count = 0; + int syn_error = 0; + int i, j, u, q; + + // for (int i=0; i error */ + s[i] = index_of[s[i]]; + } + + if (!syn_error) { /* if no errors, ends */ + /* no non-zero syndromes => no errors: output is received codeword */ + return 0; + } + + /* errors are present, try and correct */ + /* compute the error location polynomial via the Berlekamp iterative algorithm, + following the terminology of Lin and Costello : d[u] is the 'mu'th + discrepancy, where u='mu'+1 and 'mu' (the Greek letter!) is the step number + ranging from -1 to 2*tt (see L&C), l[u] is the + degree of the elp at that step, and u_l[u] is the difference between the + step number and the degree of the elp. + */ + /* initialise table entries */ + d[0] = 0; /* index form */ + d[1] = s[1]; /* index form */ + elp[0][0] = 0; /* index form */ + elp[1][0] = 1; /* polynomial form */ + for (i = 1; i0)) q--; + /* have found first non-zero d[q] */ + if (q>0) { + j = q; + do { + j--; + if ((d[j] != -1) && (u_lu[q]0); + } + + /* have now found q such that d[u]!=0 and u_lu[q] is maximum */ + /* store degree of new elp polynomial */ + if (l[u]>l[q] + u - q) { + l[u + 1] = l[u]; + } + else { + l[u + 1] = l[q] + u - q; + } + + /* form new elp(x) */ + for (i = 0; itt) { /* elp has degree has degree >tt hence cannot solve */ + return -1; /* just output is received codeword as is */ + } + + /* can correct error */ + /* put elp into index form */ + for (i = 0; i <= l[u]; i++) elp[u][i] = index_of[elp[u][i]]; + + /* find roots of the error location polynomial */ + for (i = 1; i <= l[u]; i++) { + reg[i] = elp[u][i]; + } + count = 0; + for (i = 1; i <= nn; i++) { + q = 1; + for (j = 1; j <= l[u]; j++) { + if (reg[j] != -1) { + reg[j] = (reg[j] + j) % nn; + q ^= alpha_to[reg[j]]; + } + } + if (!q) { /* store root and error location number indices */ + root[count] = i; + loc[count] = nn - i; + count++; + } + } + + if (count != l[u]) { /* no. roots != degree of elp => >tt errors and cannot solve */ + return -1; /* just output is received codeword as is */ + } + + /* no. roots = degree of elp hence <= tt errors */ + /* form polynomial z(x) */ + for (i = 1; i <= l[u]; i++) { /* Z[0] = 1 always - do not need */ + if ((s[i] != -1) && (elp[u][i] != -1)) { + z[i] = alpha_to[s[i]] ^ alpha_to[elp[u][i]]; + } + else if ((s[i] != -1) && (elp[u][i] == -1)) { + z[i] = alpha_to[s[i]]; + } + else if ((s[i] == -1) && (elp[u][i] != -1)) { + z[i] = alpha_to[elp[u][i]]; + } + else { + z[i] = 0; + } + for (j = 1; j=0; i--) { + feedback = index_of[idata[i]^bd[bb-1]] ; + if (feedback != -1) { + for (j=bb-1; j>0; j--) + if (gg[j] != -1) + bd[j] = bd[j-1]^alpha_to[(gg[j]+feedback)%nn] ; + else + bd[j] = bd[j-1] ; + bd[0] = alpha_to[(gg[0]+feedback)%nn] ; + } else { + for (j=bb-1; j>0; j--) + bd[j] = bd[j-1] ; + bd[0] = 0 ; + } + } + return true; +} + + +/* assume we have received bits grouped into mm-bit symbols in recd[i], + i=0..(nn-1), and recd[i] is index form (ie as powers of alpha). + We first compute the 2*tt syndromes by substituting alpha**i into rec(X) and + evaluating, storing the syndromes in s[i], i=1..2tt (leave s[0] zero) . + Then we use the Berlekamp iteration to find the error location polynomial + elp[i]. If the degree of the elp is >tt, we cannot correct all the errors + and hence just put out the information symbols uncorrected. If the degree of + elp is <=tt, we substitute alpha**i , i=1..n into the elp to get the roots, + hence the inverse roots, the error location numbers. If the number of errors + located does not equal the degree of the elp, we have more than tt errors + and cannot correct them. Otherwise, we then solve for the error value at + the error location and correct the error. The procedure is that found in + Lin and Costello. For the cases where the number of errors is known to be too + large to correct, the information symbols as received are output (the + advantage of systematic encoding is that hopefully some of the information + symbols will be okay and that if we are in luck, the errors are in the + parity part of the transmitted codeword). Of course, these insoluble cases + can be returned as error flags to the calling routine if desired. */ +/** return value: number of corrected errors or -1 if can't correct it */ +int RScodec::decode(unsigned char *data) { + if (!isOk) return -1; + int bb = nn-kk;; //nn-kk length of parity data + + int *recd = new (std::nothrow) int[nn]; + int **elp = new int*[bb + 2]; + for (int i = 0; i < bb + 2; ++i) + elp[i] = new int[bb]; + int *d = new int[bb + 2]; + int *l = new int[bb + 2]; + int *u_lu = new int[bb + 2]; + int *s = new int[bb + 1]; + int *root = new int[tt]; + int *loc = new int[tt]; + int *z = new int[tt+1]; + int *err = new int[nn]; + int *reg = new int[tt + 1]; + + int res = calcDecode(data, recd, elp ,d ,l, u_lu, s, root, loc ,z, err, reg, bb); + + delete[] recd; + for (int i = 0; i < bb + 2; ++i) + delete[] elp[i]; + delete[] elp; + delete[] d; + delete[] l; + delete[] u_lu; + delete[] s; + delete[] root; + delete[] loc; + delete[] z; + delete[] err; + delete[] reg; + + return res; +} diff --git a/extlib/libdxfrw/intern/rscodec.h b/extlib/libdxfrw/intern/rscodec.h new file mode 100644 index 0000000..10cb2a8 --- /dev/null +++ b/extlib/libdxfrw/intern/rscodec.h @@ -0,0 +1,69 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2014 J.F. Soriano (Rallaz), rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +/** + * Reed-Solomon codec + * Reed Solomon code lifted from encoder/decoder for Reed-Solomon written by Simon Rockliff + * + * Original code: + * This program may be freely modified and/or given to whoever wants it. + * A condition of such distribution is that the author's contribution be + * acknowledged by his name being left in the comments heading the program, + * however no responsibility is accepted for any financial or other loss which + * may result from some unforseen errors or malfunctioning of the program + * during use. + * Simon Rockliff, 26th June 1991 + */ + + + +#ifndef RSCODEC_H +#define RSCODEC_H +/** +mm: RS code over GF(2^4) +nn: nn= (2^mm) - 1 length of codeword +tt: number of errors that can be corrected +kk: kk = nn-2*tt +pp: irreducible polynomial coeffts, pp [mm] send as int +*/ +class RScodec { +public: + RScodec(unsigned int pp, int mm, int tt); + + ~RScodec(); +// bool encode(int *data, int *parity); +// int decode(int *recd); + bool encode(unsigned char *data, unsigned char *parity); + int decode(unsigned char *data); + bool isOkey(){return isOk;} + const unsigned int* indexOf() {return index_of;} + const int* alphaTo() {return alpha_to;} + +private: + void RSgenerate_gf(unsigned int pp); + void RSgen_poly(); + int calcDecode(unsigned char* data, int* recd, int** elp, int* d, int* l, int* u_lu, int* s, int* root, int* loc, int* z, int* err, int* reg, int bb); + + +private: + int mm; //RS code over GF(2^4) + int tt; //number of errors that can be corrected + int nn; //(2^mm) - 1 length of codeword + int kk; //nn-2*tt length of original data + + int *gg; + bool isOk; + unsigned int *index_of; + int *alpha_to; +}; + +#endif // RSCODEC_H diff --git a/extlib/libdxfrw/libdwgr.cpp b/extlib/libdxfrw/libdwgr.cpp new file mode 100644 index 0000000..4ba77ff --- /dev/null +++ b/extlib/libdxfrw/libdwgr.cpp @@ -0,0 +1,314 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + + +#include "libdwgr.h" +#include +#include +#include +#include "intern/drw_dbg.h" +#include "intern/drw_textcodec.h" +#include "intern/dwgreader.h" +#include "intern/dwgreader15.h" +#include "intern/dwgreader18.h" +#include "intern/dwgreader21.h" +#include "intern/dwgreader24.h" +#include "intern/dwgreader27.h" + +#define FIRSTHANDLE 48 + +/*enum sections { + secUnknown, + secHeader, + secTables, + secBlocks, + secEntities, + secObjects +};*/ + +dwgR::dwgR(const char* name){ + DRW_DBGSL(DRW_dbg::NONE); + fileName = name; + reader = NULL; +// writer = NULL; + applyExt = false; + version = DRW::UNKNOWNV; + error = DRW::BAD_NONE; +} + +dwgR::~dwgR(){ + if (reader != NULL) + delete reader; + +} + +void dwgR::setDebug(DRW::DBG_LEVEL lvl){ + switch (lvl){ + case DRW::DEBUG: + DRW_DBGSL(DRW_dbg::DEBUG); + break; + default: + DRW_DBGSL(DRW_dbg::NONE); + } +} + +/*reads metadata and loads image preview*/ +bool dwgR::getPreview(){ + bool isOk = false; + + std::ifstream filestr; + isOk = openFile(&filestr); + if (!isOk) + return false; + + isOk = reader->readMetaData(); + if (isOk) { + isOk = reader->readPreview(); + } else + error = DRW::BAD_READ_METADATA; + + filestr.close(); + if (reader != NULL) { + delete reader; + reader = NULL; + } + return isOk; +} + +bool dwgR::testReader(){ + bool isOk = false; + + std::ifstream filestr; + filestr.open (fileName.c_str(), std::ios_base::in | std::ios::binary); + if (!filestr.is_open() || !filestr.good() ){ + error = DRW::BAD_OPEN; + return isOk; + } + + dwgBuffer fileBuf(&filestr); + duint8 *tmpStrData = new duint8[fileBuf.size()]; + fileBuf.getBytes(tmpStrData, fileBuf.size()); + dwgBuffer dataBuf(tmpStrData, fileBuf.size()); + fileBuf.setPosition(0); + DRW_DBG("\ndwgR::testReader filebuf size: ");DRW_DBG(fileBuf.size()); + DRW_DBG("\ndwgR::testReader dataBuf size: ");DRW_DBG(dataBuf.size()); + DRW_DBG("\n filebuf pos: ");DRW_DBG(fileBuf.getPosition()); + DRW_DBG("\n dataBuf pos: ");DRW_DBG(dataBuf.getPosition()); + DRW_DBG("\n filebuf bitpos: ");DRW_DBG(fileBuf.getBitPos()); + DRW_DBG("\n dataBuf bitpos: ");DRW_DBG(dataBuf.getBitPos()); + DRW_DBG("\n filebuf first byte : ");DRW_DBGH(fileBuf.getRawChar8()); + DRW_DBG("\n dataBuf first byte : ");DRW_DBGH(dataBuf.getRawChar8()); + fileBuf.setBitPos(4); + dataBuf.setBitPos(4); + DRW_DBG("\n filebuf first byte : ");DRW_DBGH(fileBuf.getRawChar8()); + DRW_DBG("\n dataBuf first byte : ");DRW_DBGH(dataBuf.getRawChar8()); + DRW_DBG("\n filebuf pos: ");DRW_DBG(fileBuf.getPosition()); + DRW_DBG("\n dataBuf pos: ");DRW_DBG(dataBuf.getPosition()); + DRW_DBG("\n filebuf bitpos: ");DRW_DBG(fileBuf.getBitPos()); + DRW_DBG("\n dataBuf bitpos: ");DRW_DBG(dataBuf.getBitPos()); + fileBuf.setBitPos(6); + dataBuf.setBitPos(6); + DRW_DBG("\n filebuf pos: ");DRW_DBG(fileBuf.getPosition()); + DRW_DBG("\n dataBuf pos: ");DRW_DBG(dataBuf.getPosition()); + DRW_DBG("\n filebuf bitpos: ");DRW_DBG(fileBuf.getBitPos()); + DRW_DBG("\n dataBuf bitpos: ");DRW_DBG(dataBuf.getBitPos()); + DRW_DBG("\n filebuf first byte : ");DRW_DBGH(fileBuf.getRawChar8()); + DRW_DBG("\n dataBuf first byte : ");DRW_DBGH(dataBuf.getRawChar8()); + fileBuf.setBitPos(0); + dataBuf.setBitPos(0); + DRW_DBG("\n filebuf first byte : ");DRW_DBGH(fileBuf.getRawChar8()); + DRW_DBG("\n dataBuf first byte : ");DRW_DBGH(dataBuf.getRawChar8()); + DRW_DBG("\n filebuf pos: ");DRW_DBG(fileBuf.getPosition()); + DRW_DBG("\n dataBuf pos: ");DRW_DBG(dataBuf.getPosition()); + DRW_DBG("\n filebuf bitpos: ");DRW_DBG(fileBuf.getBitPos()); + DRW_DBG("\n dataBuf bitpos: ");DRW_DBG(dataBuf.getBitPos()); + + delete[]tmpStrData; + filestr.close(); + DRW_DBG("\n\n"); + return isOk; +} + +/*start reading dwg file header and, if can read it, continue reading all*/ +bool dwgR::read(DRW_Interface *interface_, bool ext){ + bool isOk = false; + applyExt = ext; + iface = interface_; + +//testReader();return false; + + std::ifstream filestr; + isOk = openFile(&filestr); + if (!isOk) + return false; + + isOk = reader->readMetaData(); + if (isOk) { + isOk = reader->readFileHeader(); + if (isOk) { + isOk = processDwg(); + } else + error = DRW::BAD_READ_FILE_HEADER; + } else + error = DRW::BAD_READ_METADATA; + + filestr.close(); + if (reader != NULL) { + delete reader; + reader = NULL; + } + + return isOk; +} + +/* Open the file and stores it in filestr, install the correct reader version. + * If fail opening file, error are set as DRW::BAD_OPEN + * If not are DWG or are unsupported version, error are set as DRW::BAD_VERSION + * and closes filestr. + * Return true on succeed or false on fail +*/ +bool dwgR::openFile(std::ifstream *filestr){ + bool isOk = false; + DRW_DBG("dwgR::read 1\n"); + filestr->open (fileName.c_str(), std::ios_base::in | std::ios::binary); + if (!filestr->is_open() || !filestr->good() ){ + error = DRW::BAD_OPEN; + return isOk; + } + + char line[7]; + filestr->read (line, 6); + line[6]='\0'; + DRW_DBG("dwgR::read 2\n"); + DRW_DBG("dwgR::read line version: "); + DRW_DBG(line); + DRW_DBG("\n"); + + if (strcmp(line, "AC1006") == 0) + version = DRW::AC1006; + else if (strcmp(line, "AC1009") == 0) { + version = DRW::AC1009; +// reader = new dwgReader09(&filestr, this); + }else if (strcmp(line, "AC1012") == 0){ + version = DRW::AC1012; + reader = new dwgReader15(filestr, this); + } else if (strcmp(line, "AC1014") == 0) { + version = DRW::AC1014; + reader = new dwgReader15(filestr, this); + } else if (strcmp(line, "AC1015") == 0) { + version = DRW::AC1015; + reader = new dwgReader15(filestr, this); + } else if (strcmp(line, "AC1018") == 0){ + version = DRW::AC1018; + reader = new dwgReader18(filestr, this); + } else if (strcmp(line, "AC1021") == 0) { + version = DRW::AC1021; + reader = new dwgReader21(filestr, this); + } else if (strcmp(line, "AC1024") == 0) { + version = DRW::AC1024; + reader = new dwgReader24(filestr, this); + } else if (strcmp(line, "AC1027") == 0) { + version = DRW::AC1027; + reader = new dwgReader27(filestr, this); + } else + version = DRW::UNKNOWNV; + + if (reader == NULL) { + error = DRW::BAD_VERSION; + filestr->close(); + } else + isOk = true; + + return isOk; +} + +/********* Reader Process *********/ + +bool dwgR::processDwg() { + DRW_DBG("dwgR::processDwg() start processing dwg\n"); + bool ret; + bool ret2; + DRW_Header hdr; + ret = reader->readDwgHeader(hdr); + if (!ret) { + error = DRW::BAD_READ_HEADER; + } + + ret2 = reader->readDwgClasses(); + if (ret && !ret2) { + error = DRW::BAD_READ_CLASSES; + ret = ret2; + } + + ret2 = reader->readDwgHandles(); + if (ret && !ret2) { + error = DRW::BAD_READ_HANDLES; + ret = ret2; + } + + ret2 = reader->readDwgTables(hdr); + if (ret && !ret2) { + error = DRW::BAD_READ_TABLES; + ret = ret2; + } + + iface->addHeader(&hdr); + + for (std::map::iterator it=reader->ltypemap.begin(); it!=reader->ltypemap.end(); ++it) { + DRW_LType *lt = it->second; + iface->addLType(const_cast(*lt) ); + } + for (std::map::iterator it=reader->layermap.begin(); it!=reader->layermap.end(); ++it) { + DRW_Layer *ly = it->second; + iface->addLayer(const_cast(*ly)); + } + + for (std::map::iterator it=reader->stylemap.begin(); it!=reader->stylemap.end(); ++it) { + DRW_Textstyle *ly = it->second; + iface->addTextStyle(const_cast(*ly)); + } + + for (std::map::iterator it=reader->dimstylemap.begin(); it!=reader->dimstylemap.end(); ++it) { + DRW_Dimstyle *ly = it->second; + iface->addDimStyle(const_cast(*ly)); + } + + for (std::map::iterator it=reader->vportmap.begin(); it!=reader->vportmap.end(); ++it) { + DRW_Vport *ly = it->second; + iface->addVport(const_cast(*ly)); + } + + for (std::map::iterator it=reader->appIdmap.begin(); it!=reader->appIdmap.end(); ++it) { + DRW_AppId *ly = it->second; + iface->addAppId(const_cast(*ly)); + } + + ret2 = reader->readDwgBlocks(*iface); + if (ret && !ret2) { + error = DRW::BAD_READ_BLOCKS; + ret = ret2; + } + + ret2 = reader->readDwgEntities(*iface); + if (ret && !ret2) { + error = DRW::BAD_READ_ENTITIES; + ret = ret2; + } + + ret2 = reader->readDwgObjects(*iface); + if (ret && !ret2) { + error = DRW::BAD_READ_OBJECTS; + ret = ret2; + } + + return ret; +} diff --git a/extlib/libdxfrw/libdwgr.h b/extlib/libdxfrw/libdwgr.h new file mode 100644 index 0000000..8e035fe --- /dev/null +++ b/extlib/libdxfrw/libdwgr.h @@ -0,0 +1,51 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef LIBDWGR_H +#define LIBDWGR_H + +#include +//#include +#include "drw_entities.h" +#include "drw_objects.h" +#include "drw_classes.h" +#include "drw_interface.h" + +class dwgReader; + +class dwgR { +public: + dwgR(const char* name); + ~dwgR(); + //read: return true if all ok + bool read(DRW_Interface *interface_, bool ext); + bool getPreview(); + DRW::Version getVersion(){return version;} + DRW::error getError(){return error;} +bool testReader(); + void setDebug(DRW::DBG_LEVEL lvl); + +private: + bool openFile(std::ifstream *filestr); + bool processDwg(); +private: + DRW::Version version; + DRW::error error; + std::string fileName; + bool applyExt; /*apply extrusion in entities to conv in 2D?*/ + std::string codePage; + DRW_Interface *iface; + dwgReader *reader; + +}; + +#endif // LIBDWGR_H diff --git a/extlib/libdxfrw/libdxfrw.cpp b/extlib/libdxfrw/libdxfrw.cpp new file mode 100644 index 0000000..d1edcfe --- /dev/null +++ b/extlib/libdxfrw/libdxfrw.cpp @@ -0,0 +1,2785 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + + +#include "libdxfrw.h" +#include +#include +#include +#include +#include "intern/drw_textcodec.h" +#include "intern/dxfreader.h" +#include "intern/dxfwriter.h" +#include "intern/drw_dbg.h" + +#define FIRSTHANDLE 48 + +/*enum sections { + secUnknown, + secHeader, + secTables, + secBlocks, + secEntities, + secObjects +};*/ + +dxfRW::dxfRW(const char* name){ + DRW_DBGSL(DRW_dbg::NONE); + fileName = name; + reader = NULL; + writer = NULL; + applyExt = false; + elParts = 128; //parts munber when convert ellipse to polyline +} +dxfRW::~dxfRW(){ + if (reader != NULL) + delete reader; + if (writer != NULL) + delete writer; + for (std::vector::iterator it=imageDef.begin(); it!=imageDef.end(); ++it) + delete *it; + + imageDef.clear(); +} + +void dxfRW::setDebug(DRW::DBG_LEVEL lvl){ + switch (lvl){ + case DRW::DEBUG: + DRW_DBGSL(DRW_dbg::DEBUG); + break; + default: + DRW_DBGSL(DRW_dbg::NONE); + } +} + +bool dxfRW::read(DRW_Interface *interface_, bool ext){ + drw_assert(fileName.empty() == false); + bool isOk = false; + applyExt = ext; + std::ifstream filestr; + if ( interface_ == NULL ) + return isOk; + DRW_DBG("dxfRW::read 1def\n"); + filestr.open (fileName.c_str(), std::ios_base::in | std::ios::binary); + if (!filestr.is_open()) + return isOk; + if (!filestr.good()) + return isOk; + + char line[22]; + char line2[22] = "AutoCAD Binary DXF\r\n"; + line2[20] = (char)26; + line2[21] = '\0'; + filestr.read (line, 22); + filestr.close(); + iface = interface_; + DRW_DBG("dxfRW::read 2\n"); + if (strcmp(line, line2) == 0) { + filestr.open (fileName.c_str(), std::ios_base::in | std::ios::binary); + binFile = true; + //skip sentinel + filestr.seekg (22, std::ios::beg); + reader = new dxfReaderBinary(&filestr); + DRW_DBG("dxfRW::read binary file\n"); + } else { + binFile = false; + filestr.open (fileName.c_str(), std::ios_base::in); + reader = new dxfReaderAscii(&filestr); + } + + isOk = processDxf(); + filestr.close(); + delete reader; + reader = NULL; + return isOk; +} + +bool dxfRW::write(DRW_Interface *interface_, DRW::Version ver, bool bin){ + bool isOk = false; + std::ofstream filestr; + version = ver; + binFile = bin; + iface = interface_; + if (binFile) { + filestr.open (fileName.c_str(), std::ios_base::out | std::ios::binary | std::ios::trunc); + //write sentinel + filestr << "AutoCAD Binary DXF\r\n" << (char)26 << '\0'; + writer = new dxfWriterBinary(&filestr); + DRW_DBG("dxfRW::read binary file\n"); + } else { + filestr.open (fileName.c_str(), std::ios_base::out | std::ios::trunc); + writer = new dxfWriterAscii(&filestr); + std::string comm = std::string("dxfrw ") + std::string(DRW_VERSION); + writer->writeString(999, comm); + } + DRW_Header header; + iface->writeHeader(header); + writer->writeString(0, "SECTION"); + entCount =FIRSTHANDLE; + header.write(writer, version); + writer->writeString(0, "ENDSEC"); + if (ver > DRW::AC1009) { + writer->writeString(0, "SECTION"); + writer->writeString(2, "CLASSES"); + writer->writeString(0, "ENDSEC"); + } + writer->writeString(0, "SECTION"); + writer->writeString(2, "TABLES"); + writeTables(); + writer->writeString(0, "ENDSEC"); + writer->writeString(0, "SECTION"); + writer->writeString(2, "BLOCKS"); + writeBlocks(); + writer->writeString(0, "ENDSEC"); + + writer->writeString(0, "SECTION"); + writer->writeString(2, "ENTITIES"); + iface->writeEntities(); + writer->writeString(0, "ENDSEC"); + + if (version > DRW::AC1009) { + writer->writeString(0, "SECTION"); + writer->writeString(2, "OBJECTS"); + writeObjects(); + writer->writeString(0, "ENDSEC"); + } + writer->writeString(0, "EOF"); + filestr.flush(); + filestr.close(); + isOk = true; + delete writer; + writer = NULL; + return isOk; +} + +bool dxfRW::writeEntity(DRW_Entity *ent) { + ent->handle = ++entCount; + writer->writeString(5, toHexStr(ent->handle)); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbEntity"); + } + if (ent->space == 1) + writer->writeInt16(67, 1); + if (version > DRW::AC1009) { + writer->writeUtf8String(8, ent->layer); + writer->writeUtf8String(6, ent->lineType); + } else { + writer->writeUtf8Caps(8, ent->layer); + writer->writeUtf8Caps(6, ent->lineType); + } + writer->writeInt16(62, ent->color); + if (version > DRW::AC1015 && ent->color24 >= 0) { + writer->writeInt32(420, ent->color24); + } + if (version > DRW::AC1014) { + writer->writeInt16(370, DRW_LW_Conv::lineWidth2dxfInt(ent->lWeight)); + } + return true; +} + +bool dxfRW::writeLineType(DRW_LType *ent){ + std::string strname = ent->name; + + transform(strname.begin(), strname.end(), strname.begin(),::toupper); +//do not write linetypes handled by library + if (strname == "BYLAYER" || strname == "BYBLOCK" || strname == "CONTINUOUS") { + return true; + } + writer->writeString(0, "LTYPE"); + if (version > DRW::AC1009) { + writer->writeString(5, toHexStr(++entCount)); + if (version > DRW::AC1012) { + writer->writeString(330, "5"); + } + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbLinetypeTableRecord"); + writer->writeUtf8String(2, ent->name); + } else + writer->writeUtf8Caps(2, ent->name); + writer->writeInt16(70, ent->flags); + writer->writeUtf8String(3, ent->desc); + ent->update(); + writer->writeInt16(72, 65); + writer->writeInt16(73, ent->size); + writer->writeDouble(40, ent->length); + + for (unsigned int i = 0; i< ent->path.size(); i++){ + writer->writeDouble(49, ent->path.at(i)); + if (version > DRW::AC1009) { + writer->writeInt16(74, 0); + } + } + return true; +} + +bool dxfRW::writeLayer(DRW_Layer *ent){ + writer->writeString(0, "LAYER"); + if (!wlayer0 && ent->name == "0") { + wlayer0 = true; + if (version > DRW::AC1009) { + writer->writeString(5, "10"); + } + } else { + if (version > DRW::AC1009) { + writer->writeString(5, toHexStr(++entCount)); + } + } + if (version > DRW::AC1012) { + writer->writeString(330, "2"); + } + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbLayerTableRecord"); + writer->writeUtf8String(2, ent->name); + } else { + writer->writeUtf8Caps(2, ent->name); + } + writer->writeInt16(70, ent->flags); + writer->writeInt16(62, ent->color); + if (version > DRW::AC1015 && ent->color24 >= 0) { + writer->writeInt32(420, ent->color24); + } + if (version > DRW::AC1009) { + writer->writeUtf8String(6, ent->lineType); + if (! ent->plotF) + writer->writeBool(290, ent->plotF); + writer->writeInt16(370, DRW_LW_Conv::lineWidth2dxfInt(ent->lWeight)); + writer->writeString(390, "F"); + } else + writer->writeUtf8Caps(6, ent->lineType); + if (!ent->extData.empty()){ + writeExtData(ent->extData); + } +// writer->writeString(347, "10012"); + return true; +} + +bool dxfRW::writeTextstyle(DRW_Textstyle *ent){ + writer->writeString(0, "STYLE"); + if (!dimstyleStd) { + //stringstream cause crash in OS/X, bug#3597944 + std::string name=ent->name; + transform(name.begin(), name.end(), name.begin(), toupper); + if (name == "STANDARD") + dimstyleStd = true; + } + if (version > DRW::AC1009) { + writer->writeString(5, toHexStr(++entCount)); + } + + if (version > DRW::AC1012) { + writer->writeString(330, "2"); + } + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbTextStyleTableRecord"); + writer->writeUtf8String(2, ent->name); + } else { + writer->writeUtf8Caps(2, ent->name); + } + writer->writeInt16(70, ent->flags); + writer->writeDouble(40, ent->height); + writer->writeDouble(41, ent->width); + writer->writeDouble(50, ent->oblique); + writer->writeInt16(71, ent->genFlag); + writer->writeDouble(42, ent->lastHeight); + if (version > DRW::AC1009) { + writer->writeUtf8String(3, ent->font); + writer->writeUtf8String(4, ent->bigFont); + if (ent->fontFamily != 0) + writer->writeInt32(1071, ent->fontFamily); + } else { + writer->writeUtf8Caps(3, ent->font); + writer->writeUtf8Caps(4, ent->bigFont); + } + return true; +} + +bool dxfRW::writeVport(DRW_Vport *ent){ + if (!dimstyleStd) { + ent->name = "*ACTIVE"; + dimstyleStd = true; + } + writer->writeString(0, "VPORT"); + if (version > DRW::AC1009) { + writer->writeString(5, toHexStr(++entCount)); + if (version > DRW::AC1012) + writer->writeString(330, "2"); + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbViewportTableRecord"); + writer->writeUtf8String(2, ent->name); + } else + writer->writeUtf8Caps(2, ent->name); + writer->writeInt16(70, ent->flags); + writer->writeDouble(10, ent->lowerLeft.x); + writer->writeDouble(20, ent->lowerLeft.y); + writer->writeDouble(11, ent->UpperRight.x); + writer->writeDouble(21, ent->UpperRight.y); + writer->writeDouble(12, ent->center.x); + writer->writeDouble(22, ent->center.y); + writer->writeDouble(13, ent->snapBase.x); + writer->writeDouble(23, ent->snapBase.y); + writer->writeDouble(14, ent->snapSpacing.x); + writer->writeDouble(24, ent->snapSpacing.y); + writer->writeDouble(15, ent->gridSpacing.x); + writer->writeDouble(25, ent->gridSpacing.y); + writer->writeDouble(16, ent->viewDir.x); + writer->writeDouble(26, ent->viewDir.y); + writer->writeDouble(36, ent->viewDir.z); + writer->writeDouble(17, ent->viewTarget.z); + writer->writeDouble(27, ent->viewTarget.z); + writer->writeDouble(37, ent->viewTarget.z); + writer->writeDouble(40, ent->height); + writer->writeDouble(41, ent->ratio); + writer->writeDouble(42, ent->lensHeight); + writer->writeDouble(43, ent->frontClip); + writer->writeDouble(44, ent->backClip); + writer->writeDouble(50, ent->snapAngle); + writer->writeDouble(51, ent->twistAngle); + writer->writeInt16(71, ent->viewMode); + writer->writeInt16(72, ent->circleZoom); + writer->writeInt16(73, ent->fastZoom); + writer->writeInt16(74, ent->ucsIcon); + writer->writeInt16(75, ent->snap); + writer->writeInt16(76, ent->grid); + writer->writeInt16(77, ent->snapStyle); + writer->writeInt16(78, ent->snapIsopair); + if (version > DRW::AC1014) { + writer->writeInt16(281, 0); + writer->writeInt16(65, 1); + writer->writeDouble(110, 0.0); + writer->writeDouble(120, 0.0); + writer->writeDouble(130, 0.0); + writer->writeDouble(111, 1.0); + writer->writeDouble(121, 0.0); + writer->writeDouble(131, 0.0); + writer->writeDouble(112, 0.0); + writer->writeDouble(122, 1.0); + writer->writeDouble(132, 0.0); + writer->writeInt16(79, 0); + writer->writeDouble(146, 0.0); + if (version > DRW::AC1018) { + writer->writeString(348, "10020"); + writer->writeInt16(60, ent->gridBehavior);//v2007 undocummented see DRW_Vport class + writer->writeInt16(61, 5); + writer->writeBool(292, 1); + writer->writeInt16(282, 1); + writer->writeDouble(141, 0.0); + writer->writeDouble(142, 0.0); + writer->writeInt16(63, 250); + writer->writeInt32(421, 3358443); + } + } + return true; +} + +bool dxfRW::writeDimstyle(DRW_Dimstyle *ent){ + writer->writeString(0, "DIMSTYLE"); + if (!dimstyleStd) { + std::string name = ent->name; + std::transform(name.begin(), name.end(), name.begin(),::toupper); + if (name == "STANDARD") + dimstyleStd = true; + } + if (version > DRW::AC1009) { + writer->writeString(105, toHexStr(++entCount)); + } + + if (version > DRW::AC1012) { + writer->writeString(330, "A"); + } + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbDimStyleTableRecord"); + writer->writeUtf8String(2, ent->name); + } else + writer->writeUtf8Caps(2, ent->name); + writer->writeInt16(70, ent->flags); + if ( version == DRW::AC1009 || !(ent->dimpost.empty()) ) + writer->writeUtf8String(3, ent->dimpost); + if ( version == DRW::AC1009 || !(ent->dimapost.empty()) ) + writer->writeUtf8String(4, ent->dimapost); + if ( version == DRW::AC1009 || !(ent->dimblk.empty()) ) + writer->writeUtf8String(5, ent->dimblk); + if ( version == DRW::AC1009 || !(ent->dimblk1.empty()) ) + writer->writeUtf8String(6, ent->dimblk1); + if ( version == DRW::AC1009 || !(ent->dimblk2.empty()) ) + writer->writeUtf8String(7, ent->dimblk2); + writer->writeDouble(40, ent->dimscale); + writer->writeDouble(41, ent->dimasz); + writer->writeDouble(42, ent->dimexo); + writer->writeDouble(43, ent->dimdli); + writer->writeDouble(44, ent->dimexe); + writer->writeDouble(45, ent->dimrnd); + writer->writeDouble(46, ent->dimdle); + writer->writeDouble(47, ent->dimtp); + writer->writeDouble(48, ent->dimtm); + writer->writeDouble(140, ent->dimtxt); + writer->writeDouble(141, ent->dimcen); + writer->writeDouble(142, ent->dimtsz); + writer->writeDouble(143, ent->dimaltf); + writer->writeDouble(144, ent->dimlfac); + writer->writeDouble(145, ent->dimtvp); + writer->writeDouble(146, ent->dimtfac); + writer->writeDouble(147, ent->dimgap); + if (version > DRW::AC1014) { + writer->writeDouble(148, ent->dimaltrnd); + } + writer->writeInt16(71, ent->dimtol); + writer->writeInt16(72, ent->dimlim); + writer->writeInt16(73, ent->dimtih); + writer->writeInt16(74, ent->dimtoh); + writer->writeInt16(75, ent->dimse1); + writer->writeInt16(76, ent->dimse2); + writer->writeInt16(77, ent->dimtad); + writer->writeInt16(78, ent->dimzin); + if (version > DRW::AC1014) { + writer->writeInt16(79, ent->dimazin); + } + writer->writeInt16(170, ent->dimalt); + writer->writeInt16(171, ent->dimaltd); + writer->writeInt16(172, ent->dimtofl); + writer->writeInt16(173, ent->dimsah); + writer->writeInt16(174, ent->dimtix); + writer->writeInt16(175, ent->dimsoxd); + writer->writeInt16(176, ent->dimclrd); + writer->writeInt16(177, ent->dimclre); + writer->writeInt16(178, ent->dimclrt); + if (version > DRW::AC1014) { + writer->writeInt16(179, ent->dimadec); + } + if (version > DRW::AC1009) { + if (version < DRW::AC1015) + writer->writeInt16(270, ent->dimunit); + writer->writeInt16(271, ent->dimdec); + writer->writeInt16(272, ent->dimtdec); + writer->writeInt16(273, ent->dimaltu); + writer->writeInt16(274, ent->dimalttd); + writer->writeInt16(275, ent->dimaunit); + } + if (version > DRW::AC1014) { + writer->writeInt16(276, ent->dimfrac); + writer->writeInt16(277, ent->dimlunit); + writer->writeInt16(278, ent->dimdsep); + writer->writeInt16(279, ent->dimtmove); + } + if (version > DRW::AC1009) { + writer->writeInt16(280, ent->dimjust); + writer->writeInt16(281, ent->dimsd1); + writer->writeInt16(282, ent->dimsd2); + writer->writeInt16(283, ent->dimtolj); + writer->writeInt16(284, ent->dimtzin); + writer->writeInt16(285, ent->dimaltz); + writer->writeInt16(286, ent->dimaltttz); + if (version < DRW::AC1015) + writer->writeInt16(287, ent->dimfit); + writer->writeInt16(288, ent->dimupt); + } + if (version > DRW::AC1014) { + writer->writeInt16(289, ent->dimatfit); + } + if (version > DRW::AC1009 && !ent->dimtxsty.empty()) { + writer->writeUtf8String(340, ent->dimtxsty); + } + if (version > DRW::AC1014) { + writer->writeUtf8String(341, ent->dimldrblk); + writer->writeInt16(371, ent->dimlwd); + writer->writeInt16(372, ent->dimlwe); + } + return true; +} + +bool dxfRW::writeAppId(DRW_AppId *ent){ + std::string strname = ent->name; + transform(strname.begin(), strname.end(), strname.begin(),::toupper); +//do not write mandatory ACAD appId, handled by library + if (strname == "ACAD") + return true; + writer->writeString(0, "APPID"); + if (version > DRW::AC1009) { + writer->writeString(5, toHexStr(++entCount)); + if (version > DRW::AC1014) { + writer->writeString(330, "9"); + } + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbRegAppTableRecord"); + writer->writeUtf8String(2, ent->name); + } else { + writer->writeUtf8Caps(2, ent->name); + } + writer->writeInt16(70, ent->flags); + return true; +} + +bool dxfRW::writePoint(DRW_Point *ent) { + writer->writeString(0, "POINT"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbPoint"); + } + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + if (ent->basePoint.z != 0.0) { + writer->writeDouble(30, ent->basePoint.z); + } + return true; +} + +bool dxfRW::writeLine(DRW_Line *ent) { + writer->writeString(0, "LINE"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbLine"); + } + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + if (ent->basePoint.z != 0.0 || ent->secPoint.z != 0.0) { + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(11, ent->secPoint.x); + writer->writeDouble(21, ent->secPoint.y); + writer->writeDouble(31, ent->secPoint.z); + } else { + writer->writeDouble(11, ent->secPoint.x); + writer->writeDouble(21, ent->secPoint.y); + } + return true; +} + +bool dxfRW::writeRay(DRW_Ray *ent) { + writer->writeString(0, "RAY"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbRay"); + } + DRW_Coord crd = ent->secPoint; + crd.unitize(); + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + if (ent->basePoint.z != 0.0 || ent->secPoint.z != 0.0) { + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(11, crd.x); + writer->writeDouble(21, crd.y); + writer->writeDouble(31, crd.z); + } else { + writer->writeDouble(11, crd.x); + writer->writeDouble(21, crd.y); + } + return true; +} + +bool dxfRW::writeXline(DRW_Xline *ent) { + writer->writeString(0, "XLINE"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbXline"); + } + DRW_Coord crd = ent->secPoint; + crd.unitize(); + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + if (ent->basePoint.z != 0.0 || ent->secPoint.z != 0.0) { + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(11, crd.x); + writer->writeDouble(21, crd.y); + writer->writeDouble(31, crd.z); + } else { + writer->writeDouble(11, crd.x); + writer->writeDouble(21, crd.y); + } + return true; +} + +bool dxfRW::writeCircle(DRW_Circle *ent) { + writer->writeString(0, "CIRCLE"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbCircle"); + } + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + if (ent->basePoint.z != 0.0) { + writer->writeDouble(30, ent->basePoint.z); + } + writer->writeDouble(40, ent->radious); + return true; +} + +bool dxfRW::writeArc(DRW_Arc *ent) { + writer->writeString(0, "ARC"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbCircle"); + } + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + if (ent->basePoint.z != 0.0) { + writer->writeDouble(30, ent->basePoint.z); + } + writer->writeDouble(40, ent->radious); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbArc"); + } + writer->writeDouble(50, ent->staangle*ARAD); + writer->writeDouble(51, ent->endangle*ARAD); + return true; +} + +bool dxfRW::writeEllipse(DRW_Ellipse *ent){ + //verify axis/ratio and params for full ellipse + ent->correctAxis(); + if (version > DRW::AC1009) { + writer->writeString(0, "ELLIPSE"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbEllipse"); + } + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(11, ent->secPoint.x); + writer->writeDouble(21, ent->secPoint.y); + writer->writeDouble(31, ent->secPoint.z); + writer->writeDouble(40, ent->ratio); + writer->writeDouble(41, ent->staparam); + writer->writeDouble(42, ent->endparam); + } else { + DRW_Polyline pol; + //RLZ: copy properties + ent->toPolyline(&pol, elParts); + writePolyline(&pol); + } + return true; +} + +bool dxfRW::writeTrace(DRW_Trace *ent){ + writer->writeString(0, "TRACE"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbTrace"); + } + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(11, ent->secPoint.x); + writer->writeDouble(21, ent->secPoint.y); + writer->writeDouble(31, ent->secPoint.z); + writer->writeDouble(12, ent->thirdPoint.x); + writer->writeDouble(22, ent->thirdPoint.y); + writer->writeDouble(32, ent->thirdPoint.z); + writer->writeDouble(13, ent->fourPoint.x); + writer->writeDouble(23, ent->fourPoint.y); + writer->writeDouble(33, ent->fourPoint.z); + return true; +} + +bool dxfRW::writeSolid(DRW_Solid *ent){ + writer->writeString(0, "SOLID"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbTrace"); + } + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(11, ent->secPoint.x); + writer->writeDouble(21, ent->secPoint.y); + writer->writeDouble(31, ent->secPoint.z); + writer->writeDouble(12, ent->thirdPoint.x); + writer->writeDouble(22, ent->thirdPoint.y); + writer->writeDouble(32, ent->thirdPoint.z); + writer->writeDouble(13, ent->fourPoint.x); + writer->writeDouble(23, ent->fourPoint.y); + writer->writeDouble(33, ent->fourPoint.z); + return true; +} + +bool dxfRW::write3dface(DRW_3Dface *ent){ + writer->writeString(0, "3DFACE"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbFace"); + } + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(11, ent->secPoint.x); + writer->writeDouble(21, ent->secPoint.y); + writer->writeDouble(31, ent->secPoint.z); + writer->writeDouble(12, ent->thirdPoint.x); + writer->writeDouble(22, ent->thirdPoint.y); + writer->writeDouble(32, ent->thirdPoint.z); + writer->writeDouble(13, ent->fourPoint.x); + writer->writeDouble(23, ent->fourPoint.y); + writer->writeDouble(33, ent->fourPoint.z); + writer->writeInt16(70, ent->invisibleflag); + return true; +} + +bool dxfRW::writeLWPolyline(DRW_LWPolyline *ent){ + if (version > DRW::AC1009) { + writer->writeString(0, "LWPOLYLINE"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbPolyline"); + } + ent->vertexnum = ent->vertlist.size(); + writer->writeInt32(90, ent->vertexnum); + writer->writeInt16(70, ent->flags); + writer->writeDouble(43, ent->width); + if (ent->elevation != 0) + writer->writeDouble(38, ent->elevation); + if (ent->thickness != 0) + writer->writeDouble(39, ent->thickness); + for (int i = 0; i< ent->vertexnum; i++){ + DRW_Vertex2D *v = ent->vertlist.at(i); + writer->writeDouble(10, v->x); + writer->writeDouble(20, v->y); + if (v->stawidth != 0) + writer->writeDouble(40, v->stawidth); + if (v->endwidth != 0) + writer->writeDouble(41, v->endwidth); + if (v->bulge != 0) + writer->writeDouble(42, v->bulge); + } + } else { + //RLZ: TODO convert lwpolyline in polyline (not exist in acad 12) + } + return true; +} + +bool dxfRW::writePolyline(DRW_Polyline *ent) { + writer->writeString(0, "POLYLINE"); + writeEntity(ent); + if (version > DRW::AC1009) { + if (ent->flags & 8 || ent->flags & 16) + writer->writeString(100, "AcDb2dPolyline"); + else + writer->writeString(100, "AcDb3dPolyline"); + } else + writer->writeInt16(66, 1); + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, ent->basePoint.z); + if (ent->thickness != 0) { + writer->writeDouble(39, ent->thickness); + } + writer->writeInt16(70, ent->flags); + if (ent->defstawidth != 0) { + writer->writeDouble(40, ent->defstawidth); + } + if (ent->defendwidth != 0) { + writer->writeDouble(41, ent->defendwidth); + } + if (ent->flags & 16 || ent->flags & 32) { + writer->writeInt16(71, ent->vertexcount); + writer->writeInt16(72, ent->facecount); + } + if (ent->smoothM != 0) { + writer->writeInt16(73, ent->smoothM); + } + if (ent->smoothN != 0) { + writer->writeInt16(74, ent->smoothN); + } + if (ent->curvetype != 0) { + writer->writeInt16(75, ent->curvetype); + } + DRW_Coord crd = ent->extPoint; + if (crd.x != 0 || crd.y != 0 || crd.z != 1) { + writer->writeDouble(210, crd.x); + writer->writeDouble(220, crd.y); + writer->writeDouble(230, crd.z); + } + + int vertexnum = ent->vertlist.size(); + for (int i = 0; i< vertexnum; i++){ + DRW_Vertex *v = ent->vertlist.at(i); + writer->writeString(0, "VERTEX"); + writeEntity(ent); + if (version > DRW::AC1009) + writer->writeString(100, "AcDbVertex"); + if ( (v->flags & 128) && !(v->flags & 64) ) { + writer->writeDouble(10, 0); + writer->writeDouble(20, 0); + writer->writeDouble(30, 0); + } else { + writer->writeDouble(10, v->basePoint.x); + writer->writeDouble(20, v->basePoint.y); + writer->writeDouble(30, v->basePoint.z); + } + if (v->stawidth != 0) + writer->writeDouble(40, v->stawidth); + if (v->endwidth != 0) + writer->writeDouble(41, v->endwidth); + if (v->bulge != 0) + writer->writeDouble(42, v->bulge); + if (v->flags != 0) { + writer->writeInt16(70, ent->flags); + } + if (v->flags & 2) { + writer->writeDouble(50, v->tgdir); + } + if ( v->flags & 128 ) { + if (v->vindex1 != 0) { + writer->writeInt16(71, v->vindex1); + } + if (v->vindex2 != 0) { + writer->writeInt16(72, v->vindex2); + } + if (v->vindex3 != 0) { + writer->writeInt16(73, v->vindex3); + } + if (v->vindex4 != 0) { + writer->writeInt16(74, v->vindex4); + } + if ( !(v->flags & 64) ) { + writer->writeInt32(91, v->identifier); + } + } + } + writer->writeString(0, "SEQEND"); + writeEntity(ent); + return true; +} + +bool dxfRW::writeSpline(DRW_Spline *ent){ + if (version > DRW::AC1009) { + writer->writeString(0, "SPLINE"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbSpline"); + } + writer->writeDouble(210, ent->normalVec.x); + writer->writeDouble(220, ent->normalVec.y); + writer->writeDouble(230, ent->normalVec.z); + writer->writeInt16(70, ent->flags); + writer->writeInt16(71, ent->degree); + writer->writeInt16(72, ent->nknots); + writer->writeInt16(73, ent->ncontrol); + writer->writeInt16(74, ent->nfit); + writer->writeDouble(42, ent->tolknot); + writer->writeDouble(43, ent->tolcontrol); + //RLZ: warning check if nknots are correct and ncontrol + for (int i = 0; i< ent->nknots; i++){ + writer->writeDouble(40, ent->knotslist.at(i)); + } + for (int i = 0; i< (int)ent->weightlist.size(); i++) { + writer->writeDouble(41, ent->weightlist.at(i)); + } + for (int i = 0; i< ent->ncontrol; i++){ + DRW_Coord *crd = ent->controllist.at(i); + writer->writeDouble(10, crd->x); + writer->writeDouble(20, crd->y); + writer->writeDouble(30, crd->z); + } + } else { + //RLZ: TODO convert spline in polyline (not exist in acad 12) + } + return true; +} + +bool dxfRW::writeHatch(DRW_Hatch *ent){ + if (version > DRW::AC1009) { + writer->writeString(0, "HATCH"); + writeEntity(ent); + writer->writeString(100, "AcDbHatch"); + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(210, ent->extPoint.x); + writer->writeDouble(220, ent->extPoint.y); + writer->writeDouble(230, ent->extPoint.z); + writer->writeString(2, ent->name); + writer->writeInt16(70, ent->solid); + writer->writeInt16(71, ent->associative); + ent->loopsnum = ent->looplist.size(); + writer->writeInt16(91, ent->loopsnum); + //write paths data + for (int i = 0; i< ent->loopsnum; i++){ + DRW_HatchLoop *loop = ent->looplist.at(i); + writer->writeInt16(92, loop->type); + if ( (loop->type & 2) == 2){ + //RLZ: polyline boundary writeme + } else { + //boundary path + loop->update(); + writer->writeInt16(93, loop->numedges); + for (int j = 0; jnumedges; ++j) { + switch ( (loop->objlist.at(j))->eType) { + case DRW::LINE: { + writer->writeInt16(72, 1); + DRW_Line* l = (DRW_Line*)loop->objlist.at(j); + writer->writeDouble(10, l->basePoint.x); + writer->writeDouble(20, l->basePoint.y); + writer->writeDouble(11, l->secPoint.x); + writer->writeDouble(21, l->secPoint.y); + break; } + case DRW::ARC: { + writer->writeInt16(72, 2); + DRW_Arc* a = (DRW_Arc*)loop->objlist.at(j); + writer->writeDouble(10, a->basePoint.x); + writer->writeDouble(20, a->basePoint.y); + writer->writeDouble(40, a->radious); + writer->writeDouble(50, a->staangle*ARAD); + writer->writeDouble(51, a->endangle*ARAD); + writer->writeInt16(73, a->isccw); + break; } + case DRW::ELLIPSE: { + writer->writeInt16(72, 3); + DRW_Ellipse* a = (DRW_Ellipse*)loop->objlist.at(j); + a->correctAxis(); + writer->writeDouble(10, a->basePoint.x); + writer->writeDouble(20, a->basePoint.y); + writer->writeDouble(11, a->secPoint.x); + writer->writeDouble(21, a->secPoint.y); + writer->writeDouble(40, a->ratio); + writer->writeDouble(50, a->staparam*ARAD); + writer->writeDouble(51, a->endparam*ARAD); + writer->writeInt16(73, a->isccw); + break; } + case DRW::SPLINE: + //RLZ: spline boundary writeme +// writer->writeInt16(72, 4); + break; + default: + break; + } + } + writer->writeInt16(97, 0); + } + } + writer->writeInt16(75, ent->hstyle); + writer->writeInt16(76, ent->hpattern); + if (!ent->solid){ + writer->writeDouble(52, ent->angle); + writer->writeDouble(41, ent->scale); + writer->writeInt16(77, ent->doubleflag); + writer->writeInt16(78, ent->deflines); + } +/* if (ent->deflines > 0){ + writer->writeInt16(78, ent->deflines); + }*/ + writer->writeInt32(98, 0); + } else { + //RLZ: TODO verify in acad12 + } + return true; +} + +bool dxfRW::writeLeader(DRW_Leader *ent){ + if (version > DRW::AC1009) { + writer->writeString(0, "LEADER"); + writeEntity(ent); + writer->writeString(100, "AcDbLeader"); + writer->writeUtf8String(3, ent->style); + writer->writeInt16(71, ent->arrow); + writer->writeInt16(72, ent->leadertype); + writer->writeInt16(73, ent->flag); + writer->writeInt16(74, ent->hookline); + writer->writeInt16(75, ent->hookflag); + writer->writeDouble(40, ent->textheight); + writer->writeDouble(41, ent->textwidth); + writer->writeDouble(76, ent->vertnum); + writer->writeDouble(76, ent->vertexlist.size()); + for (unsigned int i=0; ivertexlist.size(); i++) { + DRW_Coord *vert = ent->vertexlist.at(i); + writer->writeDouble(10, vert->x); + writer->writeDouble(20, vert->y); + writer->writeDouble(30, vert->z); + } + } else { + //RLZ: todo not supported by acad 12 saved as unnamed block + } + return true; +} +bool dxfRW::writeDimension(DRW_Dimension *ent) { + if (version > DRW::AC1009) { + writer->writeString(0, "DIMENSION"); + writeEntity(ent); + writer->writeString(100, "AcDbDimension"); + if (!ent->getName().empty()){ + writer->writeString(2, ent->getName()); + } + writer->writeDouble(10, ent->getDefPoint().x); + writer->writeDouble(20, ent->getDefPoint().y); + writer->writeDouble(30, ent->getDefPoint().z); + writer->writeDouble(11, ent->getTextPoint().x); + writer->writeDouble(21, ent->getTextPoint().y); + writer->writeDouble(31, ent->getTextPoint().z); + if ( !(ent->type & 32)) + ent->type = ent->type +32; + writer->writeInt16(70, ent->type); + if ( !(ent->getText().empty()) ) + writer->writeUtf8String(1, ent->getText()); + writer->writeInt16(71, ent->getAlign()); + if ( ent->getTextLineStyle() != 1) + writer->writeInt16(72, ent->getTextLineStyle()); + if ( ent->getTextLineFactor() != 1) + writer->writeDouble(41, ent->getTextLineFactor()); + writer->writeUtf8String(3, ent->getStyle()); + if ( ent->getTextLineFactor() != 0) + writer->writeDouble(53, ent->getDir()); + writer->writeDouble(210, ent->getExtrusion().x); + writer->writeDouble(220, ent->getExtrusion().y); + writer->writeDouble(230, ent->getExtrusion().z); + if ( ent->hasActualMeasurement()) + writer->writeDouble(42, ent->getActualMeasurement()); + + switch (ent->eType) { + case DRW::DIMALIGNED: + case DRW::DIMLINEAR: { + DRW_DimAligned * dd = (DRW_DimAligned*)ent; + writer->writeString(100, "AcDbAlignedDimension"); + DRW_Coord crd = dd->getClonepoint(); + if (crd.x != 0 || crd.y != 0 || crd.z != 0) { + writer->writeDouble(12, crd.x); + writer->writeDouble(22, crd.y); + writer->writeDouble(32, crd.z); + } + writer->writeDouble(13, dd->getDef1Point().x); + writer->writeDouble(23, dd->getDef1Point().y); + writer->writeDouble(33, dd->getDef1Point().z); + writer->writeDouble(14, dd->getDef2Point().x); + writer->writeDouble(24, dd->getDef2Point().y); + writer->writeDouble(34, dd->getDef2Point().z); + if (ent->eType == DRW::DIMLINEAR) { + DRW_DimLinear * dl = (DRW_DimLinear*)ent; + if (dl->getAngle() != 0) + writer->writeDouble(50, dl->getAngle()); + if (dl->getOblique() != 0) + writer->writeDouble(52, dl->getOblique()); + writer->writeString(100, "AcDbRotatedDimension"); + } + break; } + case DRW::DIMRADIAL: { + DRW_DimRadial * dd = (DRW_DimRadial*)ent; + writer->writeString(100, "AcDbRadialDimension"); + writer->writeDouble(15, dd->getDiameterPoint().x); + writer->writeDouble(25, dd->getDiameterPoint().y); + writer->writeDouble(35, dd->getDiameterPoint().z); + writer->writeDouble(40, dd->getLeaderLength()); + break; } + case DRW::DIMDIAMETRIC: { + DRW_DimDiametric * dd = (DRW_DimDiametric*)ent; + writer->writeString(100, "AcDbDiametricDimension"); + writer->writeDouble(15, dd->getDiameter1Point().x); + writer->writeDouble(25, dd->getDiameter1Point().y); + writer->writeDouble(35, dd->getDiameter1Point().z); + writer->writeDouble(40, dd->getLeaderLength()); + break; } + case DRW::DIMANGULAR: { + DRW_DimAngular * dd = (DRW_DimAngular*)ent; + writer->writeString(100, "AcDb2LineAngularDimension"); + writer->writeDouble(13, dd->getFirstLine1().x); + writer->writeDouble(23, dd->getFirstLine1().y); + writer->writeDouble(33, dd->getFirstLine1().z); + writer->writeDouble(14, dd->getFirstLine2().x); + writer->writeDouble(24, dd->getFirstLine2().y); + writer->writeDouble(34, dd->getFirstLine2().z); + writer->writeDouble(15, dd->getSecondLine1().x); + writer->writeDouble(25, dd->getSecondLine1().y); + writer->writeDouble(35, dd->getSecondLine1().z); + writer->writeDouble(16, dd->getDimPoint().x); + writer->writeDouble(26, dd->getDimPoint().y); + writer->writeDouble(36, dd->getDimPoint().z); + break; } + case DRW::DIMANGULAR3P: { + DRW_DimAngular3p * dd = (DRW_DimAngular3p*)ent; + writer->writeDouble(13, dd->getFirstLine().x); + writer->writeDouble(23, dd->getFirstLine().y); + writer->writeDouble(33, dd->getFirstLine().z); + writer->writeDouble(14, dd->getSecondLine().x); + writer->writeDouble(24, dd->getSecondLine().y); + writer->writeDouble(34, dd->getSecondLine().z); + writer->writeDouble(15, dd->getVertexPoint().x); + writer->writeDouble(25, dd->getVertexPoint().y); + writer->writeDouble(35, dd->getVertexPoint().z); + break; } + case DRW::DIMORDINATE: { + DRW_DimOrdinate * dd = (DRW_DimOrdinate*)ent; + writer->writeString(100, "AcDbOrdinateDimension"); + writer->writeDouble(13, dd->getFirstLine().x); + writer->writeDouble(23, dd->getFirstLine().y); + writer->writeDouble(33, dd->getFirstLine().z); + writer->writeDouble(14, dd->getSecondLine().x); + writer->writeDouble(24, dd->getSecondLine().y); + writer->writeDouble(34, dd->getSecondLine().z); + break; } + default: + break; + } + } else { + //RLZ: todo not supported by acad 12 saved as unnamed block + } + return true; +} + +bool dxfRW::writeInsert(DRW_Insert *ent){ + writer->writeString(0, "INSERT"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbBlockReference"); + writer->writeUtf8String(2, ent->name); + } else + writer->writeUtf8Caps(2, ent->name); + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(41, ent->xscale); + writer->writeDouble(42, ent->yscale); + writer->writeDouble(43, ent->zscale); + writer->writeDouble(50, (ent->angle)*ARAD); //in dxf angle is writed in degrees + writer->writeInt16(70, ent->colcount); + writer->writeInt16(71, ent->rowcount); + writer->writeDouble(44, ent->colspace); + writer->writeDouble(45, ent->rowspace); + return true; +} + +bool dxfRW::writeText(DRW_Text *ent){ + writer->writeString(0, "TEXT"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbText"); + } +// writer->writeDouble(39, ent->thickness); + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(40, ent->height); + writer->writeUtf8String(1, ent->text); + writer->writeDouble(50, ent->angle); + writer->writeDouble(41, ent->widthscale); + writer->writeDouble(51, ent->oblique); + if (version > DRW::AC1009) + writer->writeUtf8String(7, ent->style); + else + writer->writeUtf8Caps(7, ent->style); + writer->writeInt16(71, ent->textgen); + if (ent->alignH != DRW_Text::HLeft) { + writer->writeInt16(72, ent->alignH); + } + if (ent->alignH != DRW_Text::HLeft || ent->alignV != DRW_Text::VBaseLine) { + writer->writeDouble(11, ent->secPoint.x); + writer->writeDouble(21, ent->secPoint.y); + writer->writeDouble(31, ent->secPoint.z); + } + writer->writeDouble(210, ent->extPoint.x); + writer->writeDouble(220, ent->extPoint.y); + writer->writeDouble(230, ent->extPoint.z); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbText"); + } + if (ent->alignV != DRW_Text::VBaseLine) { + writer->writeInt16(73, ent->alignV); + } + return true; +} + +bool dxfRW::writeMText(DRW_MText *ent){ + if (version > DRW::AC1009) { + writer->writeString(0, "MTEXT"); + writeEntity(ent); + writer->writeString(100, "AcDbMText"); + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(40, ent->height); + writer->writeDouble(41, ent->widthscale); + writer->writeInt16(71, ent->textgen); + writer->writeInt16(72, ent->alignH); + std::string text = writer->fromUtf8String(ent->text); + + int i; + for(i =0; (text.size()-i) > 250; ) { + writer->writeString(3, text.substr(i, 250)); + i +=250; + } + writer->writeString(1, text.substr(i)); + writer->writeString(7, ent->style); + writer->writeDouble(210, ent->extPoint.x); + writer->writeDouble(220, ent->extPoint.y); + writer->writeDouble(230, ent->extPoint.z); + writer->writeDouble(50, ent->angle); + writer->writeInt16(73, ent->alignV); + writer->writeDouble(44, ent->interlin); +//RLZ ... 11, 21, 31 needed? + } else { + //RLZ: TODO convert mtext in text lines (not exist in acad 12) + } + return true; +} + +bool dxfRW::writeViewport(DRW_Viewport *ent) { + writer->writeString(0, "VIEWPORT"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbViewport"); + } + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + if (ent->basePoint.z != 0.0) + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(40, ent->pswidth); + writer->writeDouble(41, ent->psheight); + writer->writeInt16(68, ent->vpstatus); + writer->writeInt16(69, ent->vpID); + writer->writeDouble(12, ent->centerPX);//RLZ: verify if exist in V12 + writer->writeDouble(22, ent->centerPY);//RLZ: verify if exist in V12 + return true; +} + +DRW_ImageDef* dxfRW::writeImage(DRW_Image *ent, std::string name){ + if (version > DRW::AC1009) { + //search if exist imagedef with this mane (image inserted more than 1 time) + //RLZ: imagedef_reactor seem needed to read in acad + DRW_ImageDef *id = NULL; + for (unsigned int i=0; iname == name ) { + id = imageDef.at(i); + continue; + } + } + if (id == NULL) { + id = new DRW_ImageDef(); + imageDef.push_back(id); + id->handle = ++entCount; + } + id->name = name; + std::string idReactor = toHexStr(++entCount); + + writer->writeString(0, "IMAGE"); + writeEntity(ent); + writer->writeString(100, "AcDbRasterImage"); + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(11, ent->secPoint.x); + writer->writeDouble(21, ent->secPoint.y); + writer->writeDouble(31, ent->secPoint.z); + writer->writeDouble(12, ent->vVector.x); + writer->writeDouble(22, ent->vVector.y); + writer->writeDouble(32, ent->vVector.z); + writer->writeDouble(13, ent->sizeu); + writer->writeDouble(23, ent->sizev); + writer->writeString(340, toHexStr(id->handle)); + writer->writeInt16(70, 1); + writer->writeInt16(280, ent->clip); + writer->writeInt16(281, ent->brightness); + writer->writeInt16(282, ent->contrast); + writer->writeInt16(283, ent->fade); + writer->writeString(360, idReactor); + id->reactors[idReactor] = toHexStr(ent->handle); + return id; + } + return NULL; //not exist in acad 12 +} + +bool dxfRW::writeBlockRecord(std::string name){ + if (version > DRW::AC1009) { + writer->writeString(0, "BLOCK_RECORD"); + writer->writeString(5, toHexStr(++entCount)); + + blockMap[name] = entCount; + entCount = 2+entCount;//reserve 2 for BLOCK & ENDBLOCK + if (version > DRW::AC1014) { + writer->writeString(330, "1"); + } + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbBlockTableRecord"); + writer->writeUtf8String(2, name); + if (version > DRW::AC1018) { + // writer->writeInt16(340, 22); + writer->writeInt16(70, 0); + writer->writeInt16(280, 1); + writer->writeInt16(281, 0); + } + } + return true; +} + +bool dxfRW::writeBlock(DRW_Block *bk){ + if (writingBlock) { + writer->writeString(0, "ENDBLK"); + if (version > DRW::AC1009) { + writer->writeString(5, toHexStr(currHandle+2)); + if (version > DRW::AC1014) { + writer->writeString(330, toHexStr(currHandle)); + } + writer->writeString(100, "AcDbEntity"); + } + writer->writeString(8, "0"); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbBlockEnd"); + } + } + writingBlock = true; + writer->writeString(0, "BLOCK"); + if (version > DRW::AC1009) { + currHandle = (*(blockMap.find(bk->name))).second; + writer->writeString(5, toHexStr(currHandle+1)); + if (version > DRW::AC1014) { + writer->writeString(330, toHexStr(currHandle)); + } + writer->writeString(100, "AcDbEntity"); + } + writer->writeString(8, "0"); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbBlockBegin"); + writer->writeUtf8String(2, bk->name); + } else + writer->writeUtf8Caps(2, bk->name); + writer->writeInt16(70, bk->flags); + writer->writeDouble(10, bk->basePoint.x); + writer->writeDouble(20, bk->basePoint.y); + if (bk->basePoint.z != 0.0) { + writer->writeDouble(30, bk->basePoint.z); + } + if (version > DRW::AC1009) + writer->writeUtf8String(3, bk->name); + else + writer->writeUtf8Caps(3, bk->name); + writer->writeString(1, ""); + + return true; +} + +bool dxfRW::writeTables() { + writer->writeString(0, "TABLE"); + writer->writeString(2, "VPORT"); + if (version > DRW::AC1009) { + writer->writeString(5, "8"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbSymbolTable"); + } + writer->writeInt16(70, 1); //end table def +/*** VPORT ***/ + dimstyleStd =false; + iface->writeVports(); + if (!dimstyleStd) { + DRW_Vport portact; + portact.name = "*ACTIVE"; + writeVport(&portact); + } + writer->writeString(0, "ENDTAB"); +/*** LTYPE ***/ + writer->writeString(0, "TABLE"); + writer->writeString(2, "LTYPE"); + if (version > DRW::AC1009) { + writer->writeString(5, "5"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbSymbolTable"); + } + writer->writeInt16(70, 4); //end table def +//Mandatory linetypes + writer->writeString(0, "LTYPE"); + if (version > DRW::AC1009) { + writer->writeString(5, "14"); + if (version > DRW::AC1014) { + writer->writeString(330, "5"); + } + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbLinetypeTableRecord"); + writer->writeString(2, "ByBlock"); + } else + writer->writeString(2, "BYBLOCK"); + writer->writeInt16(70, 0); + writer->writeString(3, ""); + writer->writeInt16(72, 65); + writer->writeInt16(73, 0); + writer->writeDouble(40, 0.0); + + writer->writeString(0, "LTYPE"); + if (version > DRW::AC1009) { + writer->writeString(5, "15"); + if (version > DRW::AC1014) { + writer->writeString(330, "5"); + } + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbLinetypeTableRecord"); + writer->writeString(2, "ByLayer"); + } else + writer->writeString(2, "BYLAYER"); + writer->writeInt16(70, 0); + writer->writeString(3, ""); + writer->writeInt16(72, 65); + writer->writeInt16(73, 0); + writer->writeDouble(40, 0.0); + + writer->writeString(0, "LTYPE"); + if (version > DRW::AC1009) { + writer->writeString(5, "16"); + if (version > DRW::AC1014) { + writer->writeString(330, "5"); + } + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbLinetypeTableRecord"); + writer->writeString(2, "Continuous"); + } else { + writer->writeString(2, "CONTINUOUS"); + } + writer->writeInt16(70, 0); + writer->writeString(3, "Solid line"); + writer->writeInt16(72, 65); + writer->writeInt16(73, 0); + writer->writeDouble(40, 0.0); +//Aplication linetypes + iface->writeLTypes(); + writer->writeString(0, "ENDTAB"); +/*** LAYER ***/ + writer->writeString(0, "TABLE"); + writer->writeString(2, "LAYER"); + if (version > DRW::AC1009) { + writer->writeString(5, "2"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbSymbolTable"); + } + writer->writeInt16(70, 1); //end table def + wlayer0 =false; + iface->writeLayers(); + if (!wlayer0) { + DRW_Layer lay0; + lay0.name = "0"; + writeLayer(&lay0); + } + writer->writeString(0, "ENDTAB"); +/*** STYLE ***/ + writer->writeString(0, "TABLE"); + writer->writeString(2, "STYLE"); + if (version > DRW::AC1009) { + writer->writeString(5, "3"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbSymbolTable"); + } + writer->writeInt16(70, 3); //end table def + dimstyleStd =false; + iface->writeTextstyles(); + if (!dimstyleStd) { + DRW_Textstyle tsty; + tsty.name = "Standard"; + writeTextstyle(&tsty); + } + writer->writeString(0, "ENDTAB"); + + writer->writeString(0, "TABLE"); + writer->writeString(2, "VIEW"); + if (version > DRW::AC1009) { + writer->writeString(5, "6"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbSymbolTable"); + } + writer->writeInt16(70, 0); //end table def + writer->writeString(0, "ENDTAB"); + + writer->writeString(0, "TABLE"); + writer->writeString(2, "UCS"); + if (version > DRW::AC1009) { + writer->writeString(5, "7"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbSymbolTable"); + } + writer->writeInt16(70, 0); //end table def + writer->writeString(0, "ENDTAB"); + + writer->writeString(0, "TABLE"); + writer->writeString(2, "APPID"); + if (version > DRW::AC1009) { + writer->writeString(5, "9"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbSymbolTable"); + } + writer->writeInt16(70, 1); //end table def + writer->writeString(0, "APPID"); + if (version > DRW::AC1009) { + writer->writeString(5, "12"); + if (version > DRW::AC1014) { + writer->writeString(330, "9"); + } + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbRegAppTableRecord"); + } + writer->writeString(2, "ACAD"); + writer->writeInt16(70, 0); + iface->writeAppId(); + writer->writeString(0, "ENDTAB"); + + writer->writeString(0, "TABLE"); + writer->writeString(2, "DIMSTYLE"); + if (version > DRW::AC1009) { + writer->writeString(5, "A"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbSymbolTable"); + } + writer->writeInt16(70, 1); //end table def + if (version > DRW::AC1014) { + writer->writeString(100, "AcDbDimStyleTable"); + writer->writeInt16(71, 1); //end table def + } + dimstyleStd =false; + iface->writeDimstyles(); + if (!dimstyleStd) { + DRW_Dimstyle dsty; + dsty.name = "Standard"; + writeDimstyle(&dsty); + } + writer->writeString(0, "ENDTAB"); + + if (version > DRW::AC1009) { + writer->writeString(0, "TABLE"); + writer->writeString(2, "BLOCK_RECORD"); + writer->writeString(5, "1"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbSymbolTable"); + writer->writeInt16(70, 2); //end table def + writer->writeString(0, "BLOCK_RECORD"); + writer->writeString(5, "1F"); + if (version > DRW::AC1014) { + writer->writeString(330, "1"); + } + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbBlockTableRecord"); + writer->writeString(2, "*Model_Space"); + if (version > DRW::AC1018) { + // writer->writeInt16(340, 22); + writer->writeInt16(70, 0); + writer->writeInt16(280, 1); + writer->writeInt16(281, 0); + } + writer->writeString(0, "BLOCK_RECORD"); + writer->writeString(5, "1E"); + if (version > DRW::AC1014) { + writer->writeString(330, "1"); + } + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbBlockTableRecord"); + writer->writeString(2, "*Paper_Space"); + if (version > DRW::AC1018) { + // writer->writeInt16(340, 22); + writer->writeInt16(70, 0); + writer->writeInt16(280, 1); + writer->writeInt16(281, 0); + } + } + /* allways call writeBlockRecords to iface for prepare unnamed blocks */ + iface->writeBlockRecords(); + if (version > DRW::AC1009) { + writer->writeString(0, "ENDTAB"); + } +return true; +} + +bool dxfRW::writeBlocks() { + writer->writeString(0, "BLOCK"); + if (version > DRW::AC1009) { + writer->writeString(5, "20"); + if (version > DRW::AC1014) { + writer->writeString(330, "1F"); + } + writer->writeString(100, "AcDbEntity"); + } + writer->writeString(8, "0"); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbBlockBegin"); + writer->writeString(2, "*Model_Space"); + } else + writer->writeString(2, "$MODEL_SPACE"); + writer->writeInt16(70, 0); + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + if (version > DRW::AC1009) + writer->writeString(3, "*Model_Space"); + else + writer->writeString(3, "$MODEL_SPACE"); + writer->writeString(1, ""); + writer->writeString(0, "ENDBLK"); + if (version > DRW::AC1009) { + writer->writeString(5, "21"); + if (version > DRW::AC1014) { + writer->writeString(330, "1F"); + } + writer->writeString(100, "AcDbEntity"); + } + writer->writeString(8, "0"); + if (version > DRW::AC1009) + writer->writeString(100, "AcDbBlockEnd"); + + writer->writeString(0, "BLOCK"); + if (version > DRW::AC1009) { + writer->writeString(5, "1C"); + if (version > DRW::AC1014) { + writer->writeString(330, "1B"); + } + writer->writeString(100, "AcDbEntity"); + } + writer->writeString(8, "0"); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbBlockBegin"); + writer->writeString(2, "*Paper_Space"); + } else + writer->writeString(2, "$PAPER_SPACE"); + writer->writeInt16(70, 0); + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + if (version > DRW::AC1009) + writer->writeString(3, "*Paper_Space"); + else + writer->writeString(3, "$PAPER_SPACE"); + writer->writeString(1, ""); + writer->writeString(0, "ENDBLK"); + if (version > DRW::AC1009) { + writer->writeString(5, "1D"); + if (version > DRW::AC1014) { + writer->writeString(330, "1F"); + } + writer->writeString(100, "AcDbEntity"); + } + writer->writeString(8, "0"); + if (version > DRW::AC1009) + writer->writeString(100, "AcDbBlockEnd"); + writingBlock = false; + iface->writeBlocks(); + if (writingBlock) { + writingBlock = false; + writer->writeString(0, "ENDBLK"); + if (version > DRW::AC1009) { + writer->writeString(5, toHexStr(currHandle+2)); +// writer->writeString(5, "1D"); + if (version > DRW::AC1014) { + writer->writeString(330, toHexStr(currHandle)); + } + writer->writeString(100, "AcDbEntity"); + } + writer->writeString(8, "0"); + if (version > DRW::AC1009) + writer->writeString(100, "AcDbBlockEnd"); + } + return true; +} + +bool dxfRW::writeObjects() { + writer->writeString(0, "DICTIONARY"); + std::string imgDictH; + writer->writeString(5, "C"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbDictionary"); + writer->writeInt16(281, 1); + writer->writeString(3, "ACAD_GROUP"); + writer->writeString(350, "D"); + if (imageDef.size() != 0) { + writer->writeString(3, "ACAD_IMAGE_DICT"); + imgDictH = toHexStr(++entCount); + writer->writeString(350, imgDictH); + } + writer->writeString(0, "DICTIONARY"); + writer->writeString(5, "D"); + writer->writeString(330, "C"); + writer->writeString(100, "AcDbDictionary"); + writer->writeInt16(281, 1); +//write IMAGEDEF_REACTOR + for (unsigned int i=0; i::iterator it; + for ( it=id->reactors.begin() ; it != id->reactors.end(); ++it ) { + writer->writeString(0, "IMAGEDEF_REACTOR"); + writer->writeString(5, (*it).first); + writer->writeString(330, (*it).second); + writer->writeString(100, "AcDbRasterImageDefReactor"); + writer->writeInt16(90, 2); //version 2=R14 to v2010 + writer->writeString(330, (*it).second); + } + } + if (imageDef.size() != 0) { + writer->writeString(0, "DICTIONARY"); + writer->writeString(5, imgDictH); + writer->writeString(330, "C"); + writer->writeString(100, "AcDbDictionary"); + writer->writeInt16(281, 1); + for (unsigned int i=0; iname.find_last_of("/\\"); + f2 =imageDef.at(i)->name.find_last_of('.'); + ++f1; + writer->writeString(3, imageDef.at(i)->name.substr(f1,f2-f1)); + writer->writeString(350, toHexStr(imageDef.at(i)->handle) ); + } + } + for (unsigned int i=0; iwriteString(0, "IMAGEDEF"); + writer->writeString(5, toHexStr(id->handle) ); + if (version > DRW::AC1014) { +// writer->writeString(330, "0"); handle to DICTIONARY + } + writer->writeString(102, "{ACAD_REACTORS"); + std::map::iterator it; + for ( it=id->reactors.begin() ; it != id->reactors.end(); ++it ) { + writer->writeString(330, (*it).first); + } + writer->writeString(102, "}"); + writer->writeString(100, "AcDbRasterImageDef"); + writer->writeInt16(90, 0); //version 0=R14 to v2010 + writer->writeUtf8String(1, id->name); + writer->writeDouble(10, id->u); + writer->writeDouble(20, id->v); + writer->writeDouble(11, id->up); + writer->writeDouble(21, id->vp); + writer->writeInt16(280, id->loaded); + writer->writeInt16(281, id->resolution); + } + //no more needed imageDef, delete it + while (!imageDef.empty()) { + imageDef.pop_back(); + } + + return true; +} + +bool dxfRW::writeExtData(const std::vector &ed){ + for (std::vector::const_iterator it=ed.begin(); it!=ed.end(); ++it){ + switch ((*it)->code) { + case 1000: + case 1001: + case 1002: + case 1003: + case 1004: + case 1005: + {int cc = (*it)->code; + if ((*it)->type == DRW_Variant::STRING) + writer->writeUtf8String(cc, *(*it)->content.s); +// writer->writeUtf8String((*it)->code, (*it)->content.s); + break;} + case 1010: + case 1011: + case 1012: + case 1013: + if ((*it)->type == DRW_Variant::COORD) { + writer->writeDouble((*it)->code, (*it)->content.v->x); + writer->writeDouble((*it)->code+10 , (*it)->content.v->y); + writer->writeDouble((*it)->code+20 , (*it)->content.v->z); + } + break; + case 1040: + case 1041: + case 1042: + if ((*it)->type == DRW_Variant::DOUBLE) + writer->writeDouble((*it)->code, (*it)->content.d); + break; + case 1070: + if ((*it)->type == DRW_Variant::INTEGER) + writer->writeInt16((*it)->code, (*it)->content.i); + break; + case 1071: + if ((*it)->type == DRW_Variant::INTEGER) + writer->writeInt32((*it)->code, (*it)->content.i); + break; + default: + break; + } + } + return true; +} + +/********* Reader Process *********/ + +bool dxfRW::processDxf() { + DRW_DBG("dxfRW::processDxf() start processing dxf\n"); + int code; + bool more = true; + std::string sectionstr; +// section = secUnknown; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG(" processDxf\n"); + if (code == 999) { + header.addComment(reader->getString()); + } else if (code == 0) { + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG(" processDxf\n"); + if (sectionstr == "EOF") { + return true; //found EOF terminate + } + if (sectionstr == "SECTION") { + more = reader->readRec(&code); + DRW_DBG(code); DRW_DBG(" processDxf\n"); + if (!more) + return false; //wrong dxf file + if (code == 2) { + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG(" processDxf\n"); + //found section, process it + if (sectionstr == "HEADER") { + processHeader(); + } else if (sectionstr == "CLASSES") { +// processClasses(); + } else if (sectionstr == "TABLES") { + processTables(); + } else if (sectionstr == "BLOCKS") { + processBlocks(); + } else if (sectionstr == "ENTITIES") { + processEntities(false); + } else if (sectionstr == "OBJECTS") { + processObjects(); + } + } + } + } +/* if (!more) + return true;*/ + } + return true; +} + +/********* Header Section *********/ + +bool dxfRW::processHeader() { + DRW_DBG("dxfRW::processHeader\n"); + int code; + std::string sectionstr; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG(" processHeader\n"); + if (code == 0) { + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG(" processHeader\n\n"); + if (sectionstr == "ENDSEC") { + iface->addHeader(&header); + return true; //found ENDSEC terminate + } + } else header.parseCode(code, reader); + } + return true; +} + +/********* Tables Section *********/ + +bool dxfRW::processTables() { + DRW_DBG("dxfRW::processTables\n"); + int code; + std::string sectionstr; + bool more = true; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + if (code == 0) { + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG(" processHeader\n\n"); + if (sectionstr == "TABLE") { + more = reader->readRec(&code); + DRW_DBG(code); DRW_DBG("\n"); + if (!more) + return false; //wrong dxf file + if (code == 2) { + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG(" processHeader\n\n"); + //found section, process it + if (sectionstr == "LTYPE") { + processLType(); + } else if (sectionstr == "LAYER") { + processLayer(); + } else if (sectionstr == "STYLE") { + processTextStyle(); + } else if (sectionstr == "VPORT") { + processVports(); + } else if (sectionstr == "VIEW") { +// processView(); + } else if (sectionstr == "UCS") { +// processUCS(); + } else if (sectionstr == "APPID") { + processAppId(); + } else if (sectionstr == "DIMSTYLE") { + processDimStyle(); + } else if (sectionstr == "BLOCK_RECORD") { +// processBlockRecord(); + } + } + } else if (sectionstr == "ENDSEC") { + return true; //found ENDSEC terminate + } + } + } + return true; +} + +bool dxfRW::processLType() { + DRW_DBG("dxfRW::processLType\n"); + int code; + std::string sectionstr; + bool reading = false; + DRW_LType ltype; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + if (code == 0) { + if (reading) { + ltype.update(); + iface->addLType(ltype); + } + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG("\n"); + if (sectionstr == "LTYPE") { + reading = true; + ltype.reset(); + } else if (sectionstr == "ENDTAB") { + return true; //found ENDTAB terminate + } + } else if (reading) + ltype.parseCode(code, reader); + } + return true; +} + +bool dxfRW::processLayer() { + DRW_DBG("dxfRW::processLayer\n"); + int code; + std::string sectionstr; + bool reading = false; + DRW_Layer layer; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + if (code == 0) { + if (reading) + iface->addLayer(layer); + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG("\n"); + if (sectionstr == "LAYER") { + reading = true; + layer.reset(); + } else if (sectionstr == "ENDTAB") { + return true; //found ENDTAB terminate + } + } else if (reading) + layer.parseCode(code, reader); + } + return true; +} + +bool dxfRW::processDimStyle() { + DRW_DBG("dxfRW::processDimStyle"); + int code; + std::string sectionstr; + bool reading = false; + DRW_Dimstyle dimSty; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + if (code == 0) { + if (reading) + iface->addDimStyle(dimSty); + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG("\n"); + if (sectionstr == "DIMSTYLE") { + reading = true; + dimSty.reset(); + } else if (sectionstr == "ENDTAB") { + return true; //found ENDTAB terminate + } + } else if (reading) + dimSty.parseCode(code, reader); + } + return true; +} + +bool dxfRW::processTextStyle(){ + DRW_DBG("dxfRW::processTextStyle"); + int code; + std::string sectionstr; + bool reading = false; + DRW_Textstyle TxtSty; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + if (code == 0) { + if (reading) + iface->addTextStyle(TxtSty); + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG("\n"); + if (sectionstr == "STYLE") { + reading = true; + TxtSty.reset(); + } else if (sectionstr == "ENDTAB") { + return true; //found ENDTAB terminate + } + } else if (reading) + TxtSty.parseCode(code, reader); + } + return true; +} + +bool dxfRW::processVports(){ + DRW_DBG("dxfRW::processVports"); + int code; + std::string sectionstr; + bool reading = false; + DRW_Vport vp; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + if (code == 0) { + if (reading) + iface->addVport(vp); + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG("\n"); + if (sectionstr == "VPORT") { + reading = true; + vp.reset(); + } else if (sectionstr == "ENDTAB") { + return true; //found ENDTAB terminate + } + } else if (reading) + vp.parseCode(code, reader); + } + return true; +} + +bool dxfRW::processAppId(){ + DRW_DBG("dxfRW::processAppId"); + int code; + std::string sectionstr; + bool reading = false; + DRW_AppId vp; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + if (code == 0) { + if (reading) + iface->addAppId(vp); + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG("\n"); + if (sectionstr == "APPID") { + reading = true; + vp.reset(); + } else if (sectionstr == "ENDTAB") { + return true; //found ENDTAB terminate + } + } else if (reading) + vp.parseCode(code, reader); + } + return true; +} + +/********* Block Section *********/ + +bool dxfRW::processBlocks() { + DRW_DBG("dxfRW::processBlocks\n"); + int code; + std::string sectionstr; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + if (code == 0) { + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG("\n"); + if (sectionstr == "BLOCK") { + processBlock(); + } else if (sectionstr == "ENDSEC") { + return true; //found ENDSEC terminate + } + } + } + return true; +} + +bool dxfRW::processBlock() { + DRW_DBG("dxfRW::processBlock"); + int code; + DRW_Block block; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addBlock(block); + if (nextentity == "ENDBLK") { + iface->endBlock(); + return true; //found ENDBLK, terminate + } else { + processEntities(true); + iface->endBlock(); + return true; //found ENDBLK, terminate + } + } + default: + block.parseCode(code, reader); + break; + } + } + return true; +} + + +/********* Entities Section *********/ + +bool dxfRW::processEntities(bool isblock) { + DRW_DBG("dxfRW::processEntities\n"); + int code; + if (!reader->readRec(&code)){ + return false; + } + bool next = true; + if (code == 0) { + nextentity = reader->getString(); + } else if (!isblock) { + return false; //first record in entities is 0 + } + do { + if (nextentity == "ENDSEC" || nextentity == "ENDBLK") { + return true; //found ENDSEC or ENDBLK terminate + } else if (nextentity == "POINT") { + processPoint(); + } else if (nextentity == "LINE") { + processLine(); + } else if (nextentity == "CIRCLE") { + processCircle(); + } else if (nextentity == "ARC") { + processArc(); + } else if (nextentity == "ELLIPSE") { + processEllipse(); + } else if (nextentity == "TRACE") { + processTrace(); + } else if (nextentity == "SOLID") { + processSolid(); + } else if (nextentity == "INSERT") { + processInsert(); + } else if (nextentity == "LWPOLYLINE") { + processLWPolyline(); + } else if (nextentity == "POLYLINE") { + processPolyline(); + } else if (nextentity == "TEXT") { + processText(); + } else if (nextentity == "MTEXT") { + processMText(); + } else if (nextentity == "HATCH") { + processHatch(); + } else if (nextentity == "SPLINE") { + processSpline(); + } else if (nextentity == "3DFACE") { + process3dface(); + } else if (nextentity == "VIEWPORT") { + processViewport(); + } else if (nextentity == "IMAGE") { + processImage(); + } else if (nextentity == "DIMENSION") { + processDimension(); + } else if (nextentity == "LEADER") { + processLeader(); + } else if (nextentity == "RAY") { + processRay(); + } else if (nextentity == "XLINE") { + processXline(); + } else { + if (reader->readRec(&code)){ + if (code == 0) + nextentity = reader->getString(); + } else + return false; //end of file without ENDSEC + } + + } while (next); + return true; +} + +bool dxfRW::processEllipse() { + DRW_DBG("dxfRW::processEllipse"); + int code; + DRW_Ellipse ellipse; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + if (applyExt) + ellipse.applyExtrusion(); + iface->addEllipse(ellipse); + return true; //found new entity or ENDSEC, terminate + } + default: + ellipse.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processTrace() { + DRW_DBG("dxfRW::processTrace"); + int code; + DRW_Trace trace; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + if (applyExt) + trace.applyExtrusion(); + iface->addTrace(trace); + return true; //found new entity or ENDSEC, terminate + } + default: + trace.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processSolid() { + DRW_DBG("dxfRW::processSolid"); + int code; + DRW_Solid solid; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + if (applyExt) + solid.applyExtrusion(); + iface->addSolid(solid); + return true; //found new entity or ENDSEC, terminate + } + default: + solid.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::process3dface() { + DRW_DBG("dxfRW::process3dface"); + int code; + DRW_3Dface face; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->add3dFace(face); + return true; //found new entity or ENDSEC, terminate + } + default: + face.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processViewport() { + DRW_DBG("dxfRW::processViewport"); + int code; + DRW_Viewport vp; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addViewport(vp); + return true; //found new entity or ENDSEC, terminate + } + default: + vp.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processPoint() { + DRW_DBG("dxfRW::processPoint\n"); + int code; + DRW_Point point; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addPoint(point); + return true; //found new entity or ENDSEC, terminate + } + default: + point.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processLine() { + DRW_DBG("dxfRW::processLine\n"); + int code; + DRW_Line line; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addLine(line); + return true; //found new entity or ENDSEC, terminate + } + default: + line.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processRay() { + DRW_DBG("dxfRW::processRay\n"); + int code; + DRW_Ray line; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addRay(line); + return true; //found new entity or ENDSEC, terminate + } + default: + line.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processXline() { + DRW_DBG("dxfRW::processXline\n"); + int code; + DRW_Xline line; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addXline(line); + return true; //found new entity or ENDSEC, terminate + } + default: + line.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processCircle() { + DRW_DBG("dxfRW::processPoint\n"); + int code; + DRW_Circle circle; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + if (applyExt) + circle.applyExtrusion(); + iface->addCircle(circle); + return true; //found new entity or ENDSEC, terminate + } + default: + circle.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processArc() { + DRW_DBG("dxfRW::processPoint\n"); + int code; + DRW_Arc arc; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + if (applyExt) + arc.applyExtrusion(); + iface->addArc(arc); + return true; //found new entity or ENDSEC, terminate + } + default: + arc.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processInsert() { + DRW_DBG("dxfRW::processInsert"); + int code; + DRW_Insert insert; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addInsert(insert); + return true; //found new entity or ENDSEC, terminate + } + default: + insert.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processLWPolyline() { + DRW_DBG("dxfRW::processLWPolyline"); + int code; + DRW_LWPolyline pl; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + if (applyExt) + pl.applyExtrusion(); + iface->addLWPolyline(pl); + return true; //found new entity or ENDSEC, terminate + } + default: + pl.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processPolyline() { + DRW_DBG("dxfRW::processPolyline"); + int code; + DRW_Polyline pl; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + if (nextentity != "VERTEX") { + iface->addPolyline(pl); + return true; //found new entity or ENDSEC, terminate + } else { + processVertex(&pl); + } + } + default: + pl.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processVertex(DRW_Polyline *pl) { + DRW_DBG("dxfRW::processVertex"); + int code; + DRW_Vertex *v = new DRW_Vertex(); + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + pl->appendVertex(v); + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + if (nextentity == "SEQEND") { + return true; //found SEQEND no more vertex, terminate + } else if (nextentity == "VERTEX"){ + v = new DRW_Vertex(); //another vertex + } + } + default: + v->parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processText() { + DRW_DBG("dxfRW::processText"); + int code; + DRW_Text txt; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addText(txt); + return true; //found new entity or ENDSEC, terminate + } + default: + txt.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processMText() { + DRW_DBG("dxfRW::processMText"); + int code; + DRW_MText txt; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + txt.updateAngle(); + iface->addMText(txt); + return true; //found new entity or ENDSEC, terminate + } + default: + txt.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processHatch() { + DRW_DBG("dxfRW::processHatch"); + int code; + DRW_Hatch hatch; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addHatch(&hatch); + return true; //found new entity or ENDSEC, terminate + } + default: + hatch.parseCode(code, reader); + break; + } + } + return true; +} + + +bool dxfRW::processSpline() { + DRW_DBG("dxfRW::processSpline"); + int code; + DRW_Spline sp; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addSpline(&sp); + return true; //found new entity or ENDSEC, terminate + } + default: + sp.parseCode(code, reader); + break; + } + } + return true; +} + + +bool dxfRW::processImage() { + DRW_DBG("dxfRW::processImage"); + int code; + DRW_Image img; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addImage(&img); + return true; //found new entity or ENDSEC, terminate + } + default: + img.parseCode(code, reader); + break; + } + } + return true; +} + + +bool dxfRW::processDimension() { + DRW_DBG("dxfRW::processDimension"); + int code; + DRW_Dimension dim; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + int type = dim.type & 0x0F; + switch (type) { + case 0: { + DRW_DimLinear d(dim); + iface->addDimLinear(&d); + break; } + case 1: { + DRW_DimAligned d(dim); + iface->addDimAlign(&d); + break; } + case 2: { + DRW_DimAngular d(dim); + iface->addDimAngular(&d); + break;} + case 3: { + DRW_DimDiametric d(dim); + iface->addDimDiametric(&d); + break; } + case 4: { + DRW_DimRadial d(dim); + iface->addDimRadial(&d); + break; } + case 5: { + DRW_DimAngular3p d(dim); + iface->addDimAngular3P(&d); + break; } + case 6: { + DRW_DimOrdinate d(dim); + iface->addDimOrdinate(&d); + break; } + } + return true; //found new entity or ENDSEC, terminate + } + default: + dim.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processLeader() { + DRW_DBG("dxfRW::processLeader"); + int code; + DRW_Leader leader; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addLeader(&leader); + return true; //found new entity or ENDSEC, terminate + } + default: + leader.parseCode(code, reader); + break; + } + } + return true; +} + + +/********* Objects Section *********/ + +bool dxfRW::processObjects() { + DRW_DBG("dxfRW::processObjects\n"); + int code; + if (!reader->readRec(&code)){ + return false; + } + bool next = true; + if (code == 0) { + nextentity = reader->getString(); + } else { + return false; //first record in objects is 0 + } + do { + if (nextentity == "ENDSEC") { + return true; //found ENDSEC terminate + } else if (nextentity == "IMAGEDEF") { + processImageDef(); + } else { + if (reader->readRec(&code)){ + if (code == 0) + nextentity = reader->getString(); + } else + return false; //end of file without ENDSEC + } + + } while (next); + return true; +} + +bool dxfRW::processImageDef() { + DRW_DBG("dxfRW::processImageDef"); + int code; + DRW_ImageDef img; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->linkImage(&img); + return true; //found new entity or ENDSEC, terminate + } + default: + img.parseCode(code, reader); + break; + } + } + return true; +} + +/** utility function + * convert a int to string in hex + **/ +std::string dxfRW::toHexStr(int n){ +#if defined(__APPLE__) + char buffer[9]= {'\0'}; + snprintf(buffer,9, "%X", n); + return std::string(buffer); +#else + std::ostringstream Convert; + Convert << std::uppercase << std::hex << n; + return Convert.str(); +#endif +} diff --git a/extlib/libdxfrw/libdxfrw.h b/extlib/libdxfrw/libdxfrw.h new file mode 100644 index 0000000..18c2649 --- /dev/null +++ b/extlib/libdxfrw/libdxfrw.h @@ -0,0 +1,148 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef LIBDXFRW_H +#define LIBDXFRW_H + +#include +#include "drw_entities.h" +#include "drw_objects.h" +#include "drw_header.h" +#include "drw_interface.h" + + +class dxfReader; +class dxfWriter; + +class dxfRW { +public: + dxfRW(const char* name); + ~dxfRW(); + void setDebug(DRW::DBG_LEVEL lvl); + /// reads the file specified in constructor + /*! + * An interface must be provided. It is used by the class to signal various + * components being added. + * @param interface_ the interface to use + * @param ext should the extrusion be applied to convert in 2D? + * @return true for success + */ + bool read(DRW_Interface *interface_, bool ext); + void setBinary(bool b) {binFile = b;} + + bool write(DRW_Interface *interface_, DRW::Version ver, bool bin); + bool writeLineType(DRW_LType *ent); + bool writeLayer(DRW_Layer *ent); + bool writeDimstyle(DRW_Dimstyle *ent); + bool writeTextstyle(DRW_Textstyle *ent); + bool writeVport(DRW_Vport *ent); + bool writeAppId(DRW_AppId *ent); + bool writePoint(DRW_Point *ent); + bool writeLine(DRW_Line *ent); + bool writeRay(DRW_Ray *ent); + bool writeXline(DRW_Xline *ent); + bool writeCircle(DRW_Circle *ent); + bool writeArc(DRW_Arc *ent); + bool writeEllipse(DRW_Ellipse *ent); + bool writeTrace(DRW_Trace *ent); + bool writeSolid(DRW_Solid *ent); + bool write3dface(DRW_3Dface *ent); + bool writeLWPolyline(DRW_LWPolyline *ent); + bool writePolyline(DRW_Polyline *ent); + bool writeSpline(DRW_Spline *ent); + bool writeBlockRecord(std::string name); + bool writeBlock(DRW_Block *ent); + bool writeInsert(DRW_Insert *ent); + bool writeMText(DRW_MText *ent); + bool writeText(DRW_Text *ent); + bool writeHatch(DRW_Hatch *ent); + bool writeViewport(DRW_Viewport *ent); + DRW_ImageDef *writeImage(DRW_Image *ent, std::string name); + bool writeLeader(DRW_Leader *ent); + bool writeDimension(DRW_Dimension *ent); + void setEllipseParts(int parts){elParts = parts;} /*!< set parts munber when convert ellipse to polyline */ + +private: + /// used by read() to parse the content of the file + bool processDxf(); + bool processHeader(); + bool processTables(); + bool processBlocks(); + bool processBlock(); + bool processEntities(bool isblock); + bool processObjects(); + + bool processLType(); + bool processLayer(); + bool processDimStyle(); + bool processTextStyle(); + bool processVports(); + bool processAppId(); + + bool processPoint(); + bool processLine(); + bool processRay(); + bool processXline(); + bool processCircle(); + bool processArc(); + bool processEllipse(); + bool processTrace(); + bool processSolid(); + bool processInsert(); + bool processLWPolyline(); + bool processPolyline(); + bool processVertex(DRW_Polyline* pl); + bool processText(); + bool processMText(); + bool processHatch(); + bool processSpline(); + bool process3dface(); + bool processViewport(); + bool processImage(); + bool processImageDef(); + bool processDimension(); + bool processLeader(); + +// bool writeHeader(); + bool writeEntity(DRW_Entity *ent); + bool writeTables(); + bool writeBlocks(); + bool writeObjects(); + bool writeExtData(const std::vector &ed); + /*use version from dwgutil.h*/ + std::string toHexStr(int n);//RLZ removeme + +private: + DRW::Version version; + std::string fileName; + std::string codePage; + bool binFile; + dxfReader *reader; + dxfWriter *writer; + DRW_Interface *iface; + DRW_Header header; +// int section; + std::string nextentity; + int entCount; + bool wlayer0; + bool dimstyleStd; + bool applyExt; + bool writingBlock; + int elParts; /*!< parts munber when convert ellipse to polyline */ + std::map blockMap; + std::vector imageDef; /*!< imageDef list */ + + int currHandle; + +}; + +#endif // LIBDXFRW_H diff --git a/extlib/si/si.h b/extlib/si/si.h new file mode 100644 index 0000000..04aaf9b --- /dev/null +++ b/extlib/si/si.h @@ -0,0 +1,373 @@ +/*---------------------------------------------------------------------- + * si.h -- SpaceWare input library header + * + * $Id: si.h,v 1.22 1998/03/12 11:07:03 mfarr Exp $ + * + * SpaceWare input library + * + *---------------------------------------------------------------------- + * + * (C) 1998-2001 3Dconnexion. All rights reserved. + * Permission to use, copy, modify, and distribute this software for all + * purposes and without fees is hereby grated provided that this copyright + * notice appears in all copies. Permission to modify this software is granted + * and 3Dconnexion will support such modifications only is said modifications are + * approved by 3Dconnexion. + * + */ + + +#ifndef _SI_H_ +#define _SI_H_ + +static char incFileNameCvsId[]="(C) 1996 Spacetec IMC Corporation: $Id: si.h,v 1.22 1998/03/12 11:07:03 mfarr Exp $"; + +#include + +#include "spwmacro.h" +#include "spwdata.h" +#include "siSync.h" + +#include +#include "spwerror.h" + +/* + * UI modes + */ +#define SI_UI_ALL_CONTROLS 0xffffffffL +#define SI_UI_NO_CONTROLS 0x00000000L + +/* + * These UI modes are left here for legacy applications. + */ +#define SI_UI_FILTERS 0x00000001L +#define SI_UI_FUNC_BUTTONS 0x00000002L +#define SI_UI_RESET_BUTTONS 0x00000004L +#define SI_UI_SENSITIVITY 0x00000008L +#define SI_UI_TUNING 0x00000010L +#define SI_UI_DIALOG_POPUP 0x00000020L + +/* + * Device types and classes + */ +typedef enum + { + SI_ALL_TYPES = -1, + SI_UNKNOWN_DEVICE = 0, + SI_SPACEBALL_2003 = 1, + SI_SPACEBALL_3003 = 2, + SI_SPACE_CONTROLLER = 3, + SI_AVENGER = 4, + SI_SPACEORB_360 = 5, + SI_NAVIGATOR = 6, + SI_SPACEBALL_2003A = 7, + SI_SPACEBALL_2003B = 8, + SI_SPACEBALL_2003C = 9, + SI_SPACEBALL_3003A = 10, + SI_SPACEBALL_3003B = 11, + SI_SPACEBALL_3003C = 12, + SI_SPACEBALL_4000 = 13, + SI_SPACEMOUSE_CLASSIC = 14, + SI_SPACEMOUSE_PLUS = 15, + SI_SPACEMOUSE_XT = 16, + SI_CYBERMAN = 17, + SI_CADMAN = 18, + SI_SPACEMOUSE_CLASSIC_PROMO = 19, + SI_SERIAL_CADMAN = 20, + SI_SPACEBALL_5000 = 21, + SI_TEST_NO_DEVICE = 22, + SI_3DX_KEYBOARD_BLACK = 23, + SI_3DX_KEYBOARD_WHITE = 24, + SI_TRAVELER = 25, + SI_TRAVELER1 = 26, + SI_SPACEBALL_5000A = 27, + SI_SPACEDRAGON = 28, + SI_SPACEPILOT = 29, + SI_NUM_DEV_TYPES /* Leave this last, add before it */ + } SiDevType; + +/* + * These defintions of device classes are left in for legacy applications. + */ +#define SI_HIGH_END 63 +#define SI_MED_END 62 +#define SI_LOW_END 61 + +/* + * Data retrieval mode, only SI_EVENT is currently supported. + */ +#define SI_EVENT 0x0001 +#define SI_POLL 0x0002 + +/* + * Get event flags + */ +#define SI_AVERAGE_EVENTS 0x0001 + +/* + * This is an INTERNAL flag used by the polling mechanism, user applications + * should NOT send this flag. + */ +#define SI_POLLED_REQUEST 0x0100 + +/* + * SpaceWare event types + */ +typedef enum + { + SI_BUTTON_EVENT = 1, + SI_MOTION_EVENT, + SI_COMBO_EVENT, /* Not implemented */ + SI_ZERO_EVENT, + SI_EXCEPTION_EVENT, + SI_OUT_OF_BAND, + SI_ORIENTATION_EVENT, + SI_KEYBOARD_EVENT, + SI_LPFK_EVENT, + SI_APP_EVENT, /* Application functions */ + SI_SYNC_EVENT, /* GUI synchronization events */ + SI_BUTTON_PRESS_EVENT, /* Single button events (replace SI_BUTTON_EVENT) */ + SI_BUTTON_RELEASE_EVENT /* Single button events (replace SI_BUTTON_EVENT) */ + } SiEventType; + +/* + * Data modes + */ +#define SI_MODE_NORMALIZE 0x0001 +#define SI_MODE_COMPRESS 0x0002 +#define SI_MODE_SENSITIVITY 0x0004 +#define SI_MODE_TUNING 0x0008 + +/* + * Motion data offsets + */ +#define SI_TX 0 /* Translation X value */ +#define SI_TY 1 /* Translation Y value */ +#define SI_TZ 2 /* Translation Z value */ +#define SI_RX 3 /* Rotation X value */ +#define SI_RY 4 /* Rotation Y value */ +#define SI_RZ 5 /* Rotation Z value */ + +/* + * Reserved buttons + */ + +#define SI_RESET_DEVICE_BIT 0x00000001L +#define SI_APP_FIT_BIT 0x80000000L +#define SI_APP_DIALOG_BIT 0x40000000L + +#define SI_RESET_DEVICE_BUTTON 0 +#define SI_APP_FIT_BUTTON 31 +#define SI_APP_DIALOG_BUTTON 30 + +/* + * Miscellaneous + */ +#define SI_END_ARGS 0 +#define SI_NO_HANDLE ((SiHdl) NULL) +#define SI_ALL_HANDLES ((SiHdl) NULL) +#define SI_ANY_HANDLE ((SiHdl) NULL) +#define SI_NO_TRANSCTL ((SiTransCtl) NULL) +#define SI_NO_MASK ((SiTypeMask *) NULL) +#define SI_ANY_DEVICE -1 +#define SI_NO_DEVICE -1 +#define SI_NO_TYPE -1 +#define SI_NO_LIST -1 +#define SI_NO_BUTTON -1 +#define SI_STRSIZE 128 +#define SI_MAXBUF 128 +#define SI_KEY_MAXBUF 5120 + +typedef int SiDevID; /* Device ID */ +typedef void *SiHdl; /* SpaceWare handle */ +typedef void *SiTransCtl; /* SpaceWare transport control handle */ + +typedef struct /* Open data */ + { + + HWND hWnd; /* Window handle for SpaceWare messages. */ + SiTransCtl transCtl; /* SpaceWare transport control handle. Reserved */ + /* for the s80 transport mechanism. */ + DWORD processID; /* The process ID for this application. */ + char exeFile[MAX_PATH]; /* The executable name of the process. */ + SPWint32 libFlag; /* Library version flag. */ + } SiOpenData; + +typedef struct /* Get event Data */ + { + + UINT msg; + WPARAM wParam; + LPARAM lParam; + } SiGetEventData; + +typedef struct /* Device type mask */ + { + unsigned char mask[8]; + } SiTypeMask; + +typedef struct /* Device port information */ + { + SiDevID devID; /* Device ID */ + int devType; /* Device type */ + int devClass; /* Device class */ + char devName[SI_STRSIZE]; /* Device name */ + char portName[SI_STRSIZE]; /* Port name */ + } SiDevPort; + +typedef struct /* Device information */ + { + char firmware[SI_STRSIZE]; /* Firmware version */ + int devType; /* Device type */ + int numButtons; /* Number of buttons */ + int numDegrees; /* Number of degrees of freedom */ + SPWbool canBeep; /* Device beeps */ + int majorVersion; /* Major version number */ + int minorVersion; /* Minor version number */ + } SiDevInfo; + +typedef struct /* Button information */ + { + char name[SI_STRSIZE]; /* Contains the name of a button for display in an app's GUI */ + } SiButtonName; + +typedef struct /* Button information */ + { + char name[SI_STRSIZE]; /* Contains the name of a device for display in an app's GUI */ + } SiDeviceName; + +typedef struct /* Version information */ + { + int major; /* Major version number */ + int minor; /* Minor version number */ + int build; /* Build number */ + char version[SI_STRSIZE]; /* Version string */ + char date[SI_STRSIZE]; /* Date string */ + } SiVerInfo; + +typedef struct /* Sensitivity parameters */ + { + char dummy; + } SiSensitivity; + +typedef struct /* Tuning parameters */ + { + char dummy; + } SiTuning; + +typedef struct + { + SPWuint8 code; /* Out of band message code */ + union { + SPWuint8 message[SI_MAXBUF-1]; /* The actual message */ + void *pvoid[SI_MAXBUF/8]; /* void ptrs. Enough room for 64bit ptrs */ + }; + } SiSpwOOB; + +typedef struct + { + SPWuint8 string[SI_KEY_MAXBUF]; /* String for keyboard data */ + } SiKeyboardData; + +typedef struct + { + SPWuint32 lpfk; /* LPFK number to send */ + } SiLpfkData; + +typedef enum + { + SI_LEFT = 0, + SI_RIGHT + } SiOrientation; + +typedef struct /* Bitmasks of button states */ + { + SPWuint32 last; /* Buttons pressed as of last event */ + SPWuint32 current; /* Buttons pressed as of this event */ + SPWuint32 pressed; /* Buttons pressed this event */ + SPWuint32 released; /* Buttons released this event */ + } SiButtonData; + +/* + * SI_BUTTON_PRESS_EVENT & SI_BUTTON_RELEASE_EVENT are hardware button + * events. Meaning that they are meant to be sent when a specific hardware + * button is pressed. The correlation between the actual hardware button + * and the resulting button number could be broken by careful editing of + * a config file, but it is intended that the correlation be intact. + * This is basically the same as SI_BUTTON_EVENT, but allows + * more than 29 buttons because it isn't limited to a 32-bit mask. + * Different entries in the config file determine whether SI_BUTTON_PRESS/RELEASE_EVENTs + * or SI_BUTTON_EVENTs will be generated. + * This event was introduced in 3DxWare 5.2. + */ +typedef struct /* Data for SI_BUTTON_PRESS/RELEASE_EVENT */ + { + SPWuint32 buttonNumber; /* The button number that went down/up in a * + * SI_BUTTON_PRESS/RELEASE_EVENT event */ + } SiHWButtonData; + +typedef struct /* Data for SI_APP_EVENT */ + { + SPWuint32 functionNumber; /* The Application-specific function number + * invoked by the user in a SI_APP_EVENT */ + } SiAppEventData; + +typedef struct /* SpaceWare data */ + { + SiButtonData bData; /* Button data */ + long mData[6]; /* Motion data (index via SI_TX, etc) */ + long period; /* Period (milliseconds) */ + } SiSpwData; + +typedef struct /* SpaceWare event */ + { + int type; /* Event type */ + union + { + SiSpwData spwData; /* Button, motion, or combo data */ + SiSpwOOB spwOOB; /* Out of band message */ + SiOrientation spwOrientation;/* Which hand orientation is the device */ + char exData[SI_MAXBUF]; /* Exception data */ + SiKeyboardData spwKeyData; /* String for keyboard data */ + SiLpfkData spwLpfkData; /* LPFK data */ + SiSyncPacket siSyncPacket; /* GUI SyncPacket sent to applications */ + SiHWButtonData hwButtonEvent;/* ButtonNumber that goes with * + * SI_BUTTON_PRESS/RELEASE_EVENT */ + SiAppEventData appEventData; /* Application event function data that * + * goes with an SI_APP_EVENT event */ + } u; + } SiSpwEvent; + +typedef struct /* Event handler (for SiDispatch) */ + { + int (*func) (SiOpenData *, SiGetEventData *, SiSpwEvent *, void *); + void *data; + } SiEventHandler; + +typedef struct /* SpaceWare event handlers */ + { + SiEventHandler button; /* Button event handler */ + SiEventHandler motion; /* Motion event handler */ + SiEventHandler combo; /* Combo event handler */ + SiEventHandler zero; /* Zero event handler */ + SiEventHandler exception; /* Exception event handler */ + } SiSpwHandlers; + +#ifdef __cplusplus +extern "C" { +#endif + + +enum SpwRetVal SiAndTypeMask (SiTypeMask *pTMaskA, SiTypeMask *pTMaskB); +int SiGetPortList (SiDevPort **ppPort); +void SiFreePortList (SiDevPort *pPort); +void SiTune2003 (SiSpwEvent *pEvent); +void SiTuneSC (SiSpwEvent *pEvent); + + + +#ifdef __cplusplus +} +#endif + +#endif /* _SI_H_ */ diff --git a/extlib/si/siSync.h b/extlib/si/siSync.h new file mode 100644 index 0000000..174f6a3 --- /dev/null +++ b/extlib/si/siSync.h @@ -0,0 +1,206 @@ +/*---------------------------------------------------------------------- + * siSync.h -- 3DxWare GUI Synchronization header + * + * Written: September 2004 + * Author: Jim Wick + * + *---------------------------------------------------------------------- + * + * (c) 1998-2005 3Dconnexion. All rights reserved. + * Permission to use, copy, modify, and distribute this software for all + * purposes and without fees is hereby grated provided that this copyright + * notice appears in all copies. Permission to modify this software is granted + * and 3Dconnexion will support such modifications only is said modifications are + * approved by 3Dconnexion. + * + */ + + +#ifndef _SISYNC_H_ +#define _SISYNC_H_ + +#ifdef __cplusplus +extern "C" { +#endif + + +/* + * Constants + */ +#define SI_SYNC_PACKET_ID 27711 +#define SI_SYNC_VERSION_MAJOR 1 +#define SI_SYNC_VERSION_MINOR 0 + + +/* + * Absolute Internal Function Numbers + * These are function numbers that will never change. + * For use with Set BUTTON_ASSIGNMENT_ABSOLUTE packets, and some INVOKE items. + * Some functions (keys) can not be INVOKED because there is a separate + * press and release and that difference is not exposed. + */ +typedef enum +{ + SI_SYNC_FUNCTION_MENU_TOGGLE = 12, + SI_SYNC_FUNCTION_TRANS_TOGGLE = 13, + SI_SYNC_FUNCTION_ROT_TOGGLE = 14, + SI_SYNC_FUNCTION_HPV_TOGGLE = 15, + SI_SYNC_FUNCTION_DEC_SENS = 16, + SI_SYNC_FUNCTION_INC_SENS = 17, + SI_SYNC_FUNCTION_RESTORE_DEF = 18, + SI_SYNC_FUNCTION_PAN = 19, + SI_SYNC_FUNCTION_ZOOM = 20, + SI_SYNC_FUNCTION_TX = 21, + SI_SYNC_FUNCTION_TY = 22, + SI_SYNC_FUNCTION_TZ = 23, + SI_SYNC_FUNCTION_RX = 24, + SI_SYNC_FUNCTION_RY = 25, + SI_SYNC_FUNCTION_RZ = 26, + SI_SYNC_FUNCTION_REZERO_DEVICE = 27, + SI_SYNC_FUNCTION_SAVE = 33, + SI_SYNC_FUNCTION_RELOAD = 57, + SI_SYNC_FUNCTION_SHIFT_KEY = 60, + SI_SYNC_FUNCTION_CTRL_KEY = 61, + SI_SYNC_FUNCTION_ALT_KEY = 62, + SI_SYNC_FUNCTION_RESTORE_SENS = 63, + SI_SYNC_FUNCTION_SPACE_KEY = 64, + SI_SYNC_FUNCTION_CTRL_SHIFT_KEY = 65, + SI_SYNC_FUNCTION_CTRL_ALT_KEY = 66, + SI_SYNC_FUNCTION_SHIFT_ALT_KEY = 67, + SI_SYNC_FUNCTION_TAB_KEY = 68, + SI_SYNC_FUNCTION_RETURN_KEY = 69, + SI_SYNC_FUNCTION_DEC_TRANS_SENS = 70, + SI_SYNC_FUNCTION_INC_TRANS_SENS = 71, + SI_SYNC_FUNCTION_DEC_ROT_SENS = 72, + SI_SYNC_FUNCTION_INC_ROT_SENS = 73, + SI_SYNC_FUNCTION_DEC_PAN_SENS = 74, + SI_SYNC_FUNCTION_INC_PAN_SENS = 75, + SI_SYNC_FUNCTION_DEC_ZOOM_SENS = 76, + SI_SYNC_FUNCTION_INC_ZOOM_SENS = 77, + SI_SYNC_FUNCTION_ESC_KEY = 78, + SI_SYNC_FUNCTION_3DX_HELP = 94, + SI_SYNC_FUNCTION_APP_HELP = 95, + SI_SYNC_FUNCTION_DIALOG_TOGGLE_FN= 96, + SI_SYNC_FUNCTION_FIT_FN = 97 +} SiSyncAbsFunctionNumber; + + +/* + * Sync Op Codes + */ +typedef enum + { + SI_SYNC_OP_COMMAND = 1, + SI_SYNC_OP_GET = 2, + SI_SYNC_OP_SET = 3 + } SiSyncOpCode; + +/* + * Sync Item Codes + */ +typedef enum +{ + SI_SYNC_ITEM_VERSION = 1, + SI_SYNC_ITEM_QUERY = 2, + SI_SYNC_ITEM_SAVE_CONFIG = 3, + SI_SYNC_ITEM_NUMBER_OF_FUNCTIONS = 4, + SI_SYNC_ITEM_FUNCTION = 5, + SI_SYNC_ITEM_BUTTON_ASSIGNMENT = 6, + SI_SYNC_ITEM_BUTTON_ASSIGNMENT_ABSOLUTE = 7, + SI_SYNC_ITEM_BUTTON_NAME = 8, + SI_SYNC_ITEM_AXIS_LABEL = 9, + SI_SYNC_ITEM_ORIENTATION = 10, + SI_SYNC_ITEM_FILTER = 11, + SI_SYNC_ITEM_AXES_STATE = 12, + SI_SYNC_ITEM_INFO_LINE = 13, + SI_SYNC_ITEM_SCALE_OVERALL = 14, + SI_SYNC_ITEM_SCALE_TX = 15, + SI_SYNC_ITEM_SCALE_TY = 16, + SI_SYNC_ITEM_SCALE_TZ = 17, + SI_SYNC_ITEM_SCALE_RX = 18, + SI_SYNC_ITEM_SCALE_RY = 19, + SI_SYNC_ITEM_SCALE_RZ = 20, + SI_SYNC_ITEM_INVOKE_ABSOLUTE_FUNCTION = 21, + SI_SYNC_ITEM_BUTTON_STATE = 22 +} SiSyncItemCode; + +/* + * Filters + */ + typedef enum + { + SI_SYNC_FILTER_TRANSLATIONS = 1, + SI_SYNC_FILTER_ROTATIONS = 2, + SI_SYNC_FILTER_DOMINANT = 3 + } SiSyncFilter; + + typedef enum + { + SI_SYNC_FILTER_OFF = 0, + SI_SYNC_FILTER_ON = 1, + SI_SYNC_FILTER_IN_BETWEEN = 2 + } SiSyncFilterValue; + +/* + * Axes State + */ +typedef enum +{ + SI_SYNC_AXES_STATE_TX = (1<<0), + SI_SYNC_AXES_STATE_TY = (1<<1), + SI_SYNC_AXES_STATE_TZ = (1<<2), + SI_SYNC_AXES_STATE_RX = (1<<3), + SI_SYNC_AXES_STATE_RY = (1<<4), + SI_SYNC_AXES_STATE_RZ = (1<<5) +} SiSyncAxesStateBits; + +typedef struct +{ + int state; /* VURZYX (Tx = LSB (& 1<<0) */ +} SiSyncAxesState; + +/* + * Button State + * For indicating the state of whatever the button sets (in the LCD at this point). + * E.g., to show that Translations are currently OFF for the Translations Toggle button. + * OFF: reverse video, flag is not set + * ON: normal video, flag is set + * DISABLED: (greyed), status of flag is invalid at this time + */ +typedef enum +{ + SI_SYNC_BUTTON_STATE_OFF = 0, + SI_SYNC_BUTTON_STATE_ON = 1, + SI_SYNC_BUTTON_STATE_DISABLED = 2, +} SiSyncButtonState; + + +/* + * Private / implementation structures + * + * We suggest you leave these hidden and use the accessor functions rather than + * directly accessing the structures. + */ +#include "siSyncPriv.h" + + +/* + * Accessor Function headers + */ +SPWuint32 SiSyncGetSize(SiSyncPacket p); +void SiSyncSetSize(SiSyncPacket *p, SPWuint32 size); + +SPWuint32 SiSyncGetHashCode(SiSyncPacket p); +void SiSyncSetHashCode(SiSyncPacket *p, SPWuint32 hashCode); + +SiSyncOpCode SiSyncGetOpCode(SiSyncPacket p); +void SiSyncSetOpCode(SiSyncPacket *p, SPWuint32 opCode); + +SiSyncItemCode SiSyncGetItemCode(SiSyncPacket p); +void SiSyncSetItemCode(SiSyncPacket *p, SPWuint32 itemCode); + +#ifdef __cplusplus +} +#endif + +#endif /* _SI_SYNC_H_ */ diff --git a/extlib/si/siSyncPriv.h b/extlib/si/siSyncPriv.h new file mode 100644 index 0000000..131cf3e --- /dev/null +++ b/extlib/si/siSyncPriv.h @@ -0,0 +1,127 @@ +/*---------------------------------------------------------------------- + * siSyncPriv.h -- 3DxWare GUI Synchronization Private header + * + * Written: June 2005 + * Author: Jim Wick + * + *---------------------------------------------------------------------- + * + * (c) 1998-2005 3Dconnexion. All rights reserved. + * Permission to use, copy, modify, and distribute this software for all + * purposes and without fees is hereby grated provided that this copyright + * notice appears in all copies. Permission to modify this software is granted + * and 3Dconnexion will support such modifications only is said modifications are + * approved by 3Dconnexion. + * + */ + + +#ifndef _SISYNCPRIV_H_ +#define _SISYNCPRIV_H_ + + +/* + * All packets start with the same fields. + * Many packets have data following the itemCode. + */ +typedef struct /* Sync Packet */ + { + SPWuint32 size; /* total packet size */ + SPWuint32 hashCode; /* Hash code that syncs a question with an answer */ + SiSyncOpCode opCode; /* OpCode */ + SiSyncItemCode itemCode; /* itemCode */ + /* There will, generally, be more data starting here. + * There will not be any pointers, the data will be in here. + */ + } SiSyncPacketHeader; + +/* + * I've enumerated all the possible packets here, not because they are all different, + * but mostly just for documentation. So the developer knows what parameters are + * expected with which packet type. + */ +typedef struct { SiSyncPacketHeader h; } SiSyncGetVersionPacket; +typedef struct { SiSyncPacketHeader h; SPWint32 major; SPWint32 minor; } SiSyncSetVersionPacket; +typedef struct { SiSyncPacketHeader h; } SiSyncCommandQueryPacket; +typedef struct { SiSyncPacketHeader h; } SiSyncCommandSaveConfigPacket; +typedef struct { SiSyncPacketHeader h; } SiSyncGetNumberOfFunctionsPacket; +typedef struct { SiSyncPacketHeader h; SPWint32 n; } SiSyncSetNumberOfFunctionsPacket; +typedef struct { SiSyncPacketHeader h; SPWint32 i; } SiSyncGetFunctionPacket; +typedef struct { SiSyncPacketHeader h; SPWint32 i; SPWint32 n; WCHAR name[1];} SiSyncSetFunctionPacket; +typedef struct { SiSyncPacketHeader h; SPWint32 i; } SiSyncGetButtonAssignmentPacket; +typedef struct { SiSyncPacketHeader h; SPWint32 i; SPWint32 n; } SiSyncSetButtonAssignmentPacket; +typedef struct { SiSyncPacketHeader h; SPWint32 i; SPWint32 n; } SiSyncSetButtonAssignmentAbsolutePacket; +typedef struct { SiSyncPacketHeader h; SPWint32 i; WCHAR name[1]; } SiSyncSetButtonNamePacket; +typedef struct { SiSyncPacketHeader h; SPWint32 i; } SiSyncGetAxisLabelPacket; +typedef struct { SiSyncPacketHeader h; SPWint32 i; WCHAR name[1]; } SiSyncSetAxisLabelPacket; +typedef struct { SiSyncPacketHeader h; } SiSyncGetOrientationPacket; +typedef struct { SiSyncPacketHeader h; SPWint32 a[6]; } SiSyncSetOrientationPacket; +typedef struct { SiSyncPacketHeader h; SiSyncFilter i; } SiSyncGetFilterPacket; +typedef struct { SiSyncPacketHeader h; SiSyncFilter i; SiSyncFilterValue v; } SiSyncSetFilterPacket; +typedef struct { SiSyncPacketHeader h; } SiSyncGetAxesStatePacket; +typedef struct { SiSyncPacketHeader h; SiSyncAxesState a; } SiSyncSetAxesStatePacket; +typedef struct { SiSyncPacketHeader h; SPWint32 duration; WCHAR s[1]; } SiSyncSetInfoLinePacket; +typedef struct { SiSyncPacketHeader h; } SiSyncGetScaleOverallPacket; +typedef struct { SiSyncPacketHeader h; SPWfloat32 v; } SiSyncSetScaleOverallPacket; +typedef struct { SiSyncPacketHeader h; } SiSyncGetScaleTxPacket; +typedef struct { SiSyncPacketHeader h; SPWfloat32 v; } SiSyncSetScaleTxPacket; +typedef struct { SiSyncPacketHeader h; } SiSyncGetScaleTyPacket; +typedef struct { SiSyncPacketHeader h; SPWfloat32 v; } SiSyncSetScaleTyPacket; +typedef struct { SiSyncPacketHeader h; } SiSyncGetScaleTzPacket; +typedef struct { SiSyncPacketHeader h; SPWfloat32 v; } SiSyncSetScaleTzPacket; +typedef struct { SiSyncPacketHeader h; } SiSyncGetScaleRxPacket; +typedef struct { SiSyncPacketHeader h; SPWfloat32 v; } SiSyncSetScaleRxPacket; +typedef struct { SiSyncPacketHeader h; } SiSyncGetScaleRyPacket; +typedef struct { SiSyncPacketHeader h; SPWfloat32 v; } SiSyncSetScaleRyPacket; +typedef struct { SiSyncPacketHeader h; } SiSyncGetScaleRzPacket; +typedef struct { SiSyncPacketHeader h; SPWfloat32 v; } SiSyncSetScaleRzPacket; +typedef struct { SiSyncPacketHeader h; SiSyncAbsFunctionNumber i; } SiSyncAbsFunctionPacket; +typedef struct { SiSyncPacketHeader h; SPWint32 i; SPWbool state; } SiSyncSetButtonStatePacket; + +typedef struct +{ + union + { + SiSyncPacketHeader h; + SiSyncGetVersionPacket gv; + SiSyncSetVersionPacket sv; + SiSyncCommandQueryPacket cq; + SiSyncCommandSaveConfigPacket cs; + SiSyncGetNumberOfFunctionsPacket gnf; + SiSyncSetNumberOfFunctionsPacket snf; + SiSyncGetFunctionPacket gf; + SiSyncSetFunctionPacket sf; + SiSyncGetButtonAssignmentPacket gba; + SiSyncSetButtonAssignmentPacket sba; + SiSyncSetButtonAssignmentAbsolutePacket sbaa; + SiSyncSetButtonNamePacket sbn; + SiSyncGetAxisLabelPacket ga; + SiSyncSetAxisLabelPacket sa; + SiSyncGetOrientationPacket go; + SiSyncSetOrientationPacket so; + SiSyncGetFilterPacket gfi; + SiSyncSetFilterPacket sfi; + SiSyncGetAxesStatePacket gas; + SiSyncSetAxesStatePacket sas; + SiSyncSetInfoLinePacket si; + SiSyncGetScaleOverallPacket gso; + SiSyncSetScaleOverallPacket sso; + SiSyncGetScaleTxPacket gtx; + SiSyncSetScaleTxPacket stx; + SiSyncGetScaleTyPacket gty; + SiSyncSetScaleTyPacket sty; + SiSyncGetScaleTzPacket gtz; + SiSyncSetScaleTzPacket stz; + SiSyncGetScaleRxPacket grx; + SiSyncSetScaleRxPacket srx; + SiSyncGetScaleRyPacket gry; + SiSyncSetScaleRyPacket sry; + SiSyncGetScaleRzPacket grz; + SiSyncSetScaleRzPacket srz; + SiSyncAbsFunctionPacket absf; + SiSyncSetButtonStatePacket sbs; + }; +} SiSyncPacket; + + +#endif /* _SI_SYNCPRIV_H_ */ diff --git a/extlib/si/siapp.h b/extlib/si/siapp.h new file mode 100644 index 0000000..eb8f222 --- /dev/null +++ b/extlib/si/siapp.h @@ -0,0 +1,121 @@ +/*----------------------------------------------------------------------------- + * + * siapp.h -- Si static library interface header file + * + * $Id: siapp.h,v 1.3 2001/01/16 01:18:49 HJin Exp $ + * + * Contains function headers and type definitions for siapp.c. + * + *----------------------------------------------------------------------------- + * + * (c) 1998-2005 3Dconnexion. All rights reserved. + * Permission to use, copy, modify, and distribute this software for all + * purposes and without fees is hereby grated provided that this copyright + * notice appears in all copies. Permission to modify this software is granted + * and 3Dconnexion will support such modifications only if said modifications are + * approved by 3Dconnexion. + * + */ + +#ifndef SIAPP_H +#define SIAPP_H + + +static char SiAppCvsId[]="(c) 1998-2005 3Dconnexion: $Id: siapp.h,v 1.3 2001/01/16 01:18:49 HJin Exp $"; + +#ifdef __cplusplus +extern "C" { +#endif + + +/* some enumerated types used in siapp.c */ + +enum InitResult + { + NOT_LOADED, + FAILED, + LOADED + }; + +enum ErrorCode + { + NO_DLL_ERROR=0, + DLL_LOAD_FAILURE, + DLL_FUNCTION_LOAD_FAILURE, + DLL_VAR_LOAD_FAILURE + }; + + +/* externally used functions */ + +enum SpwRetVal SiInitialize(void); +void SiTerminate(void); +int SiGetNumDevices (void); +SiDevID SiDeviceIndex (int idx); +int SiDispatch (SiHdl hdl, SiGetEventData *pData, + SiSpwEvent *pEvent, SiSpwHandlers *pDHandlers); +void SiOpenWinInit (SiOpenData *pData, HWND hWnd); +SiHdl SiOpen (char *pAppName, SiDevID devID, SiTypeMask *pTMask, int mode, + SiOpenData *pData); +enum SpwRetVal SiClose (SiHdl hdl); +void SiGetEventWinInit (SiGetEventData *pData, + UINT msg, WPARAM wParam, LPARAM lParam); +enum SpwRetVal SiGetEvent (SiHdl hdl, int flags, SiGetEventData *pData, + SiSpwEvent *pEvent); +enum SpwRetVal SiBeep (SiHdl hdl, char *string); +enum SpwRetVal SiRezero (SiHdl hdl); +enum SpwRetVal SiGrabDevice (SiHdl hdl, SPWbool exclusive); +enum SpwRetVal SiReleaseDevice (SiHdl hdl); +int SiButtonPressed (SiSpwEvent *pEvent); +int SiButtonReleased (SiSpwEvent *pEvent); +enum SpwRetVal SiSetUiMode (SiHdl hdl, SPWuint32 mode); +enum SpwRetVal SiSetTypeMask (SiTypeMask *pTMask, int type1, ...); +enum SpwRetVal SiGetDevicePort (SiDevID devID, SiDevPort *pPort); +enum SpwRetVal SiGetDriverInfo (SiVerInfo *pInfo); +void SiGetLibraryInfo (SiVerInfo *pInfo); +enum SpwRetVal SiGetDeviceInfo (SiHdl hdl, SiDevInfo *pInfo); +char * SpwErrorString (enum SpwRetVal val); +enum SpwRetVal SiSyncSendQuery(SiHdl hdl); +enum SpwRetVal SiSyncGetVersion(SiHdl hdl, SPWuint32 *pmajor, SPWuint32 *pminor); +enum SpwRetVal SiSyncGetNumberOfFunctions(SiHdl hdl, SPWuint32 *pnumberOfFunctions); +enum SpwRetVal SiSyncGetFunction(SiHdl hdl, SPWuint32 index, SPWint32 *pabsoluteFunctionNumber, WCHAR name[], SPWuint32 *pmaxNameLen); +enum SpwRetVal SiSyncGetButtonAssignment(SiHdl hdl, SPWuint32 buttonNumber, SPWint32 *passignedFunctionIndex); +enum SpwRetVal SiSyncSetButtonAssignment(SiHdl hdl, SPWuint32 buttonNumber, SPWint32 functionIndex); +enum SpwRetVal SiSyncSetButtonAssignmentAbsolute(SiHdl hdl, SPWuint32 buttonNumber, SPWint32 absoluteFunctionNumber ); +enum SpwRetVal SiSyncSetButtonName(SiHdl hdl, SPWuint32 buttonNumber, WCHAR name[]); +enum SpwRetVal SiSyncGetAxisLabel (SiHdl hdl, SPWuint32 axisNumber, WCHAR name[], SPWuint32 *pmaxNameLen ); +enum SpwRetVal SiSyncSetAxisLabel (SiHdl hdl, SPWuint32 axisNumber, WCHAR name[] ); +enum SpwRetVal SiSyncGetOrientation (SiHdl hdl, SPWint32 axes[6] ); +enum SpwRetVal SiSyncSetOrientation (SiHdl hdl, SPWint32 axes[6] ); +enum SpwRetVal SiSyncGetFilter (SiHdl hdl, SiSyncFilter i, SiSyncFilterValue *pv ); +enum SpwRetVal SiSyncSetFilter (SiHdl hdl, SiSyncFilter i, SiSyncFilterValue v ); +enum SpwRetVal SiSyncGetAxesState (SiHdl hdl, SiSyncAxesState *pa ); +enum SpwRetVal SiSyncSetAxesState (SiHdl hdl, SiSyncAxesState a ); +enum SpwRetVal SiSyncSetInfoLine (SiHdl hdl, SPWint32 duration, WCHAR text[] ); +enum SpwRetVal SiSyncGetScaleOverall (SiHdl hdl, SPWfloat32 *pv ); +enum SpwRetVal SiSyncSetScaleOverall (SiHdl hdl, SPWfloat32 v ); +enum SpwRetVal SiSyncGetScaleTx (SiHdl hdl, SPWfloat32 *pv ); +enum SpwRetVal SiSyncSetScaleTx (SiHdl hdl, SPWfloat32 v ); +enum SpwRetVal SiSyncGetScaleTy (SiHdl hdl, SPWfloat32 *pv ); +enum SpwRetVal SiSyncSetScaleTy (SiHdl hdl, SPWfloat32 v ); +enum SpwRetVal SiSyncGetScaleTz (SiHdl hdl, SPWfloat32 *pv ); +enum SpwRetVal SiSyncSetScaleTz (SiHdl hdl, SPWfloat32 v ); +enum SpwRetVal SiSyncGetScaleRx (SiHdl hdl, SPWfloat32 *pv ); +enum SpwRetVal SiSyncSetScaleRx (SiHdl hdl, SPWfloat32 v ); +enum SpwRetVal SiSyncGetScaleRy (SiHdl hdl, SPWfloat32 *pv ); +enum SpwRetVal SiSyncSetScaleRy (SiHdl hdl, SPWfloat32 v ); +enum SpwRetVal SiSyncGetScaleRz (SiHdl hdl, SPWfloat32 *pv ); +enum SpwRetVal SiSyncSetScaleRz (SiHdl hdl, SPWfloat32 v ); +enum SpwRetVal SiSyncInvokeAbsoluteFunction (SiHdl hdl, SiSyncAbsFunctionNumber i ); +enum SpwRetVal SiSyncSetButtonState (SiHdl hdl, SPWuint32 buttonNumber, SiSyncButtonState state ); +enum SpwRetVal SiGetButtonName (SiHdl hdl, SPWuint32 buttonNumber, SiButtonName *pname); +enum SpwRetVal SiGetDeviceName (SiHdl hdl, SiDeviceName *pname); +enum SpwRetVal SiGetDeviceImageFileName (SiHdl hdl, char name[], SPWuint32 *pmaxNameLen); +HICON SiGetCompanyIcon(void); +enum SpwRetVal SiGetCompanyLogoFileName (char name[], SPWuint32 *pmaxNameLen); + +#ifdef __cplusplus +} +#endif + +#endif /* #ifndef SIAPP_H */ diff --git a/extlib/si/siapp.lib b/extlib/si/siapp.lib new file mode 100644 index 0000000000000000000000000000000000000000..5dbb5c6f1cb16974ebb50a5fd03941239690f91d GIT binary patch literal 63646 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 LQOP`8w1)maFXr`u literal 0 HcmV?d00001 diff --git a/extlib/si/spwdata.h b/extlib/si/spwdata.h new file mode 100644 index 0000000..f54a070 --- /dev/null +++ b/extlib/si/spwdata.h @@ -0,0 +1,63 @@ +/*---------------------------------------------------------------------- + * spwdata.h -- datatypes + * + * + * $Id: spwdata.h,v 1.4 1996/10/08 23:01:39 chris Exp $ + * + * This contains the only acceptable type definitions for 3Dconnexion + * products. Needs more work. + * + *---------------------------------------------------------------------- + * + * (c) 1996-2005 3Dconnexion. All rights reserved. + * + * The computer codes included in this file, including source code and + * object code, constitutes the proprietary and confidential information of + * 3Dconnexion, and are provided pursuant to a license + * agreement. These computer codes are protected by international, federal + * and state law, including United States Copyright Law and international + * treaty provisions. Except as expressly authorized by the license + * agreement, or as expressly permitted under applicable laws of member + * states of the European Union and then only to the extent so permitted, + * no part of these computer codes may be reproduced or transmitted in any + * form or by any means, electronic or mechanical, modified, decompiled, + * disassembled, reverse engineered, sold, transferred, rented or utilized + * for any unauthorized purpose without the express written permission of + * 3Dconnexion. + * + *---------------------------------------------------------------------- + * + */ + +#ifndef SPWDATA_H +#define SPWDATA_H + +static char spwdataCvsId[]="(C) 1996-2005 3Dconnexion: $Id: spwdata.h,v 1.4 1996/10/08 23:01:39 chris Exp $"; + +#include + +#define tchar_t _TCHAR +#define char_t char +#define uint32_t unsigned long +#define sint32_t long +#define boolean_t unsigned char +#define void_t void +#define window_handle_t HWND + + +typedef long SPWint32; +typedef short SPWint16; +typedef char SPWint8; +typedef int SPWbool; +typedef unsigned long SPWuint32; +typedef unsigned short SPWuint16; +typedef unsigned char SPWuint8; +typedef _TCHAR SPWchar; +typedef _TCHAR* SPWstring; +typedef float SPWfloat32; +typedef double SPWfloat64; + + + +#endif /* SPWDATA_H */ + diff --git a/extlib/si/spwerror.h b/extlib/si/spwerror.h new file mode 100644 index 0000000..208d2c7 --- /dev/null +++ b/extlib/si/spwerror.h @@ -0,0 +1,64 @@ +/*---------------------------------------------------------------------- + * spwerror.h -- Standard Spacetec IMC function return values + * + * $Id: spwerror.h,v 1.10.4.1 1998/05/26 17:30:21 equerze Exp $ + * + * This file contains all the Spacetec IMC standard error return + * return values for functions + * + *---------------------------------------------------------------------- + * + * (C) 1998-2001 3Dconnexion. All rights reserved. + * Permission to use, copy, modify, and distribute this software for all + * purposes and without fees is hereby grated provided that this copyright + * notice appears in all copies. Permission to modify this software is granted + * and 3Dconnexion will support such modifications only is said modifications are + * approved by 3Dconnexion. + * + */ + +#ifndef _SPWERROR_H_ +#define _SPWERROR_H_ + +#include "spwdata.h" + +static char spwerrorCvsId[]="(C) 1996 Spacetec IMC Corporation: $Id: spwerror.h,v 1.10.4.1 1998/05/26 17:30:21 equerze Exp $"; + +enum SpwRetVal /* Error return values. */ + { + SPW_NO_ERROR, /* No error. */ + SPW_ERROR, /* Error -- function failed. */ + SI_BAD_HANDLE, /* Invalid SpaceWare handle. */ + SI_BAD_ID, /* Invalid device ID. */ + SI_BAD_VALUE, /* Invalid argument value. */ + SI_IS_EVENT, /* Event is a SpaceWare event. */ + SI_SKIP_EVENT, /* Skip this SpaceWare event. */ + SI_NOT_EVENT, /* Event is not a SpaceWare event. */ + SI_NO_DRIVER, /* SpaceWare driver is not running. */ + SI_NO_RESPONSE, /* SpaceWare driver is not responding. */ + SI_UNSUPPORTED, /* The function is unsupported by this version. */ + SI_UNINITIALIZED, /* SpaceWare input library is uninitialized. */ + SI_WRONG_DRIVER, /* Driver is incorrect for this SpaceWare version.*/ + SI_INTERNAL_ERROR, /* Internal SpaceWare error. */ + SI_BAD_PROTOCOL, /* The transport protocol is unknown. */ + SI_OUT_OF_MEMORY, /* Unable to malloc space required. */ + SPW_DLL_LOAD_ERROR, /* Could not load siapp dlls */ + SI_NOT_OPEN, /* Spaceball device not open */ + SI_ITEM_NOT_FOUND, /* Item not found */ + SI_UNSUPPORTED_DEVICE, /* The device is not supported */ + SI_NOT_ENOUGH_MEMORY, /* Not enough memory (but not a malloc problem) */ + SI_SYNC_WRONG_HASHCODE /* Wrong hash code sent to a Sync function */ + }; + +typedef enum SpwRetVal SpwReturnValue; + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _SPWERROR_H_ */ diff --git a/extlib/si/spwmacro.h b/extlib/si/spwmacro.h new file mode 100644 index 0000000..10fcf16 --- /dev/null +++ b/extlib/si/spwmacro.h @@ -0,0 +1,48 @@ +/*---------------------------------------------------------------------- + * spwmacro.h -- cpp macros we ALWAYS use. + * +<<<<<<< spwmacro.h + * $Id: spwmacro.h,v 1.3 2001/01/16 01:18:40 HJin Exp $ +======= + * $Id: spwmacro.h,v 1.3 2001/01/16 01:18:40 HJin Exp $ +>>>>>>> 1.1.1.1.4.1 + * + * We always seem to use the same macros. + * This is the place we define them. + * + *---------------------------------------------------------------------- + */ + +#ifndef SPWMACRO_H +#define SPWMACRO_H + + +#define SPW_FALSE (0) +#define SPW_TRUE (!SPW_FALSE) + +#define SPW_MAX(a,b) (((a)>(b))?(a):(b)) +#define SPW_MIN(a,b) (((a)<(b))?(a):(b)) + +#define SPW_ABS(a) (((a)<0)?(-(a)):(a)) + +#define SPW_SIGN(a) ((a)>=0?1:-1) + +#define SPW_BIND(min,n,max) (SPW_MIN((max),SPW_MAX((min),(n)))) + +#define SPW_NUM_ELEMENTS_IN(a) (sizeof(a)/sizeof((a)[0])) + +#define SPW_PI 3.14159265358979324f + +#define SPW_DEG_TO_RAD(d) ((d)*SPW_PI/180.0f) +#define SPW_RAD_TO_DEG(r) ((r)*180.0f/SPW_PI) + +#define SPW_LENGTH_OF(a) (sizeof(a)/sizeof((a)[0])) + +#define SPW_END_OF(a) (&(a)[SPW_LENGTH_OF(a)-1]) + +#define SPW_SQ(a) ((a)*(a)) + +#define SPW_ABSDIFF(a, b) (fabs((double) (a) - (b))) + + +#endif diff --git a/include/slvs.h b/include/slvs.h new file mode 100644 index 0000000..1c97fbf --- /dev/null +++ b/include/slvs.h @@ -0,0 +1,404 @@ +/*----------------------------------------------------------------------------- + * Data structures and prototypes for slvs.lib, a geometric constraint solver. + * + * See the comments in this file, the accompanying sample code that uses + * this library, and the accompanying documentation (DOC.txt). + * + * Copyright 2009-2013 Jonathan Westhues. + *---------------------------------------------------------------------------*/ + +#ifndef __SLVS_H +#define __SLVS_H + +#ifdef WIN32 +# ifdef EXPORT_DLL +# define DLL __declspec( dllexport ) +# else +# define DLL __declspec( dllimport ) +# endif +#else +# define DLL +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _MSC_VER +typedef unsigned __int32 uint32_t; +#else +#include +#endif + +typedef uint32_t Slvs_hParam; +typedef uint32_t Slvs_hEntity; +typedef uint32_t Slvs_hConstraint; +typedef uint32_t Slvs_hGroup; + +/* To obtain the 3d (not projected into a workplane) of a constraint or + * an entity, specify this instead of the workplane. */ +#define SLVS_FREE_IN_3D 0 + + +typedef struct { + Slvs_hParam h; + Slvs_hGroup group; + double val; +} Slvs_Param; + + +#define SLVS_E_POINT_IN_3D 50000 +#define SLVS_E_POINT_IN_2D 50001 + +#define SLVS_E_NORMAL_IN_3D 60000 +#define SLVS_E_NORMAL_IN_2D 60001 + +#define SLVS_E_DISTANCE 70000 + +/* The special point, normal, and distance types used for parametric step + * and repeat, extrude, and assembly are currently not exposed. Please + * contact us if you are interested in using these. */ + +#define SLVS_E_WORKPLANE 80000 +#define SLVS_E_LINE_SEGMENT 80001 +#define SLVS_E_CUBIC 80002 +#define SLVS_E_CIRCLE 80003 +#define SLVS_E_ARC_OF_CIRCLE 80004 + +typedef struct { + Slvs_hEntity h; + Slvs_hGroup group; + + int type; + + Slvs_hEntity wrkpl; + Slvs_hEntity point[4]; + Slvs_hEntity normal; + Slvs_hEntity distance; + + Slvs_hParam param[4]; +} Slvs_Entity; + +#define SLVS_C_POINTS_COINCIDENT 100000 +#define SLVS_C_PT_PT_DISTANCE 100001 +#define SLVS_C_PT_PLANE_DISTANCE 100002 +#define SLVS_C_PT_LINE_DISTANCE 100003 +#define SLVS_C_PT_FACE_DISTANCE 100004 +#define SLVS_C_PT_IN_PLANE 100005 +#define SLVS_C_PT_ON_LINE 100006 +#define SLVS_C_PT_ON_FACE 100007 +#define SLVS_C_EQUAL_LENGTH_LINES 100008 +#define SLVS_C_LENGTH_RATIO 100009 +#define SLVS_C_EQ_LEN_PT_LINE_D 100010 +#define SLVS_C_EQ_PT_LN_DISTANCES 100011 +#define SLVS_C_EQUAL_ANGLE 100012 +#define SLVS_C_EQUAL_LINE_ARC_LEN 100013 +#define SLVS_C_SYMMETRIC 100014 +#define SLVS_C_SYMMETRIC_HORIZ 100015 +#define SLVS_C_SYMMETRIC_VERT 100016 +#define SLVS_C_SYMMETRIC_LINE 100017 +#define SLVS_C_AT_MIDPOINT 100018 +#define SLVS_C_HORIZONTAL 100019 +#define SLVS_C_VERTICAL 100020 +#define SLVS_C_DIAMETER 100021 +#define SLVS_C_PT_ON_CIRCLE 100022 +#define SLVS_C_SAME_ORIENTATION 100023 +#define SLVS_C_ANGLE 100024 +#define SLVS_C_PARALLEL 100025 +#define SLVS_C_PERPENDICULAR 100026 +#define SLVS_C_ARC_LINE_TANGENT 100027 +#define SLVS_C_CUBIC_LINE_TANGENT 100028 +#define SLVS_C_EQUAL_RADIUS 100029 +#define SLVS_C_PROJ_PT_DISTANCE 100030 +#define SLVS_C_WHERE_DRAGGED 100031 +#define SLVS_C_CURVE_CURVE_TANGENT 100032 +#define SLVS_C_LENGTH_DIFFERENCE 100033 + +typedef struct { + Slvs_hConstraint h; + Slvs_hGroup group; + + int type; + + Slvs_hEntity wrkpl; + + double valA; + Slvs_hEntity ptA; + Slvs_hEntity ptB; + Slvs_hEntity entityA; + Slvs_hEntity entityB; + Slvs_hEntity entityC; + Slvs_hEntity entityD; + + int other; + int other2; +} Slvs_Constraint; + + +typedef struct { + /*** INPUT VARIABLES + * + * Here, we specify the parameters and their initial values, the entities, + * and the constraints. For example, param[] points to the array of + * parameters, which has length params, so that the last valid element + * is param[params-1]. + * + * param[] is actually an in/out variable; if the solver is successful, + * then the new values (that satisfy the constraints) are written to it. */ + Slvs_Param *param; + int params; + Slvs_Entity *entity; + int entities; + Slvs_Constraint *constraint; + int constraints; + + /* If a parameter corresponds to a point (distance, normal, etc.) being + * dragged, then specify it here. This will cause the solver to favor + * that parameter, and attempt to change it as little as possible even + * if that requires it to change other parameters more. + * + * Unused members of this array should be set to zero. */ + Slvs_hParam dragged[4]; + + /* If the solver fails, then it can determine which constraints are + * causing the problem. But this is a relatively slow process (for + * a system with n constraints, about n times as long as just solving). + * If calculateFaileds is true, then the solver will do so, otherwise + * not. */ + int calculateFaileds; + + /*** OUTPUT VARIABLES + * + * If the solver fails, then it can report which constraints are causing + * the problem. The caller should allocate the array failed[], and pass + * its size in faileds. + * + * The solver will set faileds equal to the number of problematic + * constraints, and write their Slvs_hConstraints into failed[]. To + * ensure that there is sufficient space for any possible set of + * failing constraints, faileds should be greater than or equal to + * constraints. */ + Slvs_hConstraint *failed; + int faileds; + + /* The solver indicates the number of unconstrained degrees of freedom. */ + int dof; + + /* The solver indicates whether the solution succeeded. */ +#define SLVS_RESULT_OKAY 0 +#define SLVS_RESULT_INCONSISTENT 1 +#define SLVS_RESULT_DIDNT_CONVERGE 2 +#define SLVS_RESULT_TOO_MANY_UNKNOWNS 3 + int result; +} Slvs_System; + +DLL void Slvs_Solve(Slvs_System *sys, Slvs_hGroup hg); + + +/* Our base coordinate system has basis vectors + * (1, 0, 0) (0, 1, 0) (0, 0, 1) + * A unit quaternion defines a rotation to a new coordinate system with + * basis vectors + * U V N + * which these functions compute from the quaternion. */ +DLL void Slvs_QuaternionU(double qw, double qx, double qy, double qz, + double *x, double *y, double *z); +DLL void Slvs_QuaternionV(double qw, double qx, double qy, double qz, + double *x, double *y, double *z); +DLL void Slvs_QuaternionN(double qw, double qx, double qy, double qz, + double *x, double *y, double *z); + +/* Similarly, compute a unit quaternion in terms of two basis vectors. */ +DLL void Slvs_MakeQuaternion(double ux, double uy, double uz, + double vx, double vy, double vz, + double *qw, double *qx, double *qy, double *qz); + + +/*------------------------------------- + * These are just convenience functions, to save you the trouble of filling + * out the structures by hand. The code is included in the header file to + * let the compiler inline them if possible. */ + +static inline Slvs_Param Slvs_MakeParam(Slvs_hParam h, Slvs_hGroup group, double val) +{ + Slvs_Param r; + r.h = h; + r.group = group; + r.val = val; + return r; +} +static inline Slvs_Entity Slvs_MakePoint2d(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl, + Slvs_hParam u, Slvs_hParam v) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_POINT_IN_2D; + r.wrkpl = wrkpl; + r.param[0] = u; + r.param[1] = v; + return r; +} +static inline Slvs_Entity Slvs_MakePoint3d(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hParam x, Slvs_hParam y, Slvs_hParam z) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_POINT_IN_3D; + r.wrkpl = SLVS_FREE_IN_3D; + r.param[0] = x; + r.param[1] = y; + r.param[2] = z; + return r; +} +static inline Slvs_Entity Slvs_MakeNormal3d(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hParam qw, Slvs_hParam qx, + Slvs_hParam qy, Slvs_hParam qz) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_NORMAL_IN_3D; + r.wrkpl = SLVS_FREE_IN_3D; + r.param[0] = qw; + r.param[1] = qx; + r.param[2] = qy; + r.param[3] = qz; + return r; +} +static inline Slvs_Entity Slvs_MakeNormal2d(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_NORMAL_IN_2D; + r.wrkpl = wrkpl; + return r; +} +static inline Slvs_Entity Slvs_MakeDistance(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl, Slvs_hParam d) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_DISTANCE; + r.wrkpl = wrkpl; + r.param[0] = d; + return r; +} +static inline Slvs_Entity Slvs_MakeLineSegment(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl, + Slvs_hEntity ptA, Slvs_hEntity ptB) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_LINE_SEGMENT; + r.wrkpl = wrkpl; + r.point[0] = ptA; + r.point[1] = ptB; + return r; +} +static inline Slvs_Entity Slvs_MakeCubic(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl, + Slvs_hEntity pt0, Slvs_hEntity pt1, + Slvs_hEntity pt2, Slvs_hEntity pt3) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_CUBIC; + r.wrkpl = wrkpl; + r.point[0] = pt0; + r.point[1] = pt1; + r.point[2] = pt2; + r.point[3] = pt3; + return r; +} +static inline Slvs_Entity Slvs_MakeArcOfCircle(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl, + Slvs_hEntity normal, + Slvs_hEntity center, + Slvs_hEntity start, Slvs_hEntity end) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_ARC_OF_CIRCLE; + r.wrkpl = wrkpl; + r.normal = normal; + r.point[0] = center; + r.point[1] = start; + r.point[2] = end; + return r; +} +static inline Slvs_Entity Slvs_MakeCircle(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl, + Slvs_hEntity center, + Slvs_hEntity normal, Slvs_hEntity radius) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_CIRCLE; + r.wrkpl = wrkpl; + r.point[0] = center; + r.normal = normal; + r.distance = radius; + return r; +} +static inline Slvs_Entity Slvs_MakeWorkplane(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity origin, Slvs_hEntity normal) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_WORKPLANE; + r.wrkpl = SLVS_FREE_IN_3D; + r.point[0] = origin; + r.normal = normal; + return r; +} + +static inline Slvs_Constraint Slvs_MakeConstraint(Slvs_hConstraint h, + Slvs_hGroup group, + int type, + Slvs_hEntity wrkpl, + double valA, + Slvs_hEntity ptA, + Slvs_hEntity ptB, + Slvs_hEntity entityA, + Slvs_hEntity entityB) +{ + Slvs_Constraint r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = type; + r.wrkpl = wrkpl; + r.valA = valA; + r.ptA = ptA; + r.ptB = ptB; + r.entityA = entityA; + r.entityB = entityB; + return r; +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..b3e0b17 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,405 @@ +# global + +include(GNUInstallDirs) + +include_directories( + ${OPENGL_INCLUDE_DIR} + ${PNG_INCLUDE_DIRS} + ${FREETYPE_INCLUDE_DIRS}) + +link_directories( + ${PNG_LIBRARY_DIRS} + ${FREETYPE_LIBRARY_DIRS}) + +add_definitions( + ${PNG_CFLAGS_OTHER}) + +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/built + ${CMAKE_CURRENT_BINARY_DIR}) + +if(SPACEWARE_FOUND) + include_directories( + ${SPACEWARE_INCLUDE_DIR}) +endif() + +set(HAVE_SPACEWARE ${SPACEWARE_FOUND}) +set(HAVE_GTK ${GTKMM_FOUND}) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in + ${CMAKE_CURRENT_BINARY_DIR}/config.h) + +# platform utilities + +if(WIN32) + set(util_SOURCES + win32/w32util.cpp) +else() + set(util_SOURCES + unix/unixutil.cpp) +endif() + +# libslvs + +set(libslvs_SOURCES + util.cpp + entity.cpp + expr.cpp + constraint.cpp + constrainteq.cpp + system.cpp) + +set(libslvs_HEADERS + solvespace.h) + +add_library(slvs SHARED + ${libslvs_SOURCES} + ${libslvs_HEADERS} + ${util_SOURCES} + lib.cpp) + +target_compile_definitions(slvs + PRIVATE -DLIBRARY) + +target_include_directories(slvs + PUBLIC ${CMAKE_SOURCE_DIR}/include) + +set_target_properties(slvs PROPERTIES + PUBLIC_HEADER ${CMAKE_SOURCE_DIR}/include/slvs.h + VERSION ${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR} + SOVERSION 1) + +if(NOT WIN32) + install(TARGETS slvs + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +endif() + +# generated files + +# `$` allows us to use binfmt support on Linux +# without special-casing anything; running `tool.exe` would succeed +# but unlike Windows, Linux does not have the machinery to map +# an invocation of `tool` to an executable `tool.exe` in $PATH. + +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/generated) + +file(GLOB icons ${CMAKE_CURRENT_SOURCE_DIR}/icons/*.png) +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated/icons.cpp + ${CMAKE_CURRENT_BINARY_DIR}/generated/icons.h + COMMAND $ + ${CMAKE_CURRENT_BINARY_DIR}/generated/icons.cpp + ${CMAKE_CURRENT_BINARY_DIR}/generated/icons.h + ${icons} + DEPENDS png2c ${icons} + VERBATIM) + +file(GLOB chars ${CMAKE_CURRENT_SOURCE_DIR}/fonts/private/*.png) +list(SORT chars) +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated/bitmapfont.table.h + COMMAND $ + ${CMAKE_CURRENT_BINARY_DIR}/generated/bitmapfont.table.h + ${CMAKE_CURRENT_SOURCE_DIR}/fonts/unifont-8.0.01.hex.gz + ${chars} + DEPENDS unifont2c + ${CMAKE_CURRENT_SOURCE_DIR}/fonts/unifont-8.0.01.hex.gz + ${chars} + VERBATIM) + +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated/vectorfont.table.h + COMMAND $ + ${CMAKE_CURRENT_BINARY_DIR}/generated/vectorfont.table.h + ${CMAKE_CURRENT_SOURCE_DIR}/fonts/unicode.lff.gz + DEPENDS lff2c + ${CMAKE_CURRENT_SOURCE_DIR}/fonts/unicode.lff.gz + VERBATIM) + +set(generated_HEADERS + ${CMAKE_CURRENT_BINARY_DIR}/generated/vectorfont.table.h + ${CMAKE_CURRENT_BINARY_DIR}/generated/bitmapfont.table.h + ${CMAKE_CURRENT_BINARY_DIR}/generated/icons.h) + +set(generated_SOURCES + ${CMAKE_CURRENT_BINARY_DIR}/generated/icons.cpp) + +# platform dependencies + +if(WIN32) + set(platform_SOURCES + win32/w32main.cpp + win32/resource.rc) + + set(platform_LIBRARIES + comctl32) +elseif(APPLE) + add_definitions( + -fobjc-arc) + + set(platform_SOURCES + cocoa/cocoamain.mm + unix/gloffscreen.cpp) + + set(platform_XIBS + cocoa/MainMenu.xib + cocoa/SaveFormatAccessory.xib) + + set(platform_ICONS + cocoa/AppIcon.iconset) + + set(platform_RESOURCES + unix/solvespace-48x48.png) + + set(platform_BUNDLED_LIBS + ${PNG_LIBRARIES} + ${FREETYPE_LIBRARIES}) + + set(platform_LIBRARIES + ${APPKIT_LIBRARY}) +elseif(HAVE_GTK) + include_directories( + ${GTKMM_INCLUDE_DIRS} + ${JSONC_INCLUDE_DIRS} + ${FONTCONFIG_INCLUDE_DIRS} + ${GLEW_INCLUDE_DIRS}) + + link_directories( + ${GTKMM_LIBRARY_DIRS} + ${JSONC_LIBRARY_DIRS} + ${FONTCONFIG_LIBRARY_DIRS} + ${GLEW_LIBRARY_DIRS}) + + add_definitions( + ${GTKMM_CFLAGS_OTHER} + ${JSONC_CFLAGS_OTHER} + ${FONTCONFIG_CFLAGS_OTHER} + ${GLEW_CFLAGS_OTHER}) + + set(platform_SOURCES + gtk/gtkmain.cpp + unix/gloffscreen.cpp) + + set(platform_LIBRARIES + ${GTKMM_LIBRARIES} + ${JSONC_LIBRARIES} + ${FONTCONFIG_LIBRARIES} + ${GLEW_LIBRARIES}) +endif() + +set(platform_BUNDLED_RESOURCES) + +foreach(xib ${platform_XIBS}) + get_filename_component(nib ${xib} NAME_WE) + set(source ${CMAKE_CURRENT_SOURCE_DIR}/${xib}) + set(target ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources/${nib}.nib) + list(APPEND platform_BUNDLED_RESOURCES ${target}) + + add_custom_command( + OUTPUT ${target} + COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources + COMMAND ibtool --errors --warnings --notices + --output-format human-readable-text --compile + ${target} ${source} + COMMENT "Building Interface Builder file ${xib}" + DEPENDS ${xib} + VERBATIM) +endforeach() + +foreach(icon ${platform_ICONS}) + get_filename_component(name ${icon} NAME_WE) + set(source ${CMAKE_CURRENT_SOURCE_DIR}/${icon}) + set(target ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources/${name}.icns) + list(APPEND platform_BUNDLED_RESOURCES ${target}) + + add_custom_command( + OUTPUT ${target} + COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources + COMMAND iconutil -c icns -o ${target} ${source} + COMMENT "Building icon set ${icon}" + DEPENDS ${source} + VERBATIM) +endforeach() + +foreach(res ${platform_RESOURCES}) + get_filename_component(name ${res} NAME) + set(source ${CMAKE_CURRENT_SOURCE_DIR}/${res}) + set(target ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources/${name}) + list(APPEND platform_BUNDLED_RESOURCES ${target}) + + add_custom_command( + OUTPUT ${target} + COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources + COMMAND ${CMAKE_COMMAND} -E copy ${source} ${target} + COMMENT "Copying resource file ${res}" + DEPENDS ${res} + VERBATIM) +endforeach() + +foreach(lib ${platform_BUNDLED_LIBS}) + get_filename_component(name ${lib} NAME) + set(target ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/MacOS/${name}) + list(APPEND platform_BUNDLED_RESOURCES ${target}) + + add_custom_command( + OUTPUT ${target} + COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources + COMMAND ${CMAKE_COMMAND} -E copy ${lib} ${target} + COMMENT "Bundling shared library ${lib}" + DEPENDS ${lib} + VERBATIM) +endforeach() + +# solvespace executable + +set(solvespace_HEADERS + config.h + dsc.h + expr.h + polygon.h + sketch.h + solvespace.h + ui.h + srf/surface.h) + +set(solvespace_SOURCES + bsp.cpp + clipboard.cpp + confscreen.cpp + constraint.cpp + constrainteq.cpp + describescreen.cpp + draw.cpp + drawconstraint.cpp + drawentity.cpp + entity.cpp + export.cpp + exportstep.cpp + exportvector.cpp + expr.cpp + file.cpp + generate.cpp + glhelper.cpp + graphicswin.cpp + group.cpp + groupmesh.cpp + importdxf.cpp + mesh.cpp + modify.cpp + mouse.cpp + polygon.cpp + request.cpp + solvespace.cpp + style.cpp + system.cpp + textscreens.cpp + textwin.cpp + toolbar.cpp + ttf.cpp + undoredo.cpp + util.cpp + view.cpp + srf/boolean.cpp + srf/curve.cpp + srf/merge.cpp + srf/ratpoly.cpp + srf/raycast.cpp + srf/surface.cpp + srf/surfinter.cpp + srf/triangulate.cpp) + +add_executable(solvespace WIN32 MACOSX_BUNDLE + ${libslvs_HEADERS} + ${libslvs_SOURCES} + ${util_SOURCES} + ${platform_SOURCES} + ${platform_BUNDLED_RESOURCES} + ${generated_SOURCES} + ${generated_HEADERS} + ${solvespace_HEADERS} + ${solvespace_SOURCES}) + +target_link_libraries(solvespace + dxfrw + ${OPENGL_LIBRARIES} + ${PNG_LIBRARIES} + ${ZLIB_LIBRARIES} + ${FREETYPE_LIBRARIES} + ${platform_LIBRARIES}) + +if(WIN32 AND NOT MINGW) + set_target_properties(solvespace PROPERTIES + LINK_FLAGS "/MANIFEST:NO /SAFESEH:NO") +endif() + +if(SPACEWARE_FOUND) + target_link_libraries(solvespace + ${SPACEWARE_LIBRARIES}) +endif() + +if(APPLE) + set(fixups) + foreach(lib ${platform_BUNDLED_LIBS}) + get_filename_component(name ${lib} NAME) + execute_process(COMMAND otool -XD ${lib} + OUTPUT_VARIABLE canonical_lib OUTPUT_STRIP_TRAILING_WHITESPACE) + add_custom_command(TARGET solvespace POST_BUILD + COMMAND install_name_tool -change ${canonical_lib} @executable_path/${name} + $ + COMMENT "Fixing up rpath for dylib ${name}" + VERBATIM) + endforeach() + + set(bundle solvespace) + add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/${bundle}.dmg + COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_BINARY_DIR}/${bundle}.dmg + COMMAND hdiutil create -srcfolder ${CMAKE_CURRENT_BINARY_DIR}/${bundle}.app + ${CMAKE_BINARY_DIR}/${bundle}.dmg + DEPENDS $ + COMMENT "Building ${bundle}.dmg" + VERBATIM) + + add_custom_target(${bundle}-dmg ALL + DEPENDS ${CMAKE_BINARY_DIR}/${bundle}.dmg) +endif() + +if(NOT WIN32) + install(TARGETS solvespace + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + BUNDLE DESTINATION .) +endif() + +install(FILES unix/solvespace.desktop + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications) +foreach(SIZE 16x16 24x24 32x32 48x48) + install(FILES unix/solvespace-${SIZE}.png + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${SIZE}/apps + RENAME solvespace.png) + install(FILES unix/solvespace-${SIZE}.png + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${SIZE}/mimetypes + RENAME application.x-solvespace.png) +endforeach() +foreach(SIZE 16x16 24x24 32x32 48x48) + install(FILES unix/solvespace-${SIZE}.xpm + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pixmaps/) +endforeach() + +# valgrind + +add_custom_target(solvespace-valgrind + valgrind + --tool=memcheck + --verbose + --track-fds=yes + --log-file=vg.%p.out + --num-callers=50 + --error-limit=no + --read-var-info=yes + --leak-check=full + --leak-resolution=high + --show-reachable=yes + --track-origins=yes + --malloc-fill=0xac + --free-fill=0xde + $) diff --git a/src/bsp.cpp b/src/bsp.cpp new file mode 100644 index 0000000..bba7265 --- /dev/null +++ b/src/bsp.cpp @@ -0,0 +1,682 @@ +//----------------------------------------------------------------------------- +// Binary space partitioning tree, used to represent a volume in 3-space +// bounded by a triangle mesh. These are used to compute Boolean operations +// on meshes. These aren't used for anything relating to an SShell of +// ratpoly surfaces. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +SBsp2 *SBsp2::Alloc(void) { return (SBsp2 *)AllocTemporary(sizeof(SBsp2)); } +SBsp3 *SBsp3::Alloc(void) { return (SBsp3 *)AllocTemporary(sizeof(SBsp3)); } + +SBsp3 *SBsp3::FromMesh(SMesh *m) { + SBsp3 *bsp3 = NULL; + int i; + + SMesh mc = {}; + for(i = 0; i < m->l.n; i++) { + mc.AddTriangle(&(m->l.elem[i])); + } + + srand(0); // Let's be deterministic, at least! + int n = mc.l.n; + while(n > 1) { + int k = rand() % n; + n--; + swap(mc.l.elem[k], mc.l.elem[n]); + } + + for(i = 0; i < mc.l.n; i++) { + bsp3 = InsertOrCreate(bsp3, &(mc.l.elem[i]), NULL); + } + + mc.Clear(); + return bsp3; +} + +Vector SBsp3::IntersectionWith(Vector a, Vector b) { + double da = a.Dot(n) - d; + double db = b.Dot(n) - d; + if(da*db > 0) oops(); + + double dab = (db - da); + return (a.ScaledBy(db/dab)).Plus(b.ScaledBy(-da/dab)); +} + +void SBsp3::InsertInPlane(bool pos2, STriangle *tr, SMesh *m) { + Vector tc = ((tr->a).Plus(tr->b).Plus(tr->c)).ScaledBy(1.0/3); + + bool onFace = false; + bool sameNormal = false; + double maxNormalMag = -1; + + Vector lln, trn = tr->Normal(); + + SBsp3 *ll = this; + while(ll) { + if((ll->tri).ContainsPoint(tc)) { + onFace = true; + // If the mesh contains almost-zero-area triangles, and we're + // just on the edge of one of those, then don't trust its normal. + lln = (ll->tri).Normal(); + if(lln.Magnitude() > maxNormalMag) { + sameNormal = trn.Dot(lln) > 0; + maxNormalMag = lln.Magnitude(); + } + } + ll = ll->more; + } + + if(m->flipNormal && ((!pos2 && !onFace) || + (onFace && !sameNormal && m->keepCoplanar))) + { + m->AddTriangle(tr->meta, tr->c, tr->b, tr->a); + } else if(!(m->flipNormal) && ((pos2 && !onFace) || + (onFace && sameNormal && m->keepCoplanar))) + { + m->AddTriangle(tr->meta, tr->a, tr->b, tr->c); + } else { + m->atLeastOneDiscarded = true; + } +} + +void SBsp3::InsertHow(int how, STriangle *tr, SMesh *instead) { + switch(how) { + case POS: + if(instead && !pos) goto alt; + pos = InsertOrCreate(pos, tr, instead); + break; + + case NEG: + if(instead && !neg) goto alt; + neg = InsertOrCreate(neg, tr, instead); + break; + + case COPLANAR: { + if(instead) goto alt; + SBsp3 *m = Alloc(); + m->n = n; + m->d = d; + m->tri = *tr; + m->more = more; + more = m; + break; + } + default: oops(); + } + return; + +alt: + if(how == POS && !(instead->flipNormal)) { + instead->AddTriangle(tr->meta, tr->a, tr->b, tr->c); + } else if(how == NEG && instead->flipNormal) { + instead->AddTriangle(tr->meta, tr->c, tr->b, tr->a); + } else if(how == COPLANAR) { + if(edges) { + edges->InsertTriangle(tr, instead, this); + } else { + // I suppose this actually is allowed to happen, if the coplanar + // face is the leaf, and all of its neighbors are earlier in tree? + InsertInPlane(false, tr, instead); + } + } else { + instead->atLeastOneDiscarded = true; + } +} + +void SBsp3::InsertConvexHow(int how, STriMeta meta, Vector *vertex, int n, + SMesh *instead) +{ + switch(how) { + case POS: + if(pos) { + pos = pos->InsertConvex(meta, vertex, n, instead); + return; + } + break; + + case NEG: + if(neg) { + neg = neg->InsertConvex(meta, vertex, n, instead); + return; + } + break; + + default: oops(); + } + int i; + for(i = 0; i < n - 2; i++) { + STriangle tr = STriangle::From(meta, + vertex[0], vertex[i+1], vertex[i+2]); + InsertHow(how, &tr, instead); + } +} + +SBsp3 *SBsp3::InsertConvex(STriMeta meta, Vector *vertex, int cnt, + SMesh *instead) +{ + Vector e01 = (vertex[1]).Minus(vertex[0]); + Vector e12 = (vertex[2]).Minus(vertex[1]); + Vector out = e01.Cross(e12); + +#define MAX_VERTICES 50 + if(cnt+1 >= MAX_VERTICES) goto triangulate; + + int i; + Vector on[2]; + bool isPos[MAX_VERTICES]; + bool isNeg[MAX_VERTICES]; + bool isOn[MAX_VERTICES]; + int posc, negc, onc; posc = negc = onc = 0; + for(i = 0; i < cnt; i++) { + double dt = n.Dot(vertex[i]); + isPos[i] = isNeg[i] = isOn[i] = false; + if(fabs(dt - d) < LENGTH_EPS) { + isOn[i] = true; + if(onc < 2) { + on[onc] = vertex[i]; + } + onc++; + } else if(dt > d) { + isPos[i] = true; + posc++; + } else { + isNeg[i] = true; + negc++; + } + } + if(onc != 2 && onc != 1 && onc != 0) goto triangulate; + + if(onc == 2) { + if(!instead) { + SEdge se = SEdge::From(on[0], on[1]); + edges = SBsp2::InsertOrCreateEdge(edges, &se, n, out); + } + } + + if(posc == 0) { + InsertConvexHow(NEG, meta, vertex, cnt, instead); + return this; + } + if(negc == 0) { + InsertConvexHow(POS, meta, vertex, cnt, instead); + return this; + } + + Vector vpos[MAX_VERTICES]; + Vector vneg[MAX_VERTICES]; + int npos, nneg; npos = nneg = 0; + + Vector inter[2]; + int inters; inters = 0; + + for(i = 0; i < cnt; i++) { + int ip = WRAP((i + 1), cnt); + + if(isPos[i]) { + vpos[npos++] = vertex[i]; + } + if(isNeg[i]) { + vneg[nneg++] = vertex[i]; + } + if(isOn[i]) { + vneg[nneg++] = vertex[i]; + vpos[npos++] = vertex[i]; + } + if((isPos[i] && isNeg[ip]) || (isNeg[i] && isPos[ip])) { + Vector vi = IntersectionWith(vertex[i], vertex[ip]); + vpos[npos++] = vi; + vneg[nneg++] = vi; + + if(inters >= 2) goto triangulate; // XXX shouldn't happen but does + inter[inters++] = vi; + } + } + if(npos > cnt + 1 || nneg > cnt + 1) oops(); + + if(!instead) { + if(inters == 2) { + SEdge se = SEdge::From(inter[0], inter[1]); + edges = SBsp2::InsertOrCreateEdge(edges, &se, n, out); + } else if(inters == 1 && onc == 1) { + SEdge se = SEdge::From(inter[0], on[0]); + edges = SBsp2::InsertOrCreateEdge(edges, &se, n, out); + } else if(inters == 0 && onc == 2) { + // We already handled this on-plane existing edge + } else { + goto triangulate; + } + } + if(nneg < 3 || npos < 3) goto triangulate; // XXX + + InsertConvexHow(NEG, meta, vneg, nneg, instead); + InsertConvexHow(POS, meta, vpos, npos, instead); + return this; + +triangulate: + // We don't handle the special case for this; do it as triangles + SBsp3 *r = this; + for(i = 0; i < cnt - 2; i++) { + STriangle tr = STriangle::From(meta, + vertex[0], vertex[i+1], vertex[i+2]); + r = InsertOrCreate(r, &tr, instead); + } + return r; +} + +SBsp3 *SBsp3::InsertOrCreate(SBsp3 *where, STriangle *tr, SMesh *instead) { + if(where == NULL) { + if(instead) { + if(instead->flipNormal) { + instead->atLeastOneDiscarded = true; + } else { + instead->AddTriangle(tr->meta, tr->a, tr->b, tr->c); + } + return NULL; + } + + // Brand new node; so allocate for it, and fill us in. + SBsp3 *r = Alloc(); + r->n = (tr->Normal()).WithMagnitude(1); + r->d = (tr->a).Dot(r->n); + r->tri = *tr; + return r; + } + where->Insert(tr, instead); + return where; +} + +void SBsp3::Insert(STriangle *tr, SMesh *instead) { + double dt[3] = { (tr->a).Dot(n), (tr->b).Dot(n), (tr->c).Dot(n) }; + + int inc = 0, posc = 0, negc = 0; + bool isPos[3] = {}, isNeg[3] = {}, isOn[3] = {}; + // Count vertices in the plane + for(int i = 0; i < 3; i++) { + if(fabs(dt[i] - d) < LENGTH_EPS) { + inc++; + isOn[i] = true; + } else if(dt[i] > d) { + posc++; + isPos[i] = true; + } else { + negc++; + isNeg[i] = true; + } + } + + // All vertices in-plane + if(inc == 3) { + InsertHow(COPLANAR, tr, instead); + return; + } + + // No split required + if(posc == 0 || negc == 0) { + if(inc == 2) { + Vector a, b; + if (!isOn[0]) { a = tr->b; b = tr->c; } + else if(!isOn[1]) { a = tr->c; b = tr->a; } + else if(!isOn[2]) { a = tr->a; b = tr->b; } + else oops(); + if(!instead) { + SEdge se = SEdge::From(a, b); + edges = SBsp2::InsertOrCreateEdge(edges, &se, n, tr->Normal()); + } + } + + if(posc > 0) { + InsertHow(POS, tr, instead); + } else { + InsertHow(NEG, tr, instead); + } + return; + } + + // The polygon must be split into two pieces, one above, one below. + Vector a, b, c; + + if(posc == 1 && negc == 1 && inc == 1) { + bool bpos; + // Standardize so that a is on the plane + if (isOn[0]) { a = tr->a; b = tr->b; c = tr->c; bpos = isPos[1]; + } else if(isOn[1]) { a = tr->b; b = tr->c; c = tr->a; bpos = isPos[2]; + } else if(isOn[2]) { a = tr->c; b = tr->a; c = tr->b; bpos = isPos[0]; + } else oops(); + + Vector bPc = IntersectionWith(b, c); + STriangle btri = STriangle::From(tr->meta, a, b, bPc); + STriangle ctri = STriangle::From(tr->meta, c, a, bPc); + + if(bpos) { + InsertHow(POS, &btri, instead); + InsertHow(NEG, &ctri, instead); + } else { + InsertHow(POS, &ctri, instead); + InsertHow(NEG, &btri, instead); + } + + if(!instead) { + SEdge se = SEdge::From(a, bPc); + edges = SBsp2::InsertOrCreateEdge(edges, &se, n, tr->Normal()); + } + + return; + } + + if(posc == 2 && negc == 1) { + // Standardize so that a is on one side, and b and c are on the other. + if (isNeg[0]) { a = tr->a; b = tr->b; c = tr->c; + } else if(isNeg[1]) { a = tr->b; b = tr->c; c = tr->a; + } else if(isNeg[2]) { a = tr->c; b = tr->a; c = tr->b; + } else oops(); + + } else if(posc == 1 && negc == 2) { + if (isPos[0]) { a = tr->a; b = tr->b; c = tr->c; + } else if(isPos[1]) { a = tr->b; b = tr->c; c = tr->a; + } else if(isPos[2]) { a = tr->c; b = tr->a; c = tr->b; + } else oops(); + } else oops(); + + Vector aPb = IntersectionWith(a, b); + Vector cPa = IntersectionWith(c, a); + + STriangle alone = STriangle::From(tr->meta, a, aPb, cPa); + Vector quad[4] = { aPb, b, c, cPa }; + + if(posc == 2 && negc == 1) { + InsertConvexHow(POS, tr->meta, quad, 4, instead); + InsertHow(NEG, &alone, instead); + } else { + InsertConvexHow(NEG, tr->meta, quad, 4, instead); + InsertHow(POS, &alone, instead); + } + if(!instead) { + SEdge se = SEdge::From(aPb, cPa); + edges = SBsp2::InsertOrCreateEdge(edges, &se, n, alone.Normal()); + } + + return; +} + +void SBsp3::GenerateInPaintOrder(SMesh *m) { + + // Doesn't matter which branch we take if the normal has zero z + // component, so don't need a separate case for that. + if(n.z < 0) { + if(pos) pos->GenerateInPaintOrder(m); + } else { + if(neg) neg->GenerateInPaintOrder(m); + } + + SBsp3 *flip = this; + while(flip) { + m->AddTriangle(&(flip->tri)); + flip = flip->more; + } + + if(n.z < 0) { + if(neg) neg->GenerateInPaintOrder(m); + } else { + if(pos) pos->GenerateInPaintOrder(m); + } +} + +void SBsp3::DebugDraw(void) { + + if(pos) pos->DebugDraw(); + Vector norm = tri.Normal(); + glNormal3d(norm.x, norm.y, norm.z); + + glEnable(GL_DEPTH_TEST); + glEnable(GL_LIGHTING); + glBegin(GL_TRIANGLES); + ssglVertex3v(tri.a); + ssglVertex3v(tri.b); + ssglVertex3v(tri.c); + glEnd(); + + glDisable(GL_LIGHTING); + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + ssglDepthRangeOffset(2); + glBegin(GL_TRIANGLES); + ssglVertex3v(tri.a); + ssglVertex3v(tri.b); + ssglVertex3v(tri.c); + glEnd(); + + glDisable(GL_LIGHTING); + glPolygonMode(GL_FRONT_AND_BACK, GL_POINT); + glPointSize(10); + ssglDepthRangeOffset(2); + glBegin(GL_TRIANGLES); + ssglVertex3v(tri.a); + ssglVertex3v(tri.b); + ssglVertex3v(tri.c); + glEnd(); + + ssglDepthRangeOffset(0); + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + + if(more) more->DebugDraw(); + if(neg) neg->DebugDraw(); + + if(edges) edges->DebugDraw(n, d); +} + +///////////////////////////////// + +Vector SBsp2::IntersectionWith(Vector a, Vector b) { + double da = a.Dot(no) - d; + double db = b.Dot(no) - d; + if(da*db > 0) oops(); + + double dab = (db - da); + return (a.ScaledBy(db/dab)).Plus(b.ScaledBy(-da/dab)); +} + +SBsp2 *SBsp2::InsertOrCreateEdge(SBsp2 *where, SEdge *nedge, Vector nnp, Vector out) { + if(where == NULL) { + // Brand new node; so allocate for it, and fill us in. + SBsp2 *r = Alloc(); + r->np = nnp; + r->no = ((r->np).Cross((nedge->b).Minus(nedge->a))).WithMagnitude(1); + if(out.Dot(r->no) < 0) { + r->no = (r->no).ScaledBy(-1); + } + r->d = (nedge->a).Dot(r->no); + r->edge = *nedge; + return r; + } + where->InsertEdge(nedge, nnp, out); + return where; +} + +void SBsp2::InsertEdge(SEdge *nedge, Vector nnp, Vector out) { + + double dt[2] = { (nedge->a).Dot(no), (nedge->b).Dot(no) }; + + bool isPos[2] = {}, isNeg[2] = {}, isOn[2] = {}; + for(int i = 0; i < 2; i++) { + if(fabs(dt[i] - d) < LENGTH_EPS) { + isOn[i] = true; + } else if(dt[i] > d) { + isPos[i] = true; + } else { + isNeg[i] = true; + } + } + + if((isPos[0] && isPos[1])||(isPos[0] && isOn[1])||(isOn[0] && isPos[1])) { + pos = InsertOrCreateEdge(pos, nedge, nnp, out); + return; + } + if((isNeg[0] && isNeg[1])||(isNeg[0] && isOn[1])||(isOn[0] && isNeg[1])) { + neg = InsertOrCreateEdge(neg, nedge, nnp, out); + return; + } + if(isOn[0] && isOn[1]) { + SBsp2 *m = Alloc(); + + m->np = nnp; + m->no = ((m->np).Cross((nedge->b).Minus(nedge->a))).WithMagnitude(1); + if(out.Dot(m->no) < 0) { + m->no = (m->no).ScaledBy(-1); + } + m->d = (nedge->a).Dot(m->no); + m->edge = *nedge; + + m->more = more; + more = m; + return; + } + if((isPos[0] && isNeg[1]) || (isNeg[0] && isPos[1])) { + Vector aPb = IntersectionWith(nedge->a, nedge->b); + + SEdge ea = SEdge::From(nedge->a, aPb); + SEdge eb = SEdge::From(aPb, nedge->b); + + if(isPos[0]) { + pos = InsertOrCreateEdge(pos, &ea, nnp, out); + neg = InsertOrCreateEdge(neg, &eb, nnp, out); + } else { + neg = InsertOrCreateEdge(neg, &ea, nnp, out); + pos = InsertOrCreateEdge(pos, &eb, nnp, out); + } + return; + } + oops(); +} + +void SBsp2::InsertTriangleHow(int how, STriangle *tr, SMesh *m, SBsp3 *bsp3) { + switch(how) { + case POS: + if(pos) { + pos->InsertTriangle(tr, m, bsp3); + } else { + bsp3->InsertInPlane(true, tr, m); + } + break; + + case NEG: + if(neg) { + neg->InsertTriangle(tr, m, bsp3); + } else { + bsp3->InsertInPlane(false, tr, m); + } + break; + + default: oops(); + } +} + +void SBsp2::InsertTriangle(STriangle *tr, SMesh *m, SBsp3 *bsp3) { + double dt[3] = { (tr->a).Dot(no), (tr->b).Dot(no), (tr->c).Dot(no) }; + + bool isPos[3] = {}, isNeg[3] = {}, isOn[3] = {}; + int inc = 0, posc = 0, negc = 0; + for(int i = 0; i < 3; i++) { + if(fabs(dt[i] - d) < LENGTH_EPS) { + isOn[i] = true; + inc++; + } else if(dt[i] > d) { + isPos[i] = true; + posc++; + } else { + isNeg[i] = true; + negc++; + } + } + + if(inc == 3) { + // All vertices on-line; so it's a degenerate triangle, to ignore. + return; + } + + // No split required + if(posc == 0 || negc == 0) { + if(posc > 0) { + InsertTriangleHow(POS, tr, m, bsp3); + } else { + InsertTriangleHow(NEG, tr, m, bsp3); + } + return; + } + + // The polygon must be split into two pieces, one above, one below. + Vector a, b, c; + + if(posc == 1 && negc == 1 && inc == 1) { + bool bpos; + // Standardize so that a is on the plane + if (isOn[0]) { a = tr->a; b = tr->b; c = tr->c; bpos = isPos[1]; + } else if(isOn[1]) { a = tr->b; b = tr->c; c = tr->a; bpos = isPos[2]; + } else if(isOn[2]) { a = tr->c; b = tr->a; c = tr->b; bpos = isPos[0]; + } else oops(); + + Vector bPc = IntersectionWith(b, c); + STriangle btri = STriangle::From(tr->meta, a, b, bPc); + STriangle ctri = STriangle::From(tr->meta, c, a, bPc); + + if(bpos) { + InsertTriangleHow(POS, &btri, m, bsp3); + InsertTriangleHow(NEG, &ctri, m, bsp3); + } else { + InsertTriangleHow(POS, &ctri, m, bsp3); + InsertTriangleHow(NEG, &btri, m, bsp3); + } + + return; + } + + if(posc == 2 && negc == 1) { + // Standardize so that a is on one side, and b and c are on the other. + if (isNeg[0]) { a = tr->a; b = tr->b; c = tr->c; + } else if(isNeg[1]) { a = tr->b; b = tr->c; c = tr->a; + } else if(isNeg[2]) { a = tr->c; b = tr->a; c = tr->b; + } else oops(); + + } else if(posc == 1 && negc == 2) { + if (isPos[0]) { a = tr->a; b = tr->b; c = tr->c; + } else if(isPos[1]) { a = tr->b; b = tr->c; c = tr->a; + } else if(isPos[2]) { a = tr->c; b = tr->a; c = tr->b; + } else oops(); + } else oops(); + + Vector aPb = IntersectionWith(a, b); + Vector cPa = IntersectionWith(c, a); + + STriangle alone = STriangle::From(tr->meta, a, aPb, cPa); + STriangle quad1 = STriangle::From(tr->meta, aPb, b, c ); + STriangle quad2 = STriangle::From(tr->meta, aPb, c, cPa); + + if(posc == 2 && negc == 1) { + InsertTriangleHow(POS, &quad1, m, bsp3); + InsertTriangleHow(POS, &quad2, m, bsp3); + InsertTriangleHow(NEG, &alone, m, bsp3); + } else { + InsertTriangleHow(NEG, &quad1, m, bsp3); + InsertTriangleHow(NEG, &quad2, m, bsp3); + InsertTriangleHow(POS, &alone, m, bsp3); + } + + return; +} + +void SBsp2::DebugDraw(Vector n, double d) { + if(fabs((edge.a).Dot(n) - d) > LENGTH_EPS) oops(); + if(fabs((edge.b).Dot(n) - d) > LENGTH_EPS) oops(); + + ssglLineWidth(10); + glBegin(GL_LINES); + ssglVertex3v(edge.a); + ssglVertex3v(edge.b); + glEnd(); + if(pos) pos->DebugDraw(n, d); + if(neg) neg->DebugDraw(n, d); + if(more) more->DebugDraw(n, d); + ssglLineWidth(1); +} + diff --git a/src/clipboard.cpp b/src/clipboard.cpp new file mode 100644 index 0000000..c13b4fb --- /dev/null +++ b/src/clipboard.cpp @@ -0,0 +1,444 @@ +//----------------------------------------------------------------------------- +// The clipboard that gets manipulated when the user selects Edit -> Cut, +// Copy, Paste, etc.; may contain entities only, not constraints. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +void SolveSpaceUI::Clipboard::Clear(void) { + c.Clear(); + r.Clear(); +} + +bool SolveSpaceUI::Clipboard::ContainsEntity(hEntity he) { + if(he.v == Entity::NO_ENTITY.v) + return true; + + ClipboardRequest *cr; + for(cr = r.First(); cr; cr = r.NextAfter(cr)) { + if(cr->oldEnt.v == he.v) + return true; + + for(int i = 0; i < MAX_POINTS_IN_ENTITY; i++) { + if(cr->oldPointEnt[i].v == he.v) + return true; + } + } + return false; +} + +hEntity SolveSpaceUI::Clipboard::NewEntityFor(hEntity he) { + if(he.v == Entity::NO_ENTITY.v) + return Entity::NO_ENTITY; + + ClipboardRequest *cr; + for(cr = r.First(); cr; cr = r.NextAfter(cr)) { + if(cr->oldEnt.v == he.v) + return cr->newReq.entity(0); + + for(int i = 0; i < MAX_POINTS_IN_ENTITY; i++) { + if(cr->oldPointEnt[i].v == he.v) + return cr->newReq.entity(1+i); + } + } + oops(); +} + +void GraphicsWindow::DeleteSelection(void) { + SK.request.ClearTags(); + SK.constraint.ClearTags(); + List *ls = &(selection); + for(Selection *s = ls->First(); s; s = ls->NextAfter(s)) { + hRequest r = { 0 }; + if(s->entity.v && s->entity.isFromRequest()) { + r = s->entity.request(); + } + if(r.v && !r.IsFromReferences()) { + SK.request.Tag(r, 1); + } + if(s->constraint.v) { + SK.constraint.Tag(s->constraint, 1); + } + } + + SK.constraint.RemoveTagged(); + // Note that this regenerates and clears the selection, to avoid + // lingering references to the just-deleted items. + DeleteTaggedRequests(); +} + +void GraphicsWindow::CopySelection(void) { + SS.clipboard.Clear(); + + Entity *wrkpl = SK.GetEntity(ActiveWorkplane()); + Entity *wrkpln = SK.GetEntity(wrkpl->normal); + Vector u = wrkpln->NormalU(), + v = wrkpln->NormalV(), + n = wrkpln->NormalN(), + p = SK.GetEntity(wrkpl->point[0])->PointGetNum(); + + List *ls = &(selection); + for(Selection *s = ls->First(); s; s = ls->NextAfter(s)) { + if(!s->entity.v) continue; + // Work only on entities that have requests that will generate them. + Entity *e = SK.GetEntity(s->entity); + bool hasDistance; + int req, pts; + if(!EntReqTable::GetEntityInfo(e->type, e->extraPoints, + &req, &pts, NULL, &hasDistance)) + { + continue; + } + if(req == Request::WORKPLANE) continue; + + ClipboardRequest cr = {}; + cr.type = req; + cr.extraPoints = e->extraPoints; + cr.style = e->style; + cr.str = e->str; + cr.font = e->font; + cr.construction = e->construction; + {for(int i = 0; i < pts; i++) { + Vector pt = SK.GetEntity(e->point[i])->PointGetNum(); + pt = pt.Minus(p); + pt = pt.DotInToCsys(u, v, n); + cr.point[i] = pt; + }} + if(hasDistance) { + cr.distance = SK.GetEntity(e->distance)->DistanceGetNum(); + } + + cr.oldEnt = e->h; + for(int i = 0; i < pts; i++) { + cr.oldPointEnt[i] = e->point[i]; + } + + SS.clipboard.r.Add(&cr); + } + + for(Selection *s = ls->First(); s; s = ls->NextAfter(s)) { + if(!s->constraint.v) continue; + + Constraint *c = SK.GetConstraint(s->constraint); + if(c->type == Constraint::COMMENT) { + SS.clipboard.c.Add(c); + } + } + + Constraint *c; + for(c = SK.constraint.First(); c; c = SK.constraint.NextAfter(c)) { + if(!SS.clipboard.ContainsEntity(c->ptA) || + !SS.clipboard.ContainsEntity(c->ptB) || + !SS.clipboard.ContainsEntity(c->entityA) || + !SS.clipboard.ContainsEntity(c->entityB) || + !SS.clipboard.ContainsEntity(c->entityC) || + !SS.clipboard.ContainsEntity(c->entityD) || + c->type == Constraint::COMMENT) { + continue; + } + SS.clipboard.c.Add(c); + } +} + +void GraphicsWindow::PasteClipboard(Vector trans, double theta, double scale) { + Entity *wrkpl = SK.GetEntity(ActiveWorkplane()); + Entity *wrkpln = SK.GetEntity(wrkpl->normal); + Vector u = wrkpln->NormalU(), + v = wrkpln->NormalV(), + n = wrkpln->NormalN(), + p = SK.GetEntity(wrkpl->point[0])->PointGetNum(); + + ClipboardRequest *cr; + for(cr = SS.clipboard.r.First(); cr; cr = SS.clipboard.r.NextAfter(cr)) { + hRequest hr = AddRequest(cr->type, false); + Request *r = SK.GetRequest(hr); + r->extraPoints = cr->extraPoints; + r->style = cr->style; + r->str = cr->str; + r->font = cr->font; + r->construction = cr->construction; + // Need to regen to get the right number of points, if extraPoints + // changed. + SS.GenerateAll(SolveSpaceUI::GENERATE_REGEN); + SS.MarkGroupDirty(r->group); + bool hasDistance; + int i, pts; + EntReqTable::GetRequestInfo(r->type, r->extraPoints, + NULL, &pts, NULL, &hasDistance); + for(i = 0; i < pts; i++) { + Vector pt = cr->point[i]; + // We need the reflection to occur within the workplane; it may + // otherwise correspond to just a rotation as projected. + if(scale < 0) { + pt.x *= -1; + } + // Likewise the scale, which could otherwise take us out of the + // workplane. + pt = pt.ScaledBy(fabs(scale)); + pt = pt.ScaleOutOfCsys(u, v, Vector::From(0, 0, 0)); + pt = pt.Plus(p); + pt = pt.RotatedAbout(n, theta); + pt = pt.Plus(trans); + SK.GetEntity(hr.entity(i+1))->PointForceTo(pt); + } + if(hasDistance) { + SK.GetEntity(hr.entity(64))->DistanceForceTo( + cr->distance*fabs(scale)); + } + + cr->newReq = hr; + MakeSelected(hr.entity(0)); + for(i = 0; i < pts; i++) { + MakeSelected(hr.entity(i+1)); + } + } + + Constraint *cc; + for(cc = SS.clipboard.c.First(); cc; cc = SS.clipboard.c.NextAfter(cc)) { + Constraint c = {}; + c.group = SS.GW.activeGroup; + c.workplane = SS.GW.ActiveWorkplane(); + c.type = cc->type; + c.valA = cc->valA; + c.ptA = SS.clipboard.NewEntityFor(cc->ptA); + c.ptB = SS.clipboard.NewEntityFor(cc->ptB); + c.entityA = SS.clipboard.NewEntityFor(cc->entityA); + c.entityB = SS.clipboard.NewEntityFor(cc->entityB); + c.entityC = SS.clipboard.NewEntityFor(cc->entityC); + c.entityD = SS.clipboard.NewEntityFor(cc->entityD); + c.other = cc->other; + c.other2 = cc->other2; + c.reference = cc->reference; + c.disp = cc->disp; + c.comment = cc->comment; + switch(c.type) { + case Constraint::COMMENT: + c.disp.offset = c.disp.offset.Plus(trans); + break; + + case Constraint::PT_PT_DISTANCE: + case Constraint::PT_LINE_DISTANCE: + case Constraint::PROJ_PT_DISTANCE: + case Constraint::DIAMETER: + c.valA *= fabs(scale); + break; + + default: + break; + } + + hConstraint hc = Constraint::AddConstraint(&c, /*rememberForUndo=*/false); + if(c.type == Constraint::COMMENT) { + MakeSelected(hc); + } + } + + SS.ScheduleGenerateAll(); +} + +void GraphicsWindow::MenuClipboard(int id) { + if(id != MNU_DELETE && !SS.GW.LockedInWorkplane()) { + Error("Cut, paste, and copy work only in a workplane.\n\n" + "Select one with Sketch -> In Workplane."); + return; + } + + switch(id) { + case MNU_PASTE: { + SS.UndoRemember(); + Vector trans = SS.GW.projRight.ScaledBy(80/SS.GW.scale).Plus( + SS.GW.projUp .ScaledBy(40/SS.GW.scale)); + SS.GW.ClearSelection(); + SS.GW.PasteClipboard(trans, 0, 1); + break; + } + + case MNU_PASTE_TRANSFORM: { + if(SS.clipboard.r.n == 0) { + Error("Clipboard is empty; nothing to paste."); + break; + } + + Entity *wrkpl = SK.GetEntity(SS.GW.ActiveWorkplane()); + Vector p = SK.GetEntity(wrkpl->point[0])->PointGetNum(); + SS.TW.shown.paste.times = 1; + SS.TW.shown.paste.trans = Vector::From(0, 0, 0); + SS.TW.shown.paste.theta = 0; + SS.TW.shown.paste.origin = p; + SS.TW.shown.paste.scale = 1; + SS.TW.GoToScreen(TextWindow::SCREEN_PASTE_TRANSFORMED); + SS.GW.ForceTextWindowShown(); + SS.ScheduleShowTW(); + break; + } + + case MNU_COPY: + SS.GW.CopySelection(); + SS.GW.ClearSelection(); + break; + + case MNU_CUT: + SS.UndoRemember(); + SS.GW.CopySelection(); + SS.GW.DeleteSelection(); + break; + + case MNU_DELETE: + SS.UndoRemember(); + SS.GW.DeleteSelection(); + break; + + default: oops(); + } +} + +bool TextWindow::EditControlDoneForPaste(const char *s) { + Expr *e; + switch(edit.meaning) { + case EDIT_PASTE_TIMES_REPEATED: { + e = Expr::From(s, true); + if(!e) break; + int v = (int)e->Eval(); + if(v > 0) { + shown.paste.times = v; + } else { + Error("Number of copies to paste must be at least one."); + } + break; + } + case EDIT_PASTE_ANGLE: + e = Expr::From(s, true); + if(!e) break; + shown.paste.theta = WRAP_SYMMETRIC((e->Eval())*PI/180, 2*PI); + break; + + case EDIT_PASTE_SCALE: { + e = Expr::From(s, true); + double v = e->Eval(); + if(fabs(v) > 1e-6) { + shown.paste.scale = v; + } else { + Error("Scale cannot be zero."); + } + break; + } + + default: + return false; + } + return true; +} + +void TextWindow::ScreenChangePasteTransformed(int link, uint32_t v) { + switch(link) { + case 't': + SS.TW.ShowEditControl(13, ssprintf("%d", SS.TW.shown.paste.times)); + SS.TW.edit.meaning = EDIT_PASTE_TIMES_REPEATED; + break; + + case 'r': + SS.TW.ShowEditControl(13, ssprintf("%.3f", SS.TW.shown.paste.theta*180/PI)); + SS.TW.edit.meaning = EDIT_PASTE_ANGLE; + break; + + case 's': + SS.TW.ShowEditControl(13, ssprintf("%.3f", SS.TW.shown.paste.scale)); + SS.TW.edit.meaning = EDIT_PASTE_SCALE; + break; + } +} + +void TextWindow::ScreenPasteTransformed(int link, uint32_t v) { + SS.GW.GroupSelection(); + switch(link) { + case 'o': + if(SS.GW.gs.points == 1 && SS.GW.gs.n == 1) { + Entity *e = SK.GetEntity(SS.GW.gs.point[0]); + SS.TW.shown.paste.origin = e->PointGetNum(); + } else { + Error("Select one point to define origin of rotation."); + } + SS.GW.ClearSelection(); + break; + + case 't': + if(SS.GW.gs.points == 2 && SS.GW.gs.n == 2) { + Entity *pa = SK.GetEntity(SS.GW.gs.point[0]), + *pb = SK.GetEntity(SS.GW.gs.point[1]); + SS.TW.shown.paste.trans = + (pb->PointGetNum()).Minus(pa->PointGetNum()); + } else { + Error("Select two points to define translation vector."); + } + SS.GW.ClearSelection(); + break; + + case 'g': { + if(fabs(SS.TW.shown.paste.theta) < LENGTH_EPS && + SS.TW.shown.paste.trans.Magnitude() < LENGTH_EPS && + SS.TW.shown.paste.times != 1) + { + Message("Transformation is identity. So all copies will be " + "exactly on top of each other."); + } + if(SS.TW.shown.paste.times*SS.clipboard.r.n > 100) { + Error("Too many items to paste; split this into smaller " + "pastes."); + break; + } + if(!SS.GW.LockedInWorkplane()) { + Error("No workplane active."); + break; + } + Entity *wrkpl = SK.GetEntity(SS.GW.ActiveWorkplane()); + Entity *wrkpln = SK.GetEntity(wrkpl->normal); + Vector wn = wrkpln->NormalN(); + SS.UndoRemember(); + SS.GW.ClearSelection(); + for(int i = 0; i < SS.TW.shown.paste.times; i++) { + Vector trans = SS.TW.shown.paste.trans.ScaledBy(i+1), + origin = SS.TW.shown.paste.origin; + double theta = SS.TW.shown.paste.theta*(i+1); + // desired transformation is Q*(p - o) + o + t = + // Q*p - Q*o + o + t = Q*p + (t + o - Q*o) + Vector t = trans.Plus( + origin).Minus( + origin.RotatedAbout(wn, theta)); + + SS.GW.PasteClipboard(t, theta, SS.TW.shown.paste.scale); + } + SS.TW.GoToScreen(SCREEN_LIST_OF_GROUPS); + SS.ScheduleShowTW(); + break; + } + } +} + +void TextWindow::ShowPasteTransformed(void) { + Printf(true, "%FtPASTE TRANSFORMED%E"); + Printf(true, "%Ba %Ftrepeat%E %d time%s %Fl%Lt%f[change]%E", + shown.paste.times, (shown.paste.times == 1) ? "" : "s", + &ScreenChangePasteTransformed); + Printf(false, "%Bd %Ftrotate%E %@ degrees %Fl%Lr%f[change]%E", + shown.paste.theta*180/PI, + &ScreenChangePasteTransformed); + Printf(false, "%Ba %Ftabout pt%E (%s, %s, %s) %Fl%Lo%f[use selected]%E", + SS.MmToString(shown.paste.origin.x).c_str(), + SS.MmToString(shown.paste.origin.y).c_str(), + SS.MmToString(shown.paste.origin.z).c_str(), + &ScreenPasteTransformed); + Printf(false, "%Bd %Fttranslate%E (%s, %s, %s) %Fl%Lt%f[use selected]%E", + SS.MmToString(shown.paste.trans.x).c_str(), + SS.MmToString(shown.paste.trans.y).c_str(), + SS.MmToString(shown.paste.trans.z).c_str(), + &ScreenPasteTransformed); + Printf(false, "%Ba %Ftscale%E %@ %Fl%Ls%f[change]%E", + shown.paste.scale, + &ScreenChangePasteTransformed); + + Printf(true, " %Fl%Lg%fpaste transformed now%E", &ScreenPasteTransformed); + + Printf(true, "(or %Fl%Ll%fcancel operation%E)", &ScreenHome); +} + diff --git a/src/cocoa/AppIcon.iconset/icon_128x128.png b/src/cocoa/AppIcon.iconset/icon_128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..363e89161a4804a5338624941481f15f915be2ea GIT binary patch literal 891 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrU~J8Fb`B^Ga(7bjbagf}v@|o* zHPSO=V9=OYI&r7Bv!g)!eig4H%&x%^5lcG6CUv+8zO@nHcbXuf7&!aMQz4<+J>r5J zw`|zD;lqJr3TD@Cb^dQq;K)*KS{tEpqr)bBvP091$g=OZ@1HyK?p%}Yq^m_~vGz}{ zeR9jFIwaevw{xz(MaJT}c~VKUR`#Di&%Povp8v*`n)kswvwr{0_U&AQ zJs)}s3XIol+X<9q&Wv#S;dCSW1Z(U3DRTNBXFn>L_*QHAX^wWa*4RVuN<@#ZjyNr0 z`A{*@UvKxqsqYuZU78aU9TTwYi=K~@k8$Jd$YnE9W-z*?${cH-ZxkWkeW5@1f(`rE_0zuIkRkS(2GyZ=2#PW;ZwPrnMi7J2aY1g8o=O1M8Th0GELr~j`@8!1;F1vFJ zRk>u#FYJg}67`xANvMrhh;7ef;fleTVh>=y-} zOJvVnHey8hF0b=FYffqZU(I)K*FT8gttgD--)T2k@9gG^&HDOoe*^0bq+l?= zZrrkA>xK^pjwzU3yVd!>L4hMnwP|gH#*Ge}^vMoQGa}2r-@bqD%)4_ruWct#mN_%R>4(#e>=Uf5^QXw^f1LfOWa3+`<)=B?)mmc@y(Oms}Zt}l8%PCmwsvm=+yNSVRtmMU|seZE~}pz^)=9{x>w z8)x-cMN6!iq~kL6{FTR)GLb&YC zEmY-_Ex)iMW>s|M{6oqu+Z7AA+ubiH|68lQ|JmDg9p4kv4g%wav%n*=n1Mk|6@(c* zgH%2+Ffdzqx;TbZ%z1lvWA32<5r;tGi-%a&JmfSgSNkC4!@xYjOh{;=Xh-fl%dOr0 z!m)cF*-L<;7$10GzI!SE2B+;a&sVqSTswY=one|XgMb?C(YE+s3^}KN7VJD*`LD$G zU0kWyzjG`MiA;D=8DquD%vot~`Fb8_ls}N4$)Mmfq)^WGFN|R?%s&5|zVGnoheqFR zYzlVC{XPFbfvLfO5ik0_=>6I(@q~4mv)=I8T(sz0{p+{gY)*zlEO^nqU-Ld2@Em^r zbi=CMALEa|zP-PA+hKyC{Cg?C!I}SZ|JJUqjgyNmF+W03NA?ZYim$ORw%*!AdjTM>r>mdKI;Vst0D>lteE4?>U_AyJ#; z~msgKXk2dHUZ57^Xv?^C&I`~7Q8iKMB4twDH9 z(~Z3FjBs!>uPZ(fc4?VdLij@1YsdwKpOhXi@tfjwk?ks{%Ls=igGo6#KF*;f3LSUQxLm4R zd7r`~gtsAZ3x`M0BmS)`zvk^{EKSIk!2kdN32;bRa{vGf6951U69E94oEQKA0BcD^ zK~y-6V_-l9{~1UGOr&ZU7z3X0e!}TBqFr$M^l7Yy43RLPsR4{={Qod9d?7FMnGdcH zrvVHMxI>@~ literal 0 HcmV?d00001 diff --git a/src/cocoa/AppIcon.iconset/icon_16x16@2x.png b/src/cocoa/AppIcon.iconset/icon_16x16@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d9f276ab5d34eab271ff6461b9b46f67e273e372 GIT binary patch literal 626 zcmV-&0*(ENP)4?>U_AyJ#; z~msgKXk2dHUZ57^Xv?^C&I`~7Q8iKMB4twDH9 z(~Z3FjBs!>uPZ(fc4?VdLij@1YsdwKpOhXi@tfjwk?ks{%Ls=igGo6#KF*;f3LSUQxLm4R zd7r`~gtsAZ3x`M0BmS)`zvk^{EKSIk!2kdN32;bRa{vGqB>(^xB>_oNB=7(L0Fy~X zK~z|UV_?7y{zEZM0TZn)7}C%m8jKjHmEa;_OZApirXPoMsO`t)g{Lt^-a zz^DU89Wd&EA?E-_JaYfBsUfGlXJBApkonAq)vloz0x&>Id5;WCO-)hE8+;+){D~K< z&-U_t#ur*-g8>f#76#(m{xs<$42lpyk6T zZrrkA>xK^pjwzU3yVd!>L4hMnwP|gH#*Ge}^vMoQGa}2r-@bqD%)4_ruWct#mN_%R>4(#e>=Uf5^QXw^f1LfOWa3+`<)=B?)mmc@y(Oms}Zt}l8%PCmwsvm=+yNSVRtmMU|seZE~}pz^)=9{x>w z8)x-cMN6!iq~kL6{FTR)GLb&YC zEmY-_Ex)iMW>s|M{6oqu+Z7AA+ubiH|68lQ|JmDg9p4kv4g%wav%n*=n1O*?7=#%a zX3ddcU|_cJba4!+nDh4T#@s^zA`XGV7Z0(ldB|y0uJ%F7hk<#5nUK&#(T?1AmRq~~ zg=6#JHs?(1_3qNqiylO7;;YkEZBLr@?VMV zySP%Zf9F^j5}EL#GRBIPnX}T~^7TB0#kzlBVP1<(fhSo;tA_AXT9OGxoFY1`qyu}*_;fASn#5Izvg{5;5q#K z>4sIiKgJ(_eS3fLw!;KN`S((OgERl-{;geI8z&cCVt$06j_ez(6<=dtY`wep`)-Cc wZ3NwQ$9unddHDhBl+8X=NNM=eH%RWo0rN>LGA+IJ_X0p%Pgg&ebxsLQ0DgXr;s5{u literal 0 HcmV?d00001 diff --git a/src/cocoa/AppIcon.iconset/icon_256x256@2x.png b/src/cocoa/AppIcon.iconset/icon_256x256@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a380eb77900e8f23c7929e12ccc6ccb5e3a04271 GIT binary patch literal 2506 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&zE~)R&4YzZe)8TQi-V1B!#(ofJG>oy`m_ z&CGO-^b8poG$xi#-0AJ?DA2xN#p?*OYj8xwk`A#+9d3eeZ3Ot8CP*j-&VKS#NT_y? zxZuVu8@6uvaNwAN*|l4p{~HuIvQ(SaMrhpVut}fn&@>~m?ECHe=gz!4*JL~CYEfFO z{gZ2-+%l>T$#&}PoU3nSCAVFm^P6$S28c59x{*22+vA3W**!nP_#zkHv0|1af#cw9CAZ|#H3_x-oM|L>o1 znw6%xazXA_raAX!*xZ-?)BV^Yt-ikE*1q@u_UoUay|p!G&;Kr6bMN7qy1R1sEDq%F zplw-H61n#PXU|n`gQ@q$e@q5?TYD!REX-Lg{$tU`s>aFHU+;@2aEa5lXx(;|yPzuh rQ%$}=0wayBqJ2d%fORIw>WW+HS)b)t8XT6q0C7EC{an^LB{Ts5!S&mP literal 0 HcmV?d00001 diff --git a/src/cocoa/AppIcon.iconset/icon_32x32.png b/src/cocoa/AppIcon.iconset/icon_32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..60bf2c5ff1b13145db0f776c3d63831217be1716 GIT binary patch literal 626 zcmV-&0*(ENP)4?>U_AyJ#; z~msgKXk2dHUZ57^Xv?^C&I`~7Q8iKMB4twDH9 z(~Z3FjBs!>uPZ(fc4?VdLij@1YsdwKpOhXi@tfjwk?ks{%Ls=igGo6#KF*;f3LSUQxLm4R zd7r`~gtsAZ3x`M0BmS)`zvk^{EKSIk!2kdN32;bRa{vGf6951U69E94oEQKA0Fy~X zK~z|UV_?7y{zEZM0TZn)7}C%m8jKjHmEa;_OZApirXPoMsO`t)g{Lt^-a zz^DU89Wd&EA?E-_JaYfBsUfGlXJBApkonAq)vloz0x&>Id5;WCO-)hE8+;+){D~K< z&-U_t#ur*-g8>f#76#(m{xs<$42lpyk6Tr5J zw`|zD;lqJr3TD@Cb^dQq;K)*KS{tEpqr)bBvP091$g=OZ@1HyK?p%}Yq^m_~vGz}{ zeR9jFIwaevw{xz(MaJT}c~VKUR`#Di&%Povp8v*`n)kswvwr{0_U&AQ zJs)}s3XIol+X<9q&Wv#S;dCSW1Z(U3DRTNBXFn>L_*QHAX^wWa*4RVuN<@#ZjyNr0 z`A{*@UvKxqsqYuZU78aU9TTwYi=K~@k8$Jd$YnE9W-z*?${cH-ZxkWkeW5@1f(`rE_0zuIkRkS(2GyZ=2#PW;ZwPrnMi7J2aY1g8o=O1M8Th0GELr~j`@8!1;F1vFJ zRk>u#FYJg}6V2`J~#)X6nH}}_Ro!-U5 zvBlT&{+sgMkL~piH;XMWWYBd;W{7Gy#;}E-F&QAZk1hj z%X|iq;Pl(fMaK$b-g0U#-T#jBq51)29c&9&Gk6@hFGw_?8hLi!=dFwKTRs*4yESE> zJBK|ZNa3pYjFvww>vOl=Q-+#7`}KFzuddnOY|m`}Rc7&r1!T<2S@&Q63iR81PF@uz x@V2_~lIh#p19J_4t}gyndEhG4M3~i)3~uwKn_udc{s)E?gQu&X%Q~loCIBVCLj?c; literal 0 HcmV?d00001 diff --git a/src/cocoa/AppIcon.iconset/icon_512x512.png b/src/cocoa/AppIcon.iconset/icon_512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..6dcc757da086429df0ae3aaac7b1715b76071472 GIT binary patch literal 2506 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&zE~)R&4YzZe)8TQi-V1B!#(ofJG>oy`m_ z&CGO-^b8poG$xi#-0AJ?DA2xN#p?*OYj8xwk`A#+9d3eeZ3Ot8CP*j-&VKS#NT_y? zxZuVu8@6uvaNwAN*|l4p{~HuIvQ(SaMrhpVut}fn&@>~m?ECHe=gz!4*JL~CYEfFO z{gZ2-+%l>T$#&}PoU3n{y3wXRfh)p%!V`t`%~SqY zv+}TA;rcOSyE)LP0R#>8$$a=h1y#wP qYVrjV7-?)3?JJ4_tTRDYSKLz1`YgxN;IQNci0kR<=d#Wzp$P!xzuM{m literal 0 HcmV?d00001 diff --git a/src/cocoa/AppIcon.iconset/icon_512x512@2x.png b/src/cocoa/AppIcon.iconset/icon_512x512@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d45152055356772603ddc7ebaf94642a690617d6 GIT binary patch literal 6490 zcmeAS@N?(olHy`uVBq!ia0y~yU;#2&7&zE~RK2WrGXn!-Yo@bvKyi?}lY*zKvzei# znVGJUo*@H+#>CQzJH4G91={zkcpYJO4UULd(jhjf!%gt5jR3#X1PR5!*-xGd3Dxcq z7u>jI!`2NS4jfZ3yLPMde}e)?mTJ@52#p&ZHtCZcnr1|neZPJG+?jXhnrtUsElP{E ze{$`UTSnC(*-pKkbM-AU7SGL-N}9E@|NMFO6`Aq;H?GvY58j#e`){^y=aQ9;YaJ_m zF8A*F&{I%gyk6T*pe%D{gwqeF8`&pVTjx)a)Bia8QOU%&TFXy!w5zqo9(q?IdVF=n zX$i}Rii!SuyBAJp4qQ`GZfp79BnRAdBB>{?{3T+FpDwzlCtw zom;5NC0l-BN6f0|%K3+sTed3}aJRc(Q2w`8d;hby={mkArX2*v3ul2xWHAGSm?{V} zdIqU{U|*m{7xg+Dpa*E8kvb=KI9hCf}`-O@uot@KwBM}S?p00i_>zopr0149x)Bpeg literal 0 HcmV?d00001 diff --git a/src/cocoa/MainMenu.xib b/src/cocoa/MainMenu.xib new file mode 100644 index 0000000..b1951c4 --- /dev/null +++ b/src/cocoa/MainMenu.xib @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cocoa/SaveFormatAccessory.xib b/src/cocoa/SaveFormatAccessory.xib new file mode 100644 index 0000000..3962b6a --- /dev/null +++ b/src/cocoa/SaveFormatAccessory.xib @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cocoa/cocoamain.mm b/src/cocoa/cocoamain.mm new file mode 100644 index 0000000..8d21e9c --- /dev/null +++ b/src/cocoa/cocoamain.mm @@ -0,0 +1,1366 @@ +//----------------------------------------------------------------------------- +// Our main() function, and Cocoa-specific stuff to set up our windows and +// otherwise handle our interface to the operating system. Everything +// outside gtk/... should be standard C++ and OpenGL. +// +// Copyright 2015 +//----------------------------------------------------------------------------- +#include +#include + +#import + +#include +#include + +#include "solvespace.h" +#include "../unix/gloffscreen.h" +#include + +using SolveSpace::dbp; + +#define GL_CHECK() \ + do { \ + int err = (int)glGetError(); \ + if(err) dbp("%s:%d: glGetError() == 0x%X", __FILE__, __LINE__, err); \ + } while (0) + +/* Settings */ + +namespace SolveSpace { +void CnfFreezeInt(uint32_t val, const std::string &key) { + [[NSUserDefaults standardUserDefaults] + setInteger:val forKey:[NSString stringWithUTF8String:key.c_str()]]; +} + +uint32_t CnfThawInt(uint32_t val, const std::string &key) { + NSString *nsKey = [NSString stringWithUTF8String:key.c_str()]; + if([[NSUserDefaults standardUserDefaults] objectForKey:nsKey]) + return [[NSUserDefaults standardUserDefaults] integerForKey:nsKey]; + return val; +} + +void CnfFreezeFloat(float val, const std::string &key) { + [[NSUserDefaults standardUserDefaults] + setFloat:val forKey:[NSString stringWithUTF8String:key.c_str()]]; +} + +float CnfThawFloat(float val, const std::string &key) { + NSString *nsKey = [NSString stringWithUTF8String:key.c_str()]; + if([[NSUserDefaults standardUserDefaults] objectForKey:nsKey]) + return [[NSUserDefaults standardUserDefaults] floatForKey:nsKey]; + return val; +} + +void CnfFreezeString(const std::string &val, const std::string &key) { + [[NSUserDefaults standardUserDefaults] + setObject:[NSString stringWithUTF8String:val.c_str()] + forKey:[NSString stringWithUTF8String:key.c_str()]]; +} + +std::string CnfThawString(const std::string &val, const std::string &key) { + NSString *nsKey = [NSString stringWithUTF8String:key.c_str()]; + if([[NSUserDefaults standardUserDefaults] objectForKey:nsKey]) { + NSString *nsNewVal = [[NSUserDefaults standardUserDefaults] stringForKey:nsKey]; + return [nsNewVal UTF8String]; + } + return val; +} +}; + +/* Timer */ + +int64_t SolveSpace::GetMilliseconds(void) { + clock_serv_t cclock; + mach_timespec_t mts; + + host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &cclock); + clock_get_time(cclock, &mts); + mach_port_deallocate(mach_task_self(), cclock); + + return mts.tv_sec * 1000 + mts.tv_nsec / 1000000; +} + +@interface DeferredHandler : NSObject ++ (void) runLater:(id)dummy; ++ (void) runCallback; ++ (void) doAutosave; +@end + +@implementation DeferredHandler ++ (void) runLater:(id)dummy { + SolveSpace::SS.DoLater(); +} ++ (void) runCallback { + SolveSpace::SS.GW.TimerCallback(); + SolveSpace::SS.TW.TimerCallback(); +} ++ (void) doAutosave { + SolveSpace::SS.Autosave(); +} +@end + +static void Schedule(SEL selector, double interval) { + NSMethodSignature *signature = [[DeferredHandler class] + methodSignatureForSelector:selector]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; + [invocation setSelector:selector]; + [invocation setTarget:[DeferredHandler class]]; + [NSTimer scheduledTimerWithTimeInterval:interval + invocation:invocation repeats:NO]; +} + +void SolveSpace::SetTimerFor(int milliseconds) { + Schedule(@selector(runCallback), milliseconds / 1000.0); +} + +void SolveSpace::SetAutosaveTimerFor(int minutes) { + Schedule(@selector(doAutosave), minutes * 60.0); +} + +void SolveSpace::ScheduleLater() { + [[NSRunLoop currentRunLoop] + performSelector:@selector(runLater:) + target:[DeferredHandler class] argument:nil + order:0 modes:@[NSDefaultRunLoopMode]]; +} + +/* OpenGL view */ + +@interface GLViewWithEditor : NSView +- (void)drawGL; + +@property BOOL wantsBackingStoreScaling; + +@property(readonly, getter=isEditing) BOOL editing; +- (void)startEditing:(NSString*)text at:(NSPoint)origin withHeight:(double)fontHeight + usingMonospace:(BOOL)isMonospace; +- (void)stopEditing; +- (void)didEdit:(NSString*)text; +@end + +@implementation GLViewWithEditor +{ + GLOffscreen *offscreen; + NSOpenGLContext *glContext; +@protected + NSTextField *editor; +} + +- initWithFrame:(NSRect)frameRect { + self = [super initWithFrame:frameRect]; + [self setWantsLayer:YES]; + + NSOpenGLPixelFormatAttribute attrs[] = { + NSOpenGLPFAColorSize, 24, + NSOpenGLPFADepthSize, 24, + 0 + }; + NSOpenGLPixelFormat *pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs]; + glContext = [[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:NULL]; + + editor = [[NSTextField alloc] init]; + [editor setEditable:YES]; + [[editor cell] setWraps:NO]; + [[editor cell] setScrollable:YES]; + [editor setBezeled:NO]; + [editor setTarget:self]; + [editor setAction:@selector(editorAction:)]; + + return self; +} + +- (void)dealloc { + delete offscreen; +} + +#define CONVERT1(name, to_from) \ + - (NS##name)convert##name##to_from##Backing:(NS##name)input { \ + return _wantsBackingStoreScaling ? [super convert##name##to_from##Backing:input] : input; } +#define CONVERT(name) CONVERT1(name, To) CONVERT1(name, From) +CONVERT(Size) +CONVERT(Rect) +#undef CONVERT +#undef CONVERT1 + +- (NSPoint)convertPointToBacking:(NSPoint)input { + if(_wantsBackingStoreScaling) return [super convertPointToBacking:input]; + else { + input.y *= -1; + return input; + } +} + +- (NSPoint)convertPointFromBacking:(NSPoint)input { + if(_wantsBackingStoreScaling) return [super convertPointFromBacking:input]; + else { + input.y *= -1; + return input; + } +} + +- (void)drawRect:(NSRect)aRect { + [glContext makeCurrentContext]; + + if(!offscreen) + offscreen = new GLOffscreen; + + NSSize size = [self convertSizeToBacking:[self bounds].size]; + offscreen->begin(size.width, size.height); + + [self drawGL]; + GL_CHECK(); + + uint8_t *pixels = offscreen->end(![self isFlipped]); + CGDataProviderRef provider = CGDataProviderCreateWithData( + NULL, pixels, size.width * size.height * 4, NULL); + CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB(); + CGImageRef image = CGImageCreate(size.width, size.height, 8, 32, + size.width * 4, colorspace, kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst, + provider, NULL, true, kCGRenderingIntentDefault); + + CGContextDrawImage((CGContextRef) [[NSGraphicsContext currentContext] graphicsPort], + [self bounds], image); + + CGImageRelease(image); + CGDataProviderRelease(provider); +} + +- (void)drawGL { +} + +@synthesize editing; + +- (void)startEditing:(NSString*)text at:(NSPoint)origin withHeight:(double)fontHeight + usingMonospace:(BOOL)isMonospace { + if(!self->editing) { + [self addSubview:editor]; + self->editing = YES; + } + + NSFont *font; + if(isMonospace) + font = [NSFont fontWithName:@"Monaco" size:fontHeight]; + else + font = [NSFont controlContentFontOfSize:fontHeight]; + [editor setFont:font]; + + origin.x -= 3; /* left padding; no way to get it from NSTextField */ + origin.y -= [editor intrinsicContentSize].height; + origin.y += [editor baselineOffsetFromBottom]; + + [editor setFrameOrigin:origin]; + [editor setStringValue:text]; + [[self window] makeFirstResponder:editor]; +} + +- (void)stopEditing { + if(self->editing) { + [editor removeFromSuperview]; + self->editing = NO; + } +} + +- (void)editorAction:(id)sender { + [self didEdit:[editor stringValue]]; + [self stopEditing]; +} + +- (void)didEdit:(NSString*)text { +} +@end + +/* Graphics window */ + +@interface GraphicsWindowView : GLViewWithEditor +{ + NSTrackingArea *trackingArea; +} + +@property(readonly) NSEvent *lastContextMenuEvent; +@end + +@implementation GraphicsWindowView +- (BOOL)isFlipped { + return YES; +} + +- (void)drawGL { + SolveSpace::SS.GW.Paint(); +} + +- (BOOL)acceptsFirstResponder { + return YES; +} + +- (void) createTrackingArea { + trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] + options:(NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | + NSTrackingActiveInKeyWindow) + owner:self userInfo:nil]; + [self addTrackingArea:trackingArea]; +} + +- (void) updateTrackingAreas +{ + [self removeTrackingArea:trackingArea]; + [self createTrackingArea]; + [super updateTrackingAreas]; +} + +- (void)mouseMoved:(NSEvent*)event { + NSPoint point = [self ij_to_xy:[self convertPoint:[event locationInWindow] fromView:nil]]; + NSUInteger flags = [event modifierFlags]; + NSUInteger buttons = [NSEvent pressedMouseButtons]; + SolveSpace::SS.GW.MouseMoved(point.x, point.y, + buttons & (1 << 0), + buttons & (1 << 2), + buttons & (1 << 1), + flags & NSShiftKeyMask, + flags & NSCommandKeyMask); +} + +- (void)mouseDragged:(NSEvent*)event { + [self mouseMoved:event]; +} + +- (void)rightMouseDragged:(NSEvent*)event { + [self mouseMoved:event]; +} + +- (void)otherMouseDragged:(NSEvent*)event { + [self mouseMoved:event]; +} + +- (void)mouseDown:(NSEvent*)event { + NSPoint point = [self ij_to_xy:[self convertPoint:[event locationInWindow] fromView:nil]]; + if([event clickCount] == 1) + SolveSpace::SS.GW.MouseLeftDown(point.x, point.y); + else if([event clickCount] == 2) + SolveSpace::SS.GW.MouseLeftDoubleClick(point.x, point.y); +} + +- (void)rightMouseDown:(NSEvent*)event { + NSPoint point = [self ij_to_xy:[self convertPoint:[event locationInWindow] fromView:nil]]; + SolveSpace::SS.GW.MouseMiddleOrRightDown(point.x, point.y); +} + +- (void)otherMouseDown:(NSEvent*)event { + [self rightMouseDown:event]; +} + +- (void)mouseUp:(NSEvent*)event { + NSPoint point = [self ij_to_xy:[self convertPoint:[event locationInWindow] fromView:nil]]; + SolveSpace::SS.GW.MouseLeftUp(point.x, point.y); +} + +- (void)rightMouseUp:(NSEvent*)event { + NSPoint point = [self ij_to_xy:[self convertPoint:[event locationInWindow] fromView:nil]]; + self->_lastContextMenuEvent = event; + SolveSpace::SS.GW.MouseRightUp(point.x, point.y); +} + +- (void)scrollWheel:(NSEvent*)event { + NSPoint point = [self ij_to_xy:[self convertPoint:[event locationInWindow] fromView:nil]]; + SolveSpace::SS.GW.MouseScroll(point.x, point.y, -[event deltaY]); +} + +- (void)mouseExited:(NSEvent*)event { + SolveSpace::SS.GW.MouseLeave(); +} + +- (void)keyDown:(NSEvent*)event { + int chr = 0; + if(NSString *nsChr = [event charactersIgnoringModifiers]) + chr = [nsChr characterAtIndex:0]; + + if(chr == NSDeleteCharacter) /* map delete back to backspace */ + chr = '\b'; + if(chr >= NSF1FunctionKey && chr <= NSF12FunctionKey) + chr = SolveSpace::GraphicsWindow::FUNCTION_KEY_BASE + (chr - NSF1FunctionKey); + + NSUInteger flags = [event modifierFlags]; + if(flags & NSShiftKeyMask) + chr |= SolveSpace::GraphicsWindow::SHIFT_MASK; + if(flags & NSCommandKeyMask) + chr |= SolveSpace::GraphicsWindow::CTRL_MASK; + + // override builtin behavior: "focus on next cell", "close window" + if(chr == '\t' || chr == '\x1b') + [[NSApp mainMenu] performKeyEquivalent:event]; + else if(!chr || !SolveSpace::SS.GW.KeyDown(chr)) + [super keyDown:event]; +} + +- (void)startEditing:(NSString*)text at:(NSPoint)xy withHeight:(double)fontHeight + withMinWidthInChars:(int)minWidthChars { + // Convert to ij (vs. xy) style coordinates + NSSize size = [self convertSizeToBacking:[self bounds].size]; + NSPoint point = { + .x = xy.x + size.width / 2, + .y = xy.y - size.height / 2 + }; + [[self window] makeKeyWindow]; + [super startEditing:text at:[self convertPointFromBacking:point] + withHeight:fontHeight usingMonospace:FALSE]; + [self prepareEditorWithMinWidthInChars:minWidthChars]; +} + +- (void)prepareEditorWithMinWidthInChars:(int)minWidthChars { + NSFont *font = [editor font]; + NSGlyph glyphA = [font glyphWithName:@"a"]; + if(glyphA == -1) oops(); + CGFloat glyphAWidth = [font advancementForGlyph:glyphA].width; + + [editor sizeToFit]; + + NSSize frameSize = [editor frame].size; + frameSize.width = std::max(frameSize.width, glyphAWidth * minWidthChars); + [editor setFrameSize:frameSize]; +} + +- (void)didEdit:(NSString*)text { + SolveSpace::SS.GW.EditControlDone([text UTF8String]); + [self setNeedsDisplay:YES]; +} + +- (void)cancelOperation:(id)sender { + [self stopEditing]; +} + +- (NSPoint)ij_to_xy:(NSPoint)ij { + // Convert to xy (vs. ij) style coordinates, + // with (0, 0) at center + NSSize size = [self bounds].size; + return [self convertPointToBacking:(NSPoint){ + .x = ij.x - size.width / 2, .y = ij.y - size.height / 2 }]; +} +@end + +@interface GraphicsWindowDelegate : NSObject +- (BOOL)windowShouldClose:(id)sender; + +@property(readonly, getter=isFullscreen) BOOL fullscreen; +- (void)windowDidEnterFullScreen:(NSNotification *)notification; +- (void)windowDidExitFullScreen:(NSNotification *)notification; +@end + +@implementation GraphicsWindowDelegate +- (BOOL)windowShouldClose:(id)sender { + [NSApp terminate:sender]; + return FALSE; /* in case NSApp changes its mind */ +} + +@synthesize fullscreen; +- (void)windowDidEnterFullScreen:(NSNotification *)notification { + fullscreen = true; + /* Update the menus */ + SolveSpace::SS.GW.EnsureValidActives(); +} +- (void)windowDidExitFullScreen:(NSNotification *)notification { + fullscreen = false; + /* Update the menus */ + SolveSpace::SS.GW.EnsureValidActives(); +} +@end + +static NSWindow *GW; +static GraphicsWindowView *GWView; +static GraphicsWindowDelegate *GWDelegate; + +namespace SolveSpace { +void InitGraphicsWindow() { + GW = [[NSWindow alloc] init]; + GWDelegate = [[GraphicsWindowDelegate alloc] init]; + [GW setDelegate:GWDelegate]; + [GW setStyleMask:(NSTitledWindowMask | NSClosableWindowMask | + NSMiniaturizableWindowMask | NSResizableWindowMask)]; + [GW setFrameAutosaveName:@"GraphicsWindow"]; + [GW setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary]; + if(![GW setFrameUsingName:[GW frameAutosaveName]]) + [GW setContentSize:(NSSize){ .width = 600, .height = 600 }]; + GWView = [[GraphicsWindowView alloc] init]; + [GW setContentView:GWView]; +} + +void GetGraphicsWindowSize(int *w, int *h) { + NSSize size = [GWView convertSizeToBacking:[GWView frame].size]; + *w = size.width; + *h = size.height; +} + +void InvalidateGraphics(void) { + [GWView setNeedsDisplay:YES]; +} + +void PaintGraphics(void) { + [GWView setNeedsDisplay:YES]; + CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, YES); +} + +void SetCurrentFilename(const std::string &filename) { + if(!filename.empty()) { + [GW setTitleWithRepresentedFilename:[NSString stringWithUTF8String:filename.c_str()]]; + } else { + [GW setTitle:@"(new sketch)"]; + [GW setRepresentedFilename:@""]; + } +} + +void ToggleFullScreen(void) { + [GW toggleFullScreen:nil]; +} + +bool FullScreenIsActive(void) { + return [GWDelegate isFullscreen]; +} + +void ShowGraphicsEditControl(int x, int y, int fontHeight, int minWidthChars, + const std::string &str) { + [GWView startEditing:[NSString stringWithUTF8String:str.c_str()] + at:(NSPoint){(CGFloat)x, (CGFloat)y} + withHeight:fontHeight + withMinWidthInChars:minWidthChars]; +} + +void HideGraphicsEditControl(void) { + [GWView stopEditing]; +} + +bool GraphicsEditControlIsVisible(void) { + return [GWView isEditing]; +} +} + +/* Context menus */ + +static int contextMenuChoice; + +@interface ContextMenuResponder : NSObject ++ (void)handleClick:(id)sender; +@end + +@implementation ContextMenuResponder ++ (void)handleClick:(id)sender { + contextMenuChoice = [sender tag]; +} +@end + +namespace SolveSpace { +NSMenu *contextMenu, *contextSubmenu; + +void AddContextMenuItem(const char *label, int id_) { + NSMenuItem *menuItem; + if(label) { + menuItem = [[NSMenuItem alloc] initWithTitle:[NSString stringWithUTF8String:label] + action:@selector(handleClick:) keyEquivalent:@""]; + [menuItem setTarget:[ContextMenuResponder class]]; + [menuItem setTag:id_]; + } else { + menuItem = [NSMenuItem separatorItem]; + } + + if(id_ == CONTEXT_SUBMENU) { + [menuItem setSubmenu:contextSubmenu]; + contextSubmenu = nil; + } + + if(contextSubmenu) { + [contextSubmenu addItem:menuItem]; + } else { + if(!contextMenu) { + contextMenu = [[NSMenu alloc] + initWithTitle:[NSString stringWithUTF8String:label]]; + } + + [contextMenu addItem:menuItem]; + } +} + +void CreateContextSubmenu(void) { + if(contextSubmenu) oops(); + + contextSubmenu = [[NSMenu alloc] initWithTitle:@""]; +} + +int ShowContextMenu(void) { + if(!contextMenu) + return -1; + + [NSMenu popUpContextMenu:contextMenu + withEvent:[GWView lastContextMenuEvent] forView:GWView]; + + contextMenu = nil; + + return contextMenuChoice; +} +}; + +/* Main menu */ + +@interface MainMenuResponder : NSObject ++ (void)handleStatic:(id)sender; ++ (void)handleRecent:(id)sender; +@end + +@implementation MainMenuResponder ++ (void)handleStatic:(id)sender { + SolveSpace::GraphicsWindow::MenuEntry *entry = + (SolveSpace::GraphicsWindow::MenuEntry*)[sender tag]; + + if(entry->fn && ![(NSMenuItem*)sender hasSubmenu]) + entry->fn(entry->id); +} + ++ (void)handleRecent:(id)sender { + int id_ = [sender tag]; + if(id_ >= RECENT_OPEN && id_ < (RECENT_OPEN + MAX_RECENT)) + SolveSpace::SolveSpaceUI::MenuFile(id_); + else if(id_ >= RECENT_LINK && id_ < (RECENT_LINK + MAX_RECENT)) + SolveSpace::Group::MenuGroup(id_); +} +@end + +namespace SolveSpace { +std::map mainMenuItems; + +void InitMainMenu(NSMenu *mainMenu) { + NSMenuItem *menuItem = NULL; + NSMenu *levels[5] = {mainMenu, 0}; + NSString *label; + + const GraphicsWindow::MenuEntry *entry = &GraphicsWindow::menu[0]; + int current_level = 0; + while(entry->level >= 0) { + if(entry->level > current_level) { + NSMenu *menu = [[NSMenu alloc] initWithTitle:label]; + [menu setAutoenablesItems:NO]; + [menuItem setSubmenu:menu]; + + if(entry->level >= sizeof(levels) / sizeof(levels[0])) + oops(); + + levels[entry->level] = menu; + } + + current_level = entry->level; + + if(entry->label) { + /* OS X does not support mnemonics */ + label = [[NSString stringWithUTF8String:entry->label] + stringByReplacingOccurrencesOfString:@"&" withString:@""]; + + unichar accel_char = entry->accel & + ~(GraphicsWindow::SHIFT_MASK | GraphicsWindow::CTRL_MASK); + if(accel_char > GraphicsWindow::FUNCTION_KEY_BASE && + accel_char <= GraphicsWindow::FUNCTION_KEY_BASE + 12) + accel_char = NSF1FunctionKey + (accel_char - GraphicsWindow::FUNCTION_KEY_BASE - 1); + NSString *accel = [NSString stringWithCharacters:&accel_char length:1]; + + menuItem = [levels[entry->level] addItemWithTitle:label + action:NULL keyEquivalent:[accel lowercaseString]]; + + NSUInteger modifierMask = 0; + if(entry->accel & GraphicsWindow::SHIFT_MASK) + modifierMask |= NSShiftKeyMask; + else if(entry->accel & GraphicsWindow::CTRL_MASK) + modifierMask |= NSCommandKeyMask; + [menuItem setKeyEquivalentModifierMask:modifierMask]; + + [menuItem setTag:(NSInteger)entry]; + [menuItem setTarget:[MainMenuResponder class]]; + [menuItem setAction:@selector(handleStatic:)]; + } else { + [levels[entry->level] addItem:[NSMenuItem separatorItem]]; + } + + mainMenuItems[entry->id] = menuItem; + + ++entry; + } +} + +void EnableMenuById(int id_, bool enabled) { + [mainMenuItems[id_] setEnabled:enabled]; +} + +void CheckMenuById(int id_, bool checked) { + [mainMenuItems[id_] setState:(checked ? NSOnState : NSOffState)]; +} + +void RadioMenuById(int id_, bool selected) { + CheckMenuById(id_, selected); +} + +static void RefreshRecentMenu(int id_, int base) { + NSMenuItem *recent = mainMenuItems[id_]; + NSMenu *menu = [[NSMenu alloc] initWithTitle:@""]; + [recent setSubmenu:menu]; + + if(std::string(RecentFile[0]).empty()) { + NSMenuItem *placeholder = [[NSMenuItem alloc] + initWithTitle:@"(no recent files)" action:nil keyEquivalent:@""]; + [placeholder setEnabled:NO]; + [menu addItem:placeholder]; + } else { + for(int i = 0; i < MAX_RECENT; i++) { + if(std::string(RecentFile[i]).empty()) + break; + + NSMenuItem *item = [[NSMenuItem alloc] + initWithTitle:[[NSString stringWithUTF8String:RecentFile[i].c_str()] + stringByAbbreviatingWithTildeInPath] + action:nil keyEquivalent:@""]; + [item setTag:(base + i)]; + [item setAction:@selector(handleRecent:)]; + [item setTarget:[MainMenuResponder class]]; + [menu addItem:item]; + } + } +} + +void RefreshRecentMenus(void) { + RefreshRecentMenu(GraphicsWindow::MNU_OPEN_RECENT, RECENT_OPEN); + RefreshRecentMenu(GraphicsWindow::MNU_GROUP_RECENT, RECENT_LINK); +} + +void ToggleMenuBar(void) { + [NSMenu setMenuBarVisible:![NSMenu menuBarVisible]]; +} + +bool MenuBarIsVisible(void) { + return [NSMenu menuBarVisible]; +} +} + +/* Save/load */ + +bool SolveSpace::GetOpenFile(std::string *file, const std::string &defExtension, + const FileFilter ssFilters[]) { + NSOpenPanel *panel = [NSOpenPanel openPanel]; + NSMutableArray *filters = [[NSMutableArray alloc] init]; + for(const FileFilter *ssFilter = ssFilters; ssFilter->name; ssFilter++) { + for(const char *const *ssPattern = ssFilter->patterns; *ssPattern; ssPattern++) { + [filters addObject:[NSString stringWithUTF8String:*ssPattern]]; + } + } + [filters removeObjectIdenticalTo:@"*"]; + [panel setAllowedFileTypes:filters]; + + if([panel runModal] == NSFileHandlingPanelOKButton) { + *file = [[NSFileManager defaultManager] + fileSystemRepresentationWithPath:[[panel URL] path]]; + return true; + } else { + return false; + } +} + +@interface SaveFormatController : NSViewController +@property NSSavePanel *panel; +@property NSArray *extensions; +@property (nonatomic) IBOutlet NSPopUpButton *button; +@property (nonatomic) NSInteger index; +@end + +@implementation SaveFormatController +@synthesize panel, extensions, button, index; +- (void)setIndex:(NSInteger)newIndex { + self->index = newIndex; + NSString *extension = [extensions objectAtIndex:newIndex]; + if(![extension isEqual:@"*"]) { + NSString *filename = [panel nameFieldStringValue]; + NSString *basename = [[filename componentsSeparatedByString:@"."] objectAtIndex:0]; + [panel setNameFieldStringValue:[basename stringByAppendingPathExtension:extension]]; + } +} +@end + +bool SolveSpace::GetSaveFile(std::string *file, const std::string &defExtension, + const FileFilter ssFilters[]) { + NSSavePanel *panel = [NSSavePanel savePanel]; + + SaveFormatController *controller = + [[SaveFormatController alloc] initWithNibName:@"SaveFormatAccessory" bundle:nil]; + [controller setPanel:panel]; + [panel setAccessoryView:[controller view]]; + + NSMutableArray *extensions = [[NSMutableArray alloc] init]; + [controller setExtensions:extensions]; + + NSPopUpButton *button = [controller button]; + [button removeAllItems]; + for(const FileFilter *ssFilter = ssFilters; ssFilter->name; ssFilter++) { + std::string desc; + for(const char *const *ssPattern = ssFilter->patterns; *ssPattern; ssPattern++) { + if(desc == "") { + desc = *ssPattern; + } else { + desc += ", "; + desc += *ssPattern; + } + } + std::string title = std::string(ssFilter->name) + " (" + desc + ")"; + [button addItemWithTitle:[NSString stringWithUTF8String:title.c_str()]]; + [extensions addObject:[NSString stringWithUTF8String:ssFilter->patterns[0]]]; + } + + int extensionIndex = 0; + if(defExtension != "") { + extensionIndex = [extensions indexOfObject: + [NSString stringWithUTF8String:defExtension.c_str()]]; + } + + [button selectItemAtIndex:extensionIndex]; + [panel setNameFieldStringValue:[@"untitled" + stringByAppendingPathExtension:[extensions objectAtIndex:extensionIndex]]]; + + if([panel runModal] == NSFileHandlingPanelOKButton) { + *file = [[NSFileManager defaultManager] + fileSystemRepresentationWithPath:[[panel URL] path]]; + return true; + } else { + return false; + } +} + +SolveSpace::DialogChoice SolveSpace::SaveFileYesNoCancel(void) { + NSAlert *alert = [[NSAlert alloc] init]; + if(!std::string(SolveSpace::SS.saveFile).empty()) { + [alert setMessageText: + [[@"Do you want to save the changes you made to the sketch “" + stringByAppendingString: + [[NSString stringWithUTF8String:SolveSpace::SS.saveFile.c_str()] + stringByAbbreviatingWithTildeInPath]] + stringByAppendingString:@"”?"]]; + } else { + [alert setMessageText:@"Do you want to save the changes you made to the new sketch?"]; + } + [alert setInformativeText:@"Your changes will be lost if you don't save them."]; + [alert addButtonWithTitle:@"Save"]; + [alert addButtonWithTitle:@"Cancel"]; + [alert addButtonWithTitle:@"Don't Save"]; + switch([alert runModal]) { + case NSAlertFirstButtonReturn: + return DIALOG_YES; + case NSAlertSecondButtonReturn: + default: + return DIALOG_CANCEL; + case NSAlertThirdButtonReturn: + return DIALOG_NO; + } +} + +SolveSpace::DialogChoice SolveSpace::LoadAutosaveYesNo(void) { + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText: + @"An autosave file is availible for this project."]; + [alert setInformativeText: + @"Do you want to load the autosave file instead?"]; + [alert addButtonWithTitle:@"Load"]; + [alert addButtonWithTitle:@"Don't Load"]; + switch([alert runModal]) { + case NSAlertFirstButtonReturn: + return DIALOG_YES; + case NSAlertSecondButtonReturn: + default: + return DIALOG_NO; + } +} + +SolveSpace::DialogChoice SolveSpace::LocateImportedFileYesNoCancel( + const std::string &filename, bool canCancel) { + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText:[NSString stringWithUTF8String: + ("The linked file " + filename + " is not present.").c_str()]]; + [alert setInformativeText: + @"Do you want to locate it manually?\n" + "If you select \"No\", any geometry that depends on " + "the missing file will be removed."]; + [alert addButtonWithTitle:@"Yes"]; + if(canCancel) + [alert addButtonWithTitle:@"Cancel"]; + [alert addButtonWithTitle:@"No"]; + switch([alert runModal]) { + case NSAlertFirstButtonReturn: + return DIALOG_YES; + case NSAlertSecondButtonReturn: + default: + if(canCancel) + return DIALOG_CANCEL; + /* fallthrough */ + case NSAlertThirdButtonReturn: + return DIALOG_NO; + } +} + +/* Text window */ + +@interface TextWindowView : GLViewWithEditor +{ + NSTrackingArea *trackingArea; +} + +@property (nonatomic, getter=isCursorHand) BOOL cursorHand; +@end + +@implementation TextWindowView +- (BOOL)isFlipped { + return YES; +} + +- (void)drawGL { + SolveSpace::SS.TW.Paint(); +} + +- (BOOL)acceptsFirstMouse:(NSEvent*)event { + return YES; +} + +- (void) createTrackingArea { + trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] + options:(NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | + NSTrackingActiveAlways) + owner:self userInfo:nil]; + [self addTrackingArea:trackingArea]; +} + +- (void) updateTrackingAreas +{ + [self removeTrackingArea:trackingArea]; + [self createTrackingArea]; + [super updateTrackingAreas]; +} + +- (void)mouseMoved:(NSEvent*)event { + NSPoint point = [self convertPointToBacking: + [self convertPoint:[event locationInWindow] fromView:nil]]; + SolveSpace::SS.TW.MouseEvent(/*leftClick*/ false, /*leftDown*/ false, + point.x, -point.y); +} + +- (void)mouseDown:(NSEvent*)event { + NSPoint point = [self convertPointToBacking: + [self convertPoint:[event locationInWindow] fromView:nil]]; + SolveSpace::SS.TW.MouseEvent(/*leftClick*/ true, /*leftDown*/ true, + point.x, -point.y); +} + +- (void)mouseDragged:(NSEvent*)event { + NSPoint point = [self convertPointToBacking: + [self convertPoint:[event locationInWindow] fromView:nil]]; + SolveSpace::SS.TW.MouseEvent(/*leftClick*/ false, /*leftDown*/ true, + point.x, -point.y); +} + +- (void)setCursorHand:(BOOL)cursorHand { + if(_cursorHand != cursorHand) { + if(cursorHand) + [[NSCursor pointingHandCursor] push]; + else + [NSCursor pop]; + } + _cursorHand = cursorHand; +} + +- (void)mouseExited:(NSEvent*)event { + [self setCursorHand:FALSE]; + SolveSpace::SS.TW.MouseLeave(); +} + +- (void)startEditing:(NSString*)text at:(NSPoint)point { + point = [self convertPointFromBacking:point]; + point.y = -point.y + 2; + [[self window] makeKeyWindow]; + [super startEditing:text at:point withHeight:15.0 usingMonospace:TRUE]; + [editor setFrameSize:(NSSize){ + .width = [self bounds].size.width - [editor frame].origin.x, + .height = [editor intrinsicContentSize].height }]; +} + +- (void)stopEditing { + [super stopEditing]; + [GW makeKeyWindow]; +} + +- (void)didEdit:(NSString*)text { + SolveSpace::SS.TW.EditControlDone([text UTF8String]); +} + +- (void)cancelOperation:(id)sender { + [self stopEditing]; +} +@end + +@interface TextWindowDelegate : NSObject +- (BOOL)windowShouldClose:(id)sender; +- (void)windowDidResize:(NSNotification *)notification; +@end + +@implementation TextWindowDelegate +- (BOOL)windowShouldClose:(id)sender { + SolveSpace::GraphicsWindow::MenuView(SolveSpace::GraphicsWindow::MNU_SHOW_TEXT_WND); + return NO; +} + +- (void)windowDidResize:(NSNotification *)notification { + NSClipView *view = [[[notification object] contentView] contentView]; + NSView *document = [view documentView]; + NSSize size = [document frame].size; + size.width = [view frame].size.width; + [document setFrameSize:size]; +} +@end + +static NSPanel *TW; +static TextWindowView *TWView; +static TextWindowDelegate *TWDelegate; + +namespace SolveSpace { +void InitTextWindow() { + TW = [[NSPanel alloc] init]; + TWDelegate = [[TextWindowDelegate alloc] init]; + [TW setStyleMask:(NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask | + NSUtilityWindowMask)]; + [[TW standardWindowButton:NSWindowMiniaturizeButton] setHidden:YES]; + [[TW standardWindowButton:NSWindowZoomButton] setHidden:YES]; + [TW setTitle:@"Property Browser"]; + [TW setFrameAutosaveName:@"TextWindow"]; + [TW setFloatingPanel:YES]; + [TW setBecomesKeyOnlyIfNeeded:YES]; + [GW addChildWindow:TW ordered:NSWindowAbove]; + + // Without this, graphics window is also hidden when the text window is shown + // (and is its child window). We replicate the standard behavior manually, in + // the application delegate; + [TW setHidesOnDeactivate:NO]; + + NSScrollView *scrollView = [[NSScrollView alloc] init]; + [TW setContentView:scrollView]; + [scrollView setBackgroundColor:[NSColor blackColor]]; + [scrollView setHasVerticalScroller:YES]; + [[scrollView contentView] setCopiesOnScroll:YES]; + + TWView = [[TextWindowView alloc] init]; + [scrollView setDocumentView:TWView]; + + [TW setDelegate:TWDelegate]; + if(![TW setFrameUsingName:[TW frameAutosaveName]]) + [TW setContentSize:(NSSize){ .width = 420, .height = 300 }]; + [TWView setFrame:[[scrollView contentView] frame]]; +} + +void ShowTextWindow(bool visible) { + if(visible) + [GW addChildWindow:TW ordered:NSWindowAbove]; + else + [TW orderOut:GW]; +} + +void GetTextWindowSize(int *w, int *h) { + NSSize size = [TWView convertSizeToBacking:[TWView frame].size]; + *w = size.width; + *h = size.height; +} + +void InvalidateText(void) { + NSSize size = [TWView convertSizeToBacking:[TWView frame].size]; + size.height = (SS.TW.top[SS.TW.rows - 1] + 1) * TextWindow::LINE_HEIGHT / 2; + [TWView setFrameSize:[TWView convertSizeFromBacking:size]]; + [TWView setNeedsDisplay:YES]; +} + +void MoveTextScrollbarTo(int pos, int maxPos, int page) { + /* unused; we draw the entire text window and scroll in Cocoa */ +} + +void SetMousePointerToHand(bool is_hand) { + [TWView setCursorHand:is_hand]; +} + +void ShowTextEditControl(int x, int y, const std::string &str) { + return [TWView startEditing:[NSString stringWithUTF8String:str.c_str()] + at:(NSPoint){(CGFloat)x, (CGFloat)y}]; +} + +void HideTextEditControl(void) { + return [TWView stopEditing]; +} + +bool TextEditControlIsVisible(void) { + return [TWView isEditing]; +} +}; + +/* Miscellanea */ + +void SolveSpace::DoMessageBox(const char *str, int rows, int cols, bool error) { + NSAlert *alert = [[NSAlert alloc] init]; + [alert setAlertStyle:(error ? NSWarningAlertStyle : NSInformationalAlertStyle)]; + [[alert addButtonWithTitle:@"OK"] setKeyEquivalent: @"\033"]; + + /* do some additional formatting of the message these are + heuristics, but they are made failsafe and lead to nice results. */ + NSString *input = [NSString stringWithUTF8String:str]; + NSRange dot = [input rangeOfCharacterFromSet: + [NSCharacterSet characterSetWithCharactersInString:@".:"]]; + if(dot.location != NSNotFound) { + [alert setMessageText:[[input substringToIndex:dot.location + 1] + stringByReplacingOccurrencesOfString:@"\n" withString:@" "]]; + [alert setInformativeText: + [[input substringFromIndex:dot.location + 1] + stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]]; + } else { + [alert setMessageText:[input + stringByReplacingOccurrencesOfString:@"\n" withString:@" "]]; + } + + [alert runModal]; +} + +void SolveSpace::OpenWebsite(const char *url) { + [[NSWorkspace sharedWorkspace] openURL: + [NSURL URLWithString:[NSString stringWithUTF8String:url]]]; +} + +std::vector SolveSpace::GetFontFiles() { + std::vector fonts; + + NSArray *fontNames = [[NSFontManager sharedFontManager] availableFonts]; + for(NSString *fontName in fontNames) { + CTFontDescriptorRef fontRef = + CTFontDescriptorCreateWithNameAndSize ((__bridge CFStringRef)fontName, 10.0); + CFURLRef url = (CFURLRef)CTFontDescriptorCopyAttribute(fontRef, kCTFontURLAttribute); + NSString *fontPath = [NSString stringWithString:[(NSURL *)CFBridgingRelease(url) path]]; + fonts.push_back([[NSFileManager defaultManager] + fileSystemRepresentationWithPath:fontPath]); + } + + return fonts; +} + +/* Application lifecycle */ + +@interface ApplicationDelegate : NSObject +- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication; +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender; +- (void)applicationWillTerminate:(NSNotification *)aNotification; +- (void)applicationWillBecomeActive:(NSNotification *)aNotification; +- (void)applicationWillResignActive:(NSNotification *)aNotification; +- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename; +- (IBAction)preferences:(id)sender; +@end + +@implementation ApplicationDelegate +- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication { + return YES; +} + +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { + if(SolveSpace::SS.OkayToStartNewFile()) + return NSTerminateNow; + else + return NSTerminateCancel; +} + +- (void)applicationWillTerminate:(NSNotification *)aNotification { + SolveSpace::SS.Exit(); +} + +- (void)applicationWillBecomeActive:(NSNotification *)aNotification { + if(SolveSpace::SS.GW.showTextWindow) { + [GW addChildWindow:TW ordered:NSWindowAbove]; + } +} + +- (void)applicationWillResignActive:(NSNotification *)aNotification { + [TW setAnimationBehavior:NSWindowAnimationBehaviorNone]; + [TW orderOut:nil]; + [TW setAnimationBehavior:NSWindowAnimationBehaviorDefault]; +} + +- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename { + return SolveSpace::SS.OpenFile([filename UTF8String]); +} + +- (IBAction)preferences:(id)sender { + SolveSpace::SS.TW.GoToScreen(SolveSpace::TextWindow::SCREEN_CONFIGURATION); + SolveSpace::SS.ScheduleShowTW(); +} +@end + +void SolveSpace::ExitNow(void) { + [NSApp stop:nil]; +} + +/* + * Normally we would just link to the 3DconnexionClient framework. + * We don't want to (are not allowed to) distribute the official + * framework, so we're trying to use the one installed on the users + * computer. There are some different versions of the framework, + * the official one and re-implementations using an open source driver + * for older devices (spacenav-plus). So weak-linking isn't an option, + * either. The only remaining way is using CFBundle to dynamically + * load the library at runtime, and also detect its availability. + * + * We're also defining everything needed from the 3DconnexionClientAPI, + * so we're not depending on the API headers. + */ + +#pragma pack(push,2) + +enum { + kConnexionClientModeTakeOver = 1, + kConnexionClientModePlugin = 2 +}; + +#define kConnexionMsgDeviceState '3dSR' +#define kConnexionMaskButtons 0x00FF +#define kConnexionMaskAxis 0x3F00 + +typedef struct { + uint16_t version; + uint16_t client; + uint16_t command; + int16_t param; + int32_t value; + UInt64 time; + uint8_t report[8]; + uint16_t buttons8; + int16_t axis[6]; + uint16_t address; + uint32_t buttons; +} ConnexionDeviceState, *ConnexionDeviceStatePtr; + +#pragma pack(pop) + +typedef void (*ConnexionAddedHandlerProc)(io_connect_t); +typedef void (*ConnexionRemovedHandlerProc)(io_connect_t); +typedef void (*ConnexionMessageHandlerProc)(io_connect_t, natural_t, void *); + +typedef OSErr (*InstallConnexionHandlersProc)(ConnexionMessageHandlerProc, ConnexionAddedHandlerProc, ConnexionRemovedHandlerProc); +typedef void (*CleanupConnexionHandlersProc)(void); +typedef UInt16 (*RegisterConnexionClientProc)(UInt32, UInt8 *, UInt16, UInt32); +typedef void (*UnregisterConnexionClientProc)(UInt16); + +static BOOL connexionShiftIsDown = NO; +static UInt16 connexionClient = 0; +static UInt32 connexionSignature = 'SoSp'; +static UInt8 *connexionName = (UInt8 *)"SolveSpace"; +static CFBundleRef spaceBundle = NULL; +static InstallConnexionHandlersProc installConnexionHandlers = NULL; +static CleanupConnexionHandlersProc cleanupConnexionHandlers = NULL; +static RegisterConnexionClientProc registerConnexionClient = NULL; +static UnregisterConnexionClientProc unregisterConnexionClient = NULL; + +static void connexionAdded(io_connect_t con) {} +static void connexionRemoved(io_connect_t con) {} +static void connexionMessage(io_connect_t con, natural_t type, void *arg) { + if (type != kConnexionMsgDeviceState) { + return; + } + + ConnexionDeviceState *device = (ConnexionDeviceState *)arg; + + dispatch_async(dispatch_get_main_queue(), ^(void){ + SolveSpace::SS.GW.SpaceNavigatorMoved( + (double)device->axis[0] * -0.25, + (double)device->axis[1] * -0.25, + (double)device->axis[2] * 0.25, + (double)device->axis[3] * -0.0005, + (double)device->axis[4] * -0.0005, + (double)device->axis[5] * -0.0005, + (connexionShiftIsDown == YES) ? 1 : 0 + ); + }); +} + +static void connexionInit() { + NSString *bundlePath = @"/Library/Frameworks/3DconnexionClient.framework"; + NSURL *bundleURL = [NSURL fileURLWithPath:bundlePath]; + spaceBundle = CFBundleCreate(kCFAllocatorDefault, (__bridge CFURLRef)bundleURL); + + // Don't continue if no Spacemouse driver is installed on this machine + if (spaceBundle == NULL) { + return; + } + + installConnexionHandlers = (InstallConnexionHandlersProc) + CFBundleGetFunctionPointerForName(spaceBundle, + CFSTR("InstallConnexionHandlers")); + + cleanupConnexionHandlers = (CleanupConnexionHandlersProc) + CFBundleGetFunctionPointerForName(spaceBundle, + CFSTR("CleanupConnexionHandlers")); + + registerConnexionClient = (RegisterConnexionClientProc) + CFBundleGetFunctionPointerForName(spaceBundle, + CFSTR("RegisterConnexionClient")); + + unregisterConnexionClient = (UnregisterConnexionClientProc) + CFBundleGetFunctionPointerForName(spaceBundle, + CFSTR("UnregisterConnexionClient")); + + // Only continue if all required symbols have been loaded + if ((installConnexionHandlers == NULL) || (cleanupConnexionHandlers == NULL) + || (registerConnexionClient == NULL) || (unregisterConnexionClient == NULL)) { + CFRelease(spaceBundle); + spaceBundle = NULL; + return; + } + + installConnexionHandlers(&connexionMessage, &connexionAdded, &connexionRemoved); + connexionClient = registerConnexionClient(connexionSignature, connexionName, + kConnexionClientModeTakeOver, kConnexionMaskButtons | kConnexionMaskAxis); + + // Monitor modifier flags to detect Shift button state changes + [NSEvent addLocalMonitorForEventsMatchingMask:(NSKeyDownMask | NSFlagsChangedMask) + handler:^(NSEvent *event) { + if (event.modifierFlags & NSShiftKeyMask) { + connexionShiftIsDown = YES; + } + return event; + }]; + + [NSEvent addLocalMonitorForEventsMatchingMask:(NSKeyUpMask | NSFlagsChangedMask) + handler:^(NSEvent *event) { + if (!(event.modifierFlags & NSShiftKeyMask)) { + connexionShiftIsDown = NO; + } + return event; + }]; +} + +static void connexionClose() { + if (spaceBundle == NULL) { + return; + } + + unregisterConnexionClient(connexionClient); + cleanupConnexionHandlers(); + + CFRelease(spaceBundle); +} + +int main(int argc, const char *argv[]) { + [NSApplication sharedApplication]; + ApplicationDelegate *delegate = [[ApplicationDelegate alloc] init]; + [NSApp setDelegate:delegate]; + + SolveSpace::InitGraphicsWindow(); + SolveSpace::InitTextWindow(); + [[NSBundle mainBundle] loadNibNamed:@"MainMenu" owner:nil topLevelObjects:nil]; + SolveSpace::InitMainMenu([NSApp mainMenu]); + + connexionInit(); + SolveSpace::SS.Init(); + + [GW makeKeyAndOrderFront:nil]; + [NSApp run]; + + connexionClose(); + SolveSpace::SK.Clear(); + SolveSpace::SS.Clear(); + + return 0; +} diff --git a/src/config.h.in b/src/config.h.in new file mode 100644 index 0000000..aca7757 --- /dev/null +++ b/src/config.h.in @@ -0,0 +1,13 @@ +#ifndef __CONFIG_H +#define __CONFIG_H + +#define PACKAGE_VERSION "@solvespace_VERSION_MAJOR@.@solvespace_VERSION_MINOR@~@solvespace_GIT_HASH@" + +/* Do we have the si library on win32, or libspnav on *nix? */ +#cmakedefine HAVE_SPACEWARE + +#cmakedefine HAVE_GTK +#cmakedefine HAVE_GTK2 +#cmakedefine HAVE_GTK3 + +#endif diff --git a/src/confscreen.cpp b/src/confscreen.cpp new file mode 100644 index 0000000..a7ad678 --- /dev/null +++ b/src/confscreen.cpp @@ -0,0 +1,463 @@ +//----------------------------------------------------------------------------- +// For the configuration screen, setup items that are not specific to the +// file being edited right now. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +void TextWindow::ScreenChangeLightDirection(int link, uint32_t v) { + SS.TW.ShowEditControl(8, ssprintf("%.2f, %.2f, %.2f", CO(SS.lightDir[v]))); + SS.TW.edit.meaning = EDIT_LIGHT_DIRECTION; + SS.TW.edit.i = v; +} + +void TextWindow::ScreenChangeLightIntensity(int link, uint32_t v) { + SS.TW.ShowEditControl(31, ssprintf("%.2f", SS.lightIntensity[v])); + SS.TW.edit.meaning = EDIT_LIGHT_INTENSITY; + SS.TW.edit.i = v; +} + +void TextWindow::ScreenChangeColor(int link, uint32_t v) { + SS.TW.ShowEditControlWithColorPicker(13, SS.modelColor[v]); + + SS.TW.edit.meaning = EDIT_COLOR; + SS.TW.edit.i = v; +} + +void TextWindow::ScreenChangeChordTolerance(int link, uint32_t v) { + SS.TW.ShowEditControl(3, ssprintf("%lg", SS.chordTol)); + SS.TW.edit.meaning = EDIT_CHORD_TOLERANCE; + SS.TW.edit.i = 0; +} + +void TextWindow::ScreenChangeMaxSegments(int link, uint32_t v) { + SS.TW.ShowEditControl(3, ssprintf("%d", SS.maxSegments)); + SS.TW.edit.meaning = EDIT_MAX_SEGMENTS; + SS.TW.edit.i = 0; +} + +void TextWindow::ScreenChangeExportChordTolerance(int link, uint32_t v) { + SS.TW.ShowEditControl(3, ssprintf("%lg", SS.exportChordTol)); + SS.TW.edit.meaning = EDIT_CHORD_TOLERANCE; + SS.TW.edit.i = 1; +} + +void TextWindow::ScreenChangeExportMaxSegments(int link, uint32_t v) { + SS.TW.ShowEditControl(3, ssprintf("%d", SS.exportMaxSegments)); + SS.TW.edit.meaning = EDIT_MAX_SEGMENTS; + SS.TW.edit.i = 1; +} + +void TextWindow::ScreenChangeCameraTangent(int link, uint32_t v) { + SS.TW.ShowEditControl(3, ssprintf("%.3f", 1000*SS.cameraTangent)); + SS.TW.edit.meaning = EDIT_CAMERA_TANGENT; +} + +void TextWindow::ScreenChangeGridSpacing(int link, uint32_t v) { + SS.TW.ShowEditControl(3, SS.MmToString(SS.gridSpacing)); + SS.TW.edit.meaning = EDIT_GRID_SPACING; +} + +void TextWindow::ScreenChangeDigitsAfterDecimal(int link, uint32_t v) { + SS.TW.ShowEditControl(3, ssprintf("%d", SS.UnitDigitsAfterDecimal())); + SS.TW.edit.meaning = EDIT_DIGITS_AFTER_DECIMAL; +} + +void TextWindow::ScreenChangeExportScale(int link, uint32_t v) { + SS.TW.ShowEditControl(5, ssprintf("%.3f", (double)SS.exportScale)); + SS.TW.edit.meaning = EDIT_EXPORT_SCALE; +} + +void TextWindow::ScreenChangeExportOffset(int link, uint32_t v) { + SS.TW.ShowEditControl(3, SS.MmToString(SS.exportOffset)); + SS.TW.edit.meaning = EDIT_EXPORT_OFFSET; +} + +void TextWindow::ScreenChangeFixExportColors(int link, uint32_t v) { + SS.fixExportColors = !SS.fixExportColors; +} + +void TextWindow::ScreenChangeBackFaces(int link, uint32_t v) { + SS.drawBackFaces = !SS.drawBackFaces; + InvalidateGraphics(); +} + +void TextWindow::ScreenChangeCheckClosedContour(int link, uint32_t v) { + SS.checkClosedContour = !SS.checkClosedContour; + InvalidateGraphics(); +} + +void TextWindow::ScreenChangeShadedTriangles(int link, uint32_t v) { + SS.exportShadedTriangles = !SS.exportShadedTriangles; + InvalidateGraphics(); +} + +void TextWindow::ScreenChangePwlCurves(int link, uint32_t v) { + SS.exportPwlCurves = !SS.exportPwlCurves; + InvalidateGraphics(); +} + +void TextWindow::ScreenChangeCanvasSizeAuto(int link, uint32_t v) { + if(link == 't') { + SS.exportCanvasSizeAuto = true; + } else { + SS.exportCanvasSizeAuto = false; + } + InvalidateGraphics(); +} + +void TextWindow::ScreenChangeCanvasSize(int link, uint32_t v) { + double d; + switch(v) { + case 0: d = SS.exportMargin.left; break; + case 1: d = SS.exportMargin.right; break; + case 2: d = SS.exportMargin.bottom; break; + case 3: d = SS.exportMargin.top; break; + + case 10: d = SS.exportCanvas.width; break; + case 11: d = SS.exportCanvas.height; break; + case 12: d = SS.exportCanvas.dx; break; + case 13: d = SS.exportCanvas.dy; break; + + default: return; + } + int col = 13; + if(v < 10) col = 11; + SS.TW.ShowEditControl(col, SS.MmToString(d)); + SS.TW.edit.meaning = EDIT_CANVAS_SIZE; + SS.TW.edit.i = v; +} + +void TextWindow::ScreenChangeGCodeParameter(int link, uint32_t v) { + std::string buf; + switch(link) { + case 'd': + SS.TW.edit.meaning = EDIT_G_CODE_DEPTH; + buf += SS.MmToString(SS.gCode.depth); + break; + + case 's': + SS.TW.edit.meaning = EDIT_G_CODE_PASSES; + buf += std::to_string(SS.gCode.passes); + break; + + case 'F': + SS.TW.edit.meaning = EDIT_G_CODE_FEED; + buf += SS.MmToString(SS.gCode.feed); + break; + + case 'P': + SS.TW.edit.meaning = EDIT_G_CODE_PLUNGE_FEED; + buf += SS.MmToString(SS.gCode.plungeFeed); + break; + } + SS.TW.ShowEditControl(14, buf); +} + +void TextWindow::ScreenChangeAutosaveInterval(int link, uint32_t v) { + SS.TW.ShowEditControl(3, std::to_string(SS.autosaveInterval)); + SS.TW.edit.meaning = EDIT_AUTOSAVE_INTERVAL; +} + +void TextWindow::ShowConfiguration(void) { + int i; + Printf(true, "%Ft user color (r, g, b)"); + + for(i = 0; i < SS.MODEL_COLORS; i++) { + Printf(false, "%Bp #%d: %Bz %Bp (%@, %@, %@) %f%D%Ll%Fl[change]%E", + (i & 1) ? 'd' : 'a', + i, &SS.modelColor[i], + (i & 1) ? 'd' : 'a', + SS.modelColor[i].redF(), + SS.modelColor[i].greenF(), + SS.modelColor[i].blueF(), + &ScreenChangeColor, i); + } + + Printf(false, ""); + Printf(false, "%Ft light direction intensity"); + for(i = 0; i < 2; i++) { + Printf(false, "%Bp #%d (%2,%2,%2)%Fl%D%f%Ll[c]%E " + "%2 %Fl%D%f%Ll[c]%E", + (i & 1) ? 'd' : 'a', i, + CO(SS.lightDir[i]), i, &ScreenChangeLightDirection, + SS.lightIntensity[i], i, &ScreenChangeLightIntensity); + } + + Printf(false, ""); + Printf(false, "%Ft chord tolerance (in percents)%E"); + Printf(false, "%Ba %@ %% %Fl%Ll%f%D[change]%E; %@ mm, %d triangles", + SS.chordTol, + &ScreenChangeChordTolerance, 0, SS.chordTolCalculated, + SK.GetGroup(SS.GW.activeGroup)->displayMesh.l.n); + Printf(false, "%Ft max piecewise linear segments%E"); + Printf(false, "%Ba %d %Fl%Ll%f[change]%E", + SS.maxSegments, + &ScreenChangeMaxSegments); + + Printf(false, ""); + Printf(false, "%Ft export chord tolerance (in mm)%E"); + Printf(false, "%Ba %@ %Fl%Ll%f%D[change]%E", + SS.exportChordTol, + &ScreenChangeExportChordTolerance, 0); + Printf(false, "%Ft export max piecewise linear segments%E"); + Printf(false, "%Ba %d %Fl%Ll%f[change]%E", + SS.exportMaxSegments, + &ScreenChangeExportMaxSegments); + + Printf(false, ""); + Printf(false, "%Ft perspective factor (0 for parallel)%E"); + Printf(false, "%Ba %# %Fl%Ll%f%D[change]%E", + SS.cameraTangent*1000, + &ScreenChangeCameraTangent, 0); + Printf(false, "%Ft snap grid spacing%E"); + Printf(false, "%Ba %s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.gridSpacing).c_str(), + &ScreenChangeGridSpacing, 0); + Printf(false, "%Ft digits after decimal point to show%E"); + Printf(false, "%Ba %d %Fl%Ll%f%D[change]%E (e.g. '%s')", + SS.UnitDigitsAfterDecimal(), + &ScreenChangeDigitsAfterDecimal, 0, + SS.MmToString(SS.StringToMm("1.23456789")).c_str()); + + Printf(false, ""); + Printf(false, "%Ft export scale factor (1:1=mm, 1:25.4=inch)"); + Printf(false, "%Ba 1:%# %Fl%Ll%f%D[change]%E", + (double)SS.exportScale, + &ScreenChangeExportScale, 0); + Printf(false, "%Ft cutter radius offset (0=no offset) "); + Printf(false, "%Ba %s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.exportOffset).c_str(), + &ScreenChangeExportOffset, 0); + + Printf(false, ""); + Printf(false, " %Fd%f%Ll%s export shaded 2d triangles%E", + &ScreenChangeShadedTriangles, + SS.exportShadedTriangles ? CHECK_TRUE : CHECK_FALSE); + if(fabs(SS.exportOffset) > LENGTH_EPS) { + Printf(false, " %Fd%s curves as piecewise linear%E " + "(since cutter radius is not zero)", CHECK_TRUE); + } else { + Printf(false, " %Fd%f%Ll%s export curves as piecewise linear%E", + &ScreenChangePwlCurves, + SS.exportPwlCurves ? CHECK_TRUE : CHECK_FALSE); + } + Printf(false, " %Fd%f%Ll%s fix white exported lines%E", + &ScreenChangeFixExportColors, + SS.fixExportColors ? CHECK_TRUE : CHECK_FALSE); + + Printf(false, ""); + Printf(false, "%Ft export canvas size: " + "%f%Fd%Lf%s fixed%E " + "%f%Fd%Lt%s auto%E", + &ScreenChangeCanvasSizeAuto, + !SS.exportCanvasSizeAuto ? RADIO_TRUE : RADIO_FALSE, + &ScreenChangeCanvasSizeAuto, + SS.exportCanvasSizeAuto ? RADIO_TRUE : RADIO_FALSE); + + if(SS.exportCanvasSizeAuto) { + Printf(false, "%Ft (by margins around exported geometry)"); + Printf(false, "%Ba%Ft left: %Fd%s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.exportMargin.left).c_str(), &ScreenChangeCanvasSize, 0); + Printf(false, "%Bd%Ft right: %Fd%s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.exportMargin.right).c_str(), &ScreenChangeCanvasSize, 1); + Printf(false, "%Ba%Ft bottom: %Fd%s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.exportMargin.bottom).c_str(), &ScreenChangeCanvasSize, 2); + Printf(false, "%Bd%Ft top: %Fd%s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.exportMargin.top).c_str(), &ScreenChangeCanvasSize, 3); + } else { + Printf(false, "%Ft (by absolute dimensions and offsets)"); + Printf(false, "%Ba%Ft width: %Fd%s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.exportCanvas.width).c_str(), &ScreenChangeCanvasSize, 10); + Printf(false, "%Bd%Ft height: %Fd%s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.exportCanvas.height).c_str(), &ScreenChangeCanvasSize, 11); + Printf(false, "%Ba%Ft offset x: %Fd%s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.exportCanvas.dx).c_str(), &ScreenChangeCanvasSize, 12); + Printf(false, "%Bd%Ft offset y: %Fd%s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.exportCanvas.dy).c_str(), &ScreenChangeCanvasSize, 13); + } + + Printf(false, ""); + Printf(false, "%Ft exported g code parameters"); + Printf(false, "%Ba%Ft depth: %Fd%s %Fl%Ld%f[change]%E", + SS.MmToString(SS.gCode.depth).c_str(), &ScreenChangeGCodeParameter); + Printf(false, "%Bd%Ft passes: %Fd%d %Fl%Ls%f[change]%E", + SS.gCode.passes, &ScreenChangeGCodeParameter); + Printf(false, "%Ba%Ft feed: %Fd%s %Fl%LF%f[change]%E", + SS.MmToString(SS.gCode.feed).c_str(), &ScreenChangeGCodeParameter); + Printf(false, "%Bd%Ft plunge fd: %Fd%s %Fl%LP%f[change]%E", + SS.MmToString(SS.gCode.plungeFeed).c_str(), &ScreenChangeGCodeParameter); + + Printf(false, ""); + Printf(false, " %Fd%f%Ll%s draw triangle back faces in red%E", + &ScreenChangeBackFaces, + SS.drawBackFaces ? CHECK_TRUE : CHECK_FALSE); + Printf(false, " %Fd%f%Ll%s check sketch for closed contour%E", + &ScreenChangeCheckClosedContour, + SS.checkClosedContour ? CHECK_TRUE : CHECK_FALSE); + + Printf(false, ""); + Printf(false, "%Ft autosave interval (in minutes)%E"); + Printf(false, "%Ba %d %Fl%Ll%f[change]%E", + SS.autosaveInterval, &ScreenChangeAutosaveInterval); + + Printf(false, ""); + Printf(false, " %Ftgl vendor %E%s", glGetString(GL_VENDOR)); + Printf(false, " %Ft renderer %E%s", glGetString(GL_RENDERER)); + Printf(false, " %Ft version %E%s", glGetString(GL_VERSION)); +} + +bool TextWindow::EditControlDoneForConfiguration(const char *s) { + switch(edit.meaning) { + case EDIT_LIGHT_INTENSITY: + SS.lightIntensity[edit.i] = min(1.0, max(0.0, atof(s))); + InvalidateGraphics(); + break; + + case EDIT_LIGHT_DIRECTION: { + double x, y, z; + if(sscanf(s, "%lf, %lf, %lf", &x, &y, &z)==3) { + SS.lightDir[edit.i] = Vector::From(x, y, z); + } else { + Error("Bad format: specify coordinates as x, y, z"); + } + InvalidateGraphics(); + break; + } + case EDIT_COLOR: { + Vector rgb; + if(sscanf(s, "%lf, %lf, %lf", &rgb.x, &rgb.y, &rgb.z)==3) { + rgb = rgb.ClampWithin(0, 1); + SS.modelColor[edit.i] = RGBf(rgb.x, rgb.y, rgb.z); + } else { + Error("Bad format: specify color as r, g, b"); + } + break; + } + case EDIT_CHORD_TOLERANCE: { + if(edit.i == 0) { + SS.chordTol = max(0.0, atof(s)); + SS.GenerateAll(SolveSpaceUI::GENERATE_ALL); + } else { + SS.exportChordTol = max(0.0, atof(s)); + } + break; + } + case EDIT_MAX_SEGMENTS: { + if(edit.i == 0) { + SS.maxSegments = min(1000, max(7, atoi(s))); + SS.GenerateAll(SolveSpaceUI::GENERATE_ALL); + } else { + SS.exportMaxSegments = min(1000, max(7, atoi(s))); + } + break; + } + case EDIT_CAMERA_TANGENT: { + SS.cameraTangent = (min(2.0, max(0.0, atof(s))))/1000.0; + if(!SS.usePerspectiveProj) { + Message("The perspective factor will have no effect until you " + "enable View -> Use Perspective Projection."); + } + InvalidateGraphics(); + break; + } + case EDIT_GRID_SPACING: { + SS.gridSpacing = (float)min(1e4, max(1e-3, SS.StringToMm(s))); + InvalidateGraphics(); + break; + } + case EDIT_DIGITS_AFTER_DECIMAL: { + int v = atoi(s); + if(v < 0 || v > 8) { + Error("Specify between 0 and 8 digits after the decimal."); + } else { + SS.SetUnitDigitsAfterDecimal(v); + } + InvalidateGraphics(); + break; + } + case EDIT_EXPORT_SCALE: { + Expr *e = Expr::From(s, true); + if(e) { + double ev = e->Eval(); + if(fabs(ev) < 0.001 || isnan(ev)) { + Error("Export scale must not be zero!"); + } else { + SS.exportScale = (float)ev; + } + } + break; + } + case EDIT_EXPORT_OFFSET: { + Expr *e = Expr::From(s, true); + if(e) { + double ev = SS.ExprToMm(e); + if(isnan(ev) || ev < 0) { + Error("Cutter radius offset must not be negative!"); + } else { + SS.exportOffset = (float)ev; + } + } + break; + } + case EDIT_CANVAS_SIZE: { + Expr *e = Expr::From(s, true); + if(!e) { + break; + } + float d = (float)SS.ExprToMm(e); + switch(edit.i) { + case 0: SS.exportMargin.left = d; break; + case 1: SS.exportMargin.right = d; break; + case 2: SS.exportMargin.bottom = d; break; + case 3: SS.exportMargin.top = d; break; + + case 10: SS.exportCanvas.width = d; break; + case 11: SS.exportCanvas.height = d; break; + case 12: SS.exportCanvas.dx = d; break; + case 13: SS.exportCanvas.dy = d; break; + } + break; + } + case EDIT_G_CODE_DEPTH: { + Expr *e = Expr::From(s, true); + if(e) SS.gCode.depth = (float)SS.ExprToMm(e); + break; + } + case EDIT_G_CODE_PASSES: { + Expr *e = Expr::From(s, true); + if(e) SS.gCode.passes = (int)(e->Eval()); + SS.gCode.passes = max(1, min(1000, SS.gCode.passes)); + break; + } + case EDIT_G_CODE_FEED: { + Expr *e = Expr::From(s, true); + if(e) SS.gCode.feed = (float)SS.ExprToMm(e); + break; + } + case EDIT_G_CODE_PLUNGE_FEED: { + Expr *e = Expr::From(s, true); + if(e) SS.gCode.plungeFeed = (float)SS.ExprToMm(e); + break; + } + case EDIT_AUTOSAVE_INTERVAL: { + int interval; + if(sscanf(s, "%d", &interval)==1) { + if(interval >= 1) { + SS.autosaveInterval = interval; + SetAutosaveTimerFor(interval); + } else { + Error("Bad value: autosave interval should be positive"); + } + } else { + Error("Bad format: specify interval in integral minutes"); + } + break; + } + + default: return false; + } + return true; +} + diff --git a/src/constraint.cpp b/src/constraint.cpp new file mode 100644 index 0000000..6137021 --- /dev/null +++ b/src/constraint.cpp @@ -0,0 +1,740 @@ +//----------------------------------------------------------------------------- +// Implementation of the Constraint menu, to create new constraints in +// the sketch. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +std::string Constraint::DescriptionString(void) { + const char *s; + switch(type) { + case POINTS_COINCIDENT: s = "pts-coincident"; break; + case PT_PT_DISTANCE: s = "pt-pt-distance"; break; + case PT_LINE_DISTANCE: s = "pt-line-distance"; break; + case PT_PLANE_DISTANCE: s = "pt-plane-distance"; break; + case PT_FACE_DISTANCE: s = "pt-face-distance"; break; + case PROJ_PT_DISTANCE: s = "proj-pt-pt-distance"; break; + case PT_IN_PLANE: s = "pt-in-plane"; break; + case PT_ON_LINE: s = "pt-on-line"; break; + case PT_ON_FACE: s = "pt-on-face"; break; + case EQUAL_LENGTH_LINES: s = "eq-length"; break; + case EQ_LEN_PT_LINE_D: s = "eq-length-and-pt-ln-dist"; break; + case EQ_PT_LN_DISTANCES: s = "eq-pt-line-distances"; break; + case LENGTH_RATIO: s = "length-ratio"; break; + case LENGTH_DIFFERENCE: s = "length-difference"; break; + case SYMMETRIC: s = "symmetric"; break; + case SYMMETRIC_HORIZ: s = "symmetric-h"; break; + case SYMMETRIC_VERT: s = "symmetric-v"; break; + case SYMMETRIC_LINE: s = "symmetric-line"; break; + case AT_MIDPOINT: s = "at-midpoint"; break; + case HORIZONTAL: s = "horizontal"; break; + case VERTICAL: s = "vertical"; break; + case DIAMETER: s = "diameter"; break; + case PT_ON_CIRCLE: s = "pt-on-circle"; break; + case SAME_ORIENTATION: s = "same-orientation"; break; + case ANGLE: s = "angle"; break; + case PARALLEL: s = "parallel"; break; + case ARC_LINE_TANGENT: s = "arc-line-tangent"; break; + case CUBIC_LINE_TANGENT: s = "cubic-line-tangent"; break; + case CURVE_CURVE_TANGENT: s = "curve-curve-tangent"; break; + case PERPENDICULAR: s = "perpendicular"; break; + case EQUAL_RADIUS: s = "eq-radius"; break; + case EQUAL_ANGLE: s = "eq-angle"; break; + case EQUAL_LINE_ARC_LEN: s = "eq-line-len-arc-len"; break; + case WHERE_DRAGGED: s = "lock-where-dragged"; break; + case COMMENT: s = "comment"; break; + default: s = "???"; break; + } + + return ssprintf("c%03x-%s", h.v, s); +} + +#ifndef LIBRARY + +//----------------------------------------------------------------------------- +// Delete all constraints with the specified type, entityA, ptA. We use this +// when auto-removing constraints that would become redundant. +//----------------------------------------------------------------------------- +void Constraint::DeleteAllConstraintsFor(int type, hEntity entityA, hEntity ptA) +{ + SK.constraint.ClearTags(); + for(int i = 0; i < SK.constraint.n; i++) { + ConstraintBase *ct = &(SK.constraint.elem[i]); + if(ct->type != type) continue; + + if(ct->entityA.v != entityA.v) continue; + if(ct->ptA.v != ptA.v) continue; + ct->tag = 1; + } + SK.constraint.RemoveTagged(); + // And no need to do anything special, since nothing + // ever depends on a constraint. But do clear the + // hover, in case the just-deleted constraint was + // hovered. + SS.GW.hover.Clear(); +} + +hConstraint Constraint::AddConstraint(Constraint *c) { + return AddConstraint(c, true); +} + +hConstraint Constraint::AddConstraint(Constraint *c, bool rememberForUndo) { + if(rememberForUndo) SS.UndoRemember(); + + SK.constraint.AddAndAssignId(c); + + SS.MarkGroupDirty(c->group); + SS.ScheduleGenerateAll(); + return c->h; +} + +hConstraint Constraint::Constrain(int type, hEntity ptA, hEntity ptB, + hEntity entityA, hEntity entityB, + bool other, bool other2) +{ + Constraint c = {}; + c.group = SS.GW.activeGroup; + c.workplane = SS.GW.ActiveWorkplane(); + c.type = type; + c.ptA = ptA; + c.ptB = ptB; + c.entityA = entityA; + c.entityB = entityB; + c.other = other; + c.other2 = other2; + return AddConstraint(&c, false); +} + +hConstraint Constraint::Constrain(int type, hEntity ptA, hEntity ptB, hEntity entityA){ + return Constrain(type, ptA, ptB, entityA, Entity::NO_ENTITY, false, false); +} + +hConstraint Constraint::ConstrainCoincident(hEntity ptA, hEntity ptB) { + return Constrain(POINTS_COINCIDENT, ptA, ptB, + Entity::NO_ENTITY, Entity::NO_ENTITY, false, false); +} + +void Constraint::MenuConstrain(int id) { + Constraint c = {}; + c.group = SS.GW.activeGroup; + c.workplane = SS.GW.ActiveWorkplane(); + + SS.GW.GroupSelection(); +#define gs (SS.GW.gs) + + switch(id) { + case GraphicsWindow::MNU_DISTANCE_DIA: + case GraphicsWindow::MNU_REF_DISTANCE: { + if(gs.points == 2 && gs.n == 2) { + c.type = PT_PT_DISTANCE; + c.ptA = gs.point[0]; + c.ptB = gs.point[1]; + } else if(gs.lineSegments == 1 && gs.n == 1) { + c.type = PT_PT_DISTANCE; + Entity *e = SK.GetEntity(gs.entity[0]); + c.ptA = e->point[0]; + c.ptB = e->point[1]; + } else if(gs.vectors == 1 && gs.points == 2 && gs.n == 3) { + c.type = PROJ_PT_DISTANCE; + c.ptA = gs.point[0]; + c.ptB = gs.point[1]; + c.entityA = gs.vector[0]; + } else if(gs.workplanes == 1 && gs.points == 1 && gs.n == 2) { + c.type = PT_PLANE_DISTANCE; + c.ptA = gs.point[0]; + c.entityA = gs.entity[0]; + } else if(gs.lineSegments == 1 && gs.points == 1 && gs.n == 2) { + c.type = PT_LINE_DISTANCE; + c.ptA = gs.point[0]; + c.entityA = gs.entity[0]; + } else if(gs.faces == 1 && gs.points == 1 && gs.n == 2) { + c.type = PT_FACE_DISTANCE; + c.ptA = gs.point[0]; + c.entityA = gs.face[0]; + } else if(gs.circlesOrArcs == 1 && gs.n == 1) { + c.type = DIAMETER; + c.entityA = gs.entity[0]; + } else { + Error( +"Bad selection for distance / diameter constraint. This " +"constraint can apply to:\n\n" +" * two points (distance between points)\n" +" * a line segment (length)\n" +" * two points and a line segment or normal (projected distance)\n" +" * a workplane and a point (minimum distance)\n" +" * a line segment and a point (minimum distance)\n" +" * a plane face and a point (minimum distance)\n" +" * a circle or an arc (diameter)\n"); + return; + } + if(c.type == PT_PT_DISTANCE || c.type == PROJ_PT_DISTANCE) { + Vector n = SS.GW.projRight.Cross(SS.GW.projUp); + Vector a = SK.GetEntity(c.ptA)->PointGetNum(); + Vector b = SK.GetEntity(c.ptB)->PointGetNum(); + c.disp.offset = n.Cross(a.Minus(b)); + c.disp.offset = (c.disp.offset).WithMagnitude(50/SS.GW.scale); + } else { + c.disp.offset = Vector::From(0, 0, 0); + } + + if(id == GraphicsWindow::MNU_REF_DISTANCE) { + c.reference = true; + } + + c.valA = 0; + c.ModifyToSatisfy(); + AddConstraint(&c); + break; + } + + case GraphicsWindow::MNU_ON_ENTITY: + if(gs.points == 2 && gs.n == 2) { + c.type = POINTS_COINCIDENT; + c.ptA = gs.point[0]; + c.ptB = gs.point[1]; + } else if(gs.points == 1 && gs.workplanes == 1 && gs.n == 2) { + c.type = PT_IN_PLANE; + c.ptA = gs.point[0]; + c.entityA = gs.entity[0]; + } else if(gs.points == 1 && gs.lineSegments == 1 && gs.n == 2) { + c.type = PT_ON_LINE; + c.ptA = gs.point[0]; + c.entityA = gs.entity[0]; + } else if(gs.points == 1 && gs.circlesOrArcs == 1 && gs.n == 2) { + c.type = PT_ON_CIRCLE; + c.ptA = gs.point[0]; + c.entityA = gs.entity[0]; + } else if(gs.points == 1 && gs.faces == 1 && gs.n == 2) { + c.type = PT_ON_FACE; + c.ptA = gs.point[0]; + c.entityA = gs.face[0]; + } else { + Error("Bad selection for on point / curve / plane constraint. " + "This constraint can apply to:\n\n" + " * two points (points coincident)\n" + " * a point and a workplane (point in plane)\n" + " * a point and a line segment (point on line)\n" + " * a point and a circle or arc (point on curve)\n" + " * a point and a plane face (point on face)\n"); + return; + } + AddConstraint(&c); + break; + + case GraphicsWindow::MNU_EQUAL: + if(gs.lineSegments == 2 && gs.n == 2) { + c.type = EQUAL_LENGTH_LINES; + c.entityA = gs.entity[0]; + c.entityB = gs.entity[1]; + } else if(gs.lineSegments == 2 && gs.points == 2 && gs.n == 4) { + c.type = EQ_PT_LN_DISTANCES; + c.entityA = gs.entity[0]; + c.ptA = gs.point[0]; + c.entityB = gs.entity[1]; + c.ptB = gs.point[1]; + } else if(gs.lineSegments == 1 && gs.points == 2 && gs.n == 3) { + // The same line segment for the distances, but different + // points. + c.type = EQ_PT_LN_DISTANCES; + c.entityA = gs.entity[0]; + c.ptA = gs.point[0]; + c.entityB = gs.entity[0]; + c.ptB = gs.point[1]; + } else if(gs.lineSegments == 2 && gs.points == 1 && gs.n == 3) { + c.type = EQ_LEN_PT_LINE_D; + c.entityA = gs.entity[0]; + c.entityB = gs.entity[1]; + c.ptA = gs.point[0]; + } else if(gs.vectors == 4 && gs.n == 4) { + c.type = EQUAL_ANGLE; + c.entityA = gs.vector[0]; + c.entityB = gs.vector[1]; + c.entityC = gs.vector[2]; + c.entityD = gs.vector[3]; + } else if(gs.vectors == 3 && gs.n == 3) { + c.type = EQUAL_ANGLE; + c.entityA = gs.vector[0]; + c.entityB = gs.vector[1]; + c.entityC = gs.vector[1]; + c.entityD = gs.vector[2]; + } else if(gs.circlesOrArcs == 2 && gs.n == 2) { + c.type = EQUAL_RADIUS; + c.entityA = gs.entity[0]; + c.entityB = gs.entity[1]; + } else if(gs.arcs == 1 && gs.lineSegments == 1 && gs.n == 2) { + c.type = EQUAL_LINE_ARC_LEN; + if(SK.GetEntity(gs.entity[0])->type == Entity::ARC_OF_CIRCLE) { + c.entityA = gs.entity[1]; + c.entityB = gs.entity[0]; + } else { + c.entityA = gs.entity[0]; + c.entityB = gs.entity[1]; + } + } else { + Error("Bad selection for equal length / radius constraint. " + "This constraint can apply to:\n\n" + " * two line segments (equal length)\n" + " * two line segments and two points " + "(equal point-line distances)\n" + " * a line segment and two points " + "(equal point-line distances)\n" + " * a line segment, and a point and line segment " + "(point-line distance equals length)\n" + " * four line segments or normals " + "(equal angle between A,B and C,D)\n" + " * three line segments or normals " + "(equal angle between A,B and B,C)\n" + " * two circles or arcs (equal radius)\n" + " * a line segment and an arc " + "(line segment length equals arc length)\n"); + return; + } + if(c.type == EQUAL_ANGLE) { + // Infer the nearest supplementary angle from the sketch. + Vector a1 = SK.GetEntity(c.entityA)->VectorGetNum(), + b1 = SK.GetEntity(c.entityB)->VectorGetNum(), + a2 = SK.GetEntity(c.entityC)->VectorGetNum(), + b2 = SK.GetEntity(c.entityD)->VectorGetNum(); + double d1 = a1.Dot(b1), d2 = a2.Dot(b2); + + if(d1*d2 < 0) { + c.other = true; + } + } + AddConstraint(&c); + break; + + case GraphicsWindow::MNU_RATIO: + if(gs.lineSegments == 2 && gs.n == 2) { + c.type = LENGTH_RATIO; + c.entityA = gs.entity[0]; + c.entityB = gs.entity[1]; + } else { + Error("Bad selection for length ratio constraint. This " + "constraint can apply to:\n\n" + " * two line segments\n"); + return; + } + + c.valA = 0; + c.ModifyToSatisfy(); + AddConstraint(&c); + break; + + case GraphicsWindow::MNU_DIFFERENCE: + if(gs.lineSegments == 2 && gs.n == 2) { + c.type = LENGTH_DIFFERENCE; + c.entityA = gs.entity[0]; + c.entityB = gs.entity[1]; + } else { + Error("Bad selection for length difference constraint. This " + "constraint can apply to:\n\n" + " * two line segments\n"); + return; + } + + c.valA = 0; + c.ModifyToSatisfy(); + AddConstraint(&c); + break; + + case GraphicsWindow::MNU_AT_MIDPOINT: + if(gs.lineSegments == 1 && gs.points == 1 && gs.n == 2) { + c.type = AT_MIDPOINT; + c.entityA = gs.entity[0]; + c.ptA = gs.point[0]; + + // If a point is at-midpoint, then no reason to also constrain + // it on-line; so auto-remove that. + DeleteAllConstraintsFor(PT_ON_LINE, c.entityA, c.ptA); + } else if(gs.lineSegments == 1 && gs.workplanes == 1 && gs.n == 2) { + c.type = AT_MIDPOINT; + int i = SK.GetEntity(gs.entity[0])->IsWorkplane() ? 1 : 0; + c.entityA = gs.entity[i]; + c.entityB = gs.entity[1-i]; + } else { + Error("Bad selection for at midpoint constraint. This " + "constraint can apply to:\n\n" + " * a line segment and a point " + "(point at midpoint)\n" + " * a line segment and a workplane " + "(line's midpoint on plane)\n"); + return; + } + AddConstraint(&c); + break; + + case GraphicsWindow::MNU_SYMMETRIC: + if(gs.points == 2 && + ((gs.workplanes == 1 && gs.n == 3) || + (gs.n == 2))) + { + c.entityA = gs.entity[0]; + c.ptA = gs.point[0]; + c.ptB = gs.point[1]; + } else if(gs.lineSegments == 1 && + ((gs.workplanes == 1 && gs.n == 2) || + (gs.n == 1))) + { + int i = SK.GetEntity(gs.entity[0])->IsWorkplane() ? 1 : 0; + Entity *line = SK.GetEntity(gs.entity[i]); + c.entityA = gs.entity[1-i]; + c.ptA = line->point[0]; + c.ptB = line->point[1]; + } else if(SS.GW.LockedInWorkplane() + && gs.lineSegments == 2 && gs.n == 2) + { + Entity *l0 = SK.GetEntity(gs.entity[0]), + *l1 = SK.GetEntity(gs.entity[1]); + + if((l1->group.v != SS.GW.activeGroup.v) || + (l1->construction && !(l0->construction))) + { + swap(l0, l1); + } + c.ptA = l1->point[0]; + c.ptB = l1->point[1]; + c.entityA = l0->h; + c.type = SYMMETRIC_LINE; + } else if(SS.GW.LockedInWorkplane() + && gs.lineSegments == 1 && gs.points == 2 && gs.n == 3) + { + c.ptA = gs.point[0]; + c.ptB = gs.point[1]; + c.entityA = gs.entity[0]; + c.type = SYMMETRIC_LINE; + } else { + Error("Bad selection for symmetric constraint. This constraint " + "can apply to:\n\n" + " * two points or a line segment " + "(symmetric about workplane's coordinate axis)\n" + " * line segment, and two points or a line segment " + "(symmetric about line segment)\n" + " * workplane, and two points or a line segment " + "(symmetric about workplane)\n"); + return; + } + if(c.type != 0) { + // Already done, symmetry about a line segment in a workplane + } else if(c.entityA.v == Entity::NO_ENTITY.v) { + // Horizontal / vertical symmetry, implicit symmetry plane + // normal to the workplane + if(c.workplane.v == Entity::FREE_IN_3D.v) { + Error("Must be locked in to workplane when constraining " + "symmetric without an explicit symmetry plane."); + return; + } + Vector pa = SK.GetEntity(c.ptA)->PointGetNum(); + Vector pb = SK.GetEntity(c.ptB)->PointGetNum(); + Vector dp = pa.Minus(pb); + EntityBase *norm = SK.GetEntity(c.workplane)->Normal();; + Vector u = norm->NormalU(), v = norm->NormalV(); + if(fabs(dp.Dot(u)) > fabs(dp.Dot(v))) { + c.type = SYMMETRIC_HORIZ; + } else { + c.type = SYMMETRIC_VERT; + } + if(gs.lineSegments == 1) { + // If this line segment is already constrained horiz or + // vert, then auto-remove that redundant constraint. + DeleteAllConstraintsFor(HORIZONTAL, (gs.entity[0]), + Entity::NO_ENTITY); + DeleteAllConstraintsFor(VERTICAL, (gs.entity[0]), + Entity::NO_ENTITY); + + } + } else { + // Symmetry with a symmetry plane specified explicitly. + c.type = SYMMETRIC; + } + AddConstraint(&c); + break; + + case GraphicsWindow::MNU_VERTICAL: + case GraphicsWindow::MNU_HORIZONTAL: { + hEntity ha, hb; + if(c.workplane.v == Entity::FREE_IN_3D.v) { + Error("Select workplane before constraining horiz/vert."); + return; + } + if(gs.lineSegments == 1 && gs.n == 1) { + c.entityA = gs.entity[0]; + Entity *e = SK.GetEntity(c.entityA); + ha = e->point[0]; + hb = e->point[1]; + } else if(gs.points == 2 && gs.n == 2) { + ha = c.ptA = gs.point[0]; + hb = c.ptB = gs.point[1]; + } else { + Error("Bad selection for horizontal / vertical constraint. " + "This constraint can apply to:\n\n" + " * two points\n" + " * a line segment\n"); + return; + } + if(id == GraphicsWindow::MNU_HORIZONTAL) { + c.type = HORIZONTAL; + } else { + c.type = VERTICAL; + } + AddConstraint(&c); + break; + } + + case GraphicsWindow::MNU_ORIENTED_SAME: { + if(gs.anyNormals == 2 && gs.n == 2) { + c.type = SAME_ORIENTATION; + c.entityA = gs.anyNormal[0]; + c.entityB = gs.anyNormal[1]; + } else { + Error("Bad selection for same orientation constraint. This " + "constraint can apply to:\n\n" + " * two normals\n"); + return; + } + SS.UndoRemember(); + + Entity *nfree = SK.GetEntity(c.entityA); + Entity *nref = SK.GetEntity(c.entityB); + if(nref->group.v == SS.GW.activeGroup.v) { + swap(nref, nfree); + } + if(nfree->group.v == SS.GW.activeGroup.v && + nref ->group.v != SS.GW.activeGroup.v) + { + // nfree is free, and nref is locked (since it came from a + // previous group); so let's force nfree aligned to nref, + // and make convergence easy + Vector ru = nref ->NormalU(), rv = nref ->NormalV(); + Vector fu = nfree->NormalU(), fv = nfree->NormalV(); + + if(fabs(fu.Dot(ru)) < fabs(fu.Dot(rv))) { + // There might be an odd*90 degree rotation about the + // normal vector; allow that, since the numerical + // constraint does + swap(ru, rv); + } + fu = fu.Dot(ru) > 0 ? ru : ru.ScaledBy(-1); + fv = fv.Dot(rv) > 0 ? rv : rv.ScaledBy(-1); + + nfree->NormalForceTo(Quaternion::From(fu, fv)); + } + AddConstraint(&c, false); + break; + } + + case GraphicsWindow::MNU_OTHER_ANGLE: + if(gs.constraints == 1 && gs.n == 0) { + Constraint *c = SK.GetConstraint(gs.constraint[0]); + if(c->type == ANGLE) { + SS.UndoRemember(); + c->other = !(c->other); + c->ModifyToSatisfy(); + break; + } + if(c->type == EQUAL_ANGLE) { + SS.UndoRemember(); + c->other = !(c->other); + SS.MarkGroupDirty(c->group); + SS.ScheduleGenerateAll(); + break; + } + } + Error("Must select an angle constraint."); + return; + + case GraphicsWindow::MNU_REFERENCE: + if(gs.constraints == 1 && gs.n == 0) { + Constraint *c = SK.GetConstraint(gs.constraint[0]); + if(c->HasLabel() && c->type != COMMENT) { + (c->reference) = !(c->reference); + SK.GetGroup(c->group)->clean = false; + SS.GenerateAll(); + break; + } + } + Error("Must select a constraint with associated label."); + return; + + case GraphicsWindow::MNU_ANGLE: + case GraphicsWindow::MNU_REF_ANGLE: { + if(gs.vectors == 2 && gs.n == 2) { + c.type = ANGLE; + c.entityA = gs.vector[0]; + c.entityB = gs.vector[1]; + c.valA = 0; + } else { + Error("Bad selection for angle constraint. This constraint " + "can apply to:\n\n" + " * two line segments\n" + " * a line segment and a normal\n" + " * two normals\n"); + return; + } + + Entity *ea = SK.GetEntity(c.entityA), + *eb = SK.GetEntity(c.entityB); + if(ea->type == Entity::LINE_SEGMENT && + eb->type == Entity::LINE_SEGMENT) + { + Vector a0 = SK.GetEntity(ea->point[0])->PointGetNum(), + a1 = SK.GetEntity(ea->point[1])->PointGetNum(), + b0 = SK.GetEntity(eb->point[0])->PointGetNum(), + b1 = SK.GetEntity(eb->point[1])->PointGetNum(); + if(a0.Equals(b0) || a1.Equals(b1)) { + // okay, vectors should be drawn in same sense + } else if(a0.Equals(b1) || a1.Equals(b0)) { + // vectors are in opposite sense + c.other = true; + } else { + // no shared point; not clear which intersection to draw + } + } + + if(id == GraphicsWindow::MNU_REF_ANGLE) { + c.reference = true; + } + + c.ModifyToSatisfy(); + AddConstraint(&c); + break; + } + + case GraphicsWindow::MNU_PARALLEL: + if(gs.vectors == 2 && gs.n == 2) { + c.type = PARALLEL; + c.entityA = gs.vector[0]; + c.entityB = gs.vector[1]; + } else if(gs.lineSegments == 1 && gs.arcs == 1 && gs.n == 2) { + Entity *line = SK.GetEntity(gs.entity[0]); + Entity *arc = SK.GetEntity(gs.entity[1]); + if(line->type == Entity::ARC_OF_CIRCLE) { + swap(line, arc); + } + Vector l0 = SK.GetEntity(line->point[0])->PointGetNum(), + l1 = SK.GetEntity(line->point[1])->PointGetNum(); + Vector a1 = SK.GetEntity(arc->point[1])->PointGetNum(), + a2 = SK.GetEntity(arc->point[2])->PointGetNum(); + + if(l0.Equals(a1) || l1.Equals(a1)) { + c.other = false; + } else if(l0.Equals(a2) || l1.Equals(a2)) { + c.other = true; + } else { + Error("The tangent arc and line segment must share an " + "endpoint. Constrain them with Constrain -> " + "On Point before constraining tangent."); + return; + } + c.type = ARC_LINE_TANGENT; + c.entityA = arc->h; + c.entityB = line->h; + } else if(gs.lineSegments == 1 && gs.cubics == 1 && gs.n == 2) { + Entity *line = SK.GetEntity(gs.entity[0]); + Entity *cubic = SK.GetEntity(gs.entity[1]); + if(line->type == Entity::CUBIC) { + swap(line, cubic); + } + Vector l0 = SK.GetEntity(line->point[0])->PointGetNum(), + l1 = SK.GetEntity(line->point[1])->PointGetNum(); + Vector as = cubic->CubicGetStartNum(), + af = cubic->CubicGetFinishNum(); + + if(l0.Equals(as) || l1.Equals(as)) { + c.other = false; + } else if(l0.Equals(af) || l1.Equals(af)) { + c.other = true; + } else { + Error("The tangent cubic and line segment must share an " + "endpoint. Constrain them with Constrain -> " + "On Point before constraining tangent."); + return; + } + c.type = CUBIC_LINE_TANGENT; + c.entityA = cubic->h; + c.entityB = line->h; + } else if(gs.cubics + gs.arcs == 2 && gs.n == 2) { + if(!SS.GW.LockedInWorkplane()) { + Error("Curve-curve tangency must apply in workplane."); + return; + } + Entity *eA = SK.GetEntity(gs.entity[0]), + *eB = SK.GetEntity(gs.entity[1]); + Vector as = eA->EndpointStart(), + af = eA->EndpointFinish(), + bs = eB->EndpointStart(), + bf = eB->EndpointFinish(); + if(as.Equals(bs)) { + c.other = false; c.other2 = false; + } else if(as.Equals(bf)) { + c.other = false; c.other2 = true; + } else if(af.Equals(bs)) { + c.other = true; c.other2 = false; + } else if(af.Equals(bf)) { + c.other = true; c.other2 = true; + } else { + Error("The curves must share an endpoint. Constrain them " + "with Constrain -> On Point before constraining " + "tangent."); + return; + } + c.type = CURVE_CURVE_TANGENT; + c.entityA = eA->h; + c.entityB = eB->h; + } else { + Error("Bad selection for parallel / tangent constraint. This " + "constraint can apply to:\n\n" + " * two line segments (parallel)\n" + " * a line segment and a normal (parallel)\n" + " * two normals (parallel)\n" + " * two line segments, arcs, or beziers, that share " + "an endpoint (tangent)\n"); + return; + } + AddConstraint(&c); + break; + + case GraphicsWindow::MNU_PERPENDICULAR: + if(gs.vectors == 2 && gs.n == 2) { + c.type = PERPENDICULAR; + c.entityA = gs.vector[0]; + c.entityB = gs.vector[1]; + } else { + Error("Bad selection for perpendicular constraint. This " + "constraint can apply to:\n\n" + " * two line segments\n" + " * a line segment and a normal\n" + " * two normals\n"); + return; + } + AddConstraint(&c); + break; + + case GraphicsWindow::MNU_WHERE_DRAGGED: + if(gs.points == 1 && gs.n == 1) { + c.type = WHERE_DRAGGED; + c.ptA = gs.point[0]; + } else { + Error("Bad selection for lock point where dragged constraint. " + "This constraint can apply to:\n\n" + " * a point\n"); + return; + } + AddConstraint(&c); + break; + + case GraphicsWindow::MNU_COMMENT: + SS.GW.pending.operation = GraphicsWindow::MNU_COMMENT; + SS.GW.pending.description = "click center of comment text"; + SS.ScheduleShowTW(); + break; + + default: oops(); + } + + SS.GW.ClearSelection(); + InvalidateGraphics(); +} + +#endif /* ! LIBRARY */ diff --git a/src/constrainteq.cpp b/src/constrainteq.cpp new file mode 100644 index 0000000..8acde19 --- /dev/null +++ b/src/constrainteq.cpp @@ -0,0 +1,794 @@ +//----------------------------------------------------------------------------- +// Given a constraint, generate one or more equations in our symbolic algebra +// system to represent that constraint; also various geometric helper +// functions for that. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +const hConstraint ConstraintBase::NO_CONSTRAINT = { 0 }; + +bool ConstraintBase::HasLabel(void) { + switch(type) { + case PT_LINE_DISTANCE: + case PT_PLANE_DISTANCE: + case PT_FACE_DISTANCE: + case PT_PT_DISTANCE: + case PROJ_PT_DISTANCE: + case DIAMETER: + case LENGTH_RATIO: + case LENGTH_DIFFERENCE: + case ANGLE: + case COMMENT: + return true; + + default: + return false; + } +} + +Expr *ConstraintBase::VectorsParallel(int eq, ExprVector a, ExprVector b) { + ExprVector r = a.Cross(b); + // Hairy ball theorem screws me here. There's no clean solution that I + // know, so let's pivot on the initial numerical guess. Our caller + // has ensured that if one of our input vectors is already known (e.g. + // it's from a previous group), then that one's in a; so that one's + // not going to move, and we should pivot on that one. + double mx = fabs((a.x)->Eval()); + double my = fabs((a.y)->Eval()); + double mz = fabs((a.z)->Eval()); + // The basis vector in which the vectors have the LEAST energy is the + // one that we should look at most (e.g. if both vectors lie in the xy + // plane, then the z component of the cross product is most important). + // So find the strongest component of a and b, and that's the component + // of the cross product to ignore. + Expr *e0, *e1; + if(mx > my && mx > mz) { + e0 = r.y; e1 = r.z; + } else if(my > mz) { + e0 = r.z; e1 = r.x; + } else { + e0 = r.x; e1 = r.y; + } + + if(eq == 0) return e0; + if(eq == 1) return e1; + oops(); +} + +Expr *ConstraintBase::PointLineDistance(hEntity wrkpl, hEntity hpt, hEntity hln) +{ + EntityBase *ln = SK.GetEntity(hln); + EntityBase *a = SK.GetEntity(ln->point[0]); + EntityBase *b = SK.GetEntity(ln->point[1]); + + EntityBase *p = SK.GetEntity(hpt); + + if(wrkpl.v == EntityBase::FREE_IN_3D.v) { + ExprVector ep = p->PointGetExprs(); + + ExprVector ea = a->PointGetExprs(); + ExprVector eb = b->PointGetExprs(); + ExprVector eab = ea.Minus(eb); + Expr *m = eab.Magnitude(); + + return ((eab.Cross(ea.Minus(ep))).Magnitude())->Div(m); + } else { + Expr *ua, *va, *ub, *vb; + a->PointGetExprsInWorkplane(wrkpl, &ua, &va); + b->PointGetExprsInWorkplane(wrkpl, &ub, &vb); + + Expr *du = ua->Minus(ub); + Expr *dv = va->Minus(vb); + + Expr *u, *v; + p->PointGetExprsInWorkplane(wrkpl, &u, &v); + + Expr *m = ((du->Square())->Plus(dv->Square()))->Sqrt(); + + Expr *proj = (dv->Times(ua->Minus(u)))->Minus( + (du->Times(va->Minus(v)))); + + return proj->Div(m); + } +} + +Expr *ConstraintBase::PointPlaneDistance(ExprVector p, hEntity hpl) { + ExprVector n; + Expr *d; + SK.GetEntity(hpl)->WorkplaneGetPlaneExprs(&n, &d); + return (p.Dot(n))->Minus(d); +} + +Expr *ConstraintBase::Distance(hEntity wrkpl, hEntity hpa, hEntity hpb) { + EntityBase *pa = SK.GetEntity(hpa); + EntityBase *pb = SK.GetEntity(hpb); + if(!(pa->IsPoint() && pb->IsPoint())) oops(); + + if(wrkpl.v == EntityBase::FREE_IN_3D.v) { + // This is true distance + ExprVector ea, eb, eab; + ea = pa->PointGetExprs(); + eb = pb->PointGetExprs(); + eab = ea.Minus(eb); + + return eab.Magnitude(); + } else { + // This is projected distance, in the given workplane. + Expr *au, *av, *bu, *bv; + + pa->PointGetExprsInWorkplane(wrkpl, &au, &av); + pb->PointGetExprsInWorkplane(wrkpl, &bu, &bv); + + Expr *du = au->Minus(bu); + Expr *dv = av->Minus(bv); + + return ((du->Square())->Plus(dv->Square()))->Sqrt(); + } +} + +//----------------------------------------------------------------------------- +// Return the cosine of the angle between two vectors. If a workplane is +// specified, then it's the cosine of their projections into that workplane. +//----------------------------------------------------------------------------- +Expr *ConstraintBase::DirectionCosine(hEntity wrkpl, + ExprVector ae, ExprVector be) +{ + if(wrkpl.v == EntityBase::FREE_IN_3D.v) { + Expr *mags = (ae.Magnitude())->Times(be.Magnitude()); + return (ae.Dot(be))->Div(mags); + } else { + EntityBase *w = SK.GetEntity(wrkpl); + ExprVector u = w->Normal()->NormalExprsU(); + ExprVector v = w->Normal()->NormalExprsV(); + Expr *ua = u.Dot(ae); + Expr *va = v.Dot(ae); + Expr *ub = u.Dot(be); + Expr *vb = v.Dot(be); + Expr *maga = (ua->Square()->Plus(va->Square()))->Sqrt(); + Expr *magb = (ub->Square()->Plus(vb->Square()))->Sqrt(); + Expr *dot = (ua->Times(ub))->Plus(va->Times(vb)); + return dot->Div(maga->Times(magb)); + } +} + +ExprVector ConstraintBase::PointInThreeSpace(hEntity workplane, + Expr *u, Expr *v) +{ + EntityBase *w = SK.GetEntity(workplane); + + ExprVector ub = w->Normal()->NormalExprsU(); + ExprVector vb = w->Normal()->NormalExprsV(); + ExprVector ob = w->WorkplaneGetOffsetExprs(); + + return (ub.ScaledBy(u)).Plus(vb.ScaledBy(v)).Plus(ob); +} + +void ConstraintBase::ModifyToSatisfy(void) { + if(type == ANGLE) { + Vector a = SK.GetEntity(entityA)->VectorGetNum(); + Vector b = SK.GetEntity(entityB)->VectorGetNum(); + if(other) a = a.ScaledBy(-1); + if(workplane.v != EntityBase::FREE_IN_3D.v) { + a = a.ProjectVectorInto(workplane); + b = b.ProjectVectorInto(workplane); + } + double c = (a.Dot(b))/(a.Magnitude() * b.Magnitude()); + valA = acos(c)*180/PI; + } else { + // We'll fix these ones up by looking at their symbolic equation; + // that means no extra work. + IdList l = {}; + // Generate the equations even if this is a reference dimension + GenerateReal(&l); + if(l.n != 1) oops(); + + // These equations are written in the form f(...) - d = 0, where + // d is the value of the valA. + valA += (l.elem[0].e)->Eval(); + + l.Clear(); + } +} + +void ConstraintBase::AddEq(IdList *l, Expr *expr, int index) +{ + Equation eq; + eq.e = expr; + eq.h = h.equation(index); + l->Add(&eq); +} + +void ConstraintBase::Generate(IdList *l) { + if(!reference) { + GenerateReal(l); + } +} +void ConstraintBase::GenerateReal(IdList *l) { + Expr *exA = Expr::From(valA); + + switch(type) { + case PT_PT_DISTANCE: + AddEq(l, Distance(workplane, ptA, ptB)->Minus(exA), 0); + break; + + case PROJ_PT_DISTANCE: { + ExprVector pA = SK.GetEntity(ptA)->PointGetExprs(), + pB = SK.GetEntity(ptB)->PointGetExprs(), + dp = pB.Minus(pA); + + ExprVector pp = SK.GetEntity(entityA)->VectorGetExprs(); + pp = pp.WithMagnitude(Expr::From(1.0)); + + AddEq(l, (dp.Dot(pp))->Minus(exA), 0); + break; + } + + case PT_LINE_DISTANCE: + AddEq(l, + PointLineDistance(workplane, ptA, entityA)->Minus(exA), 0); + break; + + case PT_PLANE_DISTANCE: { + ExprVector pt = SK.GetEntity(ptA)->PointGetExprs(); + AddEq(l, (PointPlaneDistance(pt, entityA))->Minus(exA), 0); + break; + } + + case PT_FACE_DISTANCE: { + ExprVector pt = SK.GetEntity(ptA)->PointGetExprs(); + EntityBase *f = SK.GetEntity(entityA); + ExprVector p0 = f->FaceGetPointExprs(); + ExprVector n = f->FaceGetNormalExprs(); + AddEq(l, (pt.Minus(p0)).Dot(n)->Minus(exA), 0); + break; + } + + case EQUAL_LENGTH_LINES: { + EntityBase *a = SK.GetEntity(entityA); + EntityBase *b = SK.GetEntity(entityB); + AddEq(l, Distance(workplane, a->point[0], a->point[1])->Minus( + Distance(workplane, b->point[0], b->point[1])), 0); + break; + } + + // These work on distance squared, since the pt-line distances are + // signed, and we want the absolute value. + case EQ_LEN_PT_LINE_D: { + EntityBase *forLen = SK.GetEntity(entityA); + Expr *d1 = Distance(workplane, forLen->point[0], forLen->point[1]); + Expr *d2 = PointLineDistance(workplane, ptA, entityB); + AddEq(l, (d1->Square())->Minus(d2->Square()), 0); + break; + } + case EQ_PT_LN_DISTANCES: { + Expr *d1 = PointLineDistance(workplane, ptA, entityA); + Expr *d2 = PointLineDistance(workplane, ptB, entityB); + AddEq(l, (d1->Square())->Minus(d2->Square()), 0); + break; + } + + case LENGTH_RATIO: { + EntityBase *a = SK.GetEntity(entityA); + EntityBase *b = SK.GetEntity(entityB); + Expr *la = Distance(workplane, a->point[0], a->point[1]); + Expr *lb = Distance(workplane, b->point[0], b->point[1]); + AddEq(l, (la->Div(lb))->Minus(exA), 0); + break; + } + + case LENGTH_DIFFERENCE: { + EntityBase *a = SK.GetEntity(entityA); + EntityBase *b = SK.GetEntity(entityB); + Expr *la = Distance(workplane, a->point[0], a->point[1]); + Expr *lb = Distance(workplane, b->point[0], b->point[1]); + AddEq(l, (la->Minus(lb))->Minus(exA), 0); + break; + } + + case DIAMETER: { + EntityBase *circle = SK.GetEntity(entityA); + Expr *r = circle->CircleGetRadiusExpr(); + AddEq(l, (r->Times(Expr::From(2)))->Minus(exA), 0); + break; + } + + case EQUAL_RADIUS: { + EntityBase *c1 = SK.GetEntity(entityA); + EntityBase *c2 = SK.GetEntity(entityB); + AddEq(l, (c1->CircleGetRadiusExpr())->Minus( + c2->CircleGetRadiusExpr()), 0); + break; + } + + case EQUAL_LINE_ARC_LEN: { + EntityBase *line = SK.GetEntity(entityA), + *arc = SK.GetEntity(entityB); + + // Get the line length + ExprVector l0 = SK.GetEntity(line->point[0])->PointGetExprs(), + l1 = SK.GetEntity(line->point[1])->PointGetExprs(); + Expr *ll = (l1.Minus(l0)).Magnitude(); + + // And get the arc radius, and the cosine of its angle + EntityBase *ao = SK.GetEntity(arc->point[0]), + *as = SK.GetEntity(arc->point[1]), + *af = SK.GetEntity(arc->point[2]); + + ExprVector aos = (as->PointGetExprs()).Minus(ao->PointGetExprs()), + aof = (af->PointGetExprs()).Minus(ao->PointGetExprs()); + Expr *r = aof.Magnitude(); + + ExprVector n = arc->Normal()->NormalExprsN(); + ExprVector u = aos.WithMagnitude(Expr::From(1.0)); + ExprVector v = n.Cross(u); + // so in our new csys, we start at (1, 0, 0) + Expr *costheta = aof.Dot(u)->Div(r); + Expr *sintheta = aof.Dot(v)->Div(r); + + double thetas, thetaf, dtheta; + arc->ArcGetAngles(&thetas, &thetaf, &dtheta); + Expr *theta; + if(dtheta < 3*PI/4) { + theta = costheta->ACos(); + } else if(dtheta < 5*PI/4) { + // As the angle crosses pi, cos theta is not invertible; + // so use the sine to stop blowing up + theta = Expr::From(PI)->Minus(sintheta->ASin()); + } else { + theta = (Expr::From(2*PI))->Minus(costheta->ACos()); + } + + // And write the equation; r*theta = L + AddEq(l, (r->Times(theta))->Minus(ll), 0); + break; + } + + case POINTS_COINCIDENT: { + EntityBase *a = SK.GetEntity(ptA); + EntityBase *b = SK.GetEntity(ptB); + if(workplane.v == EntityBase::FREE_IN_3D.v) { + ExprVector pa = a->PointGetExprs(); + ExprVector pb = b->PointGetExprs(); + AddEq(l, pa.x->Minus(pb.x), 0); + AddEq(l, pa.y->Minus(pb.y), 1); + AddEq(l, pa.z->Minus(pb.z), 2); + } else { + Expr *au, *av; + Expr *bu, *bv; + a->PointGetExprsInWorkplane(workplane, &au, &av); + b->PointGetExprsInWorkplane(workplane, &bu, &bv); + AddEq(l, au->Minus(bu), 0); + AddEq(l, av->Minus(bv), 1); + } + break; + } + + case PT_IN_PLANE: + // This one works the same, whether projected or not. + AddEq(l, PointPlaneDistance( + SK.GetEntity(ptA)->PointGetExprs(), entityA), 0); + break; + + case PT_ON_FACE: { + // a plane, n dot (p - p0) = 0 + ExprVector p = SK.GetEntity(ptA)->PointGetExprs(); + EntityBase *f = SK.GetEntity(entityA); + ExprVector p0 = f->FaceGetPointExprs(); + ExprVector n = f->FaceGetNormalExprs(); + AddEq(l, (p.Minus(p0)).Dot(n), 0); + break; + } + + case PT_ON_LINE: + if(workplane.v == EntityBase::FREE_IN_3D.v) { + EntityBase *ln = SK.GetEntity(entityA); + EntityBase *a = SK.GetEntity(ln->point[0]); + EntityBase *b = SK.GetEntity(ln->point[1]); + EntityBase *p = SK.GetEntity(ptA); + + ExprVector ep = p->PointGetExprs(); + ExprVector ea = a->PointGetExprs(); + ExprVector eb = b->PointGetExprs(); + ExprVector eab = ea.Minus(eb); + + // Construct a vector from the point to either endpoint of + // the line segment, and choose the longer of these. + ExprVector eap = ea.Minus(ep); + ExprVector ebp = eb.Minus(ep); + ExprVector elp = + (ebp.Magnitude()->Eval() > eap.Magnitude()->Eval()) ? + ebp : eap; + + if(p->group.v == group.v) { + AddEq(l, VectorsParallel(0, eab, elp), 0); + AddEq(l, VectorsParallel(1, eab, elp), 1); + } else { + AddEq(l, VectorsParallel(0, elp, eab), 0); + AddEq(l, VectorsParallel(1, elp, eab), 1); + } + } else { + AddEq(l, PointLineDistance(workplane, ptA, entityA), 0); + } + break; + + case PT_ON_CIRCLE: { + // This actually constrains the point to lie on the cylinder. + EntityBase *circle = SK.GetEntity(entityA); + ExprVector center = SK.GetEntity(circle->point[0])->PointGetExprs(); + ExprVector pt = SK.GetEntity(ptA)->PointGetExprs(); + EntityBase *normal = SK.GetEntity(circle->normal); + ExprVector u = normal->NormalExprsU(), + v = normal->NormalExprsV(); + + Expr *du = (center.Minus(pt)).Dot(u), + *dv = (center.Minus(pt)).Dot(v); + + Expr *r = circle->CircleGetRadiusExpr(); + + AddEq(l, + ((du->Square())->Plus(dv->Square()))->Minus(r->Square()), 0); + break; + } + + case AT_MIDPOINT: + if(workplane.v == EntityBase::FREE_IN_3D.v) { + EntityBase *ln = SK.GetEntity(entityA); + ExprVector a = SK.GetEntity(ln->point[0])->PointGetExprs(); + ExprVector b = SK.GetEntity(ln->point[1])->PointGetExprs(); + ExprVector m = (a.Plus(b)).ScaledBy(Expr::From(0.5)); + + if(ptA.v) { + ExprVector p = SK.GetEntity(ptA)->PointGetExprs(); + AddEq(l, (m.x)->Minus(p.x), 0); + AddEq(l, (m.y)->Minus(p.y), 1); + AddEq(l, (m.z)->Minus(p.z), 2); + } else { + AddEq(l, PointPlaneDistance(m, entityB), 0); + } + } else { + EntityBase *ln = SK.GetEntity(entityA); + EntityBase *a = SK.GetEntity(ln->point[0]); + EntityBase *b = SK.GetEntity(ln->point[1]); + + Expr *au, *av, *bu, *bv; + a->PointGetExprsInWorkplane(workplane, &au, &av); + b->PointGetExprsInWorkplane(workplane, &bu, &bv); + Expr *mu = Expr::From(0.5)->Times(au->Plus(bu)); + Expr *mv = Expr::From(0.5)->Times(av->Plus(bv)); + + if(ptA.v) { + EntityBase *p = SK.GetEntity(ptA); + Expr *pu, *pv; + p->PointGetExprsInWorkplane(workplane, &pu, &pv); + AddEq(l, pu->Minus(mu), 0); + AddEq(l, pv->Minus(mv), 1); + } else { + ExprVector m = PointInThreeSpace(workplane, mu, mv); + AddEq(l, PointPlaneDistance(m, entityB), 0); + } + } + break; + + case SYMMETRIC: + if(workplane.v == EntityBase::FREE_IN_3D.v) { + EntityBase *plane = SK.GetEntity(entityA); + EntityBase *ea = SK.GetEntity(ptA); + EntityBase *eb = SK.GetEntity(ptB); + ExprVector a = ea->PointGetExprs(); + ExprVector b = eb->PointGetExprs(); + + // The midpoint of the line connecting the symmetric points + // lies on the plane of the symmetry. + ExprVector m = (a.Plus(b)).ScaledBy(Expr::From(0.5)); + AddEq(l, PointPlaneDistance(m, plane->h), 0); + + // And projected into the plane of symmetry, the points are + // coincident. + Expr *au, *av, *bu, *bv; + ea->PointGetExprsInWorkplane(plane->h, &au, &av); + eb->PointGetExprsInWorkplane(plane->h, &bu, &bv); + AddEq(l, au->Minus(bu), 1); + AddEq(l, av->Minus(bv), 2); + } else { + EntityBase *plane = SK.GetEntity(entityA); + EntityBase *a = SK.GetEntity(ptA); + EntityBase *b = SK.GetEntity(ptB); + + Expr *au, *av, *bu, *bv; + a->PointGetExprsInWorkplane(workplane, &au, &av); + b->PointGetExprsInWorkplane(workplane, &bu, &bv); + Expr *mu = Expr::From(0.5)->Times(au->Plus(bu)); + Expr *mv = Expr::From(0.5)->Times(av->Plus(bv)); + + ExprVector m = PointInThreeSpace(workplane, mu, mv); + AddEq(l, PointPlaneDistance(m, plane->h), 0); + + // Construct a vector within the workplane that is normal + // to the symmetry pane's normal (i.e., that lies in the + // plane of symmetry). The line connecting the points is + // perpendicular to that constructed vector. + EntityBase *w = SK.GetEntity(workplane); + ExprVector u = w->Normal()->NormalExprsU(); + ExprVector v = w->Normal()->NormalExprsV(); + + ExprVector pa = a->PointGetExprs(); + ExprVector pb = b->PointGetExprs(); + ExprVector n; + Expr *d; + plane->WorkplaneGetPlaneExprs(&n, &d); + AddEq(l, (n.Cross(u.Cross(v))).Dot(pa.Minus(pb)), 1); + } + break; + + case SYMMETRIC_HORIZ: + case SYMMETRIC_VERT: { + EntityBase *a = SK.GetEntity(ptA); + EntityBase *b = SK.GetEntity(ptB); + + Expr *au, *av, *bu, *bv; + a->PointGetExprsInWorkplane(workplane, &au, &av); + b->PointGetExprsInWorkplane(workplane, &bu, &bv); + + if(type == SYMMETRIC_HORIZ) { + AddEq(l, av->Minus(bv), 0); + AddEq(l, au->Plus(bu), 1); + } else { + AddEq(l, au->Minus(bu), 0); + AddEq(l, av->Plus(bv), 1); + } + break; + } + + case SYMMETRIC_LINE: { + EntityBase *pa = SK.GetEntity(ptA); + EntityBase *pb = SK.GetEntity(ptB); + + Expr *pau, *pav, *pbu, *pbv; + pa->PointGetExprsInWorkplane(workplane, &pau, &pav); + pb->PointGetExprsInWorkplane(workplane, &pbu, &pbv); + + EntityBase *ln = SK.GetEntity(entityA); + EntityBase *la = SK.GetEntity(ln->point[0]); + EntityBase *lb = SK.GetEntity(ln->point[1]); + Expr *lau, *lav, *lbu, *lbv; + la->PointGetExprsInWorkplane(workplane, &lau, &lav); + lb->PointGetExprsInWorkplane(workplane, &lbu, &lbv); + + Expr *dpu = pbu->Minus(pau), *dpv = pbv->Minus(pav); + Expr *dlu = lbu->Minus(lau), *dlv = lbv->Minus(lav); + + // The line through the points is perpendicular to the line + // of symmetry. + AddEq(l, (dlu->Times(dpu))->Plus(dlv->Times(dpv)), 0); + + // And the signed distances of the points to the line are + // equal in magnitude and opposite in sign, so sum to zero + Expr *dista = (dlv->Times(lau->Minus(pau)))->Minus( + (dlu->Times(lav->Minus(pav)))); + Expr *distb = (dlv->Times(lau->Minus(pbu)))->Minus( + (dlu->Times(lav->Minus(pbv)))); + AddEq(l, dista->Plus(distb), 1); + + break; + } + + case HORIZONTAL: + case VERTICAL: { + hEntity ha, hb; + if(entityA.v) { + EntityBase *e = SK.GetEntity(entityA); + ha = e->point[0]; + hb = e->point[1]; + } else { + ha = ptA; + hb = ptB; + } + EntityBase *a = SK.GetEntity(ha); + EntityBase *b = SK.GetEntity(hb); + + Expr *au, *av, *bu, *bv; + a->PointGetExprsInWorkplane(workplane, &au, &av); + b->PointGetExprsInWorkplane(workplane, &bu, &bv); + + AddEq(l, (type == HORIZONTAL) ? av->Minus(bv) : au->Minus(bu), 0); + break; + } + + case SAME_ORIENTATION: { + EntityBase *a = SK.GetEntity(entityA); + EntityBase *b = SK.GetEntity(entityB); + if(b->group.v != group.v) { + swap(a, b); + } + + ExprVector au = a->NormalExprsU(), + an = a->NormalExprsN(); + ExprVector bu = b->NormalExprsU(), + bv = b->NormalExprsV(), + bn = b->NormalExprsN(); + + AddEq(l, VectorsParallel(0, an, bn), 0); + AddEq(l, VectorsParallel(1, an, bn), 1); + Expr *d1 = au.Dot(bv); + Expr *d2 = au.Dot(bu); + // Allow either orientation for the coordinate system, depending + // on how it was drawn. + if(fabs(d1->Eval()) < fabs(d2->Eval())) { + AddEq(l, d1, 2); + } else { + AddEq(l, d2, 2); + } + break; + } + + case PERPENDICULAR: + case ANGLE: { + EntityBase *a = SK.GetEntity(entityA); + EntityBase *b = SK.GetEntity(entityB); + ExprVector ae = a->VectorGetExprs(); + ExprVector be = b->VectorGetExprs(); + if(other) ae = ae.ScaledBy(Expr::From(-1)); + Expr *c = DirectionCosine(workplane, ae, be); + + if(type == ANGLE) { + // The direction cosine is equal to the cosine of the + // specified angle + Expr *rads = exA->Times(Expr::From(PI/180)), + *rc = rads->Cos(); + double arc = fabs(rc->Eval()); + // avoid false detection of inconsistent systems by gaining + // up as the difference in dot products gets small at small + // angles; doubles still have plenty of precision, only + // problem is that rank test + Expr *mult = Expr::From(arc > 0.99 ? 0.01/(1.00001 - arc) : 1); + AddEq(l, (c->Minus(rc))->Times(mult), 0); + } else { + // The dot product (and therefore the direction cosine) + // is equal to zero, perpendicular. + AddEq(l, c, 0); + } + break; + } + + case EQUAL_ANGLE: { + EntityBase *a = SK.GetEntity(entityA); + EntityBase *b = SK.GetEntity(entityB); + EntityBase *c = SK.GetEntity(entityC); + EntityBase *d = SK.GetEntity(entityD); + ExprVector ae = a->VectorGetExprs(); + ExprVector be = b->VectorGetExprs(); + ExprVector ce = c->VectorGetExprs(); + ExprVector de = d->VectorGetExprs(); + + if(other) ae = ae.ScaledBy(Expr::From(-1)); + + Expr *cab = DirectionCosine(workplane, ae, be); + Expr *ccd = DirectionCosine(workplane, ce, de); + + AddEq(l, cab->Minus(ccd), 0); + break; + } + + case ARC_LINE_TANGENT: { + EntityBase *arc = SK.GetEntity(entityA); + EntityBase *line = SK.GetEntity(entityB); + + ExprVector ac = SK.GetEntity(arc->point[0])->PointGetExprs(); + ExprVector ap = + SK.GetEntity(arc->point[other ? 2 : 1])->PointGetExprs(); + + ExprVector ld = line->VectorGetExprs(); + + // The line is perpendicular to the radius + AddEq(l, ld.Dot(ac.Minus(ap)), 0); + break; + } + + case CUBIC_LINE_TANGENT: { + EntityBase *cubic = SK.GetEntity(entityA); + EntityBase *line = SK.GetEntity(entityB); + + ExprVector a; + if(other) { + a = cubic->CubicGetFinishTangentExprs(); + } else { + a = cubic->CubicGetStartTangentExprs(); + } + + ExprVector b = line->VectorGetExprs(); + + if(workplane.v == EntityBase::FREE_IN_3D.v) { + AddEq(l, VectorsParallel(0, a, b), 0); + AddEq(l, VectorsParallel(1, a, b), 1); + } else { + EntityBase *w = SK.GetEntity(workplane); + ExprVector wn = w->Normal()->NormalExprsN(); + AddEq(l, (a.Cross(b)).Dot(wn), 0); + } + break; + } + + case CURVE_CURVE_TANGENT: { + bool parallel = true; + int i; + ExprVector dir[2]; + for(i = 0; i < 2; i++) { + EntityBase *e = SK.GetEntity((i == 0) ? entityA : entityB); + bool oth = (i == 0) ? other : other2; + + if(e->type == Entity::ARC_OF_CIRCLE) { + ExprVector center, endpoint; + center = SK.GetEntity(e->point[0])->PointGetExprs(); + endpoint = + SK.GetEntity(e->point[oth ? 2 : 1])->PointGetExprs(); + dir[i] = endpoint.Minus(center); + // We're using the vector from the center of the arc to + // an endpoint; so that's normal to the tangent, not + // parallel. + parallel = !parallel; + } else if(e->type == Entity::CUBIC) { + if(oth) { + dir[i] = e->CubicGetFinishTangentExprs(); + } else { + dir[i] = e->CubicGetStartTangentExprs(); + } + } else { + oops(); + } + } + if(parallel) { + EntityBase *w = SK.GetEntity(workplane); + ExprVector wn = w->Normal()->NormalExprsN(); + AddEq(l, ((dir[0]).Cross(dir[1])).Dot(wn), 0); + } else { + AddEq(l, (dir[0]).Dot(dir[1]), 0); + } + break; + } + + case PARALLEL: { + EntityBase *ea = SK.GetEntity(entityA), *eb = SK.GetEntity(entityB); + if(eb->group.v != group.v) { + swap(ea, eb); + } + ExprVector a = ea->VectorGetExprs(); + ExprVector b = eb->VectorGetExprs(); + + if(workplane.v == EntityBase::FREE_IN_3D.v) { + AddEq(l, VectorsParallel(0, a, b), 0); + AddEq(l, VectorsParallel(1, a, b), 1); + } else { + EntityBase *w = SK.GetEntity(workplane); + ExprVector wn = w->Normal()->NormalExprsN(); + AddEq(l, (a.Cross(b)).Dot(wn), 0); + } + break; + } + + case WHERE_DRAGGED: { + EntityBase *ep = SK.GetEntity(ptA); + if(workplane.v == EntityBase::FREE_IN_3D.v) { + ExprVector ev = ep->PointGetExprs(); + Vector v = ep->PointGetNum(); + + AddEq(l, ev.x->Minus(Expr::From(v.x)), 0); + AddEq(l, ev.y->Minus(Expr::From(v.y)), 1); + AddEq(l, ev.z->Minus(Expr::From(v.z)), 2); + } else { + Expr *u, *v; + ep->PointGetExprsInWorkplane(workplane, &u, &v); + AddEq(l, u->Minus(Expr::From(u->Eval())), 0); + AddEq(l, v->Minus(Expr::From(v->Eval())), 1); + } + break; + } + + case COMMENT: + break; + + default: oops(); + } +} + diff --git a/src/describescreen.cpp b/src/describescreen.cpp new file mode 100644 index 0000000..b91993f --- /dev/null +++ b/src/describescreen.cpp @@ -0,0 +1,377 @@ +//----------------------------------------------------------------------------- +// The screens when an entity is selected, that show some description of it-- +// endpoints of the lines, diameter of the circle, etc. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +void TextWindow::ScreenUnselectAll(int link, uint32_t v) { + GraphicsWindow::MenuEdit(GraphicsWindow::MNU_UNSELECT_ALL); +} + +void TextWindow::ScreenEditTtfText(int link, uint32_t v) { + hRequest hr = { v }; + Request *r = SK.GetRequest(hr); + + SS.TW.ShowEditControl(10, r->str); + SS.TW.edit.meaning = EDIT_TTF_TEXT; + SS.TW.edit.request = hr; +} + +#define gs (SS.GW.gs) +void TextWindow::ScreenSetTtfFont(int link, uint32_t v) { + int i = (int)v; + if(i < 0) return; + if(i >= SS.fonts.l.n) return; + + SS.GW.GroupSelection(); + if(gs.entities != 1 || gs.n != 1) return; + + Entity *e = SK.entity.FindByIdNoOops(gs.entity[0]); + if(!e || e->type != Entity::TTF_TEXT || !e->h.isFromRequest()) return; + + Request *r = SK.request.FindByIdNoOops(e->h.request()); + if(!r) return; + + SS.UndoRemember(); + r->font = SS.fonts.l.elem[i].FontFileBaseName(); + SS.MarkGroupDirty(r->group); + SS.ScheduleGenerateAll(); + SS.ScheduleShowTW(); +} + +void TextWindow::ScreenConstraintShowAsRadius(int link, uint32_t v) { + hConstraint hc = { v }; + Constraint *c = SK.GetConstraint(hc); + + SS.UndoRemember(); + c->other = !c->other; + + SS.ScheduleShowTW(); +} + +void TextWindow::DescribeSelection(void) { + Entity *e; + Vector p; + int i; + Printf(false, ""); + + if(gs.n == 1 && (gs.points == 1 || gs.entities == 1)) { + e = SK.GetEntity(gs.points == 1 ? gs.point[0] : gs.entity[0]); + +#define COSTR(p) \ + SS.MmToString((p).x).c_str(), \ + SS.MmToString((p).y).c_str(), \ + SS.MmToString((p).z).c_str() +#define PT_AS_STR "(%Fi%s%E, %Fi%s%E, %Fi%s%E)" +#define PT_AS_NUM "(%Fi%3%E, %Fi%3%E, %Fi%3%E)" + switch(e->type) { + case Entity::POINT_IN_3D: + case Entity::POINT_IN_2D: + case Entity::POINT_N_TRANS: + case Entity::POINT_N_ROT_TRANS: + case Entity::POINT_N_COPY: + case Entity::POINT_N_ROT_AA: + p = e->PointGetNum(); + Printf(false, "%FtPOINT%E at " PT_AS_STR, COSTR(p)); + break; + + case Entity::NORMAL_IN_3D: + case Entity::NORMAL_IN_2D: + case Entity::NORMAL_N_COPY: + case Entity::NORMAL_N_ROT: + case Entity::NORMAL_N_ROT_AA: { + Quaternion q = e->NormalGetNum(); + p = q.RotationN(); + Printf(false, "%FtNORMAL / COORDINATE SYSTEM%E"); + Printf(true, " basis n = " PT_AS_NUM, CO(p)); + p = q.RotationU(); + Printf(false, " u = " PT_AS_NUM, CO(p)); + p = q.RotationV(); + Printf(false, " v = " PT_AS_NUM, CO(p)); + break; + } + case Entity::WORKPLANE: { + p = SK.GetEntity(e->point[0])->PointGetNum(); + Printf(false, "%FtWORKPLANE%E"); + Printf(true, " origin = " PT_AS_STR, COSTR(p)); + Quaternion q = e->Normal()->NormalGetNum(); + p = q.RotationN(); + Printf(true, " normal = " PT_AS_NUM, CO(p)); + break; + } + case Entity::LINE_SEGMENT: { + Vector p0 = SK.GetEntity(e->point[0])->PointGetNum(); + p = p0; + Printf(false, "%FtLINE SEGMENT%E"); + Printf(true, " thru " PT_AS_STR, COSTR(p)); + Vector p1 = SK.GetEntity(e->point[1])->PointGetNum(); + p = p1; + Printf(false, " " PT_AS_STR, COSTR(p)); + Printf(true, " len = %Fi%s%E", + SS.MmToString((p1.Minus(p0).Magnitude())).c_str()); + break; + } + case Entity::CUBIC_PERIODIC: + case Entity::CUBIC: + int pts; + if(e->type == Entity::CUBIC_PERIODIC) { + Printf(false, "%FtPERIODIC C2 CUBIC SPLINE%E"); + pts = (3 + e->extraPoints); + } else if(e->extraPoints > 0) { + Printf(false, "%FtINTERPOLATING C2 CUBIC SPLINE%E"); + pts = (4 + e->extraPoints); + } else { + Printf(false, "%FtCUBIC BEZIER CURVE%E"); + pts = 4; + } + for(i = 0; i < pts; i++) { + p = SK.GetEntity(e->point[i])->PointGetNum(); + Printf((i==0), " p%d = " PT_AS_STR, i, COSTR(p)); + } + break; + + case Entity::ARC_OF_CIRCLE: { + Printf(false, "%FtARC OF A CIRCLE%E"); + p = SK.GetEntity(e->point[0])->PointGetNum(); + Printf(true, " center = " PT_AS_STR, COSTR(p)); + p = SK.GetEntity(e->point[1])->PointGetNum(); + Printf(true, " endpoints = " PT_AS_STR, COSTR(p)); + p = SK.GetEntity(e->point[2])->PointGetNum(); + Printf(false, " " PT_AS_STR, COSTR(p)); + double r = e->CircleGetRadiusNum(); + Printf(true, " diameter = %Fi%s", SS.MmToString(r*2).c_str()); + Printf(false, " radius = %Fi%s", SS.MmToString(r).c_str()); + double thetas, thetaf, dtheta; + e->ArcGetAngles(&thetas, &thetaf, &dtheta); + Printf(false, " arc len = %Fi%s", SS.MmToString(dtheta*r).c_str()); + break; + } + case Entity::CIRCLE: { + Printf(false, "%FtCIRCLE%E"); + p = SK.GetEntity(e->point[0])->PointGetNum(); + Printf(true, " center = " PT_AS_STR, COSTR(p)); + double r = e->CircleGetRadiusNum(); + Printf(true, " diameter = %Fi%s", SS.MmToString(r*2).c_str()); + Printf(false, " radius = %Fi%s", SS.MmToString(r).c_str()); + break; + } + case Entity::FACE_NORMAL_PT: + case Entity::FACE_XPROD: + case Entity::FACE_N_ROT_TRANS: + case Entity::FACE_N_ROT_AA: + case Entity::FACE_N_TRANS: + Printf(false, "%FtPLANE FACE%E"); + p = e->FaceGetNormalNum(); + Printf(true, " normal = " PT_AS_NUM, CO(p)); + p = e->FaceGetPointNum(); + Printf(false, " thru = " PT_AS_STR, COSTR(p)); + break; + + case Entity::TTF_TEXT: { + Printf(false, "%FtTRUETYPE FONT TEXT%E"); + Printf(true, " font = '%Fi%s%E'", e->font.c_str()); + if(e->h.isFromRequest()) { + Printf(false, " text = '%Fi%s%E' %Fl%Ll%f%D[change]%E", + e->str.c_str(), &ScreenEditTtfText, e->h.request().v); + Printf(true, " select new font"); + SS.fonts.LoadAll(); + int i; + for(i = 0; i < SS.fonts.l.n; i++) { + TtfFont *tf = &(SS.fonts.l.elem[i]); + if(e->font == tf->FontFileBaseName()) { + Printf(false, "%Bp %s", + (i & 1) ? 'd' : 'a', + tf->name.c_str()); + } else { + Printf(false, "%Bp %f%D%Fl%Ll%s%E%Bp", + (i & 1) ? 'd' : 'a', + &ScreenSetTtfFont, i, + tf->name.c_str(), + (i & 1) ? 'd' : 'a'); + } + } + } else { + Printf(false, " text = '%Fi%s%E'", e->str.c_str()); + } + break; + } + + default: + Printf(true, "%Ft?? ENTITY%E"); + break; + } + + Group *g = SK.GetGroup(e->group); + Printf(false, ""); + Printf(false, "%FtIN GROUP%E %s", g->DescriptionString().c_str()); + if(e->workplane.v == Entity::FREE_IN_3D.v) { + Printf(false, "%FtNOT LOCKED IN WORKPLANE%E"); + } else { + Entity *w = SK.GetEntity(e->workplane); + Printf(false, "%FtIN WORKPLANE%E %s", w->DescriptionString().c_str()); + } + if(e->style.v) { + Style *s = Style::Get(e->style); + Printf(false, "%FtIN STYLE%E %s", s->DescriptionString().c_str()); + } else { + Printf(false, "%FtIN STYLE%E none"); + } + if(e->construction) { + Printf(false, "%FtCONSTRUCTION"); + } + } else if(gs.n == 2 && gs.points == 2) { + Printf(false, "%FtTWO POINTS"); + Vector p0 = SK.GetEntity(gs.point[0])->PointGetNum(); + Printf(true, " at " PT_AS_STR, COSTR(p0)); + Vector p1 = SK.GetEntity(gs.point[1])->PointGetNum(); + Printf(false, " " PT_AS_STR, COSTR(p1)); + double d = (p1.Minus(p0)).Magnitude(); + Printf(true, " d = %Fi%s", SS.MmToString(d).c_str()); + } else if(gs.n == 2 && gs.points == 1 && gs.circlesOrArcs == 1) { + Entity *ec = SK.GetEntity(gs.entity[0]); + if(ec->type == Entity::CIRCLE) { + Printf(false, "%FtPOINT AND A CIRCLE"); + } else if(ec->type == Entity::ARC_OF_CIRCLE) { + Printf(false, "%FtPOINT AND AN ARC"); + } else oops(); + Vector p = SK.GetEntity(gs.point[0])->PointGetNum(); + Printf(true, " pt at " PT_AS_STR, COSTR(p)); + Vector c = SK.GetEntity(ec->point[0])->PointGetNum(); + Printf(true, " center = " PT_AS_STR, COSTR(c)); + double r = ec->CircleGetRadiusNum(); + Printf(false, " diameter = %Fi%s", SS.MmToString(r*2).c_str()); + Printf(false, " radius = %Fi%s", SS.MmToString(r).c_str()); + double d = (p.Minus(c)).Magnitude() - r; + Printf(true, " distance = %Fi%s", SS.MmToString(d).c_str()); + } else if(gs.n == 2 && gs.faces == 1 && gs.points == 1) { + Printf(false, "%FtA POINT AND A PLANE FACE"); + Vector pt = SK.GetEntity(gs.point[0])->PointGetNum(); + Printf(true, " point = " PT_AS_STR, COSTR(pt)); + Vector n = SK.GetEntity(gs.face[0])->FaceGetNormalNum(); + Printf(true, " plane normal = " PT_AS_NUM, CO(n)); + Vector pl = SK.GetEntity(gs.face[0])->FaceGetPointNum(); + Printf(false, " plane thru = " PT_AS_STR, COSTR(pl)); + double dd = n.Dot(pl) - n.Dot(pt); + Printf(true, " distance = %Fi%s", SS.MmToString(dd).c_str()); + } else if(gs.n == 3 && gs.points == 2 && gs.vectors == 1) { + Printf(false, "%FtTWO POINTS AND A VECTOR"); + Vector p0 = SK.GetEntity(gs.point[0])->PointGetNum(); + Printf(true, " pointA = " PT_AS_STR, COSTR(p0)); + Vector p1 = SK.GetEntity(gs.point[1])->PointGetNum(); + Printf(false, " pointB = " PT_AS_STR, COSTR(p1)); + Vector v = SK.GetEntity(gs.vector[0])->VectorGetNum(); + v = v.WithMagnitude(1); + Printf(true, " vector = " PT_AS_NUM, CO(v)); + double d = (p1.Minus(p0)).Dot(v); + Printf(true, " proj_d = %Fi%s", SS.MmToString(d).c_str()); + } else if(gs.n == 2 && gs.lineSegments == 1 && gs.points == 1) { + Entity *ln = SK.GetEntity(gs.entity[0]); + Vector lp0 = SK.GetEntity(ln->point[0])->PointGetNum(), + lp1 = SK.GetEntity(ln->point[1])->PointGetNum(); + Printf(false, "%FtLINE SEGMENT AND POINT%E"); + Printf(true, " ln thru " PT_AS_STR, COSTR(lp0)); + Printf(false, " " PT_AS_STR, COSTR(lp1)); + Vector pp = SK.GetEntity(gs.point[0])->PointGetNum(); + Printf(true, " point " PT_AS_STR, COSTR(pp)); + Printf(true, " pt-ln distance = %Fi%s%E", + SS.MmToString(pp.DistanceToLine(lp0, lp1.Minus(lp0))).c_str()); + } else if(gs.n == 2 && gs.vectors == 2) { + Printf(false, "%FtTWO VECTORS"); + + Vector v0 = SK.GetEntity(gs.entity[0])->VectorGetNum(), + v1 = SK.GetEntity(gs.entity[1])->VectorGetNum(); + v0 = v0.WithMagnitude(1); + v1 = v1.WithMagnitude(1); + + Printf(true, " vectorA = " PT_AS_NUM, CO(v0)); + Printf(false, " vectorB = " PT_AS_NUM, CO(v1)); + + double theta = acos(v0.Dot(v1)); + Printf(true, " angle = %Fi%2%E degrees", theta*180/PI); + while(theta < PI/2) theta += PI; + while(theta > PI/2) theta -= PI; + Printf(false, " or angle = %Fi%2%E (mod 180)", theta*180/PI); + } else if(gs.n == 2 && gs.faces == 2) { + Printf(false, "%FtTWO PLANE FACES"); + + Vector n0 = SK.GetEntity(gs.face[0])->FaceGetNormalNum(); + Printf(true, " planeA normal = " PT_AS_NUM, CO(n0)); + Vector p0 = SK.GetEntity(gs.face[0])->FaceGetPointNum(); + Printf(false, " planeA thru = " PT_AS_STR, COSTR(p0)); + + Vector n1 = SK.GetEntity(gs.face[1])->FaceGetNormalNum(); + Printf(true, " planeB normal = " PT_AS_NUM, CO(n1)); + Vector p1 = SK.GetEntity(gs.face[1])->FaceGetPointNum(); + Printf(false, " planeB thru = " PT_AS_STR, COSTR(p1)); + + double theta = acos(n0.Dot(n1)); + Printf(true, " angle = %Fi%2%E degrees", theta*180/PI); + while(theta < PI/2) theta += PI; + while(theta > PI/2) theta -= PI; + Printf(false, " or angle = %Fi%2%E (mod 180)", theta*180/PI); + + if(fabs(theta) < 0.01) { + double d = (p1.Minus(p0)).Dot(n0); + Printf(true, " distance = %Fi%s", SS.MmToString(d).c_str()); + } + } else if(gs.n == 0 && gs.stylables > 0) { + Printf(false, "%FtSELECTED:%E comment text"); + } else if(gs.n == 0 && gs.constraints == 1) { + Constraint *c = SK.GetConstraint(gs.constraint[0]); + + if(c->type == Constraint::DIAMETER) { + Printf(false, "%FtDIAMETER CONSTRAINT"); + + Printf(true, " %Fd%f%D%Ll%s show as radius", + &ScreenConstraintShowAsRadius, gs.constraint[0].v, + c->other ? CHECK_TRUE : CHECK_FALSE); + } else { + Printf(false, "%FtSELECTED:%E %s", + c->DescriptionString().c_str()); + } + } else { + int n = SS.GW.selection.n; + Printf(false, "%FtSELECTED:%E %d item%s", n, n == 1 ? "" : "s"); + } + + if(shown.screen == SCREEN_STYLE_INFO && + shown.style.v >= Style::FIRST_CUSTOM && gs.stylables > 0) + { + // If we are showing a screen for a particular style, then offer the + // option to assign our selected entities to that style. + Style *s = Style::Get(shown.style); + Printf(true, "%Fl%D%f%Ll(assign to style %s)%E", + shown.style.v, + &ScreenAssignSelectionToStyle, + s->DescriptionString().c_str()); + } + // If any of the selected entities have an assigned style, then offer + // the option to remove that style. + bool styleAssigned = false; + for(i = 0; i < gs.entities; i++) { + Entity *e = SK.GetEntity(gs.entity[i]); + if(e->style.v != 0) { + styleAssigned = true; + } + } + for(i = 0; i < gs.constraints; i++) { + Constraint *c = SK.GetConstraint(gs.constraint[i]); + if(c->type == Constraint::COMMENT && c->disp.style.v != 0) { + styleAssigned = true; + } + } + if(styleAssigned) { + Printf(true, "%Fl%D%f%Ll(remove assigned style)%E", + 0, + &ScreenAssignSelectionToStyle); + } + + Printf(true, "%Fl%f%Ll(unselect all)%E", &TextWindow::ScreenUnselectAll); +} + +void TextWindow::GoToScreen(int screen) { + shown.screen = screen; +} + diff --git a/src/draw.cpp b/src/draw.cpp new file mode 100644 index 0000000..64f10ca --- /dev/null +++ b/src/draw.cpp @@ -0,0 +1,872 @@ +//----------------------------------------------------------------------------- +// The root function to paint our graphics window, after setting up all the +// views and such appropriately. Also contains all the stuff to manage the +// selection. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +bool GraphicsWindow::Selection::Equals(Selection *b) { + if(entity.v != b->entity.v) return false; + if(constraint.v != b->constraint.v) return false; + return true; +} + +bool GraphicsWindow::Selection::IsEmpty(void) { + if(entity.v) return false; + if(constraint.v) return false; + return true; +} + +bool GraphicsWindow::Selection::HasEndpoints(void) { + if(!entity.v) return false; + Entity *e = SK.GetEntity(entity); + return e->HasEndpoints(); +} + +void GraphicsWindow::Selection::Clear(void) { + entity.v = constraint.v = 0; + emphasized = false; +} + +void GraphicsWindow::Selection::Draw(void) { + Vector refp = Vector::From(0, 0, 0); + if(entity.v) { + Entity *e = SK.GetEntity(entity); + e->Draw(/*drawAsHidden=*/false); + if(emphasized) refp = e->GetReferencePos(); + } + if(constraint.v) { + Constraint *c = SK.GetConstraint(constraint); + c->Draw(); + if(emphasized) refp = c->GetReferencePos(); + } + if(emphasized && (constraint.v || entity.v)) { + // We want to emphasize this constraint or entity, by drawing a thick + // line from the top left corner of the screen to the reference point + // of that entity or constraint. + double s = 0.501/SS.GW.scale; + Vector topLeft = SS.GW.projRight.ScaledBy(-SS.GW.width*s); + topLeft = topLeft.Plus(SS.GW.projUp.ScaledBy(SS.GW.height*s)); + topLeft = topLeft.Minus(SS.GW.offset); + + ssglLineWidth(40); + RgbaColor rgb = Style::Color(Style::HOVERED); + glColor4d(rgb.redF(), rgb.greenF(), rgb.blueF(), 0.2); + glBegin(GL_LINES); + ssglVertex3v(topLeft); + ssglVertex3v(refp); + glEnd(); + ssglLineWidth(1); + } +} + +void GraphicsWindow::ClearSelection(void) { + selection.Clear(); + SS.ScheduleShowTW(); + InvalidateGraphics(); +} + +void GraphicsWindow::ClearNonexistentSelectionItems(void) { + bool change = false; + Selection *s; + selection.ClearTags(); + for(s = selection.First(); s; s = selection.NextAfter(s)) { + if(s->constraint.v && !(SK.constraint.FindByIdNoOops(s->constraint))) { + s->tag = 1; + change = true; + } + if(s->entity.v && !(SK.entity.FindByIdNoOops(s->entity))) { + s->tag = 1; + change = true; + } + } + selection.RemoveTagged(); + if(change) InvalidateGraphics(); +} + +//----------------------------------------------------------------------------- +// Is this entity/constraint selected? +//----------------------------------------------------------------------------- +bool GraphicsWindow::IsSelected(hEntity he) { + Selection s = {}; + s.entity = he; + return IsSelected(&s); +} +bool GraphicsWindow::IsSelected(Selection *st) { + Selection *s; + for(s = selection.First(); s; s = selection.NextAfter(s)) { + if(s->Equals(st)) { + return true; + } + } + return false; +} + +//----------------------------------------------------------------------------- +// Unselect an item, if it is selected. We can either unselect just that item, +// or also unselect any coincident points. The latter is useful if the user +// somehow selects two coincident points (like with select all), because it +// would otherwise be impossible to de-select the lower of the two. +//----------------------------------------------------------------------------- +void GraphicsWindow::MakeUnselected(hEntity he, bool coincidentPointTrick) { + Selection stog = {}; + stog.entity = he; + MakeUnselected(&stog, coincidentPointTrick); +} +void GraphicsWindow::MakeUnselected(Selection *stog, bool coincidentPointTrick){ + if(stog->IsEmpty()) return; + + Selection *s; + + // If an item was selected, then we just un-select it. + selection.ClearTags(); + for(s = selection.First(); s; s = selection.NextAfter(s)) { + if(s->Equals(stog)) { + s->tag = 1; + } + } + // If two points are coincident, then it's impossible to hover one of + // them. But make sure to deselect both, to avoid mysterious seeming + // inability to deselect if the bottom one did somehow get selected. + if(stog->entity.v && coincidentPointTrick) { + Entity *e = SK.GetEntity(stog->entity); + if(e->IsPoint()) { + Vector ep = e->PointGetNum(); + for(s = selection.First(); s; s = selection.NextAfter(s)) { + if(!s->entity.v) continue; + if(s->entity.v == stog->entity.v) continue; + Entity *se = SK.GetEntity(s->entity); + if(!se->IsPoint()) continue; + if(ep.Equals(se->PointGetNum())) { + s->tag = 1; + } + } + } + } + selection.RemoveTagged(); +} + +//----------------------------------------------------------------------------- +// Select an item, if it isn't selected already. +//----------------------------------------------------------------------------- +void GraphicsWindow::MakeSelected(hEntity he) { + Selection stog = {}; + stog.entity = he; + MakeSelected(&stog); +} + +void GraphicsWindow::MakeSelected(hConstraint hc) { + Selection stog = {}; + stog.constraint = hc; + MakeSelected(&stog); +} + +void GraphicsWindow::MakeSelected(Selection *stog) { + if(stog->IsEmpty()) return; + if(IsSelected(stog)) return; + + if(stog->entity.v != 0 && SK.GetEntity(stog->entity)->IsFace()) { + // In the interest of speed for the triangle drawing code, + // only two faces may be selected at a time. + int c = 0; + Selection *s; + selection.ClearTags(); + for(s = selection.First(); s; s = selection.NextAfter(s)) { + hEntity he = s->entity; + if(he.v != 0 && SK.GetEntity(he)->IsFace()) { + c++; + if(c >= 2) s->tag = 1; + } + } + selection.RemoveTagged(); + } + + selection.Add(stog); +} + +//----------------------------------------------------------------------------- +// Select everything that lies within the marquee view-aligned rectangle. For +// points, we test by the point location. For normals, we test by the normal's +// associated point. For anything else, we test by any piecewise linear edge. +//----------------------------------------------------------------------------- +void GraphicsWindow::SelectByMarquee(void) { + Point2d begin = ProjectPoint(orig.marqueePoint); + double xmin = min(orig.mouse.x, begin.x), + xmax = max(orig.mouse.x, begin.x), + ymin = min(orig.mouse.y, begin.y), + ymax = max(orig.mouse.y, begin.y); + + Entity *e; + for(e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { + if(e->group.v != SS.GW.activeGroup.v) continue; + if(e->IsFace() || e->IsDistance()) continue; + if(!e->IsVisible()) continue; + + if(e->IsPoint() || e->IsNormal()) { + Vector p = e->IsPoint() ? e->PointGetNum() : + SK.GetEntity(e->point[0])->PointGetNum(); + Point2d pp = ProjectPoint(p); + if(pp.x >= xmin && pp.x <= xmax && + pp.y >= ymin && pp.y <= ymax) + { + MakeSelected(e->h); + } + } else { + // Use the 3d bounding box test routines, to avoid duplication; + // so let our bounding square become a bounding box that certainly + // includes the z = 0 plane. + Vector ptMin = Vector::From(xmin, ymin, -1), + ptMax = Vector::From(xmax, ymax, 1); + SEdgeList sel = {}; + e->GenerateEdges(&sel, true); + SEdge *se; + for(se = sel.l.First(); se; se = sel.l.NextAfter(se)) { + Point2d ppa = ProjectPoint(se->a), + ppb = ProjectPoint(se->b); + Vector ptA = Vector::From(ppa.x, ppa.y, 0), + ptB = Vector::From(ppb.x, ppb.y, 0); + if(Vector::BoundingBoxIntersectsLine(ptMax, ptMin, + ptA, ptB, true) || + !ptA.OutsideAndNotOn(ptMax, ptMin) || + !ptB.OutsideAndNotOn(ptMax, ptMin)) + { + MakeSelected(e->h); + break; + } + } + sel.Clear(); + } + } +} + +//----------------------------------------------------------------------------- +// Sort the selection according to various critieria: the entities and +// constraints separately, counts of certain types of entities (circles, +// lines, etc.), and so on. +//----------------------------------------------------------------------------- +void GraphicsWindow::GroupSelection(void) { + gs = {}; + int i; + for(i = 0; i < selection.n; i++) { + Selection *s = &(selection.elem[i]); + if(s->entity.v) { + (gs.n)++; + + Entity *e = SK.entity.FindById(s->entity); + + if(e->IsStylable()) gs.stylables++; + + // A list of points, and a list of all entities that aren't points. + if(e->IsPoint()) { + gs.points++; + gs.point.push_back(s->entity); + } else { + gs.entities++; + gs.entity.push_back(s->entity); + } + + // And an auxiliary list of normals, including normals from + // workplanes. + if(e->IsNormal()) { + gs.anyNormals++; + gs.anyNormal.push_back(s->entity); + } else if(e->IsWorkplane()) { + gs.anyNormals++; + gs.anyNormal.push_back(e->Normal()->h); + } + + // And of vectors (i.e., stuff with a direction to constrain) + if(e->HasVector()) { + gs.vectors++; + gs.vector.push_back(s->entity); + } + + // Faces (which are special, associated/drawn with triangles) + if(e->IsFace()) { + gs.faces++; + gs.face.push_back(s->entity); + } + + if(e->HasEndpoints()) { + (gs.withEndpoints)++; + } + + // And some aux counts too + switch(e->type) { + case Entity::WORKPLANE: (gs.workplanes)++; break; + case Entity::LINE_SEGMENT: (gs.lineSegments)++; break; + case Entity::CUBIC: (gs.cubics)++; break; + case Entity::CUBIC_PERIODIC: (gs.periodicCubics)++; break; + + case Entity::ARC_OF_CIRCLE: + (gs.circlesOrArcs)++; + (gs.arcs)++; + break; + + case Entity::CIRCLE: (gs.circlesOrArcs)++; break; + } + } + if(s->constraint.v) { + gs.constraints++; + gs.constraint.push_back(s->constraint); + Constraint *c = SK.GetConstraint(s->constraint); + if(c->IsStylable()) gs.stylables++; + if(c->HasLabel()) gs.constraintLabels++; + } + } +} + +void GraphicsWindow::HitTestMakeSelection(Point2d mp) { + int i; + double d, dmin = 1e12; + Selection s = {}; + + // Did the view projection change? If so, invalidate bounding boxes. + if(!offset.EqualsExactly(cached.offset) || + !projRight.EqualsExactly(cached.projRight) || + !projUp.EqualsExactly(cached.projUp) || + EXACT(scale != cached.scale)) { + cached.offset = offset; + cached.projRight = projRight; + cached.projUp = projUp; + cached.scale = scale; + for(Entity *e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { + e->screenBBoxValid = false; + } + } + + // Always do the entities; we might be dragging something that should + // be auto-constrained, and we need the hover for that. + for(i = 0; i < SK.entity.n; i++) { + Entity *e = &(SK.entity.elem[i]); + // Don't hover whatever's being dragged. + if(e->h.request().v == pending.point.request().v) { + // The one exception is when we're creating a new cubic; we + // want to be able to hover the first point, because that's + // how we turn it into a periodic spline. + if(!e->IsPoint()) continue; + if(!e->h.isFromRequest()) continue; + Request *r = SK.GetRequest(e->h.request()); + if(r->type != Request::CUBIC) continue; + if(r->extraPoints < 2) continue; + if(e->h.v != r->h.entity(1).v) continue; + } + + d = e->GetDistance(mp); + if(d < SELECTION_RADIUS && d < dmin) { + s = {}; + s.entity = e->h; + dmin = d; + } + } + + // The constraints and faces happen only when nothing's in progress. + if(pending.operation == 0) { + // Constraints + for(i = 0; i < SK.constraint.n; i++) { + d = SK.constraint.elem[i].GetDistance(mp); + if(d < SELECTION_RADIUS && d < dmin) { + s = {}; + s.constraint = SK.constraint.elem[i].h; + dmin = d; + } + } + + // Faces, from the triangle mesh; these are lowest priority + if(s.constraint.v == 0 && s.entity.v == 0 && showShaded && showFaces) { + Group *g = SK.GetGroup(activeGroup); + SMesh *m = &(g->displayMesh); + + uint32_t v = m->FirstIntersectionWith(mp); + if(v) { + s.entity.v = v; + } + } + } + + if(!s.Equals(&hover)) { + hover = s; + PaintGraphics(); + } +} + +//----------------------------------------------------------------------------- +// Project a point in model space to screen space, exactly as gl would; return +// units are pixels. +//----------------------------------------------------------------------------- +Point2d GraphicsWindow::ProjectPoint(Vector p) { + Vector p3 = ProjectPoint3(p); + Point2d p2 = { p3.x, p3.y }; + return p2; +} +//----------------------------------------------------------------------------- +// Project a point in model space to screen space, exactly as gl would; return +// units are pixels. The z coordinate is also returned, also in pixels. +//----------------------------------------------------------------------------- +Vector GraphicsWindow::ProjectPoint3(Vector p) { + double w; + Vector r = ProjectPoint4(p, &w); + return r.ScaledBy(scale/w); +} +//----------------------------------------------------------------------------- +// Project a point in model space halfway into screen space. The scale is +// not applied, and the perspective divide isn't applied; instead the w +// coordinate is returned separately. +//----------------------------------------------------------------------------- +Vector GraphicsWindow::ProjectPoint4(Vector p, double *w) { + p = p.Plus(offset); + + Vector r; + r.x = p.Dot(projRight); + r.y = p.Dot(projUp); + r.z = p.Dot(projUp.Cross(projRight)); + + *w = 1 + r.z*SS.CameraTangent()*scale; + return r; +} + +//----------------------------------------------------------------------------- +// Return a point in the plane parallel to the screen and through the offset, +// that projects onto the specified (x, y) coordinates. +//----------------------------------------------------------------------------- +Vector GraphicsWindow::UnProjectPoint(Point2d p) { + Vector orig = offset.ScaledBy(-1); + + // Note that we ignoring the effects of perspective. Since our returned + // point has the same component normal to the screen as the offset, it + // will have z = 0 after the rotation is applied, thus w = 1. So this is + // correct. + orig = orig.Plus(projRight.ScaledBy(p.x / scale)).Plus( + projUp. ScaledBy(p.y / scale)); + return orig; +} + +Vector GraphicsWindow::UnProjectPoint3(Vector p) { + p.z = p.z / (scale - p.z * SS.CameraTangent() * scale); + double w = 1 + p.z * SS.CameraTangent() * scale; + p.x *= w / scale; + p.y *= w / scale; + + Vector orig = offset.ScaledBy(-1); + orig = orig.Plus(projRight.ScaledBy(p.x)).Plus( + projUp. ScaledBy(p.y).Plus( + projRight.Cross(projUp). ScaledBy(p.z))); + return orig; +} + +void GraphicsWindow::NormalizeProjectionVectors(void) { + if(projRight.Magnitude() < LENGTH_EPS) { + projRight = Vector::From(1, 0, 0); + } + + Vector norm = projRight.Cross(projUp); + // If projRight and projUp somehow ended up parallel, then pick an + // arbitrary projUp normal to projRight. + if(norm.Magnitude() < LENGTH_EPS) { + norm = projRight.Normal(0); + } + projUp = norm.Cross(projRight); + + projUp = projUp.WithMagnitude(1); + projRight = projRight.WithMagnitude(1); +} + +Vector GraphicsWindow::VectorFromProjs(Vector rightUpForward) { + Vector n = projRight.Cross(projUp); + + Vector r = (projRight.ScaledBy(rightUpForward.x)); + r = r.Plus(projUp.ScaledBy(rightUpForward.y)); + r = r.Plus(n.ScaledBy(rightUpForward.z)); + return r; +} + +void GraphicsWindow::Paint(void) { + int i; + havePainted = true; + + int w, h; + GetGraphicsWindowSize(&w, &h); + width = w; height = h; + glViewport(0, 0, w, h); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + + glScaled(scale*2.0/w, scale*2.0/h, scale*1.0/30000); + + double mat[16]; + // Last thing before display is to apply the perspective + double clp = SS.CameraTangent()*scale; + MakeMatrix(mat, 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, clp, 1); + glMultMatrixd(mat); + // Before that, we apply the rotation + Vector n = projUp.Cross(projRight); + MakeMatrix(mat, projRight.x, projRight.y, projRight.z, 0, + projUp.x, projUp.y, projUp.z, 0, + n.x, n.y, n.z, 0, + 0, 0, 0, 1); + glMultMatrixd(mat); + // And before that, the translation + MakeMatrix(mat, 1, 0, 0, offset.x, + 0, 1, 0, offset.y, + 0, 0, 1, offset.z, + 0, 0, 0, 1); + glMultMatrixd(mat); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + glShadeModel(GL_SMOOTH); + + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + glEnable(GL_LINE_SMOOTH); + // don't enable GL_POLYGON_SMOOTH; that looks ugly on some graphics cards, + // drawn with leaks in the mesh + glEnable(GL_POLYGON_OFFSET_LINE); + glEnable(GL_POLYGON_OFFSET_FILL); + glEnable(GL_DEPTH_TEST); + glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); + glEnable(GL_NORMALIZE); + + // At the same depth, we want later lines drawn over earlier. + glDepthFunc(GL_LEQUAL); + + if(SS.ActiveGroupsOkay()) { + glClearColor(SS.backgroundColor.redF(), + SS.backgroundColor.greenF(), + SS.backgroundColor.blueF(), 1.0f); + } else { + // Draw a different background whenever we're having solve problems. + RgbaColor rgb = Style::Color(Style::DRAW_ERROR); + glClearColor(0.4f*rgb.redF(), 0.4f*rgb.greenF(), 0.4f*rgb.blueF(), 1.0f); + // And show the text window, which has info to debug it + ForceTextWindowShown(); + } + glClear(GL_COLOR_BUFFER_BIT); + glClearDepth(1.0); + glClear(GL_DEPTH_BUFFER_BIT); + + if(SS.bgImage.fromFile) { + // If a background image is loaded, then we draw it now as a texture. + // This handles the resizing for us nicely. + glBindTexture(GL_TEXTURE_2D, TEXTURE_BACKGROUND_IMG); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, + SS.bgImage.rw, SS.bgImage.rh, + 0, + GL_RGB, GL_UNSIGNED_BYTE, + SS.bgImage.fromFile); + + double tw = ((double)SS.bgImage.w) / SS.bgImage.rw, + th = ((double)SS.bgImage.h) / SS.bgImage.rh; + + double mmw = SS.bgImage.w / SS.bgImage.scale, + mmh = SS.bgImage.h / SS.bgImage.scale; + + Vector origin = SS.bgImage.origin; + origin = origin.DotInToCsys(projRight, projUp, n); + // Place the depth of our origin at the point that corresponds to + // w = 1, so that it's unaffected by perspective. + origin.z = (offset.ScaledBy(-1)).Dot(n); + origin = origin.ScaleOutOfCsys(projRight, projUp, n); + + // Place the background at the very back of the Z order, though, by + // mucking with the depth range. + glDepthRange(1, 1); + glEnable(GL_TEXTURE_2D); + glBegin(GL_QUADS); + glTexCoord2d(0, 0); + ssglVertex3v(origin); + + glTexCoord2d(0, th); + ssglVertex3v(origin.Plus(projUp.ScaledBy(mmh))); + + glTexCoord2d(tw, th); + ssglVertex3v(origin.Plus(projRight.ScaledBy(mmw).Plus( + projUp. ScaledBy(mmh)))); + + glTexCoord2d(tw, 0); + ssglVertex3v(origin.Plus(projRight.ScaledBy(mmw))); + glEnd(); + glDisable(GL_TEXTURE_2D); + } + ssglDepthRangeOffset(0); + + // Nasty case when we're reloading the linked files; could be that + // we get an error, so a dialog pops up, and a message loop starts, and + // we have to get called to paint ourselves. If the sketch is screwed + // up, then we could trigger an oops trying to draw. + if(!SS.allConsistent) return; + + // Let's use two lights, at the user-specified locations + GLfloat f; + glEnable(GL_LIGHT0); + f = (GLfloat)SS.lightIntensity[0]; + GLfloat li0[] = { f, f, f, 1.0f }; + glLightfv(GL_LIGHT0, GL_DIFFUSE, li0); + glLightfv(GL_LIGHT0, GL_SPECULAR, li0); + + glEnable(GL_LIGHT1); + f = (GLfloat)SS.lightIntensity[1]; + GLfloat li1[] = { f, f, f, 1.0f }; + glLightfv(GL_LIGHT1, GL_DIFFUSE, li1); + glLightfv(GL_LIGHT1, GL_SPECULAR, li1); + + Vector ld; + ld = VectorFromProjs(SS.lightDir[0]); + GLfloat ld0[4] = { (GLfloat)ld.x, (GLfloat)ld.y, (GLfloat)ld.z, 0 }; + glLightfv(GL_LIGHT0, GL_POSITION, ld0); + ld = VectorFromProjs(SS.lightDir[1]); + GLfloat ld1[4] = { (GLfloat)ld.x, (GLfloat)ld.y, (GLfloat)ld.z, 0 }; + glLightfv(GL_LIGHT1, GL_POSITION, ld1); + + GLfloat ambient[4] = { (float)SS.ambientIntensity, + (float)SS.ambientIntensity, + (float)SS.ambientIntensity, 1 }; + glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient); + + ssglUnlockColor(); + + if(showSnapGrid && LockedInWorkplane()) { + hEntity he = ActiveWorkplane(); + EntityBase *wrkpl = SK.GetEntity(he), + *norm = wrkpl->Normal(); + Vector wu, wv, wn, wp; + wp = SK.GetEntity(wrkpl->point[0])->PointGetNum(); + wu = norm->NormalU(); + wv = norm->NormalV(); + wn = norm->NormalN(); + + double g = SS.gridSpacing; + + double umin = VERY_POSITIVE, umax = VERY_NEGATIVE, + vmin = VERY_POSITIVE, vmax = VERY_NEGATIVE; + int a; + for(a = 0; a < 4; a++) { + // Ideally, we would just do +/- half the width and height; but + // allow some extra slop for rounding. + Vector horiz = projRight.ScaledBy((0.6*width)/scale + 2*g), + vert = projUp. ScaledBy((0.6*height)/scale + 2*g); + if(a == 2 || a == 3) horiz = horiz.ScaledBy(-1); + if(a == 1 || a == 3) vert = vert. ScaledBy(-1); + Vector tp = horiz.Plus(vert).Minus(offset); + + // Project the point into our grid plane, normal to the screen + // (not to the grid plane). If the plane is on edge then this is + // impossible so don't try to draw the grid. + bool parallel; + Vector tpp = Vector::AtIntersectionOfPlaneAndLine( + wn, wn.Dot(wp), + tp, tp.Plus(n), + ¶llel); + if(parallel) goto nogrid; + + tpp = tpp.Minus(wp); + double uu = tpp.Dot(wu), + vv = tpp.Dot(wv); + + umin = min(uu, umin); + umax = max(uu, umax); + vmin = min(vv, vmin); + vmax = max(vv, vmax); + } + + int i, j, i0, i1, j0, j1; + + i0 = (int)(umin / g); + i1 = (int)(umax / g); + j0 = (int)(vmin / g); + j1 = (int)(vmax / g); + + if(i0 > i1 || i1 - i0 > 400) goto nogrid; + if(j0 > j1 || j1 - j0 > 400) goto nogrid; + + ssglLineWidth(1); + ssglColorRGBa(Style::Color(Style::DATUM), 0.3); + glBegin(GL_LINES); + for(i = i0 + 1; i < i1; i++) { + ssglVertex3v(wp.Plus(wu.ScaledBy(i*g)).Plus(wv.ScaledBy(j0*g))); + ssglVertex3v(wp.Plus(wu.ScaledBy(i*g)).Plus(wv.ScaledBy(j1*g))); + } + for(j = j0 + 1; j < j1; j++) { + ssglVertex3v(wp.Plus(wu.ScaledBy(i0*g)).Plus(wv.ScaledBy(j*g))); + ssglVertex3v(wp.Plus(wu.ScaledBy(i1*g)).Plus(wv.ScaledBy(j*g))); + } + glEnd(); + + // Clear the depth buffer, so that the grid is at the very back of + // the Z order. + glClear(GL_DEPTH_BUFFER_BIT); +nogrid:; + } + + // Draw the active group; this does stuff like the mesh and edges. + (SK.GetGroup(activeGroup))->Draw(); + + // Now draw the entities. + if(SS.GW.showHdnLines) { + ssglDepthRangeOffset(2); + glDepthFunc(GL_GREATER); + Entity::DrawAll(/*drawAsHidden=*/true); + glDepthFunc(GL_LEQUAL); + } + ssglDepthRangeOffset(0); + Entity::DrawAll(/*drawAsHidden=*/false); + + // Draw filled paths in all groups, when those filled paths were requested + // specially by assigning a style with a fill color, or when the filled + // paths are just being filled by default. This should go last, to make + // the transparency work. + for(i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + if(!(g->IsVisible())) continue; + g->DrawFilledPaths(); + } + + + glDisable(GL_DEPTH_TEST); + // Draw the constraints + for(i = 0; i < SK.constraint.n; i++) { + SK.constraint.elem[i].Draw(); + } + + // Draw the "pending" constraint, i.e. a constraint that would be + // placed on a line that is almost horizontal or vertical + if(SS.GW.pending.operation == DRAGGING_NEW_LINE_POINT) { + if(SS.GW.pending.suggestion != GraphicsWindow::SUGGESTED_NONE) { + Constraint c = {}; + c.group = SS.GW.activeGroup; + c.workplane = SS.GW.ActiveWorkplane(); + c.type = SS.GW.pending.suggestion; + c.ptA = Entity::NO_ENTITY; + c.ptB = Entity::NO_ENTITY; + c.entityA = SS.GW.pending.request.entity(0); + c.entityB = Entity::NO_ENTITY; + c.other = false; + c.other2 = false; + // Only draw. + c.Draw(); + } + } + + // Draw the traced path, if one exists + ssglLineWidth(Style::Width(Style::ANALYZE)); + ssglColorRGB(Style::Color(Style::ANALYZE)); + SContour *sc = &(SS.traced.path); + glBegin(GL_LINE_STRIP); + for(i = 0; i < sc->l.n; i++) { + ssglVertex3v(sc->l.elem[i].p); + } + glEnd(); + + // And the naked edges, if the user did Analyze -> Show Naked Edges. + ssglDrawEdges(&(SS.nakedEdges), true, { Style::DRAW_ERROR }); + + // Then redraw whatever the mouse is hovering over, highlighted. + glDisable(GL_DEPTH_TEST); + ssglLockColorTo(Style::Color(Style::HOVERED)); + hover.Draw(); + + // And finally draw the selection, same mechanism. + ssglLockColorTo(Style::Color(Style::SELECTED)); + for(Selection *s = selection.First(); s; s = selection.NextAfter(s)) { + s->Draw(); + } + + ssglUnlockColor(); + + // If a marquee selection is in progress, then draw the selection + // rectangle, as an outline and a transparent fill. + if(pending.operation == DRAGGING_MARQUEE) { + Point2d begin = ProjectPoint(orig.marqueePoint); + double xmin = min(orig.mouse.x, begin.x), + xmax = max(orig.mouse.x, begin.x), + ymin = min(orig.mouse.y, begin.y), + ymax = max(orig.mouse.y, begin.y); + + Vector tl = UnProjectPoint(Point2d::From(xmin, ymin)), + tr = UnProjectPoint(Point2d::From(xmax, ymin)), + br = UnProjectPoint(Point2d::From(xmax, ymax)), + bl = UnProjectPoint(Point2d::From(xmin, ymax)); + + ssglLineWidth((GLfloat)1.3); + ssglColorRGB(Style::Color(Style::HOVERED)); + glBegin(GL_LINE_LOOP); + ssglVertex3v(tl); + ssglVertex3v(tr); + ssglVertex3v(br); + ssglVertex3v(bl); + glEnd(); + ssglColorRGBa(Style::Color(Style::HOVERED), 0.10); + glBegin(GL_QUADS); + ssglVertex3v(tl); + ssglVertex3v(tr); + ssglVertex3v(br); + ssglVertex3v(bl); + glEnd(); + } + + // An extra line, used to indicate the origin when rotating within the + // plane of the monitor. + if(SS.extraLine.draw) { + ssglLineWidth(1); + ssglLockColorTo(Style::Color(Style::DATUM)); + glBegin(GL_LINES); + ssglVertex3v(SS.extraLine.ptA); + ssglVertex3v(SS.extraLine.ptB); + glEnd(); + } + + // A note to indicate the origin in the just-exported file. + if(SS.justExportedInfo.draw) { + Vector p, u, v; + if(SS.justExportedInfo.showOrigin) { + p = SS.justExportedInfo.pt, + u = SS.justExportedInfo.u, + v = SS.justExportedInfo.v; + } else { + p = SS.GW.offset.ScaledBy(-1); + u = SS.GW.projRight; + v = SS.GW.projUp; + } + + ssglColorRGB(Style::Color(Style::DATUM)); + + ssglWriteText("previewing exported geometry; press Esc to return", + Style::DefaultTextHeight(), + p.Plus(u.ScaledBy(10/scale)).Plus(v.ScaledBy(10/scale)), + u, v, NULL, NULL); + + if(SS.justExportedInfo.showOrigin) { + ssglLineWidth(1.5); + glBegin(GL_LINES); + ssglVertex3v(p.Plus(u.WithMagnitude(-15/scale))); + ssglVertex3v(p.Plus(u.WithMagnitude(30/scale))); + ssglVertex3v(p.Plus(v.WithMagnitude(-15/scale))); + ssglVertex3v(p.Plus(v.WithMagnitude(30/scale))); + glEnd(); + + ssglWriteText("(x, y) = (0, 0) for file just exported", + Style::DefaultTextHeight(), + p.Plus(u.ScaledBy(40/scale)).Plus( + v.ScaledBy(-(Style::DefaultTextHeight())/scale)), + u, v, NULL, NULL); + } + } + + // And finally the toolbar. + if(SS.showToolbar) { + ToolbarDraw(); + } +} + diff --git a/src/drawconstraint.cpp b/src/drawconstraint.cpp new file mode 100644 index 0000000..31139bc --- /dev/null +++ b/src/drawconstraint.cpp @@ -0,0 +1,1250 @@ +//----------------------------------------------------------------------------- +// Given a constraint, draw a graphical and user-selectable representation +// of that constraint on-screen. We can either draw with gl, or compute the +// distance from a point (the location of the mouse pointer) to the lines +// that we would have drawn, for selection. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +void Constraint::LineDrawOrGetDistance(Vector a, Vector b) { + if(dogd.drawing) { + hStyle hs = GetStyle(); + + if(dogd.sel) { + dogd.sel->AddEdge(a, b, hs.v); + } else { + if(Style::Width(hs) >= 3.0) { + ssglFatLine(a, b, Style::Width(hs) / SS.GW.scale); + } else { + glBegin(GL_LINE_STRIP); + ssglVertex3v(a); + ssglVertex3v(b); + glEnd(); + } + } + } else { + Point2d ap = SS.GW.ProjectPoint(a); + Point2d bp = SS.GW.ProjectPoint(b); + + double d = dogd.mp.DistanceToLine(ap, bp.Minus(ap), true); + dogd.dmin = min(dogd.dmin, d); + } + dogd.refp = (a.Plus(b)).ScaledBy(0.5); +} + +static void LineCallback(void *fndata, Vector a, Vector b) +{ + Constraint *c = (Constraint *)fndata; + c->LineDrawOrGetDistance(a, b); +} + +std::string Constraint::Label(void) { + std::string result; + if(type == ANGLE) { + if(valA == floor(valA)) { + result = ssprintf("%.0f°", valA); + } else { + result = ssprintf("%.2f°", valA); + } + } else if(type == LENGTH_RATIO) { + result = ssprintf("%.3f:1", valA); + } else if(type == COMMENT) { + result = comment; + } else if(type == DIAMETER) { + if(!other) { + result = "⌀" + SS.MmToString(valA); + } else { + result = "R" + SS.MmToString(valA / 2); + } + } else { + // valA has units of distance + result = SS.MmToString(fabs(valA)); + } + if(reference) { + result += " REF"; + } + return result; +} + +void Constraint::DoLabel(Vector ref, Vector *labelPos, Vector gr, Vector gu) { + hStyle hs = GetStyle(); + double th = Style::TextHeight(hs); + + std::string s = Label(); + double swidth = ssglStrWidth(s, th), + sheight = ssglStrCapHeight(th); + + // By default, the reference is from the center; but the style could + // specify otherwise if one is present, and it could also specify a + // rotation. + if(type == COMMENT && disp.style.v) { + Style *st = Style::Get(disp.style); + // rotation first + double rads = st->textAngle*PI/180; + double c = cos(rads), s = sin(rads); + Vector pr = gr, pu = gu; + gr = pr.ScaledBy( c).Plus(pu.ScaledBy(s)); + gu = pr.ScaledBy(-s).Plus(pu.ScaledBy(c)); + // then origin + int o = st->textOrigin; + if(o & Style::ORIGIN_LEFT) ref = ref.Plus(gr.WithMagnitude(swidth/2)); + if(o & Style::ORIGIN_RIGHT) ref = ref.Minus(gr.WithMagnitude(swidth/2)); + if(o & Style::ORIGIN_BOT) ref = ref.Plus(gu.WithMagnitude(sheight/2)); + if(o & Style::ORIGIN_TOP) ref = ref.Minus(gu.WithMagnitude(sheight/2)); + } + + if(labelPos) { + // labelPos is from the top left corner (for the text box used to + // edit things), but ref is from the center. + *labelPos = ref.Minus(gr.WithMagnitude(swidth/2)).Minus( + gu.WithMagnitude(sheight/2)); + } + + + if(dogd.drawing) { + ssglWriteTextRefCenter(s, th, ref, gr, gu, LineCallback, this); + } else { + double l = swidth/2 - sheight/2; + l = max(l, 5/SS.GW.scale); + Point2d a = SS.GW.ProjectPoint(ref.Minus(gr.WithMagnitude(l))); + Point2d b = SS.GW.ProjectPoint(ref.Plus (gr.WithMagnitude(l))); + double d = dogd.mp.DistanceToLine(a, b.Minus(a), true); + + dogd.dmin = min(dogd.dmin, d - (th / 2)); + dogd.refp = ref; + } +} + +void Constraint::StippledLine(Vector a, Vector b) { + glLineStipple(4, 0x5555); + glEnable(GL_LINE_STIPPLE); + LineDrawOrGetDistance(a, b); + glDisable(GL_LINE_STIPPLE); +} + +void Constraint::DoProjectedPoint(Vector *r) { + Vector p = r->ProjectInto(workplane); + StippledLine(p, *r); + *r = p; +} + +//----------------------------------------------------------------------------- +// There is a rectangular box, aligned to our display axes (projRight, projUp) +// centered at ref. This is where a dimension label will be drawn. We want to +// draw a line from A to B. If that line would intersect the label box, then +// trim the line to leave a gap for it, and return zero. If not, then extend +// the line to almost meet the box, and return either positive or negative, +// depending whether that extension was from A or from B. +//----------------------------------------------------------------------------- +int Constraint::DoLineTrimmedAgainstBox(Vector ref, Vector a, Vector b, bool extend) { + hStyle hs = GetStyle(); + double th = Style::TextHeight(hs); + Vector gu = SS.GW.projUp.WithMagnitude(1), + gr = SS.GW.projRight.WithMagnitude(1); + + double pixels = 1.0 / SS.GW.scale; + std::string s = Label(); + double swidth = ssglStrWidth(s, th) + 4*pixels, + sheight = ssglStrCapHeight(th) + 8*pixels; + + return DoLineTrimmedAgainstBox(ref, a, b, extend, gr, gu, swidth, sheight); +} + +int Constraint::DoLineTrimmedAgainstBox(Vector ref, Vector a, Vector b, bool extend, + Vector gr, Vector gu, double swidth, double sheight) { + struct { + Vector n; + double d; + } planes[4]; + // reference pos is the center of box occupied by text; build a rectangle + // around that, aligned to axes gr and gu, from four planes will all four + // normals pointing inward + planes[0].n = gu.ScaledBy(-1); planes[0].d = -(gu.Dot(ref) + sheight/2); + planes[1].n = gu; planes[1].d = gu.Dot(ref) - sheight/2; + planes[2].n = gr; planes[2].d = gr.Dot(ref) - swidth/2; + planes[3].n = gr.ScaledBy(-1); planes[3].d = -(gr.Dot(ref) + swidth/2); + + double tmin = VERY_POSITIVE, tmax = VERY_NEGATIVE; + Vector dl = b.Minus(a); + + for(int i = 0; i < 4; i++) { + bool parallel; + Vector p = Vector::AtIntersectionOfPlaneAndLine( + planes[i].n, planes[i].d, + a, b, ¶llel); + if(parallel) continue; + + int j; + for(j = 0; j < 4; j++) { + double d = (planes[j].n).Dot(p) - planes[j].d; + if(d < -LENGTH_EPS) break; + } + if(j < 4) continue; + + double t = (p.Minus(a)).DivPivoting(dl); + tmin = min(t, tmin); + tmax = max(t, tmax); + } + + // Both in range; so there's pieces of the line on both sides of the label box. + if(tmin >= 0.0 && tmin <= 1.0 && tmax >= 0.0 && tmax <= 1.0) { + LineDrawOrGetDistance(a, a.Plus(dl.ScaledBy(tmin))); + LineDrawOrGetDistance(a.Plus(dl.ScaledBy(tmax)), b); + return 0; + } + + // Only one intersection in range; so the box is right on top of the endpoint + if(tmin >= 0.0 && tmin <= 1.0) { + LineDrawOrGetDistance(a, a.Plus(dl.ScaledBy(tmin))); + return 0; + } + + // Likewise. + if(tmax >= 0.0 && tmax <= 1.0) { + LineDrawOrGetDistance(a.Plus(dl.ScaledBy(tmax)), b); + return 0; + } + + // The line does not intersect the label; so the line should get + // extended to just barely meet the label. + // 0 means the label lies within the line, negative means it's outside + // and closer to b, positive means outside and closer to a. + if(tmax < 0.0) { + if(extend) a = a.Plus(dl.ScaledBy(tmax)); + LineDrawOrGetDistance(a, b); + return 1; + } + + if(tmin > 1.0) { + if(extend) b = a.Plus(dl.ScaledBy(tmin)); + LineDrawOrGetDistance(a, b); + return -1; + } + + // This will happen if the entire line lies within the box. + return 0; +} + +void Constraint::DoArrow(Vector p, Vector dir, Vector n, double width, double angle, double da) { + dir = dir.WithMagnitude(width / cos(angle)); + dir = dir.RotatedAbout(n, da); + LineDrawOrGetDistance(p, p.Plus(dir.RotatedAbout(n, angle))); + LineDrawOrGetDistance(p, p.Plus(dir.RotatedAbout(n, -angle))); +} + +//----------------------------------------------------------------------------- +// Draw a line with arrows on both ends, and possibly a gap in the middle for +// the dimension. We will use these for most length dimensions. The length +// being dimensioned is from A to B; but those points get extended perpendicular +// to the line AB, until the line between the extensions crosses ref (the +// center of the label). +//----------------------------------------------------------------------------- +void Constraint::DoLineWithArrows(Vector ref, Vector a, Vector b, + bool onlyOneExt) +{ + double pixels = 1.0 / SS.GW.scale; + + Vector ab = a.Minus(b); + Vector ar = a.Minus(ref); + // Normal to a plane containing the line and the label origin. + Vector n = ab.Cross(ar); + // Within that plane, and normal to the line AB; so that's our extension + // line. + Vector out = ab.Cross(n).WithMagnitude(1); + out = out.ScaledBy(-out.Dot(ar)); + + Vector ae = a.Plus(out), be = b.Plus(out); + + // Extension lines extend 10 pixels beyond where the arrows get + // drawn (which is at the same offset perpendicular from AB as the + // label). + LineDrawOrGetDistance(a, ae.Plus(out.WithMagnitude(10*pixels))); + if(!onlyOneExt) { + LineDrawOrGetDistance(b, be.Plus(out.WithMagnitude(10*pixels))); + } + + int within = DoLineTrimmedAgainstBox(ref, ae, be); + + // Arrow heads are 13 pixels long, with an 18 degree half-angle. + double theta = 18*PI/180; + Vector arrow = (be.Minus(ae)).WithMagnitude(13*pixels); + + if(within != 0) { + arrow = arrow.ScaledBy(-1); + Vector seg = (be.Minus(ae)).WithMagnitude(18*pixels); + if(within < 0) LineDrawOrGetDistance(ae, ae.Minus(seg)); + if(within > 0) LineDrawOrGetDistance(be, be.Plus(seg)); + } + + DoArrow(ae, arrow, n, 13.0 * pixels, theta, 0.0); + DoArrow(be, arrow.Negated(), n, 13.0 * pixels, theta, 0.0); +} + +void Constraint::DoEqualLenTicks(Vector a, Vector b, Vector gn) { + Vector m = (a.ScaledBy(1.0/3)).Plus(b.ScaledBy(2.0/3)); + Vector ab = a.Minus(b); + Vector n = (gn.Cross(ab)).WithMagnitude(10/SS.GW.scale); + + LineDrawOrGetDistance(m.Minus(n), m.Plus(n)); +} + +void Constraint::DoEqualRadiusTicks(hEntity he) { + Entity *circ = SK.GetEntity(he); + + Vector center = SK.GetEntity(circ->point[0])->PointGetNum(); + double r = circ->CircleGetRadiusNum(); + Quaternion q = circ->Normal()->NormalGetNum(); + Vector u = q.RotationU(), v = q.RotationV(); + + double theta; + if(circ->type == Entity::CIRCLE) { + theta = PI/2; + } else if(circ->type == Entity::ARC_OF_CIRCLE) { + double thetaa, thetab, dtheta; + circ->ArcGetAngles(&thetaa, &thetab, &dtheta); + theta = thetaa + dtheta/2; + } else oops(); + + Vector d = u.ScaledBy(cos(theta)).Plus(v.ScaledBy(sin(theta))); + d = d.ScaledBy(r); + Vector p = center.Plus(d); + Vector tick = d.WithMagnitude(10/SS.GW.scale); + LineDrawOrGetDistance(p.Plus(tick), p.Minus(tick)); +} + +void Constraint::DoArcForAngle(Vector a0, Vector da, Vector b0, Vector db, + Vector offset, Vector *ref, bool trim) +{ + Vector gr = SS.GW.projRight.ScaledBy(1.0); + Vector gu = SS.GW.projUp.ScaledBy(1.0); + + if(workplane.v != Entity::FREE_IN_3D.v) { + a0 = a0.ProjectInto(workplane); + b0 = b0.ProjectInto(workplane); + da = da.ProjectVectorInto(workplane); + db = db.ProjectVectorInto(workplane); + } + + double px = 1.0 / SS.GW.scale; + Vector a1 = a0.Plus(da); + Vector b1 = b0.Plus(db); + + bool skew; + Vector pi = Vector::AtIntersectionOfLines(a0, a0.Plus(da), + b0, b0.Plus(db), &skew); + + if(!skew) { + *ref = pi.Plus(offset); + // We draw in a coordinate system centered at the intersection point. + // One basis vector is da, and the other is normal to da and in + // the plane that contains our lines (so normal to its normal). + da = da.WithMagnitude(1); + db = db.WithMagnitude(1); + + Vector norm = da.Cross(db); + + Vector dna = norm.Cross(da).WithMagnitude(1.0); + Vector dnb = norm.Cross(db).WithMagnitude(1.0); + + // da and db magnitudes are 1.0 + double thetaf = acos(da.Dot(db)); + + // Calculate median + Vector m = da.ScaledBy(cos(thetaf/2)).Plus( + dna.ScaledBy(sin(thetaf/2))); + Vector rm = (*ref).Minus(pi); + + // Test which side we have to place an arc + if(m.Dot(rm) < 0) { + da = da.ScaledBy(-1); dna = dna.ScaledBy(-1); + db = db.ScaledBy(-1); dnb = dnb.ScaledBy(-1); + } + + double rda = rm.Dot(da), rdna = rm.Dot(dna); + + // Introduce minimal arc radius in pixels + double r = max(sqrt(rda*rda + rdna*rdna), 15.0 * px); + + hStyle hs = disp.style; + if(hs.v == 0) hs.v = Style::CONSTRAINT; + double th = Style::TextHeight(hs); + double swidth = ssglStrWidth(Label(), th) + 4.0 * px; + double sheight = ssglStrCapHeight(th) + 8.0 * px; + double textR = sqrt(swidth * swidth + sheight * sheight) / 2.0; + *ref = pi.Plus(rm.WithMagnitude(std::max(rm.Magnitude(), 15 * px + textR))); + + // Arrow points + Vector apa = da. ScaledBy(r).Plus(pi); + Vector apb = da. ScaledBy(r*cos(thetaf)).Plus( + dna.ScaledBy(r*sin(thetaf))).Plus(pi); + + double arrowW = 13 * px; + double arrowA = 18.0 * PI / 180.0; + bool arrowVisible = apb.Minus(apa).Magnitude() > 2.5 * arrowW; + // Arrow reversing indicator + bool arrowRev = false; + + // The minimal extension length in angular representation + double extAngle = 18 * px / r; + + // Arc additional angle + double addAngle = 0.0; + // Arc start angle + double startAngle = 0.0; + + // Arc extension to db. + // We have just enlarge angle value. + if(HasLabel() && rm.Dot(dnb) > 0.0) { + // rm direction projected to plane with u = da, v = dna + Vector rmp = da.ScaledBy(rda).Plus(dna.ScaledBy(rdna)).WithMagnitude(1.0); + // rmp and db magnitudes are 1.0 + addAngle = std::max(acos(rmp.Dot(db)), extAngle); + + if(arrowVisible) { + startAngle = -extAngle; + addAngle += extAngle; + arrowRev = true; + } + } + + // Arc extension to da. + // We are enlarge angle value and rewrite basis to align along rm projection. + if(HasLabel() && rm.Dot(dna) < 0.0) { + // rm direction projected to plane with u = da, v = dna + Vector rmp = da.ScaledBy(rda).Plus(dna.ScaledBy(rdna)).WithMagnitude(1.0); + // rmp and da magnitudes are 1.0 + startAngle = -std::max(acos(rmp.Dot(da)), extAngle); + addAngle = -startAngle; + + if(arrowVisible) { + addAngle += extAngle; + arrowRev = true; + } + } + + Vector prev; + int n = 30; + for(int i = 0; i <= n; i++) { + double theta = startAngle + (i*(thetaf + addAngle))/n; + Vector p = da.ScaledBy(r*cos(theta)).Plus( + dna.ScaledBy(r*sin(theta))).Plus(pi); + if(i > 0) { + if(trim) { + DoLineTrimmedAgainstBox(*ref, prev, p, false, gr, gu, swidth, sheight); + } else { + LineDrawOrGetDistance(prev, p); + } + } + prev = p; + } + + DoLineExtend(a0, a1, apa, 5.0 * px); + DoLineExtend(b0, b1, apb, 5.0 * px); + + // Draw arrows only when we have enough space. + if(arrowVisible) { + double angleCorr = arrowW / (2.0 * r); + if(arrowRev) { + dna = dna.ScaledBy(-1.0); + angleCorr = -angleCorr; + } + DoArrow(apa, dna, norm, arrowW, arrowA, angleCorr); + DoArrow(apb, dna, norm, arrowW, arrowA, thetaf + PI - angleCorr); + } + } else { + // The lines are skew; no wonderful way to illustrate that. + *ref = a0.Plus(b0); + *ref = (*ref).ScaledBy(0.5).Plus(disp.offset); + gu = gu.WithMagnitude(1); + Vector trans = + (*ref).Plus(gu.ScaledBy(-1.5*ssglStrCapHeight(Style::DefaultTextHeight()))); + ssglWriteTextRefCenter("angle between skew lines", Style::DefaultTextHeight(), + trans, gr.WithMagnitude(px), gu.WithMagnitude(px), LineCallback, this); + } +} + +bool Constraint::IsVisible() const { + if(!SS.GW.showConstraints) return false; + Group *g = SK.GetGroup(group); + // If the group is hidden, then the constraints are hidden and not + // able to be selected. + if(!(g->visible)) return false; + // And likewise if the group is not the active group; except for comments + // with an assigned style. + if(g->h.v != SS.GW.activeGroup.v && !(type == COMMENT && disp.style.v)) { + return false; + } + if(disp.style.v) { + Style *s = Style::Get(disp.style); + if(!s->visible) return false; + } + return true; +} + +bool Constraint::DoLineExtend(Vector p0, Vector p1, Vector pt, double salient) { + Vector dir = p1.Minus(p0); + double k = dir.Dot(pt.Minus(p0)) / dir.Dot(dir); + Vector ptOnLine = p0.Plus(dir.ScaledBy(k)); + + // Draw projection line. + LineDrawOrGetDistance(pt, ptOnLine); + + // Calculate salient direction. + Vector sd = dir.WithMagnitude(1.0).ScaledBy(salient); + + Vector from; + Vector to; + + if(k < 0.0) { + from = p0; + to = ptOnLine.Minus(sd); + } else if(k > 1.0) { + from = p1; + to = ptOnLine.Plus(sd); + } else { + return false; + } + + // Draw extension line. + LineDrawOrGetDistance(from, to); + return true; +} + +void Constraint::DrawOrGetDistance(Vector *labelPos) { + + if(!IsVisible()) return; + + // Unit vectors that describe our current view of the scene. One pixel + // long, not one actual unit. + Vector gr = SS.GW.projRight.ScaledBy(1/SS.GW.scale); + Vector gu = SS.GW.projUp.ScaledBy(1/SS.GW.scale); + Vector gn = (gr.Cross(gu)).WithMagnitude(1/SS.GW.scale); + + switch(type) { + case PT_PT_DISTANCE: { + Vector ap = SK.GetEntity(ptA)->PointGetNum(); + Vector bp = SK.GetEntity(ptB)->PointGetNum(); + + if(workplane.v != Entity::FREE_IN_3D.v) { + DoProjectedPoint(&ap); + DoProjectedPoint(&bp); + } + + Vector ref = ((ap.Plus(bp)).ScaledBy(0.5)).Plus(disp.offset); + + DoLineWithArrows(ref, ap, bp, false); + DoLabel(ref, labelPos, gr, gu); + break; + } + + case PROJ_PT_DISTANCE: { + Vector ap = SK.GetEntity(ptA)->PointGetNum(), + bp = SK.GetEntity(ptB)->PointGetNum(), + dp = (bp.Minus(ap)), + pp = SK.GetEntity(entityA)->VectorGetNum(); + + Vector ref = ((ap.Plus(bp)).ScaledBy(0.5)).Plus(disp.offset); + + pp = pp.WithMagnitude(1); + double d = dp.Dot(pp); + Vector bpp = ap.Plus(pp.ScaledBy(d)); + StippledLine(ap, bpp); + StippledLine(bp, bpp); + + DoLineWithArrows(ref, ap, bpp, false); + DoLabel(ref, labelPos, gr, gu); + break; + } + + case PT_FACE_DISTANCE: + case PT_PLANE_DISTANCE: { + Vector pt = SK.GetEntity(ptA)->PointGetNum(); + Entity *enta = SK.GetEntity(entityA); + Vector n, p; + if(type == PT_PLANE_DISTANCE) { + n = enta->Normal()->NormalN(); + p = enta->WorkplaneGetOffset(); + } else { + n = enta->FaceGetNormalNum(); + p = enta->FaceGetPointNum(); + } + + double d = (p.Minus(pt)).Dot(n); + Vector closest = pt.Plus(n.WithMagnitude(d)); + + Vector ref = ((closest.Plus(pt)).ScaledBy(0.5)).Plus(disp.offset); + + if(!pt.Equals(closest)) { + DoLineWithArrows(ref, pt, closest, true); + } + + DoLabel(ref, labelPos, gr, gu); + break; + } + + case PT_LINE_DISTANCE: { + Vector pt = SK.GetEntity(ptA)->PointGetNum(); + Entity *line = SK.GetEntity(entityA); + Vector lA = SK.GetEntity(line->point[0])->PointGetNum(); + Vector lB = SK.GetEntity(line->point[1])->PointGetNum(); + Vector dl = lB.Minus(lA); + + if(workplane.v != Entity::FREE_IN_3D.v) { + lA = lA.ProjectInto(workplane); + lB = lB.ProjectInto(workplane); + DoProjectedPoint(&pt); + } + + // Find the closest point on the line + Vector closest = pt.ClosestPointOnLine(lA, dl); + + Vector ref = ((closest.Plus(pt)).ScaledBy(0.5)).Plus(disp.offset); + DoLabel(ref, labelPos, gr, gu); + + if(!pt.Equals(closest)) { + DoLineWithArrows(ref, pt, closest, true); + + // Extensions to line + double pixels = 1.0 / SS.GW.scale; + Vector refClosest = ref.ClosestPointOnLine(lA, dl); + double ddl = dl.Dot(dl); + if(fabs(ddl) > LENGTH_EPS * LENGTH_EPS) { + double t = refClosest.Minus(lA).Dot(dl) / ddl; + if(t < 0.0) { + LineDrawOrGetDistance(refClosest.Minus(dl.WithMagnitude(10.0 * pixels)), lA); + } else if(t > 1.0) { + LineDrawOrGetDistance(refClosest.Plus(dl.WithMagnitude(10.0 * pixels)), lB); + } + } + } + + if(workplane.v != Entity::FREE_IN_3D.v) { + // Draw the projection marker from the closest point on the + // projected line to the projected point on the real line. + Vector lAB = (lA.Minus(lB)); + double t = (lA.Minus(closest)).DivPivoting(lAB); + + Vector lA = SK.GetEntity(line->point[0])->PointGetNum(); + Vector lB = SK.GetEntity(line->point[1])->PointGetNum(); + + Vector c2 = (lA.ScaledBy(1-t)).Plus(lB.ScaledBy(t)); + DoProjectedPoint(&c2); + } + break; + } + + case DIAMETER: { + Entity *circle = SK.GetEntity(entityA); + Vector center = SK.GetEntity(circle->point[0])->PointGetNum(); + Quaternion q = SK.GetEntity(circle->normal)->NormalGetNum(); + Vector n = q.RotationN().WithMagnitude(1); + double r = circle->CircleGetRadiusNum(); + + Vector ref = center.Plus(disp.offset); + // Force the label into the same plane as the circle. + ref = ref.Minus(n.ScaledBy(n.Dot(ref) - n.Dot(center))); + + Vector mark = ref.Minus(center); + mark = mark.WithMagnitude(mark.Magnitude()-r); + DoLineTrimmedAgainstBox(ref, ref, ref.Minus(mark)); + + Vector topLeft; + DoLabel(ref, &topLeft, gr, gu); + if(labelPos) *labelPos = topLeft; + break; + } + + case POINTS_COINCIDENT: { + if(!dogd.drawing) { + for(int i = 0; i < 2; i++) { + Vector p = SK.GetEntity(i == 0 ? ptA : ptB)-> PointGetNum(); + Point2d pp = SS.GW.ProjectPoint(p); + // The point is selected within a radius of 7, from the + // same center; so if the point is visible, then this + // constraint cannot be selected. But that's okay. + dogd.dmin = min(dogd.dmin, pp.DistanceTo(dogd.mp) - 3); + dogd.refp = p; + } + break; + } + + if(dogd.drawing) { + // Let's adjust the color of this constraint to have the same + // rough luma as the point color, so that the constraint does not + // stand out in an ugly way. + RgbaColor cd = Style::Color(Style::DATUM), + cc = Style::Color(Style::CONSTRAINT); + // convert from 8-bit color to a vector + Vector vd = Vector::From(cd.redF(), cd.greenF(), cd.blueF()), + vc = Vector::From(cc.redF(), cc.greenF(), cc.blueF()); + // and scale the constraint color to have the same magnitude as + // the datum color, maybe a bit dimmer + vc = vc.WithMagnitude(vd.Magnitude()*0.9); + // and set the color to that. + ssglColorRGB(RGBf(vc.x, vc.y, vc.z)); + + for(int a = 0; a < 2; a++) { + Vector r = SS.GW.projRight.ScaledBy((a+1)/SS.GW.scale); + Vector d = SS.GW.projUp.ScaledBy((2-a)/SS.GW.scale); + for(int i = 0; i < 2; i++) { + Vector p = SK.GetEntity(i == 0 ? ptA : ptB)-> PointGetNum(); + glBegin(GL_QUADS); + ssglVertex3v(p.Plus (r).Plus (d)); + ssglVertex3v(p.Plus (r).Minus(d)); + ssglVertex3v(p.Minus(r).Minus(d)); + ssglVertex3v(p.Minus(r).Plus (d)); + glEnd(); + } + + } + } + break; + } + + case PT_ON_CIRCLE: + case PT_ON_LINE: + case PT_ON_FACE: + case PT_IN_PLANE: { + double s = 8/SS.GW.scale; + Vector p = SK.GetEntity(ptA)->PointGetNum(); + Vector r, d; + if(type == PT_ON_FACE) { + Vector n = SK.GetEntity(entityA)->FaceGetNormalNum(); + r = n.Normal(0); + d = n.Normal(1); + } else if(type == PT_IN_PLANE) { + EntityBase *n = SK.GetEntity(entityA)->Normal(); + r = n->NormalU(); + d = n->NormalV(); + } else { + r = gr; + d = gu; + s *= (6.0/8); // draw these a little smaller + } + r = r.WithMagnitude(s); d = d.WithMagnitude(s); + LineDrawOrGetDistance(p.Plus (r).Plus (d), p.Plus (r).Minus(d)); + LineDrawOrGetDistance(p.Plus (r).Minus(d), p.Minus(r).Minus(d)); + LineDrawOrGetDistance(p.Minus(r).Minus(d), p.Minus(r).Plus (d)); + LineDrawOrGetDistance(p.Minus(r).Plus (d), p.Plus (r).Plus (d)); + break; + } + + case WHERE_DRAGGED: { + Vector p = SK.GetEntity(ptA)->PointGetNum(), + u = p.Plus(gu.WithMagnitude(8/SS.GW.scale)).Plus( + gr.WithMagnitude(8/SS.GW.scale)), + uu = u.Minus(gu.WithMagnitude(5/SS.GW.scale)), + ur = u.Minus(gr.WithMagnitude(5/SS.GW.scale)); + // Draw four little crop marks, uniformly spaced (by ninety + // degree rotations) around the point. + int i; + for(i = 0; i < 4; i++) { + LineDrawOrGetDistance(u, uu); + LineDrawOrGetDistance(u, ur); + u = u.RotatedAbout(p, gn, PI/2); + ur = ur.RotatedAbout(p, gn, PI/2); + uu = uu.RotatedAbout(p, gn, PI/2); + } + break; + } + + case SAME_ORIENTATION: { + for(int i = 0; i < 2; i++) { + Entity *e = SK.GetEntity(i == 0 ? entityA : entityB); + Quaternion q = e->NormalGetNum(); + Vector n = q.RotationN().WithMagnitude(25/SS.GW.scale); + Vector u = q.RotationU().WithMagnitude(6/SS.GW.scale); + Vector p = SK.GetEntity(e->point[0])->PointGetNum(); + p = p.Plus(n.WithMagnitude(10/SS.GW.scale)); + + LineDrawOrGetDistance(p.Plus(u), p.Minus(u).Plus(n)); + LineDrawOrGetDistance(p.Minus(u), p.Plus(u).Plus(n)); + } + break; + } + + case EQUAL_ANGLE: { + Vector ref; + Entity *a = SK.GetEntity(entityA); + Entity *b = SK.GetEntity(entityB); + Entity *c = SK.GetEntity(entityC); + Entity *d = SK.GetEntity(entityD); + + Vector a0 = a->VectorGetStartPoint(); + Vector b0 = b->VectorGetStartPoint(); + Vector c0 = c->VectorGetStartPoint(); + Vector d0 = d->VectorGetStartPoint(); + Vector da = a->VectorGetNum(); + Vector db = b->VectorGetNum(); + Vector dc = c->VectorGetNum(); + Vector dd = d->VectorGetNum(); + + if(other) { + a0 = a0.Plus(da); + da = da.ScaledBy(-1); + } + + DoArcForAngle(a0, da, b0, db, + da.WithMagnitude(40/SS.GW.scale), &ref, /*trim=*/false); + DoArcForAngle(c0, dc, d0, dd, + dc.WithMagnitude(40/SS.GW.scale), &ref, /*trim=*/false); + + break; + } + + case ANGLE: { + Entity *a = SK.GetEntity(entityA); + Entity *b = SK.GetEntity(entityB); + + Vector a0 = a->VectorGetStartPoint(); + Vector b0 = b->VectorGetStartPoint(); + Vector da = a->VectorGetNum(); + Vector db = b->VectorGetNum(); + if(other) { + a0 = a0.Plus(da); + da = da.ScaledBy(-1); + } + + Vector ref; + DoArcForAngle(a0, da, b0, db, disp.offset, &ref, /*trim=*/true); + DoLabel(ref, labelPos, gr, gu); + break; + } + + case PERPENDICULAR: { + Vector u = Vector::From(0, 0, 0), v = Vector::From(0, 0, 0); + Vector rn, ru; + if(workplane.v == Entity::FREE_IN_3D.v) { + rn = gn; + ru = gu; + } else { + EntityBase *normal = SK.GetEntity(workplane)->Normal(); + rn = normal->NormalN(); + ru = normal->NormalV(); // ru meaning r_up, not u/v + } + + for(int i = 0; i < 2; i++) { + Entity *e = SK.GetEntity(i == 0 ? entityA : entityB); + + if(i == 0) { + // Calculate orientation of perpendicular sign only + // once, so that it's the same both times it's drawn + u = e->VectorGetNum(); + u = u.WithMagnitude(16/SS.GW.scale); + v = (rn.Cross(u)).WithMagnitude(16/SS.GW.scale); + // a bit of bias to stop it from flickering between the + // two possibilities + if(fabs(u.Dot(ru)) < fabs(v.Dot(ru)) + LENGTH_EPS) { + swap(u, v); + } + if(u.Dot(ru) < 0) u = u.ScaledBy(-1); + } + + Vector p = e->VectorGetRefPoint(); + Vector s = p.Plus(u).Plus(v); + LineDrawOrGetDistance(s, s.Plus(v)); + + Vector m = s.Plus(v.ScaledBy(0.5)); + LineDrawOrGetDistance(m, m.Plus(u)); + } + break; + } + + case CURVE_CURVE_TANGENT: + case CUBIC_LINE_TANGENT: + case ARC_LINE_TANGENT: { + Vector textAt, u, v; + + if(type == ARC_LINE_TANGENT) { + Entity *arc = SK.GetEntity(entityA); + Entity *norm = SK.GetEntity(arc->normal); + Vector c = SK.GetEntity(arc->point[0])->PointGetNum(); + Vector p = + SK.GetEntity(arc->point[other ? 2 : 1])->PointGetNum(); + Vector r = p.Minus(c); + textAt = p.Plus(r.WithMagnitude(14/SS.GW.scale)); + u = norm->NormalU(); + v = norm->NormalV(); + } else if(type == CUBIC_LINE_TANGENT) { + Vector n; + if(workplane.v == Entity::FREE_IN_3D.v) { + u = gr; + v = gu; + n = gn; + } else { + EntityBase *wn = SK.GetEntity(workplane)->Normal(); + u = wn->NormalU(); + v = wn->NormalV(); + n = wn->NormalN(); + } + + Entity *cubic = SK.GetEntity(entityA); + Vector p = other ? cubic->CubicGetFinishNum() : + cubic->CubicGetStartNum(); + Vector dir = SK.GetEntity(entityB)->VectorGetNum(); + Vector out = n.Cross(dir); + textAt = p.Plus(out.WithMagnitude(14/SS.GW.scale)); + } else { + Vector n, dir; + EntityBase *wn = SK.GetEntity(workplane)->Normal(); + u = wn->NormalU(); + v = wn->NormalV(); + n = wn->NormalN(); + EntityBase *eA = SK.GetEntity(entityA); + // Big pain; we have to get a vector tangent to the curve + // at the shared point, which could be from either a cubic + // or an arc. + if(other) { + textAt = eA->EndpointFinish(); + if(eA->type == Entity::CUBIC) { + dir = eA->CubicGetFinishTangentNum(); + } else { + dir = SK.GetEntity(eA->point[0])->PointGetNum().Minus( + SK.GetEntity(eA->point[2])->PointGetNum()); + dir = n.Cross(dir); + } + } else { + textAt = eA->EndpointStart(); + if(eA->type == Entity::CUBIC) { + dir = eA->CubicGetStartTangentNum(); + } else { + dir = SK.GetEntity(eA->point[0])->PointGetNum().Minus( + SK.GetEntity(eA->point[1])->PointGetNum()); + dir = n.Cross(dir); + } + } + dir = n.Cross(dir); + textAt = textAt.Plus(dir.WithMagnitude(14/SS.GW.scale)); + } + + if(dogd.drawing) { + ssglWriteTextRefCenter("T", Style::DefaultTextHeight(), + textAt, u, v, LineCallback, this); + } else { + dogd.refp = textAt; + Point2d ref = SS.GW.ProjectPoint(dogd.refp); + dogd.dmin = min(dogd.dmin, ref.DistanceTo(dogd.mp)-10); + } + break; + } + + case PARALLEL: { + for(int i = 0; i < 2; i++) { + Entity *e = SK.GetEntity(i == 0 ? entityA : entityB); + Vector n = e->VectorGetNum(); + n = n.WithMagnitude(25/SS.GW.scale); + Vector u = (gn.Cross(n)).WithMagnitude(4/SS.GW.scale); + Vector p = e->VectorGetRefPoint(); + + LineDrawOrGetDistance(p.Plus(u), p.Plus(u).Plus(n)); + LineDrawOrGetDistance(p.Minus(u), p.Minus(u).Plus(n)); + } + break; + } + + case EQUAL_RADIUS: { + for(int i = 0; i < 2; i++) { + DoEqualRadiusTicks(i == 0 ? entityA : entityB); + } + break; + } + + case EQUAL_LINE_ARC_LEN: { + Entity *line = SK.GetEntity(entityA); + DoEqualLenTicks( + SK.GetEntity(line->point[0])->PointGetNum(), + SK.GetEntity(line->point[1])->PointGetNum(), + gn); + + DoEqualRadiusTicks(entityB); + break; + } + + case LENGTH_RATIO: + case LENGTH_DIFFERENCE: + case EQUAL_LENGTH_LINES: { + Vector a, b = Vector::From(0, 0, 0); + for(int i = 0; i < 2; i++) { + Entity *e = SK.GetEntity(i == 0 ? entityA : entityB); + a = SK.GetEntity(e->point[0])->PointGetNum(); + b = SK.GetEntity(e->point[1])->PointGetNum(); + + if(workplane.v != Entity::FREE_IN_3D.v) { + DoProjectedPoint(&a); + DoProjectedPoint(&b); + } + + DoEqualLenTicks(a, b, gn); + } + if((type == LENGTH_RATIO) || (type == LENGTH_DIFFERENCE)) { + Vector ref = ((a.Plus(b)).ScaledBy(0.5)).Plus(disp.offset); + DoLabel(ref, labelPos, gr, gu); + } + break; + } + + case EQ_LEN_PT_LINE_D: { + Entity *forLen = SK.GetEntity(entityA); + Vector a = SK.GetEntity(forLen->point[0])->PointGetNum(), + b = SK.GetEntity(forLen->point[1])->PointGetNum(); + if(workplane.v != Entity::FREE_IN_3D.v) { + DoProjectedPoint(&a); + DoProjectedPoint(&b); + } + DoEqualLenTicks(a, b, gn); + + Entity *ln = SK.GetEntity(entityB); + Vector la = SK.GetEntity(ln->point[0])->PointGetNum(), + lb = SK.GetEntity(ln->point[1])->PointGetNum(); + Vector pt = SK.GetEntity(ptA)->PointGetNum(); + if(workplane.v != Entity::FREE_IN_3D.v) { + DoProjectedPoint(&pt); + la = la.ProjectInto(workplane); + lb = lb.ProjectInto(workplane); + } + + Vector closest = pt.ClosestPointOnLine(la, lb.Minus(la)); + LineDrawOrGetDistance(pt, closest); + DoEqualLenTicks(pt, closest, gn); + break; + } + + case EQ_PT_LN_DISTANCES: { + for(int i = 0; i < 2; i++) { + Entity *ln = SK.GetEntity(i == 0 ? entityA : entityB); + Vector la = SK.GetEntity(ln->point[0])->PointGetNum(), + lb = SK.GetEntity(ln->point[1])->PointGetNum(); + Entity *pte = SK.GetEntity(i == 0 ? ptA : ptB); + Vector pt = pte->PointGetNum(); + + if(workplane.v != Entity::FREE_IN_3D.v) { + DoProjectedPoint(&pt); + la = la.ProjectInto(workplane); + lb = lb.ProjectInto(workplane); + } + + Vector closest = pt.ClosestPointOnLine(la, lb.Minus(la)); + + LineDrawOrGetDistance(pt, closest); + DoEqualLenTicks(pt, closest, gn); + } + break; + } + + { + case SYMMETRIC: + Vector n; + n = SK.GetEntity(entityA)->Normal()->NormalN(); goto s; + case SYMMETRIC_HORIZ: + n = SK.GetEntity(workplane)->Normal()->NormalU(); goto s; + case SYMMETRIC_VERT: + n = SK.GetEntity(workplane)->Normal()->NormalV(); goto s; + case SYMMETRIC_LINE: { + Entity *ln = SK.GetEntity(entityA); + Vector la = SK.GetEntity(ln->point[0])->PointGetNum(), + lb = SK.GetEntity(ln->point[1])->PointGetNum(); + la = la.ProjectInto(workplane); + lb = lb.ProjectInto(workplane); + n = lb.Minus(la); + Vector nw = SK.GetEntity(workplane)->Normal()->NormalN(); + n = n.RotatedAbout(nw, PI/2); + goto s; + } +s: + Vector a = SK.GetEntity(ptA)->PointGetNum(); + Vector b = SK.GetEntity(ptB)->PointGetNum(); + + for(int i = 0; i < 2; i++) { + Vector tail = (i == 0) ? a : b; + Vector d = (i == 0) ? b : a; + d = d.Minus(tail); + // Project the direction in which the arrow is drawn normal + // to the symmetry plane; for projected symmetry constraints, + // they might not be in the same direction, even when the + // constraint is fully solved. + d = n.ScaledBy(d.Dot(n)); + d = d.WithMagnitude(20/SS.GW.scale); + Vector tip = tail.Plus(d); + + LineDrawOrGetDistance(tail, tip); + d = d.WithMagnitude(9/SS.GW.scale); + LineDrawOrGetDistance(tip, tip.Minus(d.RotatedAbout(gn, 0.6))); + LineDrawOrGetDistance(tip, tip.Minus(d.RotatedAbout(gn, -0.6))); + } + break; + } + + case AT_MIDPOINT: + case HORIZONTAL: + case VERTICAL: + if(entityA.v) { + Vector r, u, n; + if(workplane.v == Entity::FREE_IN_3D.v) { + r = gr; u = gu; n = gn; + } else { + r = SK.GetEntity(workplane)->Normal()->NormalU(); + u = SK.GetEntity(workplane)->Normal()->NormalV(); + n = r.Cross(u); + } + // For "at midpoint", this branch is always taken. + Entity *e = SK.GetEntity(entityA); + Vector a = SK.GetEntity(e->point[0])->PointGetNum(); + Vector b = SK.GetEntity(e->point[1])->PointGetNum(); + Vector m = (a.ScaledBy(0.5)).Plus(b.ScaledBy(0.5)); + Vector offset = (a.Minus(b)).Cross(n); + offset = offset.WithMagnitude(13/SS.GW.scale); + // Draw midpoint constraint on other side of line, so that + // a line can be midpoint and horizontal at same time. + if(type == AT_MIDPOINT) offset = offset.ScaledBy(-1); + + if(dogd.drawing) { + const char *s = (type == HORIZONTAL) ? "H" : ( + (type == VERTICAL) ? "V" : ( + (type == AT_MIDPOINT) ? "M" : NULL)); + + ssglWriteTextRefCenter(s, Style::DefaultTextHeight(), + m.Plus(offset), r, u, LineCallback, this); + } else { + dogd.refp = m.Plus(offset); + Point2d ref = SS.GW.ProjectPoint(dogd.refp); + dogd.dmin = min(dogd.dmin, ref.DistanceTo(dogd.mp)-10); + } + } else { + Vector a = SK.GetEntity(ptA)->PointGetNum(); + Vector b = SK.GetEntity(ptB)->PointGetNum(); + + Entity *w = SK.GetEntity(workplane); + Vector cu = w->Normal()->NormalU(); + Vector cv = w->Normal()->NormalV(); + Vector cn = w->Normal()->NormalN(); + + int i; + for(i = 0; i < 2; i++) { + Vector o = (i == 0) ? a : b; + Vector oo = (i == 0) ? a.Minus(b) : b.Minus(a); + Vector d = (type == HORIZONTAL) ? cu : cv; + if(oo.Dot(d) < 0) d = d.ScaledBy(-1); + + Vector dp = cn.Cross(d); + d = d.WithMagnitude(14/SS.GW.scale); + Vector c = o.Minus(d); + LineDrawOrGetDistance(o, c); + d = d.WithMagnitude(3/SS.GW.scale); + dp = dp.WithMagnitude(2/SS.GW.scale); + if(dogd.drawing) { + glBegin(GL_QUADS); + ssglVertex3v((c.Plus(d)).Plus(dp)); + ssglVertex3v((c.Minus(d)).Plus(dp)); + ssglVertex3v((c.Minus(d)).Minus(dp)); + ssglVertex3v((c.Plus(d)).Minus(dp)); + glEnd(); + } else { + Point2d ref = SS.GW.ProjectPoint(c); + dogd.dmin = min(dogd.dmin, ref.DistanceTo(dogd.mp)-6); + } + } + } + break; + + case COMMENT: { + if(dogd.drawing && disp.style.v) { + ssglLineWidth(Style::Width(disp.style)); + ssglColorRGB(Style::Color(disp.style)); + } + Vector u, v; + if(workplane.v == Entity::FREE_IN_3D.v) { + u = gr; + v = gu; + } else { + EntityBase *norm = SK.GetEntity(workplane)->Normal(); + u = norm->NormalU(); + v = norm->NormalV(); + } + DoLabel(disp.offset, labelPos, u, v); + break; + } + + default: oops(); + } +} + +void Constraint::Draw(void) { + dogd.drawing = true; + dogd.sel = NULL; + hStyle hs = GetStyle(); + + ssglLineWidth(Style::Width(hs)); + ssglColorRGB(Style::Color(hs)); + + DrawOrGetDistance(NULL); +} + +double Constraint::GetDistance(Point2d mp) { + dogd.drawing = false; + dogd.sel = NULL; + dogd.mp = mp; + dogd.dmin = 1e12; + + DrawOrGetDistance(NULL); + + return dogd.dmin; +} + +Vector Constraint::GetLabelPos(void) { + dogd.drawing = false; + dogd.sel = NULL; + dogd.mp.x = 0; dogd.mp.y = 0; + dogd.dmin = 1e12; + + Vector p; + DrawOrGetDistance(&p); + return p; +} + +Vector Constraint::GetReferencePos(void) { + dogd.drawing = false; + dogd.sel = NULL; + + dogd.refp = SS.GW.offset.ScaledBy(-1); + DrawOrGetDistance(NULL); + + return dogd.refp; +} + +void Constraint::GetEdges(SEdgeList *sel) { + dogd.drawing = true; + dogd.sel = sel; + DrawOrGetDistance(NULL); + dogd.sel = NULL; +} + +bool Constraint::IsStylable() { + if(type == COMMENT) return true; + return false; +} + +hStyle Constraint::GetStyle() const { + if(disp.style.v != 0) return disp.style; + return { Style::CONSTRAINT }; +} + +bool Constraint::HasLabel() { + switch(type) { + case COMMENT: + case PT_PT_DISTANCE: + case PT_PLANE_DISTANCE: + case PT_LINE_DISTANCE: + case PT_FACE_DISTANCE: + case PROJ_PT_DISTANCE: + case LENGTH_RATIO: + case LENGTH_DIFFERENCE: + case DIAMETER: + case ANGLE: + return true; + + default: + return false; + } +} diff --git a/src/drawentity.cpp b/src/drawentity.cpp new file mode 100644 index 0000000..39bc085 --- /dev/null +++ b/src/drawentity.cpp @@ -0,0 +1,724 @@ +//----------------------------------------------------------------------------- +// Draw a representation of an entity on-screen, in the case of curves up +// to our chord tolerance, or return the distance from the user's mouse pointer +// to the entity for selection. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +std::string Entity::DescriptionString(void) { + if(h.isFromRequest()) { + Request *r = SK.GetRequest(h.request()); + return r->DescriptionString(); + } else { + Group *g = SK.GetGroup(h.group()); + return g->DescriptionString(); + } +} + +void Entity::LineDrawOrGetDistance(Vector a, Vector b, bool maybeFat, int data) { + if(dogd.drawing) { + // Draw lines from active group in front of those from previous + ssglDepthRangeOffset((group.v == SS.GW.activeGroup.v) ? 4 : 3); + // Narrow lines are drawn as lines, but fat lines must be drawn as + // filled polygons, to get the line join style right. + ssglStippledLine(a, b, dogd.lineWidth, dogd.stippleType, dogd.stippleScale, maybeFat); + ssglDepthRangeOffset(0); + } else { + Point2d ap = SS.GW.ProjectPoint(a); + Point2d bp = SS.GW.ProjectPoint(b); + + double d = dogd.mp.DistanceToLine(ap, bp.Minus(ap), true); + // A little bit easier to select in the active group + if(group.v == SS.GW.activeGroup.v) d -= 1; + if(d < dogd.dmin) { + dogd.dmin = d; + dogd.data = data; + } + } + dogd.refp = (a.Plus(b)).ScaledBy(0.5); +} + +void Entity::DrawAll(bool drawAsHidden) { + // This handles points as a special case, because I seem to be able + // to get a huge speedup that way, by consolidating stuff to gl. + int i; + if(SS.GW.showPoints) { + double s = 3.5/SS.GW.scale; + Vector r = SS.GW.projRight.ScaledBy(s); + Vector d = SS.GW.projUp.ScaledBy(s); + ssglColorRGB(Style::Color(Style::DATUM)); + ssglDepthRangeOffset(6); + glBegin(GL_QUADS); + for(i = 0; i < SK.entity.n; i++) { + Entity *e = &(SK.entity.elem[i]); + if(!e->IsPoint()) continue; + if(!(SK.GetGroup(e->group)->IsVisible())) continue; + if(e->forceHidden) continue; + + Vector v = e->PointGetNum(); + + // If we're analyzing the sketch to show the degrees of freedom, + // then we draw big colored squares over the points that are + // free to move. + bool free = false; + if(e->type == POINT_IN_3D) { + Param *px = SK.GetParam(e->param[0]), + *py = SK.GetParam(e->param[1]), + *pz = SK.GetParam(e->param[2]); + + free = (px->free) || (py->free) || (pz->free); + } else if(e->type == POINT_IN_2D) { + Param *pu = SK.GetParam(e->param[0]), + *pv = SK.GetParam(e->param[1]); + + free = (pu->free) || (pv->free); + } + if(free) { + Vector re = r.ScaledBy(2.5), de = d.ScaledBy(2.5); + + ssglColorRGB(Style::Color(Style::ANALYZE)); + ssglVertex3v(v.Plus (re).Plus (de)); + ssglVertex3v(v.Plus (re).Minus(de)); + ssglVertex3v(v.Minus(re).Minus(de)); + ssglVertex3v(v.Minus(re).Plus (de)); + ssglColorRGB(Style::Color(Style::DATUM)); + } + + ssglVertex3v(v.Plus (r).Plus (d)); + ssglVertex3v(v.Plus (r).Minus(d)); + ssglVertex3v(v.Minus(r).Minus(d)); + ssglVertex3v(v.Minus(r).Plus (d)); + } + glEnd(); + ssglDepthRangeOffset(0); + } + + for(i = 0; i < SK.entity.n; i++) { + Entity *e = &(SK.entity.elem[i]); + if(e->IsPoint()) { + continue; // already handled + } + e->Draw(drawAsHidden); + } +} + +void Entity::Draw(bool drawAsHidden) { + hStyle hs = Style::ForEntity(h); + dogd.lineWidth = Style::Width(hs); + if(drawAsHidden) { + dogd.stippleType = Style::PatternType({ Style::HIDDEN_EDGE }); + dogd.stippleScale = Style::StippleScaleMm({ Style::HIDDEN_EDGE }); + } else { + dogd.stippleType = Style::PatternType(hs); + dogd.stippleScale = Style::StippleScaleMm(hs); + } + ssglLineWidth((float)dogd.lineWidth); + ssglColorRGB(Style::Color(hs)); + + dogd.drawing = true; + DrawOrGetDistance(); +} + +void Entity::GenerateEdges(SEdgeList *el, bool includingConstruction) { + if(construction && !includingConstruction) return; + + SBezierList *sbl = GetOrGenerateBezierCurves(); + + int i, j; + for(i = 0; i < sbl->l.n; i++) { + SBezier *sb = &(sbl->l.elem[i]); + + List lv = {}; + sb->MakePwlInto(&lv); + for(j = 1; j < lv.n; j++) { + el->AddEdge(lv.elem[j-1], lv.elem[j], style.v, i); + } + lv.Clear(); + } + +} + +SBezierList *Entity::GetOrGenerateBezierCurves() { + if(beziers.l.n == 0) + GenerateBezierCurves(&beziers); + return &beziers; +} + +SEdgeList *Entity::GetOrGenerateEdges() { + if(edges.l.n != 0) { + if(EXACT(edgesChordTol == SS.ChordTolMm())) + return &edges; + edges.l.Clear(); + } + if(edges.l.n == 0) + GenerateEdges(&edges, /*includingConstruction=*/true); + edgesChordTol = SS.ChordTolMm(); + return &edges; +} + +BBox Entity::GetOrGenerateScreenBBox(bool *hasBBox) { + SBezierList *sbl = GetOrGenerateBezierCurves(); + + // We don't bother with bounding boxes for normals, workplanes, etc. + *hasBBox = (IsPoint() || sbl->l.n > 0); + if(!*hasBBox) return {}; + + if(screenBBoxValid) + return screenBBox; + + if(IsPoint()) { + Vector proj = SS.GW.ProjectPoint3(PointGetNum()); + screenBBox = BBox::From(proj, proj); + } else if(sbl->l.n > 0) { + Vector first = SS.GW.ProjectPoint3(sbl->l.elem[0].ctrl[0]); + screenBBox = BBox::From(first, first); + for(int i = 0; i < sbl->l.n; i++) { + SBezier *sb = &sbl->l.elem[i]; + for(int i = 0; i <= sb->deg; i++) { + screenBBox.Include(SS.GW.ProjectPoint3(sb->ctrl[i])); + } + } + } else oops(); + + // Enlarge the bounding box to consider selection radius. + screenBBox.minp.x -= SELECTION_RADIUS; + screenBBox.minp.y -= SELECTION_RADIUS; + screenBBox.maxp.x += SELECTION_RADIUS; + screenBBox.maxp.y += SELECTION_RADIUS; + + screenBBoxValid = true; + return screenBBox; +} + +double Entity::GetDistance(Point2d mp) { + dogd.drawing = false; + dogd.mp = mp; + dogd.dmin = 1e12; + + DrawOrGetDistance(); + + return dogd.dmin; +} + +Vector Entity::GetReferencePos(void) { + dogd.drawing = false; + + dogd.refp = SS.GW.offset.ScaledBy(-1); + DrawOrGetDistance(); + + return dogd.refp; +} + +bool Entity::IsStylable() { + if(IsPoint()) return false; + if(IsWorkplane()) return false; + if(IsNormal()) return false; + return true; +} + +bool Entity::IsVisible(void) { + Group *g = SK.GetGroup(group); + + if(g->h.v == Group::HGROUP_REFERENCES.v && IsNormal()) { + // The reference normals are always shown + return true; + } + if(!(g->IsVisible())) return false; + + // Don't check if points are hidden; this gets called only for + // selected or hovered points, and those should always be shown. + if(IsNormal() && !SS.GW.showNormals) return false; + + if(!SS.GW.showWorkplanes) { + if(IsWorkplane() && !h.isFromRequest()) { + if(g->h.v != SS.GW.activeGroup.v) { + // The group-associated workplanes are hidden outside + // their group. + return false; + } + } + } + + if(style.v) { + Style *s = Style::Get(style); + if(!s->visible) return false; + } + + if(forceHidden) return false; + + return true; +} + +void Entity::CalculateNumerical(bool forExport) { + if(IsPoint()) actPoint = PointGetNum(); + if(IsNormal()) actNormal = NormalGetNum(); + if(type == DISTANCE || type == DISTANCE_N_COPY) { + actDistance = DistanceGetNum(); + } + if(IsFace()) { + actPoint = FaceGetPointNum(); + Vector n = FaceGetNormalNum(); + actNormal = Quaternion::From(0, n.x, n.y, n.z); + } + if(forExport) { + // Visibility in copied linked entities follows source file + actVisible = IsVisible(); + } else { + // Copied entities within a file are always visible + actVisible = true; + } +} + +bool Entity::PointIsFromReferences(void) { + return h.request().IsFromReferences(); +} + +//----------------------------------------------------------------------------- +// Compute a cubic, second derivative continuous, interpolating spline. Same +// routine for periodic splines (in a loop) or open splines (with specified +// end tangents). +//----------------------------------------------------------------------------- +void Entity::ComputeInterpolatingSpline(SBezierList *sbl, bool periodic) { + static const int MAX_N = BandedMatrix::MAX_UNKNOWNS; + int ep = extraPoints; + + // The number of unknowns to solve for. + int n = periodic ? 3 + ep : ep; + if(n >= MAX_N) oops(); + // The number of on-curve points, one more than the number of segments. + int pts = periodic ? 4 + ep : 2 + ep; + + int i, j, a; + + // The starting and finishing control points that define our end tangents + // (if the spline isn't periodic), and the on-curve points. + Vector ctrl_s = Vector::From(0, 0, 0); + Vector ctrl_f = Vector::From(0, 0, 0); + Vector pt[MAX_N+4]; + if(periodic) { + for(i = 0; i < ep + 3; i++) { + pt[i] = SK.GetEntity(point[i])->PointGetNum(); + } + pt[i++] = SK.GetEntity(point[0])->PointGetNum(); + } else { + ctrl_s = SK.GetEntity(point[1])->PointGetNum(); + ctrl_f = SK.GetEntity(point[ep+2])->PointGetNum(); + j = 0; + pt[j++] = SK.GetEntity(point[0])->PointGetNum(); + for(i = 2; i <= ep + 1; i++) { + pt[j++] = SK.GetEntity(point[i])->PointGetNum(); + } + pt[j++] = SK.GetEntity(point[ep+3])->PointGetNum(); + } + + // The unknowns that we will be solving for, a set for each coordinate. + double Xx[MAX_N], Xy[MAX_N], Xz[MAX_N]; + // For a cubic Bezier section f(t) as t goes from 0 to 1, + // f' (0) = 3*(P1 - P0) + // f' (1) = 3*(P3 - P2) + // f''(0) = 6*(P0 - 2*P1 + P2) + // f''(1) = 6*(P3 - 2*P2 + P1) + for(a = 0; a < 3; a++) { + BandedMatrix bm = {}; + bm.n = n; + + for(i = 0; i < n; i++) { + int im, it, ip; + if(periodic) { + im = WRAP(i - 1, n); + it = i; + ip = WRAP(i + 1, n); + } else { + im = i; + it = i + 1; + ip = i + 2; + } + // All of these are expressed in terms of a constant part, and + // of X[i-1], X[i], and X[i+1]; so let these be the four + // components of that vector; + Vector4 A, B, C, D, E; + // The on-curve interpolated point + C = Vector4::From((pt[it]).Element(a), 0, 0, 0); + // control point one back, C - X[i] + B = C.Plus(Vector4::From(0, 0, -1, 0)); + // control point one forward, C + X[i] + D = C.Plus(Vector4::From(0, 0, 1, 0)); + // control point two back + if(i == 0 && !periodic) { + A = Vector4::From(ctrl_s.Element(a), 0, 0, 0); + } else { + // pt[im] + X[i-1] + A = Vector4::From(pt[im].Element(a), 1, 0, 0); + } + // control point two forward + if(i == (n - 1) && !periodic) { + E = Vector4::From(ctrl_f.Element(a), 0, 0, 0); + } else { + // pt[ip] - X[i+1] + E = Vector4::From((pt[ip]).Element(a), 0, 0, -1); + } + // Write the second derivatives of each segment, dropping constant + Vector4 fprev_pp = (C.Minus(B.ScaledBy(2))).Plus(A), + fnext_pp = (C.Minus(D.ScaledBy(2))).Plus(E), + eq = fprev_pp.Minus(fnext_pp); + + bm.B[i] = -eq.w; + if(periodic) { + bm.A[i][WRAP(i-2, n)] = eq.x; + bm.A[i][WRAP(i-1, n)] = eq.y; + bm.A[i][i] = eq.z; + } else { + // The wrapping would work, except when n = 1 and everything + // wraps to zero... + if(i > 0) bm.A[i][i - 1] = eq.x; + bm.A[i][i] = eq.y; + if(i < (n-1)) bm.A[i][i + 1] = eq.z; + } + } + bm.Solve(); + double *X = (a == 0) ? Xx : + (a == 1) ? Xy : + Xz; + memcpy(X, bm.X, n*sizeof(double)); + } + + for(i = 0; i < pts - 1; i++) { + Vector p0, p1, p2, p3; + if(periodic) { + p0 = pt[i]; + int iw = WRAP(i - 1, n); + p1 = p0.Plus(Vector::From(Xx[iw], Xy[iw], Xz[iw])); + } else if(i == 0) { + p0 = pt[0]; + p1 = ctrl_s; + } else { + p0 = pt[i]; + p1 = p0.Plus(Vector::From(Xx[i-1], Xy[i-1], Xz[i-1])); + } + if(periodic) { + p3 = pt[i+1]; + int iw = WRAP(i, n); + p2 = p3.Minus(Vector::From(Xx[iw], Xy[iw], Xz[iw])); + } else if(i == (pts - 2)) { + p3 = pt[pts-1]; + p2 = ctrl_f; + } else { + p3 = pt[i+1]; + p2 = p3.Minus(Vector::From(Xx[i], Xy[i], Xz[i])); + } + SBezier sb = SBezier::From(p0, p1, p2, p3); + sbl->l.Add(&sb); + } +} + +void Entity::GenerateBezierCurves(SBezierList *sbl) { + SBezier sb; + + int i = sbl->l.n; + + switch(type) { + case LINE_SEGMENT: { + Vector a = SK.GetEntity(point[0])->PointGetNum(); + Vector b = SK.GetEntity(point[1])->PointGetNum(); + sb = SBezier::From(a, b); + sb.entity = h.v; + sbl->l.Add(&sb); + break; + } + case CUBIC: + ComputeInterpolatingSpline(sbl, false); + break; + + case CUBIC_PERIODIC: + ComputeInterpolatingSpline(sbl, true); + break; + + case CIRCLE: + case ARC_OF_CIRCLE: { + Vector center = SK.GetEntity(point[0])->PointGetNum(); + Quaternion q = SK.GetEntity(normal)->NormalGetNum(); + Vector u = q.RotationU(), v = q.RotationV(); + double r = CircleGetRadiusNum(); + double thetaa, thetab, dtheta; + + if(r < LENGTH_EPS) { + // If a circle or an arc gets dragged through zero radius, + // then we just don't generate anything. + break; + } + + if(type == CIRCLE) { + thetaa = 0; + thetab = 2*PI; + dtheta = 2*PI; + } else { + ArcGetAngles(&thetaa, &thetab, &dtheta); + } + int i, n; + if(dtheta > (3*PI/2 + 0.01)) { + n = 4; + } else if(dtheta > (PI + 0.01)) { + n = 3; + } else if(dtheta > (PI/2 + 0.01)) { + n = 2; + } else { + n = 1; + } + dtheta /= n; + + for(i = 0; i < n; i++) { + double s, c; + + c = cos(thetaa); + s = sin(thetaa); + // The start point of the curve, and the tangent vector at + // that start point. + Vector p0 = center.Plus(u.ScaledBy( r*c)).Plus(v.ScaledBy(r*s)), + t0 = u.ScaledBy(-r*s). Plus(v.ScaledBy(r*c)); + + thetaa += dtheta; + + c = cos(thetaa); + s = sin(thetaa); + Vector p2 = center.Plus(u.ScaledBy( r*c)).Plus(v.ScaledBy(r*s)), + t2 = u.ScaledBy(-r*s). Plus(v.ScaledBy(r*c)); + + // The control point must lie on both tangents. + Vector p1 = Vector::AtIntersectionOfLines(p0, p0.Plus(t0), + p2, p2.Plus(t2), + NULL); + + SBezier sb = SBezier::From(p0, p1, p2); + sb.weight[1] = cos(dtheta/2); + sbl->l.Add(&sb); + } + break; + } + + case TTF_TEXT: { + Vector topLeft = SK.GetEntity(point[0])->PointGetNum(); + Vector botLeft = SK.GetEntity(point[1])->PointGetNum(); + Vector n = Normal()->NormalN(); + Vector v = topLeft.Minus(botLeft); + Vector u = (v.Cross(n)).WithMagnitude(v.Magnitude()); + + SS.fonts.PlotString(font, str, sbl, botLeft, u, v); + break; + } + + default: + // Not a problem, points and normals and such don't generate curves + break; + } + + // Record our style for all of the Beziers that we just created. + for(; i < sbl->l.n; i++) { + sbl->l.elem[i].auxA = style.v; + } +} + +void Entity::DrawOrGetDistance(void) { + // If we're about to perform hit testing on an entity, consider + // whether the pointer is inside its bounding box first. + if(!dogd.drawing) { + bool hasBBox; + BBox box = GetOrGenerateScreenBBox(&hasBBox); + if(hasBBox && !box.Contains(dogd.mp)) + return; + } + + if(!IsVisible()) return; + + switch(type) { + case POINT_N_COPY: + case POINT_N_TRANS: + case POINT_N_ROT_TRANS: + case POINT_N_ROT_AA: + case POINT_IN_3D: + case POINT_IN_2D: { + Vector v = PointGetNum(); + dogd.refp = v; + + if(dogd.drawing) { + double s = 3.5; + Vector r = SS.GW.projRight.ScaledBy(s/SS.GW.scale); + Vector d = SS.GW.projUp.ScaledBy(s/SS.GW.scale); + + ssglColorRGB(Style::Color(Style::DATUM)); + ssglDepthRangeOffset(6); + glBegin(GL_QUADS); + ssglVertex3v(v.Plus (r).Plus (d)); + ssglVertex3v(v.Plus (r).Minus(d)); + ssglVertex3v(v.Minus(r).Minus(d)); + ssglVertex3v(v.Minus(r).Plus (d)); + glEnd(); + ssglDepthRangeOffset(0); + } else { + Point2d pp = SS.GW.ProjectPoint(v); + dogd.dmin = pp.DistanceTo(dogd.mp) - 6; + } + break; + } + + case NORMAL_N_COPY: + case NORMAL_N_ROT: + case NORMAL_N_ROT_AA: + case NORMAL_IN_3D: + case NORMAL_IN_2D: { + int i; + for(i = 0; i < 2; i++) { + if(i == 0 && !SS.GW.showNormals) { + // When the normals are hidden, we will continue to show + // the coordinate axes at the bottom left corner, but + // not at the origin. + continue; + } + + hRequest hr = h.request(); + // Always draw the x, y, and z axes in red, green, and blue; + // brighter for the ones at the bottom left of the screen, + // dimmer for the ones at the model origin. + int f = (i == 0 ? 100 : 255); + if(hr.v == Request::HREQUEST_REFERENCE_XY.v) { + if(dogd.drawing) + ssglColorRGB(RGBi(0, 0, f)); + } else if(hr.v == Request::HREQUEST_REFERENCE_YZ.v) { + if(dogd.drawing) + ssglColorRGB(RGBi(f, 0, 0)); + } else if(hr.v == Request::HREQUEST_REFERENCE_ZX.v) { + if(dogd.drawing) + ssglColorRGB(RGBi(0, f, 0)); + } else { + if(dogd.drawing) + ssglColorRGB(Style::Color(Style::NORMALS)); + if(i > 0) break; + } + + Quaternion q = NormalGetNum(); + Vector tail; + if(i == 0) { + tail = SK.GetEntity(point[0])->PointGetNum(); + if(dogd.drawing) + ssglLineWidth(1); + } else { + // Draw an extra copy of the x, y, and z axes, that's + // always in the corner of the view and at the front. + // So those are always available, perhaps useful. + double s = SS.GW.scale; + double h = 60 - SS.GW.height/2; + double w = 60 - SS.GW.width/2; + tail = SS.GW.projRight.ScaledBy(w/s).Plus( + SS.GW.projUp. ScaledBy(h/s)).Minus(SS.GW.offset); + if(dogd.drawing) { + ssglDepthRangeLockToFront(true); + ssglLineWidth(2); + } + } + + Vector v = (q.RotationN()).WithMagnitude(50/SS.GW.scale); + Vector tip = tail.Plus(v); + LineDrawOrGetDistance(tail, tip); + + v = v.WithMagnitude(12/SS.GW.scale); + Vector axis = q.RotationV(); + LineDrawOrGetDistance(tip,tip.Minus(v.RotatedAbout(axis, 0.6))); + LineDrawOrGetDistance(tip,tip.Minus(v.RotatedAbout(axis,-0.6))); + } + if(dogd.drawing) + ssglDepthRangeLockToFront(false); + break; + } + + case DISTANCE: + case DISTANCE_N_COPY: + // These are used only as data structures, nothing to display. + break; + + case WORKPLANE: { + Vector p; + p = SK.GetEntity(point[0])->PointGetNum(); + + Vector u = Normal()->NormalU(); + Vector v = Normal()->NormalV(); + + double s = (min(SS.GW.width, SS.GW.height))*0.45/SS.GW.scale; + + Vector us = u.ScaledBy(s); + Vector vs = v.ScaledBy(s); + + Vector pp = p.Plus (us).Plus (vs); + Vector pm = p.Plus (us).Minus(vs); + Vector mm = p.Minus(us).Minus(vs), mm2 = mm; + Vector mp = p.Minus(us).Plus (vs); + + if(dogd.drawing) { + ssglLineWidth(1); + ssglColorRGB(Style::Color(Style::NORMALS)); + glEnable(GL_LINE_STIPPLE); + glLineStipple(3, 0x1111); + } + + if(!h.isFromRequest()) { + mm = mm.Plus(v.ScaledBy(70/SS.GW.scale)); + mm2 = mm2.Plus(u.ScaledBy(70/SS.GW.scale)); + LineDrawOrGetDistance(mm2, mm); + } + LineDrawOrGetDistance(pp, pm); + LineDrawOrGetDistance(pm, mm2); + LineDrawOrGetDistance(mp, mm); + LineDrawOrGetDistance(pp, mp); + + if(dogd.drawing) + glDisable(GL_LINE_STIPPLE); + + std::string str = DescriptionString().substr(5); + double th = Style::DefaultTextHeight(); + if(dogd.drawing) { + Vector o = mm2.Plus(u.ScaledBy(3/SS.GW.scale)).Plus( + v.ScaledBy(3/SS.GW.scale)); + ssglWriteText(str, th, o, u, v, NULL, NULL); + } else { + Vector pos = mm2.Plus(u.ScaledBy(ssglStrWidth(str, th)/2)).Plus( + v.ScaledBy(ssglStrCapHeight(th)/2)); + Point2d pp = SS.GW.ProjectPoint(pos); + dogd.dmin = min(dogd.dmin, pp.DistanceTo(dogd.mp) - 10); + // If a line lies in a plane, then select the line, not + // the plane. + dogd.dmin += 3; + } + break; + } + + case LINE_SEGMENT: + case CIRCLE: + case ARC_OF_CIRCLE: + case CUBIC: + case CUBIC_PERIODIC: + case TTF_TEXT: + // Nothing but the curve(s). + break; + + case FACE_NORMAL_PT: + case FACE_XPROD: + case FACE_N_ROT_TRANS: + case FACE_N_TRANS: + case FACE_N_ROT_AA: + // Do nothing; these are drawn with the triangle mesh + break; + + default: + oops(); + } + + // And draw the curves; generate the rational polynomial curves for + // everything, then piecewise linearize them, and display those. + SEdgeList *sel = GetOrGenerateEdges(); + dogd.data = -1; + for(int i = 0; i < sel->l.n; i++) { + SEdge *se = &(sel->l.elem[i]); + LineDrawOrGetDistance(se->a, se->b, true, se->auxB); + } +} + diff --git a/src/dsc.h b/src/dsc.h new file mode 100644 index 0000000..c61bbf5 --- /dev/null +++ b/src/dsc.h @@ -0,0 +1,528 @@ +//----------------------------------------------------------------------------- +// Data structures used frequently in the program, various kinds of vectors +// (of real numbers, not symbolic algebra stuff) and our templated lists. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#ifndef __DSC_H +#define __DSC_H + +#include "solvespace.h" + +class Vector; +class Vector4; +class Point2d; +class hEntity; +class hParam; + +class Quaternion { +public: + // a + (vx)*i + (vy)*j + (vz)*k + double w, vx, vy, vz; + + static const Quaternion IDENTITY; + + static Quaternion From(double w, double vx, double vy, double vz); + static Quaternion From(hParam w, hParam vx, hParam vy, hParam vz); + static Quaternion From(Vector u, Vector v); + static Quaternion From(Vector axis, double dtheta); + + Quaternion Plus(Quaternion b); + Quaternion Minus(Quaternion b); + Quaternion ScaledBy(double s); + double Magnitude(void); + Quaternion WithMagnitude(double s); + + // Call a rotation matrix [ u' v' n' ]'; this returns the first and + // second rows, where that matrix is generated by this quaternion + Vector RotationU(void); + Vector RotationV(void); + Vector RotationN(void); + Vector Rotate(Vector p); + + Quaternion ToThe(double p); + Quaternion Inverse(void); + Quaternion Times(Quaternion b); + Quaternion Mirror(void); +}; + +class Vector { +public: + double x, y, z; + + static Vector From(double x, double y, double z); + static Vector From(hParam x, hParam y, hParam z); + static Vector AtIntersectionOfPlanes(Vector n1, double d1, + Vector n2, double d2); + static Vector AtIntersectionOfLines(Vector a0, Vector a1, + Vector b0, Vector b1, + bool *skew, + double *pa=NULL, double *pb=NULL); + static Vector AtIntersectionOfPlaneAndLine(Vector n, double d, + Vector p0, Vector p1, + bool *parallel); + static Vector AtIntersectionOfPlanes(Vector na, double da, + Vector nb, double db, + Vector nc, double dc, bool *parallel); + static void ClosestPointBetweenLines(Vector pa, Vector da, + Vector pb, Vector db, + double *ta, double *tb); + + double Element(int i); + bool Equals(Vector v, double tol=LENGTH_EPS); + bool EqualsExactly(Vector v); + Vector Plus(Vector b); + Vector Minus(Vector b); + Vector Negated(void); + Vector Cross(Vector b); + double DirectionCosineWith(Vector b); + double Dot(Vector b); + Vector Normal(int which); + Vector RotatedAbout(Vector orig, Vector axis, double theta); + Vector RotatedAbout(Vector axis, double theta); + Vector DotInToCsys(Vector u, Vector v, Vector n); + Vector ScaleOutOfCsys(Vector u, Vector v, Vector n); + double DistanceToLine(Vector p0, Vector dp); + bool OnLineSegment(Vector a, Vector b, double tol=LENGTH_EPS); + Vector ClosestPointOnLine(Vector p0, Vector dp); + double Magnitude(void); + double MagSquared(void); + Vector WithMagnitude(double s); + Vector ScaledBy(double s); + Vector ProjectInto(hEntity wrkpl); + Vector ProjectVectorInto(hEntity wrkpl); + double DivPivoting(Vector delta); + Vector ClosestOrtho(void); + void MakeMaxMin(Vector *maxv, Vector *minv); + Vector ClampWithin(double minv, double maxv); + static bool BoundingBoxesDisjoint(Vector amax, Vector amin, + Vector bmax, Vector bmin); + static bool BoundingBoxIntersectsLine(Vector amax, Vector amin, + Vector p0, Vector p1, bool segment); + bool OutsideAndNotOn(Vector maxv, Vector minv); + Vector InPerspective(Vector u, Vector v, Vector n, + Vector origin, double cameraTan); + Point2d Project2d(Vector u, Vector v); + Point2d ProjectXy(void); + Vector4 Project4d(void); +}; + +class Vector4 { +public: + double w, x, y, z; + + static Vector4 From(double w, double x, double y, double z); + static Vector4 From(double w, Vector v3); + static Vector4 Blend(Vector4 a, Vector4 b, double t); + + Vector4 Plus(Vector4 b); + Vector4 Minus(Vector4 b); + Vector4 ScaledBy(double s); + Vector PerspectiveProject(void); +}; + +class Point2d { +public: + double x, y; + + static Point2d From(double x, double y); + + Point2d Plus(const Point2d &b) const; + Point2d Minus(const Point2d &b) const; + Point2d ScaledBy(double s) const; + double DivPivoting(Point2d delta) const; + double Dot(Point2d p) const; + double DistanceTo(const Point2d &p) const; + double DistanceToLine(const Point2d &p0, const Point2d &dp, bool segment) const; + double Magnitude(void) const; + double MagSquared(void) const; + Point2d WithMagnitude(double v) const; + Point2d Normal(void) const; + bool Equals(Point2d v, double tol=LENGTH_EPS) const; +}; + +// A simple list +template +class List { +public: + T *elem; + int n; + int elemsAllocated; + + void AllocForOneMore(void) { + if(n >= elemsAllocated) { + elemsAllocated = (elemsAllocated + 32)*2; + T *newElem = (T *)MemAlloc((size_t)elemsAllocated*sizeof(elem[0])); + for(int i = 0; i < n; i++) { + new(&newElem[i]) T(std::move(elem[i])); + elem[i].~T(); + } + MemFree(elem); + elem = newElem; + } + } + + void Add(T *t) { + AllocForOneMore(); + new(&elem[n++]) T(*t); + } + + void AddToBeginning(T *t) { + AllocForOneMore(); + new(&elem[n]) T(); + std::move_backward(elem, elem + 1, elem + n + 1); + elem[0] = *t; + n++; + } + + T *First(void) { + return (n == 0) ? NULL : &(elem[0]); + } + T *NextAfter(T *prev) { + if(!prev) return NULL; + if(prev - elem == (n - 1)) return NULL; + return prev + 1; + } + + void ClearTags(void) { + int i; + for(i = 0; i < n; i++) { + elem[i].tag = 0; + } + } + + void Clear(void) { + for(int i = 0; i < n; i++) + elem[i].~T(); + if(elem) MemFree(elem); + elem = NULL; + n = elemsAllocated = 0; + } + + void RemoveTagged(void) { + int src, dest; + dest = 0; + for(src = 0; src < n; src++) { + if(elem[src].tag) { + // this item should be deleted + } else { + if(src != dest) { + elem[dest] = elem[src]; + } + dest++; + } + } + for(int i = dest; i < n; i++) + elem[i].~T(); + n = dest; + // and elemsAllocated is untouched, because we didn't resize + } + + void RemoveLast(int cnt) { + if(n < cnt) oops(); + for(int i = n - cnt; i < n; i++) + elem[i].~T(); + n -= cnt; + // and elemsAllocated is untouched, same as in RemoveTagged + } + + void Reverse(void) { + int i; + for(i = 0; i < (n/2); i++) { + swap(elem[i], elem[(n-1)-i]); + } + } +}; + +// A list, where each element has an integer identifier. The list is kept +// sorted by that identifier, and items can be looked up in log n time by +// id. +template +class IdList { +public: + T *elem; + int n; + int elemsAllocated; + + uint32_t MaximumId(void) { + uint32_t id = 0; + + int i; + for(i = 0; i < n; i++) { + id = max(id, elem[i].h.v); + } + return id; + } + + H AddAndAssignId(T *t) { + t->h.v = (MaximumId() + 1); + Add(t); + + return t->h; + } + + void Add(T *t) { + if(n >= elemsAllocated) { + elemsAllocated = (elemsAllocated + 32)*2; + T *newElem = (T *)MemAlloc((size_t)elemsAllocated*sizeof(elem[0])); + for(int i = 0; i < n; i++) { + new(&newElem[i]) T(std::move(elem[i])); + elem[i].~T(); + } + MemFree(elem); + elem = newElem; + } + + int first = 0, last = n; + // We know that we must insert within the closed interval [first,last] + while(first != last) { + int mid = (first + last)/2; + H hm = elem[mid].h; + if(hm.v > t->h.v) { + last = mid; + } else if(hm.v < t->h.v) { + first = mid + 1; + } else { + dbp("can't insert in list; is handle %d not unique?", t->h.v); + oops(); + } + } + + int i = first; + new(&elem[n]) T(); + std::move_backward(elem + i, elem + n, elem + n + 1); + elem[i] = *t; + n++; + } + + T *FindById(H h) { + T *t = FindByIdNoOops(h); + if(!t) { + dbp("failed to look up item %08x, searched %d items", h.v, n); + oops(); + } + return t; + } + + int IndexOf(H h) { + int first = 0, last = n-1; + while(first <= last) { + int mid = (first + last)/2; + H hm = elem[mid].h; + if(hm.v > h.v) { + last = mid-1; // and first stays the same + } else if(hm.v < h.v) { + first = mid+1; // and last stays the same + } else { + return mid; + } + } + return -1; + } + + T *FindByIdNoOops(H h) { + int first = 0, last = n-1; + while(first <= last) { + int mid = (first + last)/2; + H hm = elem[mid].h; + if(hm.v > h.v) { + last = mid-1; // and first stays the same + } else if(hm.v < h.v) { + first = mid+1; // and last stays the same + } else { + return &(elem[mid]); + } + } + return NULL; + } + + T *First(void) { + return (n == 0) ? NULL : &(elem[0]); + } + T *NextAfter(T *prev) { + if(!prev) return NULL; + if(prev - elem == (n - 1)) return NULL; + return prev + 1; + } + + void ClearTags(void) { + int i; + for(i = 0; i < n; i++) { + elem[i].tag = 0; + } + } + + void Tag(H h, int tag) { + int i; + for(i = 0; i < n; i++) { + if(elem[i].h.v == h.v) { + elem[i].tag = tag; + } + } + } + + void RemoveTagged(void) { + int src, dest; + dest = 0; + for(src = 0; src < n; src++) { + if(elem[src].tag) { + // this item should be deleted + } else { + if(src != dest) { + elem[dest] = elem[src]; + } + dest++; + } + } + for(int i = dest; i < n; i++) + elem[i].~T(); + n = dest; + // and elemsAllocated is untouched, because we didn't resize + } + void RemoveById(H h) { + ClearTags(); + FindById(h)->tag = 1; + RemoveTagged(); + } + + void MoveSelfInto(IdList *l) { + l->Clear(); + *l = *this; + elemsAllocated = n = 0; + elem = NULL; + } + + void DeepCopyInto(IdList *l) { + l->Clear(); + l->elem = (T *)MemAlloc(elemsAllocated * sizeof(elem[0])); + for(int i = 0; i < n; i++) + new(&l->elem[i]) T(elem[i]); + l->elemsAllocated = elemsAllocated; + l->n = n; + } + + void Clear(void) { + for(int i = 0; i < n; i++) { + elem[i].Clear(); + elem[i].~T(); + } + elemsAllocated = n = 0; + if(elem) MemFree(elem); + elem = NULL; + } + +}; + +class BandedMatrix { +public: + enum { + MAX_UNKNOWNS = 16, + RIGHT_OF_DIAG = 1, + LEFT_OF_DIAG = 2 + }; + + double A[MAX_UNKNOWNS][MAX_UNKNOWNS]; + double B[MAX_UNKNOWNS]; + double X[MAX_UNKNOWNS]; + int n; + + void Solve(void); +}; + +#define RGBi(r, g, b) RgbaColor::From((r), (g), (b)) +#define RGBf(r, g, b) RgbaColor::FromFloat((float)(r), (float)(g), (float)(b)) + +// Note: sizeof(class RgbaColor) should be exactly 4 +// +class RgbaColor { +public: + uint8_t red, green, blue, alpha; + + float redF(void) const { return (float)red / 255.0f; } + float greenF(void) const { return (float)green / 255.0f; } + float blueF(void) const { return (float)blue / 255.0f; } + float alphaF(void) const { return (float)alpha / 255.0f; } + + bool Equals(RgbaColor c) const { + return + c.red == red && + c.green == green && + c.blue == blue && + c.alpha == alpha; + } + + uint32_t ToPackedIntBGRA(void) const { + return + blue | + (uint32_t)(green << 8) | + (uint32_t)(red << 16) | + (uint32_t)((255 - alpha) << 24); + } + + uint32_t ToPackedInt(void) const { + return + red | + (uint32_t)(green << 8) | + (uint32_t)(blue << 16) | + (uint32_t)((255 - alpha) << 24); + } + + uint32_t ToARGB32(void) const { + return + blue | + (uint32_t)(green << 8) | + (uint32_t)(red << 16) | + (uint32_t)(alpha << 24); + } + + static RgbaColor From(int r, int g, int b, int a = 255) { + RgbaColor c; + c.red = (uint8_t)r; + c.green = (uint8_t)g; + c.blue = (uint8_t)b; + c.alpha = (uint8_t)a; + return c; + } + + static RgbaColor FromFloat(float r, float g, float b, float a = 1.0) { + return From( + (int)(255.1f * r), + (int)(255.1f * g), + (int)(255.1f * b), + (int)(255.1f * a)); + } + + static RgbaColor FromPackedInt(uint32_t rgba) { + return From( + (int)((rgba) & 0xff), + (int)((rgba >> 8) & 0xff), + (int)((rgba >> 16) & 0xff), + (int)(255 - ((rgba >> 24) & 0xff))); + } + + static RgbaColor FromPackedIntBGRA(uint32_t bgra) { + return From( + (int)((bgra >> 16) & 0xff), + (int)((bgra >> 8) & 0xff), + (int)((bgra) & 0xff), + (int)(255 - ((bgra >> 24) & 0xff))); + } + +}; + +class BBox { +public: + Vector minp; + Vector maxp; + + static BBox From(const Vector &p0, const Vector &p1); + + Vector GetOrigin(); + Vector GetExtents(); + + void Include(const Vector &v, double r = 0.0); + bool Overlaps(BBox &b1); + bool Contains(const Point2d &p); +}; + +#endif diff --git a/src/entity.cpp b/src/entity.cpp new file mode 100644 index 0000000..7f4a3a7 --- /dev/null +++ b/src/entity.cpp @@ -0,0 +1,793 @@ +//----------------------------------------------------------------------------- +// The implementation of our entities in the symbolic algebra system, methods +// to return a symbolic representation of the entity (line by its endpoints, +// circle by center and radius, etc.). +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +const hEntity EntityBase::FREE_IN_3D = { 0 }; +const hEntity EntityBase::NO_ENTITY = { 0 }; + +bool EntityBase::HasVector(void) { + switch(type) { + case LINE_SEGMENT: + case NORMAL_IN_3D: + case NORMAL_IN_2D: + case NORMAL_N_COPY: + case NORMAL_N_ROT: + case NORMAL_N_ROT_AA: + return true; + + default: + return false; + } +} + +ExprVector EntityBase::VectorGetExprs(void) { + switch(type) { + case LINE_SEGMENT: + return (SK.GetEntity(point[0])->PointGetExprs()).Minus( + SK.GetEntity(point[1])->PointGetExprs()); + + case NORMAL_IN_3D: + case NORMAL_IN_2D: + case NORMAL_N_COPY: + case NORMAL_N_ROT: + case NORMAL_N_ROT_AA: + return NormalExprsN(); + + default: oops(); + } +} + +Vector EntityBase::VectorGetNum(void) { + switch(type) { + case LINE_SEGMENT: + return (SK.GetEntity(point[0])->PointGetNum()).Minus( + SK.GetEntity(point[1])->PointGetNum()); + + case NORMAL_IN_3D: + case NORMAL_IN_2D: + case NORMAL_N_COPY: + case NORMAL_N_ROT: + case NORMAL_N_ROT_AA: + return NormalN(); + + default: oops(); + } +} + +Vector EntityBase::VectorGetRefPoint(void) { + switch(type) { + case LINE_SEGMENT: + return ((SK.GetEntity(point[0])->PointGetNum()).Plus( + SK.GetEntity(point[1])->PointGetNum())).ScaledBy(0.5); + + case NORMAL_IN_3D: + case NORMAL_IN_2D: + case NORMAL_N_COPY: + case NORMAL_N_ROT: + case NORMAL_N_ROT_AA: + return SK.GetEntity(point[0])->PointGetNum(); + + default: oops(); + } +} + +Vector EntityBase::VectorGetStartPoint(void) { + switch(type) { + case LINE_SEGMENT: + return SK.GetEntity(point[1])->PointGetNum(); + + case NORMAL_IN_3D: + case NORMAL_IN_2D: + case NORMAL_N_COPY: + case NORMAL_N_ROT: + case NORMAL_N_ROT_AA: + return SK.GetEntity(point[0])->PointGetNum(); + + default: oops(); + } +} + +bool EntityBase::IsCircle(void) { + return (type == CIRCLE) || (type == ARC_OF_CIRCLE); +} + +Expr *EntityBase::CircleGetRadiusExpr(void) { + if(type == CIRCLE) { + return SK.GetEntity(distance)->DistanceGetExpr(); + } else if(type == ARC_OF_CIRCLE) { + return Constraint::Distance(workplane, point[0], point[1]); + } else oops(); +} + +double EntityBase::CircleGetRadiusNum(void) { + if(type == CIRCLE) { + return SK.GetEntity(distance)->DistanceGetNum(); + } else if(type == ARC_OF_CIRCLE) { + Vector c = SK.GetEntity(point[0])->PointGetNum(); + Vector pa = SK.GetEntity(point[1])->PointGetNum(); + return (pa.Minus(c)).Magnitude(); + } else oops(); +} + +void EntityBase::ArcGetAngles(double *thetaa, double *thetab, double *dtheta) { + if(type != ARC_OF_CIRCLE) oops(); + + Quaternion q = Normal()->NormalGetNum(); + Vector u = q.RotationU(), v = q.RotationV(); + + Vector c = SK.GetEntity(point[0])->PointGetNum(); + Vector pa = SK.GetEntity(point[1])->PointGetNum(); + Vector pb = SK.GetEntity(point[2])->PointGetNum(); + + Point2d c2 = c.Project2d(u, v); + Point2d pa2 = (pa.Project2d(u, v)).Minus(c2); + Point2d pb2 = (pb.Project2d(u, v)).Minus(c2); + + *thetaa = atan2(pa2.y, pa2.x); + *thetab = atan2(pb2.y, pb2.x); + *dtheta = *thetab - *thetaa; + // If the endpoints are coincident, call it a full arc, not a zero arc; + // useful concept to have when splitting + while(*dtheta < 1e-6) *dtheta += 2*PI; + while(*dtheta > (2*PI)) *dtheta -= 2*PI; +} + +Vector EntityBase::CubicGetStartNum(void) { + return SK.GetEntity(point[0])->PointGetNum(); +} +Vector EntityBase::CubicGetFinishNum(void) { + return SK.GetEntity(point[3+extraPoints])->PointGetNum(); +} +ExprVector EntityBase::CubicGetStartTangentExprs(void) { + ExprVector pon = SK.GetEntity(point[0])->PointGetExprs(), + poff = SK.GetEntity(point[1])->PointGetExprs(); + return (pon.Minus(poff)); +} +ExprVector EntityBase::CubicGetFinishTangentExprs(void) { + ExprVector pon = SK.GetEntity(point[3+extraPoints])->PointGetExprs(), + poff = SK.GetEntity(point[2+extraPoints])->PointGetExprs(); + return (pon.Minus(poff)); +} +Vector EntityBase::CubicGetStartTangentNum(void) { + Vector pon = SK.GetEntity(point[0])->PointGetNum(), + poff = SK.GetEntity(point[1])->PointGetNum(); + return (pon.Minus(poff)); +} +Vector EntityBase::CubicGetFinishTangentNum(void) { + Vector pon = SK.GetEntity(point[3+extraPoints])->PointGetNum(), + poff = SK.GetEntity(point[2+extraPoints])->PointGetNum(); + return (pon.Minus(poff)); +} + +bool EntityBase::IsWorkplane(void) { + return (type == WORKPLANE); +} + +ExprVector EntityBase::WorkplaneGetOffsetExprs(void) { + return SK.GetEntity(point[0])->PointGetExprs(); +} + +Vector EntityBase::WorkplaneGetOffset(void) { + return SK.GetEntity(point[0])->PointGetNum(); +} + +void EntityBase::WorkplaneGetPlaneExprs(ExprVector *n, Expr **dn) { + if(type == WORKPLANE) { + *n = Normal()->NormalExprsN(); + + ExprVector p0 = SK.GetEntity(point[0])->PointGetExprs(); + // The plane is n dot (p - p0) = 0, or + // n dot p - n dot p0 = 0 + // so dn = n dot p0 + *dn = p0.Dot(*n); + } else { + oops(); + } +} + +bool EntityBase::IsDistance(void) { + return (type == DISTANCE) || + (type == DISTANCE_N_COPY); +} +double EntityBase::DistanceGetNum(void) { + if(type == DISTANCE) { + return SK.GetParam(param[0])->val; + } else if(type == DISTANCE_N_COPY) { + return numDistance; + } else oops(); +} +Expr *EntityBase::DistanceGetExpr(void) { + if(type == DISTANCE) { + return Expr::From(param[0]); + } else if(type == DISTANCE_N_COPY) { + return Expr::From(numDistance); + } else oops(); +} +void EntityBase::DistanceForceTo(double v) { + if(type == DISTANCE) { + (SK.GetParam(param[0]))->val = v; + } else if(type == DISTANCE_N_COPY) { + // do nothing, it's locked + } else oops(); +} + +EntityBase *EntityBase::Normal(void) { + return SK.GetEntity(normal); +} + +bool EntityBase::IsPoint(void) { + switch(type) { + case POINT_IN_3D: + case POINT_IN_2D: + case POINT_N_COPY: + case POINT_N_TRANS: + case POINT_N_ROT_TRANS: + case POINT_N_ROT_AA: + return true; + + default: + return false; + } +} + +bool EntityBase::IsNormal(void) { + switch(type) { + case NORMAL_IN_3D: + case NORMAL_IN_2D: + case NORMAL_N_COPY: + case NORMAL_N_ROT: + case NORMAL_N_ROT_AA: + return true; + + default: return false; + } +} + +Quaternion EntityBase::NormalGetNum(void) { + Quaternion q; + switch(type) { + case NORMAL_IN_3D: + q = Quaternion::From(param[0], param[1], param[2], param[3]); + break; + + case NORMAL_IN_2D: { + EntityBase *wrkpl = SK.GetEntity(workplane); + EntityBase *norm = SK.GetEntity(wrkpl->normal); + q = norm->NormalGetNum(); + break; + } + case NORMAL_N_COPY: + q = numNormal; + break; + + case NORMAL_N_ROT: + q = Quaternion::From(param[0], param[1], param[2], param[3]); + q = q.Times(numNormal); + break; + + case NORMAL_N_ROT_AA: { + q = GetAxisAngleQuaternion(0); + q = q.Times(numNormal); + break; + } + + default: oops(); + } + return q; +} + +void EntityBase::NormalForceTo(Quaternion q) { + switch(type) { + case NORMAL_IN_3D: + SK.GetParam(param[0])->val = q.w; + SK.GetParam(param[1])->val = q.vx; + SK.GetParam(param[2])->val = q.vy; + SK.GetParam(param[3])->val = q.vz; + break; + + case NORMAL_IN_2D: + case NORMAL_N_COPY: + // There's absolutely nothing to do; these are locked. + break; + case NORMAL_N_ROT: { + Quaternion qp = q.Times(numNormal.Inverse()); + + SK.GetParam(param[0])->val = qp.w; + SK.GetParam(param[1])->val = qp.vx; + SK.GetParam(param[2])->val = qp.vy; + SK.GetParam(param[3])->val = qp.vz; + break; + } + + case NORMAL_N_ROT_AA: + // Not sure if I'll bother implementing this one + break; + + default: oops(); + } +} + +Vector EntityBase::NormalU(void) { + return NormalGetNum().RotationU(); +} +Vector EntityBase::NormalV(void) { + return NormalGetNum().RotationV(); +} +Vector EntityBase::NormalN(void) { + return NormalGetNum().RotationN(); +} + +ExprVector EntityBase::NormalExprsU(void) { + return NormalGetExprs().RotationU(); +} +ExprVector EntityBase::NormalExprsV(void) { + return NormalGetExprs().RotationV(); +} +ExprVector EntityBase::NormalExprsN(void) { + return NormalGetExprs().RotationN(); +} + +ExprQuaternion EntityBase::NormalGetExprs(void) { + ExprQuaternion q; + switch(type) { + case NORMAL_IN_3D: + q = ExprQuaternion::From(param[0], param[1], param[2], param[3]); + break; + + case NORMAL_IN_2D: { + EntityBase *wrkpl = SK.GetEntity(workplane); + EntityBase *norm = SK.GetEntity(wrkpl->normal); + q = norm->NormalGetExprs(); + break; + } + case NORMAL_N_COPY: + q = ExprQuaternion::From(numNormal); + break; + + case NORMAL_N_ROT: { + ExprQuaternion orig = ExprQuaternion::From(numNormal); + q = ExprQuaternion::From(param[0], param[1], param[2], param[3]); + + q = q.Times(orig); + break; + } + + case NORMAL_N_ROT_AA: { + ExprQuaternion orig = ExprQuaternion::From(numNormal); + q = GetAxisAngleQuaternionExprs(0); + q = q.Times(orig); + break; + } + + default: oops(); + } + return q; +} + +void EntityBase::PointForceTo(Vector p) { + switch(type) { + case POINT_IN_3D: + SK.GetParam(param[0])->val = p.x; + SK.GetParam(param[1])->val = p.y; + SK.GetParam(param[2])->val = p.z; + break; + + case POINT_IN_2D: { + EntityBase *c = SK.GetEntity(workplane); + p = p.Minus(c->WorkplaneGetOffset()); + SK.GetParam(param[0])->val = p.Dot(c->Normal()->NormalU()); + SK.GetParam(param[1])->val = p.Dot(c->Normal()->NormalV()); + break; + } + + case POINT_N_TRANS: { + if(timesApplied == 0) break; + Vector trans = (p.Minus(numPoint)).ScaledBy(1.0/timesApplied); + SK.GetParam(param[0])->val = trans.x; + SK.GetParam(param[1])->val = trans.y; + SK.GetParam(param[2])->val = trans.z; + break; + } + + case POINT_N_ROT_TRANS: { + // Force only the translation; leave the rotation unchanged. But + // remember that we're working with respect to the rotated + // point. + Vector trans = p.Minus(PointGetQuaternion().Rotate(numPoint)); + SK.GetParam(param[0])->val = trans.x; + SK.GetParam(param[1])->val = trans.y; + SK.GetParam(param[2])->val = trans.z; + break; + } + + case POINT_N_ROT_AA: { + // Force only the angle; the axis and center of rotation stay + Vector offset = Vector::From(param[0], param[1], param[2]); + Vector normal = Vector::From(param[4], param[5], param[6]); + Vector u = normal.Normal(0), v = normal.Normal(1); + Vector po = p.Minus(offset), numo = numPoint.Minus(offset); + double thetap = atan2(v.Dot(po), u.Dot(po)); + double thetan = atan2(v.Dot(numo), u.Dot(numo)); + double thetaf = (thetap - thetan); + double thetai = (SK.GetParam(param[3])->val)*timesApplied*2; + double dtheta = thetaf - thetai; + // Take the smallest possible change in the actual step angle, + // in order to avoid jumps when you cross from +pi to -pi + while(dtheta < -PI) dtheta += 2*PI; + while(dtheta > PI) dtheta -= 2*PI; + SK.GetParam(param[3])->val = (thetai + dtheta)/(timesApplied*2); + break; + } + + case POINT_N_COPY: + // Nothing to do; it's a static copy + break; + + default: oops(); + } +} + +Vector EntityBase::PointGetNum(void) { + Vector p; + switch(type) { + case POINT_IN_3D: + p = Vector::From(param[0], param[1], param[2]); + break; + + case POINT_IN_2D: { + EntityBase *c = SK.GetEntity(workplane); + Vector u = c->Normal()->NormalU(); + Vector v = c->Normal()->NormalV(); + p = u.ScaledBy(SK.GetParam(param[0])->val); + p = p.Plus(v.ScaledBy(SK.GetParam(param[1])->val)); + p = p.Plus(c->WorkplaneGetOffset()); + break; + } + + case POINT_N_TRANS: { + Vector trans = Vector::From(param[0], param[1], param[2]); + p = numPoint.Plus(trans.ScaledBy(timesApplied)); + break; + } + + case POINT_N_ROT_TRANS: { + Vector offset = Vector::From(param[0], param[1], param[2]); + Quaternion q = PointGetQuaternion(); + p = q.Rotate(numPoint); + p = p.Plus(offset); + break; + } + + case POINT_N_ROT_AA: { + Vector offset = Vector::From(param[0], param[1], param[2]); + Quaternion q = PointGetQuaternion(); + p = numPoint.Minus(offset); + p = q.Rotate(p); + p = p.Plus(offset); + break; + } + + case POINT_N_COPY: + p = numPoint; + break; + + default: oops(); + } + return p; +} + +ExprVector EntityBase::PointGetExprs(void) { + ExprVector r; + switch(type) { + case POINT_IN_3D: + r = ExprVector::From(param[0], param[1], param[2]); + break; + + case POINT_IN_2D: { + EntityBase *c = SK.GetEntity(workplane); + ExprVector u = c->Normal()->NormalExprsU(); + ExprVector v = c->Normal()->NormalExprsV(); + r = c->WorkplaneGetOffsetExprs(); + r = r.Plus(u.ScaledBy(Expr::From(param[0]))); + r = r.Plus(v.ScaledBy(Expr::From(param[1]))); + break; + } + case POINT_N_TRANS: { + ExprVector orig = ExprVector::From(numPoint); + ExprVector trans = ExprVector::From(param[0], param[1], param[2]); + r = orig.Plus(trans.ScaledBy(Expr::From(timesApplied))); + break; + } + case POINT_N_ROT_TRANS: { + ExprVector orig = ExprVector::From(numPoint); + ExprVector trans = ExprVector::From(param[0], param[1], param[2]); + ExprQuaternion q = + ExprQuaternion::From(param[3], param[4], param[5], param[6]); + orig = q.Rotate(orig); + r = orig.Plus(trans); + break; + } + case POINT_N_ROT_AA: { + ExprVector orig = ExprVector::From(numPoint); + ExprVector trans = ExprVector::From(param[0], param[1], param[2]); + ExprQuaternion q = GetAxisAngleQuaternionExprs(3); + orig = orig.Minus(trans); + orig = q.Rotate(orig); + r = orig.Plus(trans); + break; + } + case POINT_N_COPY: + r = ExprVector::From(numPoint); + break; + + default: oops(); + } + return r; +} + +void EntityBase::PointGetExprsInWorkplane(hEntity wrkpl, Expr **u, Expr **v) { + if(type == POINT_IN_2D && workplane.v == wrkpl.v) { + // They want our coordinates in the form that we've written them, + // very nice. + *u = Expr::From(param[0]); + *v = Expr::From(param[1]); + } else { + // Get the offset and basis vectors for this weird exotic csys. + EntityBase *w = SK.GetEntity(wrkpl); + ExprVector wp = w->WorkplaneGetOffsetExprs(); + ExprVector wu = w->Normal()->NormalExprsU(); + ExprVector wv = w->Normal()->NormalExprsV(); + + // Get our coordinates in three-space, and project them into that + // coordinate system. + ExprVector ev = PointGetExprs(); + ev = ev.Minus(wp); + *u = ev.Dot(wu); + *v = ev.Dot(wv); + } +} + +void EntityBase::PointForceQuaternionTo(Quaternion q) { + if(type != POINT_N_ROT_TRANS) oops(); + + SK.GetParam(param[3])->val = q.w; + SK.GetParam(param[4])->val = q.vx; + SK.GetParam(param[5])->val = q.vy; + SK.GetParam(param[6])->val = q.vz; +} + +Quaternion EntityBase::GetAxisAngleQuaternion(int param0) { + Quaternion q; + double theta = timesApplied*SK.GetParam(param[param0+0])->val; + double s = sin(theta), c = cos(theta); + q.w = c; + q.vx = s*SK.GetParam(param[param0+1])->val; + q.vy = s*SK.GetParam(param[param0+2])->val; + q.vz = s*SK.GetParam(param[param0+3])->val; + return q; +} + +ExprQuaternion EntityBase::GetAxisAngleQuaternionExprs(int param0) { + ExprQuaternion q; + + Expr *theta = Expr::From(timesApplied)->Times( + Expr::From(param[param0+0])); + Expr *c = theta->Cos(), *s = theta->Sin(); + q.w = c; + q.vx = s->Times(Expr::From(param[param0+1])); + q.vy = s->Times(Expr::From(param[param0+2])); + q.vz = s->Times(Expr::From(param[param0+3])); + return q; +} + +Quaternion EntityBase::PointGetQuaternion(void) { + Quaternion q; + + if(type == POINT_N_ROT_AA) { + q = GetAxisAngleQuaternion(3); + } else if(type == POINT_N_ROT_TRANS) { + q = Quaternion::From(param[3], param[4], param[5], param[6]); + } else oops(); + + return q; +} + +bool EntityBase::IsFace(void) { + switch(type) { + case FACE_NORMAL_PT: + case FACE_XPROD: + case FACE_N_ROT_TRANS: + case FACE_N_TRANS: + case FACE_N_ROT_AA: + return true; + default: + return false; + } +} + +ExprVector EntityBase::FaceGetNormalExprs(void) { + ExprVector r; + if(type == FACE_NORMAL_PT) { + Vector v = Vector::From(numNormal.vx, numNormal.vy, numNormal.vz); + r = ExprVector::From(v.WithMagnitude(1)); + } else if(type == FACE_XPROD) { + ExprVector vc = ExprVector::From(param[0], param[1], param[2]); + ExprVector vn = + ExprVector::From(numNormal.vx, numNormal.vy, numNormal.vz); + r = vc.Cross(vn); + r = r.WithMagnitude(Expr::From(1.0)); + } else if(type == FACE_N_ROT_TRANS) { + // The numerical normal vector gets the rotation; the numerical + // normal has magnitude one, and the rotation doesn't change that, + // so there's no need to fix it up. + r = ExprVector::From(numNormal.vx, numNormal.vy, numNormal.vz); + ExprQuaternion q = + ExprQuaternion::From(param[3], param[4], param[5], param[6]); + r = q.Rotate(r); + } else if(type == FACE_N_TRANS) { + r = ExprVector::From(numNormal.vx, numNormal.vy, numNormal.vz); + } else if(type == FACE_N_ROT_AA) { + r = ExprVector::From(numNormal.vx, numNormal.vy, numNormal.vz); + ExprQuaternion q = GetAxisAngleQuaternionExprs(3); + r = q.Rotate(r); + } else oops(); + return r; +} + +Vector EntityBase::FaceGetNormalNum(void) { + Vector r; + if(type == FACE_NORMAL_PT) { + r = Vector::From(numNormal.vx, numNormal.vy, numNormal.vz); + } else if(type == FACE_XPROD) { + Vector vc = Vector::From(param[0], param[1], param[2]); + Vector vn = Vector::From(numNormal.vx, numNormal.vy, numNormal.vz); + r = vc.Cross(vn); + } else if(type == FACE_N_ROT_TRANS) { + // The numerical normal vector gets the rotation + r = Vector::From(numNormal.vx, numNormal.vy, numNormal.vz); + Quaternion q = Quaternion::From(param[3], param[4], param[5], param[6]); + r = q.Rotate(r); + } else if(type == FACE_N_TRANS) { + r = Vector::From(numNormal.vx, numNormal.vy, numNormal.vz); + } else if(type == FACE_N_ROT_AA) { + r = Vector::From(numNormal.vx, numNormal.vy, numNormal.vz); + Quaternion q = GetAxisAngleQuaternion(3); + r = q.Rotate(r); + } else oops(); + return r.WithMagnitude(1); +} + +ExprVector EntityBase::FaceGetPointExprs(void) { + ExprVector r; + if(type == FACE_NORMAL_PT) { + r = SK.GetEntity(point[0])->PointGetExprs(); + } else if(type == FACE_XPROD) { + r = ExprVector::From(numPoint); + } else if(type == FACE_N_ROT_TRANS) { + // The numerical point gets the rotation and translation. + ExprVector trans = ExprVector::From(param[0], param[1], param[2]); + ExprQuaternion q = + ExprQuaternion::From(param[3], param[4], param[5], param[6]); + r = ExprVector::From(numPoint); + r = q.Rotate(r); + r = r.Plus(trans); + } else if(type == FACE_N_TRANS) { + ExprVector trans = ExprVector::From(param[0], param[1], param[2]); + r = ExprVector::From(numPoint); + r = r.Plus(trans.ScaledBy(Expr::From(timesApplied))); + } else if(type == FACE_N_ROT_AA) { + ExprVector trans = ExprVector::From(param[0], param[1], param[2]); + ExprQuaternion q = GetAxisAngleQuaternionExprs(3); + r = ExprVector::From(numPoint); + r = r.Minus(trans); + r = q.Rotate(r); + r = r.Plus(trans); + } else oops(); + return r; +} + +Vector EntityBase::FaceGetPointNum(void) { + Vector r; + if(type == FACE_NORMAL_PT) { + r = SK.GetEntity(point[0])->PointGetNum(); + } else if(type == FACE_XPROD) { + r = numPoint; + } else if(type == FACE_N_ROT_TRANS) { + // The numerical point gets the rotation and translation. + Vector trans = Vector::From(param[0], param[1], param[2]); + Quaternion q = Quaternion::From(param[3], param[4], param[5], param[6]); + r = q.Rotate(numPoint); + r = r.Plus(trans); + } else if(type == FACE_N_TRANS) { + Vector trans = Vector::From(param[0], param[1], param[2]); + r = numPoint.Plus(trans.ScaledBy(timesApplied)); + } else if(type == FACE_N_ROT_AA) { + Vector trans = Vector::From(param[0], param[1], param[2]); + Quaternion q = GetAxisAngleQuaternion(3); + r = numPoint.Minus(trans); + r = q.Rotate(r); + r = r.Plus(trans); + } else oops(); + return r; +} + +bool EntityBase::HasEndpoints(void) { + return (type == LINE_SEGMENT) || + (type == CUBIC) || + (type == ARC_OF_CIRCLE); +} +Vector EntityBase::EndpointStart() { + if(type == LINE_SEGMENT) { + return SK.GetEntity(point[0])->PointGetNum(); + } else if(type == CUBIC) { + return CubicGetStartNum(); + } else if(type == ARC_OF_CIRCLE) { + return SK.GetEntity(point[1])->PointGetNum(); + } else { + oops(); + } +} +Vector EntityBase::EndpointFinish() { + if(type == LINE_SEGMENT) { + return SK.GetEntity(point[1])->PointGetNum(); + } else if(type == CUBIC) { + return CubicGetFinishNum(); + } else if(type == ARC_OF_CIRCLE) { + return SK.GetEntity(point[2])->PointGetNum(); + } else { + oops(); + } +} + +void EntityBase::AddEq(IdList *l, Expr *expr, int index) { + Equation eq; + eq.e = expr; + eq.h = h.equation(index); + l->Add(&eq); +} + +void EntityBase::GenerateEquations(IdList *l) { + switch(type) { + case NORMAL_IN_3D: { + ExprQuaternion q = NormalGetExprs(); + AddEq(l, (q.Magnitude())->Minus(Expr::From(1)), 0); + break; + } + case ARC_OF_CIRCLE: { + // If this is a copied entity, with its point already fixed + // with respect to each other, then we don't want to generate + // the distance constraint! + if(SK.GetEntity(point[0])->type != POINT_IN_2D) break; + + // If the two endpoints of the arc are constrained coincident + // (to make a complete circle), then our distance constraint + // would be redundant and therefore overconstrain things. + int i; + for(i = 0; i < SK.constraint.n; i++) { + ConstraintBase *c = &(SK.constraint.elem[i]); + if(c->group.v != group.v) continue; + if(c->type != Constraint::POINTS_COINCIDENT) continue; + + if((c->ptA.v == point[1].v && c->ptB.v == point[2].v) || + (c->ptA.v == point[2].v && c->ptB.v == point[1].v)) + { + break; + } + } + if(i < SK.constraint.n) break; + + Expr *ra = Constraint::Distance(workplane, point[0], point[1]); + Expr *rb = Constraint::Distance(workplane, point[0], point[2]); + AddEq(l, ra->Minus(rb), 0); + break; + } + default:; + // Most entities do not generate equations. + } +} + diff --git a/src/export.cpp b/src/export.cpp new file mode 100644 index 0000000..857ff60 --- /dev/null +++ b/src/export.cpp @@ -0,0 +1,1550 @@ +//----------------------------------------------------------------------------- +// The 2d vector output stuff that isn't specific to any particular file +// format: getting the appropriate lines and curves, performing hidden line +// removal, calculating bounding boxes, and so on. Also raster and triangle +// mesh output. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" +#ifndef WIN32 +#include +#endif +#include + +void SolveSpaceUI::ExportSectionTo(const std::string &filename) { + Vector gn = (SS.GW.projRight).Cross(SS.GW.projUp); + gn = gn.WithMagnitude(1); + + Group *g = SK.GetGroup(SS.GW.activeGroup); + g->GenerateDisplayItems(); + if(g->displayMesh.IsEmpty()) { + Error("No solid model present; draw one with extrudes and revolves, " + "or use Export 2d View to export bare lines and curves."); + return; + } + + // The plane in which the exported section lies; need this because we'll + // reorient from that plane into the xy plane before exporting. + Vector origin, u, v, n; + double d; + + SS.GW.GroupSelection(); +#define gs (SS.GW.gs) + if((gs.n == 0 && g->activeWorkplane.v != Entity::FREE_IN_3D.v)) { + Entity *wrkpl = SK.GetEntity(g->activeWorkplane); + origin = wrkpl->WorkplaneGetOffset(); + n = wrkpl->Normal()->NormalN(); + u = wrkpl->Normal()->NormalU(); + v = wrkpl->Normal()->NormalV(); + } else if(gs.n == 1 && gs.faces == 1) { + Entity *face = SK.GetEntity(gs.entity[0]); + origin = face->FaceGetPointNum(); + n = face->FaceGetNormalNum(); + if(n.Dot(gn) < 0) n = n.ScaledBy(-1); + u = n.Normal(0); + v = n.Normal(1); + } else if(gs.n == 3 && gs.vectors == 2 && gs.points == 1) { + Vector ut = SK.GetEntity(gs.entity[0])->VectorGetNum(), + vt = SK.GetEntity(gs.entity[1])->VectorGetNum(); + ut = ut.WithMagnitude(1); + vt = vt.WithMagnitude(1); + + if(fabs(SS.GW.projUp.Dot(vt)) < fabs(SS.GW.projUp.Dot(ut))) { + swap(ut, vt); + } + if(SS.GW.projRight.Dot(ut) < 0) ut = ut.ScaledBy(-1); + if(SS.GW.projUp. Dot(vt) < 0) vt = vt.ScaledBy(-1); + + origin = SK.GetEntity(gs.point[0])->PointGetNum(); + n = ut.Cross(vt); + u = ut.WithMagnitude(1); + v = (n.Cross(u)).WithMagnitude(1); + } else { + Error("Bad selection for export section. Please select:\n\n" + " * nothing, with an active workplane " + "(workplane is section plane)\n" + " * a face (section plane through face)\n" + " * a point and two line segments " + "(plane through point and parallel to lines)\n"); + return; + } + SS.GW.ClearSelection(); + + n = n.WithMagnitude(1); + d = origin.Dot(n); + + SEdgeList el = {}; + SBezierList bl = {}; + + // If there's a mesh, then grab the edges from it. + g->runningMesh.MakeEdgesInPlaneInto(&el, n, d); + + // If there's a shell, then grab the edges and possibly Beziers. + g->runningShell.MakeSectionEdgesInto(n, d, + &el, + (SS.exportPwlCurves || fabs(SS.exportOffset) > LENGTH_EPS) ? NULL : &bl); + + // All of these are solid model edges, so use the appropriate style. + SEdge *se; + for(se = el.l.First(); se; se = el.l.NextAfter(se)) { + se->auxA = Style::SOLID_EDGE; + } + SBezier *sb; + for(sb = bl.l.First(); sb; sb = bl.l.NextAfter(sb)) { + sb->auxA = Style::SOLID_EDGE; + } + + el.CullExtraneousEdges(); + bl.CullIdenticalBeziers(); + + // And write the edges. + VectorFileWriter *out = VectorFileWriter::ForFile(filename); + if(out) { + // parallel projection (no perspective), and no mesh + ExportLinesAndMesh(&el, &bl, NULL, + u, v, n, origin, 0, + out); + } + el.Clear(); + bl.Clear(); +} + +void SolveSpaceUI::ExportViewOrWireframeTo(const std::string &filename, bool wireframe) { + int i; + SEdgeList edges = {}; + SBezierList beziers = {}; + + VectorFileWriter *out = VectorFileWriter::ForFile(filename); + if(!out) return; + + SS.exportMode = true; + GenerateAll(GENERATE_ALL); + + SMesh *sm = NULL; + if(SS.GW.showShaded || SS.GW.showHdnLines) { + Group *g = SK.GetGroup(SS.GW.activeGroup); + g->GenerateDisplayItems(); + sm = &(g->displayMesh); + } + if(sm && sm->IsEmpty()) { + sm = NULL; + } + + for(i = 0; i < SK.entity.n; i++) { + Entity *e = &(SK.entity.elem[i]); + if(!e->IsVisible()) continue; + if(e->construction) continue; + + if(SS.exportPwlCurves || sm || fabs(SS.exportOffset) > LENGTH_EPS) + { + // We will be doing hidden line removal, which we can't do on + // exact curves; so we need things broken down to pwls. Same + // problem with cutter radius compensation. + e->GenerateEdges(&edges); + } else { + e->GenerateBezierCurves(&beziers); + } + } + + if(SS.GW.showEdges) { + Group *g = SK.GetGroup(SS.GW.activeGroup); + g->GenerateDisplayItems(); + SEdgeList *selr = &(g->displayEdges); + SEdge *se; + for(se = selr->l.First(); se; se = selr->l.NextAfter(se)) { + edges.AddEdge(se->a, se->b, Style::SOLID_EDGE); + } + } + + if(SS.GW.showConstraints) { + if(!out->OutputConstraints(&SK.constraint)) { + // The output format cannot represent constraints directly, + // so convert them to edges. + Constraint *c; + for(c = SK.constraint.First(); c; c = SK.constraint.NextAfter(c)) { + c->GetEdges(&edges); + } + } + } + + if(wireframe) { + Vector u = Vector::From(1.0, 0.0, 0.0), + v = Vector::From(0.0, 1.0, 0.0), + n = Vector::From(0.0, 0.0, 1.0), + origin = Vector::From(0.0, 0.0, 0.0); + double cameraTan = 0.0, + scale = 1.0; + + out->SetModelviewProjection(u, v, n, origin, cameraTan, scale); + + ExportWireframeCurves(&edges, &beziers, out); + } else { + Vector u = SS.GW.projRight, + v = SS.GW.projUp, + n = u.Cross(v), + origin = SS.GW.offset.ScaledBy(-1); + + out->SetModelviewProjection(u, v, n, origin, + SS.CameraTangent()*SS.GW.scale, SS.exportScale); + + ExportLinesAndMesh(&edges, &beziers, sm, + u, v, n, origin, SS.CameraTangent()*SS.GW.scale, + out); + + if(!out->HasCanvasSize()) { + // These file formats don't have a canvas size, so they just + // get exported in the raw coordinate system. So indicate what + // that was on-screen. + SS.justExportedInfo.showOrigin = true; + SS.justExportedInfo.pt = origin; + SS.justExportedInfo.u = u; + SS.justExportedInfo.v = v; + } else { + SS.justExportedInfo.showOrigin = false; + } + + SS.justExportedInfo.draw = true; + InvalidateGraphics(); + } + + edges.Clear(); + beziers.Clear(); +} + +void SolveSpaceUI::ExportWireframeCurves(SEdgeList *sel, SBezierList *sbl, + VectorFileWriter *out) +{ + SBezierLoopSetSet sblss = {}; + SEdge *se; + for(se = sel->l.First(); se; se = sel->l.NextAfter(se)) { + SBezier sb = SBezier::From( + (se->a).ScaledBy(1.0 / SS.exportScale), + (se->b).ScaledBy(1.0 / SS.exportScale)); + sblss.AddOpenPath(&sb); + } + + sbl->ScaleSelfBy(1.0/SS.exportScale); + SBezier *sb; + for(sb = sbl->l.First(); sb; sb = sbl->l.NextAfter(sb)) { + sblss.AddOpenPath(sb); + } + + out->OutputLinesAndMesh(&sblss, NULL); + sblss.Clear(); +} + +void SolveSpaceUI::ExportLinesAndMesh(SEdgeList *sel, SBezierList *sbl, SMesh *sm, + Vector u, Vector v, Vector n, + Vector origin, double cameraTan, + VectorFileWriter *out) +{ + double s = 1.0 / SS.exportScale; + + // Project into the export plane; so when we're done, z doesn't matter, + // and x and y are what goes in the DXF. + SEdge *e; + for(e = sel->l.First(); e; e = sel->l.NextAfter(e)) { + // project into the specified csys, and apply export scale + (e->a) = e->a.InPerspective(u, v, n, origin, cameraTan).ScaledBy(s); + (e->b) = e->b.InPerspective(u, v, n, origin, cameraTan).ScaledBy(s); + } + + SBezier *b; + if(sbl) { + for(b = sbl->l.First(); b; b = sbl->l.NextAfter(b)) { + *b = b->InPerspective(u, v, n, origin, cameraTan); + int i; + for(i = 0; i <= b->deg; i++) { + b->ctrl[i] = (b->ctrl[i]).ScaledBy(s); + } + } + } + + // If cutter radius compensation is requested, then perform it now + if(fabs(SS.exportOffset) > LENGTH_EPS) { + // assemble those edges into a polygon, and clear the edge list + SPolygon sp = {}; + sel->AssemblePolygon(&sp, NULL); + sel->Clear(); + + SPolygon compd = {}; + sp.normal = Vector::From(0, 0, -1); + sp.FixContourDirections(); + sp.OffsetInto(&compd, SS.exportOffset*s); + sp.Clear(); + + compd.MakeEdgesInto(sel); + compd.Clear(); + } + + // Now the triangle mesh; project, then build a BSP to perform + // occlusion testing and generated the shaded surfaces. + SMesh smp = {}; + if(sm) { + Vector l0 = (SS.lightDir[0]).WithMagnitude(1), + l1 = (SS.lightDir[1]).WithMagnitude(1); + STriangle *tr; + for(tr = sm->l.First(); tr; tr = sm->l.NextAfter(tr)) { + STriangle tt = *tr; + tt.a = (tt.a).InPerspective(u, v, n, origin, cameraTan).ScaledBy(s); + tt.b = (tt.b).InPerspective(u, v, n, origin, cameraTan).ScaledBy(s); + tt.c = (tt.c).InPerspective(u, v, n, origin, cameraTan).ScaledBy(s); + + // And calculate lighting for the triangle + Vector n = tt.Normal().WithMagnitude(1); + double lighting = SS.ambientIntensity + + max(0.0, (SS.lightIntensity[0])*(n.Dot(l0))) + + max(0.0, (SS.lightIntensity[1])*(n.Dot(l1))); + double r = min(1.0, tt.meta.color.redF() * lighting), + g = min(1.0, tt.meta.color.greenF() * lighting), + b = min(1.0, tt.meta.color.blueF() * lighting); + tt.meta.color = RGBf(r, g, b); + smp.AddTriangle(&tt); + } + } + + SMesh sms = {}; + + // We need the mesh for occlusion testing, but if we don't/can't export it, + // don't generate it. + if(SS.GW.showShaded && out->CanOutputMesh()) { + // Use the BSP routines to generate the split triangles in paint order. + SBsp3 *bsp = SBsp3::FromMesh(&smp); + if(bsp) bsp->GenerateInPaintOrder(&sms); + // And cull the back-facing triangles + STriangle *tr; + sms.l.ClearTags(); + for(tr = sms.l.First(); tr; tr = sms.l.NextAfter(tr)) { + Vector n = tr->Normal(); + if(n.z < 0) { + tr->tag = 1; + } + } + sms.l.RemoveTagged(); + } + + // And now we perform hidden line removal if requested + SEdgeList hlrd = {}; + if(sm) { + SKdNode *root = SKdNode::From(&smp); + + // Generate the edges where a curved surface turns from front-facing + // to back-facing. + if(SS.GW.showEdges) { + root->MakeCertainEdgesInto(sel, SKdNode::TURNING_EDGES, + /*coplanarIsInter=*/false, NULL, NULL, + GW.showOutlines ? Style::OUTLINE : Style::SOLID_EDGE); + } + + root->ClearTags(); + int cnt = 1234; + + SEdge *se; + for(se = sel->l.First(); se; se = sel->l.NextAfter(se)) { + if(se->auxA == Style::CONSTRAINT) { + // Constraints should not get hidden line removed; they're + // always on top. + hlrd.AddEdge(se->a, se->b, se->auxA); + continue; + } + + SEdgeList edges = {}; + // Split the original edge against the mesh + edges.AddEdge(se->a, se->b, se->auxA); + root->OcclusionTestLine(*se, &edges, cnt, /*removeHidden=*/!SS.GW.showHdnLines); + // the occlusion test splits unnecessarily; so fix those + edges.MergeCollinearSegments(se->a, se->b); + cnt++; + // And add the results to our output + SEdge *sen; + for(sen = edges.l.First(); sen; sen = edges.l.NextAfter(sen)) { + hlrd.AddEdge(sen->a, sen->b, sen->auxA); + } + edges.Clear(); + } + + sel = &hlrd; + } + + // Clean up: remove overlapping line segments and + // segments with zero-length projections. + sel->l.ClearTags(); + for(int i = 0; i < sel->l.n; ++i) { + SEdge *sei = &sel->l.elem[i]; + hStyle hsi = { (uint32_t)sei->auxA }; + Style *si = Style::Get(hsi); + if(sei->tag != 0) continue; + + // Remove segments with zero length projections. + Vector ai = sei->a; + ai.z = 0.0; + Vector bi = sei->b; + bi.z = 0.0; + Vector di = bi.Minus(ai); + if(fabs(di.x) < LENGTH_EPS && fabs(di.y) < LENGTH_EPS) { + sei->tag = 1; + continue; + } + + for(int j = i + 1; j < sel->l.n; ++j) { + SEdge *sej = &sel->l.elem[j]; + if(sej->tag != 0) continue; + + Vector *pAj = &sej->a; + Vector *pBj = &sej->b; + + // Remove segments with zero length projections. + Vector aj = sej->a; + aj.z = 0.0; + Vector bj = sej->b; + bj.z = 0.0; + Vector dj = bj.Minus(aj); + if(fabs(dj.x) < LENGTH_EPS && fabs(dj.y) < LENGTH_EPS) { + sej->tag = 1; + continue; + } + + // Skip non-collinear segments. + const double eps = 1e-6; + if(aj.DistanceToLine(ai, di) > eps) continue; + if(bj.DistanceToLine(ai, di) > eps) continue; + + double ta = aj.Minus(ai).Dot(di) / di.Dot(di); + double tb = bj.Minus(ai).Dot(di) / di.Dot(di); + if(ta > tb) { + std::swap(pAj, pBj); + std::swap(ta, tb); + } + + hStyle hsj = { (uint32_t)sej->auxA }; + Style *sj = Style::Get(hsj); + + bool canRemoveI = sej->auxA == sei->auxA || si->zIndex < sj->zIndex; + bool canRemoveJ = sej->auxA == sei->auxA || sj->zIndex < si->zIndex; + + if(canRemoveJ) { + // j-segment inside i-segment + if(ta > 0.0 - eps && tb < 1.0 + eps) { + sej->tag = 1; + continue; + } + + // cut segment + bool aInside = ta > 0.0 - eps && ta < 1.0 + eps; + if(tb > 1.0 - eps && aInside) { + *pAj = sei->b; + continue; + } + + // cut segment + bool bInside = tb > 0.0 - eps && tb < 1.0 + eps; + if(ta < 0.0 - eps && bInside) { + *pBj = sei->a; + continue; + } + + // split segment + if(ta < 0.0 - eps && tb > 1.0 + eps) { + sel->AddEdge(sei->b, *pBj, sej->auxA, sej->auxB); + *pBj = sei->a; + continue; + } + } + + if(canRemoveI) { + // j-segment inside i-segment + if(ta < 0.0 + eps && tb > 1.0 - eps) { + sei->tag = 1; + break; + } + + // cut segment + bool aInside = ta > 0.0 + eps && ta < 1.0 - eps; + if(tb > 1.0 - eps && aInside) { + sei->b = *pAj; + i--; + break; + } + + // cut segment + bool bInside = tb > 0.0 + eps && tb < 1.0 - eps; + if(ta < 0.0 + eps && bInside) { + sei->a = *pBj; + i--; + break; + } + + // split segment + if(ta > 0.0 + eps && tb < 1.0 - eps) { + sel->AddEdge(*pBj, sei->b, sei->auxA, sei->auxB); + sei->b = *pAj; + i--; + break; + } + } + } + } + sel->l.RemoveTagged(); + + // We kept the line segments and Beziers separate until now; but put them + // all together, and also project everything into the xy plane, since not + // all export targets ignore the z component of the points. + for(e = sel->l.First(); e; e = sel->l.NextAfter(e)) { + SBezier sb = SBezier::From(e->a, e->b); + sb.auxA = e->auxA; + sbl->l.Add(&sb); + } + for(b = sbl->l.First(); b; b = sbl->l.NextAfter(b)) { + for(int i = 0; i <= b->deg; i++) { + b->ctrl[i].z = 0; + } + } + + // If possible, then we will assemble these output curves into loops. They + // will then get exported as closed paths. + SBezierLoopSetSet sblss = {}; + SBezierList leftovers = {}; + SSurface srf = SSurface::FromPlane(Vector::From(0, 0, 0), + Vector::From(1, 0, 0), + Vector::From(0, 1, 0)); + SPolygon spxyz = {}; + bool allClosed; + SEdge notClosedAt; + sbl->l.ClearTags(); + sblss.FindOuterFacesFrom(sbl, &spxyz, &srf, + SS.ExportChordTolMm(), + &allClosed, ¬ClosedAt, + NULL, NULL, + &leftovers); + for(b = leftovers.l.First(); b; b = leftovers.l.NextAfter(b)) { + sblss.AddOpenPath(b); + } + + // Now write the lines and triangles to the output file + out->OutputLinesAndMesh(&sblss, &sms); + + leftovers.Clear(); + spxyz.Clear(); + sblss.Clear(); + smp.Clear(); + sms.Clear(); + hlrd.Clear(); +} + +double VectorFileWriter::MmToPts(double mm) { + // 72 points in an inch + return (mm/25.4)*72; +} + +VectorFileWriter *VectorFileWriter::ForFile(const std::string &filename) { + VectorFileWriter *ret; + bool needOpen = true; + if(FilenameHasExtension(filename, ".dxf")) { + static DxfFileWriter DxfWriter; + ret = &DxfWriter; + needOpen = false; + } else if(FilenameHasExtension(filename, ".ps") || FilenameHasExtension(filename, ".eps")) { + static EpsFileWriter EpsWriter; + ret = &EpsWriter; + } else if(FilenameHasExtension(filename, ".pdf")) { + static PdfFileWriter PdfWriter; + ret = &PdfWriter; + } else if(FilenameHasExtension(filename, ".svg")) { + static SvgFileWriter SvgWriter; + ret = &SvgWriter; + } else if(FilenameHasExtension(filename, ".plt")||FilenameHasExtension(filename, ".hpgl")) { + static HpglFileWriter HpglWriter; + ret = &HpglWriter; + } else if(FilenameHasExtension(filename, ".step")||FilenameHasExtension(filename, ".stp")) { + static Step2dFileWriter Step2dWriter; + ret = &Step2dWriter; + } else if(FilenameHasExtension(filename, ".txt")) { + static GCodeFileWriter GCodeWriter; + ret = &GCodeWriter; + } else { + Error("Can't identify output file type from file extension of " + "filename '%s'; try " + ".step, .stp, .dxf, .svg, .plt, .hpgl, .pdf, .txt, " + ".eps, or .ps.", + filename.c_str()); + return NULL; + } + ret->filename = filename; + if(!needOpen) return ret; + + FILE *f = ssfopen(filename, "wb"); + if(!f) { + Error("Couldn't write to '%s'", filename.c_str()); + return NULL; + } + ret->f = f; + return ret; +} + +void VectorFileWriter::SetModelviewProjection(const Vector &u, const Vector &v, const Vector &n, + const Vector &origin, double cameraTan, + double scale) { + this->u = u; + this->v = v; + this->n = n; + this->origin = origin; + this->cameraTan = cameraTan; + this->scale = scale; +} + +Vector VectorFileWriter::Transform(Vector &pos) const { + return pos.InPerspective(u, v, n, origin, cameraTan).ScaledBy(1.0 / scale); +} + +void VectorFileWriter::OutputLinesAndMesh(SBezierLoopSetSet *sblss, SMesh *sm) { + STriangle *tr; + SBezier *b; + + // First calculate the bounding box. + ptMin = Vector::From(VERY_POSITIVE, VERY_POSITIVE, VERY_POSITIVE); + ptMax = Vector::From(VERY_NEGATIVE, VERY_NEGATIVE, VERY_NEGATIVE); + if(sm) { + for(tr = sm->l.First(); tr; tr = sm->l.NextAfter(tr)) { + (tr->a).MakeMaxMin(&ptMax, &ptMin); + (tr->b).MakeMaxMin(&ptMax, &ptMin); + (tr->c).MakeMaxMin(&ptMax, &ptMin); + } + } + if(sblss) { + SBezierLoopSet *sbls; + for(sbls = sblss->l.First(); sbls; sbls = sblss->l.NextAfter(sbls)) { + SBezierLoop *sbl; + for(sbl = sbls->l.First(); sbl; sbl = sbls->l.NextAfter(sbl)) { + for(b = sbl->l.First(); b; b = sbl->l.NextAfter(b)) { + for(int i = 0; i <= b->deg; i++) { + (b->ctrl[i]).MakeMaxMin(&ptMax, &ptMin); + } + } + } + } + } + + // And now we compute the canvas size. + double s = 1.0 / SS.exportScale; + if(SS.exportCanvasSizeAuto) { + // It's based on the calculated bounding box; we grow it along each + // boundary by the specified amount. + ptMin.x -= s*SS.exportMargin.left; + ptMax.x += s*SS.exportMargin.right; + ptMin.y -= s*SS.exportMargin.bottom; + ptMax.y += s*SS.exportMargin.top; + } else { + ptMin.x = -(s*SS.exportCanvas.dx); + ptMin.y = -(s*SS.exportCanvas.dy); + ptMax.x = ptMin.x + (s*SS.exportCanvas.width); + ptMax.y = ptMin.y + (s*SS.exportCanvas.height); + } + + StartFile(); + if(sm && SS.exportShadedTriangles) { + for(tr = sm->l.First(); tr; tr = sm->l.NextAfter(tr)) { + Triangle(tr); + } + } + if(sblss) { + SBezierLoopSet *sbls; + for(sbls = sblss->l.First(); sbls; sbls = sblss->l.NextAfter(sbls)) { + SBezierLoop *sbl; + sbl = sbls->l.First(); + if(!sbl) continue; + b = sbl->l.First(); + if(!b || !Style::Exportable(b->auxA)) continue; + + hStyle hs = { (uint32_t)b->auxA }; + Style *stl = Style::Get(hs); + double lineWidth = Style::WidthMm(b->auxA)*s; + RgbaColor strokeRgb = Style::Color(hs, true); + RgbaColor fillRgb = Style::FillColor(hs, true); + + StartPath(strokeRgb, lineWidth, stl->filled, fillRgb, hs); + for(sbl = sbls->l.First(); sbl; sbl = sbls->l.NextAfter(sbl)) { + for(b = sbl->l.First(); b; b = sbl->l.NextAfter(b)) { + Bezier(b); + } + } + FinishPath(strokeRgb, lineWidth, stl->filled, fillRgb, hs); + } + } + FinishAndCloseFile(); +} + +void VectorFileWriter::BezierAsPwl(SBezier *sb) { + List lv = {}; + sb->MakePwlInto(&lv, SS.ExportChordTolMm()); + int i; + for(i = 1; i < lv.n; i++) { + SBezier sb = SBezier::From(lv.elem[i-1], lv.elem[i]); + Bezier(&sb); + } + lv.Clear(); +} + +void VectorFileWriter::BezierAsNonrationalCubic(SBezier *sb, int depth) { + Vector t0 = sb->TangentAt(0), t1 = sb->TangentAt(1); + // The curve is correct, and the first derivatives are correct, at the + // endpoints. + SBezier bnr = SBezier::From( + sb->Start(), + sb->Start().Plus(t0.ScaledBy(1.0/3)), + sb->Finish().Minus(t1.ScaledBy(1.0/3)), + sb->Finish()); + + double tol = SS.ExportChordTolMm(); + // Arbitrary choice, but make it a little finer than pwl tolerance since + // it should be easier to achieve that with the smooth curves. + tol /= 2; + + bool closeEnough = true; + int i; + for(i = 1; i <= 3; i++) { + double t = i/4.0; + Vector p0 = sb->PointAt(t), + pn = bnr.PointAt(t); + double d = (p0.Minus(pn)).Magnitude(); + if(d > tol) { + closeEnough = false; + } + } + + if(closeEnough || depth > 3) { + Bezier(&bnr); + } else { + SBezier bef, aft; + sb->SplitAt(0.5, &bef, &aft); + BezierAsNonrationalCubic(&bef, depth+1); + BezierAsNonrationalCubic(&aft, depth+1); + } +} + +//----------------------------------------------------------------------------- +// Export a triangle mesh, in the requested format. +//----------------------------------------------------------------------------- +void SolveSpaceUI::ExportMeshTo(const std::string &filename) { + SS.exportMode = true; + GenerateAll(GENERATE_ALL); + + Group *g = SK.GetGroup(SS.GW.activeGroup); + g->GenerateDisplayItems(); + + SMesh *m = &(SK.GetGroup(SS.GW.activeGroup)->displayMesh); + if(m->IsEmpty()) { + Error("Active group mesh is empty; nothing to export."); + return; + } + + FILE *f = ssfopen(filename, "wb"); + if(!f) { + Error("Couldn't write to '%s'", filename.c_str()); + return; + } + + if(FilenameHasExtension(filename, ".stl")) { + ExportMeshAsStlTo(f, m); + } else if(FilenameHasExtension(filename, ".obj")) { + ExportMeshAsObjTo(f, m); + } else if(FilenameHasExtension(filename, ".js") || + FilenameHasExtension(filename, ".html")) { + SEdgeList *e = &(SK.GetGroup(SS.GW.activeGroup)->displayEdges); + ExportMeshAsThreeJsTo(f, filename, m, e); + } else { + Error("Can't identify output file type from file extension of " + "filename '%s'; try .stl, .obj, .js.", filename.c_str()); + } + + fclose(f); + + SS.justExportedInfo.showOrigin = false; + SS.justExportedInfo.draw = true; + InvalidateGraphics(); +} + +//----------------------------------------------------------------------------- +// Export the mesh as an STL file; it should always be vertex-to-vertex and +// not self-intersecting, so not much to do. +//----------------------------------------------------------------------------- +void SolveSpaceUI::ExportMeshAsStlTo(FILE *f, SMesh *sm) { + char str[80] = {}; + strcpy(str, "STL exported mesh"); + fwrite(str, 1, 80, f); + + uint32_t n = sm->l.n; + fwrite(&n, 4, 1, f); + + double s = SS.exportScale; + int i; + for(i = 0; i < sm->l.n; i++) { + STriangle *tr = &(sm->l.elem[i]); + Vector n = tr->Normal().WithMagnitude(1); + float w; + w = (float)n.x; fwrite(&w, 4, 1, f); + w = (float)n.y; fwrite(&w, 4, 1, f); + w = (float)n.z; fwrite(&w, 4, 1, f); + w = (float)((tr->a.x)/s); fwrite(&w, 4, 1, f); + w = (float)((tr->a.y)/s); fwrite(&w, 4, 1, f); + w = (float)((tr->a.z)/s); fwrite(&w, 4, 1, f); + w = (float)((tr->b.x)/s); fwrite(&w, 4, 1, f); + w = (float)((tr->b.y)/s); fwrite(&w, 4, 1, f); + w = (float)((tr->b.z)/s); fwrite(&w, 4, 1, f); + w = (float)((tr->c.x)/s); fwrite(&w, 4, 1, f); + w = (float)((tr->c.y)/s); fwrite(&w, 4, 1, f); + w = (float)((tr->c.z)/s); fwrite(&w, 4, 1, f); + fputc(0, f); + fputc(0, f); + } +} + +//----------------------------------------------------------------------------- +// Export the mesh as Wavefront OBJ format. This requires us to reduce all the +// identical vertices to the same identifier, so do that first. +//----------------------------------------------------------------------------- +void SolveSpaceUI::ExportMeshAsObjTo(FILE *f, SMesh *sm) { + SPointList spl = {}; + STriangle *tr; + for(tr = sm->l.First(); tr; tr = sm->l.NextAfter(tr)) { + spl.IncrementTagFor(tr->a); + spl.IncrementTagFor(tr->b); + spl.IncrementTagFor(tr->c); + } + + // Output all the vertices. + SPoint *sp; + for(sp = spl.l.First(); sp; sp = spl.l.NextAfter(sp)) { + fprintf(f, "v %.10f %.10f %.10f\r\n", + sp->p.x / SS.exportScale, + sp->p.y / SS.exportScale, + sp->p.z / SS.exportScale); + } + + // And now all the triangular faces, in terms of those vertices. The + // file format counts from 1, not 0. + for(tr = sm->l.First(); tr; tr = sm->l.NextAfter(tr)) { + fprintf(f, "f %d %d %d\r\n", + spl.IndexForPoint(tr->a) + 1, + spl.IndexForPoint(tr->b) + 1, + spl.IndexForPoint(tr->c) + 1); + } + + spl.Clear(); +} + +//----------------------------------------------------------------------------- +// Export the mesh as a JavaScript script, which is compatible with Three.js. +//----------------------------------------------------------------------------- +void SolveSpaceUI::ExportMeshAsThreeJsTo(FILE *f, const std::string &filename, + SMesh *sm, SEdgeList *sel) +{ + SPointList spl = {}; + STriangle *tr; + SEdge *e; + Vector bndl, bndh; + const char htmlbegin0[] = R"( + + + + + Three.js Solvespace Mesh + + + + + + + + + +)"; + + // A default three.js viewer with OrthographicTrackballControls is + // generated as a comment preceding the data. + + // x bounds should be the range of x or y, whichever + // is larger, before aspect ratio correction is applied. + // y bounds should be the range of x or y, whichever is + // larger. No aspect ratio correction is applied. + // Near plane should be 1. + // Camera's z-position should be the range of z + 1 or the larger of + // the x or y bounds, whichever is larger. + // Far plane should be at least twice as much as the camera's + // z-position. + // Edge projection bias should be about 1/500 of the far plane's distance. + // Further corrections will be applied to the z-position and far plane in + // the default viewer, but the defaults are fine for a model which + // only rotates about the world origin. + + sm->GetBounding(&bndh, &bndl); + double largerBoundXY = max((bndh.x - bndl.x), (bndh.y - bndl.y)); + double largerBoundZ = max(largerBoundXY, (bndh.z - bndl.z + 1)); + + std::string extension = filename, + noExtFilename = filename; + size_t dot = noExtFilename.rfind('.'); + extension.erase(0, dot + 1); + noExtFilename.erase(dot); + + std::string baseFilename = noExtFilename; + size_t lastSlash = baseFilename.rfind(PATH_SEP); + if(lastSlash == std::string::npos) oops(); + baseFilename.erase(0, lastSlash + 1); + + for(size_t i = 0; i < baseFilename.length(); i++) { + if(!isalpha(baseFilename[i]) && + /* also permit UTF-8 */ !((unsigned char)baseFilename[i] >= 0x80)) + baseFilename[i] = '_'; + } + + if(extension == "html") { + fputs(htmlbegin0, f); + fputs(htmlbegin1, f); + } + + fprintf(f, "var solvespace_model_%s = {\n" + " bounds: {\n" + " x: %f, y: %f, near: %f, far: %f, z: %f, edgeBias: %f\n" + " },\n", + baseFilename.c_str(), + largerBoundXY, + largerBoundXY, + 1.0, + largerBoundZ * 2, + largerBoundZ, + largerBoundZ / 250); + + // Output lighting information. + fputs(" lights: {\n" + " d: [\n", f); + + // Directional. + int lightCount; + for(lightCount = 0; lightCount < 2; lightCount++) + { + fprintf(f, " {\n" + " intensity: %f, direction: [%f, %f, %f]\n" + " },\n", + SS.lightIntensity[lightCount], + CO(SS.lightDir[lightCount])); + } + + // Global Ambience. + fprintf(f, " ],\n" + " a: %f\n", SS.ambientIntensity); + + for(tr = sm->l.First(); tr; tr = sm->l.NextAfter(tr)) { + spl.IncrementTagFor(tr->a); + spl.IncrementTagFor(tr->b); + spl.IncrementTagFor(tr->c); + } + + // Output all the vertices. + SPoint *sp; + fputs(" },\n" + " points: [\n", f); + for(sp = spl.l.First(); sp; sp = spl.l.NextAfter(sp)) { + fprintf(f, " [%f, %f, %f],\n", + sp->p.x / SS.exportScale, + sp->p.y / SS.exportScale, + sp->p.z / SS.exportScale); + } + + fputs(" ],\n" + " faces: [\n", f); + // And now all the triangular faces, in terms of those vertices. + // This time we count from zero. + for(tr = sm->l.First(); tr; tr = sm->l.NextAfter(tr)) { + fprintf(f, " [%d, %d, %d],\n", + spl.IndexForPoint(tr->a), + spl.IndexForPoint(tr->b), + spl.IndexForPoint(tr->c)); + } + + // Output face normals. + fputs(" ],\n" + " normals: [\n", f); + for(tr = sm->l.First(); tr; tr = sm->l.NextAfter(tr)) { + fprintf(f, " [[%f, %f, %f], [%f, %f, %f], [%f, %f, %f]],\n", + CO(tr->an), CO(tr->bn), CO(tr->cn)); + } + + fputs(" ],\n" + " colors: [\n", f); + // Output triangle colors. + for(tr = sm->l.First(); tr; tr = sm->l.NextAfter(tr)) { + fprintf(f, " 0x%x,\n", tr->meta.color.ToARGB32()); + } + + fputs(" ],\n" + " edges: [\n", f); + // Output edges. Assume user's model colors do not obscure white edges. + for(e = sel->l.First(); e; e = sel->l.NextAfter(e)) { + fprintf(f, " [[%f, %f, %f], [%f, %f, %f]],\n", + e->a.x / SS.exportScale, + e->a.y / SS.exportScale, + e->a.z / SS.exportScale, + e->b.x / SS.exportScale, + e->b.y / SS.exportScale, + e->b.z / SS.exportScale); + } + + fputs(" ]\n};\n", f); + + if(extension == "html") + fprintf(f, htmlend, baseFilename.c_str()); + + spl.Clear(); +} + +//----------------------------------------------------------------------------- +// Export a view of the model as an image; we just take a screenshot, by +// rendering the view in the usual way and then copying the pixels. +//----------------------------------------------------------------------------- +void SolveSpaceUI::ExportAsPngTo(const std::string &filename) { + int w = (int)SS.GW.width, h = (int)SS.GW.height; + // No guarantee that the back buffer contains anything valid right now, + // so repaint the scene. And hide the toolbar too. + bool prevShowToolbar = SS.showToolbar; + SS.showToolbar = false; +#ifndef WIN32 + std::unique_ptr gloffscreen(new GLOffscreen); + gloffscreen->begin(w, h); +#endif + SS.GW.Paint(); + SS.showToolbar = prevShowToolbar; + + FILE *f = ssfopen(filename, "wb"); + if(!f) goto err; + + png_struct *png_ptr; png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, + NULL, NULL, NULL); + if(!png_ptr) goto err; + + png_info *info_ptr; info_ptr = png_create_info_struct(png_ptr); + if(!png_ptr) goto err; + + if(setjmp(png_jmpbuf(png_ptr))) goto err; + + png_init_io(png_ptr, f); + + // glReadPixels wants to align things on 4-boundaries, and there's 3 + // bytes per pixel. As long as the row width is divisible by 4, all + // works out. + w &= ~3; h &= ~3; + + png_set_IHDR(png_ptr, info_ptr, w, h, + 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT); + + png_write_info(png_ptr, info_ptr); + + // Get the pixel data from the framebuffer + uint8_t *pixels; pixels = (uint8_t *)AllocTemporary(3*w*h); + uint8_t **rowptrs; rowptrs = (uint8_t **)AllocTemporary(h*sizeof(uint8_t *)); + glReadPixels(0, 0, w, h, GL_RGB, GL_UNSIGNED_BYTE, pixels); + + int y; + for(y = 0; y < h; y++) { + // gl puts the origin at lower left, but png puts it top left + rowptrs[y] = pixels + ((h - 1) - y)*(3*w); + } + png_write_image(png_ptr, rowptrs); + + png_write_end(png_ptr, info_ptr); + png_destroy_write_struct(&png_ptr, &info_ptr); + fclose(f); + return; + +err: + Error("Error writing PNG file '%s'", filename.c_str()); + if(f) fclose(f); + return; +} + diff --git a/src/exportstep.cpp b/src/exportstep.cpp new file mode 100644 index 0000000..8e3936c --- /dev/null +++ b/src/exportstep.cpp @@ -0,0 +1,373 @@ +//----------------------------------------------------------------------------- +// Export a STEP file describing our ratpoly shell. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +void StepFileWriter::WriteHeader(void) { + fprintf(f, +"ISO-10303-21;\n" +"HEADER;\n" +"\n" +"FILE_DESCRIPTION((''), '2;1');\n" +"\n" +"FILE_NAME(\n" +" 'output_file',\n" +" '2009-06-07T17:44:47-07:00',\n" +" (''),\n" +" (''),\n" +" 'SolveSpace',\n" +" '',\n" +" ''\n" +");\n" +"\n" +"FILE_SCHEMA (('CONFIG_CONTROL_DESIGN'));\n" +"ENDSEC;\n" +"\n" +"DATA;\n" +"\n" +"/**********************************************************\n" +" * This defines the units and tolerances for the file. It\n" +" * is always the same, independent of the actual data.\n" +" **********************************************************/\n" +"#158=(\n" +"LENGTH_UNIT()\n" +"NAMED_UNIT(*)\n" +"SI_UNIT(.MILLI.,.METRE.)\n" +");\n" +"#161=(\n" +"NAMED_UNIT(*)\n" +"PLANE_ANGLE_UNIT()\n" +"SI_UNIT($,.RADIAN.)\n" +");\n" +"#166=(\n" +"NAMED_UNIT(*)\n" +"SI_UNIT($,.STERADIAN.)\n" +"SOLID_ANGLE_UNIT()\n" +");\n" +"#167=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.001),#158,\n" +"'DISTANCE_ACCURACY_VALUE',\n" +"'string');\n" +"#168=(\n" +"GEOMETRIC_REPRESENTATION_CONTEXT(3)\n" +"GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#167))\n" +"GLOBAL_UNIT_ASSIGNED_CONTEXT((#166,#161,#158))\n" +"REPRESENTATION_CONTEXT('ID1','3D')\n" +");\n" +"#169=SHAPE_REPRESENTATION('',(#170),#168);\n" +"#170=AXIS2_PLACEMENT_3D('',#173,#171,#172);\n" +"#171=DIRECTION('',(0.,0.,1.));\n" +"#172=DIRECTION('',(1.,0.,0.));\n" +"#173=CARTESIAN_POINT('',(0.,0.,0.));\n" +"\n" + ); + + // Start the ID somewhere beyond the header IDs. + id = 200; +} +void StepFileWriter::WriteProductHeader(void) { + fprintf(f, + "#175 = SHAPE_DEFINITION_REPRESENTATION(#176, #169);\n" + "#176 = PRODUCT_DEFINITION_SHAPE('Version', 'Test Part', #177);\n" + "#177 = PRODUCT_DEFINITION('Version', 'Test Part', #182, #178);\n" + "#178 = DESIGN_CONTEXT('3D Mechanical Parts', #181, 'design');\n" + "#179 = PRODUCT('1', 'Product', 'Test Part', (#180));\n" + "#180 = MECHANICAL_CONTEXT('3D Mechanical Parts', #181, 'mechanical');\n" + "#181 = APPLICATION_CONTEXT(\n" + "'configuration controlled 3d designs of mechanical parts and assemblies');\n" + "#182 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('Version',\n" + "'Test Part', #179, .MADE.);\n" + "\n" + ); +} +int StepFileWriter::ExportCurve(SBezier *sb) { + int i, ret = id; + + fprintf(f, "#%d=(\n", ret); + fprintf(f, "BOUNDED_CURVE()\n"); + fprintf(f, "B_SPLINE_CURVE(%d,(", sb->deg); + for(i = 0; i <= sb->deg; i++) { + fprintf(f, "#%d", ret + i + 1); + if(i != sb->deg) fprintf(f, ","); + } + fprintf(f, "),.UNSPECIFIED.,.F.,.F.)\n"); + fprintf(f, "B_SPLINE_CURVE_WITH_KNOTS((%d,%d),", + (sb->deg + 1), (sb-> deg + 1)); + fprintf(f, "(0.000,1.000),.UNSPECIFIED.)\n"); + fprintf(f, "CURVE()\n"); + fprintf(f, "GEOMETRIC_REPRESENTATION_ITEM()\n"); + fprintf(f, "RATIONAL_B_SPLINE_CURVE(("); + for(i = 0; i <= sb->deg; i++) { + fprintf(f, "%.10f", sb->weight[i]); + if(i != sb->deg) fprintf(f, ","); + } + fprintf(f, "))\n"); + fprintf(f, "REPRESENTATION_ITEM('')\n);\n"); + + for(i = 0; i <= sb->deg; i++) { + fprintf(f, "#%d=CARTESIAN_POINT('',(%.10f,%.10f,%.10f));\n", + id + 1 + i, + CO(sb->ctrl[i])); + } + fprintf(f, "\n"); + + id = ret + 1 + (sb->deg + 1); + return ret; +} + +int StepFileWriter::ExportCurveLoop(SBezierLoop *loop, bool inner) { + if(loop->l.n < 1) oops(); + + List listOfTrims = {}; + + SBezier *sb = &(loop->l.elem[loop->l.n - 1]); + + // Generate "exactly closed" contours, with the same vertex id for the + // finish of a previous edge and the start of the next one. So we need + // the finish of the last Bezier in the loop before we start our process. + fprintf(f, "#%d=CARTESIAN_POINT('',(%.10f,%.10f,%.10f));\n", + id, CO(sb->Finish())); + fprintf(f, "#%d=VERTEX_POINT('',#%d);\n", id+1, id); + int lastFinish = id + 1, prevFinish = lastFinish; + id += 2; + + for(sb = loop->l.First(); sb; sb = loop->l.NextAfter(sb)) { + int curveId = ExportCurve(sb); + + int thisFinish; + if(loop->l.NextAfter(sb) != NULL) { + fprintf(f, "#%d=CARTESIAN_POINT('',(%.10f,%.10f,%.10f));\n", + id, CO(sb->Finish())); + fprintf(f, "#%d=VERTEX_POINT('',#%d);\n", id+1, id); + thisFinish = id + 1; + id += 2; + } else { + thisFinish = lastFinish; + } + + fprintf(f, "#%d=EDGE_CURVE('',#%d,#%d,#%d,%s);\n", + id, prevFinish, thisFinish, curveId, ".T."); + fprintf(f, "#%d=ORIENTED_EDGE('',*,*,#%d,.T.);\n", + id+1, id); + + int oe = id+1; + listOfTrims.Add(&oe); + id += 2; + + prevFinish = thisFinish; + } + + fprintf(f, "#%d=EDGE_LOOP('',(", id); + int *oe; + for(oe = listOfTrims.First(); oe; oe = listOfTrims.NextAfter(oe)) { + fprintf(f, "#%d", *oe); + if(listOfTrims.NextAfter(oe) != NULL) fprintf(f, ","); + } + fprintf(f, "));\n"); + + int fb = id + 1; + fprintf(f, "#%d=%s('',#%d,.T.);\n", + fb, inner ? "FACE_BOUND" : "FACE_OUTER_BOUND", id); + + id += 2; + listOfTrims.Clear(); + + return fb; +} + +void StepFileWriter::ExportSurface(SSurface *ss, SBezierList *sbl) { + int i, j, srfid = id; + + // First, we create the untrimmed surface. We always specify a rational + // B-spline surface (in fact, just a Bezier surface). + fprintf(f, "#%d=(\n", srfid); + fprintf(f, "BOUNDED_SURFACE()\n"); + fprintf(f, "B_SPLINE_SURFACE(%d,%d,(", ss->degm, ss->degn); + for(i = 0; i <= ss->degm; i++) { + fprintf(f, "("); + for(j = 0; j <= ss->degn; j++) { + fprintf(f, "#%d", srfid + 1 + j + i*(ss->degn + 1)); + if(j != ss->degn) fprintf(f, ","); + } + fprintf(f, ")"); + if(i != ss->degm) fprintf(f, ","); + } + fprintf(f, "),.UNSPECIFIED.,.F.,.F.,.F.)\n"); + fprintf(f, "B_SPLINE_SURFACE_WITH_KNOTS((%d,%d),(%d,%d),", + (ss->degm + 1), (ss->degm + 1), + (ss->degn + 1), (ss->degn + 1)); + fprintf(f, "(0.000,1.000),(0.000,1.000),.UNSPECIFIED.)\n"); + fprintf(f, "GEOMETRIC_REPRESENTATION_ITEM()\n"); + fprintf(f, "RATIONAL_B_SPLINE_SURFACE(("); + for(i = 0; i <= ss->degm; i++) { + fprintf(f, "("); + for(j = 0; j <= ss->degn; j++) { + fprintf(f, "%.10f", ss->weight[i][j]); + if(j != ss->degn) fprintf(f, ","); + } + fprintf(f, ")"); + if(i != ss->degm) fprintf(f, ","); + } + fprintf(f, "))\n"); + fprintf(f, "REPRESENTATION_ITEM('')\n"); + fprintf(f, "SURFACE()\n"); + fprintf(f, ");\n"); + + // The control points for the untrimmed surface. + for(i = 0; i <= ss->degm; i++) { + for(j = 0; j <= ss->degn; j++) { + fprintf(f, "#%d=CARTESIAN_POINT('',(%.10f,%.10f,%.10f));\n", + srfid + 1 + j + i*(ss->degn + 1), + CO(ss->ctrl[i][j])); + } + } + fprintf(f, "\n"); + + id = srfid + 1 + (ss->degm + 1)*(ss->degn + 1); + + // Now we do the trim curves. We must group each outer loop separately + // along with its inner faces, so do that now. + SBezierLoopSetSet sblss = {}; + SPolygon spxyz = {}; + bool allClosed; + SEdge notClosedAt; + // We specify a surface, so it doesn't check for coplanarity; and we + // don't want it to give us any open contours. The polygon and chord + // tolerance are required, because they are used to calculate the + // contour directions and determine inner vs. outer contours. + sblss.FindOuterFacesFrom(sbl, &spxyz, ss, + SS.ExportChordTolMm(), + &allClosed, ¬ClosedAt, + NULL, NULL, + NULL); + + // So in our list of SBezierLoopSet, each set contains at least one loop + // (the outer boundary), plus any inner loops associated with that outer + // loop. + SBezierLoopSet *sbls; + for(sbls = sblss.l.First(); sbls; sbls = sblss.l.NextAfter(sbls)) { + SBezierLoop *loop = sbls->l.First(); + + List listOfLoops = {}; + // Create the face outer boundary from the outer loop. + int fob = ExportCurveLoop(loop, false); + listOfLoops.Add(&fob); + + // And create the face inner boundaries from any inner loops that + // lie within this contour. + loop = sbls->l.NextAfter(loop); + for(; loop; loop = sbls->l.NextAfter(loop)) { + int fib = ExportCurveLoop(loop, true); + listOfLoops.Add(&fib); + } + + // And now create the face that corresponds to this outer loop + // and all of its holes. + int advFaceId = id; + fprintf(f, "#%d=ADVANCED_FACE('',(", advFaceId); + int *fb; + for(fb = listOfLoops.First(); fb; fb = listOfLoops.NextAfter(fb)) { + fprintf(f, "#%d", *fb); + if(listOfLoops.NextAfter(fb) != NULL) fprintf(f, ","); + } + + fprintf(f, "),#%d,.T.);\n", srfid); + fprintf(f, "\n"); + advancedFaces.Add(&advFaceId); + + id++; + listOfLoops.Clear(); + } + sblss.Clear(); + spxyz.Clear(); +} + +void StepFileWriter::WriteFooter(void) { + fprintf(f, +"\n" +"ENDSEC;\n" +"\n" +"END-ISO-10303-21;\n" + ); +} + +void StepFileWriter::ExportSurfacesTo(const std::string &filename) { + Group *g = SK.GetGroup(SS.GW.activeGroup); + SShell *shell = &(g->runningShell); + + if(shell->surface.n == 0) { + Error("The model does not contain any surfaces to export.%s", + g->runningMesh.l.n > 0 ? + "\n\nThe model does contain triangles from a mesh, but " + "a triangle mesh cannot be exported as a STEP file. Try " + "File -> Export Mesh... instead." : ""); + return; + } + + f = ssfopen(filename, "wb"); + if(!f) { + Error("Couldn't write to '%s'", filename.c_str()); + return; + } + + WriteHeader(); + WriteProductHeader(); + + advancedFaces = {}; + + SSurface *ss; + for(ss = shell->surface.First(); ss; ss = shell->surface.NextAfter(ss)) { + if(ss->trim.n == 0) continue; + + // Get all of the loops of Beziers that trim our surface (with each + // Bezier split so that we use the section as t goes from 0 to 1), and + // the piecewise linearization of those loops in xyz space. + SBezierList sbl = {}; + ss->MakeSectionEdgesInto(shell, NULL, &sbl); + + // Apply the export scale factor. + ss->ScaleSelfBy(1.0/SS.exportScale); + sbl.ScaleSelfBy(1.0/SS.exportScale); + + ExportSurface(ss, &sbl); + + sbl.Clear(); + } + + fprintf(f, "#%d=CLOSED_SHELL('',(", id); + int *af; + for(af = advancedFaces.First(); af; af = advancedFaces.NextAfter(af)) { + fprintf(f, "#%d", *af); + if(advancedFaces.NextAfter(af) != NULL) fprintf(f, ","); + } + fprintf(f, "));\n"); + fprintf(f, "#%d=MANIFOLD_SOLID_BREP('brep',#%d);\n", id+1, id); + fprintf(f, "#%d=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#%d,#170),#168);\n", + id+2, id+1); + fprintf(f, "#%d=SHAPE_REPRESENTATION_RELATIONSHIP($,$,#169,#%d);\n", + id+3, id+2); + + WriteFooter(); + + fclose(f); + advancedFaces.Clear(); +} + +void StepFileWriter::WriteWireframe(void) { + fprintf(f, "#%d=GEOMETRIC_CURVE_SET('curves',(", id); + int *c; + for(c = curves.First(); c; c = curves.NextAfter(c)) { + fprintf(f, "#%d", *c); + if(curves.NextAfter(c) != NULL) fprintf(f, ","); + } + fprintf(f, "));\n"); + fprintf(f, "#%d=GEOMETRICALLY_BOUNDED_WIREFRAME_SHAPE_REPRESENTATION" + "('',(#%d,#170),#168);\n", id+1, id); + fprintf(f, "#%d=SHAPE_REPRESENTATION_RELATIONSHIP($,$,#169,#%d);\n", + id+2, id+1); + + id += 3; + curves.Clear(); +} + diff --git a/src/exportvector.cpp b/src/exportvector.cpp new file mode 100644 index 0000000..1b76b8e --- /dev/null +++ b/src/exportvector.cpp @@ -0,0 +1,1360 @@ +//----------------------------------------------------------------------------- +// The file format-specific stuff for all of the 2d vector output formats. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include +#include "solvespace.h" + +VectorFileWriter::~VectorFileWriter() { + // This out-of-line virtual method definition quells the following warning + // from Clang++: "'VectorFileWriter' has no out-of-line virtual method + // definitions; its vtable will be emitted in every translation unit + // [-Wweak-vtables]" +} + +class PolylineBuilder { +public: + struct Edge; + + struct Vertex { + Vector pos; + std::vector edges; + + bool getNext(hStyle hs, Vertex **next) { + auto it = std::find_if(edges.begin(), edges.end(), [&](const Edge *e) { + return e->tag == 0 && e->style.v == hs.v; + }); + if(it != edges.end()) { + (*it)->tag = 1; + *next = (*it)->getOtherVertex(this); + return true; + } else { + return false; + } + } + + size_t countEdgesWithTagAndStyle(int tag, hStyle hs) const { + return std::count_if(edges.begin(), edges.end(), [&](const Edge *e) { + return e->tag == tag && e->style.v == hs.v; + }); + } + }; + + struct Edge { + Vertex *a; + Vertex *b; + hStyle style; + int tag; + + Vertex *getOtherVertex(Vertex *v) { + if(a == v) return b; + if(b == v) return a; + return NULL; + } + + bool getStartAndNext(Vertex **start, Vertex **next, bool loop) { + size_t numA = a->countEdgesWithTagAndStyle(0, style); + size_t numB = b->countEdgesWithTagAndStyle(0, style); + + if((numA == 1 && numB > 1) || (loop && numA > 1 && numB > 1)) { + *start = a; + *next = b; + return true; + } + + if(numA > 1 && numB == 1) { + *start = b; + *next = a; + return true; + } + + return false; + } + }; + + struct VectorHash { + size_t operator()(const Vector &v) const { + static const size_t size = std::numeric_limits::max() / 2 - 1; + static const double eps = (4.0 * LENGTH_EPS); + + double x = fabs(v.x) / eps; + double y = fabs(v.y) / eps; + + size_t xs = size_t(fmod(x, double(size))); + size_t ys = size_t(fmod(y, double(size))); + + return ys * size + xs; + } + }; + + struct VectorPred { + bool operator()(Vector a, Vector b) const { + return a.Equals(b, LENGTH_EPS); + } + }; + + std::unordered_map vertices; + std::vector edges; + + ~PolylineBuilder() { + clear(); + } + + void clear() { + for(Edge *e : edges) { + delete e; + } + edges.clear(); + + for(auto &v : vertices) { + delete v.second; + } + vertices.clear(); + } + + Vertex *addVertex(const Vector &pos) { + auto it = vertices.find(pos); + if(it != vertices.end()) { + return it->second; + } + + Vertex *result = new Vertex; + result->pos = pos; + vertices.emplace(pos, result); + + return result; + } + + Edge *addEdge(const Vector &p0, const Vector &p1, int style) { + Vertex *v0 = addVertex(p0); + Vertex *v1 = addVertex(p1); + if(v0 == v1) return NULL; + + Edge *edge = new Edge { v0, v1, hStyle { (uint32_t)style }, 0 }; + edges.push_back(edge); + + v0->edges.push_back(edge); + v1->edges.push_back(edge); + + return edge; + } +}; + +//----------------------------------------------------------------------------- +// Routines for DXF export +//----------------------------------------------------------------------------- +class DxfWriteInterface : public DRW_Interface { + DxfFileWriter *writer; + dxfRW *dxf; + + static DRW_Coord toCoord(const Vector &v) { + return DRW_Coord(v.x, v.y, v.z); + } + + Vector xfrm(Vector v) { + return writer->Transform(v); + } + +public: + DxfWriteInterface(DxfFileWriter *w, dxfRW *dxfrw) : + writer(w), dxf(dxfrw) {} + + virtual void writeTextstyles() { + DRW_Textstyle ts; + ts.name = "unicode"; + ts.font = "unicode"; + dxf->writeTextstyle(&ts); + } + + virtual void writeLayers() { + DRW_Layer layer; + + layer.name = "dimensions"; + dxf->writeLayer(&layer); + layer.name = "text"; + dxf->writeLayer(&layer); + + std::set usedStyles; + + for(DxfFileWriter::BezierPath &path : writer->paths) { + for(SBezier *sb : path.beziers) { + usedStyles.insert((uint32_t)sb->auxA); + } + } + + for(uint32_t v : usedStyles) { + Style *s = Style::Get(hStyle{v}); + layer.name = s->DescriptionString(); + dxf->writeLayer(&layer); + } + } + + virtual void writeLTypes() { + for(int i = 0; i <= Style::LAST_STIPPLE; i++) { + DRW_LType type; + // LibreCAD requires the line type to have one of these exact names, + // or otherwise it overwrites it with its own (continuous) style. + type.name = DxfFileWriter::lineTypeName(i); + double sw = 1.0; + switch(i) { + case Style::STIPPLE_CONTINUOUS: + break; + + case Style::STIPPLE_DASH: + type.path.push_back(sw); + type.path.push_back(-sw); + break; + + case Style::STIPPLE_LONG_DASH: + type.path.push_back(sw * 2.0); + type.path.push_back(-sw); + break; + + case Style::STIPPLE_DASH_DOT: + type.path.push_back(sw); + type.path.push_back(-sw); + type.path.push_back(0.0); + type.path.push_back(-sw); + break; + + case Style::STIPPLE_DOT: + type.path.push_back(sw); + type.path.push_back(0.0); + break; + + case Style::STIPPLE_DASH_DOT_DOT: + type.path.push_back(sw); + type.path.push_back(-sw); + type.path.push_back(0.0); + type.path.push_back(-sw); + type.path.push_back(0.0); + type.path.push_back(-sw); + break; + } + dxf->writeLineType(&type); + } + } + + void writePolylines() { + PolylineBuilder builder; + + for(DxfFileWriter::BezierPath &path : writer->paths) { + for(SBezier *sb : path.beziers) { + if(sb->deg != 1) continue; + builder.addEdge(sb->ctrl[0], sb->ctrl[1], sb->auxA); + } + } + + bool found; + bool loop = false; + do { + found = false; + for(PolylineBuilder::Edge *e : builder.edges) { + if(e->tag != 0) continue; + + PolylineBuilder::Vertex *start; + PolylineBuilder::Vertex *next; + if(!e->getStartAndNext(&start, &next, loop)) continue; + found = true; + e->tag = 1; + + DRW_LWPolyline polyline; + assignEntityDefaults(&polyline, e->style); + polyline.vertlist.push_back(new DRW_Vertex2D(start->pos.x, start->pos.y, 0.0)); + polyline.vertlist.push_back(new DRW_Vertex2D(next->pos.x, next->pos.y, 0.0)); + while(next->getNext(e->style, &next)) { + polyline.vertlist.push_back(new DRW_Vertex2D(next->pos.x, next->pos.y, 0.0)); + } + dxf->writeLWPolyline(&polyline); + } + + if(!found && !loop) { + loop = true; + found = true; + } + } while(found); + + for(PolylineBuilder::Edge *e : builder.edges) { + if(e->tag != 0) continue; + writeLine(e->a->pos, e->b->pos, e->style); + } + } + + virtual void writeEntities() { + writePolylines(); + + for(DxfFileWriter::BezierPath &path : writer->paths) { + for(SBezier *sb : path.beziers) { + if(sb->deg == 1) continue; + writeBezier(sb); + } + } + + if(writer->constraint) { + Constraint *c; + for(c = writer->constraint->First(); c; c = writer->constraint->NextAfter(c)) { + if(!writer->NeedToOutput(c)) continue; + switch(c->type) { + case Constraint::PT_PT_DISTANCE: { + Vector ap = SK.GetEntity(c->ptA)->PointGetNum(); + Vector bp = SK.GetEntity(c->ptB)->PointGetNum(); + Vector ref = ((ap.Plus(bp)).ScaledBy(0.5)).Plus(c->disp.offset); + writeAlignedDimension(xfrm(ap), xfrm(bp), xfrm(ref), + xfrm(ref), c->Label(), c->GetStyle(), c->valA); + break; + } + + case Constraint::PT_LINE_DISTANCE: { + Vector pt = SK.GetEntity(c->ptA)->PointGetNum(); + Entity *line = SK.GetEntity(c->entityA); + Vector lA = SK.GetEntity(line->point[0])->PointGetNum(); + Vector lB = SK.GetEntity(line->point[1])->PointGetNum(); + Vector dl = lB.Minus(lA); + + Vector closest = pt.ClosestPointOnLine(lA, dl); + + if(pt.Equals(closest)) break; + + Vector ref = ((closest.Plus(pt)).ScaledBy(0.5)).Plus(c->disp.offset); + Vector refClosest = ref.ClosestPointOnLine(lA, dl); + + double ddl = dl.Dot(dl); + if(fabs(ddl) > LENGTH_EPS * LENGTH_EPS) { + double t = refClosest.Minus(lA).Dot(dl) / ddl; + if(t < 0.0) { + refClosest = lA; + } else if(t > 1.0) { + refClosest = lB; + } + } + + Vector xdl = xfrm(lB).Minus(xfrm(lA)); + writeLinearDimension(xfrm(pt), xfrm(refClosest), xfrm(ref), + xfrm(ref), c->Label(), + atan2(xdl.y, xdl.x) / PI * 180.0 + 90.0, 0.0, + c->GetStyle(), c->valA); + break; + } + + case Constraint::DIAMETER: { + Entity *circle = SK.GetEntity(c->entityA); + Vector center = SK.GetEntity(circle->point[0])->PointGetNum(); + Quaternion q = SK.GetEntity(circle->normal)->NormalGetNum(); + Vector n = q.RotationN().WithMagnitude(1); + double r = circle->CircleGetRadiusNum(); + + Vector ref = center.Plus(c->disp.offset); + // Force the label into the same plane as the circle. + ref = ref.Minus(n.ScaledBy(n.Dot(ref) - n.Dot(center))); + + Vector rad = ref.Minus(center).WithMagnitude(r); + if(/*isRadius*/c->other) { + writeRadialDimension( + xfrm(center), xfrm(center.Plus(rad)), + xfrm(ref), c->Label(), c->GetStyle(), c->valA); + } else { + writeDiametricDimension( + xfrm(center.Minus(rad)), xfrm(center.Plus(rad)), + xfrm(ref), c->Label(), c->GetStyle(), c->valA); + } + break; + } + + case Constraint::ANGLE: { + Entity *a = SK.GetEntity(c->entityA); + Entity *b = SK.GetEntity(c->entityB); + + Vector a0 = a->VectorGetStartPoint(); + Vector b0 = b->VectorGetStartPoint(); + Vector da = a->VectorGetNum(); + Vector db = b->VectorGetNum(); + if(/*otherAngle*/c->other) { + a0 = a0.Plus(da); + da = da.ScaledBy(-1); + } + + bool skew = false; + Vector ref = c->disp.offset; + Vector pi = Vector::AtIntersectionOfLines(a0, a0.Plus(da), b0, b0.Plus(db), + &skew); + if(!skew) ref = pi.Plus(c->disp.offset); + + Vector norm = da.Cross(db); + Vector dna = norm.Cross(da).WithMagnitude(1.0); + + double thetaf = acos(da.DirectionCosineWith(db)); + + // Calculate median + Vector m = da.WithMagnitude(1.0).ScaledBy(cos(thetaf/2)).Plus( + dna.ScaledBy(sin(thetaf/2))); + Vector rm = ref.Minus(pi); + + // Test which side we have to place an arc + if(m.Dot(rm) < 0) { + da = da.ScaledBy(-1); dna = dna.ScaledBy(-1); + db = db.ScaledBy(-1); + } + + Vector bisect = da.WithMagnitude(1.0).ScaledBy(cos(thetaf / 2.0)).Plus( + dna.ScaledBy(sin(thetaf / 2.0))); + + ref = pi.Plus(bisect.WithMagnitude(c->disp.offset.Magnitude())); + + // Get lines agian to write exact line. + a0 = a->VectorGetStartPoint(); + b0 = b->VectorGetStartPoint(); + da = a->VectorGetNum(); + db = b->VectorGetNum(); + + writeAngularDimension( + xfrm(a0), xfrm(a0.Plus(da)), xfrm(b0), xfrm(b0.Plus(db)), xfrm(ref), + xfrm(ref), c->Label(), c->GetStyle(), c->valA); + break; + } + + case Constraint::COMMENT: { + Style *st = SK.style.FindById(c->GetStyle()); + writeText(xfrm(c->disp.offset), c->Label(), + Style::TextHeight(c->GetStyle()) / SS.GW.scale, + st->textAngle, st->textOrigin, c->GetStyle()); + break; + } + } + } + } + } + + int findDxfColor(const RgbaColor &src) { + int best = 0; + double minDist = VERY_POSITIVE; + Vector srcv = Vector::From(src.redF(), src.greenF(), src.blueF()); + for(int i = 1; i < 256; i++) { + RgbaColor dst = RGBi(DRW::dxfColors[i][0], DRW::dxfColors[i][1], DRW::dxfColors[i][2]); + Vector dstv = Vector::From(dst.redF(), dst.greenF(), dst.blueF()); + double dist = srcv.Minus(dstv).Magnitude(); + if(dist < minDist || best == 0) { + best = i; + minDist = dist; + } + } + return best; + } + + void assignEntityDefaults(DRW_Entity *entity, hStyle hs) { + Style *s = Style::Get(hs); + RgbaColor color = s->Color(hs, true); + entity->color24 = color.ToPackedIntBGRA(); + entity->color = findDxfColor(color); + entity->layer = s->DescriptionString(); + entity->lineType = DxfFileWriter::lineTypeName(s->stippleType); + entity->ltypeScale = Style::StippleScaleMm(s->h); + entity->setWidthMm(Style::WidthMm(hs.v)); + } + + void assignDimensionDefaults(DRW_Dimension *dimension, hStyle hs) { + assignEntityDefaults(dimension, hs); + dimension->layer = "dimensions"; + } + + void writeLine(const Vector &p0, const Vector &p1, hStyle hs) { + DRW_Line line; + assignEntityDefaults(&line, hs); + line.basePoint = toCoord(p0); + line.secPoint = toCoord(p1); + dxf->writeLine(&line); + } + + void writeArc(const Vector &c, double r, double sa, double ea, hStyle hs) { + DRW_Arc arc; + assignEntityDefaults(&arc, hs); + arc.radious = r; + arc.basePoint = toCoord(c); + arc.staangle = sa; + arc.endangle = ea; + dxf->writeArc(&arc); + } + + void writeBezierAsPwl(SBezier *sb) { + List lv = {}; + sb->MakePwlInto(&lv, SS.ExportChordTolMm()); + hStyle hs = { (uint32_t)sb->auxA }; + DRW_LWPolyline polyline; + assignEntityDefaults(&polyline, hs); + for(int i = 0; i < lv.n; i++) { + Vector *v = &lv.elem[i]; + DRW_Vertex2D *vertex = new DRW_Vertex2D(); + vertex->x = v->x; + vertex->y = v->y; + polyline.vertlist.push_back(vertex); + } + dxf->writeLWPolyline(&polyline); + lv.Clear(); + } + + void makeKnotsFor(DRW_Spline *spline) { + // QCad/LibreCAD require this for some reason. + if(spline->degree == 3) { + spline->nknots = 8; + spline->knotslist.push_back(0.0); + spline->knotslist.push_back(0.0); + spline->knotslist.push_back(0.0); + spline->knotslist.push_back(0.0); + spline->knotslist.push_back(1.0); + spline->knotslist.push_back(1.0); + spline->knotslist.push_back(1.0); + spline->knotslist.push_back(1.0); + } else if(spline->degree == 2) { + spline->nknots = 6; + spline->knotslist.push_back(0.0); + spline->knotslist.push_back(0.0); + spline->knotslist.push_back(0.0); + spline->knotslist.push_back(1.0); + spline->knotslist.push_back(1.0); + spline->knotslist.push_back(1.0); + } else { + oops(); + } + } + + void writeSpline(SBezier *sb) { + bool isRational = sb->IsRational(); + hStyle hs = { (uint32_t)sb->auxA }; + DRW_Spline spline; + assignEntityDefaults(&spline, hs); + spline.flags = (isRational) ? 0x04 : 0x08; + spline.degree = sb->deg; + spline.ncontrol = sb->deg + 1; + makeKnotsFor(&spline); + for(int i = 0; i <= sb->deg; i++) { + spline.controllist.push_back(new DRW_Coord(sb->ctrl[i].x, sb->ctrl[i].y, 0.0)); + if(isRational) spline.weightlist.push_back(sb->weight[i]); + } + dxf->writeSpline(&spline); + } + + void writeBezier(SBezier *sb) { + hStyle hs = { (uint32_t)sb->auxA }; + Vector c; + Vector n = Vector::From(0.0, 0.0, 1.0); + double r; + + if(sb->deg == 1) { + // Line + writeLine(sb->ctrl[0], sb->ctrl[1], hs); + } else if(sb->IsInPlane(n, 0) && sb->IsCircle(n, &c, &r)) { + // Circle perpendicular to camera + double theta0 = atan2(sb->ctrl[0].y - c.y, sb->ctrl[0].x - c.x); + double theta1 = atan2(sb->ctrl[2].y - c.y, sb->ctrl[2].x - c.x); + double dtheta = WRAP_SYMMETRIC(theta1 - theta0, 2.0 * PI); + if(dtheta < 0.0) swap(theta0, theta1); + + writeArc(c, r, theta0, theta1, hs); + } else if(sb->IsRational()) { + // Rational bezier + // We'd like to export rational beziers exactly, but the resulting DXF + // files can only be read by AutoCAD; LibreCAD/QCad simply do not + // implement the feature. So, export as piecewise linear for compatiblity. + writeBezierAsPwl(sb); + } else { + // Any other curve + writeSpline(sb); + } + } + + void writeAlignedDimension(Vector def1, Vector def2, Vector dimp, + Vector textp, const std::string &text, hStyle hs, double actual) { + DRW_DimAligned dim; + assignDimensionDefaults(&dim, hs); + dim.setDef1Point(toCoord(def1)); + dim.setDef2Point(toCoord(def2)); + dim.setDimPoint(toCoord(dimp)); + dim.setTextPoint(toCoord(textp)); + dim.setText(text); + dim.setActualMeasurement(actual); + dxf->writeDimension(&dim); + } + + void writeLinearDimension(Vector def1, Vector def2, Vector dimp, + Vector textp, const std::string &text, + double angle, double oblique, hStyle hs, double actual) { + DRW_DimLinear dim; + assignDimensionDefaults(&dim, hs); + dim.setDef1Point(toCoord(def1)); + dim.setDef2Point(toCoord(def2)); + dim.setDimPoint(toCoord(dimp)); + dim.setTextPoint(toCoord(textp)); + dim.setText(text); + dim.setAngle(angle); + dim.setOblique(oblique); + dim.setActualMeasurement(actual); + dxf->writeDimension(&dim); + } + + void writeRadialDimension(Vector center, Vector radius, + Vector textp, const std::string &text, hStyle hs, double actual) { + DRW_DimRadial dim; + assignDimensionDefaults(&dim, hs); + dim.setCenterPoint(toCoord(center)); + dim.setDiameterPoint(toCoord(radius)); + dim.setTextPoint(toCoord(textp)); + dim.setText(text); + dim.setActualMeasurement(actual); + dxf->writeDimension(&dim); + } + + void writeDiametricDimension(Vector def1, Vector def2, + Vector textp, const std::string &text, hStyle hs, double actual) { + DRW_DimDiametric dim; + assignDimensionDefaults(&dim, hs); + dim.setDiameter1Point(toCoord(def1)); + dim.setDiameter2Point(toCoord(def2)); + dim.setTextPoint(toCoord(textp)); + dim.setText(text); + dim.setActualMeasurement(actual); + dxf->writeDimension(&dim); + } + + void writeAngularDimension(Vector fl1, Vector fl2, Vector sl1, Vector sl2, Vector dimp, + Vector textp, const std::string &text, hStyle hs, double actual) { + DRW_DimAngular dim; + assignDimensionDefaults(&dim, hs); + dim.setFirstLine1(toCoord(fl1)); + dim.setFirstLine2(toCoord(fl2)); + dim.setSecondLine1(toCoord(sl1)); + dim.setSecondLine2(toCoord(sl2)); + dim.setDimPoint(toCoord(dimp)); + dim.setTextPoint(toCoord(textp)); + dim.setText(text); + dim.setActualMeasurement(actual * PI / 180.0); + dxf->writeDimension(&dim); + } + + void writeText(Vector textp, const std::string &text, + double height, double angle, int origin, hStyle hs) { + DRW_Text txt; + assignEntityDefaults(&txt, hs); + txt.layer = "text"; + txt.style = "unicode"; + txt.basePoint = toCoord(textp); + txt.secPoint = txt.basePoint; + txt.text = text; + txt.height = height; + txt.angle = angle; + txt.alignH = DRW_Text::HCenter; + if(origin & Style::ORIGIN_LEFT) { + txt.alignH = DRW_Text::HLeft; + } else if(origin & Style::ORIGIN_RIGHT) { + txt.alignH = DRW_Text::HRight; + } + txt.alignV = DRW_Text::VMiddle; + if(origin & Style::ORIGIN_TOP) { + txt.alignV = DRW_Text::VTop; + } else if(origin & Style::ORIGIN_BOT) { + txt.alignV = DRW_Text::VBaseLine; + } + dxf->writeText(&txt); + } +}; + +bool DxfFileWriter::OutputConstraints(IdList *constraint) { + this->constraint = constraint; + return true; +} + +void DxfFileWriter::StartFile(void) { + paths.clear(); +} + +void DxfFileWriter::StartPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ + BezierPath path = {}; + paths.push_back(path); +} +void DxfFileWriter::FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ +} + +void DxfFileWriter::Triangle(STriangle *tr) { +} + +void DxfFileWriter::Bezier(SBezier *sb) { + paths.back().beziers.push_back(sb); +} + +void DxfFileWriter::FinishAndCloseFile(void) { + dxfRW dxf(filename.c_str()); + DxfWriteInterface interface(this, &dxf); + dxf.write(&interface, DRW::AC1021, false); + paths.clear(); + constraint = NULL; +} + +bool DxfFileWriter::NeedToOutput(Constraint *c) { + switch(c->type) { + case Constraint::PT_PT_DISTANCE: + case Constraint::PT_LINE_DISTANCE: + case Constraint::DIAMETER: + case Constraint::ANGLE: + case Constraint::COMMENT: + return c->IsVisible(); + } + return false; +} + +const char *DxfFileWriter::lineTypeName(int stippleType) { + switch(stippleType) { + case Style::STIPPLE_CONTINUOUS: return "CONTINUOUS"; + case Style::STIPPLE_DASH: return "DASHED"; + case Style::STIPPLE_LONG_DASH: return "DASHEDX2"; + case Style::STIPPLE_DASH_DOT: return "DASHDOT"; + case Style::STIPPLE_DASH_DOT_DOT: return "DIVIDE"; + case Style::STIPPLE_DOT: return "DOT"; + case Style::STIPPLE_FREEHAND: return "CONTINUOUS"; + case Style::STIPPLE_ZIGZAG: return "CONTINUOUS"; + } + + return "CONTINUOUS"; +} + +//----------------------------------------------------------------------------- +// Routines for EPS output +//----------------------------------------------------------------------------- + +static std::string MakeStipplePattern(int pattern, double scale, char delimiter, + bool inkscapeWorkaround = false) { + scale /= 2.0; + + // Inkscape ignores all elements that are exactly zero instead of drawing + // them as dots. + double zero = inkscapeWorkaround ? 1e-6 : 0; + + std::string result; + switch(pattern) { + case Style::STIPPLE_CONTINUOUS: + case Style::STIPPLE_FREEHAND: + case Style::STIPPLE_ZIGZAG: + return ""; + + case Style::STIPPLE_DASH: + result = ssprintf("%.3f_%.3f", scale, scale); + break; + case Style::STIPPLE_DASH_DOT: + result = ssprintf("%.3f_%.3f_%.6f_%.3f", + scale, scale * 0.5, zero, scale * 0.5); + break; + case Style::STIPPLE_DASH_DOT_DOT: + result = ssprintf("%.3f_%.3f_%.6f_%.3f_%.6f_%.3f", + scale, scale * 0.5, zero, + scale * 0.5, scale * 0.5, zero); + break; + case Style::STIPPLE_DOT: + result = ssprintf("%.6f_%.3f", zero, scale * 0.5); + break; + case Style::STIPPLE_LONG_DASH: + result = ssprintf("%.3f_%.3f", scale * 2.0, scale * 0.5); + break; + + default: + oops(); + } + std::replace(result.begin(), result.end(), '_', delimiter); + return result; +} + +void EpsFileWriter::StartFile(void) { + fprintf(f, +"%%!PS-Adobe-2.0\r\n" +"%%%%Creator: SolveSpace\r\n" +"%%%%Title: title\r\n" +"%%%%Pages: 0\r\n" +"%%%%PageOrder: Ascend\r\n" +"%%%%BoundingBox: 0 0 %d %d\r\n" +"%%%%HiResBoundingBox: 0 0 %.3f %.3f\r\n" +"%%%%EndComments\r\n" +"\r\n" +"gsave\r\n" +"\r\n", + (int)ceil(MmToPts(ptMax.x - ptMin.x)), + (int)ceil(MmToPts(ptMax.y - ptMin.y)), + MmToPts(ptMax.x - ptMin.x), + MmToPts(ptMax.y - ptMin.y)); +} + +void EpsFileWriter::StartPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ + fprintf(f, "newpath\r\n"); + prevPt = Vector::From(VERY_POSITIVE, VERY_POSITIVE, VERY_POSITIVE); +} +void EpsFileWriter::FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ + int pattern = Style::PatternType(hs); + double stippleScale = MmToPts(Style::StippleScaleMm(hs)); + + fprintf(f, " %.3f setlinewidth\r\n" + " %.3f %.3f %.3f setrgbcolor\r\n" + " 1 setlinejoin\r\n" // rounded + " 1 setlinecap\r\n" // rounded + " [%s] 0 setdash\r\n" + " gsave stroke grestore\r\n", + MmToPts(lineWidth), + strokeRgb.redF(), strokeRgb.greenF(), strokeRgb.blueF(), + MakeStipplePattern(pattern, stippleScale, ' ').c_str() + ); + if(filled) { + fprintf(f, " %.3f %.3f %.3f setrgbcolor\r\n" + " gsave fill grestore\r\n", + fillRgb.redF(), fillRgb.greenF(), fillRgb.blueF()); + } +} + +void EpsFileWriter::MaybeMoveTo(Vector st, Vector fi) { + if(!prevPt.Equals(st)) { + fprintf(f, " %.3f %.3f moveto\r\n", + MmToPts(st.x - ptMin.x), MmToPts(st.y - ptMin.y)); + } + prevPt = fi; +} + +void EpsFileWriter::Triangle(STriangle *tr) { + fprintf(f, +"%.3f %.3f %.3f setrgbcolor\r\n" +"newpath\r\n" +" %.3f %.3f moveto\r\n" +" %.3f %.3f lineto\r\n" +" %.3f %.3f lineto\r\n" +" closepath\r\n" +"gsave fill grestore\r\n", + tr->meta.color.redF(), tr->meta.color.greenF(), tr->meta.color.blueF(), + MmToPts(tr->a.x - ptMin.x), MmToPts(tr->a.y - ptMin.y), + MmToPts(tr->b.x - ptMin.x), MmToPts(tr->b.y - ptMin.y), + MmToPts(tr->c.x - ptMin.x), MmToPts(tr->c.y - ptMin.y)); + + // same issue with cracks, stroke it to avoid them + double sw = max(ptMax.x - ptMin.x, ptMax.y - ptMin.y) / 1000; + fprintf(f, +"1 setlinejoin\r\n" +"1 setlinecap\r\n" +"%.3f setlinewidth\r\n" +"gsave stroke grestore\r\n", + MmToPts(sw)); +} + +void EpsFileWriter::Bezier(SBezier *sb) { + Vector c, n = Vector::From(0, 0, 1); + double r; + if(sb->deg == 1) { + MaybeMoveTo(sb->ctrl[0], sb->ctrl[1]); + fprintf(f, " %.3f %.3f lineto\r\n", + MmToPts(sb->ctrl[1].x - ptMin.x), + MmToPts(sb->ctrl[1].y - ptMin.y)); + } else if(sb->IsCircle(n, &c, &r)) { + Vector p0 = sb->ctrl[0], p1 = sb->ctrl[2]; + double theta0 = atan2(p0.y - c.y, p0.x - c.x), + theta1 = atan2(p1.y - c.y, p1.x - c.x), + dtheta = WRAP_SYMMETRIC(theta1 - theta0, 2*PI); + MaybeMoveTo(p0, p1); + fprintf(f, +" %.3f %.3f %.3f %.3f %.3f %s\r\n", + MmToPts(c.x - ptMin.x), MmToPts(c.y - ptMin.y), + MmToPts(r), + theta0*180/PI, theta1*180/PI, + dtheta < 0 ? "arcn" : "arc"); + } else if(sb->deg == 3 && !sb->IsRational()) { + MaybeMoveTo(sb->ctrl[0], sb->ctrl[3]); + fprintf(f, +" %.3f %.3f %.3f %.3f %.3f %.3f curveto\r\n", + MmToPts(sb->ctrl[1].x - ptMin.x), MmToPts(sb->ctrl[1].y - ptMin.y), + MmToPts(sb->ctrl[2].x - ptMin.x), MmToPts(sb->ctrl[2].y - ptMin.y), + MmToPts(sb->ctrl[3].x - ptMin.x), MmToPts(sb->ctrl[3].y - ptMin.y)); + } else { + BezierAsNonrationalCubic(sb); + } +} + +void EpsFileWriter::FinishAndCloseFile(void) { + fprintf(f, +"\r\n" +"grestore\r\n" +"\r\n"); + fclose(f); +} + +//----------------------------------------------------------------------------- +// Routines for PDF output, some extra complexity because we have to generate +// a correct xref table. +//----------------------------------------------------------------------------- +void PdfFileWriter::StartFile(void) { + if((ptMax.x - ptMin.x) > 200*25.4 || + (ptMax.y - ptMin.y) > 200*25.4) + { + Message("PDF page size exceeds 200 by 200 inches; many viewers may " + "reject this file."); + } + + fprintf(f, +"%%PDF-1.1\r\n" +"%%%c%c%c%c\r\n", + 0xe2, 0xe3, 0xcf, 0xd3); + + xref[1] = (uint32_t)ftell(f); + fprintf(f, +"1 0 obj\r\n" +" << /Type /Catalog\r\n" +" /Outlines 2 0 R\r\n" +" /Pages 3 0 R\r\n" +" >>\r\n" +"endobj\r\n"); + + xref[2] = (uint32_t)ftell(f); + fprintf(f, +"2 0 obj\r\n" +" << /Type /Outlines\r\n" +" /Count 0\r\n" +" >>\r\n" +"endobj\r\n"); + + xref[3] = (uint32_t)ftell(f); + fprintf(f, +"3 0 obj\r\n" +" << /Type /Pages\r\n" +" /Kids [4 0 R]\r\n" +" /Count 1\r\n" +" >>\r\n" +"endobj\r\n"); + + xref[4] = (uint32_t)ftell(f); + fprintf(f, +"4 0 obj\r\n" +" << /Type /Page\r\n" +" /Parent 3 0 R\r\n" +" /MediaBox [0 0 %.3f %.3f]\r\n" +" /Contents 5 0 R\r\n" +" /Resources << /ProcSet 7 0 R\r\n" +" /Font << /F1 8 0 R >>\r\n" +" >>\r\n" +" >>\r\n" +"endobj\r\n", + MmToPts(ptMax.x - ptMin.x), + MmToPts(ptMax.y - ptMin.y)); + + xref[5] = (uint32_t)ftell(f); + fprintf(f, +"5 0 obj\r\n" +" << /Length 6 0 R >>\r\n" +"stream\r\n"); + bodyStart = (uint32_t)ftell(f); +} + +void PdfFileWriter::FinishAndCloseFile(void) { + uint32_t bodyEnd = (uint32_t)ftell(f); + + fprintf(f, +"endstream\r\n" +"endobj\r\n"); + + xref[6] = (uint32_t)ftell(f); + fprintf(f, +"6 0 obj\r\n" +" %d\r\n" +"endobj\r\n", + bodyEnd - bodyStart); + + xref[7] = (uint32_t)ftell(f); + fprintf(f, +"7 0 obj\r\n" +" [/PDF /Text]\r\n" +"endobj\r\n"); + + xref[8] = (uint32_t)ftell(f); + fprintf(f, +"8 0 obj\r\n" +" << /Type /Font\r\n" +" /Subtype /Type1\r\n" +" /Name /F1\r\n" +" /BaseFont /Helvetica\r\n" +" /Encoding /WinAnsiEncoding\r\n" +" >>\r\n" +"endobj\r\n"); + + xref[9] = (uint32_t)ftell(f); + fprintf(f, +"9 0 obj\r\n" +" << /Creator (SolveSpace)\r\n" +" >>\r\n"); + + uint32_t xrefStart = (uint32_t)ftell(f); + fprintf(f, +"xref\r\n" +"0 10\r\n" +"0000000000 65535 f\r\n"); + + int i; + for(i = 1; i <= 9; i++) { + fprintf(f, "%010d %05d n\r\n", xref[i], 0); + } + + fprintf(f, +"\r\n" +"trailer\r\n" +" << /Size 10\r\n" +" /Root 1 0 R\r\n" +" /Info 9 0 R\r\n" +" >>\r\n" +"startxref\r\n" +"%d\r\n" +"%%%%EOF\r\n", + xrefStart); + + fclose(f); + +} + +void PdfFileWriter::StartPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ + int pattern = Style::PatternType(hs); + double stippleScale = MmToPts(Style::StippleScaleMm(hs)); + + fprintf(f, "1 J 1 j " // round endcaps and joins + "%.3f w [%s] 0 d " + "%.3f %.3f %.3f RG\r\n", + MmToPts(lineWidth), + MakeStipplePattern(pattern, stippleScale, ' ').c_str(), + strokeRgb.redF(), strokeRgb.greenF(), strokeRgb.blueF()); + if(filled) { + fprintf(f, "%.3f %.3f %.3f rg\r\n", + fillRgb.redF(), fillRgb.greenF(), fillRgb.blueF()); + } + + prevPt = Vector::From(VERY_POSITIVE, VERY_POSITIVE, VERY_POSITIVE); +} +void PdfFileWriter::FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ + if(filled) { + fprintf(f, "b\r\n"); + } else { + fprintf(f, "S\r\n"); + } +} + +void PdfFileWriter::MaybeMoveTo(Vector st, Vector fi) { + if(!prevPt.Equals(st)) { + fprintf(f, "%.3f %.3f m\r\n", + MmToPts(st.x - ptMin.x), MmToPts(st.y - ptMin.y)); + } + prevPt = fi; +} + +void PdfFileWriter::Triangle(STriangle *tr) { + double sw = max(ptMax.x - ptMin.x, ptMax.y - ptMin.y) / 1000; + + fprintf(f, +"1 J 1 j\r\n" +"%.3f %.3f %.3f RG\r\n" +"%.3f %.3f %.3f rg\r\n" +"%.3f w\r\n" +"%.3f %.3f m\r\n" +"%.3f %.3f l\r\n" +"%.3f %.3f l\r\n" +"b\r\n", + tr->meta.color.redF(), tr->meta.color.greenF(), tr->meta.color.blueF(), + tr->meta.color.redF(), tr->meta.color.greenF(), tr->meta.color.blueF(), + MmToPts(sw), + MmToPts(tr->a.x - ptMin.x), MmToPts(tr->a.y - ptMin.y), + MmToPts(tr->b.x - ptMin.x), MmToPts(tr->b.y - ptMin.y), + MmToPts(tr->c.x - ptMin.x), MmToPts(tr->c.y - ptMin.y)); +} + +void PdfFileWriter::Bezier(SBezier *sb) { + if(sb->deg == 1) { + MaybeMoveTo(sb->ctrl[0], sb->ctrl[1]); + fprintf(f, +"%.3f %.3f l\r\n", + MmToPts(sb->ctrl[1].x - ptMin.x), MmToPts(sb->ctrl[1].y - ptMin.y)); + } else if(sb->deg == 3 && !sb->IsRational()) { + MaybeMoveTo(sb->ctrl[0], sb->ctrl[3]); + fprintf(f, +"%.3f %.3f %.3f %.3f %.3f %.3f c\r\n", + MmToPts(sb->ctrl[1].x - ptMin.x), MmToPts(sb->ctrl[1].y - ptMin.y), + MmToPts(sb->ctrl[2].x - ptMin.x), MmToPts(sb->ctrl[2].y - ptMin.y), + MmToPts(sb->ctrl[3].x - ptMin.x), MmToPts(sb->ctrl[3].y - ptMin.y)); + } else { + BezierAsNonrationalCubic(sb); + } +} + +//----------------------------------------------------------------------------- +// Routines for SVG output +//----------------------------------------------------------------------------- +void SvgFileWriter::StartFile(void) { + fprintf(f, +"\r\n" +"\r\n" +"\r\n" +"Exported SVG\r\n" +"\r\n", + (ptMax.x - ptMin.x), (ptMax.y - ptMin.y), + (ptMax.x - ptMin.x), (ptMax.y - ptMin.y)); + + fprintf(f, "\r\n"); +} + +void SvgFileWriter::StartPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ + fprintf(f, "\r\n", cls.c_str(), fill.c_str()); +} + +void SvgFileWriter::MaybeMoveTo(Vector st, Vector fi) { + // SVG uses a coordinate system with the origin at top left, +y down + if(!prevPt.Equals(st)) { + fprintf(f, "M%.3f %.3f ", (st.x - ptMin.x), (ptMax.y - st.y)); + } + prevPt = fi; +} + +void SvgFileWriter::Triangle(STriangle *tr) { + fprintf(f, +"\r\n", + (tr->a.x - ptMin.x), (ptMax.y - tr->a.y), + (tr->b.x - ptMin.x), (ptMax.y - tr->b.y), + (tr->c.x - ptMin.x), (ptMax.y - tr->c.y), + tr->meta.color.red, tr->meta.color.green, tr->meta.color.blue, + tr->meta.color.red, tr->meta.color.green, tr->meta.color.blue); +} + +void SvgFileWriter::Bezier(SBezier *sb) { + Vector c, n = Vector::From(0, 0, 1); + double r; + if(sb->deg == 1) { + MaybeMoveTo(sb->ctrl[0], sb->ctrl[1]); + fprintf(f, "L%.3f,%.3f ", + (sb->ctrl[1].x - ptMin.x), (ptMax.y - sb->ctrl[1].y)); + } else if(sb->IsCircle(n, &c, &r)) { + Vector p0 = sb->ctrl[0], p1 = sb->ctrl[2]; + double theta0 = atan2(p0.y - c.y, p0.x - c.x), + theta1 = atan2(p1.y - c.y, p1.x - c.x), + dtheta = WRAP_SYMMETRIC(theta1 - theta0, 2*PI); + // The arc must be less than 180 degrees, or else it couldn't have + // been represented as a single rational Bezier. So large-arc-flag + // must be false. sweep-flag is determined by the sign of dtheta. + // Note that clockwise and counter-clockwise are backwards in SVG's + // mirrored csys. + MaybeMoveTo(p0, p1); + fprintf(f, "A%.3f,%.3f 0 0,%d %.3f,%.3f ", + r, r, + (dtheta < 0) ? 1 : 0, + p1.x - ptMin.x, ptMax.y - p1.y); + } else if(!sb->IsRational()) { + if(sb->deg == 2) { + MaybeMoveTo(sb->ctrl[0], sb->ctrl[2]); + fprintf(f, "Q%.3f,%.3f %.3f,%.3f ", + sb->ctrl[1].x - ptMin.x, ptMax.y - sb->ctrl[1].y, + sb->ctrl[2].x - ptMin.x, ptMax.y - sb->ctrl[2].y); + } else if(sb->deg == 3) { + MaybeMoveTo(sb->ctrl[0], sb->ctrl[3]); + fprintf(f, "C%.3f,%.3f %.3f,%.3f %.3f,%.3f ", + sb->ctrl[1].x - ptMin.x, ptMax.y - sb->ctrl[1].y, + sb->ctrl[2].x - ptMin.x, ptMax.y - sb->ctrl[2].y, + sb->ctrl[3].x - ptMin.x, ptMax.y - sb->ctrl[3].y); + } + } else { + BezierAsNonrationalCubic(sb); + } +} + +void SvgFileWriter::FinishAndCloseFile(void) { + fprintf(f, "\r\n\r\n"); + fclose(f); +} + +//----------------------------------------------------------------------------- +// Routines for HPGL output +//----------------------------------------------------------------------------- +double HpglFileWriter::MmToHpglUnits(double mm) { + return mm*40; +} + +void HpglFileWriter::StartFile(void) { + fprintf(f, "IN;\r\n"); + fprintf(f, "SP1;\r\n"); +} + +void HpglFileWriter::StartPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ +} +void HpglFileWriter::FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ +} + +void HpglFileWriter::Triangle(STriangle *tr) { +} + +void HpglFileWriter::Bezier(SBezier *sb) { + if(sb->deg == 1) { + fprintf(f, "PU%d,%d;\r\n", + (int)MmToHpglUnits(sb->ctrl[0].x), + (int)MmToHpglUnits(sb->ctrl[0].y)); + fprintf(f, "PD%d,%d;\r\n", + (int)MmToHpglUnits(sb->ctrl[1].x), + (int)MmToHpglUnits(sb->ctrl[1].y)); + } else { + BezierAsPwl(sb); + } +} + +void HpglFileWriter::FinishAndCloseFile(void) { + fclose(f); +} + +//----------------------------------------------------------------------------- +// Routines for G Code output. Slightly complicated by our ability to generate +// multiple passes, and to specify the feeds and depth; those parameters get +// set in the configuration screen. +//----------------------------------------------------------------------------- +void GCodeFileWriter::StartFile(void) { + sel = {}; +} +void GCodeFileWriter::StartPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ +} +void GCodeFileWriter::FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ +} +void GCodeFileWriter::Triangle(STriangle *tr) { +} + +void GCodeFileWriter::Bezier(SBezier *sb) { + if(sb->deg == 1) { + sel.AddEdge(sb->ctrl[0], sb->ctrl[1]); + } else { + BezierAsPwl(sb); + } +} + +void GCodeFileWriter::FinishAndCloseFile(void) { + SPolygon sp = {}; + sel.AssemblePolygon(&sp, NULL); + + int i; + for(i = 0; i < SS.gCode.passes; i++) { + double depth = (SS.gCode.depth / SS.gCode.passes)*(i+1); + + SContour *sc; + for(sc = sp.l.First(); sc; sc = sp.l.NextAfter(sc)) { + if(sc->l.n < 2) continue; + + SPoint *pt = sc->l.First(); + fprintf(f, "G00 X%s Y%s\r\n", + SS.MmToString(pt->p.x).c_str(), SS.MmToString(pt->p.y).c_str()); + fprintf(f, "G01 Z%s F%s\r\n", + SS.MmToString(depth).c_str(), SS.MmToString(SS.gCode.plungeFeed).c_str()); + + pt = sc->l.NextAfter(pt); + for(; pt; pt = sc->l.NextAfter(pt)) { + fprintf(f, "G01 X%s Y%s F%s\r\n", + SS.MmToString(pt->p.x).c_str(), SS.MmToString(pt->p.y).c_str(), + SS.MmToString(SS.gCode.feed).c_str()); + } + // Move up to a clearance plane 5mm above the work. + fprintf(f, "G00 Z%s\r\n", + SS.MmToString(SS.gCode.depth < 0 ? +5 : -5).c_str()); + } + } + + sp.Clear(); + sel.Clear(); + fclose(f); +} + + +//----------------------------------------------------------------------------- +// Routine for STEP output; just a wrapper around the general STEP stuff that +// can also be used for surfaces or 3d curves. +//----------------------------------------------------------------------------- +void Step2dFileWriter::StartFile(void) { + sfw = {}; + sfw.f = f; + sfw.WriteHeader(); +} + +void Step2dFileWriter::Triangle(STriangle *tr) { +} + +void Step2dFileWriter::StartPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ +} +void Step2dFileWriter::FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ +} + +void Step2dFileWriter::Bezier(SBezier *sb) { + int c = sfw.ExportCurve(sb); + sfw.curves.Add(&c); +} + +void Step2dFileWriter::FinishAndCloseFile(void) { + sfw.WriteWireframe(); + sfw.WriteFooter(); + fclose(f); +} + diff --git a/src/expr.cpp b/src/expr.cpp new file mode 100644 index 0000000..52e06b0 --- /dev/null +++ b/src/expr.cpp @@ -0,0 +1,808 @@ +//----------------------------------------------------------------------------- +// The symbolic algebra system used to write our constraint equations; +// routines to build expressions in software or from a user-provided string, +// and to compute the partial derivatives that we'll use when write our +// Jacobian matrix. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +ExprVector ExprVector::From(Expr *x, Expr *y, Expr *z) { + ExprVector r = { x, y, z}; + return r; +} + +ExprVector ExprVector::From(Vector vn) { + ExprVector ve; + ve.x = Expr::From(vn.x); + ve.y = Expr::From(vn.y); + ve.z = Expr::From(vn.z); + return ve; +} + +ExprVector ExprVector::From(hParam x, hParam y, hParam z) { + ExprVector ve; + ve.x = Expr::From(x); + ve.y = Expr::From(y); + ve.z = Expr::From(z); + return ve; +} + +ExprVector ExprVector::From(double x, double y, double z) { + ExprVector ve; + ve.x = Expr::From(x); + ve.y = Expr::From(y); + ve.z = Expr::From(z); + return ve; +} + +ExprVector ExprVector::Minus(ExprVector b) { + ExprVector r; + r.x = x->Minus(b.x); + r.y = y->Minus(b.y); + r.z = z->Minus(b.z); + return r; +} + +ExprVector ExprVector::Plus(ExprVector b) { + ExprVector r; + r.x = x->Plus(b.x); + r.y = y->Plus(b.y); + r.z = z->Plus(b.z); + return r; +} + +Expr *ExprVector::Dot(ExprVector b) { + Expr *r; + r = x->Times(b.x); + r = r->Plus(y->Times(b.y)); + r = r->Plus(z->Times(b.z)); + return r; +} + +ExprVector ExprVector::Cross(ExprVector b) { + ExprVector r; + r.x = (y->Times(b.z))->Minus(z->Times(b.y)); + r.y = (z->Times(b.x))->Minus(x->Times(b.z)); + r.z = (x->Times(b.y))->Minus(y->Times(b.x)); + return r; +} + +ExprVector ExprVector::ScaledBy(Expr *s) { + ExprVector r; + r.x = x->Times(s); + r.y = y->Times(s); + r.z = z->Times(s); + return r; +} + +ExprVector ExprVector::WithMagnitude(Expr *s) { + Expr *m = Magnitude(); + return ScaledBy(s->Div(m)); +} + +Expr *ExprVector::Magnitude(void) { + Expr *r; + r = x->Square(); + r = r->Plus(y->Square()); + r = r->Plus(z->Square()); + return r->Sqrt(); +} + +Vector ExprVector::Eval(void) { + Vector r; + r.x = x->Eval(); + r.y = y->Eval(); + r.z = z->Eval(); + return r; +} + +ExprQuaternion ExprQuaternion::From(hParam w, hParam vx, hParam vy, hParam vz) { + ExprQuaternion q; + q.w = Expr::From(w); + q.vx = Expr::From(vx); + q.vy = Expr::From(vy); + q.vz = Expr::From(vz); + return q; +} + +ExprQuaternion ExprQuaternion::From(Expr *w, Expr *vx, Expr *vy, Expr *vz) +{ + ExprQuaternion q; + q.w = w; + q.vx = vx; + q.vy = vy; + q.vz = vz; + return q; +} + +ExprQuaternion ExprQuaternion::From(Quaternion qn) { + ExprQuaternion qe; + qe.w = Expr::From(qn.w); + qe.vx = Expr::From(qn.vx); + qe.vy = Expr::From(qn.vy); + qe.vz = Expr::From(qn.vz); + return qe; +} + +ExprVector ExprQuaternion::RotationU(void) { + ExprVector u; + Expr *two = Expr::From(2); + + u.x = w->Square(); + u.x = (u.x)->Plus(vx->Square()); + u.x = (u.x)->Minus(vy->Square()); + u.x = (u.x)->Minus(vz->Square()); + + u.y = two->Times(w->Times(vz)); + u.y = (u.y)->Plus(two->Times(vx->Times(vy))); + + u.z = two->Times(vx->Times(vz)); + u.z = (u.z)->Minus(two->Times(w->Times(vy))); + + return u; +} + +ExprVector ExprQuaternion::RotationV(void) { + ExprVector v; + Expr *two = Expr::From(2); + + v.x = two->Times(vx->Times(vy)); + v.x = (v.x)->Minus(two->Times(w->Times(vz))); + + v.y = w->Square(); + v.y = (v.y)->Minus(vx->Square()); + v.y = (v.y)->Plus(vy->Square()); + v.y = (v.y)->Minus(vz->Square()); + + v.z = two->Times(w->Times(vx)); + v.z = (v.z)->Plus(two->Times(vy->Times(vz))); + + return v; +} + +ExprVector ExprQuaternion::RotationN(void) { + ExprVector n; + Expr *two = Expr::From(2); + + n.x = two->Times( w->Times(vy)); + n.x = (n.x)->Plus (two->Times(vx->Times(vz))); + + n.y = two->Times(vy->Times(vz)); + n.y = (n.y)->Minus(two->Times( w->Times(vx))); + + n.z = w->Square(); + n.z = (n.z)->Minus(vx->Square()); + n.z = (n.z)->Minus(vy->Square()); + n.z = (n.z)->Plus (vz->Square()); + + return n; +} + +ExprVector ExprQuaternion::Rotate(ExprVector p) { + // Express the point in the new basis + return (RotationU().ScaledBy(p.x)).Plus( + RotationV().ScaledBy(p.y)).Plus( + RotationN().ScaledBy(p.z)); +} + +ExprQuaternion ExprQuaternion::Times(ExprQuaternion b) { + Expr *sa = w, *sb = b.w; + ExprVector va = { vx, vy, vz }; + ExprVector vb = { b.vx, b.vy, b.vz }; + + ExprQuaternion r; + r.w = (sa->Times(sb))->Minus(va.Dot(vb)); + ExprVector vr = vb.ScaledBy(sa).Plus( + va.ScaledBy(sb).Plus( + va.Cross(vb))); + r.vx = vr.x; + r.vy = vr.y; + r.vz = vr.z; + return r; +} + +Expr *ExprQuaternion::Magnitude(void) { + return ((w ->Square())->Plus( + (vx->Square())->Plus( + (vy->Square())->Plus( + (vz->Square())))))->Sqrt(); +} + + +Expr *Expr::From(hParam p) { + Expr *r = AllocExpr(); + r->op = PARAM; + r->parh = p; + return r; +} + +Expr *Expr::From(double v) { + // Statically allocate common constants. + // Note: this is only valid because AllocExpr() uses AllocTemporary(), + // and Expr* is never explicitly freed. + + if(v == 0.0) { + static Expr zero(0.0); + return &zero; + } + + if(v == 1.0) { + static Expr one(1.0); + return &one; + } + + if(v == -1.0) { + static Expr mone(-1.0); + return &mone; + } + + if(v == 0.5) { + static Expr half(0.5); + return ½ + } + + if(v == -0.5) { + static Expr mhalf(-0.5); + return &mhalf; + } + + Expr *r = AllocExpr(); + r->op = CONSTANT; + r->v = v; + return r; +} + +Expr *Expr::AnyOp(int newOp, Expr *b) { + Expr *r = AllocExpr(); + r->op = newOp; + r->a = this; + r->b = b; + return r; +} + +int Expr::Children(void) { + switch(op) { + case PARAM: + case PARAM_PTR: + case CONSTANT: + return 0; + + case PLUS: + case MINUS: + case TIMES: + case DIV: + return 2; + + case NEGATE: + case SQRT: + case SQUARE: + case SIN: + case COS: + case ASIN: + case ACOS: + return 1; + + default: oops(); + } +} + +int Expr::Nodes(void) { + switch(Children()) { + case 0: return 1; + case 1: return 1 + a->Nodes(); + case 2: return 1 + a->Nodes() + b->Nodes(); + default: oops(); + } +} + +Expr *Expr::DeepCopy(void) { + Expr *n = AllocExpr(); + *n = *this; + int c = n->Children(); + if(c > 0) n->a = a->DeepCopy(); + if(c > 1) n->b = b->DeepCopy(); + return n; +} + +Expr *Expr::DeepCopyWithParamsAsPointers(IdList *firstTry, + IdList *thenTry) +{ + Expr *n = AllocExpr(); + if(op == PARAM) { + // A param that is referenced by its hParam gets rewritten to go + // straight in to the parameter table with a pointer, or simply + // into a constant if it's already known. + Param *p = firstTry->FindByIdNoOops(parh); + if(!p) p = thenTry->FindById(parh); + if(p->known) { + n->op = CONSTANT; + n->v = p->val; + } else { + n->op = PARAM_PTR; + n->parp = p; + } + return n; + } + + *n = *this; + int c = n->Children(); + if(c > 0) n->a = a->DeepCopyWithParamsAsPointers(firstTry, thenTry); + if(c > 1) n->b = b->DeepCopyWithParamsAsPointers(firstTry, thenTry); + return n; +} + +double Expr::Eval(void) { + switch(op) { + case PARAM: return SK.GetParam(parh)->val; + case PARAM_PTR: return parp->val; + + case CONSTANT: return v; + + case PLUS: return a->Eval() + b->Eval(); + case MINUS: return a->Eval() - b->Eval(); + case TIMES: return a->Eval() * b->Eval(); + case DIV: return a->Eval() / b->Eval(); + + case NEGATE: return -(a->Eval()); + case SQRT: return sqrt(a->Eval()); + case SQUARE: { double r = a->Eval(); return r*r; } + case SIN: return sin(a->Eval()); + case COS: return cos(a->Eval()); + case ACOS: return acos(a->Eval()); + case ASIN: return asin(a->Eval()); + + default: oops(); + } +} + +Expr *Expr::PartialWrt(hParam p) { + Expr *da, *db; + + switch(op) { + case PARAM_PTR: return From(p.v == parp->h.v ? 1 : 0); + case PARAM: return From(p.v == parh.v ? 1 : 0); + + case CONSTANT: return From(0.0); + + case PLUS: return (a->PartialWrt(p))->Plus(b->PartialWrt(p)); + case MINUS: return (a->PartialWrt(p))->Minus(b->PartialWrt(p)); + + case TIMES: + da = a->PartialWrt(p); + db = b->PartialWrt(p); + return (a->Times(db))->Plus(b->Times(da)); + + case DIV: + da = a->PartialWrt(p); + db = b->PartialWrt(p); + return ((da->Times(b))->Minus(a->Times(db)))->Div(b->Square()); + + case SQRT: + return (From(0.5)->Div(a->Sqrt()))->Times(a->PartialWrt(p)); + + case SQUARE: + return (From(2.0)->Times(a))->Times(a->PartialWrt(p)); + + case NEGATE: return (a->PartialWrt(p))->Negate(); + case SIN: return (a->Cos())->Times(a->PartialWrt(p)); + case COS: return ((a->Sin())->Times(a->PartialWrt(p)))->Negate(); + + case ASIN: + return (From(1)->Div((From(1)->Minus(a->Square()))->Sqrt())) + ->Times(a->PartialWrt(p)); + case ACOS: + return (From(-1)->Div((From(1)->Minus(a->Square()))->Sqrt())) + ->Times(a->PartialWrt(p)); + + default: oops(); + } +} + +uint64_t Expr::ParamsUsed(void) { + uint64_t r = 0; + if(op == PARAM) r |= ((uint64_t)1 << (parh.v % 61)); + if(op == PARAM_PTR) r |= ((uint64_t)1 << (parp->h.v % 61)); + + int c = Children(); + if(c >= 1) r |= a->ParamsUsed(); + if(c >= 2) r |= b->ParamsUsed(); + return r; +} + +bool Expr::DependsOn(hParam p) { + if(op == PARAM) return (parh.v == p.v); + if(op == PARAM_PTR) return (parp->h.v == p.v); + + int c = Children(); + if(c == 1) return a->DependsOn(p); + if(c == 2) return a->DependsOn(p) || b->DependsOn(p); + return false; +} + +bool Expr::Tol(double a, double b) { + return fabs(a - b) < 0.001; +} +Expr *Expr::FoldConstants(void) { + Expr *n = AllocExpr(); + *n = *this; + + int c = Children(); + if(c >= 1) n->a = a->FoldConstants(); + if(c >= 2) n->b = b->FoldConstants(); + + switch(op) { + case PARAM_PTR: + case PARAM: + case CONSTANT: + break; + + case MINUS: + case TIMES: + case DIV: + case PLUS: + // If both ops are known, then we can evaluate immediately + if(n->a->op == CONSTANT && n->b->op == CONSTANT) { + double nv = n->Eval(); + n->op = CONSTANT; + n->v = nv; + break; + } + // x + 0 = 0 + x = x + if(op == PLUS && n->b->op == CONSTANT && Tol(n->b->v, 0)) { + *n = *(n->a); break; + } + if(op == PLUS && n->a->op == CONSTANT && Tol(n->a->v, 0)) { + *n = *(n->b); break; + } + // 1*x = x*1 = x + if(op == TIMES && n->b->op == CONSTANT && Tol(n->b->v, 1)) { + *n = *(n->a); break; + } + if(op == TIMES && n->a->op == CONSTANT && Tol(n->a->v, 1)) { + *n = *(n->b); break; + } + // 0*x = x*0 = 0 + if(op == TIMES && n->b->op == CONSTANT && Tol(n->b->v, 0)) { + n->op = CONSTANT; n->v = 0; break; + } + if(op == TIMES && n->a->op == CONSTANT && Tol(n->a->v, 0)) { + n->op = CONSTANT; n->v = 0; break; + } + + break; + + case SQRT: + case SQUARE: + case NEGATE: + case SIN: + case COS: + case ASIN: + case ACOS: + if(n->a->op == CONSTANT) { + double nv = n->Eval(); + n->op = CONSTANT; + n->v = nv; + } + break; + + default: oops(); + } + return n; +} + +void Expr::Substitute(hParam oldh, hParam newh) { + if(op == PARAM_PTR) oops(); + + if(op == PARAM && parh.v == oldh.v) { + parh = newh; + } + int c = Children(); + if(c >= 1) a->Substitute(oldh, newh); + if(c >= 2) b->Substitute(oldh, newh); +} + +//----------------------------------------------------------------------------- +// If the expression references only one parameter that appears in pl, then +// return that parameter. If no param is referenced, then return NO_PARAMS. +// If multiple params are referenced, then return MULTIPLE_PARAMS. +//----------------------------------------------------------------------------- +const hParam Expr::NO_PARAMS = { 0 }; +const hParam Expr::MULTIPLE_PARAMS = { 1 }; +hParam Expr::ReferencedParams(ParamList *pl) { + if(op == PARAM) { + if(pl->FindByIdNoOops(parh)) { + return parh; + } else { + return NO_PARAMS; + } + } + if(op == PARAM_PTR) oops(); + + int c = Children(); + if(c == 0) { + return NO_PARAMS; + } else if(c == 1) { + return a->ReferencedParams(pl); + } else if(c == 2) { + hParam pa, pb; + pa = a->ReferencedParams(pl); + pb = b->ReferencedParams(pl); + if(pa.v == NO_PARAMS.v) { + return pb; + } else if(pb.v == NO_PARAMS.v) { + return pa; + } else if(pa.v == pb.v) { + return pa; // either, doesn't matter + } else { + return MULTIPLE_PARAMS; + } + } else oops(); +} + + +//----------------------------------------------------------------------------- +// Routines to pretty-print an expression. Mostly for debugging. +//----------------------------------------------------------------------------- + +std::string Expr::Print(void) { + + char c; + switch(op) { + case PARAM: return ssprintf("param(%08x)", parh.v); + case PARAM_PTR: return ssprintf("param(p%08x)", parp->h.v); + + case CONSTANT: return ssprintf("%.3f", v); + + case PLUS: c = '+'; goto p; + case MINUS: c = '-'; goto p; + case TIMES: c = '*'; goto p; + case DIV: c = '/'; goto p; +p: + return "(" + a->Print() + " " + c + " " + b->Print() + ")"; + break; + + case NEGATE: return "(- " + a->Print() + ")"; + case SQRT: return "(sqrt " + a->Print() + ")"; + case SQUARE: return "(square " + a->Print() + ")"; + case SIN: return "(sin " + a->Print() + ")"; + case COS: return "(cos " + a->Print() + ")"; + case ASIN: return "(asin " + a->Print() + ")"; + case ACOS: return "(acos " + a->Print() + ")"; + + default: oops(); + } +} + + +//----------------------------------------------------------------------------- +// A parser; convert a string to an expression. Infix notation, with the +// usual shift/reduce approach. I had great hopes for user-entered eq +// constraints, but those don't seem very useful, so right now this is just +// to provide calculator type functionality wherever numbers are entered. +//----------------------------------------------------------------------------- + +#define MAX_UNPARSED 1024 +static Expr *Unparsed[MAX_UNPARSED]; +static int UnparsedCnt, UnparsedP; + +static Expr *Operands[MAX_UNPARSED]; +static int OperandsP; + +static Expr *Operators[MAX_UNPARSED]; +static int OperatorsP; + +void Expr::PushOperator(Expr *e) { + if(OperatorsP >= MAX_UNPARSED) throw "operator stack full!"; + Operators[OperatorsP++] = e; +} +Expr *Expr::TopOperator(void) { + if(OperatorsP <= 0) throw "operator stack empty (get top)"; + return Operators[OperatorsP-1]; +} +Expr *Expr::PopOperator(void) { + if(OperatorsP <= 0) throw "operator stack empty (pop)"; + return Operators[--OperatorsP]; +} +void Expr::PushOperand(Expr *e) { + if(OperandsP >= MAX_UNPARSED) throw "operand stack full"; + Operands[OperandsP++] = e; +} +Expr *Expr::PopOperand(void) { + if(OperandsP <= 0) throw "operand stack empty"; + return Operands[--OperandsP]; +} +Expr *Expr::Next(void) { + if(UnparsedP >= UnparsedCnt) return NULL; + return Unparsed[UnparsedP]; +} +void Expr::Consume(void) { + if(UnparsedP >= UnparsedCnt) throw "no token to consume"; + UnparsedP++; +} + +int Expr::Precedence(Expr *e) { + if(e->op == ALL_RESOLVED) return -1; // never want to reduce this marker + if(e->op != BINARY_OP && e->op != UNARY_OP) oops(); + + switch(e->c) { + case 'q': + case 's': + case 'c': + case 'n': return 30; + + case '*': + case '/': return 20; + + case '+': + case '-': return 10; + + default: oops(); + } +} + +void Expr::Reduce(void) { + Expr *a, *b; + + Expr *op = PopOperator(); + Expr *n; + int o; + switch(op->c) { + case '+': o = PLUS; goto c; + case '-': o = MINUS; goto c; + case '*': o = TIMES; goto c; + case '/': o = DIV; goto c; +c: + b = PopOperand(); + a = PopOperand(); + n = a->AnyOp(o, b); + break; + + case 'n': n = PopOperand()->Negate(); break; + case 'q': n = PopOperand()->Sqrt(); break; + case 's': n = (PopOperand()->Times(Expr::From(PI/180)))->Sin(); break; + case 'c': n = (PopOperand()->Times(Expr::From(PI/180)))->Cos(); break; + + default: oops(); + } + PushOperand(n); +} + +void Expr::ReduceAndPush(Expr *n) { + while(Precedence(n) <= Precedence(TopOperator())) { + Reduce(); + } + PushOperator(n); +} + +void Expr::Parse(void) { + Expr *e = AllocExpr(); + e->op = ALL_RESOLVED; + PushOperator(e); + + for(;;) { + Expr *n = Next(); + if(!n) throw "end of expression unexpected"; + + if(n->op == CONSTANT) { + PushOperand(n); + Consume(); + } else if(n->op == PAREN && n->c == '(') { + Consume(); + Parse(); + n = Next(); + if(n->op != PAREN || n->c != ')') throw "expected: )"; + Consume(); + } else if(n->op == UNARY_OP) { + PushOperator(n); + Consume(); + continue; + } else if(n->op == BINARY_OP && n->c == '-') { + // The minus sign is special, because it might be binary or + // unary, depending on context. + n->op = UNARY_OP; + n->c = 'n'; + PushOperator(n); + Consume(); + continue; + } else { + throw "expected expression"; + } + + n = Next(); + if(n && n->op == BINARY_OP) { + ReduceAndPush(n); + Consume(); + } else { + break; + } + } + + while(TopOperator()->op != ALL_RESOLVED) { + Reduce(); + } + PopOperator(); // discard the ALL_RESOLVED marker +} + +void Expr::Lex(const char *in) { + while(*in) { + if(UnparsedCnt >= MAX_UNPARSED) throw "too long"; + + char c = *in; + if(isdigit(c) || c == '.') { + // A number literal + char number[70]; + int len = 0; + while((isdigit(*in) || *in == '.') && len < 30) { + number[len++] = *in; + in++; + } + number[len++] = '\0'; + Expr *e = AllocExpr(); + e->op = CONSTANT; + e->v = atof(number); + Unparsed[UnparsedCnt++] = e; + } else if(isalpha(c) || c == '_') { + char name[70]; + int len = 0; + while(isforname(*in) && len < 30) { + name[len++] = *in; + in++; + } + name[len++] = '\0'; + + Expr *e = AllocExpr(); + if(strcmp(name, "sqrt")==0) { + e->op = UNARY_OP; + e->c = 'q'; + } else if(strcmp(name, "cos")==0) { + e->op = UNARY_OP; + e->c = 'c'; + } else if(strcmp(name, "sin")==0) { + e->op = UNARY_OP; + e->c = 's'; + } else if(strcmp(name, "pi")==0) { + e->op = CONSTANT; + e->v = PI; + } else { + throw "unknown name"; + } + Unparsed[UnparsedCnt++] = e; + } else if(strchr("+-*/()", c)) { + Expr *e = AllocExpr(); + e->op = (c == '(' || c == ')') ? PAREN : BINARY_OP; + e->c = c; + Unparsed[UnparsedCnt++] = e; + in++; + } else if(isspace(c)) { + // Ignore whitespace + in++; + } else { + // This is a lex error. + throw "unexpected characters"; + } + } +} + +Expr *Expr::From(const char *in, bool popUpError) { + UnparsedCnt = 0; + UnparsedP = 0; + OperandsP = 0; + OperatorsP = 0; + + Expr *r; + try { + Lex(in); + Parse(); + r = PopOperand(); + } catch (const char *e) { + dbp("exception: parse/lex error: %s", e); + if(popUpError) { + Error("Not a valid number or expression: '%s'", in); + } + return NULL; + } + return r; +} + diff --git a/src/expr.h b/src/expr.h new file mode 100644 index 0000000..eaf79b0 --- /dev/null +++ b/src/expr.h @@ -0,0 +1,169 @@ +//----------------------------------------------------------------------------- +// An expression in our symbolic algebra system, used to write, linearize, +// and solve our constraint equations. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- + +#ifndef __EXPR_H +#define __EXPR_H + +class Expr; + +class Expr { +public: + + enum { + // A parameter, by the hParam handle + PARAM = 0, + // A parameter, by a pointer straight in to the param table (faster, + // if we know that the param table won't move around) + PARAM_PTR = 1, + + CONSTANT = 20, + + PLUS = 100, + MINUS = 101, + TIMES = 102, + DIV = 103, + NEGATE = 104, + SQRT = 105, + SQUARE = 106, + SIN = 107, + COS = 108, + ASIN = 109, + ACOS = 110, + + // Special helpers for when we're parsing an expression from text. + // Initially, literals (like a constant number) appear in the same + // format as they will in the finished expression, but the operators + // are different until the parser fixes things up (and builds the + // tree from the flat list that the lexer outputs). + ALL_RESOLVED = 1000, + PAREN = 1001, + BINARY_OP = 1002, + UNARY_OP = 1003 + }; + + int op; + Expr *a; + union { + double v; + hParam parh; + Param *parp; + Expr *b; + + // For use while parsing + char c; + }; + + Expr() { } + Expr(double val) : op(CONSTANT) { v = val; } + + static inline Expr *AllocExpr(void) + { return (Expr *)AllocTemporary(sizeof(Expr)); } + + static Expr *From(hParam p); + static Expr *From(double v); + + Expr *AnyOp(int op, Expr *b); + inline Expr *Plus (Expr *b_) { return AnyOp(PLUS, b_); } + inline Expr *Minus(Expr *b_) { return AnyOp(MINUS, b_); } + inline Expr *Times(Expr *b_) { return AnyOp(TIMES, b_); } + inline Expr *Div (Expr *b_) { return AnyOp(DIV, b_); } + + inline Expr *Negate(void) { return AnyOp(NEGATE, NULL); } + inline Expr *Sqrt (void) { return AnyOp(SQRT, NULL); } + inline Expr *Square(void) { return AnyOp(SQUARE, NULL); } + inline Expr *Sin (void) { return AnyOp(SIN, NULL); } + inline Expr *Cos (void) { return AnyOp(COS, NULL); } + inline Expr *ASin (void) { return AnyOp(ASIN, NULL); } + inline Expr *ACos (void) { return AnyOp(ACOS, NULL); } + + Expr *PartialWrt(hParam p); + double Eval(void); + uint64_t ParamsUsed(void); + bool DependsOn(hParam p); + static bool Tol(double a, double b); + Expr *FoldConstants(void); + void Substitute(hParam oldh, hParam newh); + + static const hParam NO_PARAMS, MULTIPLE_PARAMS; + hParam ReferencedParams(ParamList *pl); + + void ParamsToPointers(void); + + std::string Print(void); + + // number of child nodes: 0 (e.g. constant), 1 (sqrt), or 2 (+) + int Children(void); + // total number of nodes in the tree + int Nodes(void); + + // Make a simple copy + Expr *DeepCopy(void); + // Make a copy, with the parameters (usually referenced by hParam) + // resolved to pointers to the actual value. This speeds things up + // considerably. + Expr *DeepCopyWithParamsAsPointers(IdList *firstTry, + IdList *thenTry); + + static Expr *From(const char *in, bool popUpError); + static void Lex(const char *in); + static Expr *Next(void); + static void Consume(void); + + static void PushOperator(Expr *e); + static Expr *PopOperator(void); + static Expr *TopOperator(void); + static void PushOperand(Expr *e); + static Expr *PopOperand(void); + + static void Reduce(void); + static void ReduceAndPush(Expr *e); + static int Precedence(Expr *e); + + static int Precedence(int op); + static void Parse(void); +}; + +class ExprVector { +public: + Expr *x, *y, *z; + + static ExprVector From(Expr *x, Expr *y, Expr *z); + static ExprVector From(Vector vn); + static ExprVector From(hParam x, hParam y, hParam z); + static ExprVector From(double x, double y, double z); + + ExprVector Plus(ExprVector b); + ExprVector Minus(ExprVector b); + Expr *Dot(ExprVector b); + ExprVector Cross(ExprVector b); + ExprVector ScaledBy(Expr *s); + ExprVector WithMagnitude(Expr *s); + Expr *Magnitude(void); + + Vector Eval(void); +}; + +class ExprQuaternion { +public: + Expr *w, *vx, *vy, *vz; + + static ExprQuaternion From(Expr *w, Expr *vx, Expr *vy, Expr *vz); + static ExprQuaternion From(Quaternion qn); + static ExprQuaternion From(hParam w, hParam vx, hParam vy, hParam vz); + + ExprVector RotationU(void); + ExprVector RotationV(void); + ExprVector RotationN(void); + + ExprVector Rotate(ExprVector p); + ExprQuaternion Times(ExprQuaternion b); + + Expr *Magnitude(void); +}; + +#endif + diff --git a/src/file.cpp b/src/file.cpp new file mode 100644 index 0000000..daad828 --- /dev/null +++ b/src/file.cpp @@ -0,0 +1,869 @@ +//----------------------------------------------------------------------------- +// Routines to write and read our .slvs file format. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +#define VERSION_STRING "\261\262\263" "SolveSpaceREVa" + +static int StrStartsWith(const char *str, const char *start) { + return memcmp(str, start, strlen(start)) == 0; +} + +//----------------------------------------------------------------------------- +// Clear and free all the dynamic memory associated with our currently-loaded +// sketch. This does not leave the program in an acceptable state (with the +// references created, and so on), so anyone calling this must fix that later. +//----------------------------------------------------------------------------- +void SolveSpaceUI::ClearExisting(void) { + UndoClearStack(&redo); + UndoClearStack(&undo); + + for(int i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + g->Clear(); + } + + SK.constraint.Clear(); + SK.request.Clear(); + SK.group.Clear(); + SK.groupOrder.Clear(); + SK.style.Clear(); + + SK.entity.Clear(); + SK.param.Clear(); +} + +hGroup SolveSpaceUI::CreateDefaultDrawingGroup(void) { + Group g = {}; + + // And an empty group, for the first stuff the user draws. + g.visible = true; + g.name = "sketch-in-plane"; + g.type = Group::DRAWING_WORKPLANE; + g.subtype = Group::WORKPLANE_BY_POINT_ORTHO; + g.order = 1; + g.predef.q = Quaternion::From(1, 0, 0, 0); + hRequest hr = Request::HREQUEST_REFERENCE_XY; + g.predef.origin = hr.entity(1); + SK.group.AddAndAssignId(&g); + SK.GetGroup(g.h)->activeWorkplane = g.h.entity(0); + return g.h; +} + +void SolveSpaceUI::NewFile(void) { + ClearExisting(); + + // Our initial group, that contains the references. + Group g = {}; + g.visible = true; + g.name = "#references"; + g.type = Group::DRAWING_3D; + g.order = 0; + g.h = Group::HGROUP_REFERENCES; + SK.group.Add(&g); + + // Let's create three two-d coordinate systems, for the coordinate + // planes; these are our references, present in every sketch. + Request r = {}; + r.type = Request::WORKPLANE; + r.group = Group::HGROUP_REFERENCES; + r.workplane = Entity::FREE_IN_3D; + + r.h = Request::HREQUEST_REFERENCE_XY; + SK.request.Add(&r); + + r.h = Request::HREQUEST_REFERENCE_YZ; + SK.request.Add(&r); + + r.h = Request::HREQUEST_REFERENCE_ZX; + SK.request.Add(&r); + + CreateDefaultDrawingGroup(); +} + +const SolveSpaceUI::SaveTable SolveSpaceUI::SAVED[] = { + { 'g', "Group.h.v", 'x', &(SS.sv.g.h.v) }, + { 'g', "Group.type", 'd', &(SS.sv.g.type) }, + { 'g', "Group.order", 'd', &(SS.sv.g.order) }, + { 'g', "Group.name", 'S', &(SS.sv.g.name) }, + { 'g', "Group.activeWorkplane.v", 'x', &(SS.sv.g.activeWorkplane.v) }, + { 'g', "Group.opA.v", 'x', &(SS.sv.g.opA.v) }, + { 'g', "Group.opB.v", 'x', &(SS.sv.g.opB.v) }, + { 'g', "Group.valA", 'f', &(SS.sv.g.valA) }, + { 'g', "Group.valB", 'f', &(SS.sv.g.valB) }, + { 'g', "Group.valC", 'f', &(SS.sv.g.valB) }, + { 'g', "Group.color", 'c', &(SS.sv.g.color) }, + { 'g', "Group.subtype", 'd', &(SS.sv.g.subtype) }, + { 'g', "Group.skipFirst", 'b', &(SS.sv.g.skipFirst) }, + { 'g', "Group.meshCombine", 'd', &(SS.sv.g.meshCombine) }, + { 'g', "Group.forceToMesh", 'd', &(SS.sv.g.forceToMesh) }, + { 'g', "Group.predef.q.w", 'f', &(SS.sv.g.predef.q.w) }, + { 'g', "Group.predef.q.vx", 'f', &(SS.sv.g.predef.q.vx) }, + { 'g', "Group.predef.q.vy", 'f', &(SS.sv.g.predef.q.vy) }, + { 'g', "Group.predef.q.vz", 'f', &(SS.sv.g.predef.q.vz) }, + { 'g', "Group.predef.origin.v", 'x', &(SS.sv.g.predef.origin.v) }, + { 'g', "Group.predef.entityB.v", 'x', &(SS.sv.g.predef.entityB.v) }, + { 'g', "Group.predef.entityC.v", 'x', &(SS.sv.g.predef.entityC.v) }, + { 'g', "Group.predef.swapUV", 'b', &(SS.sv.g.predef.swapUV) }, + { 'g', "Group.predef.negateU", 'b', &(SS.sv.g.predef.negateU) }, + { 'g', "Group.predef.negateV", 'b', &(SS.sv.g.predef.negateV) }, + { 'g', "Group.visible", 'b', &(SS.sv.g.visible) }, + { 'g', "Group.suppress", 'b', &(SS.sv.g.suppress) }, + { 'g', "Group.relaxConstraints", 'b', &(SS.sv.g.relaxConstraints) }, + { 'g', "Group.allowRedundant", 'b', &(SS.sv.g.allowRedundant) }, + { 'g', "Group.allDimsReference", 'b', &(SS.sv.g.allDimsReference) }, + { 'g', "Group.scale", 'f', &(SS.sv.g.scale) }, + { 'g', "Group.remap", 'M', &(SS.sv.g.remap) }, + { 'g', "Group.impFile", 'S', &(SS.sv.g.linkFile) }, + { 'g', "Group.impFileRel", 'S', &(SS.sv.g.linkFileRel) }, + + { 'p', "Param.h.v.", 'x', &(SS.sv.p.h.v) }, + { 'p', "Param.val", 'f', &(SS.sv.p.val) }, + + { 'r', "Request.h.v", 'x', &(SS.sv.r.h.v) }, + { 'r', "Request.type", 'd', &(SS.sv.r.type) }, + { 'r', "Request.extraPoints", 'd', &(SS.sv.r.extraPoints) }, + { 'r', "Request.workplane.v", 'x', &(SS.sv.r.workplane.v) }, + { 'r', "Request.group.v", 'x', &(SS.sv.r.group.v) }, + { 'r', "Request.construction", 'b', &(SS.sv.r.construction) }, + { 'r', "Request.style", 'x', &(SS.sv.r.style) }, + { 'r', "Request.str", 'S', &(SS.sv.r.str) }, + { 'r', "Request.font", 'S', &(SS.sv.r.font) }, + + { 'e', "Entity.h.v", 'x', &(SS.sv.e.h.v) }, + { 'e', "Entity.type", 'd', &(SS.sv.e.type) }, + { 'e', "Entity.construction", 'b', &(SS.sv.e.construction) }, + { 'e', "Entity.style", 'x', &(SS.sv.e.style) }, + { 'e', "Entity.str", 'S', &(SS.sv.e.str) }, + { 'e', "Entity.font", 'S', &(SS.sv.e.font) }, + { 'e', "Entity.point[0].v", 'x', &(SS.sv.e.point[0].v) }, + { 'e', "Entity.point[1].v", 'x', &(SS.sv.e.point[1].v) }, + { 'e', "Entity.point[2].v", 'x', &(SS.sv.e.point[2].v) }, + { 'e', "Entity.point[3].v", 'x', &(SS.sv.e.point[3].v) }, + { 'e', "Entity.point[4].v", 'x', &(SS.sv.e.point[4].v) }, + { 'e', "Entity.point[5].v", 'x', &(SS.sv.e.point[5].v) }, + { 'e', "Entity.point[6].v", 'x', &(SS.sv.e.point[6].v) }, + { 'e', "Entity.point[7].v", 'x', &(SS.sv.e.point[7].v) }, + { 'e', "Entity.point[8].v", 'x', &(SS.sv.e.point[8].v) }, + { 'e', "Entity.point[9].v", 'x', &(SS.sv.e.point[9].v) }, + { 'e', "Entity.point[10].v", 'x', &(SS.sv.e.point[10].v) }, + { 'e', "Entity.point[11].v", 'x', &(SS.sv.e.point[11].v) }, + { 'e', "Entity.extraPoints", 'd', &(SS.sv.e.extraPoints) }, + { 'e', "Entity.normal.v", 'x', &(SS.sv.e.normal.v) }, + { 'e', "Entity.distance.v", 'x', &(SS.sv.e.distance.v) }, + { 'e', "Entity.workplane.v", 'x', &(SS.sv.e.workplane.v) }, + { 'e', "Entity.actPoint.x", 'f', &(SS.sv.e.actPoint.x) }, + { 'e', "Entity.actPoint.y", 'f', &(SS.sv.e.actPoint.y) }, + { 'e', "Entity.actPoint.z", 'f', &(SS.sv.e.actPoint.z) }, + { 'e', "Entity.actNormal.w", 'f', &(SS.sv.e.actNormal.w) }, + { 'e', "Entity.actNormal.vx", 'f', &(SS.sv.e.actNormal.vx) }, + { 'e', "Entity.actNormal.vy", 'f', &(SS.sv.e.actNormal.vy) }, + { 'e', "Entity.actNormal.vz", 'f', &(SS.sv.e.actNormal.vz) }, + { 'e', "Entity.actDistance", 'f', &(SS.sv.e.actDistance) }, + { 'e', "Entity.actVisible", 'b', &(SS.sv.e.actVisible), }, + + + { 'c', "Constraint.h.v", 'x', &(SS.sv.c.h.v) }, + { 'c', "Constraint.type", 'd', &(SS.sv.c.type) }, + { 'c', "Constraint.group.v", 'x', &(SS.sv.c.group.v) }, + { 'c', "Constraint.workplane.v", 'x', &(SS.sv.c.workplane.v) }, + { 'c', "Constraint.valA", 'f', &(SS.sv.c.valA) }, + { 'c', "Constraint.ptA.v", 'x', &(SS.sv.c.ptA.v) }, + { 'c', "Constraint.ptB.v", 'x', &(SS.sv.c.ptB.v) }, + { 'c', "Constraint.entityA.v", 'x', &(SS.sv.c.entityA.v) }, + { 'c', "Constraint.entityB.v", 'x', &(SS.sv.c.entityB.v) }, + { 'c', "Constraint.entityC.v", 'x', &(SS.sv.c.entityC.v) }, + { 'c', "Constraint.entityD.v", 'x', &(SS.sv.c.entityD.v) }, + { 'c', "Constraint.other", 'b', &(SS.sv.c.other) }, + { 'c', "Constraint.other2", 'b', &(SS.sv.c.other2) }, + { 'c', "Constraint.reference", 'b', &(SS.sv.c.reference) }, + { 'c', "Constraint.comment", 'S', &(SS.sv.c.comment) }, + { 'c', "Constraint.disp.offset.x", 'f', &(SS.sv.c.disp.offset.x) }, + { 'c', "Constraint.disp.offset.y", 'f', &(SS.sv.c.disp.offset.y) }, + { 'c', "Constraint.disp.offset.z", 'f', &(SS.sv.c.disp.offset.z) }, + { 'c', "Constraint.disp.style", 'x', &(SS.sv.c.disp.style) }, + + { 's', "Style.h.v", 'x', &(SS.sv.s.h.v) }, + { 's', "Style.name", 'S', &(SS.sv.s.name) }, + { 's', "Style.width", 'f', &(SS.sv.s.width) }, + { 's', "Style.widthAs", 'd', &(SS.sv.s.widthAs) }, + { 's', "Style.textHeight", 'f', &(SS.sv.s.textHeight) }, + { 's', "Style.textHeightAs", 'd', &(SS.sv.s.textHeightAs) }, + { 's', "Style.textAngle", 'f', &(SS.sv.s.textAngle) }, + { 's', "Style.textOrigin", 'x', &(SS.sv.s.textOrigin) }, + { 's', "Style.color", 'c', &(SS.sv.s.color) }, + { 's', "Style.fillColor", 'c', &(SS.sv.s.fillColor) }, + { 's', "Style.filled", 'b', &(SS.sv.s.filled) }, + { 's', "Style.visible", 'b', &(SS.sv.s.visible) }, + { 's', "Style.exportable", 'b', &(SS.sv.s.exportable) }, + { 's', "Style.stippleType", 'd', &(SS.sv.s.stippleType) }, + { 's', "Style.stippleScale", 'f', &(SS.sv.s.stippleScale) }, + + { 0, NULL, 0, NULL } +}; + +struct SAVEDptr { + IdList &M() { return *((IdList *)this); } + std::string &S() { return *((std::string *)this); } + bool &b() { return *((bool *)this); } + RgbaColor &c() { return *((RgbaColor *)this); } + int &d() { return *((int *)this); } + double &f() { return *((double *)this); } + uint32_t &x() { return *((uint32_t *)this); } +}; + +void SolveSpaceUI::SaveUsingTable(int type) { + int i; + for(i = 0; SAVED[i].type != 0; i++) { + if(SAVED[i].type != type) continue; + + int fmt = SAVED[i].fmt; + SAVEDptr *p = (SAVEDptr *)SAVED[i].ptr; + // Any items that aren't specified are assumed to be zero + if(fmt == 'S' && p->S().empty()) continue; + if(fmt == 'd' && p->d() == 0) continue; + if(fmt == 'f' && EXACT(p->f() == 0.0)) continue; + if(fmt == 'x' && p->x() == 0) continue; + + fprintf(fh, "%s=", SAVED[i].desc); + switch(fmt) { + case 'S': fprintf(fh, "%s", p->S().c_str()); break; + case 'b': fprintf(fh, "%d", p->b() ? 1 : 0); break; + case 'c': fprintf(fh, "%08x", p->c().ToPackedInt()); break; + case 'd': fprintf(fh, "%d", p->d()); break; + case 'f': fprintf(fh, "%.20f", p->f()); break; + case 'x': fprintf(fh, "%08x", p->x()); break; + + case 'M': { + int j; + fprintf(fh, "{\n"); + for(j = 0; j < p->M().n; j++) { + EntityMap *em = &(p->M().elem[j]); + fprintf(fh, " %d %08x %d\n", + em->h.v, em->input.v, em->copyNumber); + } + fprintf(fh, "}"); + break; + } + + default: oops(); + } + fprintf(fh, "\n"); + } +} + +bool SolveSpaceUI::SaveToFile(const std::string &filename) { + // Make sure all the entities are regenerated up to date, since they + // will be exported. We reload the linked files because that rewrites + // the linkFileRel for our possibly-new filename. + SS.ScheduleShowTW(); + SS.ReloadAllImported(); + SS.GenerateAll(SolveSpaceUI::GENERATE_ALL); + + fh = ssfopen(filename, "wb"); + if(!fh) { + Error("Couldn't write to file '%s'", filename.c_str()); + return false; + } + + fprintf(fh, "%s\n\n\n", VERSION_STRING); + + int i, j; + for(i = 0; i < SK.group.n; i++) { + sv.g = SK.group.elem[i]; + SaveUsingTable('g'); + fprintf(fh, "AddGroup\n\n"); + } + + for(i = 0; i < SK.param.n; i++) { + sv.p = SK.param.elem[i]; + SaveUsingTable('p'); + fprintf(fh, "AddParam\n\n"); + } + + for(i = 0; i < SK.request.n; i++) { + sv.r = SK.request.elem[i]; + SaveUsingTable('r'); + fprintf(fh, "AddRequest\n\n"); + } + + for(i = 0; i < SK.entity.n; i++) { + (SK.entity.elem[i]).CalculateNumerical(true); + sv.e = SK.entity.elem[i]; + SaveUsingTable('e'); + fprintf(fh, "AddEntity\n\n"); + } + + for(i = 0; i < SK.constraint.n; i++) { + sv.c = SK.constraint.elem[i]; + SaveUsingTable('c'); + fprintf(fh, "AddConstraint\n\n"); + } + + for(i = 0; i < SK.style.n; i++) { + sv.s = SK.style.elem[i]; + if(sv.s.h.v >= Style::FIRST_CUSTOM) { + SaveUsingTable('s'); + fprintf(fh, "AddStyle\n\n"); + } + } + + // A group will have either a mesh or a shell, but not both; but the code + // to print either of those just does nothing if the mesh/shell is empty. + + Group *g = SK.GetGroup(SK.groupOrder.elem[SK.groupOrder.n - 1]); + SMesh *m = &g->runningMesh; + for(i = 0; i < m->l.n; i++) { + STriangle *tr = &(m->l.elem[i]); + fprintf(fh, "Triangle %08x %08x " + "%.20f %.20f %.20f %.20f %.20f %.20f %.20f %.20f %.20f\n", + tr->meta.face, tr->meta.color.ToPackedInt(), + CO(tr->a), CO(tr->b), CO(tr->c)); + } + + SShell *s = &g->runningShell; + SSurface *srf; + for(srf = s->surface.First(); srf; srf = s->surface.NextAfter(srf)) { + fprintf(fh, "Surface %08x %08x %08x %d %d\n", + srf->h.v, srf->color.ToPackedInt(), srf->face, srf->degm, srf->degn); + for(i = 0; i <= srf->degm; i++) { + for(j = 0; j <= srf->degn; j++) { + fprintf(fh, "SCtrl %d %d %.20f %.20f %.20f Weight %20.20f\n", + i, j, CO(srf->ctrl[i][j]), srf->weight[i][j]); + } + } + + STrimBy *stb; + for(stb = srf->trim.First(); stb; stb = srf->trim.NextAfter(stb)) { + fprintf(fh, "TrimBy %08x %d %.20f %.20f %.20f %.20f %.20f %.20f\n", + stb->curve.v, stb->backwards ? 1 : 0, + CO(stb->start), CO(stb->finish)); + } + + fprintf(fh, "AddSurface\n"); + } + SCurve *sc; + for(sc = s->curve.First(); sc; sc = s->curve.NextAfter(sc)) { + fprintf(fh, "Curve %08x %d %d %08x %08x\n", + sc->h.v, + sc->isExact ? 1 : 0, sc->exact.deg, + sc->surfA.v, sc->surfB.v); + + if(sc->isExact) { + for(i = 0; i <= sc->exact.deg; i++) { + fprintf(fh, "CCtrl %d %.20f %.20f %.20f Weight %.20f\n", + i, CO(sc->exact.ctrl[i]), sc->exact.weight[i]); + } + } + SCurvePt *scpt; + for(scpt = sc->pts.First(); scpt; scpt = sc->pts.NextAfter(scpt)) { + fprintf(fh, "CurvePt %d %.20f %.20f %.20f\n", + scpt->vertex ? 1 : 0, CO(scpt->p)); + } + + fprintf(fh, "AddCurve\n"); + } + + fclose(fh); + + return true; +} + +void SolveSpaceUI::LoadUsingTable(char *key, char *val) { + int i; + for(i = 0; SAVED[i].type != 0; i++) { + if(strcmp(SAVED[i].desc, key)==0) { + SAVEDptr *p = (SAVEDptr *)SAVED[i].ptr; + unsigned int u = 0; + switch(SAVED[i].fmt) { + case 'S': p->S() = val; break; + case 'b': p->b() = (atoi(val) != 0); break; + case 'd': p->d() = atoi(val); break; + case 'f': p->f() = atof(val); break; + case 'x': sscanf(val, "%x", &u); p->x()= u; break; + + case 'c': + sscanf(val, "%x", &u); + p->c() = RgbaColor::FromPackedInt(u); + break; + + case 'P': + p->S() = val; + break; + + case 'M': { + // Don't clear this list! When the group gets added, it + // makes a shallow copy, so that would result in us + // freeing memory that we want to keep around. Just + // zero it out so that new memory is allocated. + p->M() = {}; + for(;;) { + EntityMap em; + char line2[1024]; + if (fgets(line2, (int)sizeof(line2), fh) == NULL) + break; + if(sscanf(line2, "%d %x %d", &(em.h.v), &(em.input.v), + &(em.copyNumber)) == 3) + { + p->M().Add(&em); + } else { + break; + } + } + break; + } + + default: oops(); + } + break; + } + } + if(SAVED[i].type == 0) { + fileLoadError = true; + } +} + +bool SolveSpaceUI::LoadFromFile(const std::string &filename) { + allConsistent = false; + fileLoadError = false; + + fh = ssfopen(filename, "rb"); + if(!fh) { + Error("Couldn't read from file '%s'", filename.c_str()); + return false; + } + + ClearExisting(); + + sv = {}; + sv.g.scale = 1; // default is 1, not 0; so legacy files need this + Style::FillDefaultStyle(&sv.s); + + char line[1024]; + while(fgets(line, (int)sizeof(line), fh)) { + char *s = strchr(line, '\n'); + if(s) *s = '\0'; + // We should never get files with \r characters in them, but mailers + // will sometimes mangle attachments. + s = strchr(line, '\r'); + if(s) *s = '\0'; + + if(*line == '\0') continue; + + char *e = strchr(line, '='); + if(e) { + *e = '\0'; + char *key = line, *val = e+1; + LoadUsingTable(key, val); + } else if(strcmp(line, "AddGroup")==0) { + // legacy files have a spurious dependency between linked groups + // and their parent groups, remove + if(sv.g.type == Group::LINKED) + sv.g.opA.v = 0; + + SK.group.Add(&(sv.g)); + sv.g = {}; + sv.g.scale = 1; // default is 1, not 0; so legacy files need this + } else if(strcmp(line, "AddParam")==0) { + // params are regenerated, but we want to preload the values + // for initial guesses + SK.param.Add(&(sv.p)); + sv.p = {}; + } else if(strcmp(line, "AddEntity")==0) { + // entities are regenerated + } else if(strcmp(line, "AddRequest")==0) { + SK.request.Add(&(sv.r)); + sv.r = {}; + } else if(strcmp(line, "AddConstraint")==0) { + SK.constraint.Add(&(sv.c)); + sv.c = {}; + } else if(strcmp(line, "AddStyle")==0) { + SK.style.Add(&(sv.s)); + sv.s = {}; + Style::FillDefaultStyle(&sv.s); + } else if(strcmp(line, VERSION_STRING)==0) { + // do nothing, version string + } else if(StrStartsWith(line, "Triangle ") || + StrStartsWith(line, "Surface ") || + StrStartsWith(line, "SCtrl ") || + StrStartsWith(line, "TrimBy ") || + StrStartsWith(line, "Curve ") || + StrStartsWith(line, "CCtrl ") || + StrStartsWith(line, "CurvePt ") || + strcmp(line, "AddSurface")==0 || + strcmp(line, "AddCurve")==0) + { + // ignore the mesh or shell, since we regenerate that + } else { + fileLoadError = true; + } + } + + fclose(fh); + + if(fileLoadError) { + Error("Unrecognized data in file. This file may be corrupt, or " + "from a new version of the program."); + // At least leave the program in a non-crashing state. + if(SK.group.n == 0) { + NewFile(); + } + } + + return true; +} + +bool SolveSpaceUI::LoadEntitiesFromFile(const std::string &filename, EntityList *le, + SMesh *m, SShell *sh) +{ + SSurface srf = {}; + SCurve crv = {}; + + fh = ssfopen(filename, "rb"); + if(!fh) return false; + + le->Clear(); + sv = {}; + + char line[1024]; + while(fgets(line, (int)sizeof(line), fh)) { + char *s = strchr(line, '\n'); + if(s) *s = '\0'; + // We should never get files with \r characters in them, but mailers + // will sometimes mangle attachments. + s = strchr(line, '\r'); + if(s) *s = '\0'; + + if(*line == '\0') continue; + + char *e = strchr(line, '='); + if(e) { + *e = '\0'; + char *key = line, *val = e+1; + LoadUsingTable(key, val); + } else if(strcmp(line, "AddGroup")==0) { + // Don't leak memory; these get allocated whether we want them + // or not. + sv.g.remap.Clear(); + } else if(strcmp(line, "AddParam")==0) { + + } else if(strcmp(line, "AddEntity")==0) { + le->Add(&(sv.e)); + sv.e = {}; + } else if(strcmp(line, "AddRequest")==0) { + + } else if(strcmp(line, "AddConstraint")==0) { + + } else if(strcmp(line, "AddStyle")==0) { + + } else if(strcmp(line, VERSION_STRING)==0) { + + } else if(StrStartsWith(line, "Triangle ")) { + STriangle tr = {}; + unsigned int rgba = 0; + if(sscanf(line, "Triangle %x %x " + "%lf %lf %lf %lf %lf %lf %lf %lf %lf", + &(tr.meta.face), &rgba, + &(tr.a.x), &(tr.a.y), &(tr.a.z), + &(tr.b.x), &(tr.b.y), &(tr.b.z), + &(tr.c.x), &(tr.c.y), &(tr.c.z)) != 11) { + oops(); + } + tr.meta.color = RgbaColor::FromPackedInt((uint32_t)rgba); + m->AddTriangle(&tr); + } else if(StrStartsWith(line, "Surface ")) { + unsigned int rgba = 0; + if(sscanf(line, "Surface %x %x %x %d %d", + &(srf.h.v), &rgba, &(srf.face), + &(srf.degm), &(srf.degn)) != 5) { + oops(); + } + srf.color = RgbaColor::FromPackedInt((uint32_t)rgba); + } else if(StrStartsWith(line, "SCtrl ")) { + int i, j; + Vector c; + double w; + if(sscanf(line, "SCtrl %d %d %lf %lf %lf Weight %lf", + &i, &j, &(c.x), &(c.y), &(c.z), &w) != 6) + { + oops(); + } + srf.ctrl[i][j] = c; + srf.weight[i][j] = w; + } else if(StrStartsWith(line, "TrimBy ")) { + STrimBy stb = {}; + int backwards; + if(sscanf(line, "TrimBy %x %d %lf %lf %lf %lf %lf %lf", + &(stb.curve.v), &backwards, + &(stb.start.x), &(stb.start.y), &(stb.start.z), + &(stb.finish.x), &(stb.finish.y), &(stb.finish.z)) != 8) + { + oops(); + } + stb.backwards = (backwards != 0); + srf.trim.Add(&stb); + } else if(strcmp(line, "AddSurface")==0) { + sh->surface.Add(&srf); + srf = {}; + } else if(StrStartsWith(line, "Curve ")) { + int isExact; + if(sscanf(line, "Curve %x %d %d %x %x", + &(crv.h.v), + &(isExact), + &(crv.exact.deg), + &(crv.surfA.v), &(crv.surfB.v)) != 5) + { + oops(); + } + crv.isExact = (isExact != 0); + } else if(StrStartsWith(line, "CCtrl ")) { + int i; + Vector c; + double w; + if(sscanf(line, "CCtrl %d %lf %lf %lf Weight %lf", + &i, &(c.x), &(c.y), &(c.z), &w) != 5) + { + oops(); + } + crv.exact.ctrl[i] = c; + crv.exact.weight[i] = w; + } else if(StrStartsWith(line, "CurvePt ")) { + SCurvePt scpt; + int vertex; + if(sscanf(line, "CurvePt %d %lf %lf %lf", + &vertex, + &(scpt.p.x), &(scpt.p.y), &(scpt.p.z)) != 4) + { + oops(); + } + scpt.vertex = (vertex != 0); + crv.pts.Add(&scpt); + } else if(strcmp(line, "AddCurve")==0) { + sh->curve.Add(&crv); + crv = {}; + } else { + oops(); + } + } + + fclose(fh); + return true; +} + +//----------------------------------------------------------------------------- +// Handling of the relative-absolute path transformations for links +//----------------------------------------------------------------------------- +static std::vector Split(const std::string &haystack, const std::string &needle) +{ + std::vector result; + + size_t oldpos = 0, pos = 0; + while(true) { + oldpos = pos; + pos = haystack.find(needle, pos); + if(pos == std::string::npos) break; + result.push_back(haystack.substr(oldpos, pos - oldpos)); + pos += needle.length(); + } + + if(oldpos != haystack.length() - 1) + result.push_back(haystack.substr(oldpos)); + + return result; +} + +static std::string Join(const std::vector &parts, const std::string &separator) +{ + bool first = true; + std::string result; + for(auto &part : parts) { + if(!first) result += separator; + result += part; + first = false; + } + return result; +} + +static bool PlatformPathEqual(const std::string &a, const std::string &b) +{ + // Case-sensitivity is actually per-volume on both Windows and OS X, + // but it is extremely tedious to implement and test for little benefit. +#if defined(WIN32) + std::wstring wa = Widen(a), wb = Widen(b); + return std::equal(wa.begin(), wa.end(), wb.begin(), /*wb.end(),*/ + [](wchar_t wca, wchar_t wcb) { return towlower(wca) == towlower(wcb); }); +#elif defined(__APPLE__) + return !strcasecmp(a.c_str(), b.c_str()); +#else + return a == b; +#endif +} + +static std::string MakePathRelative(const std::string &base, const std::string &path) +{ + std::vector baseParts = Split(base, PATH_SEP), + pathParts = Split(path, PATH_SEP), + resultParts; + baseParts.pop_back(); + + size_t common; + for(common = 0; common < baseParts.size() && common < pathParts.size(); common++) { + if(!PlatformPathEqual(baseParts[common], pathParts[common])) + break; + } + + for(size_t i = common; i < baseParts.size(); i++) + resultParts.push_back(".."); + + resultParts.insert(resultParts.end(), + pathParts.begin() + common, pathParts.end()); + + return Join(resultParts, PATH_SEP); +} + +static std::string MakePathAbsolute(const std::string &base, const std::string &path) +{ + std::vector resultParts = Split(base, PATH_SEP), + pathParts = Split(path, PATH_SEP); + resultParts.pop_back(); + + for(auto &part : pathParts) { + if(part == ".") { + /* do nothing */ + } else if(part == "..") { + if(resultParts.empty()) oops(); + resultParts.pop_back(); + } else { + resultParts.push_back(part); + } + } + + return Join(resultParts, PATH_SEP); +} + +static void PathSepNormalize(std::string &filename) +{ + for(size_t i = 0; i < filename.length(); i++) { + if(filename[i] == '\\') + filename[i] = '/'; + } +} + +static std::string PathSepPlatformToUNIX(const std::string &filename) +{ +#if defined(WIN32) + std::string result = filename; + for(size_t i = 0; i < result.length(); i++) { + if(result[i] == '\\') + result[i] = '/'; + } + return result; +#else + return filename; +#endif +} + +static std::string PathSepUNIXToPlatform(const std::string &filename) +{ +#if defined(WIN32) + std::string result = filename; + for(size_t i = 0; i < result.length(); i++) { + if(result[i] == '/') + result[i] = '\\'; + } + return result; +#else + return filename; +#endif +} + +bool SolveSpaceUI::ReloadAllImported(bool canCancel) +{ + std::map linkMap; + allConsistent = false; + + int i; + for(i = 0; i < SK.group.n; i++) { + Group *g = &(SK.group.elem[i]); + if(g->type != Group::LINKED) continue; + + if(isalpha(g->linkFile[0]) && g->linkFile[1] == ':') { + // Make sure that g->linkFileRel always contains a relative path + // in an UNIX format, even after we load an old file which had + // the path in Windows format + PathSepNormalize(g->linkFileRel); + } + + g->impEntity.Clear(); + g->impMesh.Clear(); + g->impShell.Clear(); + + if(linkMap.count(g->linkFile)) { + std::string newPath = linkMap[g->linkFile]; + if(!newPath.empty()) + g->linkFile = newPath; + } + + // In a newly created group we only have an absolute path. + if(!g->linkFileRel.empty()) { + std::string rel = PathSepUNIXToPlatform(g->linkFileRel); + std::string fromRel = MakePathAbsolute(SS.saveFile, rel); + FILE *test = ssfopen(fromRel, "rb"); + if(test) { + fclose(test); + // Okay, exists; update the absolute path. + g->linkFile = fromRel; + } else { + // It doesn't exist. Perhaps the file was moved but the tree wasn't, and we + // can use the absolute filename to get us back. The relative path will be + // updated below. + } + } + +try_load_file: + if(LoadEntitiesFromFile(g->linkFile, &(g->impEntity), &(g->impMesh), &(g->impShell))) + { + if(!SS.saveFile.empty()) { + // Record the linked file's name relative to our filename; + // if the entire tree moves, then everything will still work + std::string rel = MakePathRelative(SS.saveFile, g->linkFile); + g->linkFileRel = PathSepPlatformToUNIX(rel); + } else { + // We're not yet saved, so can't make it absolute. + // This will only be used for display purposes, as SS.saveFile + // is always nonempty when we are actually writing anything. + g->linkFileRel = g->linkFile; + } + } else if(!linkMap.count(g->linkFile)) { + switch(LocateImportedFileYesNoCancel(g->linkFileRel, canCancel)) { + case DIALOG_YES: { + std::string oldImpFile = g->linkFile; + if(!GetOpenFile(&g->linkFile, "", SlvsFileFilter)) { + if(canCancel) + return false; + break; + } else { + linkMap[oldImpFile] = g->linkFile; + goto try_load_file; + } + } + + case DIALOG_NO: + linkMap[g->linkFile] = ""; + /* Geometry will be pruned by GenerateAll(). */ + break; + + case DIALOG_CANCEL: + return false; + } + } else { + // User was already asked to and refused to locate a missing + // linked file. + } + } + + return true; +} + diff --git a/src/fonts/private/0-check-false.png b/src/fonts/private/0-check-false.png new file mode 100644 index 0000000000000000000000000000000000000000..b9020c33b8c437c8617a537d3b03c173e421b2f0 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl%OyKpTSt fL*frHg#!$+84N28+$Y-tZDH_q^>bP0l+XkK*)B9y literal 0 HcmV?d00001 diff --git a/src/fonts/private/1-check-true.png b/src/fonts/private/1-check-true.png new file mode 100644 index 0000000000000000000000000000000000000000..7f6a42c554193d2abbd2b4a8023009fb8864be24 GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLlS!3>*qfc7zXy85}S Ib4q9e0Hf$QhX4Qo literal 0 HcmV?d00001 diff --git a/src/fonts/private/3-radio-true.png b/src/fonts/private/3-radio-true.png new file mode 100644 index 0000000000000000000000000000000000000000..5322f587264a18b394550c53b8803bc5038d9612 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl#%q#+J&w=`!859mMBwb+G8Fuk* Q570^mPgg&ebxsLQ0A3F|lmGw# literal 0 HcmV?d00001 diff --git a/src/fonts/private/4-stipple-dot.png b/src/fonts/private/4-stipple-dot.png new file mode 100644 index 0000000000000000000000000000000000000000..52fc21951037b0598c36114f0556b5de17103530 GIT binary patch literal 936 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±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�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�W*p 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∋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 +} + +void SolveSpaceUI::MarkGroupDirty(hGroup hg) { + int i; + bool go = false; + for(i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + if(g->h.v == hg.v) { + go = true; + } + if(go) { + g->clean = false; + } + } + unsaved = true; +} + +bool SolveSpaceUI::PruneOrphans(void) { + int i; + for(i = 0; i < SK.request.n; i++) { + Request *r = &(SK.request.elem[i]); + if(GroupExists(r->group)) continue; + + (deleted.requests)++; + SK.request.RemoveById(r->h); + return true; + } + + for(i = 0; i < SK.constraint.n; i++) { + Constraint *c = &(SK.constraint.elem[i]); + if(GroupExists(c->group)) continue; + + (deleted.constraints)++; + (deleted.nonTrivialConstraints)++; + + SK.constraint.RemoveById(c->h); + return true; + } + return false; +} + +bool SolveSpaceUI::GroupsInOrder(hGroup before, hGroup after) { + if(before.v == 0) return true; + if(after.v == 0) return true; + + int beforep = -1, afterp = -1; + int i; + for(i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + if(g->h.v == before.v) beforep = i; + if(g->h.v == after.v) afterp = i; + } + if(beforep < 0 || afterp < 0) return false; + if(beforep >= afterp) return false; + return true; +} + +bool SolveSpaceUI::GroupExists(hGroup hg) { + // A nonexistent group is not acceptable + return SK.group.FindByIdNoOops(hg) ? true : false; +} +bool SolveSpaceUI::EntityExists(hEntity he) { + // A nonexstient entity is acceptable, though, usually just means it + // doesn't apply. + if(he.v == Entity::NO_ENTITY.v) return true; + return SK.entity.FindByIdNoOops(he) ? true : false; +} + +bool SolveSpaceUI::PruneGroups(hGroup hg) { + Group *g = SK.GetGroup(hg); + if(GroupsInOrder(g->opA, hg) && + EntityExists(g->predef.origin) && + EntityExists(g->predef.entityB) && + EntityExists(g->predef.entityC)) + { + return false; + } + (deleted.groups)++; + SK.group.RemoveById(g->h); + return true; +} + +bool SolveSpaceUI::PruneRequests(hGroup hg) { + int i; + for(i = 0; i < SK.entity.n; i++) { + Entity *e = &(SK.entity.elem[i]); + if(e->group.v != hg.v) continue; + + if(EntityExists(e->workplane)) continue; + + if(!e->h.isFromRequest()) oops(); + + (deleted.requests)++; + SK.request.RemoveById(e->h.request()); + return true; + } + return false; +} + +bool SolveSpaceUI::PruneConstraints(hGroup hg) { + int i; + for(i = 0; i < SK.constraint.n; i++) { + Constraint *c = &(SK.constraint.elem[i]); + if(c->group.v != hg.v) continue; + + if(EntityExists(c->workplane) && + EntityExists(c->ptA) && + EntityExists(c->ptB) && + EntityExists(c->entityA) && + EntityExists(c->entityB) && + EntityExists(c->entityC) && + EntityExists(c->entityD)) + { + continue; + } + + (deleted.constraints)++; + if(c->type != Constraint::POINTS_COINCIDENT && + c->type != Constraint::HORIZONTAL && + c->type != Constraint::VERTICAL) + { + (deleted.nonTrivialConstraints)++; + } + + SK.constraint.RemoveById(c->h); + return true; + } + return false; +} + +void SolveSpaceUI::GenerateAll(GenerateType type, bool andFindFree, bool genForBBox) { + int first, last, i, j; + + SK.groupOrder.Clear(); + for(int i = 0; i < SK.group.n; i++) + SK.groupOrder.Add(&SK.group.elem[i].h); + std::sort(&SK.groupOrder.elem[0], &SK.groupOrder.elem[SK.groupOrder.n], + [](const hGroup &ha, const hGroup &hb) { + return SK.GetGroup(ha)->order < SK.GetGroup(hb)->order; + }); + + switch(type) { + case GENERATE_DIRTY: { + first = INT_MAX; + last = 0; + + // Start from the first dirty group, and solve until the active group, + // since all groups after the active group are hidden. + for(i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + if((!g->clean) || !g->IsSolvedOkay()) { + first = min(first, i); + } + if(g->h.v == SS.GW.activeGroup.v) { + last = i; + } + } + if(first == INT_MAX || last == 0) { + // All clean; so just regenerate the entities, and don't solve anything. + first = -1; + last = -1; + } else { + SS.nakedEdges.Clear(); + } + break; + } + + case GENERATE_ALL: + first = 0; + last = INT_MAX; + break; + + case GENERATE_REGEN: + first = -1; + last = -1; + break; + + case GENERATE_UNTIL_ACTIVE: { + for(i = 0; i < SK.groupOrder.n; i++) { + if(SK.groupOrder.elem[i].v == SS.GW.activeGroup.v) + break; + } + + first = 0; + last = i; + break; + } + + default: oops(); + } + + // If we're generating entities for display, first we need to find + // the bounding box to turn relative chord tolerance to absolute. + if(!SS.exportMode && !genForBBox) { + GenerateAll(type, andFindFree, /*genForBBox=*/true); + BBox box = SK.CalculateEntityBBox(/*includeInvisibles=*/true); + Vector size = box.maxp.Minus(box.minp); + double maxSize = std::max({ size.x, size.y, size.z }); + chordTolCalculated = maxSize * chordTol / 100.0; + } + + // Remove any requests or constraints that refer to a nonexistent + // group; can check those immediately, since we know what the list + // of groups should be. + while(PruneOrphans()) + ; + + // Don't lose our numerical guesses when we regenerate. + IdList prev = {}; + SK.param.MoveSelfInto(&prev); + SK.entity.Clear(); + + int64_t inTime = GetMilliseconds(); + + bool displayedStatusMessage = false; + for(i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + + int64_t now = GetMilliseconds(); + // Display the status message if we've taken more than 400 ms, or + // if we've taken 200 ms but we're not even halfway done, or if + // we've already started displaying the status message. + if( (now - inTime > 400) || + ((now - inTime > 200) && i < (SK.groupOrder.n / 2)) || + displayedStatusMessage) + { + displayedStatusMessage = true; + std::string msg = ssprintf("generating group %d/%d", i, SK.groupOrder.n); + + int w, h; + GetGraphicsWindowSize(&w, &h); + glDrawBuffer(GL_FRONT); + glViewport(0, 0, w, h); + glLoadIdentity(); + glTranslated(-1, 1, 0); + glScaled(2.0/w, 2.0/h, 1.0); + glDisable(GL_DEPTH_TEST); + + double left = 80, top = -20, width = 240, height = 24; + glColor3d(0.9, 0.8, 0.8); + ssglAxisAlignedQuad(left, left+width, top, top-height); + ssglLineWidth(1); + glColor3d(0.0, 0.0, 0.0); + ssglAxisAlignedLineLoop(left, left+width, top, top-height); + + ssglInitializeBitmapFont(); + glColor3d(0, 0, 0); + glPushMatrix(); + glTranslated(left+8, top-20, 0); + glScaled(1, -1, 1); + ssglBitmapText(msg, Vector::From(0, 0, 0)); + glPopMatrix(); + glFlush(); + glDrawBuffer(GL_BACK); + } + + // The group may depend on entities or other groups, to define its + // workplane geometry or for its operands. Those must already exist + // in a previous group, so check them before generating. + if(PruneGroups(g->h)) + goto pruned; + + for(j = 0; j < SK.request.n; j++) { + Request *r = &(SK.request.elem[j]); + if(r->group.v != g->h.v) continue; + + r->Generate(&(SK.entity), &(SK.param)); + } + g->Generate(&(SK.entity), &(SK.param)); + + // The requests and constraints depend on stuff in this or the + // previous group, so check them after generating. + if(PruneRequests(g->h) || PruneConstraints(g->h)) + goto pruned; + + // Use the previous values for params that we've seen before, as + // initial guesses for the solver. + for(j = 0; j < SK.param.n; j++) { + Param *newp = &(SK.param.elem[j]); + if(newp->known) continue; + + Param *prevp = prev.FindByIdNoOops(newp->h); + if(prevp) { + newp->val = prevp->val; + newp->free = prevp->free; + } + } + + if(g->h.v == Group::HGROUP_REFERENCES.v) { + ForceReferences(); + g->solved.how = System::SOLVED_OKAY; + g->clean = true; + } else { + if(i >= first && i <= last) { + // The group falls inside the range, so really solve it, + // and then regenerate the mesh based on the solved stuff. + if(genForBBox) { + SolveGroup(g->h, andFindFree); + } else { + g->GenerateLoops(); + g->GenerateShellAndMesh(); + g->clean = true; + } + } else { + // The group falls outside the range, so just assume that + // it's good wherever we left it. The mesh is unchanged, + // and the parameters must be marked as known. + for(j = 0; j < SK.param.n; j++) { + Param *newp = &(SK.param.elem[j]); + + Param *prevp = prev.FindByIdNoOops(newp->h); + if(prevp) newp->known = true; + } + } + } + } + + // And update any reference dimensions with their new values + for(i = 0; i < SK.constraint.n; i++) { + Constraint *c = &(SK.constraint.elem[i]); + if(c->reference) { + c->ModifyToSatisfy(); + } + } + + // Make sure the point that we're tracing exists. + if(traced.point.v && !SK.entity.FindByIdNoOops(traced.point)) { + traced.point = Entity::NO_ENTITY; + } + // And if we're tracing a point, add its new value to the path + if(traced.point.v) { + Entity *pt = SK.GetEntity(traced.point); + traced.path.AddPoint(pt->PointGetNum()); + } + + prev.Clear(); + InvalidateGraphics(); + + // Remove nonexistent selection items, for same reason we waited till + // the end to put up a dialog box. + GW.ClearNonexistentSelectionItems(); + + if(deleted.requests > 0 || deleted.constraints > 0 || deleted.groups > 0) { + // All sorts of interesting things could have happened; for example, + // the active group or active workplane could have been deleted. So + // clear all that out. + if(deleted.groups > 0) { + SS.TW.ClearSuper(); + } + ScheduleShowTW(); + GW.ClearSuper(); + + // People get annoyed if I complain whenever they delete any request, + // and I otherwise will, since those always come with pt-coincident + // constraints. + if(deleted.requests > 0 || deleted.nonTrivialConstraints > 0 || + deleted.groups > 0) + { + // Don't display any errors until we've regenerated fully. The + // sketch is not necessarily in a consistent state until we've + // pruned any orphaned etc. objects, and the message loop for the + // messagebox could allow us to repaint and crash. But now we must + // be fine. + Message("Additional sketch elements were deleted, because they " + "depend on the element that was just deleted explicitly. " + "These include: \n" + " %d request%s\n" + " %d constraint%s\n" + " %d group%s" + "%s", + deleted.requests, deleted.requests == 1 ? "" : "s", + deleted.constraints, deleted.constraints == 1 ? "" : "s", + deleted.groups, deleted.groups == 1 ? "" : "s", + undo.cnt > 0 ? "\n\nChoose Edit -> Undo to undelete all elements." : ""); + } + + deleted = {}; + } + + FreeAllTemporary(); + allConsistent = true; + return; + +pruned: + // Restore the numerical guesses + SK.param.Clear(); + prev.MoveSelfInto(&(SK.param)); + // Try again + GenerateAll(type, andFindFree, genForBBox); +} + +void SolveSpaceUI::ForceReferences(void) { + // Force the values of the parameters that define the three reference + // coordinate systems. + static const struct { + hRequest hr; + Quaternion q; + } Quat[] = { + { Request::HREQUEST_REFERENCE_XY, { 1, 0, 0, 0, } }, + { Request::HREQUEST_REFERENCE_YZ, { 0.5, 0.5, 0.5, 0.5, } }, + { Request::HREQUEST_REFERENCE_ZX, { 0.5, -0.5, -0.5, -0.5, } }, + }; + for(int i = 0; i < 3; i++) { + hRequest hr = Quat[i].hr; + Entity *wrkpl = SK.GetEntity(hr.entity(0)); + // The origin for our coordinate system, always zero + Entity *origin = SK.GetEntity(wrkpl->point[0]); + origin->PointForceTo(Vector::From(0, 0, 0)); + SK.GetParam(origin->param[0])->known = true; + SK.GetParam(origin->param[1])->known = true; + SK.GetParam(origin->param[2])->known = true; + // The quaternion that defines the rotation, from the table. + Entity *normal = SK.GetEntity(wrkpl->normal); + normal->NormalForceTo(Quat[i].q); + SK.GetParam(normal->param[0])->known = true; + SK.GetParam(normal->param[1])->known = true; + SK.GetParam(normal->param[2])->known = true; + SK.GetParam(normal->param[3])->known = true; + } +} + +void SolveSpaceUI::MarkDraggedParams(void) { + sys.dragged.Clear(); + + for(int i = -1; i < SS.GW.pending.points.n; i++) { + hEntity hp; + if(i == -1) { + hp = SS.GW.pending.point; + } else { + hp = SS.GW.pending.points.elem[i]; + } + if(!hp.v) continue; + + // The pending point could be one in a group that has not yet + // been processed, in which case the lookup will fail; but + // that's not an error. + Entity *pt = SK.entity.FindByIdNoOops(hp); + if(pt) { + switch(pt->type) { + case Entity::POINT_N_TRANS: + case Entity::POINT_IN_3D: + sys.dragged.Add(&(pt->param[0])); + sys.dragged.Add(&(pt->param[1])); + sys.dragged.Add(&(pt->param[2])); + break; + + case Entity::POINT_IN_2D: + sys.dragged.Add(&(pt->param[0])); + sys.dragged.Add(&(pt->param[1])); + break; + } + } + } + if(SS.GW.pending.circle.v) { + Entity *circ = SK.entity.FindByIdNoOops(SS.GW.pending.circle); + if(circ) { + Entity *dist = SK.GetEntity(circ->distance); + switch(dist->type) { + case Entity::DISTANCE: + sys.dragged.Add(&(dist->param[0])); + break; + } + } + } + if(SS.GW.pending.normal.v) { + Entity *norm = SK.entity.FindByIdNoOops(SS.GW.pending.normal); + if(norm) { + switch(norm->type) { + case Entity::NORMAL_IN_3D: + sys.dragged.Add(&(norm->param[0])); + sys.dragged.Add(&(norm->param[1])); + sys.dragged.Add(&(norm->param[2])); + sys.dragged.Add(&(norm->param[3])); + break; + // other types are locked, so not draggable + } + } + } +} + +void SolveSpaceUI::SolveGroup(hGroup hg, bool andFindFree) { + int i; + // Clear out the system to be solved. + sys.entity.Clear(); + sys.param.Clear(); + sys.eq.Clear(); + // And generate all the params for requests in this group + for(i = 0; i < SK.request.n; i++) { + Request *r = &(SK.request.elem[i]); + if(r->group.v != hg.v) continue; + + r->Generate(&(sys.entity), &(sys.param)); + } + // And for the group itself + Group *g = SK.GetGroup(hg); + g->Generate(&(sys.entity), &(sys.param)); + // Set the initial guesses for all the params + for(i = 0; i < sys.param.n; i++) { + Param *p = &(sys.param.elem[i]); + p->known = false; + p->val = SK.GetParam(p->h)->val; + } + + MarkDraggedParams(); + g->solved.remove.Clear(); + int how = sys.Solve(g, &(g->solved.dof), + &(g->solved.remove), true, andFindFree); + bool isOkay = how == System::SOLVED_OKAY || + (g->allowRedundant && how == System::REDUNDANT_OKAY); + if(!isOkay || (isOkay && !g->IsSolvedOkay())) + { + TextWindow::ReportHowGroupSolved(g->h); + } + g->solved.how = how; + FreeAllTemporary(); +} + +bool SolveSpaceUI::ActiveGroupsOkay() { + for(int i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + if(!g->IsSolvedOkay()) + return false; + if(g->h.v == SS.GW.activeGroup.v) + break; + } + return true; +} + diff --git a/src/glhelper.cpp b/src/glhelper.cpp new file mode 100644 index 0000000..f789121 --- /dev/null +++ b/src/glhelper.cpp @@ -0,0 +1,921 @@ +//----------------------------------------------------------------------------- +// Helper functions that ultimately draw stuff with gl. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include +#include "solvespace.h" + +namespace SolveSpace { + +// A vector font. +#include "generated/vectorfont.table.h" + +// A bitmap font. +#include "generated/bitmapfont.table.h" + +static bool ColorLocked; +static bool DepthOffsetLocked; + +static const VectorGlyph &GetVectorGlyph(char32_t chr) { + int first = 0; + int last = sizeof(VectorFont) / sizeof(VectorGlyph); + while(first <= last) { + int mid = (first + last) / 2; + char32_t midChr = VectorFont[mid].character; + if(midChr > chr) { + last = mid - 1; // and first stays the same + continue; + } + if(midChr < chr) { + first = mid + 1; // and last stays the same + continue; + } + return VectorFont[mid]; + } + return GetVectorGlyph(0xfffd); // replacement character +} + +// Internally and in the UI, the vector font is sized using cap height. +#define FONT_SCALE(h) ((h)/(double)FONT_CAP_HEIGHT) +double ssglStrCapHeight(double h) +{ + return FONT_CAP_HEIGHT * FONT_SCALE(h) / SS.GW.scale; +} +double ssglStrFontSize(double h) +{ + return FONT_SIZE * FONT_SCALE(h) / SS.GW.scale; +} +double ssglStrWidth(const std::string &str, double h) +{ + int width = 0; + for(char32_t chr : ReadUTF8(str)) { + const VectorGlyph &glyph = GetVectorGlyph(chr); + if(glyph.baseCharacter != 0) { + const VectorGlyph &baseGlyph = GetVectorGlyph(glyph.baseCharacter); + width += max(glyph.advanceWidth, baseGlyph.advanceWidth); + } else { + width += glyph.advanceWidth; + } + } + return width * FONT_SCALE(h) / SS.GW.scale; +} +void ssglWriteTextRefCenter(const std::string &str, double h, Vector t, Vector u, Vector v, + ssglLineFn *fn, void *fndata) +{ + u = u.WithMagnitude(1); + v = v.WithMagnitude(1); + + double scale = FONT_SCALE(h)/SS.GW.scale; + double fh = ssglStrCapHeight(h); + double fw = ssglStrWidth(str, h); + + t = t.Plus(u.ScaledBy(-fw/2)); + t = t.Plus(v.ScaledBy(-fh/2)); + + // Apply additional offset to get an exact center alignment. + t = t.Plus(v.ScaledBy(-4608*scale)); + + ssglWriteText(str, h, t, u, v, fn, fndata); +} + +void ssglLineWidth(GLfloat width) { + // Intel GPUs with Mesa on *nix render thin lines poorly. + static bool workaroundChecked, workaroundEnabled; + if(!workaroundChecked) { + // ssglLineWidth can be called before GL is initialized + if(glGetString(GL_VENDOR)) { + workaroundChecked = true; + if(!strcmp((char*)glGetString(GL_VENDOR), "Intel Open Source Technology Center")) + workaroundEnabled = true; + } + } + + if(workaroundEnabled && width < 1.6f) + width = 1.6f; + + glLineWidth(width); +} + +static void LineDrawCallback(void *fndata, Vector a, Vector b) +{ + ssglLineWidth(1); + glBegin(GL_LINES); + ssglVertex3v(a); + ssglVertex3v(b); + glEnd(); +} + +Vector pixelAlign(Vector v) { + v = SS.GW.ProjectPoint3(v); + v.x = floor(v.x) + 0.5; + v.y = floor(v.y) + 0.5; + v = SS.GW.UnProjectPoint3(v); + return v; +} + +int ssglDrawCharacter(const VectorGlyph &glyph, Vector t, Vector o, Vector u, Vector v, + double scale, ssglLineFn *fn, void *fndata, bool gridFit) { + int advanceWidth = glyph.advanceWidth; + + if(glyph.baseCharacter != 0) { + const VectorGlyph &baseGlyph = GetVectorGlyph(glyph.baseCharacter); + int baseWidth = ssglDrawCharacter(baseGlyph, t, o, u, v, scale, fn, fndata, gridFit); + advanceWidth = max(glyph.advanceWidth, baseWidth); + } + + int actualWidth, offsetX; + if(gridFit) { + o.x += glyph.leftSideBearing; + offsetX = glyph.leftSideBearing; + actualWidth = glyph.boundingWidth; + if(actualWidth == 0) { + // Dot, "i", etc. + actualWidth = 1; + } + } else { + offsetX = 0; + actualWidth = advanceWidth; + } + + Vector tt = t; + tt = tt.Plus(u.ScaledBy(o.x * scale)); + tt = tt.Plus(v.ScaledBy(o.y * scale)); + + Vector tu = tt; + tu = tu.Plus(u.ScaledBy(actualWidth * scale)); + + Vector tv = tt; + tv = tv.Plus(v.ScaledBy(FONT_CAP_HEIGHT * scale)); + + if(gridFit) { + tt = pixelAlign(tt); + tu = pixelAlign(tu); + tv = pixelAlign(tv); + } + + tu = tu.Minus(tt).ScaledBy(1.0 / actualWidth); + tv = tv.Minus(tt).ScaledBy(1.0 / FONT_CAP_HEIGHT); + + const int16_t *data = glyph.data; + bool pen_up = true; + Vector prevp; + while(true) { + int16_t x = *data++; + int16_t y = *data++; + + if(x == PEN_UP && y == PEN_UP) { + if(pen_up) break; + pen_up = true; + } else { + Vector p = tt; + p = p.Plus(tu.ScaledBy(x - offsetX)); + p = p.Plus(tv.ScaledBy(y)); + if(!pen_up) fn(fndata, prevp, p); + prevp = p; + pen_up = false; + } + } + + return advanceWidth; +} + +void ssglWriteText(const std::string &str, double h, Vector t, Vector u, Vector v, + ssglLineFn *fn, void *fndata) +{ + if(!fn) fn = LineDrawCallback; + u = u.WithMagnitude(1); + v = v.WithMagnitude(1); + + // Perform grid-fitting only when the text is parallel to the view plane. + bool gridFit = !SS.exportMode && u.Equals(SS.GW.projRight) && v.Equals(SS.GW.projUp); + + double scale = FONT_SCALE(h) / SS.GW.scale; + Vector o = { 3840.0, 3840.0, 0.0 }; + for(char32_t chr : ReadUTF8(str)) { + const VectorGlyph &glyph = GetVectorGlyph(chr); + o.x += ssglDrawCharacter(glyph, t, o, u, v, scale, fn, fndata, gridFit); + } +} + +void ssglVertex3v(Vector u) +{ + glVertex3f((GLfloat)u.x, (GLfloat)u.y, (GLfloat)u.z); +} + +void ssglAxisAlignedQuad(double l, double r, double t, double b, bool lone) +{ + if(lone) glBegin(GL_QUADS); + glVertex2d(l, t); + glVertex2d(l, b); + glVertex2d(r, b); + glVertex2d(r, t); + if(lone) glEnd(); +} + +void ssglAxisAlignedLineLoop(double l, double r, double t, double b) +{ + glBegin(GL_LINE_LOOP); + glVertex2d(l, t); + glVertex2d(l, b); + glVertex2d(r, b); + glVertex2d(r, t); + glEnd(); +} + +static void FatLineEndcap(Vector p, Vector u, Vector v) +{ + // A table of cos and sin of (pi*i/10 + pi/2), as i goes from 0 to 10 + static const double Circle[11][2] = { + { 0.0000, 1.0000 }, + { -0.3090, 0.9511 }, + { -0.5878, 0.8090 }, + { -0.8090, 0.5878 }, + { -0.9511, 0.3090 }, + { -1.0000, 0.0000 }, + { -0.9511, -0.3090 }, + { -0.8090, -0.5878 }, + { -0.5878, -0.8090 }, + { -0.3090, -0.9511 }, + { 0.0000, -1.0000 }, + }; + glBegin(GL_TRIANGLE_FAN); + for(int i = 0; i <= 10; i++) { + double c = Circle[i][0], s = Circle[i][1]; + ssglVertex3v(p.Plus(u.ScaledBy(c)).Plus(v.ScaledBy(s))); + } + glEnd(); +} + +void ssglLine(const Vector &a, const Vector &b, double pixelWidth, bool maybeFat) { + if(!maybeFat || pixelWidth <= 3.0) { + glBegin(GL_LINES); + ssglVertex3v(a); + ssglVertex3v(b); + glEnd(); + } else { + ssglFatLine(a, b, pixelWidth / SS.GW.scale); + } +} + +void ssglPoint(Vector p, double pixelSize) +{ + if(/*!maybeFat || */pixelSize <= 3.0) { + glBegin(GL_LINES); + Vector u = SS.GW.projRight.WithMagnitude(pixelSize / SS.GW.scale / 2.0); + ssglVertex3v(p.Minus(u)); + ssglVertex3v(p.Plus(u)); + glEnd(); + } else { + Vector u = SS.GW.projRight.WithMagnitude(pixelSize / SS.GW.scale / 2.0); + Vector v = SS.GW.projUp.WithMagnitude(pixelSize / SS.GW.scale / 2.0); + + FatLineEndcap(p, u, v); + FatLineEndcap(p, u.ScaledBy(-1.0), v); + } +} + +void ssglStippledLine(Vector a, Vector b, double width, + int stippleType, double stippleScale, bool maybeFat) +{ + const char *stipplePattern; + switch(stippleType) { + case Style::STIPPLE_CONTINUOUS: ssglLine(a, b, width, maybeFat); return; + case Style::STIPPLE_DASH: stipplePattern = "- "; break; + case Style::STIPPLE_LONG_DASH: stipplePattern = "_ "; break; + case Style::STIPPLE_DASH_DOT: stipplePattern = "-."; break; + case Style::STIPPLE_DASH_DOT_DOT: stipplePattern = "-.."; break; + case Style::STIPPLE_DOT: stipplePattern = "."; break; + case Style::STIPPLE_FREEHAND: stipplePattern = "~"; break; + case Style::STIPPLE_ZIGZAG: stipplePattern = "~__"; break; + default: oops(); + } + ssglStippledLine(a, b, width, stipplePattern, stippleScale, maybeFat); +} + +void ssglStippledLine(Vector a, Vector b, double width, + const char *stipplePattern, double stippleScale, bool maybeFat) +{ + if(stipplePattern == NULL || *stipplePattern == 0) oops(); + + Vector dir = b.Minus(a); + double len = dir.Magnitude(); + dir = dir.WithMagnitude(1.0); + + const char *si = stipplePattern; + double end = len; + double ss = stippleScale / 2.0; + do { + double start = end; + switch(*si) { + case ' ': + end -= 1.0 * ss; + break; + + case '-': + start = max(start - 0.5 * ss, 0.0); + end = max(start - 2.0 * ss, 0.0); + if(start == end) break; + ssglLine(a.Plus(dir.ScaledBy(start)), a.Plus(dir.ScaledBy(end)), width, maybeFat); + end = max(end - 0.5 * ss, 0.0); + break; + + case '_': + end = max(end - 4.0 * ss, 0.0); + ssglLine(a.Plus(dir.ScaledBy(start)), a.Plus(dir.ScaledBy(end)), width, maybeFat); + break; + + case '.': + end = max(end - 0.5 * ss, 0.0); + if(end == 0.0) break; + ssglPoint(a.Plus(dir.ScaledBy(end)), width); + end = max(end - 0.5 * ss, 0.0); + break; + + case '~': { + Vector ab = b.Minus(a); + Vector gn = (SS.GW.projRight).Cross(SS.GW.projUp); + Vector abn = (ab.Cross(gn)).WithMagnitude(1); + abn = abn.Minus(gn.ScaledBy(gn.Dot(abn))); + double pws = 2.0 * width / SS.GW.scale; + + end = max(end - 0.5 * ss, 0.0); + Vector aa = a.Plus(dir.ScaledBy(start)); + Vector bb = a.Plus(dir.ScaledBy(end)) + .Plus(abn.ScaledBy(pws * (start - end) / (0.5 * ss))); + ssglLine(aa, bb, width, maybeFat); + if(end == 0.0) break; + + start = end; + end = max(end - 1.0 * ss, 0.0); + aa = a.Plus(dir.ScaledBy(end)) + .Plus(abn.ScaledBy(pws)) + .Minus(abn.ScaledBy(2.0 * pws * (start - end) / ss)); + ssglLine(bb, aa, width, maybeFat); + if(end == 0.0) break; + + start = end; + end = max(end - 0.5 * ss, 0.0); + bb = a.Plus(dir.ScaledBy(end)) + .Minus(abn.ScaledBy(pws)) + .Plus(abn.ScaledBy(pws * (start - end) / (0.5 * ss))); + ssglLine(aa, bb, width, maybeFat); + break; + } + + default: oops(); + } + if(*(++si) == 0) si = stipplePattern; + } while(end > 0.0); +} + +void ssglFatLine(Vector a, Vector b, double width) +{ + if(a.EqualsExactly(b)) return; + // The half-width of the line we're drawing. + double hw = width / 2; + Vector ab = b.Minus(a); + Vector gn = (SS.GW.projRight).Cross(SS.GW.projUp); + Vector abn = (ab.Cross(gn)).WithMagnitude(1); + abn = abn.Minus(gn.ScaledBy(gn.Dot(abn))); + // So now abn is normal to the projection of ab into the screen, so the + // line will always have constant thickness as the view is rotated. + + abn = abn.WithMagnitude(hw); + ab = gn.Cross(abn); + ab = ab. WithMagnitude(hw); + + // The body of a line is a quad + glBegin(GL_QUADS); + ssglVertex3v(a.Minus(abn)); + ssglVertex3v(b.Minus(abn)); + ssglVertex3v(b.Plus (abn)); + ssglVertex3v(a.Plus (abn)); + glEnd(); + // And the line has two semi-circular end caps. + FatLineEndcap(a, ab, abn); + FatLineEndcap(b, ab.ScaledBy(-1), abn); +} + + +void ssglLockColorTo(RgbaColor rgb) +{ + ColorLocked = false; + glColor3d(rgb.redF(), rgb.greenF(), rgb.blueF()); + ColorLocked = true; +} + +void ssglUnlockColor(void) +{ + ColorLocked = false; +} + +void ssglColorRGB(RgbaColor rgb) +{ + // Is there a bug in some graphics drivers where this is not equivalent + // to glColor3d? There seems to be... + ssglColorRGBa(rgb, 1.0); +} + +void ssglColorRGBa(RgbaColor rgb, double a) +{ + if(!ColorLocked) glColor4d(rgb.redF(), rgb.greenF(), rgb.blueF(), a); +} + +static void Stipple(bool forSel) +{ + static bool Init; + const int BYTES = (32*32)/8; + static GLubyte HoverMask[BYTES]; + static GLubyte SelMask[BYTES]; + if(!Init) { + int x, y; + for(x = 0; x < 32; x++) { + for(y = 0; y < 32; y++) { + int i = y*4 + x/8, b = x % 8; + int ym = y % 4, xm = x % 4; + for(int k = 0; k < 2; k++) { + if(xm >= 1 && xm <= 2 && ym >= 1 && ym <= 2) { + (k == 0 ? SelMask : HoverMask)[i] |= (0x80 >> b); + } + ym = (ym + 2) % 4; xm = (xm + 2) % 4; + } + } + } + Init = true; + } + + glEnable(GL_POLYGON_STIPPLE); + if(forSel) { + glPolygonStipple(SelMask); + } else { + glPolygonStipple(HoverMask); + } +} + +static void StippleTriangle(STriangle *tr, bool s, RgbaColor rgb) +{ + glEnd(); + glDisable(GL_LIGHTING); + ssglColorRGB(rgb); + Stipple(s); + glBegin(GL_TRIANGLES); + ssglVertex3v(tr->a); + ssglVertex3v(tr->b); + ssglVertex3v(tr->c); + glEnd(); + glEnable(GL_LIGHTING); + glDisable(GL_POLYGON_STIPPLE); + glBegin(GL_TRIANGLES); +} + +void ssglFillMesh(bool useSpecColor, RgbaColor specColor, + SMesh *m, uint32_t h, uint32_t s1, uint32_t s2) +{ + RgbaColor rgbHovered = Style::Color(Style::HOVERED), + rgbSelected = Style::Color(Style::SELECTED); + + glEnable(GL_NORMALIZE); + bool hasMaterial = false; + RgbaColor prevColor; + glBegin(GL_TRIANGLES); + for(int i = 0; i < m->l.n; i++) { + STriangle *tr = &(m->l.elem[i]); + + RgbaColor color; + if(useSpecColor) { + color = specColor; + } else { + color = tr->meta.color; + } + if(!hasMaterial || !color.Equals(prevColor)) { + GLfloat mpf[] = { color.redF(), color.greenF(), color.blueF(), color.alphaF() }; + glEnd(); + glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mpf); + prevColor = color; + hasMaterial = true; + glBegin(GL_TRIANGLES); + } + + if(tr->an.EqualsExactly(Vector::From(0, 0, 0))) { + // Compute the normal from the vertices + Vector n = tr->Normal(); + glNormal3d(n.x, n.y, n.z); + ssglVertex3v(tr->a); + ssglVertex3v(tr->b); + ssglVertex3v(tr->c); + } else { + // Use the exact normals that are specified + glNormal3d((tr->an).x, (tr->an).y, (tr->an).z); + ssglVertex3v(tr->a); + + glNormal3d((tr->bn).x, (tr->bn).y, (tr->bn).z); + ssglVertex3v(tr->b); + + glNormal3d((tr->cn).x, (tr->cn).y, (tr->cn).z); + ssglVertex3v(tr->c); + } + + if((s1 != 0 && tr->meta.face == s1) || + (s2 != 0 && tr->meta.face == s2)) + { + StippleTriangle(tr, true, rgbSelected); + } + if(h != 0 && tr->meta.face == h) { + StippleTriangle(tr, false, rgbHovered); + } + } + glEnd(); +} + +static void SSGL_CALLBACK Vertex(Vector *p) +{ + ssglVertex3v(*p); +} +void ssglFillPolygon(SPolygon *p) +{ + GLUtesselator *gt = gluNewTess(); + gluTessCallback(gt, GLU_TESS_BEGIN, (ssglCallbackFptr *)glBegin); + gluTessCallback(gt, GLU_TESS_END, (ssglCallbackFptr *)glEnd); + gluTessCallback(gt, GLU_TESS_VERTEX, (ssglCallbackFptr *)Vertex); + + ssglTesselatePolygon(gt, p); + + gluDeleteTess(gt); +} + +static void SSGL_CALLBACK Combine(double coords[3], void *vertexData[4], + float weight[4], void **outData) +{ + Vector *n = (Vector *)AllocTemporary(sizeof(Vector)); + n->x = coords[0]; + n->y = coords[1]; + n->z = coords[2]; + + *outData = n; +} +void ssglTesselatePolygon(GLUtesselator *gt, SPolygon *p) +{ + int i, j; + + gluTessCallback(gt, GLU_TESS_COMBINE, (ssglCallbackFptr *)Combine); + gluTessProperty(gt, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD); + + Vector normal = p->normal; + glNormal3d(normal.x, normal.y, normal.z); + gluTessNormal(gt, normal.x, normal.y, normal.z); + + gluTessBeginPolygon(gt, NULL); + for(i = 0; i < p->l.n; i++) { + SContour *sc = &(p->l.elem[i]); + gluTessBeginContour(gt); + for(j = 0; j < (sc->l.n-1); j++) { + SPoint *sp = &(sc->l.elem[j]); + double ap[3]; + ap[0] = sp->p.x; + ap[1] = sp->p.y; + ap[2] = sp->p.z; + gluTessVertex(gt, ap, &(sp->p)); + } + gluTessEndContour(gt); + } + gluTessEndPolygon(gt); +} + +void ssglDebugPolygon(SPolygon *p) +{ + int i, j; + ssglLineWidth(2); + glPointSize(7); + glDisable(GL_DEPTH_TEST); + for(i = 0; i < p->l.n; i++) { + SContour *sc = &(p->l.elem[i]); + for(j = 0; j < (sc->l.n-1); j++) { + Vector a = (sc->l.elem[j]).p; + Vector b = (sc->l.elem[j+1]).p; + + ssglLockColorTo(RGBi(0, 0, 255)); + Vector d = (a.Minus(b)).WithMagnitude(-0); + glBegin(GL_LINES); + ssglVertex3v(a.Plus(d)); + ssglVertex3v(b.Minus(d)); + glEnd(); + ssglLockColorTo(RGBi(255, 0, 0)); + glBegin(GL_POINTS); + ssglVertex3v(a.Plus(d)); + ssglVertex3v(b.Minus(d)); + glEnd(); + } + } +} + +void ssglDrawEdges(SEdgeList *el, bool endpointsToo, hStyle hs) +{ + double lineWidth = Style::Width(hs); + int stippleType = Style::PatternType(hs); + double stippleScale = Style::StippleScaleMm(hs); + ssglLineWidth(float(lineWidth)); + ssglColorRGB(Style::Color(hs)); + + SEdge *se; + for(se = el->l.First(); se; se = el->l.NextAfter(se)) { + ssglStippledLine(se->a, se->b, lineWidth, stippleType, stippleScale, + /*maybeFat=*/true); + } + + if(endpointsToo) { + glPointSize(12); + glBegin(GL_POINTS); + for(se = el->l.First(); se; se = el->l.NextAfter(se)) { + ssglVertex3v(se->a); + ssglVertex3v(se->b); + } + glEnd(); + } +} + +void ssglDrawOutlines(SOutlineList *sol, Vector projDir, hStyle hs) +{ + double lineWidth = Style::Width(hs); + int stippleType = Style::PatternType(hs); + double stippleScale = Style::StippleScaleMm(hs); + ssglLineWidth((float)lineWidth); + ssglColorRGB(Style::Color(hs)); + + sol->FillOutlineTags(projDir); + for(SOutline *so = sol->l.First(); so; so = sol->l.NextAfter(so)) { + if(!so->tag) continue; + ssglStippledLine(so->a, so->b, lineWidth, stippleType, stippleScale, + /*maybeFat=*/true); + } +} + +void ssglDebugMesh(SMesh *m) +{ + int i; + ssglLineWidth(1); + glPointSize(7); + ssglDepthRangeOffset(1); + ssglUnlockColor(); + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + ssglColorRGBa(RGBi(0, 255, 0), 1.0); + glBegin(GL_TRIANGLES); + for(i = 0; i < m->l.n; i++) { + STriangle *t = &(m->l.elem[i]); + if(t->tag) continue; + + ssglVertex3v(t->a); + ssglVertex3v(t->b); + ssglVertex3v(t->c); + } + glEnd(); + ssglDepthRangeOffset(0); + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); +} + +void ssglMarkPolygonNormal(SPolygon *p) +{ + Vector tail = Vector::From(0, 0, 0); + int i, j, cnt = 0; + // Choose some reasonable center point. + for(i = 0; i < p->l.n; i++) { + SContour *sc = &(p->l.elem[i]); + for(j = 0; j < (sc->l.n-1); j++) { + SPoint *sp = &(sc->l.elem[j]); + tail = tail.Plus(sp->p); + cnt++; + } + } + if(cnt == 0) return; + tail = tail.ScaledBy(1.0/cnt); + + Vector gn = SS.GW.projRight.Cross(SS.GW.projUp); + Vector tip = tail.Plus((p->normal).WithMagnitude(40/SS.GW.scale)); + Vector arrow = (p->normal).WithMagnitude(15/SS.GW.scale); + + glColor3d(1, 1, 0); + glBegin(GL_LINES); + ssglVertex3v(tail); + ssglVertex3v(tip); + ssglVertex3v(tip); + ssglVertex3v(tip.Minus(arrow.RotatedAbout(gn, 0.6))); + ssglVertex3v(tip); + ssglVertex3v(tip.Minus(arrow.RotatedAbout(gn, -0.6))); + glEnd(); + glEnable(GL_LIGHTING); +} + +void ssglDepthRangeOffset(int units) +{ + if(!DepthOffsetLocked) { + // The size of this step depends on the resolution of the Z buffer; for + // a 16-bit buffer, this should be fine. + double d = units/60000.0; + glDepthRange(0.1-d, 1-d); + } +} + +void ssglDepthRangeLockToFront(bool yes) +{ + if(yes) { + DepthOffsetLocked = true; + glDepthRange(0, 0); + } else { + DepthOffsetLocked = false; + ssglDepthRangeOffset(0); + } +} + +const int BitmapFontChunkSize = 64 * 64; +static bool BitmapFontChunkInitialized[0x10000 / BitmapFontChunkSize]; +static int BitmapFontCurrentChunk = -1; + +static void CreateBitmapFontChunk(const uint8_t *source, size_t sourceLength, + int textureIndex) +{ + // Place the font in our texture in a two-dimensional grid. + // The maximum texture size that is reasonably supported is 1024x1024. + const size_t fontTextureSize = BitmapFontChunkSize*16*16; + uint8_t *fontTexture = (uint8_t *)malloc(fontTextureSize), + *mappedTexture = (uint8_t *)malloc(fontTextureSize); + + z_stream stream; + stream.zalloc = Z_NULL; + stream.zfree = Z_NULL; + stream.opaque = Z_NULL; + if(inflateInit(&stream) != Z_OK) + oops(); + + stream.next_in = (Bytef *)source; + stream.avail_in = sourceLength; + stream.next_out = fontTexture; + stream.avail_out = fontTextureSize; + if(inflate(&stream, Z_NO_FLUSH) != Z_STREAM_END) + oops(); + if(stream.avail_out != 0) + oops(); + + inflateEnd(&stream); + + for(int a = 0; a < BitmapFontChunkSize; a++) { + int row = a / 64, col = a % 64; + + for(int i = 0; i < 16; i++) { + memcpy(mappedTexture + row*64*16*16 + col*16 + i*64*16, + fontTexture + a*16*16 + i*16, + 16); + } + } + + free(fontTexture); + + glBindTexture(GL_TEXTURE_2D, textureIndex); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, + 16*64, 64*16, + 0, + GL_ALPHA, GL_UNSIGNED_BYTE, + mappedTexture); + + free(mappedTexture); +} + +static void SwitchToBitmapFontChunkFor(char32_t chr) +{ + int plane = chr / BitmapFontChunkSize, + textureIndex = TEXTURE_BITMAP_FONT + plane; + + if(BitmapFontCurrentChunk != textureIndex) { + glEnd(); + + if(!BitmapFontChunkInitialized[plane]) { + CreateBitmapFontChunk(CompressedFontTexture[plane].data, + CompressedFontTexture[plane].length, + textureIndex); + BitmapFontChunkInitialized[plane] = true; + } else { + glBindTexture(GL_TEXTURE_2D, textureIndex); + } + + BitmapFontCurrentChunk = textureIndex; + + glBegin(GL_QUADS); + } +} + +void ssglInitializeBitmapFont() +{ + memset(BitmapFontChunkInitialized, 0, sizeof(BitmapFontChunkInitialized)); + BitmapFontCurrentChunk = -1; +} + +int ssglBitmapCharWidth(char32_t chr) { + if(!CodepointProperties[chr].exists) + chr = 0xfffd; // replacement character + + return CodepointProperties[chr].isWide ? 2 : 1; +} + +void ssglBitmapCharQuad(char32_t chr, double x, double y) +{ + int w, h; + + if(!CodepointProperties[chr].exists) + chr = 0xfffd; // replacement character + + h = 16; + if(chr >= 0xe000 && chr <= 0xefff) { + // Special character, like a checkbox or a radio button + w = 16; + x -= 3; + } else if(CodepointProperties[chr].isWide) { + // Wide (usually CJK or reserved) character + w = 16; + } else { + // Normal character + w = 8; + } + + if(chr != ' ' && chr != 0) { + int n = chr % BitmapFontChunkSize; + int row = n / 64, col = n % 64; + double s0 = col/64.0, + s1 = (col+1)/64.0, + t0 = row/64.0, + t1 = t0 + (w/16.0)/64; + + SwitchToBitmapFontChunkFor(chr); + + glTexCoord2d(s1, t0); + glVertex2d(x, y); + + glTexCoord2d(s1, t1); + glVertex2d(x + w, y); + + glTexCoord2d(s0, t1); + glVertex2d(x + w, y - h); + + glTexCoord2d(s0, t0); + glVertex2d(x, y - h); + } +} + +void ssglBitmapText(const std::string &str, Vector p) +{ + glEnable(GL_TEXTURE_2D); + glBegin(GL_QUADS); + for(char32_t chr : ReadUTF8(str)) { + ssglBitmapCharQuad(chr, p.x, p.y); + p.x += 8 * ssglBitmapCharWidth(chr); + } + glEnd(); + glDisable(GL_TEXTURE_2D); +} + +void ssglDrawPixelsWithTexture(uint8_t *data, int w, int h) +{ +#define MAX_DIM 32 + static uint8_t Texture[MAX_DIM*MAX_DIM*3]; + int i, j; + if(w > MAX_DIM || h > MAX_DIM) oops(); + + for(i = 0; i < w; i++) { + for(j = 0; j < h; j++) { + Texture[(j*MAX_DIM + i)*3 + 0] = data[(j*w + i)*3 + 0]; + Texture[(j*MAX_DIM + i)*3 + 1] = data[(j*w + i)*3 + 1]; + Texture[(j*MAX_DIM + i)*3 + 2] = data[(j*w + i)*3 + 2]; + } + } + + glBindTexture(GL_TEXTURE_2D, TEXTURE_DRAW_PIXELS); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, MAX_DIM, MAX_DIM, 0, + GL_RGB, GL_UNSIGNED_BYTE, Texture); + + glEnable(GL_TEXTURE_2D); + glBegin(GL_QUADS); + glTexCoord2d(0, 0); + glVertex2d(0, h); + + glTexCoord2d(((double)w)/MAX_DIM, 0); + glVertex2d(w, h); + + glTexCoord2d(((double)w)/MAX_DIM, ((double)h)/MAX_DIM); + glVertex2d(w, 0); + + glTexCoord2d(0, ((double)h)/MAX_DIM); + glVertex2d(0, 0); + glEnd(); + glDisable(GL_TEXTURE_2D); +} + +}; diff --git a/src/graphicswin.cpp b/src/graphicswin.cpp new file mode 100644 index 0000000..e1531e5 --- /dev/null +++ b/src/graphicswin.cpp @@ -0,0 +1,1089 @@ +//----------------------------------------------------------------------------- +// Top-level implementation of the program's main window, in which a graphical +// representation of the model is drawn and edited by the user. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" +#include "config.h" + +#define mView (&GraphicsWindow::MenuView) +#define mEdit (&GraphicsWindow::MenuEdit) +#define mClip (&GraphicsWindow::MenuClipboard) +#define mReq (&GraphicsWindow::MenuRequest) +#define mCon (&Constraint::MenuConstrain) +#define mFile (&SolveSpaceUI::MenuFile) +#define mGrp (&Group::MenuGroup) +#define mAna (&SolveSpaceUI::MenuAnalyze) +#define mHelp (&SolveSpaceUI::MenuHelp) +#define DEL DELETE_KEY +#define ESC ESCAPE_KEY +#define S SHIFT_MASK +#define C CTRL_MASK +#define F(k) (FUNCTION_KEY_BASE+(k)) +#define TN MENU_ITEM_NORMAL +#define TC MENU_ITEM_CHECK +#define TR MENU_ITEM_RADIO +const GraphicsWindow::MenuEntry GraphicsWindow::menu[] = { +//level +// label id accel ty fn +{ 0, "&File", 0, 0, TN, NULL }, +{ 1, "&New", MNU_NEW, C|'N', TN, mFile }, +{ 1, "&Open...", MNU_OPEN, C|'O', TN, mFile }, +{ 1, "Open &Recent", MNU_OPEN_RECENT, 0, TN, mFile }, +{ 1, "&Save", MNU_SAVE, C|'S', TN, mFile }, +{ 1, "Save &As...", MNU_SAVE_AS, 0, TN, mFile }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Export &Image...", MNU_EXPORT_PNG, 0, TN, mFile }, +{ 1, "Export 2d &View...", MNU_EXPORT_VIEW, 0, TN, mFile }, +{ 1, "Export 2d &Section...", MNU_EXPORT_SECTION, 0, TN, mFile }, +{ 1, "Export 3d &Wireframe...", MNU_EXPORT_WIREFRAME, 0, TN, mFile }, +{ 1, "Export Triangle &Mesh...", MNU_EXPORT_MESH, 0, TN, mFile }, +{ 1, "Export &Surfaces...", MNU_EXPORT_SURFACES,0, TN, mFile }, +{ 1, "Im&port...", MNU_IMPORT ,0, TN, mFile }, +#ifndef __APPLE__ +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "E&xit", MNU_EXIT, C|'Q', TN, mFile }, +#endif + +{ 0, "&Edit", 0, 0, TN, NULL }, +{ 1, "&Undo", MNU_UNDO, C|'Z', TN, mEdit }, +{ 1, "&Redo", MNU_REDO, C|'Y', TN, mEdit }, +{ 1, "Re&generate All", MNU_REGEN_ALL, ' ', TN, mEdit }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Snap Selection to &Grid", MNU_SNAP_TO_GRID, '.', TN, mEdit }, +{ 1, "Rotate Imported &90°", MNU_ROTATE_90, '9', TN, mEdit }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Cu&t", MNU_CUT, C|'X', TN, mClip }, +{ 1, "&Copy", MNU_COPY, C|'C', TN, mClip }, +{ 1, "&Paste", MNU_PASTE, C|'V', TN, mClip }, +{ 1, "Paste &Transformed...", MNU_PASTE_TRANSFORM,C|'T', TN, mClip }, +{ 1, "&Delete", MNU_DELETE, DEL, TN, mClip }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Select &Edge Chain", MNU_SELECT_CHAIN, C|'E', TN, mEdit }, +{ 1, "Select &All", MNU_SELECT_ALL, C|'A', TN, mEdit }, +{ 1, "&Unselect All", MNU_UNSELECT_ALL, ESC, TN, mEdit }, + +{ 0, "&View", 0, 0, TN, NULL }, +{ 1, "Zoom &In", MNU_ZOOM_IN, '+', TN, mView }, +{ 1, "Zoom &Out", MNU_ZOOM_OUT, '-', TN, mView }, +{ 1, "Zoom To &Fit", MNU_ZOOM_TO_FIT, 'F', TN, mView }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Align View to &Workplane", MNU_ONTO_WORKPLANE, 'W', TN, mView }, +{ 1, "Nearest &Ortho View", MNU_NEAREST_ORTHO, F(2), TN, mView }, +{ 1, "Nearest &Isometric View", MNU_NEAREST_ISO, F(3), TN, mView }, +{ 1, "&Center View At Point", MNU_CENTER_VIEW, F(4), TN, mView }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Show Snap &Grid", MNU_SHOW_GRID, '>', TC, mView }, +{ 1, "Use &Perspective Projection", MNU_PERSPECTIVE_PROJ,'`', TC, mView }, +{ 1, NULL, 0, 0, TN, NULL }, +#if defined(__APPLE__) +{ 1, "Show Menu &Bar", MNU_SHOW_MENU_BAR, C|F(12), TC, mView }, +#endif +{ 1, "Show &Toolbar", MNU_SHOW_TOOLBAR, 0, TC, mView }, +{ 1, "Show Property Bro&wser", MNU_SHOW_TEXT_WND, '\t', TC, mView }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Dimensions in &Inches", MNU_UNITS_INCHES, 0, TR, mView }, +{ 1, "Dimensions in &Millimeters", MNU_UNITS_MM, 0, TR, mView }, +#if defined(HAVE_GTK) || defined(__APPLE__) +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "&Full Screen", MNU_FULL_SCREEN, C|F(11), TC, mView }, +#endif + +{ 0, "&New Group", 0, 0, TN, NULL }, +{ 1, "Sketch In &3d", MNU_GROUP_3D, S|'3', TN, mGrp }, +{ 1, "Sketch In New &Workplane", MNU_GROUP_WRKPL, S|'W', TN, mGrp }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Step &Translating", MNU_GROUP_TRANS, S|'T', TN, mGrp }, +{ 1, "Step &Rotating", MNU_GROUP_ROT, S|'R', TN, mGrp }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "E&xtrude", MNU_GROUP_EXTRUDE, S|'X', TN, mGrp }, +{ 1, "&Lathe", MNU_GROUP_LATHE, S|'L', TN, mGrp }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Link / Assemble...", MNU_GROUP_LINK, S|'I', TN, mGrp }, +{ 1, "Link Recent", MNU_GROUP_RECENT, 0, TN, mGrp }, + +{ 0, "&Sketch", 0, 0, TN, NULL }, +{ 1, "In &Workplane", MNU_SEL_WORKPLANE, '2', TR, mReq }, +{ 1, "Anywhere In &3d", MNU_FREE_IN_3D, '3', TR, mReq }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Datum &Point", MNU_DATUM_POINT, 'P', TN, mReq }, +{ 1, "&Workplane", MNU_WORKPLANE, 0, TN, mReq }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Line &Segment", MNU_LINE_SEGMENT, 'S', TN, mReq }, +{ 1, "C&onstruction Line Segment", MNU_CONSTR_SEGMENT, S|'S', TN, mReq }, +{ 1, "&Rectangle", MNU_RECTANGLE, 'R', TN, mReq }, +{ 1, "&Circle", MNU_CIRCLE, 'C', TN, mReq }, +{ 1, "&Arc of a Circle", MNU_ARC, 'A', TN, mReq }, +{ 1, "&Bezier Cubic Spline", MNU_CUBIC, 'B', TN, mReq }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "&Text in TrueType Font", MNU_TTF_TEXT, 'T', TN, mReq }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "To&ggle Construction", MNU_CONSTRUCTION, 'G', TN, mReq }, +{ 1, "Tangent &Arc at Point", MNU_TANGENT_ARC, S|'A', TN, mReq }, +{ 1, "Split Curves at &Intersection", MNU_SPLIT_CURVES, 'I', TN, mReq }, + +{ 0, "&Constrain", 0, 0, TN, NULL }, +{ 1, "&Distance / Diameter", MNU_DISTANCE_DIA, 'D', TN, mCon }, +{ 1, "Re&ference Dimension", MNU_REF_DISTANCE, S|'D', TN, mCon }, +{ 1, "A&ngle", MNU_ANGLE, 'N', TN, mCon }, +{ 1, "Reference An&gle", MNU_REF_ANGLE, S|'N', TN, mCon }, +{ 1, "Other S&upplementary Angle", MNU_OTHER_ANGLE, 'U', TN, mCon }, +{ 1, "Toggle R&eference Dim", MNU_REFERENCE, 'E', TN, mCon }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "&Horizontal", MNU_HORIZONTAL, 'H', TN, mCon }, +{ 1, "&Vertical", MNU_VERTICAL, 'V', TN, mCon }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "&On Point / Curve / Plane", MNU_ON_ENTITY, 'O', TN, mCon }, +{ 1, "E&qual Length / Radius / Angle", MNU_EQUAL, 'Q', TN, mCon }, +{ 1, "Length Ra&tio", MNU_RATIO, 'Z', TN, mCon }, +{ 1, "Length Diff&erence", MNU_DIFFERENCE, 'J', TN, mCon }, +{ 1, "At &Midpoint", MNU_AT_MIDPOINT, 'M', TN, mCon }, +{ 1, "S&ymmetric", MNU_SYMMETRIC, 'Y', TN, mCon }, +{ 1, "Para&llel / Tangent", MNU_PARALLEL, 'L', TN, mCon }, +{ 1, "&Perpendicular", MNU_PERPENDICULAR, '[', TN, mCon }, +{ 1, "Same Orient&ation", MNU_ORIENTED_SAME, 'X', TN, mCon }, +{ 1, "Lock Point Where &Dragged", MNU_WHERE_DRAGGED, ']', TN, mCon }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Comment", MNU_COMMENT, ';', TN, mCon }, + +{ 0, "&Analyze", 0, 0, TN, NULL }, +{ 1, "Measure &Volume", MNU_VOLUME, C|S|'V', TN, mAna }, +{ 1, "Measure &Area", MNU_AREA, C|S|'A', TN, mAna }, +{ 1, "Show &Interfering Parts", MNU_INTERFERENCE, C|S|'I', TN, mAna }, +{ 1, "Show &Naked Edges", MNU_NAKED_EDGES, C|S|'N', TN, mAna }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Show Degrees of &Freedom", MNU_SHOW_DOF, C|S|'F', TN, mAna }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "&Trace Point", MNU_TRACE_PT, C|S|'T', TN, mAna }, +{ 1, "&Stop Tracing...", MNU_STOP_TRACING, C|S|'S', TN, mAna }, +{ 1, "Step &Dimension...", MNU_STEP_DIM, C|S|'D', TN, mAna }, + +{ 0, "&Help", 0, 0, TN, NULL }, +{ 1, "&Website / Manual", MNU_WEBSITE, 0, TN, mHelp }, +#ifndef __APPLE__ +{ 1, "&About", MNU_ABOUT, 0, TN, mHelp }, +#endif + +{ -1, 0, 0, 0, TN, 0 } +}; + +#undef DEL +#undef ESC +#undef S +#undef C +#undef F +#undef TN +#undef TC +#undef TR + +std::string SolveSpace::MakeAcceleratorLabel(int accel) { + if(!accel) return ""; + + std::string label; + if(accel & GraphicsWindow::CTRL_MASK) { + label += "Ctrl+"; + } + if(accel & GraphicsWindow::SHIFT_MASK) { + label += "Shift+"; + } + if(accel >= GraphicsWindow::FUNCTION_KEY_BASE + 1 && + accel <= GraphicsWindow::FUNCTION_KEY_BASE + 12) { + label += ssprintf("F%d", accel - GraphicsWindow::FUNCTION_KEY_BASE); + } else if(accel == '\t') { + label += "Tab"; + } else if(accel == ' ') { + label += "Space"; + } else if(accel == GraphicsWindow::ESCAPE_KEY) { + label += "Esc"; + } else if(accel == GraphicsWindow::DELETE_KEY) { + label += "Del"; + } else { + label += (char)(accel & 0xff); + } + return label; +} + +void GraphicsWindow::Init(void) { + scale = 5; + offset = Vector::From(0, 0, 0); + projRight = Vector::From(1, 0, 0); + projUp = Vector::From(0, 1, 0); + + // Make sure those are valid; could get a mouse move without a mouse + // down if someone depresses the button, then drags into our window. + orig.projRight = projRight; + orig.projUp = projUp; + + // And with the last group active + activeGroup = SK.groupOrder.elem[SK.groupOrder.n - 1]; + SK.GetGroup(activeGroup)->Activate(); + + showWorkplanes = false; + showNormals = true; + showPoints = true; + showConstraints = true; + showHdnLines = false; + showShaded = true; + showEdges = true; + showMesh = false; + showOutlines = false; + + showTextWindow = true; + ShowTextWindow(showTextWindow); + + showSnapGrid = false; + context.active = false; + + // Do this last, so that all the menus get updated correctly. + ClearSuper(); +} + +void GraphicsWindow::AnimateOntoWorkplane(void) { + if(!LockedInWorkplane()) return; + + Entity *w = SK.GetEntity(ActiveWorkplane()); + Quaternion quatf = w->Normal()->NormalGetNum(); + Vector offsetf = (SK.GetEntity(w->point[0])->PointGetNum()).ScaledBy(-1); + + AnimateOnto(quatf, offsetf); +} + +void GraphicsWindow::AnimateOnto(Quaternion quatf, Vector offsetf) { + // Get our initial orientation and translation. + Quaternion quat0 = Quaternion::From(projRight, projUp); + Vector offset0 = offset; + + // Make sure we take the shorter of the two possible paths. + double mp = (quatf.Minus(quat0)).Magnitude(); + double mm = (quatf.Plus(quat0)).Magnitude(); + if(mp > mm) { + quatf = quatf.ScaledBy(-1); + mp = mm; + } + double mo = (offset0.Minus(offsetf)).Magnitude()*scale; + + // Animate transition, unless it's a tiny move. + int32_t dt = (mp < 0.01 && mo < 10) ? (-20) : + (int32_t)(100 + 1000*mp + 0.4*mo); + // Don't ever animate for longer than 2000 ms; we can get absurdly + // long translations (as measured in pixels) if the user zooms out, moves, + // and then zooms in again. + if(dt > 2000) dt = 2000; + int64_t tn, t0 = GetMilliseconds(); + double s = 0; + Quaternion dq = quatf.Times(quat0.Inverse()); + do { + offset = (offset0.ScaledBy(1 - s)).Plus(offsetf.ScaledBy(s)); + Quaternion quat = (dq.ToThe(s)).Times(quat0); + quat = quat.WithMagnitude(1); + + projRight = quat.RotationU(); + projUp = quat.RotationV(); + PaintGraphics(); + + tn = GetMilliseconds(); + s = (tn - t0)/((double)dt); + } while((tn - t0) < dt); + + projRight = quatf.RotationU(); + projUp = quatf.RotationV(); + offset = offsetf; + InvalidateGraphics(); + // If the view screen is open, then we need to refresh it. + SS.ScheduleShowTW(); +} + +void GraphicsWindow::HandlePointForZoomToFit(Vector p, Point2d *pmax, Point2d *pmin, + double *wmin, bool usePerspective) +{ + double w; + Vector pp = ProjectPoint4(p, &w); + // If usePerspective is true, then we calculate a perspective projection of the point. + // If not, then we do a parallel projection regardless of the current + // scale factor. + if(usePerspective) { + pp = pp.ScaledBy(1.0/w); + } + + pmax->x = max(pmax->x, pp.x); + pmax->y = max(pmax->y, pp.y); + pmin->x = min(pmin->x, pp.x); + pmin->y = min(pmin->y, pp.y); + *wmin = min(*wmin, w); +} +void GraphicsWindow::LoopOverPoints(const std::vector &entities, + const std::vector &faces, + Point2d *pmax, Point2d *pmin, double *wmin, + bool usePerspective, bool includeMesh) { + + int i, j; + for(Entity *e : entities) { + if(e->IsPoint()) { + HandlePointForZoomToFit(e->PointGetNum(), pmax, pmin, wmin, usePerspective); + } else if(e->type == Entity::CIRCLE) { + // Lots of entities can extend outside the bbox of their points, + // but circles are particularly bad. We want to get things halfway + // reasonable without the mesh, because a zoom to fit is used to + // set the zoom level to set the chord tol. + double r = e->CircleGetRadiusNum(); + Vector c = SK.GetEntity(e->point[0])->PointGetNum(); + Quaternion q = SK.GetEntity(e->normal)->NormalGetNum(); + for(j = 0; j < 4; j++) { + Vector p = (j == 0) ? (c.Plus(q.RotationU().ScaledBy( r))) : + (j == 1) ? (c.Plus(q.RotationU().ScaledBy(-r))) : + (j == 2) ? (c.Plus(q.RotationV().ScaledBy( r))) : + (c.Plus(q.RotationV().ScaledBy(-r))); + HandlePointForZoomToFit(p, pmax, pmin, wmin, usePerspective); + } + } else { + // We have to iterate children points, because we can select entites without points + for(int i = 0; i < MAX_POINTS_IN_ENTITY; i++) { + if(e->point[i].v == 0) break; + Vector p = SK.GetEntity(e->point[i])->PointGetNum(); + HandlePointForZoomToFit(p, pmax, pmin, wmin, usePerspective); + } + } + } + + if(!includeMesh && faces.empty()) return; + + Group *g = SK.GetGroup(activeGroup); + g->GenerateDisplayItems(); + for(i = 0; i < g->displayMesh.l.n; i++) { + STriangle *tr = &(g->displayMesh.l.elem[i]); + if(!includeMesh) { + bool found = false; + for(const hEntity &face : faces) { + if(face.v != tr->meta.face) continue; + found = true; + break; + } + if(!found) continue; + } + HandlePointForZoomToFit(tr->a, pmax, pmin, wmin, usePerspective); + HandlePointForZoomToFit(tr->b, pmax, pmin, wmin, usePerspective); + HandlePointForZoomToFit(tr->c, pmax, pmin, wmin, usePerspective); + } + if(!includeMesh) return; + for(i = 0; i < g->polyLoops.l.n; i++) { + SContour *sc = &(g->polyLoops.l.elem[i]); + for(j = 0; j < sc->l.n; j++) { + HandlePointForZoomToFit(sc->l.elem[j].p, pmax, pmin, wmin, usePerspective); + } + } +} +void GraphicsWindow::ZoomToFit(bool includingInvisibles, bool useSelection) { + std::vector entities; + std::vector faces; + + if(useSelection) { + for(int i = 0; i < selection.n; i++) { + Selection *s = &selection.elem[i]; + if(s->entity.v == 0) continue; + Entity *e = SK.entity.FindById(s->entity); + if(e->IsFace()) { + faces.push_back(e->h); + continue; + } + entities.push_back(e); + } + } + + bool selectionUsed = !entities.empty() || !faces.empty(); + + if(!selectionUsed) { + for(int i = 0; iIsPoint()) continue; + if(!includingInvisibles && !e->IsVisible()) continue; + entities.push_back(e); + } + } + + // On the first run, ignore perspective. + Point2d pmax = { -1e12, -1e12 }, pmin = { 1e12, 1e12 }; + double wmin = 1; + LoopOverPoints(entities, faces, &pmax, &pmin, &wmin, + /*usePerspective=*/false, /*includeMesh=*/!selectionUsed); + + double xm = (pmax.x + pmin.x)/2, ym = (pmax.y + pmin.y)/2; + double dx = pmax.x - pmin.x, dy = pmax.y - pmin.y; + + offset = offset.Plus(projRight.ScaledBy(-xm)).Plus( + projUp. ScaledBy(-ym)); + + // And based on this, we calculate the scale and offset + if(EXACT(dx == 0 && dy == 0)) { + scale = 5; + } else { + double scalex = 1e12, scaley = 1e12; + if(EXACT(dx != 0)) scalex = 0.9*width /dx; + if(EXACT(dy != 0)) scaley = 0.9*height/dy; + scale = min(scalex, scaley); + + scale = min(300.0, scale); + scale = max(0.003, scale); + } + + // Then do another run, considering the perspective. + pmax.x = -1e12; pmax.y = -1e12; + pmin.x = 1e12; pmin.y = 1e12; + wmin = 1; + LoopOverPoints(entities, faces, &pmax, &pmin, &wmin, + /*usePerspective=*/true, /*includeMesh=*/!selectionUsed); + + // Adjust the scale so that no points are behind the camera + if(wmin < 0.1) { + double k = SS.CameraTangent(); + // w = 1+k*scale*z + double zmin = (wmin - 1)/(k*scale); + // 0.1 = 1 + k*scale*zmin + // (0.1 - 1)/(k*zmin) = scale + scale = min(scale, (0.1 - 1)/(k*zmin)); + } +} + +void GraphicsWindow::MenuView(int id) { + switch(id) { + case MNU_ZOOM_IN: + SS.GW.scale *= 1.2; + SS.ScheduleShowTW(); + break; + + case MNU_ZOOM_OUT: + SS.GW.scale /= 1.2; + SS.ScheduleShowTW(); + break; + + case MNU_ZOOM_TO_FIT: + SS.GW.ZoomToFit(/*includingInvisibles=*/false, /*useSelection=*/true); + SS.ScheduleShowTW(); + break; + + case MNU_SHOW_GRID: + SS.GW.showSnapGrid = !SS.GW.showSnapGrid; + if(SS.GW.showSnapGrid && !SS.GW.LockedInWorkplane()) { + Message("No workplane is active, so the grid will not " + "appear."); + } + SS.GW.EnsureValidActives(); + InvalidateGraphics(); + break; + + case MNU_PERSPECTIVE_PROJ: + SS.usePerspectiveProj = !SS.usePerspectiveProj; + if(SS.cameraTangent < 1e-6) { + Error("The perspective factor is set to zero, so the view will " + "always be a parallel projection.\n\n" + "For a perspective projection, modify the perspective " + "factor in the configuration screen. A value around 0.3 " + "is typical."); + } + SS.GW.EnsureValidActives(); + InvalidateGraphics(); + break; + + case MNU_ONTO_WORKPLANE: + if(SS.GW.LockedInWorkplane()) { + SS.GW.AnimateOntoWorkplane(); + SS.ScheduleShowTW(); + break; + } // if not in 2d mode fall through and use ORTHO logic + case MNU_NEAREST_ORTHO: + case MNU_NEAREST_ISO: { + static const Vector ortho[3] = { + Vector::From(1, 0, 0), + Vector::From(0, 1, 0), + Vector::From(0, 0, 1) + }; + double sqrt2 = sqrt(2.0), sqrt6 = sqrt(6.0); + Quaternion quat0 = Quaternion::From(SS.GW.projRight, SS.GW.projUp); + Quaternion quatf = quat0; + double dmin = 1e10; + + // There are 24 possible views; 3*2*2*2 + int i, j, negi, negj; + for(i = 0; i < 3; i++) { + for(j = 0; j < 3; j++) { + if(i == j) continue; + for(negi = 0; negi < 2; negi++) { + for(negj = 0; negj < 2; negj++) { + Vector ou = ortho[i], ov = ortho[j]; + if(negi) ou = ou.ScaledBy(-1); + if(negj) ov = ov.ScaledBy(-1); + Vector on = ou.Cross(ov); + + Vector u, v; + if(id == MNU_NEAREST_ORTHO || id == MNU_ONTO_WORKPLANE) { + u = ou; + v = ov; + } else { + u = + ou.ScaledBy(1/sqrt2).Plus( + on.ScaledBy(-1/sqrt2)); + v = + ou.ScaledBy(-1/sqrt6).Plus( + ov.ScaledBy(2/sqrt6).Plus( + on.ScaledBy(-1/sqrt6))); + } + + Quaternion quatt = Quaternion::From(u, v); + double d = min( + (quatt.Minus(quat0)).Magnitude(), + (quatt.Plus(quat0)).Magnitude()); + if(d < dmin) { + dmin = d; + quatf = quatt; + } + } + } + } + } + + SS.GW.AnimateOnto(quatf, SS.GW.offset); + break; + } + + case MNU_CENTER_VIEW: + SS.GW.GroupSelection(); + if(SS.GW.gs.n == 1 && SS.GW.gs.points == 1) { + Quaternion quat0; + // Offset is the selected point, quaternion is same as before + Vector pt = SK.GetEntity(SS.GW.gs.point[0])->PointGetNum(); + quat0 = Quaternion::From(SS.GW.projRight, SS.GW.projUp); + SS.GW.AnimateOnto(quat0, pt.ScaledBy(-1)); + SS.GW.ClearSelection(); + } else { + Error("Select a point; this point will become the center " + "of the view on screen."); + } + break; + + case MNU_SHOW_MENU_BAR: + ToggleMenuBar(); + SS.GW.EnsureValidActives(); + InvalidateGraphics(); + break; + + case MNU_SHOW_TOOLBAR: + SS.showToolbar = !SS.showToolbar; + SS.GW.EnsureValidActives(); + InvalidateGraphics(); + break; + + case MNU_SHOW_TEXT_WND: + SS.GW.showTextWindow = !SS.GW.showTextWindow; + SS.GW.EnsureValidActives(); + break; + + case MNU_UNITS_INCHES: + SS.viewUnits = SolveSpaceUI::UNIT_INCHES; + SS.ScheduleShowTW(); + SS.GW.EnsureValidActives(); + break; + + case MNU_UNITS_MM: + SS.viewUnits = SolveSpaceUI::UNIT_MM; + SS.ScheduleShowTW(); + SS.GW.EnsureValidActives(); + break; + + case MNU_FULL_SCREEN: + ToggleFullScreen(); + SS.GW.EnsureValidActives(); + break; + + default: oops(); + } + InvalidateGraphics(); +} + +void GraphicsWindow::EnsureValidActives(void) { + bool change = false; + // The active group must exist, and not be the references. + Group *g = SK.group.FindByIdNoOops(activeGroup); + if((!g) || (g->h.v == Group::HGROUP_REFERENCES.v)) { + int i; + for(i = 0; i < SK.groupOrder.n; i++) { + if(SK.groupOrder.elem[i].v != Group::HGROUP_REFERENCES.v) { + break; + } + } + if(i >= SK.groupOrder.n) { + // This can happen if the user deletes all the groups in the + // sketch. It's difficult to prevent that, because the last + // group might have been deleted automatically, because it failed + // a dependency. There needs to be something, so create a plane + // drawing group and activate that. They should never be able + // to delete the references, though. + activeGroup = SS.CreateDefaultDrawingGroup(); + // We've created the default group, but not the workplane entity; + // do it now so that drawing mode isn't switched to "Free in 3d". + SS.GenerateAll(SolveSpaceUI::GENERATE_ALL); + } else { + activeGroup = SK.groupOrder.elem[i]; + } + SK.GetGroup(activeGroup)->Activate(); + change = true; + } + + // The active coordinate system must also exist. + if(LockedInWorkplane()) { + Entity *e = SK.entity.FindByIdNoOops(ActiveWorkplane()); + if(e) { + hGroup hgw = e->group; + if(hgw.v != activeGroup.v && SS.GroupsInOrder(activeGroup, hgw)) { + // The active workplane is in a group that comes after the + // active group; so any request or constraint will fail. + SetWorkplaneFreeIn3d(); + change = true; + } + } else { + SetWorkplaneFreeIn3d(); + change = true; + } + } + + // And update the checked state for various menus + bool locked = LockedInWorkplane(); + RadioMenuById(MNU_FREE_IN_3D, !locked); + RadioMenuById(MNU_SEL_WORKPLANE, locked); + + SS.UndoEnableMenus(); + + switch(SS.viewUnits) { + case SolveSpaceUI::UNIT_MM: + case SolveSpaceUI::UNIT_INCHES: + break; + default: + SS.viewUnits = SolveSpaceUI::UNIT_MM; + break; + } + RadioMenuById(MNU_UNITS_MM, SS.viewUnits == SolveSpaceUI::UNIT_MM); + RadioMenuById(MNU_UNITS_INCHES, SS.viewUnits == SolveSpaceUI::UNIT_INCHES); + + ShowTextWindow(SS.GW.showTextWindow); + CheckMenuById(MNU_SHOW_TEXT_WND, SS.GW.showTextWindow); + +#if defined(__APPLE__) + CheckMenuById(MNU_SHOW_MENU_BAR, MenuBarIsVisible()); +#endif + CheckMenuById(MNU_SHOW_TOOLBAR, SS.showToolbar); + CheckMenuById(MNU_PERSPECTIVE_PROJ, SS.usePerspectiveProj); + CheckMenuById(MNU_SHOW_GRID, SS.GW.showSnapGrid); +#if defined(HAVE_GTK) || defined(__APPLE__) + CheckMenuById(MNU_FULL_SCREEN, FullScreenIsActive()); +#endif + + if(change) SS.ScheduleShowTW(); +} + +void GraphicsWindow::SetWorkplaneFreeIn3d(void) { + SK.GetGroup(activeGroup)->activeWorkplane = Entity::FREE_IN_3D; +} +hEntity GraphicsWindow::ActiveWorkplane(void) { + Group *g = SK.group.FindByIdNoOops(activeGroup); + if(g) { + return g->activeWorkplane; + } else { + return Entity::FREE_IN_3D; + } +} +bool GraphicsWindow::LockedInWorkplane(void) { + return (SS.GW.ActiveWorkplane().v != Entity::FREE_IN_3D.v); +} + +void GraphicsWindow::ForceTextWindowShown(void) { + if(!showTextWindow) { + showTextWindow = true; + CheckMenuById(MNU_SHOW_TEXT_WND, true); + ShowTextWindow(true); + } +} + +void GraphicsWindow::DeleteTaggedRequests(void) { + // Rewrite any point-coincident constraints that were affected by this + // deletion. + Request *r; + for(r = SK.request.First(); r; r = SK.request.NextAfter(r)) { + if(!r->tag) continue; + FixConstraintsForRequestBeingDeleted(r->h); + } + // and then delete the tagged requests. + SK.request.RemoveTagged(); + + // An edit might be in progress for the just-deleted item. So + // now it's not. + HideGraphicsEditControl(); + SS.TW.HideEditControl(); + // And clear out the selection, which could contain that item. + ClearSuper(); + // And regenerate to get rid of what it generates, plus anything + // that references it (since the regen code checks for that). + SS.GenerateAll(SolveSpaceUI::GENERATE_ALL); + EnsureValidActives(); + SS.ScheduleShowTW(); +} + +Vector GraphicsWindow::SnapToGrid(Vector p) { + if(!LockedInWorkplane()) return p; + + EntityBase *wrkpl = SK.GetEntity(ActiveWorkplane()), + *norm = wrkpl->Normal(); + Vector wo = SK.GetEntity(wrkpl->point[0])->PointGetNum(), + wu = norm->NormalU(), + wv = norm->NormalV(), + wn = norm->NormalN(); + + Vector pp = (p.Minus(wo)).DotInToCsys(wu, wv, wn); + pp.x = floor((pp.x / SS.gridSpacing) + 0.5)*SS.gridSpacing; + pp.y = floor((pp.y / SS.gridSpacing) + 0.5)*SS.gridSpacing; + pp.z = 0; + + return pp.ScaleOutOfCsys(wu, wv, wn).Plus(wo); +} + +void GraphicsWindow::MenuEdit(int id) { + switch(id) { + case MNU_UNSELECT_ALL: + SS.GW.GroupSelection(); + // If there's nothing selected to de-select, and no operation + // to cancel, then perhaps they want to return to the home + // screen in the text window. + if(SS.GW.gs.n == 0 && + SS.GW.gs.constraints == 0 && + SS.GW.pending.operation == 0) + { + if(!(TextEditControlIsVisible() || + GraphicsEditControlIsVisible())) + { + if(SS.TW.shown.screen == TextWindow::SCREEN_STYLE_INFO) { + SS.TW.GoToScreen(TextWindow::SCREEN_LIST_OF_STYLES); + } else { + SS.TW.ClearSuper(); + } + } + } + SS.GW.ClearSuper(); + SS.TW.HideEditControl(); + SS.nakedEdges.Clear(); + SS.justExportedInfo.draw = false; + // This clears the marks drawn to indicate which points are + // still free to drag. + Param *p; + for(p = SK.param.First(); p; p = SK.param.NextAfter(p)) { + p->free = false; + } + if(SS.exportMode) { + SS.exportMode = false; + SS.GenerateAll(SolveSpaceUI::GENERATE_ALL); + } + break; + + case MNU_SELECT_ALL: { + Entity *e; + for(e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { + if(e->group.v != SS.GW.activeGroup.v) continue; + if(e->IsFace() || e->IsDistance()) continue; + if(!e->IsVisible()) continue; + + SS.GW.MakeSelected(e->h); + } + InvalidateGraphics(); + SS.ScheduleShowTW(); + break; + } + + case MNU_SELECT_CHAIN: { + Entity *e; + int newlySelected = 0; + bool didSomething; + do { + didSomething = false; + for(e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { + if(e->group.v != SS.GW.activeGroup.v) continue; + if(!e->HasEndpoints()) continue; + if(!e->IsVisible()) continue; + + Vector st = e->EndpointStart(), + fi = e->EndpointFinish(); + + bool onChain = false, alreadySelected = false; + List *ls = &(SS.GW.selection); + for(Selection *s = ls->First(); s; s = ls->NextAfter(s)) { + if(!s->entity.v) continue; + if(s->entity.v == e->h.v) { + alreadySelected = true; + continue; + } + Entity *se = SK.GetEntity(s->entity); + if(!se->HasEndpoints()) continue; + + Vector sst = se->EndpointStart(), + sfi = se->EndpointFinish(); + + if(sst.Equals(st) || sst.Equals(fi) || + sfi.Equals(st) || sfi.Equals(fi)) + { + onChain = true; + } + } + if(onChain && !alreadySelected) { + SS.GW.MakeSelected(e->h); + newlySelected++; + didSomething = true; + } + } + } while(didSomething); + if(newlySelected == 0) { + Error("No additional entities share endpoints with the " + "selected entities."); + } + InvalidateGraphics(); + SS.ScheduleShowTW(); + break; + } + + case MNU_ROTATE_90: { + SS.GW.GroupSelection(); + Entity *e = NULL; + if(SS.GW.gs.n == 1 && SS.GW.gs.points == 1) { + e = SK.GetEntity(SS.GW.gs.point[0]); + } else if(SS.GW.gs.n == 1 && SS.GW.gs.entities == 1) { + e = SK.GetEntity(SS.GW.gs.entity[0]); + } + SS.GW.ClearSelection(); + + hGroup hg = e ? e->group : SS.GW.activeGroup; + Group *g = SK.GetGroup(hg); + if(g->type != Group::LINKED) { + Error("To use this command, select a point or other " + "entity from an linked part, or make a link " + "group the active group."); + break; + } + + + SS.UndoRemember(); + // Rotate by ninety degrees about the coordinate axis closest + // to the screen normal. + Vector norm = SS.GW.projRight.Cross(SS.GW.projUp); + norm = norm.ClosestOrtho(); + norm = norm.WithMagnitude(1); + Quaternion qaa = Quaternion::From(norm, PI/2); + + g->TransformImportedBy(Vector::From(0, 0, 0), qaa); + + // and regenerate as necessary. + SS.MarkGroupDirty(hg); + SS.GenerateAll(); + break; + } + + case MNU_SNAP_TO_GRID: { + if(!SS.GW.LockedInWorkplane()) { + Error("No workplane is active. Select a workplane to define " + "the plane for the snap grid."); + break; + } + SS.GW.GroupSelection(); + if(SS.GW.gs.points == 0 && SS.GW.gs.constraintLabels == 0) { + Error("Can't snap these items to grid; select points, " + "text comments, or constraints with a label. " + "To snap a line, select its endpoints."); + break; + } + SS.UndoRemember(); + + List *ls = &(SS.GW.selection); + for(Selection *s = ls->First(); s; s = ls->NextAfter(s)) { + if(s->entity.v) { + hEntity hp = s->entity; + Entity *ep = SK.GetEntity(hp); + if(!ep->IsPoint()) continue; + + Vector p = ep->PointGetNum(); + ep->PointForceTo(SS.GW.SnapToGrid(p)); + SS.GW.pending.points.Add(&hp); + SS.MarkGroupDirty(ep->group); + } else if(s->constraint.v) { + Constraint *c = SK.GetConstraint(s->constraint); + Vector refp = c->GetReferencePos(); + c->disp.offset = c->disp.offset.Plus(SS.GW.SnapToGrid(refp).Minus(refp)); + } + } + // Regenerate, with these points marked as dragged so that they + // get placed as close as possible to our snap grid. + SS.GenerateAll(); + SS.GW.ClearPending(); + + SS.GW.ClearSelection(); + InvalidateGraphics(); + break; + } + + case MNU_UNDO: + SS.UndoUndo(); + break; + + case MNU_REDO: + SS.UndoRedo(); + break; + + case MNU_REGEN_ALL: + SS.ReloadAllImported(); + SS.GenerateAll(SolveSpaceUI::GENERATE_UNTIL_ACTIVE); + SS.ScheduleShowTW(); + break; + + default: oops(); + } +} + +void GraphicsWindow::MenuRequest(int id) { + const char *s; + switch(id) { + case MNU_SEL_WORKPLANE: { + SS.GW.GroupSelection(); + Group *g = SK.GetGroup(SS.GW.activeGroup); + + if(SS.GW.gs.n == 1 && SS.GW.gs.workplanes == 1) { + // A user-selected workplane + g->activeWorkplane = SS.GW.gs.entity[0]; + } else if(g->type == Group::DRAWING_WORKPLANE) { + // The group's default workplane + g->activeWorkplane = g->h.entity(0); + Message("No workplane selected. Activating default workplane " + "for this group."); + } + + if(!SS.GW.LockedInWorkplane()) { + Error("No workplane is selected, and the active group does " + "not have a default workplane. Try selecting a " + "workplane, or activating a sketch-in-new-workplane " + "group."); + break; + } + // Align the view with the selected workplane + SS.GW.AnimateOntoWorkplane(); + SS.GW.ClearSuper(); + SS.ScheduleShowTW(); + break; + } + case MNU_FREE_IN_3D: + SS.GW.SetWorkplaneFreeIn3d(); + SS.GW.EnsureValidActives(); + SS.ScheduleShowTW(); + InvalidateGraphics(); + break; + + case MNU_TANGENT_ARC: + SS.GW.GroupSelection(); + if(SS.GW.gs.n == 1 && SS.GW.gs.points == 1) { + SS.GW.MakeTangentArc(); + } else if(SS.GW.gs.n != 0) { + Error("Bad selection for tangent arc at point. Select a " + "single point, or select nothing to set up arc " + "parameters."); + } else { + SS.TW.GoToScreen(TextWindow::SCREEN_TANGENT_ARC); + SS.GW.ForceTextWindowShown(); + SS.ScheduleShowTW(); + InvalidateGraphics(); // repaint toolbar + } + break; + + case MNU_ARC: s = "click point on arc (draws anti-clockwise)"; goto c; + case MNU_DATUM_POINT: s = "click to place datum point"; goto c; + case MNU_LINE_SEGMENT: s = "click first point of line segment"; goto c; + case MNU_CONSTR_SEGMENT: s = "click first point of construction line segment"; goto c; + case MNU_CUBIC: s = "click first point of cubic segment"; goto c; + case MNU_CIRCLE: s = "click center of circle"; goto c; + case MNU_WORKPLANE: s = "click origin of workplane"; goto c; + case MNU_RECTANGLE: s = "click one corner of rectangle"; goto c; + case MNU_TTF_TEXT: s = "click top left of text"; goto c; +c: + SS.GW.pending.operation = id; + SS.GW.pending.description = s; + SS.ScheduleShowTW(); + InvalidateGraphics(); // repaint toolbar + break; + + case MNU_CONSTRUCTION: { + SS.UndoRemember(); + SS.GW.GroupSelection(); + if(SS.GW.gs.entities == 0) { + Error("No entities are selected. Select entities before " + "trying to toggle their construction state."); + } + int i; + for(i = 0; i < SS.GW.gs.entities; i++) { + hEntity he = SS.GW.gs.entity[i]; + if(!he.isFromRequest()) continue; + Request *r = SK.GetRequest(he.request()); + r->construction = !(r->construction); + SS.MarkGroupDirty(r->group); + } + SS.GW.ClearSelection(); + SS.GenerateAll(); + break; + } + + case MNU_SPLIT_CURVES: + SS.GW.SplitLinesOrCurves(); + break; + + default: oops(); + } +} + +void GraphicsWindow::ClearSuper(void) { + HideGraphicsEditControl(); + ClearPending(); + ClearSelection(); + hover.Clear(); + EnsureValidActives(); +} + +void GraphicsWindow::ToggleBool(bool *v) { + *v = !*v; + + // The faces are shown as special stippling on the shaded triangle mesh, + // so not meaningful to show them and hide the shaded. + if(!showShaded) showFaces = false; + + // We might need to regenerate the mesh and edge list, since the edges + // wouldn't have been generated if they were previously hidden. + if(showEdges) (SK.GetGroup(activeGroup))->displayDirty = true; + + SS.GenerateAll(); + InvalidateGraphics(); + SS.ScheduleShowTW(); +} + +GraphicsWindow::SuggestedConstraint GraphicsWindow::SuggestLineConstraint(hRequest request) { + if(LockedInWorkplane()) { + Entity *ptA = SK.GetEntity(request.entity(1)), + *ptB = SK.GetEntity(request.entity(2)); + + Expr *au, *av, *bu, *bv; + + ptA->PointGetExprsInWorkplane(ActiveWorkplane(), &au, &av); + ptB->PointGetExprsInWorkplane(ActiveWorkplane(), &bu, &bv); + + double du = au->Minus(bu)->Eval(); + double dv = av->Minus(bv)->Eval(); + + const double TOLERANCE_RATIO = 0.02; + if(fabs(dv) > LENGTH_EPS && fabs(du / dv) < TOLERANCE_RATIO) + return SUGGESTED_VERTICAL; + else if(fabs(du) > LENGTH_EPS && fabs(dv / du) < TOLERANCE_RATIO) + return SUGGESTED_HORIZONTAL; + else + return SUGGESTED_NONE; + } else { + return SUGGESTED_NONE; + } +} diff --git a/src/group.cpp b/src/group.cpp new file mode 100644 index 0000000..845cfff --- /dev/null +++ b/src/group.cpp @@ -0,0 +1,906 @@ +//----------------------------------------------------------------------------- +// Implementation of the Group class, which represents a set of entities and +// constraints that are solved together, in some cases followed by another +// operation, like to extrude surfaces from the entities or to step and +// repeat them parametrically. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +const hParam Param::NO_PARAM = { 0 }; +#define NO_PARAM (Param::NO_PARAM) + +const hGroup Group::HGROUP_REFERENCES = { 1 }; + +#define gs (SS.GW.gs) + +//----------------------------------------------------------------------------- +// The group structure includes pointers to other dynamically-allocated +// memory. This clears and frees them all. +//----------------------------------------------------------------------------- +void Group::Clear(void) { + polyLoops.Clear(); + bezierLoops.Clear(); + bezierOpens.Clear(); + thisMesh.Clear(); + runningMesh.Clear(); + thisShell.Clear(); + runningShell.Clear(); + displayMesh.Clear(); + displayEdges.Clear(); + displayOutlines.Clear(); + impMesh.Clear(); + impShell.Clear(); + impEntity.Clear(); + // remap is the only one that doesn't get recreated when we regen + remap.Clear(); +} + +void Group::AddParam(IdList *param, hParam hp, double v) { + Param pa = {}; + pa.h = hp; + pa.val = v; + + param->Add(&pa); +} + +bool Group::IsVisible(void) { + if(!visible) return false; + if(SS.GroupsInOrder(SS.GW.activeGroup, h)) return false; + return true; +} + +int Group::GetNumConstraints(void) { + int num = 0; + for(int i = 0; i < SK.constraint.n; i++) { + Constraint *c = &SK.constraint.elem[i]; + if(c->group.v != h.v) continue; + num++; + } + return num; +} + +Vector Group::ExtrusionGetVector() { + return Vector::From(h.param(0), h.param(1), h.param(2)); +} + +void Group::ExtrusionForceVectorTo(const Vector &v) { + SK.GetParam(h.param(0))->val = v.x; + SK.GetParam(h.param(1))->val = v.y; + SK.GetParam(h.param(2))->val = v.z; +} + +void Group::MenuGroup(int id) { + Group g = {}; + g.visible = true; + g.color = RGBi(100, 100, 100); + g.scale = 1; + + if(id >= RECENT_LINK && id < (RECENT_LINK + MAX_RECENT)) { + g.linkFile = RecentFile[id-RECENT_LINK]; + id = GraphicsWindow::MNU_GROUP_LINK; + } + + SS.GW.GroupSelection(); + + switch(id) { + case GraphicsWindow::MNU_GROUP_3D: + g.type = DRAWING_3D; + g.name = "sketch-in-3d"; + break; + + case GraphicsWindow::MNU_GROUP_WRKPL: + g.type = DRAWING_WORKPLANE; + g.name = "sketch-in-plane"; + if(gs.points == 1 && gs.n == 1) { + g.subtype = WORKPLANE_BY_POINT_ORTHO; + + Vector u = SS.GW.projRight, v = SS.GW.projUp; + u = u.ClosestOrtho(); + v = v.Minus(u.ScaledBy(v.Dot(u))); + v = v.ClosestOrtho(); + + g.predef.q = Quaternion::From(u, v); + g.predef.origin = gs.point[0]; + } else if(gs.points == 1 && gs.lineSegments == 2 && gs.n == 3) { + g.subtype = WORKPLANE_BY_LINE_SEGMENTS; + + g.predef.origin = gs.point[0]; + g.predef.entityB = gs.entity[0]; + g.predef.entityC = gs.entity[1]; + + Vector ut = SK.GetEntity(g.predef.entityB)->VectorGetNum(); + Vector vt = SK.GetEntity(g.predef.entityC)->VectorGetNum(); + ut = ut.WithMagnitude(1); + vt = vt.WithMagnitude(1); + + if(fabs(SS.GW.projUp.Dot(vt)) < fabs(SS.GW.projUp.Dot(ut))) { + swap(ut, vt); + g.predef.swapUV = true; + } + if(SS.GW.projRight.Dot(ut) < 0) g.predef.negateU = true; + if(SS.GW.projUp. Dot(vt) < 0) g.predef.negateV = true; + } else { + Error("Bad selection for new sketch in workplane. This " + "group can be created with:\n\n" + " * a point (orthogonal to coordinate axes, " + "through the point)\n" + " * a point and two line segments (parallel to the " + "lines, through the point)\n"); + return; + } + break; + + case GraphicsWindow::MNU_GROUP_EXTRUDE: + if(!SS.GW.LockedInWorkplane()) { + Error("Select a workplane (Sketch -> In Workplane) before " + "extruding. The sketch will be extruded normal to the " + "workplane."); + return; + } + g.type = EXTRUDE; + g.opA = SS.GW.activeGroup; + g.predef.entityB = SS.GW.ActiveWorkplane(); + g.subtype = ONE_SIDED; + g.name = "extrude"; + break; + + case GraphicsWindow::MNU_GROUP_LATHE: + if(gs.points == 1 && gs.vectors == 1 && gs.n == 2) { + g.predef.origin = gs.point[0]; + g.predef.entityB = gs.vector[0]; + } else if(gs.lineSegments == 1 && gs.n == 1) { + g.predef.origin = SK.GetEntity(gs.entity[0])->point[0]; + g.predef.entityB = gs.entity[0]; + // since a line segment is a vector + } else { + Error("Bad selection for new lathe group. This group can " + "be created with:\n\n" + " * a point and a line segment or normal " + "(revolved about an axis parallel to line / " + "normal, through point)\n" + " * a line segment (revolved about line segment)\n"); + return; + } + g.type = LATHE; + g.opA = SS.GW.activeGroup; + g.name = "lathe"; + break; + + case GraphicsWindow::MNU_GROUP_ROT: { + if(gs.points == 1 && gs.n == 1 && SS.GW.LockedInWorkplane()) { + g.predef.origin = gs.point[0]; + Entity *w = SK.GetEntity(SS.GW.ActiveWorkplane()); + g.predef.entityB = w->Normal()->h; + g.activeWorkplane = w->h; + } else if(gs.points == 1 && gs.vectors == 1 && gs.n == 2) { + g.predef.origin = gs.point[0]; + g.predef.entityB = gs.vector[0]; + } else { + Error("Bad selection for new rotation. This group can " + "be created with:\n\n" + " * a point, while locked in workplane (rotate " + "in plane, about that point)\n" + " * a point and a line or a normal (rotate about " + "an axis through the point, and parallel to " + "line / normal)\n"); + return; + } + g.type = ROTATE; + g.opA = SS.GW.activeGroup; + g.valA = 3; + g.subtype = ONE_SIDED; + g.name = "rotate"; + break; + } + + case GraphicsWindow::MNU_GROUP_TRANS: + g.type = TRANSLATE; + g.opA = SS.GW.activeGroup; + g.valA = 3; + g.subtype = ONE_SIDED; + g.predef.entityB = SS.GW.ActiveWorkplane(); + g.activeWorkplane = SS.GW.ActiveWorkplane(); + g.name = "translate"; + break; + + case GraphicsWindow::MNU_GROUP_LINK: { + g.type = LINKED; + if(g.linkFile.empty()) { + if(!GetOpenFile(&g.linkFile, "", SlvsFileFilter)) return; + } + + // Assign the default name of the group based on the name of + // the linked file. + std::string groupName = g.linkFile; + size_t pos; + + pos = groupName.rfind(PATH_SEP); + if(pos != std::string::npos) + groupName.erase(0, pos + 1); + + pos = groupName.rfind('.'); + if(pos != std::string::npos) + groupName.erase(pos); + + for(size_t i = 0; i < groupName.length(); i++) { + if(!(isalnum(groupName[i]) || (unsigned)groupName[i] >= 0x80)) { + // convert punctuation to dashes + groupName[i] = '-'; + } + } + + if(groupName.length() > 0) { + g.name = groupName; + } else { + g.name = "link"; + } + + g.meshCombine = COMBINE_AS_ASSEMBLE; + break; + } + + default: oops(); + } + + // Copy color from the previous mesh-contributing group. + if(g.IsMeshGroup() && SK.groupOrder.n > 0) { + Group *running = SK.GetRunningMeshGroupFor(SS.GW.activeGroup); + if(running != NULL) { + g.color = running->color; + } + } + + SS.GW.ClearSelection(); + SS.UndoRemember(); + + bool afterActive = false; + for(int i = 0; i < SK.groupOrder.n; i++) { + Group *gi = SK.GetGroup(SK.groupOrder.elem[i]); + if(afterActive) + gi->order += 1; + if(gi->h.v == SS.GW.activeGroup.v) { + g.order = gi->order + 1; + afterActive = true; + } + } + + SK.group.AddAndAssignId(&g); + Group *gg = SK.GetGroup(g.h); + + if(gg->type == LINKED) { + SS.ReloadAllImported(); + } + gg->clean = false; + SS.GW.activeGroup = gg->h; + SS.GenerateAll(); + if(gg->type == DRAWING_WORKPLANE) { + // Can't set the active workplane for this one until after we've + // regenerated, because the workplane doesn't exist until then. + gg->activeWorkplane = gg->h.entity(0); + } + gg->Activate(); + SS.GW.AnimateOntoWorkplane(); + TextWindow::ScreenSelectGroup(0, gg->h.v); + SS.ScheduleShowTW(); +} + +void Group::TransformImportedBy(Vector t, Quaternion q) { + if(type != LINKED) oops(); + + hParam tx, ty, tz, qw, qx, qy, qz; + tx = h.param(0); + ty = h.param(1); + tz = h.param(2); + qw = h.param(3); + qx = h.param(4); + qy = h.param(5); + qz = h.param(6); + + Quaternion qg = Quaternion::From(qw, qx, qy, qz); + qg = q.Times(qg); + + Vector tg = Vector::From(tx, ty, tz); + tg = tg.Plus(t); + + SK.GetParam(tx)->val = tg.x; + SK.GetParam(ty)->val = tg.y; + SK.GetParam(tz)->val = tg.z; + + SK.GetParam(qw)->val = qg.w; + SK.GetParam(qx)->val = qg.vx; + SK.GetParam(qy)->val = qg.vy; + SK.GetParam(qz)->val = qg.vz; +} + +std::string Group::DescriptionString(void) { + if(name.empty()) { + return ssprintf("g%03x-(unnamed)", h.v); + } else { + return ssprintf("g%03x-%s", h.v, name.c_str()); + } +} + +void Group::Activate(void) { + if(type == EXTRUDE || type == LINKED || type == LATHE || type == TRANSLATE || type == ROTATE) { + SS.GW.showFaces = true; + } else { + SS.GW.showFaces = false; + } + SS.MarkGroupDirty(h); // for good measure; shouldn't be needed + SS.ScheduleGenerateAll(); + SS.ScheduleShowTW(); +} + +void Group::Generate(IdList *entity, + IdList *param) +{ + Vector gn = (SS.GW.projRight).Cross(SS.GW.projUp); + Vector gp = SS.GW.projRight.Plus(SS.GW.projUp); + Vector gc = (SS.GW.offset).ScaledBy(-1); + gn = gn.WithMagnitude(200/SS.GW.scale); + gp = gp.WithMagnitude(200/SS.GW.scale); + int a, i; + switch(type) { + case DRAWING_3D: + break; + + case DRAWING_WORKPLANE: { + Quaternion q; + if(subtype == WORKPLANE_BY_LINE_SEGMENTS) { + Vector u = SK.GetEntity(predef.entityB)->VectorGetNum(); + Vector v = SK.GetEntity(predef.entityC)->VectorGetNum(); + u = u.WithMagnitude(1); + Vector n = u.Cross(v); + v = (n.Cross(u)).WithMagnitude(1); + + if(predef.swapUV) swap(u, v); + if(predef.negateU) u = u.ScaledBy(-1); + if(predef.negateV) v = v.ScaledBy(-1); + q = Quaternion::From(u, v); + } else if(subtype == WORKPLANE_BY_POINT_ORTHO) { + // Already given, numerically. + q = predef.q; + } else oops(); + + Entity normal = {}; + normal.type = Entity::NORMAL_N_COPY; + normal.numNormal = q; + normal.point[0] = h.entity(2); + normal.group = h; + normal.h = h.entity(1); + entity->Add(&normal); + + Entity point = {}; + point.type = Entity::POINT_N_COPY; + point.numPoint = SK.GetEntity(predef.origin)->PointGetNum(); + point.group = h; + point.h = h.entity(2); + entity->Add(&point); + + Entity wp = {}; + wp.type = Entity::WORKPLANE; + wp.normal = normal.h; + wp.point[0] = point.h; + wp.group = h; + wp.h = h.entity(0); + entity->Add(&wp); + break; + } + + case EXTRUDE: { + AddParam(param, h.param(0), gn.x); + AddParam(param, h.param(1), gn.y); + AddParam(param, h.param(2), gn.z); + int ai, af; + if(subtype == ONE_SIDED) { + ai = 0; af = 2; + } else if(subtype == TWO_SIDED) { + ai = -1; af = 1; + } else oops(); + + // Get some arbitrary point in the sketch, that will be used + // as a reference when defining top and bottom faces. + hEntity pt = { 0 }; + for(i = 0; i < entity->n; i++) { + Entity *e = &(entity->elem[i]); + if(e->group.v != opA.v) continue; + + if(e->IsPoint()) pt = e->h; + + e->CalculateNumerical(false); + hEntity he = e->h; e = NULL; + // As soon as I call CopyEntity, e may become invalid! That + // adds entities, which may cause a realloc. + CopyEntity(entity, SK.GetEntity(he), ai, REMAP_BOTTOM, + h.param(0), h.param(1), h.param(2), + NO_PARAM, NO_PARAM, NO_PARAM, NO_PARAM, + true, false); + CopyEntity(entity, SK.GetEntity(he), af, REMAP_TOP, + h.param(0), h.param(1), h.param(2), + NO_PARAM, NO_PARAM, NO_PARAM, NO_PARAM, + true, false); + MakeExtrusionLines(entity, he); + } + // Remapped versions of that arbitrary point will be used to + // provide points on the plane faces. + MakeExtrusionTopBottomFaces(entity, pt); + break; + } + + case LATHE: { + Vector axis_pos = SK.GetEntity(predef.origin)->PointGetNum(); + Vector axis_dir = SK.GetEntity(predef.entityB)->VectorGetNum(); + + AddParam(param, h.param(0), axis_dir.x); + AddParam(param, h.param(1), axis_dir.y); + AddParam(param, h.param(2), axis_dir.z); + + // Remapped entity index. + int ai = 1; + + for(i = 0; i < entity->n; i++) { + Entity *e = &(entity->elem[i]); + if(e->group.v != opA.v) continue; + + e->CalculateNumerical(false); + hEntity he = e->h; + + // As soon as I call CopyEntity, e may become invalid! That + // adds entities, which may cause a realloc. + CopyEntity(entity, SK.GetEntity(predef.origin), 0, ai, + h.param(0), h.param(1), h.param(2), + NO_PARAM, NO_PARAM, NO_PARAM, NO_PARAM, + true, false); + + CopyEntity(entity, SK.GetEntity(he), 0, REMAP_LATHE_START, + h.param(0), h.param(1), h.param(2), + NO_PARAM, NO_PARAM, NO_PARAM, NO_PARAM, + true, false); + + CopyEntity(entity, SK.GetEntity(he), 0, REMAP_LATHE_END, + h.param(0), h.param(1), h.param(2), + NO_PARAM, NO_PARAM, NO_PARAM, NO_PARAM, + true, false); + + MakeLatheCircles(entity, param, he, axis_pos, axis_dir, ai); + ai++; + } + break; + } + + case TRANSLATE: { + // The translation vector + AddParam(param, h.param(0), gp.x); + AddParam(param, h.param(1), gp.y); + AddParam(param, h.param(2), gp.z); + + int n = (int)valA, a0 = 0; + if(subtype == ONE_SIDED && skipFirst) { + a0++; n++; + } + + for(a = a0; a < n; a++) { + for(i = 0; i < entity->n; i++) { + Entity *e = &(entity->elem[i]); + if(e->group.v != opA.v) continue; + + e->CalculateNumerical(false); + CopyEntity(entity, e, + a*2 - (subtype == ONE_SIDED ? 0 : (n-1)), + (a == (n - 1)) ? REMAP_LAST : a, + h.param(0), h.param(1), h.param(2), + NO_PARAM, NO_PARAM, NO_PARAM, NO_PARAM, + true, false); + } + } + break; + } + case ROTATE: { + // The center of rotation + AddParam(param, h.param(0), gc.x); + AddParam(param, h.param(1), gc.y); + AddParam(param, h.param(2), gc.z); + // The rotation quaternion + AddParam(param, h.param(3), 30*PI/180); + AddParam(param, h.param(4), gn.x); + AddParam(param, h.param(5), gn.y); + AddParam(param, h.param(6), gn.z); + + int n = (int)valA, a0 = 0; + if(subtype == ONE_SIDED && skipFirst) { + a0++; n++; + } + + for(a = a0; a < n; a++) { + for(i = 0; i < entity->n; i++) { + Entity *e = &(entity->elem[i]); + if(e->group.v != opA.v) continue; + + e->CalculateNumerical(false); + CopyEntity(entity, e, + a*2 - (subtype == ONE_SIDED ? 0 : (n-1)), + (a == (n - 1)) ? REMAP_LAST : a, + h.param(0), h.param(1), h.param(2), + h.param(3), h.param(4), h.param(5), h.param(6), + false, true); + } + } + break; + } + case LINKED: + // The translation vector + AddParam(param, h.param(0), gp.x); + AddParam(param, h.param(1), gp.y); + AddParam(param, h.param(2), gp.z); + // The rotation quaternion + AddParam(param, h.param(3), 1); + AddParam(param, h.param(4), 0); + AddParam(param, h.param(5), 0); + AddParam(param, h.param(6), 0); + + for(i = 0; i < impEntity.n; i++) { + Entity *ie = &(impEntity.elem[i]); + CopyEntity(entity, ie, 0, 0, + h.param(0), h.param(1), h.param(2), + h.param(3), h.param(4), h.param(5), h.param(6), + false, false); + } + break; + + default: oops(); + } +} + +bool Group::IsSolvedOkay() { + return this->solved.how == System::SOLVED_OKAY || + (this->allowRedundant && this->solved.how == System::REDUNDANT_OKAY); +} + +void Group::AddEq(IdList *l, Expr *expr, int index) { + Equation eq; + eq.e = expr; + eq.h = h.equation(index); + l->Add(&eq); +} + +void Group::GenerateEquations(IdList *l) { + if(type == LINKED) { + // Normalize the quaternion + ExprQuaternion q = { + Expr::From(h.param(3)), + Expr::From(h.param(4)), + Expr::From(h.param(5)), + Expr::From(h.param(6)) }; + AddEq(l, (q.Magnitude())->Minus(Expr::From(1)), 0); + } else if(type == ROTATE) { + // The axis and center of rotation are specified numerically +#define EC(x) (Expr::From(x)) +#define EP(x) (Expr::From(h.param(x))) + ExprVector orig = SK.GetEntity(predef.origin)->PointGetExprs(); + AddEq(l, (orig.x)->Minus(EP(0)), 0); + AddEq(l, (orig.y)->Minus(EP(1)), 1); + AddEq(l, (orig.z)->Minus(EP(2)), 2); + // param 3 is the angle, which is free + Vector axis = SK.GetEntity(predef.entityB)->VectorGetNum(); + axis = axis.WithMagnitude(1); + AddEq(l, (EC(axis.x))->Minus(EP(4)), 3); + AddEq(l, (EC(axis.y))->Minus(EP(5)), 4); + AddEq(l, (EC(axis.z))->Minus(EP(6)), 5); +#undef EC +#undef EP + } else if(type == EXTRUDE) { + if(predef.entityB.v != Entity::FREE_IN_3D.v) { + // The extrusion path is locked along a line, normal to the + // specified workplane. + Entity *w = SK.GetEntity(predef.entityB); + ExprVector u = w->Normal()->NormalExprsU(); + ExprVector v = w->Normal()->NormalExprsV(); + ExprVector extruden = { + Expr::From(h.param(0)), + Expr::From(h.param(1)), + Expr::From(h.param(2)) }; + + AddEq(l, u.Dot(extruden), 0); + AddEq(l, v.Dot(extruden), 1); + } + } else if(type == TRANSLATE) { + if(predef.entityB.v != Entity::FREE_IN_3D.v) { + Entity *w = SK.GetEntity(predef.entityB); + ExprVector n = w->Normal()->NormalExprsN(); + ExprVector trans; + trans = ExprVector::From(h.param(0), h.param(1), h.param(2)); + + // The translation vector is parallel to the workplane + AddEq(l, trans.Dot(n), 0); + } + } +} + +hEntity Group::Remap(hEntity in, int copyNumber) { + // A hash table is used to accelerate the search + int hash = ((unsigned)(in.v*61 + copyNumber)) % REMAP_PRIME; + int i = remapCache[hash]; + if(i >= 0 && i < remap.n) { + EntityMap *em = &(remap.elem[i]); + if(em->input.v == in.v && em->copyNumber == copyNumber) { + return h.entity(em->h.v); + } + } + // but if we don't find it in the hash table, then linear search + for(i = 0; i < remap.n; i++) { + EntityMap *em = &(remap.elem[i]); + if(em->input.v == in.v && em->copyNumber == copyNumber) { + // We already have a mapping for this entity. + remapCache[hash] = i; + return h.entity(em->h.v); + } + } + // And if we still don't find it, then create a new entry. + EntityMap em; + em.input = in; + em.copyNumber = copyNumber; + remap.AddAndAssignId(&em); + return h.entity(em.h.v); +} + +void Group::MakeExtrusionLines(IdList *el, hEntity in) { + Entity *ep = SK.GetEntity(in); + + Entity en = {}; + if(ep->IsPoint()) { + // A point gets extruded to form a line segment + en.point[0] = Remap(ep->h, REMAP_TOP); + en.point[1] = Remap(ep->h, REMAP_BOTTOM); + en.group = h; + en.construction = ep->construction; + en.style = ep->style; + en.h = Remap(ep->h, REMAP_PT_TO_LINE); + en.type = Entity::LINE_SEGMENT; + el->Add(&en); + } else if(ep->type == Entity::LINE_SEGMENT) { + // A line gets extruded to form a plane face; an endpoint of the + // original line is a point in the plane, and the line is in the plane. + Vector a = SK.GetEntity(ep->point[0])->PointGetNum(); + Vector b = SK.GetEntity(ep->point[1])->PointGetNum(); + Vector ab = b.Minus(a); + + en.param[0] = h.param(0); + en.param[1] = h.param(1); + en.param[2] = h.param(2); + en.numPoint = a; + en.numNormal = Quaternion::From(0, ab.x, ab.y, ab.z); + + en.group = h; + en.construction = ep->construction; + en.style = ep->style; + en.h = Remap(ep->h, REMAP_LINE_TO_FACE); + en.type = Entity::FACE_XPROD; + el->Add(&en); + } +} + +void Group::MakeLatheCircles(IdList *el, IdList *param, hEntity in, Vector pt, Vector axis, int ai) { + Entity *ep = SK.GetEntity(in); + + Entity en = {}; + if(ep->IsPoint()) { + // A point gets revolved to form an arc. + en.point[0] = Remap(predef.origin, ai); + en.point[1] = Remap(ep->h, REMAP_LATHE_START); + en.point[2] = Remap(ep->h, REMAP_LATHE_END); + + // Get arc center and point on arc. + Entity *pc = SK.GetEntity(en.point[0]); + Entity *pp = SK.GetEntity(en.point[1]); + + // Project arc point to the revolution axis and use it for arc center. + double k = pp->numPoint.Minus(pt).Dot(axis) / axis.Dot(axis); + pc->numPoint = pt.Plus(axis.ScaledBy(k)); + + // Create arc entity. + en.group = h; + en.construction = ep->construction; + en.style = ep->style; + en.h = Remap(ep->h, REMAP_PT_TO_ARC); + en.type = Entity::ARC_OF_CIRCLE; + + // Generate a normal. + Entity n = {}; + n.workplane = en.workplane; + n.h = Remap(ep->h, REMAP_PT_TO_NORMAL); + n.group = en.group; + n.style = en.style; + n.type = Entity::NORMAL_N_COPY; + + // Create basis for the normal. + Vector nu = pp->numPoint.Minus(pc->numPoint).WithMagnitude(1.0); + Vector nv = nu.Cross(axis).WithMagnitude(1.0); + n.numNormal = Quaternion::From(nv, nu); + + // The point determines where the normal gets displayed on-screen; + // it's entirely cosmetic. + n.point[0] = en.point[0]; + el->Add(&n); + en.normal = n.h; + el->Add(&en); + } else if(ep->type == Entity::LINE_SEGMENT) { + // An axis-perpendicular line gets revolved to form a face. + Vector a = SK.GetEntity(ep->point[0])->PointGetNum(); + Vector b = SK.GetEntity(ep->point[1])->PointGetNum(); + Vector u = b.Minus(a).WithMagnitude(1.0); + + // Check for perpendicularity: calculate cosine of the angle + // between axis and line direction and check that + // cos(angle) == 0 <-> angle == +-90 deg. + if(fabs(u.Dot(axis) / axis.Magnitude()) < ANGLE_COS_EPS) { + en.param[0] = h.param(0); + en.param[1] = h.param(1); + en.param[2] = h.param(2); + Vector v = axis.Cross(u).WithMagnitude(1.0); + Vector n = u.Cross(v); + en.numNormal = Quaternion::From(0, n.x, n.y, n.z); + + en.group = h; + en.construction = ep->construction; + en.style = ep->style; + en.h = Remap(ep->h, REMAP_LINE_TO_FACE); + en.type = Entity::FACE_NORMAL_PT; + en.point[0] = ep->point[0]; + el->Add(&en); + } + } +} + +void Group::MakeExtrusionTopBottomFaces(IdList *el, hEntity pt) +{ + if(pt.v == 0) return; + Group *src = SK.GetGroup(opA); + Vector n = src->polyLoops.normal; + + Entity en = {}; + en.type = Entity::FACE_NORMAL_PT; + en.group = h; + + en.numNormal = Quaternion::From(0, n.x, n.y, n.z); + en.point[0] = Remap(pt, REMAP_TOP); + en.h = Remap(Entity::NO_ENTITY, REMAP_TOP); + el->Add(&en); + + en.point[0] = Remap(pt, REMAP_BOTTOM); + en.h = Remap(Entity::NO_ENTITY, REMAP_BOTTOM); + el->Add(&en); +} + +void Group::CopyEntity(IdList *el, + Entity *ep, int timesApplied, int remap, + hParam dx, hParam dy, hParam dz, + hParam qw, hParam qvx, hParam qvy, hParam qvz, + bool asTrans, bool asAxisAngle) +{ + Entity en = {}; + en.type = ep->type; + en.extraPoints = ep->extraPoints; + en.h = Remap(ep->h, remap); + en.timesApplied = timesApplied; + en.group = h; + en.construction = ep->construction; + en.style = ep->style; + en.str = ep->str; + en.font = ep->font; + + switch(ep->type) { + case Entity::WORKPLANE: + // Don't copy these. + return; + + case Entity::POINT_N_COPY: + case Entity::POINT_N_TRANS: + case Entity::POINT_N_ROT_TRANS: + case Entity::POINT_N_ROT_AA: + case Entity::POINT_IN_3D: + case Entity::POINT_IN_2D: + if(asTrans) { + en.type = Entity::POINT_N_TRANS; + en.param[0] = dx; + en.param[1] = dy; + en.param[2] = dz; + } else { + if(asAxisAngle) { + en.type = Entity::POINT_N_ROT_AA; + } else { + en.type = Entity::POINT_N_ROT_TRANS; + } + en.param[0] = dx; + en.param[1] = dy; + en.param[2] = dz; + en.param[3] = qw; + en.param[4] = qvx; + en.param[5] = qvy; + en.param[6] = qvz; + } + en.numPoint = (ep->actPoint).ScaledBy(scale); + break; + + case Entity::NORMAL_N_COPY: + case Entity::NORMAL_N_ROT: + case Entity::NORMAL_N_ROT_AA: + case Entity::NORMAL_IN_3D: + case Entity::NORMAL_IN_2D: + if(asTrans) { + en.type = Entity::NORMAL_N_COPY; + } else { + if(asAxisAngle) { + en.type = Entity::NORMAL_N_ROT_AA; + } else { + en.type = Entity::NORMAL_N_ROT; + } + en.param[0] = qw; + en.param[1] = qvx; + en.param[2] = qvy; + en.param[3] = qvz; + } + en.numNormal = ep->actNormal; + if(scale < 0) en.numNormal = en.numNormal.Mirror(); + + en.point[0] = Remap(ep->point[0], remap); + break; + + case Entity::DISTANCE_N_COPY: + case Entity::DISTANCE: + en.type = Entity::DISTANCE_N_COPY; + en.numDistance = ep->actDistance*fabs(scale); + break; + + case Entity::FACE_NORMAL_PT: + case Entity::FACE_XPROD: + case Entity::FACE_N_ROT_TRANS: + case Entity::FACE_N_TRANS: + case Entity::FACE_N_ROT_AA: + if(asTrans) { + en.type = Entity::FACE_N_TRANS; + en.param[0] = dx; + en.param[1] = dy; + en.param[2] = dz; + } else { + if(asAxisAngle) { + en.type = Entity::FACE_N_ROT_AA; + } else { + en.type = Entity::FACE_N_ROT_TRANS; + } + en.param[0] = dx; + en.param[1] = dy; + en.param[2] = dz; + en.param[3] = qw; + en.param[4] = qvx; + en.param[5] = qvy; + en.param[6] = qvz; + } + en.numPoint = (ep->actPoint).ScaledBy(scale); + en.numNormal = (ep->actNormal).ScaledBy(scale); + break; + + default: { + int i, points; + bool hasNormal, hasDistance; + EntReqTable::GetEntityInfo(ep->type, ep->extraPoints, + NULL, &points, &hasNormal, &hasDistance); + for(i = 0; i < points; i++) { + en.point[i] = Remap(ep->point[i], remap); + } + if(hasNormal) en.normal = Remap(ep->normal, remap); + if(hasDistance) en.distance = Remap(ep->distance, remap); + break; + } + } + + // If the entity came from an linked file where it was invisible then + // ep->actiVisble will be false, and we should hide it. Or if the entity + // came from a copy (e.g. step and repeat) of a force-hidden linked + // entity, then we also want to hide it. + en.forceHidden = (!ep->actVisible) || ep->forceHidden; + + el->Add(&en); +} + diff --git a/src/groupmesh.cpp b/src/groupmesh.cpp new file mode 100644 index 0000000..342f0c2 --- /dev/null +++ b/src/groupmesh.cpp @@ -0,0 +1,615 @@ +//----------------------------------------------------------------------------- +// Routines to generate our watertight brep shells from the operations +// and entities specified by the user in each group; templated to work either +// on an SShell of ratpoly surfaces or on an SMesh of triangles. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +#define gs (SS.GW.gs) + +void Group::AssembleLoops(bool *allClosed, + bool *allCoplanar, + bool *allNonZeroLen) +{ + SBezierList sbl = {}; + + int i; + for(i = 0; i < SK.entity.n; i++) { + Entity *e = &(SK.entity.elem[i]); + if(e->group.v != h.v) continue; + if(e->construction) continue; + if(e->forceHidden) continue; + + e->GenerateBezierCurves(&sbl); + } + + SBezier *sb; + *allNonZeroLen = true; + for(sb = sbl.l.First(); sb; sb = sbl.l.NextAfter(sb)) { + for(i = 1; i <= sb->deg; i++) { + if(!(sb->ctrl[i]).Equals(sb->ctrl[0])) { + break; + } + } + if(i > sb->deg) { + // This is a zero-length edge. + *allNonZeroLen = false; + polyError.errorPointAt = sb->ctrl[0]; + goto done; + } + } + + // Try to assemble all these Beziers into loops. The closed loops go into + // bezierLoops, with the outer loops grouped with their holes. The + // leftovers, if any, go in bezierOpens. + bezierLoops.FindOuterFacesFrom(&sbl, &polyLoops, NULL, + SS.ChordTolMm(), + allClosed, &(polyError.notClosedAt), + allCoplanar, &(polyError.errorPointAt), + &bezierOpens); + done: + sbl.Clear(); +} + +void Group::GenerateLoops(void) { + polyLoops.Clear(); + bezierLoops.Clear(); + bezierOpens.Clear(); + + if(type == DRAWING_3D || type == DRAWING_WORKPLANE || + type == ROTATE || type == TRANSLATE || type == LINKED) + { + bool allClosed = false, allCoplanar = false, allNonZeroLen = false; + AssembleLoops(&allClosed, &allCoplanar, &allNonZeroLen); + if(!allNonZeroLen) { + polyError.how = POLY_ZERO_LEN_EDGE; + } else if(!allCoplanar) { + polyError.how = POLY_NOT_COPLANAR; + } else if(!allClosed) { + polyError.how = POLY_NOT_CLOSED; + } else { + polyError.how = POLY_GOOD; + // The self-intersecting check is kind of slow, so don't run it + // unless requested. + if(SS.checkClosedContour) { + if(polyLoops.SelfIntersecting(&(polyError.errorPointAt))) { + polyError.how = POLY_SELF_INTERSECTING; + } + } + } + } +} + +void SShell::RemapFaces(Group *g, int remap) { + SSurface *ss; + for(ss = surface.First(); ss; ss = surface.NextAfter(ss)){ + hEntity face = { ss->face }; + if(face.v == Entity::NO_ENTITY.v) continue; + + face = g->Remap(face, remap); + ss->face = face.v; + } +} + +void SMesh::RemapFaces(Group *g, int remap) { + STriangle *tr; + for(tr = l.First(); tr; tr = l.NextAfter(tr)) { + hEntity face = { tr->meta.face }; + if(face.v == Entity::NO_ENTITY.v) continue; + + face = g->Remap(face, remap); + tr->meta.face = face.v; + } +} + +template +void Group::GenerateForStepAndRepeat(T *steps, T *outs) { + T workA, workB; + workA = {}; + workB = {}; + T *soFar = &workA, *scratch = &workB; + + int n = (int)valA, a0 = 0; + if(subtype == ONE_SIDED && skipFirst) { + a0++; n++; + } + int a; + for(a = a0; a < n; a++) { + int ap = a*2 - (subtype == ONE_SIDED ? 0 : (n-1)); + int remap = (a == (n - 1)) ? REMAP_LAST : a; + + T transd = {}; + if(type == TRANSLATE) { + Vector trans = Vector::From(h.param(0), h.param(1), h.param(2)); + trans = trans.ScaledBy(ap); + transd.MakeFromTransformationOf(steps, + trans, Quaternion::IDENTITY, 1.0); + } else { + Vector trans = Vector::From(h.param(0), h.param(1), h.param(2)); + double theta = ap * SK.GetParam(h.param(3))->val; + double c = cos(theta), s = sin(theta); + Vector axis = Vector::From(h.param(4), h.param(5), h.param(6)); + Quaternion q = Quaternion::From(c, s*axis.x, s*axis.y, s*axis.z); + // Rotation is centered at t; so A(x - t) + t = Ax + (t - At) + transd.MakeFromTransformationOf(steps, + trans.Minus(q.Rotate(trans)), q, 1.0); + } + + // We need to rewrite any plane face entities to the transformed ones. + transd.RemapFaces(this, remap); + + // And tack this transformed copy on to the return. + if(soFar->IsEmpty()) { + scratch->MakeFromCopyOf(&transd); + } else { + scratch->MakeFromUnionOf(soFar, &transd); + } + + swap(scratch, soFar); + scratch->Clear(); + transd.Clear(); + } + + outs->Clear(); + *outs = *soFar; +} + +template +void Group::GenerateForBoolean(T *prevs, T *thiss, T *outs, int how) { + // If this group contributes no new mesh, then our running mesh is the + // same as last time, no combining required. Likewise if we have a mesh + // but it's suppressed. + if(thiss->IsEmpty() || suppress) { + outs->MakeFromCopyOf(prevs); + return; + } + + // So our group's shell appears in thisShell. Combine this with the + // previous group's shell, using the requested operation. + if(how == COMBINE_AS_UNION) { + outs->MakeFromUnionOf(prevs, thiss); + } else if(how == COMBINE_AS_DIFFERENCE) { + outs->MakeFromDifferenceOf(prevs, thiss); + } else { + outs->MakeFromAssemblyOf(prevs, thiss); + } +} + +void Group::GenerateShellAndMesh(void) { + bool prevBooleanFailed = booleanFailed; + booleanFailed = false; + + Group *srcg = this; + + thisShell.Clear(); + thisMesh.Clear(); + runningShell.Clear(); + runningMesh.Clear(); + + // Don't attempt a lathe or extrusion unless the source section is good: + // planar and not self-intersecting. + bool haveSrc = true; + if(type == EXTRUDE || type == LATHE) { + Group *src = SK.GetGroup(opA); + if(src->polyError.how != POLY_GOOD) { + haveSrc = false; + } + } + + if(type == TRANSLATE || type == ROTATE) { + // A step and repeat gets merged against the group's prevous group, + // not our own previous group. + srcg = SK.GetGroup(opA); + + GenerateForStepAndRepeat(&(srcg->thisShell), &thisShell); + GenerateForStepAndRepeat (&(srcg->thisMesh), &thisMesh); + } else if(type == EXTRUDE && haveSrc) { + Group *src = SK.GetGroup(opA); + Vector translate = Vector::From(h.param(0), h.param(1), h.param(2)); + + Vector tbot, ttop; + if(subtype == ONE_SIDED) { + tbot = Vector::From(0, 0, 0); ttop = translate.ScaledBy(2); + } else { + tbot = translate.ScaledBy(-1); ttop = translate.ScaledBy(1); + } + + SBezierLoopSetSet *sblss = &(src->bezierLoops); + SBezierLoopSet *sbls; + for(sbls = sblss->l.First(); sbls; sbls = sblss->l.NextAfter(sbls)) { + int is = thisShell.surface.n; + // Extrude this outer contour (plus its inner contours, if present) + thisShell.MakeFromExtrusionOf(sbls, tbot, ttop, color); + + // And for any plane faces, annotate the model with the entity for + // that face, so that the user can select them with the mouse. + Vector onOrig = sbls->point; + int i; + for(i = is; i < thisShell.surface.n; i++) { + SSurface *ss = &(thisShell.surface.elem[i]); + hEntity face = Entity::NO_ENTITY; + + Vector p = ss->PointAt(0, 0), + n = ss->NormalAt(0, 0).WithMagnitude(1); + double d = n.Dot(p); + + if(i == is || i == (is + 1)) { + // These are the top and bottom of the shell. + if(fabs((onOrig.Plus(ttop)).Dot(n) - d) < LENGTH_EPS) { + face = Remap(Entity::NO_ENTITY, REMAP_TOP); + ss->face = face.v; + } + if(fabs((onOrig.Plus(tbot)).Dot(n) - d) < LENGTH_EPS) { + face = Remap(Entity::NO_ENTITY, REMAP_BOTTOM); + ss->face = face.v; + } + continue; + } + + // So these are the sides + if(ss->degm != 1 || ss->degn != 1) continue; + + Entity *e; + for(e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { + if(e->group.v != opA.v) continue; + if(e->type != Entity::LINE_SEGMENT) continue; + + Vector a = SK.GetEntity(e->point[0])->PointGetNum(), + b = SK.GetEntity(e->point[1])->PointGetNum(); + a = a.Plus(ttop); + b = b.Plus(ttop); + // Could get taken backwards, so check all cases. + if((a.Equals(ss->ctrl[0][0]) && b.Equals(ss->ctrl[1][0])) || + (b.Equals(ss->ctrl[0][0]) && a.Equals(ss->ctrl[1][0])) || + (a.Equals(ss->ctrl[0][1]) && b.Equals(ss->ctrl[1][1])) || + (b.Equals(ss->ctrl[0][1]) && a.Equals(ss->ctrl[1][1]))) + { + face = Remap(e->h, REMAP_LINE_TO_FACE); + ss->face = face.v; + break; + } + } + } + } + } else if(type == LATHE && haveSrc) { + Group *src = SK.GetGroup(opA); + + Vector pt = SK.GetEntity(predef.origin)->PointGetNum(), + axis = SK.GetEntity(predef.entityB)->VectorGetNum(); + axis = axis.WithMagnitude(1); + + SBezierLoopSetSet *sblss = &(src->bezierLoops); + SBezierLoopSet *sbls; + for(sbls = sblss->l.First(); sbls; sbls = sblss->l.NextAfter(sbls)) { + thisShell.MakeFromRevolutionOf(sbls, pt, axis, color, this); + } + } else if(type == LINKED) { + // The imported shell or mesh are copied over, with the appropriate + // transformation applied. We also must remap the face entities. + Vector offset = { + SK.GetParam(h.param(0))->val, + SK.GetParam(h.param(1))->val, + SK.GetParam(h.param(2))->val }; + Quaternion q = { + SK.GetParam(h.param(3))->val, + SK.GetParam(h.param(4))->val, + SK.GetParam(h.param(5))->val, + SK.GetParam(h.param(6))->val }; + + thisMesh.MakeFromTransformationOf(&impMesh, offset, q, scale); + thisMesh.RemapFaces(this, 0); + + thisShell.MakeFromTransformationOf(&impShell, offset, q, scale); + thisShell.RemapFaces(this, 0); + } + + if(srcg->meshCombine != COMBINE_AS_ASSEMBLE) { + thisShell.MergeCoincidentSurfaces(); + } + + // So now we've got the mesh or shell for this group. Combine it with + // the previous group's mesh or shell with the requested Boolean, and + // we're done. + + Group *prevg = srcg->RunningMeshGroup(); + + if(prevg->runningMesh.IsEmpty() && thisMesh.IsEmpty() && !forceToMesh) { + SShell *prevs = &(prevg->runningShell); + GenerateForBoolean(prevs, &thisShell, &runningShell, + srcg->meshCombine); + + if(srcg->meshCombine != COMBINE_AS_ASSEMBLE) { + runningShell.MergeCoincidentSurfaces(); + } + + // If the Boolean failed, then we should note that in the text screen + // for this group. + booleanFailed = runningShell.booleanFailed; + if(booleanFailed != prevBooleanFailed) { + SS.ScheduleShowTW(); + } + } else { + SMesh prevm, thism; + prevm = {}; + thism = {}; + + prevm.MakeFromCopyOf(&(prevg->runningMesh)); + prevg->runningShell.TriangulateInto(&prevm); + + thism.MakeFromCopyOf(&thisMesh); + thisShell.TriangulateInto(&thism); + + SMesh outm = {}; + GenerateForBoolean(&prevm, &thism, &outm, srcg->meshCombine); + + // And make sure that the output mesh is vertex-to-vertex. + SKdNode *root = SKdNode::From(&outm); + root->SnapToMesh(&outm); + root->MakeMeshInto(&runningMesh); + + outm.Clear(); + thism.Clear(); + prevm.Clear(); + } + + displayDirty = true; +} + +void Group::GenerateDisplayItems(void) { + // This is potentially slow (since we've got to triangulate a shell, or + // to find the emphasized edges for a mesh), so we will run it only + // if its inputs have changed. + if(displayDirty) { + Group *pg = RunningMeshGroup(); + if(pg && thisMesh.IsEmpty() && thisShell.IsEmpty()) { + // We don't contribute any new solid model in this group, so our + // display items are identical to the previous group's; which means + // that we can just display those, and stop ourselves from + // recalculating for those every time we get a change in this group. + // + // Note that this can end up recursing multiple times (if multiple + // groups that contribute no solid model exist in sequence), but + // that's okay. + pg->GenerateDisplayItems(); + + displayMesh.Clear(); + displayMesh.MakeFromCopyOf(&(pg->displayMesh)); + + displayEdges.Clear(); + displayOutlines.Clear(); + if(SS.GW.showEdges) { + SEdge *se; + SEdgeList *src = &(pg->displayEdges); + for(se = src->l.First(); se; se = src->l.NextAfter(se)) { + displayEdges.l.Add(se); + } + displayOutlines.MakeFromCopyOf(&pg->displayOutlines); + } + } else { + // We do contribute new solid model, so we have to triangulate the + // shell, and edge-find the mesh. + displayMesh.Clear(); + runningShell.TriangulateInto(&displayMesh); + STriangle *t; + for(t = runningMesh.l.First(); t; t = runningMesh.l.NextAfter(t)) { + STriangle trn = *t; + Vector n = trn.Normal(); + trn.an = n; + trn.bn = n; + trn.cn = n; + displayMesh.AddTriangle(&trn); + } + + displayEdges.Clear(); + displayOutlines.Clear(); + + if(SS.GW.showEdges) { + if(runningMesh.l.n > 0) { + // Triangle mesh only; no shell or emphasized edges. + runningMesh.MakeCertainEdgesAndOutlinesInto( + &displayEdges, &displayOutlines, SKdNode::EMPHASIZED_EDGES); + } else { + displayMesh.MakeCertainEdgesAndOutlinesInto( + &displayEdges, &displayOutlines, SKdNode::SHARP_EDGES); + } + } + } + + displayDirty = false; + } +} + +Group *Group::PreviousGroup(void) { + int i; + for(i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + if(g->h.v == h.v) break; + } + if(i == 0 || i >= SK.groupOrder.n) return NULL; + return SK.GetGroup(SK.groupOrder.elem[i - 1]); +} + +Group *Group::RunningMeshGroup(void) { + if(type == TRANSLATE || type == ROTATE) { + return SK.GetGroup(opA)->RunningMeshGroup(); + } else { + return PreviousGroup(); + } +} + +bool Group::IsMeshGroup() { + switch(type) { + case Group::EXTRUDE: + case Group::LATHE: + case Group::ROTATE: + case Group::TRANSLATE: + return true; + } + return false; +} + +void Group::DrawDisplayItems(int t) { + RgbaColor specColor; + bool useSpecColor; + if(t == DRAWING_3D || t == DRAWING_WORKPLANE) { + // force the color to something dim + specColor = Style::Color(Style::DIM_SOLID); + useSpecColor = true; + } else { + useSpecColor = false; // use the model color + } + // The back faces are drawn in red; should never seem them, since we + // draw closed shells, so that's a debugging aid. + GLfloat mpb[] = { 1.0f, 0.1f, 0.1f, 1.0f }; + glMaterialfv(GL_BACK, GL_AMBIENT_AND_DIFFUSE, mpb); + + // When we fill the mesh, we need to know which triangles are selected + // or hovered, in order to draw them differently. + uint32_t mh = 0, ms1 = 0, ms2 = 0; + hEntity he = SS.GW.hover.entity; + if(he.v != 0 && SK.GetEntity(he)->IsFace()) { + mh = he.v; + } + SS.GW.GroupSelection(); + if(gs.faces > 0) ms1 = gs.face[0].v; + if(gs.faces > 1) ms2 = gs.face[1].v; + + if(SS.GW.showShaded || SS.GW.showHdnLines) { + if(SS.drawBackFaces && !displayMesh.isTransparent) { + // For debugging, draw the backs of the triangles in red, so that we + // notice when a shell is open + glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 1); + } else { + glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0); + } + + // Draw the shaded solid into the depth buffer for hidden line removal, + // and if we're actually going to display it, to the color buffer too. + glEnable(GL_LIGHTING); + if(!SS.GW.showShaded) glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); + ssglFillMesh(useSpecColor, specColor, &displayMesh, mh, ms1, ms2); + if(!SS.GW.showShaded) glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + glDisable(GL_LIGHTING); + } + + if(SS.GW.showEdges) { + Vector projDir = SS.GW.projRight.Cross(SS.GW.projUp); + + glDepthMask(GL_FALSE); + if(SS.GW.showHdnLines) { + ssglDepthRangeOffset(0); + glDepthFunc(GL_GREATER); + ssglDrawEdges(&displayEdges, false, { Style::HIDDEN_EDGE }); + ssglDrawOutlines(&displayOutlines, projDir, { Style::HIDDEN_EDGE }); + glDepthFunc(GL_LEQUAL); + } + ssglDepthRangeOffset(2); + ssglDrawEdges(&displayEdges, false, { Style::SOLID_EDGE }); + if(SS.GW.showOutlines) { + ssglDrawOutlines(&displayOutlines, projDir, { Style::OUTLINE }); + } else { + ssglDrawOutlines(&displayOutlines, projDir, { Style::SOLID_EDGE }); + } + glDepthMask(GL_TRUE); + } + + if(SS.GW.showMesh) ssglDebugMesh(&displayMesh); +} + +void Group::Draw(void) { + // Everything here gets drawn whether or not the group is hidden; we + // can control this stuff independently, with show/hide solids, edges, + // mesh, etc. + + GenerateDisplayItems(); + DrawDisplayItems(type); + + if(!SS.checkClosedContour) return; + + // And finally show the polygons too, and any errors if it's not possible + // to assemble the lines into closed polygons. + if(polyError.how == POLY_NOT_CLOSED) { + // Report this error only in sketch-in-workplane groups; otherwise + // it's just a nuisance. + if(type == DRAWING_WORKPLANE) { + glDisable(GL_DEPTH_TEST); + ssglColorRGBa(Style::Color(Style::DRAW_ERROR), 0.2); + ssglLineWidth (Style::Width(Style::DRAW_ERROR)); + glBegin(GL_LINES); + ssglVertex3v(polyError.notClosedAt.a); + ssglVertex3v(polyError.notClosedAt.b); + glEnd(); + ssglColorRGB(Style::Color(Style::DRAW_ERROR)); + ssglWriteText("not closed contour, or not all same style!", + Style::DefaultTextHeight(), + polyError.notClosedAt.b, SS.GW.projRight, SS.GW.projUp, + NULL, NULL); + glEnable(GL_DEPTH_TEST); + } + } else if(polyError.how == POLY_NOT_COPLANAR || + polyError.how == POLY_SELF_INTERSECTING || + polyError.how == POLY_ZERO_LEN_EDGE) + { + // These errors occur at points, not lines + if(type == DRAWING_WORKPLANE) { + glDisable(GL_DEPTH_TEST); + ssglColorRGB(Style::Color(Style::DRAW_ERROR)); + const char *msg; + if(polyError.how == POLY_NOT_COPLANAR) { + msg = "points not all coplanar!"; + } else if(polyError.how == POLY_SELF_INTERSECTING) { + msg = "contour is self-intersecting!"; + } else { + msg = "zero-length edge!"; + } + ssglWriteText(msg, Style::DefaultTextHeight(), + polyError.errorPointAt, SS.GW.projRight, SS.GW.projUp, + NULL, NULL); + glEnable(GL_DEPTH_TEST); + } + } else { + // The contours will get filled in DrawFilledPaths. + } +} + +void Group::FillLoopSetAsPolygon(SBezierLoopSet *sbls) { + SPolygon sp = {}; + sbls->MakePwlInto(&sp); + ssglDepthRangeOffset(1); + ssglFillPolygon(&sp); + ssglDepthRangeOffset(0); + sp.Clear(); +} + +void Group::DrawFilledPaths(void) { + SBezierLoopSet *sbls; + SBezierLoopSetSet *sblss = &bezierLoops; + for(sbls = sblss->l.First(); sbls; sbls = sblss->l.NextAfter(sbls)) { + if(sbls->l.n == 0 || sbls->l.elem[0].l.n == 0) continue; + // In an assembled loop, all the styles should be the same; so doesn't + // matter which one we grab. + SBezier *sb = &(sbls->l.elem[0].l.elem[0]); + hStyle hs = { (uint32_t)sb->auxA }; + Style *s = Style::Get(hs); + if(s->filled) { + // This is a filled loop, where the user specified a fill color. + ssglColorRGBa(s->fillColor, 1); + FillLoopSetAsPolygon(sbls); + } else { + if(h.v == SS.GW.activeGroup.v && SS.checkClosedContour && + polyError.how == POLY_GOOD) + { + // If this is the active group, and we are supposed to check + // for closed contours, and we do indeed have a closed and + // non-intersecting contour, then fill it dimly. + ssglColorRGBa(Style::Color(Style::CONTOUR_FILL), 0.5); + ssglDepthRangeOffset(1); + FillLoopSetAsPolygon(sbls); + ssglDepthRangeOffset(0); + } + } + } +} + diff --git a/src/gtk/gtkmain.cpp b/src/gtk/gtkmain.cpp new file mode 100644 index 0000000..0f67fb7 --- /dev/null +++ b/src/gtk/gtkmain.cpp @@ -0,0 +1,1613 @@ +//----------------------------------------------------------------------------- +// Our main() function, and GTK3-specific stuff to set up our windows and +// otherwise handle our interface to the operating system. Everything +// outside gtk/... should be standard C++ and OpenGL. +// +// Copyright 2015 +//----------------------------------------------------------------------------- +#include +#include +#include +#include + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if HAVE_GTK3 +#include +#else +#include +#endif + +#include +#include +#include +#include + +#include + +#include "solvespace.h" +#include "config.h" +#include "../unix/gloffscreen.h" + +#ifdef HAVE_SPACEWARE +# include +# ifndef SI_APP_FIT_BUTTON +# define SI_APP_FIT_BUTTON 31 +# endif +#endif + +namespace SolveSpace { +/* Settings */ + +/* Why not just use GSettings? Two reasons. It doesn't allow to easily see + whether the setting had the default value, and it requires to install + a schema globally. */ +static json_object *settings = NULL; + +static std::string CnfPrepare() { + // Refer to http://standards.freedesktop.org/basedir-spec/latest/ + + std::string dir; + if(getenv("XDG_CONFIG_HOME")) { + dir = std::string(getenv("XDG_CONFIG_HOME")) + "/solvespace"; + } else if(getenv("HOME")) { + dir = std::string(getenv("HOME")) + "/.config/solvespace"; + } else { + dbp("neither XDG_CONFIG_HOME nor HOME are set"); + return ""; + } + + struct stat st; + if(stat(dir.c_str(), &st)) { + if(errno == ENOENT) { + if(mkdir(dir.c_str(), 0777)) { + dbp("cannot mkdir %s: %s", dir.c_str(), strerror(errno)); + return ""; + } + } else { + dbp("cannot stat %s: %s", dir.c_str(), strerror(errno)); + return ""; + } + } else if(!S_ISDIR(st.st_mode)) { + dbp("%s is not a directory", dir.c_str()); + return ""; + } + + return dir + "/settings.json"; +} + +static void CnfLoad() { + std::string path = CnfPrepare(); + if(path.empty()) + return; + + if(settings) + json_object_put(settings); // deallocate + + settings = json_object_from_file(path.c_str()); + if(!settings) { + if(errno != ENOENT) + dbp("cannot load settings: %s", strerror(errno)); + + settings = json_object_new_object(); + } +} + +static void CnfSave() { + std::string path = CnfPrepare(); + if(path.empty()) + return; + + /* json-c <0.12 has the first argument non-const here */ + if(json_object_to_file_ext((char*) path.c_str(), settings, JSON_C_TO_STRING_PRETTY)) + dbp("cannot save settings: %s", strerror(errno)); +} + +void CnfFreezeInt(uint32_t val, const std::string &key) { + struct json_object *jval = json_object_new_int(val); + json_object_object_add(settings, key.c_str(), jval); + CnfSave(); +} + +uint32_t CnfThawInt(uint32_t val, const std::string &key) { + struct json_object *jval; + if(json_object_object_get_ex(settings, key.c_str(), &jval)) + return json_object_get_int(jval); + else return val; +} + +void CnfFreezeFloat(float val, const std::string &key) { + struct json_object *jval = json_object_new_double(val); + json_object_object_add(settings, key.c_str(), jval); + CnfSave(); +} + +float CnfThawFloat(float val, const std::string &key) { + struct json_object *jval; + if(json_object_object_get_ex(settings, key.c_str(), &jval)) + return json_object_get_double(jval); + else return val; +} + +void CnfFreezeString(const std::string &val, const std::string &key) { + struct json_object *jval = json_object_new_string(val.c_str()); + json_object_object_add(settings, key.c_str(), jval); + CnfSave(); +} + +std::string CnfThawString(const std::string &val, const std::string &key) { + struct json_object *jval; + if(json_object_object_get_ex(settings, key.c_str(), &jval)) + return json_object_get_string(jval); + return val; +} + +static void CnfFreezeWindowPos(Gtk::Window *win, const std::string &key) { + int x, y, w, h; + win->get_position(x, y); + win->get_size(w, h); + + CnfFreezeInt(x, key + "_left"); + CnfFreezeInt(y, key + "_top"); + CnfFreezeInt(w, key + "_width"); + CnfFreezeInt(h, key + "_height"); +} + +static void CnfThawWindowPos(Gtk::Window *win, const std::string &key) { + int x, y, w, h; + win->get_position(x, y); + win->get_size(w, h); + + x = CnfThawInt(x, key + "_left"); + y = CnfThawInt(y, key + "_top"); + w = CnfThawInt(w, key + "_width"); + h = CnfThawInt(h, key + "_height"); + + win->move(x, y); + win->resize(w, h); +} + +/* Timers */ + +int64_t GetMilliseconds(void) { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return 1000 * (uint64_t) ts.tv_sec + ts.tv_nsec / 1000000; +} + +static bool TimerCallback() { + SS.GW.TimerCallback(); + SS.TW.TimerCallback(); + return false; +} + +void SetTimerFor(int milliseconds) { + Glib::signal_timeout().connect(&TimerCallback, milliseconds); +} + +static bool AutosaveTimerCallback() { + SS.Autosave(); + return false; +} + +void SetAutosaveTimerFor(int minutes) { + Glib::signal_timeout().connect(&AutosaveTimerCallback, minutes * 60 * 1000); +} + +static bool LaterCallback() { + SS.DoLater(); + return false; +} + +void ScheduleLater() { + Glib::signal_idle().connect(&LaterCallback); +} + +/* GL wrapper */ + +#define GL_CHECK() \ + do { \ + int err = (int)glGetError(); \ + if(err) dbp("%s:%d: glGetError() == 0x%X %s", \ + __FILE__, __LINE__, err, gluErrorString(err)); \ + } while (0) + +class GlWidget : public Gtk::DrawingArea { +public: + GlWidget() : _offscreen(NULL) { + _xdisplay = gdk_x11_get_default_xdisplay(); + + int glxmajor, glxminor; + if(!glXQueryVersion(_xdisplay, &glxmajor, &glxminor)) { + dbp("OpenGL is not supported"); + oops(); + } + + if(glxmajor < 1 || (glxmajor == 1 && glxminor < 3)) { + dbp("GLX version %d.%d is too old; 1.3 required", glxmajor, glxminor); + oops(); + } + + static int fbconfig_attrs[] = { + GLX_RENDER_TYPE, GLX_RGBA_BIT, + GLX_RED_SIZE, 8, + GLX_GREEN_SIZE, 8, + GLX_BLUE_SIZE, 8, + GLX_DEPTH_SIZE, 24, + None + }; + int fbconfig_num = 0; + GLXFBConfig *fbconfigs = glXChooseFBConfig(_xdisplay, DefaultScreen(_xdisplay), + fbconfig_attrs, &fbconfig_num); + if(!fbconfigs || fbconfig_num == 0) + oops(); + + /* prefer FBConfigs with depth of 32; + * Mesa software rasterizer explodes with a BadMatch without this; + * without this, Intel on Mesa flickers horribly for some reason. + this does not seem to affect other rasterizers (ie NVidia). + + see this Mesa bug: + http://lists.freedesktop.org/archives/mesa-dev/2015-January/074693.html */ + GLXFBConfig fbconfig = fbconfigs[0]; + for(int i = 0; i < fbconfig_num; i++) { + XVisualInfo *visual_info = glXGetVisualFromFBConfig(_xdisplay, fbconfigs[i]); + /* some GL visuals, notably on Chromium GL, do not have an associated + X visual; this is not an obstacle as we always render offscreen. */ + if(!visual_info) continue; + int depth = visual_info->depth; + XFree(visual_info); + + if(depth == 32) { + fbconfig = fbconfigs[i]; + break; + } + } + + _glcontext = glXCreateNewContext(_xdisplay, + fbconfig, GLX_RGBA_TYPE, 0, True); + if(!_glcontext) { + dbp("cannot create OpenGL context"); + oops(); + } + + XFree(fbconfigs); + + /* create a dummy X window to create a rendering context against. + we could use a Pbuffer, but some implementations (Chromium GL) + don't support these. we could use an existing window, but + some implementations (Chromium GL... do you see a pattern?) + do really strange things, i.e. draw a black rectangle on + the very front of the desktop if you do this. */ + _xwindow = XCreateSimpleWindow(_xdisplay, + XRootWindow(_xdisplay, gdk_x11_get_default_screen()), + /*x*/ 0, /*y*/ 0, /*width*/ 1, /*height*/ 1, + /*border_width*/ 0, /*border*/ 0, /*background*/ 0); + } + + ~GlWidget() { + glXMakeCurrent(_xdisplay, None, NULL); + + XDestroyWindow(_xdisplay, _xwindow); + + delete _offscreen; + + glXDestroyContext(_xdisplay, _glcontext); + } + +protected: + /* Draw on a GLX framebuffer object, then read pixels out and draw them on + the Cairo context. Slower, but you get to overlay nice widgets. */ + virtual bool on_draw(const Cairo::RefPtr &cr) { + if(!glXMakeCurrent(_xdisplay, _xwindow, _glcontext)) + oops(); + + if(!_offscreen) + _offscreen = new GLOffscreen; + + Gdk::Rectangle allocation = get_allocation(); + if(!_offscreen->begin(allocation.get_width(), allocation.get_height())) + oops(); + + on_gl_draw(); + glFlush(); + GL_CHECK(); + + Cairo::RefPtr surface = Cairo::ImageSurface::create( + _offscreen->end(), Cairo::FORMAT_RGB24, + allocation.get_width(), allocation.get_height(), allocation.get_width() * 4); + cr->set_source(surface, 0, 0); + cr->paint(); + surface->finish(); + + return true; + } + +#ifdef HAVE_GTK2 + virtual bool on_expose_event(GdkEventExpose *) { + return on_draw(get_window()->create_cairo_context()); + } +#endif + + virtual void on_gl_draw() = 0; + +private: + Display *_xdisplay; + GLXContext _glcontext; + GLOffscreen *_offscreen; + ::Window _xwindow; +}; + +/* Editor overlay */ + +class EditorOverlay : public Gtk::Fixed { +public: + EditorOverlay(Gtk::Widget &underlay) : _underlay(underlay) { + set_size_request(0, 0); + + add(_underlay); + + _entry.set_no_show_all(true); + _entry.set_has_frame(false); + add(_entry); + + _entry.signal_activate(). + connect(sigc::mem_fun(this, &EditorOverlay::on_activate)); + } + + void start_editing(int x, int y, int font_height, bool is_monospace, int minWidthChars, + const std::string &val) { + Pango::FontDescription font_desc; + font_desc.set_family(is_monospace ? "monospace" : "normal"); + font_desc.set_absolute_size(font_height * Pango::SCALE); + +#ifdef HAVE_GTK3 + /* For some reason override_font doesn't take screen DPI into + account on GTK3 when working with font descriptors specified + in absolute sizes; modify_font does on GTK2. */ + Pango::FontDescription override_font_desc(font_desc); + double dpi = get_screen()->get_resolution(); + override_font_desc.set_size(font_height * 72.0 / dpi * Pango::SCALE); + _entry.override_font(override_font_desc); +#else + _entry.modify_font(font_desc); +#endif + + /* y coordinate denotes baseline */ + Pango::FontMetrics font_metrics = get_pango_context()->get_metrics(font_desc); + y -= font_metrics.get_ascent() / Pango::SCALE; + + Glib::RefPtr layout = Pango::Layout::create(get_pango_context()); + layout->set_font_description(font_desc); + layout->set_text(val + " "); /* avoid scrolling */ + int width = layout->get_logical_extents().get_width(); + +#ifdef HAVE_GTK3 + Gtk::Border border = _entry.get_style_context()->get_padding(); + move(_entry, x - border.get_left(), y - border.get_top()); + _entry.set_width_chars(minWidthChars); + _entry.set_size_request(width / Pango::SCALE, -1); +#else + /* We need _gtk_entry_effective_inner_border, but it's not + in the public API, so emulate its logic. */ + Gtk::Border border = { 2, 2, 2, 2 }, *style_border; + gtk_widget_style_get(GTK_WIDGET(_entry.gobj()), "inner-border", + &style_border, NULL); + if(style_border) border = *style_border; + move(_entry, x - border.left, y - border.top); + /* This is what set_width_chars does. */ + int minWidth = minWidthChars * std::max(font_metrics.get_approximate_digit_width(), + font_metrics.get_approximate_char_width()); + _entry.set_size_request(std::max(width, minWidth) / Pango::SCALE, -1); +#endif + + _entry.set_text(val); + if(!_entry.is_visible()) { + _entry.show(); + _entry.grab_focus(); + _entry.add_modal_grab(); + } + } + + void stop_editing() { + if(_entry.is_visible()) + _entry.remove_modal_grab(); + _entry.hide(); + } + + bool is_editing() const { + return _entry.is_visible(); + } + + sigc::signal signal_editing_done() { + return _signal_editing_done; + } + + Gtk::Entry &get_entry() { + return _entry; + } + +protected: + virtual bool on_key_press_event(GdkEventKey *event) { + if(event->keyval == GDK_KEY_Escape) { + stop_editing(); + return true; + } + + return false; + } + + virtual void on_size_allocate(Gtk::Allocation& allocation) { + Gtk::Fixed::on_size_allocate(allocation); + + _underlay.size_allocate(allocation); + } + + virtual void on_activate() { + _signal_editing_done(_entry.get_text()); + } + +private: + Gtk::Widget &_underlay; + Gtk::Entry _entry; + sigc::signal _signal_editing_done; +}; + +/* Graphics window */ + +int DeltaYOfScrollEvent(GdkEventScroll *event) { +#ifdef HAVE_GTK3 + int delta_y = event->delta_y; +#else + int delta_y = 0; +#endif + if(delta_y == 0) { + switch(event->direction) { + case GDK_SCROLL_UP: + delta_y = -1; + break; + + case GDK_SCROLL_DOWN: + delta_y = 1; + break; + + default: + /* do nothing */ + return false; + } + } + + return delta_y; +} + +class GraphicsWidget : public GlWidget { +public: + GraphicsWidget() { + set_events(Gdk::POINTER_MOTION_MASK | + Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::BUTTON_MOTION_MASK | + Gdk::SCROLL_MASK | + Gdk::LEAVE_NOTIFY_MASK); + set_double_buffered(true); + } + +protected: + virtual bool on_configure_event(GdkEventConfigure *event) { + _w = event->width; + _h = event->height; + + return GlWidget::on_configure_event(event);; + } + + virtual void on_gl_draw() { + SS.GW.Paint(); + } + + virtual bool on_motion_notify_event(GdkEventMotion *event) { + int x, y; + ij_to_xy(event->x, event->y, x, y); + + SS.GW.MouseMoved(x, y, + event->state & GDK_BUTTON1_MASK, + event->state & GDK_BUTTON2_MASK, + event->state & GDK_BUTTON3_MASK, + event->state & GDK_SHIFT_MASK, + event->state & GDK_CONTROL_MASK); + + return true; + } + + virtual bool on_button_press_event(GdkEventButton *event) { + int x, y; + ij_to_xy(event->x, event->y, x, y); + + switch(event->button) { + case 1: + if(event->type == GDK_BUTTON_PRESS) + SS.GW.MouseLeftDown(x, y); + else if(event->type == GDK_2BUTTON_PRESS) + SS.GW.MouseLeftDoubleClick(x, y); + break; + + case 2: + case 3: + SS.GW.MouseMiddleOrRightDown(x, y); + break; + } + + return true; + } + + virtual bool on_button_release_event(GdkEventButton *event) { + int x, y; + ij_to_xy(event->x, event->y, x, y); + + switch(event->button) { + case 1: + SS.GW.MouseLeftUp(x, y); + break; + + case 3: + SS.GW.MouseRightUp(x, y); + break; + } + + return true; + } + + virtual bool on_scroll_event(GdkEventScroll *event) { + int x, y; + ij_to_xy(event->x, event->y, x, y); + + SS.GW.MouseScroll(x, y, -DeltaYOfScrollEvent(event)); + + return true; + } + + virtual bool on_leave_notify_event (GdkEventCrossing *) { + SS.GW.MouseLeave(); + + return true; + } + +private: + int _w, _h; + void ij_to_xy(int i, int j, int &x, int &y) { + // Convert to xy (vs. ij) style coordinates, + // with (0, 0) at center + x = i - _w / 2; + y = _h / 2 - j; + } +}; + +class GraphicsWindowGtk : public Gtk::Window { +public: + GraphicsWindowGtk() : _overlay(_widget), _is_fullscreen(false) { + set_default_size(900, 600); + + _box.pack_start(_menubar, false, true); + _box.pack_start(_overlay, true, true); + + add(_box); + + _overlay.signal_editing_done(). + connect(sigc::mem_fun(this, &GraphicsWindowGtk::on_editing_done)); + } + + GraphicsWidget &get_widget() { + return _widget; + } + + EditorOverlay &get_overlay() { + return _overlay; + } + + Gtk::MenuBar &get_menubar() { + return _menubar; + } + + bool is_fullscreen() const { + return _is_fullscreen; + } + + bool emulate_key_press(GdkEventKey *event) { + return on_key_press_event(event); + } + +protected: + virtual void on_show() { + Gtk::Window::on_show(); + + CnfThawWindowPos(this, "GraphicsWindow"); + } + + virtual void on_hide() { + CnfFreezeWindowPos(this, "GraphicsWindow"); + + Gtk::Window::on_hide(); + } + + virtual bool on_delete_event(GdkEventAny *) { + if(!SS.OkayToStartNewFile()) return true; + SS.Exit(); + + return true; + } + + virtual bool on_window_state_event(GdkEventWindowState *event) { + _is_fullscreen = event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN; + + /* The event arrives too late for the caller of ToggleFullScreen + to notice state change; and it's possible that the WM will + refuse our request, so we can't just toggle the saved state */ + SS.GW.EnsureValidActives(); + + return Gtk::Window::on_window_state_event(event); + } + + virtual bool on_key_press_event(GdkEventKey *event) { + int chr; + + switch(event->keyval) { + case GDK_KEY_Escape: + chr = GraphicsWindow::ESCAPE_KEY; + break; + + case GDK_KEY_Delete: + chr = GraphicsWindow::DELETE_KEY; + break; + + case GDK_KEY_Tab: + chr = '\t'; + break; + + case GDK_KEY_BackSpace: + case GDK_KEY_Back: + chr = '\b'; + break; + + default: + if(event->keyval >= GDK_KEY_F1 && event->keyval <= GDK_KEY_F12) { + chr = GraphicsWindow::FUNCTION_KEY_BASE + (event->keyval - GDK_KEY_F1); + } else { + chr = gdk_keyval_to_unicode(event->keyval); + } + } + + if(event->state & GDK_SHIFT_MASK){ + chr |= GraphicsWindow::SHIFT_MASK; + } + if(event->state & GDK_CONTROL_MASK) { + chr |= GraphicsWindow::CTRL_MASK; + } + + if(chr && SS.GW.KeyDown(chr)) { + return true; + } + + if(chr == '\t') { + // Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=123994. + GraphicsWindow::MenuView(GraphicsWindow::MNU_SHOW_TEXT_WND); + return true; + } + + return Gtk::Window::on_key_press_event(event); + } + + virtual void on_editing_done(Glib::ustring value) { + SS.GW.EditControlDone(value.c_str()); + } + +private: + GraphicsWidget _widget; + EditorOverlay _overlay; + Gtk::MenuBar _menubar; + Gtk::VBox _box; + + bool _is_fullscreen; +}; + +std::unique_ptr GW; + +void GetGraphicsWindowSize(int *w, int *h) { + Gdk::Rectangle allocation = GW->get_widget().get_allocation(); + *w = allocation.get_width(); + *h = allocation.get_height(); +} + +void InvalidateGraphics(void) { + GW->get_widget().queue_draw(); +} + +void PaintGraphics(void) { + GW->get_widget().queue_draw(); + /* Process animation */ + Glib::MainContext::get_default()->iteration(false); +} + +void SetCurrentFilename(const std::string &filename) { + if(!filename.empty()) { + GW->set_title("SolveSpace - " + filename); + } else { + GW->set_title("SolveSpace - (not yet saved)"); + } +} + +void ToggleFullScreen(void) { + if(GW->is_fullscreen()) + GW->unfullscreen(); + else + GW->fullscreen(); +} + +bool FullScreenIsActive(void) { + return GW->is_fullscreen(); +} + +void ShowGraphicsEditControl(int x, int y, int fontHeight, int minWidthChars, + const std::string &val) { + Gdk::Rectangle rect = GW->get_widget().get_allocation(); + + // Convert to ij (vs. xy) style coordinates, + // and compensate for the input widget height due to inverse coord + int i, j; + i = x + rect.get_width() / 2; + j = -y + rect.get_height() / 2; + + GW->get_overlay().start_editing(i, j, fontHeight, /*is_monospace=*/false, minWidthChars, val); +} + +void HideGraphicsEditControl(void) { + GW->get_overlay().stop_editing(); +} + +bool GraphicsEditControlIsVisible(void) { + return GW->get_overlay().is_editing(); +} + +/* TODO: removing menubar breaks accelerators. */ +void ToggleMenuBar(void) { + GW->get_menubar().set_visible(!GW->get_menubar().is_visible()); +} + +bool MenuBarIsVisible(void) { + return GW->get_menubar().is_visible(); +} + +/* Context menus */ + +class ContextMenuItem : public Gtk::MenuItem { +public: + static int choice; + + ContextMenuItem(const Glib::ustring &label, int id, bool mnemonic=false) : + Gtk::MenuItem(label, mnemonic), _id(id) { + } + +protected: + virtual void on_activate() { + Gtk::MenuItem::on_activate(); + + if(has_submenu()) + return; + + choice = _id; + } + + /* Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=695488. + This is used in addition to on_activate() to catch mouse events. + Without on_activate(), it would be impossible to select a menu item + via keyboard. + This selects the item twice in some cases, but we are idempotent. + */ + virtual bool on_button_press_event(GdkEventButton *event) { + if(event->button == 1 && event->type == GDK_BUTTON_PRESS) { + on_activate(); + return true; + } + + return Gtk::MenuItem::on_button_press_event(event); + } + +private: + int _id; +}; + +int ContextMenuItem::choice = 0; + +static Gtk::Menu *context_menu = NULL, *context_submenu = NULL; + +void AddContextMenuItem(const char *label, int id) { + Gtk::MenuItem *menu_item; + if(label) + menu_item = new ContextMenuItem(label, id); + else + menu_item = new Gtk::SeparatorMenuItem(); + + if(id == CONTEXT_SUBMENU) { + menu_item->set_submenu(*context_submenu); + context_submenu = NULL; + } + + if(context_submenu) { + context_submenu->append(*menu_item); + } else { + if(!context_menu) + context_menu = new Gtk::Menu; + + context_menu->append(*menu_item); + } +} + +void CreateContextSubmenu(void) { + if(context_submenu) oops(); + + context_submenu = new Gtk::Menu; +} + +int ShowContextMenu(void) { + if(!context_menu) + return -1; + + Glib::RefPtr loop = Glib::MainLoop::create(); + context_menu->signal_deactivate(). + connect(sigc::mem_fun(loop.operator->(), &Glib::MainLoop::quit)); + + ContextMenuItem::choice = -1; + + context_menu->show_all(); + context_menu->popup(3, GDK_CURRENT_TIME); + + loop->run(); + + delete context_menu; + context_menu = NULL; + + return ContextMenuItem::choice; +} + +/* Main menu */ + +template class MainMenuItem : public MenuItem { +public: + MainMenuItem(const GraphicsWindow::MenuEntry &entry) : + MenuItem(), _entry(entry), _synthetic(false) { + Glib::ustring label(_entry.label); + for(size_t i = 0; i < label.length(); i++) { + if(label[i] == '&') + label.replace(i, 1, "_"); + } + + guint accel_key = 0; + Gdk::ModifierType accel_mods = Gdk::ModifierType(); + switch(_entry.accel) { + case GraphicsWindow::DELETE_KEY: + accel_key = GDK_KEY_Delete; + break; + + case GraphicsWindow::ESCAPE_KEY: + accel_key = GDK_KEY_Escape; + break; + + case '\t': + accel_key = GDK_KEY_Tab; + break; + + default: + accel_key = _entry.accel & ~(GraphicsWindow::SHIFT_MASK | GraphicsWindow::CTRL_MASK); + if(accel_key > GraphicsWindow::FUNCTION_KEY_BASE && + accel_key <= GraphicsWindow::FUNCTION_KEY_BASE + 12) + accel_key = GDK_KEY_F1 + (accel_key - GraphicsWindow::FUNCTION_KEY_BASE - 1); + else + accel_key = gdk_unicode_to_keyval(accel_key); + + if(_entry.accel & GraphicsWindow::SHIFT_MASK) + accel_mods |= Gdk::SHIFT_MASK; + if(_entry.accel & GraphicsWindow::CTRL_MASK) + accel_mods |= Gdk::CONTROL_MASK; + } + + MenuItem::set_label(label); + MenuItem::set_use_underline(true); + if(!(accel_key & 0x01000000)) + MenuItem::set_accel_key(Gtk::AccelKey(accel_key, accel_mods)); + } + + void set_active(bool checked) { + if(MenuItem::get_active() == checked) + return; + + _synthetic = true; + MenuItem::set_active(checked); + } + +protected: + virtual void on_activate() { + MenuItem::on_activate(); + + if(_synthetic) + _synthetic = false; + else if(!MenuItem::has_submenu() && _entry.fn) + _entry.fn(_entry.id); + } + +private: + const GraphicsWindow::MenuEntry &_entry; + bool _synthetic; +}; + +static std::map main_menu_items; + +static void InitMainMenu(Gtk::MenuShell *menu_shell) { + Gtk::MenuItem *menu_item = NULL; + Gtk::MenuShell *levels[5] = {menu_shell, 0}; + + const GraphicsWindow::MenuEntry *entry = &GraphicsWindow::menu[0]; + int current_level = 0; + while(entry->level >= 0) { + if(entry->level > current_level) { + Gtk::Menu *menu = new Gtk::Menu; + menu_item->set_submenu(*menu); + + if((unsigned)entry->level >= sizeof(levels) / sizeof(levels[0])) + oops(); + + levels[entry->level] = menu; + } + + current_level = entry->level; + + if(entry->label) { + switch(entry->kind) { + case GraphicsWindow::MENU_ITEM_NORMAL: + menu_item = new MainMenuItem(*entry); + break; + + case GraphicsWindow::MENU_ITEM_CHECK: + menu_item = new MainMenuItem(*entry); + break; + + case GraphicsWindow::MENU_ITEM_RADIO: + MainMenuItem *radio_item = + new MainMenuItem(*entry); + radio_item->set_draw_as_radio(true); + menu_item = radio_item; + break; + } + } else { + menu_item = new Gtk::SeparatorMenuItem(); + } + + levels[entry->level]->append(*menu_item); + + main_menu_items[entry->id] = menu_item; + + ++entry; + } +} + +void EnableMenuById(int id, bool enabled) { + main_menu_items[id]->set_sensitive(enabled); +} + +void CheckMenuById(int id, bool checked) { + ((MainMenuItem*)main_menu_items[id])->set_active(checked); +} + +void RadioMenuById(int id, bool selected) { + SolveSpace::CheckMenuById(id, selected); +} + +class RecentMenuItem : public Gtk::MenuItem { +public: + RecentMenuItem(const Glib::ustring& label, int id) : + MenuItem(label), _id(id) { + } + +protected: + virtual void on_activate() { + if(_id >= RECENT_OPEN && _id < (RECENT_OPEN + MAX_RECENT)) + SolveSpaceUI::MenuFile(_id); + else if(_id >= RECENT_LINK && _id < (RECENT_LINK + MAX_RECENT)) + Group::MenuGroup(_id); + } + +private: + int _id; +}; + +static void RefreshRecentMenu(int id, int base) { + Gtk::MenuItem *recent = static_cast(main_menu_items[id]); + recent->unset_submenu(); + + Gtk::Menu *menu = new Gtk::Menu; + recent->set_submenu(*menu); + + if(std::string(RecentFile[0]).empty()) { + Gtk::MenuItem *placeholder = new Gtk::MenuItem("(no recent files)"); + placeholder->set_sensitive(false); + menu->append(*placeholder); + } else { + for(int i = 0; i < MAX_RECENT; i++) { + if(std::string(RecentFile[i]).empty()) + break; + + RecentMenuItem *item = new RecentMenuItem(RecentFile[i], base + i); + menu->append(*item); + } + } + + menu->show_all(); +} + +void RefreshRecentMenus(void) { + RefreshRecentMenu(GraphicsWindow::MNU_OPEN_RECENT, RECENT_OPEN); + RefreshRecentMenu(GraphicsWindow::MNU_GROUP_RECENT, RECENT_LINK); +} + +/* Save/load */ + +static std::string ConvertFilters(std::string active, const FileFilter ssFilters[], + Gtk::FileChooser *chooser) { + for(const FileFilter *ssFilter = ssFilters; ssFilter->name; ssFilter++) { +#ifdef HAVE_GTK3 + Glib::RefPtr filter = Gtk::FileFilter::create(); +#else + Gtk::FileFilter *filter = new Gtk::FileFilter; +#endif + filter->set_name(ssFilter->name); + + bool is_active = false; + std::string desc = ""; + for(const char *const *ssPattern = ssFilter->patterns; *ssPattern; ssPattern++) { + std::string pattern = "*." + std::string(*ssPattern); + filter->add_pattern(pattern); + if(active == "") + active = pattern.substr(2); + if("*." + active == pattern) + is_active = true; + if(desc == "") + desc = pattern; + else + desc += ", " + pattern; + } + filter->set_name(filter->get_name() + " (" + desc + ")"); + +#ifdef HAVE_GTK3 + chooser->add_filter(filter); + if(is_active) + chooser->set_filter(filter); +#else + chooser->add_filter(*filter); + if(is_active) + chooser->set_filter(*filter); +#endif + } + + return active; +} + +bool GetOpenFile(std::string *filename, const std::string &activeOrEmpty, + const FileFilter filters[]) { + Gtk::FileChooserDialog chooser(*GW, "SolveSpace - Open File"); + chooser.set_filename(*filename); + chooser.add_button("_Cancel", Gtk::RESPONSE_CANCEL); + chooser.add_button("_Open", Gtk::RESPONSE_OK); + chooser.set_current_folder(CnfThawString("", "FileChooserPath")); + + ConvertFilters(activeOrEmpty, filters, &chooser); + + if(chooser.run() == Gtk::RESPONSE_OK) { + CnfFreezeString(chooser.get_current_folder(), "FileChooserPath"); + *filename = chooser.get_filename(); + return true; + } else { + return false; + } +} + +/* Glib::path_get_basename got /removed/ in 3.0?! Come on */ +static std::string Basename(std::string filename) { + int slash = filename.rfind('/'); + if(slash >= 0) + return filename.substr(slash + 1, filename.length()); + return ""; +} + +static void ChooserFilterChanged(Gtk::FileChooserDialog *chooser) +{ + /* Extract the pattern from the filter. GtkFileFilter doesn't provide + any way to list the patterns, so we extract it from the filter name. + Gross. */ + std::string filter_name = chooser->get_filter()->get_name(); + int lparen = filter_name.rfind('(') + 1; + int rdelim = filter_name.find(',', lparen); + if(rdelim < 0) + rdelim = filter_name.find(')', lparen); + if(lparen < 0 || rdelim < 0) + oops(); + + std::string extension = filter_name.substr(lparen, rdelim - lparen); + if(extension == "*") + return; + + if(extension.length() > 2 && extension.substr(0, 2) == "*.") + extension = extension.substr(2, extension.length() - 2); + + std::string basename = Basename(chooser->get_filename()); + int dot = basename.rfind('.'); + if(dot >= 0) { + basename.replace(dot + 1, basename.length() - dot - 1, extension); + chooser->set_current_name(basename); + } else { + chooser->set_current_name(basename + "." + extension); + } +} + +bool GetSaveFile(std::string *filename, const std::string &activeOrEmpty, + const FileFilter filters[]) { + Gtk::FileChooserDialog chooser(*GW, "SolveSpace - Save File", + Gtk::FILE_CHOOSER_ACTION_SAVE); + chooser.set_do_overwrite_confirmation(true); + chooser.add_button("_Cancel", Gtk::RESPONSE_CANCEL); + chooser.add_button("_Save", Gtk::RESPONSE_OK); + + std::string active = ConvertFilters(activeOrEmpty, filters, &chooser); + + chooser.set_current_folder(CnfThawString("", "FileChooserPath")); + chooser.set_current_name(std::string("untitled.") + active); + + /* Gtk's dialog doesn't change the extension when you change the filter, + and makes it extremely hard to do so. Gtk is garbage. */ + chooser.property_filter().signal_changed(). + connect(sigc::bind(sigc::ptr_fun(&ChooserFilterChanged), &chooser)); + + if(chooser.run() == Gtk::RESPONSE_OK) { + CnfFreezeString(chooser.get_current_folder(), "FileChooserPath"); + *filename = chooser.get_filename(); + return true; + } else { + return false; + } +} + +DialogChoice SaveFileYesNoCancel(void) { + Glib::ustring message = + "The file has changed since it was last saved.\n" + "Do you want to save the changes?"; + Gtk::MessageDialog dialog(*GW, message, /*use_markup*/ true, Gtk::MESSAGE_QUESTION, + Gtk::BUTTONS_NONE, /*is_modal*/ true); + dialog.set_title("SolveSpace - Modified File"); + dialog.add_button("_Save", Gtk::RESPONSE_YES); + dialog.add_button("Do_n't Save", Gtk::RESPONSE_NO); + dialog.add_button("_Cancel", Gtk::RESPONSE_CANCEL); + + switch(dialog.run()) { + case Gtk::RESPONSE_YES: + return DIALOG_YES; + + case Gtk::RESPONSE_NO: + return DIALOG_NO; + + case Gtk::RESPONSE_CANCEL: + default: + return DIALOG_CANCEL; + } +} + +DialogChoice LoadAutosaveYesNo(void) { + Glib::ustring message = + "An autosave file is availible for this project.\n" + "Do you want to load the autosave file instead?"; + Gtk::MessageDialog dialog(*GW, message, /*use_markup*/ true, Gtk::MESSAGE_QUESTION, + Gtk::BUTTONS_NONE, /*is_modal*/ true); + dialog.set_title("SolveSpace - Autosave Available"); + dialog.add_button("_Load autosave", Gtk::RESPONSE_YES); + dialog.add_button("Do_n't Load", Gtk::RESPONSE_NO); + + switch(dialog.run()) { + case Gtk::RESPONSE_YES: + return DIALOG_YES; + + case Gtk::RESPONSE_NO: + default: + return DIALOG_NO; + } +} + +DialogChoice LocateImportedFileYesNoCancel(const std::string &filename, + bool canCancel) { + Glib::ustring message = + "The linked file " + filename + " is not present.\n" + "Do you want to locate it manually?\n" + "If you select \"No\", any geometry that depends on " + "the missing file will be removed."; + Gtk::MessageDialog dialog(*GW, message, /*use_markup*/ true, Gtk::MESSAGE_QUESTION, + Gtk::BUTTONS_NONE, /*is_modal*/ true); + dialog.set_title("SolveSpace - Missing File"); + dialog.add_button("_Yes", Gtk::RESPONSE_YES); + dialog.add_button("_No", Gtk::RESPONSE_NO); + if(canCancel) + dialog.add_button("_Cancel", Gtk::RESPONSE_CANCEL); + + switch(dialog.run()) { + case Gtk::RESPONSE_YES: + return DIALOG_YES; + + case Gtk::RESPONSE_NO: + return DIALOG_NO; + + case Gtk::RESPONSE_CANCEL: + default: + return DIALOG_CANCEL; + } +} + +/* Text window */ + +class TextWidget : public GlWidget { +public: +#ifdef HAVE_GTK3 + TextWidget(Glib::RefPtr adjustment) : _adjustment(adjustment) { +#else + TextWidget(Gtk::Adjustment* adjustment) : _adjustment(adjustment) { +#endif + set_events(Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::SCROLL_MASK | + Gdk::LEAVE_NOTIFY_MASK); + } + + void set_cursor_hand(bool is_hand) { + Glib::RefPtr gdkwin = get_window(); + if(gdkwin) { // returns NULL if not realized + Gdk::CursorType type = is_hand ? Gdk::HAND1 : Gdk::ARROW; +#ifdef HAVE_GTK3 + gdkwin->set_cursor(Gdk::Cursor::create(type)); +#else + gdkwin->set_cursor(Gdk::Cursor(type)); +#endif + } + } + +protected: + virtual void on_gl_draw() { + SS.TW.Paint(); + } + + virtual bool on_motion_notify_event(GdkEventMotion *event) { + SS.TW.MouseEvent(/*leftClick*/ false, + /*leftDown*/ event->state & GDK_BUTTON1_MASK, + event->x, event->y); + + return true; + } + + virtual bool on_button_press_event(GdkEventButton *event) { + SS.TW.MouseEvent(/*leftClick*/ event->type == GDK_BUTTON_PRESS, + /*leftDown*/ event->state & GDK_BUTTON1_MASK, + event->x, event->y); + + return true; + } + + virtual bool on_scroll_event(GdkEventScroll *event) { + _adjustment->set_value(_adjustment->get_value() + + DeltaYOfScrollEvent(event) * _adjustment->get_page_increment()); + + return true; + } + + virtual bool on_leave_notify_event (GdkEventCrossing *) { + SS.TW.MouseLeave(); + + return true; + } + +private: +#ifdef HAVE_GTK3 + Glib::RefPtr _adjustment; +#else + Gtk::Adjustment *_adjustment; +#endif +}; + +class TextWindowGtk : public Gtk::Window { +public: + TextWindowGtk() : _scrollbar(), _widget(_scrollbar.get_adjustment()), + _overlay(_widget), _box() { + set_type_hint(Gdk::WINDOW_TYPE_HINT_UTILITY); + set_skip_taskbar_hint(true); + set_skip_pager_hint(true); + set_title("SolveSpace - Property Browser"); + set_default_size(420, 300); + + _box.pack_start(_overlay, true, true); + _box.pack_start(_scrollbar, false, true); + add(_box); + + _scrollbar.get_adjustment()->signal_value_changed(). + connect(sigc::mem_fun(this, &TextWindowGtk::on_scrollbar_value_changed)); + + _overlay.signal_editing_done(). + connect(sigc::mem_fun(this, &TextWindowGtk::on_editing_done)); + + _overlay.get_entry().signal_motion_notify_event(). + connect(sigc::mem_fun(this, &TextWindowGtk::on_editor_motion_notify_event)); + _overlay.get_entry().signal_button_press_event(). + connect(sigc::mem_fun(this, &TextWindowGtk::on_editor_button_press_event)); + } + + Gtk::VScrollbar &get_scrollbar() { + return _scrollbar; + } + + TextWidget &get_widget() { + return _widget; + } + + EditorOverlay &get_overlay() { + return _overlay; + } + +protected: + virtual void on_show() { + Gtk::Window::on_show(); + + CnfThawWindowPos(this, "TextWindow"); + } + + virtual void on_hide() { + CnfFreezeWindowPos(this, "TextWindow"); + + Gtk::Window::on_hide(); + } + + virtual bool on_delete_event(GdkEventAny *) { + /* trigger the action and ignore the request */ + GraphicsWindow::MenuView(GraphicsWindow::MNU_SHOW_TEXT_WND); + + return false; + } + + virtual void on_scrollbar_value_changed() { + SS.TW.ScrollbarEvent(_scrollbar.get_adjustment()->get_value()); + } + + virtual void on_editing_done(Glib::ustring value) { + SS.TW.EditControlDone(value.c_str()); + } + + virtual bool on_editor_motion_notify_event(GdkEventMotion *event) { + return _widget.event((GdkEvent*) event); + } + + virtual bool on_editor_button_press_event(GdkEventButton *event) { + return _widget.event((GdkEvent*) event); + } + + virtual bool on_key_press_event(GdkEventKey *event) { + if(GW->emulate_key_press(event)) { + return true; + } + + return Gtk::Window::on_key_press_event(event); + } + +private: + Gtk::VScrollbar _scrollbar; + TextWidget _widget; + EditorOverlay _overlay; + Gtk::HBox _box; +}; + +std::unique_ptr TW; + +void ShowTextWindow(bool visible) { + if(visible) + TW->show(); + else + TW->hide(); +} + +void GetTextWindowSize(int *w, int *h) { + Gdk::Rectangle allocation = TW->get_widget().get_allocation(); + *w = allocation.get_width(); + *h = allocation.get_height(); +} + +void InvalidateText(void) { + TW->get_widget().queue_draw(); +} + +void MoveTextScrollbarTo(int pos, int maxPos, int page) { + TW->get_scrollbar().get_adjustment()->configure(pos, 0, maxPos, 1, 10, page); +} + +void SetMousePointerToHand(bool is_hand) { + TW->get_widget().set_cursor_hand(is_hand); +} + +void ShowTextEditControl(int x, int y, const std::string &val) { + TW->get_overlay().start_editing(x, y, TextWindow::CHAR_HEIGHT, /*is_monospace=*/true, 30, val); +} + +void HideTextEditControl(void) { + TW->get_overlay().stop_editing(); +} + +bool TextEditControlIsVisible(void) { + return TW->get_overlay().is_editing(); +} + +/* Miscellanea */ + + +void DoMessageBox(const char *message, int rows, int cols, bool error) { + Gtk::MessageDialog dialog(*GW, message, /*use_markup*/ true, + error ? Gtk::MESSAGE_ERROR : Gtk::MESSAGE_INFO, Gtk::BUTTONS_OK, + /*is_modal*/ true); + dialog.set_title(error ? "SolveSpace - Error" : "SolveSpace - Message"); + dialog.run(); +} + +void OpenWebsite(const char *url) { + gtk_show_uri(Gdk::Screen::get_default()->gobj(), url, GDK_CURRENT_TIME, NULL); +} + +/* fontconfig is already initialized by GTK */ +std::vector GetFontFiles() { + std::vector fonts; + + FcPattern *pat = FcPatternCreate(); + FcObjectSet *os = FcObjectSetBuild(FC_FILE, (char *)0); + FcFontSet *fs = FcFontList(0, pat, os); + + for(int i = 0; i < fs->nfont; i++) { + FcChar8 *filenameFC = FcPatternFormat(fs->fonts[i], (const FcChar8*) "%{file}"); + std::string filename = (char*) filenameFC; + fonts.push_back(filename); + FcStrFree(filenameFC); + } + + FcFontSetDestroy(fs); + FcObjectSetDestroy(os); + FcPatternDestroy(pat); + + return fonts; +} + +/* Space Navigator support */ + +#ifdef HAVE_SPACEWARE +static GdkFilterReturn GdkSpnavFilter(GdkXEvent *gxevent, GdkEvent *, gpointer) { + XEvent *xevent = (XEvent*) gxevent; + + spnav_event sev; + if(!spnav_x11_event(xevent, &sev)) + return GDK_FILTER_CONTINUE; + + switch(sev.type) { + case SPNAV_EVENT_MOTION: + SS.GW.SpaceNavigatorMoved( + (double)sev.motion.x, + (double)sev.motion.y, + (double)sev.motion.z * -1.0, + (double)sev.motion.rx * 0.001, + (double)sev.motion.ry * 0.001, + (double)sev.motion.rz * -0.001, + xevent->xmotion.state & ShiftMask); + break; + + case SPNAV_EVENT_BUTTON: + if(!sev.button.press && sev.button.bnum == SI_APP_FIT_BUTTON) { + SS.GW.SpaceNavigatorButtonUp(); + } + break; + } + + return GDK_FILTER_REMOVE; +} +#endif + +/* Application lifecycle */ + +void ExitNow(void) { + GW->hide(); + TW->hide(); +} +}; + +int main(int argc, char** argv) { + /* It would in principle be possible to judiciously use + Glib::filename_{from,to}_utf8, but it's not really worth + the effort. + The setlocale() call is necessary for Glib::get_charset() + to detect the system character set; otherwise it thinks + it is always ANSI_X3.4-1968. + We set it back to C after all. */ + setlocale(LC_ALL, ""); + if(!Glib::get_charset()) { + std::cerr << "Sorry, only UTF-8 locales are supported." << std::endl; + return 1; + } + setlocale(LC_ALL, "C"); + + /* If we don't do this, gtk_init will set the C standard library + locale, and printf will format floats using ",". We will then + fail to parse these. Also, many text window lines will become + ambiguous. */ + gtk_disable_setlocale(); + + Gtk::Main main(argc, argv); + +#ifdef HAVE_SPACEWARE + gdk_window_add_filter(NULL, GdkSpnavFilter, NULL); +#endif + + CnfLoad(); + + TW.reset(new TextWindowGtk); + GW.reset(new GraphicsWindowGtk); + InitMainMenu(&GW->get_menubar()); + GW->get_menubar().accelerate(*TW); + TW->set_transient_for(*GW); + + TW->show_all(); + GW->show_all(); + +#ifdef HAVE_SPACEWARE +#ifdef HAVE_GTK3 + // We don't care if it can't be opened; just continue without. + spnav_x11_open(gdk_x11_get_default_xdisplay(), + gdk_x11_window_get_xid(GW->get_window()->gobj())); +#else + spnav_x11_open(gdk_x11_get_default_xdisplay(), + GDK_WINDOW_XWINDOW(GW->get_window()->gobj())); +#endif +#endif + + SS.Init(); + + if(argc >= 2) { + if(argc > 2) { + std::cerr << "Only the first file passed on command line will be opened." + << std::endl; + } + + /* Make sure the argument is valid UTF-8. */ + SS.OpenFile(Glib::ustring(argv[1])); + } + + main.run(*GW); + + TW.reset(); + GW.reset(); + + SK.Clear(); + SS.Clear(); + + return 0; +} diff --git a/src/icons/angle.png b/src/icons/angle.png new file mode 100644 index 0000000000000000000000000000000000000000..7001a9ddc296773cafea0ef5e2902b0a0a1f9a72 GIT binary patch literal 27359 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 NcE##)iP@c}{{dA>m_q;n literal 0 HcmV?d00001 diff --git a/src/icons/assemble.png b/src/icons/assemble.png new file mode 100644 index 0000000000000000000000000000000000000000..5db2d6b08d74a7eba9571aab2cb5a81ca823a260 GIT binary patch literal 27011 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 literal 0 HcmV?d00001 diff --git a/src/icons/bezier.png b/src/icons/bezier.png new file mode 100644 index 0000000000000000000000000000000000000000..73620cdd758e13b96e9e2bbd18e3501b92614154 GIT binary patch literal 27089 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 PyIsC$bD`wittbBn>2u8s literal 0 HcmV?d00001 diff --git a/src/icons/lathe.png b/src/icons/lathe.png new file mode 100644 index 0000000000000000000000000000000000000000..3596fe3ea9d7f6335f5bf29485898f3c1e6deeb0 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaP3?%1DUd;wlJOMr-u0UE&PA)Yy_0OL_yS_}+ z0P>?eT^vI=uJ@i>D9B_e;Be8rlQaF&p;sX@gZzxVg=c0rm`ym7;HSiR-1vT7-PALk z+RaSCmpP;BH)f}sI$0Z~XRQ7d-xq!Eg4|V(+pFH_trkA@_vDk58nu0U8KpN#nI<{B RU>G)JG1}* literal 0 HcmV?d00001 diff --git a/src/icons/length.png b/src/icons/length.png new file mode 100644 index 0000000000000000000000000000000000000000..8396bb147fdd75595f19381a9e143c0235aa483e GIT binary patch literal 26577 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 E0s8?7x&QzG literal 0 HcmV?d00001 diff --git a/src/icons/pointonx.png b/src/icons/pointonx.png new file mode 100644 index 0000000000000000000000000000000000000000..ad15c56e8c8750b87ebf5f20a4f6e2c1001cce7e GIT binary patch literal 26848 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%0AHQLBV5naJDbdYY@W9ZR6aYWH<0U1@g`+yudhJ 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 Ty?Nzt;axm$cdq!%&By--A5A^C literal 0 HcmV?d00001 diff --git a/src/icons/ref.png b/src/icons/ref.png new file mode 100644 index 0000000000000000000000000000000000000000..afd64c3fa0c39c7115fdfe9257775e185161a4f8 GIT binary patch literal 25761 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 Za}DLd8BCI#@E=*8JL7zsaPr!p{|D3G4sZYf literal 0 HcmV?d00001 diff --git a/src/icons/same-orientation.png b/src/icons/same-orientation.png new file mode 100644 index 0000000000000000000000000000000000000000..c612ee5f4a664e3070b1338b7fada83f5b68d76e GIT binary patch literal 26407 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 literal 0 HcmV?d00001 diff --git a/src/icons/sketch-in-3d.png b/src/icons/sketch-in-3d.png new file mode 100644 index 0000000000000000000000000000000000000000..204fd8c96718ef6d66513deb07b2f117f2fedcdc GIT binary patch literal 26669 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 B4rl-X literal 0 HcmV?d00001 diff --git a/src/icons/sketch-in-plane.png b/src/icons/sketch-in-plane.png new file mode 100644 index 0000000000000000000000000000000000000000..86811e8bc993d1f5fec0d220ef8428613ea2c0d6 GIT binary patch literal 26671 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 Al>h($ literal 0 HcmV?d00001 diff --git a/src/icons/step-rotate.png b/src/icons/step-rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..6c38a16765bee3e88ad5bbaf18af0531a4b7df7b GIT binary patch literal 27352 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 KrIHJ`pZ*`svotsW literal 0 HcmV?d00001 diff --git a/src/icons/step-translate.png b/src/icons/step-translate.png new file mode 100644 index 0000000000000000000000000000000000000000..faaeff0b977198b20138a6aa1e4eece11d7bc01d GIT binary patch literal 26253 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 F{|DDI3FZI* literal 0 HcmV?d00001 diff --git a/src/icons/symmetric.png b/src/icons/symmetric.png new file mode 100644 index 0000000000000000000000000000000000000000..6eb9cad9b31cfc18f8a2a9987e7c77cfda2d6e46 GIT binary patch literal 26180 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 literal 0 HcmV?d00001 diff --git a/src/icons/tangent-arc.png b/src/icons/tangent-arc.png new file mode 100644 index 0000000000000000000000000000000000000000..0db8ac3a7fba8d5063089855bf182c076068aa07 GIT binary patch literal 27250 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 hX@@G9j-!`e$~ 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.Cross(p1->Minus(*c)).z > 0.0; + + *c = blockTransform(*c); + *p0 = blockTransform(*p0); + *p1 = blockTransform(*p1); + + bool newSign = p0->Minus(*c).Cross(p1->Minus(*c)).z > 0.0; + if(oldSign != newSign) std::swap(*p0, *p1); + } + + Vector toVector(const DRW_Coord &c, bool transform = true) { + Vector result = Vector::From(c.x, c.y, 0.0); + if(transform) return blockTransform(result); + return result; + } + + Vector toVector(const DRW_Vertex2D &c) { + Vector result = Vector::From(c.x, c.y, 0.0); + return blockTransform(result); + } + + Vector toVector(const DRW_Vertex &c) { + Vector result = Vector::From(c.basePoint.x, c.basePoint.y, 0.0); + return blockTransform(result); + } + + double angleTo(Vector v0, Vector v1) { + Vector d = v1.Minus(v0); + double a = atan2(d.y, d.x); + return M_PI + remainder(a - M_PI, 2 * M_PI); + } + + Vector polar(double radius, double angle) { + return Vector::From(radius * cos(angle), radius * sin(angle), 0.0); + } + + hRequest createBulge(Vector p0, Vector p1, double bulge) { + bool reversed = bulge < 0.0; + double alpha = atan(bulge) * 4.0; + + Vector middle = p1.Plus(p0).ScaledBy(0.5); + double dist = p1.Minus(p0).Magnitude() / 2.0; + double angle = angleTo(p0, p1); + + // alpha can't be 0.0 at this point + double radius = fabs(dist / sin(alpha / 2.0)); + double wu = fabs(radius * radius - dist * dist); + double h = sqrt(wu); + + if(bulge > 0.0) { + angle += M_PI_2; + } else { + angle -= M_PI_2; + } + + if (fabs(alpha) > M_PI) { + h *= -1.0; + } + + Vector center = polar(h, angle); + center = center.Plus(middle); + + if(reversed) std::swap(p0, p1); + blockTransformArc(¢er, &p0, &p1); + + hRequest hr = SS.GW.AddRequest(Request::ARC_OF_CIRCLE, false); + SK.GetEntity(hr.entity(1))->PointForceTo(center); + SK.GetEntity(hr.entity(2))->PointForceTo(p0); + SK.GetEntity(hr.entity(3))->PointForceTo(p1); + processPoint(hr.entity(1)); + processPoint(hr.entity(2)); + processPoint(hr.entity(3)); + return hr; + } + + struct Block { + std::vector> entities; + DRW_Block data; + }; + + unsigned unknownEntities = 0; + std::map styles; + std::map blocks; + std::map layers; + Block *readBlock = NULL; + const DRW_Insert *insertInsert = NULL; + + template + bool addPendingBlockEntity(const T &e) { + if(readBlock == NULL) return false; + readBlock->entities.emplace_back(new T(e)); + return true; + } + + void addEntity(DRW_Entity *e) { + switch(e->eType) { + case DRW::POINT: + addPoint(*static_cast(e)); + break; + case DRW::LINE: + addLine(*static_cast(e)); + break; + case DRW::ARC: + addArc(*static_cast(e)); + break; + case DRW::CIRCLE: + addCircle(*static_cast(e)); + break; + case DRW::POLYLINE: + addPolyline(*static_cast(e)); + break; + case DRW::LWPOLYLINE: + addLWPolyline(*static_cast(e)); + break; + case DRW::SPLINE: + addSpline(static_cast(e)); + break; + case DRW::INSERT: + addInsert(*static_cast(e)); + break; + case DRW::TEXT: + addText(*static_cast(e)); + break; + case DRW::MTEXT: + addMText(*static_cast(e)); + break; + case DRW::DIMALIGNED: + addDimAlign(static_cast(e)); + break; + case DRW::DIMLINEAR: + addDimLinear(static_cast(e)); + break; + case DRW::DIMRADIAL: + addDimRadial(static_cast(e)); + break; + case DRW::DIMDIAMETRIC: + addDimDiametric(static_cast(e)); + break; + case DRW::DIMANGULAR: + addDimAngular(static_cast(e)); + break; + default: + unknownEntities++; + } + } + + int dxfAlignToOrigin(DRW_Text::HAlign alignH, DRW_Text::VAlign alignV) { + int origin = 0; + switch(alignH) { + case DRW_Text::HLeft: + origin |= Style::ORIGIN_LEFT; + break; + + case DRW_Text::HMiddle: + case DRW_Text::HCenter: + break; + + case DRW_Text::HRight: + origin |= Style::ORIGIN_RIGHT; + break; + + case DRW_Text::HAligned: + case DRW_Text::HFit: + default: + origin |= Style::ORIGIN_LEFT; + break; + } + + switch(alignV) { + case DRW_Text::VBaseLine: + case DRW_Text::VBottom: + origin |= Style::ORIGIN_BOT; + break; + + case DRW_Text::VMiddle: + break; + + case DRW_Text::VTop: + origin |= Style::ORIGIN_TOP; + break; + + default: + origin |= Style::ORIGIN_BOT; + break; + } + + return origin; + } + + DRW_Layer *getSourceLayer(const DRW_Entity *e) { + DRW_Layer *layer = NULL; + if(insertInsert != NULL) { + std::string l = insertInsert->layer; + auto bi = layers.find(l); + if(bi != layers.end()) layer = &bi->second; + } else { + std::string l = e->layer; + auto bi = layers.find(l); + if(bi != layers.end()) layer = &bi->second; + } + return layer; + } + + int getColor(const DRW_Entity *e) { + int col = e->color; + if(col == DRW::ColorByBlock) { + if(insertInsert != NULL) { + col = insertInsert->color; + } else { + col = 7; + } + } + if(col == DRW::ColorByLayer) { + DRW_Layer *layer = getSourceLayer(e); + if(layer != NULL) { + col = layer->color; + } else { + col = 7; + } + } + return col; + } + + DRW_LW_Conv::lineWidth getLineWidth(const DRW_Entity *e) { + DRW_LW_Conv::lineWidth result = e->lWeight; + if(result == DRW_LW_Conv::widthByBlock) { + if(insertInsert != NULL) { + result = insertInsert->lWeight; + } else { + result = DRW_LW_Conv::widthDefault; + } + } + if(result == DRW_LW_Conv::widthByLayer) { + DRW_Layer *layer = getSourceLayer(e); + if(layer != NULL) { + result = layer->lWeight; + } else { + result = DRW_LW_Conv::widthDefault; + } + } + return result; + } + + std::string getLineType(const DRW_Entity *e) { + std::string result = e->lineType; + if(result == "BYBLOCK") { + if(insertInsert != NULL) { + result = ToUpper(insertInsert->lineType); + } else { + result = "CONTINUOUS"; + } + } + if(result == "BYLAYER") { + DRW_Layer *layer = getSourceLayer(e); + if(layer != NULL) { + result = ToUpper(layer->lineType); + } else { + result = "CONTINUOUS"; + } + } + return result; + } + + hStyle invisibleStyle() { + std::string id = "@dxf-invisible"; + + auto si = styles.find(id); + if(si != styles.end()) { + return si->second; + } + + hStyle hs = { Style::CreateCustomStyle(/*rememberForUndo=*/false) }; + Style *s = Style::Get(hs); + s->name = id; + s->visible = false; + + styles.emplace(id, hs); + return hs; + } + + hStyle styleFor(const DRW_Entity *e) { + // Color. + // TODO: which color to choose: index or RGB one? + int col = getColor(e); + RgbaColor c = RgbaColor::From(DRW::dxfColors[col][0], + DRW::dxfColors[col][1], + DRW::dxfColors[col][2]); + + // Line width. + DRW_LW_Conv::lineWidth lw = getLineWidth(e); + double width = DRW_LW_Conv::lineWidth2dxfInt(e->lWeight) / 100.0; + if(width < 0.0) width = 1.0; + + // Line stipple. + // TODO: Probably, we can load default autocad patterns and match it with ours. + std::string lineType = getLineType(e); + int stipple = Style::STIPPLE_CONTINUOUS; + for(int i = 0; i <= Style::LAST_STIPPLE; i++) { + if(lineType == DxfFileWriter::lineTypeName(i)) { + stipple = i; + break; + } + } + + // Text properties. + DRW_Text::HAlign alignH = DRW_Text::HLeft; + DRW_Text::VAlign alignV = DRW_Text::VBaseLine; + double textAngle = 0.0; + double textHeight = Style::DefaultTextHeight(); + + if(e->eType == DRW::TEXT || e->eType == DRW::MTEXT) { + const DRW_Text *text = static_cast(e); + alignH = text->alignH; + alignV = text->alignV; + textHeight = text->height; + textAngle = text->angle; + // I have no idea why, but works + if(alignH == DRW_Text::HMiddle) { + alignV = DRW_Text::VMiddle; + } + } + + // Unique identifier based on style properties. + std::string id = "@dxf"; + if(lw != DRW_LW_Conv::widthDefault) + id += ssprintf("-w%.4g", width); + if(lineType != "CONTINUOUS") + id += ssprintf("-%s", lineType.c_str()); + if(c.red != 0 || c.green != 0 || c.blue != 0) + id += ssprintf("-#%02x%02x%02x", c.red, c.green, c.blue); + if(textHeight != Style::DefaultTextHeight()) + id += ssprintf("-h%.4g", textHeight); + if(textAngle != 0.0) + id += ssprintf("-a%.5g", textAngle); + if(alignH != DRW_Text::HLeft) + id += ssprintf("-oh%d", alignH); + if(alignV != DRW_Text::VBaseLine) + id += ssprintf("-ov%d", alignV); + + auto si = styles.find(id); + if(si != styles.end()) { + return si->second; + } + + hStyle hs = { Style::CreateCustomStyle(/*rememberForUndo=*/false) }; + Style *s = Style::Get(hs); + if(lw != DRW_LW_Conv::widthDefault) { + s->widthAs = Style::UNITS_AS_MM; + s->width = width; + s->stippleScale = 1.0 + width * 2.0; + } + s->name = id; + s->stippleType = stipple; + if(c.red != 0 || c.green != 0 || c.blue != 0) s->color = c; + s->textHeightAs = Style::UNITS_AS_MM; + s->textHeight = textHeight; + s->textAngle = textAngle; + s->textOrigin = dxfAlignToOrigin(alignH, alignV); + + styles.emplace(id, hs); + return hs; + } + + void setStyle(hRequest hr, hStyle hs) { + Request *r = SK.GetRequest(hr); + r->style = hs; + } + + struct VectorHash { + size_t operator()(const Vector &v) const { + static const size_t size = std::numeric_limits::max() / 2 - 1; + static const double eps = (4.0 * LENGTH_EPS); + + double x = fabs(v.x) / eps; + double y = fabs(v.y) / eps; + + size_t xs = size_t(fmod(x, double(size))); + size_t ys = size_t(fmod(y, double(size))); + + return ys * size + xs; + } + }; + + struct VectorPred { + bool operator()(Vector a, Vector b) const { + return a.Equals(b, LENGTH_EPS); + } + }; + + std::unordered_map points; + + void processPoint(hEntity he, bool constrain = true) { + Entity *e = SK.GetEntity(he); + Vector pos = e->PointGetNum(); + hEntity p = findPoint(pos); + if(p.v == he.v) return; + if(p.v != Entity::NO_ENTITY.v) { + if(constrain) { + Constraint::ConstrainCoincident(he, p); + } + // We don't add point because we already + // have point in this position + return; + } + points.emplace(pos, he); + } + + hEntity findPoint(const Vector &p) { + auto it = points.find(p); + if(it == points.end()) return Entity::NO_ENTITY; + return it->second; + } + + hEntity createOrGetPoint(const Vector &p) { + hEntity he = findPoint(p); + if(he.v != Entity::NO_ENTITY.v) return he; + + hRequest hr = SS.GW.AddRequest(Request::DATUM_POINT, false); + he = hr.entity(0); + SK.GetEntity(he)->PointForceTo(p); + points.emplace(p, he); + return he; + } + + hEntity createLine(Vector p0, Vector p1, uint32_t style, bool constrainHV = false) { + if(p0.Equals(p1)) return Entity::NO_ENTITY; + hRequest hr = SS.GW.AddRequest(Request::LINE_SEGMENT, false); + SK.GetEntity(hr.entity(1))->PointForceTo(p0); + SK.GetEntity(hr.entity(2))->PointForceTo(p1); + processPoint(hr.entity(1)); + processPoint(hr.entity(2)); + + if(constrainHV) { + int cType = -1; + if(fabs(p0.x - p1.x) < LENGTH_EPS) { + cType = Constraint::VERTICAL; + } + else if(fabs(p0.y - p1.y) < LENGTH_EPS) { + cType = Constraint::HORIZONTAL; + } + if(cType != -1) { + Constraint::Constrain( + cType, + Entity::NO_ENTITY, + Entity::NO_ENTITY, + hr.entity(0) + ); + } + } + + if(style != 0) { + Request *r = SK.GetRequest(hr); + r->style = hStyle{ style }; + } + return hr.entity(0); + } + + hEntity createCircle(const Vector &c, double r, uint32_t style) { + hRequest hr = SS.GW.AddRequest(Request::CIRCLE, false); + SK.GetEntity(hr.entity(1))->PointForceTo(c); + processPoint(hr.entity(1)); + SK.GetEntity(hr.entity(64))->DistanceForceTo(r); + if(style != 0) { + Request *r = SK.GetRequest(hr); + r->style = hStyle{ style }; + } + return hr.entity(0); + } + + virtual void addLayer(const DRW_Layer &data) { + layers.emplace(data.name, data); + } + + virtual void addBlock(const DRW_Block &data) { + readBlock = &blocks[data.name]; + readBlock->data = data; + } + + virtual void endBlock() { + readBlock = NULL; + } + + virtual void addPoint(const DRW_Point &data) { + if(data.space != DRW::ModelSpace) return; + if(addPendingBlockEntity(data)) return; + + hRequest hr = SS.GW.AddRequest(Request::DATUM_POINT, false); + SK.GetEntity(hr.entity(0))->PointForceTo(toVector(data.basePoint)); + processPoint(hr.entity(0)); + } + + virtual void addLine(const DRW_Line &data) { + if(data.space != DRW::ModelSpace) return; + if(addPendingBlockEntity(data)) return; + + createLine(toVector(data.basePoint), toVector(data.secPoint), styleFor(&data).v, true); + } + + virtual void addArc(const DRW_Arc &data) { + if(data.space != DRW::ModelSpace) return; + if(addPendingBlockEntity(data)) return; + + hRequest hr = SS.GW.AddRequest(Request::ARC_OF_CIRCLE, false); + double r = data.radious; + double sa = data.staangle; + double ea = data.endangle; + Vector c = Vector::From(data.basePoint.x, data.basePoint.y, 0.0); + Vector rvs = Vector::From(r * cos(sa), r * sin(sa), data.basePoint.z).Plus(c); + Vector rve = Vector::From(r * cos(ea), r * sin(ea), data.basePoint.z).Plus(c); + + if(data.extPoint.z == -1.0) { + c.x = -c.x; + rvs.x = - rvs.x; + rve.x = - rve.x; + std::swap(rvs, rve); + } + + blockTransformArc(&c, &rvs, &rve); + + SK.GetEntity(hr.entity(1))->PointForceTo(c); + SK.GetEntity(hr.entity(2))->PointForceTo(rvs); + SK.GetEntity(hr.entity(3))->PointForceTo(rve); + processPoint(hr.entity(1)); + processPoint(hr.entity(2)); + processPoint(hr.entity(3)); + setStyle(hr, styleFor(&data)); + } + + virtual void addCircle(const DRW_Circle &data) { + if(data.space != DRW::ModelSpace) return; + if(addPendingBlockEntity(data)) return; + + createCircle(toVector(data.basePoint), data.radious, styleFor(&data).v); + } + + virtual void addLWPolyline(const DRW_LWPolyline &data) { + if(data.space != DRW::ModelSpace) return; + if(addPendingBlockEntity(data)) return; + + size_t vNum = data.vertlist.size(); + + // Check for closed polyline. + if((data.flags & 1) != 1) vNum--; + + // Correct coordinate system for the case where z=-1, as described in + // http://paulbourke.net/dataformats/dxf/dxf10.html. + bool needSwapX = data.extPoint.z == -1.0; + + for(size_t i = 0; i < vNum; i++) { + DRW_Vertex2D c0 = *data.vertlist[i]; + DRW_Vertex2D c1 = *data.vertlist[(i + 1) % data.vertlist.size()]; + + if(needSwapX) { + c0.x = -c0.x; + c1.x = -c1.x; + c0.bulge = -c0.bulge; + } + + Vector p0 = Vector::From(c0.x, c0.y, 0.0); + Vector p1 = Vector::From(c1.x, c1.y, 0.0); + hStyle hs = styleFor(&data); + + if(EXACT(data.vertlist[i]->bulge == 0.0)) { + createLine(blockTransform(p0), blockTransform(p1), hs.v, true); + } else { + hRequest hr = createBulge(p0, p1, c0.bulge); + setStyle(hr, hs); + } + } + } + + virtual void addPolyline(const DRW_Polyline &data) { + if(data.space != DRW::ModelSpace) return; + if(addPendingBlockEntity(data)) return; + + int vNum = data.vertlist.size(); + + // Check for closed polyline. + if((data.flags & 1) != 1) vNum--; + + // Correct coordinate system for the case where z=-1, as described in + // http://paulbourke.net/dataformats/dxf/dxf10.html. + bool needSwapX = data.extPoint.z == -1.0; + + for(int i = 0; i < vNum; i++) { + DRW_Coord c0 = data.vertlist[i]->basePoint; + DRW_Coord c1 = data.vertlist[(i + 1) % data.vertlist.size()]->basePoint; + + double bulge = data.vertlist[i]->bulge; + if(needSwapX) { + c0.x = -c0.x; + c1.x = -c1.x; + bulge = -bulge; + } + + Vector p0 = Vector::From(c0.x, c0.y, 0.0); + Vector p1 = Vector::From(c1.x, c1.y, 0.0); + hStyle hs = styleFor(&data); + + if(EXACT(bulge == 0.0)) { + createLine(blockTransform(p0), blockTransform(p1), hs.v, true); + } else { + hRequest hr = createBulge(p0, p1, bulge); + setStyle(hr, hs); + } + } + } + + virtual void addSpline(const DRW_Spline *data) { + if(data->space != DRW::ModelSpace) return; + if(data->degree != 3) return; + if(addPendingBlockEntity(*data)) return; + + hRequest hr = SS.GW.AddRequest(Request::CUBIC, false); + for(int i = 0; i < 4; i++) { + SK.GetEntity(hr.entity(i + 1))->PointForceTo(toVector(*data->controllist[i])); + processPoint(hr.entity(i + 1)); + } + setStyle(hr, styleFor(data)); + } + + virtual void addInsert(const DRW_Insert &data) { + if(data.space != DRW::ModelSpace) return; + if(addPendingBlockEntity(data)) return; + + auto bi = blocks.find(data.name); + if(bi == blocks.end()) oops(); + Block *block = &bi->second; + + // Push transform. + Vector x = blockX; + Vector y = blockY; + Vector t = blockT; + + const DRW_Insert *oldInsert = insertInsert; + insertInsert = &data; + + if(data.extPoint.z == -1.0) invertXTransform(); + multBlockTransform(data.basePoint.x, data.basePoint.y, data.xscale, data.yscale, data.angle); + for(auto &e : block->entities) { + addEntity(&*e); + } + + insertInsert = oldInsert; + + // Pop transform. + blockX = x; + blockY = y; + blockT = t; + } + + virtual void addMText(const DRW_MText &data) { + if(data.space != DRW::ModelSpace) return; + if(addPendingBlockEntity(data)) return; + + DRW_MText text = data; + text.secPoint = text.basePoint; + addText(text); + } + + virtual void addText(const DRW_Text &data) { + if(data.space != DRW::ModelSpace) return; + if(addPendingBlockEntity(data)) return; + + Constraint c = {}; + c.group = SS.GW.activeGroup; + c.workplane = SS.GW.ActiveWorkplane(); + c.type = Constraint::COMMENT; + if(data.alignH == DRW_Text::HLeft && data.alignV == DRW_Text::VBaseLine) { + c.disp.offset = toVector(data.basePoint); + } else { + c.disp.offset = toVector(data.secPoint); + } + c.comment = data.text; + c.disp.style = styleFor(&data); + Constraint::AddConstraint(&c, false); + } + + virtual void addDimAlign(const DRW_DimAligned *data) { + if(data->space != DRW::ModelSpace) return; + if(addPendingBlockEntity(*data)) return; + + Vector p0 = toVector(data->getDef1Point()); + Vector p1 = toVector(data->getDef2Point()); + Vector p2 = toVector(data->getTextPoint()); + hConstraint hc = Constraint::Constrain( + Constraint::PT_PT_DISTANCE, + createOrGetPoint(p0), + createOrGetPoint(p1), + Entity::NO_ENTITY + ); + + Constraint *c = SK.GetConstraint(hc); + if(data->hasActualMeasurement()) { + c->valA = data->getActualMeasurement(); + } else { + c->ModifyToSatisfy(); + } + c->disp.offset = p2.Minus(p0.Plus(p1).ScaledBy(0.5)); + } + + virtual void addDimLinear(const DRW_DimLinear *data) { + if(data->space != DRW::ModelSpace) return; + if(addPendingBlockEntity(*data)) return; + + Vector p0 = toVector(data->getDef1Point(), false); + Vector p1 = toVector(data->getDef2Point(), false); + Vector p2 = toVector(data->getTextPoint(), false); + + double angle = data->getAngle() * PI / 180.0; + Vector dir = Vector::From(cos(angle), sin(angle), 0.0); + Vector p3 = p1.Minus(p1.ClosestPointOnLine(p2, dir)).Plus(p1); + if(p1.Minus(p3).Magnitude() < LENGTH_EPS) { + p3 = p0.Minus(p0.ClosestPointOnLine(p2, dir)).Plus(p1); + } + + Vector p4 = p0.ClosestPointOnLine(p1, p3.Minus(p1)).Plus(p0).ScaledBy(0.5); + + p0 = blockTransform(p0); + p1 = blockTransform(p1); + p2 = blockTransform(p2); + p3 = blockTransform(p3); + p4 = blockTransform(p4); + + hConstraint hc = Constraint::Constrain( + Constraint::PT_LINE_DISTANCE, + createOrGetPoint(p0), + Entity::NO_ENTITY, + createLine(p1, p3, invisibleStyle().v) + ); + + Constraint *c = SK.GetConstraint(hc); + if(data->hasActualMeasurement()) { + c->valA = data->getActualMeasurement(); + } else { + c->ModifyToSatisfy(); + } + c->disp.offset = p2.Minus(p4); + } + + virtual void addDimAngular(const DRW_DimAngular *data) { + if(data->space != DRW::ModelSpace) return; + if(addPendingBlockEntity(*data)) return; + + Vector l0p0 = toVector(data->getFirstLine1()); + Vector l0p1 = toVector(data->getFirstLine2()); + Vector l1p0 = toVector(data->getSecondLine1()); + Vector l1p1 = toVector(data->getSecondLine2()); + + hConstraint hc = Constraint::Constrain( + Constraint::ANGLE, + Entity::NO_ENTITY, + Entity::NO_ENTITY, + createLine(l0p0, l0p1, invisibleStyle().v), + createLine(l1p1, l1p0, invisibleStyle().v), + /*other=*/false, + /*other2=*/false + ); + + Constraint *c = SK.GetConstraint(hc); + c->ModifyToSatisfy(); + if(data->hasActualMeasurement()) { + double actual = data->getActualMeasurement() / PI * 180.0; + if(fabs(180.0 - actual - c->valA) < fabs(actual - c->valA)) { + c->other = true; + } + c->valA = actual; + } + + bool skew = false; + Vector pi = Vector::AtIntersectionOfLines(l0p0, l0p1, l1p0, l1p1, &skew); + if(!skew) { + c->disp.offset = toVector(data->getTextPoint()).Minus(pi); + } + } + + hConstraint createDiametric(Vector cp, double r, Vector tp, double actual, bool asRadius = false) { + hEntity he = createCircle(cp, r, invisibleStyle().v); + + hConstraint hc = Constraint::Constrain( + Constraint::DIAMETER, + Entity::NO_ENTITY, + Entity::NO_ENTITY, + he + ); + + Constraint *c = SK.GetConstraint(hc); + if(actual > 0.0) { + c->valA = asRadius ? actual * 2.0 : actual; + } else { + c->ModifyToSatisfy(); + } + c->disp.offset = tp.Minus(cp); + if(asRadius) c->other = true; + return hc; + } + + virtual void addDimRadial(const DRW_DimRadial *data) { + if(data->space != DRW::ModelSpace) return; + if(addPendingBlockEntity(*data)) return; + + Vector cp = toVector(data->getCenterPoint()); + Vector dp = toVector(data->getDiameterPoint()); + Vector tp = toVector(data->getTextPoint()); + double actual = -1.0; + if(data->hasActualMeasurement()) { + actual = data->getActualMeasurement(); + } + + createDiametric(cp, cp.Minus(dp).Magnitude(), tp, actual, /*asRadius=*/true); + } + + virtual void addDimDiametric(const DRW_DimDiametric *data) { + if(data->space != DRW::ModelSpace) return; + if(addPendingBlockEntity(*data)) return; + + Vector dp1 = toVector(data->getDiameter1Point()); + Vector dp2 = toVector(data->getDiameter2Point()); + + Vector cp = dp1.Plus(dp2).ScaledBy(0.5); + Vector tp = toVector(data->getTextPoint()); + double actual = -1.0; + if(data->hasActualMeasurement()) { + actual = data->getActualMeasurement(); + } + + createDiametric(cp, cp.Minus(dp1).Magnitude(), tp, actual, /*asRadius=*/false); + } + + virtual void addDimAngular3P(const DRW_DimAngular3p *data) { + if(data->space != DRW::ModelSpace) return; + if(addPendingBlockEntity(*data)) return; + + DRW_DimAngular dim = *static_cast(data); + dim.setFirstLine1(data->getVertexPoint()); + dim.setFirstLine2(data->getFirstLine()); + dim.setSecondLine1(data->getVertexPoint()); + dim.setSecondLine2(data->getSecondLine()); + addDimAngular(&dim); + } +}; + +void ImportDxf(const std::string &filename) { + SS.UndoRemember(); + dxfRW dxf(filename.c_str()); + DxfReadInterface interface; + interface.clearBlockTransform(); + if(!dxf.read(&interface, false)) { + Error("Corrupted DXF file!"); + } + if(interface.unknownEntities > 0) { + Message(ssprintf("%u DXF entities of unknown type were ignored.", + interface.unknownEntities).c_str()); + } +} + +void ImportDwg(const std::string &filename) { + SS.UndoRemember(); + dwgR dwg(filename.c_str()); + DxfReadInterface interface; + interface.clearBlockTransform(); + if(!dwg.read(&interface, false)) { + Error("Corrupted DWG file!"); + } + if(interface.unknownEntities > 0) { + Message(ssprintf("%u DWG entities of unknown type were ignored.", + interface.unknownEntities).c_str()); + } +} + +} diff --git a/src/lib.cpp b/src/lib.cpp new file mode 100644 index 0000000..d87a4f0 --- /dev/null +++ b/src/lib.cpp @@ -0,0 +1,263 @@ +//----------------------------------------------------------------------------- +// A library wrapper around SolveSpace, to permit someone to use its constraint +// solver without coupling their program too much to SolveSpace's internals. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" +#define EXPORT_DLL +#include + +Sketch SolveSpace::SK = {}; +static System SYS; + +static int IsInit = 0; + +void Group::GenerateEquations(IdList *) { + // Nothing to do for now. +} + +void SolveSpace::CnfFreezeInt(uint32_t, const std::string &) +{ + abort(); +} + +uint32_t SolveSpace::CnfThawInt(uint32_t, const std::string &) +{ + abort(); + return 0; +} + +void SolveSpace::DoMessageBox(const char *, int, int, bool) +{ + abort(); +} + +extern "C" { + +void Slvs_QuaternionU(double qw, double qx, double qy, double qz, + double *x, double *y, double *z) +{ + Quaternion q = Quaternion::From(qw, qx, qy, qz); + Vector v = q.RotationU(); + *x = v.x; + *y = v.y; + *z = v.z; +} + +void Slvs_QuaternionV(double qw, double qx, double qy, double qz, + double *x, double *y, double *z) +{ + Quaternion q = Quaternion::From(qw, qx, qy, qz); + Vector v = q.RotationV(); + *x = v.x; + *y = v.y; + *z = v.z; +} + +void Slvs_QuaternionN(double qw, double qx, double qy, double qz, + double *x, double *y, double *z) +{ + Quaternion q = Quaternion::From(qw, qx, qy, qz); + Vector v = q.RotationN(); + *x = v.x; + *y = v.y; + *z = v.z; +} + +void Slvs_MakeQuaternion(double ux, double uy, double uz, + double vx, double vy, double vz, + double *qw, double *qx, double *qy, double *qz) +{ + Vector u = Vector::From(ux, uy, uz), + v = Vector::From(vx, vy, vz); + Quaternion q = Quaternion::From(u, v); + *qw = q.w; + *qx = q.vx; + *qy = q.vy; + *qz = q.vz; +} + +void Slvs_Solve(Slvs_System *ssys, Slvs_hGroup shg) +{ + if(!IsInit) { + InitHeaps(); + IsInit = 1; + } + + int i; + for(i = 0; i < ssys->params; i++) { + Slvs_Param *sp = &(ssys->param[i]); + Param p = {}; + + p.h.v = sp->h; + p.val = sp->val; + SK.param.Add(&p); + if(sp->group == shg) { + SYS.param.Add(&p); + } + } + + for(i = 0; i < ssys->entities; i++) { + Slvs_Entity *se = &(ssys->entity[i]); + EntityBase e = {}; + + switch(se->type) { +case SLVS_E_POINT_IN_3D: e.type = Entity::POINT_IN_3D; break; +case SLVS_E_POINT_IN_2D: e.type = Entity::POINT_IN_2D; break; +case SLVS_E_NORMAL_IN_3D: e.type = Entity::NORMAL_IN_3D; break; +case SLVS_E_NORMAL_IN_2D: e.type = Entity::NORMAL_IN_2D; break; +case SLVS_E_DISTANCE: e.type = Entity::DISTANCE; break; +case SLVS_E_WORKPLANE: e.type = Entity::WORKPLANE; break; +case SLVS_E_LINE_SEGMENT: e.type = Entity::LINE_SEGMENT; break; +case SLVS_E_CUBIC: e.type = Entity::CUBIC; break; +case SLVS_E_CIRCLE: e.type = Entity::CIRCLE; break; +case SLVS_E_ARC_OF_CIRCLE: e.type = Entity::ARC_OF_CIRCLE; break; + +default: dbp("bad entity type %d", se->type); return; + } + e.h.v = se->h; + e.group.v = se->group; + e.workplane.v = se->wrkpl; + e.point[0].v = se->point[0]; + e.point[1].v = se->point[1]; + e.point[2].v = se->point[2]; + e.point[3].v = se->point[3]; + e.normal.v = se->normal; + e.distance.v = se->distance; + e.param[0].v = se->param[0]; + e.param[1].v = se->param[1]; + e.param[2].v = se->param[2]; + e.param[3].v = se->param[3]; + + SK.entity.Add(&e); + } + + for(i = 0; i < ssys->constraints; i++) { + Slvs_Constraint *sc = &(ssys->constraint[i]); + ConstraintBase c = {}; + + int t; + switch(sc->type) { +case SLVS_C_POINTS_COINCIDENT: t = Constraint::POINTS_COINCIDENT; break; +case SLVS_C_PT_PT_DISTANCE: t = Constraint::PT_PT_DISTANCE; break; +case SLVS_C_PT_PLANE_DISTANCE: t = Constraint::PT_PLANE_DISTANCE; break; +case SLVS_C_PT_LINE_DISTANCE: t = Constraint::PT_LINE_DISTANCE; break; +case SLVS_C_PT_FACE_DISTANCE: t = Constraint::PT_FACE_DISTANCE; break; +case SLVS_C_PT_IN_PLANE: t = Constraint::PT_IN_PLANE; break; +case SLVS_C_PT_ON_LINE: t = Constraint::PT_ON_LINE; break; +case SLVS_C_PT_ON_FACE: t = Constraint::PT_ON_FACE; break; +case SLVS_C_EQUAL_LENGTH_LINES: t = Constraint::EQUAL_LENGTH_LINES; break; +case SLVS_C_LENGTH_RATIO: t = Constraint::LENGTH_RATIO; break; +case SLVS_C_EQ_LEN_PT_LINE_D: t = Constraint::EQ_LEN_PT_LINE_D; break; +case SLVS_C_EQ_PT_LN_DISTANCES: t = Constraint::EQ_PT_LN_DISTANCES; break; +case SLVS_C_EQUAL_ANGLE: t = Constraint::EQUAL_ANGLE; break; +case SLVS_C_EQUAL_LINE_ARC_LEN: t = Constraint::EQUAL_LINE_ARC_LEN; break; +case SLVS_C_LENGTH_DIFFERENCE: t = Constraint::LENGTH_DIFFERENCE; break; +case SLVS_C_SYMMETRIC: t = Constraint::SYMMETRIC; break; +case SLVS_C_SYMMETRIC_HORIZ: t = Constraint::SYMMETRIC_HORIZ; break; +case SLVS_C_SYMMETRIC_VERT: t = Constraint::SYMMETRIC_VERT; break; +case SLVS_C_SYMMETRIC_LINE: t = Constraint::SYMMETRIC_LINE; break; +case SLVS_C_AT_MIDPOINT: t = Constraint::AT_MIDPOINT; break; +case SLVS_C_HORIZONTAL: t = Constraint::HORIZONTAL; break; +case SLVS_C_VERTICAL: t = Constraint::VERTICAL; break; +case SLVS_C_DIAMETER: t = Constraint::DIAMETER; break; +case SLVS_C_PT_ON_CIRCLE: t = Constraint::PT_ON_CIRCLE; break; +case SLVS_C_SAME_ORIENTATION: t = Constraint::SAME_ORIENTATION; break; +case SLVS_C_ANGLE: t = Constraint::ANGLE; break; +case SLVS_C_PARALLEL: t = Constraint::PARALLEL; break; +case SLVS_C_PERPENDICULAR: t = Constraint::PERPENDICULAR; break; +case SLVS_C_ARC_LINE_TANGENT: t = Constraint::ARC_LINE_TANGENT; break; +case SLVS_C_CUBIC_LINE_TANGENT: t = Constraint::CUBIC_LINE_TANGENT; break; +case SLVS_C_EQUAL_RADIUS: t = Constraint::EQUAL_RADIUS; break; +case SLVS_C_PROJ_PT_DISTANCE: t = Constraint::PROJ_PT_DISTANCE; break; +case SLVS_C_WHERE_DRAGGED: t = Constraint::WHERE_DRAGGED; break; +case SLVS_C_CURVE_CURVE_TANGENT:t = Constraint::CURVE_CURVE_TANGENT; break; + +default: dbp("bad constraint type %d", sc->type); return; + } + + c.type = t; + + c.h.v = sc->h; + c.group.v = sc->group; + c.workplane.v = sc->wrkpl; + c.valA = sc->valA; + c.ptA.v = sc->ptA; + c.ptB.v = sc->ptB; + c.entityA.v = sc->entityA; + c.entityB.v = sc->entityB; + c.entityC.v = sc->entityC; + c.entityD.v = sc->entityD; + c.other = (sc->other) ? true : false; + c.other2 = (sc->other2) ? true : false; + + SK.constraint.Add(&c); + } + + for(i = 0; i < (int)arraylen(ssys->dragged); i++) { + if(ssys->dragged[i]) { + hParam hp = { ssys->dragged[i] }; + SYS.dragged.Add(&hp); + } + } + + Group g = {}; + g.h.v = shg; + + List bad = {}; + + // Now we're finally ready to solve! + bool andFindBad = ssys->calculateFaileds ? true : false; + int how = SYS.Solve(&g, &(ssys->dof), &bad, andFindBad, false); + + switch(how) { + case System::SOLVED_OKAY: + ssys->result = SLVS_RESULT_OKAY; + break; + + case System::DIDNT_CONVERGE: + ssys->result = SLVS_RESULT_DIDNT_CONVERGE; + break; + + case System::REDUNDANT_DIDNT_CONVERGE: + case System::REDUNDANT_OKAY: + ssys->result = SLVS_RESULT_INCONSISTENT; + break; + + case System::TOO_MANY_UNKNOWNS: + ssys->result = SLVS_RESULT_TOO_MANY_UNKNOWNS; + break; + + default: oops(); + } + + // Write the new parameter values back to our caller. + for(i = 0; i < ssys->params; i++) { + Slvs_Param *sp = &(ssys->param[i]); + hParam hp = { sp->h }; + sp->val = SK.GetParam(hp)->val; + } + + if(ssys->failed) { + // Copy over any the list of problematic constraints. + for(i = 0; i < ssys->faileds && i < bad.n; i++) { + ssys->failed[i] = bad.elem[i].v; + } + ssys->faileds = bad.n; + } + + bad.Clear(); + SYS.param.Clear(); + SYS.entity.Clear(); + SYS.eq.Clear(); + SYS.dragged.Clear(); + + SK.param.Clear(); + SK.entity.Clear(); + SK.constraint.Clear(); + + FreeAllTemporary(); +} + +} /* extern "C" */ diff --git a/src/mesh.cpp b/src/mesh.cpp new file mode 100644 index 0000000..4fec2b4 --- /dev/null +++ b/src/mesh.cpp @@ -0,0 +1,1073 @@ +//----------------------------------------------------------------------------- +// Operations on triangle meshes, like our mesh Booleans using the BSP, and +// the stuff to check for watertightness. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +#include + +void SMesh::Clear(void) { + l.Clear(); +} + +void SMesh::AddTriangle(STriMeta meta, Vector n, Vector a, Vector b, Vector c) { + Vector ab = b.Minus(a), bc = c.Minus(b); + Vector np = ab.Cross(bc); + if(np.Magnitude() < 1e-10) { + // ugh; gl sometimes tesselates to collinear triangles + return; + } + if(np.Dot(n) > 0) { + AddTriangle(meta, a, b, c); + } else { + AddTriangle(meta, c, b, a); + } +} +void SMesh::AddTriangle(STriMeta meta, Vector a, Vector b, Vector c) { + STriangle t = {}; + t.meta = meta; + t.a = a; + t.b = b; + t.c = c; + AddTriangle(&t); +} +void SMesh::AddTriangle(STriangle *st) { + if(st->meta.color.alpha != 255) isTransparent = true; + l.Add(st); +} + +void SMesh::DoBounding(Vector v, Vector *vmax, Vector *vmin) { + vmax->x = max(vmax->x, v.x); + vmax->y = max(vmax->y, v.y); + vmax->z = max(vmax->z, v.z); + + vmin->x = min(vmin->x, v.x); + vmin->y = min(vmin->y, v.y); + vmin->z = min(vmin->z, v.z); +} +void SMesh::GetBounding(Vector *vmax, Vector *vmin) { + int i; + *vmin = Vector::From( 1e12, 1e12, 1e12); + *vmax = Vector::From(-1e12, -1e12, -1e12); + for(i = 0; i < l.n; i++) { + STriangle *st = &(l.elem[i]); + DoBounding(st->a, vmax, vmin); + DoBounding(st->b, vmax, vmin); + DoBounding(st->c, vmax, vmin); + } +} + +//---------------------------------------------------------------------------- +// Report the edges of the boundary of the region(s) of our mesh that lie +// within the plane n dot p = d. +//---------------------------------------------------------------------------- +void SMesh::MakeEdgesInPlaneInto(SEdgeList *sel, Vector n, double d) { + SMesh m = {}; + m.MakeFromCopyOf(this); + + // Delete all triangles in the mesh that do not lie in our export plane. + m.l.ClearTags(); + int i; + for(i = 0; i < m.l.n; i++) { + STriangle *tr = &(m.l.elem[i]); + + if((fabs(n.Dot(tr->a) - d) >= LENGTH_EPS) || + (fabs(n.Dot(tr->b) - d) >= LENGTH_EPS) || + (fabs(n.Dot(tr->c) - d) >= LENGTH_EPS)) + { + tr->tag = 1; + } + } + m.l.RemoveTagged(); + + // Select the naked edges in our resulting open mesh. + SKdNode *root = SKdNode::From(&m); + root->SnapToMesh(&m); + root->MakeCertainEdgesInto(sel, SKdNode::NAKED_OR_SELF_INTER_EDGES, + false, NULL, NULL); + + m.Clear(); +} + +void SMesh::MakeCertainEdgesAndOutlinesInto(SEdgeList *sel, SOutlineList *sol, int type) { + SKdNode *root = SKdNode::From(this); + root->MakeCertainEdgesInto(sel, type, false, NULL, NULL); + root->MakeOutlinesInto(sol); +} + +//----------------------------------------------------------------------------- +// When we are called, all of the triangles from l.elem[start] to the end must +// be coplanar. So we try to find a set of fewer triangles that covers the +// exact same area, in order to reduce the number of triangles in the mesh. +// We use this after a triangle has been split against the BSP. +// +// This is really ugly code; basically it just pastes things together to +// form convex polygons, merging collinear edges when possible, then +// triangulates the convex poly. +//----------------------------------------------------------------------------- +void SMesh::Simplify(int start) { + int maxTriangles = (l.n - start) + 10; + + STriMeta meta = l.elem[start].meta; + + STriangle *tout = (STriangle *)AllocTemporary(maxTriangles*sizeof(*tout)); + int toutc = 0; + + Vector n = Vector::From(0, 0, 0); + Vector *conv = (Vector *)AllocTemporary(maxTriangles*3*sizeof(*conv)); + int convc = 0; + + int start0 = start; + + int i, j; + for(i = start; i < l.n; i++) { + STriangle *tr = &(l.elem[i]); + if(tr->MinAltitude() < LENGTH_EPS) { + tr->tag = 1; + } else { + tr->tag = 0; + } + } + + for(;;) { + bool didAdd; + convc = 0; + for(i = start; i < l.n; i++) { + STriangle *tr = &(l.elem[i]); + if(tr->tag) continue; + + tr->tag = 1; + n = (tr->Normal()).WithMagnitude(1); + conv[convc++] = tr->a; + conv[convc++] = tr->b; + conv[convc++] = tr->c; + + start = i+1; + break; + } + if(i >= l.n) break; + + do { + didAdd = false; + + for(j = 0; j < convc; j++) { + Vector a = conv[WRAP((j-1), convc)], + b = conv[j], + d = conv[WRAP((j+1), convc)], + e = conv[WRAP((j+2), convc)]; + + Vector c; + for(i = start; i < l.n; i++) { + STriangle *tr = &(l.elem[i]); + if(tr->tag) continue; + + if((tr->a).Equals(d) && (tr->b).Equals(b)) { + c = tr->c; + } else if((tr->b).Equals(d) && (tr->c).Equals(b)) { + c = tr->a; + } else if((tr->c).Equals(d) && (tr->a).Equals(b)) { + c = tr->b; + } else { + continue; + } + // The vertex at C must be convex; but the others must + // be tested + Vector ab = b.Minus(a); + Vector bc = c.Minus(b); + Vector cd = d.Minus(c); + Vector de = e.Minus(d); + + double bDot = (ab.Cross(bc)).Dot(n); + double dDot = (cd.Cross(de)).Dot(n); + + bDot /= min(ab.Magnitude(), bc.Magnitude()); + dDot /= min(cd.Magnitude(), de.Magnitude()); + + if(fabs(bDot) < LENGTH_EPS && fabs(dDot) < LENGTH_EPS) { + conv[WRAP((j+1), convc)] = c; + // and remove the vertex at j, which is a dup + memmove(conv+j, conv+j+1, + (convc - j - 1)*sizeof(conv[0])); + convc--; + } else if(fabs(bDot) < LENGTH_EPS && dDot > 0) { + conv[j] = c; + } else if(fabs(dDot) < LENGTH_EPS && bDot > 0) { + conv[WRAP((j+1), convc)] = c; + } else if(bDot > 0 && dDot > 0) { + // conv[j] is unchanged, conv[j+1] goes to [j+2] + memmove(conv+j+2, conv+j+1, + (convc - j - 1)*sizeof(conv[0])); + conv[j+1] = c; + convc++; + } else { + continue; + } + + didAdd = true; + tr->tag = 1; + break; + } + } + } while(didAdd); + + // I need to debug why this is required; sometimes the above code + // still generates a convex polygon + for(i = 0; i < convc; i++) { + Vector a = conv[WRAP((i-1), convc)], + b = conv[i], + c = conv[WRAP((i+1), convc)]; + Vector ab = b.Minus(a); + Vector bc = c.Minus(b); + double bDot = (ab.Cross(bc)).Dot(n); + bDot /= min(ab.Magnitude(), bc.Magnitude()); + + if(bDot < 0) return; // XXX, shouldn't happen + } + + for(i = 0; i < convc - 2; i++) { + STriangle tr = STriangle::From(meta, conv[0], conv[i+1], conv[i+2]); + if(tr.MinAltitude() > LENGTH_EPS) { + tout[toutc++] = tr; + } + } + } + + l.n = start0; + for(i = 0; i < toutc; i++) { + AddTriangle(&(tout[i])); + } + FreeTemporary(tout); + FreeTemporary(conv); +} + +void SMesh::AddAgainstBsp(SMesh *srcm, SBsp3 *bsp3) { + int i; + + for(i = 0; i < srcm->l.n; i++) { + STriangle *st = &(srcm->l.elem[i]); + int pn = l.n; + atLeastOneDiscarded = false; + SBsp3::InsertOrCreate(bsp3, st, this); + if(!atLeastOneDiscarded && (l.n != (pn+1))) { + l.n = pn; + if(flipNormal) { + AddTriangle(st->meta, st->c, st->b, st->a); + } else { + AddTriangle(st->meta, st->a, st->b, st->c); + } + } + if(l.n - pn > 1) { + Simplify(pn); + } + } +} + +void SMesh::MakeFromUnionOf(SMesh *a, SMesh *b) { + SBsp3 *bspa = SBsp3::FromMesh(a); + SBsp3 *bspb = SBsp3::FromMesh(b); + + flipNormal = false; + keepCoplanar = false; + AddAgainstBsp(b, bspa); + + flipNormal = false; + keepCoplanar = true; + AddAgainstBsp(a, bspb); +} + +void SMesh::MakeFromDifferenceOf(SMesh *a, SMesh *b) { + SBsp3 *bspa = SBsp3::FromMesh(a); + SBsp3 *bspb = SBsp3::FromMesh(b); + + flipNormal = true; + keepCoplanar = true; + AddAgainstBsp(b, bspa); + + flipNormal = false; + keepCoplanar = false; + AddAgainstBsp(a, bspb); +} + +void SMesh::MakeFromCopyOf(SMesh *a) { + int i; + for(i = 0; i < a->l.n; i++) { + AddTriangle(&(a->l.elem[i])); + } +} + +void SMesh::MakeFromAssemblyOf(SMesh *a, SMesh *b) { + MakeFromCopyOf(a); + MakeFromCopyOf(b); +} + +void SMesh::MakeFromTransformationOf(SMesh *a, + Vector trans, Quaternion q, double scale) +{ + STriangle *tr; + for(tr = a->l.First(); tr; tr = a->l.NextAfter(tr)) { + STriangle tt = *tr; + tt.a = (tt.a).ScaledBy(scale); + tt.b = (tt.b).ScaledBy(scale); + tt.c = (tt.c).ScaledBy(scale); + if(scale < 0) { + // The mirroring would otherwise turn a closed mesh inside out. + swap(tt.a, tt.b); + } + tt.a = (q.Rotate(tt.a)).Plus(trans); + tt.b = (q.Rotate(tt.b)).Plus(trans); + tt.c = (q.Rotate(tt.c)).Plus(trans); + AddTriangle(&tt); + } +} + +bool SMesh::IsEmpty(void) { + return (l.n == 0); +} + +uint32_t SMesh::FirstIntersectionWith(Point2d mp) { + Vector p0 = Vector::From(mp.x, mp.y, 0); + Vector gn = Vector::From(0, 0, 1); + + double maxT = -1e12; + uint32_t face = 0; + + int i; + for(i = 0; i < l.n; i++) { + STriangle tr = l.elem[i]; + tr.a = SS.GW.ProjectPoint3(tr.a); + tr.b = SS.GW.ProjectPoint3(tr.b); + tr.c = SS.GW.ProjectPoint3(tr.c); + + Vector n = tr.Normal(); + + if(n.Dot(gn) < LENGTH_EPS) continue; // back-facing or on edge + + if(tr.ContainsPointProjd(gn, p0)) { + // Let our line have the form r(t) = p0 + gn*t + double t = -(n.Dot((tr.a).Minus(p0)))/(n.Dot(gn)); + if(t > maxT) { + maxT = t; + face = tr.meta.face; + } + } + } + return face; +} + +STriangleLl *STriangleLl::Alloc(void) + { return (STriangleLl *)AllocTemporary(sizeof(STriangleLl)); } +SKdNode *SKdNode::Alloc(void) + { return (SKdNode *)AllocTemporary(sizeof(SKdNode)); } + +SKdNode *SKdNode::From(SMesh *m) { + int i; + STriangle *tra = (STriangle *)AllocTemporary((m->l.n) * sizeof(*tra)); + + for(i = 0; i < m->l.n; i++) { + tra[i] = m->l.elem[i]; + } + + srand(0); + int n = m->l.n; + while(n > 1) { + int k = rand() % n; + n--; + swap(tra[k], tra[n]); + } + + STriangleLl *tll = NULL; + for(i = 0; i < m->l.n; i++) { + STriangleLl *tn = STriangleLl::Alloc(); + tn->tri = &(tra[i]); + tn->next = tll; + tll = tn; + } + + return SKdNode::From(tll); +} + +SKdNode *SKdNode::From(STriangleLl *tll) { + int which = 0; + SKdNode *ret = Alloc(); + + int i; + int gtc[3] = { 0, 0, 0 }, ltc[3] = { 0, 0, 0 }, allc = 0; + double badness[3] = { 0, 0, 0 }; + double split[3] = { 0, 0, 0 }; + + if(!tll) { + goto leaf; + } + + for(i = 0; i < 3; i++) { + int tcnt = 0; + STriangleLl *ll; + for(ll = tll; ll; ll = ll->next) { + split[i] += (ll->tri->a).Element(i); + split[i] += (ll->tri->b).Element(i); + split[i] += (ll->tri->c).Element(i); + tcnt++; + } + split[i] /= (tcnt*3); + + for(ll = tll; ll; ll = ll->next) { + STriangle *tr = ll->tri; + + double a = (tr->a).Element(i), + b = (tr->b).Element(i), + c = (tr->c).Element(i); + + if(a < split[i] + KDTREE_EPS || + b < split[i] + KDTREE_EPS || + c < split[i] + KDTREE_EPS) + { + ltc[i]++; + } + if(a > split[i] - KDTREE_EPS || + b > split[i] - KDTREE_EPS || + c > split[i] - KDTREE_EPS) + { + gtc[i]++; + } + if(i == 0) allc++; + } + badness[i] = pow((double)ltc[i], 4) + pow((double)gtc[i], 4); + } + if(badness[0] < badness[1] && badness[0] < badness[2]) { + which = 0; + } else if(badness[1] < badness[2]) { + which = 1; + } else { + which = 2; + } + + if(allc < 3 || allc == gtc[which] || allc == ltc[which]) { + goto leaf; + } + + STriangleLl *ll; + STriangleLl *lgt, *llt; lgt = llt = NULL; + for(ll = tll; ll; ll = ll->next) { + STriangle *tr = ll->tri; + + double a = (tr->a).Element(which), + b = (tr->b).Element(which), + c = (tr->c).Element(which); + + if(a < split[which] + KDTREE_EPS || + b < split[which] + KDTREE_EPS || + c < split[which] + KDTREE_EPS) + { + STriangleLl *n = STriangleLl::Alloc(); + *n = *ll; + n->next = llt; + llt = n; + } + if(a > split[which] - KDTREE_EPS || + b > split[which] - KDTREE_EPS || + c > split[which] - KDTREE_EPS) + { + STriangleLl *n = STriangleLl::Alloc(); + *n = *ll; + n->next = lgt; + lgt = n; + } + } + + ret->which = which; + ret->c = split[which]; + ret->gt = SKdNode::From(lgt); + ret->lt = SKdNode::From(llt); + return ret; + +leaf: + ret->tris = tll; + return ret; +} + +void SKdNode::ClearTags(void) { + if(gt && lt) { + gt->ClearTags(); + lt->ClearTags(); + } else { + STriangleLl *ll; + for(ll = tris; ll; ll = ll->next) { + ll->tri->tag = 0; + } + } +} + +void SKdNode::AddTriangle(STriangle *tr) { + if(gt && lt) { + double ta = (tr->a).Element(which), + tb = (tr->b).Element(which), + tc = (tr->c).Element(which); + if(ta < c + KDTREE_EPS || + tb < c + KDTREE_EPS || + tc < c + KDTREE_EPS) + { + lt->AddTriangle(tr); + } + if(ta > c - KDTREE_EPS || + tb > c - KDTREE_EPS || + tc > c - KDTREE_EPS) + { + gt->AddTriangle(tr); + } + } else { + STriangleLl *tn = STriangleLl::Alloc(); + tn->tri = tr; + tn->next = tris; + tris = tn; + } +} + +void SKdNode::MakeMeshInto(SMesh *m) { + if(gt) gt->MakeMeshInto(m); + if(lt) lt->MakeMeshInto(m); + + STriangleLl *ll; + for(ll = tris; ll; ll = ll->next) { + if(ll->tri->tag) continue; + + m->AddTriangle(ll->tri); + ll->tri->tag = 1; + } +} + +void SKdNode::ListTrianglesInto(std::vector *tl) { + if(gt) gt->ListTrianglesInto(tl); + if(lt) lt->ListTrianglesInto(tl); + + STriangleLl *ll; + for(ll = tris; ll; ll = ll->next) { + if(ll->tri->tag) continue; + + tl->push_back(ll->tri); + ll->tri->tag = 1; + } +} + +//----------------------------------------------------------------------------- +// If any triangles in the mesh have an edge that goes through v (but not +// a vertex at v), then split those triangles so that they now have a vertex +// there. The existing triangle is modified, and the new triangle appears +// in extras. +//----------------------------------------------------------------------------- +void SKdNode::SnapToVertex(Vector v, SMesh *extras) { + if(gt && lt) { + double vc = v.Element(which); + if(vc < c + KDTREE_EPS) { + lt->SnapToVertex(v, extras); + } + if(vc > c - KDTREE_EPS) { + gt->SnapToVertex(v, extras); + } + // Nothing bad happens if the triangle to be split appears in both + // branches; the first call will split the triangle, so that the + // second call will do nothing, because the modified triangle will + // already contain v + } else { + STriangleLl *ll; + for(ll = tris; ll; ll = ll->next) { + STriangle *tr = ll->tri; + + // Do a cheap bbox test first + int k; + bool mightHit = true; + + for(k = 0; k < 3; k++) { + if((tr->a).Element(k) < v.Element(k) - KDTREE_EPS && + (tr->b).Element(k) < v.Element(k) - KDTREE_EPS && + (tr->c).Element(k) < v.Element(k) - KDTREE_EPS) + { + mightHit = false; + break; + } + if((tr->a).Element(k) > v.Element(k) + KDTREE_EPS && + (tr->b).Element(k) > v.Element(k) + KDTREE_EPS && + (tr->c).Element(k) > v.Element(k) + KDTREE_EPS) + { + mightHit = false; + break; + } + } + if(!mightHit) continue; + + if(tr->a.Equals(v)) { tr->a = v; continue; } + if(tr->b.Equals(v)) { tr->b = v; continue; } + if(tr->c.Equals(v)) { tr->c = v; continue; } + + if(v.OnLineSegment(tr->a, tr->b)) { + STriangle nt = STriangle::From(tr->meta, tr->a, v, tr->c); + extras->AddTriangle(&nt); + tr->a = v; + continue; + } + if(v.OnLineSegment(tr->b, tr->c)) { + STriangle nt = STriangle::From(tr->meta, tr->b, v, tr->a); + extras->AddTriangle(&nt); + tr->b = v; + continue; + } + if(v.OnLineSegment(tr->c, tr->a)) { + STriangle nt = STriangle::From(tr->meta, tr->c, v, tr->b); + extras->AddTriangle(&nt); + tr->c = v; + continue; + } + } + } +} + +//----------------------------------------------------------------------------- +// Snap to each vertex of each triangle of the given mesh. If the given mesh +// is identical to the mesh used to make this kd tree, then the result should +// be a vertex-to-vertex mesh. +//----------------------------------------------------------------------------- +void SKdNode::SnapToMesh(SMesh *m) { + int i, j, k; + for(i = 0; i < m->l.n; i++) { + STriangle *tr = &(m->l.elem[i]); + for(j = 0; j < 3; j++) { + Vector v = ((j == 0) ? tr->a : + ((j == 1) ? tr->b : + tr->c)); + + SMesh extra = {}; + SnapToVertex(v, &extra); + + for(k = 0; k < extra.l.n; k++) { + STriangle *tra = (STriangle *)AllocTemporary(sizeof(*tra)); + *tra = extra.l.elem[k]; + AddTriangle(tra); + } + extra.Clear(); + } + } +} + +//----------------------------------------------------------------------------- +// For all the edges in sel, split them against the given triangle, and test +// them for occlusion. Keep only the visible segments. sel is both our input +// and our output. +//----------------------------------------------------------------------------- +void SKdNode::SplitLinesAgainstTriangle(SEdgeList *sel, STriangle *tr, bool removeHidden) { + SEdgeList seln = {}; + + Vector tn = tr->Normal().WithMagnitude(1); + double td = tn.Dot(tr->a); + + // Consider front-facing triangles only. + if(tn.z > LENGTH_EPS) { + // If the edge crosses our triangle's plane, then split into above + // and below parts. Note that we must preserve auxA, which contains + // the style associated with this line. + SEdge *se; + for(se = sel->l.First(); se; se = sel->l.NextAfter(se)) { + double da = (se->a).Dot(tn) - td, + db = (se->b).Dot(tn) - td; + if((da < -LENGTH_EPS && db > LENGTH_EPS) || + (db < -LENGTH_EPS && da > LENGTH_EPS)) + { + Vector m = Vector::AtIntersectionOfPlaneAndLine( + tn, td, + se->a, se->b, NULL); + seln.AddEdge(m, se->b, se->auxA); + se->b = m; + } + } + for(se = seln.l.First(); se; se = seln.l.NextAfter(se)) { + sel->AddEdge(se->a, se->b, se->auxA); + } + seln.Clear(); + + for(se = sel->l.First(); se; se = sel->l.NextAfter(se)) { + Vector pt = ((se->a).Plus(se->b)).ScaledBy(0.5); + if(pt.Dot(tn) - td > -LENGTH_EPS) { + // Edge is in front of or on our plane (remember, tn.z > 0) + // so it is exempt from further splitting + se->auxB = 1; + } else { + // Edge is behind our plane, needs further splitting + se->auxB = 0; + } + } + + // Considering only the (x, y) coordinates, split the edge against our + // triangle. + Point2d a = (tr->a).ProjectXy(), + b = (tr->b).ProjectXy(), + c = (tr->c).ProjectXy(); + + Point2d n[3] = { (b.Minus(a)).Normal().WithMagnitude(1), + (c.Minus(b)).Normal().WithMagnitude(1), + (a.Minus(c)).Normal().WithMagnitude(1) }; + + double d[3] = { n[0].Dot(b), + n[1].Dot(c), + n[2].Dot(a) }; + + // Split all of the edges where they intersect the triangle edges + int i; + for(i = 0; i < 3; i++) { + for(se = sel->l.First(); se; se = sel->l.NextAfter(se)) { + if(se->auxB) continue; + + Point2d ap = (se->a).ProjectXy(), + bp = (se->b).ProjectXy(); + double da = n[i].Dot(ap) - d[i], + db = n[i].Dot(bp) - d[i]; + if((da < -LENGTH_EPS && db > LENGTH_EPS) || + (db < -LENGTH_EPS && da > LENGTH_EPS)) + { + double dab = (db - da); + Vector spl = ((se->a).ScaledBy( db/dab)).Plus( + (se->b).ScaledBy(-da/dab)); + seln.AddEdge(spl, se->b, se->auxA); + se->b = spl; + } + } + for(se = seln.l.First(); se; se = seln.l.NextAfter(se)) { + // The split pieces are all behind the triangle, since only + // edges behind the triangle got split. So their auxB is 0. + sel->AddEdge(se->a, se->b, se->auxA, 0); + } + seln.Clear(); + } + + for(se = sel->l.First(); se; se = sel->l.NextAfter(se)) { + if(se->auxB) { + // Lies above or on the triangle plane, so triangle doesn't + // occlude it. + se->tag = 0; + } else { + // Test the segment to see if it lies outside the triangle + // (i.e., outside wrt at least one edge), and keep it only + // then. + Point2d pt = ((se->a).Plus(se->b).ScaledBy(0.5)).ProjectXy(); + se->tag = 1; + for(i = 0; i < 3; i++) { + // If the test point lies on the boundary of our triangle, + // then we still discard the edge. + if(n[i].Dot(pt) - d[i] > LENGTH_EPS) se->tag = 0; + } + } + if(!removeHidden && se->tag == 1) + se->auxA = Style::HIDDEN_EDGE; + } + if(removeHidden) + sel->l.RemoveTagged(); + } +} + +//----------------------------------------------------------------------------- +// Given an edge orig, occlusion test it against our mesh. We output an edge +// list in sel, containing the visible portions of that edge. +//----------------------------------------------------------------------------- +void SKdNode::OcclusionTestLine(SEdge orig, SEdgeList *sel, int cnt, bool removeHidden) { + if(gt && lt) { + double ac = (orig.a).Element(which), + bc = (orig.b).Element(which); + // We can ignore triangles that are separated in x or y, but triangles + // that are separated in z may still contribute + if(ac < c + KDTREE_EPS || + bc < c + KDTREE_EPS || + which == 2) + { + lt->OcclusionTestLine(orig, sel, cnt, removeHidden); + } + if(ac > c - KDTREE_EPS || + bc > c - KDTREE_EPS || + which == 2) + { + gt->OcclusionTestLine(orig, sel, cnt, removeHidden); + } + } else { + STriangleLl *ll; + for(ll = tris; ll; ll = ll->next) { + STriangle *tr = ll->tri; + + if(tr->tag == cnt) continue; + + SplitLinesAgainstTriangle(sel, tr, removeHidden); + tr->tag = cnt; + } + } +} + +//----------------------------------------------------------------------------- +// Search the mesh for a triangle with an edge from b to a (i.e., the mate +// for the edge from a to b), and increment info->count each time that we +// find one. If a triangle is found, then report whether it is front- or +// back-facing using info->frontFacing. And regardless of whether a mate is +// found, report whether the edge intersects the mesh with info->intersectsMesh; +// if coplanarIsInter then we count the edge as intersecting if it's coplanar +// with a triangle in the mesh, otherwise not. +//----------------------------------------------------------------------------- +void SKdNode::FindEdgeOn(Vector a, Vector b, int cnt, bool coplanarIsInter, + EdgeOnInfo *info) +{ + if(gt && lt) { + double ac = a.Element(which), + bc = b.Element(which); + if(ac < c + KDTREE_EPS || + bc < c + KDTREE_EPS) + { + lt->FindEdgeOn(a, b, cnt, coplanarIsInter, info); + } + if(ac > c - KDTREE_EPS || + bc > c - KDTREE_EPS) + { + gt->FindEdgeOn(a, b, cnt, coplanarIsInter, info); + } + return; + } + + // We are a leaf node; so we iterate over all the triangles in our + // linked list. + STriangleLl *ll; + for(ll = tris; ll; ll = ll->next) { + STriangle *tr = ll->tri; + + if(tr->tag == cnt) continue; + + // Test if this triangle matches up with the given edge + if((a.Equals(tr->b) && b.Equals(tr->a)) || + (a.Equals(tr->c) && b.Equals(tr->b)) || + (a.Equals(tr->a) && b.Equals(tr->c))) + { + info->count++; + // Record whether this triangle is front- or back-facing. + if(tr->Normal().z > LENGTH_EPS) { + info->frontFacing = true; + } else { + info->frontFacing = false; + } + // Record the triangle + info->tr = tr; + // And record which vertexes a and b correspond to + info->ai = a.Equals(tr->a) ? 0 : (a.Equals(tr->b) ? 1 : 2); + info->bi = b.Equals(tr->a) ? 0 : (b.Equals(tr->b) ? 1 : 2); + } else if(((a.Equals(tr->a) && b.Equals(tr->b)) || + (a.Equals(tr->b) && b.Equals(tr->c)) || + (a.Equals(tr->c) && b.Equals(tr->a)))) + { + // It's an edge of this triangle, okay. + } else { + // Check for self-intersection + Vector n = (tr->Normal()).WithMagnitude(1); + double d = (tr->a).Dot(n); + double pa = a.Dot(n) - d, pb = b.Dot(n) - d; + // It's an intersection if neither point lies in-plane, + // and the edge crosses the plane (should handle in-plane + // intersections separately but don't yet). + if((pa < -LENGTH_EPS || pa > LENGTH_EPS) && + (pb < -LENGTH_EPS || pb > LENGTH_EPS) && + (pa*pb < 0)) + { + // The edge crosses the plane of the triangle; now see if + // it crosses inside the triangle. + if(tr->ContainsPointProjd(b.Minus(a), a)) { + if(coplanarIsInter) { + info->intersectsMesh = true; + } else { + Vector p = Vector::AtIntersectionOfPlaneAndLine( + n, d, a, b, NULL); + Vector ta = tr->a, + tb = tr->b, + tc = tr->c; + if((p.DistanceToLine(ta, tb.Minus(ta)) < LENGTH_EPS) || + (p.DistanceToLine(tb, tc.Minus(tb)) < LENGTH_EPS) || + (p.DistanceToLine(tc, ta.Minus(tc)) < LENGTH_EPS)) + { + // Intersection lies on edge. This happens when + // our edge is from a triangle coplanar with + // another triangle in the mesh. We don't test + // the edge against triangles whose plane contains + // that edge, but we do end up testing against + // the coplanar triangle's neighbours, which we + // will intersect on their edges. + } else { + info->intersectsMesh = true; + } + } + } + } + } + + // Ensure that we don't count this triangle twice if it appears + // in two buckets of the kd tree. + tr->tag = cnt; + } +} + +static bool CheckAndAddTrianglePair(std::set> *pairs, + STriangle *a, STriangle *b) +{ + if(pairs->find(std::make_pair(a, b)) != pairs->end() || + pairs->find(std::make_pair(b, a)) != pairs->end()) + return true; + + pairs->emplace(a, b); + return false; +} + +//----------------------------------------------------------------------------- +// Pick certain classes of edges out from our mesh. These might be: +// * naked edges (i.e., edges with no anti-parallel neighbor) and self- +// intersecting edges (i.e., edges that cross another triangle) +// * turning edges (i.e., edges where a front-facing triangle joins +// a back-facing triangle) +// * emphasized edges (i.e., edges where a triangle from one face joins +// a triangle from a different face) +//----------------------------------------------------------------------------- +void SKdNode::MakeCertainEdgesInto(SEdgeList *sel, int how, bool coplanarIsInter, + bool *inter, bool *leaky, int auxA) +{ + if(inter) *inter = false; + if(leaky) *leaky = false; + + std::vector tris; + ClearTags(); + ListTrianglesInto(&tris); + + std::set> edgeTris; + int cnt = 1234; + for(STriangle *tr : tris) { + for(int j = 0; j < 3; j++) { + Vector a = (j == 0) ? tr->a : ((j == 1) ? tr->b : tr->c); + Vector b = (j == 0) ? tr->b : ((j == 1) ? tr->c : tr->a); + + SKdNode::EdgeOnInfo info = {}; + FindEdgeOn(a, b, cnt, coplanarIsInter, &info); + + switch(how) { + case NAKED_OR_SELF_INTER_EDGES: + if(info.count != 1) { + sel->AddEdge(a, b, auxA); + if(leaky) *leaky = true; + } + if(info.intersectsMesh) { + sel->AddEdge(a, b, auxA); + if(inter) *inter = true; + } + break; + + case SELF_INTER_EDGES: + if(info.intersectsMesh) { + sel->AddEdge(a, b, auxA); + if(inter) *inter = true; + } + break; + + case TURNING_EDGES: + if((tr->Normal().z < LENGTH_EPS) && + (info.count == 1) && + info.frontFacing) + { + if(CheckAndAddTrianglePair(&edgeTris, tr, info.tr)) + break; + // This triangle is back-facing (or on edge), and + // this edge has exactly one mate, and that mate is + // front-facing. So this is a turning edge. + sel->AddEdge(a, b, auxA); + } + break; + + case EMPHASIZED_EDGES: + if(info.count == 1 && tr->meta.face != info.tr->meta.face) { + if(CheckAndAddTrianglePair(&edgeTris, tr, info.tr)) + break; + // The two triangles that join at this edge come from + // different faces; either really different faces, + // or one is from a face and the other is zero (i.e., + // not from a face). + sel->AddEdge(a, b, auxA); + } + break; + + case SHARP_EDGES: + if(info.count == 1) { + Vector na0 = (j == 0) ? tr->an : + ((j == 1) ? tr->bn : tr->cn); + Vector nb0 = (j == 0) ? tr->bn : + ((j == 1) ? tr->cn : tr->an); + Vector na1 = (info.ai == 0) ? info.tr->an : + ((info.ai == 1) ? info.tr->bn : info.tr->cn); + Vector nb1 = (info.bi == 0) ? info.tr->an : + ((info.bi == 1) ? info.tr->bn : info.tr->cn); + na0 = na0.WithMagnitude(1.0); + nb0 = nb0.WithMagnitude(1.0); + na1 = na1.WithMagnitude(1.0); + nb1 = nb1.WithMagnitude(1.0); + if(!((na0.Equals(na1) && nb0.Equals(nb1)) || + (na0.Equals(nb1) && nb0.Equals(na1)))) { + if(CheckAndAddTrianglePair(&edgeTris, tr, info.tr)) + break; + // The two triangles that join at this edge meet at a sharp + // angle. This implies they come from different faces. + sel->AddEdge(a, b, auxA); + } + } + break; + + default: oops(); + } + + cnt++; + } + } +} + +void SKdNode::MakeOutlinesInto(SOutlineList *sol) +{ + std::vector tris; + ClearTags(); + ListTrianglesInto(&tris); + + std::set> edgeTris; + int cnt = 1234; + for(STriangle *tr : tris) { + for(int j = 0; j < 3; j++) { + Vector a = (j == 0) ? tr->a : ((j == 1) ? tr->b : tr->c); + Vector b = (j == 0) ? tr->b : ((j == 1) ? tr->c : tr->a); + + SKdNode::EdgeOnInfo info = {}; + FindEdgeOn(a, b, cnt, /*coplanarIsInter=*/false, &info); + cnt++; + if(info.count != 1) continue; + if(CheckAndAddTrianglePair(&edgeTris, tr, info.tr)) + continue; + + sol->AddEdge(a, b, tr->Normal(), info.tr->Normal()); + } + } +} + +void SOutlineList::Clear() { + l.Clear(); +} + +void SOutlineList::AddEdge(Vector a, Vector b, Vector nl, Vector nr) { + SOutline so = {}; + so.a = a; + so.b = b; + so.nl = nl; + so.nr = nr; + l.Add(&so); +} + +void SOutlineList::FillOutlineTags(Vector projDir) { + for(SOutline *so = l.First(); so; so = l.NextAfter(so)) { + so->tag = ((so->nl.Dot(projDir) > 0.0) != (so->nr.Dot(projDir) > 0.0)); + } +} + +void SOutlineList::MakeFromCopyOf(SOutlineList *sol) { + for(SOutline *so = sol->l.First(); so; so = sol->l.NextAfter(so)) { + l.Add(so); + } +} diff --git a/src/modify.cpp b/src/modify.cpp new file mode 100644 index 0000000..47eee36 --- /dev/null +++ b/src/modify.cpp @@ -0,0 +1,670 @@ +//----------------------------------------------------------------------------- +// User-initiated (not parametric) operations to modify our sketch, by +// changing the requests, like to round a corner or split curves where they +// intersect. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +//----------------------------------------------------------------------------- +// Replace constraints on oldpt with the same constraints on newpt. +// Useful when splitting, tangent arcing, or removing bezier points. +//----------------------------------------------------------------------------- +void GraphicsWindow::ReplacePointInConstraints(hEntity oldpt, hEntity newpt) { + int i; + for(i = 0; i < SK.constraint.n; i++) { + Constraint *c = &(SK.constraint.elem[i]); + if(c->ptA.v == oldpt.v) c->ptA = newpt; + if(c->ptB.v == oldpt.v) c->ptB = newpt; + } +} + +//----------------------------------------------------------------------------- +// Remove constraints on hpt. Useful when removing bezier points. +//----------------------------------------------------------------------------- +void GraphicsWindow::RemoveConstraintsForPointBeingDeleted(hEntity hpt) { + SK.constraint.ClearTags(); + for(int i = 0; i < SK.constraint.n; i++) { + Constraint *c = &(SK.constraint.elem[i]); + if(c->ptA.v == hpt.v || c->ptB.v == hpt.v) { + c->tag = 1; + (SS.deleted.constraints)++; + if(c->type != Constraint::POINTS_COINCIDENT && + c->type != Constraint::HORIZONTAL && + c->type != Constraint::VERTICAL) + { + (SS.deleted.nonTrivialConstraints)++; + } + } + } + SK.constraint.RemoveTagged(); +} + +//----------------------------------------------------------------------------- +// Let's say that A is coincident with B, and B is coincident with C. This +// implies that A is coincident with C; but if we delete B, then both +// constraints must be deleted too (since they reference B), and A is no +// longer constrained to C. This routine adds back that constraint. +//----------------------------------------------------------------------------- +void GraphicsWindow::FixConstraintsForRequestBeingDeleted(hRequest hr) { + Request *r = SK.GetRequest(hr); + if(r->group.v != SS.GW.activeGroup.v) return; + + Entity *e; + for(e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { + if(!(e->h.isFromRequest())) continue; + if(e->h.request().v != hr.v) continue; + + if(e->type != Entity::POINT_IN_2D && + e->type != Entity::POINT_IN_3D) + { + continue; + } + + // This is a point generated by the request being deleted; so fix + // the constraints for that. + FixConstraintsForPointBeingDeleted(e->h); + } +} +void GraphicsWindow::FixConstraintsForPointBeingDeleted(hEntity hpt) { + List ld = {}; + + Constraint *c; + SK.constraint.ClearTags(); + for(c = SK.constraint.First(); c; c = SK.constraint.NextAfter(c)) { + if(c->type != Constraint::POINTS_COINCIDENT) continue; + if(c->group.v != SS.GW.activeGroup.v) continue; + + if(c->ptA.v == hpt.v) { + ld.Add(&(c->ptB)); + c->tag = 1; + } + if(c->ptB.v == hpt.v) { + ld.Add(&(c->ptA)); + c->tag = 1; + } + } + // Remove constraints without waiting for regeneration; this way + // if another point takes the place of the deleted one (e.g. when + // removing control points of a bezier) the constraint doesn't + // spuriously move. Similarly, subsequent calls of this function + // (if multiple coincident points are getting deleted) will work + // correctly. + SK.constraint.RemoveTagged(); + + // If more than one point was constrained coincident with hpt, then + // those two points were implicitly coincident with each other. By + // deleting hpt (and all constraints that mention it), we will delete + // that relationship. So put it back here now. + int i; + for(i = 1; i < ld.n; i++) { + Constraint::ConstrainCoincident(ld.elem[i-1], ld.elem[i]); + } + ld.Clear(); +} + +//----------------------------------------------------------------------------- +// A curve by its parametric equation, helper functions for computing tangent +// arcs by a numerical method. +//----------------------------------------------------------------------------- +void GraphicsWindow::ParametricCurve::MakeFromEntity(hEntity he, bool reverse) { + *this = {}; + Entity *e = SK.GetEntity(he); + if(e->type == Entity::LINE_SEGMENT) { + isLine = true; + p0 = e->EndpointStart(), + p1 = e->EndpointFinish(); + if(reverse) { + swap(p0, p1); + } + } else if(e->type == Entity::ARC_OF_CIRCLE) { + isLine = false; + p0 = SK.GetEntity(e->point[0])->PointGetNum(); + Vector pe = SK.GetEntity(e->point[1])->PointGetNum(); + r = (pe.Minus(p0)).Magnitude(); + e->ArcGetAngles(&theta0, &theta1, &dtheta); + if(reverse) { + swap(theta0, theta1); + dtheta = -dtheta; + } + EntityBase *wrkpln = SK.GetEntity(e->workplane)->Normal(); + u = wrkpln->NormalU(); + v = wrkpln->NormalV(); + } else { + oops(); + } +} +double GraphicsWindow::ParametricCurve::LengthForAuto(void) { + if(isLine) { + // Allow a third of the line to disappear with auto radius + return (p1.Minus(p0)).Magnitude() / 3; + } else { + // But only a twentieth of the arc; shorter means fewer numerical + // problems since the curve is more linear over shorter sections. + return (fabs(dtheta)*r)/20; + } +} +Vector GraphicsWindow::ParametricCurve::PointAt(double t) { + if(isLine) { + return p0.Plus((p1.Minus(p0)).ScaledBy(t)); + } else { + double theta = theta0 + dtheta*t; + return p0.Plus(u.ScaledBy(r*cos(theta)).Plus(v.ScaledBy(r*sin(theta)))); + } +} +Vector GraphicsWindow::ParametricCurve::TangentAt(double t) { + if(isLine) { + return p1.Minus(p0); + } else { + double theta = theta0 + dtheta*t; + Vector t = u.ScaledBy(-r*sin(theta)).Plus(v.ScaledBy(r*cos(theta))); + t = t.ScaledBy(dtheta); + return t; + } +} +hRequest GraphicsWindow::ParametricCurve::CreateRequestTrimmedTo(double t, + bool extraConstraints, hEntity orig, hEntity arc, bool arcFinish) +{ + hRequest hr; + Entity *e; + if(isLine) { + hr = SS.GW.AddRequest(Request::LINE_SEGMENT, false), + e = SK.GetEntity(hr.entity(0)); + SK.GetEntity(e->point[0])->PointForceTo(PointAt(t)); + SK.GetEntity(e->point[1])->PointForceTo(PointAt(1)); + ConstrainPointIfCoincident(e->point[0]); + ConstrainPointIfCoincident(e->point[1]); + if(extraConstraints) { + Constraint::Constrain(Constraint::PT_ON_LINE, + hr.entity(1), Entity::NO_ENTITY, orig); + } + Constraint::Constrain(Constraint::ARC_LINE_TANGENT, + Entity::NO_ENTITY, Entity::NO_ENTITY, + arc, e->h, arcFinish, false); + } else { + hr = SS.GW.AddRequest(Request::ARC_OF_CIRCLE, false), + e = SK.GetEntity(hr.entity(0)); + SK.GetEntity(e->point[0])->PointForceTo(p0); + if(dtheta > 0) { + SK.GetEntity(e->point[1])->PointForceTo(PointAt(t)); + SK.GetEntity(e->point[2])->PointForceTo(PointAt(1)); + } else { + SK.GetEntity(e->point[2])->PointForceTo(PointAt(t)); + SK.GetEntity(e->point[1])->PointForceTo(PointAt(1)); + } + ConstrainPointIfCoincident(e->point[0]); + ConstrainPointIfCoincident(e->point[1]); + ConstrainPointIfCoincident(e->point[2]); + // The tangency constraint alone is enough to fully constrain it, + // so there's no need for more. + Constraint::Constrain(Constraint::CURVE_CURVE_TANGENT, + Entity::NO_ENTITY, Entity::NO_ENTITY, + arc, e->h, arcFinish, (dtheta < 0)); + } + return hr; +} + +//----------------------------------------------------------------------------- +// If a point in the same group as hpt, and numerically coincident with hpt, +// happens to exist, then constrain that point coincident to hpt. +//----------------------------------------------------------------------------- +void GraphicsWindow::ParametricCurve::ConstrainPointIfCoincident(hEntity hpt) { + Entity *e, *pt; + pt = SK.GetEntity(hpt); + Vector ev, ptv; + ptv = pt->PointGetNum(); + + for(e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { + if(e->h.v == pt->h.v) continue; + if(!e->IsPoint()) continue; + if(e->group.v != pt->group.v) continue; + if(e->workplane.v != pt->workplane.v) continue; + + ev = e->PointGetNum(); + if(!ev.Equals(ptv)) continue; + + Constraint::ConstrainCoincident(hpt, e->h); + break; + } +} + +//----------------------------------------------------------------------------- +// A single point must be selected when this function is called. We find two +// non-construction line segments that join at this point, and create a +// tangent arc joining them. +//----------------------------------------------------------------------------- +void GraphicsWindow::MakeTangentArc(void) { + if(!LockedInWorkplane()) { + Error("Must be sketching in workplane to create tangent " + "arc."); + return; + } + + // The point corresponding to the vertex to be rounded. + Vector pshared = SK.GetEntity(gs.point[0])->PointGetNum(); + ClearSelection(); + + // First, find two requests (that are not construction, and that are + // in our group and workplane) that generate entities that have an + // endpoint at our vertex to be rounded. + int i, c = 0; + Entity *ent[2]; + Request *req[2]; + hRequest hreq[2]; + hEntity hent[2]; + bool pointf[2]; + for(i = 0; i < SK.request.n; i++) { + Request *r = &(SK.request.elem[i]); + if(r->group.v != activeGroup.v) continue; + if(r->workplane.v != ActiveWorkplane().v) continue; + if(r->construction) continue; + if(r->type != Request::LINE_SEGMENT && + r->type != Request::ARC_OF_CIRCLE) + { + continue; + } + + Entity *e = SK.GetEntity(r->h.entity(0)); + Vector ps = e->EndpointStart(), + pf = e->EndpointFinish(); + + if(ps.Equals(pshared) || pf.Equals(pshared)) { + if(c < 2) { + // We record the entity and request and their handles, + // and whether the vertex to be rounded is the start or + // finish of this entity. + ent[c] = e; + hent[c] = e->h; + req[c] = r; + hreq[c] = r->h; + pointf[c] = (pf.Equals(pshared)); + } + c++; + } + } + if(c != 2) { + Error("To create a tangent arc, select a point where two " + "non-construction lines or cicles in this group and " + "workplane join."); + return; + } + + Entity *wrkpl = SK.GetEntity(ActiveWorkplane()); + Vector wn = wrkpl->Normal()->NormalN(); + + // Based on these two entities, we make the objects that we'll use to + // numerically find the tangent arc. + ParametricCurve pc[2]; + pc[0].MakeFromEntity(ent[0]->h, pointf[0]); + pc[1].MakeFromEntity(ent[1]->h, pointf[1]); + + // And thereafter we mustn't touch the entity or req ptrs, + // because the new requests/entities we add might force a + // realloc. + memset(ent, 0, sizeof(ent)); + memset(req, 0, sizeof(req)); + + Vector pinter; + double r = 0.0, vv = 0.0; + // We now do Newton iterations to find the tangent arc, and its positions + // t back along the two curves, starting from shared point of the curves + // at t = 0. Lots of iterations helps convergence, and this is still + // ~10 ms for everything. + int iters = 1000; + double t[2] = { 0, 0 }, tp[2]; + for(i = 0; i < iters + 20; i++) { + Vector p0 = pc[0].PointAt(t[0]), + p1 = pc[1].PointAt(t[1]), + t0 = pc[0].TangentAt(t[0]), + t1 = pc[1].TangentAt(t[1]); + + pinter = Vector::AtIntersectionOfLines(p0, p0.Plus(t0), + p1, p1.Plus(t1), + NULL, NULL, NULL); + + // The sign of vv determines whether shortest distance is + // clockwise or anti-clockwise. + Vector v = (wn.Cross(t0)).WithMagnitude(1); + vv = t1.Dot(v); + + double dot = (t0.WithMagnitude(1)).Dot(t1.WithMagnitude(1)); + double theta = acos(dot); + + if(SS.tangentArcManual) { + r = SS.tangentArcRadius; + } else { + r = 200/scale; + // Set the radius so that no more than one third of the + // line segment disappears. + r = min(r, pc[0].LengthForAuto()*tan(theta/2)); + r = min(r, pc[1].LengthForAuto()*tan(theta/2));; + } + // We are source-stepping the radius, to improve convergence. So + // ramp that for most of the iterations, and then do a few at + // the end with that constant for polishing. + if(i < iters) { + r *= 0.1 + 0.9*i/((double)iters); + } + + // The distance from the intersection of the lines to the endpoint + // of the arc, along each line. + double el = r/tan(theta/2); + + // Compute the endpoints of the arc, for each curve + Vector pa0 = pinter.Plus(t0.WithMagnitude(el)), + pa1 = pinter.Plus(t1.WithMagnitude(el)); + + tp[0] = t[0]; + tp[1] = t[1]; + + // And convert those points to parameter values along the curve. + t[0] += (pa0.Minus(p0)).DivPivoting(t0); + t[1] += (pa1.Minus(p1)).DivPivoting(t1); + } + + // Stupid check for convergence, and for an out of range result (as + // we would get, for example, if the line is too short to fit the + // rounding arc). + if(fabs(tp[0] - t[0]) > 1e-3 || fabs(tp[1] - t[1]) > 1e-3 || + t[0] < 0.01 || t[1] < 0.01 || + t[0] > 0.99 || t[1] > 0.99 || + isnan(t[0]) || isnan(t[1])) + { + Error("Couldn't round this corner. Try a smaller radius, or try " + "creating the desired geometry by hand with tangency " + "constraints."); + return; + } + + // Compute the location of the center of the arc + Vector center = pc[0].PointAt(t[0]), + v0inter = pinter.Minus(center); + int a, b; + if(vv < 0) { + a = 1; b = 2; + center = center.Minus(v0inter.Cross(wn).WithMagnitude(r)); + } else { + a = 2; b = 1; + center = center.Plus(v0inter.Cross(wn).WithMagnitude(r)); + } + + SS.UndoRemember(); + + hRequest harc = AddRequest(Request::ARC_OF_CIRCLE, false); + Entity *earc = SK.GetEntity(harc.entity(0)); + hEntity hearc = earc->h; + + SK.GetEntity(earc->point[0])->PointForceTo(center); + SK.GetEntity(earc->point[a])->PointForceTo(pc[0].PointAt(t[0])); + SK.GetEntity(earc->point[b])->PointForceTo(pc[1].PointAt(t[1])); + + earc = NULL; + + pc[0].CreateRequestTrimmedTo(t[0], !SS.tangentArcDeleteOld, + hent[0], hearc, (b == 1)); + pc[1].CreateRequestTrimmedTo(t[1], !SS.tangentArcDeleteOld, + hent[1], hearc, (a == 1)); + + // Now either make the original entities construction, or delete them + // entirely, according to user preference. + Request *re; + SK.request.ClearTags(); + for(re = SK.request.First(); re; re = SK.request.NextAfter(re)) { + if(re->h.v == hreq[0].v || re->h.v == hreq[1].v) { + if(SS.tangentArcDeleteOld) { + re->tag = 1; + } else { + re->construction = true; + } + } + } + if(SS.tangentArcDeleteOld) { + DeleteTaggedRequests(); + } + + SS.ScheduleGenerateAll(); +} + +hEntity GraphicsWindow::SplitLine(hEntity he, Vector pinter) { + // Save the original endpoints, since we're about to delete this entity. + Entity *e01 = SK.GetEntity(he); + hEntity hep0 = e01->point[0], hep1 = e01->point[1]; + Vector p0 = SK.GetEntity(hep0)->PointGetNum(), + p1 = SK.GetEntity(hep1)->PointGetNum(); + + // Add the two line segments this one gets split into. + hRequest r0i = AddRequest(Request::LINE_SEGMENT, false), + ri1 = AddRequest(Request::LINE_SEGMENT, false); + // Don't get entities till after adding, realloc issues + + Entity *e0i = SK.GetEntity(r0i.entity(0)), + *ei1 = SK.GetEntity(ri1.entity(0)); + + SK.GetEntity(e0i->point[0])->PointForceTo(p0); + SK.GetEntity(e0i->point[1])->PointForceTo(pinter); + SK.GetEntity(ei1->point[0])->PointForceTo(pinter); + SK.GetEntity(ei1->point[1])->PointForceTo(p1); + + ReplacePointInConstraints(hep0, e0i->point[0]); + ReplacePointInConstraints(hep1, ei1->point[1]); + Constraint::ConstrainCoincident(e0i->point[1], ei1->point[0]); + return e0i->point[1]; +} + +hEntity GraphicsWindow::SplitCircle(hEntity he, Vector pinter) { + Entity *circle = SK.GetEntity(he); + if(circle->type == Entity::CIRCLE) { + // Start with an unbroken circle, split it into a 360 degree arc. + Vector center = SK.GetEntity(circle->point[0])->PointGetNum(); + + circle = NULL; // shortly invalid! + hRequest hr = AddRequest(Request::ARC_OF_CIRCLE, false); + + Entity *arc = SK.GetEntity(hr.entity(0)); + + SK.GetEntity(arc->point[0])->PointForceTo(center); + SK.GetEntity(arc->point[1])->PointForceTo(pinter); + SK.GetEntity(arc->point[2])->PointForceTo(pinter); + + Constraint::ConstrainCoincident(arc->point[1], arc->point[2]); + return arc->point[1]; + } else { + // Start with an arc, break it in to two arcs + hEntity hc = circle->point[0], + hs = circle->point[1], + hf = circle->point[2]; + Vector center = SK.GetEntity(hc)->PointGetNum(), + start = SK.GetEntity(hs)->PointGetNum(), + finish = SK.GetEntity(hf)->PointGetNum(); + + circle = NULL; // shortly invalid! + hRequest hr0 = AddRequest(Request::ARC_OF_CIRCLE, false), + hr1 = AddRequest(Request::ARC_OF_CIRCLE, false); + + Entity *arc0 = SK.GetEntity(hr0.entity(0)), + *arc1 = SK.GetEntity(hr1.entity(0)); + + SK.GetEntity(arc0->point[0])->PointForceTo(center); + SK.GetEntity(arc0->point[1])->PointForceTo(start); + SK.GetEntity(arc0->point[2])->PointForceTo(pinter); + + SK.GetEntity(arc1->point[0])->PointForceTo(center); + SK.GetEntity(arc1->point[1])->PointForceTo(pinter); + SK.GetEntity(arc1->point[2])->PointForceTo(finish); + + ReplacePointInConstraints(hs, arc0->point[1]); + ReplacePointInConstraints(hf, arc1->point[2]); + Constraint::ConstrainCoincident(arc0->point[2], arc1->point[1]); + return arc0->point[2]; + } +} + +hEntity GraphicsWindow::SplitCubic(hEntity he, Vector pinter) { + // Save the original endpoints, since we're about to delete this entity. + Entity *e01 = SK.GetEntity(he); + SBezierList sbl = {}; + e01->GenerateBezierCurves(&sbl); + + hEntity hep0 = e01->point[0], + hep1 = e01->point[3+e01->extraPoints], + hep0n = Entity::NO_ENTITY, // the new start point + hep1n = Entity::NO_ENTITY, // the new finish point + hepin = Entity::NO_ENTITY; // the intersection point + + // The curve may consist of multiple cubic segments. So find which one + // contains the intersection point. + double t; + int i, j; + for(i = 0; i < sbl.l.n; i++) { + SBezier *sb = &(sbl.l.elem[i]); + if(sb->deg != 3) oops(); + + sb->ClosestPointTo(pinter, &t, false); + if(pinter.Equals(sb->PointAt(t))) { + // Split that segment at the intersection. + SBezier b0i, bi1, b01 = *sb; + b01.SplitAt(t, &b0i, &bi1); + + // Add the two cubic segments this one gets split into. + hRequest r0i = AddRequest(Request::CUBIC, false), + ri1 = AddRequest(Request::CUBIC, false); + // Don't get entities till after adding, realloc issues + + Entity *e0i = SK.GetEntity(r0i.entity(0)), + *ei1 = SK.GetEntity(ri1.entity(0)); + + for(j = 0; j <= 3; j++) { + SK.GetEntity(e0i->point[j])->PointForceTo(b0i.ctrl[j]); + } + for(j = 0; j <= 3; j++) { + SK.GetEntity(ei1->point[j])->PointForceTo(bi1.ctrl[j]); + } + + Constraint::ConstrainCoincident(e0i->point[3], ei1->point[0]); + if(i == 0) hep0n = e0i->point[0]; + hep1n = ei1->point[3]; + hepin = e0i->point[3]; + } else { + hRequest r = AddRequest(Request::CUBIC, false); + Entity *e = SK.GetEntity(r.entity(0)); + + for(j = 0; j <= 3; j++) { + SK.GetEntity(e->point[j])->PointForceTo(sb->ctrl[j]); + } + + if(i == 0) hep0n = e->point[0]; + hep1n = e->point[3]; + } + } + + sbl.Clear(); + + ReplacePointInConstraints(hep0, hep0n); + ReplacePointInConstraints(hep1, hep1n); + return hepin; +} + +hEntity GraphicsWindow::SplitEntity(hEntity he, Vector pinter) { + Entity *e = SK.GetEntity(he); + int entityType = e->type; + + hEntity ret; + if(e->IsCircle()) { + ret = SplitCircle(he, pinter); + } else if(e->type == Entity::LINE_SEGMENT) { + ret = SplitLine(he, pinter); + } else if(e->type == Entity::CUBIC || e->type == Entity::CUBIC_PERIODIC) { + ret = SplitCubic(he, pinter); + } else { + Error("Couldn't split this entity; lines, circles, or cubics only."); + return Entity::NO_ENTITY; + } + + // Finally, delete the request that generated the original entity. + int reqType = EntReqTable::GetRequestForEntity(entityType); + SK.request.ClearTags(); + for(int i = 0; i < SK.request.n; i++) { + Request *r = &(SK.request.elem[i]); + if(r->group.v != activeGroup.v) continue; + if(r->type != reqType) continue; + + // If the user wants to keep the old entities around, they can just + // mark them construction first. + if(he.v == r->h.entity(0).v && !r->construction) { + r->tag = 1; + break; + } + } + DeleteTaggedRequests(); + + return ret; +} + +void GraphicsWindow::SplitLinesOrCurves(void) { + if(!LockedInWorkplane()) { + Error("Must be sketching in workplane to split."); + return; + } + + GroupSelection(); + if(!(gs.n == 2 &&(gs.lineSegments + + gs.circlesOrArcs + + gs.cubics + + gs.periodicCubics) == 2)) + { + Error("Select two entities that intersect each other (e.g. two lines " + "or two circles or a circle and a line)."); + return; + } + + hEntity ha = gs.entity[0], + hb = gs.entity[1]; + Entity *ea = SK.GetEntity(ha), + *eb = SK.GetEntity(hb); + + // Compute the possibly-rational Bezier curves for each of these entities + SBezierList sbla, sblb; + sbla = {}; + sblb = {}; + ea->GenerateBezierCurves(&sbla); + eb->GenerateBezierCurves(&sblb); + // and then compute the points where they intersect, based on those curves. + SPointList inters = {}; + sbla.AllIntersectionsWith(&sblb, &inters); + + if(inters.l.n > 0) { + Vector pi = Vector::From(0, 0, 0); + // If there's multiple points, then take the one closest to the + // mouse pointer. + double dmin = VERY_POSITIVE; + SPoint *sp; + for(sp = inters.l.First(); sp; sp = inters.l.NextAfter(sp)) { + double d = ProjectPoint(sp->p).DistanceTo(currentMousePosition); + if(d < dmin) { + dmin = d; + pi = sp->p; + } + } + + SS.UndoRemember(); + hEntity hia = SplitEntity(ha, pi), + hib = SplitEntity(hb, pi); + // SplitEntity adds the coincident constraints to join the split halves + // of each original entity; and then we add the constraint to join + // the two entities together at the split point. + if(hia.v && hib.v) { + Constraint::ConstrainCoincident(hia, hib); + } + } else { + Error("Can't split; no intersection found."); + } + + // All done, clean up and regenerate. + inters.Clear(); + sbla.Clear(); + sblb.Clear(); + ClearSelection(); + SS.ScheduleGenerateAll(); +} + diff --git a/src/mouse.cpp b/src/mouse.cpp new file mode 100644 index 0000000..352c17e --- /dev/null +++ b/src/mouse.cpp @@ -0,0 +1,1498 @@ +//----------------------------------------------------------------------------- +// Anything relating to mouse, keyboard, or 6-DOF mouse input. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +void GraphicsWindow::UpdateDraggedPoint(hEntity hp, double mx, double my) { + Entity *p = SK.GetEntity(hp); + Vector pos = p->PointGetNum(); + UpdateDraggedNum(&pos, mx, my); + p->PointForceTo(pos); +} + +void GraphicsWindow::UpdateDraggedNum(Vector *pos, double mx, double my) { + *pos = pos->Plus(projRight.ScaledBy((mx - orig.mouse.x)/scale)); + *pos = pos->Plus(projUp.ScaledBy((my - orig.mouse.y)/scale)); +} + +void GraphicsWindow::AddPointToDraggedList(hEntity hp) { + Entity *p = SK.GetEntity(hp); + // If an entity and its points are both selected, then its points could + // end up in the list twice. This would be bad, because it would move + // twice as far as the mouse pointer... + List *lhe = &(pending.points); + for(hEntity *hee = lhe->First(); hee; hee = lhe->NextAfter(hee)) { + if(hee->v == hp.v) { + // Exact same point. + return; + } + Entity *pe = SK.GetEntity(*hee); + if(pe->type == p->type && + pe->type != Entity::POINT_IN_2D && + pe->type != Entity::POINT_IN_3D && + pe->group.v == p->group.v) + { + // Transform-type point, from the same group. So it handles the + // same unknowns. + return; + } + } + pending.points.Add(&hp); +} + +void GraphicsWindow::StartDraggingByEntity(hEntity he) { + Entity *e = SK.GetEntity(he); + if(e->IsPoint()) { + AddPointToDraggedList(e->h); + } else if(e->type == Entity::LINE_SEGMENT || + e->type == Entity::ARC_OF_CIRCLE || + e->type == Entity::CUBIC || + e->type == Entity::CUBIC_PERIODIC || + e->type == Entity::CIRCLE || + e->type == Entity::TTF_TEXT) + { + int pts; + EntReqTable::GetEntityInfo(e->type, e->extraPoints, + NULL, &pts, NULL, NULL); + for(int i = 0; i < pts; i++) { + AddPointToDraggedList(e->point[i]); + } + } +} + +void GraphicsWindow::StartDraggingBySelection(void) { + List *ls = &(selection); + for(Selection *s = ls->First(); s; s = ls->NextAfter(s)) { + if(!s->entity.v) continue; + + StartDraggingByEntity(s->entity); + } + // The user might select a point, and then click it again to start + // dragging; but the point just got unselected by that click. So drag + // the hovered item too, and they'll always have it. + if(hover.entity.v) StartDraggingByEntity(hover.entity); +} + +void GraphicsWindow::MouseMoved(double x, double y, bool leftDown, + bool middleDown, bool rightDown, bool shiftDown, bool ctrlDown) +{ + if(GraphicsEditControlIsVisible()) return; + if(context.active) return; + + SS.extraLine.draw = false; + + if(!orig.mouseDown) { + // If someone drags the mouse into our window with the left button + // already depressed, then we don't have our starting point; so + // don't try. + leftDown = false; + } + + if(rightDown) { + middleDown = true; + shiftDown = !shiftDown; + } + + if(SS.showToolbar) { + if(ToolbarMouseMoved((int)x, (int)y)) { + hover.Clear(); + return; + } + } + + if(!leftDown && (pending.operation == DRAGGING_POINTS || + pending.operation == DRAGGING_MARQUEE)) + { + ClearPending(); + InvalidateGraphics(); + } + + Point2d mp = Point2d::From(x, y); + currentMousePosition = mp; + + if(rightDown && orig.mouse.DistanceTo(mp) < 5 && !orig.startedMoving) { + // Avoid accidentally panning (or rotating if shift is down) if the + // user wants a context menu. + return; + } + orig.startedMoving = true; + + // If the middle button is down, then mouse movement is used to pan and + // rotate our view. This wins over everything else. + if(middleDown) { + hover.Clear(); + + double dx = (x - orig.mouse.x) / scale; + double dy = (y - orig.mouse.y) / scale; + + if(!(shiftDown || ctrlDown)) { + double s = 0.3*(PI/180)*scale; // degrees per pixel + projRight = orig.projRight.RotatedAbout(orig.projUp, -s*dx); + projUp = orig.projUp.RotatedAbout(orig.projRight, s*dy); + + NormalizeProjectionVectors(); + } else if(ctrlDown) { + double theta = atan2(orig.mouse.y, orig.mouse.x); + theta -= atan2(y, x); + SS.extraLine.draw = true; + SS.extraLine.ptA = UnProjectPoint(Point2d::From(0, 0)); + SS.extraLine.ptB = UnProjectPoint(mp); + + Vector normal = orig.projRight.Cross(orig.projUp); + projRight = orig.projRight.RotatedAbout(normal, theta); + projUp = orig.projUp.RotatedAbout(normal, theta); + + NormalizeProjectionVectors(); + } else { + offset.x = orig.offset.x + dx*projRight.x + dy*projUp.x; + offset.y = orig.offset.y + dx*projRight.y + dy*projUp.y; + offset.z = orig.offset.z + dx*projRight.z + dy*projUp.z; + } + + orig.projRight = projRight; + orig.projUp = projUp; + orig.offset = offset; + orig.mouse.x = x; + orig.mouse.y = y; + + if(SS.TW.shown.screen == TextWindow::SCREEN_EDIT_VIEW) { + if(havePainted) { + SS.ScheduleShowTW(); + } + } + InvalidateGraphics(); + havePainted = false; + return; + } + + if(pending.operation == 0) { + double dm = orig.mouse.DistanceTo(mp); + // If we're currently not doing anything, then see if we should + // start dragging something. + if(leftDown && dm > 3) { + Entity *e = NULL; + if(hover.entity.v) e = SK.GetEntity(hover.entity); + if(e && e->type != Entity::WORKPLANE) { + Entity *e = SK.GetEntity(hover.entity); + if(e->type == Entity::CIRCLE && selection.n <= 1) { + // Drag the radius. + ClearSelection(); + pending.circle = hover.entity; + pending.operation = DRAGGING_RADIUS; + } else if(e->IsNormal()) { + ClearSelection(); + pending.normal = hover.entity; + pending.operation = DRAGGING_NORMAL; + } else { + if(!hoverWasSelectedOnMousedown) { + // The user clicked an unselected entity, which + // means they're dragging just the hovered thing, + // not the full selection. So clear all the selection + // except that entity. + ClearSelection(); + MakeSelected(e->h); + } + StartDraggingBySelection(); + if(!hoverWasSelectedOnMousedown) { + // And then clear the selection again, since they + // probably didn't want that selected if they just + // were dragging it. + ClearSelection(); + } + hover.Clear(); + pending.operation = DRAGGING_POINTS; + } + } else if(hover.constraint.v && + SK.GetConstraint(hover.constraint)->HasLabel()) + { + ClearSelection(); + pending.constraint = hover.constraint; + pending.operation = DRAGGING_CONSTRAINT; + } + if(pending.operation != 0) { + // We just started a drag, so remember for the undo before + // the drag changes anything. + SS.UndoRemember(); + } else { + if(!hover.constraint.v) { + // That's just marquee selection, which should not cause + // an undo remember. + if(dm > 10) { + if(hover.entity.v) { + // Avoid accidentally selecting workplanes when + // starting drags. + MakeUnselected(hover.entity, false); + hover.Clear(); + } + pending.operation = DRAGGING_MARQUEE; + orig.marqueePoint = + UnProjectPoint(orig.mouseOnButtonDown); + } + } + } + } else { + // Otherwise, just hit test and give up; but don't hit test + // if the mouse is down, because then the user could hover + // a point, mouse down (thus selecting it), and drag, in an + // effort to drag the point, but instead hover a different + // entity before we move far enough to start the drag. + if(!leftDown) { + // Hit testing can potentially take a lot of time. + // If we haven't painted since last time we highlighted + // something, don't hit test again, since this just causes + // a lag. + if(!havePainted) return; + HitTestMakeSelection(mp); + } + } + return; + } + + // If the user has started an operation from the menu, but not + // completed it, then just do the selection. + if(pending.operation < FIRST_PENDING) { + HitTestMakeSelection(mp); + return; + } + + // We're currently dragging something; so do that. But if we haven't + // painted since the last time we solved, do nothing, because there's + // no sense solving a frame and not displaying it. + if(!havePainted) { + if(pending.operation == DRAGGING_POINTS && ctrlDown) { + SS.extraLine.ptA = UnProjectPoint(orig.mouseOnButtonDown); + SS.extraLine.ptB = UnProjectPoint(mp); + SS.extraLine.draw = true; + } + return; + } + + havePainted = false; + switch(pending.operation) { + case DRAGGING_CONSTRAINT: { + Constraint *c = SK.constraint.FindById(pending.constraint); + UpdateDraggedNum(&(c->disp.offset), x, y); + orig.mouse = mp; + InvalidateGraphics(); + break; + } + + case DRAGGING_NEW_LINE_POINT: + if(!ctrlDown) { + SS.GW.pending.suggestion = + SS.GW.SuggestLineConstraint(SS.GW.pending.request); + } else { + SS.GW.pending.suggestion = SUGGESTED_NONE; + } + case DRAGGING_NEW_POINT: + UpdateDraggedPoint(pending.point, x, y); + HitTestMakeSelection(mp); + SS.MarkGroupDirtyByEntity(pending.point); + orig.mouse = mp; + InvalidateGraphics(); + break; + + case DRAGGING_POINTS: + if(shiftDown || ctrlDown) { + // Edit the rotation associated with a POINT_N_ROT_TRANS, + // either within (ctrlDown) or out of (shiftDown) the plane + // of the screen. So first get the rotation to apply, in qt. + Quaternion qt; + if(ctrlDown) { + double d = mp.DistanceTo(orig.mouseOnButtonDown); + if(d < 25) { + // Don't start dragging the position about the normal + // until we're a little ways out, to get a reasonable + // reference pos + orig.mouse = mp; + break; + } + double theta = atan2(orig.mouse.y-orig.mouseOnButtonDown.y, + orig.mouse.x-orig.mouseOnButtonDown.x); + theta -= atan2(y-orig.mouseOnButtonDown.y, + x-orig.mouseOnButtonDown.x); + + Vector gn = projRight.Cross(projUp); + qt = Quaternion::From(gn, -theta); + + SS.extraLine.draw = true; + SS.extraLine.ptA = UnProjectPoint(orig.mouseOnButtonDown); + SS.extraLine.ptB = UnProjectPoint(mp); + } else { + double dx = -(x - orig.mouse.x); + double dy = -(y - orig.mouse.y); + double s = 0.3*(PI/180); // degrees per pixel + qt = Quaternion::From(projUp, -s*dx).Times( + Quaternion::From(projRight, s*dy)); + } + orig.mouse = mp; + + // Now apply this rotation to the points being dragged. + List *lhe = &(pending.points); + for(hEntity *he = lhe->First(); he; he = lhe->NextAfter(he)) { + Entity *e = SK.GetEntity(*he); + if(e->type != Entity::POINT_N_ROT_TRANS) { + if(ctrlDown) { + Vector p = e->PointGetNum(); + p = p.Minus(SS.extraLine.ptA); + p = qt.Rotate(p); + p = p.Plus(SS.extraLine.ptA); + e->PointForceTo(p); + SS.MarkGroupDirtyByEntity(e->h); + } + continue; + } + + Quaternion q = e->PointGetQuaternion(); + Vector p = e->PointGetNum(); + q = qt.Times(q); + e->PointForceQuaternionTo(q); + // Let's rotate about the selected point; so fix up the + // translation so that that point didn't move. + e->PointForceTo(p); + SS.MarkGroupDirtyByEntity(e->h); + } + } else { + List *lhe = &(pending.points); + for(hEntity *he = lhe->First(); he; he = lhe->NextAfter(he)) { + UpdateDraggedPoint(*he, x, y); + SS.MarkGroupDirtyByEntity(*he); + } + orig.mouse = mp; + } + break; + + case DRAGGING_NEW_CUBIC_POINT: { + UpdateDraggedPoint(pending.point, x, y); + HitTestMakeSelection(mp); + + hRequest hr = pending.point.request(); + if(pending.point.v == hr.entity(4).v) { + // The very first segment; dragging final point drags both + // tangent points. + Vector p0 = SK.GetEntity(hr.entity(1))->PointGetNum(), + p3 = SK.GetEntity(hr.entity(4))->PointGetNum(), + p1 = p0.ScaledBy(2.0/3).Plus(p3.ScaledBy(1.0/3)), + p2 = p0.ScaledBy(1.0/3).Plus(p3.ScaledBy(2.0/3)); + SK.GetEntity(hr.entity(1+1))->PointForceTo(p1); + SK.GetEntity(hr.entity(1+2))->PointForceTo(p2); + } else { + // A subsequent segment; dragging point drags only final + // tangent point. + int i = SK.GetEntity(hr.entity(0))->extraPoints; + Vector pn = SK.GetEntity(hr.entity(4+i))->PointGetNum(), + pnm2 = SK.GetEntity(hr.entity(2+i))->PointGetNum(), + pnm1 = (pn.Plus(pnm2)).ScaledBy(0.5); + SK.GetEntity(hr.entity(3+i))->PointForceTo(pnm1); + } + + orig.mouse = mp; + SS.MarkGroupDirtyByEntity(pending.point); + break; + } + case DRAGGING_NEW_ARC_POINT: { + UpdateDraggedPoint(pending.point, x, y); + HitTestMakeSelection(mp); + + hRequest hr = pending.point.request(); + Vector ona = SK.GetEntity(hr.entity(2))->PointGetNum(); + Vector onb = SK.GetEntity(hr.entity(3))->PointGetNum(); + Vector center = (ona.Plus(onb)).ScaledBy(0.5); + + SK.GetEntity(hr.entity(1))->PointForceTo(center); + + orig.mouse = mp; + SS.MarkGroupDirtyByEntity(pending.point); + break; + } + case DRAGGING_NEW_RADIUS: + case DRAGGING_RADIUS: { + Entity *circle = SK.GetEntity(pending.circle); + Vector center = SK.GetEntity(circle->point[0])->PointGetNum(); + Point2d c2 = ProjectPoint(center); + double r = c2.DistanceTo(mp)/scale; + SK.GetEntity(circle->distance)->DistanceForceTo(r); + + SS.MarkGroupDirtyByEntity(pending.circle); + break; + } + + case DRAGGING_NORMAL: { + Entity *normal = SK.GetEntity(pending.normal); + Vector p = SK.GetEntity(normal->point[0])->PointGetNum(); + Point2d p2 = ProjectPoint(p); + + Quaternion q = normal->NormalGetNum(); + Vector u = q.RotationU(), v = q.RotationV(); + + if(ctrlDown) { + double theta = atan2(orig.mouse.y-p2.y, orig.mouse.x-p2.x); + theta -= atan2(y-p2.y, x-p2.x); + + Vector normal = projRight.Cross(projUp); + u = u.RotatedAbout(normal, -theta); + v = v.RotatedAbout(normal, -theta); + } else { + double dx = -(x - orig.mouse.x); + double dy = -(y - orig.mouse.y); + double s = 0.3*(PI/180); // degrees per pixel + u = u.RotatedAbout(projUp, -s*dx); + u = u.RotatedAbout(projRight, s*dy); + v = v.RotatedAbout(projUp, -s*dx); + v = v.RotatedAbout(projRight, s*dy); + } + orig.mouse = mp; + normal->NormalForceTo(Quaternion::From(u, v)); + + SS.MarkGroupDirtyByEntity(pending.normal); + break; + } + + case DRAGGING_MARQUEE: + orig.mouse = mp; + InvalidateGraphics(); + break; + + default: oops(); + } + + if(pending.operation != 0 && + pending.operation != DRAGGING_CONSTRAINT && + pending.operation != DRAGGING_MARQUEE) + { + SS.GenerateAll(); + } +} + +void GraphicsWindow::ClearPending(void) { + pending.points.Clear(); + pending = {}; + SS.ScheduleShowTW(); +} + +void GraphicsWindow::MouseMiddleOrRightDown(double x, double y) { + if(GraphicsEditControlIsVisible()) return; + + orig.offset = offset; + orig.projUp = projUp; + orig.projRight = projRight; + orig.mouse.x = x; + orig.mouse.y = y; + orig.startedMoving = false; +} + +void GraphicsWindow::ContextMenuListStyles(void) { + CreateContextSubmenu(); + Style *s; + bool empty = true; + for(s = SK.style.First(); s; s = SK.style.NextAfter(s)) { + if(s->h.v < Style::FIRST_CUSTOM) continue; + + AddContextMenuItem(s->DescriptionString().c_str(), CMNU_FIRST_STYLE + s->h.v); + empty = false; + } + + if(!empty) AddContextMenuItem(NULL, CONTEXT_SEPARATOR); + + AddContextMenuItem("No Style", CMNU_NO_STYLE); + AddContextMenuItem("Newly Created Custom Style...", CMNU_NEW_CUSTOM_STYLE); +} + +void GraphicsWindow::MouseRightUp(double x, double y) { + SS.extraLine.draw = false; + InvalidateGraphics(); + + // Don't show a context menu if the user is right-clicking the toolbar, + // or if they are finishing a pan. + if(ToolbarMouseMoved((int)x, (int)y)) return; + if(orig.startedMoving) return; + + if(context.active) return; + + if(pending.operation == DRAGGING_NEW_LINE_POINT) { + if(SS.GW.pending.suggestion != SUGGESTED_NONE) { + Constraint::Constrain(SS.GW.pending.suggestion, + Entity::NO_ENTITY, Entity::NO_ENTITY, pending.request.entity(0)); + } + } + + if(pending.operation == DRAGGING_NEW_LINE_POINT || + pending.operation == DRAGGING_NEW_CUBIC_POINT) + { + // Special case; use a right click to stop drawing lines, since + // a left click would draw another one. This is quicker and more + // intuitive than hitting escape. Likewise for new cubic segments. + ClearPending(); + return; + } + + // The current mouse location + Vector v = offset.ScaledBy(-1); + v = v.Plus(projRight.ScaledBy(x/scale)); + v = v.Plus(projUp.ScaledBy(y/scale)); + + context.active = true; + + if(!hover.IsEmpty()) { + MakeSelected(&hover); + SS.ScheduleShowTW(); + } + GroupSelection(); + + bool itemsSelected = (gs.n > 0 || gs.constraints > 0); + int addAfterPoint = -1; + + if(itemsSelected) { + if(gs.stylables > 0) { + ContextMenuListStyles(); + AddContextMenuItem("Assign to Style", CONTEXT_SUBMENU); + } + if(gs.n + gs.constraints == 1) { + AddContextMenuItem("Group Info", CMNU_GROUP_INFO); + } + if(gs.n + gs.constraints == 1 && gs.stylables == 1) { + AddContextMenuItem("Style Info", CMNU_STYLE_INFO); + } + if(gs.withEndpoints > 0) { + AddContextMenuItem("Select Edge Chain", CMNU_SELECT_CHAIN); + } + if(gs.constraints == 1 && gs.n == 0) { + Constraint *c = SK.GetConstraint(gs.constraint[0]); + if(c->HasLabel() && c->type != Constraint::COMMENT) { + AddContextMenuItem("Toggle Reference Dimension", + CMNU_REFERENCE_DIM); + } + if(c->type == Constraint::ANGLE || + c->type == Constraint::EQUAL_ANGLE) + { + AddContextMenuItem("Other Supplementary Angle", + CMNU_OTHER_ANGLE); + } + } + if(gs.constraintLabels > 0 || gs.points > 0) { + AddContextMenuItem("Snap to Grid", CMNU_SNAP_TO_GRID); + } + + + if(gs.points == 1 && gs.point[0].isFromRequest()) { + Request *r = SK.GetRequest(gs.point[0].request()); + int index = r->IndexOfPoint(gs.point[0]); + if((r->type == Request::CUBIC && (index > 1 && index < r->extraPoints + 2)) || + r->type == Request::CUBIC_PERIODIC) { + AddContextMenuItem("Remove Spline Point", CMNU_REMOVE_SPLINE_PT); + } + } + if(gs.entities == 1 && gs.entity[0].isFromRequest()) { + Request *r = SK.GetRequest(gs.entity[0].request()); + if(r->type == Request::CUBIC || r->type == Request::CUBIC_PERIODIC) { + Entity *e = SK.GetEntity(gs.entity[0]); + e->GetDistance(Point2d::From(x, y)); + addAfterPoint = e->dogd.data; + if(addAfterPoint == -1) oops(); + // Skip derivative point. + if(r->type == Request::CUBIC) addAfterPoint++; + AddContextMenuItem("Add Spline Point", CMNU_ADD_SPLINE_PT); + } + } + + if(gs.points == 1) { + Entity *p = SK.GetEntity(gs.point[0]); + Constraint *c; + IdList *lc = &(SK.constraint); + for(c = lc->First(); c; c = lc->NextAfter(c)) { + if(c->type != Constraint::POINTS_COINCIDENT) continue; + if(c->ptA.v == p->h.v || c->ptB.v == p->h.v) { + break; + } + } + if(c) { + AddContextMenuItem("Delete Point-Coincident Constraint", + CMNU_DEL_COINCIDENT); + } + } + AddContextMenuItem(NULL, CONTEXT_SEPARATOR); + if(LockedInWorkplane()) { + AddContextMenuItem("Cut", CMNU_CUT_SEL); + AddContextMenuItem("Copy", CMNU_COPY_SEL); + } + } + + if((SS.clipboard.r.n > 0 || SS.clipboard.c.n > 0) && LockedInWorkplane()) { + AddContextMenuItem("Paste", CMNU_PASTE); + AddContextMenuItem("Paste Transformed...", CMNU_PASTE_XFRM); + } + + if(itemsSelected) { + AddContextMenuItem("Delete", CMNU_DELETE_SEL); + AddContextMenuItem(NULL, CONTEXT_SEPARATOR); + AddContextMenuItem("Unselect All", CMNU_UNSELECT_ALL); + } + // If only one item is selected, then it must be the one that we just + // selected from the hovered item; in which case unselect all and hovered + // are equivalent. + if(!hover.IsEmpty() && selection.n > 1) { + AddContextMenuItem("Unselect Hovered", CMNU_UNSELECT_HOVERED); + } + + int ret = ShowContextMenu(); + switch(ret) { + case CMNU_UNSELECT_ALL: + MenuEdit(MNU_UNSELECT_ALL); + break; + + case CMNU_UNSELECT_HOVERED: + if(!hover.IsEmpty()) { + MakeUnselected(&hover, true); + } + break; + + case CMNU_SELECT_CHAIN: + MenuEdit(MNU_SELECT_CHAIN); + break; + + case CMNU_CUT_SEL: + MenuClipboard(MNU_CUT); + break; + + case CMNU_COPY_SEL: + MenuClipboard(MNU_COPY); + break; + + case CMNU_PASTE: + MenuClipboard(MNU_PASTE); + break; + + case CMNU_PASTE_XFRM: + MenuClipboard(MNU_PASTE_TRANSFORM); + break; + + case CMNU_DELETE_SEL: + MenuClipboard(MNU_DELETE); + break; + + case CMNU_REFERENCE_DIM: + Constraint::MenuConstrain(MNU_REFERENCE); + break; + + case CMNU_OTHER_ANGLE: + Constraint::MenuConstrain(MNU_OTHER_ANGLE); + break; + + case CMNU_DEL_COINCIDENT: { + SS.UndoRemember(); + if(!gs.point[0].v) break; + Entity *p = SK.GetEntity(gs.point[0]); + if(!p->IsPoint()) break; + + SK.constraint.ClearTags(); + Constraint *c; + for(c = SK.constraint.First(); c; c = SK.constraint.NextAfter(c)) { + if(c->type != Constraint::POINTS_COINCIDENT) continue; + if(c->ptA.v == p->h.v || c->ptB.v == p->h.v) { + c->tag = 1; + } + } + SK.constraint.RemoveTagged(); + ClearSelection(); + break; + } + + case CMNU_SNAP_TO_GRID: + MenuEdit(MNU_SNAP_TO_GRID); + break; + + case CMNU_REMOVE_SPLINE_PT: { + hRequest hr = gs.point[0].request(); + Request *r = SK.GetRequest(hr); + + int index = r->IndexOfPoint(gs.point[0]); + if(r->extraPoints == 0) oops(); + + SS.UndoRemember(); + Entity *e = SK.GetEntity(r->h.entity(0)); + + // First, fix point-coincident constraints involving this point. + // Then, remove all other constraints, since they would otherwise + // jump to an adjacent one and mess up the bezier after generation. + FixConstraintsForPointBeingDeleted(e->point[index]); + RemoveConstraintsForPointBeingDeleted(e->point[index]); + + for(int i = index; i < MAX_POINTS_IN_ENTITY - 1; i++) { + if(e->point[i + 1].v == 0) break; + Entity *p0 = SK.GetEntity(e->point[i]); + Entity *p1 = SK.GetEntity(e->point[i + 1]); + ReplacePointInConstraints(p1->h, p0->h); + p0->PointForceTo(p1->PointGetNum()); + } + r->extraPoints--; + SS.MarkGroupDirtyByEntity(gs.point[0]); + SS.ScheduleGenerateAll(); + ClearSelection(); + break; + } + + case CMNU_ADD_SPLINE_PT: { + hRequest hr = gs.entity[0].request(); + Request *r = SK.GetRequest(hr); + + int pointCount = r->extraPoints + ((r->type == Request::CUBIC_PERIODIC) ? 3 : 4); + if(pointCount < MAX_POINTS_IN_ENTITY) { + SS.UndoRemember(); + r->extraPoints++; + SS.MarkGroupDirtyByEntity(gs.entity[0]); + SS.GenerateAll(SolveSpaceUI::GENERATE_REGEN); + + Entity *e = SK.GetEntity(r->h.entity(0)); + for(int i = MAX_POINTS_IN_ENTITY; i > addAfterPoint + 1; i--) { + Entity *p0 = SK.entity.FindByIdNoOops(e->point[i]); + if(p0 == NULL) continue; + Entity *p1 = SK.GetEntity(e->point[i - 1]); + ReplacePointInConstraints(p1->h, p0->h); + p0->PointForceTo(p1->PointGetNum()); + } + Entity *p = SK.GetEntity(e->point[addAfterPoint + 1]); + p->PointForceTo(v); + SS.MarkGroupDirtyByEntity(gs.entity[0]); + SS.ScheduleGenerateAll(); + ClearSelection(); + } else { + Error("Cannot add spline point: maximum number of points reached."); + } + break; + } + + case CMNU_GROUP_INFO: { + hGroup hg; + if(gs.entities == 1) { + hg = SK.GetEntity(gs.entity[0])->group; + } else if(gs.points == 1) { + hg = SK.GetEntity(gs.point[0])->group; + } else if(gs.constraints == 1) { + hg = SK.GetConstraint(gs.constraint[0])->group; + } else { + break; + } + ClearSelection(); + + SS.TW.GoToScreen(TextWindow::SCREEN_GROUP_INFO); + SS.TW.shown.group = hg; + SS.ScheduleShowTW(); + ForceTextWindowShown(); + break; + } + + case CMNU_STYLE_INFO: { + hStyle hs; + if(gs.entities == 1) { + hs = Style::ForEntity(gs.entity[0]); + } else if(gs.points == 1) { + hs = Style::ForEntity(gs.point[0]); + } else if(gs.constraints == 1) { + hs = SK.GetConstraint(gs.constraint[0])->GetStyle(); + } else { + break; + } + ClearSelection(); + + SS.TW.GoToScreen(TextWindow::SCREEN_STYLE_INFO); + SS.TW.shown.style = hs; + SS.ScheduleShowTW(); + ForceTextWindowShown(); + break; + } + + case CMNU_NEW_CUSTOM_STYLE: { + uint32_t v = Style::CreateCustomStyle(); + Style::AssignSelectionToStyle(v); + ForceTextWindowShown(); + break; + } + + case CMNU_NO_STYLE: + Style::AssignSelectionToStyle(0); + break; + + default: + if(ret >= CMNU_FIRST_STYLE) { + Style::AssignSelectionToStyle(ret - CMNU_FIRST_STYLE); + } else { + // otherwise it was cancelled, so do nothing + contextMenuCancelTime = GetMilliseconds(); + } + break; + } + + context.active = false; + SS.ScheduleShowTW(); +} + +hRequest GraphicsWindow::AddRequest(int type) { + return AddRequest(type, true); +} +hRequest GraphicsWindow::AddRequest(int type, bool rememberForUndo) { + if(rememberForUndo) SS.UndoRemember(); + + Request r = {}; + r.group = activeGroup; + Group *g = SK.GetGroup(activeGroup); + if(g->type == Group::DRAWING_3D || g->type == Group::DRAWING_WORKPLANE) { + r.construction = false; + } else { + r.construction = true; + } + r.workplane = ActiveWorkplane(); + r.type = type; + SK.request.AddAndAssignId(&r); + + // We must regenerate the parameters, so that the code that tries to + // place this request's entities where the mouse is can do so. But + // we mustn't try to solve until reasonable values have been supplied + // for these new parameters, or else we'll get a numerical blowup. + SS.GenerateAll(SolveSpaceUI::GENERATE_REGEN); + SS.MarkGroupDirty(r.group); + return r.h; +} + +bool GraphicsWindow::ConstrainPointByHovered(hEntity pt) { + if(!hover.entity.v) return false; + + Entity *e = SK.GetEntity(hover.entity); + if(e->IsPoint()) { + Constraint::ConstrainCoincident(e->h, pt); + return true; + } + if(e->IsCircle()) { + Constraint::Constrain(Constraint::PT_ON_CIRCLE, + pt, Entity::NO_ENTITY, e->h); + return true; + } + if(e->type == Entity::LINE_SEGMENT) { + Constraint::Constrain(Constraint::PT_ON_LINE, + pt, Entity::NO_ENTITY, e->h); + return true; + } + + return false; +} + +void GraphicsWindow::MouseLeftDown(double mx, double my) { + orig.mouseDown = true; + + if(GraphicsEditControlIsVisible()) { + orig.mouse = Point2d::From(mx, my); + orig.mouseOnButtonDown = orig.mouse; + HideGraphicsEditControl(); + return; + } + SS.TW.HideEditControl(); + + if(SS.showToolbar) { + if(ToolbarMouseDown((int)mx, (int)my)) return; + } + + // This will be clobbered by MouseMoved below. + SuggestedConstraint constraintSuggestion = SS.GW.pending.suggestion; + + // Make sure the hover is up to date. + MouseMoved(mx, my, false, false, false, false, false); + orig.mouse.x = mx; + orig.mouse.y = my; + orig.mouseOnButtonDown = orig.mouse; + + // The current mouse location + Vector v = offset.ScaledBy(-1); + v = v.Plus(projRight.ScaledBy(mx/scale)); + v = v.Plus(projUp.ScaledBy(my/scale)); + + hRequest hr = {}; + hConstraint hc = {}; + switch(pending.operation) { + case MNU_DATUM_POINT: + hr = AddRequest(Request::DATUM_POINT); + SK.GetEntity(hr.entity(0))->PointForceTo(v); + ConstrainPointByHovered(hr.entity(0)); + + ClearSuper(); + break; + + case MNU_LINE_SEGMENT: + case MNU_CONSTR_SEGMENT: + hr = AddRequest(Request::LINE_SEGMENT); + SK.GetRequest(hr)->construction = (pending.operation == MNU_CONSTR_SEGMENT); + SK.GetEntity(hr.entity(1))->PointForceTo(v); + ConstrainPointByHovered(hr.entity(1)); + + ClearSuper(); + + pending.operation = DRAGGING_NEW_LINE_POINT; + pending.request = hr; + pending.point = hr.entity(2); + pending.description = "click next point of line, or press Esc"; + SK.GetEntity(pending.point)->PointForceTo(v); + break; + + case MNU_RECTANGLE: { + if(!SS.GW.LockedInWorkplane()) { + Error("Can't draw rectangle in 3d; select a workplane first."); + ClearSuper(); + break; + } + hRequest lns[4]; + int i; + SS.UndoRemember(); + for(i = 0; i < 4; i++) { + lns[i] = AddRequest(Request::LINE_SEGMENT, false); + } + for(i = 0; i < 4; i++) { + Constraint::ConstrainCoincident( + lns[i].entity(1), lns[(i+1)%4].entity(2)); + SK.GetEntity(lns[i].entity(1))->PointForceTo(v); + SK.GetEntity(lns[i].entity(2))->PointForceTo(v); + } + for(i = 0; i < 4; i++) { + Constraint::Constrain( + (i % 2) ? Constraint::HORIZONTAL : Constraint::VERTICAL, + Entity::NO_ENTITY, Entity::NO_ENTITY, + lns[i].entity(0)); + } + ConstrainPointByHovered(lns[2].entity(1)); + + pending.operation = DRAGGING_NEW_POINT; + pending.point = lns[1].entity(2); + pending.description = "click to place other corner of rectangle"; + hr = lns[0]; + break; + } + case MNU_CIRCLE: + hr = AddRequest(Request::CIRCLE); + // Centered where we clicked + SK.GetEntity(hr.entity(1))->PointForceTo(v); + // Normal to the screen + SK.GetEntity(hr.entity(32))->NormalForceTo( + Quaternion::From(SS.GW.projRight, SS.GW.projUp)); + // Initial radius zero + SK.GetEntity(hr.entity(64))->DistanceForceTo(0); + + ConstrainPointByHovered(hr.entity(1)); + + ClearSuper(); + + pending.operation = DRAGGING_NEW_RADIUS; + pending.circle = hr.entity(0); + pending.description = "click to set radius"; + break; + + case MNU_ARC: { + if(!SS.GW.LockedInWorkplane()) { + Error("Can't draw arc in 3d; select a workplane first."); + ClearPending(); + break; + } + hr = AddRequest(Request::ARC_OF_CIRCLE); + // This fudge factor stops us from immediately failing to solve + // because of the arc's implicit (equal radius) tangent. + Vector adj = SS.GW.projRight.WithMagnitude(2/SS.GW.scale); + SK.GetEntity(hr.entity(1))->PointForceTo(v.Minus(adj)); + SK.GetEntity(hr.entity(2))->PointForceTo(v); + SK.GetEntity(hr.entity(3))->PointForceTo(v); + ConstrainPointByHovered(hr.entity(2)); + + ClearSuper(); + + pending.operation = DRAGGING_NEW_ARC_POINT; + pending.point = hr.entity(3); + pending.description = "click to place point"; + break; + } + case MNU_CUBIC: + hr = AddRequest(Request::CUBIC); + SK.GetEntity(hr.entity(1))->PointForceTo(v); + SK.GetEntity(hr.entity(2))->PointForceTo(v); + SK.GetEntity(hr.entity(3))->PointForceTo(v); + SK.GetEntity(hr.entity(4))->PointForceTo(v); + ConstrainPointByHovered(hr.entity(1)); + + ClearSuper(); + + pending.operation = DRAGGING_NEW_CUBIC_POINT; + pending.point = hr.entity(4); + pending.description = "click next point of cubic, or press Esc"; + break; + + case MNU_WORKPLANE: + if(LockedInWorkplane()) { + Error("Sketching in a workplane already; sketch in 3d before " + "creating new workplane."); + ClearSuper(); + break; + } + hr = AddRequest(Request::WORKPLANE); + SK.GetEntity(hr.entity(1))->PointForceTo(v); + SK.GetEntity(hr.entity(32))->NormalForceTo( + Quaternion::From(SS.GW.projRight, SS.GW.projUp)); + ConstrainPointByHovered(hr.entity(1)); + + ClearSuper(); + break; + + case MNU_TTF_TEXT: { + if(!SS.GW.LockedInWorkplane()) { + Error("Can't draw text in 3d; select a workplane first."); + ClearSuper(); + break; + } + hr = AddRequest(Request::TTF_TEXT); + Request *r = SK.GetRequest(hr); + r->str = "Abc"; + r->font = "arial.ttf"; + + SK.GetEntity(hr.entity(1))->PointForceTo(v); + SK.GetEntity(hr.entity(2))->PointForceTo(v); + + pending.operation = DRAGGING_NEW_POINT; + pending.point = hr.entity(2); + pending.description = "click to place bottom left of text"; + break; + } + + case MNU_COMMENT: { + ClearSuper(); + Constraint c = {}; + c.group = SS.GW.activeGroup; + c.workplane = SS.GW.ActiveWorkplane(); + c.type = Constraint::COMMENT; + c.disp.offset = v; + c.comment = "NEW COMMENT -- DOUBLE-CLICK TO EDIT"; + hc = Constraint::AddConstraint(&c); + break; + } + + case DRAGGING_RADIUS: + case DRAGGING_NEW_POINT: + // The MouseMoved event has already dragged it as desired. + ClearPending(); + break; + + case DRAGGING_NEW_ARC_POINT: + ConstrainPointByHovered(pending.point); + ClearPending(); + break; + + case DRAGGING_NEW_CUBIC_POINT: { + hRequest hr = pending.point.request(); + Request *r = SK.GetRequest(hr); + + if(hover.entity.v == hr.entity(1).v && r->extraPoints >= 2) { + // They want the endpoints coincident, which means a periodic + // spline instead. + r->type = Request::CUBIC_PERIODIC; + // Remove the off-curve control points, which are no longer + // needed here; so move [2,ep+1] down, skipping first pt. + int i; + for(i = 2; i <= r->extraPoints+1; i++) { + SK.GetEntity(hr.entity((i-1)+1))->PointForceTo( + SK.GetEntity(hr.entity(i+1))->PointGetNum()); + } + // and move ep+3 down by two, skipping both + SK.GetEntity(hr.entity((r->extraPoints+1)+1))->PointForceTo( + SK.GetEntity(hr.entity((r->extraPoints+3)+1))->PointGetNum()); + r->extraPoints -= 2; + // And we're done. + SS.MarkGroupDirty(r->group); + SS.ScheduleGenerateAll(); + ClearPending(); + break; + } + + if(ConstrainPointByHovered(pending.point)) { + ClearPending(); + break; + } + + Entity e; + if(r->extraPoints >= (int)arraylen(e.point) - 4) { + ClearPending(); + break; + } + + (SK.GetRequest(hr)->extraPoints)++; + SS.GenerateAll(SolveSpaceUI::GENERATE_REGEN); + + int ep = r->extraPoints; + Vector last = SK.GetEntity(hr.entity(3+ep))->PointGetNum(); + + SK.GetEntity(hr.entity(2+ep))->PointForceTo(last); + SK.GetEntity(hr.entity(3+ep))->PointForceTo(v); + SK.GetEntity(hr.entity(4+ep))->PointForceTo(v); + pending.point = hr.entity(4+ep); + break; + } + + case DRAGGING_NEW_LINE_POINT: { + // Constrain the line segment horizontal or vertical if close enough + if(constraintSuggestion != SUGGESTED_NONE) { + Constraint::Constrain(constraintSuggestion, + Entity::NO_ENTITY, Entity::NO_ENTITY, pending.request.entity(0)); + } + + if(hover.entity.v) { + Entity *e = SK.GetEntity(hover.entity); + if(e->IsPoint()) { + hRequest hrl = pending.point.request(); + Entity *sp = SK.GetEntity(hrl.entity(1)); + if(( e->PointGetNum()).Equals( + (sp->PointGetNum()))) + { + // If we constrained by the hovered point, then we + // would create a zero-length line segment. That's + // not good, so just stop drawing. + ClearPending(); + break; + } + } + } + + if(ConstrainPointByHovered(pending.point)) { + ClearPending(); + break; + } + + // Create a new line segment, so that we continue drawing. + hRequest hr = AddRequest(Request::LINE_SEGMENT); + SK.GetRequest(hr)->construction = SK.GetRequest(pending.request)->construction; + SK.GetEntity(hr.entity(1))->PointForceTo(v); + // Displace the second point of the new line segment slightly, + // to avoid creating zero-length edge warnings. + SK.GetEntity(hr.entity(2))->PointForceTo( + v.Plus(projRight.ScaledBy(0.5/scale))); + + // Constrain the line segments to share an endpoint + Constraint::ConstrainCoincident(pending.point, hr.entity(1)); + + // And drag an endpoint of the new line segment + pending.operation = DRAGGING_NEW_LINE_POINT; + pending.request = hr; + pending.point = hr.entity(2); + pending.description = "click next point of line, or press Esc"; + + break; + } + + case 0: + default: + ClearPending(); + if(!hover.IsEmpty()) { + hoverWasSelectedOnMousedown = IsSelected(&hover); + MakeSelected(&hover); + } + break; + } + + // Activate group with newly created request/constraint + Group *g = NULL; + if(hr.v != 0) { + Request *req = SK.GetRequest(hr); + g = SK.GetGroup(req->group); + } + if(hc.v != 0) { + Constraint *c = SK.GetConstraint(hc); + g = SK.GetGroup(c->group); + } + if(g != NULL) { + g->visible = true; + } + + SS.ScheduleShowTW(); + InvalidateGraphics(); +} + +void GraphicsWindow::MouseLeftUp(double mx, double my) { + orig.mouseDown = false; + hoverWasSelectedOnMousedown = false; + + switch(pending.operation) { + case DRAGGING_POINTS: + SS.extraLine.draw = false; + // fall through + case DRAGGING_CONSTRAINT: + case DRAGGING_NORMAL: + case DRAGGING_RADIUS: + ClearPending(); + InvalidateGraphics(); + break; + + case DRAGGING_MARQUEE: + SelectByMarquee(); + ClearPending(); + InvalidateGraphics(); + break; + + case 0: + // We need to clear the selection here, and not in the mouse down + // event, since a mouse down without anything hovered could also + // be the start of marquee selection. But don't do that on the + // left click to cancel a context menu. The time delay is an ugly + // hack. + if(hover.IsEmpty() && + (contextMenuCancelTime == 0 || + (GetMilliseconds() - contextMenuCancelTime) > 200)) + { + ClearSelection(); + } + break; + + default: + break; // do nothing + } +} + +void GraphicsWindow::MouseLeftDoubleClick(double mx, double my) { + if(GraphicsEditControlIsVisible()) return; + SS.TW.HideEditControl(); + + if(hover.constraint.v) { + constraintBeingEdited = hover.constraint; + ClearSuper(); + + Constraint *c = SK.GetConstraint(constraintBeingEdited); + if(!c->HasLabel()) { + // Not meaningful to edit a constraint without a dimension + return; + } + if(c->reference) { + // Not meaningful to edit a reference dimension + return; + } + + Vector p3 = c->GetLabelPos(); + Point2d p2 = ProjectPoint(p3); + + std::string editValue; + int editMinWidthChar; + switch(c->type) { + case Constraint::COMMENT: + editValue = c->comment; + editMinWidthChar = 30; + break; + + case Constraint::ANGLE: + case Constraint::LENGTH_RATIO: + editValue = ssprintf("%.3f", c->valA); + editMinWidthChar = 5; + break; + + default: { + double v = fabs(c->valA); + + // If displayed as radius, also edit as radius. + if(c->type == Constraint::DIAMETER && c->other) + v /= 2; + + std::string def = SS.MmToString(v); + double eps = 1e-12; + if(fabs(SS.StringToMm(def) - v) < eps) { + // Show value with default number of digits after decimal, + // which is at least enough to represent it exactly. + editValue = def; + } else { + // Show value with as many digits after decimal as + // required to represent it exactly, up to 10. + v /= SS.MmPerUnit(); + int i; + for(i = 0; i <= 10; i++) { + editValue = ssprintf("%.*f", i, v); + if(fabs(std::stod(editValue) - v) < eps) break; + } + } + editMinWidthChar = 5; + break; + } + } + hStyle hs = c->disp.style; + if(hs.v == 0) hs.v = Style::CONSTRAINT; + ShowGraphicsEditControl((int)p2.x, (int)p2.y, + ssglStrFontSize(Style::TextHeight(hs)) * scale, + editMinWidthChar, editValue); + } +} + +void GraphicsWindow::EditControlDone(const char *s) { + HideGraphicsEditControl(); + Constraint *c = SK.GetConstraint(constraintBeingEdited); + + if(c->type == Constraint::COMMENT) { + SS.UndoRemember(); + c->comment = s; + return; + } + + Expr *e = Expr::From(s, true); + if(e) { + SS.UndoRemember(); + + switch(c->type) { + case Constraint::PROJ_PT_DISTANCE: + case Constraint::PT_LINE_DISTANCE: + case Constraint::PT_FACE_DISTANCE: + case Constraint::PT_PLANE_DISTANCE: + case Constraint::LENGTH_DIFFERENCE: { + // The sign is not displayed to the user, but this is a signed + // distance internally. To flip the sign, the user enters a + // negative distance. + bool wasNeg = (c->valA < 0); + if(wasNeg) { + c->valA = -SS.ExprToMm(e); + } else { + c->valA = SS.ExprToMm(e); + } + break; + } + case Constraint::ANGLE: + case Constraint::LENGTH_RATIO: + // These don't get the units conversion for distance, and + // they're always positive + c->valA = fabs(e->Eval()); + break; + + case Constraint::DIAMETER: + c->valA = fabs(SS.ExprToMm(e)); + + // If displayed and edited as radius, convert back + // to diameter + if(c->other) + c->valA *= 2; + break; + + default: + // These are always positive, and they get the units conversion. + c->valA = fabs(SS.ExprToMm(e)); + break; + } + SS.MarkGroupDirty(c->group); + SS.GenerateAll(); + } +} + +bool GraphicsWindow::KeyDown(int c) { + if(c == '\b') { + // Treat backspace identically to escape. + MenuEdit(MNU_UNSELECT_ALL); + return true; + } + + return false; +} + +void GraphicsWindow::MouseScroll(double x, double y, int delta) { + double offsetRight = offset.Dot(projRight); + double offsetUp = offset.Dot(projUp); + + double righti = x/scale - offsetRight; + double upi = y/scale - offsetUp; + + if(delta > 0) { + scale *= 1.2; + } else if(delta < 0) { + scale /= 1.2; + } else return; + + double rightf = x/scale - offsetRight; + double upf = y/scale - offsetUp; + + offset = offset.Plus(projRight.ScaledBy(rightf - righti)); + offset = offset.Plus(projUp.ScaledBy(upf - upi)); + + if(SS.TW.shown.screen == TextWindow::SCREEN_EDIT_VIEW) { + if(havePainted) { + SS.ScheduleShowTW(); + } + } + havePainted = false; + InvalidateGraphics(); +} + +void GraphicsWindow::MouseLeave(void) { + // Un-hover everything when the mouse leaves our window, unless there's + // currently a context menu shown. + if(!context.active) { + hover.Clear(); + toolbarTooltipped = 0; + toolbarHovered = 0; + PaintGraphics(); + } + SS.extraLine.draw = false; +} + +void GraphicsWindow::SpaceNavigatorMoved(double tx, double ty, double tz, + double rx, double ry, double rz, + bool shiftDown) +{ + if(!havePainted) return; + Vector out = projRight.Cross(projUp); + + // rotation vector is axis of rotation, and its magnitude is angle + Vector aa = Vector::From(rx, ry, rz); + // but it's given with respect to screen projection frame + aa = aa.ScaleOutOfCsys(projRight, projUp, out); + double aam = aa.Magnitude(); + if(aam > 0.0) aa = aa.WithMagnitude(1); + + // This can either transform our view, or transform a linked part. + GroupSelection(); + Entity *e = NULL; + Group *g = NULL; + if(gs.points == 1 && gs.n == 1) e = SK.GetEntity(gs.point [0]); + if(gs.entities == 1 && gs.n == 1) e = SK.GetEntity(gs.entity[0]); + if(e) g = SK.GetGroup(e->group); + if(g && g->type == Group::LINKED && !shiftDown) { + // Apply the transformation to a linked part. Gain down the Z + // axis, since it's hard to see what you're doing on that one since + // it's normal to the screen. + Vector t = projRight.ScaledBy(tx/scale).Plus( + projUp .ScaledBy(ty/scale).Plus( + out .ScaledBy(0.1*tz/scale))); + Quaternion q = Quaternion::From(aa, aam); + + // If we go five seconds without SpaceNavigator input, or if we've + // switched groups, then consider that a new action and save an undo + // point. + int64_t now = GetMilliseconds(); + if(now - lastSpaceNavigatorTime > 5000 || + lastSpaceNavigatorGroup.v != g->h.v) + { + SS.UndoRemember(); + } + + g->TransformImportedBy(t, q); + + lastSpaceNavigatorTime = now; + lastSpaceNavigatorGroup = g->h; + SS.MarkGroupDirty(g->h); + SS.ScheduleGenerateAll(); + } else { + // Apply the transformation to the view of the everything. The + // x and y components are translation; but z component is scale, + // not translation, or else it would do nothing in a parallel + // projection + offset = offset.Plus(projRight.ScaledBy(tx/scale)); + offset = offset.Plus(projUp.ScaledBy(ty/scale)); + scale *= exp(0.001*tz); + + if(aam > 0.0) { + projRight = projRight.RotatedAbout(aa, -aam); + projUp = projUp. RotatedAbout(aa, -aam); + NormalizeProjectionVectors(); + } + } + + havePainted = false; + InvalidateGraphics(); +} + +void GraphicsWindow::SpaceNavigatorButtonUp(void) { + ZoomToFit(/*includingInvisibles=*/false, /*useSelection=*/true); + InvalidateGraphics(); +} + diff --git a/src/polygon.cpp b/src/polygon.cpp new file mode 100644 index 0000000..eae40fe --- /dev/null +++ b/src/polygon.cpp @@ -0,0 +1,865 @@ +//----------------------------------------------------------------------------- +// Operations on polygons (planar, of line segment edges). +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +Vector STriangle::Normal(void) { + Vector ab = b.Minus(a), bc = c.Minus(b); + return ab.Cross(bc); +} + +double STriangle::MinAltitude(void) { + double altA = a.DistanceToLine(b, c.Minus(b)), + altB = b.DistanceToLine(c, a.Minus(c)), + altC = c.DistanceToLine(a, b.Minus(a)); + + return min(altA, min(altB, altC)); +} + +bool STriangle::ContainsPoint(Vector p) { + Vector n = Normal(); + if(MinAltitude() < LENGTH_EPS) { + // shouldn't happen; zero-area triangle + return false; + } + return ContainsPointProjd(n.WithMagnitude(1), p); +} + +bool STriangle::ContainsPointProjd(Vector n, Vector p) { + Vector ab = b.Minus(a), bc = c.Minus(b), ca = a.Minus(c); + + Vector no_ab = n.Cross(ab); + if(no_ab.Dot(p) < no_ab.Dot(a) - LENGTH_EPS) return false; + + Vector no_bc = n.Cross(bc); + if(no_bc.Dot(p) < no_bc.Dot(b) - LENGTH_EPS) return false; + + Vector no_ca = n.Cross(ca); + if(no_ca.Dot(p) < no_ca.Dot(c) - LENGTH_EPS) return false; + + return true; +} + +void STriangle::FlipNormal(void) { + swap(a, b); + swap(an, bn); +} + +STriangle STriangle::From(STriMeta meta, Vector a, Vector b, Vector c) { + STriangle tr = {}; + tr.meta = meta; + tr.a = a; + tr.b = b; + tr.c = c; + return tr; +} + +SEdge SEdge::From(Vector a, Vector b) { + SEdge se = {}; + se.a = a; + se.b = b; + return se; +} + +bool SEdge::EdgeCrosses(Vector ea, Vector eb, Vector *ppi, SPointList *spl) { + Vector d = eb.Minus(ea); + double t_eps = LENGTH_EPS/d.Magnitude(); + + double t, tthis; + bool skew; + Vector pi; + bool inOrEdge0, inOrEdge1; + + Vector dthis = b.Minus(a); + double tthis_eps = LENGTH_EPS/dthis.Magnitude(); + + if((ea.Equals(a) && eb.Equals(b)) || + (eb.Equals(a) && ea.Equals(b))) + { + if(ppi) *ppi = a; + if(spl) spl->Add(a); + return true; + } + + // Can't just test if distance between d and a equals distance between d and b; + // they could be on opposite sides, since we don't have the sign. + double m = sqrt(d.Magnitude()*dthis.Magnitude()); + if(sqrt(fabs(d.Dot(dthis))) > (m - LENGTH_EPS)) { + // The edges are parallel. + if(fabs(a.DistanceToLine(ea, d)) > LENGTH_EPS) { + // and not coincident, so can't be interesecting + return false; + } + // The edges are coincident. Make sure that neither endpoint lies + // on the other + bool inters = false; + double t; + t = a.Minus(ea).DivPivoting(d); + if(t > t_eps && t < (1 - t_eps)) inters = true; + t = b.Minus(ea).DivPivoting(d); + if(t > t_eps && t < (1 - t_eps)) inters = true; + t = ea.Minus(a).DivPivoting(dthis); + if(t > tthis_eps && t < (1 - tthis_eps)) inters = true; + t = eb.Minus(a).DivPivoting(dthis); + if(t > tthis_eps && t < (1 - tthis_eps)) inters = true; + + if(inters) { + if(ppi) *ppi = a; + if(spl) spl->Add(a); + return true; + } else { + // So coincident but disjoint, okay. + return false; + } + } + + // Lines are not parallel, so look for an intersection. + pi = Vector::AtIntersectionOfLines(ea, eb, a, b, + &skew, + &t, &tthis); + if(skew) return false; + + inOrEdge0 = (t > -t_eps) && (t < (1 + t_eps)); + inOrEdge1 = (tthis > -tthis_eps) && (tthis < (1 + tthis_eps)); + + if(inOrEdge0 && inOrEdge1) { + if(a.Equals(ea) || b.Equals(ea) || + a.Equals(eb) || b.Equals(eb)) + { + // Not an intersection if we share an endpoint with an edge + return false; + } + // But it's an intersection if a vertex of one edge lies on the + // inside of the other (or if they cross away from either's + // vertex). + if(ppi) *ppi = pi; + if(spl) spl->Add(pi); + return true; + } + return false; +} + +void SEdgeList::Clear(void) { + l.Clear(); +} + +void SEdgeList::AddEdge(Vector a, Vector b, int auxA, int auxB) { + SEdge e = {}; + e.a = a; + e.b = b; + e.auxA = auxA; + e.auxB = auxB; + l.Add(&e); +} + +bool SEdgeList::AssembleContour(Vector first, Vector last, SContour *dest, + SEdge *errorAt, bool keepDir) +{ + int i; + + dest->AddPoint(first); + dest->AddPoint(last); + + do { + for(i = 0; i < l.n; i++) { + SEdge *se = &(l.elem[i]); + if(se->tag) continue; + + if(se->a.Equals(last)) { + dest->AddPoint(se->b); + last = se->b; + se->tag = 1; + break; + } + // Don't allow backwards edges if keepDir is true. + if(!keepDir && se->b.Equals(last)) { + dest->AddPoint(se->a); + last = se->a; + se->tag = 1; + break; + } + } + if(i >= l.n) { + // Couldn't assemble a closed contour; mark where. + if(errorAt) { + errorAt->a = first; + errorAt->b = last; + } + return false; + } + + } while(!last.Equals(first)); + + return true; +} + +bool SEdgeList::AssemblePolygon(SPolygon *dest, SEdge *errorAt, bool keepDir) { + dest->Clear(); + + bool allClosed = true; + for(;;) { + Vector first = Vector::From(0, 0, 0); + Vector last = Vector::From(0, 0, 0); + int i; + for(i = 0; i < l.n; i++) { + if(!l.elem[i].tag) { + first = l.elem[i].a; + last = l.elem[i].b; + l.elem[i].tag = 1; + break; + } + } + if(i >= l.n) { + return allClosed; + } + + // Create a new empty contour in our polygon, and finish assembling + // into that contour. + dest->AddEmptyContour(); + if(!AssembleContour(first, last, &(dest->l.elem[dest->l.n-1]), + errorAt, keepDir)) + { + allClosed = false; + } + // But continue assembling, even if some of the contours are open + } +} + +//----------------------------------------------------------------------------- +// Test if the specified edge crosses any of the edges in our list. Two edges +// are not considered to cross if they share an endpoint (within LENGTH_EPS), +// but they are considered to cross if they are coincident and overlapping. +// If pi is not NULL, then a crossing is returned in that. +//----------------------------------------------------------------------------- +int SEdgeList::AnyEdgeCrossings(Vector a, Vector b, + Vector *ppi, SPointList *spl) +{ + int cnt = 0; + SEdge *se; + for(se = l.First(); se; se = l.NextAfter(se)) { + if(se->EdgeCrosses(a, b, ppi, spl)) { + cnt++; + } + } + return cnt; +} + +//----------------------------------------------------------------------------- +// Returns true if the intersecting edge list contains an edge that shares +// an endpoint with one of our edges. +//----------------------------------------------------------------------------- +bool SEdgeList::ContainsEdgeFrom(SEdgeList *sel) { + SEdge *se; + for(se = l.First(); se; se = l.NextAfter(se)) { + if(sel->ContainsEdge(se)) return true; + } + return false; +} +bool SEdgeList::ContainsEdge(SEdge *set) { + SEdge *se; + for(se = l.First(); se; se = l.NextAfter(se)) { + if((se->a).Equals(set->a) && (se->b).Equals(set->b)) return true; + if((se->b).Equals(set->a) && (se->a).Equals(set->b)) return true; + } + return false; +} + +//----------------------------------------------------------------------------- +// Remove unnecessary edges: if two are anti-parallel then remove both, and if +// two are parallel then remove one. +//----------------------------------------------------------------------------- +void SEdgeList::CullExtraneousEdges(void) { + l.ClearTags(); + int i, j; + for(i = 0; i < l.n; i++) { + SEdge *se = &(l.elem[i]); + for(j = i+1; j < l.n; j++) { + SEdge *set = &(l.elem[j]); + if((set->a).Equals(se->a) && (set->b).Equals(se->b)) { + // Two parallel edges exist; so keep only the first one. + set->tag = 1; + } + if((set->a).Equals(se->b) && (set->b).Equals(se->a)) { + // Two anti-parallel edges exist; so keep neither. + se->tag = 1; + set->tag = 1; + } + } + } + l.RemoveTagged(); +} + +//----------------------------------------------------------------------------- +// Make a kd-tree of edges. This is used for O(log(n)) implementations of stuff +// that would naively be O(n). +//----------------------------------------------------------------------------- +SKdNodeEdges *SKdNodeEdges::Alloc(void) { + SKdNodeEdges *ne = (SKdNodeEdges *)AllocTemporary(sizeof(SKdNodeEdges)); + *ne = {}; + return ne; +} +SEdgeLl *SEdgeLl::Alloc(void) { + SEdgeLl *sell = (SEdgeLl *)AllocTemporary(sizeof(SEdgeLl)); + *sell = {}; + return sell; +} +SKdNodeEdges *SKdNodeEdges::From(SEdgeList *sel) { + SEdgeLl *sell = NULL; + SEdge *se; + for(se = sel->l.First(); se; se = sel->l.NextAfter(se)) { + SEdgeLl *n = SEdgeLl::Alloc(); + n->se = se; + n->next = sell; + sell = n; + } + return SKdNodeEdges::From(sell); +} +SKdNodeEdges *SKdNodeEdges::From(SEdgeLl *sell) { + SKdNodeEdges *n = SKdNodeEdges::Alloc(); + + // Compute the midpoints (just mean, though median would be better) of + // each component. + Vector ptAve = Vector::From(0, 0, 0); + SEdgeLl *flip; + int totaln = 0; + for(flip = sell; flip; flip = flip->next) { + ptAve = ptAve.Plus(flip->se->a); + ptAve = ptAve.Plus(flip->se->b); + totaln++; + } + ptAve = ptAve.ScaledBy(1.0 / (2*totaln)); + + // For each component, see how it splits. + int ltln[3] = { 0, 0, 0 }, gtln[3] = { 0, 0, 0 }; + double badness[3]; + for(flip = sell; flip; flip = flip->next) { + for(int i = 0; i < 3; i++) { + if(flip->se->a.Element(i) < ptAve.Element(i) + KDTREE_EPS || + flip->se->b.Element(i) < ptAve.Element(i) + KDTREE_EPS) + { + ltln[i]++; + } + if(flip->se->a.Element(i) > ptAve.Element(i) - KDTREE_EPS || + flip->se->b.Element(i) > ptAve.Element(i) - KDTREE_EPS) + { + gtln[i]++; + } + } + } + for(int i = 0; i < 3; i++) { + badness[i] = pow((double)ltln[i], 4) + pow((double)gtln[i], 4); + } + + // Choose the least bad coordinate to split along. + if(badness[0] < badness[1] && badness[0] < badness[2]) { + n->which = 0; + } else if(badness[1] < badness[2]) { + n->which = 1; + } else { + n->which = 2; + } + n->c = ptAve.Element(n->which); + + if(totaln < 3 || totaln == gtln[n->which] || totaln == ltln[n->which]) { + n->edges = sell; + // and we're a leaf node + return n; + } + + // Sort the edges according to which side(s) of the split plane they're on. + SEdgeLl *gtl = NULL, *ltl = NULL; + for(flip = sell; flip; flip = flip->next) { + if(flip->se->a.Element(n->which) < n->c + KDTREE_EPS || + flip->se->b.Element(n->which) < n->c + KDTREE_EPS) + { + SEdgeLl *selln = SEdgeLl::Alloc(); + selln->se = flip->se; + selln->next = ltl; + ltl = selln; + } + if(flip->se->a.Element(n->which) > n->c - KDTREE_EPS || + flip->se->b.Element(n->which) > n->c - KDTREE_EPS) + { + SEdgeLl *selln = SEdgeLl::Alloc(); + selln->se = flip->se; + selln->next = gtl; + gtl = selln; + } + } + + n->lt = SKdNodeEdges::From(ltl); + n->gt = SKdNodeEdges::From(gtl); + return n; +} + +int SKdNodeEdges::AnyEdgeCrossings(Vector a, Vector b, int cnt, + Vector *pi, SPointList *spl) +{ + int inters = 0; + if(gt && lt) { + if(a.Element(which) < c + KDTREE_EPS || + b.Element(which) < c + KDTREE_EPS) + { + inters += lt->AnyEdgeCrossings(a, b, cnt, pi, spl); + } + if(a.Element(which) > c - KDTREE_EPS || + b.Element(which) > c - KDTREE_EPS) + { + inters += gt->AnyEdgeCrossings(a, b, cnt, pi, spl); + } + } else { + SEdgeLl *sell; + for(sell = edges; sell; sell = sell->next) { + SEdge *se = sell->se; + if(se->tag == cnt) continue; + if(se->EdgeCrosses(a, b, pi, spl)) { + inters++; + } + se->tag = cnt; + } + } + return inters; +} + +//----------------------------------------------------------------------------- +// We have an edge list that contains only collinear edges, maybe with more +// splits than necessary. Merge any collinear segments that join. +//----------------------------------------------------------------------------- +static Vector LineStart, LineDirection; +static int ByTAlongLine(const void *av, const void *bv) +{ + SEdge *a = (SEdge *)av, + *b = (SEdge *)bv; + + double ta = (a->a.Minus(LineStart)).DivPivoting(LineDirection), + tb = (b->a.Minus(LineStart)).DivPivoting(LineDirection); + + return (ta > tb) ? 1 : -1; +} +void SEdgeList::MergeCollinearSegments(Vector a, Vector b) { + LineStart = a; + LineDirection = b.Minus(a); + qsort(l.elem, l.n, sizeof(l.elem[0]), ByTAlongLine); + + l.ClearTags(); + int i; + for(i = 1; i < l.n; i++) { + SEdge *prev = &(l.elem[i-1]), + *now = &(l.elem[i]); + + if((prev->b).Equals(now->a) && prev->auxA == now->auxA) { + // The previous segment joins up to us; so merge it into us. + prev->tag = 1; + now->a = prev->a; + } + } + l.RemoveTagged(); +} + +void SPointList::Clear(void) { + l.Clear(); +} + +bool SPointList::ContainsPoint(Vector pt) { + return (IndexForPoint(pt) >= 0); +} + +int SPointList::IndexForPoint(Vector pt) { + int i; + for(i = 0; i < l.n; i++) { + SPoint *p = &(l.elem[i]); + if(pt.Equals(p->p)) { + return i; + } + } + // Not found, so return negative to indicate that. + return -1; +} + +void SPointList::IncrementTagFor(Vector pt) { + SPoint *p; + for(p = l.First(); p; p = l.NextAfter(p)) { + if(pt.Equals(p->p)) { + (p->tag)++; + return; + } + } + SPoint pa; + pa.p = pt; + pa.tag = 1; + l.Add(&pa); +} + +void SPointList::Add(Vector pt) { + SPoint p = {}; + p.p = pt; + l.Add(&p); +} + +void SContour::AddPoint(Vector p) { + SPoint sp; + sp.tag = 0; + sp.p = p; + + l.Add(&sp); +} + +void SContour::MakeEdgesInto(SEdgeList *el) { + int i; + for(i = 0; i < (l.n - 1); i++) { + el->AddEdge(l.elem[i].p, l.elem[i+1].p); + } +} + +void SContour::CopyInto(SContour *dest) { + SPoint *sp; + for(sp = l.First(); sp; sp = l.NextAfter(sp)) { + dest->AddPoint(sp->p); + } +} + +void SContour::FindPointWithMinX(void) { + SPoint *sp; + xminPt = Vector::From(1e10, 1e10, 1e10); + for(sp = l.First(); sp; sp = l.NextAfter(sp)) { + if(sp->p.x < xminPt.x) { + xminPt = sp->p; + } + } +} + +Vector SContour::ComputeNormal(void) { + Vector n = Vector::From(0, 0, 0); + + for(int i = 0; i < l.n - 2; i++) { + Vector u = (l.elem[i+1].p).Minus(l.elem[i+0].p).WithMagnitude(1); + Vector v = (l.elem[i+2].p).Minus(l.elem[i+1].p).WithMagnitude(1); + Vector nt = u.Cross(v); + if(nt.Magnitude() > n.Magnitude()) { + n = nt; + } + } + return n.WithMagnitude(1); +} + +Vector SContour::AnyEdgeMidpoint(void) { + if(l.n < 2) oops(); + return ((l.elem[0].p).Plus(l.elem[1].p)).ScaledBy(0.5); +} + +bool SContour::IsClockwiseProjdToNormal(Vector n) { + // Degenerate things might happen as we draw; doesn't really matter + // what we do then. + if(n.Magnitude() < 0.01) return true; + + return (SignedAreaProjdToNormal(n) < 0); +} + +double SContour::SignedAreaProjdToNormal(Vector n) { + // An arbitrary 2d coordinate system that has n as its normal + Vector u = n.Normal(0); + Vector v = n.Normal(1); + + double area = 0; + for(int i = 0; i < (l.n - 1); i++) { + double u0 = (l.elem[i ].p).Dot(u); + double v0 = (l.elem[i ].p).Dot(v); + double u1 = (l.elem[i+1].p).Dot(u); + double v1 = (l.elem[i+1].p).Dot(v); + + area += ((v0 + v1)/2)*(u1 - u0); + } + return area; +} + +bool SContour::ContainsPointProjdToNormal(Vector n, Vector p) { + Vector u = n.Normal(0); + Vector v = n.Normal(1); + + double up = p.Dot(u); + double vp = p.Dot(v); + + bool inside = false; + for(int i = 0; i < (l.n - 1); i++) { + double ua = (l.elem[i ].p).Dot(u); + double va = (l.elem[i ].p).Dot(v); + // The curve needs to be exactly closed; approximation is death. + double ub = (l.elem[(i+1)%(l.n-1)].p).Dot(u); + double vb = (l.elem[(i+1)%(l.n-1)].p).Dot(v); + + if ((((va <= vp) && (vp < vb)) || + ((vb <= vp) && (vp < va))) && + (up < (ub - ua) * (vp - va) / (vb - va) + ua)) + { + inside = !inside; + } + } + + return inside; +} + +void SContour::Reverse(void) { + l.Reverse(); +} + + +void SPolygon::Clear(void) { + int i; + for(i = 0; i < l.n; i++) { + (l.elem[i]).l.Clear(); + } + l.Clear(); +} + +void SPolygon::AddEmptyContour(void) { + SContour c = {}; + l.Add(&c); +} + +void SPolygon::MakeEdgesInto(SEdgeList *el) { + int i; + for(i = 0; i < l.n; i++) { + (l.elem[i]).MakeEdgesInto(el); + } +} + +Vector SPolygon::ComputeNormal(void) { + if(l.n < 1) return Vector::From(0, 0, 0); + return (l.elem[0]).ComputeNormal(); +} + +double SPolygon::SignedArea(void) { + SContour *sc; + double area = 0; + // This returns the true area only if the contours are all oriented + // correctly, with the holes backwards from the outer contours. + for(sc = l.First(); sc; sc = l.NextAfter(sc)) { + area += sc->SignedAreaProjdToNormal(normal); + } + return area; +} + +bool SPolygon::ContainsPoint(Vector p) { + return (WindingNumberForPoint(p) % 2) == 1; +} + +int SPolygon::WindingNumberForPoint(Vector p) { + int winding = 0; + int i; + for(i = 0; i < l.n; i++) { + SContour *sc = &(l.elem[i]); + if(sc->ContainsPointProjdToNormal(normal, p)) { + winding++; + } + } + return winding; +} + +void SPolygon::FixContourDirections(void) { + // At output, the contour's tag will be 1 if we reversed it, else 0. + l.ClearTags(); + + // Outside curve looks counterclockwise, projected against our normal. + int i, j; + for(i = 0; i < l.n; i++) { + SContour *sc = &(l.elem[i]); + if(sc->l.n < 2) continue; + // The contours may not intersect, but they may share vertices; so + // testing a vertex for point-in-polygon may fail, but the midpoint + // of an edge is okay. + Vector pt = (((sc->l.elem[0]).p).Plus(sc->l.elem[1].p)).ScaledBy(0.5); + + sc->timesEnclosed = 0; + bool outer = true; + for(j = 0; j < l.n; j++) { + if(i == j) continue; + SContour *sct = &(l.elem[j]); + if(sct->ContainsPointProjdToNormal(normal, pt)) { + outer = !outer; + (sc->timesEnclosed)++; + } + } + + bool clockwise = sc->IsClockwiseProjdToNormal(normal); + if((clockwise && outer) || (!clockwise && !outer)) { + sc->Reverse(); + sc->tag = 1; + } + } +} + +bool SPolygon::IsEmpty(void) { + if(l.n == 0 || l.elem[0].l.n == 0) return true; + return false; +} + +Vector SPolygon::AnyPoint(void) { + if(IsEmpty()) oops(); + return l.elem[0].l.elem[0].p; +} + +bool SPolygon::SelfIntersecting(Vector *intersectsAt) { + SEdgeList el = {}; + MakeEdgesInto(&el); + SKdNodeEdges *kdtree = SKdNodeEdges::From(&el); + + int cnt = 1; + el.l.ClearTags(); + + bool ret = false; + SEdge *se; + for(se = el.l.First(); se; se = el.l.NextAfter(se)) { + int inters = kdtree->AnyEdgeCrossings(se->a, se->b, cnt, intersectsAt); + if(inters != 1) { + ret = true; + break; + } + cnt++; + } + + el.Clear(); + return ret; +} + +//----------------------------------------------------------------------------- +// Low-quality routines to cutter radius compensate a polygon. Assumes the +// polygon is in the xy plane, and the contours all go in the right direction +// with respect to normal (0, 0, -1). +//----------------------------------------------------------------------------- +void SPolygon::OffsetInto(SPolygon *dest, double r) { + int i; + dest->Clear(); + for(i = 0; i < l.n; i++) { + SContour *sc = &(l.elem[i]); + dest->AddEmptyContour(); + sc->OffsetInto(&(dest->l.elem[dest->l.n-1]), r); + } +} +//----------------------------------------------------------------------------- +// Calculate the intersection point of two lines. Returns true for success, +// false if they're parallel. +//----------------------------------------------------------------------------- +static bool IntersectionOfLines(double x0A, double y0A, double dxA, double dyA, + double x0B, double y0B, double dxB, double dyB, + double *xi, double *yi) +{ + double A[2][2]; + double b[2]; + + // The line is given to us in the form: + // (x(t), y(t)) = (x0, y0) + t*(dx, dy) + // so first rewrite it as + // (x - x0, y - y0) dot (dy, -dx) = 0 + // x*dy - x0*dy - y*dx + y0*dx = 0 + // x*dy - y*dx = (x0*dy - y0*dx) + + // So write the matrix, pre-pivoted. + if(fabs(dyA) > fabs(dyB)) { + A[0][0] = dyA; A[0][1] = -dxA; b[0] = x0A*dyA - y0A*dxA; + A[1][0] = dyB; A[1][1] = -dxB; b[1] = x0B*dyB - y0B*dxB; + } else { + A[1][0] = dyA; A[1][1] = -dxA; b[1] = x0A*dyA - y0A*dxA; + A[0][0] = dyB; A[0][1] = -dxB; b[0] = x0B*dyB - y0B*dxB; + } + + // Check the determinant; if it's zero then no solution. + if(fabs(A[0][0]*A[1][1] - A[0][1]*A[1][0]) < LENGTH_EPS) { + return false; + } + + // Solve + double v = A[1][0] / A[0][0]; + A[1][0] -= A[0][0]*v; + A[1][1] -= A[0][1]*v; + b[1] -= b[0]*v; + + // Back-substitute. + *yi = b[1] / A[1][1]; + *xi = (b[0] - A[0][1]*(*yi)) / A[0][0]; + + return true; +} +void SContour::OffsetInto(SContour *dest, double r) { + int i; + + for(i = 0; i < l.n; i++) { + Vector a, b, c; + Vector dp, dn; + double thetan, thetap; + + a = l.elem[WRAP(i-1, (l.n-1))].p; + b = l.elem[WRAP(i, (l.n-1))].p; + c = l.elem[WRAP(i+1, (l.n-1))].p; + + dp = a.Minus(b); + thetap = atan2(dp.y, dp.x); + + dn = b.Minus(c); + thetan = atan2(dn.y, dn.x); + + // A short line segment in a badly-generated polygon might look + // okay but screw up our sense of direction. + if(dp.Magnitude() < LENGTH_EPS || dn.Magnitude() < LENGTH_EPS) { + continue; + } + + if(thetan > thetap && (thetan - thetap) > PI) { + thetap += 2*PI; + } + if(thetan < thetap && (thetap - thetan) > PI) { + thetan += 2*PI; + } + + if(fabs(thetan - thetap) < (1*PI)/180) { + Vector p = { b.x - r*sin(thetap), b.y + r*cos(thetap), 0 }; + dest->AddPoint(p); + } else if(thetan < thetap) { + // This is an inside corner. We have two edges, Ep and En. Move + // out from their intersection by radius, normal to En, and + // then draw a line parallel to En. Move out from their + // intersection by radius, normal to Ep, and then draw a second + // line parallel to Ep. The point that we want to generate is + // the intersection of these two lines--it removes as much + // material as we can without removing any that we shouldn't. + double px0, py0, pdx, pdy; + double nx0, ny0, ndx, ndy; + double x = 0.0, y = 0.0; + + px0 = b.x - r*sin(thetap); + py0 = b.y + r*cos(thetap); + pdx = cos(thetap); + pdy = sin(thetap); + + nx0 = b.x - r*sin(thetan); + ny0 = b.y + r*cos(thetan); + ndx = cos(thetan); + ndy = sin(thetan); + + IntersectionOfLines(px0, py0, pdx, pdy, + nx0, ny0, ndx, ndy, + &x, &y); + + dest->AddPoint(Vector::From(x, y, 0)); + } else { + if(fabs(thetap - thetan) < (6*PI)/180) { + Vector pp = { b.x - r*sin(thetap), + b.y + r*cos(thetap), 0 }; + dest->AddPoint(pp); + + Vector pn = { b.x - r*sin(thetan), + b.y + r*cos(thetan), 0 }; + dest->AddPoint(pn); + } else { + double theta; + for(theta = thetap; theta <= thetan; theta += (6*PI)/180) { + Vector p = { b.x - r*sin(theta), + b.y + r*cos(theta), 0 }; + dest->AddPoint(p); + } + } + } + } +} + diff --git a/src/polygon.h b/src/polygon.h new file mode 100644 index 0000000..7d2907b --- /dev/null +++ b/src/polygon.h @@ -0,0 +1,337 @@ +//----------------------------------------------------------------------------- +// Anything relating to plane polygons and triangles, and (generally, non- +// planar) meshes thereof. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- + +#ifndef __POLYGON_H +#define __POLYGON_H + +class SPointList; +class SPolygon; +class SContour; +class SMesh; +class SBsp3; +class SOutlineList; + +class SEdge { +public: + int tag; + int auxA, auxB; + Vector a, b; + + static SEdge From(Vector a, Vector b); + bool EdgeCrosses(Vector a, Vector b, Vector *pi=NULL, SPointList *spl=NULL); +}; + +class SEdgeList { +public: + List l; + + void Clear(void); + void AddEdge(Vector a, Vector b, int auxA=0, int auxB=0); + bool AssemblePolygon(SPolygon *dest, SEdge *errorAt, bool keepDir=false); + bool AssembleContour(Vector first, Vector last, SContour *dest, + SEdge *errorAt, bool keepDir); + int AnyEdgeCrossings(Vector a, Vector b, + Vector *pi=NULL, SPointList *spl=NULL); + bool ContainsEdgeFrom(SEdgeList *sel); + bool ContainsEdge(SEdge *se); + void CullExtraneousEdges(void); + void MergeCollinearSegments(Vector a, Vector b); +}; + +// A kd-tree element needs to go on a side of a node if it's when KDTREE_EPS +// of the boundary. So increasing this number never breaks anything, but may +// result in more duplicated elements. So it's conservative to be sloppy here. +#define KDTREE_EPS (20*LENGTH_EPS) + +class SEdgeLl { +public: + SEdge *se; + SEdgeLl *next; + + static SEdgeLl *Alloc(void); +}; + +class SKdNodeEdges { +public: + int which; // whether c is x, y, or z + double c; + SKdNodeEdges *gt; + SKdNodeEdges *lt; + + SEdgeLl *edges; + + static SKdNodeEdges *From(SEdgeList *sel); + static SKdNodeEdges *From(SEdgeLl *sell); + static SKdNodeEdges *Alloc(void); + int AnyEdgeCrossings(Vector a, Vector b, int cnt, + Vector *pi=NULL, SPointList *spl=NULL); +}; + +class SPoint { +public: + int tag; + + enum { + UNKNOWN = 0, + NOT_EAR = 1, + EAR = 2 + }; + int ear; + + Vector p; + Vector auxv; +}; + +class SPointList { +public: + List l; + + void Clear(void); + bool ContainsPoint(Vector pt); + int IndexForPoint(Vector pt); + void IncrementTagFor(Vector pt); + void Add(Vector pt); +}; + +class SContour { +public: + int tag; + int timesEnclosed; + Vector xminPt; + List l; + + void AddPoint(Vector p); + void MakeEdgesInto(SEdgeList *el); + void Reverse(void); + Vector ComputeNormal(void); + double SignedAreaProjdToNormal(Vector n); + bool IsClockwiseProjdToNormal(Vector n); + bool ContainsPointProjdToNormal(Vector n, Vector p); + void OffsetInto(SContour *dest, double r); + void CopyInto(SContour *dest); + void FindPointWithMinX(void); + Vector AnyEdgeMidpoint(void); + + bool IsEar(int bp, double scaledEps); + bool BridgeToContour(SContour *sc, SEdgeList *el, List *vl); + void ClipEarInto(SMesh *m, int bp, double scaledEps); + void UvTriangulateInto(SMesh *m, SSurface *srf); +}; + +typedef struct { + uint32_t face; + RgbaColor color; +} STriMeta; + +class SPolygon { +public: + List l; + Vector normal; + + Vector ComputeNormal(void); + void AddEmptyContour(void); + int WindingNumberForPoint(Vector p); + double SignedArea(void); + bool ContainsPoint(Vector p); + void MakeEdgesInto(SEdgeList *el); + void FixContourDirections(void); + void Clear(void); + bool SelfIntersecting(Vector *intersectsAt); + bool IsEmpty(void); + Vector AnyPoint(void); + void OffsetInto(SPolygon *dest, double r); + void UvTriangulateInto(SMesh *m, SSurface *srf); + void UvGridTriangulateInto(SMesh *m, SSurface *srf); +}; + +class STriangle { +public: + int tag; + STriMeta meta; + Vector a, b, c; + Vector an, bn, cn; + + static STriangle From(STriMeta meta, Vector a, Vector b, Vector c); + Vector Normal(void); + void FlipNormal(void); + double MinAltitude(void); + int WindingNumberForPoint(Vector p); + bool ContainsPoint(Vector p); + bool ContainsPointProjd(Vector n, Vector p); +}; + +class SBsp2 { +public: + Vector np; // normal to the plane + + Vector no; // outer normal to the edge + double d; + SEdge edge; + + SBsp2 *pos; + SBsp2 *neg; + + SBsp2 *more; + + enum { POS = 100, NEG = 101, COPLANAR = 200 }; + void InsertTriangleHow(int how, STriangle *tr, SMesh *m, SBsp3 *bsp3); + void InsertTriangle(STriangle *tr, SMesh *m, SBsp3 *bsp3); + Vector IntersectionWith(Vector a, Vector b); + void InsertEdge(SEdge *nedge, Vector nnp, Vector out); + static SBsp2 *InsertOrCreateEdge(SBsp2 *where, SEdge *nedge, Vector nnp, Vector out); + static SBsp2 *Alloc(void); + + void DebugDraw(Vector n, double d); +}; + +class SBsp3 { +public: + Vector n; + double d; + + STriangle tri; + SBsp3 *pos; + SBsp3 *neg; + + SBsp3 *more; + + SBsp2 *edges; + + static SBsp3 *Alloc(void); + static SBsp3 *FromMesh(SMesh *m); + + Vector IntersectionWith(Vector a, Vector b); + + enum { POS = 100, NEG = 101, COPLANAR = 200 }; + void InsertHow(int how, STriangle *str, SMesh *instead); + void Insert(STriangle *str, SMesh *instead); + static SBsp3 *InsertOrCreate(SBsp3 *where, STriangle *str, SMesh *instead); + + void InsertConvexHow(int how, STriMeta meta, Vector *vertex, int n, + SMesh *instead); + SBsp3 *InsertConvex(STriMeta meta, Vector *vertex, int n, SMesh *instead); + + void InsertInPlane(bool pos2, STriangle *tr, SMesh *m); + + void GenerateInPaintOrder(SMesh *m); + + void DebugDraw(void); +}; + +class SMesh { +public: + List l; + + bool flipNormal; + bool keepCoplanar; + bool atLeastOneDiscarded; + bool isTransparent; + + void Clear(void); + void AddTriangle(STriangle *st); + void AddTriangle(STriMeta meta, Vector a, Vector b, Vector c); + void AddTriangle(STriMeta meta, Vector n, Vector a, Vector b, Vector c); + void DoBounding(Vector v, Vector *vmax, Vector *vmin); + void GetBounding(Vector *vmax, Vector *vmin); + + void Simplify(int start); + + void AddAgainstBsp(SMesh *srcm, SBsp3 *bsp3); + void MakeFromUnionOf(SMesh *a, SMesh *b); + void MakeFromDifferenceOf(SMesh *a, SMesh *b); + + void MakeFromCopyOf(SMesh *a); + void MakeFromTransformationOf(SMesh *a, + Vector trans, Quaternion q, double scale); + void MakeFromAssemblyOf(SMesh *a, SMesh *b); + + void MakeEdgesInPlaneInto(SEdgeList *sel, Vector n, double d); + void MakeCertainEdgesAndOutlinesInto(SEdgeList *sel, SOutlineList *sol, int type); + + bool IsEmpty(void); + void RemapFaces(Group *g, int remap); + + uint32_t FirstIntersectionWith(Point2d mp); +}; + +// A linked list of triangles +class STriangleLl { +public: + STriangle *tri; + + STriangleLl *next; + + static STriangleLl *Alloc(void); +}; + +class SOutline { +public: + int tag; + Vector a, b, nl, nr; +}; + +class SOutlineList { +public: + List l; + + void Clear(); + void AddEdge(Vector a, Vector b, Vector nl, Vector nr); + + void MakeFromCopyOf(SOutlineList *ol); + + void FillOutlineTags(Vector projDir); +}; + +class SKdNode { +public: + struct EdgeOnInfo { + int count; + bool frontFacing; + bool intersectsMesh; + STriangle *tr; + int ai; + int bi; + }; + + int which; // whether c is x, y, or z + double c; + + SKdNode *gt; + SKdNode *lt; + + STriangleLl *tris; + + static SKdNode *Alloc(void); + static SKdNode *From(SMesh *m); + static SKdNode *From(STriangleLl *tll); + + void AddTriangle(STriangle *tr); + void MakeMeshInto(SMesh *m); + void ListTrianglesInto(std::vector *tl); + void ClearTags(void); + + void FindEdgeOn(Vector a, Vector b, int cnt, bool coplanarIsInter, EdgeOnInfo *info); + enum { + NAKED_OR_SELF_INTER_EDGES = 100, + SELF_INTER_EDGES = 200, + TURNING_EDGES = 300, + EMPHASIZED_EDGES = 400, + SHARP_EDGES = 500, + }; + void MakeCertainEdgesInto(SEdgeList *sel, int how, bool coplanarIsInter, + bool *inter, bool *leaky, int auxA=0); + void MakeOutlinesInto(SOutlineList *sel); + + void OcclusionTestLine(SEdge orig, SEdgeList *sel, int cnt, bool removeHidden); + void SplitLinesAgainstTriangle(SEdgeList *sel, STriangle *tr, bool removeHidden); + + void SnapToMesh(SMesh *m); + void SnapToVertex(Vector v, SMesh *extras); +}; + +#endif + diff --git a/src/request.cpp b/src/request.cpp new file mode 100644 index 0000000..b770e06 --- /dev/null +++ b/src/request.cpp @@ -0,0 +1,205 @@ +//----------------------------------------------------------------------------- +// Implementation of our Request class; a request is a user-created thing +// that will generate an entity (line, curve) when the sketch is generated, +// in the same way that other entities are generated automatically, like +// by an extrude or a step and repeat. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +const hRequest Request::HREQUEST_REFERENCE_XY = { 1 }; +const hRequest Request::HREQUEST_REFERENCE_YZ = { 2 }; +const hRequest Request::HREQUEST_REFERENCE_ZX = { 3 }; + +const EntReqTable::TableEntry EntReqTable::Table[] = { +// request type entity type pts xtra? norml dist description +{ Request::WORKPLANE, Entity::WORKPLANE, 1, false, true, false, "workplane" }, +{ Request::DATUM_POINT, 0, 1, false, false, false, "datum-point" }, +{ Request::LINE_SEGMENT, Entity::LINE_SEGMENT, 2, false, false, false, "line-segment" }, +{ Request::CUBIC, Entity::CUBIC, 4, true, false, false, "cubic-bezier" }, +{ Request::CUBIC_PERIODIC, Entity::CUBIC_PERIODIC, 3, true, false, false, "periodic-cubic" }, +{ Request::CIRCLE, Entity::CIRCLE, 1, false, true, true, "circle" }, +{ Request::ARC_OF_CIRCLE, Entity::ARC_OF_CIRCLE, 3, false, true, false, "arc-of-circle" }, +{ Request::TTF_TEXT, Entity::TTF_TEXT, 2, false, true, false, "ttf-text" }, +{ 0, 0, 0, false, false, false, 0 }, +}; + +const char *EntReqTable::DescriptionForRequest(int req) { + for(int i = 0; Table[i].reqType; i++) { + if(req == Table[i].reqType) { + return Table[i].description; + } + } + return "???"; +} + +void EntReqTable::CopyEntityInfo(const TableEntry *te, int extraPoints, + int *ent, int *req, int *pts, bool *hasNormal, bool *hasDistance) +{ + int points = te->points; + if(te->useExtraPoints) points += extraPoints; + + if(ent) *ent = te->entType; + if(req) *req = te->reqType; + if(pts) *pts = points; + if(hasNormal) *hasNormal = te->hasNormal; + if(hasDistance) *hasDistance = te->hasDistance; +} + +bool EntReqTable::GetRequestInfo(int req, int extraPoints, + int *ent, int *pts, bool *hasNormal, bool *hasDistance) +{ + for(int i = 0; Table[i].reqType; i++) { + const TableEntry *te = &(Table[i]); + if(req == te->reqType) { + CopyEntityInfo(te, extraPoints, + ent, NULL, pts, hasNormal, hasDistance); + return true; + } + } + return false; +} + +bool EntReqTable::GetEntityInfo(int ent, int extraPoints, + int *req, int *pts, bool *hasNormal, bool *hasDistance) +{ + for(int i = 0; Table[i].reqType; i++) { + const TableEntry *te = &(Table[i]); + if(ent == te->entType) { + CopyEntityInfo(te, extraPoints, + NULL, req, pts, hasNormal, hasDistance); + return true; + } + } + return false; +} + +int EntReqTable::GetRequestForEntity(int ent) { + int req = 0; + GetEntityInfo(ent, 0, &req, NULL, NULL, NULL); + return req; +} + + +void Request::Generate(IdList *entity, + IdList *param) +{ + int points = 0; + int et = 0; + bool hasNormal = false; + bool hasDistance = false; + int i; + + Entity e = {}; + EntReqTable::GetRequestInfo(type, extraPoints, + &et, &points, &hasNormal, &hasDistance); + + // Generate the entity that's specific to this request. + e.type = et; + e.extraPoints = extraPoints; + e.group = group; + e.style = style; + e.workplane = workplane; + e.construction = construction; + e.str = str; + e.font = font; + e.h = h.entity(0); + + // And generate entities for the points + for(i = 0; i < points; i++) { + Entity p = {}; + p.workplane = workplane; + // points start from entity 1, except for datum point case + p.h = h.entity(i+(et ? 1 : 0)); + p.group = group; + p.style = style; + + if(workplane.v == Entity::FREE_IN_3D.v) { + p.type = Entity::POINT_IN_3D; + // params for x y z + p.param[0] = AddParam(param, h.param(16 + 3*i + 0)); + p.param[1] = AddParam(param, h.param(16 + 3*i + 1)); + p.param[2] = AddParam(param, h.param(16 + 3*i + 2)); + } else { + p.type = Entity::POINT_IN_2D; + // params for u v + p.param[0] = AddParam(param, h.param(16 + 3*i + 0)); + p.param[1] = AddParam(param, h.param(16 + 3*i + 1)); + } + entity->Add(&p); + e.point[i] = p.h; + } + if(hasNormal) { + Entity n = {}; + n.workplane = workplane; + n.h = h.entity(32); + n.group = group; + n.style = style; + if(workplane.v == Entity::FREE_IN_3D.v) { + n.type = Entity::NORMAL_IN_3D; + n.param[0] = AddParam(param, h.param(32+0)); + n.param[1] = AddParam(param, h.param(32+1)); + n.param[2] = AddParam(param, h.param(32+2)); + n.param[3] = AddParam(param, h.param(32+3)); + } else { + n.type = Entity::NORMAL_IN_2D; + // and this is just a copy of the workplane quaternion, + // so no params required + } + if(points < 1) oops(); + // The point determines where the normal gets displayed on-screen; + // it's entirely cosmetic. + n.point[0] = e.point[0]; + entity->Add(&n); + e.normal = n.h; + } + if(hasDistance) { + Entity d = {}; + d.workplane = workplane; + d.h = h.entity(64); + d.group = group; + d.style = style; + d.type = Entity::DISTANCE; + d.param[0] = AddParam(param, h.param(64)); + entity->Add(&d); + e.distance = d.h; + } + + if(et) entity->Add(&e); +} + +std::string Request::DescriptionString(void) { + const char *s; + if(h.v == Request::HREQUEST_REFERENCE_XY.v) { + s = "#XY"; + } else if(h.v == Request::HREQUEST_REFERENCE_YZ.v) { + s = "#YZ"; + } else if(h.v == Request::HREQUEST_REFERENCE_ZX.v) { + s = "#ZX"; + } else { + s = EntReqTable::DescriptionForRequest(type); + } + + return ssprintf("r%03x-%s", h.v, s); +} + +int Request::IndexOfPoint(hEntity he) { + if(type == DATUM_POINT) { + return (he.v == h.entity(0).v) ? 0 : -1; + } + for(int i = 0; i < MAX_POINTS_IN_ENTITY; i++) { + if(he.v == h.entity(i + 1).v) { + return i; + } + } + return -1; +} + +hParam Request::AddParam(IdList *param, hParam hp) { + Param pa = {}; + pa.h = hp; + param->Add(&pa); + return hp; +} + diff --git a/src/sketch.h b/src/sketch.h new file mode 100644 index 0000000..d9f1794 --- /dev/null +++ b/src/sketch.h @@ -0,0 +1,916 @@ +//----------------------------------------------------------------------------- +// The parametric structure of our sketch, in multiple groups, that generate +// geometric entities and surfaces. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- + +#ifndef __SKETCH_H +#define __SKETCH_H + +class hGroup; +class hRequest; +class hEntity; +class hParam; +class hStyle; +class hConstraint; +class hEquation; + +class Entity; +class Param; +class Equation; +class Style; + + +// All of the hWhatever handles are a 32-bit ID, that is used to represent +// some data structure in the sketch. +class hGroup { +public: + // bits 15: 0 -- group index + uint32_t v; + + inline hEntity entity(int i); + inline hParam param(int i); + inline hEquation equation(int i); +}; +class hRequest { +public: + // bits 15: 0 -- request index + uint32_t v; + + inline hEntity entity(int i); + inline hParam param(int i); + + inline bool IsFromReferences(void); +}; +class hEntity { +public: + // bits 15: 0 -- entity index + // 31:16 -- request index + uint32_t v; + + inline bool isFromRequest(void); + inline hRequest request(void); + inline hGroup group(void); + inline hEquation equation(int i); +}; +class hParam { +public: + // bits 15: 0 -- param index + // 31:16 -- request index + uint32_t v; + + inline hRequest request(void); +}; + +class hStyle { +public: + uint32_t v; +}; + + +class EntityId { +public: + uint32_t v; // entity ID, starting from 0 +}; +class EntityMap { +public: + int tag; + + EntityId h; + hEntity input; + int copyNumber; + // (input, copyNumber) gets mapped to ((Request)xxx).entity(h.v) + + void Clear(void) {} +}; + +// A set of requests. Every request must have an associated group. +class Group { +public: + static const hGroup HGROUP_REFERENCES; + + int tag; + hGroup h; + + enum { + DRAWING_3D = 5000, + DRAWING_WORKPLANE = 5001, + EXTRUDE = 5100, + LATHE = 5101, + ROTATE = 5200, + TRANSLATE = 5201, + LINKED = 5300 + }; + int type; + + int order; + + hGroup opA; + hGroup opB; + bool visible; + bool suppress; + bool relaxConstraints; + bool allowRedundant; + bool allDimsReference; + double scale; + + bool clean; + hEntity activeWorkplane; + double valA; + double valB; + double valC; + RgbaColor color; + + struct { + int how; + int dof; + List remove; + } solved; + + enum { + // For drawings in 2d + WORKPLANE_BY_POINT_ORTHO = 6000, + WORKPLANE_BY_LINE_SEGMENTS = 6001, + // For extrudes, translates, and rotates + ONE_SIDED = 7000, + TWO_SIDED = 7001 + }; + int subtype; + + bool skipFirst; // for step and repeat ops + + struct { + Quaternion q; + hEntity origin; + hEntity entityB; + hEntity entityC; + bool swapUV; + bool negateU; + bool negateV; + } predef; + + SPolygon polyLoops; + SBezierLoopSetSet bezierLoops; + SBezierList bezierOpens; + enum { + POLY_GOOD = 0, + POLY_NOT_CLOSED = 1, + POLY_NOT_COPLANAR = 2, + POLY_SELF_INTERSECTING = 3, + POLY_ZERO_LEN_EDGE = 4 + }; + struct { + int how; + SEdge notClosedAt; + Vector errorPointAt; + } polyError; + + bool booleanFailed; + + SShell thisShell; + SShell runningShell; + + SMesh thisMesh; + SMesh runningMesh; + + bool displayDirty; + SMesh displayMesh; + SEdgeList displayEdges; + SOutlineList displayOutlines; + + enum { + COMBINE_AS_UNION = 0, + COMBINE_AS_DIFFERENCE = 1, + COMBINE_AS_ASSEMBLE = 2 + }; + int meshCombine; + + bool forceToMesh; + + IdList remap; + enum { REMAP_PRIME = 19477 }; + int remapCache[REMAP_PRIME]; + + std::string linkFile; + std::string linkFileRel; + SMesh impMesh; + SShell impShell; + EntityList impEntity; + + std::string name; + + + void Activate(void); + std::string DescriptionString(void); + void Clear(void); + + static void AddParam(ParamList *param, hParam hp, double v); + void Generate(EntityList *entity, ParamList *param); + bool IsSolvedOkay(); + void TransformImportedBy(Vector t, Quaternion q); + // When a request generates entities from entities, and the source + // entities may have come from multiple requests, it's necessary to + // remap the entity ID so that it's still unique. We do this with a + // mapping list. + enum { + REMAP_LAST = 1000, + REMAP_TOP = 1001, + REMAP_BOTTOM = 1002, + REMAP_PT_TO_LINE = 1003, + REMAP_LINE_TO_FACE = 1004, + REMAP_LATHE_START = 1006, + REMAP_LATHE_END = 1007, + REMAP_PT_TO_ARC = 1008, + REMAP_PT_TO_NORMAL = 1009, + }; + hEntity Remap(hEntity in, int copyNumber); + void MakeExtrusionLines(EntityList *el, hEntity in); + void MakeLatheCircles(IdList *el, IdList *param, hEntity in, Vector pt, Vector axis, int ai); + void MakeExtrusionTopBottomFaces(EntityList *el, hEntity pt); + void CopyEntity(EntityList *el, + Entity *ep, int timesApplied, int remap, + hParam dx, hParam dy, hParam dz, + hParam qw, hParam qvx, hParam qvy, hParam qvz, + bool asTrans, bool asAxisAngle); + + void AddEq(IdList *l, Expr *expr, int index); + void GenerateEquations(IdList *l); + bool IsVisible(void); + int GetNumConstraints(); + Vector ExtrusionGetVector(); + void ExtrusionForceVectorTo(const Vector &v); + + // Assembling the curves into loops, and into a piecewise linear polygon + // at the same time. + void AssembleLoops(bool *allClosed, bool *allCoplanar, bool *allNonZeroLen); + void GenerateLoops(void); + // And the mesh stuff + Group *PreviousGroup(void); + Group *RunningMeshGroup(void); + bool IsMeshGroup(); + void GenerateShellAndMesh(void); + template void GenerateForStepAndRepeat(T *steps, T *outs); + template void GenerateForBoolean(T *a, T *b, T *o, int how); + void GenerateDisplayItems(void); + void DrawDisplayItems(int t); + void Draw(void); + RgbaColor GetLoopSetFillColor(SBezierLoopSet *sbls, + bool *allSame, Vector *errorAt); + void FillLoopSetAsPolygon(SBezierLoopSet *sbls); + void DrawFilledPaths(void); + + SPolygon GetPolygon(void); + + static void MenuGroup(int id); +}; + +// A user request for some primitive or derived operation; for example a +// line, or a step and repeat. +class Request { +public: + // Some predefined requests, that are present in every sketch. + static const hRequest HREQUEST_REFERENCE_XY; + static const hRequest HREQUEST_REFERENCE_YZ; + static const hRequest HREQUEST_REFERENCE_ZX; + + int tag; + hRequest h; + + // Types of requests + enum { + WORKPLANE = 100, + DATUM_POINT = 101, + LINE_SEGMENT = 200, + CUBIC = 300, + CUBIC_PERIODIC = 301, + CIRCLE = 400, + ARC_OF_CIRCLE = 500, + TTF_TEXT = 600 + }; + + int type; + int extraPoints; + + hEntity workplane; // or Entity::FREE_IN_3D + hGroup group; + hStyle style; + + bool construction; + std::string str; + std::string font; + + static hParam AddParam(ParamList *param, hParam hp); + void Generate(EntityList *entity, ParamList *param); + + std::string DescriptionString(void); + int IndexOfPoint(hEntity he); + + void Clear(void) {} +}; + +#define MAX_POINTS_IN_ENTITY (12) +class EntityBase { +public: + int tag; + hEntity h; + + static const hEntity FREE_IN_3D; + static const hEntity NO_ENTITY; + + enum { + POINT_IN_3D = 2000, + POINT_IN_2D = 2001, + POINT_N_TRANS = 2010, + POINT_N_ROT_TRANS = 2011, + POINT_N_COPY = 2012, + POINT_N_ROT_AA = 2013, + + NORMAL_IN_3D = 3000, + NORMAL_IN_2D = 3001, + NORMAL_N_COPY = 3010, + NORMAL_N_ROT = 3011, + NORMAL_N_ROT_AA = 3012, + + DISTANCE = 4000, + DISTANCE_N_COPY = 4001, + + FACE_NORMAL_PT = 5000, + FACE_XPROD = 5001, + FACE_N_ROT_TRANS = 5002, + FACE_N_TRANS = 5003, + FACE_N_ROT_AA = 5004, + + + WORKPLANE = 10000, + LINE_SEGMENT = 11000, + CUBIC = 12000, + CUBIC_PERIODIC = 12001, + CIRCLE = 13000, + ARC_OF_CIRCLE = 14000, + TTF_TEXT = 15000 + }; + + int type; + + hGroup group; + hEntity workplane; // or Entity::FREE_IN_3D + + // When it comes time to draw an entity, we look here to get the + // defining variables. + hEntity point[MAX_POINTS_IN_ENTITY]; + int extraPoints; + hEntity normal; + hEntity distance; + // The only types that have their own params are points, normals, + // and directions. + hParam param[7]; + + // Transformed points/normals/distances have their numerical base + Vector numPoint; + Quaternion numNormal; + double numDistance; + + std::string str; + std::string font; + + // For entities that are derived by a transformation, the number of + // times to apply the transformation. + int timesApplied; + + Quaternion GetAxisAngleQuaternion(int param0); + ExprQuaternion GetAxisAngleQuaternionExprs(int param0); + + bool IsCircle(void); + Expr *CircleGetRadiusExpr(void); + double CircleGetRadiusNum(void); + void ArcGetAngles(double *thetaa, double *thetab, double *dtheta); + + bool HasVector(void); + ExprVector VectorGetExprs(void); + Vector VectorGetNum(void); + Vector VectorGetRefPoint(void); + Vector VectorGetStartPoint(void); + + // For distances + bool IsDistance(void); + double DistanceGetNum(void); + Expr *DistanceGetExpr(void); + void DistanceForceTo(double v); + + bool IsWorkplane(void); + // The plane is points P such that P dot (xn, yn, zn) - d = 0 + void WorkplaneGetPlaneExprs(ExprVector *n, Expr **d); + ExprVector WorkplaneGetOffsetExprs(void); + Vector WorkplaneGetOffset(void); + EntityBase *Normal(void); + + bool IsFace(void); + ExprVector FaceGetNormalExprs(void); + Vector FaceGetNormalNum(void); + ExprVector FaceGetPointExprs(void); + Vector FaceGetPointNum(void); + + bool IsPoint(void); + // Applies for any of the point types + Vector PointGetNum(void); + ExprVector PointGetExprs(void); + void PointGetExprsInWorkplane(hEntity wrkpl, Expr **u, Expr **v); + void PointForceTo(Vector v); + // These apply only the POINT_N_ROT_TRANS, which has an assoc rotation + Quaternion PointGetQuaternion(void); + void PointForceQuaternionTo(Quaternion q); + + bool IsNormal(void); + // Applies for any of the normal types + Quaternion NormalGetNum(void); + ExprQuaternion NormalGetExprs(void); + void NormalForceTo(Quaternion q); + + Vector NormalU(void); + Vector NormalV(void); + Vector NormalN(void); + ExprVector NormalExprsU(void); + ExprVector NormalExprsV(void); + ExprVector NormalExprsN(void); + + Vector CubicGetStartNum(void); + Vector CubicGetFinishNum(void); + ExprVector CubicGetStartTangentExprs(void); + ExprVector CubicGetFinishTangentExprs(void); + Vector CubicGetStartTangentNum(void); + Vector CubicGetFinishTangentNum(void); + + bool HasEndpoints(void); + Vector EndpointStart(); + Vector EndpointFinish(); + + void AddEq(IdList *l, Expr *expr, int index); + void GenerateEquations(IdList *l); + + void Clear(void) {} +}; + +class Entity : public EntityBase { +public: + // Necessary for Entity e = {} to zero-initialize, since + // classes with base classes are not aggregates and + // the default constructor does not initialize members. + // + // Note EntityBase({}); without explicitly value-initializing + // the base class, MSVC2013 will default-initialize it, leaving + // POD members with indeterminate value. + Entity() : EntityBase({}), forceHidden(), actPoint(), actNormal(), + actDistance(), actVisible(), style(), construction(), + beziers(), edges(), edgesChordTol(), screenBBox(), screenBBoxValid(), + dogd() {}; + + // A linked entity that was hidden in the source file ends up hidden + // here too. + bool forceHidden; + + // All points/normals/distances have their numerical value; this is + // a convenience, to simplify the link/assembly code, so that the + // part is entirely described by the entities. + Vector actPoint; + Quaternion actNormal; + double actDistance; + // and the shown state also gets saved here, for later import + bool actVisible; + + hStyle style; + bool construction; + + SBezierList beziers; + SEdgeList edges; + double edgesChordTol; + BBox screenBBox; + bool screenBBoxValid; + + // Routines to draw and hit-test the representation of the entity + // on-screen. + struct { + bool drawing; + Point2d mp; + double dmin; + Vector refp; + double lineWidth; + double stippleScale; + int stippleType; + int data; + } dogd; // state for drawing or getting distance (for hit testing) + void LineDrawOrGetDistance(Vector a, Vector b, bool maybeFat=false, int userData = -1); + void DrawOrGetDistance(void); + + bool IsStylable(); + bool IsVisible(void); + bool PointIsFromReferences(void); + + void ComputeInterpolatingSpline(SBezierList *sbl, bool periodic); + void GenerateBezierCurves(SBezierList *sbl); + void GenerateEdges(SEdgeList *el, bool includingConstruction=false); + + static void DrawAll(bool drawAsHidden); + void Draw(bool drawAsHidden); + double GetDistance(Point2d mp); + Vector GetReferencePos(void); + + void CalculateNumerical(bool forExport); + + std::string DescriptionString(void); + + SBezierList *GetOrGenerateBezierCurves(); + SEdgeList *GetOrGenerateEdges(); + BBox GetOrGenerateScreenBBox(bool *hasBBox); + + void Clear() { + beziers.l.Clear(); + edges.l.Clear(); + } +}; + +class EntReqTable { +public: + typedef struct { + int reqType; + int entType; + int points; + bool useExtraPoints; + bool hasNormal; + bool hasDistance; + const char *description; + } TableEntry; + + static const TableEntry Table[]; + + static const char *DescriptionForRequest(int req); + static void CopyEntityInfo(const TableEntry *te, int extraPoints, + int *ent, int *req, int *pts, bool *hasNormal, bool *hasDistance); + static bool GetRequestInfo(int req, int extraPoints, + int *ent, int *pts, bool *hasNormal, bool *hasDistance); + static bool GetEntityInfo(int ent, int extraPoints, + int *req, int *pts, bool *hasNormal, bool *hasDistance); + static int GetRequestForEntity(int ent); +}; + +class Param { +public: + int tag; + hParam h; + + double val; + bool known; + bool free; + + // Used only in the solver + hParam substd; + + static const hParam NO_PARAM; + + void Clear(void) {} +}; + + +class hConstraint { +public: + uint32_t v; + + inline hEquation equation(int i); +}; + +class ConstraintBase { +public: + int tag; + hConstraint h; + + static const hConstraint NO_CONSTRAINT; + + enum { + POINTS_COINCIDENT = 20, + PT_PT_DISTANCE = 30, + PT_PLANE_DISTANCE = 31, + PT_LINE_DISTANCE = 32, + PT_FACE_DISTANCE = 33, + PROJ_PT_DISTANCE = 34, + PT_IN_PLANE = 41, + PT_ON_LINE = 42, + PT_ON_FACE = 43, + EQUAL_LENGTH_LINES = 50, + LENGTH_RATIO = 51, + EQ_LEN_PT_LINE_D = 52, + EQ_PT_LN_DISTANCES = 53, + EQUAL_ANGLE = 54, + EQUAL_LINE_ARC_LEN = 55, + LENGTH_DIFFERENCE = 56, + SYMMETRIC = 60, + SYMMETRIC_HORIZ = 61, + SYMMETRIC_VERT = 62, + SYMMETRIC_LINE = 63, + AT_MIDPOINT = 70, + HORIZONTAL = 80, + VERTICAL = 81, + DIAMETER = 90, + PT_ON_CIRCLE = 100, + SAME_ORIENTATION = 110, + ANGLE = 120, + PARALLEL = 121, + PERPENDICULAR = 122, + ARC_LINE_TANGENT = 123, + CUBIC_LINE_TANGENT = 124, + CURVE_CURVE_TANGENT = 125, + EQUAL_RADIUS = 130, + WHERE_DRAGGED = 200, + + COMMENT = 1000 + }; + + int type; + + hGroup group; + hEntity workplane; + + // These are the parameters for the constraint. + double valA; + hEntity ptA; + hEntity ptB; + hEntity entityA; + hEntity entityB; + hEntity entityC; + hEntity entityD; + bool other; + bool other2; + + bool reference; // a ref dimension, that generates no eqs + std::string comment; // since comments are represented as constraints + + bool HasLabel(void); + + void Generate(IdList *l); + void GenerateReal(IdList *l); + // Some helpers when generating symbolic constraint equations + void ModifyToSatisfy(void); + void AddEq(IdList *l, Expr *expr, int index); + static Expr *DirectionCosine(hEntity wrkpl, ExprVector ae, ExprVector be); + static Expr *Distance(hEntity workplane, hEntity pa, hEntity pb); + static Expr *PointLineDistance(hEntity workplane, hEntity pt, hEntity ln); + static Expr *PointPlaneDistance(ExprVector p, hEntity plane); + static Expr *VectorsParallel(int eq, ExprVector a, ExprVector b); + static ExprVector PointInThreeSpace(hEntity workplane, Expr *u, Expr *v); + + void Clear(void) {} +}; + +class Constraint : public ConstraintBase { +public: + // See Entity::Entity(). + Constraint() : ConstraintBase({}), disp(), dogd() {} + + // These define how the constraint is drawn on-screen. + struct { + Vector offset; + hStyle style; + } disp; + + // State for drawing or getting distance (for hit testing). + struct { + bool drawing; + Point2d mp; + double dmin; + Vector refp; + SEdgeList *sel; + } dogd; + + double GetDistance(Point2d mp); + Vector GetLabelPos(void); + Vector GetReferencePos(void); + void Draw(void); + void GetEdges(SEdgeList *sel); + bool IsStylable(); + hStyle GetStyle() const; + bool HasLabel(); + + void LineDrawOrGetDistance(Vector a, Vector b); + bool IsVisible() const; + void DrawOrGetDistance(Vector *labelPos); + std::string Label(void); + bool DoLineExtend(Vector p0, Vector p1, Vector pt, double salient); + void DoArcForAngle(Vector a0, Vector da, Vector b0, Vector db, + Vector offset, Vector *ref, bool trim); + void DoArrow(Vector p, Vector dir, Vector n, double width, double angle, double da); + void DoLineWithArrows(Vector ref, Vector a, Vector b, bool onlyOneExt); + int DoLineTrimmedAgainstBox(Vector ref, Vector a, Vector b, bool extend, Vector gr, Vector gu, double swidth, double sheight); + int DoLineTrimmedAgainstBox(Vector ref, Vector a, Vector b, bool extend = true); + void DoLabel(Vector ref, Vector *labelPos, Vector gr, Vector gu); + void StippledLine(Vector a, Vector b); + void DoProjectedPoint(Vector *p); + void DoEqualLenTicks(Vector a, Vector b, Vector gn); + void DoEqualRadiusTicks(hEntity he); + + std::string DescriptionString(void); + + static hConstraint AddConstraint(Constraint *c, bool rememberForUndo); + static hConstraint AddConstraint(Constraint *c); + static void MenuConstrain(int id); + static void DeleteAllConstraintsFor(int type, hEntity entityA, hEntity ptA); + + static hConstraint ConstrainCoincident(hEntity ptA, hEntity ptB); + static hConstraint Constrain(int type, hEntity ptA, hEntity ptB, hEntity entityA); + static hConstraint Constrain(int type, hEntity ptA, hEntity ptB, + hEntity entityA, hEntity entityB, + bool other, bool other2); +}; + +class hEquation { +public: + uint32_t v; + + inline bool isFromConstraint(void); + inline hConstraint constraint(void); +}; + +class Equation { +public: + int tag; + hEquation h; + + Expr *e; + + void Clear(void) {} +}; + + +class Style { +public: + int tag; + hStyle h; + + enum { + STIPPLE_CONTINUOUS = 0, + STIPPLE_DASH = 1, + STIPPLE_LONG_DASH = 2, + STIPPLE_DASH_DOT = 3, + STIPPLE_DASH_DOT_DOT = 4, + STIPPLE_DOT = 5, + STIPPLE_FREEHAND = 6, + STIPPLE_ZIGZAG = 7, + + LAST_STIPPLE = STIPPLE_ZIGZAG + }; + + enum { + // If an entity has no style, then it will be colored according to + // whether the group that it's in is active or not, whether it's + // construction or not, and so on. + NO_STYLE = 0, + + ACTIVE_GRP = 1, + CONSTRUCTION = 2, + INACTIVE_GRP = 3, + DATUM = 4, + SOLID_EDGE = 5, + CONSTRAINT = 6, + SELECTED = 7, + HOVERED = 8, + CONTOUR_FILL = 9, + NORMALS = 10, + ANALYZE = 11, + DRAW_ERROR = 12, + DIM_SOLID = 13, + HIDDEN_EDGE = 14, + OUTLINE = 15, + + FIRST_CUSTOM = 0x100 + }; + + std::string name; + + enum { + UNITS_AS_PIXELS = 0, + UNITS_AS_MM = 1 + }; + double width; + int widthAs; + double textHeight; + int textHeightAs; + enum { + ORIGIN_LEFT = 0x01, + ORIGIN_RIGHT = 0x02, + ORIGIN_BOT = 0x04, + ORIGIN_TOP = 0x08 + }; + int textOrigin; + double textAngle; + RgbaColor color; + bool filled; + RgbaColor fillColor; + bool visible; + bool exportable; + int stippleType; + double stippleScale; + int zIndex; + + // The default styles, for entities that don't have a style assigned yet, + // and for datums and such. + typedef struct { + hStyle h; + const char *cnfPrefix; + RgbaColor color; + double width; + int zIndex; + } Default; + static const Default Defaults[]; + + static std::string CnfColor(const std::string &prefix); + static std::string CnfWidth(const std::string &prefix); + static std::string CnfTextHeight(const std::string &prefix); + static std::string CnfPrefixToName(const std::string &prefix); + + static void CreateAllDefaultStyles(void); + static void CreateDefaultStyle(hStyle h); + static void FillDefaultStyle(Style *s, const Default *d = NULL, bool factory = false); + static void FreezeDefaultStyles(void); + static void LoadFactoryDefaults(void); + + static void AssignSelectionToStyle(uint32_t v); + static uint32_t CreateCustomStyle(bool rememberForUndo = true); + + static RgbaColor RewriteColor(RgbaColor rgb); + + static Style *Get(hStyle hs); + static RgbaColor Color(hStyle hs, bool forExport=false); + static RgbaColor FillColor(hStyle hs, bool forExport=false); + static float Width(hStyle hs); + static RgbaColor Color(int hs, bool forExport=false); + static float Width(int hs); + static double WidthMm(int hs); + static double TextHeight(hStyle hs); + static double DefaultTextHeight(); + static bool Exportable(int hs); + static hStyle ForEntity(hEntity he); + static int PatternType(hStyle hs); + static double StippleScaleMm(hStyle hs); + + std::string DescriptionString(void); + + void Clear(void) {} +}; + + +inline hEntity hGroup::entity(int i) + { hEntity r; r.v = 0x80000000 | (v << 16) | (uint32_t)i; return r; } +inline hParam hGroup::param(int i) + { hParam r; r.v = 0x80000000 | (v << 16) | (uint32_t)i; return r; } +inline hEquation hGroup::equation(int i) + { hEquation r; r.v = (v << 16) | 0x80000000 | (uint32_t)i; return r; } + +inline bool hRequest::IsFromReferences(void) { + if(v == Request::HREQUEST_REFERENCE_XY.v) return true; + if(v == Request::HREQUEST_REFERENCE_YZ.v) return true; + if(v == Request::HREQUEST_REFERENCE_ZX.v) return true; + return false; +} +inline hEntity hRequest::entity(int i) + { hEntity r; r.v = (v << 16) | (uint32_t)i; return r; } +inline hParam hRequest::param(int i) + { hParam r; r.v = (v << 16) | (uint32_t)i; return r; } + +inline bool hEntity::isFromRequest(void) + { if(v & 0x80000000) return false; else return true; } +inline hRequest hEntity::request(void) + { hRequest r; r.v = (v >> 16); return r; } +inline hGroup hEntity::group(void) + { hGroup r; r.v = (v >> 16) & 0x3fff; return r; } +inline hEquation hEntity::equation(int i) + { if(i != 0) oops(); hEquation r; r.v = v | 0x40000000; return r; } + +inline hRequest hParam::request(void) + { hRequest r; r.v = (v >> 16); return r; } + + +inline hEquation hConstraint::equation(int i) + { hEquation r; r.v = (v << 16) | (uint32_t)i; return r; } + +inline bool hEquation::isFromConstraint(void) + { if(v & 0xc0000000) return false; else return true; } +inline hConstraint hEquation::constraint(void) + { hConstraint r; r.v = (v >> 16); return r; } + +// The format for entities stored on the clipboard. +class ClipboardRequest { +public: + int type; + int extraPoints; + hStyle style; + std::string str; + std::string font; + bool construction; + + Vector point[MAX_POINTS_IN_ENTITY]; + double distance; + + hEntity oldEnt; + hEntity oldPointEnt[MAX_POINTS_IN_ENTITY]; + hRequest newReq; +}; + +#endif diff --git a/src/solvespace.cpp b/src/solvespace.cpp new file mode 100644 index 0000000..398cba0 --- /dev/null +++ b/src/solvespace.cpp @@ -0,0 +1,882 @@ +//----------------------------------------------------------------------------- +// Entry point in to the program, our registry-stored settings and top-level +// housekeeping when we open, save, and create new files. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" +#include "config.h" + +SolveSpaceUI SolveSpace::SS = {}; +Sketch SolveSpace::SK = {}; + +std::string SolveSpace::RecentFile[MAX_RECENT] = {}; + +void SolveSpaceUI::Init() { + SS.tangentArcRadius = 10.0; + + // Then, load the registry settings. + int i; + // Default list of colors for the model material + modelColor[0] = CnfThawColor(RGBi(150, 150, 150), "ModelColor_0"); + modelColor[1] = CnfThawColor(RGBi(100, 100, 100), "ModelColor_1"); + modelColor[2] = CnfThawColor(RGBi( 30, 30, 30), "ModelColor_2"); + modelColor[3] = CnfThawColor(RGBi(150, 0, 0), "ModelColor_3"); + modelColor[4] = CnfThawColor(RGBi( 0, 100, 0), "ModelColor_4"); + modelColor[5] = CnfThawColor(RGBi( 0, 80, 80), "ModelColor_5"); + modelColor[6] = CnfThawColor(RGBi( 0, 0, 130), "ModelColor_6"); + modelColor[7] = CnfThawColor(RGBi( 80, 0, 80), "ModelColor_7"); + // Light intensities + lightIntensity[0] = CnfThawFloat(1.0f, "LightIntensity_0"); + lightIntensity[1] = CnfThawFloat(0.5f, "LightIntensity_1"); + ambientIntensity = 0.3; // no setting for that yet + // Light positions + lightDir[0].x = CnfThawFloat(-1.0f, "LightDir_0_Right" ); + lightDir[0].y = CnfThawFloat( 1.0f, "LightDir_0_Up" ); + lightDir[0].z = CnfThawFloat( 0.0f, "LightDir_0_Forward" ); + lightDir[1].x = CnfThawFloat( 1.0f, "LightDir_1_Right" ); + lightDir[1].y = CnfThawFloat( 0.0f, "LightDir_1_Up" ); + lightDir[1].z = CnfThawFloat( 0.0f, "LightDir_1_Forward" ); + + exportMode = false; + // Chord tolerance + chordTol = CnfThawFloat(0.5f, "ChordTolerancePct"); + // Max pwl segments to generate + maxSegments = CnfThawInt(10, "MaxSegments"); + // Chord tolerance + exportChordTol = CnfThawFloat(0.1f, "ExportChordTolerance"); + // Max pwl segments to generate + exportMaxSegments = CnfThawInt(64, "ExportMaxSegments"); + // View units + viewUnits = (Unit)CnfThawInt((uint32_t)UNIT_MM, "ViewUnits"); + // Number of digits after the decimal point + afterDecimalMm = CnfThawInt(2, "AfterDecimalMm"); + afterDecimalInch = CnfThawInt(3, "AfterDecimalInch"); + // Camera tangent (determines perspective) + cameraTangent = CnfThawFloat(0.3f/1e3f, "CameraTangent"); + // Grid spacing + gridSpacing = CnfThawFloat(5.0f, "GridSpacing"); + // Export scale factor + exportScale = CnfThawFloat(1.0f, "ExportScale"); + // Export offset (cutter radius comp) + exportOffset = CnfThawFloat(0.0f, "ExportOffset"); + // Rewrite exported colors close to white into black (assuming white bg) + fixExportColors = CnfThawBool(true, "FixExportColors"); + // Draw back faces of triangles (when mesh is leaky/self-intersecting) + drawBackFaces = CnfThawBool(true, "DrawBackFaces"); + // Check that contours are closed and not self-intersecting + checkClosedContour = CnfThawBool(true, "CheckClosedContour"); + // Export shaded triangles in a 2d view + exportShadedTriangles = CnfThawBool(true, "ExportShadedTriangles"); + // Export pwl curves (instead of exact) always + exportPwlCurves = CnfThawBool(false, "ExportPwlCurves"); + // Background color on-screen + backgroundColor = CnfThawColor(RGBi(0, 0, 0), "BackgroundColor"); + // Whether export canvas size is fixed or derived from bbox + exportCanvasSizeAuto = CnfThawBool(true, "ExportCanvasSizeAuto"); + // Margins for automatic canvas size + exportMargin.left = CnfThawFloat(5.0f, "ExportMargin_Left"); + exportMargin.right = CnfThawFloat(5.0f, "ExportMargin_Right"); + exportMargin.bottom = CnfThawFloat(5.0f, "ExportMargin_Bottom"); + exportMargin.top = CnfThawFloat(5.0f, "ExportMargin_Top"); + // Dimensions for fixed canvas size + exportCanvas.width = CnfThawFloat(100.0f, "ExportCanvas_Width"); + exportCanvas.height = CnfThawFloat(100.0f, "ExportCanvas_Height"); + exportCanvas.dx = CnfThawFloat( 5.0f, "ExportCanvas_Dx"); + exportCanvas.dy = CnfThawFloat( 5.0f, "ExportCanvas_Dy"); + // Extra parameters when exporting G code + gCode.depth = CnfThawFloat(10.0f, "GCode_Depth"); + gCode.passes = CnfThawInt(1, "GCode_Passes"); + gCode.feed = CnfThawFloat(10.0f, "GCode_Feed"); + gCode.plungeFeed = CnfThawFloat(10.0f, "GCode_PlungeFeed"); + // Show toolbar in the graphics window + showToolbar = CnfThawBool(true, "ShowToolbar"); + // Recent files menus + for(i = 0; i < MAX_RECENT; i++) { + RecentFile[i] = CnfThawString("", "RecentFile_" + std::to_string(i)); + } + RefreshRecentMenus(); + // Autosave timer + autosaveInterval = CnfThawInt(5, "AutosaveInterval"); + + // The default styles (colors, line widths, etc.) are also stored in the + // configuration file, but we will automatically load those as we need + // them. + + SetAutosaveTimerFor(autosaveInterval); + + NewFile(); + AfterNewFile(); +} + +bool SolveSpaceUI::LoadAutosaveFor(const std::string &filename) { + std::string autosaveFile = filename + AUTOSAVE_SUFFIX; + + FILE *f = ssfopen(autosaveFile, "rb"); + if(!f) + return false; + fclose(f); + + if(LoadAutosaveYesNo() == DIALOG_YES) { + unsaved = true; + return LoadFromFile(autosaveFile); + } + + return false; +} + +bool SolveSpaceUI::OpenFile(const std::string &filename) { + bool autosaveLoaded = LoadAutosaveFor(filename); + bool fileLoaded = autosaveLoaded || LoadFromFile(filename); + if(fileLoaded) + saveFile = filename; + bool success = fileLoaded && ReloadAllImported(/*canCancel=*/true); + if(success) { + AddToRecentList(filename); + } else { + saveFile = ""; + NewFile(); + } + AfterNewFile(); + unsaved = autosaveLoaded; + return success; +} + +void SolveSpaceUI::Exit(void) { + // Recent files + for(int i = 0; i < MAX_RECENT; i++) + CnfFreezeString(RecentFile[i], "RecentFile_" + std::to_string(i)); + // Model colors + for(int i = 0; i < MODEL_COLORS; i++) + CnfFreezeColor(modelColor[i], "ModelColor_" + std::to_string(i)); + // Light intensities + CnfFreezeFloat((float)lightIntensity[0], "LightIntensity_0"); + CnfFreezeFloat((float)lightIntensity[1], "LightIntensity_1"); + // Light directions + CnfFreezeFloat((float)lightDir[0].x, "LightDir_0_Right"); + CnfFreezeFloat((float)lightDir[0].y, "LightDir_0_Up"); + CnfFreezeFloat((float)lightDir[0].z, "LightDir_0_Forward"); + CnfFreezeFloat((float)lightDir[1].x, "LightDir_1_Right"); + CnfFreezeFloat((float)lightDir[1].y, "LightDir_1_Up"); + CnfFreezeFloat((float)lightDir[1].z, "LightDir_1_Forward"); + // Chord tolerance + CnfFreezeFloat((float)chordTol, "ChordTolerancePct"); + // Max pwl segments to generate + CnfFreezeInt((uint32_t)maxSegments, "MaxSegments"); + // Export Chord tolerance + CnfFreezeFloat((float)exportChordTol, "ExportChordTolerance"); + // Export Max pwl segments to generate + CnfFreezeInt((uint32_t)exportMaxSegments, "ExportMaxSegments"); + // View units + CnfFreezeInt((uint32_t)viewUnits, "ViewUnits"); + // Number of digits after the decimal point + CnfFreezeInt((uint32_t)afterDecimalMm, "AfterDecimalMm"); + CnfFreezeInt((uint32_t)afterDecimalInch, "AfterDecimalInch"); + // Camera tangent (determines perspective) + CnfFreezeFloat((float)cameraTangent, "CameraTangent"); + // Grid spacing + CnfFreezeFloat(gridSpacing, "GridSpacing"); + // Export scale + CnfFreezeFloat(exportScale, "ExportScale"); + // Export offset (cutter radius comp) + CnfFreezeFloat(exportOffset, "ExportOffset"); + // Rewrite exported colors close to white into black (assuming white bg) + CnfFreezeBool(fixExportColors, "FixExportColors"); + // Draw back faces of triangles (when mesh is leaky/self-intersecting) + CnfFreezeBool(drawBackFaces, "DrawBackFaces"); + // Check that contours are closed and not self-intersecting + CnfFreezeBool(checkClosedContour, "CheckClosedContour"); + // Export shaded triangles in a 2d view + CnfFreezeBool(exportShadedTriangles, "ExportShadedTriangles"); + // Export pwl curves (instead of exact) always + CnfFreezeBool(exportPwlCurves, "ExportPwlCurves"); + // Background color on-screen + CnfFreezeColor(backgroundColor, "BackgroundColor"); + // Whether export canvas size is fixed or derived from bbox + CnfFreezeBool(exportCanvasSizeAuto, "ExportCanvasSizeAuto"); + // Margins for automatic canvas size + CnfFreezeFloat(exportMargin.left, "ExportMargin_Left"); + CnfFreezeFloat(exportMargin.right, "ExportMargin_Right"); + CnfFreezeFloat(exportMargin.bottom, "ExportMargin_Bottom"); + CnfFreezeFloat(exportMargin.top, "ExportMargin_Top"); + // Dimensions for fixed canvas size + CnfFreezeFloat(exportCanvas.width, "ExportCanvas_Width"); + CnfFreezeFloat(exportCanvas.height, "ExportCanvas_Height"); + CnfFreezeFloat(exportCanvas.dx, "ExportCanvas_Dx"); + CnfFreezeFloat(exportCanvas.dy, "ExportCanvas_Dy"); + // Extra parameters when exporting G code + CnfFreezeFloat(gCode.depth, "GCode_Depth"); + CnfFreezeInt(gCode.passes, "GCode_Passes"); + CnfFreezeFloat(gCode.feed, "GCode_Feed"); + CnfFreezeFloat(gCode.plungeFeed, "GCode_PlungeFeed"); + // Show toolbar in the graphics window + CnfFreezeBool(showToolbar, "ShowToolbar"); + // Autosave timer + CnfFreezeInt(autosaveInterval, "AutosaveInterval"); + + // And the default styles, colors and line widths and such. + Style::FreezeDefaultStyles(); + + ExitNow(); +} + +void SolveSpaceUI::ScheduleGenerateAll() { + if(!later.scheduled) ScheduleLater(); + later.scheduled = true; + later.generateAll = true; +} + +void SolveSpaceUI::ScheduleShowTW() { + if(!later.scheduled) ScheduleLater(); + later.scheduled = true; + later.showTW = true; +} + +void SolveSpaceUI::DoLater(void) { + if(later.generateAll) GenerateAll(); + if(later.showTW) TW.Show(); + later = {}; +} + +double SolveSpaceUI::MmPerUnit(void) { + if(viewUnits == UNIT_INCHES) { + return 25.4; + } else { + return 1.0; + } +} +const char *SolveSpaceUI::UnitName(void) { + if(viewUnits == UNIT_INCHES) { + return "inch"; + } else { + return "mm"; + } +} +std::string SolveSpaceUI::MmToString(double v) { + if(viewUnits == UNIT_INCHES) { + return ssprintf("%.*f", afterDecimalInch, v/25.4); + } else { + return ssprintf("%.*f", afterDecimalMm, v); + } +} +double SolveSpaceUI::ExprToMm(Expr *e) { + return (e->Eval()) * MmPerUnit(); +} +double SolveSpaceUI::StringToMm(const std::string &str) { + return std::stod(str) * MmPerUnit(); +} +double SolveSpaceUI::ChordTolMm(void) { + if(exportMode) return ExportChordTolMm(); + return chordTolCalculated; +} +double SolveSpaceUI::ExportChordTolMm(void) { + return exportChordTol / exportScale; +} +int SolveSpaceUI::GetMaxSegments(void) { + if(exportMode) return exportMaxSegments; + return maxSegments; +} +int SolveSpaceUI::UnitDigitsAfterDecimal(void) { + return (viewUnits == UNIT_INCHES) ? afterDecimalInch : afterDecimalMm; +} +void SolveSpaceUI::SetUnitDigitsAfterDecimal(int v) { + if(viewUnits == UNIT_INCHES) { + afterDecimalInch = v; + } else { + afterDecimalMm = v; + } +} + +double SolveSpaceUI::CameraTangent(void) { + if(!usePerspectiveProj) { + return 0; + } else { + return cameraTangent; + } +} + +void SolveSpaceUI::AfterNewFile(void) { + // Clear out the traced point, which is no longer valid + traced.point = Entity::NO_ENTITY; + traced.path.l.Clear(); + // and the naked edges + nakedEdges.Clear(); + + // Quit export mode + justExportedInfo.draw = false; + exportMode = false; + + // GenerateAll() expects the view to be valid, because it uses that to + // fill in default values for extrusion depths etc. (which won't matter + // here, but just don't let it work on garbage) + SS.GW.offset = Vector::From(0, 0, 0); + SS.GW.projRight = Vector::From(1, 0, 0); + SS.GW.projUp = Vector::From(0, 1, 0); + + GenerateAll(GENERATE_REGEN); + + TW.Init(); + GW.Init(); + + unsaved = false; + + int w, h; + GetGraphicsWindowSize(&w, &h); + GW.width = w; + GW.height = h; + + // The triangles haven't been generated yet, but zoom to fit the entities + // roughly in the window, since that sets the mesh tolerance. Consider + // invisible entities, so we still get something reasonable if the only + // thing visible is the not-yet-generated surfaces. + GW.ZoomToFit(true); + + GenerateAll(GENERATE_ALL); + SS.ScheduleShowTW(); + // Then zoom to fit again, to fit the triangles + GW.ZoomToFit(false); + + // Create all the default styles; they'll get created on the fly anyways, + // but can't hurt to do it now. + Style::CreateAllDefaultStyles(); + + UpdateWindowTitle(); +} + +void SolveSpaceUI::RemoveFromRecentList(const std::string &filename) { + int src, dest; + dest = 0; + for(src = 0; src < MAX_RECENT; src++) { + if(filename != RecentFile[src]) { + if(src != dest) RecentFile[dest] = RecentFile[src]; + dest++; + } + } + while(dest < MAX_RECENT) RecentFile[dest++].clear(); + RefreshRecentMenus(); +} +void SolveSpaceUI::AddToRecentList(const std::string &filename) { + RemoveFromRecentList(filename); + + int src; + for(src = MAX_RECENT - 2; src >= 0; src--) { + RecentFile[src+1] = RecentFile[src]; + } + RecentFile[0] = filename; + RefreshRecentMenus(); +} + +bool SolveSpaceUI::GetFilenameAndSave(bool saveAs) { + std::string prevSaveFile = saveFile; + + if(saveAs || saveFile.empty()) { + if(!GetSaveFile(&saveFile, "", SlvsFileFilter)) return false; + // need to get new filename directly into saveFile, since that + // determines linkFileRel path + } + + if(SaveToFile(saveFile)) { + AddToRecentList(saveFile); + RemoveAutosave(); + unsaved = false; + return true; + } else { + // don't store an invalid save filename + saveFile = prevSaveFile; + return false; + } +} + +bool SolveSpaceUI::Autosave() +{ + SetAutosaveTimerFor(autosaveInterval); + + if(!saveFile.empty() && unsaved) + return SaveToFile(saveFile + AUTOSAVE_SUFFIX); + + return false; +} + +void SolveSpaceUI::RemoveAutosave() +{ + std::string autosaveFile = saveFile + AUTOSAVE_SUFFIX; + ssremove(autosaveFile); +} + +bool SolveSpaceUI::OkayToStartNewFile(void) { + if(!unsaved) return true; + + switch(SaveFileYesNoCancel()) { + case DIALOG_YES: + return GetFilenameAndSave(false); + + case DIALOG_NO: + RemoveAutosave(); + return true; + + case DIALOG_CANCEL: + return false; + + default: oops(); break; + } +} + +void SolveSpaceUI::UpdateWindowTitle(void) { + SetCurrentFilename(saveFile); +} + +static std::string Extension(const std::string &filename) { + int dot = filename.rfind('.'); + if(dot >= 0) + return filename.substr(dot + 1, filename.length()); + return ""; +} + +void SolveSpaceUI::MenuFile(int id) { + if(id >= RECENT_OPEN && id < (RECENT_OPEN+MAX_RECENT)) { + if(!SS.OkayToStartNewFile()) return; + + std::string newFile = RecentFile[id - RECENT_OPEN]; + SS.OpenFile(newFile); + return; + } + + switch(id) { + case GraphicsWindow::MNU_NEW: + if(!SS.OkayToStartNewFile()) break; + + SS.saveFile = ""; + SS.NewFile(); + SS.AfterNewFile(); + break; + + case GraphicsWindow::MNU_OPEN: { + if(!SS.OkayToStartNewFile()) break; + + std::string newFile; + if(GetOpenFile(&newFile, "", SlvsFileFilter)) { + SS.OpenFile(newFile); + } + break; + } + + case GraphicsWindow::MNU_SAVE: + SS.GetFilenameAndSave(false); + break; + + case GraphicsWindow::MNU_SAVE_AS: + SS.GetFilenameAndSave(true); + break; + + case GraphicsWindow::MNU_EXPORT_PNG: { + std::string exportFile; + if(!GetSaveFile(&exportFile, "", PngFileFilter)) break; + SS.ExportAsPngTo(exportFile); + break; + } + + case GraphicsWindow::MNU_EXPORT_VIEW: { + std::string exportFile; + if(!GetSaveFile(&exportFile, CnfThawString("", "ViewExportFormat"), + VectorFileFilter)) break; + CnfFreezeString(Extension(exportFile), "ViewExportFormat"); + + // If the user is exporting something where it would be + // inappropriate to include the constraints, then warn. + if(SS.GW.showConstraints && + (FilenameHasExtension(exportFile, ".txt") || + fabs(SS.exportOffset) > LENGTH_EPS)) + { + Message("Constraints are currently shown, and will be exported " + "in the toolpath. This is probably not what you want; " + "hide them by clicking the link at the top of the " + "text window."); + } + + SS.ExportViewOrWireframeTo(exportFile, false); + break; + } + + case GraphicsWindow::MNU_EXPORT_WIREFRAME: { + std::string exportFile; + if(!GetSaveFile(&exportFile, CnfThawString("", "WireframeExportFormat"), + Vector3dFileFilter)) break; + CnfFreezeString(Extension(exportFile), "WireframeExportFormat"); + + SS.ExportViewOrWireframeTo(exportFile, true); + break; + } + + case GraphicsWindow::MNU_EXPORT_SECTION: { + std::string exportFile; + if(!GetSaveFile(&exportFile, CnfThawString("", "SectionExportFormat"), + VectorFileFilter)) break; + CnfFreezeString(Extension(exportFile), "SectionExportFormat"); + + SS.ExportSectionTo(exportFile); + break; + } + + case GraphicsWindow::MNU_EXPORT_MESH: { + std::string exportFile; + if(!GetSaveFile(&exportFile, CnfThawString("", "MeshExportFormat"), + MeshFileFilter)) break; + CnfFreezeString(Extension(exportFile), "MeshExportFormat"); + + SS.ExportMeshTo(exportFile); + break; + } + + case GraphicsWindow::MNU_EXPORT_SURFACES: { + std::string exportFile; + if(!GetSaveFile(&exportFile, CnfThawString("", "SurfacesExportFormat"), + SurfaceFileFilter)) break; + CnfFreezeString(Extension(exportFile), "SurfacesExportFormat"); + + StepFileWriter sfw = {}; + sfw.ExportSurfacesTo(exportFile); + break; + } + + case GraphicsWindow::MNU_IMPORT: { + std::string importFile; + if(!GetOpenFile(&importFile, CnfThawString("", "ImportFormat"), + ImportableFileFilter)) break; + CnfFreezeString(Extension(importFile), "ImportFormat"); + + if(Extension(importFile) == "dxf") { + ImportDxf(importFile); + } else if(Extension(importFile) == "dwg") { + ImportDwg(importFile); + } else oops(); + + SS.GenerateAll(SolveSpaceUI::GENERATE_UNTIL_ACTIVE); + SS.ScheduleShowTW(); + break; + } + + case GraphicsWindow::MNU_EXIT: + if(!SS.OkayToStartNewFile()) break; + SS.Exit(); + break; + + default: oops(); + } + + SS.UpdateWindowTitle(); +} + +void SolveSpaceUI::MenuAnalyze(int id) { + SS.GW.GroupSelection(); +#define gs (SS.GW.gs) + + switch(id) { + case GraphicsWindow::MNU_STEP_DIM: + if(gs.constraints == 1 && gs.n == 0) { + Constraint *c = SK.GetConstraint(gs.constraint[0]); + if(c->HasLabel() && !c->reference) { + SS.TW.shown.dimFinish = c->valA; + SS.TW.shown.dimSteps = 10; + SS.TW.shown.dimIsDistance = + (c->type != Constraint::ANGLE) && + (c->type != Constraint::LENGTH_RATIO) && + (c->type != Constraint::LENGTH_DIFFERENCE); + SS.TW.shown.constraint = c->h; + SS.TW.shown.screen = TextWindow::SCREEN_STEP_DIMENSION; + + // The step params are specified in the text window, + // so force that to be shown. + SS.GW.ForceTextWindowShown(); + + SS.ScheduleShowTW(); + SS.GW.ClearSelection(); + } else { + Error("Constraint must have a label, and must not be " + "a reference dimension."); + } + } else { + Error("Bad selection for step dimension; select a constraint."); + } + break; + + case GraphicsWindow::MNU_NAKED_EDGES: { + SS.nakedEdges.Clear(); + + Group *g = SK.GetGroup(SS.GW.activeGroup); + SMesh *m = &(g->displayMesh); + SKdNode *root = SKdNode::From(m); + bool inters, leaks; + root->MakeCertainEdgesInto(&(SS.nakedEdges), + SKdNode::NAKED_OR_SELF_INTER_EDGES, true, &inters, &leaks); + + InvalidateGraphics(); + + const char *intersMsg = inters ? + "The mesh is self-intersecting (NOT okay, invalid)." : + "The mesh is not self-intersecting (okay, valid)."; + const char *leaksMsg = leaks ? + "The mesh has naked edges (NOT okay, invalid)." : + "The mesh is watertight (okay, valid)."; + + std::string cntMsg = ssprintf("\n\nThe model contains %d triangles, from " + "%d surfaces.", g->displayMesh.l.n, g->runningShell.surface.n); + + if(SS.nakedEdges.l.n == 0) { + Message("%s\n\n%s\n\nZero problematic edges, good.%s", + intersMsg, leaksMsg, cntMsg.c_str()); + } else { + Error("%s\n\n%s\n\n%d problematic edges, bad.%s", + intersMsg, leaksMsg, SS.nakedEdges.l.n, cntMsg.c_str()); + } + break; + } + + case GraphicsWindow::MNU_INTERFERENCE: { + SS.nakedEdges.Clear(); + + SMesh *m = &(SK.GetGroup(SS.GW.activeGroup)->displayMesh); + SKdNode *root = SKdNode::From(m); + bool inters, leaks; + root->MakeCertainEdgesInto(&(SS.nakedEdges), + SKdNode::SELF_INTER_EDGES, false, &inters, &leaks); + + InvalidateGraphics(); + + if(inters) { + Error("%d edges interfere with other triangles, bad.", + SS.nakedEdges.l.n); + } else { + Message("The assembly does not interfere, good."); + } + break; + } + + case GraphicsWindow::MNU_VOLUME: { + SMesh *m = &(SK.GetGroup(SS.GW.activeGroup)->displayMesh); + + double vol = 0; + int i; + for(i = 0; i < m->l.n; i++) { + STriangle tr = m->l.elem[i]; + + // Translate to place vertex A at (x, y, 0) + Vector trans = Vector::From(tr.a.x, tr.a.y, 0); + tr.a = (tr.a).Minus(trans); + tr.b = (tr.b).Minus(trans); + tr.c = (tr.c).Minus(trans); + + // Rotate to place vertex B on the y-axis. Depending on + // whether the triangle is CW or CCW, C is either to the + // right or to the left of the y-axis. This handles the + // sign of our normal. + Vector u = Vector::From(-tr.b.y, tr.b.x, 0); + u = u.WithMagnitude(1); + Vector v = Vector::From(tr.b.x, tr.b.y, 0); + v = v.WithMagnitude(1); + Vector n = Vector::From(0, 0, 1); + + tr.a = (tr.a).DotInToCsys(u, v, n); + tr.b = (tr.b).DotInToCsys(u, v, n); + tr.c = (tr.c).DotInToCsys(u, v, n); + + n = tr.Normal().WithMagnitude(1); + + // Triangles on edge don't contribute + if(fabs(n.z) < LENGTH_EPS) continue; + + // The plane has equation p dot n = a dot n + double d = (tr.a).Dot(n); + // nx*x + ny*y + nz*z = d + // nz*z = d - nx*x - ny*y + double A = -n.x/n.z, B = -n.y/n.z, C = d/n.z; + + double mac = tr.c.y/tr.c.x, mbc = (tr.c.y - tr.b.y)/tr.c.x; + double xc = tr.c.x, yb = tr.b.y; + + // I asked Maple for + // int(int(A*x + B*y +C, y=mac*x..(mbc*x + yb)), x=0..xc); + double integral = + (1.0/3)*( + A*(mbc-mac)+ + (1.0/2)*B*(mbc*mbc-mac*mac) + )*(xc*xc*xc)+ + (1.0/2)*(A*yb+B*yb*mbc+C*(mbc-mac))*xc*xc+ + C*yb*xc+ + (1.0/2)*B*yb*yb*xc; + + vol += integral; + } + + std::string msg = ssprintf("The volume of the solid model is:\n\n"" %.3f %s^3", + vol / pow(SS.MmPerUnit(), 3), + SS.UnitName()); + + if(SS.viewUnits == SolveSpaceUI::UNIT_MM) { + msg += ssprintf("\n %.2f mL", vol/(10*10*10)); + } + msg += "\n\nCurved surfaces have been approximated as triangles.\n" + "This introduces error, typically of around 1%."; + Message("%s", msg.c_str()); + break; + } + + case GraphicsWindow::MNU_AREA: { + Group *g = SK.GetGroup(SS.GW.activeGroup); + if(g->polyError.how != Group::POLY_GOOD) { + Error("This group does not contain a correctly-formed " + "2d closed area. It is open, not coplanar, or self-" + "intersecting."); + break; + } + SEdgeList sel = {}; + g->polyLoops.MakeEdgesInto(&sel); + SPolygon sp = {}; + sel.AssemblePolygon(&sp, NULL, true); + sp.normal = sp.ComputeNormal(); + sp.FixContourDirections(); + double area = sp.SignedArea(); + double scale = SS.MmPerUnit(); + Message("The area of the region sketched in this group is:\n\n" + " %.3f %s^2\n\n" + "Curves have been approximated as piecewise linear.\n" + "This introduces error, typically of around 1%%.", + area / (scale*scale), + SS.UnitName()); + sel.Clear(); + sp.Clear(); + break; + } + + case GraphicsWindow::MNU_SHOW_DOF: + // This works like a normal solve, except that it calculates + // which variables are free/bound at the same time. + SS.GenerateAll(SolveSpaceUI::GENERATE_ALL, true); + break; + + case GraphicsWindow::MNU_TRACE_PT: + if(gs.points == 1 && gs.n == 1) { + SS.traced.point = gs.point[0]; + SS.GW.ClearSelection(); + } else { + Error("Bad selection for trace; select a single point."); + } + break; + + case GraphicsWindow::MNU_STOP_TRACING: { + std::string exportFile; + if(GetSaveFile(&exportFile, "", CsvFileFilter)) { + FILE *f = ssfopen(exportFile, "wb"); + if(f) { + int i; + SContour *sc = &(SS.traced.path); + for(i = 0; i < sc->l.n; i++) { + Vector p = sc->l.elem[i].p; + double s = SS.exportScale; + fprintf(f, "%.10f, %.10f, %.10f\r\n", + p.x/s, p.y/s, p.z/s); + } + fclose(f); + } else { + Error("Couldn't write to '%s'", exportFile.c_str()); + } + } + // Clear the trace, and stop tracing + SS.traced.point = Entity::NO_ENTITY; + SS.traced.path.l.Clear(); + InvalidateGraphics(); + break; + } + + default: oops(); + } +} + +void SolveSpaceUI::MenuHelp(int id) { + switch(id) { + case GraphicsWindow::MNU_WEBSITE: + OpenWebsite("http://solvespace.com/helpmenu"); + break; + + case GraphicsWindow::MNU_ABOUT: + Message( +"This is SolveSpace version " PACKAGE_VERSION ".\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-2016 Jonathan Westhues and other authors.\n" +); + break; + + default: oops(); + } +} + +void SolveSpaceUI::Clear(void) { + sys.Clear(); + for(int i = 0; i < MAX_UNDO; i++) { + if(i < undo.cnt) undo.d[i].Clear(); + if(i < redo.cnt) redo.d[i].Clear(); + } +} + +void Sketch::Clear(void) { + group.Clear(); + groupOrder.Clear(); + constraint.Clear(); + request.Clear(); + style.Clear(); + entity.Clear(); + param.Clear(); +} + +BBox Sketch::CalculateEntityBBox(bool includingInvisible) { + BBox box = {}; + bool first = true; + for(int i = 0; i < entity.n; i++) { + Entity *e = (Entity *)&entity.elem[i]; + if(!(e->IsVisible() || includingInvisible)) continue; + + Vector point; + double r = 0.0; + if(e->IsPoint()) { + point = e->PointGetNum(); + } else { + switch(e->type) { + case Entity::ARC_OF_CIRCLE: + case Entity::CIRCLE: + r = e->CircleGetRadiusNum(); + point = GetEntity(e->point[0])->PointGetNum(); + break; + default: continue; + } + } + + if(first) { + box.minp = point; + box.maxp = point; + box.Include(point, r); + first = false; + } else { + box.Include(point, r); + } + } + return box; +} + +Group *Sketch::GetRunningMeshGroupFor(hGroup h) { + Group *g = GetGroup(h); + while(g != NULL) { + if(g->IsMeshGroup()) { + return g; + } + g = g->PreviousGroup(); + } + return NULL; +} diff --git a/src/solvespace.h b/src/solvespace.h new file mode 100644 index 0000000..46debb9 --- /dev/null +++ b/src/solvespace.h @@ -0,0 +1,966 @@ +//----------------------------------------------------------------------------- +// All declarations not grouped specially elsewhere. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- + +#ifndef __SOLVESPACE_H +#define __SOLVESPACE_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef WIN32 +# include // required by GL headers +#endif +#ifdef __APPLE__ +# include // for strcasecmp in file.cpp +# include +# include +#else +# include +# include +#endif + +// We declare these in advance instead of simply using FT_Library +// (defined as typedef FT_LibraryRec_* FT_Library) because including +// freetype.h invokes indescribable horrors and we would like to avoid +// doing that every time we include solvespace.h. +struct FT_LibraryRec_; +struct FT_FaceRec_; + +// The few floating-point equality comparisons in SolveSpace have been +// carefully considered, so we disable the -Wfloat-equal warning for them +#ifdef __clang__ +# define EXACT(expr) \ + (_Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wfloat-equal\"") \ + (expr) \ + _Pragma("clang diagnostic pop")) +#else +# define EXACT(expr) (expr) +#endif + +// Debugging functions +#ifdef NDEBUG +#define oops() do { dbp("oops at line %d, file %s\n", __LINE__, __FILE__); \ + exit(-1); } while(0) +#else +#define oops() do { dbp("oops at line %d, file %s\n", __LINE__, __FILE__); \ + abort(); } while(0) +#endif + +#ifndef isnan +# define isnan(x) (((x) != (x)) || (x > 1e11) || (x < -1e11)) +#endif + +namespace SolveSpace { + +using std::min; +using std::max; +using std::swap; + +#if defined(__GNUC__) +__attribute__((__format__ (__printf__, 1, 2))) +#endif +std::string ssprintf(const char *fmt, ...); + +inline int WRAP(int v, int n) { + // Clamp it to the range [0, n) + while(v >= n) v -= n; + while(v < 0) v += n; + return v; +} +inline double WRAP_NOT_0(double v, double n) { + // Clamp it to the range (0, n] + while(v > n) v -= n; + while(v <= 0) v += n; + return v; +} +inline double WRAP_SYMMETRIC(double v, double n) { + // Clamp it to the range (-n/2, n/2] + while(v > n/2) v -= n; + while(v <= -n/2) v += n; + return v; +} + +// Why is this faster than the library function? +inline double ffabs(double v) { return (v > 0) ? v : (-v); } + +#define CO(v) (v).x, (v).y, (v).z + +#define ANGLE_COS_EPS (1e-6) +#define LENGTH_EPS (1e-6) +#define VERY_POSITIVE (1e10) +#define VERY_NEGATIVE (-1e10) + +#define isforname(c) (isalnum(c) || (c) == '_' || (c) == '-' || (c) == '#') + +#if defined(WIN32) +std::string Narrow(const wchar_t *s); +std::wstring Widen(const char *s); +std::string Narrow(const std::wstring &s); +std::wstring Widen(const std::string &s); +#endif + +inline double Random(double vmax) { + return (vmax*rand()) / RAND_MAX; +} + +class Expr; +class ExprVector; +class ExprQuaternion; +class RgbaColor; + +//================ +// From the platform-specific code. +#if defined(WIN32) +#define PATH_SEP "\\" +#else +#define PATH_SEP "/" +#endif + +FILE *ssfopen(const std::string &filename, const char *mode); +void ssremove(const std::string &filename); + +#define MAX_RECENT 8 +#define RECENT_OPEN (0xf000) +#define RECENT_LINK (0xf100) +extern std::string RecentFile[MAX_RECENT]; +void RefreshRecentMenus(void); + +enum DialogChoice { DIALOG_YES = 1, DIALOG_NO = -1, DIALOG_CANCEL = 0 }; +DialogChoice SaveFileYesNoCancel(void); +DialogChoice LoadAutosaveYesNo(void); +DialogChoice LocateImportedFileYesNoCancel(const std::string &filename, + bool canCancel); + +#define AUTOSAVE_SUFFIX "~" + +struct FileFilter { + const char *name; + const char *patterns[3]; +}; + +// SolveSpace native file format +const FileFilter SlvsFileFilter[] = { + { "SolveSpace models", { "slvs" } }, + { NULL, {} } +}; +// PNG format bitmap +const FileFilter PngFileFilter[] = { + { "PNG", { "png" } }, + { NULL, {} } +}; +// Triangle mesh +const FileFilter MeshFileFilter[] = { + { "STL mesh", { "stl" } }, + { "Wavefront OBJ mesh", { "obj" } }, + { "Three.js-compatible mesh, with viewer", { "html" } }, + { "Three.js-compatible mesh, mesh only", { "js" } }, + { NULL, {} } +}; +// NURBS surfaces +const FileFilter SurfaceFileFilter[] = { + { "STEP file", { "step", "stp" } }, + { NULL, {} } +}; +// 2d vector (lines and curves) format +const FileFilter VectorFileFilter[] = { + { "PDF file", { "pdf" } }, + { "Encapsulated PostScript", { "eps", "ps" } }, + { "Scalable Vector Graphics", { "svg" } }, + { "STEP file", { "step", "stp" } }, + { "DXF file (AutoCAD 2007)", { "dxf" } }, + { "HPGL file", { "plt", "hpgl" } }, + { "G Code", { "ngc", "txt" } }, + { NULL, {} } +}; +// 3d vector (wireframe lines and curves) format +const FileFilter Vector3dFileFilter[] = { + { "STEP file", { "step", "stp" } }, + { "DXF file (AutoCAD 2007)", { "dxf" } }, + { NULL, {} } +}; +// All Importable formats +const FileFilter ImportableFileFilter[] = { + { "AutoCAD DXF and DWG files", { "dxf", "dwg" } }, + { NULL, {} } +}; +// Comma-separated value, like a spreadsheet would use +const FileFilter CsvFileFilter[] = { + { "CSV", { "csv" } }, + { NULL, {} } +}; + +bool GetSaveFile(std::string *filename, const std::string &defExtension, + const FileFilter filters[]); +bool GetOpenFile(std::string *filename, const std::string &defExtension, + const FileFilter filters[]); +std::vector GetFontFiles(); + +void OpenWebsite(const char *url); + +void CheckMenuById(int id, bool checked); +void RadioMenuById(int id, bool selected); +void EnableMenuById(int id, bool enabled); + +void ShowGraphicsEditControl(int x, int y, int fontHeight, int minWidthChars, + const std::string &str); +void HideGraphicsEditControl(void); +bool GraphicsEditControlIsVisible(void); +void ShowTextEditControl(int x, int y, const std::string &str); +void HideTextEditControl(void); +bool TextEditControlIsVisible(void); +void MoveTextScrollbarTo(int pos, int maxPos, int page); + +#define CONTEXT_SUBMENU (-1) +#define CONTEXT_SEPARATOR (-2) +void AddContextMenuItem(const char *legend, int id); +void CreateContextSubmenu(void); +int ShowContextMenu(void); + +void ToggleMenuBar(void); +bool MenuBarIsVisible(void); +void ShowTextWindow(bool visible); +void InvalidateText(void); +void InvalidateGraphics(void); +void PaintGraphics(void); +void ToggleFullScreen(void); +bool FullScreenIsActive(void); +void GetGraphicsWindowSize(int *w, int *h); +void GetTextWindowSize(int *w, int *h); +int64_t GetMilliseconds(void); +int64_t GetUnixTime(void); + +void dbp(const char *str, ...); +#define DBPTRI(tri) \ + dbp("tri: (%.3f %.3f %.3f) (%.3f %.3f %.3f) (%.3f %.3f %.3f)", \ + CO((tri).a), CO((tri).b), CO((tri).c)) + +void SetCurrentFilename(const std::string &filename); +void SetMousePointerToHand(bool yes); +void DoMessageBox(const char *str, int rows, int cols, bool error); +void SetTimerFor(int milliseconds); +void SetAutosaveTimerFor(int minutes); +void ScheduleLater(); +void ExitNow(void); + +void CnfFreezeInt(uint32_t val, const std::string &name); +void CnfFreezeFloat(float val, const std::string &name); +void CnfFreezeString(const std::string &val, const std::string &name); +std::string CnfThawString(const std::string &val, const std::string &name); +uint32_t CnfThawInt(uint32_t val, const std::string &name); +float CnfThawFloat(float val, const std::string &name); + +void *AllocTemporary(size_t n); +void FreeTemporary(void *p); +void FreeAllTemporary(void); +void *MemAlloc(size_t n); +void MemFree(void *p); +void InitHeaps(void); +void vl(void); // debug function to validate heaps + +// End of platform-specific functions +//================ + +class Group; +class SSurface; +#include "dsc.h" +#include "polygon.h" +#include "srf/surface.h" + +class Entity; +class hEntity; +class Param; +class hParam; +typedef IdList EntityList; +typedef IdList ParamList; + +#include "sketch.h" +#include "ui.h" +#include "expr.h" + + +// Utility functions that are provided in the platform-independent code. +class utf8_iterator : std::iterator { + const char *p, *n; +public: + utf8_iterator(const char *p) : p(p), n(NULL) {} + bool operator==(const utf8_iterator &i) const { return p==i.p; } + bool operator!=(const utf8_iterator &i) const { return p!=i.p; } + ptrdiff_t operator- (const utf8_iterator &i) const { return p -i.p; } + utf8_iterator& operator++() { **this; p=n; n=NULL; return *this; } + utf8_iterator operator++(int) { utf8_iterator t(*this); operator++(); return t; } + char32_t operator*(); +}; +class ReadUTF8 { + const std::string &str; +public: + ReadUTF8(const std::string &str) : str(str) {} + utf8_iterator begin() const { return utf8_iterator(&str[0]); } + utf8_iterator end() const { return utf8_iterator(&str[str.length()]); } +}; + +void ssglLineWidth(GLfloat width); +void ssglVertex3v(Vector u); +void ssglAxisAlignedQuad(double l, double r, double t, double b, bool lone = true); +void ssglAxisAlignedLineLoop(double l, double r, double t, double b); +#ifdef WIN32 +# define SSGL_CALLBACK __stdcall +#else +# define SSGL_CALLBACK +#endif +extern "C" { typedef void SSGL_CALLBACK ssglCallbackFptr(void); } +void ssglTesselatePolygon(GLUtesselator *gt, SPolygon *p); +void ssglFillPolygon(SPolygon *p); +void ssglFillMesh(bool useSpecColor, RgbaColor color, + SMesh *m, uint32_t h, uint32_t s1, uint32_t s2); +void ssglDebugPolygon(SPolygon *p); +void ssglDrawEdges(SEdgeList *l, bool endpointsToo, hStyle hs); +void ssglDrawOutlines(SOutlineList *l, Vector projDir, hStyle hs); +void ssglDebugMesh(SMesh *m); +void ssglMarkPolygonNormal(SPolygon *p); +typedef void ssglLineFn(void *data, Vector a, Vector b); +void ssglWriteText(const std::string &str, double h, Vector t, Vector u, Vector v, + ssglLineFn *fn, void *fndata); +void ssglWriteTextRefCenter(const std::string &str, double h, Vector t, Vector u, Vector v, + ssglLineFn *fn, void *fndata); +double ssglStrCapHeight(double h); +double ssglStrFontSize(double h); +double ssglStrWidth(const std::string &str, double h); +void ssglLockColorTo(RgbaColor rgb); +void ssglStippledLine(Vector a, Vector b, double width, + int stippleType, double stippleScale, bool maybeFat); +void ssglStippledLine(Vector a, Vector b, double width, + const char *stipplePattern, double stippleScale, bool maybeFat); +void ssglFatLine(Vector a, Vector b, double width); +void ssglUnlockColor(void); +void ssglColorRGB(RgbaColor rgb); +void ssglColorRGBa(RgbaColor rgb, double a); +void ssglDepthRangeOffset(int units); +void ssglDepthRangeLockToFront(bool yes); +void ssglDrawPixelsWithTexture(uint8_t *data, int w, int h); +void ssglInitializeBitmapFont(); +void ssglBitmapText(const std::string &str, Vector p); +void ssglBitmapCharQuad(char32_t chr, double x, double y); +int ssglBitmapCharWidth(char32_t chr); +#define TEXTURE_BACKGROUND_IMG 10 +#define TEXTURE_DRAW_PIXELS 20 +#define TEXTURE_COLOR_PICKER_2D 30 +#define TEXTURE_COLOR_PICKER_1D 40 +#define TEXTURE_BITMAP_FONT 50 + + +#define arraylen(x) (sizeof((x))/sizeof((x)[0])) +#define PI (3.1415926535897931) +void MakeMatrix(double *mat, double a11, double a12, double a13, double a14, + double a21, double a22, double a23, double a24, + double a31, double a32, double a33, double a34, + double a41, double a42, double a43, double a44); +std::string MakeAcceleratorLabel(int accel); +bool FilenameHasExtension(const std::string &str, const char *ext); +void Message(const char *str, ...); +void Error(const char *str, ...); +void CnfFreezeBool(bool v, const std::string &name); +void CnfFreezeColor(RgbaColor v, const std::string &name); +bool CnfThawBool(bool v, const std::string &name); +RgbaColor CnfThawColor(RgbaColor v, const std::string &name); + +class System { +public: + enum { MAX_UNKNOWNS = 1024 }; + + EntityList entity; + ParamList param; + IdList eq; + + // A list of parameters that are being dragged; these are the ones that + // we should put as close as possible to their initial positions. + List dragged; + + enum { + // In general, the tag indicates the subsys that a variable/equation + // has been assigned to; these are exceptions for variables: + VAR_SUBSTITUTED = 10000, + VAR_DOF_TEST = 10001, + // and for equations: + EQ_SUBSTITUTED = 20000 + }; + + // The system Jacobian matrix + struct { + // The corresponding equation for each row + hEquation eq[MAX_UNKNOWNS]; + + // The corresponding parameter for each column + hParam param[MAX_UNKNOWNS]; + + // We're solving AX = B + int m, n; + struct { + Expr *sym[MAX_UNKNOWNS][MAX_UNKNOWNS]; + double num[MAX_UNKNOWNS][MAX_UNKNOWNS]; + } A; + + double scale[MAX_UNKNOWNS]; + + // Some helpers for the least squares solve + double AAt[MAX_UNKNOWNS][MAX_UNKNOWNS]; + double Z[MAX_UNKNOWNS]; + + double X[MAX_UNKNOWNS]; + + struct { + Expr *sym[MAX_UNKNOWNS]; + double num[MAX_UNKNOWNS]; + } B; + } mat; + + static const double RANK_MAG_TOLERANCE, CONVERGE_TOLERANCE; + int CalculateRank(void); + bool TestRank(void); + static bool SolveLinearSystem(double X[], double A[][MAX_UNKNOWNS], + double B[], int N); + bool SolveLeastSquares(void); + + bool WriteJacobian(int tag); + void EvalJacobian(void); + + void WriteEquationsExceptFor(hConstraint hc, Group *g); + void FindWhichToRemoveToFixJacobian(Group *g, List *bad); + void SolveBySubstitution(void); + + bool IsDragged(hParam p); + + bool NewtonSolve(int tag); + + enum { + SOLVED_OKAY = 0, + DIDNT_CONVERGE = 10, + REDUNDANT_OKAY = 11, + REDUNDANT_DIDNT_CONVERGE = 12, + TOO_MANY_UNKNOWNS = 20 + }; + int Solve(Group *g, int *dof, List *bad, + bool andFindBad, bool andFindFree); + + void Clear(void); +}; + +#include "ttf.h" + +class StepFileWriter { +public: + void ExportSurfacesTo(const std::string &filename); + void WriteHeader(void); + void WriteProductHeader(void); + int ExportCurve(SBezier *sb); + int ExportCurveLoop(SBezierLoop *loop, bool inner); + void ExportSurface(SSurface *ss, SBezierList *sbl); + void WriteWireframe(void); + void WriteFooter(void); + + List curves; + List advancedFaces; + FILE *f; + int id; +}; + +class VectorFileWriter { +protected: + Vector u, v, n, origin; + double cameraTan, scale; + +public: + FILE *f; + std::string filename; + Vector ptMin, ptMax; + + static double MmToPts(double mm); + + static VectorFileWriter *ForFile(const std::string &filename); + + ~VectorFileWriter(); + + void SetModelviewProjection(const Vector &u, const Vector &v, const Vector &n, + const Vector &origin, double cameraTan, double scale); + Vector Transform(Vector &pos) const; + + void OutputLinesAndMesh(SBezierLoopSetSet *sblss, SMesh *sm); + + void BezierAsPwl(SBezier *sb); + void BezierAsNonrationalCubic(SBezier *sb, int depth=0); + + virtual bool OutputConstraints(IdList *) { return false; } + virtual bool CanOutputMesh() const { return false; } + + virtual void StartPath( RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) = 0; + virtual void FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) = 0; + virtual void Bezier(SBezier *sb) = 0; + virtual void Triangle(STriangle *tr) = 0; + virtual void StartFile(void) = 0; + virtual void FinishAndCloseFile(void) = 0; + virtual bool HasCanvasSize(void) = 0; +}; +class DxfFileWriter : public VectorFileWriter { +public: + struct BezierPath { + std::vector beziers; + }; + + std::vector paths; + IdList *constraint; + + bool OutputConstraints(IdList *constraint); + + void StartPath( RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void Triangle(STriangle *tr); + void Bezier(SBezier *sb); + void StartFile(void); + void FinishAndCloseFile(void); + bool HasCanvasSize(void) { return false; } + bool NeedToOutput(Constraint *c); + + static const char *lineTypeName(int stippleType); + +}; +class EpsFileWriter : public VectorFileWriter { +public: + Vector prevPt; + void MaybeMoveTo(Vector s, Vector f); + + void StartPath( RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void Triangle(STriangle *tr); + void Bezier(SBezier *sb); + void StartFile(void); + void FinishAndCloseFile(void); + bool HasCanvasSize(void) { return true; } + bool CanOutputMesh() const { return true; } +}; +class PdfFileWriter : public VectorFileWriter { +public: + uint32_t xref[10]; + uint32_t bodyStart; + Vector prevPt; + void MaybeMoveTo(Vector s, Vector f); + + void StartPath( RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void Triangle(STriangle *tr); + void Bezier(SBezier *sb); + void StartFile(void); + void FinishAndCloseFile(void); + bool HasCanvasSize(void) { return true; } + bool CanOutputMesh() const { return true; } +}; +class SvgFileWriter : public VectorFileWriter { +public: + Vector prevPt; + void MaybeMoveTo(Vector s, Vector f); + + void StartPath( RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void Triangle(STriangle *tr); + void Bezier(SBezier *sb); + void StartFile(void); + void FinishAndCloseFile(void); + bool HasCanvasSize(void) { return true; } + bool CanOutputMesh() const { return true; } +}; +class HpglFileWriter : public VectorFileWriter { +public: + static double MmToHpglUnits(double mm); + void StartPath( RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void Triangle(STriangle *tr); + void Bezier(SBezier *sb); + void StartFile(void); + void FinishAndCloseFile(void); + bool HasCanvasSize(void) { return false; } +}; +class Step2dFileWriter : public VectorFileWriter { + StepFileWriter sfw; + void StartPath( RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void Triangle(STriangle *tr); + void Bezier(SBezier *sb); + void StartFile(void); + void FinishAndCloseFile(void); + bool HasCanvasSize(void) { return false; } +}; +class GCodeFileWriter : public VectorFileWriter { +public: + SEdgeList sel; + void StartPath( RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void Triangle(STriangle *tr); + void Bezier(SBezier *sb); + void StartFile(void); + void FinishAndCloseFile(void); + bool HasCanvasSize(void) { return false; } +}; + +#ifdef LIBRARY +# define ENTITY EntityBase +# define CONSTRAINT ConstraintBase +#else +# define ENTITY Entity +# define CONSTRAINT Constraint +#endif +class Sketch { +public: + // These are user-editable, and define the sketch. + IdList group; + List

groupOrder; + IdList constraint; + IdList request; + IdList style; + + // These are generated from the above. + IdList entity; + IdList param; + + inline CONSTRAINT *GetConstraint(hConstraint h) + { return constraint.FindById(h); } + inline ENTITY *GetEntity (hEntity h) { return entity. FindById(h); } + inline Param *GetParam (hParam h) { return param. FindById(h); } + inline Request *GetRequest(hRequest h) { return request.FindById(h); } + inline Group *GetGroup (hGroup h) { return group. FindById(h); } + // Styles are handled a bit differently. + + void Clear(void); + + BBox CalculateEntityBBox(bool includingInvisible); + Group *GetRunningMeshGroupFor(hGroup h); +}; +#undef ENTITY +#undef CONSTRAINT + +class SolveSpaceUI { +public: + TextWindow *pTW; + TextWindow &TW; + GraphicsWindow GW; + + // The state for undo/redo + typedef struct { + IdList group; + List
groupOrder; + IdList request; + IdList constraint; + IdList param; + IdList style; + hGroup activeGroup; + + void Clear(void) { + group.Clear(); + request.Clear(); + constraint.Clear(); + param.Clear(); + style.Clear(); + } + } UndoState; + enum { MAX_UNDO = 16 }; + typedef struct { + UndoState d[MAX_UNDO]; + int cnt; + int write; + } UndoStack; + UndoStack undo; + UndoStack redo; + void UndoEnableMenus(void); + void UndoRemember(void); + void UndoUndo(void); + void UndoRedo(void); + void PushFromCurrentOnto(UndoStack *uk); + void PopOntoCurrentFrom(UndoStack *uk); + void UndoClearState(UndoState *ut); + void UndoClearStack(UndoStack *uk); + + // Little bits of extra configuration state + enum { MODEL_COLORS = 8 }; + RgbaColor modelColor[MODEL_COLORS]; + Vector lightDir[2]; + double lightIntensity[2]; + double ambientIntensity; + double chordTol; + double chordTolCalculated; + int maxSegments; + double exportChordTol; + int exportMaxSegments; + double cameraTangent; + float gridSpacing; + float exportScale; + float exportOffset; + bool fixExportColors; + bool drawBackFaces; + bool checkClosedContour; + bool showToolbar; + RgbaColor backgroundColor; + bool exportShadedTriangles; + bool exportPwlCurves; + bool exportCanvasSizeAuto; + bool exportMode; + struct { + float left; + float right; + float bottom; + float top; + } exportMargin; + struct { + float width; + float height; + float dx; + float dy; + } exportCanvas; + struct { + float depth; + int passes; + float feed; + float plungeFeed; + } gCode; + + typedef enum { + UNIT_MM = 0, + UNIT_INCHES + } Unit; + Unit viewUnits; + int afterDecimalMm; + int afterDecimalInch; + int autosaveInterval; // in minutes + + std::string MmToString(double v); + double ExprToMm(Expr *e); + double StringToMm(const std::string &s); + const char *UnitName(void); + double MmPerUnit(void); + int UnitDigitsAfterDecimal(void); + void SetUnitDigitsAfterDecimal(int v); + double ChordTolMm(void); + double ExportChordTolMm(void); + int GetMaxSegments(void); + bool usePerspectiveProj; + double CameraTangent(void); + + // Some stuff relating to the tangent arcs created non-parametrically + // as special requests. + double tangentArcRadius; + bool tangentArcManual; + bool tangentArcDeleteOld; + + // The platform-dependent code calls this before entering the msg loop + void Init(void); + bool OpenFile(const std::string &filename); + void Exit(void); + + // File load/save routines, including the additional files that get + // loaded when we have link groups. + FILE *fh; + void AfterNewFile(void); + static void RemoveFromRecentList(const std::string &filename); + static void AddToRecentList(const std::string &filename); + std::string saveFile; + bool fileLoadError; + bool unsaved; + typedef struct { + char type; + const char *desc; + char fmt; + void *ptr; + } SaveTable; + static const SaveTable SAVED[]; + void SaveUsingTable(int type); + void LoadUsingTable(char *key, char *val); + struct { + Group g; + Request r; + Entity e; + Param p; + Constraint c; + Style s; + } sv; + static void MenuFile(int id); + bool Autosave(); + void RemoveAutosave(); + bool GetFilenameAndSave(bool saveAs); + bool OkayToStartNewFile(void); + hGroup CreateDefaultDrawingGroup(void); + void UpdateWindowTitle(void); + void ClearExisting(void); + void NewFile(void); + bool SaveToFile(const std::string &filename); + bool LoadAutosaveFor(const std::string &filename); + bool LoadFromFile(const std::string &filename); + bool LoadEntitiesFromFile(const std::string &filename, EntityList *le, + SMesh *m, SShell *sh); + bool ReloadAllImported(bool canCancel=false); + // And the various export options + void ExportAsPngTo(const std::string &filename); + void ExportMeshTo(const std::string &filename); + void ExportMeshAsStlTo(FILE *f, SMesh *sm); + void ExportMeshAsObjTo(FILE *f, SMesh *sm); + void ExportMeshAsThreeJsTo(FILE *f, const std::string &filename, + SMesh *sm, SEdgeList *sel); + void ExportViewOrWireframeTo(const std::string &filename, bool wireframe); + void ExportSectionTo(const std::string &filename); + void ExportWireframeCurves(SEdgeList *sel, SBezierList *sbl, + VectorFileWriter *out); + void ExportLinesAndMesh(SEdgeList *sel, SBezierList *sbl, SMesh *sm, + Vector u, Vector v, Vector n, Vector origin, + double cameraTan, + VectorFileWriter *out); + + static void MenuAnalyze(int id); + + // Additional display stuff + struct { + SContour path; + hEntity point; + } traced; + SEdgeList nakedEdges; + struct { + bool draw; + Vector ptA; + Vector ptB; + } extraLine; + struct { + uint8_t *fromFile; + int w, h; + int rw, rh; + double scale; // pixels per mm + Vector origin; + } bgImage; + struct { + bool draw, showOrigin; + Vector pt, u, v; + } justExportedInfo; + + class Clipboard { + public: + List r; + List c; + + void Clear(void); + bool ContainsEntity(hEntity old); + hEntity NewEntityFor(hEntity old); + }; + Clipboard clipboard; + + void MarkGroupDirty(hGroup hg); + void MarkGroupDirtyByEntity(hEntity he); + + // Consistency checking on the sketch: stuff with missing dependencies + // will get deleted automatically. + struct { + int requests; + int groups; + int constraints; + int nonTrivialConstraints; + } deleted; + bool GroupExists(hGroup hg); + bool PruneOrphans(void); + bool EntityExists(hEntity he); + bool GroupsInOrder(hGroup before, hGroup after); + bool PruneGroups(hGroup hg); + bool PruneRequests(hGroup hg); + bool PruneConstraints(hGroup hg); + + enum GenerateType { + GENERATE_DIRTY, + GENERATE_ALL, + GENERATE_REGEN, + GENERATE_UNTIL_ACTIVE, + }; + + void GenerateAll(GenerateType type = GENERATE_DIRTY, bool andFindFree = false, + bool genForBBox = false); + void SolveGroup(hGroup hg, bool andFindFree); + void MarkDraggedParams(void); + void ForceReferences(void); + + bool ActiveGroupsOkay(void); + + // The system to be solved. + System *pSys; + System &sys; + + // All the TrueType fonts in memory + TtfFontList fonts; + + // Everything has been pruned, so we know there's no dangling references + // to entities that don't exist. Before that, we mustn't try to display + // the sketch! + bool allConsistent; + + struct { + bool scheduled; + bool showTW; + bool generateAll; + } later; + void ScheduleShowTW(); + void ScheduleGenerateAll(); + void DoLater(void); + + static void MenuHelp(int id); + + void Clear(void); + + // We allocate TW and sys on the heap to work around an MSVC problem + // where it puts zero-initialized global data in the binary (~30M of zeroes) + // in release builds. + SolveSpaceUI() + : pTW(new TextWindow({})), TW(*pTW), + pSys(new System({})), sys(*pSys) {} + + ~SolveSpaceUI() { + delete pTW; + delete pSys; + } +}; + +void ImportDxf(const std::string &file); +void ImportDwg(const std::string &file); + +extern SolveSpaceUI SS; +extern Sketch SK; + +}; + +#ifndef __OBJC__ +using namespace SolveSpace; +#endif + +#endif diff --git a/src/srf/boolean.cpp b/src/srf/boolean.cpp new file mode 100644 index 0000000..d064952 --- /dev/null +++ b/src/srf/boolean.cpp @@ -0,0 +1,956 @@ +//----------------------------------------------------------------------------- +// Top-level functions to compute the Boolean union or difference between +// two shells of rational polynomial surfaces. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +static int I; + +void SShell::MakeFromUnionOf(SShell *a, SShell *b) { + MakeFromBoolean(a, b, AS_UNION); +} + +void SShell::MakeFromDifferenceOf(SShell *a, SShell *b) { + MakeFromBoolean(a, b, AS_DIFFERENCE); +} + +//----------------------------------------------------------------------------- +// Take our original pwl curve. Wherever an edge intersects a surface within +// either agnstA or agnstB, split the piecewise linear element. Then refine +// the intersection so that it lies on all three relevant surfaces: the +// intersecting surface, srfA, and srfB. (So the pwl curve should lie at +// the intersection of srfA and srfB.) Return a new pwl curve with everything +// split. +//----------------------------------------------------------------------------- +static Vector LineStart, LineDirection; +static int ByTAlongLine(const void *av, const void *bv) +{ + SInter *a = (SInter *)av, + *b = (SInter *)bv; + + double ta = (a->p.Minus(LineStart)).DivPivoting(LineDirection), + tb = (b->p.Minus(LineStart)).DivPivoting(LineDirection); + + return (ta > tb) ? 1 : -1; +} +SCurve SCurve::MakeCopySplitAgainst(SShell *agnstA, SShell *agnstB, + SSurface *srfA, SSurface *srfB) +{ + SCurve ret; + ret = *this; + ret.pts = {}; + + SCurvePt *p = pts.First(); + if(!p) oops(); + SCurvePt prev = *p; + ret.pts.Add(p); + p = pts.NextAfter(p); + + for(; p; p = pts.NextAfter(p)) { + List il = {}; + + // Find all the intersections with the two passed shells + if(agnstA) + agnstA->AllPointsIntersecting(prev.p, p->p, &il, true, false, true); + if(agnstB) + agnstB->AllPointsIntersecting(prev.p, p->p, &il, true, false, true); + + if(il.n > 0) { + // The intersections were generated by intersecting the pwl + // edge against a surface; so they must be refined to lie + // exactly on the original curve. + il.ClearTags(); + SInter *pi; + for(pi = il.First(); pi; pi = il.NextAfter(pi)) { + if(pi->srf == srfA || pi->srf == srfB) { + // The edge certainly intersects the surfaces that it + // trims (at its endpoints), but those ones don't count. + // They are culled later, but no sense calculating them + // and they will cause numerical problems (since two + // of the three surfaces they're refined to lie on will + // be identical, so the matrix will be singular). + pi->tag = 1; + continue; + } + + Point2d puv; + (pi->srf)->ClosestPointTo(pi->p, &puv, false); + + // Split the edge if the intersection lies within the surface's + // trim curves, or within the chord tol of the trim curve; want + // some slop if points are close to edge and pwl is too coarse, + // and it doesn't hurt to split unnecessarily. + Point2d dummy = { 0, 0 }; + int c = (pi->srf->bsp) ? pi->srf->bsp->ClassifyPoint(puv, dummy, pi->srf) : SBspUv::OUTSIDE; + if(c == SBspUv::OUTSIDE) { + double d = VERY_POSITIVE; + if(pi->srf->bsp) d = pi->srf->bsp->MinimumDistanceToEdge(puv, pi->srf); + if(d > SS.ChordTolMm()) { + pi->tag = 1; + continue; + } + } + + // We're keeping the intersection, so actually refine it. + (pi->srf)->PointOnSurfaces(srfA, srfB, &(puv.x), &(puv.y)); + pi->p = (pi->srf)->PointAt(puv); + } + il.RemoveTagged(); + + // And now sort them in order along the line. Note that we must + // do that after refining, in case the refining would make two + // points switch places. + LineStart = prev.p; + LineDirection = (p->p).Minus(prev.p); + qsort(il.elem, il.n, sizeof(il.elem[0]), ByTAlongLine); + + // And now uses the intersections to generate our split pwl edge(s) + Vector prev = Vector::From(VERY_POSITIVE, 0, 0); + for(pi = il.First(); pi; pi = il.NextAfter(pi)) { + // On-edge intersection will generate same split point for + // both surfaces, so don't create zero-length edge. + if(!prev.Equals(pi->p)) { + SCurvePt scpt; + scpt.tag = 0; + scpt.p = pi->p; + scpt.vertex = true; + ret.pts.Add(&scpt); + } + prev = pi->p; + } + } + + il.Clear(); + ret.pts.Add(p); + prev = *p; + } + return ret; +} + +void SShell::CopyCurvesSplitAgainst(bool opA, SShell *agnst, SShell *into) { + SCurve *sc; + for(sc = curve.First(); sc; sc = curve.NextAfter(sc)) { + SCurve scn = sc->MakeCopySplitAgainst(agnst, NULL, + surface.FindById(sc->surfA), + surface.FindById(sc->surfB)); + scn.source = opA ? SCurve::FROM_A : SCurve::FROM_B; + + hSCurve hsc = into->curve.AddAndAssignId(&scn); + // And note the new ID so that we can rewrite the trims appropriately + sc->newH = hsc; + } +} + +void SSurface::TrimFromEdgeList(SEdgeList *el, bool asUv) { + el->l.ClearTags(); + + STrimBy stb = {}; + for(;;) { + // Find an edge, any edge; we'll start from there. + SEdge *se; + for(se = el->l.First(); se; se = el->l.NextAfter(se)) { + if(se->tag) continue; + break; + } + if(!se) break; + se->tag = 1; + stb.start = se->a; + stb.finish = se->b; + stb.curve.v = se->auxA; + stb.backwards = se->auxB ? true : false; + + // Find adjoining edges from the same curve; those should be + // merged into a single trim. + bool merged; + do { + merged = false; + for(se = el->l.First(); se; se = el->l.NextAfter(se)) { + if(se->tag) continue; + if(se->auxA != (int)stb.curve.v) continue; + if(( se->auxB && !stb.backwards) || + (!se->auxB && stb.backwards)) continue; + + if((se->a).Equals(stb.finish)) { + stb.finish = se->b; + se->tag = 1; + merged = true; + } else if((se->b).Equals(stb.start)) { + stb.start = se->a; + se->tag = 1; + merged = true; + } + } + } while(merged); + + if(asUv) { + stb.start = PointAt(stb.start.x, stb.start.y); + stb.finish = PointAt(stb.finish.x, stb.finish.y); + } + + // And add the merged trim, with xyz (not uv like the polygon) pts + trim.Add(&stb); + } +} + +static bool KeepRegion(int type, bool opA, int shell, int orig) +{ + bool inShell = (shell == SShell::INSIDE), + inSame = (shell == SShell::COINC_SAME), + inOpp = (shell == SShell::COINC_OPP), + inOrig = (orig == SShell::INSIDE); + + bool inFace = inSame || inOpp; + + // If these are correct, then they should be independent of inShell + // if inFace is true. + if(!inOrig) return false; + switch(type) { + case SShell::AS_UNION: + if(opA) { + return (!inShell && !inFace); + } else { + return (!inShell && !inFace) || inSame; + } + + case SShell::AS_DIFFERENCE: + if(opA) { + return (!inShell && !inFace); + } else { + return (inShell && !inFace) || inSame; + } + + default: oops(); + } +} +static bool KeepEdge(int type, bool opA, + int indir_shell, int outdir_shell, + int indir_orig, int outdir_orig) +{ + bool keepIn = KeepRegion(type, opA, indir_shell, indir_orig), + keepOut = KeepRegion(type, opA, outdir_shell, outdir_orig); + + // If the regions to the left and right of this edge are both in or both + // out, then this edge is not useful and should be discarded. + if(keepIn && !keepOut) return true; + return false; +} + +static void TagByClassifiedEdge(int bspclass, int *indir, int *outdir) +{ + switch(bspclass) { + case SBspUv::INSIDE: + *indir = SShell::INSIDE; + *outdir = SShell::INSIDE; + break; + + case SBspUv::OUTSIDE: + *indir = SShell::OUTSIDE; + *outdir = SShell::OUTSIDE; + break; + + case SBspUv::EDGE_PARALLEL: + *indir = SShell::INSIDE; + *outdir = SShell::OUTSIDE; + break; + + case SBspUv::EDGE_ANTIPARALLEL: + *indir = SShell::OUTSIDE; + *outdir = SShell::INSIDE; + break; + + default: + dbp("TagByClassifiedEdge: fail!"); + *indir = SShell::OUTSIDE; + *outdir = SShell::OUTSIDE; + break; + } +} + +static void DEBUGEDGELIST(SEdgeList *sel, SSurface *surf) { + dbp("print %d edges", sel->l.n); + SEdge *se; + for(se = sel->l.First(); se; se = sel->l.NextAfter(se)) { + Vector mid = (se->a).Plus(se->b).ScaledBy(0.5); + Vector arrow = (se->b).Minus(se->a); + swap(arrow.x, arrow.y); + arrow.x *= -1; + arrow = arrow.WithMagnitude(0.01); + arrow = arrow.Plus(mid); + + SS.nakedEdges.AddEdge(surf->PointAt(se->a.x, se->a.y), + surf->PointAt(se->b.x, se->b.y)); + SS.nakedEdges.AddEdge(surf->PointAt(mid.x, mid.y), + surf->PointAt(arrow.x, arrow.y)); + } +} + +//----------------------------------------------------------------------------- +// We are given src, with at least one edge, and avoid, a list of points to +// avoid. We return a chain of edges (that share endpoints), such that no +// point within the avoid list ever occurs in the middle of a chain. And we +// delete the edges in that chain from our source list. +//----------------------------------------------------------------------------- +void SSurface::FindChainAvoiding(SEdgeList *src, SEdgeList *dest, + SPointList *avoid) +{ + if(src->l.n < 1) oops(); + // Start with an arbitrary edge. + dest->l.Add(&(src->l.elem[0])); + src->l.ClearTags(); + src->l.elem[0].tag = 1; + + bool added; + do { + added = false; + // The start and finish of the current edge chain + Vector s = dest->l.elem[0].a, + f = dest->l.elem[dest->l.n - 1].b; + + // We can attach a new edge at the start or finish, as long as that + // start or finish point isn't in the list of points to avoid. + bool startOkay = !avoid->ContainsPoint(s), + finishOkay = !avoid->ContainsPoint(f); + + // Now look for an unused edge that joins at the start or finish of + // our chain (if permitted by the avoid list). + SEdge *se; + for(se = src->l.First(); se; se = src->l.NextAfter(se)) { + if(se->tag) continue; + if(startOkay && s.Equals(se->b)) { + dest->l.AddToBeginning(se); + s = se->a; + se->tag = 1; + startOkay = !avoid->ContainsPoint(s); + } else if(finishOkay && f.Equals(se->a)) { + dest->l.Add(se); + f = se->b; + se->tag = 1; + finishOkay = !avoid->ContainsPoint(f); + } else { + continue; + } + + added = true; + } + } while(added); + + src->l.RemoveTagged(); +} + +void SSurface::EdgeNormalsWithinSurface(Point2d auv, Point2d buv, + Vector *pt, + Vector *enin, Vector *enout, + Vector *surfn, + uint32_t auxA, + SShell *shell, SShell *sha, SShell *shb) +{ + // the midpoint of the edge + Point2d muv = (auv.Plus(buv)).ScaledBy(0.5); + + *pt = PointAt(muv); + + // If this edge just approximates a curve, then refine our midpoint so + // so that it actually lies on that curve too. Otherwise stuff like + // point-on-face tests will fail, since the point won't actually lie + // on the other face. + hSCurve hc = { auxA }; + SCurve *sc = shell->curve.FindById(hc); + if(sc->isExact && sc->exact.deg != 1) { + double t; + sc->exact.ClosestPointTo(*pt, &t, false); + *pt = sc->exact.PointAt(t); + ClosestPointTo(*pt, &muv); + } else if(!sc->isExact) { + SSurface *trimmedA = sc->GetSurfaceA(sha, shb), + *trimmedB = sc->GetSurfaceB(sha, shb); + *pt = trimmedA->ClosestPointOnThisAndSurface(trimmedB, *pt); + ClosestPointTo(*pt, &muv); + } + + *surfn = NormalAt(muv.x, muv.y); + + // Compute the edge's inner normal in xyz space. + Vector ab = (PointAt(auv)).Minus(PointAt(buv)), + enxyz = (ab.Cross(*surfn)).WithMagnitude(SS.ChordTolMm()); + // And based on that, compute the edge's inner normal in uv space. This + // vector is perpendicular to the edge in xyz, but not necessarily in uv. + Vector tu, tv; + TangentsAt(muv.x, muv.y, &tu, &tv); + Point2d enuv; + enuv.x = enxyz.Dot(tu) / tu.MagSquared(); + enuv.y = enxyz.Dot(tv) / tv.MagSquared(); + + // Compute the inner and outer normals of this edge (within the srf), + // in xyz space. These are not necessarily antiparallel, if the + // surface is curved. + Vector pin = PointAt(muv.Minus(enuv)), + pout = PointAt(muv.Plus(enuv)); + *enin = pin.Minus(*pt), + *enout = pout.Minus(*pt); +} + +//----------------------------------------------------------------------------- +// Trim this surface against the specified shell, in the way that's appropriate +// for the specified Boolean operation type (and which operand we are). We +// also need a pointer to the shell that contains our own surface, since that +// contains our original trim curves. +//----------------------------------------------------------------------------- +SSurface SSurface::MakeCopyTrimAgainst(SShell *parent, + SShell *sha, SShell *shb, + SShell *into, + int type) +{ + bool opA = (parent == sha); + SShell *agnst = opA ? shb : sha; + + SSurface ret; + // The returned surface is identical, just the trim curves change + ret = *this; + ret.trim = {}; + + // First, build a list of the existing trim curves; update them to use + // the split curves. + STrimBy *stb; + for(stb = trim.First(); stb; stb = trim.NextAfter(stb)) { + STrimBy stn = *stb; + stn.curve = (parent->curve.FindById(stn.curve))->newH; + ret.trim.Add(&stn); + } + + if(type == SShell::AS_DIFFERENCE && !opA) { + // The second operand of a Boolean difference gets turned inside out + ret.Reverse(); + } + + // Build up our original trim polygon; remember the coordinates could + // be changed if we just flipped the surface normal, and we are using + // the split curves (not the original curves). + SEdgeList orig = {}; + ret.MakeEdgesInto(into, &orig, AS_UV); + ret.trim.Clear(); + // which means that we can't necessarily use the old BSP... + SBspUv *origBsp = SBspUv::From(&orig, &ret); + + // And now intersect the other shell against us + SEdgeList inter = {}; + + SSurface *ss; + for(ss = agnst->surface.First(); ss; ss = agnst->surface.NextAfter(ss)) { + SCurve *sc; + for(sc = into->curve.First(); sc; sc = into->curve.NextAfter(sc)) { + if(sc->source != SCurve::FROM_INTERSECTION) continue; + if(opA) { + if(sc->surfA.v != h.v || sc->surfB.v != ss->h.v) continue; + } else { + if(sc->surfB.v != h.v || sc->surfA.v != ss->h.v) continue; + } + + int i; + for(i = 1; i < sc->pts.n; i++) { + Vector a = sc->pts.elem[i-1].p, + b = sc->pts.elem[i].p; + + Point2d auv, buv; + ss->ClosestPointTo(a, &(auv.x), &(auv.y)); + ss->ClosestPointTo(b, &(buv.x), &(buv.y)); + + int c = (ss->bsp) ? ss->bsp->ClassifyEdge(auv, buv, ss) : SBspUv::OUTSIDE; + if(c != SBspUv::OUTSIDE) { + Vector ta = Vector::From(0, 0, 0); + Vector tb = Vector::From(0, 0, 0); + ret.ClosestPointTo(a, &(ta.x), &(ta.y)); + ret.ClosestPointTo(b, &(tb.x), &(tb.y)); + + Vector tn = ret.NormalAt(ta.x, ta.y); + Vector sn = ss->NormalAt(auv.x, auv.y); + + // We are subtracting the portion of our surface that + // lies in the shell, so the in-plane edge normal should + // point opposite to the surface normal. + bool bkwds = true; + if((tn.Cross(b.Minus(a))).Dot(sn) < 0) bkwds = !bkwds; + if(type == SShell::AS_DIFFERENCE && !opA) bkwds = !bkwds; + if(bkwds) { + inter.AddEdge(tb, ta, sc->h.v, 1); + } else { + inter.AddEdge(ta, tb, sc->h.v, 0); + } + } + } + } + } + + // Record all the points where more than two edges join, which I will call + // the choosing points. If two edges join at a non-choosing point, then + // they must either both be kept or both be discarded (since that would + // otherwise create an open contour). + SPointList choosing = {}; + SEdge *se; + for(se = orig.l.First(); se; se = orig.l.NextAfter(se)) { + choosing.IncrementTagFor(se->a); + choosing.IncrementTagFor(se->b); + } + for(se = inter.l.First(); se; se = inter.l.NextAfter(se)) { + choosing.IncrementTagFor(se->a); + choosing.IncrementTagFor(se->b); + } + SPoint *sp; + for(sp = choosing.l.First(); sp; sp = choosing.l.NextAfter(sp)) { + if(sp->tag == 2) { + sp->tag = 1; + } else { + sp->tag = 0; + } + } + choosing.l.RemoveTagged(); + + // The list of edges to trim our new surface, a combination of edges from + // our original and intersecting edge lists. + SEdgeList final = {}; + + while(orig.l.n > 0) { + SEdgeList chain = {}; + FindChainAvoiding(&orig, &chain, &choosing); + + // Arbitrarily choose an edge within the chain to classify; they + // should all be the same, though. + se = &(chain.l.elem[chain.l.n/2]); + + Point2d auv = (se->a).ProjectXy(), + buv = (se->b).ProjectXy(); + + Vector pt, enin, enout, surfn; + ret.EdgeNormalsWithinSurface(auv, buv, &pt, &enin, &enout, &surfn, + se->auxA, into, sha, shb); + + int indir_shell, outdir_shell, indir_orig, outdir_orig; + + indir_orig = SShell::INSIDE; + outdir_orig = SShell::OUTSIDE; + + agnst->ClassifyEdge(&indir_shell, &outdir_shell, + ret.PointAt(auv), ret.PointAt(buv), pt, + enin, enout, surfn); + + if(KeepEdge(type, opA, indir_shell, outdir_shell, + indir_orig, outdir_orig)) + { + for(se = chain.l.First(); se; se = chain.l.NextAfter(se)) { + final.AddEdge(se->a, se->b, se->auxA, se->auxB); + } + } + chain.Clear(); + } + + while(inter.l.n > 0) { + SEdgeList chain = {}; + FindChainAvoiding(&inter, &chain, &choosing); + + // Any edge in the chain, same as above. + se = &(chain.l.elem[chain.l.n/2]); + + Point2d auv = (se->a).ProjectXy(), + buv = (se->b).ProjectXy(); + + Vector pt, enin, enout, surfn; + ret.EdgeNormalsWithinSurface(auv, buv, &pt, &enin, &enout, &surfn, + se->auxA, into, sha, shb); + + int indir_shell, outdir_shell, indir_orig, outdir_orig; + + int c_this = (origBsp) ? origBsp->ClassifyEdge(auv, buv, &ret) : SBspUv::OUTSIDE; + TagByClassifiedEdge(c_this, &indir_orig, &outdir_orig); + + agnst->ClassifyEdge(&indir_shell, &outdir_shell, + ret.PointAt(auv), ret.PointAt(buv), pt, + enin, enout, surfn); + + if(KeepEdge(type, opA, indir_shell, outdir_shell, + indir_orig, outdir_orig)) + { + for(se = chain.l.First(); se; se = chain.l.NextAfter(se)) { + final.AddEdge(se->a, se->b, se->auxA, se->auxB); + } + } + chain.Clear(); + } + + // Cull extraneous edges; duplicates or anti-parallel pairs. In particular, + // we can get duplicate edges if our surface intersects the other shell + // at an edge, so that both surfaces intersect coincident (and both + // generate an intersection edge). + final.CullExtraneousEdges(); + + // Use our reassembled edges to trim the new surface. + ret.TrimFromEdgeList(&final, true); + + SPolygon poly = {}; + final.l.ClearTags(); + if(!final.AssemblePolygon(&poly, NULL, true)) { + into->booleanFailed = true; + dbp("failed: I=%d, avoid=%d", I, choosing.l.n); + DEBUGEDGELIST(&final, &ret); + } + poly.Clear(); + + choosing.Clear(); + final.Clear(); + inter.Clear(); + orig.Clear(); + return ret; +} + +void SShell::CopySurfacesTrimAgainst(SShell *sha, SShell *shb, SShell *into, + int type) +{ + SSurface *ss; + for(ss = surface.First(); ss; ss = surface.NextAfter(ss)) { + SSurface ssn; + ssn = ss->MakeCopyTrimAgainst(this, sha, shb, into, type); + ss->newH = into->surface.AddAndAssignId(&ssn); + I++; + } +} + +void SShell::MakeIntersectionCurvesAgainst(SShell *agnst, SShell *into) { + SSurface *sa; + for(sa = surface.First(); sa; sa = surface.NextAfter(sa)) { + SSurface *sb; + for(sb = agnst->surface.First(); sb; sb = agnst->surface.NextAfter(sb)){ + // Intersect every surface from our shell against every surface + // from agnst; this will add zero or more curves to the curve + // list for into. + sa->IntersectAgainst(sb, this, agnst, into); + } + } +} + +void SShell::CleanupAfterBoolean(void) { + SSurface *ss; + for(ss = surface.First(); ss; ss = surface.NextAfter(ss)) { + ss->edges.Clear(); + } +} + +//----------------------------------------------------------------------------- +// All curves contain handles to the two surfaces that they trim. After a +// Boolean or assembly, we must rewrite those handles to refer to the curves +// by their new IDs. +//----------------------------------------------------------------------------- +void SShell::RewriteSurfaceHandlesForCurves(SShell *a, SShell *b) { + SCurve *sc; + for(sc = curve.First(); sc; sc = curve.NextAfter(sc)) { + sc->surfA = sc->GetSurfaceA(a, b)->newH, + sc->surfB = sc->GetSurfaceB(a, b)->newH; + } +} + +//----------------------------------------------------------------------------- +// Copy all the surfaces and curves from two different shells into a single +// shell. The only difficulty is to rewrite all of their handles; we don't +// look for any surface intersections, so if two objects interfere then the +// result is just self-intersecting. This is used for assembly, since it's +// much faster than merging as union. +//----------------------------------------------------------------------------- +void SShell::MakeFromAssemblyOf(SShell *a, SShell *b) { + booleanFailed = false; + + Vector t = Vector::From(0, 0, 0); + Quaternion q = Quaternion::IDENTITY; + int i = 0; + SShell *ab; + + // First, copy over all the curves. Note which shell (a or b) each curve + // came from, but assign it a new ID. + SCurve *c, cn; + for(i = 0; i < 2; i++) { + ab = (i == 0) ? a : b; + for(c = ab->curve.First(); c; c = ab->curve.NextAfter(c)) { + cn = SCurve::FromTransformationOf(c, t, q, 1.0); + cn.source = (i == 0) ? SCurve::FROM_A : SCurve::FROM_B; + // surfA and surfB are wrong now, and we can't fix them until + // we've assigned IDs to the surfaces. So we'll get that later. + c->newH = curve.AddAndAssignId(&cn); + } + } + + // Likewise copy over all the surfaces. + SSurface *s, sn; + for(i = 0; i < 2; i++) { + ab = (i == 0) ? a : b; + for(s = ab->surface.First(); s; s = ab->surface.NextAfter(s)) { + sn = SSurface::FromTransformationOf(s, t, q, 1.0, true); + // All the trim curve IDs get rewritten; we know the new handles + // to the curves since we recorded them in the previous step. + STrimBy *stb; + for(stb = sn.trim.First(); stb; stb = sn.trim.NextAfter(stb)) { + stb->curve = ab->curve.FindById(stb->curve)->newH; + } + s->newH = surface.AddAndAssignId(&sn); + } + } + + // Finally, rewrite the surfaces associated with each curve to use the + // new handles. + RewriteSurfaceHandlesForCurves(a, b); +} + +void SShell::MakeFromBoolean(SShell *a, SShell *b, int type) { + booleanFailed = false; + + a->MakeClassifyingBsps(NULL); + b->MakeClassifyingBsps(NULL); + + // Copy over all the original curves, splitting them so that a + // piecwise linear segment never crosses a surface from the other + // shell. + a->CopyCurvesSplitAgainst(true, b, this); + b->CopyCurvesSplitAgainst(false, a, this); + + // Generate the intersection curves for each surface in A against all + // the surfaces in B (which is all of the intersection curves). + a->MakeIntersectionCurvesAgainst(b, this); + + SCurve *sc; + for(sc = curve.First(); sc; sc = curve.NextAfter(sc)) { + SSurface *srfA = sc->GetSurfaceA(a, b), + *srfB = sc->GetSurfaceB(a, b); + + sc->RemoveShortSegments(srfA, srfB); + } + + // And clean up the piecewise linear things we made as a calculation aid + a->CleanupAfterBoolean(); + b->CleanupAfterBoolean(); + // Remake the classifying BSPs with the split (and short-segment-removed) + // curves + a->MakeClassifyingBsps(this); + b->MakeClassifyingBsps(this); + + if(b->surface.n == 0 || a->surface.n == 0) { + I = 1000000; + } else { + I = 0; + } + // Then trim and copy the surfaces + a->CopySurfacesTrimAgainst(a, b, this, type); + b->CopySurfacesTrimAgainst(a, b, this, type); + + // Now that we've copied the surfaces, we know their new hSurfaces, so + // rewrite the curves to refer to the surfaces by their handles in the + // result. + RewriteSurfaceHandlesForCurves(a, b); + + // And clean up the piecewise linear things we made as a calculation aid + a->CleanupAfterBoolean(); + b->CleanupAfterBoolean(); +} + +//----------------------------------------------------------------------------- +// All of the BSP routines that we use to perform and accelerate polygon ops. +//----------------------------------------------------------------------------- +void SShell::MakeClassifyingBsps(SShell *useCurvesFrom) { + SSurface *ss; + for(ss = surface.First(); ss; ss = surface.NextAfter(ss)) { + ss->MakeClassifyingBsp(this, useCurvesFrom); + } +} + +void SSurface::MakeClassifyingBsp(SShell *shell, SShell *useCurvesFrom) { + SEdgeList el = {}; + + MakeEdgesInto(shell, &el, AS_UV, useCurvesFrom); + bsp = SBspUv::From(&el, this); + el.Clear(); + + edges = {}; + MakeEdgesInto(shell, &edges, AS_XYZ, useCurvesFrom); +} + +SBspUv *SBspUv::Alloc(void) { + return (SBspUv *)AllocTemporary(sizeof(SBspUv)); +} + +static int ByLength(const void *av, const void *bv) +{ + SEdge *a = (SEdge *)av, + *b = (SEdge *)bv; + + double la = (a->a).Minus(a->b).Magnitude(), + lb = (b->a).Minus(b->b).Magnitude(); + + // Sort in descending order, longest first. This improves numerical + // stability for the normals. + return (la < lb) ? 1 : -1; +} +SBspUv *SBspUv::From(SEdgeList *el, SSurface *srf) { + SEdgeList work = {}; + + SEdge *se; + for(se = el->l.First(); se; se = el->l.NextAfter(se)) { + work.AddEdge(se->a, se->b, se->auxA, se->auxB); + } + qsort(work.l.elem, work.l.n, sizeof(work.l.elem[0]), ByLength); + + SBspUv *bsp = NULL; + for(se = work.l.First(); se; se = work.l.NextAfter(se)) { + bsp = InsertOrCreateEdge(bsp, (se->a).ProjectXy(), (se->b).ProjectXy(), srf); + } + + work.Clear(); + return bsp; +} + +//----------------------------------------------------------------------------- +// The points in this BSP are in uv space, but we want to apply our tolerances +// consistently in xyz (i.e., we want to say a point is on-edge if its xyz +// distance to that edge is less than LENGTH_EPS, irrespective of its distance +// in uv). So we linearize the surface about the point we're considering and +// then do the test. That preserves point-on-line relationships, and the only +// time we care about exact correctness is when we're very close to the line, +// which is when the linearization is accurate. +//----------------------------------------------------------------------------- +void SBspUv::ScalePoints(Point2d *pt, Point2d *a, Point2d *b, SSurface *srf) { + Vector tu, tv; + srf->TangentsAt(pt->x, pt->y, &tu, &tv); + double mu = tu.Magnitude(), mv = tv.Magnitude(); + + pt->x *= mu; pt->y *= mv; + a ->x *= mu; a ->y *= mv; + b ->x *= mu; b ->y *= mv; +} +double SBspUv::ScaledSignedDistanceToLine(Point2d pt, Point2d a, Point2d b, + SSurface *srf) +{ + ScalePoints(&pt, &a, &b, srf); + + Point2d n = ((b.Minus(a)).Normal()).WithMagnitude(1); + double d = a.Dot(n); + + return pt.Dot(n) - d; +} +double SBspUv::ScaledDistanceToLine(Point2d pt, Point2d a, Point2d b, bool seg, + SSurface *srf) +{ + ScalePoints(&pt, &a, &b, srf); + + return pt.DistanceToLine(a, b, seg); +} + +SBspUv *SBspUv::InsertOrCreateEdge(SBspUv *where, const Point2d &ea, const Point2d &eb, SSurface *srf) { + if(where == NULL) { + SBspUv *ret = Alloc(); + ret->a = ea; + ret->b = eb; + return ret; + } + where->InsertEdge(ea, eb, srf); + return where; +} + +void SBspUv::InsertEdge(Point2d ea, Point2d eb, SSurface *srf) { + double dea = ScaledSignedDistanceToLine(ea, a, b, srf), + deb = ScaledSignedDistanceToLine(eb, a, b, srf); + + if(fabs(dea) < LENGTH_EPS && fabs(deb) < LENGTH_EPS) { + // Line segment is coincident with this one, store in same node + SBspUv *m = Alloc(); + m->a = ea; + m->b = eb; + m->more = more; + more = m; + } else if(fabs(dea) < LENGTH_EPS) { + // Point A lies on this lie, but point B does not + if(deb > 0) { + pos = InsertOrCreateEdge(pos, ea, eb, srf); + } else { + neg = InsertOrCreateEdge(neg, ea, eb, srf); + } + } else if(fabs(deb) < LENGTH_EPS) { + // Point B lies on this lie, but point A does not + if(dea > 0) { + pos = InsertOrCreateEdge(pos, ea, eb, srf); + } else { + neg = InsertOrCreateEdge(neg, ea, eb, srf); + } + } else if(dea > 0 && deb > 0) { + pos = InsertOrCreateEdge(pos, ea, eb, srf); + } else if(dea < 0 && deb < 0) { + neg = InsertOrCreateEdge(neg, ea, eb, srf); + } else { + // New edge crosses this one; we need to split. + Point2d n = ((b.Minus(a)).Normal()).WithMagnitude(1); + double d = a.Dot(n); + double t = (d - n.Dot(ea)) / (n.Dot(eb.Minus(ea))); + Point2d pi = ea.Plus((eb.Minus(ea)).ScaledBy(t)); + if(dea > 0) { + pos = InsertOrCreateEdge(pos, ea, pi, srf); + neg = InsertOrCreateEdge(neg, pi, eb, srf); + } else { + neg = InsertOrCreateEdge(neg, ea, pi, srf); + pos = InsertOrCreateEdge(pos, pi, eb, srf); + } + } + return; +} + +int SBspUv::ClassifyPoint(Point2d p, Point2d eb, SSurface *srf) { + + double dp = ScaledSignedDistanceToLine(p, a, b, srf); + + if(fabs(dp) < LENGTH_EPS) { + SBspUv *f = this; + while(f) { + Point2d ba = (f->b).Minus(f->a); + if(ScaledDistanceToLine(p, f->a, ba, true, srf) < LENGTH_EPS) { + if(ScaledDistanceToLine(eb, f->a, ba, false, srf) < LENGTH_EPS){ + if(ba.Dot(eb.Minus(p)) > 0) { + return EDGE_PARALLEL; + } else { + return EDGE_ANTIPARALLEL; + } + } else { + return EDGE_OTHER; + } + } + f = f->more; + } + // Pick arbitrarily which side to send it down, doesn't matter + int c1 = neg ? neg->ClassifyPoint(p, eb, srf) : OUTSIDE; + int c2 = pos ? pos->ClassifyPoint(p, eb, srf) : INSIDE; + if(c1 != c2) { + dbp("MISMATCH: %d %d %08x %08x", c1, c2, neg, pos); + } + return c1; + } else if(dp > 0) { + return pos ? pos->ClassifyPoint(p, eb, srf) : INSIDE; + } else { + return neg ? neg->ClassifyPoint(p, eb, srf) : OUTSIDE; + } +} + +int SBspUv::ClassifyEdge(Point2d ea, Point2d eb, SSurface *srf) { + int ret = ClassifyPoint((ea.Plus(eb)).ScaledBy(0.5), eb, srf); + if(ret == EDGE_OTHER) { + // Perhaps the edge is tangent at its midpoint (and we screwed up + // somewhere earlier and failed to split it); try a different + // point on the edge. + ret = ClassifyPoint(ea.Plus((eb.Minus(ea)).ScaledBy(0.294)), eb, srf); + } + return ret; +} + +double SBspUv::MinimumDistanceToEdge(Point2d p, SSurface *srf) { + + double dn = (neg) ? neg->MinimumDistanceToEdge(p, srf) : VERY_POSITIVE; + double dp = (pos) ? pos->MinimumDistanceToEdge(p, srf) : VERY_POSITIVE; + + Point2d as = a, bs = b; + ScalePoints(&p, &as, &bs, srf); + double d = p.DistanceToLine(as, bs.Minus(as), true); + + return min(d, min(dn, dp)); +} + diff --git a/src/srf/curve.cpp b/src/srf/curve.cpp new file mode 100644 index 0000000..ba54afc --- /dev/null +++ b/src/srf/curve.cpp @@ -0,0 +1,848 @@ +//----------------------------------------------------------------------------- +// Anything involving curves and sets of curves (except for the real math, +// which is in ratpoly.cpp). +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "../solvespace.h" + +SBezier SBezier::From(Vector4 p0, Vector4 p1) { + SBezier ret = {}; + ret.deg = 1; + ret.weight[0] = p0.w; + ret.ctrl [0] = p0.PerspectiveProject(); + ret.weight[1] = p1.w; + ret.ctrl [1] = p1.PerspectiveProject(); + return ret; +} + +SBezier SBezier::From(Vector4 p0, Vector4 p1, Vector4 p2) { + SBezier ret = {}; + ret.deg = 2; + ret.weight[0] = p0.w; + ret.ctrl [0] = p0.PerspectiveProject(); + ret.weight[1] = p1.w; + ret.ctrl [1] = p1.PerspectiveProject(); + ret.weight[2] = p2.w; + ret.ctrl [2] = p2.PerspectiveProject(); + return ret; +} + +SBezier SBezier::From(Vector4 p0, Vector4 p1, Vector4 p2, Vector4 p3) { + SBezier ret = {}; + ret.deg = 3; + ret.weight[0] = p0.w; + ret.ctrl [0] = p0.PerspectiveProject(); + ret.weight[1] = p1.w; + ret.ctrl [1] = p1.PerspectiveProject(); + ret.weight[2] = p2.w; + ret.ctrl [2] = p2.PerspectiveProject(); + ret.weight[3] = p3.w; + ret.ctrl [3] = p3.PerspectiveProject(); + return ret; +} + +SBezier SBezier::From(Vector p0, Vector p1) { + return SBezier::From(p0.Project4d(), + p1.Project4d()); +} + +SBezier SBezier::From(Vector p0, Vector p1, Vector p2) { + return SBezier::From(p0.Project4d(), + p1.Project4d(), + p2.Project4d()); +} + +SBezier SBezier::From(Vector p0, Vector p1, Vector p2, Vector p3) { + return SBezier::From(p0.Project4d(), + p1.Project4d(), + p2.Project4d(), + p3.Project4d()); +} + +Vector SBezier::Start(void) { + return ctrl[0]; +} + +Vector SBezier::Finish(void) { + return ctrl[deg]; +} + +void SBezier::Reverse(void) { + int i; + for(i = 0; i < (deg+1)/2; i++) { + swap(ctrl[i], ctrl[deg-i]); + swap(weight[i], weight[deg-i]); + } +} + +void SBezier::ScaleSelfBy(double s) { + int i; + for(i = 0; i <= deg; i++) { + ctrl[i] = ctrl[i].ScaledBy(s); + } +} + +void SBezier::GetBoundingProjd(Vector u, Vector orig, + double *umin, double *umax) +{ + int i; + for(i = 0; i <= deg; i++) { + double ut = ((ctrl[i]).Minus(orig)).Dot(u); + if(ut < *umin) *umin = ut; + if(ut > *umax) *umax = ut; + } +} + +SBezier SBezier::TransformedBy(Vector t, Quaternion q, double scale) { + SBezier ret = *this; + int i; + for(i = 0; i <= deg; i++) { + ret.ctrl[i] = (ret.ctrl[i]).ScaledBy(scale); + ret.ctrl[i] = (q.Rotate(ret.ctrl[i])).Plus(t); + } + return ret; +} + +//----------------------------------------------------------------------------- +// Does this curve lie entirely within the specified plane? It does if all +// the control points lie in that plane. +//----------------------------------------------------------------------------- +bool SBezier::IsInPlane(Vector n, double d) { + int i; + for(i = 0; i <= deg; i++) { + if(fabs((ctrl[i]).Dot(n) - d) > LENGTH_EPS) { + return false; + } + } + return true; +} + +//----------------------------------------------------------------------------- +// Is this Bezier exactly the arc of a circle, projected along the specified +// axis? If yes, return that circle's center and radius. +//----------------------------------------------------------------------------- +bool SBezier::IsCircle(Vector axis, Vector *center, double *r) { + if(deg != 2) return false; + + if(ctrl[1].DistanceToLine(ctrl[0], ctrl[2].Minus(ctrl[0])) < LENGTH_EPS) { + // This is almost a line segment. So it's a circle with very large + // radius, which is likely to make code that tries to handle circles + // blow up. So return false. + return false; + } + + Vector t0 = (ctrl[0]).Minus(ctrl[1]), + t2 = (ctrl[2]).Minus(ctrl[1]), + r0 = axis.Cross(t0), + r2 = axis.Cross(t2); + + *center = Vector::AtIntersectionOfLines(ctrl[0], (ctrl[0]).Plus(r0), + ctrl[2], (ctrl[2]).Plus(r2), + NULL, NULL, NULL); + + double rd0 = center->Minus(ctrl[0]).Magnitude(), + rd2 = center->Minus(ctrl[2]).Magnitude(); + if(fabs(rd0 - rd2) > LENGTH_EPS) { + return false; + } + *r = rd0; + + Vector u = r0.WithMagnitude(1), + v = (axis.Cross(u)).WithMagnitude(1); + Point2d c2 = center->Project2d(u, v), + pa2 = (ctrl[0]).Project2d(u, v).Minus(c2), + pb2 = (ctrl[2]).Project2d(u, v).Minus(c2); + + double thetaa = atan2(pa2.y, pa2.x), // in fact always zero due to csys + thetab = atan2(pb2.y, pb2.x), + dtheta = WRAP_NOT_0(thetab - thetaa, 2*PI); + if(dtheta > PI) { + // Not possible with a second order Bezier arc; so we must have + // the points backwards. + dtheta = 2*PI - dtheta; + } + + if(fabs(weight[1] - cos(dtheta/2)) > LENGTH_EPS) { + return false; + } + + return true; +} + +bool SBezier::IsRational(void) { + int i; + for(i = 0; i <= deg; i++) { + if(fabs(weight[i] - 1) > LENGTH_EPS) return true; + } + return false; +} + +//----------------------------------------------------------------------------- +// Apply a perspective transformation to a rational Bezier curve, calculating +// the new weights as required. +//----------------------------------------------------------------------------- +SBezier SBezier::InPerspective(Vector u, Vector v, Vector n, + Vector origin, double cameraTan) +{ + Quaternion q = Quaternion::From(u, v); + q = q.Inverse(); + // we want Q*(p - o) = Q*p - Q*o + SBezier ret = this->TransformedBy(q.Rotate(origin).ScaledBy(-1), q, 1.0); + int i; + for(i = 0; i <= deg; i++) { + Vector4 ct = Vector4::From(ret.weight[i], ret.ctrl[i]); + // so the desired curve, before perspective, is + // (x/w, y/w, z/w) + // and after perspective is + // ((x/w)/(1 - (z/w)*cameraTan, ... + // = (x/(w - z*cameraTan), ... + // so we want to let w' = w - z*cameraTan + ct.w = ct.w - ct.z*cameraTan; + + ret.ctrl[i] = ct.PerspectiveProject(); + ret.weight[i] = ct.w; + } + return ret; +} + +bool SBezier::Equals(SBezier *b) { + // We just test of identical degree and control points, even though two + // curves could still be coincident (even sharing endpoints). + if(deg != b->deg) return false; + int i; + for(i = 0; i <= deg; i++) { + if(!(ctrl[i]).Equals(b->ctrl[i])) return false; + if(fabs(weight[i] - b->weight[i]) > LENGTH_EPS) return false; + } + return true; +} + +void SBezierList::Clear(void) { + l.Clear(); +} + +void SBezierList::ScaleSelfBy(double s) { + SBezier *sb; + for(sb = l.First(); sb; sb = l.NextAfter(sb)) { + sb->ScaleSelfBy(s); + } +} + +//----------------------------------------------------------------------------- +// If our list contains multiple identical Beziers (in either forward or +// reverse order), then cull them. +//----------------------------------------------------------------------------- +void SBezierList::CullIdenticalBeziers(void) { + int i, j; + + l.ClearTags(); + for(i = 0; i < l.n; i++) { + SBezier *bi = &(l.elem[i]), bir; + bir = *bi; + bir.Reverse(); + + for(j = i + 1; j < l.n; j++) { + SBezier *bj = &(l.elem[j]); + if(bj->Equals(bi) || + bj->Equals(&bir)) + { + bi->tag = 1; + bj->tag = 1; + } + } + } + l.RemoveTagged(); +} + +//----------------------------------------------------------------------------- +// Find all the points where a list of Bezier curves intersects another list +// of Bezier curves. We do this by intersecting their piecewise linearizations, +// and then refining any intersections that we find to lie exactly on the +// curves. So this will screw up on tangencies and stuff, but otherwise should +// be fine. +//----------------------------------------------------------------------------- +void SBezierList::AllIntersectionsWith(SBezierList *sblb, SPointList *spl) { + SBezier *sba, *sbb; + for(sba = l.First(); sba; sba = l.NextAfter(sba)) { + for(sbb = sblb->l.First(); sbb; sbb = sblb->l.NextAfter(sbb)) { + sbb->AllIntersectionsWith(sba, spl); + } + } +} +void SBezier::AllIntersectionsWith(SBezier *sbb, SPointList *spl) { + SPointList splRaw = {}; + SEdgeList sea, seb; + sea = {}; + seb = {}; + this->MakePwlInto(&sea); + sbb ->MakePwlInto(&seb); + SEdge *se; + for(se = sea.l.First(); se; se = sea.l.NextAfter(se)) { + // This isn't quite correct, since AnyEdgeCrossings doesn't count + // the case where two pairs of line segments intersect at their + // vertices. So this isn't robust, although that case isn't very + // likely. + seb.AnyEdgeCrossings(se->a, se->b, NULL, &splRaw); + } + SPoint *sp; + for(sp = splRaw.l.First(); sp; sp = splRaw.l.NextAfter(sp)) { + Vector p = sp->p; + if(PointOnThisAndCurve(sbb, &p)) { + if(!spl->ContainsPoint(p)) spl->Add(p); + } + } + sea.Clear(); + seb.Clear(); + splRaw.Clear(); +} + +//----------------------------------------------------------------------------- +// Find a plane that contains all of the curves in this list. If the curves +// are all colinear (or coincident, or empty), then that plane is not exactly +// determined but we choose the additional degree(s) of freedom arbitrarily. +// Returns true if all the curves are coplanar, otherwise false. +//----------------------------------------------------------------------------- +bool SBezierList::GetPlaneContainingBeziers(Vector *p, Vector *u, Vector *v, + Vector *notCoplanarAt) +{ + Vector pt, ptFar, ptOffLine, dp, n; + double farMax, offLineMax; + int i; + SBezier *sb; + + // Get any point on any Bezier; or an arbitrary point if list is empty. + if(l.n > 0) { + pt = l.elem[0].Start(); + } else { + pt = Vector::From(0, 0, 0); + } + ptFar = ptOffLine = pt; + + // Get the point farthest from our arbitrary point. + farMax = VERY_NEGATIVE; + for(sb = l.First(); sb; sb = l.NextAfter(sb)) { + for(i = 0; i <= sb->deg; i++) { + double m = (pt.Minus(sb->ctrl[i])).Magnitude(); + if(m > farMax) { + ptFar = sb->ctrl[i]; + farMax = m; + } + } + } + if(ptFar.Equals(pt)) { + // The points are all coincident. So neither basis vector matters. + *p = pt; + *u = Vector::From(1, 0, 0); + *v = Vector::From(0, 1, 0); + return true; + } + + // Get the point farthest from the line between pt and ptFar + dp = ptFar.Minus(pt); + offLineMax = VERY_NEGATIVE; + for(sb = l.First(); sb; sb = l.NextAfter(sb)) { + for(i = 0; i <= sb->deg; i++) { + double m = (sb->ctrl[i]).DistanceToLine(pt, dp); + if(m > offLineMax) { + ptOffLine = sb->ctrl[i]; + offLineMax = m; + } + } + } + + *p = pt; + if(offLineMax < LENGTH_EPS) { + // The points are all colinear; so choose the second basis vector + // arbitrarily. + *u = (ptFar.Minus(pt)).WithMagnitude(1); + *v = (u->Normal(0)).WithMagnitude(1); + } else { + // The points actually define a plane. + n = (ptFar.Minus(pt)).Cross(ptOffLine.Minus(pt)); + *u = (n.Normal(0)).WithMagnitude(1); + *v = (n.Normal(1)).WithMagnitude(1); + } + + // So we have a plane; but check whether all of the points lie in that + // plane. + n = u->Cross(*v); + n = n.WithMagnitude(1); + double d = p->Dot(n); + for(sb = l.First(); sb; sb = l.NextAfter(sb)) { + for(i = 0; i <= sb->deg; i++) { + if(fabs(n.Dot(sb->ctrl[i]) - d) > LENGTH_EPS) { + if(notCoplanarAt) *notCoplanarAt = sb->ctrl[i]; + return false; + } + } + } + return true; +} + +//----------------------------------------------------------------------------- +// Assemble curves in sbl into a single loop. The curves may appear in any +// direction (start to finish, or finish to start), and will be reversed if +// necessary. The curves in the returned loop are removed from sbl, even if +// the loop cannot be closed. +//----------------------------------------------------------------------------- +SBezierLoop SBezierLoop::FromCurves(SBezierList *sbl, + bool *allClosed, SEdge *errorAt) +{ + SBezierLoop loop = {}; + + if(sbl->l.n < 1) return loop; + sbl->l.ClearTags(); + + SBezier *first = &(sbl->l.elem[0]); + first->tag = 1; + loop.l.Add(first); + Vector start = first->Start(); + Vector hanging = first->Finish(); + int auxA = first->auxA; + + sbl->l.RemoveTagged(); + + while(sbl->l.n > 0 && !hanging.Equals(start)) { + int i; + bool foundNext = false; + for(i = 0; i < sbl->l.n; i++) { + SBezier *test = &(sbl->l.elem[i]); + + if((test->Finish()).Equals(hanging) && test->auxA == auxA) { + test->Reverse(); + // and let the next test catch it + } + if((test->Start()).Equals(hanging) && test->auxA == auxA) { + test->tag = 1; + loop.l.Add(test); + hanging = test->Finish(); + sbl->l.RemoveTagged(); + foundNext = true; + break; + } + } + if(!foundNext) { + // The loop completed without finding the hanging edge, so + // it's an open loop + errorAt->a = hanging; + errorAt->b = start; + *allClosed = false; + return loop; + } + } + if(hanging.Equals(start)) { + *allClosed = true; + } else { + // We ran out of edges without forming a closed loop. + errorAt->a = hanging; + errorAt->b = start; + *allClosed = false; + } + + return loop; +} + +void SBezierLoop::Reverse(void) { + l.Reverse(); + SBezier *sb; + for(sb = l.First(); sb; sb = l.NextAfter(sb)) { + // If we didn't reverse each curve, then the next curve in list would + // share your start, not your finish. + sb->Reverse(); + } +} + +void SBezierLoop::GetBoundingProjd(Vector u, Vector orig, + double *umin, double *umax) +{ + SBezier *sb; + for(sb = l.First(); sb; sb = l.NextAfter(sb)) { + sb->GetBoundingProjd(u, orig, umin, umax); + } +} + +void SBezierLoop::MakePwlInto(SContour *sc, double chordTol) { + SBezier *sb; + for(sb = l.First(); sb; sb = l.NextAfter(sb)) { + sb->MakePwlInto(sc, chordTol); + // Avoid double points at join between Beziers; except that + // first and last points should be identical. + if(l.NextAfter(sb) != NULL) { + sc->l.RemoveLast(1); + } + } + // Ensure that it's exactly closed, not just within a numerical tolerance. + if((sc->l.elem[sc->l.n - 1].p).Equals(sc->l.elem[0].p)) { + sc->l.elem[sc->l.n - 1] = sc->l.elem[0]; + } +} + +bool SBezierLoop::IsClosed(void) { + if(l.n < 1) return false; + Vector s = l.elem[0].Start(), + f = l.elem[l.n-1].Finish(); + return s.Equals(f); +} + + +//----------------------------------------------------------------------------- +// Assemble the curves in sbl into multiple loops, and piecewise linearize the +// curves into poly. If we can't close a contour, then we add it to +// openContours (if that isn't NULL) and keep going; so this works even if the +// input contains a mix of open and closed curves. +//----------------------------------------------------------------------------- +SBezierLoopSet SBezierLoopSet::From(SBezierList *sbl, SPolygon *poly, + double chordTol, + bool *allClosed, SEdge *errorAt, + SBezierList *openContours) +{ + SBezierLoopSet ret = {}; + + *allClosed = true; + while(sbl->l.n > 0) { + bool thisClosed; + SBezierLoop loop; + loop = SBezierLoop::FromCurves(sbl, &thisClosed, errorAt); + if(!thisClosed) { + // Record open loops in a separate list, if requested. + *allClosed = false; + if(openContours) { + SBezier *sb; + for(sb = loop.l.First(); sb; sb = loop.l.NextAfter(sb)) { + openContours->l.Add(sb); + } + } + loop.Clear(); + } else { + ret.l.Add(&loop); + poly->AddEmptyContour(); + loop.MakePwlInto(&(poly->l.elem[poly->l.n-1]), chordTol); + } + } + + poly->normal = poly->ComputeNormal(); + ret.normal = poly->normal; + if(poly->l.n > 0) { + ret.point = poly->AnyPoint(); + } else { + ret.point = Vector::From(0, 0, 0); + } + + return ret; +} + +void SBezierLoopSet::GetBoundingProjd(Vector u, Vector orig, + double *umin, double *umax) +{ + SBezierLoop *sbl; + for(sbl = l.First(); sbl; sbl = l.NextAfter(sbl)) { + sbl->GetBoundingProjd(u, orig, umin, umax); + } +} + +//----------------------------------------------------------------------------- +// Convert all the Beziers into piecewise linear form, and assemble that into +// a polygon, one contour per loop. +//----------------------------------------------------------------------------- +void SBezierLoopSet::MakePwlInto(SPolygon *sp) { + SBezierLoop *sbl; + for(sbl = l.First(); sbl; sbl = l.NextAfter(sbl)) { + sp->AddEmptyContour(); + sbl->MakePwlInto(&(sp->l.elem[sp->l.n - 1])); + } +} + +void SBezierLoopSet::Clear(void) { + int i; + for(i = 0; i < l.n; i++) { + (l.elem[i]).Clear(); + } + l.Clear(); +} + +//----------------------------------------------------------------------------- +// An export helper function. We start with a list of Bezier curves, and +// assemble them into loops. We find the outer loops, and find the outer loops' +// inner loops, and group them accordingly. +//----------------------------------------------------------------------------- +void SBezierLoopSetSet::FindOuterFacesFrom(SBezierList *sbl, SPolygon *spxyz, + SSurface *srfuv, + double chordTol, + bool *allClosed, SEdge *notClosedAt, + bool *allCoplanar, Vector *notCoplanarAt, + SBezierList *openContours) +{ + SSurface srfPlane; + if(!srfuv) { + Vector p, u, v; + *allCoplanar = + sbl->GetPlaneContainingBeziers(&p, &u, &v, notCoplanarAt); + if(!*allCoplanar) { + // Don't even try to assemble them into loops if they're not + // all coplanar. + if(openContours) { + SBezier *sb; + for(sb = sbl->l.First(); sb; sb = sbl->l.NextAfter(sb)) { + openContours->l.Add(sb); + } + } + return; + } + // All the curves lie in a plane through p with basis vectors u and v. + srfPlane = SSurface::FromPlane(p, u, v); + srfuv = &srfPlane; + } + + int i, j; + // Assemble the Bezier trim curves into closed loops; we also get the + // piecewise linearization of the curves (in the SPolygon spxyz), as a + // calculation aid for the loop direction. + SBezierLoopSet sbls = SBezierLoopSet::From(sbl, spxyz, chordTol, + allClosed, notClosedAt, + openContours); + if(sbls.l.n != spxyz->l.n) return; + + // Convert the xyz piecewise linear to uv piecewise linear. + SPolygon spuv = {}; + SContour *sc; + for(sc = spxyz->l.First(); sc; sc = spxyz->l.NextAfter(sc)) { + spuv.AddEmptyContour(); + SPoint *pt; + for(pt = sc->l.First(); pt; pt = sc->l.NextAfter(pt)) { + double u, v; + srfuv->ClosestPointTo(pt->p, &u, &v); + spuv.l.elem[spuv.l.n - 1].AddPoint(Vector::From(u, v, 0)); + } + } + spuv.normal = Vector::From(0, 0, 1); // must be, since it's in xy plane now + + static const int OUTER_LOOP = 10; + static const int INNER_LOOP = 20; + static const int USED_LOOP = 30; + // Fix the contour directions; we do this properly, in uv space, so it + // works for curved surfaces too (important for STEP export). + spuv.FixContourDirections(); + for(i = 0; i < spuv.l.n; i++) { + SContour *contour = &(spuv.l.elem[i]); + SBezierLoop *bl = &(sbls.l.elem[i]); + if(contour->tag) { + // This contour got reversed in the polygon to make the directions + // consistent, so the same must be necessary for the Bezier loop. + bl->Reverse(); + } + if(contour->IsClockwiseProjdToNormal(spuv.normal)) { + bl->tag = INNER_LOOP; + } else { + bl->tag = OUTER_LOOP; + } + } + + bool loopsRemaining = true; + while(loopsRemaining) { + loopsRemaining = false; + for(i = 0; i < sbls.l.n; i++) { + SBezierLoop *loop = &(sbls.l.elem[i]); + if(loop->tag != OUTER_LOOP) continue; + + // Check if this contour contains any outer loops; if it does, then + // we should do those "inner outer loops" first; otherwise we + // will steal their holes, since their holes also lie inside this + // contour. + for(j = 0; j < sbls.l.n; j++) { + SBezierLoop *outer = &(sbls.l.elem[j]); + if(i == j) continue; + if(outer->tag != OUTER_LOOP) continue; + + Vector p = spuv.l.elem[j].AnyEdgeMidpoint(); + if(spuv.l.elem[i].ContainsPointProjdToNormal(spuv.normal, p)) { + break; + } + } + if(j < sbls.l.n) { + // It does, can't do this one yet. + continue; + } + + SBezierLoopSet outerAndInners = {}; + loopsRemaining = true; + loop->tag = USED_LOOP; + outerAndInners.l.Add(loop); + int auxA = 0; + if(loop->l.n > 0) auxA = loop->l.elem[0].auxA; + + for(j = 0; j < sbls.l.n; j++) { + SBezierLoop *inner = &(sbls.l.elem[j]); + if(inner->tag != INNER_LOOP) continue; + if(inner->l.n < 1) continue; + if(inner->l.elem[0].auxA != auxA) continue; + + Vector p = spuv.l.elem[j].AnyEdgeMidpoint(); + if(spuv.l.elem[i].ContainsPointProjdToNormal(spuv.normal, p)) { + outerAndInners.l.Add(inner); + inner->tag = USED_LOOP; + } + } + + outerAndInners.point = srfuv->PointAt(0, 0); + outerAndInners.normal = srfuv->NormalAt(0, 0); + l.Add(&outerAndInners); + } + } + + // If we have poorly-formed loops--for example, overlapping zero-area + // stuff--then we can end up with leftovers. We use this function to + // group stuff into closed paths for export when possible, so it's bad + // to screw up on that stuff. So just add them onto the open curve list. + // Very ugly, but better than losing curves. + for(i = 0; i < sbls.l.n; i++) { + SBezierLoop *loop = &(sbls.l.elem[i]); + if(loop->tag == USED_LOOP) continue; + + if(openContours) { + SBezier *sb; + for(sb = loop->l.First(); sb; sb = loop->l.NextAfter(sb)) { + openContours->l.Add(sb); + } + } + loop->Clear(); + // but don't free the used loops, since we shallow-copied them to + // ourself + } + + sbls.l.Clear(); // not sbls.Clear(), since that would deep-clear + spuv.Clear(); +} + +void SBezierLoopSetSet::AddOpenPath(SBezier *sb) { + SBezierLoop sbl = {}; + sbl.l.Add(sb); + + SBezierLoopSet sbls = {}; + sbls.l.Add(&sbl); + + l.Add(&sbls); +} + +void SBezierLoopSetSet::Clear(void) { + SBezierLoopSet *sbls; + for(sbls = l.First(); sbls; sbls = l.NextAfter(sbls)) { + sbls->Clear(); + } + l.Clear(); +} + +SCurve SCurve::FromTransformationOf(SCurve *a, + Vector t, Quaternion q, double scale) +{ + SCurve ret = {}; + + ret.h = a->h; + ret.isExact = a->isExact; + ret.exact = (a->exact).TransformedBy(t, q, scale); + ret.surfA = a->surfA; + ret.surfB = a->surfB; + + SCurvePt *p; + for(p = a->pts.First(); p; p = a->pts.NextAfter(p)) { + SCurvePt pp = *p; + pp.p = (pp.p).ScaledBy(scale); + pp.p = (q.Rotate(pp.p)).Plus(t); + ret.pts.Add(&pp); + } + return ret; +} + +void SCurve::Clear(void) { + pts.Clear(); +} + +SSurface *SCurve::GetSurfaceA(SShell *a, SShell *b) { + if(source == FROM_A) { + return a->surface.FindById(surfA); + } else if(source == FROM_B) { + return b->surface.FindById(surfA); + } else if(source == FROM_INTERSECTION) { + return a->surface.FindById(surfA); + } else oops(); +} + +SSurface *SCurve::GetSurfaceB(SShell *a, SShell *b) { + if(source == FROM_A) { + return a->surface.FindById(surfB); + } else if(source == FROM_B) { + return b->surface.FindById(surfB); + } else if(source == FROM_INTERSECTION) { + return b->surface.FindById(surfB); + } else oops(); +} + +//----------------------------------------------------------------------------- +// When we split line segments wherever they intersect a surface, we introduce +// extra pwl points. This may create very short edges that could be removed +// without violating the chord tolerance. Those are ugly, and also break +// stuff in the Booleans. So remove them. +//----------------------------------------------------------------------------- +void SCurve::RemoveShortSegments(SSurface *srfA, SSurface *srfB) { + // Three, not two; curves are pwl'd to at least two edges (three points) + // even if not necessary, to avoid square holes. + if(pts.n <= 3) return; + pts.ClearTags(); + + Vector prev = pts.elem[0].p; + int i, a; + for(i = 1; i < pts.n - 1; i++) { + SCurvePt *sct = &(pts.elem[i]), + *scn = &(pts.elem[i+1]); + if(sct->vertex) { + prev = sct->p; + continue; + } + bool mustKeep = false; + + // We must check against both surfaces; the piecewise linear edge + // may have a different chord tolerance in the two surfaces. (For + // example, a circle in the surface of a cylinder is just a straight + // line, so it always has perfect chord tol, but that circle in + // a plane is a circle so it doesn't). + for(a = 0; a < 2; a++) { + SSurface *srf = (a == 0) ? srfA : srfB; + Vector puv, nuv; + srf->ClosestPointTo(prev, &(puv.x), &(puv.y)); + srf->ClosestPointTo(scn->p, &(nuv.x), &(nuv.y)); + + if(srf->ChordToleranceForEdge(nuv, puv) > SS.ChordTolMm()) { + mustKeep = true; + } + } + + if(mustKeep) { + prev = sct->p; + } else { + sct->tag = 1; + // and prev is unchanged, since there's no longer any point + // in between + } + } + + pts.RemoveTagged(); +} + +STrimBy STrimBy::EntireCurve(SShell *shell, hSCurve hsc, bool backwards) { + STrimBy stb = {}; + stb.curve = hsc; + SCurve *sc = shell->curve.FindById(hsc); + + if(backwards) { + stb.finish = sc->pts.elem[0].p; + stb.start = sc->pts.elem[sc->pts.n - 1].p; + stb.backwards = true; + } else { + stb.start = sc->pts.elem[0].p; + stb.finish = sc->pts.elem[sc->pts.n - 1].p; + stb.backwards = false; + } + + return stb; +} + diff --git a/src/srf/merge.cpp b/src/srf/merge.cpp new file mode 100644 index 0000000..487fb92 --- /dev/null +++ b/src/srf/merge.cpp @@ -0,0 +1,127 @@ +//----------------------------------------------------------------------------- +// Routines to merge multiple coincident surfaces (each with their own trim +// curves) into a single surface, with all of the trim curves. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "../solvespace.h" + +void SShell::MergeCoincidentSurfaces(void) { + surface.ClearTags(); + + int i, j; + SSurface *si, *sj; + + for(i = 0; i < surface.n; i++) { + si = &(surface.elem[i]); + if(si->tag) continue; + // Let someone else clean up the empty surfaces; we can certainly merge + // them, but we don't know how to calculate a reasonable bounding box. + if(si->trim.n == 0) continue; + // And for now we handle only coincident planes, so no sense wasting + // time on other surfaces. + if(si->degm != 1 || si->degn != 1) continue; + + SEdgeList sel = {}; + si->MakeEdgesInto(this, &sel, SSurface::AS_XYZ); + + bool mergedThisTime, merged = false; + do { + mergedThisTime = false; + + for(j = i + 1; j < surface.n; j++) { + sj = &(surface.elem[j]); + if(sj->tag) continue; + if(!sj->CoincidentWith(si, true)) continue; + if(!sj->color.Equals(si->color)) continue; + // But we do merge surfaces with different face entities, since + // otherwise we'd hardly ever merge anything. + + // This surface is coincident. But let's not merge coincident + // surfaces if they contain disjoint contours; that just makes + // the bounding box tests less effective, and possibly things + // less robust. + SEdgeList tel = {}; + sj->MakeEdgesInto(this, &tel, SSurface::AS_XYZ); + if(!sel.ContainsEdgeFrom(&tel)) { + tel.Clear(); + continue; + } + tel.Clear(); + + sj->tag = 1; + merged = true; + mergedThisTime = true; + sj->MakeEdgesInto(this, &sel, SSurface::AS_XYZ); + sj->trim.Clear(); + + // All the references to this surface get replaced with the + // new srf + SCurve *sc; + for(sc = curve.First(); sc; sc = curve.NextAfter(sc)) { + if(sc->surfA.v == sj->h.v) sc->surfA = si->h; + if(sc->surfB.v == sj->h.v) sc->surfB = si->h; + } + } + + // If this iteration merged a contour onto ours, then we have to + // go through the surfaces again; that might have made a new + // surface touch us. + } while(mergedThisTime); + + if(merged) { + sel.CullExtraneousEdges(); + si->trim.Clear(); + si->TrimFromEdgeList(&sel, false); + + // And we must choose control points such that all the trims lie + // with u and v in [0, 1], so that the bbox tests work. + Vector u, v, n; + si->TangentsAt(0.5, 0.5, &u, &v); + u = u.WithMagnitude(1); + v = v.WithMagnitude(1); + n = si->NormalAt(0.5, 0.5).WithMagnitude(1); + v = (n.Cross(u)).WithMagnitude(1); + + double umax = VERY_NEGATIVE, umin = VERY_POSITIVE, + vmax = VERY_NEGATIVE, vmin = VERY_POSITIVE; + SEdge *se; + for(se = sel.l.First(); se; se = sel.l.NextAfter(se)) { + double ut = (se->a).Dot(u), vt = (se->a).Dot(v); + umax = max(umax, ut); + vmax = max(vmax, vt); + umin = min(umin, ut); + vmin = min(vmin, vt); + } + + // An interesting problem here; the real curve could extend + // slightly beyond the bounding box of the piecewise linear + // bits. Not a problem for us, but some apps won't import STEP + // in that case. So give a bit of extra room; in theory just + // a chord tolerance, but more can't hurt. + double muv = max((umax - umin), (vmax - vmin)); + double tol = muv/50 + 3*SS.ChordTolMm(); + umax += tol; + vmax += tol; + umin -= tol; + vmin -= tol; + + // We move in the +v direction as v goes from 0 to 1, and in the + // +u direction as u goes from 0 to 1. So our normal ends up + // pointed the same direction. + double nt = (si->ctrl[0][0]).Dot(n); + si->ctrl[0][0] = + Vector::From(umin, vmin, nt).ScaleOutOfCsys(u, v, n); + si->ctrl[0][1] = + Vector::From(umin, vmax, nt).ScaleOutOfCsys(u, v, n); + si->ctrl[1][1] = + Vector::From(umax, vmax, nt).ScaleOutOfCsys(u, v, n); + si->ctrl[1][0] = + Vector::From(umax, vmin, nt).ScaleOutOfCsys(u, v, n); + } + sel.Clear(); + } + + surface.RemoveTagged(); +} + diff --git a/src/srf/ratpoly.cpp b/src/srf/ratpoly.cpp new file mode 100644 index 0000000..2f6a0bb --- /dev/null +++ b/src/srf/ratpoly.cpp @@ -0,0 +1,615 @@ +//----------------------------------------------------------------------------- +// Math on rational polynomial surfaces and curves, typically in Bezier +// form. Evaluate, root-find (by Newton's methods), evaluate derivatives, +// and so on. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "../solvespace.h" + +// Converge it to better than LENGTH_EPS; we want two points, each +// independently projected into uv and back, to end up equal with the +// LENGTH_EPS. Best case that requires LENGTH_EPS/2, but more is better +// and convergence should be fast by now. +#define RATPOLY_EPS (LENGTH_EPS/(1e2)) + +double SolveSpace::Bernstein(int k, int deg, double t) +{ + if(k > deg || k < 0) return 0; + + switch(deg) { + case 0: + return 1; + + case 1: + if(k == 0) { + return (1 - t); + } else if(k == 1) { + return t; + } + break; + + case 2: + if(k == 0) { + return (1 - t)*(1 - t); + } else if(k == 1) { + return 2*(1 - t)*t; + } else if(k == 2) { + return t*t; + } + break; + + case 3: + if(k == 0) { + return (1 - t)*(1 - t)*(1 - t); + } else if(k == 1) { + return 3*(1 - t)*(1 - t)*t; + } else if(k == 2) { + return 3*(1 - t)*t*t; + } else if(k == 3) { + return t*t*t; + } + break; + } + oops(); +} + +double SolveSpace::BernsteinDerivative(int k, int deg, double t) +{ + switch(deg) { + case 0: + return 0; + + case 1: + if(k == 0) { + return -1; + } else if(k == 1) { + return 1; + } + break; + + case 2: + if(k == 0) { + return -2 + 2*t; + } else if(k == 1) { + return 2 - 4*t; + } else if(k == 2) { + return 2*t; + } + break; + + case 3: + if(k == 0) { + return -3 + 6*t - 3*t*t; + } else if(k == 1) { + return 3 - 12*t + 9*t*t; + } else if(k == 2) { + return 6*t - 9*t*t; + } else if(k == 3) { + return 3*t*t; + } + break; + } + oops(); +} + +Vector SBezier::PointAt(double t) { + Vector pt = Vector::From(0, 0, 0); + double d = 0; + + int i; + for(i = 0; i <= deg; i++) { + double B = Bernstein(i, deg, t); + pt = pt.Plus(ctrl[i].ScaledBy(B*weight[i])); + d += weight[i]*B; + } + pt = pt.ScaledBy(1.0/d); + return pt; +} + +Vector SBezier::TangentAt(double t) { + Vector pt = Vector::From(0, 0, 0), pt_p = Vector::From(0, 0, 0); + double d = 0, d_p = 0; + + int i; + for(i = 0; i <= deg; i++) { + double B = Bernstein(i, deg, t), + Bp = BernsteinDerivative(i, deg, t); + + pt = pt.Plus(ctrl[i].ScaledBy(B*weight[i])); + d += weight[i]*B; + + pt_p = pt_p.Plus(ctrl[i].ScaledBy(Bp*weight[i])); + d_p += weight[i]*Bp; + } + + // quotient rule; f(t) = n(t)/d(t), so f' = (n'*d - n*d')/(d^2) + Vector ret; + ret = (pt_p.ScaledBy(d)).Minus(pt.ScaledBy(d_p)); + ret = ret.ScaledBy(1.0/(d*d)); + return ret; +} + +void SBezier::ClosestPointTo(Vector p, double *t, bool converge) { + int i; + double minDist = VERY_POSITIVE; + *t = 0; + double res = (deg <= 2) ? 7.0 : 20.0; + for(i = 0; i < (int)res; i++) { + double tryt = (i/res); + + Vector tryp = PointAt(tryt); + double d = (tryp.Minus(p)).Magnitude(); + if(d < minDist) { + *t = tryt; + minDist = d; + } + } + + Vector p0; + for(i = 0; i < (converge ? 15 : 5); i++) { + p0 = PointAt(*t); + if(p0.Equals(p, RATPOLY_EPS)) { + return; + } + + Vector dp = TangentAt(*t); + Vector pc = p.ClosestPointOnLine(p0, dp); + *t += (pc.Minus(p0)).DivPivoting(dp); + } + if(converge) { + dbp("didn't converge (closest point on bezier curve)"); + } +} + +bool SBezier::PointOnThisAndCurve(SBezier *sbb, Vector *p) { + double ta, tb; + this->ClosestPointTo(*p, &ta, false); + sbb ->ClosestPointTo(*p, &tb, false); + + int i; + for(i = 0; i < 20; i++) { + Vector pa = this->PointAt(ta), + pb = sbb ->PointAt(tb), + da = this->TangentAt(ta), + db = sbb ->TangentAt(tb); + + if(pa.Equals(pb, RATPOLY_EPS)) { + *p = pa; + return true; + } + + double tta, ttb; + Vector::ClosestPointBetweenLines(pa, da, pb, db, &tta, &ttb); + ta += tta; + tb += ttb; + } + return false; +} + +void SBezier::SplitAt(double t, SBezier *bef, SBezier *aft) { + Vector4 ct[4]; + int i; + for(i = 0; i <= deg; i++) { + ct[i] = Vector4::From(weight[i], ctrl[i]); + } + + switch(deg) { + case 1: { + Vector4 cts = Vector4::Blend(ct[0], ct[1], t); + *bef = SBezier::From(ct[0], cts); + *aft = SBezier::From(cts, ct[1]); + break; + } + case 2: { + Vector4 ct01 = Vector4::Blend(ct[0], ct[1], t), + ct12 = Vector4::Blend(ct[1], ct[2], t), + cts = Vector4::Blend(ct01, ct12, t); + + *bef = SBezier::From(ct[0], ct01, cts); + *aft = SBezier::From(cts, ct12, ct[2]); + break; + } + case 3: { + Vector4 ct01 = Vector4::Blend(ct[0], ct[1], t), + ct12 = Vector4::Blend(ct[1], ct[2], t), + ct23 = Vector4::Blend(ct[2], ct[3], t), + ct01_12 = Vector4::Blend(ct01, ct12, t), + ct12_23 = Vector4::Blend(ct12, ct23, t), + cts = Vector4::Blend(ct01_12, ct12_23, t); + + *bef = SBezier::From(ct[0], ct01, ct01_12, cts); + *aft = SBezier::From(cts, ct12_23, ct23, ct[3]); + break; + } + default: oops(); + } +} + +void SBezier::MakePwlInto(SEdgeList *sel, double chordTol) { + List lv = {}; + MakePwlInto(&lv, chordTol); + int i; + for(i = 1; i < lv.n; i++) { + sel->AddEdge(lv.elem[i-1], lv.elem[i]); + } + lv.Clear(); +} +void SBezier::MakePwlInto(List *l, double chordTol) { + List lv = {}; + MakePwlInto(&lv, chordTol); + int i; + for(i = 0; i < lv.n; i++) { + SCurvePt scpt; + scpt.tag = 0; + scpt.p = lv.elem[i]; + scpt.vertex = (i == 0) || (i == (lv.n - 1)); + l->Add(&scpt); + } + lv.Clear(); +} +void SBezier::MakePwlInto(SContour *sc, double chordTol) { + List lv = {}; + MakePwlInto(&lv, chordTol); + int i; + for(i = 0; i < lv.n; i++) { + sc->AddPoint(lv.elem[i]); + } + lv.Clear(); +} +void SBezier::MakePwlInto(List *l, double chordTol) { + if(EXACT(chordTol == 0)) { + // Use the default chord tolerance. + chordTol = SS.ChordTolMm(); + } + l->Add(&(ctrl[0])); + if(deg == 1) { + l->Add(&(ctrl[1])); + } else { + // Never do fewer than one intermediate point; people seem to get + // unhappy when their circles turn into squares, but maybe less + // unhappy with octagons. + MakePwlInitialWorker(l, 0.0, 0.5, chordTol); + MakePwlInitialWorker(l, 0.5, 1.0, chordTol); + } +} +void SBezier::MakePwlWorker(List *l, double ta, double tb, double chordTol) +{ + Vector pa = PointAt(ta); + Vector pb = PointAt(tb); + + Vector pm = PointAt((ta + tb) / 2.0); + double d = pm.DistanceToLine(pa, pb.Minus(pa)); + + double step = 1.0/SS.GetMaxSegments(); + if((tb - ta) < step || d < chordTol) { + // A previous call has already added the beginning of our interval. + l->Add(&pb); + } else { + double tm = (ta + tb) / 2; + MakePwlWorker(l, ta, tm, chordTol); + MakePwlWorker(l, tm, tb, chordTol); + } +} +void SBezier::MakePwlInitialWorker(List *l, double ta, double tb, double chordTol) +{ + Vector pa = PointAt(ta); + Vector pb = PointAt(tb); + + double tm1 = ta + (tb - ta) * 0.25; + double tm2 = ta + (tb - ta) * 0.5; + double tm3 = ta + (tb - ta) * 0.75; + + Vector pm1 = PointAt(tm1); + Vector pm2 = PointAt(tm2); + Vector pm3 = PointAt(tm3); + Vector dir = pb.Minus(pa); + + double d = max({ + pm1.DistanceToLine(pa, dir), + pm2.DistanceToLine(pa, dir), + pm3.DistanceToLine(pa, dir) + }); + + double step = 1.0/SS.GetMaxSegments(); + if((tb - ta) < step || d < chordTol) { + // A previous call has already added the beginning of our interval. + l->Add(&pb); + } else { + double tm = (ta + tb) / 2; + MakePwlWorker(l, ta, tm, chordTol); + MakePwlWorker(l, tm, tb, chordTol); + } +} + +Vector SSurface::PointAt(Point2d puv) { + return PointAt(puv.x, puv.y); +} +Vector SSurface::PointAt(double u, double v) { + Vector num = Vector::From(0, 0, 0); + double den = 0; + + int i, j; + for(i = 0; i <= degm; i++) { + for(j = 0; j <= degn; j++) { + double Bi = Bernstein(i, degm, u), + Bj = Bernstein(j, degn, v); + + num = num.Plus(ctrl[i][j].ScaledBy(Bi*Bj*weight[i][j])); + den += weight[i][j]*Bi*Bj; + } + } + num = num.ScaledBy(1.0/den); + return num; +} + +void SSurface::TangentsAt(double u, double v, Vector *tu, Vector *tv) { + Vector num = Vector::From(0, 0, 0), + num_u = Vector::From(0, 0, 0), + num_v = Vector::From(0, 0, 0); + double den = 0, + den_u = 0, + den_v = 0; + + int i, j; + for(i = 0; i <= degm; i++) { + for(j = 0; j <= degn; j++) { + double Bi = Bernstein(i, degm, u), + Bj = Bernstein(j, degn, v), + Bip = BernsteinDerivative(i, degm, u), + Bjp = BernsteinDerivative(j, degn, v); + + num = num.Plus(ctrl[i][j].ScaledBy(Bi*Bj*weight[i][j])); + den += weight[i][j]*Bi*Bj; + + num_u = num_u.Plus(ctrl[i][j].ScaledBy(Bip*Bj*weight[i][j])); + den_u += weight[i][j]*Bip*Bj; + + num_v = num_v.Plus(ctrl[i][j].ScaledBy(Bi*Bjp*weight[i][j])); + den_v += weight[i][j]*Bi*Bjp; + } + } + // quotient rule; f(t) = n(t)/d(t), so f' = (n'*d - n*d')/(d^2) + *tu = ((num_u.ScaledBy(den)).Minus(num.ScaledBy(den_u))); + *tu = tu->ScaledBy(1.0/(den*den)); + + *tv = ((num_v.ScaledBy(den)).Minus(num.ScaledBy(den_v))); + *tv = tv->ScaledBy(1.0/(den*den)); +} + +Vector SSurface::NormalAt(Point2d puv) { + return NormalAt(puv.x, puv.y); +} +Vector SSurface::NormalAt(double u, double v) { + Vector tu, tv; + TangentsAt(u, v, &tu, &tv); + return tu.Cross(tv); +} + +void SSurface::ClosestPointTo(Vector p, Point2d *puv, bool converge) { + ClosestPointTo(p, &(puv->x), &(puv->y), converge); +} +void SSurface::ClosestPointTo(Vector p, double *u, double *v, bool converge) { + // A few special cases first; when control points are coincident the + // derivative goes to zero at the conrol points, and would result in + // nonconvergence. We avoid that here, and also guarantee a consistent + // (u, v) (of the infinitely many possible in one parameter). + if(p.Equals(ctrl[0] [0] )) { *u = 0; *v = 0; return; } + if(p.Equals(ctrl[degm][0] )) { *u = 1; *v = 0; return; } + if(p.Equals(ctrl[degm][degn])) { *u = 1; *v = 1; return; } + if(p.Equals(ctrl[0] [degn])) { *u = 0; *v = 1; return; } + + // And planes are trivial, so don't waste time iterating over those. + if(degm == 1 && degn == 1) { + Vector orig = ctrl[0][0], + bu = (ctrl[1][0]).Minus(orig), + bv = (ctrl[0][1]).Minus(orig); + if((ctrl[1][1]).Equals(orig.Plus(bu).Plus(bv))) { + Vector dp = p.Minus(orig); + *u = dp.Dot(bu) / bu.MagSquared(); + *v = dp.Dot(bv) / bv.MagSquared(); + return; + } + } + + // Try whatever the previous guess was. This is likely to do something + // good if we're working our way along a curve or something else where + // we project successive points that are close to each other; something + // like a 20% speedup empirically. + if(converge) { + double ut = cached.x, vt = cached.y; + if(ClosestPointNewton(p, &ut, &vt, converge)) { + cached.x = *u = ut; + cached.y = *v = vt; + return; + } + } + + // Search for a reasonable initial guess + int i, j; + double minDist = VERY_POSITIVE; + int res = (max(degm, degn) == 2) ? 7 : 20; + for(i = 0; i < res; i++) { + for(j = 0; j < res; j++) { + double tryu = (i + 0.5)/res, tryv = (j + 0.5)/res; + + Vector tryp = PointAt(tryu, tryv); + double d = (tryp.Minus(p)).Magnitude(); + if(d < minDist) { + *u = tryu; + *v = tryv; + minDist = d; + } + } + } + + if(ClosestPointNewton(p, u, v, converge)) { + cached.x = *u; + cached.y = *v; + return; + } + + // If we failed to converge, then at least don't return NaN. + if(isnan(*u) || isnan(*v)) { + *u = *v = 0; + } +} + +bool SSurface::ClosestPointNewton(Vector p, double *u, double *v, bool converge) +{ + // Initial guess is in u, v; refine by Newton iteration. + Vector p0 = Vector::From(0, 0, 0); + for(int i = 0; i < (converge ? 25 : 5); i++) { + p0 = PointAt(*u, *v); + if(converge) { + if(p0.Equals(p, RATPOLY_EPS)) { + return true; + } + } + + Vector tu, tv; + TangentsAt(*u, *v, &tu, &tv); + + // Project the point into a plane through p0, with basis tu, tv; a + // second-order thing would converge faster but needs second + // derivatives. + Vector dp = p.Minus(p0); + double du = dp.Dot(tu), dv = dp.Dot(tv); + *u += du / (tu.MagSquared()); + *v += dv / (tv.MagSquared()); + } + + if(converge) { + dbp("didn't converge"); + dbp("have %.3f %.3f %.3f", CO(p0)); + dbp("want %.3f %.3f %.3f", CO(p)); + dbp("distance = %g", (p.Minus(p0)).Magnitude()); + } + return false; +} + +bool SSurface::PointIntersectingLine(Vector p0, Vector p1, double *u, double *v) +{ + int i; + for(i = 0; i < 15; i++) { + Vector pi, p, tu, tv; + p = PointAt(*u, *v); + TangentsAt(*u, *v, &tu, &tv); + + Vector n = (tu.Cross(tv)).WithMagnitude(1); + double d = p.Dot(n); + + bool parallel; + pi = Vector::AtIntersectionOfPlaneAndLine(n, d, p0, p1, ¶llel); + if(parallel) break; + + // Check for convergence + if(pi.Equals(p, RATPOLY_EPS)) return true; + + // Adjust our guess and iterate + Vector dp = pi.Minus(p); + double du = dp.Dot(tu), dv = dp.Dot(tv); + *u += du / (tu.MagSquared()); + *v += dv / (tv.MagSquared()); + } +// dbp("didn't converge (surface intersecting line)"); + return false; +} + +Vector SSurface::ClosestPointOnThisAndSurface(SSurface *srf2, Vector p) { + // This is untested. + int i, j; + Point2d puv[2]; + SSurface *srf[2] = { this, srf2 }; + + for(j = 0; j < 2; j++) { + (srf[j])->ClosestPointTo(p, &(puv[j]), false); + } + + for(i = 0; i < 10; i++) { + Vector tu[2], tv[2], cp[2], n[2]; + double d[2]; + + for(j = 0; j < 2; j++) { + (srf[j])->TangentsAt(puv[j].x, puv[j].y, &(tu[j]), &(tv[j])); + + cp[j] = (srf[j])->PointAt(puv[j]); + + n[j] = ((tu[j]).Cross(tv[j])).WithMagnitude(1); + d[j] = (n[j]).Dot(cp[j]); + } + + if((cp[0]).Equals(cp[1], RATPOLY_EPS)) break; + + Vector p0 = Vector::AtIntersectionOfPlanes(n[0], d[0], n[1], d[1]), + dp = (n[0]).Cross(n[1]); + + Vector pc = p.ClosestPointOnLine(p0, dp); + + // Adjust our guess and iterate + for(j = 0; j < 2; j++) { + Vector dc = pc.Minus(cp[j]); + double du = dc.Dot(tu[j]), dv = dc.Dot(tv[j]); + puv[j].x += du / ((tu[j]).MagSquared()); + puv[j].y += dv / ((tv[j]).MagSquared()); + } + } + if(i >= 10) { + dbp("this and srf, didn't converge, d=%g", + (puv[0].Minus(puv[1])).Magnitude()); + } + + // If this converged, then the two points are actually equal. + return ((srf[0])->PointAt(puv[0])).Plus( + ((srf[1])->PointAt(puv[1]))).ScaledBy(0.5); +} + +void SSurface::PointOnSurfaces(SSurface *s1, SSurface *s2, + double *up, double *vp) +{ + double u[3] = { *up, 0, 0 }, v[3] = { *vp, 0, 0 }; + SSurface *srf[3] = { this, s1, s2 }; + + // Get initial guesses for (u, v) in the other surfaces + Vector p = PointAt(*u, *v); + (srf[1])->ClosestPointTo(p, &(u[1]), &(v[1]), false); + (srf[2])->ClosestPointTo(p, &(u[2]), &(v[2]), false); + + int i, j; + for(i = 0; i < 20; i++) { + // Approximate each surface by a plane + Vector p[3], tu[3], tv[3], n[3]; + double d[3]; + for(j = 0; j < 3; j++) { + p[j] = (srf[j])->PointAt(u[j], v[j]); + (srf[j])->TangentsAt(u[j], v[j], &(tu[j]), &(tv[j])); + n[j] = ((tu[j]).Cross(tv[j])).WithMagnitude(1); + d[j] = (n[j]).Dot(p[j]); + } + + // If a = b and b = c, then does a = c? No, it doesn't. + if((p[0]).Equals(p[1], RATPOLY_EPS) && + (p[1]).Equals(p[2], RATPOLY_EPS) && + (p[2]).Equals(p[0], RATPOLY_EPS)) + { + *up = u[0]; + *vp = v[0]; + return; + } + + bool parallel; + Vector pi = Vector::AtIntersectionOfPlanes(n[0], d[0], + n[1], d[1], + n[2], d[2], ¶llel); + if(parallel) break; + + for(j = 0; j < 3; j++) { + Vector dp = pi.Minus(p[j]); + double du = dp.Dot(tu[j]), dv = dp.Dot(tv[j]); + u[j] += du / (tu[j]).MagSquared(); + v[j] += dv / (tv[j]).MagSquared(); + } + } + dbp("didn't converge (three surfaces intersecting)"); +} + diff --git a/src/srf/raycast.cpp b/src/srf/raycast.cpp new file mode 100644 index 0000000..808287f --- /dev/null +++ b/src/srf/raycast.cpp @@ -0,0 +1,611 @@ +//----------------------------------------------------------------------------- +// Routines for ray-casting: intersecting a line segment or an infinite line +// with a surface or shell. Ray-casting against a shell is used for point-in- +// shell testing, and the intersection of edge line segments against surfaces +// is used to get rough surface-curve intersections, which are later refined +// numerically. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +// Dot product tolerance for perpendicular; this is on the direction cosine, +// so it's about 0.001 degrees. +const double SShell::DOTP_TOL = 1e-5; + +extern int FLAG; + + +double SSurface::DepartureFromCoplanar(void) { + int i, j; + int ia, ja, ib = 0, jb = 0, ic = 0, jc = 0; + double best; + + // Grab three points to define a plane; first choose (0, 0) arbitrarily. + ia = ja = 0; + // Then the point farthest from pt a. + best = VERY_NEGATIVE; + for(i = 0; i <= degm; i++) { + for(j = 0; j <= degn; j++) { + if(i == ia && j == ja) continue; + + double dist = (ctrl[i][j]).Minus(ctrl[ia][ja]).Magnitude(); + if(dist > best) { + best = dist; + ib = i; + jb = j; + } + } + } + // Then biggest magnitude of ab cross ac. + best = VERY_NEGATIVE; + for(i = 0; i <= degm; i++) { + for(j = 0; j <= degn; j++) { + if(i == ia && j == ja) continue; + if(i == ib && j == jb) continue; + + double mag = + ((ctrl[ia][ja].Minus(ctrl[ib][jb]))).Cross( + (ctrl[ia][ja].Minus(ctrl[i ][j ]))).Magnitude(); + if(mag > best) { + best = mag; + ic = i; + jc = j; + } + } + } + + Vector n = ((ctrl[ia][ja].Minus(ctrl[ib][jb]))).Cross( + (ctrl[ia][ja].Minus(ctrl[ic][jc]))); + n = n.WithMagnitude(1); + double d = (ctrl[ia][ja]).Dot(n); + + // Finally, calculate the deviation from each point to the plane. + double farthest = VERY_NEGATIVE; + for(i = 0; i <= degm; i++) { + for(j = 0; j <= degn; j++) { + double dist = fabs(n.Dot(ctrl[i][j]) - d); + if(dist > farthest) { + farthest = dist; + } + } + } + return farthest; +} + +void SSurface::WeightControlPoints(void) { + int i, j; + for(i = 0; i <= degm; i++) { + for(j = 0; j <= degn; j++) { + ctrl[i][j] = (ctrl[i][j]).ScaledBy(weight[i][j]); + } + } +} +void SSurface::UnWeightControlPoints(void) { + int i, j; + for(i = 0; i <= degm; i++) { + for(j = 0; j <= degn; j++) { + ctrl[i][j] = (ctrl[i][j]).ScaledBy(1.0/weight[i][j]); + } + } +} +void SSurface::CopyRowOrCol(bool row, int this_ij, SSurface *src, int src_ij) { + if(row) { + int j; + for(j = 0; j <= degn; j++) { + ctrl [this_ij][j] = src->ctrl [src_ij][j]; + weight[this_ij][j] = src->weight[src_ij][j]; + } + } else { + int i; + for(i = 0; i <= degm; i++) { + ctrl [i][this_ij] = src->ctrl [i][src_ij]; + weight[i][this_ij] = src->weight[i][src_ij]; + } + } +} +void SSurface::BlendRowOrCol(bool row, int this_ij, SSurface *a, int a_ij, + SSurface *b, int b_ij) +{ + if(row) { + int j; + for(j = 0; j <= degn; j++) { + Vector c = (a->ctrl [a_ij][j]).Plus(b->ctrl [b_ij][j]); + double w = (a->weight[a_ij][j] + b->weight[b_ij][j]); + ctrl [this_ij][j] = c.ScaledBy(0.5); + weight[this_ij][j] = w / 2; + } + } else { + int i; + for(i = 0; i <= degm; i++) { + Vector c = (a->ctrl [i][a_ij]).Plus(b->ctrl [i][b_ij]); + double w = (a->weight[i][a_ij] + b->weight[i][b_ij]); + ctrl [i][this_ij] = c.ScaledBy(0.5); + weight[i][this_ij] = w / 2; + } + } +} +void SSurface::SplitInHalf(bool byU, SSurface *sa, SSurface *sb) { + sa->degm = sb->degm = degm; + sa->degn = sb->degn = degn; + + // by de Casteljau's algorithm in a projective space; so we must work + // on points (w*x, w*y, w*z, w) + WeightControlPoints(); + + switch(byU ? degm : degn) { + case 1: + sa->CopyRowOrCol (byU, 0, this, 0); + sb->CopyRowOrCol (byU, 1, this, 1); + + sa->BlendRowOrCol(byU, 1, this, 0, this, 1); + sb->BlendRowOrCol(byU, 0, this, 0, this, 1); + break; + + case 2: + sa->CopyRowOrCol (byU, 0, this, 0); + sb->CopyRowOrCol (byU, 2, this, 2); + + sa->BlendRowOrCol(byU, 1, this, 0, this, 1); + sb->BlendRowOrCol(byU, 1, this, 1, this, 2); + + sa->BlendRowOrCol(byU, 2, sa, 1, sb, 1); + sb->BlendRowOrCol(byU, 0, sa, 1, sb, 1); + break; + + case 3: { + SSurface st; + st.degm = degm; st.degn = degn; + + sa->CopyRowOrCol (byU, 0, this, 0); + sb->CopyRowOrCol (byU, 3, this, 3); + + sa->BlendRowOrCol(byU, 1, this, 0, this, 1); + sb->BlendRowOrCol(byU, 2, this, 2, this, 3); + st. BlendRowOrCol(byU, 0, this, 1, this, 2); // scratch var + + sa->BlendRowOrCol(byU, 2, sa, 1, &st, 0); + sb->BlendRowOrCol(byU, 1, sb, 2, &st, 0); + + sa->BlendRowOrCol(byU, 3, sa, 2, sb, 1); + sb->BlendRowOrCol(byU, 0, sa, 2, sb, 1); + break; + } + + default: oops(); + } + + sa->UnWeightControlPoints(); + sb->UnWeightControlPoints(); + UnWeightControlPoints(); +} + +//----------------------------------------------------------------------------- +// Find all points where the indicated finite (if segment) or infinite (if not +// segment) line intersects our surface. Report them in uv space in the list. +// We first do a bounding box check; if the line doesn't intersect, then we're +// done. If it does, then we check how small our surface is. If it's big, +// then we subdivide into quarters and recurse. If it's small, then we refine +// by Newton's method and record the point. +//----------------------------------------------------------------------------- +void SSurface::AllPointsIntersectingUntrimmed(Vector a, Vector b, + int *cnt, int *level, + List *l, bool segment, + SSurface *sorig) +{ + // Test if the line intersects our axis-aligned bounding box; if no, then + // no possibility of an intersection + if(LineEntirelyOutsideBbox(a, b, segment)) return; + + if(*cnt > 2000) { + dbp("!!! too many subdivisions (level=%d)!", *level); + dbp("degm = %d degn = %d", degm, degn); + return; + } + (*cnt)++; + + // If we might intersect, and the surface is small, then switch to Newton + // iterations. + if(DepartureFromCoplanar() < 0.2*SS.ChordTolMm()) { + Vector p = (ctrl[0 ][0 ]).Plus( + ctrl[0 ][degn]).Plus( + ctrl[degm][0 ]).Plus( + ctrl[degm][degn]).ScaledBy(0.25); + Inter inter; + sorig->ClosestPointTo(p, &(inter.p.x), &(inter.p.y), false); + if(sorig->PointIntersectingLine(a, b, &(inter.p.x), &(inter.p.y))) { + Vector p = sorig->PointAt(inter.p.x, inter.p.y); + // Debug check, verify that the point lies in both surfaces + // (which it ought to, since the surfaces should be coincident) + double u, v; + ClosestPointTo(p, &u, &v); + l->Add(&inter); + } else { + // Might not converge if line is almost tangent to surface... + } + return; + } + + // But the surface is big, so split it, alternating by u and v + SSurface surf0, surf1; + SplitInHalf((*level & 1) == 0, &surf0, &surf1); + + int nextLevel = (*level) + 1; + (*level) = nextLevel; + surf0.AllPointsIntersectingUntrimmed(a, b, cnt, level, l, segment, sorig); + (*level) = nextLevel; + surf1.AllPointsIntersectingUntrimmed(a, b, cnt, level, l, segment, sorig); +} + +//----------------------------------------------------------------------------- +// Find all points where a line through a and b intersects our surface, and +// add them to the list. If seg is true then report only intersections that +// lie within the finite line segment (not including the endpoints); otherwise +// we work along the infinite line. And we report either just intersections +// inside the trim curve, or any intersection with u, v in [0, 1]. And we +// either disregard or report tangent points. +//----------------------------------------------------------------------------- +void SSurface::AllPointsIntersecting(Vector a, Vector b, + List *l, + bool seg, bool trimmed, bool inclTangent) +{ + if(LineEntirelyOutsideBbox(a, b, seg)) return; + + Vector ba = b.Minus(a); + double bam = ba.Magnitude(); + + List inters = {}; + + // All the intersections between the line and the surface; either special + // cases that we can quickly solve in closed form, or general numerical. + Vector center, axis, start, finish; + double radius; + if(degm == 1 && degn == 1) { + // Against a plane, easy. + Vector n = NormalAt(0, 0).WithMagnitude(1); + double d = n.Dot(PointAt(0, 0)); + // Trim to line segment now if requested, don't generate points that + // would just get discarded later. + if(!seg || + (n.Dot(a) > d + LENGTH_EPS && n.Dot(b) < d - LENGTH_EPS) || + (n.Dot(b) > d + LENGTH_EPS && n.Dot(a) < d - LENGTH_EPS)) + { + Vector p = Vector::AtIntersectionOfPlaneAndLine(n, d, a, b, NULL); + Inter inter; + ClosestPointTo(p, &(inter.p.x), &(inter.p.y)); + inters.Add(&inter); + } + } else if(IsCylinder(&axis, ¢er, &radius, &start, &finish)) { + // This one can be solved in closed form too. + Vector ab = b.Minus(a); + if(axis.Cross(ab).Magnitude() < LENGTH_EPS) { + // edge is parallel to axis of cylinder, no intersection points + return; + } + // A coordinate system centered at the center of the circle, with + // the edge under test horizontal + Vector u, v, n = axis.WithMagnitude(1); + u = (ab.Minus(n.ScaledBy(ab.Dot(n)))).WithMagnitude(1); + v = n.Cross(u); + Point2d ap = (a.Minus(center)).DotInToCsys(u, v, n).ProjectXy(), + bp = (b.Minus(center)).DotInToCsys(u, v, n).ProjectXy(), + sp = (start. Minus(center)).DotInToCsys(u, v, n).ProjectXy(), + fp = (finish.Minus(center)).DotInToCsys(u, v, n).ProjectXy(); + + double thetas = atan2(sp.y, sp.x), thetaf = atan2(fp.y, fp.x); + + Point2d ip[2]; + int ip_n = 0; + if(fabs(fabs(ap.y) - radius) < LENGTH_EPS) { + // tangent + if(inclTangent) { + ip[0] = Point2d::From(0, ap.y); + ip_n = 1; + } + } else if(fabs(ap.y) < radius) { + // two intersections + double xint = sqrt(radius*radius - ap.y*ap.y); + ip[0] = Point2d::From(-xint, ap.y); + ip[1] = Point2d::From( xint, ap.y); + ip_n = 2; + } + int i; + for(i = 0; i < ip_n; i++) { + double t = (ip[i].Minus(ap)).DivPivoting(bp.Minus(ap)); + // This is a point on the circle; but is it on the arc? + Point2d pp = ap.Plus((bp.Minus(ap)).ScaledBy(t)); + double theta = atan2(pp.y, pp.x); + double dp = WRAP_SYMMETRIC(theta - thetas, 2*PI), + df = WRAP_SYMMETRIC(thetaf - thetas, 2*PI); + double tol = LENGTH_EPS/radius; + + if((df > 0 && ((dp < -tol) || (dp > df + tol))) || + (df < 0 && ((dp > tol) || (dp < df - tol)))) + { + continue; + } + + Vector p = a.Plus((b.Minus(a)).ScaledBy(t)); + + Inter inter; + ClosestPointTo(p, &(inter.p.x), &(inter.p.y)); + inters.Add(&inter); + } + } else { + // General numerical solution by subdivision, fallback + int cnt = 0, level = 0; + AllPointsIntersectingUntrimmed(a, b, &cnt, &level, &inters, seg, this); + } + + // Remove duplicate intersection points + inters.ClearTags(); + int i, j; + for(i = 0; i < inters.n; i++) { + for(j = i + 1; j < inters.n; j++) { + if(inters.elem[i].p.Equals(inters.elem[j].p)) { + inters.elem[j].tag = 1; + } + } + } + inters.RemoveTagged(); + + for(i = 0; i < inters.n; i++) { + Point2d puv = inters.elem[i].p; + + // Make sure the point lies within the finite line segment + Vector pxyz = PointAt(puv.x, puv.y); + double t = (pxyz.Minus(a)).DivPivoting(ba); + if(seg && (t > 1 - LENGTH_EPS/bam || t < LENGTH_EPS/bam)) { + continue; + } + + // And that it lies inside our trim region + Point2d dummy = { 0, 0 }; + int c = (bsp) ? bsp->ClassifyPoint(puv, dummy, this) : SBspUv::OUTSIDE; + if(trimmed && c == SBspUv::OUTSIDE) { + continue; + } + + // It does, so generate the intersection + SInter si; + si.p = pxyz; + si.surfNormal = NormalAt(puv.x, puv.y); + si.pinter = puv; + si.srf = this; + si.onEdge = (c != SBspUv::INSIDE); + l->Add(&si); + } + + inters.Clear(); +} + +void SShell::AllPointsIntersecting(Vector a, Vector b, + List *il, + bool seg, bool trimmed, bool inclTangent) +{ + SSurface *ss; + for(ss = surface.First(); ss; ss = surface.NextAfter(ss)) { + ss->AllPointsIntersecting(a, b, il, seg, trimmed, inclTangent); + } +} + + + +int SShell::ClassifyRegion(Vector edge_n, Vector inter_surf_n, + Vector edge_surf_n) +{ + double dot = inter_surf_n.DirectionCosineWith(edge_n); + if(fabs(dot) < DOTP_TOL) { + // The edge's surface and the edge-on-face surface + // are coincident. Test the edge's surface normal + // to see if it's with same or opposite normals. + if(inter_surf_n.Dot(edge_surf_n) > 0) { + return COINC_SAME; + } else { + return COINC_OPP; + } + } else if(dot > 0) { + return OUTSIDE; + } else { + return INSIDE; + } +} + +//----------------------------------------------------------------------------- +// Does the given point lie on our shell? There are many cases; inside and +// outside are obvious, but then there's all the edge-on-edge and edge-on-face +// possibilities. +// +// To calculate, we intersect a ray through p with our shell, and classify +// using the closest intersection point. If the ray hits a surface on edge, +// then just reattempt in a different random direction. +//----------------------------------------------------------------------------- +bool SShell::ClassifyEdge(int *indir, int *outdir, + Vector ea, Vector eb, + Vector p, + Vector edge_n_in, Vector edge_n_out, Vector surf_n) +{ + List l = {}; + + srand(0); + + // First, check for edge-on-edge + int edge_inters = 0; + Vector inter_surf_n[2], inter_edge_n[2]; + SSurface *srf; + for(srf = surface.First(); srf; srf = surface.NextAfter(srf)) { + if(srf->LineEntirelyOutsideBbox(ea, eb, true)) continue; + + SEdgeList *sel = &(srf->edges); + SEdge *se; + for(se = sel->l.First(); se; se = sel->l.NextAfter(se)) { + if((ea.Equals(se->a) && eb.Equals(se->b)) || + (eb.Equals(se->a) && ea.Equals(se->b)) || + p.OnLineSegment(se->a, se->b)) + { + if(edge_inters < 2) { + // Edge-on-edge case + Point2d pm; + srf->ClosestPointTo(p, &pm, false); + // A vector normal to the surface, at the intersection point + inter_surf_n[edge_inters] = srf->NormalAt(pm); + // A vector normal to the intersecting edge (but within the + // intersecting surface) at the intersection point, pointing + // out. + inter_edge_n[edge_inters] = + (inter_surf_n[edge_inters]).Cross((se->b).Minus((se->a))); + } + + edge_inters++; + } + } + } + + if(edge_inters == 2) { + // TODO, make this use the appropriate curved normals + double dotp[2]; + for(int i = 0; i < 2; i++) { + dotp[i] = edge_n_out.DirectionCosineWith(inter_surf_n[i]); + } + + if(fabs(dotp[1]) < DOTP_TOL) { + swap(dotp[0], dotp[1]); + swap(inter_surf_n[0], inter_surf_n[1]); + swap(inter_edge_n[0], inter_edge_n[1]); + } + + int coinc = (surf_n.Dot(inter_surf_n[0])) > 0 ? COINC_SAME : COINC_OPP; + + if(fabs(dotp[0]) < DOTP_TOL && fabs(dotp[1]) < DOTP_TOL) { + // This is actually an edge on face case, just that the face + // is split into two pieces joining at our edge. + *indir = coinc; + *outdir = coinc; + } else if(fabs(dotp[0]) < DOTP_TOL && dotp[1] > DOTP_TOL) { + if(edge_n_out.Dot(inter_edge_n[0]) > 0) { + *indir = coinc; + *outdir = OUTSIDE; + } else { + *indir = INSIDE; + *outdir = coinc; + } + } else if(fabs(dotp[0]) < DOTP_TOL && dotp[1] < -DOTP_TOL) { + if(edge_n_out.Dot(inter_edge_n[0]) > 0) { + *indir = coinc; + *outdir = INSIDE; + } else { + *indir = OUTSIDE; + *outdir = coinc; + } + } else if(dotp[0] > DOTP_TOL && dotp[1] > DOTP_TOL) { + *indir = INSIDE; + *outdir = OUTSIDE; + } else if(dotp[0] < -DOTP_TOL && dotp[1] < -DOTP_TOL) { + *indir = OUTSIDE; + *outdir = INSIDE; + } else { + // Edge is tangent to the shell at shell's edge, so can't be + // a boundary of the surface. + return false; + } + return true; + } + + if(edge_inters != 0) dbp("bad, edge_inters=%d", edge_inters); + + // Next, check for edge-on-surface. The ray-casting for edge-inside-shell + // would catch this too, but test separately, for speed (since many edges + // are on surface) and for numerical stability, so we don't pick up + // the additional error from the line intersection. + + for(srf = surface.First(); srf; srf = surface.NextAfter(srf)) { + if(srf->LineEntirelyOutsideBbox(ea, eb, true)) continue; + + Point2d puv; + srf->ClosestPointTo(p, &(puv.x), &(puv.y), false); + Vector pp = srf->PointAt(puv); + + if((pp.Minus(p)).Magnitude() > LENGTH_EPS) continue; + Point2d dummy = { 0, 0 }; + int c = (srf->bsp) ? srf->bsp->ClassifyPoint(puv, dummy, srf) : SBspUv::OUTSIDE; + if(c == SBspUv::OUTSIDE) continue; + + // Edge-on-face (unless edge-on-edge above superceded) + Point2d pin, pout; + srf->ClosestPointTo(p.Plus(edge_n_in), &pin, false); + srf->ClosestPointTo(p.Plus(edge_n_out), &pout, false); + + Vector surf_n_in = srf->NormalAt(pin), + surf_n_out = srf->NormalAt(pout); + + *indir = ClassifyRegion(edge_n_in, surf_n_in, surf_n); + *outdir = ClassifyRegion(edge_n_out, surf_n_out, surf_n); + return true; + } + + // Edge is not on face or on edge; so it's either inside or outside + // the shell, and we'll determine which by raycasting. + int cnt = 0; + for(;;) { + // Cast a ray in a random direction (two-sided so that we test if + // the point lies on a surface, but use only one side for in/out + // testing) + Vector ray = Vector::From(Random(1), Random(1), Random(1)); + + AllPointsIntersecting( + p.Minus(ray), p.Plus(ray), &l, false, true, false); + + // no intersections means it's outside + *indir = OUTSIDE; + *outdir = OUTSIDE; + double dmin = VERY_POSITIVE; + bool onEdge = false; + edge_inters = 0; + + SInter *si; + for(si = l.First(); si; si = l.NextAfter(si)) { + double t = ((si->p).Minus(p)).DivPivoting(ray); + if(t*ray.Magnitude() < -LENGTH_EPS) { + // wrong side, doesn't count + continue; + } + + double d = ((si->p).Minus(p)).Magnitude(); + + // We actually should never hit this case; it should have been + // handled above. + if(d < LENGTH_EPS && si->onEdge) { + edge_inters++; + } + + if(d < dmin) { + dmin = d; + // Edge does not lie on surface; either strictly inside + // or strictly outside + if((si->surfNormal).Dot(ray) > 0) { + *indir = INSIDE; + *outdir = INSIDE; + } else { + *indir = OUTSIDE; + *outdir = OUTSIDE; + } + onEdge = si->onEdge; + } + } + l.Clear(); + + // If the point being tested lies exactly on an edge of the shell, + // then our ray always lies on edge, and that's okay. Otherwise + // try again in a different random direction. + if(!onEdge) break; + if(cnt++ > 5) { + dbp("can't find a ray that doesn't hit on edge!"); + dbp("on edge = %d, edge_inters = %d", onEdge, edge_inters); + SS.nakedEdges.AddEdge(ea, eb); + break; + } + } + + return true; +} + diff --git a/src/srf/surface.cpp b/src/srf/surface.cpp new file mode 100644 index 0000000..9b36cb9 --- /dev/null +++ b/src/srf/surface.cpp @@ -0,0 +1,880 @@ +//----------------------------------------------------------------------------- +// Anything involving surfaces and sets of surfaces (i.e., shells); except +// for the real math, which is in ratpoly.cpp. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "../solvespace.h" + +SSurface SSurface::FromExtrusionOf(SBezier *sb, Vector t0, Vector t1) { + SSurface ret = {}; + + ret.degm = sb->deg; + ret.degn = 1; + + int i; + for(i = 0; i <= ret.degm; i++) { + ret.ctrl[i][0] = (sb->ctrl[i]).Plus(t0); + ret.weight[i][0] = sb->weight[i]; + + ret.ctrl[i][1] = (sb->ctrl[i]).Plus(t1); + ret.weight[i][1] = sb->weight[i]; + } + + return ret; +} + +bool SSurface::IsExtrusion(SBezier *of, Vector *alongp) { + int i; + + if(degn != 1) return false; + + Vector along = (ctrl[0][1]).Minus(ctrl[0][0]); + for(i = 0; i <= degm; i++) { + if((fabs(weight[i][1] - weight[i][0]) < LENGTH_EPS) && + ((ctrl[i][1]).Minus(ctrl[i][0])).Equals(along)) + { + continue; + } + return false; + } + + // yes, we are a surface of extrusion; copy the original curve and return + if(of) { + for(i = 0; i <= degm; i++) { + of->weight[i] = weight[i][0]; + of->ctrl[i] = ctrl[i][0]; + } + of->deg = degm; + *alongp = along; + } + return true; +} + +bool SSurface::IsCylinder(Vector *axis, Vector *center, double *r, + Vector *start, Vector *finish) +{ + SBezier sb; + if(!IsExtrusion(&sb, axis)) return false; + if(!sb.IsCircle(*axis, center, r)) return false; + + *start = sb.ctrl[0]; + *finish = sb.ctrl[2]; + return true; +} + +SSurface SSurface::FromRevolutionOf(SBezier *sb, Vector pt, Vector axis, + double thetas, double thetaf) +{ + SSurface ret = {}; + + + ret.degm = sb->deg; + ret.degn = 2; + + double dtheta = fabs(WRAP_SYMMETRIC(thetaf - thetas, 2*PI)); + + // We now wish to revolve the curve about the z axis + int i; + for(i = 0; i <= ret.degm; i++) { + Vector p = sb->ctrl[i]; + + Vector ps = p.RotatedAbout(pt, axis, thetas), + pf = p.RotatedAbout(pt, axis, thetaf); + + Vector ct; + if(ps.Equals(pf)) { + // Degenerate case: a control point lies on the axis of revolution, + // so we get three coincident control points. + ct = ps; + } else { + // Normal case, the control point sweeps out a circle. + Vector c = ps.ClosestPointOnLine(pt, axis); + + Vector rs = ps.Minus(c), + rf = pf.Minus(c); + + Vector ts = axis.Cross(rs), + tf = axis.Cross(rf); + + ct = Vector::AtIntersectionOfLines(ps, ps.Plus(ts), + pf, pf.Plus(tf), + NULL, NULL, NULL); + } + + ret.ctrl[i][0] = ps; + ret.ctrl[i][1] = ct; + ret.ctrl[i][2] = pf; + + ret.weight[i][0] = sb->weight[i]; + ret.weight[i][1] = sb->weight[i]*cos(dtheta/2); + ret.weight[i][2] = sb->weight[i]; + } + + return ret; +} + +SSurface SSurface::FromPlane(Vector pt, Vector u, Vector v) { + SSurface ret = {}; + + ret.degm = 1; + ret.degn = 1; + + ret.weight[0][0] = ret.weight[0][1] = 1; + ret.weight[1][0] = ret.weight[1][1] = 1; + + ret.ctrl[0][0] = pt; + ret.ctrl[0][1] = pt.Plus(u); + ret.ctrl[1][0] = pt.Plus(v); + ret.ctrl[1][1] = pt.Plus(v).Plus(u); + + return ret; +} + +SSurface SSurface::FromTransformationOf(SSurface *a, + Vector t, Quaternion q, double scale, + bool includingTrims) +{ + SSurface ret = {}; + + ret.h = a->h; + ret.color = a->color; + ret.face = a->face; + + ret.degm = a->degm; + ret.degn = a->degn; + int i, j; + for(i = 0; i <= 3; i++) { + for(j = 0; j <= 3; j++) { + ret.ctrl[i][j] = a->ctrl[i][j]; + ret.ctrl[i][j] = (ret.ctrl[i][j]).ScaledBy(scale); + ret.ctrl[i][j] = (q.Rotate(ret.ctrl[i][j])).Plus(t); + + ret.weight[i][j] = a->weight[i][j]; + } + } + + if(includingTrims) { + STrimBy *stb; + for(stb = a->trim.First(); stb; stb = a->trim.NextAfter(stb)) { + STrimBy n = *stb; + n.start = n.start.ScaledBy(scale); + n.finish = n.finish.ScaledBy(scale); + n.start = (q.Rotate(n.start)) .Plus(t); + n.finish = (q.Rotate(n.finish)).Plus(t); + ret.trim.Add(&n); + } + } + + if(scale < 0) { + // If we mirror every surface of a shell, then it will end up inside + // out. So fix that here. + ret.Reverse(); + } + + return ret; +} + +void SSurface::GetAxisAlignedBounding(Vector *ptMax, Vector *ptMin) { + *ptMax = Vector::From(VERY_NEGATIVE, VERY_NEGATIVE, VERY_NEGATIVE); + *ptMin = Vector::From(VERY_POSITIVE, VERY_POSITIVE, VERY_POSITIVE); + + int i, j; + for(i = 0; i <= degm; i++) { + for(j = 0; j <= degn; j++) { + (ctrl[i][j]).MakeMaxMin(ptMax, ptMin); + } + } +} + +bool SSurface::LineEntirelyOutsideBbox(Vector a, Vector b, bool segment) { + Vector amax, amin; + GetAxisAlignedBounding(&amax, &amin); + if(!Vector::BoundingBoxIntersectsLine(amax, amin, a, b, segment)) { + // The line segment could fail to intersect the bbox, but lie entirely + // within it and intersect the surface. + if(a.OutsideAndNotOn(amax, amin) && b.OutsideAndNotOn(amax, amin)) { + return true; + } + } + return false; +} + +//----------------------------------------------------------------------------- +// Generate the piecewise linear approximation of the trim stb, which applies +// to the curve sc. +//----------------------------------------------------------------------------- +void SSurface::MakeTrimEdgesInto(SEdgeList *sel, int flags, + SCurve *sc, STrimBy *stb) +{ + Vector prev = Vector::From(0, 0, 0); + bool inCurve = false, empty = true; + double u = 0, v = 0; + + int i, first, last, increment; + if(stb->backwards) { + first = sc->pts.n - 1; + last = 0; + increment = -1; + } else { + first = 0; + last = sc->pts.n - 1; + increment = 1; + } + for(i = first; i != (last + increment); i += increment) { + Vector tpt, *pt = &(sc->pts.elem[i].p); + + if(flags & AS_UV) { + ClosestPointTo(*pt, &u, &v); + tpt = Vector::From(u, v, 0); + } else { + tpt = *pt; + } + + if(inCurve) { + sel->AddEdge(prev, tpt, sc->h.v, stb->backwards); + empty = false; + } + + prev = tpt; // either uv or xyz, depending on flags + + if(pt->Equals(stb->start)) inCurve = true; + if(pt->Equals(stb->finish)) inCurve = false; + } + if(inCurve) dbp("trim was unterminated"); + if(empty) dbp("trim was empty"); +} + +//----------------------------------------------------------------------------- +// Generate all of our trim curves, in piecewise linear form. We can do +// so in either uv or xyz coordinates. And if requested, then we can use +// the split curves from useCurvesFrom instead of the curves in our own +// shell. +//----------------------------------------------------------------------------- +void SSurface::MakeEdgesInto(SShell *shell, SEdgeList *sel, int flags, + SShell *useCurvesFrom) +{ + STrimBy *stb; + for(stb = trim.First(); stb; stb = trim.NextAfter(stb)) { + SCurve *sc = shell->curve.FindById(stb->curve); + + // We have the option to use the curves from another shell; this + // is relevant when generating the coincident edges while doing the + // Booleans, since the curves from the output shell will be split + // against any intersecting surfaces (and the originals aren't). + if(useCurvesFrom) { + sc = useCurvesFrom->curve.FindById(sc->newH); + } + + MakeTrimEdgesInto(sel, flags, sc, stb); + } +} + +//----------------------------------------------------------------------------- +// Compute the exact tangent to the intersection curve between two surfaces, +// by taking the cross product of the surface normals. We choose the direction +// of this tangent so that its dot product with dir is positive. +//----------------------------------------------------------------------------- +Vector SSurface::ExactSurfaceTangentAt(Vector p, SSurface *srfA, SSurface *srfB, + Vector dir) +{ + Point2d puva, puvb; + srfA->ClosestPointTo(p, &puva); + srfB->ClosestPointTo(p, &puvb); + Vector ts = (srfA->NormalAt(puva)).Cross( + (srfB->NormalAt(puvb))); + ts = ts.WithMagnitude(1); + if(ts.Dot(dir) < 0) { + ts = ts.ScaledBy(-1); + } + return ts; +} + +//----------------------------------------------------------------------------- +// Report our trim curves. If a trim curve is exact and sbl is not null, then +// add its exact form to sbl. Otherwise, add its piecewise linearization to +// sel. +//----------------------------------------------------------------------------- +void SSurface::MakeSectionEdgesInto(SShell *shell, + SEdgeList *sel, SBezierList *sbl) +{ + STrimBy *stb; + for(stb = trim.First(); stb; stb = trim.NextAfter(stb)) { + SCurve *sc = shell->curve.FindById(stb->curve); + SBezier *sb = &(sc->exact); + + if(sbl && sc->isExact && (sb->deg != 1 || !sel)) { + double ts, tf; + if(stb->backwards) { + sb->ClosestPointTo(stb->start, &tf); + sb->ClosestPointTo(stb->finish, &ts); + } else { + sb->ClosestPointTo(stb->start, &ts); + sb->ClosestPointTo(stb->finish, &tf); + } + SBezier junk_bef, keep_aft; + sb->SplitAt(ts, &junk_bef, &keep_aft); + // In the kept piece, the range that used to go from ts to 1 + // now goes from 0 to 1; so rescale tf appropriately. + tf = (tf - ts)/(1 - ts); + + SBezier keep_bef, junk_aft; + keep_aft.SplitAt(tf, &keep_bef, &junk_aft); + + sbl->l.Add(&keep_bef); + } else if(sbl && !sel && !sc->isExact) { + // We must approximate this trim curve, as piecewise cubic sections. + SSurface *srfA = shell->surface.FindById(sc->surfA), + *srfB = shell->surface.FindById(sc->surfB); + + Vector s = stb->backwards ? stb->finish : stb->start, + f = stb->backwards ? stb->start : stb->finish; + + int sp, fp; + for(sp = 0; sp < sc->pts.n; sp++) { + if(s.Equals(sc->pts.elem[sp].p)) break; + } + if(sp >= sc->pts.n) return; + for(fp = sp; fp < sc->pts.n; fp++) { + if(f.Equals(sc->pts.elem[fp].p)) break; + } + if(fp >= sc->pts.n) return; + // So now the curve we want goes from elem[sp] to elem[fp] + + while(sp < fp) { + // Initially, we'll try approximating the entire trim curve + // as a single Bezier segment + int fpt = fp; + + for(;;) { + // So construct a cubic Bezier with the correct endpoints + // and tangents for the current span. + Vector st = sc->pts.elem[sp].p, + ft = sc->pts.elem[fpt].p, + sf = ft.Minus(st); + double m = sf.Magnitude() / 3; + + Vector stan = ExactSurfaceTangentAt(st, srfA, srfB, sf), + ftan = ExactSurfaceTangentAt(ft, srfA, srfB, sf); + + SBezier sb = SBezier::From(st, + st.Plus (stan.WithMagnitude(m)), + ft.Minus(ftan.WithMagnitude(m)), + ft); + + // And test how much this curve deviates from the + // intermediate points (if any). + int i; + bool tooFar = false; + for(i = sp + 1; i <= (fpt - 1); i++) { + Vector p = sc->pts.elem[i].p; + double t; + sb.ClosestPointTo(p, &t, false); + Vector pp = sb.PointAt(t); + if((pp.Minus(p)).Magnitude() > SS.ChordTolMm()/2) { + tooFar = true; + break; + } + } + + if(tooFar) { + // Deviates by too much, so try a shorter span + fpt--; + continue; + } else { + // Okay, so use this piece and break. + sbl->l.Add(&sb); + break; + } + } + + // And continue interpolating, starting wherever the curve + // we just generated finishes. + sp = fpt; + } + } else { + if(sel) MakeTrimEdgesInto(sel, AS_XYZ, sc, stb); + } + } +} + +void SSurface::TriangulateInto(SShell *shell, SMesh *sm) { + SEdgeList el = {}; + + MakeEdgesInto(shell, &el, AS_UV); + + SPolygon poly = {}; + if(el.AssemblePolygon(&poly, NULL, true)) { + int i, start = sm->l.n; + if(degm == 1 && degn == 1) { + // A surface with curvature along one direction only; so + // choose the triangulation with chords that lie as much + // as possible within the surface. And since the trim curves + // have been pwl'd to within the desired chord tol, that will + // produce a surface good to within roughly that tol. + // + // If this is just a plane (degree (1, 1)) then the triangulation + // code will notice that, and not bother checking chord tols. + poly.UvTriangulateInto(sm, this); + } else { + // A surface with compound curvature. So we must overlay a + // two-dimensional grid, and triangulate around that. + poly.UvGridTriangulateInto(sm, this); + } + + STriMeta meta = { face, color }; + for(i = start; i < sm->l.n; i++) { + STriangle *st = &(sm->l.elem[i]); + st->meta = meta; + st->an = NormalAt(st->a.x, st->a.y); + st->bn = NormalAt(st->b.x, st->b.y); + st->cn = NormalAt(st->c.x, st->c.y); + st->a = PointAt(st->a.x, st->a.y); + st->b = PointAt(st->b.x, st->b.y); + st->c = PointAt(st->c.x, st->c.y); + // Works out that my chosen contour direction is inconsistent with + // the triangle direction, sigh. + st->FlipNormal(); + } + } else { + dbp("failed to assemble polygon to trim nurbs surface in uv space"); + } + + el.Clear(); + poly.Clear(); +} + +//----------------------------------------------------------------------------- +// Reverse the parametrisation of one of our dimensions, which flips the +// normal. We therefore must reverse all our trim curves too. The uv +// coordinates change, but trim curves are stored as xyz so nothing happens +//----------------------------------------------------------------------------- +void SSurface::Reverse(void) { + int i, j; + for(i = 0; i < (degm+1)/2; i++) { + for(j = 0; j <= degn; j++) { + swap(ctrl[i][j], ctrl[degm-i][j]); + swap(weight[i][j], weight[degm-i][j]); + } + } + + STrimBy *stb; + for(stb = trim.First(); stb; stb = trim.NextAfter(stb)) { + stb->backwards = !stb->backwards; + swap(stb->start, stb->finish); + } +} + +void SSurface::ScaleSelfBy(double s) { + int i, j; + for(i = 0; i <= degm; i++) { + for(j = 0; j <= degn; j++) { + ctrl[i][j] = ctrl[i][j].ScaledBy(s); + } + } +} + +void SSurface::Clear(void) { + trim.Clear(); +} + +typedef struct { + hSCurve hc; + hSSurface hs; +} TrimLine; + +void SShell::MakeFromExtrusionOf(SBezierLoopSet *sbls, Vector t0, Vector t1, RgbaColor color) +{ + // Make the extrusion direction consistent with respect to the normal + // of the sketch we're extruding. + if((t0.Minus(t1)).Dot(sbls->normal) < 0) { + swap(t0, t1); + } + + // Define a coordinate system to contain the original sketch, and get + // a bounding box in that csys + Vector n = sbls->normal.ScaledBy(-1); + Vector u = n.Normal(0), v = n.Normal(1); + Vector orig = sbls->point; + double umax = 1e-10, umin = 1e10; + sbls->GetBoundingProjd(u, orig, &umin, &umax); + double vmax = 1e-10, vmin = 1e10; + sbls->GetBoundingProjd(v, orig, &vmin, &vmax); + // and now fix things up so that all u and v lie between 0 and 1 + orig = orig.Plus(u.ScaledBy(umin)); + orig = orig.Plus(v.ScaledBy(vmin)); + u = u.ScaledBy(umax - umin); + v = v.ScaledBy(vmax - vmin); + + // So we can now generate the top and bottom surfaces of the extrusion, + // planes within a translated (and maybe mirrored) version of that csys. + SSurface s0, s1; + s0 = SSurface::FromPlane(orig.Plus(t0), u, v); + s0.color = color; + s1 = SSurface::FromPlane(orig.Plus(t1).Plus(u), u.ScaledBy(-1), v); + s1.color = color; + hSSurface hs0 = surface.AddAndAssignId(&s0), + hs1 = surface.AddAndAssignId(&s1); + + // Now go through the input curves. For each one, generate its surface + // of extrusion, its two translated trim curves, and one trim line. We + // go through by loops so that we can assign the lines correctly. + SBezierLoop *sbl; + for(sbl = sbls->l.First(); sbl; sbl = sbls->l.NextAfter(sbl)) { + SBezier *sb; + List trimLines = {}; + + for(sb = sbl->l.First(); sb; sb = sbl->l.NextAfter(sb)) { + // Generate the surface of extrusion of this curve, and add + // it to the list + SSurface ss = SSurface::FromExtrusionOf(sb, t0, t1); + ss.color = color; + hSSurface hsext = surface.AddAndAssignId(&ss); + + // Translate the curve by t0 and t1 to produce two trim curves + SCurve sc = {}; + sc.isExact = true; + sc.exact = sb->TransformedBy(t0, Quaternion::IDENTITY, 1.0); + (sc.exact).MakePwlInto(&(sc.pts)); + sc.surfA = hs0; + sc.surfB = hsext; + hSCurve hc0 = curve.AddAndAssignId(&sc); + + sc = {}; + sc.isExact = true; + sc.exact = sb->TransformedBy(t1, Quaternion::IDENTITY, 1.0); + (sc.exact).MakePwlInto(&(sc.pts)); + sc.surfA = hs1; + sc.surfB = hsext; + hSCurve hc1 = curve.AddAndAssignId(&sc); + + STrimBy stb0, stb1; + // The translated curves trim the flat top and bottom surfaces. + stb0 = STrimBy::EntireCurve(this, hc0, false); + stb1 = STrimBy::EntireCurve(this, hc1, true); + (surface.FindById(hs0))->trim.Add(&stb0); + (surface.FindById(hs1))->trim.Add(&stb1); + + // The translated curves also trim the surface of extrusion. + stb0 = STrimBy::EntireCurve(this, hc0, true); + stb1 = STrimBy::EntireCurve(this, hc1, false); + (surface.FindById(hsext))->trim.Add(&stb0); + (surface.FindById(hsext))->trim.Add(&stb1); + + // And form the trim line + Vector pt = sb->Finish(); + sc = {}; + sc.isExact = true; + sc.exact = SBezier::From(pt.Plus(t0), pt.Plus(t1)); + (sc.exact).MakePwlInto(&(sc.pts)); + hSCurve hl = curve.AddAndAssignId(&sc); + // save this for later + TrimLine tl; + tl.hc = hl; + tl.hs = hsext; + trimLines.Add(&tl); + } + + int i; + for(i = 0; i < trimLines.n; i++) { + TrimLine *tl = &(trimLines.elem[i]); + SSurface *ss = surface.FindById(tl->hs); + + TrimLine *tlp = &(trimLines.elem[WRAP(i-1, trimLines.n)]); + + STrimBy stb; + stb = STrimBy::EntireCurve(this, tl->hc, true); + ss->trim.Add(&stb); + stb = STrimBy::EntireCurve(this, tlp->hc, false); + ss->trim.Add(&stb); + + (curve.FindById(tl->hc))->surfA = ss->h; + (curve.FindById(tlp->hc))->surfB = ss->h; + } + trimLines.Clear(); + } +} + + +typedef struct { + hSSurface d[4]; +} Revolved; + +void SShell::MakeFromRevolutionOf(SBezierLoopSet *sbls, Vector pt, Vector axis, RgbaColor color, Group *group) +{ + SBezierLoop *sbl; + + int i0 = surface.n, i; + + // Normalize the axis direction so that the direction of revolution + // ends up parallel to the normal of the sketch, on the side of the + // axis where the sketch is. + Vector pto; + double md = VERY_NEGATIVE; + for(sbl = sbls->l.First(); sbl; sbl = sbls->l.NextAfter(sbl)) { + SBezier *sb; + for(sb = sbl->l.First(); sb; sb = sbl->l.NextAfter(sb)) { + // Choose the point farthest from the axis; we'll get garbage + // if we choose a point that lies on the axis, for example. + // (And our surface will be self-intersecting if the sketch + // spans the axis, so don't worry about that.) + Vector p = sb->Start(); + double d = p.DistanceToLine(pt, axis); + if(d > md) { + md = d; + pto = p; + } + } + } + Vector ptc = pto.ClosestPointOnLine(pt, axis), + up = (pto.Minus(ptc)).WithMagnitude(1), + vp = (sbls->normal).Cross(up); + if(vp.Dot(axis) < 0) { + axis = axis.ScaledBy(-1); + } + + // Now we actually build and trim the surfaces. + for(sbl = sbls->l.First(); sbl; sbl = sbls->l.NextAfter(sbl)) { + int i, j; + SBezier *sb; + List hsl = {}; + + for(sb = sbl->l.First(); sb; sb = sbl->l.NextAfter(sb)) { + Revolved revs; + for(j = 0; j < 4; j++) { + if(sb->deg == 1 && + (sb->ctrl[0]).DistanceToLine(pt, axis) < LENGTH_EPS && + (sb->ctrl[1]).DistanceToLine(pt, axis) < LENGTH_EPS) + { + // This is a line on the axis of revolution; it does + // not contribute a surface. + revs.d[j].v = 0; + } else { + SSurface ss = SSurface::FromRevolutionOf(sb, pt, axis, + (PI/2)*j, + (PI/2)*(j+1)); + ss.color = color; + if(sb->entity != 0) { + hEntity he; + he.v = sb->entity; + hEntity hface = group->Remap(he, Group::REMAP_LINE_TO_FACE); + if(SK.entity.FindByIdNoOops(hface) != NULL) { + ss.face = hface.v; + } + } + revs.d[j] = surface.AddAndAssignId(&ss); + } + } + hsl.Add(&revs); + } + + for(i = 0; i < sbl->l.n; i++) { + Revolved revs = hsl.elem[i], + revsp = hsl.elem[WRAP(i-1, sbl->l.n)]; + + sb = &(sbl->l.elem[i]); + + for(j = 0; j < 4; j++) { + SCurve sc; + Quaternion qs = Quaternion::From(axis, (PI/2)*j); + // we want Q*(x - p) + p = Q*x + (p - Q*p) + Vector ts = pt.Minus(qs.Rotate(pt)); + + // If this input curve generate a surface, then trim that + // surface with the rotated version of the input curve. + if(revs.d[j].v) { + sc = {}; + sc.isExact = true; + sc.exact = sb->TransformedBy(ts, qs, 1.0); + (sc.exact).MakePwlInto(&(sc.pts)); + sc.surfA = revs.d[j]; + sc.surfB = revs.d[WRAP(j-1, 4)]; + + hSCurve hcb = curve.AddAndAssignId(&sc); + + STrimBy stb; + stb = STrimBy::EntireCurve(this, hcb, true); + (surface.FindById(sc.surfA))->trim.Add(&stb); + stb = STrimBy::EntireCurve(this, hcb, false); + (surface.FindById(sc.surfB))->trim.Add(&stb); + } + + // And if this input curve and the one after it both generated + // surfaces, then trim both of those by the appropriate + // circle. + if(revs.d[j].v && revsp.d[j].v) { + SSurface *ss = surface.FindById(revs.d[j]); + + sc = {}; + sc.isExact = true; + sc.exact = SBezier::From(ss->ctrl[0][0], + ss->ctrl[0][1], + ss->ctrl[0][2]); + sc.exact.weight[1] = ss->weight[0][1]; + (sc.exact).MakePwlInto(&(sc.pts)); + sc.surfA = revs.d[j]; + sc.surfB = revsp.d[j]; + + hSCurve hcc = curve.AddAndAssignId(&sc); + + STrimBy stb; + stb = STrimBy::EntireCurve(this, hcc, false); + (surface.FindById(sc.surfA))->trim.Add(&stb); + stb = STrimBy::EntireCurve(this, hcc, true); + (surface.FindById(sc.surfB))->trim.Add(&stb); + } + } + } + + hsl.Clear(); + } + + for(i = i0; i < surface.n; i++) { + SSurface *srf = &(surface.elem[i]); + + // Revolution of a line; this is potentially a plane, which we can + // rewrite to have degree (1, 1). + if(srf->degm == 1 && srf->degn == 2) { + // close start, far start, far finish + Vector cs, fs, ff; + double d0, d1; + d0 = (srf->ctrl[0][0]).DistanceToLine(pt, axis); + d1 = (srf->ctrl[1][0]).DistanceToLine(pt, axis); + + if(d0 > d1) { + cs = srf->ctrl[1][0]; + fs = srf->ctrl[0][0]; + ff = srf->ctrl[0][2]; + } else { + cs = srf->ctrl[0][0]; + fs = srf->ctrl[1][0]; + ff = srf->ctrl[1][2]; + } + + // origin close, origin far + Vector oc = cs.ClosestPointOnLine(pt, axis), + of = fs.ClosestPointOnLine(pt, axis); + + if(oc.Equals(of)) { + // This is a plane, not a (non-degenerate) cone. + Vector oldn = srf->NormalAt(0.5, 0.5); + + Vector u = fs.Minus(of), v; + + v = (axis.Cross(u)).WithMagnitude(1); + + double vm = (ff.Minus(of)).Dot(v); + v = v.ScaledBy(vm); + + srf->degm = 1; + srf->degn = 1; + srf->ctrl[0][0] = of; + srf->ctrl[0][1] = of.Plus(u); + srf->ctrl[1][0] = of.Plus(v); + srf->ctrl[1][1] = of.Plus(u).Plus(v); + srf->weight[0][0] = 1; + srf->weight[0][1] = 1; + srf->weight[1][0] = 1; + srf->weight[1][1] = 1; + + if(oldn.Dot(srf->NormalAt(0.5, 0.5)) < 0) { + swap(srf->ctrl[0][0], srf->ctrl[1][0]); + swap(srf->ctrl[0][1], srf->ctrl[1][1]); + } + continue; + } + + if(fabs(d0 - d1) < LENGTH_EPS) { + // This is a cylinder; so transpose it so that we'll recognize + // it as a surface of extrusion. + SSurface sn = *srf; + + // Transposing u and v flips the normal, so reverse u to + // flip it again and put it back where we started. + sn.degm = 2; + sn.degn = 1; + int dm, dn; + for(dm = 0; dm <= 1; dm++) { + for(dn = 0; dn <= 2; dn++) { + sn.ctrl [dn][dm] = srf->ctrl [1-dm][dn]; + sn.weight[dn][dm] = srf->weight[1-dm][dn]; + } + } + + *srf = sn; + continue; + } + } + + } + +} + +void SShell::MakeFromCopyOf(SShell *a) { + MakeFromTransformationOf(a, + Vector::From(0, 0, 0), Quaternion::IDENTITY, 1.0); +} + +void SShell::MakeFromTransformationOf(SShell *a, + Vector t, Quaternion q, double scale) +{ + booleanFailed = false; + + SSurface *s; + for(s = a->surface.First(); s; s = a->surface.NextAfter(s)) { + SSurface n; + n = SSurface::FromTransformationOf(s, t, q, scale, true); + surface.Add(&n); // keeping the old ID + } + + SCurve *c; + for(c = a->curve.First(); c; c = a->curve.NextAfter(c)) { + SCurve n; + n = SCurve::FromTransformationOf(c, t, q, scale); + curve.Add(&n); // keeping the old ID + } +} + +void SShell::MakeEdgesInto(SEdgeList *sel) { + SSurface *s; + for(s = surface.First(); s; s = surface.NextAfter(s)) { + s->MakeEdgesInto(this, sel, SSurface::AS_XYZ); + } +} + +void SShell::MakeSectionEdgesInto(Vector n, double d, + SEdgeList *sel, SBezierList *sbl) +{ + SSurface *s; + for(s = surface.First(); s; s = surface.NextAfter(s)) { + if(s->CoincidentWithPlane(n, d)) { + s->MakeSectionEdgesInto(this, sel, sbl); + } + } +} + +void SShell::TriangulateInto(SMesh *sm) { + SSurface *s; + for(s = surface.First(); s; s = surface.NextAfter(s)) { + s->TriangulateInto(this, sm); + } +} + +bool SShell::IsEmpty(void) { + return (surface.n == 0); +} + +void SShell::Clear(void) { + SSurface *s; + for(s = surface.First(); s; s = surface.NextAfter(s)) { + s->Clear(); + } + surface.Clear(); + + SCurve *c; + for(c = curve.First(); c; c = curve.NextAfter(c)) { + c->Clear(); + } + curve.Clear(); +} + diff --git a/src/srf/surface.h b/src/srf/surface.h new file mode 100644 index 0000000..86d69db --- /dev/null +++ b/src/srf/surface.h @@ -0,0 +1,423 @@ +//----------------------------------------------------------------------------- +// Functions relating to rational polynomial surfaces, which are trimmed by +// curves (either rational polynomial curves, or piecewise linear +// approximations to curves of intersection that can't be represented +// exactly in ratpoly form), and assembled into watertight shells. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- + +#ifndef __SURFACE_H +#define __SURFACE_H + +// Utility functions, Bernstein polynomials of order 1-3 and their derivatives. +double Bernstein(int k, int deg, double t); +double BernsteinDerivative(int k, int deg, double t); + +class SSurface; +class SCurvePt; + +// Utility data structure, a two-dimensional BSP to accelerate polygon +// operations. +class SBspUv { +public: + Point2d a, b; + + SBspUv *pos; + SBspUv *neg; + + SBspUv *more; + + enum { + INSIDE = 100, + OUTSIDE = 200, + EDGE_PARALLEL = 300, + EDGE_ANTIPARALLEL = 400, + EDGE_OTHER = 500 + }; + + static SBspUv *Alloc(void); + static SBspUv *From(SEdgeList *el, SSurface *srf); + + void ScalePoints(Point2d *pt, Point2d *a, Point2d *b, SSurface *srf); + double ScaledSignedDistanceToLine(Point2d pt, Point2d a, Point2d b, + SSurface *srf); + double ScaledDistanceToLine(Point2d pt, Point2d a, Point2d b, bool seg, + SSurface *srf); + + void InsertEdge(Point2d a, Point2d b, SSurface *srf); + static SBspUv *InsertOrCreateEdge(SBspUv *where, const Point2d &ea, const Point2d &eb, SSurface *srf); + int ClassifyPoint(Point2d p, Point2d eb, SSurface *srf); + int ClassifyEdge(Point2d ea, Point2d eb, SSurface *srf); + double MinimumDistanceToEdge(Point2d p, SSurface *srf); +}; + +// Now the data structures to represent a shell of trimmed rational polynomial +// surfaces. + +class SShell; + +class hSSurface { +public: + uint32_t v; +}; + +class hSCurve { +public: + uint32_t v; +}; + +// Stuff for rational polynomial curves, of degree one to three. These are +// our inputs, and are also calculated for certain exact surface-surface +// intersections. +class SBezier { +public: + int tag; + int auxA, auxB; + + int deg; + Vector ctrl[4]; + double weight[4]; + uint32_t entity; + + Vector PointAt(double t); + Vector TangentAt(double t); + void ClosestPointTo(Vector p, double *t, bool converge=true); + void SplitAt(double t, SBezier *bef, SBezier *aft); + bool PointOnThisAndCurve(SBezier *sbb, Vector *p); + + Vector Start(void); + Vector Finish(void); + bool Equals(SBezier *b); + void MakePwlInto(SEdgeList *sel, double chordTol=0); + void MakePwlInto(List *l, double chordTol=0); + void MakePwlInto(SContour *sc, double chordTol=0); + void MakePwlInto(List *l, double chordTol=0); + void MakePwlWorker(List *l, double ta, double tb, double chordTol); + void MakePwlInitialWorker(List *l, double ta, double tb, double chordTol); + + void AllIntersectionsWith(SBezier *sbb, SPointList *spl); + void GetBoundingProjd(Vector u, Vector orig, double *umin, double *umax); + void Reverse(void); + + bool IsInPlane(Vector n, double d); + bool IsCircle(Vector axis, Vector *center, double *r); + bool IsRational(void); + + SBezier TransformedBy(Vector t, Quaternion q, double scale); + SBezier InPerspective(Vector u, Vector v, Vector n, + Vector origin, double cameraTan); + void ScaleSelfBy(double s); + + static SBezier From(Vector p0, Vector p1, Vector p2, Vector p3); + static SBezier From(Vector p0, Vector p1, Vector p2); + static SBezier From(Vector p0, Vector p1); + static SBezier From(Vector4 p0, Vector4 p1, Vector4 p2, Vector4 p3); + static SBezier From(Vector4 p0, Vector4 p1, Vector4 p2); + static SBezier From(Vector4 p0, Vector4 p1); +}; + +class SBezierList { +public: + List l; + + void Clear(void); + void ScaleSelfBy(double s); + void CullIdenticalBeziers(void); + void AllIntersectionsWith(SBezierList *sblb, SPointList *spl); + bool GetPlaneContainingBeziers(Vector *p, Vector *u, Vector *v, + Vector *notCoplanarAt); +}; + +class SBezierLoop { +public: + int tag; + List l; + + inline void Clear(void) { l.Clear(); } + bool IsClosed(void); + void Reverse(void); + void MakePwlInto(SContour *sc, double chordTol=0); + void GetBoundingProjd(Vector u, Vector orig, double *umin, double *umax); + + static SBezierLoop FromCurves(SBezierList *spcl, + bool *allClosed, SEdge *errorAt); +}; + +class SBezierLoopSet { +public: + List l; + Vector normal; + Vector point; + + static SBezierLoopSet From(SBezierList *spcl, SPolygon *poly, + double chordTol, + bool *allClosed, SEdge *errorAt, + SBezierList *openContours); + + void GetBoundingProjd(Vector u, Vector orig, double *umin, double *umax); + void MakePwlInto(SPolygon *sp); + void Clear(void); +}; + +class SBezierLoopSetSet { +public: + List l; + + void FindOuterFacesFrom(SBezierList *sbl, SPolygon *spxyz, SSurface *srfuv, + double chordTol, + bool *allClosed, SEdge *notClosedAt, + bool *allCoplanar, Vector *notCoplanarAt, + SBezierList *openContours); + void AddOpenPath(SBezier *sb); + void Clear(void); +}; + +// Stuff for the surface trim curves: piecewise linear +class SCurvePt { +public: + int tag; + Vector p; + bool vertex; +}; + +class SCurve { +public: + hSCurve h; + + // In a Boolean, C = A op B. The curves in A and B get copied into C, and + // therefore must get new hSCurves assigned. For the curves in A and B, + // we use newH to record their new handle in C. + hSCurve newH; + enum { + FROM_A = 100, + FROM_B = 200, + FROM_INTERSECTION = 300 + }; + int source; + + bool isExact; + SBezier exact; + + List pts; + + hSSurface surfA; + hSSurface surfB; + + static SCurve FromTransformationOf(SCurve *a, Vector t, Quaternion q, + double scale); + SCurve MakeCopySplitAgainst(SShell *agnstA, SShell *agnstB, + SSurface *srfA, SSurface *srfB); + void RemoveShortSegments(SSurface *srfA, SSurface *srfB); + SSurface *GetSurfaceA(SShell *a, SShell *b); + SSurface *GetSurfaceB(SShell *a, SShell *b); + + void Clear(void); +}; + +// A segment of a curve by which a surface is trimmed: indicates which curve, +// by its handle, and the starting and ending points of our segment of it. +// The vector out points out of the surface; it, the surface outer normal, +// and a tangent to the beginning of the curve are all orthogonal. +class STrimBy { +public: + hSCurve curve; + bool backwards; + // If a trim runs backwards, then start and finish still correspond to + // the actual start and finish, but they appear in reverse order in + // the referenced curve. + Vector start; + Vector finish; + + static STrimBy EntireCurve(SShell *shell, hSCurve hsc, bool bkwds); +}; + +// An intersection point between a line and a surface +class SInter { +public: + int tag; + Vector p; + SSurface *srf; + Point2d pinter; + Vector surfNormal; // of the intersecting surface, at pinter + bool onEdge; // pinter is on edge of trim poly +}; + +// A rational polynomial surface in Bezier form. +class SSurface { +public: + int tag; + hSSurface h; + + // Same as newH for the curves; record what a surface gets renamed to + // when I copy things over. + hSSurface newH; + + RgbaColor color; + uint32_t face; + + int degm, degn; + Vector ctrl[4][4]; + double weight[4][4]; + + List trim; + + // For testing whether a point (u, v) on the surface lies inside the trim + SBspUv *bsp; + SEdgeList edges; + + // For caching our initial (u, v) when doing Newton iterations to project + // a point into our surface. + Point2d cached; + + static SSurface FromExtrusionOf(SBezier *spc, Vector t0, Vector t1); + static SSurface FromRevolutionOf(SBezier *sb, Vector pt, Vector axis, + double thetas, double thetaf); + static SSurface FromPlane(Vector pt, Vector u, Vector v); + static SSurface FromTransformationOf(SSurface *a, Vector t, Quaternion q, + double scale, + bool includingTrims); + void ScaleSelfBy(double s); + + void EdgeNormalsWithinSurface(Point2d auv, Point2d buv, + Vector *pt, Vector *enin, Vector *enout, + Vector *surfn, + uint32_t auxA, + SShell *shell, SShell *sha, SShell *shb); + void FindChainAvoiding(SEdgeList *src, SEdgeList *dest, SPointList *avoid); + SSurface MakeCopyTrimAgainst(SShell *parent, SShell *a, SShell *b, + SShell *into, int type); + void TrimFromEdgeList(SEdgeList *el, bool asUv); + void IntersectAgainst(SSurface *b, SShell *agnstA, SShell *agnstB, + SShell *into); + void AddExactIntersectionCurve(SBezier *sb, SSurface *srfB, + SShell *agnstA, SShell *agnstB, SShell *into); + + typedef struct { + int tag; + Point2d p; + } Inter; + void WeightControlPoints(void); + void UnWeightControlPoints(void); + void CopyRowOrCol(bool row, int this_ij, SSurface *src, int src_ij); + void BlendRowOrCol(bool row, int this_ij, SSurface *a, int a_ij, + SSurface *b, int b_ij); + double DepartureFromCoplanar(void); + void SplitInHalf(bool byU, SSurface *sa, SSurface *sb); + void AllPointsIntersecting(Vector a, Vector b, + List *l, + bool seg, bool trimmed, bool inclTangent); + void AllPointsIntersectingUntrimmed(Vector a, Vector b, + int *cnt, int *level, + List *l, bool segment, + SSurface *sorig); + + void ClosestPointTo(Vector p, Point2d *puv, bool converge=true); + void ClosestPointTo(Vector p, double *u, double *v, bool converge=true); + bool ClosestPointNewton(Vector p, double *u, double *v, bool converge=true); + + bool PointIntersectingLine(Vector p0, Vector p1, double *u, double *v); + Vector ClosestPointOnThisAndSurface(SSurface *srf2, Vector p); + void PointOnSurfaces(SSurface *s1, SSurface *s2, double *u, double *v); + Vector PointAt(double u, double v); + Vector PointAt(Point2d puv); + void TangentsAt(double u, double v, Vector *tu, Vector *tv); + Vector NormalAt(Point2d puv); + Vector NormalAt(double u, double v); + bool LineEntirelyOutsideBbox(Vector a, Vector b, bool segment); + void GetAxisAlignedBounding(Vector *ptMax, Vector *ptMin); + bool CoincidentWithPlane(Vector n, double d); + bool CoincidentWith(SSurface *ss, bool sameNormal); + bool IsExtrusion(SBezier *of, Vector *along); + bool IsCylinder(Vector *axis, Vector *center, double *r, + Vector *start, Vector *finish); + + void TriangulateInto(SShell *shell, SMesh *sm); + + // these are intended as bitmasks, even though there's just one now + enum { + AS_UV = 0x01, + AS_XYZ = 0x00 + }; + void MakeTrimEdgesInto(SEdgeList *sel, int flags, SCurve *sc, STrimBy *stb); + void MakeEdgesInto(SShell *shell, SEdgeList *sel, int flags, + SShell *useCurvesFrom=NULL); + + Vector ExactSurfaceTangentAt(Vector p, SSurface *srfA, SSurface *srfB, + Vector dir); + void MakeSectionEdgesInto(SShell *shell, SEdgeList *sel, SBezierList *sbl); + void MakeClassifyingBsp(SShell *shell, SShell *useCurvesFrom); + double ChordToleranceForEdge(Vector a, Vector b); + void MakeTriangulationGridInto(List *l, double vs, double vf, + bool swapped); + Vector PointAtMaybeSwapped(double u, double v, bool swapped); + + void Reverse(void); + void Clear(void); +}; + +class SShell { +public: + IdList curve; + IdList surface; + + bool booleanFailed; + + void MakeFromExtrusionOf(SBezierLoopSet *sbls, Vector t0, Vector t1, + RgbaColor color); + void MakeFromRevolutionOf(SBezierLoopSet *sbls, Vector pt, Vector axis, + RgbaColor color, Group *group); + + void MakeFromUnionOf(SShell *a, SShell *b); + void MakeFromDifferenceOf(SShell *a, SShell *b); + enum { + AS_UNION = 10, + AS_DIFFERENCE = 11, + AS_INTERSECT = 12 + }; + void MakeFromBoolean(SShell *a, SShell *b, int type); + void CopyCurvesSplitAgainst(bool opA, SShell *agnst, SShell *into); + void CopySurfacesTrimAgainst(SShell *sha, SShell *shb, SShell *into, + int type); + void MakeIntersectionCurvesAgainst(SShell *against, SShell *into); + void MakeClassifyingBsps(SShell *useCurvesFrom); + void AllPointsIntersecting(Vector a, Vector b, List *il, + bool seg, bool trimmed, bool inclTangent); + void MakeCoincidentEdgesInto(SSurface *proto, bool sameNormal, + SEdgeList *el, SShell *useCurvesFrom); + void RewriteSurfaceHandlesForCurves(SShell *a, SShell *b); + void CleanupAfterBoolean(void); + + // Definitions when classifying regions of a surface; it is either inside, + // outside, or coincident (with parallel or antiparallel normal) with a + // shell. + enum { + INSIDE = 100, + OUTSIDE = 200, + COINC_SAME = 300, + COINC_OPP = 400 + }; + static const double DOTP_TOL; + int ClassifyRegion(Vector edge_n, Vector inter_surf_n, Vector edge_surf_n); + bool ClassifyEdge(int *indir, int *outdir, + Vector ea, Vector eb, + Vector p, + Vector edge_n_in, Vector edge_n_out, Vector surf_n); + + void MakeFromCopyOf(SShell *a); + void MakeFromTransformationOf(SShell *a, + Vector trans, Quaternion q, double scale); + void MakeFromAssemblyOf(SShell *a, SShell *b); + void MergeCoincidentSurfaces(void); + + void TriangulateInto(SMesh *sm); + void MakeEdgesInto(SEdgeList *sel); + void MakeSectionEdgesInto(Vector n, double d, + SEdgeList *sel, SBezierList *sbl); + bool IsEmpty(void); + void RemapFaces(Group *g, int remap); + void Clear(void); +}; + +#endif + diff --git a/src/srf/surfinter.cpp b/src/srf/surfinter.cpp new file mode 100644 index 0000000..79d71cd --- /dev/null +++ b/src/srf/surfinter.cpp @@ -0,0 +1,525 @@ +//----------------------------------------------------------------------------- +// How to intersect two surfaces, to get some type of curve. This is either +// an exact special case (e.g., two planes to make a line), or a numerical +// thing. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +extern int FLAG; + +void SSurface::AddExactIntersectionCurve(SBezier *sb, SSurface *srfB, + SShell *agnstA, SShell *agnstB, SShell *into) +{ + SCurve sc = {}; + // Important to keep the order of (surfA, surfB) consistent; when we later + // rewrite the identifiers, we rewrite surfA from A and surfB from B. + sc.surfA = h; + sc.surfB = srfB->h; + sc.exact = *sb; + sc.isExact = true; + + // Now we have to piecewise linearize the curve. If there's already an + // identical curve in the shell, then follow that pwl exactly, otherwise + // calculate from scratch. + SCurve split, *existing = NULL, *se; + SBezier sbrev = *sb; + sbrev.Reverse(); + bool backwards = false; + for(se = into->curve.First(); se; se = into->curve.NextAfter(se)) { + if(se->isExact) { + if(sb->Equals(&(se->exact))) { + existing = se; + break; + } + if(sbrev.Equals(&(se->exact))) { + existing = se; + backwards = true; + break; + } + } + } + if(existing) { + SCurvePt *v; + for(v = existing->pts.First(); v; v = existing->pts.NextAfter(v)) { + sc.pts.Add(v); + } + if(backwards) sc.pts.Reverse(); + split = sc; + sc = {}; + } else { + sb->MakePwlInto(&(sc.pts)); + // and split the line where it intersects our existing surfaces + split = sc.MakeCopySplitAgainst(agnstA, agnstB, this, srfB); + sc.Clear(); + } + + // Test if the curve lies entirely outside one of the + SCurvePt *scpt; + bool withinA = false, withinB = false; + for(scpt = split.pts.First(); scpt; scpt = split.pts.NextAfter(scpt)) { + double tol = 0.01; + Point2d puv; + ClosestPointTo(scpt->p, &puv); + if(puv.x > -tol && puv.x < 1 + tol && + puv.y > -tol && puv.y < 1 + tol) + { + withinA = true; + } + srfB->ClosestPointTo(scpt->p, &puv); + if(puv.x > -tol && puv.x < 1 + tol && + puv.y > -tol && puv.y < 1 + tol) + { + withinB = true; + } + // Break out early, no sense wasting time if we already have the answer. + if(withinA && withinB) break; + } + if(!(withinA && withinB)) { + // Intersection curve lies entirely outside one of the surfaces, so + // it's fake. + split.Clear(); + return; + } + +#if 0 + if(sb->deg == 2) { + dbp(" "); + SCurvePt *prev = NULL, *v; + dbp("split.pts.n = %d", split.pts.n); + for(v = split.pts.First(); v; v = split.pts.NextAfter(v)) { + if(prev) { + Vector e = (prev->p).Minus(v->p).WithMagnitude(0); + SS.nakedEdges.AddEdge((prev->p).Plus(e), (v->p).Minus(e)); + } + prev = v; + } + } +#endif // 0 + // Nothing should be generating zero-len edges. + if((sb->Start()).Equals(sb->Finish())) oops(); + + split.source = SCurve::FROM_INTERSECTION; + into->curve.AddAndAssignId(&split); +} + +void SSurface::IntersectAgainst(SSurface *b, SShell *agnstA, SShell *agnstB, + SShell *into) +{ + Vector amax, amin, bmax, bmin; + GetAxisAlignedBounding(&amax, &amin); + b->GetAxisAlignedBounding(&bmax, &bmin); + + if(Vector::BoundingBoxesDisjoint(amax, amin, bmax, bmin)) { + // They cannot possibly intersect, no curves to generate + return; + } + + Vector alongt, alongb; + SBezier oft, ofb; + bool isExtdt = this->IsExtrusion(&oft, &alongt), + isExtdb = b->IsExtrusion(&ofb, &alongb); + + if(degm == 1 && degn == 1 && b->degm == 1 && b->degn == 1) { + // Line-line intersection; it's a plane or nothing. + Vector na = NormalAt(0, 0).WithMagnitude(1), + nb = b->NormalAt(0, 0).WithMagnitude(1); + double da = na.Dot(PointAt(0, 0)), + db = nb.Dot(b->PointAt(0, 0)); + + Vector dl = na.Cross(nb); + if(dl.Magnitude() < LENGTH_EPS) return; // parallel planes + dl = dl.WithMagnitude(1); + Vector p = Vector::AtIntersectionOfPlanes(na, da, nb, db); + + // Trim it to the region 0 <= {u,v} <= 1 for each plane; not strictly + // necessary, since line will be split and excess edges culled, but + // this improves speed and robustness. + int i; + double tmax = VERY_POSITIVE, tmin = VERY_NEGATIVE; + for(i = 0; i < 2; i++) { + SSurface *s = (i == 0) ? this : b; + Vector tu, tv; + s->TangentsAt(0, 0, &tu, &tv); + + double up, vp, ud, vd; + s->ClosestPointTo(p, &up, &vp); + ud = (dl.Dot(tu)) / tu.MagSquared(); + vd = (dl.Dot(tv)) / tv.MagSquared(); + + // so u = up + t*ud + // v = vp + t*vd + if(ud > LENGTH_EPS) { + tmin = max(tmin, -up/ud); + tmax = min(tmax, (1 - up)/ud); + } else if(ud < -LENGTH_EPS) { + tmax = min(tmax, -up/ud); + tmin = max(tmin, (1 - up)/ud); + } else { + if(up < -LENGTH_EPS || up > 1 + LENGTH_EPS) { + // u is constant, and outside [0, 1] + tmax = VERY_NEGATIVE; + } + } + if(vd > LENGTH_EPS) { + tmin = max(tmin, -vp/vd); + tmax = min(tmax, (1 - vp)/vd); + } else if(vd < -LENGTH_EPS) { + tmax = min(tmax, -vp/vd); + tmin = max(tmin, (1 - vp)/vd); + } else { + if(vp < -LENGTH_EPS || vp > 1 + LENGTH_EPS) { + // v is constant, and outside [0, 1] + tmax = VERY_NEGATIVE; + } + } + } + + if(tmax > tmin + LENGTH_EPS) { + SBezier bezier = SBezier::From(p.Plus(dl.ScaledBy(tmin)), + p.Plus(dl.ScaledBy(tmax))); + AddExactIntersectionCurve(&bezier, b, agnstA, agnstB, into); + } + } else if((degm == 1 && degn == 1 && isExtdb) || + (b->degm == 1 && b->degn == 1 && isExtdt)) + { + // The intersection between a plane and a surface of extrusion + SSurface *splane, *sext; + if(degm == 1 && degn == 1) { + splane = this; + sext = b; + } else { + splane = b; + sext = this; + } + + Vector n = splane->NormalAt(0, 0).WithMagnitude(1), along; + double d = n.Dot(splane->PointAt(0, 0)); + SBezier bezier; + (void)sext->IsExtrusion(&bezier, &along); + + if(fabs(n.Dot(along)) < LENGTH_EPS) { + // Direction of extrusion is parallel to plane; so intersection + // is zero or more lines. Build a line within the plane, and + // normal to the direction of extrusion, and intersect that line + // against the surface; each intersection point corresponds to + // a line. + Vector pm, alu, p0, dp; + // a point halfway along the extrusion + pm = ((sext->ctrl[0][0]).Plus(sext->ctrl[0][1])).ScaledBy(0.5); + alu = along.WithMagnitude(1); + dp = (n.Cross(along)).WithMagnitude(1); + // n, alu, and dp form an orthogonal csys; set n component to + // place it on the plane, alu component to lie halfway along + // extrusion, and dp component doesn't matter so zero + p0 = n.ScaledBy(d).Plus(alu.ScaledBy(pm.Dot(alu))); + + List inters = {}; + sext->AllPointsIntersecting( + p0, p0.Plus(dp), &inters, false, false, true); + + SInter *si; + for(si = inters.First(); si; si = inters.NextAfter(si)) { + Vector al = along.ScaledBy(0.5); + SBezier bezier; + bezier = SBezier::From((si->p).Minus(al), (si->p).Plus(al)); + AddExactIntersectionCurve(&bezier, b, agnstA, agnstB, into); + } + + inters.Clear(); + } else { + // Direction of extrusion is not parallel to plane; so + // intersection is projection of extruded curve into our plane. + int i; + for(i = 0; i <= bezier.deg; i++) { + Vector p0 = bezier.ctrl[i], + p1 = p0.Plus(along); + + bezier.ctrl[i] = + Vector::AtIntersectionOfPlaneAndLine(n, d, p0, p1, NULL); + } + + AddExactIntersectionCurve(&bezier, b, agnstA, agnstB, into); + } + } else if(isExtdt && isExtdb && + sqrt(fabs(alongt.Dot(alongb))) > + sqrt(alongt.Magnitude() * alongb.Magnitude()) - LENGTH_EPS) + { + // Two surfaces of extrusion along the same axis. So they might + // intersect along some number of lines parallel to the axis. + Vector axis = alongt.WithMagnitude(1); + + List inters = {}; + List lv = {}; + + double a_axis0 = ( ctrl[0][0]).Dot(axis), + a_axis1 = ( ctrl[0][1]).Dot(axis), + b_axis0 = (b->ctrl[0][0]).Dot(axis), + b_axis1 = (b->ctrl[0][1]).Dot(axis); + + if(a_axis0 > a_axis1) swap(a_axis0, a_axis1); + if(b_axis0 > b_axis1) swap(b_axis0, b_axis1); + + double ab_axis0 = max(a_axis0, b_axis0), + ab_axis1 = min(a_axis1, b_axis1); + + if(fabs(ab_axis0 - ab_axis1) < LENGTH_EPS) { + // The line would be zero-length + return; + } + + Vector axis0 = axis.ScaledBy(ab_axis0), + axis1 = axis.ScaledBy(ab_axis1), + axisc = (axis0.Plus(axis1)).ScaledBy(0.5); + + oft.MakePwlInto(&lv); + + int i; + for(i = 0; i < lv.n - 1; i++) { + Vector pa = lv.elem[i], pb = lv.elem[i+1]; + pa = pa.Minus(axis.ScaledBy(pa.Dot(axis))); + pb = pb.Minus(axis.ScaledBy(pb.Dot(axis))); + pa = pa.Plus(axisc); + pb = pb.Plus(axisc); + + b->AllPointsIntersecting(pa, pb, &inters, true, false, false); + } + + SInter *si; + for(si = inters.First(); si; si = inters.NextAfter(si)) { + Vector p = (si->p).Minus(axis.ScaledBy((si->p).Dot(axis))); + double ub, vb; + b->ClosestPointTo(p, &ub, &vb, true); + SSurface plane; + plane = SSurface::FromPlane(p, axis.Normal(0), axis.Normal(1)); + + b->PointOnSurfaces(this, &plane, &ub, &vb); + + p = b->PointAt(ub, vb); + + SBezier bezier; + bezier = SBezier::From(p.Plus(axis0), p.Plus(axis1)); + AddExactIntersectionCurve(&bezier, b, agnstA, agnstB, into); + } + + inters.Clear(); + lv.Clear(); + } else { + // Try intersecting the surfaces numerically, by a marching algorithm. + // First, we find all the intersections between a surface and the + // boundary of the other surface. + SPointList spl = {}; + int a; + for(a = 0; a < 2; a++) { + SShell *shA = (a == 0) ? agnstA : agnstB; + SSurface *srfA = (a == 0) ? this : b, + *srfB = (a == 0) ? b : this; + + SEdgeList el = {}; + srfA->MakeEdgesInto(shA, &el, AS_XYZ, NULL); + + SEdge *se; + for(se = el.l.First(); se; se = el.l.NextAfter(se)) { + List lsi = {}; + + srfB->AllPointsIntersecting(se->a, se->b, &lsi, + true, true, false); + if(lsi.n == 0) continue; + + // Find the other surface that this curve trims. + hSCurve hsc = { (uint32_t)se->auxA }; + SCurve *sc = shA->curve.FindById(hsc); + hSSurface hother = (sc->surfA.v == srfA->h.v) ? + sc->surfB : sc->surfA; + SSurface *other = shA->surface.FindById(hother); + + SInter *si; + for(si = lsi.First(); si; si = lsi.NextAfter(si)) { + Vector p = si->p; + double u, v; + srfB->ClosestPointTo(p, &u, &v); + srfB->PointOnSurfaces(srfA, other, &u, &v); + p = srfB->PointAt(u, v); + if(!spl.ContainsPoint(p)) { + SPoint sp; + sp.p = p; + // We also need the edge normal, so that we know in + // which direction to march. + srfA->ClosestPointTo(p, &u, &v); + Vector n = srfA->NormalAt(u, v); + sp.auxv = n.Cross((se->b).Minus(se->a)); + sp.auxv = (sp.auxv).WithMagnitude(1); + + spl.l.Add(&sp); + } + } + lsi.Clear(); + } + + el.Clear(); + } + + while(spl.l.n >= 2) { + SCurve sc = {}; + sc.surfA = h; + sc.surfB = b->h; + sc.isExact = false; + sc.source = SCurve::FROM_INTERSECTION; + + Vector start = spl.l.elem[0].p, + startv = spl.l.elem[0].auxv; + spl.l.ClearTags(); + spl.l.elem[0].tag = 1; + spl.l.RemoveTagged(); + + // Our chord tolerance is whatever the user specified + double maxtol = SS.ChordTolMm(); + int maxsteps = max(300, SS.GetMaxSegments()*3); + + // The curve starts at our starting point. + SCurvePt padd = {}; + padd.vertex = true; + padd.p = start; + sc.pts.Add(&padd); + + Point2d pa, pb; + Vector np, npc = Vector::From(0, 0, 0); + bool fwd = false; + // Better to start with a too-small step, so that we don't miss + // features of the curve entirely. + double tol, step = maxtol; + for(a = 0; a < maxsteps; a++) { + ClosestPointTo(start, &pa); + b->ClosestPointTo(start, &pb); + + Vector na = NormalAt(pa).WithMagnitude(1), + nb = b->NormalAt(pb).WithMagnitude(1); + + if(a == 0) { + Vector dp = nb.Cross(na); + if(dp.Dot(startv) < 0) { + // We want to march in the more inward direction. + fwd = true; + } else { + fwd = false; + } + } + + int i; + for(i = 0; i < 20; i++) { + Vector dp = nb.Cross(na); + if(!fwd) dp = dp.ScaledBy(-1); + dp = dp.WithMagnitude(step); + + np = start.Plus(dp); + npc = ClosestPointOnThisAndSurface(b, np); + tol = (npc.Minus(np)).Magnitude(); + + if(tol > maxtol*0.8) { + step *= 0.90; + } else { + step /= 0.90; + } + + if((tol < maxtol) && (tol > maxtol/2)) { + // If we meet the chord tolerance test, and we're + // not too fine, then we break out. + break; + } + } + + SPoint *sp; + for(sp = spl.l.First(); sp; sp = spl.l.NextAfter(sp)) { + if((sp->p).OnLineSegment(start, npc, 2*SS.ChordTolMm())) { + sp->tag = 1; + a = maxsteps; + npc = sp->p; + } + } + + padd.p = npc; + padd.vertex = (a == maxsteps); + sc.pts.Add(&padd); + + start = npc; + } + + spl.l.RemoveTagged(); + + // And now we split and insert the curve + SCurve split = sc.MakeCopySplitAgainst(agnstA, agnstB, this, b); + sc.Clear(); + into->curve.AddAndAssignId(&split); + } + spl.Clear(); + } +} + +//----------------------------------------------------------------------------- +// Are two surfaces coincident, with the same (or with opposite) normals? +// Currently handles planes only. +//----------------------------------------------------------------------------- +bool SSurface::CoincidentWith(SSurface *ss, bool sameNormal) { + if(degm != 1 || degn != 1) return false; + if(ss->degm != 1 || ss->degn != 1) return false; + + Vector p = ctrl[0][0]; + Vector n = NormalAt(0, 0).WithMagnitude(1); + double d = n.Dot(p); + + if(!ss->CoincidentWithPlane(n, d)) return false; + + Vector n2 = ss->NormalAt(0, 0); + if(sameNormal) { + if(n2.Dot(n) < 0) return false; + } else { + if(n2.Dot(n) > 0) return false; + } + + return true; +} + +bool SSurface::CoincidentWithPlane(Vector n, double d) { + if(degm != 1 || degn != 1) return false; + if(fabs(n.Dot(ctrl[0][0]) - d) > LENGTH_EPS) return false; + if(fabs(n.Dot(ctrl[0][1]) - d) > LENGTH_EPS) return false; + if(fabs(n.Dot(ctrl[1][0]) - d) > LENGTH_EPS) return false; + if(fabs(n.Dot(ctrl[1][1]) - d) > LENGTH_EPS) return false; + + return true; +} + +//----------------------------------------------------------------------------- +// In our shell, find all surfaces that are coincident with the prototype +// surface (with same or opposite normal, as specified), and copy all of +// their trim polygons into el. The edges are returned in uv coordinates for +// the prototype surface. +//----------------------------------------------------------------------------- +void SShell::MakeCoincidentEdgesInto(SSurface *proto, bool sameNormal, + SEdgeList *el, SShell *useCurvesFrom) +{ + SSurface *ss; + for(ss = surface.First(); ss; ss = surface.NextAfter(ss)) { + if(proto->CoincidentWith(ss, sameNormal)) { + ss->MakeEdgesInto(this, el, SSurface::AS_XYZ, useCurvesFrom); + } + } + + SEdge *se; + for(se = el->l.First(); se; se = el->l.NextAfter(se)) { + double ua, va, ub, vb; + proto->ClosestPointTo(se->a, &ua, &va); + proto->ClosestPointTo(se->b, &ub, &vb); + + if(sameNormal) { + se->a = Vector::From(ua, va, 0); + se->b = Vector::From(ub, vb, 0); + } else { + // Flip normal, so flip all edge directions + se->b = Vector::From(ua, va, 0); + se->a = Vector::From(ub, vb, 0); + } + } +} + diff --git a/src/srf/triangulate.cpp b/src/srf/triangulate.cpp new file mode 100644 index 0000000..816eb3e --- /dev/null +++ b/src/srf/triangulate.cpp @@ -0,0 +1,505 @@ +//----------------------------------------------------------------------------- +// Triangulate a surface. If the surface is curved, then we first superimpose +// a grid of quads, with spacing to achieve our chord tolerance. We then +// proceed by ear-clipping; the resulting mesh should be watertight and not +// awful numerically, but has no special properties (Delaunay, etc.). +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "../solvespace.h" + +void SPolygon::UvTriangulateInto(SMesh *m, SSurface *srf) { + if(l.n <= 0) return; + + //int64_t in = GetMilliseconds(); + + normal = Vector::From(0, 0, 1); + + while(l.n > 0) { + FixContourDirections(); + l.ClearTags(); + + // Find a top-level contour, and start with that. Then build bridges + // in order to merge all its islands into a single contour. + SContour *top; + for(top = l.First(); top; top = l.NextAfter(top)) { + if(top->timesEnclosed == 0) { + break; + } + } + if(!top) { + dbp("polygon has no top-level contours?"); + return; + } + + // Start with the outer contour + SContour merged = {}; + top->tag = 1; + top->CopyInto(&merged); + (merged.l.n)--; + + // List all of the edges, for testing whether bridges work. + SEdgeList el = {}; + top->MakeEdgesInto(&el); + List vl = {}; + + // And now find all of its holes. Note that we will also find any + // outer contours that lie entirely within this contour, and any + // holes for those contours. But that's okay, because we can merge + // those too. + SContour *sc; + for(sc = l.First(); sc; sc = l.NextAfter(sc)) { + if(sc->timesEnclosed != 1) continue; + if(sc->l.n < 2) continue; + + // Test the midpoint of an edge. Our polygon may not be self- + // intersecting, but two contours may share a vertex; so a + // vertex could be on the edge of another polygon, in which + // case ContainsPointProjdToNormal returns indeterminate. + Vector tp = sc->AnyEdgeMidpoint(); + if(top->ContainsPointProjdToNormal(normal, tp)) { + sc->tag = 2; + sc->MakeEdgesInto(&el); + sc->FindPointWithMinX(); + } + } + +// dbp("finished finding holes: %d ms", (int)(GetMilliseconds() - in)); + for(;;) { + double xmin = 1e10; + SContour *scmin = NULL; + + for(sc = l.First(); sc; sc = l.NextAfter(sc)) { + if(sc->tag != 2) continue; + + if(sc->xminPt.x < xmin) { + xmin = sc->xminPt.x; + scmin = sc; + } + } + if(!scmin) break; + + if(!merged.BridgeToContour(scmin, &el, &vl)) { + dbp("couldn't merge our hole"); + return; + } +// dbp(" bridged to contour: %d ms", (int)(GetMilliseconds() - in)); + scmin->tag = 3; + } +// dbp("finished merging holes: %d ms", (int)(GetMilliseconds() - in)); + + merged.UvTriangulateInto(m, srf); +// dbp("finished ear clippping: %d ms", (int)(GetMilliseconds() - in)); + merged.l.Clear(); + el.Clear(); + vl.Clear(); + + // Careful, need to free the points within the contours, and not just + // the contours themselves. This was a tricky memory leak. + for(sc = l.First(); sc; sc = l.NextAfter(sc)) { + if(sc->tag) { + sc->l.Clear(); + } + } + l.RemoveTagged(); + } +} + +bool SContour::BridgeToContour(SContour *sc, + SEdgeList *avoidEdges, List *avoidPts) +{ + int i, j; + + // Start looking for a bridge on our new hole near its leftmost (min x) + // point. + int sco = 0; + for(i = 0; i < (sc->l.n - 1); i++) { + if((sc->l.elem[i].p).EqualsExactly(sc->xminPt)) { + sco = i; + } + } + + // And start looking on our merged contour at whichever point is nearest + // to the leftmost point of the new segment. + int thiso = 0; + double dmin = 1e10; + for(i = 0; i < l.n; i++) { + Vector p = l.elem[i].p; + double d = (p.Minus(sc->xminPt)).MagSquared(); + if(d < dmin) { + dmin = d; + thiso = i; + } + } + + int thisp, scp; + + Vector a, b, *f; + + // First check if the contours share a point; in that case we should + // merge them there, without a bridge. + for(i = 0; i < l.n; i++) { + thisp = WRAP(i+thiso, l.n); + a = l.elem[thisp].p; + + for(f = avoidPts->First(); f; f = avoidPts->NextAfter(f)) { + if(f->Equals(a)) break; + } + if(f) continue; + + for(j = 0; j < (sc->l.n - 1); j++) { + scp = WRAP(j+sco, (sc->l.n - 1)); + b = sc->l.elem[scp].p; + + if(a.Equals(b)) { + goto haveEdge; + } + } + } + + // If that fails, look for a bridge that does not intersect any edges. + for(i = 0; i < l.n; i++) { + thisp = WRAP(i+thiso, l.n); + a = l.elem[thisp].p; + + for(f = avoidPts->First(); f; f = avoidPts->NextAfter(f)) { + if(f->Equals(a)) break; + } + if(f) continue; + + for(j = 0; j < (sc->l.n - 1); j++) { + scp = WRAP(j+sco, (sc->l.n - 1)); + b = sc->l.elem[scp].p; + + for(f = avoidPts->First(); f; f = avoidPts->NextAfter(f)) { + if(f->Equals(b)) break; + } + if(f) continue; + + if(avoidEdges->AnyEdgeCrossings(a, b) > 0) { + // doesn't work, bridge crosses an existing edge + } else { + goto haveEdge; + } + } + } + + // Tried all the possibilities, didn't find an edge + return false; + +haveEdge: + SContour merged = {}; + for(i = 0; i < l.n; i++) { + merged.AddPoint(l.elem[i].p); + if(i == thisp) { + // less than or equal; need to duplicate the join point + for(j = 0; j <= (sc->l.n - 1); j++) { + int jp = WRAP(j + scp, (sc->l.n - 1)); + merged.AddPoint((sc->l.elem[jp]).p); + } + // and likewise duplicate join point for the outer curve + merged.AddPoint(l.elem[i].p); + } + } + + // and future bridges mustn't cross our bridge, and it's tricky to get + // things right if two bridges come from the same point + avoidEdges->AddEdge(a, b); + avoidPts->Add(&a); + avoidPts->Add(&b); + + l.Clear(); + l = merged.l; + return true; +} + +bool SContour::IsEar(int bp, double scaledEps) { + int ap = WRAP(bp-1, l.n), + cp = WRAP(bp+1, l.n); + + STriangle tr = {}; + tr.a = l.elem[ap].p; + tr.b = l.elem[bp].p; + tr.c = l.elem[cp].p; + + if((tr.a).Equals(tr.c)) { + // This is two coincident and anti-parallel edges. Zero-area, so + // won't generate a real triangle, but we certainly can clip it. + return true; + } + + Vector n = Vector::From(0, 0, -1); + if((tr.Normal()).Dot(n) < scaledEps) { + // This vertex is reflex, or between two collinear edges; either way, + // it's not an ear. + return false; + } + + // Accelerate with an axis-aligned bounding box test + Vector maxv = tr.a, minv = tr.a; + (tr.b).MakeMaxMin(&maxv, &minv); + (tr.c).MakeMaxMin(&maxv, &minv); + + int i; + for(i = 0; i < l.n; i++) { + if(i == ap || i == bp || i == cp) continue; + + Vector p = l.elem[i].p; + if(p.OutsideAndNotOn(maxv, minv)) continue; + + // A point on the edge of the triangle is considered to be inside, + // and therefore makes it a non-ear; but a point on the vertex is + // "outside", since that's necessary to make bridges work. + if(p.EqualsExactly(tr.a)) continue; + if(p.EqualsExactly(tr.b)) continue; + if(p.EqualsExactly(tr.c)) continue; + + if(tr.ContainsPointProjd(n, p)) { + return false; + } + } + return true; +} + +void SContour::ClipEarInto(SMesh *m, int bp, double scaledEps) { + int ap = WRAP(bp-1, l.n), + cp = WRAP(bp+1, l.n); + + STriangle tr = {}; + tr.a = l.elem[ap].p; + tr.b = l.elem[bp].p; + tr.c = l.elem[cp].p; + if(tr.Normal().MagSquared() < scaledEps*scaledEps) { + // A vertex with more than two edges will cause us to generate + // zero-area triangles, which must be culled. + } else { + m->AddTriangle(&tr); + } + + // By deleting the point at bp, we may change the ear-ness of the points + // on either side. + l.elem[ap].ear = SPoint::UNKNOWN; + l.elem[cp].ear = SPoint::UNKNOWN; + + l.ClearTags(); + l.elem[bp].tag = 1; + l.RemoveTagged(); +} + +void SContour::UvTriangulateInto(SMesh *m, SSurface *srf) { + Vector tu, tv; + srf->TangentsAt(0.5, 0.5, &tu, &tv); + double s = sqrt(tu.MagSquared() + tv.MagSquared()); + // We would like to apply our tolerances in xyz; but that would be a lot + // of work, so at least scale the epsilon semi-reasonably. That's + // perfect for square planes, less perfect for anything else. + double scaledEps = LENGTH_EPS / s; + + int i; + // Clean the original contour by removing any zero-length edges. + l.ClearTags(); + for(i = 1; i < l.n; i++) { + if((l.elem[i].p).Equals(l.elem[i-1].p)) { + l.elem[i].tag = 1; + } + } + l.RemoveTagged(); + + // Now calculate the ear-ness of each vertex + for(i = 0; i < l.n; i++) { + (l.elem[i]).ear = IsEar(i, scaledEps) ? SPoint::EAR : SPoint::NOT_EAR; + } + + bool toggle = false; + while(l.n > 3) { + // Some points may have changed ear-ness, so recalculate + for(i = 0; i < l.n; i++) { + if(l.elem[i].ear == SPoint::UNKNOWN) { + (l.elem[i]).ear = IsEar(i, scaledEps) ? + SPoint::EAR : SPoint::NOT_EAR; + } + } + + int bestEar = -1; + double bestChordTol = VERY_POSITIVE; + // Alternate the starting position so we generate strip-like + // triangulations instead of fan-like + toggle = !toggle; + int offset = toggle ? -1 : 0; + for(i = 0; i < l.n; i++) { + int ear = WRAP(i+offset, l.n); + if(l.elem[ear].ear == SPoint::EAR) { + if(srf->degm == 1 && srf->degn == 1) { + // This is a plane; any ear is a good ear. + bestEar = ear; + break; + } + // If we are triangulating a curved surface, then try to + // clip ears that have a small chord tolerance from the + // surface. + Vector prev = l.elem[WRAP((i+offset-1), l.n)].p, + next = l.elem[WRAP((i+offset+1), l.n)].p; + double tol = srf->ChordToleranceForEdge(prev, next); + if(tol < bestChordTol - scaledEps) { + bestEar = ear; + bestChordTol = tol; + } + if(bestChordTol < 0.1*SS.ChordTolMm()) { + break; + } + } + } + if(bestEar < 0) { + dbp("couldn't find an ear! fail"); + return; + } + ClipEarInto(m, bestEar, scaledEps); + } + + ClipEarInto(m, 0, scaledEps); // add the last triangle +} + +double SSurface::ChordToleranceForEdge(Vector a, Vector b) { + Vector as = PointAt(a.x, a.y), bs = PointAt(b.x, b.y); + + double worst = VERY_NEGATIVE; + int i; + for(i = 1; i <= 3; i++) { + Vector p = a. Plus((b. Minus(a )).ScaledBy(i/4.0)), + ps = as.Plus((bs.Minus(as)).ScaledBy(i/4.0)); + + Vector pps = PointAt(p.x, p.y); + worst = max(worst, (pps.Minus(ps)).MagSquared()); + } + return sqrt(worst); +} + +Vector SSurface::PointAtMaybeSwapped(double u, double v, bool swapped) { + if(swapped) { + return PointAt(v, u); + } else { + return PointAt(u, v); + } +} + +void SSurface::MakeTriangulationGridInto(List *l, double vs, double vf, + bool swapped) +{ + double worst = 0; + + // Try piecewise linearizing four curves, at u = 0, 1/3, 2/3, 1; choose + // the worst chord tolerance of any of those. + int i; + for(i = 0; i <= 3; i++) { + double u = i/3.0; + + // This chord test should be identical to the one in SBezier::MakePwl + // to make the piecewise linear edges line up with the grid more or + // less. + Vector ps = PointAtMaybeSwapped(u, vs, swapped), + pf = PointAtMaybeSwapped(u, vf, swapped); + + double vm1 = (2*vs + vf) / 3, + vm2 = (vs + 2*vf) / 3; + + Vector pm1 = PointAtMaybeSwapped(u, vm1, swapped), + pm2 = PointAtMaybeSwapped(u, vm2, swapped); + + worst = max(worst, pm1.DistanceToLine(ps, pf.Minus(ps))); + worst = max(worst, pm2.DistanceToLine(ps, pf.Minus(ps))); + } + + double step = 1.0/SS.GetMaxSegments(); + if((vf - vs) < step || worst < SS.ChordTolMm()) { + l->Add(&vf); + } else { + MakeTriangulationGridInto(l, vs, (vs+vf)/2, swapped); + MakeTriangulationGridInto(l, (vs+vf)/2, vf, swapped); + } +} + +void SPolygon::UvGridTriangulateInto(SMesh *mesh, SSurface *srf) { + SEdgeList orig = {}; + MakeEdgesInto(&orig); + + SEdgeList holes = {}; + + normal = Vector::From(0, 0, 1); + FixContourDirections(); + + // Build a rectangular grid, with horizontal and vertical lines in the + // uv plane. The spacing of these lines is adaptive, so calculate that. + List li, lj; + li = {}; + lj = {}; + double v = 0; + li.Add(&v); + srf->MakeTriangulationGridInto(&li, 0, 1, true); + lj.Add(&v); + srf->MakeTriangulationGridInto(&lj, 0, 1, false); + + // Now iterate over each quad in the grid. If it's outside the polygon, + // or if it intersects the polygon, then we discard it. Otherwise we + // generate two triangles in the mesh, and cut it out of our polygon. + int i, j; + for(i = 0; i < (li.n - 1); i++) { + for(j = 0; j < (lj.n - 1); j++) { + double us = li.elem[i], uf = li.elem[i+1], + vs = lj.elem[j], vf = lj.elem[j+1]; + + Vector a = Vector::From(us, vs, 0), + b = Vector::From(us, vf, 0), + c = Vector::From(uf, vf, 0), + d = Vector::From(uf, vs, 0); + + if(orig.AnyEdgeCrossings(a, b, NULL) || + orig.AnyEdgeCrossings(b, c, NULL) || + orig.AnyEdgeCrossings(c, d, NULL) || + orig.AnyEdgeCrossings(d, a, NULL)) + { + continue; + } + + // There's no intersections, so it doesn't matter which point + // we decide to test. + if(!this->ContainsPoint(a)) { + continue; + } + + // Add the quad to our mesh + STriangle tr = {}; + tr.a = a; + tr.b = b; + tr.c = c; + mesh->AddTriangle(&tr); + tr.a = a; + tr.b = c; + tr.c = d; + mesh->AddTriangle(&tr); + + holes.AddEdge(a, b); + holes.AddEdge(b, c); + holes.AddEdge(c, d); + holes.AddEdge(d, a); + } + } + + holes.CullExtraneousEdges(); + SPolygon hp = {}; + holes.AssemblePolygon(&hp, NULL, true); + + SContour *sc; + for(sc = hp.l.First(); sc; sc = hp.l.NextAfter(sc)) { + l.Add(sc); + } + + orig.Clear(); + holes.Clear(); + li.Clear(); + lj.Clear(); + hp.l.Clear(); + + UvTriangulateInto(mesh, srf); +} + + diff --git a/src/style.cpp b/src/style.cpp new file mode 100644 index 0000000..4d437cd --- /dev/null +++ b/src/style.cpp @@ -0,0 +1,956 @@ +//----------------------------------------------------------------------------- +// Implementation of a cosmetic line style, which determines the color and +// other appearance of a line or curve on-screen and in exported files. Some +// styles are predefined, and others can be created by the user. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" +#include + +#define DEFAULT_TEXT_HEIGHT 11.5 + +const Style::Default Style::Defaults[] = { + { { ACTIVE_GRP }, "ActiveGrp", RGBf(1.0, 1.0, 1.0), 1.5, 4 }, + { { CONSTRUCTION }, "Construction", RGBf(0.1, 0.7, 0.1), 1.5, 0 }, + { { INACTIVE_GRP }, "InactiveGrp", RGBf(0.5, 0.3, 0.0), 1.5, 3 }, + { { DATUM }, "Datum", RGBf(0.0, 0.8, 0.0), 1.5, 0 }, + { { SOLID_EDGE }, "SolidEdge", RGBf(0.8, 0.8, 0.8), 1.0, 2 }, + { { CONSTRAINT }, "Constraint", RGBf(1.0, 0.1, 1.0), 1.0, 0 }, + { { SELECTED }, "Selected", RGBf(1.0, 0.0, 0.0), 1.5, 0 }, + { { HOVERED }, "Hovered", RGBf(1.0, 1.0, 0.0), 1.5, 0 }, + { { CONTOUR_FILL }, "ContourFill", RGBf(0.0, 0.1, 0.1), 1.0, 0 }, + { { NORMALS }, "Normals", RGBf(0.0, 0.4, 0.4), 1.0, 0 }, + { { ANALYZE }, "Analyze", RGBf(0.0, 1.0, 1.0), 1.0, 0 }, + { { DRAW_ERROR }, "DrawError", RGBf(1.0, 0.0, 0.0), 8.0, 0 }, + { { DIM_SOLID }, "DimSolid", RGBf(0.1, 0.1, 0.1), 1.0, 0 }, + { { HIDDEN_EDGE }, "HiddenEdge", RGBf(0.8, 0.8, 0.8), 2.0, 1 }, + { { OUTLINE }, "Outline", RGBf(0.8, 0.8, 0.8), 3.0, 5 }, + { { 0 }, NULL, RGBf(0.0, 0.0, 0.0), 0.0, 0 } +}; + +std::string Style::CnfColor(const std::string &prefix) { + return "Style_" + prefix + "_Color"; +} +std::string Style::CnfWidth(const std::string &prefix) { + return "Style_" + prefix + "_Width"; +} +std::string Style::CnfTextHeight(const std::string &prefix) { + return "Style_" + prefix + "_TextHeight"; +} + +std::string Style::CnfPrefixToName(const std::string &prefix) { + std::string name = "#def-"; + + for(size_t i = 0; i < prefix.length(); i++) { + if(isupper(prefix[i]) && i != 0) + name += '-'; + name += tolower(prefix[i]); + } + + return name; +} + +void Style::CreateAllDefaultStyles(void) { + const Default *d; + for(d = &(Defaults[0]); d->h.v; d++) { + (void)Get(d->h); + } +} + +void Style::CreateDefaultStyle(hStyle h) { + bool isDefaultStyle = true; + const Default *d; + for(d = &(Defaults[0]); d->h.v; d++) { + if(d->h.v == h.v) break; + } + if(!d->h.v) { + // Not a default style; so just create it the same as our default + // active group entity style. + d = &(Defaults[0]); + isDefaultStyle = false; + } + + Style ns = {}; + FillDefaultStyle(&ns, d); + ns.h = h; + if(isDefaultStyle) { + ns.name = CnfPrefixToName(d->cnfPrefix); + } else { + ns.name = "new-custom-style"; + } + + SK.style.Add(&ns); +} + +void Style::FillDefaultStyle(Style *s, const Default *d, bool factory) { + if(d == NULL) d = &Defaults[0]; + s->color = (factory) ? d->color : CnfThawColor(d->color, CnfColor(d->cnfPrefix)); + s->width = (factory) ? d->width : CnfThawFloat((float)(d->width), CnfWidth(d->cnfPrefix)); + s->widthAs = UNITS_AS_PIXELS; + s->textHeight = (factory) ? DEFAULT_TEXT_HEIGHT + : CnfThawFloat(DEFAULT_TEXT_HEIGHT, CnfTextHeight(d->cnfPrefix)); + s->textHeightAs = UNITS_AS_PIXELS; + s->textOrigin = 0; + s->textAngle = 0; + s->visible = true; + s->exportable = true; + s->filled = false; + s->fillColor = RGBf(0.3, 0.3, 0.3); + s->stippleType = (d->h.v == Style::HIDDEN_EDGE) ? Style::STIPPLE_DASH + : Style::STIPPLE_CONTINUOUS; + s->stippleScale = 15.0; + s->zIndex = d->zIndex; +} + +void Style::LoadFactoryDefaults(void) { + const Default *d; + for(d = &(Defaults[0]); d->h.v; d++) { + Style *s = Get(d->h); + FillDefaultStyle(s, d, /*factory=*/true); + } + SS.backgroundColor = RGBi(0, 0, 0); + if(SS.bgImage.fromFile) MemFree(SS.bgImage.fromFile); + SS.bgImage.fromFile = NULL; +} + +void Style::FreezeDefaultStyles(void) { + const Default *d; + for(d = &(Defaults[0]); d->h.v; d++) { + CnfFreezeColor(Color(d->h), CnfColor(d->cnfPrefix)); + CnfFreezeFloat((float)Width(d->h), CnfWidth(d->cnfPrefix)); + CnfFreezeFloat((float)TextHeight(d->h), CnfTextHeight(d->cnfPrefix)); + } +} + +uint32_t Style::CreateCustomStyle(bool rememberForUndo) { + if(rememberForUndo) SS.UndoRemember(); + uint32_t vs = max((uint32_t)Style::FIRST_CUSTOM, SK.style.MaximumId() + 1); + hStyle hs = { vs }; + (void)Style::Get(hs); + return hs.v; +} + +void Style::AssignSelectionToStyle(uint32_t v) { + bool showError = false; + SS.GW.GroupSelection(); + + SS.UndoRemember(); + int i; + for(i = 0; i < SS.GW.gs.entities; i++) { + hEntity he = SS.GW.gs.entity[i]; + Entity *e = SK.GetEntity(he); + if(!e->IsStylable()) continue; + + if(!he.isFromRequest()) { + showError = true; + continue; + } + + hRequest hr = he.request(); + Request *r = SK.GetRequest(hr); + r->style.v = v; + SS.MarkGroupDirty(r->group); + } + for(i = 0; i < SS.GW.gs.constraints; i++) { + hConstraint hc = SS.GW.gs.constraint[i]; + Constraint *c = SK.GetConstraint(hc); + if(!c->IsStylable()) continue; + + c->disp.style.v = v; + } + + if(showError) { + Error("Can't assign style to an entity that's derived from another " + "entity; try assigning a style to this entity's parent."); + } + + SS.GW.ClearSelection(); + InvalidateGraphics(); + SS.ScheduleGenerateAll(); + + // And show that style's info screen in the text window. + SS.TW.GoToScreen(TextWindow::SCREEN_STYLE_INFO); + SS.TW.shown.style.v = v; + SS.ScheduleShowTW(); +} + +//----------------------------------------------------------------------------- +// Look up a style by its handle. If that style does not exist, then create +// the style, according to our table of default styles. +//----------------------------------------------------------------------------- +Style *Style::Get(hStyle h) { + if(h.v == 0) h.v = ACTIVE_GRP; + + Style *s = SK.style.FindByIdNoOops(h); + if(s) { + // It exists, good. + return s; + } else { + // It doesn't exist; so we should create it and then return that. + CreateDefaultStyle(h); + return SK.style.FindById(h); + } +} + +//----------------------------------------------------------------------------- +// A couple of wrappers, so that I can call these functions with either an +// hStyle or with the integer corresponding to that hStyle.v. +//----------------------------------------------------------------------------- +RgbaColor Style::Color(int s, bool forExport) { + hStyle hs = { (uint32_t)s }; + return Color(hs, forExport); +} +float Style::Width(int s) { + hStyle hs = { (uint32_t)s }; + return Width(hs); +} + +//----------------------------------------------------------------------------- +// If a color is almost white, then we can rewrite it to black, just so that +// it won't disappear on file formats with a light background. +//----------------------------------------------------------------------------- +RgbaColor Style::RewriteColor(RgbaColor rgbin) { + Vector rgb = Vector::From(rgbin.redF(), rgbin.greenF(), rgbin.blueF()); + rgb = rgb.Minus(Vector::From(1, 1, 1)); + if(rgb.Magnitude() < 0.4 && SS.fixExportColors) { + // This is an almost-white color in a default style, which is + // good for the default on-screen view (black bg) but probably + // not desired in the exported files, which typically are shown + // against white backgrounds. + return RGBi(0, 0, 0); + } else { + return rgbin; + } +} + +//----------------------------------------------------------------------------- +// Return the stroke color associated with our style as 8-bit RGB. +//----------------------------------------------------------------------------- +RgbaColor Style::Color(hStyle h, bool forExport) { + Style *s = Get(h); + if(forExport) { + return RewriteColor(s->color); + } else { + return s->color; + } +} + +//----------------------------------------------------------------------------- +// Return the fill color associated with our style as 8-bit RGB. +//----------------------------------------------------------------------------- +RgbaColor Style::FillColor(hStyle h, bool forExport) { + Style *s = Get(h); + if(forExport) { + return RewriteColor(s->fillColor); + } else { + return s->fillColor; + } +} + +//----------------------------------------------------------------------------- +// Return the width associated with our style in pixels.. +//----------------------------------------------------------------------------- +float Style::Width(hStyle h) { + double r = 1.0; + Style *s = Get(h); + if(s->widthAs == UNITS_AS_MM) { + r = s->width * SS.GW.scale; + } else if(s->widthAs == UNITS_AS_PIXELS) { + r = s->width; + } + // This returns a float because ssglLineWidth expects a float, avoid casts. + return (float)r; +} + +//----------------------------------------------------------------------------- +// Return the width associated with our style in millimeters.. +//----------------------------------------------------------------------------- +double Style::WidthMm(int hs) { + double widthpx = Width(hs); + return widthpx / SS.GW.scale; +} + +//----------------------------------------------------------------------------- +// Return the associated text height, in pixels. +//----------------------------------------------------------------------------- +double Style::TextHeight(hStyle hs) { + Style *s = Get(hs); + if(s->textHeightAs == UNITS_AS_MM) { + return s->textHeight * SS.GW.scale; + } else /* s->textHeightAs == UNITS_AS_PIXELS */ { + return s->textHeight; + } +} + +double Style::DefaultTextHeight() { + hStyle hs { Style::CONSTRAINT }; + return TextHeight(hs); +} + +//----------------------------------------------------------------------------- +// Should lines and curves from this style appear in the output file? Only +// if it's both shown and exportable. +//----------------------------------------------------------------------------- +bool Style::Exportable(int si) { + hStyle hs = { (uint32_t)si }; + Style *s = Get(hs); + return (s->exportable) && (s->visible); +} + +//----------------------------------------------------------------------------- +// Return the appropriate style for our entity. If the entity has a style +// explicitly assigned, then it's that style. Otherwise it's the appropriate +// default style. +//----------------------------------------------------------------------------- +hStyle Style::ForEntity(hEntity he) { + Entity *e = SK.GetEntity(he); + // If the entity has a special style, use that. If that style doesn't + // exist yet, then it will get created automatically later. + if(e->style.v != 0) { + return e->style; + } + + // Otherwise, we use the default rules. + hStyle hs; + if(e->group.v != SS.GW.activeGroup.v) { + hs.v = INACTIVE_GRP; + } else if(e->construction) { + hs.v = CONSTRUCTION; + } else { + hs.v = ACTIVE_GRP; + } + return hs; +} + +int Style::PatternType(hStyle hs) { + Style *s = Get(hs); + return s->stippleType; +} + +double Style::StippleScaleMm(hStyle hs) { + Style *s = Get(hs); + if(s->widthAs == UNITS_AS_MM) { + return s->stippleScale; + } else if(s->widthAs == UNITS_AS_PIXELS) { + return s->stippleScale / SS.GW.scale; + } + return 1.0; +} + +std::string Style::DescriptionString(void) { + if(name.empty()) { + return ssprintf("s%03x-(unnamed)", h.v); + } else { + return ssprintf("s%03x-%s", h.v, name.c_str()); + } +} + + +void TextWindow::ScreenShowListOfStyles(int link, uint32_t v) { + SS.TW.GoToScreen(SCREEN_LIST_OF_STYLES); +} +void TextWindow::ScreenShowStyleInfo(int link, uint32_t v) { + SS.TW.GoToScreen(SCREEN_STYLE_INFO); + SS.TW.shown.style.v = v; +} + +void TextWindow::ScreenLoadFactoryDefaultStyles(int link, uint32_t v) { + Style::LoadFactoryDefaults(); + SS.TW.GoToScreen(SCREEN_LIST_OF_STYLES); +} + +void TextWindow::ScreenCreateCustomStyle(int link, uint32_t v) { + Style::CreateCustomStyle(); +} + +void TextWindow::ScreenChangeBackgroundColor(int link, uint32_t v) { + RgbaColor rgb = SS.backgroundColor; + SS.TW.ShowEditControlWithColorPicker(3, rgb); + SS.TW.edit.meaning = EDIT_BACKGROUND_COLOR; +} + +static int RoundUpToPowerOfTwo(int v) +{ + int i; + for(i = 0; i < 31; i++) { + int vt = (1 << i); + if(vt >= v) { + return vt; + } + } + return 0; +} + +void TextWindow::ScreenBackgroundImage(int link, uint32_t v) { + if(SS.bgImage.fromFile) MemFree(SS.bgImage.fromFile); + SS.bgImage.fromFile = NULL; + + if(link == 'l') { + FILE *f = NULL; + png_struct *png_ptr = NULL; + png_info *info_ptr = NULL; + + std::string importFile; + if(!GetOpenFile(&importFile, "", PngFileFilter)) goto err; + f = ssfopen(importFile, "rb"); + if(!f) goto err; + + uint8_t header[8]; + if (fread(header, 1, 8, f) != 8) + goto err; + if(png_sig_cmp(header, 0, 8)) goto err; + + png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, + NULL, NULL, NULL); + if(!png_ptr) goto err; + + info_ptr = png_create_info_struct(png_ptr); + if(!info_ptr) goto err; + + if(setjmp(png_jmpbuf(png_ptr))) goto err; + + png_init_io(png_ptr, f); + png_set_sig_bytes(png_ptr, 8); + + png_read_png(png_ptr, info_ptr, + PNG_TRANSFORM_EXPAND | PNG_TRANSFORM_STRIP_ALPHA, NULL); + + int w; w = (int)png_get_image_width(png_ptr, info_ptr); + int h; h = (int)png_get_image_height(png_ptr, info_ptr); + uint8_t **rows; rows = png_get_rows(png_ptr, info_ptr); + + // Round to next-highest powers of two, since the textures require + // that. And round up to 4, to guarantee 32-bit alignment. + int rw; rw = max(4, RoundUpToPowerOfTwo(w)); + int rh; rh = max(4, RoundUpToPowerOfTwo(h)); + + SS.bgImage.fromFile = (uint8_t *)MemAlloc(rw*rh*3); + {for(int i = 0; i < h; i++) { + memcpy(SS.bgImage.fromFile + ((h - 1) - i)*(rw*3), rows[i], w*3); + }} + SS.bgImage.w = w; + SS.bgImage.h = h; + SS.bgImage.rw = rw; + SS.bgImage.rh = rh; + SS.bgImage.scale = SS.GW.scale; + SS.bgImage.origin = SS.GW.offset.ScaledBy(-1); + +err: + if(png_ptr) png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + if(f) fclose(f); + } + SS.ScheduleShowTW(); +} + +void TextWindow::ScreenChangeBackgroundImageScale(int link, uint32_t v) { + SS.TW.edit.meaning = EDIT_BACKGROUND_IMG_SCALE; + SS.TW.ShowEditControl(10, ssprintf("%.3f", SS.bgImage.scale * SS.MmPerUnit())); +} + +void TextWindow::ShowListOfStyles(void) { + Printf(true, "%Ft color style-name"); + + bool darkbg = false; + Style *s; + for(s = SK.style.First(); s; s = SK.style.NextAfter(s)) { + Printf(false, "%Bp %Bz %Bp %Fl%Ll%f%D%s%E", + darkbg ? 'd' : 'a', + &s->color, + darkbg ? 'd' : 'a', + ScreenShowStyleInfo, s->h.v, + s->DescriptionString().c_str()); + + darkbg = !darkbg; + } + + Printf(true, " %Fl%Ll%fcreate a new custom style%E", + &ScreenCreateCustomStyle); + + Printf(false, ""); + + RgbaColor rgb = SS.backgroundColor; + Printf(false, "%Ft background color (r, g, b)%E"); + Printf(false, "%Ba %@, %@, %@ %Fl%D%f%Ll[change]%E", + rgb.redF(), rgb.greenF(), rgb.blueF(), + top[rows-1] + 2, &ScreenChangeBackgroundColor); + + Printf(false, ""); + Printf(false, "%Ft background bitmap image%E"); + if(SS.bgImage.fromFile) { + Printf(false, "%Ba %Ftwidth:%E %dpx %Ftheight:%E %dpx", + SS.bgImage.w, SS.bgImage.h); + + Printf(false, " %Ftscale:%E %# px/%s %Fl%Ll%f%D[change]%E", + SS.bgImage.scale*SS.MmPerUnit(), + SS.UnitName(), + &ScreenChangeBackgroundImageScale, top[rows-1] + 2); + + Printf(false, "%Ba %Fl%Lc%fclear background image%E", + &ScreenBackgroundImage); + } else { + Printf(false, "%Ba none - %Fl%Ll%fload background image%E", + &ScreenBackgroundImage); + Printf(false, " (bottom left will be center of view)"); + } + + Printf(false, ""); + Printf(false, " %Fl%Ll%fload factory defaults%E", + &ScreenLoadFactoryDefaultStyles); +} + + +void TextWindow::ScreenChangeStyleName(int link, uint32_t v) { + hStyle hs = { v }; + Style *s = Style::Get(hs); + SS.TW.ShowEditControl(12, s->name); + SS.TW.edit.style = hs; + SS.TW.edit.meaning = EDIT_STYLE_NAME; +} + +void TextWindow::ScreenDeleteStyle(int link, uint32_t v) { + SS.UndoRemember(); + hStyle hs = { v }; + Style *s = SK.style.FindByIdNoOops(hs); + if(s) { + SK.style.RemoveById(hs); + // And it will get recreated automatically if something is still using + // the style, so no need to do anything else. + } + SS.TW.GoToScreen(SCREEN_LIST_OF_STYLES); + InvalidateGraphics(); +} + +void TextWindow::ScreenChangeStylePatternType(int link, uint32_t v) { + hStyle hs = { v }; + Style *s = Style::Get(hs); + s->stippleType = link - 1; +} + +void TextWindow::ScreenChangeStyleMetric(int link, uint32_t v) { + hStyle hs = { v }; + Style *s = Style::Get(hs); + double val; + int units, meaning, col; + switch(link) { + case 't': + val = s->textHeight; + units = s->textHeightAs; + col = 10; + meaning = EDIT_STYLE_TEXT_HEIGHT; + break; + + case 's': + val = s->stippleScale; + units = s->widthAs; + col = 17; + meaning = EDIT_STYLE_STIPPLE_PERIOD; + break; + + case 'w': + case 'W': + val = s->width; + units = s->widthAs; + col = 9; + meaning = EDIT_STYLE_WIDTH; + break; + + default: oops(); + } + + std::string edit_value; + if(units == Style::UNITS_AS_PIXELS) { + edit_value = ssprintf("%.2f", val); + } else { + edit_value = SS.MmToString(val); + } + SS.TW.ShowEditControl(col, edit_value); + SS.TW.edit.style = hs; + SS.TW.edit.meaning = meaning; +} + +void TextWindow::ScreenChangeStyleTextAngle(int link, uint32_t v) { + hStyle hs = { v }; + Style *s = Style::Get(hs); + SS.TW.ShowEditControl(9, ssprintf("%.2f", s->textAngle)); + SS.TW.edit.style = hs; + SS.TW.edit.meaning = EDIT_STYLE_TEXT_ANGLE; +} + +void TextWindow::ScreenChangeStyleColor(int link, uint32_t v) { + hStyle hs = { v }; + Style *s = Style::Get(hs); + // Same function used for stroke and fill colors + int em; + RgbaColor rgb; + if(link == 's') { + em = EDIT_STYLE_COLOR; + rgb = s->color; + } else if(link == 'f') { + em = EDIT_STYLE_FILL_COLOR; + rgb = s->fillColor; + } else { + oops(); + } + SS.TW.ShowEditControlWithColorPicker(13, rgb); + SS.TW.edit.style = hs; + SS.TW.edit.meaning = em; +} + +void TextWindow::ScreenChangeStyleYesNo(int link, uint32_t v) { + SS.UndoRemember(); + hStyle hs = { v }; + Style *s = Style::Get(hs); + switch(link) { + // Units for the width + case 'w': + if(s->widthAs != Style::UNITS_AS_MM) { + s->widthAs = Style::UNITS_AS_MM; + s->width /= SS.GW.scale; + s->stippleScale /= SS.GW.scale; + } + break; + case 'W': + if(s->widthAs != Style::UNITS_AS_PIXELS) { + s->widthAs = Style::UNITS_AS_PIXELS; + s->width *= SS.GW.scale; + s->stippleScale *= SS.GW.scale; + } + break; + + // Units for the height + case 'g': + if(s->textHeightAs != Style::UNITS_AS_MM) { + s->textHeightAs = Style::UNITS_AS_MM; + s->textHeight /= SS.GW.scale; + } + break; + + case 'G': + if(s->textHeightAs != Style::UNITS_AS_PIXELS) { + s->textHeightAs = Style::UNITS_AS_PIXELS; + s->textHeight *= SS.GW.scale; + } + break; + + case 'e': + s->exportable = !(s->exportable); + break; + + case 'v': + s->visible = !(s->visible); + break; + + case 'f': + s->filled = !(s->filled); + break; + + // Horizontal text alignment + case 'L': + s->textOrigin |= Style::ORIGIN_LEFT; + s->textOrigin &= ~Style::ORIGIN_RIGHT; + break; + case 'H': + s->textOrigin &= ~Style::ORIGIN_LEFT; + s->textOrigin &= ~Style::ORIGIN_RIGHT; + break; + case 'R': + s->textOrigin &= ~Style::ORIGIN_LEFT; + s->textOrigin |= Style::ORIGIN_RIGHT; + break; + + // Vertical text alignment + case 'B': + s->textOrigin |= Style::ORIGIN_BOT; + s->textOrigin &= ~Style::ORIGIN_TOP; + break; + case 'V': + s->textOrigin &= ~Style::ORIGIN_BOT; + s->textOrigin &= ~Style::ORIGIN_TOP; + break; + case 'T': + s->textOrigin &= ~Style::ORIGIN_BOT; + s->textOrigin |= Style::ORIGIN_TOP; + break; + } + InvalidateGraphics(); +} + +bool TextWindow::EditControlDoneForStyles(const char *str) { + Style *s; + switch(edit.meaning) { + case EDIT_STYLE_STIPPLE_PERIOD: + case EDIT_STYLE_TEXT_HEIGHT: + case EDIT_STYLE_WIDTH: { + SS.UndoRemember(); + s = Style::Get(edit.style); + + double v; + int units = (edit.meaning == EDIT_STYLE_TEXT_HEIGHT) ? + s->textHeightAs : s->widthAs; + if(units == Style::UNITS_AS_MM) { + v = SS.StringToMm(str); + } else { + v = atof(str); + } + v = max(0.0, v); + if(edit.meaning == EDIT_STYLE_TEXT_HEIGHT) { + s->textHeight = v; + } else if(edit.meaning == EDIT_STYLE_STIPPLE_PERIOD) { + s->stippleScale = v; + } else { + s->width = v; + } + break; + } + case EDIT_STYLE_TEXT_ANGLE: + SS.UndoRemember(); + s = Style::Get(edit.style); + s->textAngle = WRAP_SYMMETRIC(atof(str), 360); + break; + + case EDIT_BACKGROUND_COLOR: + case EDIT_STYLE_FILL_COLOR: + case EDIT_STYLE_COLOR: { + Vector rgb; + if(sscanf(str, "%lf, %lf, %lf", &rgb.x, &rgb.y, &rgb.z)==3) { + rgb = rgb.ClampWithin(0, 1); + if(edit.meaning == EDIT_STYLE_COLOR) { + SS.UndoRemember(); + s = Style::Get(edit.style); + s->color = RGBf(rgb.x, rgb.y, rgb.z); + } else if(edit.meaning == EDIT_STYLE_FILL_COLOR) { + SS.UndoRemember(); + s = Style::Get(edit.style); + s->fillColor = RGBf(rgb.x, rgb.y, rgb.z); + } else { + SS.backgroundColor = RGBf(rgb.x, rgb.y, rgb.z); + } + } else { + Error("Bad format: specify color as r, g, b"); + } + break; + } + case EDIT_STYLE_NAME: + if(!*str) { + Error("Style name cannot be empty"); + } else { + SS.UndoRemember(); + s = Style::Get(edit.style); + s->name = str; + } + break; + + case EDIT_BACKGROUND_IMG_SCALE: { + Expr *e = Expr::From(str, true); + if(e) { + double ev = e->Eval(); + if(ev < 0.001 || isnan(ev)) { + Error("Scale must not be zero or negative!"); + } else { + SS.bgImage.scale = ev / SS.MmPerUnit(); + } + } + break; + } + default: return false; + } + return true; +} + +void TextWindow::ShowStyleInfo(void) { + Printf(true, "%Fl%f%Ll(back to list of styles)%E", &ScreenShowListOfStyles); + + Style *s = Style::Get(shown.style); + + if(s->h.v < Style::FIRST_CUSTOM) { + Printf(true, "%FtSTYLE %E%s ", s->DescriptionString().c_str()); + } else { + Printf(true, "%FtSTYLE %E%s " + "[%Fl%Ll%D%frename%E/%Fl%Ll%D%fdel%E]", + s->DescriptionString().c_str(), + s->h.v, &ScreenChangeStyleName, + s->h.v, &ScreenDeleteStyle); + } + Printf(true, "%Ft line stroke style%E"); + Printf(false, "%Ba %Ftcolor %E%Bz %Ba (%@, %@, %@) %D%f%Ls%Fl[change]%E", + &s->color, + s->color.redF(), s->color.greenF(), s->color.blueF(), + s->h.v, ScreenChangeStyleColor); + + // The line width, and its units + if(s->widthAs == Style::UNITS_AS_PIXELS) { + Printf(false, " %Ftwidth%E %@ %D%f%Lp%Fl[change]%E", + s->width, + s->h.v, &ScreenChangeStyleMetric, + (s->h.v < Style::FIRST_CUSTOM) ? 'w' : 'W'); + } else { + Printf(false, " %Ftwidth%E %s %D%f%Lp%Fl[change]%E", + SS.MmToString(s->width).c_str(), + s->h.v, &ScreenChangeStyleMetric, + (s->h.v < Style::FIRST_CUSTOM) ? 'w' : 'W'); + } + + if(s->h.v >= Style::FIRST_CUSTOM) { + if(s->widthAs == Style::UNITS_AS_PIXELS) { + Printf(false, "%Ba %Ftstipple width%E %@ %D%f%Lp%Fl[change]%E", + s->stippleScale, + s->h.v, &ScreenChangeStyleMetric, 's'); + } else { + Printf(false, "%Ba %Ftstipple width%E %s %D%f%Lp%Fl[change]%E", + SS.MmToString(s->stippleScale).c_str(), + s->h.v, &ScreenChangeStyleMetric, 's'); + } + } + + bool widthpx = (s->widthAs == Style::UNITS_AS_PIXELS); + if(s->h.v < Style::FIRST_CUSTOM) { + Printf(false," %Ftin units of %Fdpixels%E"); + } else { + Printf(false,"%Ba %Ftin units of %Fd" + "%D%f%LW%s pixels%E " + "%D%f%Lw%s %s", + s->h.v, &ScreenChangeStyleYesNo, + widthpx ? RADIO_TRUE : RADIO_FALSE, + s->h.v, &ScreenChangeStyleYesNo, + !widthpx ? RADIO_TRUE : RADIO_FALSE, + SS.UnitName()); + } + + Printf(false,"%Ba %Ftstipple type:%E"); + + const size_t patternCount = Style::LAST_STIPPLE + 1; + const char *patternsSource[patternCount] = { + "___________", + "- - - - - -", + "__ __ __ __", + "-.-.-.-.-.-", + "..-..-..-..", + "...........", + "~~~~~~~~~~~", + "__~__~__~__" + }; + std::string patterns[patternCount]; + + for(int i = 0; i <= Style::LAST_STIPPLE; i++) { + const char *str = patternsSource[i]; + do { + switch(*str) { + case ' ': patterns[i] += " "; break; + case '.': patterns[i] += "\xEE\x80\x84"; break; + case '_': patterns[i] += "\xEE\x80\x85"; break; + case '-': patterns[i] += "\xEE\x80\x86"; break; + case '~': patterns[i] += "\xEE\x80\x87"; break; + default: oops(); + } + } while(*(++str)); + } + + for(int i = 0; i <= Style::LAST_STIPPLE; i++) { + const char *radio = s->stippleType == i ? RADIO_TRUE : RADIO_FALSE; + Printf(false, "%Bp %D%f%Lp%s %s%E", + (i % 2 == 0) ? 'd' : 'a', + s->h.v, &ScreenChangeStylePatternType, + i + 1, radio, patterns[i].c_str()); + } + + if(s->h.v >= Style::FIRST_CUSTOM) { + // The fill color, and whether contours are filled + + Printf(false, ""); + Printf(false, "%Ft contour fill style%E"); + Printf(false, + "%Ba %Ftcolor %E%Bz %Ba (%@, %@, %@) %D%f%Lf%Fl[change]%E", + &s->fillColor, + s->fillColor.redF(), s->fillColor.greenF(), s->fillColor.blueF(), + s->h.v, ScreenChangeStyleColor); + + Printf(false, "%Bd %D%f%Lf%s contours are filled%E", + s->h.v, &ScreenChangeStyleYesNo, + s->filled ? CHECK_TRUE : CHECK_FALSE); + } + + // The text height, and its units + Printf(false, ""); + Printf(false, "%Ft text style%E"); + + if(s->textHeightAs == Style::UNITS_AS_PIXELS) { + Printf(false, "%Ba %Ftheight %E%@ %D%f%Lt%Fl%s%E", + s->textHeight, + s->h.v, &ScreenChangeStyleMetric, + "[change]"); + } else { + Printf(false, "%Ba %Ftheight %E%s %D%f%Lt%Fl%s%E", + SS.MmToString(s->textHeight).c_str(), + s->h.v, &ScreenChangeStyleMetric, + "[change]"); + } + + bool textHeightpx = (s->textHeightAs == Style::UNITS_AS_PIXELS); + if(s->h.v < Style::FIRST_CUSTOM) { + Printf(false,"%Bd %Ftin units of %Fdpixels"); + } else { + Printf(false,"%Bd %Ftin units of %Fd" + "%D%f%LG%s pixels%E " + "%D%f%Lg%s %s", + s->h.v, &ScreenChangeStyleYesNo, + textHeightpx ? RADIO_TRUE : RADIO_FALSE, + s->h.v, &ScreenChangeStyleYesNo, + !textHeightpx ? RADIO_TRUE : RADIO_FALSE, + SS.UnitName()); + } + + if(s->h.v >= Style::FIRST_CUSTOM) { + Printf(false, "%Ba %Ftangle %E%@ %D%f%Ll%Fl[change]%E", + s->textAngle, + s->h.v, &ScreenChangeStyleTextAngle); + + Printf(false, ""); + Printf(false, "%Ft text comment alignment%E"); + bool neither; + neither = !(s->textOrigin & (Style::ORIGIN_LEFT | Style::ORIGIN_RIGHT)); + Printf(false, "%Ba " + "%D%f%LL%s left%E " + "%D%f%LH%s center%E " + "%D%f%LR%s right%E ", + s->h.v, &ScreenChangeStyleYesNo, + (s->textOrigin & Style::ORIGIN_LEFT) ? RADIO_TRUE : RADIO_FALSE, + s->h.v, &ScreenChangeStyleYesNo, + neither ? RADIO_TRUE : RADIO_FALSE, + s->h.v, &ScreenChangeStyleYesNo, + (s->textOrigin & Style::ORIGIN_RIGHT) ? RADIO_TRUE : RADIO_FALSE); + + neither = !(s->textOrigin & (Style::ORIGIN_BOT | Style::ORIGIN_TOP)); + Printf(false, "%Bd " + "%D%f%LB%s bottom%E " + "%D%f%LV%s center%E " + "%D%f%LT%s top%E ", + s->h.v, &ScreenChangeStyleYesNo, + (s->textOrigin & Style::ORIGIN_BOT) ? RADIO_TRUE : RADIO_FALSE, + s->h.v, &ScreenChangeStyleYesNo, + neither ? RADIO_TRUE : RADIO_FALSE, + s->h.v, &ScreenChangeStyleYesNo, + (s->textOrigin & Style::ORIGIN_TOP) ? RADIO_TRUE : RADIO_FALSE); + } + + if(s->h.v >= Style::FIRST_CUSTOM) { + Printf(false, ""); + + Printf(false, " %Fd%D%f%Lv%s show these objects on screen%E", + s->h.v, &ScreenChangeStyleYesNo, + s->visible ? CHECK_TRUE : CHECK_FALSE); + + Printf(false, " %Fd%D%f%Le%s export these objects%E", + s->h.v, &ScreenChangeStyleYesNo, + s->exportable ? CHECK_TRUE : CHECK_FALSE); + + Printf(false, ""); + Printf(false, "To assign lines or curves to this style,"); + Printf(false, "right-click them on the drawing."); + } +} + +void TextWindow::ScreenAssignSelectionToStyle(int link, uint32_t v) { + Style::AssignSelectionToStyle(v); +} + diff --git a/src/system.cpp b/src/system.cpp new file mode 100644 index 0000000..5ff118e --- /dev/null +++ b/src/system.cpp @@ -0,0 +1,540 @@ +//----------------------------------------------------------------------------- +// Once we've written our constraint equations in the symbolic algebra system, +// these routines linearize them, and solve by a modified Newton's method. +// This also contains the routines to detect non-convergence or inconsistency, +// and report diagnostics to the user. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +// This tolerance is used to determine whether two (linearized) constraints +// are linearly dependent. If this is too small, then we will attempt to +// solve truly inconsistent systems and fail. But if it's too large, then +// we will give up on legitimate systems like a skinny right angle triangle by +// its hypotenuse and long side. +const double System::RANK_MAG_TOLERANCE = 1e-4; + +// The solver will converge all unknowns to within this tolerance. This must +// always be much less than LENGTH_EPS, and in practice should be much less. +const double System::CONVERGE_TOLERANCE = (LENGTH_EPS/(1e2)); + +bool System::WriteJacobian(int tag) { + int a, i, j; + + j = 0; + for(a = 0; a < param.n; a++) { + if(j >= MAX_UNKNOWNS) return false; + + Param *p = &(param.elem[a]); + if(p->tag != tag) continue; + mat.param[j] = p->h; + j++; + } + mat.n = j; + + i = 0; + for(a = 0; a < eq.n; a++) { + if(i >= MAX_UNKNOWNS) return false; + + Equation *e = &(eq.elem[a]); + if(e->tag != tag) continue; + + mat.eq[i] = e->h; + Expr *f = e->e->DeepCopyWithParamsAsPointers(¶m, &(SK.param)); + f = f->FoldConstants(); + + // Hash table (61 bits) to accelerate generation of zero partials. + uint64_t scoreboard = f->ParamsUsed(); + for(j = 0; j < mat.n; j++) { + Expr *pd; + if(scoreboard & ((uint64_t)1 << (mat.param[j].v % 61)) && + f->DependsOn(mat.param[j])) + { + pd = f->PartialWrt(mat.param[j]); + pd = pd->FoldConstants(); + pd = pd->DeepCopyWithParamsAsPointers(¶m, &(SK.param)); + } else { + pd = Expr::From(0.0); + } + mat.A.sym[i][j] = pd; + } + mat.B.sym[i] = f; + i++; + } + mat.m = i; + + return true; +} + +void System::EvalJacobian(void) { + int i, j; + for(i = 0; i < mat.m; i++) { + for(j = 0; j < mat.n; j++) { + mat.A.num[i][j] = (mat.A.sym[i][j])->Eval(); + } + } +} + +bool System::IsDragged(hParam p) { + hParam *pp; + for(pp = dragged.First(); pp; pp = dragged.NextAfter(pp)) { + if(p.v == pp->v) return true; + } + return false; +} + +void System::SolveBySubstitution(void) { + int i; + for(i = 0; i < eq.n; i++) { + Equation *teq = &(eq.elem[i]); + Expr *tex = teq->e; + + if(tex->op == Expr::MINUS && + tex->a->op == Expr::PARAM && + tex->b->op == Expr::PARAM) + { + hParam a = tex->a->parh; + hParam b = tex->b->parh; + if(!(param.FindByIdNoOops(a) && param.FindByIdNoOops(b))) { + // Don't substitute unless they're both solver params; + // otherwise it's an equation that can be solved immediately, + // or an error to flag later. + continue; + } + + if(IsDragged(a)) { + // A is being dragged, so A should stay, and B should go + hParam t = a; + a = b; + b = t; + } + + int j; + for(j = 0; j < eq.n; j++) { + Equation *req = &(eq.elem[j]); + (req->e)->Substitute(a, b); // A becomes B, B unchanged + } + for(j = 0; j < param.n; j++) { + Param *rp = &(param.elem[j]); + if(rp->substd.v == a.v) { + rp->substd = b; + } + } + Param *ptr = param.FindById(a); + ptr->tag = VAR_SUBSTITUTED; + ptr->substd = b; + + teq->tag = EQ_SUBSTITUTED; + } + } +} + +//----------------------------------------------------------------------------- +// Calculate the rank of the Jacobian matrix, by Gram-Schimdt orthogonalization +// in place. A row (~equation) is considered to be all zeros if its magnitude +// is less than the tolerance RANK_MAG_TOLERANCE. +//----------------------------------------------------------------------------- +int System::CalculateRank(void) { + // Actually work with magnitudes squared, not the magnitudes + double rowMag[MAX_UNKNOWNS] = {}; + double tol = RANK_MAG_TOLERANCE*RANK_MAG_TOLERANCE; + + int i, iprev, j; + int rank = 0; + + for(i = 0; i < mat.m; i++) { + // Subtract off this row's component in the direction of any + // previous rows + for(iprev = 0; iprev < i; iprev++) { + if(rowMag[iprev] <= tol) continue; // ignore zero rows + + double dot = 0; + for(j = 0; j < mat.n; j++) { + dot += (mat.A.num[iprev][j]) * (mat.A.num[i][j]); + } + for(j = 0; j < mat.n; j++) { + mat.A.num[i][j] -= (dot/rowMag[iprev])*mat.A.num[iprev][j]; + } + } + // Our row is now normal to all previous rows; calculate the + // magnitude of what's left + double mag = 0; + for(j = 0; j < mat.n; j++) { + mag += (mat.A.num[i][j]) * (mat.A.num[i][j]); + } + if(mag > tol) { + rank++; + } + rowMag[i] = mag; + } + + return rank; +} + +bool System::TestRank(void) { + EvalJacobian(); + return CalculateRank() == mat.m; +} + +bool System::SolveLinearSystem(double X[], double A[][MAX_UNKNOWNS], + double B[], int n) +{ + // Gaussian elimination, with partial pivoting. It's an error if the + // matrix is singular, because that means two constraints are + // equivalent. + int i, j, ip, jp, imax = 0; + double max, temp; + + for(i = 0; i < n; i++) { + // We are trying eliminate the term in column i, for rows i+1 and + // greater. First, find a pivot (between rows i and N-1). + max = 0; + for(ip = i; ip < n; ip++) { + if(ffabs(A[ip][i]) > max) { + imax = ip; + max = ffabs(A[ip][i]); + } + } + // Don't give up on a singular matrix unless it's really bad; the + // assumption code is responsible for identifying that condition, + // so we're not responsible for reporting that error. + if(ffabs(max) < 1e-20) continue; + + // Swap row imax with row i + for(jp = 0; jp < n; jp++) { + swap(A[i][jp], A[imax][jp]); + } + swap(B[i], B[imax]); + + // For rows i+1 and greater, eliminate the term in column i. + for(ip = i+1; ip < n; ip++) { + temp = A[ip][i]/A[i][i]; + + for(jp = i; jp < n; jp++) { + A[ip][jp] -= temp*(A[i][jp]); + } + B[ip] -= temp*B[i]; + } + } + + // We've put the matrix in upper triangular form, so at this point we + // can solve by back-substitution. + for(i = n - 1; i >= 0; i--) { + if(ffabs(A[i][i]) < 1e-20) continue; + + temp = B[i]; + for(j = n - 1; j > i; j--) { + temp -= X[j]*A[i][j]; + } + X[i] = temp / A[i][i]; + } + + return true; +} + +bool System::SolveLeastSquares(void) { + int r, c, i; + + // Scale the columns; this scale weights the parameters for the least + // squares solve, so that we can encourage the solver to make bigger + // changes in some parameters, and smaller in others. + for(c = 0; c < mat.n; c++) { + if(IsDragged(mat.param[c])) { + // It's least squares, so this parameter doesn't need to be all + // that big to get a large effect. + mat.scale[c] = 1/20.0; + } else { + mat.scale[c] = 1; + } + for(r = 0; r < mat.m; r++) { + mat.A.num[r][c] *= mat.scale[c]; + } + } + + // Write A*A' + for(r = 0; r < mat.m; r++) { + for(c = 0; c < mat.m; c++) { // yes, AAt is square + double sum = 0; + for(i = 0; i < mat.n; i++) { + sum += mat.A.num[r][i]*mat.A.num[c][i]; + } + mat.AAt[r][c] = sum; + } + } + + if(!SolveLinearSystem(mat.Z, mat.AAt, mat.B.num, mat.m)) return false; + + // And multiply that by A' to get our solution. + for(c = 0; c < mat.n; c++) { + double sum = 0; + for(i = 0; i < mat.m; i++) { + sum += mat.A.num[i][c]*mat.Z[i]; + } + mat.X[c] = sum * mat.scale[c]; + } + return true; +} + +bool System::NewtonSolve(int tag) { + + int iter = 0; + bool converged = false; + int i; + + // Evaluate the functions at our operating point. + for(i = 0; i < mat.m; i++) { + mat.B.num[i] = (mat.B.sym[i])->Eval(); + } + do { + // And evaluate the Jacobian at our initial operating point. + EvalJacobian(); + + if(!SolveLeastSquares()) break; + + // Take the Newton step; + // J(x_n) (x_{n+1} - x_n) = 0 - F(x_n) + for(i = 0; i < mat.n; i++) { + Param *p = param.FindById(mat.param[i]); + p->val -= mat.X[i]; + if(isnan(p->val)) { + // Very bad, and clearly not convergent + return false; + } + } + + // Re-evalute the functions, since the params have just changed. + for(i = 0; i < mat.m; i++) { + mat.B.num[i] = (mat.B.sym[i])->Eval(); + } + // Check for convergence + converged = true; + for(i = 0; i < mat.m; i++) { + if(isnan(mat.B.num[i])) { + return false; + } + if(ffabs(mat.B.num[i]) > CONVERGE_TOLERANCE) { + converged = false; + break; + } + } + } while(iter++ < 50 && !converged); + + return converged; +} + +void System::WriteEquationsExceptFor(hConstraint hc, Group *g) { + int i; + // Generate all the equations from constraints in this group + for(i = 0; i < SK.constraint.n; i++) { + ConstraintBase *c = &(SK.constraint.elem[i]); + if(c->group.v != g->h.v) continue; + if(c->h.v == hc.v) continue; + + if(c->HasLabel() && c->type != Constraint::COMMENT && + g->allDimsReference) + { + // When all dimensions are reference, we adjust them to display + // the correct value, and then don't generate any equations. + c->ModifyToSatisfy(); + continue; + } + if(g->relaxConstraints && c->type != Constraint::POINTS_COINCIDENT) { + // When the constraints are relaxed, we keep only the point- + // coincident constraints, and the constraints generated by + // the entities and groups. + continue; + } + + c->Generate(&eq); + } + // And the equations from entities + for(i = 0; i < SK.entity.n; i++) { + EntityBase *e = &(SK.entity.elem[i]); + if(e->group.v != g->h.v) continue; + + e->GenerateEquations(&eq); + } + // And from the groups themselves + g->GenerateEquations(&eq); +} + +void System::FindWhichToRemoveToFixJacobian(Group *g, List *bad) { + int a, i; + + for(a = 0; a < 2; a++) { + for(i = 0; i < SK.constraint.n; i++) { + ConstraintBase *c = &(SK.constraint.elem[i]); + if(c->group.v != g->h.v) continue; + if((c->type == Constraint::POINTS_COINCIDENT && a == 0) || + (c->type != Constraint::POINTS_COINCIDENT && a == 1)) + { + // Do the constraints in two passes: first everything but + // the point-coincident constraints, then only those + // constraints (so they appear last in the list). + continue; + } + + param.ClearTags(); + eq.Clear(); + WriteEquationsExceptFor(c->h, g); + eq.ClearTags(); + + // It's a major speedup to solve the easy ones by substitution here, + // and that doesn't break anything. + SolveBySubstitution(); + + WriteJacobian(0); + EvalJacobian(); + + int rank = CalculateRank(); + if(rank == mat.m) { + // We fixed it by removing this constraint + bad->Add(&(c->h)); + } + } + } +} + +int System::Solve(Group *g, int *dof, List *bad, + bool andFindBad, bool andFindFree) +{ + WriteEquationsExceptFor(Constraint::NO_CONSTRAINT, g); + + int i; + bool rankOk; + +/* + dbp("%d equations", eq.n); + for(i = 0; i < eq.n; i++) { + dbp(" %.3f = %s = 0", eq.elem[i].e->Eval(), eq.elem[i].e->Print()); + } + dbp("%d parameters", param.n); + for(i = 0; i < param.n; i++) { + dbp(" param %08x at %.3f", param.elem[i].h.v, param.elem[i].val); + } */ + + // All params and equations are assigned to group zero. + param.ClearTags(); + eq.ClearTags(); + + SolveBySubstitution(); + + // Before solving the big system, see if we can find any equations that + // are soluble alone. This can be a huge speedup. We don't know whether + // the system is consistent yet, but if it isn't then we'll catch that + // later. + int alone = 1; + for(i = 0; i < eq.n; i++) { + Equation *e = &(eq.elem[i]); + if(e->tag != 0) continue; + + hParam hp = e->e->ReferencedParams(¶m); + if(hp.v == Expr::NO_PARAMS.v) continue; + if(hp.v == Expr::MULTIPLE_PARAMS.v) continue; + + Param *p = param.FindById(hp); + if(p->tag != 0) continue; // let rank test catch inconsistency + + e->tag = alone; + p->tag = alone; + WriteJacobian(alone); + if(!NewtonSolve(alone)) { + // Failed to converge, bail out early + goto didnt_converge; + } + alone++; + } + + // Now write the Jacobian for what's left, and do a rank test; that + // tells us if the system is inconsistently constrained. + if(!WriteJacobian(0)) { + return System::TOO_MANY_UNKNOWNS; + } + + rankOk = TestRank(); + + // And do the leftovers as one big system + if(!NewtonSolve(0)) { + goto didnt_converge; + } + + rankOk = TestRank(); + if(!rankOk) { + if(!g->allowRedundant) { + if(andFindBad) FindWhichToRemoveToFixJacobian(g, bad); + return System::REDUNDANT_OKAY; + } + } + + // This is not the full Jacobian, but any substitutions or single-eq + // solves removed one equation and one unknown, therefore no effect + // on the number of DOF. + if(dof) *dof = mat.n - mat.m; + + // If requested, find all the free (unbound) variables. This might be + // more than the number of degrees of freedom. Don't always do this, + // because the display would get annoying and it's slow. + for(i = 0; i < param.n; i++) { + Param *p = &(param.elem[i]); + p->free = false; + + if(andFindFree) { + if(p->tag == 0) { + p->tag = VAR_DOF_TEST; + WriteJacobian(0); + EvalJacobian(); + int rank = CalculateRank(); + if(rank == mat.m) { + p->free = true; + } + p->tag = 0; + } + } + } + + // System solved correctly, so write the new values back in to the + // main parameter table. + for(i = 0; i < param.n; i++) { + Param *p = &(param.elem[i]); + double val; + if(p->tag == VAR_SUBSTITUTED) { + val = param.FindById(p->substd)->val; + } else { + val = p->val; + } + Param *pp = SK.GetParam(p->h); + pp->val = val; + pp->known = true; + pp->free = p->free; + } + return rankOk ? System::SOLVED_OKAY : System::REDUNDANT_OKAY; + +didnt_converge: + SK.constraint.ClearTags(); + for(i = 0; i < eq.n; i++) { + if(ffabs(mat.B.num[i]) > CONVERGE_TOLERANCE || isnan(mat.B.num[i])) { + // This constraint is unsatisfied. + if(!mat.eq[i].isFromConstraint()) continue; + + hConstraint hc = mat.eq[i].constraint(); + ConstraintBase *c = SK.constraint.FindByIdNoOops(hc); + if(!c) continue; + // Don't double-show constraints that generated multiple + // unsatisfied equations + if(!c->tag) { + bad->Add(&(c->h)); + c->tag = 1; + } + } + } + + return rankOk ? System::DIDNT_CONVERGE : System::REDUNDANT_DIDNT_CONVERGE; +} + +void System::Clear(void) { + entity.Clear(); + param.Clear(); + eq.Clear(); + dragged.Clear(); +} diff --git a/src/textscreens.cpp b/src/textscreens.cpp new file mode 100644 index 0000000..e00b2bd --- /dev/null +++ b/src/textscreens.cpp @@ -0,0 +1,806 @@ +//----------------------------------------------------------------------------- +// The text-based browser window, used to view the structure of the model by +// groups and for other similar purposes. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +//----------------------------------------------------------------------------- +// A navigation bar that always appears at the top of the window, with a +// link to bring us back home. +//----------------------------------------------------------------------------- +void TextWindow::ScreenHome(int link, uint32_t v) { + SS.TW.GoToScreen(SCREEN_LIST_OF_GROUPS); +} +void TextWindow::ShowHeader(bool withNav) { + ClearScreen(); + + const char *header; + std::string desc; + if(SS.GW.LockedInWorkplane()) { + header = "in plane: "; + desc = SK.GetEntity(SS.GW.ActiveWorkplane())->DescriptionString(); + } else { + header = "drawing / constraining in 3d"; + desc = ""; + } + + // Navigation buttons + if(withNav) { + Printf(false, " %Fl%Lh%fhome%E %Ft%s%E%s", + (&TextWindow::ScreenHome), header, desc.c_str()); + } else { + Printf(false, " %Ft%s%E%s", header, desc.c_str()); + } + + // Leave space for the icons that are painted here. + Printf(false, ""); + Printf(false, ""); +} + +//----------------------------------------------------------------------------- +// The screen that shows a list of every group in the sketch, with options +// to hide or show them, and to view them in detail. This is our home page. +//----------------------------------------------------------------------------- +void TextWindow::ScreenSelectGroup(int link, uint32_t v) { + SS.TW.GoToScreen(SCREEN_GROUP_INFO); + SS.TW.shown.group.v = v; +} +void TextWindow::ScreenToggleGroupShown(int link, uint32_t v) { + hGroup hg = { v }; + Group *g = SK.GetGroup(hg); + g->visible = !(g->visible); + // If a group was just shown, then it might not have been generated + // previously, so regenerate. + SS.GenerateAll(); +} +void TextWindow::ScreenShowGroupsSpecial(int link, uint32_t v) { + bool state = link == 's'; + for(int i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + g->visible = state; + } +} +void TextWindow::ScreenActivateGroup(int link, uint32_t v) { + SS.GW.activeGroup.v = v; + SK.GetGroup(SS.GW.activeGroup)->Activate(); + SS.GW.ClearSuper(); +} +void TextWindow::ReportHowGroupSolved(hGroup hg) { + SS.GW.ClearSuper(); + SS.TW.GoToScreen(SCREEN_GROUP_SOLVE_INFO); + SS.TW.shown.group.v = hg.v; + SS.ScheduleShowTW(); +} +void TextWindow::ScreenHowGroupSolved(int link, uint32_t v) { + if(SS.GW.activeGroup.v != v) { + ScreenActivateGroup(link, v); + } + SS.TW.GoToScreen(SCREEN_GROUP_SOLVE_INFO); + SS.TW.shown.group.v = v; +} +void TextWindow::ScreenShowConfiguration(int link, uint32_t v) { + SS.TW.GoToScreen(SCREEN_CONFIGURATION); +} +void TextWindow::ScreenShowEditView(int link, uint32_t v) { + SS.TW.GoToScreen(SCREEN_EDIT_VIEW); +} +void TextWindow::ScreenGoToWebsite(int link, uint32_t v) { + OpenWebsite("http://solvespace.com/txtlink"); +} +void TextWindow::ShowListOfGroups(void) { + const char *radioTrue = " " RADIO_TRUE " ", + *radioFalse = " " RADIO_FALSE " ", + *checkTrue = " " CHECK_TRUE " ", + *checkFalse = " " CHECK_FALSE " "; + + Printf(true, "%Ft active"); + Printf(false, "%Ft shown ok group-name%E"); + int i; + bool afterActive = false; + for(i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + std::string s = g->DescriptionString(); + bool active = (g->h.v == SS.GW.activeGroup.v); + bool shown = g->visible; + bool ok = g->IsSolvedOkay(); + bool ref = (g->h.v == Group::HGROUP_REFERENCES.v); + Printf(false, "%Bp%Fd " + "%Ft%s%Fb%D%f%Ll%s%E " + "%Fb%s%D%f%Ll%s%E " + "%Fp%D%f%s%Ll%s%E " + "%Fl%Ll%D%f%s", + // Alternate between light and dark backgrounds, for readability + (i & 1) ? 'd' : 'a', + // Link that activates the group + ref ? " " : "", + g->h.v, (&TextWindow::ScreenActivateGroup), + ref ? "" : (active ? radioTrue : radioFalse), + // Link that hides or shows the group + afterActive ? " - " : "", + g->h.v, (&TextWindow::ScreenToggleGroupShown), + afterActive ? "" : (shown ? checkTrue : checkFalse), + // Link to the errors, if a problem occured while solving + ok ? 's' : 'x', g->h.v, (&TextWindow::ScreenHowGroupSolved), + ok ? "ok" : "", + ok ? "" : "NO", + // Link to a screen that gives more details on the group + g->h.v, (&TextWindow::ScreenSelectGroup), s.c_str()); + + if(active) afterActive = true; + } + + Printf(true, " %Fl%Ls%fshow all%E / %Fl%Lh%fhide all%E", + &(TextWindow::ScreenShowGroupsSpecial), + &(TextWindow::ScreenShowGroupsSpecial)); + Printf(true, " %Fl%Ls%fline styles%E /" + " %Fl%Ls%fview%E /" + " %Fl%Ls%fconfiguration%E", + &(TextWindow::ScreenShowListOfStyles), + &(TextWindow::ScreenShowEditView), + &(TextWindow::ScreenShowConfiguration)); +} + + +//----------------------------------------------------------------------------- +// The screen that shows information about a specific group, and allows the +// user to edit various things about it. +//----------------------------------------------------------------------------- +void TextWindow::ScreenHoverConstraint(int link, uint32_t v) { + if(!SS.GW.showConstraints) return; + + hConstraint hc = { v }; + Constraint *c = SK.GetConstraint(hc); + if(c->group.v != SS.GW.activeGroup.v) { + // Only constraints in the active group are visible + return; + } + SS.GW.hover.Clear(); + SS.GW.hover.constraint = hc; + SS.GW.hover.emphasized = true; +} +void TextWindow::ScreenHoverRequest(int link, uint32_t v) { + SS.GW.hover.Clear(); + hRequest hr = { v }; + SS.GW.hover.entity = hr.entity(0); + SS.GW.hover.emphasized = true; +} +void TextWindow::ScreenSelectConstraint(int link, uint32_t v) { + SS.GW.ClearSelection(); + GraphicsWindow::Selection sel = {}; + sel.constraint.v = v; + SS.GW.selection.Add(&sel); +} +void TextWindow::ScreenSelectRequest(int link, uint32_t v) { + SS.GW.ClearSelection(); + GraphicsWindow::Selection sel = {}; + hRequest hr = { v }; + sel.entity = hr.entity(0); + SS.GW.selection.Add(&sel); +} + +void TextWindow::ScreenChangeGroupOption(int link, uint32_t v) { + SS.UndoRemember(); + Group *g = SK.GetGroup(SS.TW.shown.group); + + switch(link) { + case 's': g->subtype = Group::ONE_SIDED; break; + case 'S': g->subtype = Group::TWO_SIDED; break; + + case 'k': g->skipFirst = true; break; + case 'K': g->skipFirst = false; break; + + case 'c': + // When an extrude group is first created, it's positioned for a union + // extrusion. If no constraints were added, flip it when we switch between + // union and difference modes to avoid manual work doing the smae. + if(g->meshCombine != (int)v && g->GetNumConstraints() == 0 && + (v == Group::COMBINE_AS_DIFFERENCE || + g->meshCombine == Group::COMBINE_AS_DIFFERENCE)) { + g->ExtrusionForceVectorTo(g->ExtrusionGetVector().Negated()); + } + g->meshCombine = v; + break; + + case 'P': g->suppress = !(g->suppress); break; + + case 'r': g->relaxConstraints = !(g->relaxConstraints); break; + + case 'e': g->allowRedundant = !(g->allowRedundant); break; + + case 'v': g->visible = !(g->visible); break; + + case 'd': g->allDimsReference = !(g->allDimsReference); break; + + case 'f': g->forceToMesh = !(g->forceToMesh); break; + } + + SS.MarkGroupDirty(g->h); + SS.GenerateAll(); + SS.GW.ClearSuper(); +} + +void TextWindow::ScreenColor(int link, uint32_t v) { + SS.UndoRemember(); + + Group *g = SK.GetGroup(SS.TW.shown.group); + SS.TW.ShowEditControlWithColorPicker(3, g->color); + SS.TW.edit.meaning = EDIT_GROUP_COLOR; +} +void TextWindow::ScreenOpacity(int link, uint32_t v) { + Group *g = SK.GetGroup(SS.TW.shown.group); + + SS.TW.ShowEditControl(11, ssprintf("%.2f", g->color.alphaF())); + SS.TW.edit.meaning = EDIT_GROUP_OPACITY; + SS.TW.edit.group.v = g->h.v; +} +void TextWindow::ScreenChangeExprA(int link, uint32_t v) { + Group *g = SK.GetGroup(SS.TW.shown.group); + + SS.TW.ShowEditControl(10, ssprintf("%d", (int)g->valA)); + SS.TW.edit.meaning = EDIT_TIMES_REPEATED; + SS.TW.edit.group.v = v; +} +void TextWindow::ScreenChangeGroupName(int link, uint32_t v) { + Group *g = SK.GetGroup(SS.TW.shown.group); + SS.TW.ShowEditControl(12, g->DescriptionString().substr(5)); + SS.TW.edit.meaning = EDIT_GROUP_NAME; + SS.TW.edit.group.v = v; +} +void TextWindow::ScreenChangeGroupScale(int link, uint32_t v) { + Group *g = SK.GetGroup(SS.TW.shown.group); + + SS.TW.ShowEditControl(13, ssprintf("%.3f", g->scale)); + SS.TW.edit.meaning = EDIT_GROUP_SCALE; + SS.TW.edit.group.v = v; +} +void TextWindow::ScreenDeleteGroup(int link, uint32_t v) { + SS.UndoRemember(); + + hGroup hg = SS.TW.shown.group; + if(hg.v == SS.GW.activeGroup.v) { + SS.GW.activeGroup = SK.GetGroup(SS.GW.activeGroup)->PreviousGroup()->h; + } + + // Reset the text window, since we're displaying information about + // the group that's about to get deleted. + SS.TW.ClearSuper(); + + // This is a major change, so let's re-solve everything. + SK.group.RemoveById(hg); + SS.GenerateAll(SolveSpaceUI::GENERATE_ALL); + + // Reset the graphics window. This will also recreate the default + // group if it was removed. + SS.GW.ClearSuper(); +} +void TextWindow::ShowGroupInfo(void) { + Group *g = SK.GetGroup(shown.group); + const char *s = "???"; + + if(shown.group.v == Group::HGROUP_REFERENCES.v) { + Printf(true, "%FtGROUP %E%s", g->DescriptionString().c_str()); + goto list_items; + } else { + Printf(true, "%FtGROUP %E%s [%Fl%Ll%D%frename%E/%Fl%Ll%D%fdel%E]", + g->DescriptionString().c_str(), + g->h.v, &TextWindow::ScreenChangeGroupName, + g->h.v, &TextWindow::ScreenDeleteGroup); + } + + if(g->type == Group::LATHE) { + Printf(true, " %Ftlathe plane sketch"); + } else if(g->type == Group::EXTRUDE || g->type == Group::ROTATE || + g->type == Group::TRANSLATE) + { + if(g->type == Group::EXTRUDE) { + s = "extrude plane sketch"; + } else if(g->type == Group::TRANSLATE) { + s = "translate original sketch"; + } else if(g->type == Group::ROTATE) { + s = "rotate original sketch"; + } + Printf(true, " %Ft%s%E", s); + + bool one = (g->subtype == Group::ONE_SIDED); + Printf(false, + "%Ba %f%Ls%Fd%s one-sided%E " + "%f%LS%Fd%s two-sided%E", + &TextWindow::ScreenChangeGroupOption, + one ? RADIO_TRUE : RADIO_FALSE, + &TextWindow::ScreenChangeGroupOption, + !one ? RADIO_TRUE : RADIO_FALSE); + + if(g->type == Group::ROTATE || g->type == Group::TRANSLATE) { + if(g->subtype == Group::ONE_SIDED) { + bool skip = g->skipFirst; + Printf(false, + "%Bd %Ftstart %f%LK%Fd%s with original%E " + "%f%Lk%Fd%s with copy #1%E", + &ScreenChangeGroupOption, + !skip ? RADIO_TRUE : RADIO_FALSE, + &ScreenChangeGroupOption, + skip ? RADIO_TRUE : RADIO_FALSE); + } + + int times = (int)(g->valA); + Printf(false, "%Bp %Ftrepeat%E %d time%s %Fl%Ll%D%f[change]%E", + (g->subtype == Group::ONE_SIDED) ? 'a' : 'd', + times, times == 1 ? "" : "s", + g->h.v, &TextWindow::ScreenChangeExprA); + } + } else if(g->type == Group::LINKED) { + Printf(true, " %Ftlink geometry from file%E"); + Printf(false, "%Ba '%s'", g->linkFileRel.c_str()); + Printf(false, "%Bd %Ftscaled by%E %# %Fl%Ll%f%D[change]%E", + g->scale, + &TextWindow::ScreenChangeGroupScale, g->h.v); + } else if(g->type == Group::DRAWING_3D) { + Printf(true, " %Ftsketch in 3d%E"); + } else if(g->type == Group::DRAWING_WORKPLANE) { + Printf(true, " %Ftsketch in new workplane%E"); + } else { + Printf(true, "???"); + } + Printf(false, ""); + + if(g->type == Group::EXTRUDE || + g->type == Group::LATHE || + g->type == Group::LINKED) + { + bool un = (g->meshCombine == Group::COMBINE_AS_UNION); + bool diff = (g->meshCombine == Group::COMBINE_AS_DIFFERENCE); + bool asy = (g->meshCombine == Group::COMBINE_AS_ASSEMBLE); + bool asa = (g->type == Group::LINKED); + + Printf(false, " %Ftsolid model as"); + Printf(false, "%Ba %f%D%Lc%Fd%s union%E " + "%f%D%Lc%Fd%s difference%E " + "%f%D%Lc%Fd%s%s%E ", + &TextWindow::ScreenChangeGroupOption, + Group::COMBINE_AS_UNION, + un ? RADIO_TRUE : RADIO_FALSE, + &TextWindow::ScreenChangeGroupOption, + Group::COMBINE_AS_DIFFERENCE, + diff ? RADIO_TRUE : RADIO_FALSE, + &TextWindow::ScreenChangeGroupOption, + Group::COMBINE_AS_ASSEMBLE, + asa ? (asy ? RADIO_TRUE : RADIO_FALSE) : " ", + asa ? " assemble" : ""); + + if(g->type == Group::EXTRUDE || + g->type == Group::LATHE) + { + Printf(false, + "%Bd %Ftcolor %E%Bz %Bd (%@, %@, %@) %f%D%Lf%Fl[change]%E", + &g->color, + g->color.redF(), g->color.greenF(), g->color.blueF(), + ScreenColor, top[rows-1] + 2); + Printf(false, "%Bd %Ftopacity%E %@ %f%Lf%Fl[change]%E", + g->color.alphaF(), + &TextWindow::ScreenOpacity); + } else if(g->type == Group::LINKED) { + Printf(false, " %Fd%f%LP%s suppress this group's solid model", + &TextWindow::ScreenChangeGroupOption, + g->suppress ? CHECK_TRUE : CHECK_FALSE); + } + + Printf(false, ""); + } + + Printf(false, " %f%Lv%Fd%s show entities from this group", + &TextWindow::ScreenChangeGroupOption, + g->visible ? CHECK_TRUE : CHECK_FALSE); + + Group *pg; pg = g->PreviousGroup(); + if(pg && pg->runningMesh.IsEmpty() && g->thisMesh.IsEmpty()) { + Printf(false, " %f%Lf%Fd%s force NURBS surfaces to triangle mesh", + &TextWindow::ScreenChangeGroupOption, + g->forceToMesh ? CHECK_TRUE : CHECK_FALSE); + } else { + Printf(false, " (model already forced to triangle mesh)"); + } + + Printf(true, " %f%Lr%Fd%s relax constraints and dimensions", + &TextWindow::ScreenChangeGroupOption, + g->relaxConstraints ? CHECK_TRUE : CHECK_FALSE); + + Printf(false, " %f%Le%Fd%s allow redundant constraints", + &TextWindow::ScreenChangeGroupOption, + g->allowRedundant ? CHECK_TRUE : CHECK_FALSE); + + Printf(false, " %f%Ld%Fd%s treat all dimensions as reference", + &TextWindow::ScreenChangeGroupOption, + g->allDimsReference ? CHECK_TRUE : CHECK_FALSE); + + if(g->booleanFailed) { + Printf(false, ""); + Printf(false, "The Boolean operation failed. It may be "); + Printf(false, "possible to fix the problem by choosing "); + Printf(false, "'force NURBS surfaces to triangle mesh'."); + } + +list_items: + Printf(false, ""); + Printf(false, "%Ft requests in group"); + + int i, a = 0; + for(i = 0; i < SK.request.n; i++) { + Request *r = &(SK.request.elem[i]); + + if(r->group.v == shown.group.v) { + std::string s = r->DescriptionString(); + Printf(false, "%Bp %Fl%Ll%D%f%h%s%E", + (a & 1) ? 'd' : 'a', + r->h.v, (&TextWindow::ScreenSelectRequest), + &(TextWindow::ScreenHoverRequest), s.c_str()); + a++; + } + } + if(a == 0) Printf(false, "%Ba (none)"); + + a = 0; + Printf(false, ""); + Printf(false, "%Ft constraints in group (%d DOF)", g->solved.dof); + for(i = 0; i < SK.constraint.n; i++) { + Constraint *c = &(SK.constraint.elem[i]); + + if(c->group.v == shown.group.v) { + std::string s = c->DescriptionString(); + Printf(false, "%Bp %Fl%Ll%D%f%h%s%E %s", + (a & 1) ? 'd' : 'a', + c->h.v, (&TextWindow::ScreenSelectConstraint), + (&TextWindow::ScreenHoverConstraint), s.c_str(), + c->reference ? "(ref)" : ""); + a++; + } + } + if(a == 0) Printf(false, "%Ba (none)"); +} + +//----------------------------------------------------------------------------- +// The screen that's displayed when the sketch fails to solve. A report of +// what failed, and (if the problem is a singular Jacobian) a list of +// constraints that could be removed to fix it. +//----------------------------------------------------------------------------- +void TextWindow::ScreenAllowRedundant(int link, uint32_t v) { + SS.UndoRemember(); + + Group *g = SK.GetGroup(SS.TW.shown.group); + g->allowRedundant = true; + SS.GenerateAll(); + + SS.TW.shown.screen = SCREEN_GROUP_INFO; + SS.TW.Show(); +} +void TextWindow::ShowGroupSolveInfo(void) { + Group *g = SK.GetGroup(shown.group); + if(g->IsSolvedOkay()) { + // Go back to the default group info screen + shown.screen = SCREEN_GROUP_INFO; + Show(); + return; + } + + Printf(true, "%FtGROUP %E%s", g->DescriptionString().c_str()); + switch(g->solved.how) { + case System::DIDNT_CONVERGE: + Printf(true, "%FxSOLVE FAILED!%Fd unsolvable constraints"); + Printf(true, "the following constraints are incompatible"); + break; + + case System::REDUNDANT_DIDNT_CONVERGE: + Printf(true, "%FxSOLVE FAILED!%Fd unsolvable constraints"); + Printf(true, "the following constraints are unsatisfied"); + break; + + case System::REDUNDANT_OKAY: + Printf(true, "%FxSOLVE FAILED!%Fd redundant constraints"); + Printf(true, "remove any one of these to fix it"); + break; + + case System::TOO_MANY_UNKNOWNS: + Printf(true, "Too many unknowns in a single group!"); + return; + } + + for(int i = 0; i < g->solved.remove.n; i++) { + hConstraint hc = g->solved.remove.elem[i]; + Constraint *c = SK.constraint.FindByIdNoOops(hc); + if(!c) continue; + + Printf(false, "%Bp %Fl%Ll%D%f%h%s%E", + (i & 1) ? 'd' : 'a', + c->h.v, (&TextWindow::ScreenSelectConstraint), + (&TextWindow::ScreenHoverConstraint), + c->DescriptionString().c_str()); + } + + Printf(true, "It may be possible to fix the problem "); + Printf(false, "by selecting Edit -> Undo."); + + if(g->solved.how == System::REDUNDANT_OKAY) { + Printf(true, "It is possible to suppress this error "); + Printf(false, "by %Fl%f%Llallowing redundant constraints%E in ", + &TextWindow::ScreenAllowRedundant); + Printf(false, "this group."); + } +} + +//----------------------------------------------------------------------------- +// When we're stepping a dimension. User specifies the finish value, and +// how many steps to take in between current and finish, re-solving each +// time. +//----------------------------------------------------------------------------- +void TextWindow::ScreenStepDimFinish(int link, uint32_t v) { + SS.TW.edit.meaning = EDIT_STEP_DIM_FINISH; + std::string edit_value; + if(SS.TW.shown.dimIsDistance) { + edit_value = SS.MmToString(SS.TW.shown.dimFinish); + } else { + edit_value = ssprintf("%.3f", SS.TW.shown.dimFinish); + } + SS.TW.ShowEditControl(12, edit_value); +} +void TextWindow::ScreenStepDimSteps(int link, uint32_t v) { + SS.TW.edit.meaning = EDIT_STEP_DIM_STEPS; + SS.TW.ShowEditControl(12, ssprintf("%d", SS.TW.shown.dimSteps)); +} +void TextWindow::ScreenStepDimGo(int link, uint32_t v) { + hConstraint hc = SS.TW.shown.constraint; + Constraint *c = SK.constraint.FindByIdNoOops(hc); + if(c) { + SS.UndoRemember(); + double start = c->valA, finish = SS.TW.shown.dimFinish; + int i, n = SS.TW.shown.dimSteps; + for(i = 1; i <= n; i++) { + c = SK.GetConstraint(hc); + c->valA = start + ((finish - start)*i)/n; + SS.MarkGroupDirty(c->group); + SS.GenerateAll(); + if(!SS.ActiveGroupsOkay()) { + // Failed to solve, so quit + break; + } + PaintGraphics(); + } + } + InvalidateGraphics(); + SS.TW.GoToScreen(SCREEN_LIST_OF_GROUPS); +} +void TextWindow::ShowStepDimension(void) { + Constraint *c = SK.constraint.FindByIdNoOops(shown.constraint); + if(!c) { + shown.screen = SCREEN_LIST_OF_GROUPS; + Show(); + return; + } + + Printf(true, "%FtSTEP DIMENSION%E %s", c->DescriptionString().c_str()); + + if(shown.dimIsDistance) { + Printf(true, "%Ba %Ftstart%E %s", SS.MmToString(c->valA).c_str()); + Printf(false, "%Bd %Ftfinish%E %s %Fl%Ll%f[change]%E", + SS.MmToString(shown.dimFinish).c_str(), &ScreenStepDimFinish); + } else { + Printf(true, "%Ba %Ftstart%E %@", c->valA); + Printf(false, "%Bd %Ftfinish%E %@ %Fl%Ll%f[change]%E", + shown.dimFinish, &ScreenStepDimFinish); + } + Printf(false, "%Ba %Ftsteps%E %d %Fl%Ll%f%D[change]%E", + shown.dimSteps, &ScreenStepDimSteps); + + Printf(true, " %Fl%Ll%fstep dimension now%E", &ScreenStepDimGo); + + Printf(true, "(or %Fl%Ll%fcancel operation%E)", &ScreenHome); +} + +//----------------------------------------------------------------------------- +// When we're creating tangent arcs (as requests, not as some parametric +// thing). User gets to specify the radius, and whether the old untrimmed +// curves are kept or deleted. +//----------------------------------------------------------------------------- +void TextWindow::ScreenChangeTangentArc(int link, uint32_t v) { + switch(link) { + case 'r': { + SS.TW.edit.meaning = EDIT_TANGENT_ARC_RADIUS; + SS.TW.ShowEditControl(3, SS.MmToString(SS.tangentArcRadius)); + break; + } + + case 'a': SS.tangentArcManual = !SS.tangentArcManual; break; + case 'd': SS.tangentArcDeleteOld = !SS.tangentArcDeleteOld; break; + } +} +void TextWindow::ShowTangentArc(void) { + Printf(true, "%FtTANGENT ARC PARAMETERS%E"); + + Printf(true, "%Ft radius of created arc%E"); + if(SS.tangentArcManual) { + Printf(false, "%Ba %s %Fl%Lr%f[change]%E", + SS.MmToString(SS.tangentArcRadius).c_str(), + &(TextWindow::ScreenChangeTangentArc)); + } else { + Printf(false, "%Ba automatic"); + } + + Printf(false, ""); + Printf(false, " %Fd%f%La%s choose radius automatically%E", + &ScreenChangeTangentArc, + !SS.tangentArcManual ? CHECK_TRUE : CHECK_FALSE); + Printf(false, " %Fd%f%Ld%s delete original entities afterward%E", + &ScreenChangeTangentArc, + SS.tangentArcDeleteOld ? CHECK_TRUE : CHECK_FALSE); + + Printf(false, ""); + Printf(false, "To create a tangent arc at a point,"); + Printf(false, "select that point and then choose"); + Printf(false, "Sketch -> Tangent Arc at Point."); + Printf(true, "(or %Fl%Ll%fback to home screen%E)", &ScreenHome); +} + +//----------------------------------------------------------------------------- +// The edit control is visible, and the user just pressed enter. +//----------------------------------------------------------------------------- +void TextWindow::EditControlDone(const char *s) { + edit.showAgain = false; + + switch(edit.meaning) { + case EDIT_TIMES_REPEATED: { + Expr *e = Expr::From(s, true); + if(e) { + SS.UndoRemember(); + + double ev = e->Eval(); + if((int)ev < 1) { + Error("Can't repeat fewer than 1 time."); + break; + } + if((int)ev > 999) { + Error("Can't repeat more than 999 times."); + break; + } + + Group *g = SK.GetGroup(edit.group); + g->valA = ev; + + if(g->type == Group::ROTATE) { + int i, c = 0; + for(i = 0; i < SK.constraint.n; i++) { + if(SK.constraint.elem[i].group.v == g->h.v) c++; + } + // If the group does not contain any constraints, then + // set the numerical guess to space the copies uniformly + // over one rotation. Don't touch the guess if we're + // already constrained, because that would break + // convergence. + if(c == 0) { + double copies = (g->skipFirst) ? (ev + 1) : ev; + SK.GetParam(g->h.param(3))->val = PI/(2*copies); + } + } + + SS.MarkGroupDirty(g->h); + SS.ScheduleGenerateAll(); + } + break; + } + case EDIT_GROUP_NAME: { + if(!*s) { + Error("Group name cannot be empty"); + } else { + SS.UndoRemember(); + + Group *g = SK.GetGroup(edit.group); + g->name = s; + } + break; + } + case EDIT_GROUP_SCALE: { + Expr *e = Expr::From(s, true); + if(e) { + double ev = e->Eval(); + if(fabs(ev) < 1e-6) { + Error("Scale cannot be zero."); + } else { + Group *g = SK.GetGroup(edit.group); + g->scale = ev; + SS.MarkGroupDirty(g->h); + SS.ScheduleGenerateAll(); + } + } + break; + } + case EDIT_GROUP_COLOR: { + Vector rgb; + if(sscanf(s, "%lf, %lf, %lf", &rgb.x, &rgb.y, &rgb.z)==3) { + rgb = rgb.ClampWithin(0, 1); + + Group *g = SK.group.FindByIdNoOops(SS.TW.shown.group); + if(!g) break; + g->color = RGBf(rgb.x, rgb.y, rgb.z); + + SS.MarkGroupDirty(g->h); + SS.ScheduleGenerateAll(); + SS.GW.ClearSuper(); + } else { + Error("Bad format: specify color as r, g, b"); + } + break; + } + case EDIT_GROUP_OPACITY: { + Expr *e = Expr::From(s, true); + if(e) { + double alpha = e->Eval(); + if(alpha < 0 || alpha > 1) { + Error("Opacity must be between zero and one."); + } else { + Group *g = SK.GetGroup(edit.group); + g->color.alpha = (int)(255.1f * alpha); + SS.MarkGroupDirty(g->h); + SS.ScheduleGenerateAll(); + SS.GW.ClearSuper(); + } + } + break; + } + case EDIT_TTF_TEXT: { + SS.UndoRemember(); + Request *r = SK.request.FindByIdNoOops(edit.request); + if(r) { + r->str = s; + SS.MarkGroupDirty(r->group); + SS.ScheduleGenerateAll(); + } + break; + } + case EDIT_STEP_DIM_FINISH: { + Expr *e = Expr::From(s, true); + if(!e) { + break; + } + if(shown.dimIsDistance) { + shown.dimFinish = SS.ExprToMm(e); + } else { + shown.dimFinish = e->Eval(); + } + break; + } + case EDIT_STEP_DIM_STEPS: + shown.dimSteps = min(300, max(1, atoi(s))); + break; + + case EDIT_TANGENT_ARC_RADIUS: { + Expr *e = Expr::From(s, true); + if(!e) break; + if(e->Eval() < LENGTH_EPS) { + Error("Radius cannot be zero or negative."); + break; + } + SS.tangentArcRadius = SS.ExprToMm(e); + break; + } + + default: { + int cnt = 0; + if(EditControlDoneForStyles(s)) cnt++; + if(EditControlDoneForConfiguration(s)) cnt++; + if(EditControlDoneForPaste(s)) cnt++; + if(EditControlDoneForView(s)) cnt++; + if(cnt > 1) { + // The identifiers were somehow assigned not uniquely? + oops(); + } + break; + } + } + InvalidateGraphics(); + SS.ScheduleShowTW(); + + if(!edit.showAgain) { + HideEditControl(); + edit.meaning = EDIT_NOTHING; + } +} + diff --git a/src/textwin.cpp b/src/textwin.cpp new file mode 100644 index 0000000..78e4308 --- /dev/null +++ b/src/textwin.cpp @@ -0,0 +1,1050 @@ +//----------------------------------------------------------------------------- +// Helper functions for the text-based browser window. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" +#include "generated/icons.h" + +const TextWindow::Color TextWindow::fgColors[] = { + { 'd', RGBi(255, 255, 255) }, + { 'l', RGBi(100, 100, 255) }, + { 't', RGBi(255, 200, 0) }, + { 'h', RGBi( 90, 90, 90) }, + { 's', RGBi( 40, 255, 40) }, + { 'm', RGBi(200, 200, 0) }, + { 'r', RGBi( 0, 0, 0) }, + { 'x', RGBi(255, 20, 20) }, + { 'i', RGBi( 0, 255, 255) }, + { 'g', RGBi(160, 160, 160) }, + { 'b', RGBi(200, 200, 200) }, + { 0, RGBi( 0, 0, 0) } +}; +const TextWindow::Color TextWindow::bgColors[] = { + { 'd', RGBi( 0, 0, 0) }, + { 't', RGBi( 34, 15, 15) }, + { 'a', RGBi( 25, 25, 25) }, + { 'r', RGBi(255, 255, 255) }, + { 0, RGBi( 0, 0, 0) } +}; + +bool TextWindow::SPACER = false; +TextWindow::HideShowIcon TextWindow::hideShowIcons[] = { + { &(SS.GW.showWorkplanes), Icon_workplane, "workplanes from inactive groups"}, + { &(SS.GW.showNormals), Icon_normal, "normals" }, + { &(SS.GW.showPoints), Icon_point, "points" }, + { &(SS.GW.showConstraints), Icon_constraint, "constraints and dimensions" }, + { &(SS.GW.showFaces), Icon_faces, "XXX - special cased" }, + { &SPACER, 0, 0 }, + { &(SS.GW.showShaded), Icon_shaded, "shaded view of solid model" }, + { &(SS.GW.showEdges), Icon_edges, "edges of solid model" }, + { &(SS.GW.showOutlines), Icon_outlines, "outline of solid model" }, + { &(SS.GW.showMesh), Icon_mesh, "triangle mesh of solid model" }, + { &SPACER, 0, 0 }, + { &(SS.GW.showHdnLines), Icon_hidden_lines, "hidden lines" }, + { 0, 0, 0 } +}; + +void TextWindow::MakeColorTable(const Color *in, float *out) { + int i; + for(i = 0; in[i].c != 0; i++) { + int c = in[i].c; + if(c < 0 || c > 255) oops(); + out[c*3 + 0] = in[i].color.redF(); + out[c*3 + 1] = in[i].color.greenF(); + out[c*3 + 2] = in[i].color.blueF(); + } +} + +void TextWindow::Init(void) { + ClearSuper(); +} + +void TextWindow::ClearSuper(void) { + HideEditControl(); + + // Cannot use *this = {} here because TextWindow instances + // are 2.4MB long; this causes stack overflows in prologue + // when built with MSVC, even with optimizations. + memset(this, 0, sizeof(*this)); + + MakeColorTable(fgColors, fgColorTable); + MakeColorTable(bgColors, bgColorTable); + + ClearScreen(); + Show(); +} + +void TextWindow::HideEditControl(void) { + editControl.colorPicker.show = false; + HideTextEditControl(); +} + +void TextWindow::ShowEditControl(int col, const std::string &str, int halfRow) { + if(halfRow < 0) halfRow = top[hoveredRow]; + editControl.halfRow = halfRow; + editControl.col = col; + + int x = LEFT_MARGIN + CHAR_WIDTH*col; + int y = (halfRow - SS.TW.scrollPos)*(LINE_HEIGHT/2); + + ShowTextEditControl(x, y + 18, str); +} + +void TextWindow::ShowEditControlWithColorPicker(int col, RgbaColor rgb) +{ + SS.ScheduleShowTW(); + + editControl.colorPicker.show = true; + editControl.colorPicker.rgb = rgb; + editControl.colorPicker.h = 0; + editControl.colorPicker.s = 0; + editControl.colorPicker.v = 1; + ShowEditControl(col, ssprintf("%.2f, %.2f, %.2f", rgb.redF(), rgb.greenF(), rgb.blueF())); +} + +void TextWindow::ClearScreen(void) { + int i, j; + for(i = 0; i < MAX_ROWS; i++) { + for(j = 0; j < MAX_COLS; j++) { + text[i][j] = ' '; + meta[i][j].fg = 'd'; + meta[i][j].bg = 'd'; + meta[i][j].link = NOT_A_LINK; + } + top[i] = i*2; + } + rows = 0; +} + +void TextWindow::Printf(bool halfLine, const char *fmt, ...) { + va_list vl; + va_start(vl, fmt); + + if(rows >= MAX_ROWS) return; + + int r, c; + r = rows; + top[r] = (r == 0) ? 0 : (top[r-1] + (halfLine ? 3 : 2)); + rows++; + + for(c = 0; c < MAX_COLS; c++) { + text[r][c] = ' '; + meta[r][c].link = NOT_A_LINK; + } + + char fg = 'd'; + char bg = 'd'; + RgbaColor bgRgb = RGBi(0, 0, 0); + int link = NOT_A_LINK; + uint32_t data = 0; + LinkFunction *f = NULL, *h = NULL; + + c = 0; + while(*fmt) { + char buf[1024]; + + if(*fmt == '%') { + fmt++; + if(*fmt == '\0') goto done; + strcpy(buf, ""); + switch(*fmt) { + case 'd': { + int v = va_arg(vl, int); + sprintf(buf, "%d", v); + break; + } + case 'x': { + unsigned int v = va_arg(vl, unsigned int); + sprintf(buf, "%08x", v); + break; + } + case '@': { + double v = va_arg(vl, double); + sprintf(buf, "%.2f", v); + break; + } + case '2': { + double v = va_arg(vl, double); + sprintf(buf, "%s%.2f", v < 0 ? "" : " ", v); + break; + } + case '3': { + double v = va_arg(vl, double); + sprintf(buf, "%s%.3f", v < 0 ? "" : " ", v); + break; + } + case '#': { + double v = va_arg(vl, double); + sprintf(buf, "%.3f", v); + break; + } + case 's': { + char *s = va_arg(vl, char *); + memcpy(buf, s, min(sizeof(buf), strlen(s)+1)); + break; + } + case 'c': { + // 'char' is promoted to 'int' when passed through '...' + int v = va_arg(vl, int); + if(v == 0) { + strcpy(buf, ""); + } else { + sprintf(buf, "%c", v); + } + break; + } + case 'E': + fg = 'd'; + // leave the background, though + link = NOT_A_LINK; + data = 0; + f = NULL; + h = NULL; + break; + + case 'F': + case 'B': { + char cc = fmt[1]; // color code + RgbaColor *rgbPtr = NULL; + switch(cc) { + case 0: goto done; // truncated directive + case 'p': cc = (char)va_arg(vl, int); break; + case 'z': rgbPtr = va_arg(vl, RgbaColor *); break; + } + if(*fmt == 'F') { + fg = cc; + } else { + bg = cc; + if(rgbPtr) bgRgb = *rgbPtr; + } + fmt++; + break; + } + case 'L': + if(fmt[1] == '\0') goto done; + fmt++; + if(*fmt == 'p') { + link = va_arg(vl, int); + } else { + link = *fmt; + } + break; + + case 'f': + f = va_arg(vl, LinkFunction *); + break; + + case 'h': + h = va_arg(vl, LinkFunction *); + break; + + case 'D': { + unsigned int v = va_arg(vl, unsigned int); + data = (uint32_t)v; + break; + } + case '%': + strcpy(buf, "%"); + break; + } + } else { + utf8_iterator it2(fmt), it1 = it2++; + strncpy(buf, fmt, it2 - it1); + buf[it2 - it1] = '\0'; + } + + for(utf8_iterator it(buf); *it; ++it) { + for(int i = 0; i < ssglBitmapCharWidth(*it); i++) { + if(c >= MAX_COLS) goto done; + text[r][c] = (i == 0) ? *it : ' '; + meta[r][c].fg = fg; + meta[r][c].bg = bg; + meta[r][c].bgRgb = bgRgb; + meta[r][c].link = link; + meta[r][c].data = data; + meta[r][c].f = f; + meta[r][c].h = h; + c++; + } + } + + fmt++; + } + while(c < MAX_COLS) { + meta[r][c].fg = fg; + meta[r][c].bg = bg; + meta[r][c].bgRgb = bgRgb; + c++; + } + +done: + va_end(vl); +} + +#define gs (SS.GW.gs) +void TextWindow::Show(void) { + if(!(SS.GW.pending.operation)) SS.GW.ClearPending(); + + SS.GW.GroupSelection(); + + // Make sure these tests agree with test used to draw indicator line on + // main list of groups screen. + if(SS.GW.pending.description) { + // A pending operation (that must be completed with the mouse in + // the graphics window) will preempt our usual display. + HideEditControl(); + ShowHeader(false); + Printf(false, ""); + Printf(false, "%s", SS.GW.pending.description); + Printf(true, "%Fl%f%Ll(cancel operation)%E", + &TextWindow::ScreenUnselectAll); + } else if((gs.n > 0 || gs.constraints > 0) && + shown.screen != SCREEN_PASTE_TRANSFORMED) + { + if(edit.meaning != EDIT_TTF_TEXT) HideEditControl(); + ShowHeader(false); + DescribeSelection(); + } else { + if(edit.meaning == EDIT_TTF_TEXT) HideEditControl(); + ShowHeader(true); + switch(shown.screen) { + default: + shown.screen = SCREEN_LIST_OF_GROUPS; + // fall through + case SCREEN_LIST_OF_GROUPS: ShowListOfGroups(); break; + case SCREEN_GROUP_INFO: ShowGroupInfo(); break; + case SCREEN_GROUP_SOLVE_INFO: ShowGroupSolveInfo(); break; + case SCREEN_CONFIGURATION: ShowConfiguration(); break; + case SCREEN_STEP_DIMENSION: ShowStepDimension(); break; + case SCREEN_LIST_OF_STYLES: ShowListOfStyles(); break; + case SCREEN_STYLE_INFO: ShowStyleInfo(); break; + case SCREEN_PASTE_TRANSFORMED: ShowPasteTransformed(); break; + case SCREEN_EDIT_VIEW: ShowEditView(); break; + case SCREEN_TANGENT_ARC: ShowTangentArc(); break; + } + } + Printf(false, ""); + + // Make sure there's room for the color picker + if(editControl.colorPicker.show) { + int pickerHeight = 25; + int halfRow = editControl.halfRow; + if(top[rows-1] - halfRow < pickerHeight && rows < MAX_ROWS) { + rows++; + top[rows-1] = halfRow + pickerHeight; + } + } + + InvalidateText(); +} + +void TextWindow::TimerCallback(void) +{ + tooltippedIcon = hoveredIcon; + InvalidateText(); +} + +void TextWindow::DrawOrHitTestIcons(int how, double mx, double my) +{ + int width, height; + GetTextWindowSize(&width, &height); + + int x = 20, y = 33 + LINE_HEIGHT; + y -= scrollPos*(LINE_HEIGHT/2); + + if(how == PAINT) { + double grey = 30.0/255; + double top = y - 28, bot = y + 4; + glColor4d(grey, grey, grey, 1.0); + ssglAxisAlignedQuad(0, width, top, bot); + } + + HideShowIcon *oldHovered = hoveredIcon; + if(how != PAINT) { + hoveredIcon = NULL; + } + + HideShowIcon *hsi; + for(hsi = &(hideShowIcons[0]); hsi->var; hsi++) { + if(hsi->var == &SPACER) { + // Draw a darker-grey spacer in between the groups of icons. + if(how == PAINT) { + int l = x, r = l + 4, + t = y, b = t - 24; + glColor4d(0.17, 0.17, 0.17, 1); + ssglAxisAlignedQuad(l, r, t, b); + } + x += 12; + continue; + } + + if(how == PAINT) { + glPushMatrix(); + glTranslated(x, y-24, 0); + // Only thing that matters about the color is the alpha, + // should be one for no transparency + glColor3d(0, 0, 0); + ssglDrawPixelsWithTexture(hsi->icon, 24, 24); + glPopMatrix(); + + if(hsi == hoveredIcon) { + glColor4d(1, 1, 0, 0.3); + ssglAxisAlignedQuad(x - 2, x + 26, y + 2, y - 26); + } + if(!*(hsi->var)) { + glColor4d(1, 0, 0, 0.6); + glLineWidth(2); + int s = 0, f = 24; + glBegin(GL_LINES); + glVertex2d(x+s, y-s); + glVertex2d(x+f, y-f); + glVertex2d(x+s, y-f); + glVertex2d(x+f, y-s); + glEnd(); + } + } else { + if(mx > x - 2 && mx < x + 26 && + my < y + 2 && my > y - 26) + { + // The mouse is hovered over this icon, so do the tooltip + // stuff. + if(hsi != tooltippedIcon) { + oldMousePos = Point2d::From(mx, my); + } + if(hsi != oldHovered || how == CLICK) { + SetTimerFor(1000); + } + hoveredIcon = hsi; + if(how == CLICK) { + SS.GW.ToggleBool(hsi->var); + } + } + } + + x += 32; + } + + if(how != PAINT && hoveredIcon != oldHovered) { + InvalidateText(); + } + + if(tooltippedIcon) { + if(how == PAINT) { + std::string str; + + if(tooltippedIcon->icon == Icon_faces) { + if(SS.GW.showFaces) { + str = "Don't make faces selectable with mouse"; + } else { + str = "Make faces selectable with mouse"; + } + } else { + str = ssprintf("%s %s", *(tooltippedIcon->var) ? "Hide" : "Show", + tooltippedIcon->tip); + } + + double ox = oldMousePos.x, oy = oldMousePos.y - LINE_HEIGHT; + ox += 3; + oy -= 3; + int tw = (str.length() + 1)*(CHAR_WIDTH - 1); + ox = min(ox, (double) (width - 25) - tw); + oy = max(oy, 5.0); + + ssglInitializeBitmapFont(); + glLineWidth(1); + glColor4d(1.0, 1.0, 0.6, 1.0); + ssglAxisAlignedQuad(ox, ox+tw, oy, oy+LINE_HEIGHT); + glColor4d(0.0, 0.0, 0.0, 1.0); + ssglAxisAlignedLineLoop(ox, ox+tw, oy, oy+LINE_HEIGHT); + + glColor4d(0, 0, 0, 1); + ssglBitmapText(str, Vector::From(ox+5, oy-3+LINE_HEIGHT, 0)); + } else { + if(!hoveredIcon || + (hoveredIcon != tooltippedIcon)) + { + tooltippedIcon = NULL; + InvalidateGraphics(); + } + // And if we're hovered, then we've set a timer that will cause + // us to show the tool tip later. + } + } +} + +//---------------------------------------------------------------------------- +// Given (x, y, z) = (h, s, v) in [0,6), [0,1], [0,1], return (x, y, z) = +// (r, g, b) all in [0, 1]. +//---------------------------------------------------------------------------- +Vector TextWindow::HsvToRgb(Vector hsv) { + if(hsv.x >= 6) hsv.x -= 6; + + Vector rgb; + double hmod2 = hsv.x; + while(hmod2 >= 2) hmod2 -= 2; + double x = (1 - fabs(hmod2 - 1)); + if(hsv.x < 1) { + rgb = Vector::From(1, x, 0); + } else if(hsv.x < 2) { + rgb = Vector::From(x, 1, 0); + } else if(hsv.x < 3) { + rgb = Vector::From(0, 1, x); + } else if(hsv.x < 4) { + rgb = Vector::From(0, x, 1); + } else if(hsv.x < 5) { + rgb = Vector::From(x, 0, 1); + } else { + rgb = Vector::From(1, 0, x); + } + double c = hsv.y*hsv.z; + double m = 1 - hsv.z; + rgb = rgb.ScaledBy(c); + rgb = rgb.Plus(Vector::From(m, m, m)); + + return rgb; +} + +uint8_t *TextWindow::HsvPattern2d(void) { + static uint8_t Texture[256*256*3]; + static bool Init; + + if(!Init) { + int i, j, p; + p = 0; + for(i = 0; i < 256; i++) { + for(j = 0; j < 256; j++) { + Vector hsv = Vector::From(6.0*i/255.0, 1.0*j/255.0, 1); + Vector rgb = HsvToRgb(hsv); + rgb = rgb.ScaledBy(255); + Texture[p++] = (uint8_t)rgb.x; + Texture[p++] = (uint8_t)rgb.y; + Texture[p++] = (uint8_t)rgb.z; + } + } + Init = true; + } + return Texture; +} + +uint8_t *TextWindow::HsvPattern1d(double h, double s) { + static uint8_t Texture[256*4]; + + int i, p; + p = 0; + for(i = 0; i < 256; i++) { + Vector hsv = Vector::From(6*h, s, 1.0*(255 - i)/255.0); + Vector rgb = HsvToRgb(hsv); + rgb = rgb.ScaledBy(255); + Texture[p++] = (uint8_t)rgb.x; + Texture[p++] = (uint8_t)rgb.y; + Texture[p++] = (uint8_t)rgb.z; + // Needs a padding byte, to make things four-aligned + p++; + } + return Texture; +} + +void TextWindow::ColorPickerDone(void) { + RgbaColor rgb = editControl.colorPicker.rgb; + EditControlDone(ssprintf("%.2f, %.2f, %.3f", rgb.redF(), rgb.greenF(), rgb.blueF()).c_str()); +} + +bool TextWindow::DrawOrHitTestColorPicker(int how, bool leftDown, + double x, double y) +{ + bool mousePointerAsHand = false; + + if(how == HOVER && !leftDown) { + editControl.colorPicker.picker1dActive = false; + editControl.colorPicker.picker2dActive = false; + } + + if(!editControl.colorPicker.show) return false; + if(how == CLICK || (how == HOVER && leftDown)) InvalidateText(); + + static const RgbaColor BaseColor[12] = { + RGBi(255, 0, 0), + RGBi( 0, 255, 0), + RGBi( 0, 0, 255), + + RGBi( 0, 255, 255), + RGBi(255, 0, 255), + RGBi(255, 255, 0), + + RGBi(255, 127, 0), + RGBi(255, 0, 127), + RGBi( 0, 255, 127), + RGBi(127, 255, 0), + RGBi(127, 0, 255), + RGBi( 0, 127, 255), + }; + + int width, height; + GetTextWindowSize(&width, &height); + + int px = LEFT_MARGIN + CHAR_WIDTH*editControl.col; + int py = (editControl.halfRow - SS.TW.scrollPos)*(LINE_HEIGHT/2); + + py += LINE_HEIGHT + 5; + + static const int WIDTH = 16, HEIGHT = 12; + static const int PITCH = 18, SIZE = 15; + + px = min(px, width - (WIDTH*PITCH + 40)); + + int pxm = px + WIDTH*PITCH + 11, + pym = py + HEIGHT*PITCH + 7; + + int bw = 6; + if(how == PAINT) { + glColor4d(0.2, 0.2, 0.2, 1); + ssglAxisAlignedQuad(px, pxm+bw, py, pym+bw); + glColor4d(0.0, 0.0, 0.0, 1); + ssglAxisAlignedQuad(px+(bw/2), pxm+(bw/2), py+(bw/2), pym+(bw/2)); + } else { + if(x < px || x > pxm+(bw/2) || + y < py || y > pym+(bw/2)) + { + return false; + } + } + px += (bw/2); + py += (bw/2); + + int i, j; + for(i = 0; i < WIDTH/2; i++) { + for(j = 0; j < HEIGHT; j++) { + Vector rgb; + RgbaColor d; + if(i == 0 && j < 8) { + d = SS.modelColor[j]; + rgb = Vector::From(d.redF(), d.greenF(), d.blueF()); + } else if(i == 0) { + double a = (j - 8.0)/3.0; + rgb = Vector::From(a, a, a); + } else { + d = BaseColor[j]; + rgb = Vector::From(d.redF(), d.greenF(), d.blueF()); + if(i >= 2 && i <= 4) { + double a = (i == 2) ? 0.2 : (i == 3) ? 0.3 : 0.4; + rgb = rgb.Plus(Vector::From(a, a, a)); + } + if(i >= 5 && i <= 7) { + double a = (i == 5) ? 0.7 : (i == 6) ? 0.4 : 0.18; + rgb = rgb.ScaledBy(a); + } + } + + rgb = rgb.ClampWithin(0, 1); + int sx = px + 5 + PITCH*(i + 8) + 4, sy = py + 5 + PITCH*j; + + if(how == PAINT) { + glColor4d(CO(rgb), 1); + ssglAxisAlignedQuad(sx, sx+SIZE, sy, sy+SIZE); + } else if(how == CLICK) { + if(x >= sx && x <= sx+SIZE && y >= sy && y <= sy+SIZE) { + editControl.colorPicker.rgb = RGBf(rgb.x, rgb.y, rgb.z); + ColorPickerDone(); + } + } else if(how == HOVER) { + if(x >= sx && x <= sx+SIZE && y >= sy && y <= sy+SIZE) { + mousePointerAsHand = true; + } + } + } + } + + int hxm, hym; + int hx = px + 5, hy = py + 5; + hxm = hx + PITCH*7 + SIZE; + hym = hy + PITCH*2 + SIZE; + if(how == PAINT) { + ssglColorRGB(editControl.colorPicker.rgb); + ssglAxisAlignedQuad(hx, hxm, hy, hym); + } else if(how == CLICK) { + if(x >= hx && x <= hxm && y >= hy && y <= hym) { + ColorPickerDone(); + } + } else if(how == HOVER) { + if(x >= hx && x <= hxm && y >= hy && y <= hym) { + mousePointerAsHand = true; + } + } + + hy += PITCH*3; + + hxm = hx + PITCH*7 + SIZE; + hym = hy + PITCH*1 + SIZE; + // The one-dimensional thing to pick the color's value + if(how == PAINT) { + glBindTexture(GL_TEXTURE_2D, TEXTURE_COLOR_PICKER_1D); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 256, 0, + GL_RGB, GL_UNSIGNED_BYTE, + HsvPattern1d(editControl.colorPicker.h, + editControl.colorPicker.s)); + + glEnable(GL_TEXTURE_2D); + glBegin(GL_QUADS); + glTexCoord2d(0, 0); + glVertex2d(hx, hy); + + glTexCoord2d(1, 0); + glVertex2d(hx, hym); + + glTexCoord2d(1, 1); + glVertex2d(hxm, hym); + + glTexCoord2d(0, 1); + glVertex2d(hxm, hy); + glEnd(); + glDisable(GL_TEXTURE_2D); + + double cx = hx+(hxm-hx)*(1 - editControl.colorPicker.v); + glColor4d(0, 0, 0, 1); + glLineWidth(1); + glBegin(GL_LINES); + glVertex2d(cx, hy); + glVertex2d(cx, hym); + glEnd(); + } else if(how == CLICK || + (how == HOVER && leftDown && editControl.colorPicker.picker1dActive)) + { + if(x >= hx && x <= hxm && y >= hy && y <= hym) { + editControl.colorPicker.v = 1 - (x - hx)/(hxm - hx); + + Vector rgb = HsvToRgb(Vector::From( + 6*editControl.colorPicker.h, + editControl.colorPicker.s, + editControl.colorPicker.v)); + editControl.colorPicker.rgb = RGBf(rgb.x, rgb.y, rgb.z); + + editControl.colorPicker.picker1dActive = true; + } + } + // and advance our vertical position + hy += PITCH*2; + + hxm = hx + PITCH*7 + SIZE; + hym = hy + PITCH*6 + SIZE; + // Two-dimensional thing to pick a color by hue and saturation + if(how == PAINT) { + glBindTexture(GL_TEXTURE_2D, TEXTURE_COLOR_PICKER_2D); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 256, 0, + GL_RGB, GL_UNSIGNED_BYTE, HsvPattern2d()); + + glEnable(GL_TEXTURE_2D); + glBegin(GL_QUADS); + glTexCoord2d(0, 0); + glVertex2d(hx, hy); + + glTexCoord2d(1, 0); + glVertex2d(hx, hym); + + glTexCoord2d(1, 1); + glVertex2d(hxm, hym); + + glTexCoord2d(0, 1); + glVertex2d(hxm, hy); + glEnd(); + glDisable(GL_TEXTURE_2D); + + glColor4d(1, 1, 1, 1); + glLineWidth(1); + double cx = hx+(hxm-hx)*editControl.colorPicker.h, + cy = hy+(hym-hy)*editControl.colorPicker.s; + glBegin(GL_LINES); + glVertex2d(cx - 5, cy); + glVertex2d(cx + 4, cy); + glVertex2d(cx, cy - 5); + glVertex2d(cx, cy + 4); + glEnd(); + } else if(how == CLICK || + (how == HOVER && leftDown && editControl.colorPicker.picker2dActive)) + { + if(x >= hx && x <= hxm && y >= hy && y <= hym) { + double h = (x - hx)/(hxm - hx), + s = (y - hy)/(hym - hy); + editControl.colorPicker.h = h; + editControl.colorPicker.s = s; + + Vector rgb = HsvToRgb(Vector::From( + 6*editControl.colorPicker.h, + editControl.colorPicker.s, + editControl.colorPicker.v)); + editControl.colorPicker.rgb = RGBf(rgb.x, rgb.y, rgb.z); + + editControl.colorPicker.picker2dActive = true; + } + } + + SetMousePointerToHand(mousePointerAsHand); + return true; +} + +void TextWindow::Paint(void) { + int width, height; + GetTextWindowSize(&width, &height); + + // We would like things pixel-exact, to avoid shimmering. + glViewport(0, 0, width, height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glClearColor(0, 0, 0, 1); + glClear(GL_COLOR_BUFFER_BIT); + glColor3d(1, 1, 1); + + glTranslated(-1, 1, 0); + glScaled(2.0/width, -2.0/height, 1); + // Make things round consistently, avoiding exact integer boundary + glTranslated(-0.1, -0.1, 0); + + halfRows = height / (LINE_HEIGHT/2); + + int bottom = top[rows-1] + 2; + scrollPos = min(scrollPos, bottom - halfRows); + scrollPos = max(scrollPos, 0); + + // Let's set up the scroll bar first + MoveTextScrollbarTo(scrollPos, top[rows - 1] + 1, halfRows); + + // Create the bitmap font that we're going to use. + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + + // Now paint the window. + int r, c, a; + for(a = 0; a < 2; a++) { + if(a == 0) { + glBegin(GL_QUADS); + } else if(a == 1) { + glEnable(GL_TEXTURE_2D); + ssglInitializeBitmapFont(); + glBegin(GL_QUADS); + } + + for(r = 0; r < rows; r++) { + int ltop = top[r]; + if(ltop < (scrollPos-1)) continue; + if(ltop > scrollPos+halfRows) break; + + for(c = 0; c < min((width/CHAR_WIDTH)+1, (int) MAX_COLS); c++) { + int x = LEFT_MARGIN + c*CHAR_WIDTH; + int y = (ltop-scrollPos)*(LINE_HEIGHT/2) + 4; + + int fg = meta[r][c].fg; + int bg = meta[r][c].bg; + RgbaColor bgRgb = meta[r][c].bgRgb; + + // On the first pass, all the background quads; on the next + // pass, all the foreground (i.e., font) quads. + if(a == 0) { + int bh = LINE_HEIGHT, adj = -2; + if(bg == 'z') { + glColor3f(bgRgb.redF(), bgRgb.greenF(), bgRgb.blueF()); + bh = CHAR_HEIGHT; + adj += 2; + } else { + glColor3fv(&(bgColorTable[bg*3])); + } + + if(bg != 'd') { + // Move the quad down a bit, so that the descenders + // still have the correct background. + y += adj; + ssglAxisAlignedQuad(x, x + CHAR_WIDTH, y, y + bh, false); + y -= adj; + } + } else if(a == 1) { + glColor3fv(&(fgColorTable[fg*3])); + ssglBitmapCharQuad(text[r][c], x, y + CHAR_HEIGHT); + + // If this is a link and it's hovered, then draw the + // underline + if(meta[r][c].link && meta[r][c].link != 'n' && + (r == hoveredRow && c == hoveredCol)) + { + int cs = c, cf = c; + while(cs >= 0 && meta[r][cs].link && + meta[r][cs].f == meta[r][c].f && + meta[r][cs].data == meta[r][c].data) + { + cs--; + } + cs++; + + while( meta[r][cf].link && + meta[r][cf].f == meta[r][c].f && + meta[r][cf].data == meta[r][c].data) + { + cf++; + } + + // But don't underline checkboxes or radio buttons + while(((text[r][cs] >= 0xe000 && text[r][cs] <= 0xefff) || + text[r][cs] == ' ') && + cs < cf) + { + cs++; + } + + glEnd(); + + // Always use the color of the rightmost character + // in the link, so that underline is consistent color + fg = meta[r][cf-1].fg; + glColor3fv(&(fgColorTable[fg*3])); + glDisable(GL_TEXTURE_2D); + glLineWidth(1); + glBegin(GL_LINES); + int yp = y + CHAR_HEIGHT; + glVertex2d(LEFT_MARGIN + cs*CHAR_WIDTH, yp); + glVertex2d(LEFT_MARGIN + cf*CHAR_WIDTH, yp); + glEnd(); + + glEnable(GL_TEXTURE_2D); + glBegin(GL_QUADS); + } + } + } + } + + glEnd(); + glDisable(GL_TEXTURE_2D); + } + + // The line to indicate the column of radio buttons that indicates the + // active group. + SS.GW.GroupSelection(); + // Make sure this test agrees with test to determine which screen is drawn + if(!SS.GW.pending.description && gs.n == 0 && gs.constraints == 0 && + shown.screen == SCREEN_LIST_OF_GROUPS) + { + int x = 29, y = 70 + LINE_HEIGHT; + y -= scrollPos*(LINE_HEIGHT/2); + + glLineWidth(1); + glColor3fv(&(fgColorTable['t'*3])); + glBegin(GL_LINES); + glVertex2d(x, y); + glVertex2d(x, y+40); + glEnd(); + } + + // The header has some icons that are drawn separately from the text + DrawOrHitTestIcons(PAINT, 0, 0); + + // And we may show a color picker for certain editable fields + DrawOrHitTestColorPicker(PAINT, false, 0, 0); +} + +void TextWindow::MouseEvent(bool leftClick, bool leftDown, double x, double y) { + if(TextEditControlIsVisible() || GraphicsEditControlIsVisible()) { + if(DrawOrHitTestColorPicker(leftClick ? CLICK : HOVER, leftDown, x, y)) + { + return; + } + + if(leftClick) { + HideEditControl(); + HideGraphicsEditControl(); + } else { + SetMousePointerToHand(false); + } + return; + } + + DrawOrHitTestIcons(leftClick ? CLICK : HOVER, x, y); + + GraphicsWindow::Selection ps = SS.GW.hover; + SS.GW.hover.Clear(); + + int prevHoveredRow = hoveredRow, + prevHoveredCol = hoveredCol; + hoveredRow = 0; + hoveredCol = 0; + + // Find the corresponding character in the text buffer + int c = (int)((x - LEFT_MARGIN) / CHAR_WIDTH); + int hh = (LINE_HEIGHT)/2; + y += scrollPos*hh; + int r; + for(r = 0; r < rows; r++) { + if(y >= top[r]*hh && y <= (top[r]+2)*hh) { + break; + } + } + if(r >= rows) { + SetMousePointerToHand(false); + goto done; + } + + hoveredRow = r; + hoveredCol = c; + +#define META (meta[r][c]) + if(leftClick) { + if(META.link && META.f) { + (META.f)(META.link, META.data); + Show(); + InvalidateGraphics(); + } + } else { + if(META.link) { + SetMousePointerToHand(true); + if(META.h) { + (META.h)(META.link, META.data); + } + } else { + SetMousePointerToHand(false); + } + } +#undef META + +done: + if((!ps.Equals(&(SS.GW.hover))) || + prevHoveredRow != hoveredRow || + prevHoveredCol != hoveredCol) + { + InvalidateGraphics(); + InvalidateText(); + } +} + +void TextWindow::MouseLeave(void) { + tooltippedIcon = NULL; + hoveredIcon = NULL; + hoveredRow = 0; + hoveredCol = 0; + InvalidateText(); +} + +void TextWindow::ScrollbarEvent(int newPos) { + if(TextEditControlIsVisible()) + return; + + int bottom = top[rows-1] + 2; + newPos = min(newPos, bottom - halfRows); + newPos = max(newPos, 0); + + if(newPos != scrollPos) { + scrollPos = newPos; + MoveTextScrollbarTo(scrollPos, top[rows - 1] + 1, halfRows); + InvalidateText(); + } +} + diff --git a/src/toolbar.cpp b/src/toolbar.cpp new file mode 100644 index 0000000..77f795f --- /dev/null +++ b/src/toolbar.cpp @@ -0,0 +1,248 @@ +//----------------------------------------------------------------------------- +// The toolbar that appears at the top left of the graphics window, where the +// user can select icons with the mouse, to perform operations equivalent to +// selecting a menu item or using a keyboard shortcut. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" +#include "generated/icons.h" + +static uint8_t SPACER[1]; +static const struct { + uint8_t *image; + int menu; + const char *tip; +} Toolbar[] = { + { Icon_line, GraphicsWindow::MNU_LINE_SEGMENT, "Sketch line segment" }, + { Icon_rectangle, GraphicsWindow::MNU_RECTANGLE, "Sketch rectangle" }, + { Icon_circle, GraphicsWindow::MNU_CIRCLE, "Sketch circle" }, + { Icon_arc, GraphicsWindow::MNU_ARC, "Sketch arc of a circle" }, + { Icon_text, GraphicsWindow::MNU_TTF_TEXT, "Sketch curves from text in a TrueType font" }, + { Icon_tangent_arc, GraphicsWindow::MNU_TANGENT_ARC, "Create tangent arc at selected point" }, + { Icon_bezier, GraphicsWindow::MNU_CUBIC, "Sketch cubic Bezier spline" }, + { Icon_point, GraphicsWindow::MNU_DATUM_POINT, "Sketch datum point" }, + { Icon_construction, GraphicsWindow::MNU_CONSTRUCTION, "Toggle construction" }, + { Icon_trim, GraphicsWindow::MNU_SPLIT_CURVES, "Split lines / curves where they intersect" }, + { SPACER, 0, 0 }, + + { Icon_length, GraphicsWindow::MNU_DISTANCE_DIA, "Constrain distance / diameter / length" }, + { Icon_angle, GraphicsWindow::MNU_ANGLE, "Constrain angle" }, + { Icon_horiz, GraphicsWindow::MNU_HORIZONTAL, "Constrain to be horizontal" }, + { Icon_vert, GraphicsWindow::MNU_VERTICAL, "Constrain to be vertical" }, + { Icon_parallel, GraphicsWindow::MNU_PARALLEL, "Constrain to be parallel or tangent" }, + { Icon_perpendicular, GraphicsWindow::MNU_PERPENDICULAR, "Constrain to be perpendicular" }, + { Icon_pointonx, GraphicsWindow::MNU_ON_ENTITY, "Constrain point on line / curve / plane / point" }, + { Icon_symmetric, GraphicsWindow::MNU_SYMMETRIC, "Constrain symmetric" }, + { Icon_equal, GraphicsWindow::MNU_EQUAL, "Constrain equal length / radius / angle" }, + { Icon_same_orientation,GraphicsWindow::MNU_ORIENTED_SAME, "Constrain normals in same orientation" }, + { Icon_other_supp, GraphicsWindow::MNU_OTHER_ANGLE, "Other supplementary angle" }, + { Icon_ref, GraphicsWindow::MNU_REFERENCE, "Toggle reference dimension" }, + { SPACER, 0, 0 }, + + { Icon_extrude, GraphicsWindow::MNU_GROUP_EXTRUDE, "New group extruding active sketch" }, + { Icon_lathe, GraphicsWindow::MNU_GROUP_LATHE, "New group rotating active sketch" }, + { Icon_step_rotate, GraphicsWindow::MNU_GROUP_ROT, "New group step and repeat rotating" }, + { Icon_step_translate, GraphicsWindow::MNU_GROUP_TRANS, "New group step and repeat translating" }, + { Icon_sketch_in_plane, GraphicsWindow::MNU_GROUP_WRKPL, "New group in new workplane (thru given entities)" }, + { Icon_sketch_in_3d, GraphicsWindow::MNU_GROUP_3D, "New group in 3d" }, + { Icon_assemble, GraphicsWindow::MNU_GROUP_LINK, "New group linking / assembling file" }, + { SPACER, 0, 0 }, + + { Icon_in3d, GraphicsWindow::MNU_NEAREST_ISO, "Nearest isometric view" }, + { Icon_ontoworkplane, GraphicsWindow::MNU_ONTO_WORKPLANE, "Align view to active workplane" }, + { NULL, 0, 0 } +}; + +void GraphicsWindow::ToolbarDraw(void) { + ToolbarDrawOrHitTest(0, 0, true, NULL); +} + +bool GraphicsWindow::ToolbarMouseMoved(int x, int y) { + x += ((int)width/2); + y += ((int)height/2); + + int nh = 0; + bool withinToolbar = ToolbarDrawOrHitTest(x, y, false, &nh); + if(!withinToolbar) nh = 0; + + if(nh != toolbarTooltipped) { + // Don't let the tool tip move around if the mouse moves within the + // same item. + toolbarMouseX = x; + toolbarMouseY = y; + toolbarTooltipped = 0; + } + + if(nh != toolbarHovered) { + toolbarHovered = nh; + SetTimerFor(1000); + PaintGraphics(); + } + // So if we moved off the toolbar, then toolbarHovered is now equal to + // zero, so it doesn't matter if the tool tip timer expires. And if + // we moved from one item to another, we reset the timer, so also okay. + return withinToolbar; +} + +bool GraphicsWindow::ToolbarMouseDown(int x, int y) { + x += ((int)width/2); + y += ((int)height/2); + + int nh = -1; + bool withinToolbar = ToolbarDrawOrHitTest(x, y, false, &nh); + // They might have clicked within the toolbar, but not on a button. + if(withinToolbar && nh >= 0) { + for(int i = 0; SS.GW.menu[i].level >= 0; i++) { + if(nh == SS.GW.menu[i].id) { + (SS.GW.menu[i].fn)((GraphicsWindow::MenuId)SS.GW.menu[i].id); + break; + } + } + } + return withinToolbar; +} + +bool GraphicsWindow::ToolbarDrawOrHitTest(int mx, int my, + bool paint, int *menuHit) +{ + int i; + int x = 17, y = (int)(height - 52); + + int fudge = 8; + int h = 32*16 + 3*16 + fudge; + int aleft = 0, aright = 66, atop = y+16+fudge/2, abot = y+16-h; + + bool withinToolbar = + (mx >= aleft && mx <= aright && my <= atop && my >= abot); + + if(!paint && !withinToolbar) { + // This gets called every MouseMove event, so return quickly. + return false; + } + + if(paint) { + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glTranslated(-1, -1, 0); + glScaled(2.0/width, 2.0/height, 0); + glDisable(GL_LIGHTING); + + double c = 30.0/255; + glColor4d(c, c, c, 1.0); + ssglAxisAlignedQuad(aleft, aright, atop, abot); + } + + struct { + bool show; + const char *str; + } toolTip = { false, NULL }; + + bool leftpos = true; + for(i = 0; Toolbar[i].image; i++) { + if(Toolbar[i].image == SPACER) { + if(!leftpos) { + leftpos = true; + y -= 32; + x -= 32; + } + y -= 16; + + if(paint) { + // Draw a separator bar in a slightly different color. + int divw = 30, divh = 2; + glColor4d(0.17, 0.17, 0.17, 1); + x += 16; + y += 24; + ssglAxisAlignedQuad(x+divw, x-divw, y+divh, y-divh); + x -= 16; + y -= 24; + } + + continue; + } + + if(paint) { + glRasterPos2i(x - 12, y - 12); + glDrawPixels(24, 24, GL_RGB, GL_UNSIGNED_BYTE, Toolbar[i].image); + + if(toolbarHovered == Toolbar[i].menu || + pending.operation == Toolbar[i].menu) { + // Highlight the hovered or pending item. + glColor4d(1, 1, 0, 0.3); + int boxhw = 15; + ssglAxisAlignedQuad(x+boxhw, x-boxhw, y+boxhw, y-boxhw); + } + + if(toolbarTooltipped == Toolbar[i].menu) { + // Display the tool tip for this item; postpone till later + // so that no one draws over us. Don't need position since + // that's just wherever the mouse is. + toolTip.show = true; + toolTip.str = Toolbar[i].tip; + } + } else { + int boxhw = 16; + if(mx < (x+boxhw) && mx > (x - boxhw) && + my < (y+boxhw) && my > (y - boxhw)) + { + if(menuHit) *menuHit = Toolbar[i].menu; + } + } + + if(leftpos) { + x += 32; + leftpos = false; + } else { + x -= 32; + y -= 32; + leftpos = true; + } + } + + if(paint) { + // Do this last so that nothing can draw over it. + if(toolTip.show) { + ssglInitializeBitmapFont(); + std::string str = toolTip.str; + + for(i = 0; SS.GW.menu[i].level >= 0; i++) { + if(toolbarTooltipped == SS.GW.menu[i].id) { + std::string accel = MakeAcceleratorLabel(SS.GW.menu[i].accel); + if(!accel.empty()) { + str += ssprintf(" (%s)", accel.c_str()); + } + break; + } + } + + int tw = str.length() * (SS.TW.CHAR_WIDTH - 1) + 10, + th = SS.TW.LINE_HEIGHT + 2; + + double ox = toolbarMouseX + 3, oy = toolbarMouseY + 3; + glLineWidth(1); + glColor4d(1.0, 1.0, 0.6, 1.0); + ssglAxisAlignedQuad(ox, ox+tw, oy, oy+th); + glColor4d(0.0, 0.0, 0.0, 1.0); + ssglAxisAlignedLineLoop(ox, ox+tw, oy, oy+th); + + glColor4d(0, 0, 0, 1); + glPushMatrix(); + glTranslated(ox+5, oy+3, 0); + glScaled(1, -1, 1); + ssglBitmapText(str, Vector::From(0, 0, 0)); + glPopMatrix(); + } + ssglDepthRangeLockToFront(false); + } + + return withinToolbar; +} + +void GraphicsWindow::TimerCallback(void) { + SS.GW.toolbarTooltipped = SS.GW.toolbarHovered; + PaintGraphics(); +} + diff --git a/src/ttf.cpp b/src/ttf.cpp new file mode 100644 index 0000000..0d9bfa7 --- /dev/null +++ b/src/ttf.cpp @@ -0,0 +1,301 @@ +//----------------------------------------------------------------------------- +// Routines to read a TrueType font as vector outlines, and generate them +// as entities, since they're always representable as either lines or +// quadratic Bezier curves. +// +// Copyright 2016 whitequark, Peter Barfuss. +//----------------------------------------------------------------------------- +#include +#include FT_FREETYPE_H +#include FT_OUTLINE_H +#include FT_ADVANCES_H + +/* Yecch. Irritatingly, you need to do this nonsense to get the error string table, + since nobody thought to put this exact function into FreeType itsself. */ +#undef __FTERRORS_H__ +#define FT_ERRORDEF(e, v, s) { (e), (s) }, +#define FT_ERROR_START_LIST +#define FT_ERROR_END_LIST { 0, NULL } + +struct ft_error { + int err; + const char *str; +}; + +static const struct ft_error ft_errors[] = { +#include FT_ERRORS_H +}; + +extern "C" const char *ft_error_string(int err) { + const struct ft_error *e; + for(e = ft_errors; e->str; e++) + if(e->err == err) + return e->str; + return "Unknown error"; +} + +/* Okay, we're done with that. */ +#undef FT_ERRORDEF +#undef FT_ERROR_START_LIST +#undef FT_ERROR_END_LIST + +#include "solvespace.h" + +//----------------------------------------------------------------------------- +// Get the list of available font filenames, and load the name for each of +// them. Only that, though, not the glyphs too. +//----------------------------------------------------------------------------- +TtfFontList::TtfFontList() { + FT_Init_FreeType(&fontLibrary); +} + +TtfFontList::~TtfFontList() { + FT_Done_FreeType(fontLibrary); +} + +void TtfFontList::LoadAll() { + if(loaded) return; + + for(const std::string &font : GetFontFiles()) { + TtfFont tf = {}; + tf.fontFile = font; + if(tf.LoadFromFile(fontLibrary)) + l.Add(&tf); + } + + // Sort fonts according to their actual name, not filename. + std::sort(&l.elem[0], &l.elem[l.n], + [](const TtfFont &a, const TtfFont &b) { return a.name < b.name; }); + + // Filter out fonts with the same family and style name. This is not + // strictly necessarily the exact same font, but it will almost always be. + TtfFont *it = std::unique(&l.elem[0], &l.elem[l.n], + [](const TtfFont &a, const TtfFont &b) { return a.name == b.name; }); + l.RemoveLast(&l.elem[l.n] - it); + + // TODO: identify fonts by their name and not filename, which may change + // between OSes. + + loaded = true; +} + +void TtfFontList::PlotString(const std::string &font, const std::string &str, + SBezierList *sbl, Vector origin, Vector u, Vector v) +{ + LoadAll(); + + TtfFont *tf = std::find_if(&l.elem[0], &l.elem[l.n], + [&](const TtfFont &tf) { return tf.FontFileBaseName() == font; }); + + if(!str.empty() && tf != &l.elem[l.n]) { + tf->LoadFromFile(fontLibrary, /*nameOnly=*/false); + tf->PlotString(str, sbl, origin, u, v); + } else { + // No text or no font; so draw a big X for an error marker. + SBezier sb; + sb = SBezier::From(origin, origin.Plus(u).Plus(v)); + sbl->l.Add(&sb); + sb = SBezier::From(origin.Plus(v), origin.Plus(u)); + sbl->l.Add(&sb); + } +} + +//----------------------------------------------------------------------------- +// Return the basename of our font filename; that's how the requests and +// entities that reference us will store it. +//----------------------------------------------------------------------------- +std::string TtfFont::FontFileBaseName() const { + std::string baseName = fontFile; + size_t pos = baseName.rfind(PATH_SEP); + if(pos != std::string::npos) + return baseName.erase(0, pos + 1); + return ""; +} + +//----------------------------------------------------------------------------- +// Load a TrueType font into memory. We care about the curves that define +// the letter shapes, and about the mappings that determine which glyph goes +// with which character. +//----------------------------------------------------------------------------- +bool TtfFont::LoadFromFile(FT_Library fontLibrary, bool nameOnly) { + FT_Open_Args args = {}; + args.flags = FT_OPEN_PATHNAME; + args.pathname = &fontFile[0]; // FT_String is char* for historical reasons + + // We don't use ssfopen() here to let freetype do its own memory management. + // This is OK because on Linux/OS X we just delegate to fopen and on Windows + // we only look into C:\Windows\Fonts, which has a known short path. + if(int fterr = FT_Open_Face(fontLibrary, &args, 0, &fontFace)) { + dbp("freetype: loading font from file '%s' failed: %s", + fontFile.c_str(), ft_error_string(fterr)); + return false; + } + + if(int fterr = FT_Select_Charmap(fontFace, FT_ENCODING_UNICODE)) { + dbp("freetype: loading unicode CMap for file '%s' failed: %s", + fontFile.c_str(), ft_error_string(fterr)); + FT_Done_Face(fontFace); + return false; + } + + name = std::string(fontFace->family_name) + + " (" + std::string(fontFace->style_name) + ")"; + + if(nameOnly) { + FT_Done_Face(fontFace); + fontFace = NULL; + } + + return true; +} + +typedef struct OutlineData { + Vector origin, u, v; // input parameters + SBezierList *beziers; // output bezier list + float factor; // ratio between freetype and solvespace coordinates + FT_Pos bx; // x offset of the current glyph + FT_Pos px, py; // current point +} OutlineData; + +static Vector Transform(OutlineData *data, FT_Pos x, FT_Pos y) { + Vector r = data->origin; + r = r.Plus(data->u.ScaledBy((float)(data->bx + x) * data->factor)); + r = r.Plus(data->v.ScaledBy((float)y * data->factor)); + return r; +} + +static int MoveTo(const FT_Vector *p, void *cc) +{ + OutlineData *data = (OutlineData *) cc; + data->px = p->x; + data->py = p->y; + return 0; +} + +static int LineTo(const FT_Vector *p, void *cc) +{ + OutlineData *data = (OutlineData *) cc; + SBezier sb = SBezier::From( + Transform(data, data->px, data->py), + Transform(data, p->x, p->y)); + data->beziers->l.Add(&sb); + data->px = p->x; + data->py = p->y; + return 0; +} + +static int ConicTo(const FT_Vector *c, const FT_Vector *p, void *cc) +{ + OutlineData *data = (OutlineData *) cc; + SBezier sb = SBezier::From( + Transform(data, data->px, data->py), + Transform(data, c->x, c->y), + Transform(data, p->x, p->y)); + data->beziers->l.Add(&sb); + data->px = p->x; + data->py = p->y; + return 0; +} + +static int CubicTo(const FT_Vector *c1, const FT_Vector *c2, const FT_Vector *p, void *cc) +{ + OutlineData *data = (OutlineData *) cc; + SBezier sb = SBezier::From( + Transform(data, data->px, data->py), + Transform(data, c1->x, c1->y), + Transform(data, c2->x, c2->y), + Transform(data, p->x, p->y)); + data->beziers->l.Add(&sb); + data->px = p->x; + data->py = p->y; + return 0; +} + +void TtfFont::PlotString(const std::string &str, + SBezierList *sbl, Vector origin, Vector u, Vector v) +{ + if(fontFace == NULL) oops(); + + FT_Outline_Funcs outlineFuncs; + outlineFuncs.move_to = MoveTo; + outlineFuncs.line_to = LineTo; + outlineFuncs.conic_to = ConicTo; + outlineFuncs.cubic_to = CubicTo; + outlineFuncs.shift = 0; + outlineFuncs.delta = 0; + + FT_Pos dx = 0; + for(char32_t chr : ReadUTF8(str)) { + uint32_t gid = FT_Get_Char_Index(fontFace, chr); + if (gid == 0) { + dbp("freetype: CID-to-GID mapping for CID 0x%04x failed: %s; using CID as GID", + chr, ft_error_string(gid)); + } + + // We always ask Freetype to give us a unit size character. + // It uses fixed point; put the unit size somewhere in the middle of the dynamic + // range of its 26.6 fixed point type, and adjust the factors so that the unit + // matches cap height. + FT_Size_RequestRec sizeRequest; + sizeRequest.type = FT_SIZE_REQUEST_TYPE_REAL_DIM; + sizeRequest.width = 1 << 16; + sizeRequest.height = 1 << 16; + sizeRequest.horiResolution = 128; + sizeRequest.vertResolution = 128; + if(int fterr = FT_Request_Size(fontFace, &sizeRequest)) { + dbp("freetype: cannot set character size: %s", + ft_error_string(fterr)); + return; + } + + /* + * Stupid hacks: + * - if we want fake-bold, use FT_Outline_Embolden(). This actually looks + * quite good. + * - if we want fake-italic, apply a shear transform [1 s s 1 0 0] here using + * FT_Set_Transform. This looks decent at small font sizes and bad at larger + * ones, antialiasing mitigates this considerably though. + */ + if(int fterr = FT_Load_Glyph(fontFace, gid, FT_LOAD_NO_BITMAP | FT_LOAD_NO_HINTING)) { + dbp("freetype: cannot load glyph (gid %d): %s", + gid, ft_error_string(fterr)); + return; + } + + /* A point that has x = xMin should be plotted at (dx0 + lsb); fix up + * our x-position so that the curve-generating code will put stuff + * at the right place. + * + * There's no point in getting the glyph BBox here - not only can it be + * needlessly slow sometimes, but because we're about to render a single glyph, + * what we want actually *is* the CBox. + * + * This is notwithstanding that this makes extremely little sense, this + * looks like a workaround for either mishandling the start glyph on a line, + * or as a really hacky pseudo-track-kerning (in which case it works better than + * one would expect! especially since most fonts don't set track kerning). + */ + FT_BBox cbox; + FT_Outline_Get_CBox(&fontFace->glyph->outline, &cbox); + FT_Pos bx = dx - cbox.xMin; + // Yes, this is what FreeType calls left-side bearing. + // Then interchangeably uses that with "left-side bearing". Sigh. + bx += fontFace->glyph->metrics.horiBearingX; + + OutlineData data = {}; + data.origin = origin; + data.u = u; + data.v = v; + data.beziers = sbl; + data.factor = 1.0f/(float)(1 << 16); + data.bx = bx; + if(int fterr = FT_Outline_Decompose(&fontFace->glyph->outline, &outlineFuncs, &data)) { + dbp("freetype: bezier decomposition failed (gid %d): %s", + gid, ft_error_string(fterr)); + } + + // And we're done, so advance our position by the requested advance + // width, plus the user-requested extra advance. + dx += fontFace->glyph->advance.x; + } +} diff --git a/src/ttf.h b/src/ttf.h new file mode 100644 index 0000000..fb26ab9 --- /dev/null +++ b/src/ttf.h @@ -0,0 +1,40 @@ +//----------------------------------------------------------------------------- +// Routines to read a TrueType font as vector outlines, and generate them +// as entities, since they're always representable as either lines or +// quadratic Bezier curves. +// +// Copyright 2016 whitequark, Peter Barfuss. +//----------------------------------------------------------------------------- + +#ifndef __TTF_H +#define __TTF_H + +class TtfFont { +public: + std::string fontFile; + std::string name; + FT_FaceRec_ *fontFace; + + std::string FontFileBaseName() const; + bool LoadFromFile(FT_LibraryRec_ *fontLibrary, bool nameOnly = true); + + void PlotString(const std::string &str, + SBezierList *sbl, Vector origin, Vector u, Vector v); +}; + +class TtfFontList { +public: + FT_LibraryRec_ *fontLibrary; + bool loaded; + List l; + + TtfFontList(); + ~TtfFontList(); + + void LoadAll(); + + void PlotString(const std::string &font, const std::string &str, + SBezierList *sbl, Vector origin, Vector u, Vector v); +}; + +#endif diff --git a/src/ui.h b/src/ui.h new file mode 100644 index 0000000..ebb60b2 --- /dev/null +++ b/src/ui.h @@ -0,0 +1,745 @@ +//----------------------------------------------------------------------------- +// Declarations relating to our user interface, in both the graphics and +// text browser window. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- + +#ifndef __UI_H +#define __UI_H + +class TextWindow { +public: + enum { + MAX_COLS = 100, + MIN_COLS = 45, + MAX_ROWS = 2000 + }; + + typedef struct { + char c; + RgbaColor color; + } Color; + static const Color fgColors[]; + static const Color bgColors[]; + + float bgColorTable[256*3]; + float fgColorTable[256*3]; + + enum { + CHAR_WIDTH = 9, + CHAR_HEIGHT = 16, + LINE_HEIGHT = 20, + LEFT_MARGIN = 6, + }; + +#define CHECK_FALSE "\xEE\x80\x80" // U+E000 +#define CHECK_TRUE "\xEE\x80\x81" +#define RADIO_FALSE "\xEE\x80\x82" +#define RADIO_TRUE "\xEE\x80\x83" + + int scrollPos; // The scrollbar position, in half-row units + int halfRows; // The height of our window, in half-row units + + uint32_t text[MAX_ROWS][MAX_COLS]; + typedef void LinkFunction(int link, uint32_t v); + enum { NOT_A_LINK = 0 }; + struct { + char fg; + char bg; + RgbaColor bgRgb; + int link; + uint32_t data; + LinkFunction *f; + LinkFunction *h; + } meta[MAX_ROWS][MAX_COLS]; + int hoveredRow, hoveredCol; + + + int top[MAX_ROWS]; // in half-line units, or -1 for unused + int rows; + + // The row of icons at the top of the text window, to hide/show things + typedef struct { + bool *var; + uint8_t *icon; + const char *tip; + } HideShowIcon; + static HideShowIcon hideShowIcons[]; + static bool SPACER; + + // These are called by the platform-specific code. + void Paint(void); + void MouseEvent(bool isClick, bool leftDown, double x, double y); + void MouseScroll(double x, double y, int delta); + void MouseLeave(void); + void ScrollbarEvent(int newPos); + + enum { + PAINT = 0, + HOVER = 1, + CLICK = 2 + }; + void DrawOrHitTestIcons(int how, double mx, double my); + void TimerCallback(void); + Point2d oldMousePos; + HideShowIcon *hoveredIcon, *tooltippedIcon; + + Vector HsvToRgb(Vector hsv); + uint8_t *HsvPattern2d(void); + uint8_t *HsvPattern1d(double h, double s); + void ColorPickerDone(void); + bool DrawOrHitTestColorPicker(int how, bool leftDown, double x, double y); + + void Init(void); + void MakeColorTable(const Color *in, float *out); + void Printf(bool half, const char *fmt, ...); + void ClearScreen(void); + + void Show(void); + + // State for the screen that we are showing in the text window. + enum { + SCREEN_LIST_OF_GROUPS = 0, + SCREEN_GROUP_INFO = 1, + SCREEN_GROUP_SOLVE_INFO = 2, + SCREEN_CONFIGURATION = 3, + SCREEN_STEP_DIMENSION = 4, + SCREEN_LIST_OF_STYLES = 5, + SCREEN_STYLE_INFO = 6, + SCREEN_PASTE_TRANSFORMED = 7, + SCREEN_EDIT_VIEW = 8, + SCREEN_TANGENT_ARC = 9 + }; + typedef struct { + int screen; + + hGroup group; + hStyle style; + + hConstraint constraint; + bool dimIsDistance; + double dimFinish; + int dimSteps; + + struct { + int times; + Vector trans; + double theta; + Vector origin; + double scale; + } paste; + } ShownState; + ShownState shown; + + enum { + EDIT_NOTHING = 0, + // For multiple groups + EDIT_TIMES_REPEATED = 1, + EDIT_GROUP_NAME = 2, + EDIT_GROUP_SCALE = 3, + EDIT_GROUP_COLOR = 4, + EDIT_GROUP_OPACITY = 5, + // For the configuraiton screen + EDIT_LIGHT_DIRECTION = 100, + EDIT_LIGHT_INTENSITY = 101, + EDIT_COLOR = 102, + EDIT_CHORD_TOLERANCE = 103, + EDIT_MAX_SEGMENTS = 104, + EDIT_CAMERA_TANGENT = 105, + EDIT_GRID_SPACING = 106, + EDIT_DIGITS_AFTER_DECIMAL = 107, + EDIT_EXPORT_SCALE = 108, + EDIT_EXPORT_OFFSET = 109, + EDIT_CANVAS_SIZE = 110, + EDIT_G_CODE_DEPTH = 120, + EDIT_G_CODE_PASSES = 121, + EDIT_G_CODE_FEED = 122, + EDIT_G_CODE_PLUNGE_FEED = 123, + EDIT_AUTOSAVE_INTERVAL = 124, + // For TTF text + EDIT_TTF_TEXT = 300, + // For the step dimension screen + EDIT_STEP_DIM_FINISH = 400, + EDIT_STEP_DIM_STEPS = 401, + // For the styles stuff + EDIT_STYLE_WIDTH = 500, + EDIT_STYLE_TEXT_HEIGHT = 501, + EDIT_STYLE_TEXT_ANGLE = 502, + EDIT_STYLE_COLOR = 503, + EDIT_STYLE_FILL_COLOR = 504, + EDIT_STYLE_NAME = 505, + EDIT_BACKGROUND_COLOR = 506, + EDIT_BACKGROUND_IMG_SCALE = 507, + EDIT_STYLE_STIPPLE_PERIOD = 508, + // For paste transforming + EDIT_PASTE_TIMES_REPEATED = 600, + EDIT_PASTE_ANGLE = 601, + EDIT_PASTE_SCALE = 602, + // For view + EDIT_VIEW_SCALE = 700, + EDIT_VIEW_ORIGIN = 701, + EDIT_VIEW_PROJ_RIGHT = 702, + EDIT_VIEW_PROJ_UP = 703, + // For tangent arc + EDIT_TANGENT_ARC_RADIUS = 800 + }; + struct { + bool showAgain; + int meaning; + int i; + hGroup group; + hRequest request; + hStyle style; + } edit; + + static void ReportHowGroupSolved(hGroup hg); + + struct { + int halfRow; + int col; + + struct { + RgbaColor rgb; + double h, s, v; + bool show; + bool picker1dActive; + bool picker2dActive; + } colorPicker; + } editControl; + + void HideEditControl(void); + void ShowEditControl(int col, const std::string &str, int halfRow = -1); + void ShowEditControlWithColorPicker(int col, RgbaColor rgb); + + void ClearSuper(void); + + void ShowHeader(bool withNav); + // These are self-contained screens, that show some information about + // the sketch. + void ShowListOfGroups(void); + void ShowGroupInfo(void); + void ShowGroupSolveInfo(void); + void ShowConfiguration(void); + void ShowListOfStyles(void); + void ShowStyleInfo(void); + void ShowStepDimension(void); + void ShowPasteTransformed(void); + void ShowEditView(void); + void ShowTangentArc(void); + // Special screen, based on selection + void DescribeSelection(void); + + void GoToScreen(int screen); + + // All of these are callbacks from the GUI code; first from when + // we're describing an entity + static void ScreenEditTtfText(int link, uint32_t v); + static void ScreenSetTtfFont(int link, uint32_t v); + static void ScreenUnselectAll(int link, uint32_t v); + + // when we're describing a constraint + static void ScreenConstraintShowAsRadius(int link, uint32_t v); + + // and the rest from the stuff in textscreens.cpp + static void ScreenSelectGroup(int link, uint32_t v); + static void ScreenActivateGroup(int link, uint32_t v); + static void ScreenToggleGroupShown(int link, uint32_t v); + static void ScreenHowGroupSolved(int link, uint32_t v); + static void ScreenShowGroupsSpecial(int link, uint32_t v); + static void ScreenDeleteGroup(int link, uint32_t v); + + static void ScreenHoverConstraint(int link, uint32_t v); + static void ScreenHoverRequest(int link, uint32_t v); + static void ScreenSelectRequest(int link, uint32_t v); + static void ScreenSelectConstraint(int link, uint32_t v); + + static void ScreenChangeGroupOption(int link, uint32_t v); + static void ScreenColor(int link, uint32_t v); + static void ScreenOpacity(int link, uint32_t v); + + static void ScreenShowListOfStyles(int link, uint32_t v); + static void ScreenShowStyleInfo(int link, uint32_t v); + static void ScreenDeleteStyle(int link, uint32_t v); + static void ScreenChangeStylePatternType(int link, uint32_t v); + static void ScreenChangeStyleYesNo(int link, uint32_t v); + static void ScreenCreateCustomStyle(int link, uint32_t v); + static void ScreenLoadFactoryDefaultStyles(int link, uint32_t v); + static void ScreenAssignSelectionToStyle(int link, uint32_t v); + static void ScreenBackgroundImage(int link, uint32_t v); + + static void ScreenShowConfiguration(int link, uint32_t v); + static void ScreenShowEditView(int link, uint32_t v); + static void ScreenGoToWebsite(int link, uint32_t v); + + static void ScreenChangeFixExportColors(int link, uint32_t v); + static void ScreenChangeBackFaces(int link, uint32_t v); + static void ScreenChangeCheckClosedContour(int link, uint32_t v); + static void ScreenChangePwlCurves(int link, uint32_t v); + static void ScreenChangeCanvasSizeAuto(int link, uint32_t v); + static void ScreenChangeCanvasSize(int link, uint32_t v); + static void ScreenChangeShadedTriangles(int link, uint32_t v); + + static void ScreenAllowRedundant(int link, uint32_t v); + + static void ScreenStepDimSteps(int link, uint32_t v); + static void ScreenStepDimFinish(int link, uint32_t v); + static void ScreenStepDimGo(int link, uint32_t v); + + static void ScreenChangeTangentArc(int link, uint32_t v); + + static void ScreenPasteTransformed(int link, uint32_t v); + + static void ScreenHome(int link, uint32_t v); + + // These ones do stuff with the edit control + static void ScreenChangeExprA(int link, uint32_t v); + static void ScreenChangeGroupName(int link, uint32_t v); + static void ScreenChangeGroupScale(int link, uint32_t v); + static void ScreenChangeLightDirection(int link, uint32_t v); + static void ScreenChangeLightIntensity(int link, uint32_t v); + static void ScreenChangeColor(int link, uint32_t v); + static void ScreenChangeChordTolerance(int link, uint32_t v); + static void ScreenChangeMaxSegments(int link, uint32_t v); + static void ScreenChangeExportChordTolerance(int link, uint32_t v); + static void ScreenChangeExportMaxSegments(int link, uint32_t v); + static void ScreenChangeCameraTangent(int link, uint32_t v); + static void ScreenChangeGridSpacing(int link, uint32_t v); + static void ScreenChangeDigitsAfterDecimal(int link, uint32_t v); + static void ScreenChangeExportScale(int link, uint32_t v); + static void ScreenChangeExportOffset(int link, uint32_t v); + static void ScreenChangeGCodeParameter(int link, uint32_t v); + static void ScreenChangeAutosaveInterval(int link, uint32_t v); + static void ScreenChangeStyleName(int link, uint32_t v); + static void ScreenChangeStyleMetric(int link, uint32_t v); + static void ScreenChangeStyleTextAngle(int link, uint32_t v); + static void ScreenChangeStyleColor(int link, uint32_t v); + static void ScreenChangeBackgroundColor(int link, uint32_t v); + static void ScreenChangeBackgroundImageScale(int link, uint32_t v); + static void ScreenChangePasteTransformed(int link, uint32_t v); + static void ScreenChangeViewScale(int link, uint32_t v); + static void ScreenChangeViewOrigin(int link, uint32_t v); + static void ScreenChangeViewProjection(int link, uint32_t v); + + bool EditControlDoneForStyles(const char *s); + bool EditControlDoneForConfiguration(const char *s); + bool EditControlDoneForPaste(const char *s); + bool EditControlDoneForView(const char *s); + void EditControlDone(const char *s); +}; + +#define SELECTION_RADIUS 10.0 + +class GraphicsWindow { +public: + void Init(void); + + // This table describes the top-level menus in the graphics winodw. + typedef enum { + // File + MNU_NEW = 100, + MNU_OPEN, + MNU_OPEN_RECENT, + MNU_SAVE, + MNU_SAVE_AS, + MNU_EXPORT_PNG, + MNU_EXPORT_MESH, + MNU_EXPORT_SURFACES, + MNU_EXPORT_VIEW, + MNU_EXPORT_SECTION, + MNU_EXPORT_WIREFRAME, + MNU_IMPORT, + MNU_EXIT, + // View + MNU_ZOOM_IN, + MNU_ZOOM_OUT, + MNU_ZOOM_TO_FIT, + MNU_SHOW_GRID, + MNU_PERSPECTIVE_PROJ, + MNU_ONTO_WORKPLANE, + MNU_NEAREST_ORTHO, + MNU_NEAREST_ISO, + MNU_CENTER_VIEW, + MNU_SHOW_MENU_BAR, + MNU_SHOW_TOOLBAR, + MNU_SHOW_TEXT_WND, + MNU_UNITS_INCHES, + MNU_UNITS_MM, + MNU_FULL_SCREEN, + // Edit + MNU_UNDO, + MNU_REDO, + MNU_CUT, + MNU_COPY, + MNU_PASTE, + MNU_PASTE_TRANSFORM, + MNU_DELETE, + MNU_SELECT_CHAIN, + MNU_SELECT_ALL, + MNU_SNAP_TO_GRID, + MNU_ROTATE_90, + MNU_UNSELECT_ALL, + MNU_REGEN_ALL, + // Request + MNU_SEL_WORKPLANE, + MNU_FREE_IN_3D, + MNU_DATUM_POINT, + MNU_WORKPLANE, + MNU_LINE_SEGMENT, + MNU_CONSTR_SEGMENT, + MNU_CIRCLE, + MNU_ARC, + MNU_RECTANGLE, + MNU_CUBIC, + MNU_TTF_TEXT, + MNU_SPLIT_CURVES, + MNU_TANGENT_ARC, + MNU_CONSTRUCTION, + // Group + MNU_GROUP_3D, + MNU_GROUP_WRKPL, + MNU_GROUP_EXTRUDE, + MNU_GROUP_LATHE, + MNU_GROUP_ROT, + MNU_GROUP_TRANS, + MNU_GROUP_LINK, + MNU_GROUP_RECENT, + // Constrain + MNU_DISTANCE_DIA, + MNU_REF_DISTANCE, + MNU_ANGLE, + MNU_REF_ANGLE, + MNU_OTHER_ANGLE, + MNU_REFERENCE, + MNU_EQUAL, + MNU_RATIO, + MNU_DIFFERENCE, + MNU_ON_ENTITY, + MNU_SYMMETRIC, + MNU_AT_MIDPOINT, + MNU_HORIZONTAL, + MNU_VERTICAL, + MNU_PARALLEL, + MNU_PERPENDICULAR, + MNU_ORIENTED_SAME, + MNU_WHERE_DRAGGED, + MNU_COMMENT, + // Analyze + MNU_VOLUME, + MNU_AREA, + MNU_INTERFERENCE, + MNU_NAKED_EDGES, + MNU_SHOW_DOF, + MNU_TRACE_PT, + MNU_STOP_TRACING, + MNU_STEP_DIM, + // Help, + MNU_WEBSITE, + MNU_ABOUT + } MenuId; + typedef void MenuHandler(int id); + enum { + ESCAPE_KEY = 27, + DELETE_KEY = 127, + FUNCTION_KEY_BASE = 0xf0 + }; + enum { + SHIFT_MASK = 0x100, + CTRL_MASK = 0x200 + }; + enum MenuItemKind { + MENU_ITEM_NORMAL = 0, + MENU_ITEM_CHECK, + MENU_ITEM_RADIO + }; + typedef struct { + int level; // 0 == on menu bar, 1 == one level down + const char *label; // or NULL for a separator + int id; // unique ID + int accel; // keyboard accelerator + MenuItemKind kind; + MenuHandler *fn; + } MenuEntry; + static const MenuEntry menu[]; + static void MenuView(int id); + static void MenuEdit(int id); + static void MenuRequest(int id); + void DeleteSelection(void); + void CopySelection(void); + void PasteClipboard(Vector trans, double theta, double scale); + static void MenuClipboard(int id); + + // The width and height (in pixels) of the window. + double width, height; + // These parameters define the map from 2d screen coordinates to the + // coordinates of the 3d sketch points. We will use an axonometric + // projection. + Vector offset; + Vector projRight; + Vector projUp; + double scale; + struct { + bool mouseDown; + Vector offset; + Vector projRight; + Vector projUp; + Point2d mouse; + Point2d mouseOnButtonDown; + Vector marqueePoint; + bool startedMoving; + } orig; + // We need to detect when the projection is changed to invalidate + // caches for drawn items. + struct { + Vector offset; + Vector projRight; + Vector projUp; + double scale; + } cached; + + // Most recent mouse position, updated every time the mouse moves. + Point2d currentMousePosition; + + // When the user is dragging a point, don't solve multiple times without + // allowing a paint in between. The extra solves are wasted if they're + // not displayed. + bool havePainted; + + // Some state for the context menu. + struct { + bool active; + } context; + + void NormalizeProjectionVectors(void); + Point2d ProjectPoint(Vector p); + Vector ProjectPoint3(Vector p); + Vector ProjectPoint4(Vector p, double *w); + Vector UnProjectPoint(Point2d p); + Vector UnProjectPoint3(Vector p); + void AnimateOnto(Quaternion quatf, Vector offsetf); + void AnimateOntoWorkplane(void); + Vector VectorFromProjs(Vector rightUpForward); + void HandlePointForZoomToFit(Vector p, Point2d *pmax, Point2d *pmin, + double *wmin, bool usePerspective); + void LoopOverPoints(const std::vector &entity, const std::vector &faces, Point2d *pmax, Point2d *pmin, + double *wmin, bool usePerspective, bool includeMesh); + void ZoomToFit(bool includingInvisibles, bool useSelection = false); + + hGroup activeGroup; + void EnsureValidActives(void); + bool LockedInWorkplane(void); + void SetWorkplaneFreeIn3d(void); + hEntity ActiveWorkplane(void); + void ForceTextWindowShown(void); + + // Operations that must be completed by doing something with the mouse + // are noted here. These occupy the same space as the menu ids. + enum { + FIRST_PENDING = 0x0f000000, + DRAGGING_POINTS = 0x0f000000, + DRAGGING_NEW_POINT = 0x0f000001, + DRAGGING_NEW_LINE_POINT = 0x0f000002, + DRAGGING_NEW_CUBIC_POINT = 0x0f000003, + DRAGGING_NEW_ARC_POINT = 0x0f000004, + DRAGGING_CONSTRAINT = 0x0f000005, + DRAGGING_RADIUS = 0x0f000006, + DRAGGING_NORMAL = 0x0f000007, + DRAGGING_NEW_RADIUS = 0x0f000008, + DRAGGING_MARQUEE = 0x0f000009 + }; + + enum SuggestedConstraint { + SUGGESTED_NONE = 0, + SUGGESTED_HORIZONTAL = Constraint::HORIZONTAL, + SUGGESTED_VERTICAL = Constraint::VERTICAL, + }; + + struct { + int operation; + + hRequest request; + hEntity point; + List points; + hEntity circle; + hEntity normal; + hConstraint constraint; + + const char *description; + + SuggestedConstraint suggestion; + } pending; + void ClearPending(void); + // The constraint that is being edited with the on-screen textbox. + hConstraint constraintBeingEdited; + + SuggestedConstraint SuggestLineConstraint(hRequest lineSegment); + + Vector SnapToGrid(Vector p); + bool ConstrainPointByHovered(hEntity pt); + void DeleteTaggedRequests(void); + hRequest AddRequest(int type, bool rememberForUndo); + hRequest AddRequest(int type); + + class ParametricCurve { + public: + bool isLine; // else circle + Vector p0, p1; + Vector u, v; + double r, theta0, theta1, dtheta; + + void MakeFromEntity(hEntity he, bool reverse); + Vector PointAt(double t); + Vector TangentAt(double t); + double LengthForAuto(void); + + hRequest CreateRequestTrimmedTo(double t, bool extraConstraints, + hEntity orig, hEntity arc, bool arcFinish); + void ConstrainPointIfCoincident(hEntity hpt); + }; + void MakeTangentArc(void); + void SplitLinesOrCurves(void); + hEntity SplitEntity(hEntity he, Vector pinter); + hEntity SplitLine(hEntity he, Vector pinter); + hEntity SplitCircle(hEntity he, Vector pinter); + hEntity SplitCubic(hEntity he, Vector pinter); + void ReplacePointInConstraints(hEntity oldpt, hEntity newpt); + void RemoveConstraintsForPointBeingDeleted(hEntity hpt); + void FixConstraintsForRequestBeingDeleted(hRequest hr); + void FixConstraintsForPointBeingDeleted(hEntity hpt); + + // The current selection. + class Selection { + public: + int tag; + + hEntity entity; + hConstraint constraint; + bool emphasized; + + void Draw(void); + + void Clear(void); + bool IsEmpty(void); + bool Equals(Selection *b); + bool HasEndpoints(void); + }; + Selection hover; + bool hoverWasSelectedOnMousedown; + List selection; + void HitTestMakeSelection(Point2d mp); + void ClearSelection(void); + void ClearNonexistentSelectionItems(void); + struct { + std::vector point; + std::vector entity; + std::vector anyNormal; + std::vector vector; + std::vector face; + std::vector constraint; + int points; + int entities; + int workplanes; + int faces; + int lineSegments; + int circlesOrArcs; + int arcs; + int cubics; + int periodicCubics; + int anyNormals; + int vectors; + int constraints; + int stylables; + int constraintLabels; + int withEndpoints; + int n; + } gs; + void GroupSelection(void); + bool IsSelected(Selection *s); + bool IsSelected(hEntity he); + void MakeSelected(hEntity he); + void MakeSelected(hConstraint hc); + void MakeSelected(Selection *s); + void MakeUnselected(hEntity he, bool coincidentPointTrick); + void MakeUnselected(Selection *s, bool coincidentPointTrick); + void SelectByMarquee(void); + void ClearSuper(void); + + enum { + CMNU_UNSELECT_ALL = 0x100, + CMNU_UNSELECT_HOVERED = 0x101, + CMNU_CUT_SEL = 0x102, + CMNU_COPY_SEL = 0x103, + CMNU_PASTE = 0x104, + CMNU_PASTE_XFRM = 0x105, + CMNU_DELETE_SEL = 0x106, + CMNU_SELECT_CHAIN = 0x107, + CMNU_NEW_CUSTOM_STYLE = 0x110, + CMNU_NO_STYLE = 0x111, + CMNU_GROUP_INFO = 0x120, + CMNU_STYLE_INFO = 0x121, + CMNU_REFERENCE_DIM = 0x130, + CMNU_OTHER_ANGLE = 0x131, + CMNU_DEL_COINCIDENT = 0x132, + CMNU_SNAP_TO_GRID = 0x140, + CMNU_REMOVE_SPLINE_PT = 0x141, + CMNU_ADD_SPLINE_PT = 0x142, + CMNU_FIRST_STYLE = 0x40000000 + }; + void ContextMenuListStyles(void); + int64_t contextMenuCancelTime; + + // The toolbar, in toolbar.cpp + bool ToolbarDrawOrHitTest(int x, int y, bool paint, int *menuHit); + void ToolbarDraw(void); + bool ToolbarMouseMoved(int x, int y); + bool ToolbarMouseDown(int x, int y); + static void TimerCallback(void); + int toolbarHovered; + int toolbarTooltipped; + int toolbarMouseX, toolbarMouseY; + + // This sets what gets displayed. + bool showWorkplanes; + bool showNormals; + bool showPoints; + bool showConstraints; + bool showTextWindow; + bool showShaded; + bool showEdges; + bool showOutlines; + bool showFaces; + bool showMesh; + bool showHdnLines; + void ToggleBool(bool *v); + + bool showSnapGrid; + + void AddPointToDraggedList(hEntity hp); + void StartDraggingByEntity(hEntity he); + void StartDraggingBySelection(void); + void UpdateDraggedNum(Vector *pos, double mx, double my); + void UpdateDraggedPoint(hEntity hp, double mx, double my); + + // These are called by the platform-specific code. + void Paint(void); + void MouseMoved(double x, double y, bool leftDown, bool middleDown, + bool rightDown, bool shiftDown, bool ctrlDown); + void MouseLeftDown(double x, double y); + void MouseLeftUp(double x, double y); + void MouseLeftDoubleClick(double x, double y); + void MouseMiddleOrRightDown(double x, double y); + void MouseRightUp(double x, double y); + void MouseScroll(double x, double y, int delta); + void MouseLeave(void); + bool KeyDown(int c); + void EditControlDone(const char *s); + + int64_t lastSpaceNavigatorTime; + hGroup lastSpaceNavigatorGroup; + void SpaceNavigatorMoved(double tx, double ty, double tz, + double rx, double ry, double rz, bool shiftDown); + void SpaceNavigatorButtonUp(void); +}; + + +#endif diff --git a/src/undoredo.cpp b/src/undoredo.cpp new file mode 100644 index 0000000..04b96ee --- /dev/null +++ b/src/undoredo.cpp @@ -0,0 +1,170 @@ +//----------------------------------------------------------------------------- +// The user-visible undo/redo operation; whenever they change something, we +// record our state and push it on a stack, and we pop the stack when they +// select undo. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +void SolveSpaceUI::UndoRemember(void) { + unsaved = true; + PushFromCurrentOnto(&undo); + UndoClearStack(&redo); + UndoEnableMenus(); +} + +void SolveSpaceUI::UndoUndo(void) { + if(undo.cnt <= 0) return; + + PushFromCurrentOnto(&redo); + PopOntoCurrentFrom(&undo); + UndoEnableMenus(); +} + +void SolveSpaceUI::UndoRedo(void) { + if(redo.cnt <= 0) return; + + PushFromCurrentOnto(&undo); + PopOntoCurrentFrom(&redo); + UndoEnableMenus(); +} + +void SolveSpaceUI::UndoEnableMenus(void) { + EnableMenuById(GraphicsWindow::MNU_UNDO, undo.cnt > 0); + EnableMenuById(GraphicsWindow::MNU_REDO, redo.cnt > 0); +} + +void SolveSpaceUI::PushFromCurrentOnto(UndoStack *uk) { + int i; + + if(uk->cnt == MAX_UNDO) { + UndoClearState(&(uk->d[uk->write])); + // And then write in to this one again + } else { + (uk->cnt)++; + } + + UndoState *ut = &(uk->d[uk->write]); + *ut = {}; + for(i = 0; i < SK.group.n; i++) { + Group *src = &(SK.group.elem[i]); + Group dest = *src; + // And then clean up all the stuff that needs to be a deep copy, + // and zero out all the dynamic stuff that will get regenerated. + dest.clean = false; + dest.solved = {}; + dest.polyLoops = {}; + dest.bezierLoops = {}; + dest.bezierOpens = {}; + dest.polyError = {}; + dest.thisMesh = {}; + dest.runningMesh = {}; + dest.thisShell = {}; + dest.runningShell = {}; + dest.displayMesh = {}; + dest.displayEdges = {}; + dest.displayOutlines = {}; + + dest.remap = {}; + src->remap.DeepCopyInto(&(dest.remap)); + + dest.impMesh = {}; + dest.impShell = {}; + dest.impEntity = {}; + ut->group.Add(&dest); + } + for(i = 0; i < SK.groupOrder.n; i++) { + ut->groupOrder.Add(&(SK.groupOrder.elem[i])); + } + for(i = 0; i < SK.request.n; i++) { + ut->request.Add(&(SK.request.elem[i])); + } + for(i = 0; i < SK.constraint.n; i++) { + Constraint *src = &(SK.constraint.elem[i]); + Constraint dest = *src; + dest.dogd = {}; + ut->constraint.Add(&dest); + } + for(i = 0; i < SK.param.n; i++) { + ut->param.Add(&(SK.param.elem[i])); + } + for(i = 0; i < SK.style.n; i++) { + ut->style.Add(&(SK.style.elem[i])); + } + ut->activeGroup = SS.GW.activeGroup; + + uk->write = WRAP(uk->write + 1, MAX_UNDO); +} + +void SolveSpaceUI::PopOntoCurrentFrom(UndoStack *uk) { + int i; + + if(uk->cnt <= 0) oops(); + (uk->cnt)--; + uk->write = WRAP(uk->write - 1, MAX_UNDO); + + UndoState *ut = &(uk->d[uk->write]); + + // Free everything in the main copy of the program before replacing it + for(i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + g->Clear(); + } + SK.group.Clear(); + SK.groupOrder.Clear(); + SK.request.Clear(); + SK.constraint.Clear(); + SK.param.Clear(); + SK.style.Clear(); + + // And then do a shallow copy of the state from the undo list + ut->group.MoveSelfInto(&(SK.group)); + for(i = 0; i < ut->groupOrder.n; i++) + SK.groupOrder.Add(&ut->groupOrder.elem[i]); + ut->request.MoveSelfInto(&(SK.request)); + ut->constraint.MoveSelfInto(&(SK.constraint)); + ut->param.MoveSelfInto(&(SK.param)); + ut->style.MoveSelfInto(&(SK.style)); + SS.GW.activeGroup = ut->activeGroup; + + // No need to free it, since a shallow copy was made above + *ut = {}; + + // And reset the state everywhere else in the program, since the + // sketch just changed a lot. + SS.GW.ClearSuper(); + SS.TW.ClearSuper(); + SS.ReloadAllImported(); + SS.GenerateAll(SolveSpaceUI::GENERATE_ALL); + SS.ScheduleShowTW(); + + // Activate the group that was active before. + Group *activeGroup = SK.GetGroup(SS.GW.activeGroup); + activeGroup->Activate(); +} + +void SolveSpaceUI::UndoClearStack(UndoStack *uk) { + while(uk->cnt > 0) { + uk->write = WRAP(uk->write - 1, MAX_UNDO); + (uk->cnt)--; + UndoClearState(&(uk->d[uk->write])); + } + *uk = {}; // for good measure +} + +void SolveSpaceUI::UndoClearState(UndoState *ut) { + int i; + for(i = 0; i < ut->group.n; i++) { + Group *g = &(ut->group.elem[i]); + + g->remap.Clear(); + } + ut->group.Clear(); + ut->request.Clear(); + ut->constraint.Clear(); + ut->param.Clear(); + ut->style.Clear(); + *ut = {}; +} + diff --git a/src/unix/gloffscreen.cpp b/src/unix/gloffscreen.cpp new file mode 100644 index 0000000..be836e2 --- /dev/null +++ b/src/unix/gloffscreen.cpp @@ -0,0 +1,86 @@ +//----------------------------------------------------------------------------- +// Offscreen rendering in OpenGL using framebuffer objects. +// +// Copyright 2015 +//----------------------------------------------------------------------------- +#ifdef __APPLE__ +#include +#else +#include +#endif + +#include "gloffscreen.h" +#include "solvespace.h" + +GLOffscreen::GLOffscreen() : _pixels(NULL), _pixels_inv(NULL), _width(0), _height(0) { +#ifndef __APPLE__ + if(glewInit() != GLEW_OK) + oops(); +#endif + + if(!GL_EXT_framebuffer_object) + oops(); + + glGenFramebuffersEXT(1, &_framebuffer); + glGenRenderbuffersEXT(1, &_color_renderbuffer); + glGenRenderbuffersEXT(1, &_depth_renderbuffer); +} + +GLOffscreen::~GLOffscreen() { + delete[] _pixels; + delete[] _pixels_inv; + glDeleteRenderbuffersEXT(1, &_depth_renderbuffer); + glDeleteRenderbuffersEXT(1, &_color_renderbuffer); + glDeleteFramebuffersEXT(1, &_framebuffer); +} + +bool GLOffscreen::begin(int width, int height) { + if(_width != width || _height != height) { + delete[] _pixels; + delete[] _pixels_inv; + + _pixels = new uint32_t[width * height * 4]; + _pixels_inv = new uint32_t[width * height * 4]; + + _width = width; + _height = height; + } + + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, _framebuffer); + + glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, _color_renderbuffer); + glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA8, _width, _height); + glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, + GL_RENDERBUFFER_EXT, _color_renderbuffer); + + glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, _depth_renderbuffer); + glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, _width, _height); + glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, + GL_RENDERBUFFER_EXT, _depth_renderbuffer); + + if(glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_COMPLETE_EXT) + return true; + + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + return false; +} + +uint8_t *GLOffscreen::end(bool flip) { +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + glReadPixels(0, 0, _width, _height, + GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, _pixels_inv); +#else + glReadPixels(0, 0, _width, _height, + GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, _pixels_inv); +#endif + + if(flip) { + /* in OpenGL coordinates, bottom is zero Y */ + for(int i = 0; i < _height; i++) + memcpy(&_pixels[_width * i], &_pixels_inv[_width * (_height - i - 1)], _width * 4); + } + + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + + return (uint8_t*) (flip ? _pixels : _pixels_inv); +} diff --git a/src/unix/gloffscreen.h b/src/unix/gloffscreen.h new file mode 100644 index 0000000..c897be3 --- /dev/null +++ b/src/unix/gloffscreen.h @@ -0,0 +1,36 @@ +//----------------------------------------------------------------------------- +// Offscreen rendering in OpenGL using framebuffer objects. +// +// Copyright 2015 +//----------------------------------------------------------------------------- +#ifndef __GLOFFSCREEN_H +#define __GLOFFSCREEN_H + +#include + +class GLOffscreen { +public: + /* these allocate and deallocate OpenGL resources. + an OpenGL context /must/ be current. */ + GLOffscreen(); + ~GLOffscreen(); + + /* prepare for drawing a frame of specified size. + returns true if OpenGL likes our configuration, false + otherwise. if it returns false, the OpenGL state is restored. */ + bool begin(int width, int height); + + /* get pixels out of the frame and restore OpenGL state. + the pixel format is ARGB32 with top row at index 0 if + flip is true and bottom row at index 0 if flip is false. + the returned array is valid until the next call to begin() */ + uint8_t *end(bool flip = true); + +private: + unsigned int _framebuffer; + unsigned int _color_renderbuffer, _depth_renderbuffer; + uint32_t *_pixels, *_pixels_inv; + int _width, _height; +}; + +#endif diff --git a/src/unix/solvespace-16x16.png b/src/unix/solvespace-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..2d2b23f0c4f23fe50350821f4133fed7bfb9ca43 GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF2OC7#SFv>KYj98X1Hb8e5qfSeY1W8yH&|7;KPN g5kk?Bo1c=IR*74~L8m$EfEpM)UHx3vIVCg!0ByBi4*&oF literal 0 HcmV?d00001 diff --git a/src/unix/solvespace-16x16.xpm b/src/unix/solvespace-16x16.xpm new file mode 100644 index 0000000..3cd0662 --- /dev/null +++ b/src/unix/solvespace-16x16.xpm @@ -0,0 +1,27 @@ +/* XPM */ +static char *solvespace_16x16[] = { +/* columns rows colors chars-per-pixel */ +"16 16 5 1 ", +" c black", +". c #1ED500", +"X c #DE00D6", +"o c #CBCBCB", +"O c None", +/* pixels */ +"OOO OOOOOOOOOOOO", +"OOO OOOOOOOOOOOO", +"OOO OOOOOOOOOOOO", +"OOO OOOOOXOOOOOO", +"OOO OOOOOXoOOOOO", +"OOO OOOOOXoOOOOO", +"OOO OOOOOXoOOOOO", +"OOO OOOOOXoOOOOO", +"OOO OOOOOXoOOOOO", +"OOO OOXXXXXXXOOO", +"OOO OOOoooooooOO", +"OO...OOOOOOOOOOO", +" ... ", +"OO...OOOOOOOOOOO", +"OOO OOOOOOOOOOOO", +"OOO OOOOOOOOOOOO" +}; diff --git a/src/unix/solvespace-24x24.png b/src/unix/solvespace-24x24.png new file mode 100644 index 0000000000000000000000000000000000000000..7ba03eed8c58e3fbb291f8ae089bb3a2be9a82a2 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wmUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5ln@H=32_C|KyZ)Y+Ue7$ z<*qXP|Nno@tR37yA;yv*zhDN3XE)M7oFs2|7uFy7FOLH`>?NMQuI%@jMVUmz7b?Zy z1_~K?x;TbNTux3<;5QIDo9OgVBH&nHP*6}q@r>Ty-i0#a>@9Pf^!l0<8Z?`aFI>XJ z!2XIwewzEDBS5{XC9V-ADTyViR>?)FK#IZ0z|d6Jz*yJFAjHtv%GAKh#8}(F*vi0Q igS?6miiX_$l+3hB+!_u#%~=Q3z~JfX=d#Wzp$Pyu|6K_H literal 0 HcmV?d00001 diff --git a/src/unix/solvespace-24x24.xpm b/src/unix/solvespace-24x24.xpm new file mode 100644 index 0000000..9d1c02e --- /dev/null +++ b/src/unix/solvespace-24x24.xpm @@ -0,0 +1,35 @@ +/* XPM */ +static char *solvespace_24x24[] = { +/* columns rows colors chars-per-pixel */ +"24 24 5 1 ", +" c black", +". c #1ED500", +"X c #DE00D6", +"o c #CBCBCB", +"O c None", +/* pixels */ +"OOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOO OOOOOOOOOOOOOOOO", +"OOOOOOO OOOOOOOOOOOOOOOO", +"OOOOOOO OOOOOOOOOOOOOOOO", +"OOOOOOO OOOOOXOOOOOOOOOO", +"OOOOOOO OOOOOXoOOOOOOOOO", +"OOOOOOO OOOOOXoOOOOOOOOO", +"OOOOOOO OOOOOXoOOOOOOOOO", +"OOOOOOO OOOOOXoOOOOOOOOO", +"OOOOOOO OOOOOXoOOOOOOOOO", +"OOOOOOO OOXXXXXXXOOOOOOO", +"OOOOOOO OOOoooooooOOOOOO", +"OOOOOO...OOOOOOOOOOOOOOO", +"OOOO ... OOOO", +"OOOOOO...OOOOOOOOOOOOOOO", +"OOOOOOO OOOOOOOOOOOOOOOO", +"OOOOOOO OOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOO" +}; diff --git a/src/unix/solvespace-32x32.png b/src/unix/solvespace-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..a24bf6a8472c7c7b2cbbe0f3d72f09759ff6def4 GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgAr#;f;tHgJ;2y)Z)2C0% zU1j+H|Noj?;(M5ynj9D%Sq_LO zRdP`(kYX@0Ff`RQFxE9P2r)FaGBvO= qG1fLPwlXl-Ag>~Xq9HdwB{QuOw}yjGbJhVhFnGH9xvXI{(rPmO*bPE`X1*QT2iEIb=-Hu6r;dHCp&)1;OK3IR?6 zj2zw*^4LRdJED_TFf**$#4|hnmaRC@B-Ikvh?11Vl2ohYqEsNoU}Ruus%v1ZYh(~& wXl!L_U}a*gZD4F=V6Z`6MF>ShZhlH;S|x4`2c71u18QLKboFyt=akR{0Omwt`Tzg` literal 0 HcmV?d00001 diff --git a/src/unix/solvespace-48x48.xpm b/src/unix/solvespace-48x48.xpm new file mode 100644 index 0000000..c5adf53 --- /dev/null +++ b/src/unix/solvespace-48x48.xpm @@ -0,0 +1,59 @@ +/* XPM */ +static char *solvespace_48x48[] = { +/* columns rows colors chars-per-pixel */ +"48 48 5 1 ", +" c black", +". c #1ED500", +"X c #DE00D6", +"o c #CBCBCB", +"O c None", +/* pixels */ +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOXXXXXXXXXXXXOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOXXXXXXXXXXXXOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOooooooooooooOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOO......OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOO......OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOO ...... OOOOOOOO", +"OOOOOOOO ...... OOOOOOOO", +"OOOOOOOOOOOO......OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOO......OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO" +}; diff --git a/src/unix/solvespace.desktop b/src/unix/solvespace.desktop new file mode 100644 index 0000000..d2d7398 --- /dev/null +++ b/src/unix/solvespace.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Version=1.0 +Name=SolveSpace +Comment=A parametric 2d/3d CAD +Exec=/usr/bin/solvespace +Icon=solvespace +Type=Application +Categories=Graphics +Keywords=parametric;cad;2d;3d; diff --git a/src/unix/unixutil.cpp b/src/unix/unixutil.cpp new file mode 100644 index 0000000..7c1d921 --- /dev/null +++ b/src/unix/unixutil.cpp @@ -0,0 +1,112 @@ +//----------------------------------------------------------------------------- +// Utility functions used by the Unix port. Notably, our memory allocation; +// we use two separate allocators, one for long-lived stuff and one for +// stuff that gets freed after every regeneration of the model, to save us +// the trouble of freeing the latter explicitly. +// +// Copyright 2008-2013 Jonathan Westhues. +// Copyright 2013 Daniel Richard G. +//----------------------------------------------------------------------------- +#include + +#include "solvespace.h" + +namespace SolveSpace { + +void dbp(const char *str, ...) +{ + va_list f; + static char buf[1024*50]; + va_start(f, str); + vsnprintf(buf, sizeof(buf), str, f); + va_end(f); + + fputs(buf, stderr); + fputc('\n', stderr); +} + +FILE *ssfopen(const std::string &filename, const char *mode) +{ + if(filename.length() != strlen(filename.c_str())) oops(); + return fopen(filename.c_str(), mode); +} + +void ssremove(const std::string &filename) +{ + if(filename.length() != strlen(filename.c_str())) oops(); + remove(filename.c_str()); +} + +int64_t GetUnixTime(void) +{ + time_t ret; + time(&ret); + return (int64_t)ret; +} + +//----------------------------------------------------------------------------- +// A separate heap, on which we allocate expressions. Maybe a bit faster, +// since fragmentation is less of a concern, and it also makes it possible +// to be sloppy with our memory management, and just free everything at once +// at the end. +//----------------------------------------------------------------------------- + +typedef struct _AllocTempHeader AllocTempHeader; + +typedef struct _AllocTempHeader { + AllocTempHeader *prev; + AllocTempHeader *next; +} AllocTempHeader; + +static AllocTempHeader *Head = NULL; + +void *AllocTemporary(size_t n) +{ + AllocTempHeader *h = + (AllocTempHeader *)malloc(n + sizeof(AllocTempHeader)); + h->prev = NULL; + h->next = Head; + if(Head) Head->prev = h; + Head = h; + memset(&h[1], 0, n); + return (void *)&h[1]; +} + +void FreeTemporary(void *p) +{ + AllocTempHeader *h = (AllocTempHeader *)p - 1; + if(h->prev) { + h->prev->next = h->next; + } else { + Head = h->next; + } + if(h->next) h->next->prev = h->prev; + free(h); +} + +void FreeAllTemporary(void) +{ + AllocTempHeader *h = Head; + while(h) { + AllocTempHeader *f = h; + h = h->next; + free(f); + } + Head = NULL; +} + +void *MemAlloc(size_t n) { + void *p = malloc(n); + if(!p) oops(); + return p; +} + +void MemFree(void *p) { + free(p); +} + +void InitHeaps(void) { + /* nothing to do */ +} + +}; diff --git a/src/util.cpp b/src/util.cpp new file mode 100644 index 0000000..f1c50e4 --- /dev/null +++ b/src/util.cpp @@ -0,0 +1,1053 @@ +//----------------------------------------------------------------------------- +// Utility functions, mostly various kinds of vector math (working on real +// numbers, not working on quantities in the symbolic algebra system). +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +std::string SolveSpace::ssprintf(const char *fmt, ...) +{ + va_list va; + + va_start(va, fmt); + int size = vsnprintf(NULL, 0, fmt, va); + if(size < 0) oops(); + va_end(va); + + std::string result; + result.resize(size); + + va_start(va, fmt); + vsnprintf(&result[0], size + 1, fmt, va); + va_end(va); + + return result; +} + +char32_t utf8_iterator::operator*() +{ + const uint8_t *it = (const uint8_t*) this->p; + char32_t result = *it; + + if((result & 0x80) != 0) { + unsigned int mask = 0x40; + + do { + result <<= 6; + unsigned int c = (*++it); + mask <<= 5; + result += c - 0x80; + } while((result & mask) != 0); + + result &= mask - 1; + } + + this->n = (const char*) (it + 1); + return result; +} + +bool SolveSpace::FilenameHasExtension(const std::string &str, const char *ext) +{ + int i, ls = str.length(), le = strlen(ext); + + if(ls < le) return false; + + for(i = 0; i < le; i++) { + if(tolower(ext[le-i-1]) != tolower(str[ls-i-1])) { + return false; + } + } + return true; +} + +void SolveSpace::MakeMatrix(double *mat, + double a11, double a12, double a13, double a14, + double a21, double a22, double a23, double a24, + double a31, double a32, double a33, double a34, + double a41, double a42, double a43, double a44) +{ + mat[ 0] = a11; + mat[ 1] = a21; + mat[ 2] = a31; + mat[ 3] = a41; + mat[ 4] = a12; + mat[ 5] = a22; + mat[ 6] = a32; + mat[ 7] = a42; + mat[ 8] = a13; + mat[ 9] = a23; + mat[10] = a33; + mat[11] = a43; + mat[12] = a14; + mat[13] = a24; + mat[14] = a34; + mat[15] = a44; +} + +//----------------------------------------------------------------------------- +// Word-wrap the string for our message box appropriately, and then display +// that string. +//----------------------------------------------------------------------------- +static void DoStringForMessageBox(const char *str, va_list f, bool error) +{ + char inBuf[1024*50]; + vsprintf(inBuf, str, f); + + char outBuf[1024*50]; + int i = 0, j = 0, len = 0, longestLen = 47; + int rows = 0, cols = 0; + + // Count the width of the longest line that starts with spaces; those + // are list items, that should not be split in the middle. + bool listLine = false; + while(inBuf[i]) { + if(inBuf[i] == '\r') { + // ignore these + } else if(inBuf[i] == ' ' && len == 0) { + listLine = true; + } else if(inBuf[i] == '\n') { + if(listLine) longestLen = max(longestLen, len); + len = 0; + } else { + len++; + } + i++; + } + if(listLine) longestLen = max(longestLen, len); + + // Word wrap according to our target line length longestLen. + len = 0; + i = 0; + while(inBuf[i]) { + if(inBuf[i] == '\r') { + // ignore these + } else if(inBuf[i] == '\n') { + outBuf[j++] = '\n'; + if(len == 0) rows++; + len = 0; + } else if(inBuf[i] == ' ' && len > longestLen) { + outBuf[j++] = '\n'; + len = 0; + } else { + outBuf[j++] = inBuf[i]; + // Count rows when we draw the first character; so an empty + // row doesn't end up counting. + if(len == 0) rows++; + len++; + } + cols = max(cols, len); + i++; + } + outBuf[j++] = '\0'; + + // And then display the text with our actual longest line length. + DoMessageBox(outBuf, rows, cols, error); +} +void SolveSpace::Error(const char *str, ...) +{ + va_list f; + va_start(f, str); + DoStringForMessageBox(str, f, true); + va_end(f); +} +void SolveSpace::Message(const char *str, ...) +{ + va_list f; + va_start(f, str); + DoStringForMessageBox(str, f, false); + va_end(f); +} + +void SolveSpace::CnfFreezeBool(bool v, const std::string &name) + { CnfFreezeInt(v ? 1 : 0, name); } + +void SolveSpace::CnfFreezeColor(RgbaColor v, const std::string &name) + { CnfFreezeInt(v.ToPackedInt(), name); } + +bool SolveSpace::CnfThawBool(bool v, const std::string &name) + { return CnfThawInt(v ? 1 : 0, name) != 0; } + +RgbaColor SolveSpace::CnfThawColor(RgbaColor v, const std::string &name) + { return RgbaColor::FromPackedInt(CnfThawInt(v.ToPackedInt(), name)); } + +//----------------------------------------------------------------------------- +// Solve a mostly banded matrix. In a given row, there are LEFT_OF_DIAG +// elements to the left of the diagonal element, and RIGHT_OF_DIAG elements to +// the right (so that the total band width is LEFT_OF_DIAG + RIGHT_OF_DIAG + 1). +// There also may be elements in the last two columns of any row. We solve +// without pivoting. +//----------------------------------------------------------------------------- +void BandedMatrix::Solve(void) { + int i, ip, j, jp; + double temp; + + // Reduce the matrix to upper triangular form. + for(i = 0; i < n; i++) { + for(ip = i+1; ip < n && ip <= (i + LEFT_OF_DIAG); ip++) { + temp = A[ip][i]/A[i][i]; + + for(jp = i; jp < (n - 2) && jp <= (i + RIGHT_OF_DIAG); jp++) { + A[ip][jp] -= temp*(A[i][jp]); + } + A[ip][n-2] -= temp*(A[i][n-2]); + A[ip][n-1] -= temp*(A[i][n-1]); + + B[ip] -= temp*B[i]; + } + } + + // And back-substitute. + for(i = n - 1; i >= 0; i--) { + temp = B[i]; + + if(i < n-1) temp -= X[n-1]*A[i][n-1]; + if(i < n-2) temp -= X[n-2]*A[i][n-2]; + + for(j = min(n - 3, i + RIGHT_OF_DIAG); j > i; j--) { + temp -= X[j]*A[i][j]; + } + X[i] = temp / A[i][i]; + } +} + +const Quaternion Quaternion::IDENTITY = { 1, 0, 0, 0 }; + +Quaternion Quaternion::From(double w, double vx, double vy, double vz) { + Quaternion q; + q.w = w; + q.vx = vx; + q.vy = vy; + q.vz = vz; + return q; +} + +Quaternion Quaternion::From(hParam w, hParam vx, hParam vy, hParam vz) { + Quaternion q; + q.w = SK.GetParam(w )->val; + q.vx = SK.GetParam(vx)->val; + q.vy = SK.GetParam(vy)->val; + q.vz = SK.GetParam(vz)->val; + return q; +} + +Quaternion Quaternion::From(Vector axis, double dtheta) { + Quaternion q; + double c = cos(dtheta / 2), s = sin(dtheta / 2); + axis = axis.WithMagnitude(s); + q.w = c; + q.vx = axis.x; + q.vy = axis.y; + q.vz = axis.z; + return q; +} + +Quaternion Quaternion::From(Vector u, Vector v) +{ + Vector n = u.Cross(v); + + Quaternion q; + double s, tr = 1 + u.x + v.y + n.z; + if(tr > 1e-4) { + s = 2*sqrt(tr); + q.w = s/4; + q.vx = (v.z - n.y)/s; + q.vy = (n.x - u.z)/s; + q.vz = (u.y - v.x)/s; + } else { + if(u.x > v.y && u.x > n.z) { + s = 2*sqrt(1 + u.x - v.y - n.z); + q.w = (v.z - n.y)/s; + q.vx = s/4; + q.vy = (u.y + v.x)/s; + q.vz = (n.x + u.z)/s; + } else if(v.y > n.z) { + s = 2*sqrt(1 - u.x + v.y - n.z); + q.w = (n.x - u.z)/s; + q.vx = (u.y + v.x)/s; + q.vy = s/4; + q.vz = (v.z + n.y)/s; + } else { + s = 2*sqrt(1 - u.x - v.y + n.z); + q.w = (u.y - v.x)/s; + q.vx = (n.x + u.z)/s; + q.vy = (v.z + n.y)/s; + q.vz = s/4; + } + } + + return q.WithMagnitude(1); +} + +Quaternion Quaternion::Plus(Quaternion b) { + Quaternion q; + q.w = w + b.w; + q.vx = vx + b.vx; + q.vy = vy + b.vy; + q.vz = vz + b.vz; + return q; +} + +Quaternion Quaternion::Minus(Quaternion b) { + Quaternion q; + q.w = w - b.w; + q.vx = vx - b.vx; + q.vy = vy - b.vy; + q.vz = vz - b.vz; + return q; +} + +Quaternion Quaternion::ScaledBy(double s) { + Quaternion q; + q.w = w*s; + q.vx = vx*s; + q.vy = vy*s; + q.vz = vz*s; + return q; +} + +double Quaternion::Magnitude(void) { + return sqrt(w*w + vx*vx + vy*vy + vz*vz); +} + +Quaternion Quaternion::WithMagnitude(double s) { + return ScaledBy(s/Magnitude()); +} + +Vector Quaternion::RotationU(void) { + Vector v; + v.x = w*w + vx*vx - vy*vy - vz*vz; + v.y = 2*w *vz + 2*vx*vy; + v.z = 2*vx*vz - 2*w *vy; + return v; +} + +Vector Quaternion::RotationV(void) { + Vector v; + v.x = 2*vx*vy - 2*w*vz; + v.y = w*w - vx*vx + vy*vy - vz*vz; + v.z = 2*w*vx + 2*vy*vz; + return v; +} + +Vector Quaternion::RotationN(void) { + Vector v; + v.x = 2*w*vy + 2*vx*vz; + v.y = 2*vy*vz - 2*w*vx; + v.z = w*w - vx*vx - vy*vy + vz*vz; + return v; +} + +Vector Quaternion::Rotate(Vector p) { + // Express the point in the new basis + return (RotationU().ScaledBy(p.x)).Plus( + RotationV().ScaledBy(p.y)).Plus( + RotationN().ScaledBy(p.z)); +} + +Quaternion Quaternion::Inverse(void) { + Quaternion r; + r.w = w; + r.vx = -vx; + r.vy = -vy; + r.vz = -vz; + return r.WithMagnitude(1); // not that the normalize should be reqd +} + +Quaternion Quaternion::ToThe(double p) { + // Avoid division by zero, or arccos of something not in its domain + if(w >= (1 - 1e-6)) { + return From(1, 0, 0, 0); + } else if(w <= (-1 + 1e-6)) { + return From(-1, 0, 0, 0); + } + + Quaternion r; + Vector axis = Vector::From(vx, vy, vz); + double theta = acos(w); // okay, since magnitude is 1, so -1 <= w <= 1 + theta *= p; + r.w = cos(theta); + axis = axis.WithMagnitude(sin(theta)); + r.vx = axis.x; + r.vy = axis.y; + r.vz = axis.z; + return r; +} + +Quaternion Quaternion::Times(Quaternion b) { + double sa = w, sb = b.w; + Vector va = { vx, vy, vz }; + Vector vb = { b.vx, b.vy, b.vz }; + + Quaternion r; + r.w = sa*sb - va.Dot(vb); + Vector vr = vb.ScaledBy(sa).Plus( + va.ScaledBy(sb).Plus( + va.Cross(vb))); + r.vx = vr.x; + r.vy = vr.y; + r.vz = vr.z; + return r; +} + +Quaternion Quaternion::Mirror(void) { + Vector u = RotationU(), + v = RotationV(); + u = u.ScaledBy(-1); + v = v.ScaledBy(-1); + return Quaternion::From(u, v); +} + + +Vector Vector::From(double x, double y, double z) { + Vector v; + v.x = x; v.y = y; v.z = z; + return v; +} + +Vector Vector::From(hParam x, hParam y, hParam z) { + Vector v; + v.x = SK.GetParam(x)->val; + v.y = SK.GetParam(y)->val; + v.z = SK.GetParam(z)->val; + return v; +} + +double Vector::Element(int i) { + switch(i) { + case 0: return x; + case 1: return y; + case 2: return z; + default: oops(); + } +} + +bool Vector::Equals(Vector v, double tol) { + // Quick axis-aligned tests before going further + double dx = v.x - x; if(dx < -tol || dx > tol) return false; + double dy = v.y - y; if(dy < -tol || dy > tol) return false; + double dz = v.z - z; if(dz < -tol || dz > tol) return false; + + return (this->Minus(v)).MagSquared() < tol*tol; +} + +bool Vector::EqualsExactly(Vector v) { + return EXACT(x == v.x && + y == v.y && + z == v.z); +} + +Vector Vector::Plus(Vector b) { + Vector r; + + r.x = x + b.x; + r.y = y + b.y; + r.z = z + b.z; + + return r; +} + +Vector Vector::Minus(Vector b) { + Vector r; + + r.x = x - b.x; + r.y = y - b.y; + r.z = z - b.z; + + return r; +} + +Vector Vector::Negated(void) { + Vector r; + + r.x = -x; + r.y = -y; + r.z = -z; + + return r; +} + +Vector Vector::Cross(Vector b) { + Vector r; + + r.x = -(z*b.y) + (y*b.z); + r.y = (z*b.x) - (x*b.z); + r.z = -(y*b.x) + (x*b.y); + + return r; +} + +double Vector::Dot(Vector b) { + return (x*b.x + y*b.y + z*b.z); +} + +double Vector::DirectionCosineWith(Vector b) { + Vector a = this->WithMagnitude(1); + b = b.WithMagnitude(1); + return a.Dot(b); +} + +Vector Vector::Normal(int which) { + Vector n; + + // Arbitrarily choose one vector that's normal to us, pivoting + // appropriately. + double xa = fabs(x), ya = fabs(y), za = fabs(z); + if(this->Equals(Vector::From(0, 0, 1))) { + // Make DXFs exported in the XY plane work nicely... + n = Vector::From(1, 0, 0); + } else if(xa < ya && xa < za) { + n.x = 0; + n.y = z; + n.z = -y; + } else if(ya < za) { + n.x = -z; + n.y = 0; + n.z = x; + } else { + n.x = y; + n.y = -x; + n.z = 0; + } + + if(which == 0) { + // That's the vector we return. + } else if(which == 1) { + n = this->Cross(n); + } else oops(); + + n = n.WithMagnitude(1); + + return n; +} + +Vector Vector::RotatedAbout(Vector orig, Vector axis, double theta) { + Vector r = this->Minus(orig); + r = r.RotatedAbout(axis, theta); + return r.Plus(orig); +} + +Vector Vector::RotatedAbout(Vector axis, double theta) { + double c = cos(theta); + double s = sin(theta); + + axis = axis.WithMagnitude(1); + + Vector r; + + r.x = (x)*(c + (1 - c)*(axis.x)*(axis.x)) + + (y)*((1 - c)*(axis.x)*(axis.y) - s*(axis.z)) + + (z)*((1 - c)*(axis.x)*(axis.z) + s*(axis.y)); + + r.y = (x)*((1 - c)*(axis.y)*(axis.x) + s*(axis.z)) + + (y)*(c + (1 - c)*(axis.y)*(axis.y)) + + (z)*((1 - c)*(axis.y)*(axis.z) - s*(axis.x)); + + r.z = (x)*((1 - c)*(axis.z)*(axis.x) - s*(axis.y)) + + (y)*((1 - c)*(axis.z)*(axis.y) + s*(axis.x)) + + (z)*(c + (1 - c)*(axis.z)*(axis.z)); + + return r; +} + +Vector Vector::DotInToCsys(Vector u, Vector v, Vector n) { + Vector r = { + this->Dot(u), + this->Dot(v), + this->Dot(n) + }; + return r; +} + +Vector Vector::ScaleOutOfCsys(Vector u, Vector v, Vector n) { + Vector r = u.ScaledBy(x).Plus( + v.ScaledBy(y).Plus( + n.ScaledBy(z))); + return r; +} + +Vector Vector::InPerspective(Vector u, Vector v, Vector n, + Vector origin, double cameraTan) +{ + Vector r = this->Minus(origin); + r = r.DotInToCsys(u, v, n); + // yes, minus; we are assuming a csys where u cross v equals n, backwards + // from the display stuff + double w = (1 - r.z*cameraTan); + r = r.ScaledBy(1/w); + + return r; +} + +double Vector::DistanceToLine(Vector p0, Vector dp) { + double m = dp.Magnitude(); + return ((this->Minus(p0)).Cross(dp)).Magnitude() / m; +} + +bool Vector::OnLineSegment(Vector a, Vector b, double tol) { + if(this->Equals(a, tol) || this->Equals(b, tol)) return true; + + Vector d = b.Minus(a); + + double m = d.MagSquared(); + double distsq = ((this->Minus(a)).Cross(d)).MagSquared() / m; + + if(distsq >= tol*tol) return false; + + double t = (this->Minus(a)).DivPivoting(d); + // On-endpoint already tested + if(t < 0 || t > 1) return false; + return true; +} + +Vector Vector::ClosestPointOnLine(Vector p0, Vector dp) { + dp = dp.WithMagnitude(1); + // this, p0, and (p0+dp) define a plane; the min distance is in + // that plane, so calculate its normal + Vector pn = (this->Minus(p0)).Cross(dp); + // The minimum distance line is in that plane, perpendicular + // to the line + Vector n = pn.Cross(dp); + + // Calculate the actual distance + double d = (dp.Cross(p0.Minus(*this))).Magnitude(); + return this->Plus(n.WithMagnitude(d)); +} + +double Vector::MagSquared(void) { + return x*x + y*y + z*z; +} + +double Vector::Magnitude(void) { + return sqrt(x*x + y*y + z*z); +} + +Vector Vector::ScaledBy(double v) { + Vector r; + + r.x = x * v; + r.y = y * v; + r.z = z * v; + + return r; +} + +Vector Vector::WithMagnitude(double v) { + double m = Magnitude(); + if(EXACT(m == 0)) { + // We can do a zero vector with zero magnitude, but not any other cases. + if(fabs(v) > 1e-100) { + dbp("Vector::WithMagnitude(%g) of zero vector!", v); + } + return From(0, 0, 0); + } else { + return ScaledBy(v/m); + } +} + +Vector Vector::ProjectVectorInto(hEntity wrkpl) { + EntityBase *w = SK.GetEntity(wrkpl); + Vector u = w->Normal()->NormalU(); + Vector v = w->Normal()->NormalV(); + + double up = this->Dot(u); + double vp = this->Dot(v); + + return (u.ScaledBy(up)).Plus(v.ScaledBy(vp)); +} + +Vector Vector::ProjectInto(hEntity wrkpl) { + EntityBase *w = SK.GetEntity(wrkpl); + Vector p0 = w->WorkplaneGetOffset(); + + Vector f = this->Minus(p0); + + return p0.Plus(f.ProjectVectorInto(wrkpl)); +} + +Point2d Vector::Project2d(Vector u, Vector v) { + Point2d p; + p.x = this->Dot(u); + p.y = this->Dot(v); + return p; +} + +Point2d Vector::ProjectXy(void) { + Point2d p; + p.x = x; + p.y = y; + return p; +} + +Vector4 Vector::Project4d(void) { + return Vector4::From(1, x, y, z); +} + +double Vector::DivPivoting(Vector delta) { + double mx = fabs(delta.x), my = fabs(delta.y), mz = fabs(delta.z); + + if(mx > my && mx > mz) { + return x/delta.x; + } else if(my > mz) { + return y/delta.y; + } else { + return z/delta.z; + } +} + +Vector Vector::ClosestOrtho(void) { + double mx = fabs(x), my = fabs(y), mz = fabs(z); + + if(mx > my && mx > mz) { + return From((x > 0) ? 1 : -1, 0, 0); + } else if(my > mz) { + return From(0, (y > 0) ? 1 : -1, 0); + } else { + return From(0, 0, (z > 0) ? 1 : -1); + } +} + +Vector Vector::ClampWithin(double minv, double maxv) { + Vector ret = *this; + + if(ret.x < minv) ret.x = minv; + if(ret.y < minv) ret.y = minv; + if(ret.z < minv) ret.z = minv; + + if(ret.x > maxv) ret.x = maxv; + if(ret.y > maxv) ret.y = maxv; + if(ret.z > maxv) ret.z = maxv; + + return ret; +} + +void Vector::MakeMaxMin(Vector *maxv, Vector *minv) { + maxv->x = max(maxv->x, x); + maxv->y = max(maxv->y, y); + maxv->z = max(maxv->z, z); + + minv->x = min(minv->x, x); + minv->y = min(minv->y, y); + minv->z = min(minv->z, z); +} + +bool Vector::OutsideAndNotOn(Vector maxv, Vector minv) { + return (x > maxv.x + LENGTH_EPS) || (x < minv.x - LENGTH_EPS) || + (y > maxv.y + LENGTH_EPS) || (y < minv.y - LENGTH_EPS) || + (z > maxv.z + LENGTH_EPS) || (z < minv.z - LENGTH_EPS); +} + +bool Vector::BoundingBoxesDisjoint(Vector amax, Vector amin, + Vector bmax, Vector bmin) +{ + int i; + for(i = 0; i < 3; i++) { + if(amax.Element(i) < bmin.Element(i) - LENGTH_EPS) return true; + if(amin.Element(i) > bmax.Element(i) + LENGTH_EPS) return true; + } + return false; +} + +bool Vector::BoundingBoxIntersectsLine(Vector amax, Vector amin, + Vector p0, Vector p1, bool segment) +{ + Vector dp = p1.Minus(p0); + double lp = dp.Magnitude(); + dp = dp.ScaledBy(1.0/lp); + + int i, a; + for(i = 0; i < 3; i++) { + int j = WRAP(i+1, 3), k = WRAP(i+2, 3); + if(lp*fabs(dp.Element(i)) < LENGTH_EPS) continue; // parallel to plane + + for(a = 0; a < 2; a++) { + double d = (a == 0) ? amax.Element(i) : amin.Element(i); + // n dot (p0 + t*dp) = d + // (n dot p0) + t * (n dot dp) = d + double t = (d - p0.Element(i)) / dp.Element(i); + Vector p = p0.Plus(dp.ScaledBy(t)); + + if(segment && (t < -LENGTH_EPS || t > (lp+LENGTH_EPS))) continue; + + if(p.Element(j) > amax.Element(j) + LENGTH_EPS) continue; + if(p.Element(k) > amax.Element(k) + LENGTH_EPS) continue; + + if(p.Element(j) < amin.Element(j) - LENGTH_EPS) continue; + if(p.Element(k) < amin.Element(k) - LENGTH_EPS) continue; + + return true; + } + } + + return false; +} + +Vector Vector::AtIntersectionOfPlanes(Vector n1, double d1, + Vector n2, double d2) +{ + double det = (n1.Dot(n1))*(n2.Dot(n2)) - + (n1.Dot(n2))*(n1.Dot(n2)); + double c1 = (d1*n2.Dot(n2) - d2*n1.Dot(n2))/det; + double c2 = (d2*n1.Dot(n1) - d1*n1.Dot(n2))/det; + + return (n1.ScaledBy(c1)).Plus(n2.ScaledBy(c2)); +} + +void Vector::ClosestPointBetweenLines(Vector a0, Vector da, + Vector b0, Vector db, + double *ta, double *tb) +{ + // Make a semi-orthogonal coordinate system from those directions; + // note that dna and dnb need not be perpendicular. + Vector dn = da.Cross(db); // normal to both + Vector dna = dn.Cross(da); // normal to da + Vector dnb = dn.Cross(db); // normal to db + + // At the intersection of the lines + // a0 + pa*da = b0 + pb*db (where pa, pb are scalar params) + // So dot this equation against dna and dnb to get two equations + // to solve for da and db + *tb = ((a0.Minus(b0)).Dot(dna))/(db.Dot(dna)); + *ta = -((a0.Minus(b0)).Dot(dnb))/(da.Dot(dnb)); +} + +Vector Vector::AtIntersectionOfLines(Vector a0, Vector a1, + Vector b0, Vector b1, + bool *skew, + double *parama, double *paramb) +{ + Vector da = a1.Minus(a0), db = b1.Minus(b0); + + double pa, pb; + Vector::ClosestPointBetweenLines(a0, da, b0, db, &pa, &pb); + + if(parama) *parama = pa; + if(paramb) *paramb = pb; + + // And from either of those, we get the intersection point. + Vector pi = a0.Plus(da.ScaledBy(pa)); + + if(skew) { + // Check if the intersection points on each line are actually + // coincident... + if(pi.Equals(b0.Plus(db.ScaledBy(pb)))) { + *skew = false; + } else { + *skew = true; + } + } + return pi; +} + +Vector Vector::AtIntersectionOfPlaneAndLine(Vector n, double d, + Vector p0, Vector p1, + bool *parallel) +{ + Vector dp = p1.Minus(p0); + + if(fabs(n.Dot(dp)) < LENGTH_EPS) { + if(parallel) *parallel = true; + return Vector::From(0, 0, 0); + } + + if(parallel) *parallel = false; + + // n dot (p0 + t*dp) = d + // (n dot p0) + t * (n dot dp) = d + double t = (d - n.Dot(p0)) / (n.Dot(dp)); + + return p0.Plus(dp.ScaledBy(t)); +} + +static double det2(double a1, double b1, + double a2, double b2) +{ + return (a1*b2) - (b1*a2); +} +static double det3(double a1, double b1, double c1, + double a2, double b2, double c2, + double a3, double b3, double c3) +{ + return a1*det2(b2, c2, b3, c3) - + b1*det2(a2, c2, a3, c3) + + c1*det2(a2, b2, a3, b3); +} +Vector Vector::AtIntersectionOfPlanes(Vector na, double da, + Vector nb, double db, + Vector nc, double dc, + bool *parallel) +{ + double det = det3(na.x, na.y, na.z, + nb.x, nb.y, nb.z, + nc.x, nc.y, nc.z); + if(fabs(det) < 1e-10) { // arbitrary tolerance, not so good + *parallel = true; + return Vector::From(0, 0, 0); + } + *parallel = false; + + double detx = det3(da, na.y, na.z, + db, nb.y, nb.z, + dc, nc.y, nc.z); + + double dety = det3(na.x, da, na.z, + nb.x, db, nb.z, + nc.x, dc, nc.z); + + double detz = det3(na.x, na.y, da, + nb.x, nb.y, db, + nc.x, nc.y, dc ); + + return Vector::From(detx/det, dety/det, detz/det); +} + +Vector4 Vector4::From(double w, double x, double y, double z) { + Vector4 ret; + ret.w = w; + ret.x = x; + ret.y = y; + ret.z = z; + return ret; +} + +Vector4 Vector4::From(double w, Vector v) { + return Vector4::From(w, w*v.x, w*v.y, w*v.z); +} + +Vector4 Vector4::Blend(Vector4 a, Vector4 b, double t) { + return (a.ScaledBy(1 - t)).Plus(b.ScaledBy(t)); +} + +Vector4 Vector4::Plus(Vector4 b) { + return Vector4::From(w + b.w, x + b.x, y + b.y, z + b.z); +} + +Vector4 Vector4::Minus(Vector4 b) { + return Vector4::From(w - b.w, x - b.x, y - b.y, z - b.z); +} + +Vector4 Vector4::ScaledBy(double s) { + return Vector4::From(w*s, x*s, y*s, z*s); +} + +Vector Vector4::PerspectiveProject(void) { + return Vector::From(x / w, y / w, z / w); +} + +Point2d Point2d::From(double x, double y) { + return { x, y }; +} + +Point2d Point2d::Plus(const Point2d &b) const { + return { x + b.x, y + b.y }; +} + +Point2d Point2d::Minus(const Point2d &b) const { + return { x - b.x, y - b.y }; +} + +Point2d Point2d::ScaledBy(double s) const { + return { x * s, y * s }; +} + +double Point2d::DivPivoting(Point2d delta) const { + if(fabs(delta.x) > fabs(delta.y)) { + return x/delta.x; + } else { + return y/delta.y; + } +} + +double Point2d::MagSquared(void) const { + return x*x + y*y; +} + +double Point2d::Magnitude(void) const { + return sqrt(x*x + y*y); +} + +Point2d Point2d::WithMagnitude(double v) const { + double m = Magnitude(); + if(m < 1e-20) { + dbp("!!! WithMagnitude() of zero vector"); + return { v, 0 }; + } + return { x * v / m, y * v / m }; +} + +double Point2d::DistanceTo(const Point2d &p) const { + double dx = x - p.x; + double dy = y - p.y; + return sqrt(dx*dx + dy*dy); +} + +double Point2d::Dot(Point2d p) const { + return x*p.x + y*p.y; +} + +double Point2d::DistanceToLine(const Point2d &p0, const Point2d &dp, bool segment) const { + double m = dp.x*dp.x + dp.y*dp.y; + if(m < LENGTH_EPS*LENGTH_EPS) return VERY_POSITIVE; + + // Let our line be p = p0 + t*dp, for a scalar t from 0 to 1 + double t = (dp.x*(x - p0.x) + dp.y*(y - p0.y))/m; + + if((t < 0 || t > 1) && segment) { + // The closest point is one of the endpoints; determine which. + double d0 = DistanceTo(p0); + double d1 = DistanceTo(p0.Plus(dp)); + + return min(d1, d0); + } else { + Point2d closest = p0.Plus(dp.ScaledBy(t)); + return DistanceTo(closest); + } +} + +Point2d Point2d::Normal(void) const { + return { y, -x }; +} + +bool Point2d::Equals(Point2d v, double tol) const { + double dx = v.x - x; if(dx < -tol || dx > tol) return false; + double dy = v.y - y; if(dy < -tol || dy > tol) return false; + + return (this->Minus(v)).MagSquared() < tol*tol; +} + +BBox BBox::From(const Vector &p0, const Vector &p1) { + BBox bbox; + bbox.minp.x = min(p0.x, p1.x); + bbox.minp.y = min(p0.y, p1.y); + bbox.minp.z = min(p0.z, p1.z); + + bbox.maxp.x = max(p0.x, p1.x); + bbox.maxp.y = max(p0.y, p1.y); + bbox.maxp.z = max(p0.z, p1.z); + return bbox; +} + +Vector BBox::GetOrigin() { return minp.Plus(maxp.Minus(minp)).ScaledBy(0.5); } +Vector BBox::GetExtents() { return maxp.Minus(minp).ScaledBy(0.5); } + +void BBox::Include(const Vector &v, double r) { + minp.x = min(minp.x, v.x - r); + minp.y = min(minp.y, v.y - r); + minp.z = min(minp.z, v.z - r); + + maxp.x = max(maxp.x, v.x + r); + maxp.y = max(maxp.y, v.y + r); + maxp.z = max(maxp.z, v.z + r); +} + +bool BBox::Overlaps(BBox &b1) { + + Vector t = b1.GetOrigin().Minus(GetOrigin()); + Vector e = b1.GetExtents().Plus(GetExtents()); + + return fabs(t.x) < e.x && fabs(t.y) < e.y && fabs(t.z) < e.z; +} + +bool BBox::Contains(const Point2d &p) { + return p.x >= minp.x && p.y >= minp.y && p.x <= maxp.x && p.y <= maxp.y; +} diff --git a/src/view.cpp b/src/view.cpp new file mode 100644 index 0000000..bf76ba9 --- /dev/null +++ b/src/view.cpp @@ -0,0 +1,116 @@ +//----------------------------------------------------------------------------- +// The View menu, stuff to snap to certain special vews of the model, and to +// display our current view of the model to the user. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +void TextWindow::ShowEditView(void) { + Printf(true, "%Ft3D VIEW PARAMETERS%E"); + + Printf(true, "%Bd %Ftoverall scale factor%E"); + Printf(false, "%Ba %# px/%s %Fl%Ll%f[edit]%E", + SS.GW.scale * SS.MmPerUnit(), + SS.UnitName(), + &ScreenChangeViewScale); + Printf(false, ""); + + Printf(false, "%Bd %Ftorigin (maps to center of screen)%E"); + Printf(false, "%Ba (%s, %s, %s) %Fl%Ll%f[edit]%E", + SS.MmToString(-SS.GW.offset.x).c_str(), + SS.MmToString(-SS.GW.offset.y).c_str(), + SS.MmToString(-SS.GW.offset.z).c_str(), + &ScreenChangeViewOrigin); + Printf(false, ""); + + Vector n = (SS.GW.projRight).Cross(SS.GW.projUp); + Printf(false, "%Bd %Ftprojection onto screen%E"); + Printf(false, "%Ba %Ftright%E (%3, %3, %3) %Fl%Ll%f[edit]%E", + CO(SS.GW.projRight), + &ScreenChangeViewProjection); + Printf(false, "%Bd %Ftup%E (%3, %3, %3)", CO(SS.GW.projUp)); + Printf(false, "%Ba %Ftout%E (%3, %3, %3)", CO(n)); + Printf(false, ""); + + Printf(false, "The perspective may be changed in the"); + Printf(false, "configuration screen."); +} + +void TextWindow::ScreenChangeViewScale(int link, uint32_t v) { + SS.TW.edit.meaning = EDIT_VIEW_SCALE; + SS.TW.ShowEditControl(3, ssprintf("%.3f", SS.GW.scale * SS.MmPerUnit())); +} + +void TextWindow::ScreenChangeViewOrigin(int link, uint32_t v) { + std::string edit_value = + ssprintf("%s, %s, %s", + SS.MmToString(-SS.GW.offset.x).c_str(), + SS.MmToString(-SS.GW.offset.y).c_str(), + SS.MmToString(-SS.GW.offset.z).c_str()); + + SS.TW.edit.meaning = EDIT_VIEW_ORIGIN; + SS.TW.ShowEditControl(3, edit_value); +} + +void TextWindow::ScreenChangeViewProjection(int link, uint32_t v) { + std::string edit_value = + ssprintf("%.3f, %.3f, %.3f", CO(SS.GW.projRight)); + SS.TW.edit.meaning = EDIT_VIEW_PROJ_RIGHT; + SS.TW.ShowEditControl(10, edit_value); +} + +bool TextWindow::EditControlDoneForView(const char *s) { + switch(edit.meaning) { + case EDIT_VIEW_SCALE: { + Expr *e = Expr::From(s, true); + if(e) { + double v = e->Eval() / SS.MmPerUnit(); + if(v > LENGTH_EPS) { + SS.GW.scale = v; + } else { + Error("Scale cannot be zero or negative."); + } + } + break; + } + + case EDIT_VIEW_ORIGIN: { + Vector pt; + if(sscanf(s, "%lf, %lf, %lf", &pt.x, &pt.y, &pt.z) == 3) { + pt = pt.ScaledBy(SS.MmPerUnit()); + SS.GW.offset = pt.ScaledBy(-1); + } else { + Error("Bad format: specify x, y, z"); + } + break; + } + + case EDIT_VIEW_PROJ_RIGHT: + case EDIT_VIEW_PROJ_UP: { + Vector pt; + if(sscanf(s, "%lf, %lf, %lf", &pt.x, &pt.y, &pt.z) != 3) { + Error("Bad format: specify x, y, z"); + break; + } + if(edit.meaning == EDIT_VIEW_PROJ_RIGHT) { + SS.GW.projRight = pt; + SS.GW.NormalizeProjectionVectors(); + edit.meaning = EDIT_VIEW_PROJ_UP; + HideEditControl(); + ShowEditControl(10, ssprintf("%.3f, %.3f, %.3f", CO(SS.GW.projUp)), + editControl.halfRow + 2); + edit.showAgain = true; + } else { + SS.GW.projUp = pt; + SS.GW.NormalizeProjectionVectors(); + } + break; + } + + default: + return false; + } + return true; +} + diff --git a/src/win32/icon.ico b/src/win32/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..e545e2f2c09f809364be7fccca516a14cadd0813 GIT binary patch literal 29926 zcmeI4zi%By5XUDFAp8hP8Waf$Jz0PvMM9CbCrEZpXKJcdI;e0*Qo5r)QKUnW{{ANojcc| zm*w88B0q@8U{IC+cuC}=*F0 zdOSU&9nvF`A1QuW9$h`tNMKx8{I@6qM=Uol~?D^H4I|(Ak zX(P?@**UT~H=cWWL35g>Z5?{KDXIvGSh+5vmz-W^0bFLso$&BEJJz1&Ia{`{r&{ei zA7_vMVtiVr&dX9$(B$af>F^yrH8zp%dw!}q|1-Tl#yH_zaeTj&Be@pn$?tdN-rH3zz{K>t| zvxgCUU&))^^Y<55@GX95OoyNV?19ArT>#4=d{6)n96(UY0zN2!2M(YtrH2m+z-C$; zpg}1ed{6)n9KZ6o24@0(js6j!*?36u<)qDBur# zPyi1cKmdQ>g93Qq0801+ALz#e2WSX?@D3Ef0|#gvf8c`xc;EmA@drLAfCmoX1S;@B z0a$7A2R&}bO6%i2Bdin^^Xsyk|0&1jRVuA<83iUm)=KG*}hU~geBLAfeNpjQOG4M%sC z7frryLNOiy;(ath?h0-%`WmmW^?m)XIT}@^6lYTz4)~In`?6fmKFiq2Teis z0fg=^Q`DY28V#E+MD?pId5erd~T?RFxz ziJx>oFsVNDW72*$*T+JCngW~MZ^cfP&hO0L^BC3bl0vspdRW=&16|nrrMyqc`;@#- z$x6CyoK{)&a6C7-^q+&@4*-I{yeW^c^%8^ zSYF4bS;v}d$E0$YcN=R*WX))<2{V_coA2%KXy)_xH-m7GlD~2Uas+Y&as+Y&x<;UW zFHk>6U!Q&H;x@ilSj2f(KT~okpR)hm#w``suKbG@fBEITGKN$?XXST|b4sphKjypg znsW0hr~K-{5AzK26-~r{TyJvoqdi=WimtW)%{*AQ{JCiUTYoIyt-L52&FCJ?lwaBZ z)m?udKYm>HL28VZKkJcdJC#4b%5P;Kq}n%r_CKDdsrXym>eR+VbE?koa=z^N$9&5E zPd^H=cq%XFPyD)S#%ub>SDMZCteoSYEMJ;5=g<1(Pjd{rl)L0en@q|^pZrO+ z(S_gUTbH_&jqLyW$YE(m|@=HH_HxAv84KkDVS`!ADgb-rqF{M@nLzU?Jq)Y?`$ z>1fDOJe!|tBeiGF?U!;9;u9Np`6mB7^k@D3kpBTuksNmb literal 0 HcmV?d00001 diff --git a/src/win32/manifest.xml b/src/win32/manifest.xml new file mode 100644 index 0000000..f27a236 --- /dev/null +++ b/src/win32/manifest.xml @@ -0,0 +1,22 @@ + + + +Parametric 3d CAD tool. + + + + + + diff --git a/src/win32/resource.rc b/src/win32/resource.rc new file mode 100644 index 0000000..e402f8b --- /dev/null +++ b/src/win32/resource.rc @@ -0,0 +1,6 @@ + +// we need a manifest if we want visual styles; put in numbers since somethings a bit screwy +// with my SDK install (I don't think I've got *.rh right) +1 24 "manifest.xml" + +4000 ICON "icon.ico" diff --git a/src/win32/w32main.cpp b/src/win32/w32main.cpp new file mode 100644 index 0000000..f96ed81 --- /dev/null +++ b/src/win32/w32main.cpp @@ -0,0 +1,1484 @@ +//----------------------------------------------------------------------------- +// Our WinMain() functions, and Win32-specific stuff to set up our windows +// and otherwise handle our interface to the operating system. Everything +// outside win32/... should be standard C++ and gl. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include +#include +#include +#include +#include + +#include "solvespace.h" +#include "config.h" + +#ifdef HAVE_SPACEWARE +# include +# include +# undef uint32_t // thanks but no thanks +#endif + +HINSTANCE Instance; + +HWND TextWnd; +HWND TextWndScrollBar; +HWND TextEditControl; +HGLRC TextGl; + +HWND GraphicsWnd; +HGLRC GraphicsGl; +HWND GraphicsEditControl; +static struct { + int x, y; +} LastMousePos; + +HMENU SubMenus[100]; +HMENU RecentOpenMenu, RecentImportMenu; + +HMENU ContextMenu, ContextSubmenu; + +int ClientIsSmallerBy; + +HFONT FixedFont; + +#ifdef HAVE_SPACEWARE +// The 6-DOF input device. +SiHdl SpaceNavigator = SI_NO_HANDLE; +#endif + +//----------------------------------------------------------------------------- +// Routines to display message boxes on screen. Do our own, instead of using +// MessageBox, because that is not consistent from version to version and +// there's word wrap problems. +//----------------------------------------------------------------------------- + +HWND MessageWnd, OkButton; +bool MessageDone; +const char *MessageString; + +static LRESULT CALLBACK MessageProc(HWND hwnd, UINT msg, WPARAM wParam, + LPARAM lParam) +{ + switch (msg) { + case WM_COMMAND: + if((HWND)lParam == OkButton && wParam == BN_CLICKED) { + MessageDone = true; + } + break; + + case WM_CLOSE: + case WM_DESTROY: + MessageDone = true; + break; + + case WM_PAINT: { + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hwnd, &ps); + int row = 0, col = 0, i; + SelectObject(hdc, FixedFont); + SetTextColor(hdc, 0x000000); + SetBkMode(hdc, TRANSPARENT); + for(i = 0; MessageString[i]; i++) { + if(MessageString[i] == '\n') { + col = 0; + row++; + } else { + TextOutW(hdc, col*SS.TW.CHAR_WIDTH + 10, + row*SS.TW.LINE_HEIGHT + 10, + Widen(&(MessageString[i])).c_str(), 1); + col++; + } + } + EndPaint(hwnd, &ps); + break; + } + + default: + return DefWindowProc(hwnd, msg, wParam, lParam); + } + + return 1; +} + +HWND CreateWindowClient(DWORD exStyle, const wchar_t *className, const wchar_t *windowName, + DWORD style, int x, int y, int width, int height, HWND parent, + HMENU menu, HINSTANCE instance, void *param) +{ + HWND h = CreateWindowExW(exStyle, className, windowName, style, x, y, + width, height, parent, menu, instance, param); + + RECT r; + GetClientRect(h, &r); + width = width - (r.right - width); + height = height - (r.bottom - height); + + SetWindowPos(h, HWND_TOP, x, y, width, height, 0); + + return h; +} + +void SolveSpace::DoMessageBox(const char *str, int rows, int cols, bool error) +{ + EnableWindow(GraphicsWnd, false); + EnableWindow(TextWnd, false); + + // Register the window class for our dialog. + WNDCLASSEX wc = {}; + wc.cbSize = sizeof(wc); + wc.style = CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW | CS_OWNDC; + wc.lpfnWndProc = (WNDPROC)MessageProc; + wc.hInstance = Instance; + wc.hbrBackground = (HBRUSH)COLOR_BTNSHADOW; + wc.lpszClassName = L"MessageWnd"; + wc.lpszMenuName = NULL; + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hIcon = (HICON)LoadImage(Instance, MAKEINTRESOURCE(4000), + IMAGE_ICON, 32, 32, 0); + wc.hIconSm = (HICON)LoadImage(Instance, MAKEINTRESOURCE(4000), + IMAGE_ICON, 16, 16, 0); + RegisterClassEx(&wc); + + // Create the window. + MessageString = str; + RECT r; + GetWindowRect(GraphicsWnd, &r); + const char *title = error ? "SolveSpace - Error" : "SolveSpace - Message"; + int width = cols*SS.TW.CHAR_WIDTH + 20, + height = rows*SS.TW.LINE_HEIGHT + 60; + MessageWnd = CreateWindowClient(0, L"MessageWnd", Widen(title).c_str(), + WS_OVERLAPPED | WS_SYSMENU, + r.left + 100, r.top + 100, width, height, NULL, NULL, Instance, NULL); + + OkButton = CreateWindowExW(0, WC_BUTTON, L"OK", + WS_CHILD | WS_TABSTOP | WS_CLIPSIBLINGS | WS_VISIBLE | BS_DEFPUSHBUTTON, + (width - 70)/2, rows*SS.TW.LINE_HEIGHT + 20, + 70, 25, MessageWnd, NULL, Instance, NULL); + SendMessage(OkButton, WM_SETFONT, (WPARAM)FixedFont, true); + + ShowWindow(MessageWnd, true); + SetFocus(OkButton); + + MSG msg; + DWORD ret; + MessageDone = false; + while((ret = GetMessage(&msg, NULL, 0, 0)) != 0 && !MessageDone) { + if((msg.message == WM_KEYDOWN && + (msg.wParam == VK_RETURN || + msg.wParam == VK_ESCAPE)) || + (msg.message == WM_KEYUP && + (msg.wParam == VK_SPACE))) + { + MessageDone = true; + break; + } + + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + MessageString = NULL; + EnableWindow(TextWnd, true); + EnableWindow(GraphicsWnd, true); + SetForegroundWindow(GraphicsWnd); + DestroyWindow(MessageWnd); +} + +void SolveSpace::AddContextMenuItem(const char *label, int id) +{ + if(!ContextMenu) ContextMenu = CreatePopupMenu(); + + if(id == CONTEXT_SUBMENU) { + AppendMenuW(ContextMenu, MF_STRING | MF_POPUP, + (UINT_PTR)ContextSubmenu, Widen(label).c_str()); + ContextSubmenu = NULL; + } else { + HMENU m = ContextSubmenu ? ContextSubmenu : ContextMenu; + if(id == CONTEXT_SEPARATOR) { + AppendMenuW(m, MF_SEPARATOR, 0, L""); + } else { + AppendMenuW(m, MF_STRING, id, Widen(label).c_str()); + } + } +} + +void SolveSpace::CreateContextSubmenu(void) +{ + ContextSubmenu = CreatePopupMenu(); +} + +int SolveSpace::ShowContextMenu(void) +{ + POINT p; + GetCursorPos(&p); + int r = TrackPopupMenu(ContextMenu, + TPM_RIGHTBUTTON | TPM_RETURNCMD | TPM_TOPALIGN, + p.x, p.y, 0, GraphicsWnd, NULL); + + DestroyMenu(ContextMenu); + ContextMenu = NULL; + return r; +} + +void CALLBACK TimerCallback(HWND hwnd, UINT msg, UINT_PTR id, DWORD time) +{ + // The timer is periodic, so needs to be killed explicitly. + KillTimer(GraphicsWnd, 1); + SS.GW.TimerCallback(); + SS.TW.TimerCallback(); +} +void SolveSpace::SetTimerFor(int milliseconds) +{ + SetTimer(GraphicsWnd, 1, milliseconds, TimerCallback); +} + +void SolveSpace::ScheduleLater() +{ +} + +static void CALLBACK AutosaveCallback(HWND hwnd, UINT msg, UINT_PTR id, DWORD time) +{ + KillTimer(GraphicsWnd, 1); + SS.Autosave(); +} + +void SolveSpace::SetAutosaveTimerFor(int minutes) +{ + SetTimer(GraphicsWnd, 2, minutes * 60 * 1000, AutosaveCallback); +} + +static void GetWindowSize(HWND hwnd, int *w, int *h) +{ + RECT r; + GetClientRect(hwnd, &r); + *w = r.right - r.left; + *h = r.bottom - r.top; +} +void SolveSpace::GetGraphicsWindowSize(int *w, int *h) +{ + GetWindowSize(GraphicsWnd, w, h); +} +void SolveSpace::GetTextWindowSize(int *w, int *h) +{ + GetWindowSize(TextWnd, w, h); +} + +void SolveSpace::OpenWebsite(const char *url) { + ShellExecuteW(GraphicsWnd, L"open", Widen(url).c_str(), NULL, NULL, SW_SHOWNORMAL); +} + +void SolveSpace::ExitNow(void) { + PostQuitMessage(0); +} + +//----------------------------------------------------------------------------- +// Helpers so that we can read/write registry keys from the platform- +// independent code. +//----------------------------------------------------------------------------- +inline int CLAMP(int v, int a, int b) { + // Clamp it to the range [a, b] + if(v <= a) return a; + if(v >= b) return b; + return v; +} + +static HKEY GetRegistryKey() +{ + HKEY Software; + if(RegOpenKeyExW(HKEY_CURRENT_USER, L"Software", 0, + KEY_ALL_ACCESS, &Software) != ERROR_SUCCESS) + return NULL; + + HKEY SolveSpace; + if(RegCreateKeyExW(Software, L"SolveSpace", 0, NULL, 0, + KEY_ALL_ACCESS, NULL, &SolveSpace, NULL) != ERROR_SUCCESS) + return NULL; + + RegCloseKey(Software); + + return SolveSpace; +} + +void SolveSpace::CnfFreezeInt(uint32_t val, const std::string &name) +{ + HKEY SolveSpace = GetRegistryKey(); + RegSetValueExW(SolveSpace, &Widen(name)[0], 0, + REG_DWORD, (const BYTE*) &val, sizeof(DWORD)); + RegCloseKey(SolveSpace); +} +void SolveSpace::CnfFreezeFloat(float val, const std::string &name) +{ + static_assert(sizeof(float) == sizeof(DWORD), + "sizes of float and DWORD must match"); + HKEY SolveSpace = GetRegistryKey(); + RegSetValueExW(SolveSpace, &Widen(name)[0], 0, + REG_DWORD, (const BYTE*) &val, sizeof(DWORD)); + RegCloseKey(SolveSpace); +} +void SolveSpace::CnfFreezeString(const std::string &str, const std::string &name) +{ + HKEY SolveSpace = GetRegistryKey(); + std::wstring strW = Widen(str); + RegSetValueExW(SolveSpace, &Widen(name)[0], 0, + REG_SZ, (const BYTE*) &strW[0], (strW.length() + 1) * 2); + RegCloseKey(SolveSpace); +} +static void FreezeWindowPos(HWND hwnd, const std::string &name) +{ + RECT r; + GetWindowRect(hwnd, &r); + CnfFreezeInt(r.left, name + "_left"); + CnfFreezeInt(r.right, name + "_right"); + CnfFreezeInt(r.top, name + "_top"); + CnfFreezeInt(r.bottom, name + "_bottom"); + + CnfFreezeInt(IsZoomed(hwnd), name + "_maximized"); +} + +uint32_t SolveSpace::CnfThawInt(uint32_t val, const std::string &name) +{ + HKEY SolveSpace = GetRegistryKey(); + DWORD type, newval, len = sizeof(DWORD); + LONG result = RegQueryValueEx(SolveSpace, &Widen(name)[0], NULL, + &type, (BYTE*) &newval, &len); + RegCloseKey(SolveSpace); + + if(result == ERROR_SUCCESS && type == REG_DWORD) + return newval; + else + return val; +} +float SolveSpace::CnfThawFloat(float val, const std::string &name) +{ + HKEY SolveSpace = GetRegistryKey(); + DWORD type, len = sizeof(DWORD); + float newval; + LONG result = RegQueryValueExW(SolveSpace, &Widen(name)[0], NULL, + &type, (BYTE*) &newval, &len); + RegCloseKey(SolveSpace); + + if(result == ERROR_SUCCESS && type == REG_DWORD) + return newval; + else + return val; +} +std::string SolveSpace::CnfThawString(const std::string &val, const std::string &name) +{ + HKEY SolveSpace = GetRegistryKey(); + DWORD type, len; + if(RegQueryValueExW(SolveSpace, &Widen(name)[0], NULL, + &type, NULL, &len) != ERROR_SUCCESS || type != REG_SZ) { + RegCloseKey(SolveSpace); + return val; + } + + std::wstring newval; + newval.resize(len / 2 - 1); + if(RegQueryValueExW(SolveSpace, &Widen(name)[0], NULL, + NULL, (BYTE*) &newval[0], &len) != ERROR_SUCCESS) { + RegCloseKey(SolveSpace); + return val; + } + + RegCloseKey(SolveSpace); + return Narrow(newval); +} +static void ThawWindowPos(HWND hwnd, const std::string &name) +{ + RECT r; + GetWindowRect(hwnd, &r); + r.left = CnfThawInt(r.left, name + "_left"); + r.right = CnfThawInt(r.right, name + "_right"); + r.top = CnfThawInt(r.top, name + "_top"); + r.bottom = CnfThawInt(r.bottom, name + "_bottom"); + + HMONITOR hMonitor = MonitorFromRect(&r, MONITOR_DEFAULTTONEAREST);; + MONITORINFO mi; + mi.cbSize = sizeof(mi); + GetMonitorInfo(hMonitor, &mi); + + // If it somehow ended up off-screen, then put it back. + RECT dr = mi.rcMonitor; + r.left = CLAMP(r.left, dr.left, dr.right); + r.right = CLAMP(r.right, dr.left, dr.right); + r.top = CLAMP(r.top, dr.top, dr.bottom); + r.bottom = CLAMP(r.bottom, dr.top, dr.bottom); + MoveWindow(hwnd, r.left, r.top, r.right - r.left, r.bottom - r.top, TRUE); + + if(CnfThawInt(FALSE, name + "_maximized")) + ShowWindow(hwnd, SW_MAXIMIZE); +} + +void SolveSpace::SetCurrentFilename(const std::string &filename) { + if(!filename.empty()) { + SetWindowTextW(GraphicsWnd, Widen("SolveSpace - " + filename).c_str()); + } else { + SetWindowTextW(GraphicsWnd, L"SolveSpace - (not yet saved)"); + } +} + +void SolveSpace::SetMousePointerToHand(bool yes) { + SetCursor(LoadCursor(NULL, yes ? IDC_HAND : IDC_ARROW)); +} + +static void PaintTextWnd(HDC hdc) +{ + wglMakeCurrent(GetDC(TextWnd), TextGl); + + SS.TW.Paint(); + SwapBuffers(GetDC(TextWnd)); + + // Leave the graphics window context active, except when we're painting + // this text window. + wglMakeCurrent(GetDC(GraphicsWnd), GraphicsGl); +} + +void SolveSpace::MoveTextScrollbarTo(int pos, int maxPos, int page) +{ + SCROLLINFO si = {}; + si.cbSize = sizeof(si); + si.fMask = SIF_DISABLENOSCROLL | SIF_ALL; + si.nMin = 0; + si.nMax = maxPos; + si.nPos = pos; + si.nPage = page; + SetScrollInfo(TextWndScrollBar, SB_CTL, &si, true); +} + +void HandleTextWindowScrollBar(WPARAM wParam, LPARAM lParam) +{ + int maxPos, minPos, pos; + GetScrollRange(TextWndScrollBar, SB_CTL, &minPos, &maxPos); + pos = GetScrollPos(TextWndScrollBar, SB_CTL); + + switch(LOWORD(wParam)) { + case SB_LINEUP: pos--; break; + case SB_PAGEUP: pos -= 4; break; + + case SB_LINEDOWN: pos++; break; + case SB_PAGEDOWN: pos += 4; break; + + case SB_TOP: pos = 0; break; + + case SB_BOTTOM: pos = maxPos; break; + + case SB_THUMBTRACK: + case SB_THUMBPOSITION: pos = HIWORD(wParam); break; + } + + SS.TW.ScrollbarEvent(pos); +} + +static void MouseWheel(int thisDelta) { + static int DeltaAccum; + int delta = 0; + // Handle mouse deltas of less than 120 (like from an un-detented mouse + // wheel) correctly, even though no one ever uses those. + DeltaAccum += thisDelta; + while(DeltaAccum >= 120) { + DeltaAccum -= 120; + delta += 120; + } + while(DeltaAccum <= -120) { + DeltaAccum += 120; + delta -= 120; + } + if(delta == 0) return; + + POINT pt; + GetCursorPos(&pt); + HWND hw = WindowFromPoint(pt); + + // Make the mousewheel work according to which window the mouse is + // over, not according to which window is active. + bool inTextWindow; + if(hw == TextWnd) { + inTextWindow = true; + } else if(hw == GraphicsWnd) { + inTextWindow = false; + } else if(GetForegroundWindow() == TextWnd) { + inTextWindow = true; + } else { + inTextWindow = false; + } + + if(inTextWindow) { + int i; + for(i = 0; i < abs(delta/40); i++) { + HandleTextWindowScrollBar(delta > 0 ? SB_LINEUP : SB_LINEDOWN, 0); + } + } else { + SS.GW.MouseScroll(LastMousePos.x, LastMousePos.y, delta); + } +} + +LRESULT CALLBACK TextWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) { + case WM_ERASEBKGND: + break; + + case WM_CLOSE: + case WM_DESTROY: + SolveSpaceUI::MenuFile(GraphicsWindow::MNU_EXIT); + break; + + case WM_PAINT: { + // Actually paint the text window, with gl. + PaintTextWnd(GetDC(TextWnd)); + // And then just make Windows happy. + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hwnd, &ps); + EndPaint(hwnd, &ps); + break; + } + + case WM_SIZING: { + RECT *r = (RECT *)lParam; + int hc = (r->bottom - r->top) - ClientIsSmallerBy; + int extra = hc % (SS.TW.LINE_HEIGHT/2); + switch(wParam) { + case WMSZ_BOTTOM: + case WMSZ_BOTTOMLEFT: + case WMSZ_BOTTOMRIGHT: + r->bottom -= extra; + break; + + case WMSZ_TOP: + case WMSZ_TOPLEFT: + case WMSZ_TOPRIGHT: + r->top += extra; + break; + } + int tooNarrow = (SS.TW.MIN_COLS*SS.TW.CHAR_WIDTH) - + (r->right - r->left); + if(tooNarrow >= 0) { + switch(wParam) { + case WMSZ_RIGHT: + case WMSZ_BOTTOMRIGHT: + case WMSZ_TOPRIGHT: + r->right += tooNarrow; + break; + + case WMSZ_LEFT: + case WMSZ_BOTTOMLEFT: + case WMSZ_TOPLEFT: + r->left -= tooNarrow; + break; + } + } + break; + } + + case WM_MOUSELEAVE: + SS.TW.MouseLeave(); + break; + + case WM_LBUTTONDOWN: + case WM_MOUSEMOVE: { + // We need this in order to get the WM_MOUSELEAVE + TRACKMOUSEEVENT tme = {}; + tme.cbSize = sizeof(tme); + tme.dwFlags = TME_LEAVE; + tme.hwndTrack = TextWnd; + TrackMouseEvent(&tme); + + // And process the actual message + int x = LOWORD(lParam); + int y = HIWORD(lParam); + SS.TW.MouseEvent(msg == WM_LBUTTONDOWN, wParam & MK_LBUTTON, x, y); + break; + } + + case WM_SIZE: { + RECT r; + GetWindowRect(TextWndScrollBar, &r); + int sw = r.right - r.left; + GetClientRect(hwnd, &r); + MoveWindow(TextWndScrollBar, r.right - sw, r.top, sw, + (r.bottom - r.top), true); + // If the window is growing, then the scrollbar position may + // be moving, so it's as if we're dragging the scrollbar. + HandleTextWindowScrollBar((WPARAM)-1, -1); + InvalidateRect(TextWnd, NULL, false); + break; + } + + case WM_MOUSEWHEEL: + MouseWheel(GET_WHEEL_DELTA_WPARAM(wParam)); + break; + + case WM_VSCROLL: + HandleTextWindowScrollBar(wParam, lParam); + break; + + default: + return DefWindowProc(hwnd, msg, wParam, lParam); + } + + return 1; +} + +static std::string EditControlText(HWND hwnd) +{ + std::wstring result; + result.resize(GetWindowTextLength(hwnd)); + GetWindowTextW(hwnd, &result[0], result.length() + 1); + return Narrow(result); +} + +static bool ProcessKeyDown(WPARAM wParam) +{ + if(GraphicsEditControlIsVisible() && wParam != VK_ESCAPE) { + if(wParam == VK_RETURN) { + SS.GW.EditControlDone(EditControlText(GraphicsEditControl).c_str()); + return true; + } else { + return false; + } + } + if(TextEditControlIsVisible() && wParam != VK_ESCAPE) { + if(wParam == VK_RETURN) { + SS.TW.EditControlDone(EditControlText(TextEditControl).c_str()); + } else { + return false; + } + } + + int c; + switch(wParam) { + case VK_OEM_PLUS: c = '+'; break; + case VK_OEM_MINUS: c = '-'; break; + case VK_ESCAPE: c = 27; break; + case VK_OEM_1: c = ';'; break; + case VK_OEM_3: c = '`'; break; + case VK_OEM_4: c = '['; break; + case VK_OEM_6: c = ']'; break; + case VK_OEM_5: c = '\\'; break; + case VK_OEM_PERIOD: c = '.'; break; + case VK_SPACE: c = ' '; break; + case VK_DELETE: c = 127; break; + case VK_TAB: c = '\t'; break; + + case VK_BROWSER_BACK: + case VK_BACK: c = '\b'; break; + + case VK_F1: + case VK_F2: + case VK_F3: + case VK_F4: + case VK_F5: + case VK_F6: + case VK_F7: + case VK_F8: + case VK_F9: + case VK_F10: + case VK_F11: + case VK_F12: c = ((int)wParam - VK_F1) + 0xf1; break; + + // These overlap with some character codes that I'm using, so + // don't let them trigger by accident. + case VK_F16: + case VK_INSERT: + case VK_EXECUTE: + case VK_APPS: + case VK_LWIN: + case VK_RWIN: return false; + + default: + c = (int)wParam; + break; + } + if(GetAsyncKeyState(VK_SHIFT) & 0x8000) c |= GraphicsWindow::SHIFT_MASK; + if(GetAsyncKeyState(VK_CONTROL) & 0x8000) c |= GraphicsWindow::CTRL_MASK; + + switch(c) { + case GraphicsWindow::SHIFT_MASK | '.': c = '>'; break; + } + + for(int i = 0; SS.GW.menu[i].level >= 0; i++) { + if(c == SS.GW.menu[i].accel) { + (SS.GW.menu[i].fn)((GraphicsWindow::MenuId)SS.GW.menu[i].id); + break; + } + } + + if(SS.GW.KeyDown(c)) return true; + + // No accelerator; process the key as normal. + return false; +} + +void SolveSpace::ToggleMenuBar(void) +{ + // Implement me +} +bool SolveSpace::MenuBarIsVisible(void) +{ + // Implement me + return true; +} + +void SolveSpace::ShowTextWindow(bool visible) +{ + ShowWindow(TextWnd, visible ? SW_SHOWNOACTIVATE : SW_HIDE); +} + +static void CreateGlContext(HWND hwnd, HGLRC *glrc) +{ + HDC hdc = GetDC(hwnd); + + PIXELFORMATDESCRIPTOR pfd = {}; + int pixelFormat; + + pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); + pfd.nVersion = 1; + pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | + PFD_DOUBLEBUFFER; + pfd.dwLayerMask = PFD_MAIN_PLANE; + pfd.iPixelType = PFD_TYPE_RGBA; + pfd.cColorBits = 32; + pfd.cDepthBits = 24; + pfd.cAccumBits = 0; + pfd.cStencilBits = 0; + + pixelFormat = ChoosePixelFormat(hdc, &pfd); + if(!pixelFormat) oops(); + + if(!SetPixelFormat(hdc, pixelFormat, &pfd)) oops(); + + *glrc = wglCreateContext(hdc); + wglMakeCurrent(hdc, *glrc); +} + +void SolveSpace::PaintGraphics(void) +{ + SS.GW.Paint(); + SwapBuffers(GetDC(GraphicsWnd)); +} +void SolveSpace::InvalidateGraphics(void) +{ + InvalidateRect(GraphicsWnd, NULL, false); +} + +void SolveSpace::ToggleFullScreen(void) +{ + // Implement me +} +bool SolveSpace::FullScreenIsActive(void) +{ + // Implement me + return false; +} + +int64_t SolveSpace::GetMilliseconds(void) +{ + LARGE_INTEGER t, f; + QueryPerformanceCounter(&t); + QueryPerformanceFrequency(&f); + LONGLONG d = t.QuadPart/(f.QuadPart/1000); + return (int64_t)d; +} + +int64_t SolveSpace::GetUnixTime(void) +{ +#ifdef __MINGW32__ + time_t ret; + time(&ret); +#else + __time64_t ret; + _time64(&ret); +#endif + return (int64_t)ret; +} + +void SolveSpace::InvalidateText(void) +{ + InvalidateRect(TextWnd, NULL, false); +} + +static void ShowEditControl(HWND h, int x, int y, int fontHeight, int minWidthChars, + bool isMonospace, const std::wstring &s) { + static HFONT hf; + if(hf) DeleteObject(hf); + hf = CreateFontW(-fontHeight, 0, 0, 0, + FW_REGULAR, false, false, false, ANSI_CHARSET, + OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, + DEFAULT_QUALITY, FF_DONTCARE, isMonospace ? L"Lucida Console" : L"Arial"); + if(hf) SendMessage(h, WM_SETFONT, (WPARAM)hf, false); + else SendMessage(h, WM_SETFONT, (WPARAM)(HFONT)GetStockObject(SYSTEM_FONT), false); + SendMessage(h, EM_SETMARGINS, EC_LEFTMARGIN|EC_RIGHTMARGIN, 0); + + HDC hdc = GetDC(h); + TEXTMETRICW tm; + SIZE ts; + SelectObject(hdc, hf); + GetTextMetrics(hdc, &tm); + GetTextExtentPoint32W(hdc, s.c_str(), s.length(), &ts); + ReleaseDC(h, hdc); + + RECT rc; + rc.left = x; + rc.top = y - tm.tmAscent; + // Add one extra char width to avoid scrolling. + rc.right = x + std::max(tm.tmAveCharWidth * minWidthChars, + ts.cx + tm.tmAveCharWidth); + rc.bottom = y + tm.tmDescent; + + AdjustWindowRectEx(&rc, 0, false, WS_EX_CLIENTEDGE); + MoveWindow(h, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, true); + ShowWindow(h, SW_SHOW); + if(!s.empty()) { + SendMessage(h, WM_SETTEXT, 0, (LPARAM)s.c_str()); + SendMessage(h, EM_SETSEL, 0, s.length()); + SetFocus(h); + } +} +void SolveSpace::ShowTextEditControl(int x, int y, const std::string &str) +{ + if(GraphicsEditControlIsVisible()) return; + + ShowEditControl(TextEditControl, x, y, TextWindow::CHAR_HEIGHT, 30, + /*isMonospace=*/true, Widen(str)); +} +void SolveSpace::HideTextEditControl(void) +{ + ShowWindow(TextEditControl, SW_HIDE); +} +bool SolveSpace::TextEditControlIsVisible(void) +{ + return IsWindowVisible(TextEditControl) ? true : false; +} +void SolveSpace::ShowGraphicsEditControl(int x, int y, int fontHeight, int minWidthChars, + const std::string &str) +{ + if(GraphicsEditControlIsVisible()) return; + + RECT r; + GetClientRect(GraphicsWnd, &r); + x = x + (r.right - r.left)/2; + y = (r.bottom - r.top)/2 - y; + + ShowEditControl(GraphicsEditControl, x, y, fontHeight, minWidthChars, + /*isMonospace=*/false, Widen(str)); +} +void SolveSpace::HideGraphicsEditControl(void) +{ + ShowWindow(GraphicsEditControl, SW_HIDE); +} +bool SolveSpace::GraphicsEditControlIsVisible(void) +{ + return IsWindowVisible(GraphicsEditControl) ? true : false; +} + +LRESULT CALLBACK GraphicsWndProc(HWND hwnd, UINT msg, WPARAM wParam, + LPARAM lParam) +{ + switch (msg) { + case WM_ERASEBKGND: + break; + + case WM_SIZE: + InvalidateRect(GraphicsWnd, NULL, false); + break; + + case WM_PAINT: { + // Actually paint the window, with gl. + PaintGraphics(); + // And make Windows happy. + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hwnd, &ps); + EndPaint(hwnd, &ps); + break; + } + + case WM_MOUSELEAVE: + SS.GW.MouseLeave(); + break; + + case WM_MOUSEMOVE: + case WM_LBUTTONDOWN: + case WM_LBUTTONUP: + case WM_LBUTTONDBLCLK: + case WM_RBUTTONDOWN: + case WM_RBUTTONUP: + case WM_MBUTTONDOWN: { + int x = LOWORD(lParam); + int y = HIWORD(lParam); + + // We need this in order to get the WM_MOUSELEAVE + TRACKMOUSEEVENT tme = {}; + tme.cbSize = sizeof(tme); + tme.dwFlags = TME_LEAVE; + tme.hwndTrack = GraphicsWnd; + TrackMouseEvent(&tme); + + // Convert to xy (vs. ij) style coordinates, with (0, 0) at center + RECT r; + GetClientRect(GraphicsWnd, &r); + x = x - (r.right - r.left)/2; + y = (r.bottom - r.top)/2 - y; + + LastMousePos.x = x; + LastMousePos.y = y; + + if(msg == WM_LBUTTONDOWN) { + SS.GW.MouseLeftDown(x, y); + } else if(msg == WM_LBUTTONUP) { + SS.GW.MouseLeftUp(x, y); + } else if(msg == WM_LBUTTONDBLCLK) { + SS.GW.MouseLeftDoubleClick(x, y); + } else if(msg == WM_MBUTTONDOWN || msg == WM_RBUTTONDOWN) { + SS.GW.MouseMiddleOrRightDown(x, y); + } else if(msg == WM_RBUTTONUP) { + SS.GW.MouseRightUp(x, y); + } else if(msg == WM_MOUSEMOVE) { + SS.GW.MouseMoved(x, y, + !!(wParam & MK_LBUTTON), + !!(wParam & MK_MBUTTON), + !!(wParam & MK_RBUTTON), + !!(wParam & MK_SHIFT), + !!(wParam & MK_CONTROL)); + } else { + oops(); + } + break; + } + case WM_MOUSEWHEEL: + MouseWheel(GET_WHEEL_DELTA_WPARAM(wParam)); + break; + + case WM_COMMAND: { + if(HIWORD(wParam) == 0) { + int id = LOWORD(wParam); + if((id >= RECENT_OPEN && id < (RECENT_OPEN + MAX_RECENT))) { + SolveSpaceUI::MenuFile(id); + break; + } + if((id >= RECENT_LINK && id < (RECENT_LINK + MAX_RECENT))) { + Group::MenuGroup(id); + break; + } + int i; + for(i = 0; SS.GW.menu[i].level >= 0; i++) { + if(id == SS.GW.menu[i].id) { + (SS.GW.menu[i].fn)((GraphicsWindow::MenuId)id); + break; + } + } + if(SS.GW.menu[i].level < 0) oops(); + } + break; + } + + case WM_CLOSE: + case WM_DESTROY: + SolveSpaceUI::MenuFile(GraphicsWindow::MNU_EXIT); + return 1; + + default: + return DefWindowProc(hwnd, msg, wParam, lParam); + } + + return 1; +} + +//----------------------------------------------------------------------------- +// Common dialog routines, to open or save a file. +//----------------------------------------------------------------------------- +static std::string ConvertFilters(const FileFilter ssFilters[]) { + std::string filter; + for(const FileFilter *ssFilter = ssFilters; ssFilter->name; ssFilter++) { + std::string desc, patterns; + for(const char *const *ssPattern = ssFilter->patterns; *ssPattern; ssPattern++) { + std::string pattern = "*." + std::string(*ssPattern); + if(desc == "") + desc = pattern; + else + desc += ", " + pattern; + if(patterns == "") + patterns = pattern; + else + patterns += ";" + pattern; + } + filter += std::string(ssFilter->name) + " (" + desc + ")" + '\0'; + filter += patterns + '\0'; + } + filter += '\0'; + return filter; +} + +static bool OpenSaveFile(bool isOpen, std::string *filename, const std::string &defExtension, + const FileFilter filters[]) { + // UNC paths may be as long as 32767 characters. + // Unfortunately, the Get*FileName API does not provide any way to use it + // except with a preallocated buffer of fixed size, so we use something + // reasonably large. + const int len = 32768; + wchar_t filenameC[len] = {}; + wcsncpy(filenameC, Widen(*filename).c_str(), len - 1); + + std::wstring selPatternW = Widen(ConvertFilters(filters)); + std::wstring defExtensionW = Widen(defExtension); + + OPENFILENAME ofn = {}; + ofn.lStructSize = sizeof(ofn); + ofn.hInstance = Instance; + ofn.hwndOwner = GraphicsWnd; + ofn.lpstrFilter = selPatternW.c_str(); + ofn.lpstrDefExt = defExtensionW.c_str(); + ofn.lpstrFile = filenameC; + ofn.nMaxFile = len; + ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; + + EnableWindow(GraphicsWnd, false); + EnableWindow(TextWnd, false); + + BOOL r; + if(isOpen) { + r = GetOpenFileNameW(&ofn); + } else { + r = GetSaveFileNameW(&ofn); + } + + EnableWindow(TextWnd, true); + EnableWindow(GraphicsWnd, true); + SetForegroundWindow(GraphicsWnd); + + if(r) *filename = Narrow(filenameC); + return r ? true : false; +} + +bool SolveSpace::GetOpenFile(std::string *filename, const std::string &defExtension, + const FileFilter filters[]) +{ + return OpenSaveFile(true, filename, defExtension, filters); +} + +bool SolveSpace::GetSaveFile(std::string *filename, const std::string &defExtension, + const FileFilter filters[]) +{ + return OpenSaveFile(false, filename, defExtension, filters); +} + +DialogChoice SolveSpace::SaveFileYesNoCancel(void) +{ + EnableWindow(GraphicsWnd, false); + EnableWindow(TextWnd, false); + + int r = MessageBoxW(GraphicsWnd, + L"The file has changed since it was last saved.\n\n" + L"Do you want to save the changes?", L"SolveSpace", + MB_YESNOCANCEL | MB_ICONWARNING); + + EnableWindow(TextWnd, true); + EnableWindow(GraphicsWnd, true); + SetForegroundWindow(GraphicsWnd); + + switch(r) { + case IDYES: + return DIALOG_YES; + case IDNO: + return DIALOG_NO; + case IDCANCEL: + default: + return DIALOG_CANCEL; + } +} + +DialogChoice SolveSpace::LoadAutosaveYesNo(void) +{ + EnableWindow(GraphicsWnd, false); + EnableWindow(TextWnd, false); + + int r = MessageBoxW(GraphicsWnd, + L"An autosave file is availible for this project.\n\n" + L"Do you want to load the autosave file instead?", L"SolveSpace", + MB_YESNO | MB_ICONWARNING); + + EnableWindow(TextWnd, true); + EnableWindow(GraphicsWnd, true); + SetForegroundWindow(GraphicsWnd); + + switch (r) { + case IDYES: + return DIALOG_YES; + case IDNO: + default: + return DIALOG_NO; + } +} + +DialogChoice SolveSpace::LocateImportedFileYesNoCancel(const std::string &filename, + bool canCancel) { + EnableWindow(GraphicsWnd, false); + EnableWindow(TextWnd, false); + + std::string message = + "The linked file " + filename + " is not present.\n\n" + "Do you want to locate it manually?\n\n" + "If you select \"No\", any geometry that depends on " + "the missing file will be removed."; + + int r = MessageBoxW(GraphicsWnd, Widen(message).c_str(), L"SolveSpace", + (canCancel ? MB_YESNOCANCEL : MB_YESNO) | MB_ICONWARNING); + + EnableWindow(TextWnd, true); + EnableWindow(GraphicsWnd, true); + SetForegroundWindow(GraphicsWnd); + + switch(r) { + case IDYES: + return DIALOG_YES; + case IDNO: + return DIALOG_NO; + case IDCANCEL: + default: + return DIALOG_CANCEL; + } +} + +std::vector SolveSpace::GetFontFiles() { + std::vector fonts; + + std::wstring fontsDir(MAX_PATH, '\0'); + fontsDir.resize(GetWindowsDirectoryW(&fontsDir[0], fontsDir.length())); + fontsDir += L"\\fonts\\"; + + WIN32_FIND_DATA wfd; + HANDLE h = FindFirstFileW((fontsDir + L"*").c_str(), &wfd); + while(h != INVALID_HANDLE_VALUE) { + fonts.push_back(Narrow(fontsDir) + Narrow(wfd.cFileName)); + if(!FindNextFileW(h, &wfd)) break; + } + + return fonts; +} + +static void MenuById(int id, bool yes, bool check) +{ + int i; + int subMenu = -1; + + for(i = 0; SS.GW.menu[i].level >= 0; i++) { + if(SS.GW.menu[i].level == 0) subMenu++; + + if(SS.GW.menu[i].id == id) { + if(subMenu < 0) oops(); + if(subMenu >= (int)arraylen(SubMenus)) oops(); + + if(check) { + CheckMenuItem(SubMenus[subMenu], id, + yes ? MF_CHECKED : MF_UNCHECKED); + } else { + EnableMenuItem(SubMenus[subMenu], id, + yes ? MF_ENABLED : MF_GRAYED); + } + return; + } + } + oops(); +} +void SolveSpace::CheckMenuById(int id, bool checked) +{ + MenuById(id, checked, true); +} +void SolveSpace::RadioMenuById(int id, bool selected) +{ + // Windows does not natively support radio-button menu items + MenuById(id, selected, true); +} +void SolveSpace::EnableMenuById(int id, bool enabled) +{ + MenuById(id, enabled, false); +} +static void DoRecent(HMENU m, int base) +{ + while(DeleteMenu(m, 0, MF_BYPOSITION)) + ; + int i, c = 0; + for(i = 0; i < MAX_RECENT; i++) { + if(!RecentFile[i].empty()) { + AppendMenuW(m, MF_STRING, base + i, Widen(RecentFile[i]).c_str()); + c++; + } + } + if(c == 0) AppendMenuW(m, MF_STRING | MF_GRAYED, 0, L"(no recent files)"); +} +void SolveSpace::RefreshRecentMenus(void) +{ + DoRecent(RecentOpenMenu, RECENT_OPEN); + DoRecent(RecentImportMenu, RECENT_LINK); +} + +HMENU CreateGraphicsWindowMenus(void) +{ + HMENU top = CreateMenu(); + HMENU m = 0; + + int i; + int subMenu = 0; + + for(i = 0; SS.GW.menu[i].level >= 0; i++) { + std::string label; + if(SS.GW.menu[i].label) { + std::string accel = MakeAcceleratorLabel(SS.GW.menu[i].accel); + const char *sep = accel.empty() ? "" : "\t"; + label = ssprintf("%s%s%s", SS.GW.menu[i].label, sep, accel.c_str()); + } + + if(SS.GW.menu[i].level == 0) { + m = CreateMenu(); + AppendMenuW(top, MF_STRING | MF_POPUP, (UINT_PTR)m, Widen(label).c_str()); + if(subMenu >= (int)arraylen(SubMenus)) oops(); + SubMenus[subMenu] = m; + subMenu++; + } else if(SS.GW.menu[i].level == 1) { + if(SS.GW.menu[i].id == GraphicsWindow::MNU_OPEN_RECENT) { + RecentOpenMenu = CreateMenu(); + AppendMenuW(m, MF_STRING | MF_POPUP, + (UINT_PTR)RecentOpenMenu, Widen(label).c_str()); + } else if(SS.GW.menu[i].id == GraphicsWindow::MNU_GROUP_RECENT) { + RecentImportMenu = CreateMenu(); + AppendMenuW(m, MF_STRING | MF_POPUP, + (UINT_PTR)RecentImportMenu, Widen(label).c_str()); + } else if(SS.GW.menu[i].label) { + AppendMenuW(m, MF_STRING, SS.GW.menu[i].id, Widen(label).c_str()); + } else { + AppendMenuW(m, MF_SEPARATOR, SS.GW.menu[i].id, L""); + } + } else oops(); + } + RefreshRecentMenus(); + + return top; +} + +static void CreateMainWindows(void) +{ + WNDCLASSEX wc = {}; + + wc.cbSize = sizeof(wc); + + // The graphics window, where the sketch is drawn and shown. + wc.style = CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW | CS_OWNDC | + CS_DBLCLKS; + wc.lpfnWndProc = (WNDPROC)GraphicsWndProc; + wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); + wc.lpszClassName = L"GraphicsWnd"; + wc.lpszMenuName = NULL; + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hIcon = (HICON)LoadImage(Instance, MAKEINTRESOURCE(4000), + IMAGE_ICON, 32, 32, 0); + wc.hIconSm = (HICON)LoadImage(Instance, MAKEINTRESOURCE(4000), + IMAGE_ICON, 16, 16, 0); + if(!RegisterClassEx(&wc)) oops(); + + HMENU top = CreateGraphicsWindowMenus(); + GraphicsWnd = CreateWindowExW(0, L"GraphicsWnd", + L"SolveSpace (not yet saved)", + WS_OVERLAPPED | WS_THICKFRAME | WS_CLIPCHILDREN | WS_MAXIMIZEBOX | + WS_MINIMIZEBOX | WS_SYSMENU | WS_SIZEBOX | WS_CLIPSIBLINGS, + 50, 50, 900, 600, NULL, top, Instance, NULL); + if(!GraphicsWnd) oops(); + + GraphicsEditControl = CreateWindowExW(WS_EX_CLIENTEDGE, WC_EDIT, L"", + WS_CHILD | ES_AUTOHSCROLL | WS_TABSTOP | WS_CLIPSIBLINGS, + 50, 50, 100, 21, GraphicsWnd, NULL, Instance, NULL); + + // The text window, with a comand line and some textual information + // about the sketch. + wc.style &= ~CS_DBLCLKS; + wc.lpfnWndProc = (WNDPROC)TextWndProc; + wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); + wc.lpszClassName = L"TextWnd"; + wc.hCursor = NULL; + if(!RegisterClassEx(&wc)) oops(); + + // We get the desired Alt+Tab behaviour by specifying that the text + // window is a child of the graphics window. + TextWnd = CreateWindowExW(0, + L"TextWnd", L"SolveSpace - Property Browser", WS_THICKFRAME | WS_CLIPCHILDREN, + 650, 500, 420, 300, GraphicsWnd, (HMENU)NULL, Instance, NULL); + if(!TextWnd) oops(); + + TextWndScrollBar = CreateWindowExW(0, WC_SCROLLBAR, L"", WS_CHILD | + SBS_VERT | SBS_LEFTALIGN | WS_VISIBLE | WS_CLIPSIBLINGS, + 200, 100, 100, 100, TextWnd, NULL, Instance, NULL); + // Force the scrollbar to get resized to the window, + TextWndProc(TextWnd, WM_SIZE, 0, 0); + + TextEditControl = CreateWindowExW(WS_EX_CLIENTEDGE, WC_EDIT, L"", + WS_CHILD | ES_AUTOHSCROLL | WS_TABSTOP | WS_CLIPSIBLINGS, + 50, 50, 100, 21, TextWnd, NULL, Instance, NULL); + + // Now that all our windows exist, set up gl contexts. + CreateGlContext(TextWnd, &TextGl); + CreateGlContext(GraphicsWnd, &GraphicsGl); + + RECT r, rc; + GetWindowRect(TextWnd, &r); + GetClientRect(TextWnd, &rc); + ClientIsSmallerBy = (r.bottom - r.top) - (rc.bottom - rc.top); +} + +#ifdef HAVE_SPACEWARE +//----------------------------------------------------------------------------- +// Test if a message comes from the SpaceNavigator device. If yes, dispatch +// it appropriately and return true. Otherwise, do nothing and return false. +//----------------------------------------------------------------------------- +static bool ProcessSpaceNavigatorMsg(MSG *msg) { + if(SpaceNavigator == SI_NO_HANDLE) return false; + + SiGetEventData sged; + SiSpwEvent sse; + + SiGetEventWinInit(&sged, msg->message, msg->wParam, msg->lParam); + int ret = SiGetEvent(SpaceNavigator, 0, &sged, &sse); + if(ret == SI_NOT_EVENT) return false; + // So the device is a SpaceNavigator event, or a SpaceNavigator error. + + if(ret == SI_IS_EVENT) { + if(sse.type == SI_MOTION_EVENT) { + // The Z axis translation and rotation are both + // backwards in the default mapping. + double tx = sse.u.spwData.mData[SI_TX]*1.0, + ty = sse.u.spwData.mData[SI_TY]*1.0, + tz = -sse.u.spwData.mData[SI_TZ]*1.0, + rx = sse.u.spwData.mData[SI_RX]*0.001, + ry = sse.u.spwData.mData[SI_RY]*0.001, + rz = -sse.u.spwData.mData[SI_RZ]*0.001; + SS.GW.SpaceNavigatorMoved(tx, ty, tz, rx, ry, rz, + !!(GetAsyncKeyState(VK_SHIFT) & 0x8000)); + } else if(sse.type == SI_BUTTON_EVENT) { + int button; + button = SiButtonReleased(&sse); + if(button == SI_APP_FIT_BUTTON) SS.GW.SpaceNavigatorButtonUp(); + } + } + return true; +} +#endif // HAVE_SPACEWARE + +//----------------------------------------------------------------------------- +// Entry point into the program. +//----------------------------------------------------------------------------- +int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, + LPSTR lpCmdLine, INT nCmdShow) +{ + Instance = hInstance; + + InitCommonControls(); + + // A monospaced font + FixedFont = CreateFontW(SS.TW.CHAR_HEIGHT, SS.TW.CHAR_WIDTH, 0, 0, + FW_REGULAR, false, + false, false, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, + DEFAULT_QUALITY, FF_DONTCARE, L"Lucida Console"); + if(!FixedFont) + FixedFont = (HFONT)GetStockObject(SYSTEM_FONT); + + // Create the root windows: one for control, with text, and one for + // the graphics + CreateMainWindows(); + + ThawWindowPos(TextWnd, "TextWnd"); + ThawWindowPos(GraphicsWnd, "GraphicsWnd"); + + ShowWindow(TextWnd, SW_SHOWNOACTIVATE); + ShowWindow(GraphicsWnd, SW_SHOW); + + glClearColor(0, 0, 0, 1); + glClear(GL_COLOR_BUFFER_BIT); + SwapBuffers(GetDC(GraphicsWnd)); + glClearColor(0, 0, 0, 1); + glClear(GL_COLOR_BUFFER_BIT); + SwapBuffers(GetDC(GraphicsWnd)); + + // Create the heaps for all dynamic memory (AllocTemporary, MemAlloc) + InitHeaps(); + + // Pull out the Unicode command line. + int argc; + LPWSTR *argv = CommandLineToArgvW(GetCommandLineW(), &argc); + + // A filename may have been specified on the command line; if so, then + // strip any quotation marks, and make it absolute. + std::wstring filenameRel, filename; + if(argc >= 2) { + filenameRel = argv[1]; + if(filenameRel[0] == L'\"' && filenameRel[filenameRel.length() - 1] == L'\"') { + filenameRel.erase(0, 1); + filenameRel.erase(filenameRel.length() - 1, 1); + } + + DWORD len = GetFullPathNameW(&filenameRel[0], 0, NULL, NULL); + filename.resize(len - 1); + GetFullPathNameW(&filenameRel[0], len, &filename[0], NULL); + } + +#ifdef HAVE_SPACEWARE + // Initialize the SpaceBall, if present. Test if the driver is running + // first, to avoid a long timeout if it's not. + HWND swdc = FindWindowW(L"SpaceWare Driver Class", NULL); + if(swdc != NULL) { + SiOpenData sod; + SiInitialize(); + SiOpenWinInit(&sod, GraphicsWnd); + SpaceNavigator = + SiOpen("GraphicsWnd", SI_ANY_DEVICE, SI_NO_MASK, SI_EVENT, &sod); + SiSetUiMode(SpaceNavigator, SI_UI_NO_CONTROLS); + } +#endif + + // Call in to the platform-independent code, and let them do their init + SS.Init(); + if(!filename.empty()) + SS.OpenFile(Narrow(filename)); + + // And now it's the message loop. All calls in to the rest of the code + // will be from the wndprocs. + MSG msg; + DWORD ret; + while((ret = GetMessage(&msg, NULL, 0, 0)) != 0) { +#ifdef HAVE_SPACEWARE + // Is it a message from the six degree of freedom input device? + if(ProcessSpaceNavigatorMsg(&msg)) goto done; +#endif + + // A message from the keyboard, which should be processed as a keyboard + // accelerator? + if(msg.message == WM_KEYDOWN) { + if(ProcessKeyDown(msg.wParam)) goto done; + } + if(msg.message == WM_SYSKEYDOWN && msg.hwnd == TextWnd) { + // If the user presses the Alt key when the text window has focus, + // then that should probably go to the graphics window instead. + SetForegroundWindow(GraphicsWnd); + } + + // None of the above; so just a normal message to process. + TranslateMessage(&msg); + DispatchMessage(&msg); +done: + SS.DoLater(); + } + +#ifdef HAVE_SPACEWARE + if(swdc != NULL) { + if(SpaceNavigator != SI_NO_HANDLE) SiClose(SpaceNavigator); + SiTerminate(); + } +#endif + + // Write everything back to the registry + FreezeWindowPos(TextWnd, "TextWnd"); + FreezeWindowPos(GraphicsWnd, "GraphicsWnd"); + + // Free the memory we've used; anything that remains is a leak. + SK.Clear(); + SS.Clear(); + + return 0; +} diff --git a/src/win32/w32util.cpp b/src/win32/w32util.cpp new file mode 100644 index 0000000..20f3ec6 --- /dev/null +++ b/src/win32/w32util.cpp @@ -0,0 +1,134 @@ +//----------------------------------------------------------------------------- +// Utility functions that depend on Win32. Notably, our memory allocation; +// we use two separate allocators, one for long-lived stuff and one for +// stuff that gets freed after every regeneration of the model, to save us +// the trouble of freeing the latter explicitly. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +namespace SolveSpace { +static HANDLE PermHeap, TempHeap; + +void dbp(const char *str, ...) +{ + va_list f; + static char buf[1024*50]; + va_start(f, str); + _vsnprintf(buf, sizeof(buf), str, f); + va_end(f); + + // The native version of OutputDebugString, unlike most others, + // is OutputDebugStringA. + OutputDebugStringA(buf); +} + +std::string Narrow(const wchar_t *in) +{ + std::string out; + DWORD len = WideCharToMultiByte(CP_UTF8, 0, in, -1, NULL, 0, NULL, NULL); + out.resize(len - 1); + if(!WideCharToMultiByte(CP_UTF8, 0, in, -1, &out[0], len, NULL, NULL)) + oops(); + return out; +} + +std::string Narrow(const std::wstring &in) +{ + if(in == L"") return ""; + + std::string out; + out.resize(WideCharToMultiByte(CP_UTF8, 0, &in[0], in.length(), NULL, 0, NULL, NULL)); + if(!WideCharToMultiByte(CP_UTF8, 0, &in[0], in.length(), + &out[0], out.length(), NULL, NULL)) + oops(); + return out; +} + +std::wstring Widen(const char *in) +{ + std::wstring out; + DWORD len = MultiByteToWideChar(CP_UTF8, 0, in, -1, NULL, 0); + out.resize(len - 1); + if(!MultiByteToWideChar(CP_UTF8, 0, in, -1, &out[0], len)) + oops(); + return out; +} + +std::wstring Widen(const std::string &in) +{ + if(in == "") return L""; + + std::wstring out; + out.resize(MultiByteToWideChar(CP_UTF8, 0, &in[0], in.length(), NULL, 0)); + if(!MultiByteToWideChar(CP_UTF8, 0, &in[0], in.length(), &out[0], out.length())) + oops(); + return out; +} + +FILE *ssfopen(const std::string &filename, const char *mode) +{ + // Prepend \\?\ UNC prefix unless already an UNC path. + // We never try to fopen paths that are not absolute or + // contain separators inappropriate for the platform; + // thus, it is always safe to prepend this prefix. + std::string uncFilename = filename; + if(uncFilename.substr(0, 2) != "\\\\") + uncFilename = "\\\\?\\" + uncFilename; + + if(filename.length() != strlen(filename.c_str())) oops(); + return _wfopen(Widen(uncFilename).c_str(), Widen(mode).c_str()); +} + +void ssremove(const std::string &filename) +{ + if(filename.length() != strlen(filename.c_str())) oops(); + _wremove(Widen(filename).c_str()); +} + +//----------------------------------------------------------------------------- +// A separate heap, on which we allocate expressions. Maybe a bit faster, +// since no fragmentation issues whatsoever, and it also makes it possible +// to be sloppy with our memory management, and just free everything at once +// at the end. +//----------------------------------------------------------------------------- +void *AllocTemporary(size_t n) +{ + void *v = HeapAlloc(TempHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, n); + if(!v) oops(); + return v; +} +void FreeTemporary(void *p) { + HeapFree(TempHeap, HEAP_NO_SERIALIZE, p); +} +void FreeAllTemporary(void) +{ + if(TempHeap) HeapDestroy(TempHeap); + TempHeap = HeapCreate(HEAP_NO_SERIALIZE, 1024*1024*20, 0); + // This is a good place to validate, because it gets called fairly + // often. + vl(); +} + +void *MemAlloc(size_t n) { + void *p = HeapAlloc(PermHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, n); + if(!p) oops(); + return p; +} +void MemFree(void *p) { + HeapFree(PermHeap, HEAP_NO_SERIALIZE, p); +} + +void vl(void) { + if(!HeapValidate(TempHeap, HEAP_NO_SERIALIZE, NULL)) oops(); + if(!HeapValidate(PermHeap, HEAP_NO_SERIALIZE, NULL)) oops(); +} + +void InitHeaps(void) { + // Create the heap used for long-lived stuff (that gets freed piecewise). + PermHeap = HeapCreate(HEAP_NO_SERIALIZE, 1024*1024*20, 0); + // Create the heap that we use to store Exprs and other temp stuff. + FreeAllTemporary(); +} +} diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt new file mode 100644 index 0000000..93fb750 --- /dev/null +++ b/tools/CMakeLists.txt @@ -0,0 +1,23 @@ +include_directories( + ${PNG_INCLUDE_DIRS}) + +link_directories( + ${PNG_LIBRARY_DIRS}) + +add_executable(png2c + png2c.cpp) + +target_link_libraries(png2c + ${PNG_LIBRARIES}) + +add_executable(unifont2c + unifont2c.cpp) + +target_link_libraries(unifont2c + ${PNG_LIBRARIES} ${ZLIB_LIBRARIES}) + +add_executable(lff2c + lff2c.cpp) + +target_link_libraries(lff2c + ${ZLIB_LIBRARIES}) diff --git a/tools/lff2c.cpp b/tools/lff2c.cpp new file mode 100644 index 0000000..098fd0a --- /dev/null +++ b/tools/lff2c.cpp @@ -0,0 +1,410 @@ +#define _USE_MATH_DEFINES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define TOLERANCE 1e-6 + +double correctAngle(double a) { + return M_PI + remainder(a - M_PI, 2 * M_PI); +} + +struct Point { + double x; + double y; + + Point operator+(const Point &o) const { return { x + o.x, y + o.y }; } + Point operator-(const Point &o) const { return { x - o.x, y - o.y }; } + Point operator*(const Point &o) const { return { x * o.x, y * o.y }; } + Point operator/(const Point &o) const { return { x / o.x, y / o.y }; } + + Point operator*(double k) const { return { x * k, y * k }; } + Point operator/(double k) const { return { x / k, y / k }; } + + double length() const{ + return sqrt(x * x + y * y); + } + + double angle() const { + return correctAngle(atan2(y, x)); + } + + double distanceTo(const Point &v) const { + return (*this - v).length(); + } + + double angleTo(const Point &v) const { + return (v - *this).angle(); + } + + static Point polar(double radius, double angle) { + return { radius * cos(angle), radius * sin(angle) }; + } + + bool operator==(const Point &o) const { return x == o.x && y == o.y; } + bool operator!=(const Point &o) const { return x != o.x || y != o.y; } + +}; + +struct Curve { + std::vector points; +}; + +struct Glyph { + char32_t character; + char32_t baseCharacter; + std::vector curves; + + void getHorizontalBounds(double *rminx, double *rmaxx) const { + double minx = 0; + double maxx = 0; + if(!curves.empty()) { + minx = curves[0].points[0].x; + maxx = minx; + for(const Curve &c : curves) { + for(const Point &p : c.points) { + maxx = std::max(maxx, p.x); + minx = std::min(minx, p.x); + } + } + } + if(rminx) *rminx = minx; + if(rmaxx) *rmaxx = maxx; + } + + void getVerticalBounds(double *rminy, double *rmaxy) const { + double miny = 0; + double maxy = 0; + if(!curves.empty()) { + miny = curves[0].points[0].y; + maxy = miny; + for(const Curve &c : curves) { + for(const Point &p : c.points) { + maxy = std::max(maxy, p.y); + miny = std::min(miny, p.y); + } + } + } + if(rminy) *rminy = miny; + if(rmaxy) *rmaxy = maxy; + } + + void getHorizontalMetrics(double *leftSideBearing, double *boundingWidth) const { + double minx, maxx; + getHorizontalBounds(&minx, &maxx); + *leftSideBearing = minx; + *boundingWidth = maxx - minx; + } + + bool operator<(const Glyph &o) const { return character < o.character; } +}; + +struct Font { + double letterSpacing; + double wordSpacing; + std::vector glyphs; + + const Glyph &findGlyph(char32_t character) { + return *std::find_if(glyphs.begin(), glyphs.end(), + [&](const Glyph &g) { return g.character == character; }); + } + + void getGlyphBound(double *rminw, double *rminh, double *rmaxw, double *rmaxh) { + if(glyphs.empty()) { + *rminw = 0.0; + *rmaxw = 0.0; + *rminh = 0.0; + *rmaxh = 0.0; + return; + } + + glyphs[0].getHorizontalBounds(rminw, rmaxw); + glyphs[0].getVerticalBounds(rminh, rmaxh); + for(const Glyph &g : glyphs) { + double minw, minh, maxw, maxh; + g.getHorizontalBounds(&minw, &maxw); + g.getVerticalBounds(&minh, &maxh); + *rminw = std::min(*rminw, minw); + *rminh = std::min(*rminh, minh); + *rmaxw = std::max(*rmaxw, maxw); + *rmaxh = std::max(*rmaxh, maxh); + } + } + + void createArc(Curve &curve, const Point &cp, double radius, + double a1, double a2, bool reversed) { + if (radius < 1e-6) return; + + double aSign = 1.0; + if(reversed) { + if(a1 <= a2 + TOLERANCE) a1 += 2.0 * M_PI; + aSign = -1.0; + } else { + if(a2 <= a1 + TOLERANCE) a2 += 2.0 * M_PI; + } + + // Angle Step (rad) + double da = fabs(a2 - a1); + int numPoints = 8; + double aStep = aSign * da / double(numPoints); + + for(int i = 0; i <= numPoints; i++) { + curve.points.push_back(cp + Point::polar(radius, a1 + aStep * i)); + } + } + + void createBulge(const Point &v, double bulge, Curve &curve) { + bool reversed = bulge < 0.0; + double alpha = atan(bulge) * 4.0; + Point &point = curve.points.back(); + + Point middle = (point + v) / 2.0; + double dist = point.distanceTo(v) / 2.0; + double angle = point.angleTo(v); + + // alpha can't be 0.0 at this point + double radius = fabs(dist / sin(alpha / 2.0)); + double wu = fabs(radius*radius - dist*dist); + double h = sqrt(wu); + + if(bulge > 0.0) { + angle += M_PI_2; + } else { + angle -= M_PI_2; + } + + if (fabs(alpha) > M_PI) { + h *= -1.0; + } + + Point center = Point::polar(h, angle); + center = center + middle; + + double a1 = center.angleTo(point); + double a2 = center.angleTo(v); + createArc(curve, center, radius, a1, a2, reversed); + } + + void readLff(const std::string &path) { + gzFile lfffont = gzopen(path.c_str(), "rb"); + if(!lfffont) { + std::cerr << path << ": gzopen failed" << std::endl; + std::exit(1); + } + + // Read line by line until we find a new letter: + Glyph *currentGlyph = nullptr; + while(!gzeof(lfffont)) { + std::string line; + do { + char buf[128] = {0}; + if(!gzgets(lfffont, buf, sizeof(buf))) + break; + line += buf; + } while(line.back() != '\n'); + + if(line.empty() || line[0] == '\n') { + continue; + } else if(line[0] == '#') { + // This is comment or metadata. + std::istringstream ss(line.substr(1)); + + std::vector tokens; + while(!ss.eof()) { + std::string token; + std::getline(ss, token, ':'); + std::istringstream(token) >> token; // trim + if(!token.empty()) + tokens.push_back(token); + } + + // If not in form of "a:b" then it's not metadata, just a comment. + if (tokens.size() != 2) + continue; + + std::string &identifier = tokens[0]; + std::string &value = tokens[1]; + + std::transform(identifier.begin(), identifier.end(), identifier.begin(), + ::tolower); + if (identifier == "letterspacing") { + std::istringstream(value) >> letterSpacing; + } else if (identifier == "wordspacing") { + std::istringstream(value) >> wordSpacing; + } else if (identifier == "linespacingfactor") { + /* don't care */ + } else if (identifier == "author") { + /* don't care */ + } else if (identifier == "name") { + /* don't care */ + } else if (identifier == "license") { + /* don't care */ + } else if (identifier == "encoding") { + /* don't care */ + } else if (identifier == "created") { + /* don't care */ + } + } else if(line[0] == '[') { + // This is a glyph. + size_t closingPos; + char32_t chr = std::stoi(line.substr(1), &closingPos, 16);; + if(line[closingPos + 1] != ']') { + std::cerr << "unrecognized character number: " << line << std::endl; + currentGlyph = nullptr; + continue; + } + + glyphs.emplace_back(); + currentGlyph = &glyphs.back(); + currentGlyph->character = chr; + currentGlyph->baseCharacter = 0; + } else if(currentGlyph != nullptr) { + if (line[0] == 'C') { + // This is a reference to another glyph. + currentGlyph->baseCharacter = std::stoi(line.substr(1), nullptr, 16); + } else { + // This is a series of curves. + currentGlyph->curves.emplace_back(); + Curve &curve = currentGlyph->curves.back(); + + std::stringstream ss(line); + while (!ss.eof()) { + std::string vertex; + std::getline(ss, vertex, ';'); + + std::stringstream ssv(vertex); + std::string coord; + Point p; + + if(!std::getline(ssv, coord, ',')) continue; + p.x = std::stod(coord); + + if(!std::getline(ssv, coord, ',')) continue; + p.y = std::stod(coord); + + if(!std::getline(ssv, coord, ',') || coord[0] != 'A') { + // This is just a point. + curve.points.push_back(p); + } else { + // This is a point with a bulge. + double bulge = std::stod(coord.substr(1)); + createBulge(p, bulge, curve); + } + } + } + } else { + std::cerr << "unrecognized line: " << line << std::endl; + } + } + gzclose(lfffont); + } + + void writeCppHeader(const std::string &hName) { + std::sort(glyphs.begin(), glyphs.end()); + + std::ofstream ts(hName, std::ios::out); + + double minX, minY, maxX, maxY; + getGlyphBound(&minX, &minY, &maxX, &maxY); + + double size = 32766.0; + double scale = size / std::max({ fabs(maxX), fabs(minX), fabs(maxY), fabs(minY) }); + + double capHeight, ascender, descender; + findGlyph('A').getVerticalBounds(nullptr, &capHeight); + findGlyph('h').getVerticalBounds(nullptr, &ascender); + findGlyph('p').getVerticalBounds(&descender, nullptr); + + // We use tabs for indentation here to make compilation slightly faster + ts << + "/**** This is a generated file - do not edit ****/\n\n" + "#ifndef __VECTORFONT_TABLE_H\n" + "#define __VECTORFONT_TABLE_H\n" + "\n" + "#define PEN_UP 32767\n" + "#define UP PEN_UP\n" + "\n" + "#define FONT_CAP_HEIGHT ((int16_t)" << (int)floor(capHeight * scale) << ")\n" << + "#define FONT_ASCENDER ((int16_t)" << (int)floor(ascender * scale) << ")\n" << + "#define FONT_DESCENDER ((int16_t)" << (int)floor(descender * scale) << ")\n" << + "#define FONT_SIZE (FONT_ASCENDER-FONT_DESCENDER)\n" + "\n" + "struct VectorGlyph {\n" + "\tchar32_t character;\n" + "\tchar32_t baseCharacter;\n" + "\tint leftSideBearing;\n" + "\tint boundingWidth;\n" + "\tint advanceWidth;\n" + "\tconst int16_t *data;\n" + "};\n" + "\n" + "const int16_t VectorFontData[] = {\n" + "\tUP, UP,\n"; + + std::map glyphIndexes; + size_t index = 2; + for(const Glyph &g : glyphs) { + ts << "\t// U+" << std::hex << g.character << std::dec << "\n"; + glyphIndexes[g.character] = index; + for(const Curve &c : g.curves) { + for(const Point &p : c.points) { + ts << "\t" << (int)floor(p.x * scale) << ", " << + (int)floor(p.y * scale) << ",\n"; + index += 2; + } + ts << "\tUP, UP,\n"; + index += 2; + } + ts << "\tUP, UP,\n"; // end-of-glyph marker + index += 2; + } + + ts << + "};\n" + "\n" + "const VectorGlyph VectorFont[] = {\n" + "\t// U+20\n" + "\t{ 32, 0, 0, 0, " << (int)floor(wordSpacing * scale) << ", &VectorFontData[0] },\n"; + + for(const Glyph &g : glyphs) { + double leftSideBearing, boundingWidth; + g.getHorizontalMetrics(&leftSideBearing, &boundingWidth); + + ts << "\t// U+" << std::hex << g.character << std::dec << "\n"; + ts << "\t{ " << g.character << ", " + << g.baseCharacter << ", " + << (int)floor(leftSideBearing * scale) << ", " + << (int)floor(boundingWidth * scale) << ", " + << (int)floor((leftSideBearing + boundingWidth + + letterSpacing) * scale) << ", "; + ts << "&VectorFontData[" << glyphIndexes[g.character] << "] },\n"; + } + + ts << + "};\n" + "\n" + "#undef UP\n" + "\n" + "#endif\n"; + } +}; + +int main(int argc, char** argv) { + if(argc != 3) { + std::cerr << "Usage: " << argv[0] << "
\n" << std::endl; + return 1; + } + + Font font; + font.readLff(argv[2]); + font.writeCppHeader(argv[1]); + + return 0; +} diff --git a/tools/png2c.cpp b/tools/png2c.cpp new file mode 100644 index 0000000..49d2249 --- /dev/null +++ b/tools/png2c.cpp @@ -0,0 +1,122 @@ +#include +#include +#include +#include +#include + +#define die(msg) do { fprintf(stderr, "%s\n", msg); abort(); } while(0) + +void write_png(FILE *out, const char *filename) { + FILE *fp = fopen(filename, "rb"); + if (!fp) + die("png fopen failed"); + + png_byte header[8] = {}; + if(fread(header, 1, 8, fp) != 8) + die("png fread failed"); + + if(png_sig_cmp(header, 0, 8)) + die("png_sig_cmp failed"); + + png_structp png = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if(!png) + die("png_create_read_struct failed"); + + png_set_expand(png); + png_set_strip_alpha(png); + + png_infop png_info = png_create_info_struct(png); + if (!png_info) + die("png_create_info_struct failed"); + + if (setjmp(png_jmpbuf(png))) + die("png_init_io failed"); + + png_init_io(png, fp); + png_set_sig_bytes(png, 8); + + png_read_info(png, png_info); + + int width = png_get_image_width(png, png_info); + int height = png_get_image_height(png, png_info); + if(width != 24 || height != 24) + die("not a 24x24 png"); + + png_read_update_info(png, png_info); + + if (setjmp(png_jmpbuf(png))) + die("png_read_image failed"); + + png_bytepp image = (png_bytepp) malloc(sizeof(png_bytep) * height); + for (int y = 0; y < height; y++) + image[y] = (png_bytep) malloc(png_get_rowbytes(png, png_info)); + + png_read_image(png, (png_bytepp) image); + + for(int y = height - 1; y >= 0; y--) { + for(int x = 0; x < (int)png_get_rowbytes(png, png_info); x += 3) { + unsigned char r = image[y][x + 0], + g = image[y][x + 1], + b = image[y][x + 2]; + + if(r + g + b < 11) + r = g = b = 30; + fprintf(out, " 0x%02x, 0x%02x, 0x%02x,\n", r, g, b); + } + } + + for (int y = 0; y < height; y++) + free(image[y]); + free(image); + + fclose(fp); + + png_destroy_read_struct(&png, &png_info, NULL); +} + +int main(int argc, char** argv) { + if(argc < 3) { + fprintf(stderr, "Usage: %s
...\n", + argv[0]); + return 1; + } + + FILE *source = fopen(argv[1], "wt"); + if(!source) + die("source fopen failed"); + + FILE *header = fopen(argv[2], "wt"); + if(!header) + die("header fopen failed"); + + fprintf(source, "/**** This is a generated file - do not edit ****/\n\n"); + fprintf(header, "/**** This is a generated file - do not edit ****/\n\n"); + + for(int i = 3; i < argc; i++) { + const char *filename = argv[i]; + const char *basename = strrchr(filename, '/'); /* cmake uses / even on Windows */ + if(basename == NULL) { + basename = filename; + } else { + basename++; // skip separator + } + + char *stemname = (char*) calloc(strlen(basename), 1); + strncpy(stemname, basename, strchr(basename, '.') - basename); + for(size_t j = 0; j < strlen(stemname); j++) { + if(!isalnum(stemname[j])) + stemname[j] = '_'; + } + + fprintf(header, "extern unsigned char Icon_%s[24*24*3];\n", stemname); + + fprintf(source, "unsigned char Icon_%s[24*24*3] = {\n", stemname); + write_png(source, filename); + fprintf(source, "};\n\n"); + + free(stemname); + } + + fclose(source); + fclose(header); +} diff --git a/tools/unifont2c.cpp b/tools/unifont2c.cpp new file mode 100644 index 0000000..7e9bf7a --- /dev/null +++ b/tools/unifont2c.cpp @@ -0,0 +1,261 @@ +#include +#include +#include +#include +#include + +#define die(msg) do { fprintf(stderr, "%s\n", msg); abort(); } while(0) + +#ifdef NDEBUG +#define COMPRESSION_LEVEL 9 +#else +#define COMPRESSION_LEVEL 5 +#endif + +unsigned short* read_png(const char *filename) { + FILE *fp = fopen(filename, "rb"); + if (!fp) + die("png fopen failed"); + + png_byte header[8] = {}; + if(fread(header, 1, 8, fp) != 8) + die("png fread failed"); + + if(png_sig_cmp(header, 0, 8)) + die("png_sig_cmp failed"); + + png_structp png = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if(!png) + die("png_create_read_struct failed"); + + png_set_expand(png); + png_set_strip_alpha(png); + + png_infop png_info = png_create_info_struct(png); + if (!png_info) + die("png_create_info_struct failed"); + + if (setjmp(png_jmpbuf(png))) + die("png_init_io failed"); + + png_init_io(png, fp); + png_set_sig_bytes(png, 8); + + png_read_info(png, png_info); + + int width = png_get_image_width(png, png_info); + int height = png_get_image_height(png, png_info); + if(width != 16 || height != 16) + die("not a 16x16 png"); + + png_read_update_info(png, png_info); + + if (setjmp(png_jmpbuf(png))) + die("png_read_image failed"); + + png_bytepp image = (png_bytepp) malloc(sizeof(png_bytep) * height); + for (int y = 0; y < height; y++) + image[y] = (png_bytep) malloc(png_get_rowbytes(png, png_info)); + + png_read_image(png, (png_bytepp) image); + + unsigned short *glyph = (unsigned short *) calloc(16, 2); + + for(int y = 0; y < height; y++) { + for(int x = 0; x < (int)png_get_rowbytes(png, png_info); x += 3) { + unsigned char r = image[y][x + 0], + g = image[y][x + 1], + b = image[y][x + 2]; + + if(r + g + b >= 11) { + glyph[y] |= 1 << (width - x / 3); + } + } + } + + for (int y = 0; y < height; y++) + free(image[y]); + free(image); + + fclose(fp); + + png_destroy_read_struct(&png, &png_info, NULL); + + return glyph; +} + +const static unsigned short replacement[16] = { + 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, + 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, + 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, + 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, +}; + +struct CodepointProperties { + bool exists:1; + bool isWide:1; +}; + +int main(int argc, char** argv) { + if(argc < 3) { + fprintf(stderr, "Usage: %s
...\n" + " where s are mapped into private use area\n" + " starting at U+E000.\n", + argv[0]); + return 1; + } + + const int codepoint_count = 0x10000; + unsigned short **font = + (unsigned short **)calloc(sizeof(unsigned short*), codepoint_count); + CodepointProperties *properties = + (CodepointProperties *)calloc(sizeof(CodepointProperties), codepoint_count); + + const int private_start = 0xE000; + for(int i = 3; i < argc; i++) { + int codepoint = private_start + i - 3; + font[codepoint] = read_png(argv[i]); + properties[codepoint].exists = true; + } + + gzFile unifont = gzopen(argv[2], "rb"); + if(!unifont) + die("unifont fopen failed"); + + while(1) { + char buf[100]; + if(!gzgets(unifont, buf, sizeof(buf))){ + if(gzeof(unifont)) { + break; + } else { + die("unifont gzgets failed"); + } + } + + unsigned short codepoint; + unsigned short *glyph = (unsigned short *) calloc(32, 1); + bool isWide; + if( sscanf(buf, "%4hx:%4hx%4hx%4hx%4hx%4hx%4hx%4hx%4hx" + "%4hx%4hx%4hx%4hx%4hx%4hx%4hx%4hx\n", + &codepoint, + &glyph[0], &glyph[1], &glyph[2], &glyph[3], + &glyph[4], &glyph[5], &glyph[6], &glyph[7], + &glyph[8], &glyph[9], &glyph[10], &glyph[11], + &glyph[12], &glyph[13], &glyph[14], &glyph[15]) == 17) { + /* read 16x16 character */ + isWide = true; + } else if(sscanf(buf, "%4hx:%2hx%2hx%2hx%2hx%2hx%2hx%2hx%2hx" + "%2hx%2hx%2hx%2hx%2hx%2hx%2hx%2hx\n", + &codepoint, + &glyph[0], &glyph[1], &glyph[2], &glyph[3], + &glyph[4], &glyph[5], &glyph[6], &glyph[7], + &glyph[8], &glyph[9], &glyph[10], &glyph[11], + &glyph[12], &glyph[13], &glyph[14], &glyph[15]) == 17) { + /* read 8x16 character */ + for(int i = 0; i < 16; i++) + glyph[i] <<= 8; + isWide = false; + } else { + die("parse unifont character"); + } + + font[codepoint] = glyph; + properties[codepoint].exists = true; + properties[codepoint].isWide = isWide; + } + + gzclose(unifont); + + FILE *source = fopen(argv[1], "wt"); + if(!source) + die("source fopen failed"); + + const int chunk_size = 64 * 64, + chunks = codepoint_count / chunk_size; + + const int chunk_input_size = chunk_size * 16 * 16; + unsigned int chunk_output_size[chunks] = {}; + + unsigned char *chunk_data = (unsigned char *)calloc(1, chunk_input_size); + unsigned int chunk_data_index; + + fprintf(source, "/**** This is a generated file - do not edit ****/\n\n"); + + for(int chunk_index = 0; chunk_index < chunks; chunk_index++) { + chunk_data_index = 0; + + const int chunk_start = chunk_index * chunk_size; + for(int codepoint = chunk_start; codepoint < chunk_start + chunk_size; codepoint++) { + const unsigned short *glyph = font[codepoint] != NULL ? font[codepoint] : replacement; + for(int x = 15; x >= 0; x--) { + for(int y = 0; y < 16; y++) { + chunk_data[chunk_data_index++] = (glyph[y] & (1 << x)) ? 0xff : 0; + } + } + + if(font[codepoint] != NULL) + free(font[codepoint]); + } + + fprintf(source, "static const uint8_t CompressedFontTextureChunk%d[] = {\n", + chunk_start / chunk_size); + + z_stream stream; + stream.zalloc = Z_NULL; + stream.zfree = Z_NULL; + stream.opaque = Z_NULL; + if(deflateInit(&stream, COMPRESSION_LEVEL) != Z_OK) + die("deflateInit failed"); + + stream.next_in = chunk_data; + stream.avail_in = chunk_input_size; + + do { + unsigned char compressed_chunk_data[16384] = {}; + stream.next_out = compressed_chunk_data; + stream.avail_out = sizeof(compressed_chunk_data); + deflate(&stream, Z_FINISH); + + chunk_output_size[chunk_index] += sizeof(compressed_chunk_data) - stream.avail_out; + for(size_t i = 0; i < sizeof(compressed_chunk_data) - stream.avail_out; i += 16) { + unsigned char *d = &compressed_chunk_data[i]; + fprintf(source, " %3d, %3d, %3d, %3d, %3d, %3d, %3d, %3d, " + "%3d, %3d, %3d, %3d, %3d, %3d, %3d, %3d,\n", + d[ 0], d[ 1], d[ 2], d[ 3], d[ 4], d[ 5], d[ 6], d[ 7], + d[ 8], d[ 9], d[10], d[11], d[12], d[13], d[14], d[15]); + } + } while(stream.avail_out == 0); + + deflateEnd(&stream); + + fprintf(source, "};\n\n"); + } + + free(chunk_data); + free(font); + + fprintf(source, "static const struct {\n" + " size_t length;" + " const uint8_t *data;" + "} CompressedFontTexture[%d] = {\n", chunks); + for(int i = 0; i < chunks; i++) { + fprintf(source, " { %d, CompressedFontTextureChunk%d },\n", + chunk_output_size[i], i); + } + fprintf(source, "};\n\n"); + + fprintf(source, "struct GlyphProperties {\n" + " bool exists:1;\n" + " bool isWide:1;\n" + "} CodepointProperties[%d] = {\n", codepoint_count); + for(int i = 0; i < codepoint_count; i++) { + fprintf(source, " { %s, %s },\n", + properties[i].exists ? "true" : "false", + properties[i].isWide ? "true" : "false"); + } + fprintf(source, "};\n"); + + free(properties); + + fclose(source); +} diff --git a/wishlist.txt b/wishlist.txt new file mode 100644 index 0000000..f9db34a --- /dev/null +++ b/wishlist.txt @@ -0,0 +1,19 @@ +O(n*log(n)) assembly of edges into contours +fix anti-aliased edge bug with filled contours +crude DXF, HPGL import +a request to import a plane thing +make export assemble only contours in same group +rotation of model view works about z of first point under cursor +a way to kill a slow operation + +----- +rounding, as a special group +associative entities from solid model, as a special group +better level of detail +some kind of import +faster triangulation +loop detection +IGES export +incremental regen of entities + + -- 2.30.2

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 Vgne?E_}d^?F4166|?_}*v#6rh# zPC@DV(-`AFjfI^|4P7kl?TAz?ZB2m~8R!{V=ovWdYUikbTJ$}kfQR?^$LHZ`jy?IcH@8o1wA5U5&`hw%9&ofYOMaYv z9=!VS<U;C`>5(? z@pS&lp}+sKhjm2#d3uii7CBLO>+G{Gf6obc+Bkmg%0GAmzd`)}yZ;e(<0F~W)Jw44 z%N#nTDgXP&6bV~vA+h)E@$a8|u%G&WD!)pY3xR;J`)sXMlz)atSKE2xU(!FbgViKc z?&-C0zRT#UmX_x+zP7t(s-&Wdj1;VZB-7qDiG;tN`x1JRYH{hIfSxU0W+J-aYO2V! zJ}EE<2v8aSg)dk683DW=%N-hTHS_vKo{N>@VI}vNx27|eu13KT-KuSFHxKVs*Yu9F zC&Uq#re|CCwOQT?K1~7F51{Maj^AGoV!{1W4ZK16x!re5N}feB=;Ch$O{tMir8HUZ!o6JrnQrH)PGwXL89xM1!dIRd!|;cYBjxFnzdo7 z(Q&p?|F+_7Rg8-MbMGd(aY%d-*px>41K-;lberFHD&KZWEioT5YzJ0SlP#lDHG|e_ z88)OUypQ9hv8#z3+9G~~ecS?1IgJJrr&(w7kpUAWaGxT~6jl$Qv=~&cn3)F=POlW? zqSJ~dEtby(8Rd`-gG)Ub7PCJZJmwrJ13kaR_QMz#Pw*@9QRMrz!@;Kwoce}8O`j62 zV#8ubl9iYZ%(|4a5s_s?%9;u+{4cz(Em?(`*d(TGI)SlC(~xXFww%#efCWEn&_^~- zUiJahOEQm&cP^D!b^Ke{z zr#*_PY=6-Dugn3@Dj18Jr}I89Ur~Zc|6P<`aH+1e@%0Ee{~_kGVUSf8vYH+<%PYlf z$AYam#T{k+cX_l!PKK-iVUrT>L%4+3o+A=oy6!S=r8m;16^AIqR!wst84i$tlap>x z$WP(NUbX`Ug6}kO6A@ImIDg-CpfFb^_uzH*;AfAHLWWPk5MbMhhG zq4$S)$~n%QeYuXrqd_g=A#~@xxS~!9j&dWCekzin|L7*t`i4?f8-MD^c(v zhM%CRr{&ljGtzdCebI_GX#N|9f{-t>8)_RBcn^WWma=mp`1p1&`b=YFw`H=?g2RO& z23f6W9sXys%D|csq@2y*^5}E=HwlOfX$wvGB+_0WU%@$LCn`gZ?r03NcC0y^2I^~x zC0HmTbIbvZM=hZU+tS=Rktmzsohs`v9ypaAulfY9nhtr+UV;12-1&$pUJpG`wtDJe zGV;ie&%a>MY-lV|jtj*%3cz>Aaf|x)%z#oci*`pEm;_TvjBDJ4+sJ4cAl>u(M#Nr; zsZSPD$0QJ``An(pCMsRpd{)GGq`<1I*)W5Y?>pG;F~GhX}>V#gxaf zOlU~I1v(p)zKaMs)jOijqjAoPQ(&v_j5l;C)`s8oEkklcq@GD1O<`<=Kl0gfm3+r12!3K{=v8A5SDpC=d5%=HDXd7Fm zUR#jtY)e|BGD9b!aiJ6zY$*`nDfkga6}yprY-}R`Wcf^wByPfJR;dOJy7Obj2JXlb zD^9*+77-&eD$^6ndd*XF#t@t61q?vUC~}bFJ4)g`6a!~?V;hO(ICX_CkXxo_jDua{ zBM-H$qWtx)N_*iE>f?@SP>|Q9;2EorAGkTz?VbsE}=4)9=8x5-2TGaLf;W27^lJy9xDOncYLQLhxFqIjCjkLJ>E z81alZDhioC`LcBU?o2MJb%k#w9QARabke3n+VT;Uq*ZBzV?LFz-M<#t*wFP!<4Bwh zBU1EfA!AHzC7(6nQb?2;(jmF*IA$FwIf=%Y@qaO+n**~>^#?gN<@ZI>^}~oYcv!d> zei9gx9o{+*4>wb}=rf5lWsM|rt@Ui;V!nIxaPgs2n#j4@$-f~Z zcg%%0T*MHqCTL2VXsXFgTYV$NpVA-yJ?)vMu))WC}W>aie}LuwB> zsxUcJTlfP2zNA27EVb6C`SU{G_s`}UX*9%yPV}l~lg|SF!34g{9E4S=u_vQdIw-&f z)<+zww9$E0|40jr7KP9eJUff&D{8WSF~t^HNSlgg9wcJ+^0%S(5_Exs9N#7Na5PDj z&(IxXid`gmmslRYnJ0)1>E#3|%T~e^KPPta$#0U|XDNdWJ-h^J0I9CaFXodCT}qRc zhNpoXn_>B=fT#HvnS4ug)j6~(pS!(hEn#j+5YEL&p4IH~!zL)y3HcC+Pd5{(gq4iA z!p|%vG)?cs6+@Zk&&oegR5c|wKG4P}?}6Sn7%3I)&R-FtEA7$<6fYUS1?6#BkNsh+W|{q;T?85LDFqU4G^JKZ&z859xVskcl$1N1QO#R` zPahM6jrhEX>NC0C8b){TRno+aPB)Y9qdY1G1}Cob?`@x7p1oj#jR zV-WXUiRyihl;a0iBoZ6&kJuTQ5=E}?bAmF&@x5;QiE{{JZewfoPE-E~q*7F^@*@Jk z4ZNle8w%JFc!0})5ehEdj-~gkb^2_iTxKQXt)v9oH@w~QJ~i72Vz)6kX!BA18KI_4 zUP=KSTlGn3;gI-DWq=mw&q^N3asoQbMw~@ONRaIgh~NX6L4LY)kNgI+9`7#>^J*CM z4*Ga1XF%3fIAnf-vmsb>maL?vOr*wtYi$Bzd1=0hj4!6*m!zU!iGDlA9ZtK+#6a@$FN}p!)Y4rNv2;~c zMkrW227Sx`T`Ys!Pt8|%`NH2#@7WfSo(SBx;iH=2p!)bsEun9cC&v2ZJx~~}}uV5 zJsJDTUAGoa3{{+Gm9e|MYDqg;tZn&EjaB)R#fF#Gf|!&t?Rs&Ng$?*@Ujc$SDm9!8 zHbhOB<_Za^`70@VE^DqaYc#CZe>FN%Z@(6QQMH=5>xFb2P@7}e zQn=FyWK~50C=)`eY6Hn^-jz|=k&_aBD@|Act4KzfoWCZQNGz-`W>`rctHfKMN+p^( zeT8Gy^6kl1`~4bCbt*m zuLw5-+q?>i1Z2MMD#hKqE5R(%8;WDO_Yzgt{x{vZkMI^_=NEh_hE*fJ$JzW1aqqi6 zx-28f3O}sQ&e2V?jD;13O{thyi*TK@o*+>kStrifl2lS_6a4{BnV%2@t<#g*?s@$^ zye!*Zk36t)x?4?=B;r|fyKw15-8a1{^s9j_eqNx`={Pk9lcx#l=u{{v7wzibz*$sdzV%xy2G>oBmSz(TO;gxKy~$|59`C9FoE&$e1^s!N*CSq z!X_^xpt}_f)z6H`^`YOBM7Ob6i#c)_qJLQuZZ?4-*<$cp;Z%xyGR3;lO&qc=_Ja&` zwt6f28rpXq{!B`73zeE=^Wp2rrG{Vv-{b=4-J?68g%v=u{+wg2J&P$;JV&Xs!(a}S zDA+vH=0Jn9)OD!A;$^EvW+n1i8zlmeN~}m;*)xhGDpbvaa zW_UKcZ`Nyg*55E}`%y=5c=inL%VxNIoF=tcKSazey(!(7a^j?~%a;3bIlm&B*_ADN zne@cN9yhc%7Msl6S+@?1~2D`EIS?Ao6(dbSh1m=9|RUc;Zl@kkJ z`u#~nqoiY~uyZu@5tCLT7Rrb%%DDS1Uanf*v2_eFA^CKT>D;%PL0QZ@m-ORnydZav z!ZMKSQMUcsoy?N%6p_h+s?B6;0a)f&*rW0^h&(uKB8DCn?EDV(4N&j-n*mFYW*$7( zYpl!7YQJ{sSu+mxFe?3i@8_#w&C8aVp6AsIn11WBH^xy%`;6xK8V{0ds7IP#^SAX-1QXY%*qzYAB++Kqgj|cQxPHLTVR*1 zK@Y+6X#~?Ur+#KdYNixblOm~^6-=msP*l_G{#$>BNCi-KB(gtzK1uUmqFNW+JTc4> zuOGpkXUSKwyNiH(8H=)zxVarzEKiIRa;=-V676-r?3zfm-#>0M?-bW4IA`9ts5UT_ zD1vY1x4~2Y4U#YFa@2vV#j4;y=d7GOCA+hlr%Cz{p8DU^kuzSZ=TGd`2p_&}4eg2X@W>8*;X;jzwN)*6X5nr}1fM zzlty#w-qbYpA>+7S$=DqjwWgV;T-tXMabX3rH4904p_Vy&NtcfCM^EWs3Xvy@5yrp z@P;{9-X*$Oe9rps`k^1ou5P!rv0L&~bc>q$axA(Jl(z13Z;ll%09fW247>6>zqnQbwJbN3QF^_CxRXBhx`sQun}>~fI`}&$?^v6j5qd#aZnQU{ z*(~W<$+e7j|F-lOkl0r&r%e@XqI%cNd0Ixpcf#q)#=0$yn?&85#+I1~ZEVa`-1r@> zbhc%2lQBc;HB?u@u@%{T_6K7TYauof;$Fqtr(I1O)VsX# z*NyO1KF(Oj`?UCh@Cvoqp?>^iM&onA5wB44fpI-4BUyj)p&cO~*Z8!j2J~tFy3U$A z!=p=&o5Kf(oe&_Y@;q$431M_m<-Am^Un&*7`w;9;XF2ySfNHXp9|IIAgvm+zwHOm6#o?bK`yH?F=o7g&-5Cn2Pm7iYO2nY!`R zu9y+v5kqnn3vp?%U|2VZpv$#tJmk-EY7`s{%)6I9R~KyxAJ6vTF^NEmHyXT6OyF04 zmj#XYvNpoFeT~@}o9`8jyfsa*TOQ~e6i&wtcS%POx2(IF0*j?dzzKnlt6eCst^oFxvK z!;27K;NY3!2@vyEpkBTqwt9!& zt!q`re*WlyCdNijxYp&Pk9PSGlt*=X7sU2xxCpVq-85#k{tV=97B7}Nj8Z-PZ4-Mn zy{z?zenD;OHtw<(7PEP0kazutdx*pPreC95U{LE%pv4}7zRFl!Al%M}q+ zMHn7fQV&FU+au}3zxeVGs0C};I?pXsr7Coq5pkDffd{ScV=pIXB&x=C3d`Cf`&tTi zdJ68%J}xi?Y3gGK9|*M4s@J~4szNyg)m((EaRi(t%RdV0njeL=_0Jt~OLcr))cS)D{a`t|auYBE3`mnxJGZFw0d>W)`h~cuWy8zb+Bm1G#6%O{oso!W zFHGFb+!LovZW*dh|01*!FgRW5IjV<>G-@gpnuje&E2LtF1IjYL1am%8d=Uj95e#=Y zVf!X->r+>Nr-z;(<au0mfeJ=(v zU3()2?C+pN(#G*-YFkV`ozL$^d zHe4f4vC6G?V&X)m9j6|mMtuxuq@ebEJO@J64nm)s4#oua=F5$Xoo3Igt)O}!w-OOz zj?i!{k+AZ6UQb4+1hwooml1;(fwj=;&Za}e9%#20m$37}Aa+6T2QT}l8d-3}JWdTd zsx8{GgPXU_G<<#8c;lD%rnilYe8{6yDnvyOIX!e-y}nWp3Im5W6=yva74HNEVE%T_ zZtu`wgWE#yo~>ZxR#0!Jk9{*e_WA{v+gD(e^VHV1_6GL}2pR-;s{;a&b@`Xg9escC z(!+QVZ`*XYB|eJYcUsLkJ^~#e&&9Pc&s7(YJ!9CZe%Jjvda}wq%)FALxq$Fv{WF-Y zh%g*Cw|%$JknpL{OVyqVDZEsHt3UlLxwu*%@9&19>0xZx5*}(?Vnf4hkBWTK3(B4^ zbk7u+8{T)p6Fk0xCWl;5(&%!Zsr*d0sF=Y3I6LN?zq`+u>@+Cyc(S5$q)50DVg~$W z7_>0CRz+w%-QSbMMK4zHXu;l?;7-)1IfMA*f(uwZosNGj;NqhX$doJV0^ zW5|6t4gQ7B`mz>ze9+%Gylu?7w zt1?Ye<$>h!!0W_?~x z$ja9_U%Z+P==tmp=lY5c*}gvCr^93xaEphEfxh%FKE&D0=}7|{<>vQlKbi<`<;<6Q z#u4=Co0qq9>BY@{<1c0cD2p8YmR&A0Z|4CzveOPSDf*ggz6M|8=)W_`Md8ONid% z_uZcT(ze$nIhvS#8N+e*y$hX%Pml`NHq?DkM}Z(b=*vXFQVc5tTL8jmgsK5KwXPxN zZ{2LMDYm69*$P}=OxL#x`$=m-n-=VOsoGl$WUvj(f0 z(%s>yN!Id?Uhlu+lzSo#fm&|@Lp6+`#g+NT_%Z70d4K3{uOSvo7{g?;^7bY zs@;1O#*lw$j7=3|!hK7JX(^^_5L5g1bo&Y8Xb8{}&GB7e^ALAsM`~lyqEPw0Mr8-2 zP%N9lzJq&=Gxo_qh6Vf;*u*Rmq7Q2Zwg8|Qm$EG`xt^;W%h?hx9>(+c1L=k08nc4R zwNChZf9*mW5hlFHqR@2G;j+>DMxQo@#MOo9l!@sOJ1+XfF4Kp4qlWz>vNY+;E=2YR z(S``p#a#mZu-+-ZRqgkP%$7OJsq4thHSn}r35~H#Z|KrL@t>UmHS{)UE-S*4m48-(05_R`Z>k?AuxjP^`aaaj)fVtRJ+i(oI@4B3o?OieU zU4$P77l+4gtjHV#VrM{v{&CvUCrJ+%G{)Y&Z^U}WdyD9M`fk(8iejc@(7{jN+x;D> z9Ggk($>`8Plo@3)irIi8$bTX=!%(lgIvq8G6%-Hgd!&tCbNT^43ZCL%w2ia^_-3wpP*ZV85k7Q14;Oz-j^d!u`D7Pj z@YoIIP^K8??&>MpA;Ioy*1ZmQ)!iPKN#(QTwDoq7vQ?ng@{GZkD8Y5WJ;wSYjMx_? zC-CDoxM{ohoIaxVrzyS-N3~*b3{gTmv{Z*Lh|gZj?caR@VY~g z+YFoC+xDJRz&ZGOzmY7&HyW9M{tMtfZmw+=*L=m9%yMq45xWA#;lFgCrU|INR zKY)lf%S0@G--G{V#bROTDtlbD*1A@qcH?!a8uSS_Q~m@jy}d4=A3=eTD43`Kq=ZTg z&;clJ1&uRT--!D@5AuS-wDv9XcS*x2#1Z#%z+H4x-cSyF?ph0E87bdX3d|`=EXNK! z=rsJRySEP*iVNB>Ug8x5WI&UaNJ?>dWGx0AZ)paIIV1;ehbdM{!;L_ zAEH%JsGiQo44Y9~(hYX{0LhbwEI3R?Q7YpV(5sCl{j=miM|kOwoD6B=slc82HV3*n z01g`B7q3n^58hm}qsKp)bJ@c_;Rfty);c?PCx`KP)vXi#Xu`SZlou{W837pyz$FdI z8TXrb)}v)68^cus+GP2}cKF`&@HZaWOfep%@Z=`ch!Z1wd>2ESkV&||sq^<+)wO0b zf#`mPK``d`>w*>Wc?&Xx1MaiVm|bCh=xq}m{c?$V!gnl7Wo4mlz`TQk;E&1sK8~!60RwOk?g>=2e2nK{7qip6uUvd6QqY zQrfMwUOGXA?CUy7(yz?kxynpcU}pu0o6J$QFnKva#{E@jQ99V5A{LY5SMAhjnq~6xlb+|dl68v zU#bM8`mpP(al^!za}wO$x=pOK{HyNiPL zaZd7iu9AKaq)vgwqKW(ZaNA*1nqv5d-u@mtBc)=AwZMoHn&DKj@IQ$w%z3Sq8y#*r z#@-JT2qibWE*>gyNVBiYzdYSS&B4s#ECF9a1<>5M9XOeQR;Ph1{yCv>G#1Hty1}Jo z$KBzD>zrgiPy-|UY|4xzLgD)?cQY_!92TMudcZ~CH$bZm>YqA5UQJE^+PL6f>inP{ z@C1@hP$RKNynjby>x&0g>34V^8qQK(vQB%f^2H`;KkSRx0y4r28M(_Gi$ypFXaBCk zCk~YO%}k|I=^m#Dt0(g&Oh#pqRlb?f3J-b$3$Yj-`i(cV0t29Xea)&E?qH!7i-xCxBC7W)G2@yRBH$)&2s7 z6t{M$HN*g<<;sjCd`yD=LO;mgPBiPNe@A6Xr#a*I5`RaRRv)QO|GIdqgYgC=1ep3u zPba_9pN=*9qRU6zYJ67%%@S3sfu77b6Ul&JIw$QeMtdL6Ryl%7NKB6#o;{u6dkqMg zMY>b;GNkam)om9twz-^A&6yppJP{WAuO8^MHjK5(G(en&DFB)(WVxb>IR+3C!KQHeCjK$3TKcDIDVU zxiWlya7X^5h!bjShr06qfLkH|e-{GHt1rR-sFr!m@cS5l? zhEzRcCc$8uzW0p=gjTo$+jVUHui<09zd~1z;a0pWcFCOO`V!?8l=b&>aE5%)<_)}u zSbnR>E^H8dGm@V|V5i%j{q~VW$5uPg_g3SRHg{pDyq*F<{M&n-qf5*WukX&wz2s#L zVS?@5ex()iQml!v*G{0mT($~K*gFLMDVrzz^AtHX)I6EEEBt1DoLP1q%d|Mm#Dou_ z`)*RdBqY3h{d5~vv`w#PM^bkTrD8K5?=PzX94Uw0FpA2y%e;bs*OZr$WW{s3! zeegeezPL*)4+K!3I?bT`RcIgzed{AMcKE>q#Q$Ch`75xm30`56N?=$sixTd@!tXj#-DUzBv1!EdKn;zAiA|=&iUyJ+nf~3 zpCe+uewA*L@o5sm2wfV3dzwT01TQ-kIp|K=bFFh&TWnA{^>Kd>0OauO~?atbQ!`TJlu(}m^$9S@Masiqi zZF=6~cre}zw^>}XAP|wbk}It% z07-Wr4V|uM6fNZQ#O}?;Y*$xb492DwP`WOqI z6BYGF=H#U>Y`h>WC_+H~5awprSX!c3nj^1jcHK+w3~N+vT`P%M^0SE+DdDt%d3q}% zOk&SDns5*4O`1MJ?MLEUX00#LbUM^MIJnz(%gpl(fc5Up+@gU|zX(!N278AeAjGai zA6wb5oGn5A%X8xCE(n{&IpRwc*G)F^!HwVx?-3v1JuE_B241dN{c(%HIP~gmanDcQ zb23|^Qb9T#N@@i5<_7>gSsc-#G=SK}tc2H|*5B)_ds@XefrE5&E`C5YTCO3Hi6fBi zM}rv*@J{O^6P2|_VSVFdeIka&^9v^nH)!%{`c|JW>fiV~k19MmOcius0vbM`DUb5s z=tMxTyBOyQvyD*3&UY7kFJd3%}^!zir(jzF3G^+-Ip z_^M;}7Ef3q2K9@P#va@_yAa0+OKMuV`4{HyXQVHKF#&z_^`E8sw!t6 z%dL$~pkR}dwFMMDVBZrPzk(CJryWz+-TkNIpiCMl`Me{3&ps&j4-=@p@8A-y_9Dn; z3Cclm!E2qrTmWozpXZVf>)O|hwKG?J6QB?;&bdyA9K1r%68gv(VL?@6*T8P6ZV?Ea zTuLMoesS^sdd3?1+QHGE_9x7m+>O?qXYvm1-3Ek|d;GP@bmcl^pwwh=>-LLvAi5*} z7>S0315PRoDkinpqtsZ+L3~vis0*hZG@(q}GEwmkal6L1-^>43ey|fx!5IYAzP}we zeYJ7`uz8gCS{<705B3=Xv+>xxa3tOfzDNVVw}~t=%~asq+D?X>K-#zrW+8mEL59o_ zxn=6*-FtD3*YqbRR9Bvr}|JNG<-1yVQ-wj zy+~{MF~k^WHnZ*8Os7nTFY8ducAOho&9(dqp=iWsx!^j(_Wrj88{?NVh<;rd+!%@@ zu0?aRjKODkp=8Wgdb<0%9@6E-L;MZ-!LV$|5!2|hImScg0yM({?>)GgKA77n)=4fn z^xaMJh}pgD+A6zJUSck{WOn;!>>$#@foO=7V*HO%n(xku0WcwQ3;x{zZ5D~kgL-u( z)Dq6>-0_oi&X&Qe(m7{+ZhHawx5EK;ICvC*K;mAm^DOQoQy?P_-6v9eMtdko|Vzg`33tJwKd+zCQ{$n<4EV0Q9L>J(^%QXE6Wurm;X!+jD9r z^a97$+II(OtKn%#m_|+u76I|2bX)fQ9F$Yw5s$*+dAixz%qcArb=Xr#j;s%6?rsWwqH<9*>9y#l ze|Qo;;k|Ra#6#l3Y8|OR_BG&0KipX%(9YMr_$Mkn$M|VYWWDt-7ZGt0@`~nu;xg$}u*kZNd12613X2h+ zs4N(Bu}a7b3{@`pEaxpn?HZE9!x|#M4{45;GN!CZd<*p>y>KiMX9jo7W_bb`&AX!txi>Ea@`}fMXwnXJKL4W)frT*8 zD+K6;84EH!eE;8%dnk*ba=0mF@tA$ByZHbREJxZVMCE<2&w*dU`cQZ*k!uYI)KGG?iko^!)`M@-uoiX2FSuZQY@ z-~5KG*`+=a6JmMED1e2zmx4l z;JOoXS$9!%*UA=i1EQWmMVqtJF&bO6P1*&EVYi%>IVSs~CRlHf?ukFV?0^I5$o?f1 z+|<9RHBVoEe85%JUcUx{G@LUE)TeTg>OEhFW9s=B=?ww?kT9z=t!mNq-C|bufv_1 z=nfBlH794&ICsqpHis&M6p)PLyG}lwZwDn?4f2(TBAnYso7A5?51$z{>>B{U$@0;j zX(ML~Q!oX)=DT9Ky7=-}x>K~*dWX|>;?@&TwV!%0!$X&<#$MD9>9pInGu)85$YRVuRir-03m2-0)pxl)nQV)kilp_G>9M5Z(y5)n%BzUwq8E#6B*YuqN)SbUb8 zr}Ny{bg^3*B;{BZ(&v5Qi-!!IjhpI8?Y>!>33Yfci=b&33GuTiyhSWb_mKFRyO~yl zBwEjjTkf(n#FzJJL4}Lny#V3V$6-TD7;=H;gRQcpnxrA=SR*EOZCFlsn^sq%4aAje zbrE26Qz~s1Yb4xZZf78E_-+LdL{BU6k_Rj~{!EmApNo*RqNK!bo`nkL8p-IoKQG?= zud`d0n93KQHZkArxEI=oUEFy+=3OwtZ_2~XknnqV5e}cRfcVt8Y%8go(x1F0ZSZ-J zAQbS2%a-b>dHm-yBFDWvzS@U}_e^Mm{E;UVdTQ^)=k2E33p(xC|LIBvWWY zhMPH*N%vh%%jes+p0RE}+t>LgNc!Edg>$n7C3Zp9c7%mlP!c0l8H(!_m_Rv+lD9xV zVhzu_5g|kIgeO8ObpSu)?J}N_(?7{5(<5;2`au-6`t# z0#v-25tzdYlP1Xs4#Q{M!uQwUNjKM2v*#+sd8V>0A3>S^aYD}KDHp?bIl>w^;tL1N z3?3J`L@ardu_F!^5P~|&k*tPhTn>N6pjaKpMk^eZ{)9;+KhPWBL+sDakQZqkcS(fl z7#%3&cl50I*o6R()&fa(sey^LL%@R(Rbp}M_UNf){tJ~vG{Vqz>HK9Y59LmNb_d4k z676EiFVAsfxsc(kJg)k>8Gss`6yM41WcK>16`~+v6NHNSBQ(89<+h%tJQ(5SU6ZiW zjyRX)jWPGysqp%EKvReM8w({|`_lQN#XS__+?^EryuR~`B35d!OvoHFanYFUM%{-$ zTU~cSW2khvCuD~AepdsYBT-#g0lUXU*Oq}c5}?1C>irSNInuiEfSHBUXu#tbd4b)> zu?t!yJmBne6W;6Uaj8P$b)G*xlD5(IFf)WXYdQhv2OY^Ph?f2ou(>e*g;|5T)sc#w z_Ow3x1sPH+0Ivj=>5^fYFKg1=`h=+CB|ZK?N2N19y6uFo)m}TAhgh^9>*(-#8SIyI zd7mq5V8RAZ|JPlUnVX9?FI z0zL1Am%ZlYuZ54^eRf3@oZ-)oAb|VMggl&;$*V9>x*ey}#)11e^z^iIF(w3w$)$vg zrS+s2*C_ZaMx=ylrmI#-dGtkUu5Zni_z>6TxohOL=R7}*q8N;RIy(;u0gk}_t|69h3WZj-%4rg?2RssyzvCCK`*~5LGz(x0!!!Vji zIV%}4g;Xe zcnWr2Y#@LnHga24^c8l|KEIIk)$4Ocpp;$0%eW>Dh2DcH^Ezs}pWPOlfuty} z|7wZAEG(vHPlsVPn2*%(+4X0lF@j=s2Eri2Qb`P}dTaq`zqJ6{3 zIvwS$$(_k=A>Z#k?+O;nLD3Pm;&GB4B8wREh~5)b4%}k*&6#r)iS%s7Lo~ zUQpFpc=q1m^BlB#^3y@tUwQDiS>}Fku0`I~ z=$Ixx_fYerD1W3$@#_X$kl++GGxB}U#DdiJmI&9?}7Cx(W#NmArlojmr9BIxCj%K0VZ`9)=n&Z=Ak8eXqE3 zKiKR~UjDjbp5j9ji6YLfQAeTN>_pk{Rh*9Z?5@to%pnm1!So3BxlT#S{=i&gu3vj& zl%ShxS!D7jb~IX_{KJ0}bXS)HRVuqm%v$i;c{u!t%Gb<8JL^AVqyA?` z_eQqgH}&DlHjXtx4k6xL{)Ppq|3b^#HX>{*^wz%bG8P_`RCq9aUKUw55e_71`YaS8 zi0NkIvcbZi=|I2EUr@aIkAPj-*(btZyWf{Ml5l|$Qaltp`B$*l3#U?0lh$zt58qrN z8L5Spj58ITr};ai-XhdONIaRu`{HlqdTmqR;bHtmdoyQOj$Zs9!3uX57xZld;(V`T zOu3$fI+hrxb&PuYqKvaMHqU}atKUL`cA_)z@nRvH8dc$g3~_vc>wL))jBRU_^%7*# z588gma5iF%R_<;BAvx&)d&0m62(jgjvxnVk& z$Y$k#JzspuM^E5#ncZxT-Y-CQz=!xOkwEp3ka!BtCSr!$q;82sSs#%O9Y*@ocR+YI z*2OFp;MFd2eihxQJ zkU#=S4o3kC1_1#PNK{0W7J7$>lu#1{AwYm25JDg%kc5P^y)Wmx_k8#M`&;+^^IL1y z+Iy|pWoF))XXbt9nP*p&o4!P(ks%>c=GSTIF zP?v6-Mfs|a!3>I9177)d?AU$-Yiz|O3#<=P7SioHw!mZ!6GTm5N;sPSy`}Hm(MBMe zXgM3s@{S_<{wUuEyQpg5OsZy4a7tHZj^6jolUuv zXFqW0J6)&r;#VK&b1!#dT?r_Xp3w??uzBuVJS_Q-5a_Az&mSh30blNKLw~Ir9;gjJ zJEI{Ec!-Utc~nCDl@^FFG|R^7+BUy`eI7a2vxS7a(mRrkHNAbQWOSoq%o%Ho&Z)+3 zLL80+!OVQ+Y6W{LX>lfmi`spzDWByT7Sox|mmv5(;nR5o_qo>-AQ7vrq?>MipKTUz z9nt9hP~kFWRrcG(t%}}_Np3aO!o}NhDJu4ES$&CHL-zmWzP7pUvE{lPe*0f9i=L9S z;J2PTSY+W1xC1{rb`mB>Xb)8}4nnZ5<@x91Gd8UuY|| z!j`O{p$@eJ`(0;Bz2DbX{uD0IA*0f5lPmV;8IRc#qmMt?IZvZKBt51wUbWl8ps1V9 zI~Kv(7CGKvr>IA3z5Pg0Z}6OExt?3hPR`gRS&Q_pDPLu!V2?}jOC49A4T>$jjR|0k zFk()5+vCSBaaro8PIPLk+`15n*c?RUE1RD5`~f3GU1y60DnaEQOy#ZnCr{MpJ@ibI zUNC*nQMk*lQ8*=9Vf=PR?untn`WMGa&b(%IWOwW~+V1t`8v)QYiRoBrI zp7$R67<9?p`89g{=c}$vV0t^`E%n`-U94a2eF7J-X)2?H;ohMRhwqr(*KKih^R{P< z8z*D-cYMCSMm<@5f@+ldyA}!_xjP@Rcbd$9Jr{m<@}{>RH%fkoT;?X7@P_x8z8*l} zWQa9(d3vGbXVnxV{baN`#4B<^a2JtfyP+9p*=4Gb-4vZ>PgP8PaTK9BbN1JQ5CXq` zD9f_!rRC}_`{Zh1pdG?qdThBAuxShcPQRc@XVt}c#`x^ zL~qR-dSNVGExf8RcJH?*hlutXiuY~qpE-4RwMm+8LRX*!`0m%ZJAS}*wWbIb?;m*~ zx11c9R;{KN7%7=Pp~Tt*Mt82{g(nYcWEkPkEm z4f~(8UgcbeBZ4eX>^pYP(++~an~qhoYRvdU*x+votc7Onken2(WJUub?EL@W)-?^3 zy%v#w0MUQ?f{e^|^1o@KTAlX)TZ-u4@2}BBvtK1CYi^5GdA2*`;P%$%MmuDuE+}_+ zGUhGF^?sKvNhIJV?%_kf`Ug99ZRvZ0Nl$OSeQMvf%}@ThOhP20l?57|ghfS9nF#Xf zQ(?JW&RT^Bm%Jk7g9Iwh3lAV!znO@`uKE1ns9$?SGH}JJn+x>C_1hdU zlr5PAYG20Z=j;SG_b~H|2eP?F6^M%#pR5%-zA|pGR^Q8wmUXF+Z>Z(_X=9fWWI)uT zP$)q;`woE&RCYs54=^A6#nCx}sSI~U{Lqa5ZtiW`{5%!^diKok_xLWTcy_PoIAUCyIB&=b8J8YuQZI+V`wY_< z=LWv^K2Ypn^9c~nRS9i>@0sF5(*{gCF9$>)c3t=idp>wSRr#H22E$Ecj>(mO?4R55 zQoMTY8<^D2KBR%r-LTRgf3L1DRA1QXMK~{t2iav`Bqr%!d5k)hf4Yf@ksy5>)yoNP zHm`ZAWu(ph1JOpoeD|ic=H4XT3yF!k>jcb?C}4*|-X?zkN-UnMnF?edDrm1N@H;`w z=cqZk!>c83!V2rNv?24|o_SiK;meY!%7v@Wv_T25mF|=a(FC0>iuzNyaYRj#>Lz;R z>)7b54X%vB{+M=!dOy_%DBg6IdmHS*n5XxwlW2ew{A=KZ`OX})hqzrp>*9^Q zspSK%xf?1Wp}rhH0PIqIw_EIzl^!&psC@t&|L$kb^Xu4mqg4tuWj<&bF!qg=4ck#k-CqXc!sr$^% zkthc%TW}Jk{9Ste38K%2E=^}21C5B{H}oVwYrhP%Ir|Dw?D_Ap`CDt#Ghx1=n6($H)13U&4vHG4%bc2aVZ+7g4NqUeDRj1{enKGKy;yN4Q_k ziQshI>*)_CM|5}aYMwYLUlz=`&_mulSu!eO4U*}Xb1Y=DwbFBzEosa*@{clj$_{PV zU)&CBZ{SvXz9gID-k#qxFG4r8Dmk_9E@V=(t2cV|^b2)YO%}nqE|S4Lx@l*DiQhTn zj_cX4I(Y18YZqi{I*S~!zd*lW!Ia|*H#PAy%xo_qo9F@lhmu5#bhh<@~r-6d8An;GjuL2_0ukKc_YqZ&lo-M4cF#6&dz+d#A zH4&6RR*Hu}xUPTZ7};XR>>UX-e??3}*kXHW_4{Iou|mwc{SpgWIL!rCbg!_huo%~W z53c;r;5jij<_>W&`evPz+)Y+fTSuB&?^-Wb?HM%rOWIGmpx{@)_ipktdnwn$*Vihm z`I9v=C|{dWH%8z2@t zYNpoP*$Yw3#BIo+qto}DWGAfu*q%pUJ?%I>C zYtI2Y=A&FRZqwbpO+iPHdzTP}P1^~=8J*@x7w$E_<&Ww{W!SLG(MIe5}V^Snbm{{aE}Il2K9I1-ou7)&8IrzU{cYjk~<~exd!qPL15L6Q08#%J7~zCT=-o z)I4yPIV{?S%UOlC75GS=Q{1I*Lpxq%|FNzTOHeaMXD&y%%-4v<_4>u)joGH=CIp0Ow;Nl@n zQ;06B-%E8oi-dtJo#m42Q2y;15c4Iu#QR#08jn$Z5^^e@xzyOIzjCf?1OwsBdg z67eMq%OcdRSE2BxqqL`<1oIk|#~fAekyE|8F>E6FNf)rHPy4B2`ryVfY{UsFF+vny zosnX)`RC@kJOaUwTvV0f2-tm?mJRD+PCQH;pRZ#dz4gis>D7(9#~3QE{)$Wz^B|4+tBx#QP6&V9q~()$)uUh+n>h3rdtLBZ&qR6&%hcTZ z`iF8zmJ9>R#Fg$HGBp$I<-z`{J{Y_=@rW%;Pl;af%-n>UYtM3?R#=A#$L5$-5DuCh zE0Eyl4QvWvyU%~E*{7>0{39(#Ih3IJz`PPTp&Ly^d%pJQcBr-O%hn4)Ti0%Rl^bEv zQX54}{Uv8+mA}H}z9Kd|1K7|q{l=h?iGW~m_|=$TOuw%<7yIEGNV(R?+q1 zqul*kjWzi5#k&h7c#0Q&YxO7=dD&g+z$YV1{ZW$5u&*R_uWImNuq^Td%!wxdt=KbP zgt>hh%)vZLsFS7b75mq+;)5$8CZCiCyNjir=Ly>@YgrK^owBH63ATH|0y1C&CDBaI zRsmeZMU(0dqE|tXvR2d&ARJs%qr-9W^JAg!%QFQby(vvStOk#`4b<0&RvN5+^$bypw-FDNE zg2tqE9_dY++>OQdF{@-2ve&I7$KMXzB6blzU|M@CAlo&kx2Uvgn_;#`d~VQ@CK`nF zAX4S0F(?gae)v+v5$Dq6!k_~wKcK%j$IC*?>b`?D#i!A1{jZJB98FznUUq^030@?d zAEY0 zSRp=7=q#FqO|>h?)_bpkm?b3*?Wh{jYjjRlIh7Mq+`Hamb)fu4rbn$Q9Q2wy+^pA0|8v73F-p3*zec6d*saDXk zE1xurT0OUtUYEEYdn4p&v7-b<1~=3L+o^9DW|=MQRaBANF_O6iFcY}re#&SYG^}){D!B_dPrxxMCUt6dT z+(Vu-ZMe}0a0^?eUtW9$)9DBeH}16-EG~a#;_%+zo7DLu42$ZMq=&&vMVyGJmBBcX z>W=s!rSY=(tKyA9^MXK^xp_{9ez?~s{;NXJXc(79V_+W!V<7dTN@f12iS7%cRVuag z10NOG5GR#J$o{n8wQOgq7r#e*rF8EluT)<&DP-DFKG>O>frVgLwgi@*$@=gUk-2U( zv&sKC0x3#hl@3N%UQ3Q+YZ&c6e?t){{!kdK^~KEvBl@d{pU}7(=aez?mCbg@SdoTm z@CA)5cRH#_gP#02>xOF$DT4Q+2d;C0n`{1M%q4oD6B%Oe^`S`ymfv)(er%aOGP16h zAV|Z_5EA`?b&vDdcOA|3XT{OE{iP&Wh3%*p!VbssAq(HkCN)wL`IFM6$5$t_91XD{ zx6gx%Jr9+Ar4fMa7k~Jq_P)`nIEM8i~0Um;PDfH*k75Br7F5Nv79yD%Y7a*}S zZPM4UY+_DZA|G2T5hW&d1(JMv6m2{_rVE%qvo28YrNUf>g9p{#C0oszuB0z^EJoAd z9;942wm(cQTbk5KAsh6yc|hrVlUVs<SCO~ ztwkKuK$_w&r2)0|Rp`NB4OFqU%kNPZNXhWf;1z%c2B1Vd2ALX6ZIVhjv~HB>BVVx+ z$I(2YOQh|iC)rBfi$_VNqrt)yXtvvfTV8{ucSu)=*?_Kz5CuqtWWyCZP`mccw%5k` zcOmo}K*yd8G7zB1^CupKRPP>LPgCMEXT0<|tGKxtlHSZYROPm$uu27i>kQ%aq(zfS zoP|u6x49m3q!TOz?1T~QZF8_0PgH^SLGozTNomi`PAXhxPMnGfZ|MuWCR8UUJ9#Wv zT=EjU{RUfgO(sC=4pE-3B+$G9TOVu#uZK?oVHIi~y*IN0)$+Xj#G0|}abVc_UNc${A6{JZ~Z%gBrS2-Fno5^^5M4c2A5a>hlf?(_b2hAYL9PrK(9AIg$u z{VruMrSY5U(*)dX32AsaF***05rj9j>NKWGz&L=r*B#)M-yyYpMqfK7jbKn(6leSy z>e-~%q9YKZhj7C+dhn+N_e5z&(@Bc%B6T!3ol~tg2bBVv znDi{3+_2xxgX&D^Cb|Q?LOzA>SFJL-O>hpAv6sVQj%0XtQNwv(reli14dM42Cz}Ex zXhf7pLZ1$@1JMUvi*#NwU5KOy_xN4mFYsJFk|)X+P?lAU4LZyM&5U2cA*l0d5_}2- zLA9_Xh;L%Q5vgxE8rl+>nSoC5c%w@agv1wRmX$WV7oh7X5Mqk*1ER3eNdqN z4W6_xW0%#H!MhG*k%cV)l<8&zaXX91g=kA7_=~j4pMgIHlcWeU>ke<4&C^u89^zR; zUN~)eO^6ac@mW>X31~UB?eApo?Z(WMm|5Wc+|Bua?)S#4RUwwkuQk1tYg9nBNLu{- z{08PFlS5nQwiBMx$G-8j&v`Cz{k{AkJ)HMAD@ayOdBH(2b({=66&*c{?o%2@nG^CZ z;qBX56hC?xvwB*Wa9?dWY5DT+gvZh`q#`*gi9;6!dFCNvs@S(?SLN$q7cdLyToSXI zdwT8}1Ek;VMCF1m&?R1Oo}G%4=Hg*-srMXJ5{ zB=S&?-2d$Etc4Lv)^c?FIvJ+Ak#UMczldQg5--N)YGVkfQefXRhC4l8@4o2PI1P)Q z7+Jrsg}&1I$|(CMX?zvyCo?0)cXyRujhcb{t6ffQqwn*Y^fzewMvt?oNSf?ntQ1PCQQ>f-dhz61WB7<)voyg912Y3pvMfcZs`k78QsKP-p*O1eSoK32 zt;{T1FzT=mM`Wfm-G#ZG**x!g+yLIgA@S$Jf5SF^4xnfm){Cgn3Rb3BMjUxZ3oicm zCjT=Ypl-l`x02g!sof}F*cXIoB-1(Xo))m>lB~O^3+OfRF>)*X@#~#6o>1zHz9tG{ z>Jr!`z5)T;f< zYfq7;+Ddjz6%&40<%f6b@w(qk5x8I;lP#Y&r2e>r_;do<4&>DZ-IL zaCsRI!UKI3(^D+)I`~0g98p-@yTHjRMq=(T|FKxfJGbx(e5TgYnN>$xGAJZEVfl8jY4}MR9Xr3>yqHY(i$;ac#D#q3k04s*dmbmYg zH0lc0W`=F7Hph|-y~lUfq@XP1O|U`D1`GxIZ(eSo*9p`@;NueSKxWH%iT1gB4#F0*G6;Q_Sschfx-2owlHr!Us? z>B)vZJ)ybOA5uKm>8>LZD$E0NJZl9`+w9KR9cM(FY6%@l3~Qd`k7&rS@1j}-*e9qu z0U?B<(*-U_l0GT8%@#--!FH{ofg@lHl9Bh&cM9ll=^WNj{8%S7aL=WehJ0q=x0|3F zIDQ3)mA*z2!*r&1jc$Nt{QzGFKKWy$%5H3ttq^@q6)d_Z!Egkty7bi%*|$LR-O~W2 z6W;*?##h-+{~q%Hg^B-(jHeoOTJ86yBjq=$0VjrtdY0DiQ&{}Wm`&Hx#13kx%}wxa zWtcu{s`NNDmqV{ZUs+&Q@2xX>gHF(}m`c8BIhEG1o#;>~c90&pn=?5Y!b4|sA|jv5 zG4BdAQ}7F{8m}&!=+wj{C{gj?#F!o(J$S9baEJdEAFPkIJ|UAWIxWN+r*l;xHlFB< zb)S&WjX9)J2X<+(YcbiX)+lWOwNu^}LPMIGm|rnVXH%%a2W{qKndQ3HWSH&Q2_*u< zuO2uLptrjJ65C3rZg$zsr-x~3Fg$HQKX>F5T_2HYxQO^!j<5d3)~r<>3-Yk57l%%$ zcq;V>${)rf;|^D|qSPME)=mlajU)ave4{+5+oz+9g=<3>O~hJK0+_=syB0O!lCCOE z6klu?@TEsf(DZ4CO%_N!^a*1lO8tb^;-$Ea`4x z7@9tI?;TPVx;$xHof&^2n||hmjw`)DNegN+0P`{Btr~SBJ|h|6cyw%anN~~EM64}f zjLMlD|At77I@gX-f4mvTcuS6Cy`CN{3QN4%iTB4PI2NioFJ?+~2kG_USImRww^>W^ zOJ*+z>#u5nIc40dg&Y(4nF}6ehGP#4eX}z-eplZvY=md);+CMGyrAZ|0OzzeLBln6R7w7?*;7Jga1bh*wI&k^QZR2-PwF6 zX?y?Kn@`W~`}Fehj$+$z>ioc073BJlv4W(-=a9+-0`#xm<>Qx=k6cdXQR#I0^7OQK z-A@32kUfogKvkDo=Zi-I3|~ zb!<2lw+}TBXtknz@l@2{I?Se@uSA~WFN)DP#7gIKB{s19j|GFojNCy|Q8?%I@}b6C z9csdTxyIKCPVWW*SJdn(xsi76Bpf6y^IoPU$@%ORS9%ZTVuo6= zHTBIxM)g%lx{0r|Y?=Ff9c~BMWDhN0#pCfPy!v&EtO1Jm=cLm2wk7!fyV)YbvU!oH zaCphn3U1Da*?zu^m@m_z8!U}XLkwP`sxP0n{%2DQ?1LTern03 zT@Ck;euDZ6vzKmd*qgg30siLMfM=gLh3Q|u*o(1Vqk7=T@l2AzHBpx5F+``Cbe4KH zz0OHulj_j4!Fhx);H&!2Uv7^PZ0-MO8$vW*CQZ+!)a-r0muSO===e2Tc@8wr!VJdo z`sotNj8TVqR|!(77fI$(9n)_`HKD2A+fV!IE0ueyPg4nooCsj<4A_5j%k(jXbf-Qx z2il4<^QENsDy+rrCrbo8uazB;MT9={yEk17i ztv%y~Bh+paZpQTU%2&(2?eEs;q>F69O^SZe$$C-G+tNox5;XGaordJaPu=c<>loaR z>ExBbpTK_qoWhJmw$&QdIGtNl*=Mzn?p6-|L^vQv=qsS%jM>Jw-Csz`1wCb5e~2rs zXcTaFvtG_(&T1kj`V}C7XaFz?Q+lZTdHAgF>Jf|(n{Zl8YQzCO-Nx(gn%CteoYloj zEb5(EO1%c9<`e@ecQnV$Yhmv)n|oYgH|NblY!eztX-W_^KtW?cn}z6iz}j-ZBmP@? z6#*|WHnxVH03@ixI0q456?Dbm!cPFgfIMZmX=jvnBdTk7hc23C3@wo6b(sqs($+*E z!roeBd27;7`p=p?_ai!Bx@5tkqj5j8Pdd)_SS_p3gzqBG&QdrSeQ3pEgG-n9PnVE@ z&tx2VdW6#aPRewv!;KLTOD7r2y?(;EGyCWQt`&J+{AB||N5A{+Gr(Ed{rP3XL z--Oi0#5^B4Dtz2xykzg!jw`Su?fxJC`xEuc2pvWhq{AOF8Z$wEwAhWjqD)xM`pgKq zigs;G%Xn9GYpCpG;zHq_eMm%HP4&#pA^iuv6<#OVxP_)opxBP{8+KP{(yNb z`K|Vl_SmZI-CsxcY~&#BojbUDXV)v3Ms7HY>pqiuqa>NWMJAwld0ysQi1OCkfl`x( z2k*33Psil_~$LPf!VPw6G4VIJXi?Z|XQCO|}cB}i&zPqMWMTx48f8cMc xC+E`Ce{^ad?(uEbuRYQohO8)x)~eG}V?=)XQvhAG_}f&MFWO!xK6m@C{{XHZMjrqG literal 0 HcmV?d00001 diff --git a/src/icons/mesh.png b/src/icons/mesh.png new file mode 100644 index 0000000000000000000000000000000000000000..dde867b613bb9a50e03e0ca387e6f8816ca158c8 GIT binary patch literal 28445 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 z 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 Eg1f7$-~a#s literal 0 HcmV?d00001 diff --git a/src/icons/parallel.png b/src/icons/parallel.png new file mode 100644 index 0000000000000000000000000000000000000000..4b8ef991462f9b565a6327af11c16f8cde7b2ec2 GIT binary patch literal 26455 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�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

BB1vyr>=hu`W6H;Qj6k3ah3<#C*ivdm-4$Cu7O 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 z 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 literal 0 HcmV?d00001 diff --git a/src/icons/constraint.png b/src/icons/constraint.png new file mode 100644 index 0000000000000000000000000000000000000000..a0e1889ae80a08b643a0749fd5ec55fc085b68dd GIT binary patch literal 26545 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 literal 0 HcmV?d00001 diff --git a/src/icons/edges.png b/src/icons/edges.png new file mode 100644 index 0000000000000000000000000000000000000000..d89c046fe6e97889a10ff9fdc7205d9f9c38b40c GIT binary patch literal 27374 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 literal 0 HcmV?d00001 diff --git a/src/icons/extrude.png b/src/icons/extrude.png new file mode 100644 index 0000000000000000000000000000000000000000..6d4a44a138f74c755490e5e349bf0216dccb8f0f GIT binary patch literal 27030 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 literal 0 HcmV?d00001 diff --git a/src/icons/faces.png b/src/icons/faces.png new file mode 100644 index 0000000000000000000000000000000000000000..8fd4e363a97f892618b7fdcfe229f6aa0b38a61a GIT binary patch literal 609 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAv7|ftIx;YR|DNig)WpGT%PfAtr%uP&B4N6T+sVqF1Y6Da>C%`AfRasfNu~AD{SlG?Yt+KK* zH#b*WT6+3)>Ez_(sHi9d1B1Lgv(1~iTwGk7ot^FM>>M2(wY0RNqodQ))8pggi;9Zu z?d|#b`JJ4cJUu;KU0uDsy(1!AGcz;!`1mX=EOd2sEiEl;YjtB|9hWQ-mXnk7^788G zQTFig;Ns$PaBxUVvvGHK4-XHwv9U2XH=jM5@z5cL`ucjH1HHO03o$S-dV9J!hE&{2 zGH7FBWm8K|VGwZO3Gni7?vHd2Vpn7oa7f@Zvz4u_t*w)dRcv8#U@&ZGW&QH?Ye`9K zZ;7A~1LKheoMK@q*Pa>}IZb2WP+((Am6c6PixpH>4&iKINV;HbVh|FTZs;@}Bx%dM zpl6$48_<}>Qi+6#K%qHS3``u$`5G7wtz=ecm{7W*!{hafmxYc@yg*(_!HZ9?nw{7r zGORuoF)*@RKe+Jp8h++IyPO^Yc~=$JtY#K}cKKmSVk$F-LI=7Ft5=!bFVdQ&MBb@0M#DENB{r; literal 0 HcmV?d00001 diff --git a/src/icons/hidden-lines.png b/src/icons/hidden-lines.png new file mode 100644 index 0000000000000000000000000000000000000000..35ea04b21340a6976600fa67b3bab7ce86f1eaa0 GIT binary patch literal 544 zcmV+*0^j|KP)(_`g8%^e{{R4h=l}px2mk>USO5SzmjD14Z`WEM zkN^Myrb$FWRCwCdRxzr=Kop$)A&{t`D1u-k0R?T68+ZfnVd)XXdni~~3RYggcDJ<< zPhhO<)a?A?qa?Z;{d_F`gK1vgo7vsG9aaD!J{Vv4aJ&?l&1TSA{|aRGP-sG>QsHvB zBuREU9op({a9x+<@tB9hf&5Xp!A!1{;%2jXEVg1YnJ|uHhGCd5&}y|PrQ~Y0A^_Iw z^<3gcqrt^u!QF1hFboO6E)Yc#kH;hD^Eqp^8UauUVI?mV3S6((lv1)>F5mM;fhdX? z$1z8vQHJDlxfscVAfS|zN~sL_qky=pkRS=Ib!Gw_$3c=L#tCyA2SSLaJjqPnw5>ae z#iI3yY(3T;m{yY)ww`qU>m8E+Z56KTepbNqJnOgf`TTc*)9D1QHJZ&PeBZ}*yM@*o z)oK+5zqu1+Y%+wJztaZH=tU@&;T$?0O>_o$8$ z>>lc}#h&L8086FPO9v%sG&`%n&FqH5VXn!gdrW3$6)>5d4M7l)q|xlG0$OWcuh+LR iolajaMEv_##rFVq{XdKSQl7{F0000oU&Gpo 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 WLQ`h$%F^GmyLjI2T=AJ3kN*#1E;ls* literal 0 HcmV?d00001 diff --git a/src/icons/in3d.png b/src/icons/in3d.png new file mode 100644 index 0000000000000000000000000000000000000000..0d6be0760e134b6f34e2af3ac13cb9654a03b916 GIT binary patch literal 26608 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